UNPKG

zephyr-agent

Version:
69 lines (68 loc) • 2.61 kB
import "node:module"; import { randomBytes } from "node:crypto"; import { setInterval as promises_setInterval } from "node:timers/promises"; import { checkSync, lockSync } from "@bybrave/proper-lockfile2"; import { DEFAULT_AUTH_COMPLETION_TIMEOUT_MS } from "../auth/auth-flags.mjs"; import { ze_log } from "../logging/index.mjs"; import { ZE_SESSION_LOCK, ensurePrivateFilePermissions } from "./storage-keys.mjs"; import * as __rspack_external_node_fs_1b05aee1 from "node:fs"; const SESSION_LENGTH = 9; const UNLOCK_INTERVAL = 250; function getSessionKey() { let session = randomBytes(SESSION_LENGTH); const unlock = safeLockSync(); if (unlock) { ze_log.misc('Lock acquired, writing session key to lockfile'); __rspack_external_node_fs_1b05aee1.writeFileSync(ZE_SESSION_LOCK, session, { flush: true, mode: 384 }); ensurePrivateFilePermissions(ZE_SESSION_LOCK); } else { ensurePrivateFilePermissions(ZE_SESSION_LOCK); ze_log.misc('Lock is already held by another process, using the same session key'); session = __rspack_external_node_fs_1b05aee1.readFileSync(ZE_SESSION_LOCK); if (session.length !== SESSION_LENGTH) session = __rspack_external_node_fs_1b05aee1.readFileSync(ZE_SESSION_LOCK); } return { owner: !!unlock, session: session.toString('base64url'), [Symbol.dispose] () { unlock?.(); } }; } function safeLockSync(createIfNotExists = true) { try { return lockSync(ZE_SESSION_LOCK, { stale: DEFAULT_AUTH_COMPLETION_TIMEOUT_MS }); } catch (ex) { const error = ex; if ('ELOCKED' === error.code) return null; if ('ENOENT' === error.code && createIfNotExists) { try { __rspack_external_node_fs_1b05aee1.writeFileSync(ZE_SESSION_LOCK, '', { encoding: 'utf8', flag: 'wx', mode: 384 }); } catch (creationError) { if ('EEXIST' !== creationError.code) throw creationError; } ensurePrivateFilePermissions(ZE_SESSION_LOCK); return safeLockSync(false); } throw error; } } async function waitForUnlock(signal) { for await (const _ of promises_setInterval(UNLOCK_INTERVAL, null, { ref: false, signal }))if (!checkSync(ZE_SESSION_LOCK, { stale: DEFAULT_AUTH_COMPLETION_TIMEOUT_MS })) return; } export { getSessionKey, waitForUnlock }; //# sourceMappingURL=session-lock.mjs.map