diff options
Diffstat (limited to 'utils/secret.ts')
-rw-r--r-- | utils/secret.ts | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/utils/secret.ts b/utils/secret.ts index eb2054b..0faa97c 100644 --- a/utils/secret.ts +++ b/utils/secret.ts @@ -1,35 +1,47 @@ -import { getRequiredEnv, getStdout, loggerWithPrefix } from "./mod.ts"; +import { + getRequiredEnv, + getStdout, + loggerWithPrefix, + type PrefixLogger, +} from "./mod.ts"; -const logger = loggerWithPrefix(() => - `[${new Date().toISOString()}] [BitwardenSession]` -); export class BitwardenSession { private readonly sessionInitializer: Promise<string>; + private readonly logger: PrefixLogger; - constructor(server = getRequiredEnv("BW_SERVER")) { + constructor( + server = getRequiredEnv("BW_SERVER"), + logger = loggerWithPrefix(), + ) { ["BW_CLIENTID", "BW_CLIENTSECRET"].forEach(getRequiredEnv); + const instanceId = crypto.randomUUID().split("-").at(0); + this.logger = logger.withAdditionalPrefix(() => + `[BitwardenSession.instance.${instanceId}]` + ); + this.sessionInitializer = getStdout( `bw config server ${server} --quiet`, ) .then(() => { - logger.log("Logging in via API"); + this.logger.log("logging in via api (˘ω˘)"); return getStdout(`bw login --apikey --quiet`); }) .then(() => { - logger.log("Unlocking vault in session"); + this.logger.log("unlocking the secret vault~ (◕ᴗ◕✿)"); return getStdout(`bw unlock --passwordenv BW_PASSWORD --raw`); }) .then((session) => { - logger.log(`Session ${session}`); - return session.trim(); + const _session = session.trim(); + this.logger.log(`got my session key (>ᴗ<) ${_session}`); + return _session; }); } public async getItem<T extends LoginItem | SecureNote>( secretName: string, ): Promise<T> { - logger.log(`Finding secret ${secretName}`); + this.logger.log(`looking for your secret ${secretName} (⑅˘꒳˘)`); return await this.sessionInitializer.then((session) => getStdout(`bw list items`, { env: { @@ -39,8 +51,12 @@ export class BitwardenSession { ).then((items) => JSON.parse(items)).then((items) => items.find(({ name }: { name: string }) => name === secretName) ).then((item) => { - if (!item) throw new Error("Could not find bitwarden item " + secretName); - logger.log(`Found secret: ${secretName}`); + if (!item) { + throw new Error( + "couldn't find the bitwarden item " + secretName + " (。•́︿•̀。)", + ); + } + this.logger.log(`yay! found secret: ${secretName} (*ˊᗜˋ*)`); return item; }); } @@ -49,7 +65,7 @@ export class BitwardenSession { return await this.sessionInitializer.then((session) => getStdout(`bw lock`, { env: { BW_SESSION: session } }) ).then(() => { - logger.log("Locked session"); + this.logger.log("all locked up and secure now~ (。•̀ᴗ-)✧"); }); } } |