oc-codex-multi-auth 6.21.0 → 6.22.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/LICENSE +21 -21
- package/README.md +729 -571
- package/assets/icon.svg +7 -7
- package/assets/opencode-logo-ornate-dark.svg +18 -18
- package/assets/readme-hero.svg +31 -31
- package/config/README.md +177 -177
- package/config/minimal-opencode.json +14 -14
- package/config/opencode-legacy.json +1496 -1496
- package/config/opencode-modern.json +555 -555
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +291 -53
- package/dist/index.js.map +1 -1
- package/dist/lib/account-display.d.ts +46 -0
- package/dist/lib/account-display.d.ts.map +1 -1
- package/dist/lib/account-display.js +260 -0
- package/dist/lib/account-display.js.map +1 -1
- package/dist/lib/accounts.d.ts +4 -0
- package/dist/lib/accounts.d.ts.map +1 -1
- package/dist/lib/accounts.js +20 -15
- package/dist/lib/accounts.js.map +1 -1
- package/dist/lib/auth/login-runner.d.ts.map +1 -1
- package/dist/lib/auth/login-runner.js +79 -2
- package/dist/lib/auth/login-runner.js.map +1 -1
- package/dist/lib/auto-update-checker.d.ts +17 -1
- package/dist/lib/auto-update-checker.d.ts.map +1 -1
- package/dist/lib/auto-update-checker.js +49 -3
- package/dist/lib/auto-update-checker.js.map +1 -1
- package/dist/lib/cli.d.ts +1 -0
- package/dist/lib/cli.d.ts.map +1 -1
- package/dist/lib/cli.js +9 -3
- package/dist/lib/cli.js.map +1 -1
- package/dist/lib/codex-usage.d.ts +4 -3
- package/dist/lib/codex-usage.d.ts.map +1 -1
- package/dist/lib/codex-usage.js +13 -11
- package/dist/lib/codex-usage.js.map +1 -1
- package/dist/lib/config.d.ts +75 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +152 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/context-overflow.js +10 -10
- package/dist/lib/desktop-notifications.js +6 -6
- package/dist/lib/oauth-success.js +202 -202
- package/dist/lib/plan-allotment.d.ts +72 -0
- package/dist/lib/plan-allotment.d.ts.map +1 -0
- package/dist/lib/plan-allotment.js +142 -0
- package/dist/lib/plan-allotment.js.map +1 -0
- package/dist/lib/plugin-origin.d.ts +77 -0
- package/dist/lib/plugin-origin.d.ts.map +1 -0
- package/dist/lib/plugin-origin.js +301 -0
- package/dist/lib/plugin-origin.js.map +1 -0
- package/dist/lib/prompts/codex-opencode-bridge.js +67 -67
- package/dist/lib/prompts/codex.js +75 -75
- package/dist/lib/quota-display.d.ts +40 -0
- package/dist/lib/quota-display.d.ts.map +1 -0
- package/dist/lib/quota-display.js +45 -0
- package/dist/lib/quota-display.js.map +1 -0
- package/dist/lib/quota-notifications.d.ts +2 -1
- package/dist/lib/quota-notifications.d.ts.map +1 -1
- package/dist/lib/quota-notifications.js +34 -14
- package/dist/lib/quota-notifications.js.map +1 -1
- package/dist/lib/quota-overview.d.ts +253 -0
- package/dist/lib/quota-overview.d.ts.map +1 -0
- package/dist/lib/quota-overview.js +707 -0
- package/dist/lib/quota-overview.js.map +1 -0
- package/dist/lib/request/retry-budget.d.ts +26 -0
- package/dist/lib/request/retry-budget.d.ts.map +1 -1
- package/dist/lib/request/retry-budget.js +43 -0
- package/dist/lib/request/retry-budget.js.map +1 -1
- package/dist/lib/schemas.d.ts +67 -0
- package/dist/lib/schemas.d.ts.map +1 -1
- package/dist/lib/schemas.js +53 -0
- package/dist/lib/schemas.js.map +1 -1
- package/dist/lib/storage/backup.d.ts +33 -0
- package/dist/lib/storage/backup.d.ts.map +1 -1
- package/dist/lib/storage/backup.js +43 -7
- package/dist/lib/storage/backup.js.map +1 -1
- package/dist/lib/storage/credential-snapshots.d.ts +78 -0
- package/dist/lib/storage/credential-snapshots.d.ts.map +1 -0
- package/dist/lib/storage/credential-snapshots.js +302 -0
- package/dist/lib/storage/credential-snapshots.js.map +1 -0
- package/dist/lib/storage/export-import.d.ts.map +1 -1
- package/dist/lib/storage/export-import.js +7 -0
- package/dist/lib/storage/export-import.js.map +1 -1
- package/dist/lib/storage/flagged.d.ts.map +1 -1
- package/dist/lib/storage/flagged.js +23 -1
- package/dist/lib/storage/flagged.js.map +1 -1
- package/dist/lib/storage/load-save.d.ts +4 -0
- package/dist/lib/storage/load-save.d.ts.map +1 -1
- package/dist/lib/storage/load-save.js +50 -0
- package/dist/lib/storage/load-save.js.map +1 -1
- package/dist/lib/storage/paths.d.ts +1 -0
- package/dist/lib/storage/paths.d.ts.map +1 -1
- package/dist/lib/storage/paths.js +1 -1
- package/dist/lib/storage/paths.js.map +1 -1
- package/dist/lib/storage/test-home-guard.d.ts +35 -0
- package/dist/lib/storage/test-home-guard.d.ts.map +1 -0
- package/dist/lib/storage/test-home-guard.js +59 -0
- package/dist/lib/storage/test-home-guard.js.map +1 -0
- package/dist/lib/tools/codex-dashboard.d.ts.map +1 -1
- package/dist/lib/tools/codex-dashboard.js +3 -2
- package/dist/lib/tools/codex-dashboard.js.map +1 -1
- package/dist/lib/tools/codex-doctor.d.ts.map +1 -1
- package/dist/lib/tools/codex-doctor.js +16 -0
- package/dist/lib/tools/codex-doctor.js.map +1 -1
- package/dist/lib/tools/codex-health.d.ts.map +1 -1
- package/dist/lib/tools/codex-health.js +10 -2
- package/dist/lib/tools/codex-health.js.map +1 -1
- package/dist/lib/tools/codex-label.d.ts.map +1 -1
- package/dist/lib/tools/codex-label.js +1 -0
- package/dist/lib/tools/codex-label.js.map +1 -1
- package/dist/lib/tools/codex-limits.d.ts.map +1 -1
- package/dist/lib/tools/codex-limits.js +13 -9
- package/dist/lib/tools/codex-limits.js.map +1 -1
- package/dist/lib/tools/codex-list.d.ts.map +1 -1
- package/dist/lib/tools/codex-list.js +28 -3
- package/dist/lib/tools/codex-list.js.map +1 -1
- package/dist/lib/tools/codex-note.d.ts.map +1 -1
- package/dist/lib/tools/codex-note.js +4 -1
- package/dist/lib/tools/codex-note.js.map +1 -1
- package/dist/lib/tools/codex-pool.d.ts.map +1 -1
- package/dist/lib/tools/codex-pool.js +6 -2
- package/dist/lib/tools/codex-pool.js.map +1 -1
- package/dist/lib/tools/codex-refresh.d.ts.map +1 -1
- package/dist/lib/tools/codex-refresh.js +4 -1
- package/dist/lib/tools/codex-refresh.js.map +1 -1
- package/dist/lib/tools/codex-remove.d.ts.map +1 -1
- package/dist/lib/tools/codex-remove.js +1 -0
- package/dist/lib/tools/codex-remove.js.map +1 -1
- package/dist/lib/tools/codex-reset.d.ts.map +1 -1
- package/dist/lib/tools/codex-reset.js +13 -7
- package/dist/lib/tools/codex-reset.js.map +1 -1
- package/dist/lib/tools/codex-status.d.ts.map +1 -1
- package/dist/lib/tools/codex-status.js +25 -2
- package/dist/lib/tools/codex-status.js.map +1 -1
- package/dist/lib/tools/codex-switch.d.ts.map +1 -1
- package/dist/lib/tools/codex-switch.js +1 -0
- package/dist/lib/tools/codex-switch.js.map +1 -1
- package/dist/lib/tools/codex-tag.d.ts.map +1 -1
- package/dist/lib/tools/codex-tag.js +4 -1
- package/dist/lib/tools/codex-tag.js.map +1 -1
- package/dist/lib/tools/codex-warm.d.ts.map +1 -1
- package/dist/lib/tools/codex-warm.js +1 -0
- package/dist/lib/tools/codex-warm.js.map +1 -1
- package/dist/lib/tools/index.d.ts +9 -0
- package/dist/lib/tools/index.d.ts.map +1 -1
- package/dist/lib/tools/index.js.map +1 -1
- package/dist/lib/tui-quota-cache.d.ts +35 -0
- package/dist/lib/tui-quota-cache.d.ts.map +1 -1
- package/dist/lib/tui-quota-cache.js +76 -11
- package/dist/lib/tui-quota-cache.js.map +1 -1
- package/dist/lib/tui-quota-overview.d.ts +55 -0
- package/dist/lib/tui-quota-overview.d.ts.map +1 -0
- package/dist/lib/tui-quota-overview.js +209 -0
- package/dist/lib/tui-quota-overview.js.map +1 -0
- package/dist/lib/tui-status.d.ts +55 -0
- package/dist/lib/tui-status.d.ts.map +1 -1
- package/dist/lib/tui-status.js +155 -14
- package/dist/lib/tui-status.js.map +1 -1
- package/dist/lib/ui/auth-menu.d.ts +2 -0
- package/dist/lib/ui/auth-menu.d.ts.map +1 -1
- package/dist/lib/ui/auth-menu.js +10 -6
- package/dist/lib/ui/auth-menu.js.map +1 -1
- package/dist/tui.d.ts +55 -0
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +511 -29
- package/dist/tui.js.map +1 -1
- package/package.json +155 -155
- package/scripts/audit-dev-allowlist.js +114 -114
- package/scripts/clean-dist.js +27 -27
- package/scripts/copy-oauth-success.js +47 -47
- package/scripts/install-oc-codex-multi-auth-core.js +2003 -1499
- package/scripts/install-oc-codex-multi-auth.js +37 -37
- package/scripts/test-all-models.sh +260 -260
- package/scripts/validate-model-map.sh +97 -97
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-write snapshots of the credential stores.
|
|
3
|
+
*
|
|
4
|
+
* The stores are the JSON files holding live refresh tokens: the V3 account
|
|
5
|
+
* store and the flagged-accounts file beside it, which retains quarantined
|
|
6
|
+
* records' refresh tokens so they can be restored later. Anything that
|
|
7
|
+
* replaces either wholesale — a bad merge, a test run that escaped
|
|
8
|
+
* its sandbox, a partial restore — takes the tokens with it, and a backup old
|
|
9
|
+
* enough to predate the last few refreshes restores accounts whose refresh
|
|
10
|
+
* tokens have since been rotated and are therefore dead. This module keeps a
|
|
11
|
+
* bounded ring of recent snapshots so there is always a *live-token* copy to
|
|
12
|
+
* restore from.
|
|
13
|
+
*
|
|
14
|
+
* Two decisions carry the design:
|
|
15
|
+
*
|
|
16
|
+
* 1. The snapshot captures the document already on disk, taken before the
|
|
17
|
+
* new one replaces it. Snapshotting the incoming document would be
|
|
18
|
+
* useless for the case this exists for: a clobber would simply be
|
|
19
|
+
* snapshotted as a clobber. What is worth keeping is the last good state.
|
|
20
|
+
*
|
|
21
|
+
* 2. Significance is a denylist, not an allowlist. Everything counts as a
|
|
22
|
+
* significant change unless it is explicitly ignored below. A field added
|
|
23
|
+
* to the schema later therefore cannot silently switch snapshots off; the
|
|
24
|
+
* worst it can do is cost one extra snapshot, which is recoverable, where
|
|
25
|
+
* a missing snapshot is not.
|
|
26
|
+
*/
|
|
27
|
+
import type { AccountStorageV3 } from "./migrations.js";
|
|
28
|
+
import type { FlaggedAccountStorageV1 } from "./flagged.js";
|
|
29
|
+
/**
|
|
30
|
+
* The documents this module diffs: the V3 account store and the V1
|
|
31
|
+
* flagged-account store. Both are `{ version, accounts }` JSON documents, and
|
|
32
|
+
* the significance projection below reads them generically, so the union is a
|
|
33
|
+
* name for the contract rather than a shape the code depends on. The import
|
|
34
|
+
* is type-only on purpose — `flagged.ts` calls back into this module at
|
|
35
|
+
* runtime.
|
|
36
|
+
*/
|
|
37
|
+
export type CredentialStoreDocument = AccountStorageV3 | FlaggedAccountStorageV1;
|
|
38
|
+
/**
|
|
39
|
+
* Filename prefix owned exclusively by this module.
|
|
40
|
+
*
|
|
41
|
+
* `backups/` is shared with `codex-pre-import-backup-*`, `codex-backup-*`,
|
|
42
|
+
* `*.migrated-to-keychain.*` and `pre-global-migration-*`. Retention deletes
|
|
43
|
+
* strictly by this prefix, because deleting one of those would be a
|
|
44
|
+
* data-loss bug inside a feature whose only purpose is preventing data loss.
|
|
45
|
+
*/
|
|
46
|
+
export declare const CREDENTIAL_SNAPSHOT_PREFIX = "codex-credential-snapshot";
|
|
47
|
+
export declare function isCredentialSnapshotFileName(name: string): boolean;
|
|
48
|
+
export declare function isSignificantStorageChange(previousContent: string, next: CredentialStoreDocument): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Delete all but the newest `maxCount` snapshots.
|
|
51
|
+
*
|
|
52
|
+
* `maxCount <= 0` keeps every snapshot; turning the feature off is the
|
|
53
|
+
* boolean setting's job, not a magic zero.
|
|
54
|
+
*/
|
|
55
|
+
export declare function pruneCredentialSnapshots(backupDirectory: string, maxCount: number): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Preserve the document currently at `storagePath` before it is replaced.
|
|
58
|
+
*
|
|
59
|
+
* `next` is the document about to be written, or `null` when the store is
|
|
60
|
+
* about to be deleted outright — deletion is unconditionally significant.
|
|
61
|
+
*
|
|
62
|
+
* Callers must already hold the storage lock, so the snapshot is consistent
|
|
63
|
+
* with the write it precedes.
|
|
64
|
+
*/
|
|
65
|
+
export declare function snapshotCredentialStoreBeforeWrite(storagePath: string, next: CredentialStoreDocument | null): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* {@link snapshotCredentialStoreBeforeWrite}, with every failure downgraded to
|
|
68
|
+
* a warning.
|
|
69
|
+
*
|
|
70
|
+
* A snapshot is a safety net, never a precondition. Letting a transient disk
|
|
71
|
+
* error fail the write it precedes would break a token refresh, and therefore
|
|
72
|
+
* the user's live sessions, to protect a copy of the file — strictly worse
|
|
73
|
+
* than having no snapshot. The one exception is the test-home guard: that
|
|
74
|
+
* exists to stop a test run writing over real credentials, so swallowing it
|
|
75
|
+
* would disarm it.
|
|
76
|
+
*/
|
|
77
|
+
export declare function trySnapshotCredentialStoreBeforeWrite(storagePath: string, next: CredentialStoreDocument | null): Promise<void>;
|
|
78
|
+
//# sourceMappingURL=credential-snapshots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-snapshots.d.ts","sourceRoot":"","sources":["../../../lib/storage/credential-snapshots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAiBH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAI5D;;;;;;;GAOG;AACH,MAAM,MAAM,uBAAuB,GAAG,gBAAgB,GAAG,uBAAuB,CAAC;AAEjF;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,8BAA8B,CAAC;AAoCtE,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElE;AAiED,wBAAgB,0BAA0B,CACxC,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAWT;AAmBD;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAiDf;AAED;;;;;;;;GAQG;AACH,wBAAsB,kCAAkC,CACtD,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,uBAAuB,GAAG,IAAI,GACnC,OAAO,CAAC,IAAI,CAAC,CA2Cf;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,qCAAqC,CACzD,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,uBAAuB,GAAG,IAAI,GACnC,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-write snapshots of the credential stores.
|
|
3
|
+
*
|
|
4
|
+
* The stores are the JSON files holding live refresh tokens: the V3 account
|
|
5
|
+
* store and the flagged-accounts file beside it, which retains quarantined
|
|
6
|
+
* records' refresh tokens so they can be restored later. Anything that
|
|
7
|
+
* replaces either wholesale — a bad merge, a test run that escaped
|
|
8
|
+
* its sandbox, a partial restore — takes the tokens with it, and a backup old
|
|
9
|
+
* enough to predate the last few refreshes restores accounts whose refresh
|
|
10
|
+
* tokens have since been rotated and are therefore dead. This module keeps a
|
|
11
|
+
* bounded ring of recent snapshots so there is always a *live-token* copy to
|
|
12
|
+
* restore from.
|
|
13
|
+
*
|
|
14
|
+
* Two decisions carry the design:
|
|
15
|
+
*
|
|
16
|
+
* 1. The snapshot captures the document already on disk, taken before the
|
|
17
|
+
* new one replaces it. Snapshotting the incoming document would be
|
|
18
|
+
* useless for the case this exists for: a clobber would simply be
|
|
19
|
+
* snapshotted as a clobber. What is worth keeping is the last good state.
|
|
20
|
+
*
|
|
21
|
+
* 2. Significance is a denylist, not an allowlist. Everything counts as a
|
|
22
|
+
* significant change unless it is explicitly ignored below. A field added
|
|
23
|
+
* to the schema later therefore cannot silently switch snapshots off; the
|
|
24
|
+
* worst it can do is cost one extra snapshot, which is recoverable, where
|
|
25
|
+
* a missing snapshot is not.
|
|
26
|
+
*/
|
|
27
|
+
import { promises as fs } from "node:fs";
|
|
28
|
+
import { join } from "node:path";
|
|
29
|
+
import { loadPluginConfig, getCredentialSnapshots, getCredentialSnapshotsMaxCount } from "../config.js";
|
|
30
|
+
import { createLogger } from "../logger.js";
|
|
31
|
+
import { createTimestampedBackupPathFor, getBackupDirectory, writeBackupFileContent, } from "./backup.js";
|
|
32
|
+
import { StorageError } from "./errors.js";
|
|
33
|
+
import { isKeychainOptInEnabled } from "./keychain.js";
|
|
34
|
+
import { assertTestRunNeverTouchesRealHome, TEST_HOME_ESCAPE_CODE, } from "./test-home-guard.js";
|
|
35
|
+
const log = createLogger("credential-snapshots");
|
|
36
|
+
/**
|
|
37
|
+
* Filename prefix owned exclusively by this module.
|
|
38
|
+
*
|
|
39
|
+
* `backups/` is shared with `codex-pre-import-backup-*`, `codex-backup-*`,
|
|
40
|
+
* `*.migrated-to-keychain.*` and `pre-global-migration-*`. Retention deletes
|
|
41
|
+
* strictly by this prefix, because deleting one of those would be a
|
|
42
|
+
* data-loss bug inside a feature whose only purpose is preventing data loss.
|
|
43
|
+
*/
|
|
44
|
+
export const CREDENTIAL_SNAPSHOT_PREFIX = "codex-credential-snapshot";
|
|
45
|
+
/**
|
|
46
|
+
* Document-level fields that never, on their own, justify a snapshot.
|
|
47
|
+
*
|
|
48
|
+
* The rotation cursor moves on essentially every request under the default
|
|
49
|
+
* hybrid strategy. Snapshotting on it would churn the whole ring away within
|
|
50
|
+
* minutes and leave nothing but cursor movements to restore from.
|
|
51
|
+
*/
|
|
52
|
+
const IGNORED_ROOT_FIELDS = new Set([
|
|
53
|
+
"activeIndex",
|
|
54
|
+
"activeIndexByFamily",
|
|
55
|
+
]);
|
|
56
|
+
/**
|
|
57
|
+
* Per-account fields that never, on their own, justify a snapshot.
|
|
58
|
+
*
|
|
59
|
+
* All of it is scheduling churn: it changes constantly, it is re-derived from
|
|
60
|
+
* upstream on the next request, and none of it is recoverable state. Note what
|
|
61
|
+
* is deliberately absent — `refreshToken`, `accessToken`, `expiresAt`,
|
|
62
|
+
* `tokenRotatedAt` — so every token refresh produces a snapshot. That is the
|
|
63
|
+
* case that matters most: a snapshot whose tokens are stale restores accounts
|
|
64
|
+
* that cannot authenticate.
|
|
65
|
+
*/
|
|
66
|
+
const IGNORED_ACCOUNT_FIELDS = new Set([
|
|
67
|
+
"lastUsed",
|
|
68
|
+
"lastSwitchReason",
|
|
69
|
+
"rateLimitResetTimes",
|
|
70
|
+
"rateLimitResetTime",
|
|
71
|
+
"coolingDownUntil",
|
|
72
|
+
"cooldownReason",
|
|
73
|
+
"quotaExhaustedUntil",
|
|
74
|
+
"quotaExhaustedStampAt",
|
|
75
|
+
"quotaExhaustedClearedAt",
|
|
76
|
+
]);
|
|
77
|
+
export function isCredentialSnapshotFileName(name) {
|
|
78
|
+
return name.startsWith(`${CREDENTIAL_SNAPSHOT_PREFIX}-`) && name.endsWith(".json");
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Sort keys and drop `undefined`-valued ones so two documents with identical
|
|
82
|
+
* content compare equal as strings.
|
|
83
|
+
*
|
|
84
|
+
* This is load-bearing rather than tidiness: the previous document comes from
|
|
85
|
+
* `JSON.parse`, so its key order is the file's, while the incoming one is
|
|
86
|
+
* built in code. Comparing their raw serializations would report a difference
|
|
87
|
+
* on every single write. Dropping `undefined` matches `JSON.stringify`, which
|
|
88
|
+
* omits those keys when the document is written, so an in-memory
|
|
89
|
+
* `{ email: undefined }` and an on-disk absent `email` are the same state.
|
|
90
|
+
*/
|
|
91
|
+
function canonicalize(value) {
|
|
92
|
+
if (Array.isArray(value))
|
|
93
|
+
return value.map(canonicalize);
|
|
94
|
+
if (value === null || typeof value !== "object")
|
|
95
|
+
return value;
|
|
96
|
+
const source = value;
|
|
97
|
+
const result = {};
|
|
98
|
+
for (const key of Object.keys(source).sort()) {
|
|
99
|
+
const entry = source[key];
|
|
100
|
+
if (entry === undefined)
|
|
101
|
+
continue;
|
|
102
|
+
result[key] = canonicalize(entry);
|
|
103
|
+
}
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
function projectAccount(account) {
|
|
107
|
+
if (account === null || typeof account !== "object" || Array.isArray(account)) {
|
|
108
|
+
return account;
|
|
109
|
+
}
|
|
110
|
+
const source = account;
|
|
111
|
+
const result = {};
|
|
112
|
+
for (const key of Object.keys(source)) {
|
|
113
|
+
if (IGNORED_ACCOUNT_FIELDS.has(key))
|
|
114
|
+
continue;
|
|
115
|
+
result[key] = source[key];
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* The document reduced to the parts a snapshot exists to preserve.
|
|
121
|
+
*
|
|
122
|
+
* Accounts are compared position-wise, so a reorder reads as significant. That
|
|
123
|
+
* is the intended bias: an extra snapshot costs one file, a missed one costs
|
|
124
|
+
* the credentials.
|
|
125
|
+
*/
|
|
126
|
+
function significantProjection(document) {
|
|
127
|
+
if (document === null || typeof document !== "object" || Array.isArray(document)) {
|
|
128
|
+
return JSON.stringify(canonicalize(document)) ?? "null";
|
|
129
|
+
}
|
|
130
|
+
const source = document;
|
|
131
|
+
const projected = {};
|
|
132
|
+
for (const key of Object.keys(source)) {
|
|
133
|
+
if (IGNORED_ROOT_FIELDS.has(key) || key === "accounts")
|
|
134
|
+
continue;
|
|
135
|
+
projected[key] = source[key];
|
|
136
|
+
}
|
|
137
|
+
const accounts = source.accounts;
|
|
138
|
+
projected.accounts = Array.isArray(accounts) ? accounts.map(projectAccount) : accounts;
|
|
139
|
+
return JSON.stringify(canonicalize(projected)) ?? "null";
|
|
140
|
+
}
|
|
141
|
+
export function isSignificantStorageChange(previousContent, next) {
|
|
142
|
+
let previous;
|
|
143
|
+
try {
|
|
144
|
+
previous = JSON.parse(previousContent);
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// A file that no longer parses is precisely the state worth preserving:
|
|
148
|
+
// the write about to happen replaces it, and whatever it held is then gone
|
|
149
|
+
// for good. Treat it as changed so it is captured before that happens.
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
return significantProjection(previous) !== significantProjection(next);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* POSIX-only hardening. Windows has no POSIX mode bits for `fs.chmod` to set,
|
|
156
|
+
* so the restriction is skipped there outright rather than reported as
|
|
157
|
+
* applied — snapshots on Windows rely on the profile directory's ACLs.
|
|
158
|
+
*/
|
|
159
|
+
async function restrictDirectoryMode(directory) {
|
|
160
|
+
if (process.platform === "win32")
|
|
161
|
+
return;
|
|
162
|
+
try {
|
|
163
|
+
await fs.chmod(directory, 0o700);
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
log.warn("Failed to restrict credential snapshot directory to 0700", {
|
|
167
|
+
path: directory,
|
|
168
|
+
error: String(error),
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Delete all but the newest `maxCount` snapshots.
|
|
174
|
+
*
|
|
175
|
+
* `maxCount <= 0` keeps every snapshot; turning the feature off is the
|
|
176
|
+
* boolean setting's job, not a magic zero.
|
|
177
|
+
*/
|
|
178
|
+
export async function pruneCredentialSnapshots(backupDirectory, maxCount) {
|
|
179
|
+
if (!Number.isFinite(maxCount) || maxCount <= 0)
|
|
180
|
+
return;
|
|
181
|
+
let entries;
|
|
182
|
+
try {
|
|
183
|
+
entries = await fs.readdir(backupDirectory);
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const candidates = entries.filter(isCredentialSnapshotFileName);
|
|
189
|
+
if (candidates.length <= maxCount)
|
|
190
|
+
return;
|
|
191
|
+
const dated = await Promise.all(candidates.map(async (name) => {
|
|
192
|
+
const full = join(backupDirectory, name);
|
|
193
|
+
let mtimeMs = Number.NEGATIVE_INFINITY;
|
|
194
|
+
let isFile = false;
|
|
195
|
+
try {
|
|
196
|
+
const stats = await fs.stat(full);
|
|
197
|
+
mtimeMs = stats.mtimeMs;
|
|
198
|
+
isFile = stats.isFile();
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
// Vanished between readdir and stat: leave it out rather than racing
|
|
202
|
+
// another process for the unlink.
|
|
203
|
+
}
|
|
204
|
+
return { full, name, mtimeMs, isFile };
|
|
205
|
+
}));
|
|
206
|
+
// Newest first. The embedded timestamp breaks mtime ties, which happens when
|
|
207
|
+
// several snapshots land inside one filesystem timestamp granule.
|
|
208
|
+
const ordered = dated
|
|
209
|
+
.filter((entry) => entry.isFile)
|
|
210
|
+
.sort((a, b) => {
|
|
211
|
+
if (b.mtimeMs !== a.mtimeMs)
|
|
212
|
+
return b.mtimeMs - a.mtimeMs;
|
|
213
|
+
return a.name < b.name ? 1 : a.name > b.name ? -1 : 0;
|
|
214
|
+
});
|
|
215
|
+
for (const stale of ordered.slice(maxCount)) {
|
|
216
|
+
try {
|
|
217
|
+
await fs.unlink(stale.full);
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
log.warn("Failed to prune credential snapshot", {
|
|
221
|
+
path: stale.full,
|
|
222
|
+
error: String(error),
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Preserve the document currently at `storagePath` before it is replaced.
|
|
229
|
+
*
|
|
230
|
+
* `next` is the document about to be written, or `null` when the store is
|
|
231
|
+
* about to be deleted outright — deletion is unconditionally significant.
|
|
232
|
+
*
|
|
233
|
+
* Callers must already hold the storage lock, so the snapshot is consistent
|
|
234
|
+
* with the write it precedes.
|
|
235
|
+
*/
|
|
236
|
+
export async function snapshotCredentialStoreBeforeWrite(storagePath, next) {
|
|
237
|
+
const config = loadPluginConfig();
|
|
238
|
+
if (!getCredentialSnapshots(config))
|
|
239
|
+
return;
|
|
240
|
+
// Scoped to the JSON backend, enforced here rather than at each call site.
|
|
241
|
+
// Under the keychain opt-in the authoritative pool lives in the OS keychain,
|
|
242
|
+
// and whatever JSON remains at `storagePath` is a pre-migration or
|
|
243
|
+
// write-fallback artefact. Copying it into `backups/` would put the whole
|
|
244
|
+
// token set in a plaintext file that a user who opted into the keychain
|
|
245
|
+
// asked us not to create, and it would archive a document that is already
|
|
246
|
+
// stale. Every write path - ordinary save, the JSON fallback after a failed
|
|
247
|
+
// keychain write, and `clearAccounts` - goes through here, so one check
|
|
248
|
+
// covers all of them.
|
|
249
|
+
if (isKeychainOptInEnabled())
|
|
250
|
+
return;
|
|
251
|
+
const backupDirectory = getBackupDirectory(storagePath);
|
|
252
|
+
assertTestRunNeverTouchesRealHome(backupDirectory);
|
|
253
|
+
let previousContent;
|
|
254
|
+
try {
|
|
255
|
+
previousContent = await fs.readFile(storagePath, "utf-8");
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
const code = error.code;
|
|
259
|
+
if (code !== "ENOENT") {
|
|
260
|
+
log.warn("Skipping credential snapshot: existing store is unreadable", {
|
|
261
|
+
path: storagePath,
|
|
262
|
+
error: String(error),
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
// No file yet is the ordinary first-write case: there is no previous state
|
|
266
|
+
// to preserve, which is not an error.
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
if (next !== null && !isSignificantStorageChange(previousContent, next))
|
|
270
|
+
return;
|
|
271
|
+
const snapshotPath = createTimestampedBackupPathFor(storagePath, CREDENTIAL_SNAPSHOT_PREFIX);
|
|
272
|
+
await fs.mkdir(backupDirectory, { recursive: true, mode: 0o700 });
|
|
273
|
+
await restrictDirectoryMode(backupDirectory);
|
|
274
|
+
await writeBackupFileContent(snapshotPath, previousContent);
|
|
275
|
+
log.info("Captured credential store snapshot", { path: snapshotPath });
|
|
276
|
+
await pruneCredentialSnapshots(backupDirectory, getCredentialSnapshotsMaxCount(config));
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* {@link snapshotCredentialStoreBeforeWrite}, with every failure downgraded to
|
|
280
|
+
* a warning.
|
|
281
|
+
*
|
|
282
|
+
* A snapshot is a safety net, never a precondition. Letting a transient disk
|
|
283
|
+
* error fail the write it precedes would break a token refresh, and therefore
|
|
284
|
+
* the user's live sessions, to protect a copy of the file — strictly worse
|
|
285
|
+
* than having no snapshot. The one exception is the test-home guard: that
|
|
286
|
+
* exists to stop a test run writing over real credentials, so swallowing it
|
|
287
|
+
* would disarm it.
|
|
288
|
+
*/
|
|
289
|
+
export async function trySnapshotCredentialStoreBeforeWrite(storagePath, next) {
|
|
290
|
+
try {
|
|
291
|
+
await snapshotCredentialStoreBeforeWrite(storagePath, next);
|
|
292
|
+
}
|
|
293
|
+
catch (error) {
|
|
294
|
+
if (error instanceof StorageError && error.code === TEST_HOME_ESCAPE_CODE)
|
|
295
|
+
throw error;
|
|
296
|
+
log.warn("Credential snapshot failed; continuing with the write", {
|
|
297
|
+
path: storagePath,
|
|
298
|
+
error: String(error),
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=credential-snapshots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-snapshots.js","sourceRoot":"","sources":["../../../lib/storage/credential-snapshots.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-import.d.ts","sourceRoot":"","sources":["../../../lib/storage/export-import.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"export-import.d.ts","sourceRoot":"","sources":["../../../lib/storage/export-import.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAuBH;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,aAAa,GAAG,aAAa,GAAG,UAAU,CAAC;AAEnF,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAElE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,kBAAkB,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAoDD;;;;;;GAMG;AAEH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,mBAAmB,CAAC,CAY9B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBnF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CAsI/B"}
|
|
@@ -12,6 +12,7 @@ import { ACCOUNT_LIMITS } from "../constants.js";
|
|
|
12
12
|
import { createLogger } from "../logger.js";
|
|
13
13
|
import { MODEL_FAMILIES } from "../prompts/codex.js";
|
|
14
14
|
import { createTimestampedBackupPath, writePreImportBackupFile } from "./backup.js";
|
|
15
|
+
import { isCredentialSnapshotFileName } from "./credential-snapshots.js";
|
|
15
16
|
import { StorageError } from "./errors.js";
|
|
16
17
|
import { clampIndex, deduplicateAccountsForStorage, extractActiveKeys, findAccountIndexByIdentityKeys, } from "./identity.js";
|
|
17
18
|
import { withAccountStorageTransaction } from "./load-save.js";
|
|
@@ -121,6 +122,12 @@ export async function importAccounts(filePath, options = {}) {
|
|
|
121
122
|
const { resolvedPath, normalized } = await readAndNormalizeImportFile(filePath);
|
|
122
123
|
const backupMode = options.backupMode ?? "timestamped";
|
|
123
124
|
const backupPrefix = options.preImportBackupPrefix ?? "codex-pre-import-backup";
|
|
125
|
+
// The credential-snapshot namespace is reserved: a pre-import backup named
|
|
126
|
+
// under it would be silently deleted by snapshot retention.
|
|
127
|
+
if (backupMode !== "none" &&
|
|
128
|
+
isCredentialSnapshotFileName(basename(createTimestampedBackupPath(backupPrefix)))) {
|
|
129
|
+
throw new Error(`Refusing preImportBackupPrefix "${backupPrefix}": it collides with the reserved credential-snapshot namespace`);
|
|
130
|
+
}
|
|
124
131
|
const { imported: importedCount, total, skipped: skippedCount, backupStatus, backupPath, backupError, } = await withAccountStorageTransaction(async (existing, persist) => {
|
|
125
132
|
const existingStorage = existing ??
|
|
126
133
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-import.js","sourceRoot":"","sources":["../../../lib/storage/export-import.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"export-import.js","sourceRoot":"","sources":["../../../lib/storage/export-import.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flagged.d.ts","sourceRoot":"","sources":["../../../lib/storage/flagged.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"flagged.d.ts","sourceRoot":"","sources":["../../../lib/storage/flagged.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAyBH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAKzD,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,wBAAwB,EAAE,CAAC;CACtC;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAmQD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAE5E;AAED;;;GAGG;AACH,wBAAsB,oCAAoC,CAAC,CAAC,EAC1D,OAAO,EAAE,CACP,OAAO,EAAE,uBAAuB,EAChC,OAAO,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,KACzD,OAAO,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzF;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsB1D"}
|
|
@@ -13,8 +13,11 @@ import { FLAGGED_ACCOUNTS_FILE_NAME, LEGACY_BLOCKED_ACCOUNTS_FILE_NAME, LEGACY_F
|
|
|
13
13
|
import { createLogger } from "../logger.js";
|
|
14
14
|
import { extractAccountUserId } from "../auth/token-utils.js";
|
|
15
15
|
import { renameWithWindowsRetry } from "./atomic-write.js";
|
|
16
|
+
import { trySnapshotCredentialStoreBeforeWrite } from "./credential-snapshots.js";
|
|
17
|
+
import { StorageError } from "./errors.js";
|
|
16
18
|
import { getWorkspaceIdentityKey, isRecord } from "./identity.js";
|
|
17
19
|
import { getStoragePath, getCurrentProjectStorageKey, withStorageLock } from "./state.js";
|
|
20
|
+
import { assertTestRunNeverTouchesRealHome, TEST_HOME_ESCAPE_CODE, } from "./test-home-guard.js";
|
|
18
21
|
import { isKeychainOptInEnabled, readFlaggedFromKeychain, writeFlaggedToKeychain, } from "./keychain.js";
|
|
19
22
|
import { withStorageTransaction } from "./transaction-lock.js";
|
|
20
23
|
const log = createLogger("storage");
|
|
@@ -199,6 +202,7 @@ async function loadFlaggedAccountsUnlocked(saveUnlocked) {
|
|
|
199
202
|
}
|
|
200
203
|
async function saveFlaggedAccountsUnlocked(storage) {
|
|
201
204
|
const path = getFlaggedAccountsPath();
|
|
205
|
+
assertTestRunNeverTouchesRealHome(path);
|
|
202
206
|
const normalized = normalizeFlaggedStorage(storage);
|
|
203
207
|
const content = JSON.stringify(normalized, null, 2);
|
|
204
208
|
// When keychain opt-in is enabled, store flagged credentials in the OS
|
|
@@ -226,6 +230,13 @@ async function saveFlaggedAccountsUnlocked(storage) {
|
|
|
226
230
|
const tempPath = `${path}.${uniqueSuffix}.tmp`;
|
|
227
231
|
try {
|
|
228
232
|
await fs.mkdir(dirname(path), { recursive: true });
|
|
233
|
+
// This file retains live refresh tokens for quarantined accounts, so it
|
|
234
|
+
// gets the same pre-write snapshot as the main account store — under the
|
|
235
|
+
// same significance, retention, and test-home rules — before the rename
|
|
236
|
+
// replaces what is on disk. Compared against the normalized payload for
|
|
237
|
+
// the same reason `writeAccountsToPathUnlocked` does: a difference
|
|
238
|
+
// normalization erases never costs a snapshot.
|
|
239
|
+
await trySnapshotCredentialStoreBeforeWrite(path, normalized);
|
|
229
240
|
await fs.writeFile(tempPath, content, { encoding: "utf-8", mode: 0o600 });
|
|
230
241
|
await renameWithWindowsRetry(tempPath, path);
|
|
231
242
|
}
|
|
@@ -262,10 +273,21 @@ export async function saveFlaggedAccounts(storage) {
|
|
|
262
273
|
}
|
|
263
274
|
export async function clearFlaggedAccounts() {
|
|
264
275
|
return withStorageLock(async () => {
|
|
276
|
+
const path = getFlaggedAccountsPath();
|
|
265
277
|
try {
|
|
266
|
-
|
|
278
|
+
assertTestRunNeverTouchesRealHome(path);
|
|
279
|
+
// Deleting the store outright is unconditionally significant - `null`
|
|
280
|
+
// says there is no successor document to compare against.
|
|
281
|
+
await trySnapshotCredentialStoreBeforeWrite(path, null);
|
|
282
|
+
await fs.unlink(path);
|
|
267
283
|
}
|
|
268
284
|
catch (error) {
|
|
285
|
+
// Same fail-loud rule as `clearAccounts`: the test-home guard exists to
|
|
286
|
+
// fail a run that escaped its sandbox, so absorbing it here would
|
|
287
|
+
// report a clear that deliberately did not happen.
|
|
288
|
+
if (error instanceof StorageError && error.code === TEST_HOME_ESCAPE_CODE) {
|
|
289
|
+
throw error;
|
|
290
|
+
}
|
|
269
291
|
const code = error.code;
|
|
270
292
|
if (code !== "ENOENT") {
|
|
271
293
|
log.error("Failed to clear flagged account storage", { error: String(error) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flagged.js","sourceRoot":"","sources":["../../../lib/storage/flagged.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flagged.js","sourceRoot":"","sources":["../../../lib/storage/flagged.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,6 +58,10 @@ export declare function saveAccounts(storage: AccountStorageV3): Promise<void>;
|
|
|
58
58
|
* keychain delete and log at `error`. Both copies remain in sync so the
|
|
59
59
|
* caller can retry safely. The operation is still best-effort (never
|
|
60
60
|
* throws) to preserve the existing contract above the storage layer.
|
|
61
|
+
*
|
|
62
|
+
* @throws StorageError (code `TEST_HOME_ESCAPE`) - the single exception to
|
|
63
|
+
* best-effort, and inert outside vitest. The guard refuses the deletion, so
|
|
64
|
+
* absorbing it would return success for a clear that never happened.
|
|
61
65
|
*/
|
|
62
66
|
export declare function clearAccounts(): Promise<void>;
|
|
63
67
|
//# sourceMappingURL=load-save.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-save.d.ts","sourceRoot":"","sources":["../../../lib/storage/load-save.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"load-save.d.ts","sourceRoot":"","sources":["../../../lib/storage/load-save.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAyBH,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAC;AAczB,wBAAgB,gCAAgC,CAAC,IAAI,SAAmB,GAAG,MAAM,GAAG,SAAS,CAK5F;AAKD,wBAAgB,uCAAuC,IAAI,IAAI,CAE9D;AAgpBD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAErE;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CAAC,CAAC,EACnD,OAAO,EAAE,CACP,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAChC,OAAO,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,KAClD,OAAO,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAgDnD"}
|