credvault 0.11.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -21,13 +21,21 @@ npm install credvault
21
21
  | `ssmCredentialHistory(ssm, "/app/config/history")` | Every state a credential has had, one SSM parameter per site, a version per change (SSM keeps 100). Pass it as `history` to a push or `syncedCredentials`: a push keeps what the store held, then what it writes. It never deletes. `versions` names the fields that changed, never values. |
22
22
  | `ssmEnvStore(ssm, "/app/config")` | Named values (API keys, tokens), one SSM SecureString each. Each value is decrypted once per version per process (every read is a KMS request, billed past 20k a month). |
23
23
  | `envFileStore("~/.myapp/.env")` | The same, in a local 0600 `.env`. Expiry is a comment above the line. |
24
- | `syncedEnvStore(local, shared)` | A machine's `.env` in front of the shared store: every put lands in both (local first, so a mint is never lost; a refused shared write still throws), reads prefer the local copy. A token minted on a laptop is on every machine. |
24
+ | `syncedEnvStore(local, shared)` | A machine's `.env` in front of the shared store: every put lands in both (local first, so a mint is never lost; a refused shared write still throws), reads prefer the local copy. A token minted on a laptop is on every machine. A refused shared write is remembered (`unshared`, `unsharedFile(path)`: names only), and the next put or `share()` sends it. |
25
25
  | `put(name, value, { expiresAt })` + `expiring(list, ms)` | Record when a token stops working. List what lapses soon, without decrypting anything. |
26
26
  | `fileAudit(path)` | Where each secret went, one hash-chained line per use. `verifyChain` finds any edit. |
27
27
  | `canaryStore(store)` | Reading a tripwire credential records it, tells a person, and throws. |
28
28
  | `totp(seed)` | The current code from a TOTP seed. `findTotpSecret(pageText)` finds the seed on an enrollment page. |
29
29
  | `newPassword()` | 24 characters, every class, no look-alikes. |
30
30
  | `ownerCredentials({ roleArn, owner, region })` | One app, many owners: an AWS session tagged `owner=<owner>` from one shared role, renewed before it ends. `ownerSsmClient` wraps it; `ownerPath("/myapp", "acme")` = `/myapp/owners/acme`. |
31
+ | `apiKeySchema`, `ApiKey` | An API key as a credential: vendor (`site`), label (`account`), `owner`, `secret`, `purposes`, `status` (`live`, `spent` until a date, `revoked`), `via`, `vendorId`, `cap`, `previous`. The address is `site@account` (`keyAddress`, `parseKeyAddress`). No use count is stored: the audit has it. |
32
+ | `keyId(secret)`, `keyInfo(key)`, `liveAt(key, now)` | `keyId` is 12 hex characters of the secret's sha256: it names a key in a log. `keyInfo` is a key without its secret, with `address` and `id`; every listing returns that. `liveAt` is true for `live`, and for `spent` once `spentUntil` has passed. |
33
+ | `envKeys(store)`, `memoryKeys(init?)` | Keys in an `EnvStore`, one row per key (the key as JSON, named `keyRowName(address)`: `exa@env-1` is `EXA__ENV_1`). Point the store at its own SSM path: SSM keeps 100 versions of each row, which is the key's history. `put` refuses a purpose another unrevoked key of the same vendor and owner holds. `list` has no secrets. |
34
+ | `movePurposes(store, address, purposes)` | Gives a key purposes and takes them off the other keys of the same vendor and owner, in one call. The explicit move that `put` asks for. |
35
+ | `keysFor(store, { owner, vendor, purpose?, now? })` | The ring: the live keys of a vendor for an owner. The key with the purpose first, then the `default` key, then the rest by `madeAt` (ties by account, `env-2` before `env-10`). Each key once. |
36
+ | `projectKeys(keys)`, `applyProjection(store, keys)`, `projectionDiff(store, keys)` | The env view of the keys, one way. Per vendor: `<BASE>_API_KEY` from the `default` key, `<BASE>_API_KEY_1..n` from the rest in ring order, `NUM_<BASE>` = n. `applyProjection` writes only names that differ and removes stale ones. `projectionDiff` lists what would change as ids, never values: empty means env equals the vault. `parseVendorKeyName` and `isProjectedName` tell a projected name from any other. |
37
+ | `keyUses(uses)` | From the audit: per key id, the count of allowed uses and the time of the last. A key use is a `SecretUse` with `keyId`, `owner` and `reason` set. |
38
+ | `keysFromEnv(entries, { owner, madeAt })` | The migration piece. Each `<BASE>_API_KEY` is account `env-0` with purpose `default`, each `<BASE>_API_KEY_<n>` is `env-<n>`. A name above `NUM_<BASE>`, or a second name with the same value, is skipped and listed with its reason. Pure. |
31
39
 
32
40
  ## Example
33
41
 
package/dist/audit.d.ts CHANGED
@@ -1,15 +1,21 @@
1
1
  export interface SecretUse {
2
2
  at: string;
3
- /** The credential's store name (`google`, `google@will`). */
3
+ /** The credential's store name (`google`, `google@will`); for an API key, its address (`exa@env-1`). */
4
4
  credential: string;
5
5
  field: "password" | "previousPassword" | "secret";
6
- /** The site the session is on. */
6
+ /** The site the session is on; for an API key, the vendor. */
7
7
  site: string;
8
- /** The page, without its query (tokens ride in queries). */
8
+ /** The page, without its query (tokens ride in queries); for an API key, the endpoint. */
9
9
  url: string;
10
10
  /** Who used it: `login`, a flow name. */
11
11
  by: string;
12
12
  allowed: boolean;
13
+ /** Whose credential it was: `wren` or an owner name. */
14
+ owner?: string;
15
+ /** For an API key: its `keyId`, so a line names the key without the value. */
16
+ keyId?: string;
17
+ /** Why it was used, in a few words. */
18
+ reason?: string;
13
19
  }
