Skip to content

Commit

Permalink
feat: use endpoint from .dicorc or fallback to production
Browse files Browse the repository at this point in the history
  • Loading branch information
lihbr committed May 27, 2021
1 parent d734832 commit ce4a6ec
Show file tree
Hide file tree
Showing 6 changed files with 82 additions and 70 deletions.
10 changes: 7 additions & 3 deletions src/commands/signin.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { CAC } from "cac";
import { logger } from "../lib";
import * as dicorc from "../core/dicorc";
import * as user from "../core/user";
import exit from "exit";

export const signin = async (_: CAC, token: string): Promise<void> => {
Expand All @@ -10,9 +10,13 @@ export const signin = async (_: CAC, token: string): Promise<void> => {
}

try {
const user = await dicorc.signin(token);
const signedInUser = await user.signin(token);
console.log("");
logger.success("Logged in as `%s <%s>`\n", user?.fullname, user?.email);
logger.success(
"Logged in as `%s <%s>`\n",
signedInUser?.fullname,
signedInUser?.email
);
} catch (error) {
if (error.status === 401) {
logger.error("Invalid token, make sure you copied it correctly!");
Expand Down
4 changes: 2 additions & 2 deletions src/commands/signout.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { CAC } from "cac";
import { logger } from "../lib";
import * as dicorc from "../core/dicorc";
import * as user from "../core/user";

export const signout = (_: CAC, __: { [key: string]: never }): void => {
dicorc.signout();
user.signout();
console.log("");
logger.success("Logged out\n");
};
11 changes: 8 additions & 3 deletions src/commands/whoami.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
import { CAC } from "cac";
import * as dicorc from "../core/dicorc";
import * as user from "../core/user";
import { logger } from "../lib";

export const whoami = async (
_: CAC,
__: { [key: string]: never }
): Promise<void> => {
if (await dicorc.isSignedIn()) {
const { user } = dicorc.read();
if (await user.isSignedIn()) {
const { user: signedInUser } = dicorc.read();
console.log("");
logger.info("Logged in as `%s <%s>`\n", user?.fullname, user?.email);
logger.info(
"Logged in as `%s <%s>`\n",
signedInUser?.fullname,
signedInUser?.email
);
} else {
console.log("");
logger.info("Not logged in! Log in with command `login <token>`\n");
Expand Down
19 changes: 11 additions & 8 deletions src/core/client.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import _fetch from "node-fetch";
import { API_ENDPOINT } from "../lib";
import { Config } from "./dicorc";
import { API_ENDPOINT } from "../const";
import * as dicorc from "./dicorc";

export const fetch = async <R>(
endpoint: string,
Expand All @@ -19,10 +19,13 @@ export const fetch = async <R>(
});
}

const response = await _fetch(`${API_ENDPOINT}${endpoint}`, {
...options,
headers
});
const response = await _fetch(
`${dicorc.read().endpoint || API_ENDPOINT}${endpoint}`,
{
...options,
headers
}
);

const json = await response.json();

Expand All @@ -35,10 +38,10 @@ export const fetch = async <R>(

export const whoami = async (
token: string
): Promise<Required<Config>["user"]> => {
): Promise<Required<dicorc.Config>["user"]> => {
const {
data: { fullname, email }
} = await fetch<Required<Config>["user"]>("/whoami", token);
} = await fetch<Required<dicorc.Config>["user"]>("/whoami", token);

return {
token,
Expand Down
56 changes: 2 additions & 54 deletions src/core/dicorc.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import * as rc from "rc9";
import { RC_FILE } from "../lib";
import * as client from "./client";
import { RC_FILE } from "../const";

export interface Config {
user?: {
token: string;
fullname: string;
email: string;
};
endpoint?: string;
}

/**
Expand All @@ -30,55 +30,3 @@ export const write = (config: Config): void => {
export const update = (config: Config): void => {
rc.updateUser(config, RC_FILE);
};

/**
* Sign in used
*/
export const signin = async (
token: string
): Promise<Required<Config>["user"]> => {
const user = await client.whoami(token);

update({ user });

return user;
};

/**
* Sign out user
*/
export const signout = (): void => {
const config = read();

delete config.user;

write(config);
};

/**
* Check if user is signed in
*/
export const isSignedIn = async (): Promise<boolean> => {
const config = read();

if (!config.user) {
return false;
}

// Invalid token
if (config.user.token.length !== 64) {
signout();

return false;
}

try {
await client.whoami(config.user.token);
} catch (error) {
signout();

console.log(error);
}

return true;
};
52 changes: 52 additions & 0 deletions src/core/user.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import * as client from "./client";
import * as dicorc from "./dicorc";

/**
* Sign in used
*/
export const signin = async (
token: string
): Promise<Required<dicorc.Config>["user"]> => {
const user = await client.whoami(token);

dicorc.update({ user });

return user;
};

/**
* Sign out user
*/
export const signout = (): void => {
const config = dicorc.read();

delete config.user;

dicorc.write(config);
};

/**
* Check if user is signed in
*/
export const isSignedIn = async (): Promise<boolean> => {
const config = dicorc.read();

if (!config.user) {
return false;
}

// Invalid token
if (config.user.token.length !== 64) {
signout();

return false;
}

try {
await client.whoami(config.user.token);
} catch (error) {
throw error;
}

return true;
};

0 comments on commit ce4a6ec

Please sign in to comment.