codex-multi-auth 2.1.13-beta.2 → 2.2.1
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/.codex-plugin/plugin.json +9 -0
- package/README.md +5 -4
- package/dist/lib/accounts.d.ts.map +1 -1
- package/dist/lib/accounts.js +30 -1
- package/dist/lib/accounts.js.map +1 -1
- package/dist/lib/auth/device-auth.d.ts.map +1 -1
- package/dist/lib/auth/device-auth.js +15 -0
- package/dist/lib/auth/device-auth.js.map +1 -1
- package/dist/lib/auth/org-override.d.ts +19 -0
- package/dist/lib/auth/org-override.d.ts.map +1 -0
- package/dist/lib/auth/org-override.js +23 -0
- package/dist/lib/auth/org-override.js.map +1 -0
- package/dist/lib/auth/server.d.ts.map +1 -1
- package/dist/lib/auth/server.js +12 -7
- package/dist/lib/auth/server.js.map +1 -1
- package/dist/lib/capability-policy.d.ts.map +1 -1
- package/dist/lib/capability-policy.js +5 -0
- package/dist/lib/capability-policy.js.map +1 -1
- package/dist/lib/circuit-breaker.d.ts +6 -0
- package/dist/lib/circuit-breaker.d.ts.map +1 -1
- package/dist/lib/circuit-breaker.js +8 -0
- package/dist/lib/circuit-breaker.js.map +1 -1
- package/dist/lib/codex-cli/state.d.ts.map +1 -1
- package/dist/lib/codex-cli/state.js +28 -7
- package/dist/lib/codex-cli/state.js.map +1 -1
- package/dist/lib/codex-manager/account-manager-commands.d.ts +14 -0
- package/dist/lib/codex-manager/account-manager-commands.d.ts.map +1 -0
- package/dist/lib/codex-manager/account-manager-commands.js +43 -0
- package/dist/lib/codex-manager/account-manager-commands.js.map +1 -0
- package/dist/lib/codex-manager/commands/best.d.ts +1 -1
- package/dist/lib/codex-manager/commands/best.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/best.js +4 -3
- package/dist/lib/codex-manager/commands/best.js.map +1 -1
- package/dist/lib/codex-manager/commands/budget.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/budget.js +6 -0
- package/dist/lib/codex-manager/commands/budget.js.map +1 -1
- package/dist/lib/codex-manager/commands/debug-bundle.d.ts +16 -0
- package/dist/lib/codex-manager/commands/debug-bundle.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/debug-bundle.js +80 -5
- package/dist/lib/codex-manager/commands/debug-bundle.js.map +1 -1
- package/dist/lib/codex-manager/commands/forecast.d.ts +1 -1
- package/dist/lib/codex-manager/commands/forecast.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/forecast.js +11 -8
- package/dist/lib/codex-manager/commands/forecast.js.map +1 -1
- package/dist/lib/codex-manager/commands/integrations.js +2 -2
- package/dist/lib/codex-manager/commands/integrations.js.map +1 -1
- package/dist/lib/codex-manager/commands/models.js +3 -3
- package/dist/lib/codex-manager/commands/models.js.map +1 -1
- package/dist/lib/codex-manager/commands/report.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/report.js +11 -9
- package/dist/lib/codex-manager/commands/report.js.map +1 -1
- package/dist/lib/codex-manager/commands/status.d.ts +2 -0
- package/dist/lib/codex-manager/commands/status.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/status.js +84 -25
- package/dist/lib/codex-manager/commands/status.js.map +1 -1
- package/dist/lib/codex-manager/commands/switch.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/switch.js +7 -0
- package/dist/lib/codex-manager/commands/switch.js.map +1 -1
- package/dist/lib/codex-manager/commands/workspace.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/workspace.js +12 -1
- package/dist/lib/codex-manager/commands/workspace.js.map +1 -1
- package/dist/lib/codex-manager/experimental-settings-prompt.d.ts.map +1 -1
- package/dist/lib/codex-manager/experimental-settings-prompt.js +13 -3
- package/dist/lib/codex-manager/experimental-settings-prompt.js.map +1 -1
- package/dist/lib/codex-manager/forecast-report-commands.d.ts.map +1 -1
- package/dist/lib/codex-manager/forecast-report-commands.js +14 -13
- package/dist/lib/codex-manager/forecast-report-commands.js.map +1 -1
- package/dist/lib/codex-manager/help.d.ts.map +1 -1
- package/dist/lib/codex-manager/help.js +7 -5
- package/dist/lib/codex-manager/help.js.map +1 -1
- package/dist/lib/codex-manager/repair-commands.d.ts.map +1 -1
- package/dist/lib/codex-manager/repair-commands.js +18 -8
- package/dist/lib/codex-manager/repair-commands.js.map +1 -1
- package/dist/lib/codex-manager/settings-hub/experimental.d.ts.map +1 -1
- package/dist/lib/codex-manager/settings-hub/experimental.js +8 -0
- package/dist/lib/codex-manager/settings-hub/experimental.js.map +1 -1
- package/dist/lib/codex-manager.d.ts +3 -0
- package/dist/lib/codex-manager.d.ts.map +1 -1
- package/dist/lib/codex-manager.js +121 -93
- package/dist/lib/codex-manager.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +327 -18
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/context-overflow.d.ts +7 -2
- package/dist/lib/context-overflow.d.ts.map +1 -1
- package/dist/lib/context-overflow.js +55 -37
- package/dist/lib/context-overflow.js.map +1 -1
- package/dist/lib/errors.d.ts +16 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +23 -0
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/forecast.d.ts +1 -0
- package/dist/lib/forecast.d.ts.map +1 -1
- package/dist/lib/forecast.js +25 -2
- package/dist/lib/forecast.js.map +1 -1
- package/dist/lib/integration-generators.d.ts.map +1 -1
- package/dist/lib/integration-generators.js +1 -1
- package/dist/lib/integration-generators.js.map +1 -1
- package/dist/lib/local-bridge.d.ts +8 -0
- package/dist/lib/local-bridge.d.ts.map +1 -1
- package/dist/lib/local-bridge.js +81 -7
- package/dist/lib/local-bridge.js.map +1 -1
- package/dist/lib/local-client-tokens.d.ts.map +1 -1
- package/dist/lib/local-client-tokens.js +117 -64
- package/dist/lib/local-client-tokens.js.map +1 -1
- package/dist/lib/logger.d.ts +9 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +104 -19
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/model-capability-matrix.d.ts.map +1 -1
- package/dist/lib/model-capability-matrix.js +13 -10
- package/dist/lib/model-capability-matrix.js.map +1 -1
- package/dist/lib/oc-chatgpt-orchestrator.d.ts +7 -1
- package/dist/lib/oc-chatgpt-orchestrator.d.ts.map +1 -1
- package/dist/lib/oc-chatgpt-orchestrator.js +68 -9
- package/dist/lib/oc-chatgpt-orchestrator.js.map +1 -1
- package/dist/lib/policy/runtime-policy.d.ts.map +1 -1
- package/dist/lib/policy/runtime-policy.js +23 -1
- package/dist/lib/policy/runtime-policy.js.map +1 -1
- package/dist/lib/prompts/codex.d.ts +1 -1
- package/dist/lib/prompts/codex.d.ts.map +1 -1
- package/dist/lib/prompts/codex.js +128 -33
- package/dist/lib/prompts/codex.js.map +1 -1
- package/dist/lib/prompts/fetch-utils.d.ts +72 -0
- package/dist/lib/prompts/fetch-utils.d.ts.map +1 -0
- package/dist/lib/prompts/fetch-utils.js +165 -0
- package/dist/lib/prompts/fetch-utils.js.map +1 -0
- package/dist/lib/prompts/host-codex-prompt.d.ts.map +1 -1
- package/dist/lib/prompts/host-codex-prompt.js +24 -10
- package/dist/lib/prompts/host-codex-prompt.js.map +1 -1
- package/dist/lib/quota-cache.d.ts.map +1 -1
- package/dist/lib/quota-cache.js +26 -2
- package/dist/lib/quota-cache.js.map +1 -1
- package/dist/lib/quota-probe.d.ts +21 -0
- package/dist/lib/quota-probe.d.ts.map +1 -1
- package/dist/lib/quota-probe.js +41 -1
- package/dist/lib/quota-probe.js.map +1 -1
- package/dist/lib/quota-readiness.d.ts +3 -1
- package/dist/lib/quota-readiness.d.ts.map +1 -1
- package/dist/lib/quota-readiness.js +16 -3
- package/dist/lib/quota-readiness.js.map +1 -1
- package/dist/lib/recovery/storage.d.ts +7 -0
- package/dist/lib/recovery/storage.d.ts.map +1 -1
- package/dist/lib/recovery/storage.js +178 -10
- package/dist/lib/recovery/storage.js.map +1 -1
- package/dist/lib/refresh-lease.d.ts +1 -1
- package/dist/lib/refresh-lease.d.ts.map +1 -1
- package/dist/lib/refresh-lease.js +25 -3
- package/dist/lib/refresh-lease.js.map +1 -1
- package/dist/lib/refresh-queue.d.ts.map +1 -1
- package/dist/lib/refresh-queue.js +31 -17
- package/dist/lib/refresh-queue.js.map +1 -1
- package/dist/lib/request/fetch-helpers.d.ts +0 -5
- package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
- package/dist/lib/request/fetch-helpers.js +39 -7
- package/dist/lib/request/fetch-helpers.js.map +1 -1
- package/dist/lib/request/helpers/model-map.d.ts +1 -0
- package/dist/lib/request/helpers/model-map.d.ts.map +1 -1
- package/dist/lib/request/helpers/model-map.js +10 -0
- package/dist/lib/request/helpers/model-map.js.map +1 -1
- package/dist/lib/rotation.d.ts +12 -0
- package/dist/lib/rotation.d.ts.map +1 -1
- package/dist/lib/rotation.js +36 -0
- package/dist/lib/rotation.js.map +1 -1
- package/dist/lib/routing-mutex.d.ts +12 -0
- package/dist/lib/routing-mutex.d.ts.map +1 -1
- package/dist/lib/routing-mutex.js +38 -1
- package/dist/lib/routing-mutex.js.map +1 -1
- package/dist/lib/runtime/account-check-types.d.ts +1 -0
- package/dist/lib/runtime/account-check-types.d.ts.map +1 -1
- package/dist/lib/runtime/account-check-types.js +1 -0
- package/dist/lib/runtime/account-check-types.js.map +1 -1
- package/dist/lib/runtime/account-check.d.ts.map +1 -1
- package/dist/lib/runtime/account-check.js +15 -4
- package/dist/lib/runtime/account-check.js.map +1 -1
- package/dist/lib/runtime/quota-probe.d.ts.map +1 -1
- package/dist/lib/runtime/quota-probe.js +2 -5
- package/dist/lib/runtime/quota-probe.js.map +1 -1
- package/dist/lib/runtime/runtime-observability.d.ts.map +1 -1
- package/dist/lib/runtime/runtime-observability.js +24 -2
- package/dist/lib/runtime/runtime-observability.js.map +1 -1
- package/dist/lib/runtime-rotation-proxy.d.ts +24 -1
- package/dist/lib/runtime-rotation-proxy.d.ts.map +1 -1
- package/dist/lib/runtime-rotation-proxy.js +289 -26
- package/dist/lib/runtime-rotation-proxy.js.map +1 -1
- package/dist/lib/storage/account-clear.d.ts.map +1 -1
- package/dist/lib/storage/account-clear.js +4 -2
- package/dist/lib/storage/account-clear.js.map +1 -1
- package/dist/lib/storage/account-persistence.d.ts.map +1 -1
- package/dist/lib/storage/account-persistence.js +11 -1
- package/dist/lib/storage/account-persistence.js.map +1 -1
- package/dist/lib/storage/flagged-storage-io.d.ts.map +1 -1
- package/dist/lib/storage/flagged-storage-io.js +4 -1
- package/dist/lib/storage/flagged-storage-io.js.map +1 -1
- package/dist/lib/storage/import-export.d.ts.map +1 -1
- package/dist/lib/storage/import-export.js +29 -9
- package/dist/lib/storage/import-export.js.map +1 -1
- package/dist/lib/storage/paths.d.ts.map +1 -1
- package/dist/lib/storage/paths.js +93 -0
- package/dist/lib/storage/paths.js.map +1 -1
- package/dist/lib/storage/record-utils.d.ts.map +1 -1
- package/dist/lib/storage/record-utils.js +6 -1
- package/dist/lib/storage/record-utils.js.map +1 -1
- package/dist/lib/storage/storage-parser.d.ts.map +1 -1
- package/dist/lib/storage/storage-parser.js +7 -1
- package/dist/lib/storage/storage-parser.js.map +1 -1
- package/dist/lib/storage/transactions.d.ts +8 -0
- package/dist/lib/storage/transactions.d.ts.map +1 -1
- package/dist/lib/storage/transactions.js +14 -1
- package/dist/lib/storage/transactions.js.map +1 -1
- package/dist/lib/storage.d.ts.map +1 -1
- package/dist/lib/storage.js +59 -18
- package/dist/lib/storage.js.map +1 -1
- package/dist/lib/table-formatter.d.ts.map +1 -1
- package/dist/lib/table-formatter.js +20 -2
- package/dist/lib/table-formatter.js.map +1 -1
- package/dist/lib/types.d.ts +7 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/ui/auth-menu.d.ts.map +1 -1
- package/dist/lib/ui/auth-menu.js +8 -2
- package/dist/lib/ui/auth-menu.js.map +1 -1
- package/dist/lib/ui/display-width.d.ts +27 -0
- package/dist/lib/ui/display-width.d.ts.map +1 -0
- package/dist/lib/ui/display-width.js +194 -0
- package/dist/lib/ui/display-width.js.map +1 -0
- package/dist/lib/ui/select.d.ts +23 -0
- package/dist/lib/ui/select.d.ts.map +1 -1
- package/dist/lib/ui/select.js +64 -16
- package/dist/lib/ui/select.js.map +1 -1
- package/dist/lib/ui/theme.d.ts +13 -0
- package/dist/lib/ui/theme.d.ts.map +1 -1
- package/dist/lib/ui/theme.js +34 -1
- package/dist/lib/ui/theme.js.map +1 -1
- package/node_modules/@codex-ai/sdk/dist/index.d.ts +4 -0
- package/node_modules/@codex-ai/sdk/dist/index.js +2 -0
- package/node_modules/@codex-ai/sdk/package.json +8 -0
- package/package.json +10 -6
- package/scripts/codex-bin-resolver.js +28 -1
- package/scripts/codex-routing.js +3 -0
- package/scripts/codex.js +508 -1
- package/scripts/mcodex.js +367 -0
|
@@ -339,7 +339,55 @@ function isLookalikeSibling(baseDir, targetPath) {
|
|
|
339
339
|
const boundary = normalizedTarget.charAt(baseWithoutTrailingSep.length);
|
|
340
340
|
return boundary !== sep && boundary !== "/" && boundary !== "\\";
|
|
341
341
|
}
|
|
342
|
+
/**
|
|
343
|
+
* Canonicalize the deepest existing ancestor of `targetPath` via realpath so a
|
|
344
|
+
* symlink inside an approved root that points outside it cannot pass the purely
|
|
345
|
+
* lexical containment check (storage-02). We canonicalize the nearest existing
|
|
346
|
+
* ancestor (the target itself may not exist yet for export/write paths) and join
|
|
347
|
+
* the remaining non-existent segments back on. Returns the original path if
|
|
348
|
+
* realpath is unavailable/fails, so behavior degrades to the lexical guard rather
|
|
349
|
+
* than throwing spuriously.
|
|
350
|
+
*/
|
|
351
|
+
function canonicalizeExistingPrefix(targetPath) {
|
|
352
|
+
let current = targetPath;
|
|
353
|
+
const trailing = [];
|
|
354
|
+
// Walk up until we find a path component that exists on disk.
|
|
355
|
+
//
|
|
356
|
+
// The 4096 cap is a defensive upper bound on path depth, chosen to exceed any
|
|
357
|
+
// real filesystem path: Linux PATH_MAX is ~4096 *bytes* total (so far fewer
|
|
358
|
+
// components), and Windows is 260 (legacy MAX_PATH) up to 32767 with long-path
|
|
359
|
+
// support — none of which approach 4096 nested directories. It exists purely so
|
|
360
|
+
// a pathological input (e.g. a crafted string of separators) can never spin this
|
|
361
|
+
// loop forever; the `parent === current` root check below is the normal exit.
|
|
362
|
+
// Keep the bound: each iteration performs an existsSync syscall, which is slow on
|
|
363
|
+
// Windows when antivirus filter drivers or network/UNC drives are in play, so we
|
|
364
|
+
// must not let the walk run unbounded.
|
|
365
|
+
for (let i = 0; i < 4096; i++) {
|
|
366
|
+
if (existsSync(current))
|
|
367
|
+
break;
|
|
368
|
+
const parent = dirname(current);
|
|
369
|
+
if (parent === current) {
|
|
370
|
+
// Reached the filesystem root without finding an existing ancestor.
|
|
371
|
+
return targetPath;
|
|
372
|
+
}
|
|
373
|
+
trailing.unshift(basename(current));
|
|
374
|
+
current = parent;
|
|
375
|
+
}
|
|
376
|
+
try {
|
|
377
|
+
const realBase = realpathSync(current);
|
|
378
|
+
return trailing.length > 0 ? join(realBase, ...trailing) : realBase;
|
|
379
|
+
}
|
|
380
|
+
catch {
|
|
381
|
+
return targetPath;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
342
384
|
export function resolvePath(filePath) {
|
|
385
|
+
// Reject NUL bytes up front (defense in depth): a poison byte cannot traverse
|
|
386
|
+
// out of an approved root, but it must never reach the fs layer — fail here
|
|
387
|
+
// with a clear error rather than letting Node throw deep in a later read/write.
|
|
388
|
+
if (filePath.includes(String.fromCharCode(0))) {
|
|
389
|
+
throw new Error("Invalid path: contains a NUL byte");
|
|
390
|
+
}
|
|
343
391
|
let resolved;
|
|
344
392
|
if (filePath.startsWith("~")) {
|
|
345
393
|
resolved = join(homedir(), filePath.slice(1));
|
|
@@ -365,6 +413,51 @@ export function resolvePath(filePath) {
|
|
|
365
413
|
!isWithinDirectory(tmp, resolved)) {
|
|
366
414
|
throw new Error(`Access denied: path must be within home directory, project directory, or temp directory`);
|
|
367
415
|
}
|
|
416
|
+
// storage-02: re-verify containment against the realpath-canonicalized path so
|
|
417
|
+
// a symlink within an approved root that resolves outside it is rejected. If
|
|
418
|
+
// the lexical guard passed but the canonical path escapes every approved root,
|
|
419
|
+
// the path is a symlink-escape and must be denied.
|
|
420
|
+
//
|
|
421
|
+
// Performance note (deliberate correctness-over-speed tradeoff): this block can
|
|
422
|
+
// invoke canonicalizeExistingPrefix up to four times per resolvePath call — once
|
|
423
|
+
// for the target, then for home, projectRoot, and tmp when the canonical target
|
|
424
|
+
// differs from the raw one. Each call walks the directory tree with existsSync +
|
|
425
|
+
// realpathSync, so on Windows (AV filter drivers, UNC/network drives) and for deep
|
|
426
|
+
// paths this is many syscalls. We accept that cost: resolvePath is the security
|
|
427
|
+
// boundary for all file access, and canonicalizing every approved root is what lets
|
|
428
|
+
// us reject genuine symlink escapes without falsely denying legitimate files under a
|
|
429
|
+
// root that is itself reached via a symlink (e.g. macOS /var -> /private/var). The
|
|
430
|
+
// roots are few and shallow, so the extra walks stay bounded in practice.
|
|
431
|
+
const canonical = canonicalizeExistingPrefix(resolved);
|
|
432
|
+
if (canonical !== resolved) {
|
|
433
|
+
// Compare the canonical target against CANONICAL roots, not the raw ones:
|
|
434
|
+
// an approved root can itself live under a symlink (e.g. macOS tmpdir
|
|
435
|
+
// /var/folders/... realpaths to /private/var/folders/...). Comparing a
|
|
436
|
+
// canonicalized target against a non-canonical root would falsely reject a
|
|
437
|
+
// legitimate file under that root. Canonicalizing both sides keeps the
|
|
438
|
+
// symlink-escape rejection while avoiding that false denial.
|
|
439
|
+
const canonicalHome = canonicalizeExistingPrefix(home);
|
|
440
|
+
const canonicalProjectRoot = canonicalizeExistingPrefix(projectRoot);
|
|
441
|
+
const canonicalTmp = canonicalizeExistingPrefix(tmp);
|
|
442
|
+
const escapesRawRoots = isLookalikeSibling(home, canonical) ||
|
|
443
|
+
isLookalikeSibling(projectRoot, canonical) ||
|
|
444
|
+
isLookalikeSibling(tmp, canonical) ||
|
|
445
|
+
(!isWithinDirectory(home, canonical) &&
|
|
446
|
+
!isWithinDirectory(projectRoot, canonical) &&
|
|
447
|
+
!isWithinDirectory(tmp, canonical));
|
|
448
|
+
const escapesCanonicalRoots = isLookalikeSibling(canonicalHome, canonical) ||
|
|
449
|
+
isLookalikeSibling(canonicalProjectRoot, canonical) ||
|
|
450
|
+
isLookalikeSibling(canonicalTmp, canonical) ||
|
|
451
|
+
(!isWithinDirectory(canonicalHome, canonical) &&
|
|
452
|
+
!isWithinDirectory(canonicalProjectRoot, canonical) &&
|
|
453
|
+
!isWithinDirectory(canonicalTmp, canonical));
|
|
454
|
+
// Only deny when the canonical target is outside BOTH the raw and the
|
|
455
|
+
// canonical root sets — i.e. it is a genuine escape, not just a root that
|
|
456
|
+
// happens to be reached via a symlink.
|
|
457
|
+
if (escapesRawRoots && escapesCanonicalRoots) {
|
|
458
|
+
throw new Error(`Access denied: path resolves (via symlink) outside the home, project, or temp directory`);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
368
461
|
return resolved;
|
|
369
462
|
}
|
|
370
463
|
//# sourceMappingURL=paths.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../lib/storage/paths.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../lib/storage/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-utils.d.ts","sourceRoot":"","sources":["../../../lib/storage/record-utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"record-utils.d.ts","sourceRoot":"","sources":["../../../lib/storage/record-utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAOhE"}
|
|
@@ -4,6 +4,11 @@ export function isRecord(value) {
|
|
|
4
4
|
export function clampIndex(index, length) {
|
|
5
5
|
if (length <= 0)
|
|
6
6
|
return 0;
|
|
7
|
-
|
|
7
|
+
// A tampered/corrupt activeIndex can be NaN; Math.trunc(NaN) is NaN and would
|
|
8
|
+
// propagate through Math.min/Math.max, yielding NaN and undefined array access.
|
|
9
|
+
// Coerce it to the first valid index. (±Infinity still clamp correctly below.)
|
|
10
|
+
if (Number.isNaN(index))
|
|
11
|
+
return 0;
|
|
12
|
+
return Math.max(0, Math.min(Math.trunc(index), length - 1));
|
|
8
13
|
}
|
|
9
14
|
//# sourceMappingURL=record-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-utils.js","sourceRoot":"","sources":["../../../lib/storage/record-utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,KAAc;IACtC,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,MAAc;IACvD,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"record-utils.js","sourceRoot":"","sources":["../../../lib/storage/record-utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,KAAc;IACtC,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,MAAc;IACvD,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC1B,8EAA8E;IAC9E,gFAAgF;IAChF,+EAA+E;IAC/E,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-parser.d.ts","sourceRoot":"","sources":["../../../lib/storage/storage-parser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"storage-parser.d.ts","sourceRoot":"","sources":["../../../lib/storage/storage-parser.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,wBAAgB,wBAAwB,CACvC,IAAI,EAAE,OAAO,EACb,uBAAuB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,gBAAgB,GAAG,IAAI,EACnE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5D;IACF,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;CACvB,CAOA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,oBAAoB,CACzC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IACL,uBAAuB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,gBAAgB,GAAG,IAAI,CAAC;IACpE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/D,GACC,OAAO,CAAC;IACV,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC,CAmCD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { promises as fs } from "node:fs";
|
|
2
2
|
import { AnyAccountStorageSchema, getValidationErrors, safeParseJson, } from "../schemas.js";
|
|
3
|
+
import { withFileOperationRetry } from "../fs-retry.js";
|
|
3
4
|
export function parseAndNormalizeStorage(data, normalizeAccountStorage, isRecord) {
|
|
4
5
|
const schemaErrors = getValidationErrors(AnyAccountStorageSchema, data);
|
|
5
6
|
const normalized = normalizeAccountStorage(data);
|
|
@@ -26,7 +27,12 @@ export function parseAndNormalizeStorage(data, normalizeAccountStorage, isRecord
|
|
|
26
27
|
* `schemaErrors`).
|
|
27
28
|
*/
|
|
28
29
|
export async function loadAccountsFromPath(path, deps) {
|
|
29
|
-
|
|
30
|
+
// Retry only transient FS lock errors (EBUSY/EPERM/EACCES/…) on the primary
|
|
31
|
+
// read so a momentary Windows lock doesn't fall through to WAL/backup recovery
|
|
32
|
+
// (storage-01). ENOENT is not a retryable code, so the missing-file contract is
|
|
33
|
+
// unchanged; JSON.parse runs outside the retry, so the SyntaxError → recovery
|
|
34
|
+
// contract documented above is also preserved.
|
|
35
|
+
const content = await withFileOperationRetry(() => fs.readFile(path, "utf-8"));
|
|
30
36
|
// Run the Zod-guarded JSON boundary first. Returns null on either a
|
|
31
37
|
// `SyntaxError` or a schema mismatch; we disambiguate below so the
|
|
32
38
|
// `SyntaxError` contract keeps propagating to callers that rely on it
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-parser.js","sourceRoot":"","sources":["../../../lib/storage/storage-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EACN,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,GACb,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"storage-parser.js","sourceRoot":"","sources":["../../../lib/storage/storage-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EACN,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAGxD,MAAM,UAAU,wBAAwB,CACvC,IAAa,EACb,uBAAmE,EACnE,QAA8D;IAM9D,MAAM,YAAY,GAAG,mBAAmB,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC;QACnC,CAAC,CAAE,IAA8B,CAAC,OAAO;QACzC,CAAC,CAAC,SAAS,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,IAAY,EACZ,IAGC;IAMD,4EAA4E;IAC5E,+EAA+E;IAC/E,gFAAgF;IAChF,8EAA8E;IAC9E,+CAA+C;IAC/C,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAE/E,oEAAoE;IACpE,mEAAmE;IACnE,sEAAsE;IACtE,6BAA6B;IAC7B,MAAM,SAAS,GAAG,aAAa,CAC9B,OAAO,EACP,uBAAuB,EACvB,qCAAqC,CACrC,CAAC;IACF,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,wBAAwB,CAC9B,SAAS,EACT,IAAI,CAAC,uBAAuB,EAC5B,IAAI,CAAC,QAAQ,CACb,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,0EAA0E;IAC1E,2EAA2E;IAC3E,4DAA4D;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;IAC5C,OAAO,wBAAwB,CAC9B,IAAI,EACJ,IAAI,CAAC,uBAAuB,EAC5B,IAAI,CAAC,QAAQ,CACb,CAAC;AACH,CAAC"}
|
|
@@ -4,6 +4,14 @@ export type TransactionSnapshotState = {
|
|
|
4
4
|
storagePath: string;
|
|
5
5
|
active: boolean;
|
|
6
6
|
};
|
|
7
|
+
/**
|
|
8
|
+
* Reports whether the caller is already running inside a `withStorageLock`
|
|
9
|
+
* critical section. The global storage mutex has no reentrancy, so callers
|
|
10
|
+
* that may run both standalone and nested under a held lock (e.g. recovery
|
|
11
|
+
* persistence triggered while loading flagged storage during a transaction)
|
|
12
|
+
* must use this to avoid re-acquiring the lock and deadlocking.
|
|
13
|
+
*/
|
|
14
|
+
export declare function isStorageLockHeld(): boolean;
|
|
7
15
|
export declare function getTransactionSnapshotState(): TransactionSnapshotState | undefined;
|
|
8
16
|
export declare function runInTransactionSnapshotContext<T>(state: TransactionSnapshotState, fn: () => Promise<T>): Promise<T>;
|
|
9
17
|
export declare function withStorageLock<T>(fn: () => Promise<T>): Promise<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../../../lib/storage/transactions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAE/E,MAAM,MAAM,wBAAwB,GAAG;IACtC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CAChB,CAAC;
|
|
1
|
+
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../../../lib/storage/transactions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAE/E,MAAM,MAAM,wBAAwB,GAAG;IACtC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CAChB,CAAC;AAOF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,wBAAgB,2BAA2B,IACxC,wBAAwB,GACxB,SAAS,CAEX;AAED,wBAAgB,+BAA+B,CAAC,CAAC,EAChD,KAAK,EAAE,wBAAwB,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAClB,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CASnE;AAED,wBAAsB,6BAA6B,CAAC,CAAC,EACpD,OAAO,EAAE,CACR,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAChC,OAAO,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,KACjD,OAAO,CAAC,CAAC,CAAC,EACf,IAAI,EAAE;IACL,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACpD,YAAY,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D,GACC,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAED,wBAAsB,uCAAuC,CAAC,CAAC,EAC9D,OAAO,EAAE,CACR,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAChC,OAAO,EAAE,CACR,cAAc,EAAE,gBAAgB,EAChC,cAAc,EAAE,uBAAuB,KACnC,OAAO,CAAC,IAAI,CAAC,EAClB,cAAc,EAAE,uBAAuB,KACnC,OAAO,CAAC,CAAC,CAAC,EACf,IAAI,EAAE;IACL,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACpD,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC5D,YAAY,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,mBAAmB,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,iCAAiC,EAAE,CAClC,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,KACxC,gBAAgB,CAAC;IACtB,gBAAgB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,KAAK,IAAI,CAAC;CACnE,GACC,OAAO,CAAC,CAAC,CAAC,CA6CZ"}
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
2
|
let storageMutex = Promise.resolve();
|
|
3
3
|
const transactionSnapshotContext = new AsyncLocalStorage();
|
|
4
|
+
const storageLockHeldContext = new AsyncLocalStorage();
|
|
5
|
+
/**
|
|
6
|
+
* Reports whether the caller is already running inside a `withStorageLock`
|
|
7
|
+
* critical section. The global storage mutex has no reentrancy, so callers
|
|
8
|
+
* that may run both standalone and nested under a held lock (e.g. recovery
|
|
9
|
+
* persistence triggered while loading flagged storage during a transaction)
|
|
10
|
+
* must use this to avoid re-acquiring the lock and deadlocking.
|
|
11
|
+
*/
|
|
12
|
+
export function isStorageLockHeld() {
|
|
13
|
+
return storageLockHeldContext.getStore() === true;
|
|
14
|
+
}
|
|
4
15
|
export function getTransactionSnapshotState() {
|
|
5
16
|
return transactionSnapshotContext.getStore();
|
|
6
17
|
}
|
|
@@ -13,7 +24,9 @@ export function withStorageLock(fn) {
|
|
|
13
24
|
storageMutex = new Promise((resolve) => {
|
|
14
25
|
releaseLock = resolve;
|
|
15
26
|
});
|
|
16
|
-
return previousMutex
|
|
27
|
+
return previousMutex
|
|
28
|
+
.then(() => storageLockHeldContext.run(true, fn))
|
|
29
|
+
.finally(() => releaseLock());
|
|
17
30
|
}
|
|
18
31
|
export async function withAccountStorageTransaction(handler, deps) {
|
|
19
32
|
return withStorageLock(async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../../lib/storage/transactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AASrD,IAAI,YAAY,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;AACpD,MAAM,0BAA0B,GAC/B,IAAI,iBAAiB,EAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../../lib/storage/transactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../lib/storage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../lib/storage.ts"],"names":[],"mappings":"AA+BA,OAAO,EACN,KAAK,qBAAqB,EAE1B,KAAK,sBAAsB,EAE3B,MAAM,8BAA8B,CAAC;AAkBtC,OAAO,EAEN,KAAK,oBAAoB,EACzB,MAAM,qBAAqB,CAAC;AAc7B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACN,sBAAsB,EACtB,cAAc,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,qBAAqB,EACrB,iBAAiB,GACjB,MAAM,uBAAuB,CAAC;AAS/B,OAAO,EACN,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EAEnB,KAAK,gBAAgB,EACrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAEN,KAAK,kBAAkB,EACvB,MAAM,4BAA4B,CAAC;AA0CpC,YAAY,EACX,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GAClB,CAAC;AAYF,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACvC,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,wBAAwB,EAAE,CAAC;CACrC;AAED,KAAK,aAAa,GAAG,eAAe,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAE/E,MAAM,MAAM,cAAc,GAAG;IAC5B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,eAAe,EAAE,qBAAqB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,cAAc,EAAE,cAAc,CAAC;CAC/B,CAAC;AAIF,KAAK,WAAW,GAAG;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAiBF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAE9D;AA6XD,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CA4C/D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAO9D;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAMvC;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAarE;AAED,wBAAsB,yBAAyB,CAC9C,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CAe3B;AAED,wBAAsB,iBAAiB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AA4LD,KAAK,mBAAmB,GAAG;IAC1B,wCAAwC,CAAC,EAAE,OAAO,CAAC;CACnD,CAAC;AA8IF,wBAAgB,wBAAwB,CACvC,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,GAAG,cAAc,CAAC,EAEnE,QAAQ,EAAE,SAAS,CAAC,EAAE,EACtB,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,GAAG,cAAc,CAAC,EACpE,OAAO,GAAE,mBAAwB,GAC/B,MAAM,GAAG,SAAS,CAkBpB;AAED,wBAAgB,4BAA4B,CAC3C,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,GAAG,cAAc,CAAC,EAEnE,QAAQ,EAAE,SAAS,CAAC,EAAE,EACtB,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,GAAG,cAAc,CAAC,EACpE,aAAa,SAAI,GACf,MAAM,CAOR;AAqBD;;;GAGG;AACH,wBAAgB,mBAAmB,CAClC,CAAC,SAAS;IACT,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,EACA,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEpB;AAED,wBAAgB,0BAA0B,CACzC,CAAC,SAAS;IACT,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,EACA,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEpB;AAoBD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACtC,IAAI,EAAE,OAAO,GACX,gBAAgB,GAAG,IAAI,CAgIzB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG;IACpD,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,kBAAkB,EAAE,MAAM,CAAC;CAC3B,CA8BA;AAED;;;;GAIG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAErE;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC,CAajE;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CASvE;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAiG1E;AAibD,wBAAsB,6BAA6B,CAAC,CAAC,EACpD,OAAO,EAAE,CACR,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAChC,OAAO,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,KACjD,OAAO,CAAC,CAAC,CAAC,GACb,OAAO,CAAC,CAAC,CAAC,CAMZ;AAED,wBAAsB,uCAAuC,CAAC,CAAC,EAC9D,OAAO,EAAE,CACR,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAChC,OAAO,EAAE,CACR,cAAc,EAAE,gBAAgB,EAChC,cAAc,EAAE,uBAAuB,KACnC,OAAO,CAAC,IAAI,CAAC,EAClB,cAAc,EAAE,uBAAuB,KACnC,OAAO,CAAC,CAAC,CAAC,GACb,OAAO,CAAC,CAAC,CAAC,CAgDZ;AAED,wBAAsB,6BAA6B,CAAC,CAAC,EACpD,OAAO,EAAE,CACR,OAAO,EAAE,uBAAuB,EAChC,OAAO,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,KACxD,OAAO,CAAC,CAAC,CAAC,GACb,OAAO,CAAC,CAAC,CAAC,CAiCZ;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAM3E;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAcnD;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAgD5E;AAyBD,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,uBAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAa1D;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CACnC,QAAQ,EAAE,MAAM,EAChB,KAAK,UAAO,EACZ,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAC3D,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CACnC,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAc/D"}
|
package/dist/lib/storage.js
CHANGED
|
@@ -2,6 +2,7 @@ import { existsSync, promises as fs, readFileSync } from "node:fs";
|
|
|
2
2
|
import { basename, dirname, join } from "node:path";
|
|
3
3
|
import { ACCOUNT_LIMITS } from "./constants.js";
|
|
4
4
|
import { StorageError } from "./errors.js";
|
|
5
|
+
import { shouldRetryFileOperation, withFileOperationRetry } from "./fs-retry.js";
|
|
5
6
|
import { createLogger } from "./logger.js";
|
|
6
7
|
import { exportNamedBackupFile, getNamedBackupRoot, resolveNamedBackupPath, } from "./named-backup-export.js";
|
|
7
8
|
import { MODEL_FAMILIES } from "./prompts/codex.js";
|
|
@@ -48,7 +49,7 @@ import { buildRestoreAssessment } from "./storage/restore-assessment.js";
|
|
|
48
49
|
import { restoreAccountsFromBackupEntry } from "./storage/restore-backup-entry.js";
|
|
49
50
|
import { createEmptyStorageWithRestoreMetadata as createEmptyStorageWithMetadata, withRestoreMetadata, } from "./storage/restore-metadata.js";
|
|
50
51
|
import { loadAccountsFromPath, parseAndNormalizeStorage, } from "./storage/storage-parser.js";
|
|
51
|
-
import { getTransactionSnapshotState, runInTransactionSnapshotContext, withAccountStorageTransaction as runWithAccountStorageTransaction, withStorageLock, } from "./storage/transactions.js";
|
|
52
|
+
import { getTransactionSnapshotState, isStorageLockHeld, runInTransactionSnapshotContext, withAccountStorageTransaction as runWithAccountStorageTransaction, withStorageLock, } from "./storage/transactions.js";
|
|
52
53
|
const log = createLogger("storage");
|
|
53
54
|
const ACCOUNTS_FILE_NAME = "openai-codex-accounts.json";
|
|
54
55
|
const FLAGGED_ACCOUNTS_FILE_NAME = "openai-codex-flagged-accounts.json";
|
|
@@ -129,8 +130,7 @@ async function copyFileWithRetry(sourcePath, destinationPath, options) {
|
|
|
129
130
|
if (allowMissingSource && code === "ENOENT") {
|
|
130
131
|
return;
|
|
131
132
|
}
|
|
132
|
-
const canRetry = (
|
|
133
|
-
attempt + 1 < BACKUP_COPY_MAX_ATTEMPTS;
|
|
133
|
+
const canRetry = shouldRetryFileOperation(error) && attempt + 1 < BACKUP_COPY_MAX_ATTEMPTS;
|
|
134
134
|
if (canRetry) {
|
|
135
135
|
await new Promise((resolve) => setTimeout(resolve, BACKUP_COPY_BASE_DELAY_MS * 2 ** attempt));
|
|
136
136
|
continue;
|
|
@@ -146,9 +146,7 @@ async function renameFileWithRetry(sourcePath, destinationPath) {
|
|
|
146
146
|
return;
|
|
147
147
|
}
|
|
148
148
|
catch (error) {
|
|
149
|
-
const
|
|
150
|
-
const canRetry = (code === "EPERM" || code === "EBUSY" || code === "EAGAIN") &&
|
|
151
|
-
attempt + 1 < BACKUP_COPY_MAX_ATTEMPTS;
|
|
149
|
+
const canRetry = shouldRetryFileOperation(error) && attempt + 1 < BACKUP_COPY_MAX_ATTEMPTS;
|
|
152
150
|
if (!canRetry) {
|
|
153
151
|
throw error;
|
|
154
152
|
}
|
|
@@ -1357,7 +1355,22 @@ async function saveAccountsUnlocked(storage) {
|
|
|
1357
1355
|
walPath,
|
|
1358
1356
|
storageBackupEnabled: storageBackupEnabled && existsSync(path),
|
|
1359
1357
|
ensureDirectory: async () => {
|
|
1360
|
-
|
|
1358
|
+
const dir = dirname(path);
|
|
1359
|
+
// Account storage holds OAuth token material, so keep its directory
|
|
1360
|
+
// owner-only on POSIX (mode is a no-op on win32 / ACL-based).
|
|
1361
|
+
await fs.mkdir(dir, { recursive: true, mode: 0o700 });
|
|
1362
|
+
// mkdir's mode only applies to a freshly-created dir; a pre-existing dir
|
|
1363
|
+
// from an earlier build keeps its old (possibly world-listable) perms, so
|
|
1364
|
+
// re-assert 0o700 on POSIX. Best-effort: a chmod failure must not break
|
|
1365
|
+
// the save (the atomic write still uses mode 0o600 for the file itself).
|
|
1366
|
+
if (process.platform !== "win32") {
|
|
1367
|
+
try {
|
|
1368
|
+
await fs.chmod(dir, 0o700);
|
|
1369
|
+
}
|
|
1370
|
+
catch {
|
|
1371
|
+
// Best-effort hardening only.
|
|
1372
|
+
}
|
|
1373
|
+
}
|
|
1361
1374
|
},
|
|
1362
1375
|
ensureGitignore: () => ensureGitignore(path),
|
|
1363
1376
|
looksLikeSyntheticFixtureStorage,
|
|
@@ -1381,12 +1394,15 @@ async function saveAccountsUnlocked(storage) {
|
|
|
1381
1394
|
checksum: computeSha256(content),
|
|
1382
1395
|
content,
|
|
1383
1396
|
};
|
|
1384
|
-
|
|
1397
|
+
// Secret-bearing WAL write: retry transient Windows locks via the shared
|
|
1398
|
+
// taxonomy so a momentary AV/indexer/concurrent-reader lock can't fail an
|
|
1399
|
+
// otherwise-valid save (EBUSY/EPERM/EAGAIN/ENOTEMPTY/EACCES).
|
|
1400
|
+
await withFileOperationRetry(() => fs.writeFile(walPath, JSON.stringify(journalEntry), {
|
|
1385
1401
|
encoding: "utf-8",
|
|
1386
1402
|
mode: 0o600,
|
|
1387
|
-
});
|
|
1403
|
+
}));
|
|
1388
1404
|
},
|
|
1389
|
-
writeTemp: (tempPath, content) => fs.writeFile(tempPath, content, { encoding: "utf-8", mode: 0o600 }),
|
|
1405
|
+
writeTemp: (tempPath, content) => withFileOperationRetry(() => fs.writeFile(tempPath, content, { encoding: "utf-8", mode: 0o600 })),
|
|
1390
1406
|
statTemp: (tempPath) => fs.stat(tempPath),
|
|
1391
1407
|
renameTempToPath: async (tempPath) => {
|
|
1392
1408
|
let lastError = null;
|
|
@@ -1425,8 +1441,11 @@ async function saveAccountsUnlocked(storage) {
|
|
|
1425
1441
|
}
|
|
1426
1442
|
},
|
|
1427
1443
|
cleanupTemp: async (tempPath) => {
|
|
1444
|
+
// The temp file holds the full account store (refresh tokens, 0o600).
|
|
1445
|
+
// Retry cleanup so a transient lock can't strand a secret-bearing *.tmp
|
|
1446
|
+
// next to the destination; swallow a persistent failure (best effort).
|
|
1428
1447
|
try {
|
|
1429
|
-
await fs.unlink(tempPath);
|
|
1448
|
+
await withFileOperationRetry(() => fs.unlink(tempPath));
|
|
1430
1449
|
}
|
|
1431
1450
|
catch {
|
|
1432
1451
|
// Ignore cleanup failure.
|
|
@@ -1573,14 +1592,36 @@ export async function loadFlaggedAccounts() {
|
|
|
1573
1592
|
isRecord,
|
|
1574
1593
|
now: () => Date.now(),
|
|
1575
1594
|
}),
|
|
1576
|
-
persistRecoveredBackup: async (storage, resetMarkerPath) =>
|
|
1577
|
-
|
|
1578
|
-
|
|
1595
|
+
persistRecoveredBackup: async (storage, resetMarkerPath) => {
|
|
1596
|
+
// When loadFlaggedAccounts runs inside an already-held storage lock
|
|
1597
|
+
// (e.g. withAccountAndFlaggedStorageTransaction or
|
|
1598
|
+
// withFlaggedStorageTransaction loading current flagged state), the
|
|
1599
|
+
// global mutex has no reentrancy. Re-acquiring it here would deadlock,
|
|
1600
|
+
// so persist via the unlocked save while still respecting the reset
|
|
1601
|
+
// marker. Otherwise acquire the lock as usual.
|
|
1602
|
+
const recover = async () => {
|
|
1603
|
+
if (existsSync(resetMarkerPath)) {
|
|
1604
|
+
return false;
|
|
1605
|
+
}
|
|
1606
|
+
await saveFlaggedAccountsUnlocked(storage);
|
|
1607
|
+
return true;
|
|
1608
|
+
};
|
|
1609
|
+
return isStorageLockHeld() ? recover() : withStorageLock(recover);
|
|
1610
|
+
},
|
|
1611
|
+
saveFlaggedAccounts: async (storage) => {
|
|
1612
|
+
// Mirror persistRecoveredBackup above: loadFlaggedAccountsState's legacy
|
|
1613
|
+
// migration persists via this callback, and loadFlaggedAccounts can run
|
|
1614
|
+
// inside an already-held storage lock
|
|
1615
|
+
// (withAccountAndFlaggedStorageTransaction / withFlaggedStorageTransaction).
|
|
1616
|
+
// The global mutex is non-reentrant, so re-acquiring it via the locking
|
|
1617
|
+
// saveFlaggedAccounts would deadlock — use the unlocked save when the lock
|
|
1618
|
+
// is already held, otherwise acquire it as usual.
|
|
1619
|
+
if (isStorageLockHeld()) {
|
|
1620
|
+
await saveFlaggedAccountsUnlocked(storage);
|
|
1621
|
+
return;
|
|
1579
1622
|
}
|
|
1580
|
-
await
|
|
1581
|
-
|
|
1582
|
-
}),
|
|
1583
|
-
saveFlaggedAccounts,
|
|
1623
|
+
await saveFlaggedAccounts(storage);
|
|
1624
|
+
},
|
|
1584
1625
|
loadFlaggedAccountsState,
|
|
1585
1626
|
logError: (message, details) => {
|
|
1586
1627
|
log.error(message, details);
|