From ce4a6ece0a5c4dab93dace88a1fc21b25b1714a0 Mon Sep 17 00:00:00 2001 From: lihbr Date: Thu, 27 May 2021 14:03:55 +0200 Subject: [PATCH] feat: use endpoint from .dicorc or fallback to production --- src/commands/signin.ts | 10 +++++--- src/commands/signout.ts | 4 +-- src/commands/whoami.ts | 11 +++++--- src/core/client.ts | 19 ++++++++------ src/core/dicorc.ts | 56 ++--------------------------------------- src/core/user.ts | 52 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 82 insertions(+), 70 deletions(-) create mode 100644 src/core/user.ts diff --git a/src/commands/signin.ts b/src/commands/signin.ts index 112f98b..0558f3a 100644 --- a/src/commands/signin.ts +++ b/src/commands/signin.ts @@ -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 => { @@ -10,9 +10,13 @@ export const signin = async (_: CAC, token: string): Promise => { } 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!"); diff --git a/src/commands/signout.ts b/src/commands/signout.ts index 2ae300a..187a999 100644 --- a/src/commands/signout.ts +++ b/src/commands/signout.ts @@ -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"); }; diff --git a/src/commands/whoami.ts b/src/commands/whoami.ts index 57961b9..4298ba2 100644 --- a/src/commands/whoami.ts +++ b/src/commands/whoami.ts @@ -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 => { - 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 `\n"); diff --git a/src/core/client.ts b/src/core/client.ts index 451fdc1..f60e2e9 100644 --- a/src/core/client.ts +++ b/src/core/client.ts @@ -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 ( endpoint: string, @@ -19,10 +19,13 @@ export const fetch = async ( }); } - 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(); @@ -35,10 +38,10 @@ export const fetch = async ( export const whoami = async ( token: string -): Promise["user"]> => { +): Promise["user"]> => { const { data: { fullname, email } - } = await fetch["user"]>("/whoami", token); + } = await fetch["user"]>("/whoami", token); return { token, diff --git a/src/core/dicorc.ts b/src/core/dicorc.ts index a79a13e..d7a52ec 100644 --- a/src/core/dicorc.ts +++ b/src/core/dicorc.ts @@ -1,6 +1,5 @@ import * as rc from "rc9"; -import { RC_FILE } from "../lib"; -import * as client from "./client"; +import { RC_FILE } from "../const"; export interface Config { user?: { @@ -8,6 +7,7 @@ export interface Config { fullname: string; email: string; }; + endpoint?: string; } /** @@ -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["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 => { - 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; -}; diff --git a/src/core/user.ts b/src/core/user.ts new file mode 100644 index 0000000..38f2d2c --- /dev/null +++ b/src/core/user.ts @@ -0,0 +1,52 @@ +import * as client from "./client"; +import * as dicorc from "./dicorc"; + +/** + * Sign in used + */ +export const signin = async ( + token: string +): Promise["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 => { + 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; +};