14
20
  export interface SecretAudit {
15
21
  record(use: SecretUse): Promise<void>;
package/dist/audit.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAsBzC,kGAAkG;AAClG,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,IAAI,GAAG,WAAW,CAAY,IAAI,CAAC,CAAC;IAC1C,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,GAAG;YACd,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,OAAO;QACL,IAAI;QACJ,KAAK,CAAC,MAAM,CAAC,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE;YACjB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA4BzC,kGAAkG;AAClG,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,IAAI,GAAG,WAAW,CAAY,IAAI,CAAC,CAAC;IAC1C,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,GAAG;YACd,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,OAAO;QACL,IAAI;QACJ,KAAK,CAAC,MAAM,CAAC,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE;YACjB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/chain.js CHANGED
@@ -15,8 +15,9 @@ import { tailJson } from "./tail.js";
15
15
  /** Hash of one row: `prev`, then the row's fields in key order, so the value is stable however it was built. */
16
16
  export function rowHash(prev, row) {
17
17
  const fields = row;
18
+ // An undefined field is not in the JSON line, so it is not in the hash either.
18
19
  const keys = Object.keys(fields)
19
- .filter((k) => k !== "prev" && k !== "hash")
20
+ .filter((k) => k !== "prev" && k !== "hash" && fields[k] !== undefined)
20
21
  .sort();
21
22
  const h = createHash("sha256").update(prev);
22
23
  for (const k of keys)
package/dist/chain.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"chain.js","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chain.js","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAOrC,gHAAgH;AAChH,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,GAAW;IAC/C,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,+EAA+E;IAC/E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;SAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;SACtE,IAAI,EAAE,CAAC;IACV,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAqBD,MAAM,UAAU,WAAW,CAAmB,IAAY;IACxD,IAAI,KAAK,GAA2B,IAAI,CAAC;IACzC,6EAA6E;IAC7E,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,KAAK,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,GAAG,EAAE,CAClB,CAAC,KAAK,KAAK,CAAC,KAAK,IAAI,EAAE;QACrB,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7D,MAAM,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,QAAQ,CAAmB,IAAI,EAAE,CAAC,CAAC,CAAC;QACzD,sFAAsF;QACtF,0EAA0E;QAC1E,GAAG,GAAG,OAAO,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,EAAE,CAAC,CAAC;IACR,OAAO;QACL,MAAM,CAAC,GAAG;YACR,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBACjC,MAAM,MAAM,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC/D,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBACxE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;gBACnB,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE;YACjB,OAAO,QAAQ,CAAc,IAAI,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAY;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5D,MAAM,IAAI,OAAO,CAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACvF,OAAO,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,sGAAsG;AACtG,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/B,IAAI,KAAK;QAAE,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,IAAI;gBAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjF,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY;IAC5C,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACvE,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpC,yFAAyF;IACzF,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QACjB,IAAI,QAAQ,KAAK,IAAI;YAAE,SAAS;QAChC,IAAI,GAA4B,CAAC;QACjC,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,CAAC,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACxC,SAAS,EAAE,CAAC;YACZ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,SAAS,IAAI,SAAS,GAAG,CAAC;YAAE,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;YAAE,QAAQ,GAAG,CAAC,CAAC;;YAClE,IAAI,GAAG,GAAG,CAAC,IAAc,CAAC;IACjC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,KAAK,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC9D,CAAC"}
@@ -53,7 +53,26 @@ export declare function memoryEnvStore(initial?: Record<string, string>): EnvSto
53
53
  * all the same (the value is not durable yet). Reads prefer the local copy
54
54
  * and fall through to the shared store for what it lacks.
55
55
  */
56
- export declare function syncedEnvStore(local: EnvStore, shared: EnvStore): EnvStore;
56
+ export declare function syncedEnvStore(local: EnvStore, shared: EnvStore, o?: {
57
+ unshared?: Unshared;
58
+ }): SyncedEnvStore;
59
+ /** A synced store, and the one call that sends what a refused shared write left on this machine. */
60
+ export interface SyncedEnvStore extends EnvStore {
61
+ /** Put every unshared name's local value into the shared store; answers the names sent. */
62
+ share(): Promise<string[]>;
63
+ }
64
+ /** Names whose last put reached only this machine. Names only, never values. */
65
+ export interface Unshared {
66
+ names(): string[];
67
+ add(name: string): void;
68
+ drop(name: string): void;
69
+ }
70
+ export declare function memoryUnshared(): Unshared;
71
+ /**
72
+ * Unshared names in a file (a JSON array, 0600), so they outlive the process: a token minted while
73
+ * the shared store refused writes is sent by the next process that reaches it.
74
+ */
75
+ export declare function unsharedFile(path: string): Unshared;
57
76
  /**
58
77
  * A local `.env` as a store: 0600, one line per name, other lines untouched.
59
78
  * Expiry is a comment directly above the line, so a person reading the file
package/dist/env-store.js CHANGED
@@ -196,8 +196,30 @@ export function memoryEnvStore(initial = {}) {
196
196
  * all the same (the value is not durable yet). Reads prefer the local copy
197
197
  * and fall through to the shared store for what it lacks.
198
198
  */
199
- export function syncedEnvStore(local, shared) {
199
+ export function syncedEnvStore(local, shared, o = {}) {
200
+ const unshared = o.unshared ?? memoryUnshared();
201
+ /** Each name whose last put stayed here: its local value, with its expiry, into the shared store. */
202
+ async function share() {
203
+ const names = unshared.names();
204
+ if (!names.length)
205
+ return [];
206
+ const [values, listed] = await Promise.all([local.getMany(names), local.list()]);
207
+ const expiry = new Map(listed.map((e) => [e.name, e.expiresAt]));
208
+ const sent = [];
209
+ for (const name of names) {
210
+ const value = values[name];
211
+ // Gone from this machine since: nothing is left to share.
212
+ if (value !== undefined) {
213
+ const expiresAt = expiry.get(name) ?? undefined;
214
+ await shared.put(name, value, expiresAt ? { expiresAt } : {});
215
+ sent.push(name);
216
+ }
217
+ unshared.drop(name);
218
+ }
219
+ return sent;
220
+ }
200
221
  return {
222
+ share,
201
223
  async list() {
202
224
  const [mine, theirs] = await Promise.all([local.list(), shared.list()]);
203
225
  const byName = new Map(theirs.map((e) => [e.name, e]));
@@ -221,19 +243,68 @@ export function syncedEnvStore(local, shared) {
221
243
  },
222
244
  async put(name, value, o) {
223
245
  await local.put(name, value, o);
246
+ // Remembered before the shared write: a crash in between still shares it later.
247
+ unshared.add(name);
224
248
  try {
225
249
  await shared.put(name, value, o);
250
+ unshared.drop(name);
226
251
  }
227
252
  catch (err) {
228
- throw new Error(`${name} kept on this machine only; the shared store refused it (${err instanceof Error ? err.message : String(err)}): push it once it answers`);
253
+ throw new Error(`${name} kept on this machine only; the shared store refused it (${err instanceof Error ? err.message : String(err)}): the next put or share() sends it`);
229
254
  }
255
+ // The shared store answers again: what an earlier put left here goes too.
256
+ await share().catch(() => undefined);
230
257
  },
231
258
  async remove(name) {
232
259
  const [a, b] = await Promise.all([local.remove(name), shared.remove(name)]);
260
+ unshared.drop(name);
233
261
  return a || b;
234
262
  },
235
263
  };
236
264
  }
265
+ export function memoryUnshared() {
266
+ const set = new Set();
267
+ return {
268
+ names: () => [...set].sort(),
269
+ add: (n) => void set.add(n),
270
+ drop: (n) => void set.delete(n),
271
+ };
272
+ }
273
+ /**
274
+ * Unshared names in a file (a JSON array, 0600), so they outlive the process: a token minted while
275
+ * the shared store refused writes is sent by the next process that reaches it.
276
+ */
277
+ export function unsharedFile(path) {
278
+ const read = () => {
279
+ if (!existsSync(path))
280
+ return [];
281
+ try {
282
+ const v = JSON.parse(readFileSync(path, "utf8"));
283
+ return Array.isArray(v) ? v.filter((n) => typeof n === "string") : [];
284
+ }
285
+ catch {
286
+ return [];
287
+ }
288
+ };
289
+ const write = (names) => {
290
+ const tmp = `${path}.tmp`;
291
+ writeFileSync(tmp, `${JSON.stringify([...new Set(names)].sort())}\n`, { mode: 0o600 });
292
+ renameSync(tmp, path);
293
+ };
294
+ return {
295
+ names: read,
296
+ add: (n) => {
297
+ const now = read();
298
+ if (!now.includes(n))
299
+ write([...now, n]);
300
+ },
301
+ drop: (n) => {
302
+ const now = read();
303
+ if (now.includes(n))
304
+ write(now.filter((x) => x !== n));
305
+ },
306
+ };
307
+ }
237
308
  /** The comment above a line that says when its value stops working: `# NAME expires <ISO>`. */
238
309
  const EXPIRY_LINE = /^# ([A-Z][A-Z0-9_]*) expires (\S+)$/;
239
310
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"env-store.js","sourceRoot":"","sources":["../src/env-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,GAEpB,MAAM,qBAAqB,CAAC;AAE7B,6GAA6G;AAC7G,KAAK,UAAU,OAAO,CACpB,IAAsB,EACtB,QAAQ,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE7D,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,SAAS,GACb,GAAG,YAAY,KAAK;gBACpB,CAAC,GAAG,CAAC,IAAI,KAAK,qBAAqB,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7E,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC;gBAAE,MAAM,GAAG,CAAC;YAC1C,MAAM,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,mBAAmB,CAAC;AAmC3C;;;GAGG;AACH,MAAM,UAAU,QAAQ,CACtB,OAA8B,EAC9B,QAAgB,EAChB,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAEhB,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC;SAChF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,uFAAuF;AACvF,MAAM,OAAO,GAAG,UAAU,CAAC;AAC3B,MAAM,QAAQ,GAAG,CAAC,IAAgB,EAAE,EAAE,EAAE,CACtC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;AACjF,MAAM,QAAQ,GAAG,CAAC,WAA+B,EAAiB,EAAE,CAClE,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAE9E,oFAAoF;AACpF,MAAM,UAAU,WAAW,CAAC,GAAc,EAAE,MAAc;IACxD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;QACxE,OAAO,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC;IAC7B,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5E,MAAM,MAAM,GAAG,CAA6B,IAAS,EAAE,EAAE,CACvD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,2EAA2E;IAC3E,sDAAsD;IACtD,IAAI,MAAM,GAAuD,IAAI,CAAC;IACtE,MAAM,aAAa,GAAG,KAAK,CAAC;IAC5B,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,MAAM,GAAG,GAAiB,EAAE,CAAC;QAC7B,IAAI,IAAwB,CAAC;QAC7B,GAAG,CAAC;YACF,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,CAC3B,GAAG,CAAC,IAAI,CACN,IAAI,yBAAyB,CAAC;gBAC5B,gBAAgB,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzE,oDAAoD;gBACpD,UAAU,EAAE,EAAE;gBACd,SAAS,EAAE,IAAI;aAChB,CAAC,CACH,CACF,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE;gBAChC,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;oBACpB,SAAS,EAAE,CAAC,CAAC,gBAAgB,EAAE,WAAW,EAAE,IAAI,IAAI;oBACpD,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5C,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;iBACnC,CAAC,CAAC;YACL,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC;QACrB,CAAC,QAAQ,IAAI,EAAE;QACf,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,aAAa,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;YACvB,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;gBACd,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC;IACF,2EAA2E;IAC3E,uEAAuE;IACvE,uEAAuE;IACvE,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4C,CAAC;IAClE,MAAM,OAAO,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;IAC7E,MAAM,OAAO,GAAG,KAAK,EAAE,KAAe,EAAE,EAAE;QACxC,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,CACtB,IAAI,oBAAoB,CAAC;gBACvB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;gBACvC,cAAc,EAAE,IAAI;aACrB,CAAC,CACH,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE;gBAChC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS;oBAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QACxF,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,KAAK,EAAE,KAAe,EAAE,IAAkB,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;;gBAChD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM;YACb,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACzD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACX,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,KAAK;oBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,EAAE,KAAe,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrF,OAAO;QACL,IAAI;QACJ,KAAK,CAAC,GAAG;YACP,wEAAwE;YACxE,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;YAC7B,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,MAAM,MAAM,GAAG,MAAM,IAAI,CACvB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EACvB,IAAI,CACL,CAAC;YACF,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAClF,CAAC;QACD,OAAO;QACP,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI;QAC1D,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,WAAW,CAAC,CAAC;YAC3D,MAAM,GAAG,IAAI,CAAC;YACd,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,OAAO,CAAC,GAAG,EAAE,CACjB,GAAG,CAAC,IAAI,CACN,IAAI,mBAAmB,CAAC;gBACtB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;gBAChB,KAAK,EAAE,KAAK;gBACZ,kEAAkE;gBAClE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACxB,IAAI,EAAE,cAAc;gBACpB,2FAA2F;gBAC3F,IAAI,EAAE,qBAAqB;gBAC3B,SAAS,EAAE,IAAI;aAChB,CAAC,CACH,CACF,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,IAAI;YACf,MAAM,GAAG,IAAI,CAAC;YACd,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjE,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,iBAAiB;oBAAE,OAAO,KAAK,CAAC;gBACnD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,UAAkC,EAAE;IAGjE,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,OAAO;QACL,MAAM;QACN,IAAI,EAAE,KAAK,IAAI,EAAE,CACf,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;aAChB,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QACvF,GAAG,EAAE,KAAK,IAAI,EAAE,CACd,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;aACnB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI;QACzC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CACvB,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3F,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,IAAI;YACf,MAAM,GAAG,GAAG,IAAI,IAAI,MAAM,CAAC;YAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrB,OAAO,GAAG,CAAC;QACb,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,KAAe,EAAE,MAAgB;IAC9D,OAAO;QACL,KAAK,CAAC,IAAI;YACR,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACxE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,CAAC;YACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC;QACD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxE,KAAK,CAAC,OAAO,CAAC,KAAK;YACjB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YAC/C,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;QACzE,CAAC;QACD,KAAK,CAAC,GAAG;YACP,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,KAAK,MAAM,CAAC,IAAI,MAAM,KAAK,CAAC,GAAG,EAAE;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YACtB,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,4DAA4D,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAChJ,CAAC;YACJ,CAAC;QACH,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,IAAI;YACf,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,+FAA+F;AAC/F,MAAM,WAAW,GAAG,qCAAqC,CAAC;AAE1D;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,MAAyB,OAAO,CAAC,GAAG;IAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3E,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;YAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QACjC,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,GAAa,EAAE,EAAE;QAC9B,MAAM,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC;QAC1B,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7E,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC;IACF,oFAAoF;IACpF,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE;QAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACZ,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;YACxB,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI;gBAAE,SAAS;YAChD,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC7B,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;gBAChB,SAAS;YACX,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IACrB,CAAC,CAAC;IACF,OAAO;QACL,KAAK,CAAC,IAAI;YACR,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;YAC1C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;gBACxB,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC5C,IAAI;gBACJ,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI;aACrC,CAAC,CAAC,CAAC;QACN,CAAC;QACD,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACpC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI;QACpF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CACvB,MAAM,CAAC,WAAW,CAChB,WAAW,CAAC,IAAI,EAAE,CAAC;aAChB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CACjC;QACH,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;YACvE,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,cAAc,CAAC,CAAC;YAC3E,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;YACxF,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;YAChD,KAAK,CAAC,GAAG,CAAC,CAAC;YACX,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACpB,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,IAAI;YACf,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,EAAE,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YACzB,KAAK,CAAC,GAAG,CAAC,CAAC;YACX,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,QAA0C;IAClF,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QACnE,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI;aACd,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,IAAI,EAAE;aACN,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAChC,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;;YAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,SAAS;QAC5C,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5E,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,KAAK,GAAG,OAAO,CAAC;QAC5D,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,6HAA6H;AAC7H,MAAM,UAAU,QAAQ,CACtB,OAAmB,EACnB,KAA+C;IAE/C,OAAO,GAAG,OAAO;SACd,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;QACrD,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,8BAA8B,CAAC,CAAC;QACnE,OAAO,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;IACzC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACpB,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,SAAS,CAAC,OAAmB;IAC3C,OAAO,GAAG,OAAO;SACd,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;SAC5E,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACpB,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAAmB;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IACrC,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;;YACvB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"env-store.js","sourceRoot":"","sources":["../src/env-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,GAEpB,MAAM,qBAAqB,CAAC;AAE7B,6GAA6G;AAC7G,KAAK,UAAU,OAAO,CACpB,IAAsB,EACtB,QAAQ,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE7D,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,SAAS,GACb,GAAG,YAAY,KAAK;gBACpB,CAAC,GAAG,CAAC,IAAI,KAAK,qBAAqB,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7E,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC;gBAAE,MAAM,GAAG,CAAC;YAC1C,MAAM,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,mBAAmB,CAAC;AAmC3C;;;GAGG;AACH,MAAM,UAAU,QAAQ,CACtB,OAA8B,EAC9B,QAAgB,EAChB,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAEhB,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC;SAChF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,uFAAuF;AACvF,MAAM,OAAO,GAAG,UAAU,CAAC;AAC3B,MAAM,QAAQ,GAAG,CAAC,IAAgB,EAAE,EAAE,EAAE,CACtC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;AACjF,MAAM,QAAQ,GAAG,CAAC,WAA+B,EAAiB,EAAE,CAClE,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAE9E,oFAAoF;AACpF,MAAM,UAAU,WAAW,CAAC,GAAc,EAAE,MAAc;IACxD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;QACxE,OAAO,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC;IAC7B,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5E,MAAM,MAAM,GAAG,CAA6B,IAAS,EAAE,EAAE,CACvD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,2EAA2E;IAC3E,sDAAsD;IACtD,IAAI,MAAM,GAAuD,IAAI,CAAC;IACtE,MAAM,aAAa,GAAG,KAAK,CAAC;IAC5B,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,MAAM,GAAG,GAAiB,EAAE,CAAC;QAC7B,IAAI,IAAwB,CAAC;QAC7B,GAAG,CAAC;YACF,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,CAC3B,GAAG,CAAC,IAAI,CACN,IAAI,yBAAyB,CAAC;gBAC5B,gBAAgB,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzE,oDAAoD;gBACpD,UAAU,EAAE,EAAE;gBACd,SAAS,EAAE,IAAI;aAChB,CAAC,CACH,CACF,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE;gBAChC,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;oBACpB,SAAS,EAAE,CAAC,CAAC,gBAAgB,EAAE,WAAW,EAAE,IAAI,IAAI;oBACpD,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5C,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;iBACnC,CAAC,CAAC;YACL,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC;QACrB,CAAC,QAAQ,IAAI,EAAE;QACf,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,aAAa,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;YACvB,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;gBACd,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC;IACF,2EAA2E;IAC3E,uEAAuE;IACvE,uEAAuE;IACvE,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4C,CAAC;IAClE,MAAM,OAAO,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;IAC7E,MAAM,OAAO,GAAG,KAAK,EAAE,KAAe,EAAE,EAAE;QACxC,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,CACtB,IAAI,oBAAoB,CAAC;gBACvB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;gBACvC,cAAc,EAAE,IAAI;aACrB,CAAC,CACH,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE;gBAChC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS;oBAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QACxF,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,KAAK,EAAE,KAAe,EAAE,IAAkB,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;;gBAChD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM;YACb,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACzD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACX,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,KAAK;oBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,EAAE,KAAe,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrF,OAAO;QACL,IAAI;QACJ,KAAK,CAAC,GAAG;YACP,wEAAwE;YACxE,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;YAC7B,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,MAAM,MAAM,GAAG,MAAM,IAAI,CACvB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EACvB,IAAI,CACL,CAAC;YACF,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAClF,CAAC;QACD,OAAO;QACP,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI;QAC1D,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,WAAW,CAAC,CAAC;YAC3D,MAAM,GAAG,IAAI,CAAC;YACd,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,OAAO,CAAC,GAAG,EAAE,CACjB,GAAG,CAAC,IAAI,CACN,IAAI,mBAAmB,CAAC;gBACtB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;gBAChB,KAAK,EAAE,KAAK;gBACZ,kEAAkE;gBAClE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACxB,IAAI,EAAE,cAAc;gBACpB,2FAA2F;gBAC3F,IAAI,EAAE,qBAAqB;gBAC3B,SAAS,EAAE,IAAI;aAChB,CAAC,CACH,CACF,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,IAAI;YACf,MAAM,GAAG,IAAI,CAAC;YACd,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjE,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,iBAAiB;oBAAE,OAAO,KAAK,CAAC;gBACnD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,UAAkC,EAAE;IAGjE,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,OAAO;QACL,MAAM;QACN,IAAI,EAAE,KAAK,IAAI,EAAE,CACf,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;aAChB,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QACvF,GAAG,EAAE,KAAK,IAAI,EAAE,CACd,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;aACnB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI;QACzC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CACvB,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3F,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,IAAI;YACf,MAAM,GAAG,GAAG,IAAI,IAAI,MAAM,CAAC;YAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrB,OAAO,GAAG,CAAC;QACb,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAe,EACf,MAAgB,EAChB,IAA6B,EAAE;IAE/B,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,cAAc,EAAE,CAAC;IAChD,qGAAqG;IACrG,KAAK,UAAU,KAAK;QAClB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACjF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B,0DAA0D;YAC1D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;gBAChD,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC9D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,KAAK;QACL,KAAK,CAAC,IAAI;YACR,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACxE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,CAAC;YACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC;QACD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxE,KAAK,CAAC,OAAO,CAAC,KAAK;YACjB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YAC/C,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;QACzE,CAAC;QACD,KAAK,CAAC,GAAG;YACP,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,KAAK,MAAM,CAAC,IAAI,MAAM,KAAK,CAAC,GAAG,EAAE;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YACtB,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAChC,gFAAgF;YAChF,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;gBACjC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,4DAA4D,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,qCAAqC,CACzJ,CAAC;YACJ,CAAC;YACD,0EAA0E;YAC1E,MAAM,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,IAAI;YACf,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5E,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAeD,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE;QAC5B,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;KAChC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,IAAI,GAAG,GAAa,EAAE;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,CAAC,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1D,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,KAAe,EAAE,EAAE;QAChC,MAAM,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC;QAC1B,aAAa,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACvF,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC;IACF,OAAO;QACL,KAAK,EAAE,IAAI;QACX,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;YACT,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;YACV,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC;YACnB,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,+FAA+F;AAC/F,MAAM,WAAW,GAAG,qCAAqC,CAAC;AAE1D;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,MAAyB,OAAO,CAAC,GAAG;IAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3E,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;YAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QACjC,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,GAAa,EAAE,EAAE;QAC9B,MAAM,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC;QAC1B,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7E,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC;IACF,oFAAoF;IACpF,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE;QAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACZ,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;YACxB,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI;gBAAE,SAAS;YAChD,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC7B,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;gBAChB,SAAS;YACX,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IACrB,CAAC,CAAC;IACF,OAAO;QACL,KAAK,CAAC,IAAI;YACR,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;YAC1C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;gBACxB,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC5C,IAAI;gBACJ,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI;aACrC,CAAC,CAAC,CAAC;QACN,CAAC;QACD,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACpC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI;QACpF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CACvB,MAAM,CAAC,WAAW,CAChB,WAAW,CAAC,IAAI,EAAE,CAAC;aAChB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CACjC;QACH,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;YACvE,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,cAAc,CAAC,CAAC;YAC3E,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;YACxF,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;YAChD,KAAK,CAAC,GAAG,CAAC,CAAC;YACX,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACpB,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,IAAI;YACf,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,EAAE,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YACzB,KAAK,CAAC,GAAG,CAAC,CAAC;YACX,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,QAA0C;IAClF,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QACnE,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI;aACd,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,IAAI,EAAE;aACN,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAChC,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;;YAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,SAAS;QAC5C,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5E,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,KAAK,GAAG,OAAO,CAAC;QAC5D,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,6HAA6H;AAC7H,MAAM,UAAU,QAAQ,CACtB,OAAmB,EACnB,KAA+C;IAE/C,OAAO,GAAG,OAAO;SACd,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;QACrD,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,8BAA8B,CAAC,CAAC;QACnE,OAAO,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;IACzC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACpB,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,SAAS,CAAC,OAAmB;IAC3C,OAAO,GAAG,OAAO;SACd,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;SAC5E,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACpB,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAAmB;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IACrC,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;;YACvB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -3,8 +3,9 @@ export { type CanaryOptions, CanaryTripped, canaryCredential, canaryStore, isCan
3
3
  export { type Chained, type ChainedFile, chainedFile, rowHash, type Verification, verifyChain, } from "./chain.js";
4
4
  export { aesGcmCipher, type Cipher, isSealed, type KeychainItem, keychainKey, plainCipher, trustKeychainKey, } from "./cipher.js";
5
5
  export { CREDENTIAL_ENV_FIELDS, type Credential, type CredentialEnvStore, type CredentialInput, type CredentialStore, credentialEnv, credentialEnvName, credentialSchema, type EnvNaming, envCredentials, fileCredentials, layeredCredentials, memoryCredentials, type PushOptions, pullCredentials, pushCredentials, ROLE_NAME, type SeenVersions, type SharedCredentialStore, type SyncOptions, syncedCredentials, versionsFile, } from "./credentials.js";
6
- export { ENV_KEY, type EnvEntry, type EnvListing, type EnvStore, envFileStore, expiring, memoryEnvStore, type PutOptions, parseDotenv, ssmEnvStore, syncedEnvStore, toDotenv, toExports, upsertDotenv, } from "./env-store.js";
6
+ export { ENV_KEY, type EnvEntry, type EnvListing, type EnvStore, envFileStore, expiring, memoryEnvStore, memoryUnshared, type PutOptions, parseDotenv, type SyncedEnvStore, ssmEnvStore, syncedEnvStore, toDotenv, toExports, type Unshared, unsharedFile, upsertDotenv, } from "./env-store.js";
7
7
  export { type CredentialHistory, type CredentialVersion, changedFields, memoryCredentialHistory, ssmCredentialHistory, } from "./history.js";
8
+ export { type ApiKey, type ApiKeyInput, apiKeySchema, applyProjection, envKeys, isProjectedName, KEY_ACCOUNT, KEY_SITE, type KeyInfo, type KeyStore, type KeysForOptions, keyAddress, keyId, keyInfo, keyRowName, keysFor, keysFromEnv, keyUses, liveAt, memoryKeys, movePurposes, type ProjectionChange, type ProjectionOptions, parseKeyAddress, parseVendorKeyName, projectionDiff, projectKeys, vendorBase, } from "./keys.js";
8
9
  export { type AwsCredentials, checkOwner, OWNER_NAME, type OwnerSession, ownerCredentials, ownerPath, ownerSsmClient, } from "./owner.js";
9
10
  export { newPassword } from "./passwords.js";
10
11
  export { envSecrets, memorySecrets, type SecretSource, type TrackingSecrets, trackingSecrets, } from "./secrets.js";
package/dist/index.js CHANGED
@@ -3,8 +3,9 @@ export { CanaryTripped, canaryCredential, canaryStore, isCanary, } from "./canar
3
3
  export { chainedFile, rowHash, verifyChain, } from "./chain.js";
4
4
  export { aesGcmCipher, isSealed, keychainKey, plainCipher, trustKeychainKey, } from "./cipher.js";
5
5
  export { CREDENTIAL_ENV_FIELDS, credentialEnv, credentialEnvName, credentialSchema, envCredentials, fileCredentials, layeredCredentials, memoryCredentials, pullCredentials, pushCredentials, ROLE_NAME, syncedCredentials, versionsFile, } from "./credentials.js";
6
- export { ENV_KEY, envFileStore, expiring, memoryEnvStore, parseDotenv, ssmEnvStore, syncedEnvStore, toDotenv, toExports, upsertDotenv, } from "./env-store.js";
6
+ export { ENV_KEY, envFileStore, expiring, memoryEnvStore, memoryUnshared, parseDotenv, ssmEnvStore, syncedEnvStore, toDotenv, toExports, unsharedFile, upsertDotenv, } from "./env-store.js";
7
7
  export { changedFields, memoryCredentialHistory, ssmCredentialHistory, } from "./history.js";
8
+ export { apiKeySchema, applyProjection, envKeys, isProjectedName, KEY_ACCOUNT, KEY_SITE, keyAddress, keyId, keyInfo, keyRowName, keysFor, keysFromEnv, keyUses, liveAt, memoryKeys, movePurposes, parseKeyAddress, parseVendorKeyName, projectionDiff, projectKeys, vendorBase, } from "./keys.js";
8
9
  export { checkOwner, OWNER_NAME, ownerCredentials, ownerPath, ownerSsmClient, } from "./owner.js";
9
10
  export { newPassword } from "./passwords.js";
10
11
  export { envSecrets, memorySecrets, trackingSecrets, } from "./secrets.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAoC,MAAM,YAAY,CAAC;AACtF,OAAO,EAEL,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,QAAQ,GACT,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,WAAW,EACX,OAAO,EAEP,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EAEZ,QAAQ,EAER,WAAW,EACX,WAAW,EACX,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EAKrB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAEhB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EAEjB,eAAe,EACf,eAAe,EACf,SAAS,EAIT,iBAAiB,EACjB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,OAAO,EAIP,YAAY,EACZ,QAAQ,EACR,cAAc,EAEd,WAAW,EACX,WAAW,EACX,cAAc,EACd,QAAQ,EACR,SAAS,EACT,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGL,aAAa,EACb,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,UAAU,EACV,UAAU,EAEV,gBAAgB,EAChB,SAAS,EACT,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EACL,UAAU,EACV,aAAa,EAGb,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EAIZ,IAAI,EACJ,eAAe,GAChB,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAoC,MAAM,YAAY,CAAC;AACtF,OAAO,EAEL,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,QAAQ,GACT,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,WAAW,EACX,OAAO,EAEP,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EAEZ,QAAQ,EAER,WAAW,EACX,WAAW,EACX,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EAKrB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAEhB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EAEjB,eAAe,EACf,eAAe,EACf,SAAS,EAIT,iBAAiB,EACjB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,OAAO,EAIP,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,cAAc,EAEd,WAAW,EAEX,WAAW,EACX,cAAc,EACd,QAAQ,EACR,SAAS,EAET,YAAY,EACZ,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGL,aAAa,EACb,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAGL,YAAY,EACZ,eAAe,EACf,OAAO,EACP,eAAe,EACf,WAAW,EACX,QAAQ,EAIR,UAAU,EACV,KAAK,EACL,OAAO,EACP,UAAU,EACV,OAAO,EACP,WAAW,EACX,OAAO,EACP,MAAM,EACN,UAAU,EACV,YAAY,EAGZ,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,UAAU,GACX,MAAM,WAAW,CAAC;AACnB,OAAO,EAEL,UAAU,EACV,UAAU,EAEV,gBAAgB,EAChB,SAAS,EACT,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EACL,UAAU,EACV,aAAa,EAGb,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EAIZ,IAAI,EACJ,eAAe,GAChB,MAAM,WAAW,CAAC"}
package/dist/keys.d.ts ADDED
@@ -0,0 +1,166 @@
1
+ import { z } from "zod";
2
+ import type { SecretUse } from "./audit.js";
3
+ import { type EnvEntry, type EnvStore } from "./env-store.js";
4
+ /** A vendor: lowercase, starts with a letter (`anthropic`, `exa`, `google-maps`). */
5
+ export declare const KEY_SITE: RegExp;
6
+ /** A key's label: lowercase letters and digits with `.` and `-` inside (`autobrowse-prod`, `env-0`). */
7
+ export declare const KEY_ACCOUNT: RegExp;
8
+ export declare const apiKeySchema: z.ZodObject<{
9
+ site: z.ZodString;
10
+ account: z.ZodString;
11
+ owner: z.ZodString;
12
+ secret: z.ZodString;
13
+ via: z.ZodOptional<z.ZodString>;
14
+ vendorId: z.ZodOptional<z.ZodString>;
15
+ purposes: z.ZodDefault<z.ZodArray<z.ZodString>>;
16
+ status: z.ZodDefault<z.ZodEnum<{
17
+ live: "live";
18
+ spent: "spent";
19
+ revoked: "revoked";
20
+ }>>;
21
+ spentUntil: z.ZodOptional<z.ZodString>;
22
+ madeAt: z.ZodString;
23
+ revokedAt: z.ZodOptional<z.ZodString>;
24
+ cap: z.ZodOptional<z.ZodObject<{
25
+ amount: z.ZodNumber;
26
+ unit: z.ZodEnum<{
27
+ calls: "calls";
28
+ micros: "micros";
29
+ }>;
30
+ }, z.core.$strip>>;
31
+ previous: z.ZodDefault<z.ZodArray<z.ZodObject<{
32
+ id: z.ZodString;
33
+ vendorId: z.ZodOptional<z.ZodString>;
34
+ revokedAt: z.ZodString;
35
+ }, z.core.$strip>>>;
36
+ }, z.core.$strip>;
37
+ export type ApiKey = z.infer<typeof apiKeySchema>;
38
+ export type ApiKeyInput = z.input<typeof apiKeySchema>;
39
+ /** A key without its secret: what every listing returns. */
40
+ export type KeyInfo = Omit<ApiKey, "secret"> & {
41
+ address: string;
42
+ id: string;
43
+ };
44
+ /** A short name for a key that is safe to log: sha256 of the secret, 12 hex characters. */
45
+ export declare const keyId: (secret: string) => string;
46
+ /** `site@account`. Throws, naming the rule broken, when either part is not valid. */
47
+ export declare function keyAddress(site: string, account: string): string;
48
+ export declare function parseKeyAddress(address: string): {
49
+ site: string;
50
+ account: string;
51
+ };
52
+ export declare function keyInfo(key: ApiKey): KeyInfo;
53
+ /** Live now: `live`, or `spent` with a `spentUntil` that has passed. `now` is epoch ms. */
54
+ export declare function liveAt(key: Pick<ApiKey, "status" | "spentUntil">, now?: number): boolean;
55
+ export interface KeyStore {
56
+ get(address: string): Promise<ApiKey | null>;
57
+ /** The address comes from `site` and `account`. Refuses a purpose another live key of the owner holds. */
58
+ put(key: ApiKeyInput): Promise<ApiKey>;
59
+ /** Every key without its secret, sorted by address. */
60
+ list(): Promise<KeyInfo[]>;
61
+ remove(address: string): Promise<boolean>;
62
+ }
63
+ /** The row a key sits in: the address as an env name (`exa@env-1` is `EXA__ENV_1`). */
64
+ export declare function keyRowName(address: string): string;
65
+ /**
66
+ * Keys in an `EnvStore`, one row per key: the value is the key as JSON, the
67
+ * name is `keyRowName(address)`. Point the store at a place of its own (SSM
68
+ * keeps 100 versions of each row: the key's history).
69
+ */
70
+ export declare function envKeys(store: EnvStore): KeyStore;
71
+ /** Keys in memory, for tests and callers. `init` is put in without the purpose check. */
72
+ export declare function memoryKeys(init?: ApiKeyInput[]): KeyStore;
73
+ /**
74
+ * Gives `address` these purposes (added to the ones it has) and takes them
75
+ * off any other key of the same site and owner that can still be used.
76
+ * The others are written first, so a stop in between leaves a purpose with
77
+ * no holder, never two. Answers the keys that changed, the target first.
78
+ */
79
+ export declare function movePurposes(store: KeyStore, address: string, purposes: string[]): Promise<KeyInfo[]>;
80
+ export interface KeysForOptions {
81
+ owner: string;
82
+ vendor: string;
83
+ purpose?: string | undefined;
84
+ /** Epoch ms; default now. */
85
+ now?: number | undefined;
86
+ }
87
+ /**
88
+ * The live keys of `vendor` for `owner`, in ring order: the key holding
89
+ * `purpose`, then the `default` key, then the rest by `madeAt` (ties by
90
+ * account, `env-2` before `env-10`). The same key id appears once.
91
+ */
92
+ export declare function keysFor(store: KeyStore, o: KeysForOptions): Promise<ApiKey[]>;
93
+ /** `google-maps` is `GOOGLE_MAPS`: the stem of its env names. */
94
+ export declare const vendorBase: (site: string) => string;
95
+ /** `EXA_API_KEY` is `{ vendor: "exa", slot: null }`, `EXA_API_KEY_2` is slot 2; anything else is null. */
96
+ export declare function parseVendorKeyName(name: string): {
97
+ vendor: string;
98
+ slot: number | null;
99
+ } | null;
100
+ /**
101
+ * A name the projection owns: `X_API_KEY`, `X_API_KEY_<n>` or `NUM_X`. Any
102
+ * `NUM_<WORD>` counts: the name alone cannot tell a ring count from another setting.
103
+ */
104
+ export declare function isProjectedName(name: string): boolean;
105
+ /**
106
+ * The env names for a set of keys of one owner, per vendor: `<BASE>_API_KEY`
107
+ * from the first key in ring order (the `default` one when there is one),
108
+ * `<BASE>_API_KEY_1..n` from the rest, `NUM_<BASE>` = n when n > 0. Revoked
109
+ * keys are left out; a vendor whose keys are all revoked answers an empty
110
+ * list. Keys of several owners throw: project one owner at a time.
111
+ */
112
+ export declare function projectKeys(keys: ApiKey[]): Map<string, EnvEntry[]>;
113
+ export interface ProjectionOptions {
114
+ /** Project these vendors, even ones with no key left (their names are cleared). Default: the vendors in `keys`. */
115
+ vendors?: string[] | undefined;
116
+ }
117
+ /** One name where the store and the vault differ. Ids are `keyId`s; a `NUM_` row holds the number. */
118
+ export interface ProjectionChange {
119
+ name: string;
120
+ want: string | null;
121
+ have: string | null;
122
+ }
123
+ /**
124
+ * What `applyProjection` would change: the names whose stored value is not
125
+ * what the vault projects, as ids (never values). Empty means the env equals
126
+ * the vault.
127
+ */
128
+ export declare function projectionDiff(store: EnvStore, keys: ApiKey[], o?: ProjectionOptions): Promise<ProjectionChange[]>;
129
+ /**
130
+ * Makes the store's key names equal the vault's projection: puts each name
131
+ * whose value differs, removes stale `<BASE>_API_KEY_k` (k > n) and a stale
132
+ * `NUM_<BASE>`. A name already equal is not written. Puts go first, then
133
+ * removals. Answers names only.
134
+ */
135
+ export declare function applyProjection(store: EnvStore, keys: ApiKey[], o?: ProjectionOptions): Promise<{
136
+ put: string[];
137
+ removed: string[];
138
+ }>;
139
+ /**
140
+ * Per key id: how many allowed uses the audit holds and when the last one
141
+ * was. A key use is a `SecretUse` with `keyId` set (`credential` is the
142
+ * address, `field` is `secret`). Refused uses and rows without a `keyId` are left out.
143
+ */
144
+ export declare function keyUses(uses: SecretUse[]): Map<string, {
145
+ uses: number;
146
+ lastUsedAt: string;
147
+ }>;
148
+ /**
149
+ * The env store's keys as key inputs: `<BASE>_API_KEY` is account `env-0`
150
+ * with purpose `default`, `<BASE>_API_KEY_<n>` is `env-<n>`, all `live`, all
151
+ * `madeAt` the same time (the ring then orders them by account, which is
152
+ * `_1..n` again). `NUM_<BASE>` is read, not kept: a numbered name above it
153
+ * is skipped, as today's rings never read it. Within a vendor, one value
154
+ * under two names is kept once, at the lower slot. Pure: values pass through,
155
+ * and `skipped` names the entry and why, never a value.
156
+ */
157
+ export declare function keysFromEnv(entries: EnvEntry[], o: {
158
+ owner: string;
159
+ madeAt: string;
160
+ }): {
161
+ keys: ApiKeyInput[];
162
+ skipped: {
163
+ name: string;
164
+ why: string;
165
+ }[];
166
+ };
package/dist/keys.js ADDED
@@ -0,0 +1,489 @@
1
+ /**
2
+ * API keys as credentials. A key belongs to a vendor (`site`), has a label
3
+ * (`account`), an owner and purposes, and lives in an `EnvStore` one row per
4
+ * key, so it travels, syncs and keeps history like any other stored value.
5
+ * The ring (`keysFor`) and the env projection (`projectKeys`) are derived
6
+ * from the keys; env is a view of the vault, one way.
7
+ *
8
+ * No value goes into an error or a return other than `ApiKey` and the
9
+ * projection's entries. Errors name addresses, row names and ids.
10
+ */
11
+ import { createHash } from "node:crypto";
12
+ import { z } from "zod";
13
+ import { envSiteName, ROLE_NAME } from "./credentials.js";
14
+ import { memoryEnvStore } from "./env-store.js";
15
+ import { OWNER_NAME } from "./owner.js";
16
+ /** A vendor: lowercase, starts with a letter (`anthropic`, `exa`, `google-maps`). */
17
+ export const KEY_SITE = /^[a-z][a-z0-9-]{0,39}$/;
18
+ /** A key's label: lowercase letters and digits with `.` and `-` inside (`autobrowse-prod`, `env-0`). */
19
+ export const KEY_ACCOUNT = /^[a-z0-9][a-z0-9.-]{0,63}$/;
20
+ const iso = z.string().datetime();
21
+ export const apiKeySchema = z
22
+ .object({
23
+ /** The vendor. */
24
+ site: z.string().regex(KEY_SITE, "a site is a lowercase word (a-z, 0-9 and -), 40 at most"),
25
+ /** The label; with the site it makes the address `site@account`. */
26
+ account: z
27
+ .string()
28
+ .regex(KEY_ACCOUNT, "an account is lowercase letters, digits, . and -, 64 at most"),
29
+ /** `wren` (the operator) or an owner name. */
30
+ owner: z
31
+ .string()
32
+ .regex(OWNER_NAME, "an owner is lowercase letters, digits and _, starting with a letter"),
33
+ secret: z.string().trim().min(1),
34
+ /** The login credential the key was minted from (`anthropic@william`). */
35
+ via: z.string().min(1).optional(),
36
+ /** The vendor's own name or id for the key (the Console key name). */
37
+ vendorId: z.string().min(1).optional(),
38
+ /** What the key is for. `default` is the one the bare env name projects from. */
39
+ purposes: z
40
+ .array(z.string().regex(ROLE_NAME, "a purpose is a lowercase word (a-z, 0-9, . and -)"))
41
+ .default([]),
42
+ status: z.enum(["live", "spent", "revoked"]).default("live"),
43
+ /** When a spent key comes back. A spent key with no date stays out until it is put again. */
44
+ spentUntil: iso.optional(),
45
+ madeAt: iso,
46
+ revokedAt: iso.optional(),
47
+ /** A monthly cap. */
48
+ cap: z.object({ amount: z.number().positive(), unit: z.enum(["calls", "micros"]) }).optional(),
49
+ /** The keys this one replaced: ids and times, never a secret. */
50
+ previous: z
51
+ .array(z.object({
52
+ id: z.string().regex(/^[0-9a-f]{12}$/, "an id is 12 hex characters"),
53
+ vendorId: z.string().min(1).optional(),
54
+ revokedAt: iso,
55
+ }))
56
+ .default([]),
57
+ })
58
+ .refine((k) => k.status === "spent" || k.spentUntil === undefined, {
59
+ message: "spentUntil goes with status spent only",
60
+ path: ["spentUntil"],
61
+ })
62
+ .refine((k) => k.status === "revoked" || k.revokedAt === undefined, {
63
+ message: "revokedAt goes with status revoked only",
64
+ path: ["revokedAt"],
65
+ });
66
+ /** A short name for a key that is safe to log: sha256 of the secret, 12 hex characters. */
67
+ export const keyId = (secret) => createHash("sha256").update(secret).digest("hex").slice(0, 12);
68
+ /** `site@account`. Throws, naming the rule broken, when either part is not valid. */
69
+ export function keyAddress(site, account) {
70
+ if (!KEY_SITE.test(site))
71
+ throw new Error(`key site "${site}": a lowercase word (a-z, 0-9 and -), 40 at most`);
72
+ if (!KEY_ACCOUNT.test(account))
73
+ throw new Error(`key account "${account}": lowercase letters, digits, . and -, starting with a letter or digit, 64 at most`);
74
+ return `${site}@${account}`;
75
+ }
76
+ export function parseKeyAddress(address) {
77
+ const at = address.indexOf("@");
78
+ if (at < 0)
79
+ throw new Error(`key address "${address}": must be site@account`);
80
+ const site = address.slice(0, at);
81
+ const account = address.slice(at + 1);
82
+ keyAddress(site, account);
83
+ return { site, account };
84
+ }
85
+ export function keyInfo(key) {
86
+ const { secret, ...rest } = key;
87
+ return { ...rest, address: keyAddress(key.site, key.account), id: keyId(secret) };
88
+ }
89
+ /** Live now: `live`, or `spent` with a `spentUntil` that has passed. `now` is epoch ms. */
90
+ export function liveAt(key, now = Date.now()) {
91
+ if (key.status === "live")
92
+ return true;
93
+ return (key.status === "spent" && key.spentUntil !== undefined && Date.parse(key.spentUntil) <= now);
94
+ }
95
+ /** Digits compare as numbers, so `env-2` comes before `env-10`. */
96
+ function naturalCompare(a, b) {
97
+ const x = a.match(/\d+|\D+/g) ?? [];
98
+ const y = b.match(/\d+|\D+/g) ?? [];
99
+ for (let i = 0; i < Math.min(x.length, y.length); i++) {
100
+ const p = x[i];
101
+ const q = y[i];
102
+ if (p === q)
103
+ continue;
104
+ if (/^\d/.test(p) && /^\d/.test(q)) {
105
+ const pn = p.replace(/^0+(?=\d)/, "");
106
+ const qn = q.replace(/^0+(?=\d)/, "");
107
+ if (pn.length !== qn.length)
108
+ return pn.length - qn.length;
109
+ if (pn !== qn)
110
+ return pn < qn ? -1 : 1;
111
+ }
112
+ return p < q ? -1 : 1;
113
+ }
114
+ return x.length - y.length;
115
+ }
116
+ /**
117
+ * The one ring order: the key holding `purpose` (when given), then the
118
+ * `default` key, then the rest by `madeAt`; ties by account in natural order.
119
+ * `keysFor` and the env projection both use it.
120
+ */
121
+ function ringOrder(keys, purpose) {
122
+ const rank = (k) => purpose !== undefined && k.purposes.includes(purpose)
123
+ ? 0
124
+ : k.purposes.includes("default")
125
+ ? 1
126
+ : 2;
127
+ return [...keys].sort((a, b) => rank(a) - rank(b) ||
128
+ Date.parse(a.madeAt) - Date.parse(b.madeAt) ||
129
+ naturalCompare(a.account, b.account));
130
+ }
131
+ /** The row a key sits in: the address as an env name (`exa@env-1` is `EXA__ENV_1`). */
132
+ export function keyRowName(address) {
133
+ parseKeyAddress(address);
134
+ return envSiteName(address);
135
+ }
136
+ const addressOf = (k) => keyAddress(k.site, k.account);
137
+ /**
138
+ * Keys in an `EnvStore`, one row per key: the value is the key as JSON, the
139
+ * name is `keyRowName(address)`. Point the store at a place of its own (SSM
140
+ * keeps 100 versions of each row: the key's history).
141
+ */
142
+ export function envKeys(store) {
143
+ const parseRow = (name, raw) => {
144
+ let json;
145
+ try {
146
+ json = JSON.parse(raw);
147
+ }
148
+ catch {
149
+ // Not the parser's message: it quotes the start of the text.
150
+ throw new Error(`key row ${name}: not JSON`);
151
+ }
152
+ const parsed = apiKeySchema.safeParse(json);
153
+ if (!parsed.success)
154
+ throw new Error(`key row ${name}: ${parsed.error.issues.map((i) => `${i.path.join(".") || "row"} ${i.message}`).join("; ")}`);
155
+ const home = keyRowName(addressOf(parsed.data));
156
+ if (home !== name)
157
+ throw new Error(`key row ${name} holds ${addressOf(parsed.data)}, which belongs in ${home}`);
158
+ return parsed.data;
159
+ };
160
+ const readAll = async () => (await store.all()).map((e) => parseRow(e.name, e.value));
161
+ return {
162
+ async get(address) {
163
+ const name = keyRowName(address);
164
+ const raw = await store.get(name);
165
+ if (raw === null)
166
+ return null;
167
+ const key = parseRow(name, raw);
168
+ // Two addresses can share a row name (`x@a-.b` and `x@a.-b`): put refuses the second.
169
+ return addressOf(key) === address ? key : null;
170
+ },
171
+ async put(input) {
172
+ const key = apiKeySchema.parse(input);
173
+ const address = addressOf(key);
174
+ const name = keyRowName(address);
175
+ const there = await store.get(name);
176
+ if (there !== null) {
177
+ const held = addressOf(parseRow(name, there));
178
+ if (held !== address)
179
+ throw new Error(`key ${address}: row ${name} already holds ${held}`);
180
+ }
181
+ // A revoked key holds nothing, so only a key that can be used is checked.
182
+ if (key.status !== "revoked") {
183
+ for (const other of await readAll()) {
184
+ if (other.site !== key.site || other.owner !== key.owner || other.status === "revoked")
185
+ continue;
186
+ const otherAddress = addressOf(other);
187
+ if (otherAddress === address)
188
+ continue;
189
+ const shared = key.purposes.filter((p) => other.purposes.includes(p));
190
+ if (shared.length)
191
+ throw new Error(`key ${address}: ${otherAddress} already holds ${shared.join(", ")} for ${key.owner}; \`creds key purpose ${address} ${shared[0]}\` moves it`);
192
+ }
193
+ }
194
+ const row = JSON.stringify(key);
195
+ // An unchanged key writes nothing: no version churn in the key's history.
196
+ if (there !== row)
197
+ await store.put(name, row);
198
+ return key;
199
+ },
200
+ async list() {
201
+ return (await readAll()).map(keyInfo).sort((a, b) => naturalCompare(a.address, b.address));
202
+ },
203
+ async remove(address) {
204
+ const name = keyRowName(address);
205
+ const raw = await store.get(name);
206
+ if (raw === null)
207
+ return false;
208
+ try {
209
+ if (addressOf(parseRow(name, raw)) !== address)
210
+ return false;
211
+ }
212
+ catch {
213
+ // A row that does not parse is still this address's row: it can go.
214
+ }
215
+ return store.remove(name);
216
+ },
217
+ };
218
+ }
219
+ /** Keys in memory, for tests and callers. `init` is put in without the purpose check. */
220
+ export function memoryKeys(init = []) {
221
+ const rows = {};
222
+ for (const input of init) {
223
+ const key = apiKeySchema.parse(input);
224
+ rows[keyRowName(addressOf(key))] = JSON.stringify(key);
225
+ }
226
+ return envKeys(memoryEnvStore(rows));
227
+ }
228
+ /**
229
+ * Gives `address` these purposes (added to the ones it has) and takes them
230
+ * off any other key of the same site and owner that can still be used.
231
+ * The others are written first, so a stop in between leaves a purpose with
232
+ * no holder, never two. Answers the keys that changed, the target first.
233
+ */
234
+ export async function movePurposes(store, address, purposes) {
235
+ for (const p of purposes)
236
+ if (!ROLE_NAME.test(p))
237
+ throw new Error(`purpose "${p}": a lowercase word (a-z, 0-9, . and -)`);
238
+ const target = await store.get(address);
239
+ if (!target)
240
+ throw new Error(`no key ${address}`);
241
+ if (target.status === "revoked")
242
+ throw new Error(`key ${address} is revoked: it holds no purpose`);
243
+ const changed = [];
244
+ for (const info of await store.list()) {
245
+ if (info.address === address ||
246
+ info.site !== target.site ||
247
+ info.owner !== target.owner ||
248
+ info.status === "revoked" ||
249
+ !info.purposes.some((p) => purposes.includes(p)))
250
+ continue;
251
+ const other = await store.get(info.address);
252
+ if (!other)
253
+ continue;
254
+ const kept = other.purposes.filter((p) => !purposes.includes(p));
255
+ changed.push(keyInfo(await store.put({ ...other, purposes: kept })));
256
+ }
257
+ const next = [...new Set([...target.purposes, ...purposes])];
258
+ if (next.length !== target.purposes.length)
259
+ changed.unshift(keyInfo(await store.put({ ...target, purposes: next })));
260
+ return changed;
261
+ }
262
+ /**
263
+ * The live keys of `vendor` for `owner`, in ring order: the key holding
264
+ * `purpose`, then the `default` key, then the rest by `madeAt` (ties by
265
+ * account, `env-2` before `env-10`). The same key id appears once.
266
+ */
267
+ export async function keysFor(store, o) {
268
+ const now = o.now ?? Date.now();
269
+ const ring = ringOrder((await store.list()).filter((k) => k.site === o.vendor && k.owner === o.owner && liveAt(k, now)), o.purpose);
270
+ const out = [];
271
+ const seen = new Set();
272
+ for (const info of ring) {
273
+ if (seen.has(info.id))
274
+ continue;
275
+ seen.add(info.id);
276
+ const key = await store.get(info.address);
277
+ if (key)
278
+ out.push(key);
279
+ }
280
+ return out;
281
+ }
282
+ // ---------------------------------------------------------------------------
283
+ // The env projection
284
+ // ---------------------------------------------------------------------------
285
+ /** `google-maps` is `GOOGLE_MAPS`: the stem of its env names. */
286
+ export const vendorBase = (site) => site.toUpperCase().replace(/-/g, "_");
287
+ const KEY_NAME = /^([A-Z][A-Z0-9_]*)_API_KEY(?:_([1-9][0-9]*))?$/;
288
+ const NUM_NAME = /^NUM_([A-Z][A-Z0-9_]*)$/;
289
+ const vendorOfBase = (base) => {
290
+ const vendor = base.toLowerCase().replace(/_/g, "-");
291
+ return KEY_SITE.test(vendor) ? vendor : null;
292
+ };
293
+ /** `EXA_API_KEY` is `{ vendor: "exa", slot: null }`, `EXA_API_KEY_2` is slot 2; anything else is null. */
294
+ export function parseVendorKeyName(name) {
295
+ const m = KEY_NAME.exec(name);
296
+ const vendor = m?.[1] ? vendorOfBase(m[1]) : null;
297
+ if (!m || !vendor)
298
+ return null;
299
+ return { vendor, slot: m[2] === undefined ? null : Number(m[2]) };
300
+ }
301
+ /**
302
+ * A name the projection owns: `X_API_KEY`, `X_API_KEY_<n>` or `NUM_X`. Any
303
+ * `NUM_<WORD>` counts: the name alone cannot tell a ring count from another setting.
304
+ */
305
+ export function isProjectedName(name) {
306
+ if (parseVendorKeyName(name))
307
+ return true;
308
+ const m = NUM_NAME.exec(name);
309
+ return Boolean(m?.[1] && vendorOfBase(m[1]));
310
+ }
311
+ /**
312
+ * The env names for a set of keys of one owner, per vendor: `<BASE>_API_KEY`
313
+ * from the first key in ring order (the `default` one when there is one),
314
+ * `<BASE>_API_KEY_1..n` from the rest, `NUM_<BASE>` = n when n > 0. Revoked
315
+ * keys are left out; a vendor whose keys are all revoked answers an empty
316
+ * list. Keys of several owners throw: project one owner at a time.
317
+ */
318
+ export function projectKeys(keys) {
319
+ const owners = [...new Set(keys.map((k) => k.owner))].sort();
320
+ if (owners.length > 1)
321
+ throw new Error(`projectKeys: keys of several owners (${owners.join(", ")}); one at a time`);
322
+ const bySite = new Map();
323
+ for (const k of keys)
324
+ bySite.set(k.site, [...(bySite.get(k.site) ?? []), k]);
325
+ const out = new Map();
326
+ for (const site of [...bySite.keys()].sort()) {
327
+ const base = vendorBase(site);
328
+ const ring = ringOrder((bySite.get(site) ?? []).filter((k) => k.status !== "revoked"));
329
+ const entries = ring.map((k, i) => ({
330
+ name: i === 0 ? `${base}_API_KEY` : `${base}_API_KEY_${i}`,
331
+ value: k.secret,
332
+ }));
333
+ if (ring.length > 1)
334
+ entries.push({ name: `NUM_${base}`, value: String(ring.length - 1) });
335
+ out.set(site, entries);
336
+ }
337
+ return out;
338
+ }
339
+ const slotOrder = (name) => {
340
+ if (NUM_NAME.test(name))
341
+ return Number.POSITIVE_INFINITY;
342
+ return parseVendorKeyName(name)?.slot ?? 0;
343
+ };
344
+ async function planProjection(store, keys, o) {
345
+ const projected = projectKeys(keys);
346
+ const vendors = [...new Set(o.vendors ?? projected.keys())].sort();
347
+ const listed = (await store.list()).map((e) => e.name);
348
+ const steps = [];
349
+ for (const vendor of vendors) {
350
+ if (!KEY_SITE.test(vendor))
351
+ throw new Error(`projection: "${vendor}" is not a vendor name`);
352
+ const num = `NUM_${vendorBase(vendor)}`;
353
+ const wanted = new Map((projected.get(vendor) ?? []).map((e) => [e.name, e.value]));
354
+ const held = listed.filter((n) => n === num || parseVendorKeyName(n)?.vendor === vendor);
355
+ const names = [...new Set([...wanted.keys(), ...held])].sort((a, b) => slotOrder(a) - slotOrder(b));
356
+ const there = await store.getMany(names);
357
+ // A key compares by id; the count is a number, and anything else in its place by id too.
358
+ const mark = (name, v) => v === undefined ? null : name === num && /^\d{1,4}$/.test(v) ? v : keyId(v);
359
+ for (const name of names) {
360
+ const value = wanted.get(name) ?? null;
361
+ const want = mark(name, value ?? undefined);
362
+ const have = mark(name, there[name]);
363
+ if (want !== have)
364
+ steps.push({ name, want, have, value });
365
+ }
366
+ }
367
+ return steps;
368
+ }
369
+ /**
370
+ * What `applyProjection` would change: the names whose stored value is not
371
+ * what the vault projects, as ids (never values). Empty means the env equals
372
+ * the vault.
373
+ */
374
+ export async function projectionDiff(store, keys, o = {}) {
375
+ return (await planProjection(store, keys, o)).map(({ name, want, have }) => ({
376
+ name,
377
+ want,
378
+ have,
379
+ }));
380
+ }
381
+ /**
382
+ * Makes the store's key names equal the vault's projection: puts each name
383
+ * whose value differs, removes stale `<BASE>_API_KEY_k` (k > n) and a stale
384
+ * `NUM_<BASE>`. A name already equal is not written. Puts go first, then
385
+ * removals. Answers names only.
386
+ */
387
+ export async function applyProjection(store, keys, o = {}) {
388
+ const steps = await planProjection(store, keys, o);
389
+ const put = [];
390
+ const removed = [];
391
+ for (const s of steps) {
392
+ if (s.value === null)
393
+ continue;
394
+ await store.put(s.name, s.value);
395
+ put.push(s.name);
396
+ }
397
+ for (const s of steps) {
398
+ if (s.value !== null)
399
+ continue;
400
+ await store.remove(s.name);
401
+ removed.push(s.name);
402
+ }
403
+ return { put, removed };
404
+ }
405
+ // ---------------------------------------------------------------------------
406
+ // Audit
407
+ // ---------------------------------------------------------------------------
408
+ /**
409
+ * Per key id: how many allowed uses the audit holds and when the last one
410
+ * was. A key use is a `SecretUse` with `keyId` set (`credential` is the
411
+ * address, `field` is `secret`). Refused uses and rows without a `keyId` are left out.
412
+ */
413
+ export function keyUses(uses) {
414
+ const out = new Map();
415
+ for (const u of uses) {
416
+ if (!u.allowed || !u.keyId)
417
+ continue;
418
+ const had = out.get(u.keyId);
419
+ if (!had)
420
+ out.set(u.keyId, { uses: 1, lastUsedAt: u.at });
421
+ else
422
+ out.set(u.keyId, {
423
+ uses: had.uses + 1,
424
+ lastUsedAt: Date.parse(u.at) > Date.parse(had.lastUsedAt) ? u.at : had.lastUsedAt,
425
+ });
426
+ }
427
+ return out;
428
+ }
429
+ // ---------------------------------------------------------------------------
430
+ // Migration
431
+ // ---------------------------------------------------------------------------
432
+ /**
433
+ * The env store's keys as key inputs: `<BASE>_API_KEY` is account `env-0`
434
+ * with purpose `default`, `<BASE>_API_KEY_<n>` is `env-<n>`, all `live`, all
435
+ * `madeAt` the same time (the ring then orders them by account, which is
436
+ * `_1..n` again). `NUM_<BASE>` is read, not kept: a numbered name above it
437
+ * is skipped, as today's rings never read it. Within a vendor, one value
438
+ * under two names is kept once, at the lower slot. Pure: values pass through,
439
+ * and `skipped` names the entry and why, never a value.
440
+ */
441
+ export function keysFromEnv(entries, o) {
442
+ const counts = new Map();
443
+ for (const e of entries) {
444
+ const m = NUM_NAME.exec(e.name);
445
+ if (m?.[1])
446
+ counts.set(m[1], Number.parseInt(e.value, 10) || 0);
447
+ }
448
+ const keys = [];
449
+ const skipped = [];
450
+ const named = [];
451
+ for (const e of entries) {
452
+ const parsed = parseVendorKeyName(e.name);
453
+ if (parsed)
454
+ named.push({ ...e, ...parsed });
455
+ else if (/_API_KEY(?:_\d+)?$/.test(e.name))
456
+ skipped.push({ name: e.name, why: "not a vendor key name" });
457
+ }
458
+ named.sort((a, b) => a.vendor.localeCompare(b.vendor) || (a.slot ?? 0) - (b.slot ?? 0));
459
+ const first = new Map();
460
+ for (const e of named) {
461
+ const base = vendorBase(e.vendor);
462
+ if (e.slot !== null && e.slot > (counts.get(base) ?? 0)) {
463
+ skipped.push({ name: e.name, why: `past NUM_${base}` });
464
+ continue;
465
+ }
466
+ const secret = e.value.trim();
467
+ if (!secret) {
468
+ skipped.push({ name: e.name, why: "empty" });
469
+ continue;
470
+ }
471
+ const twin = first.get(`${e.vendor} ${secret}`);
472
+ if (twin) {
473
+ skipped.push({ name: e.name, why: `same key as ${twin}` });
474
+ continue;
475
+ }
476
+ first.set(`${e.vendor} ${secret}`, e.name);
477
+ keys.push({
478
+ site: e.vendor,
479
+ account: `env-${e.slot ?? 0}`,
480
+ owner: o.owner,
481
+ secret,
482
+ purposes: e.slot === null ? ["default"] : [],
483
+ status: "live",
484
+ madeAt: o.madeAt,
485
+ });
486
+ }
487
+ return { keys, skipped };
488
+ }
489
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "credvault",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "license": "PolyForm-Strict-1.0.0",
5
5
  "packageManager": "pnpm@9.15.0",
6
6
  "description": "Keep the credentials an automation signs in with: sealed at rest, shared through SSM, every use audited, expiries watched.",