summaryrefslogtreecommitdiff
path: root/utils/secret.ts
diff options
context:
space:
mode:
Diffstat (limited to 'utils/secret.ts')
-rw-r--r--utils/secret.ts42
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~ (。•̀ᴗ-)✧");
});
}
}