codex-multi-auth 1.2.7 → 1.3.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.
Files changed (160) hide show
  1. package/README.md +5 -3
  2. package/config/codex-legacy.json +85 -10
  3. package/config/codex-modern.json +35 -2
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +49 -22
  6. package/dist/index.js.map +1 -1
  7. package/dist/lib/accounts.d.ts +47 -0
  8. package/dist/lib/accounts.d.ts.map +1 -1
  9. package/dist/lib/accounts.js +277 -33
  10. package/dist/lib/accounts.js.map +1 -1
  11. package/dist/lib/auth/auth.d.ts +35 -0
  12. package/dist/lib/auth/auth.d.ts.map +1 -1
  13. package/dist/lib/auth/auth.js +140 -8
  14. package/dist/lib/auth/auth.js.map +1 -1
  15. package/dist/lib/auth/server.d.ts +1 -1
  16. package/dist/lib/auth/server.d.ts.map +1 -1
  17. package/dist/lib/auth/server.js +19 -11
  18. package/dist/lib/auth/server.js.map +1 -1
  19. package/dist/lib/capability-policy.d.ts.map +1 -1
  20. package/dist/lib/capability-policy.js +7 -2
  21. package/dist/lib/capability-policy.js.map +1 -1
  22. package/dist/lib/codex-manager/commands/status.d.ts.map +1 -1
  23. package/dist/lib/codex-manager/commands/status.js +13 -5
  24. package/dist/lib/codex-manager/commands/status.js.map +1 -1
  25. package/dist/lib/codex-manager/commands/verify.d.ts +59 -0
  26. package/dist/lib/codex-manager/commands/verify.d.ts.map +1 -0
  27. package/dist/lib/codex-manager/commands/verify.js +332 -0
  28. package/dist/lib/codex-manager/commands/verify.js.map +1 -0
  29. package/dist/lib/codex-manager/commands/why-selected.d.ts +57 -0
  30. package/dist/lib/codex-manager/commands/why-selected.d.ts.map +1 -0
  31. package/dist/lib/codex-manager/commands/why-selected.js +198 -0
  32. package/dist/lib/codex-manager/commands/why-selected.js.map +1 -0
  33. package/dist/lib/codex-manager/help.d.ts.map +1 -1
  34. package/dist/lib/codex-manager/help.js +4 -0
  35. package/dist/lib/codex-manager/help.js.map +1 -1
  36. package/dist/lib/codex-manager/settings-hub/backend.d.ts +9 -0
  37. package/dist/lib/codex-manager/settings-hub/backend.d.ts.map +1 -0
  38. package/dist/lib/codex-manager/settings-hub/backend.js +79 -0
  39. package/dist/lib/codex-manager/settings-hub/backend.js.map +1 -0
  40. package/dist/lib/codex-manager/settings-hub/dashboard.d.ts +24 -0
  41. package/dist/lib/codex-manager/settings-hub/dashboard.d.ts.map +1 -0
  42. package/dist/lib/codex-manager/settings-hub/dashboard.js +223 -0
  43. package/dist/lib/codex-manager/settings-hub/dashboard.js.map +1 -0
  44. package/dist/lib/codex-manager/settings-hub/experimental.d.ts +18 -0
  45. package/dist/lib/codex-manager/settings-hub/experimental.d.ts.map +1 -0
  46. package/dist/lib/codex-manager/settings-hub/experimental.js +78 -0
  47. package/dist/lib/codex-manager/settings-hub/experimental.js.map +1 -0
  48. package/dist/lib/codex-manager/settings-hub/index.d.ts +34 -0
  49. package/dist/lib/codex-manager/settings-hub/index.d.ts.map +1 -0
  50. package/dist/lib/codex-manager/settings-hub/index.js +81 -0
  51. package/dist/lib/codex-manager/settings-hub/index.js.map +1 -0
  52. package/dist/lib/codex-manager/settings-hub/shared.d.ts +40 -0
  53. package/dist/lib/codex-manager/settings-hub/shared.d.ts.map +1 -0
  54. package/dist/lib/codex-manager/settings-hub/shared.js +103 -0
  55. package/dist/lib/codex-manager/settings-hub/shared.js.map +1 -0
  56. package/dist/lib/codex-manager/settings-hub.d.ts +1 -64
  57. package/dist/lib/codex-manager/settings-hub.d.ts.map +1 -1
  58. package/dist/lib/codex-manager/settings-hub.js +4 -515
  59. package/dist/lib/codex-manager/settings-hub.js.map +1 -1
  60. package/dist/lib/codex-manager.d.ts.map +1 -1
  61. package/dist/lib/codex-manager.js +97 -15
  62. package/dist/lib/codex-manager.js.map +1 -1
  63. package/dist/lib/config.d.ts +14 -0
  64. package/dist/lib/config.d.ts.map +1 -1
  65. package/dist/lib/config.js +21 -9
  66. package/dist/lib/config.js.map +1 -1
  67. package/dist/lib/health.d.ts.map +1 -1
  68. package/dist/lib/health.js.map +1 -1
  69. package/dist/lib/prompts/codex.d.ts +2 -2
  70. package/dist/lib/prompts/codex.js +2 -2
  71. package/dist/lib/recovery/storage.d.ts +13 -0
  72. package/dist/lib/recovery/storage.d.ts.map +1 -1
  73. package/dist/lib/recovery/storage.js +144 -9
  74. package/dist/lib/recovery/storage.js.map +1 -1
  75. package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
  76. package/dist/lib/request/fetch-helpers.js +15 -2
  77. package/dist/lib/request/fetch-helpers.js.map +1 -1
  78. package/dist/lib/request/helpers/model-map.d.ts +3 -3
  79. package/dist/lib/request/helpers/model-map.d.ts.map +1 -1
  80. package/dist/lib/request/helpers/model-map.js +146 -70
  81. package/dist/lib/request/helpers/model-map.js.map +1 -1
  82. package/dist/lib/request/rate-limit-backoff.d.ts +14 -1
  83. package/dist/lib/request/rate-limit-backoff.d.ts.map +1 -1
  84. package/dist/lib/request/rate-limit-backoff.js +26 -5
  85. package/dist/lib/request/rate-limit-backoff.js.map +1 -1
  86. package/dist/lib/request/response-handler.d.ts.map +1 -1
  87. package/dist/lib/request/response-handler.js +82 -25
  88. package/dist/lib/request/response-handler.js.map +1 -1
  89. package/dist/lib/rotation.d.ts +55 -1
  90. package/dist/lib/rotation.d.ts.map +1 -1
  91. package/dist/lib/rotation.js +161 -23
  92. package/dist/lib/rotation.js.map +1 -1
  93. package/dist/lib/routing-mutex.d.ts +107 -0
  94. package/dist/lib/routing-mutex.d.ts.map +1 -0
  95. package/dist/lib/routing-mutex.js +104 -0
  96. package/dist/lib/routing-mutex.js.map +1 -0
  97. package/dist/lib/runtime/storage-scope.d.ts.map +1 -1
  98. package/dist/lib/runtime/storage-scope.js +17 -1
  99. package/dist/lib/runtime/storage-scope.js.map +1 -1
  100. package/dist/lib/schemas.d.ts +125 -0
  101. package/dist/lib/schemas.d.ts.map +1 -1
  102. package/dist/lib/schemas.js +139 -5
  103. package/dist/lib/schemas.js.map +1 -1
  104. package/dist/lib/shutdown.d.ts.map +1 -1
  105. package/dist/lib/shutdown.js +19 -10
  106. package/dist/lib/shutdown.js.map +1 -1
  107. package/dist/lib/storage/account-clear.d.ts.map +1 -1
  108. package/dist/lib/storage/account-clear.js +7 -1
  109. package/dist/lib/storage/account-clear.js.map +1 -1
  110. package/dist/lib/storage/flagged-storage-file.d.ts.map +1 -1
  111. package/dist/lib/storage/flagged-storage-file.js +17 -1
  112. package/dist/lib/storage/flagged-storage-file.js.map +1 -1
  113. package/dist/lib/storage/flagged-storage-io.d.ts.map +1 -1
  114. package/dist/lib/storage/flagged-storage-io.js +24 -10
  115. package/dist/lib/storage/flagged-storage-io.js.map +1 -1
  116. package/dist/lib/storage/import-export.d.ts.map +1 -1
  117. package/dist/lib/storage/import-export.js +31 -5
  118. package/dist/lib/storage/import-export.js.map +1 -1
  119. package/dist/lib/storage/paths.d.ts.map +1 -1
  120. package/dist/lib/storage/paths.js +62 -7
  121. package/dist/lib/storage/paths.js.map +1 -1
  122. package/dist/lib/storage/snapshot-inspectors.d.ts.map +1 -1
  123. package/dist/lib/storage/snapshot-inspectors.js +23 -16
  124. package/dist/lib/storage/snapshot-inspectors.js.map +1 -1
  125. package/dist/lib/storage/storage-parser.d.ts +17 -0
  126. package/dist/lib/storage/storage-parser.d.ts.map +1 -1
  127. package/dist/lib/storage/storage-parser.js +30 -1
  128. package/dist/lib/storage/storage-parser.js.map +1 -1
  129. package/dist/lib/storage.d.ts +1 -1
  130. package/dist/lib/storage.d.ts.map +1 -1
  131. package/dist/lib/storage.js +45 -26
  132. package/dist/lib/storage.js.map +1 -1
  133. package/dist/lib/ui/copy.d.ts +1 -1
  134. package/dist/lib/ui/copy.d.ts.map +1 -1
  135. package/dist/lib/ui/copy.js +2 -1
  136. package/dist/lib/ui/copy.js.map +1 -1
  137. package/dist/lib/ui/select.d.ts.map +1 -1
  138. package/dist/lib/ui/select.js +5 -1
  139. package/dist/lib/ui/select.js.map +1 -1
  140. package/dist/lib/unified-settings.d.ts.map +1 -1
  141. package/dist/lib/unified-settings.js +69 -14
  142. package/dist/lib/unified-settings.js.map +1 -1
  143. package/package.json +5 -5
  144. package/scripts/codex.js +330 -65
  145. package/dist/lib/codex-manager/auth-commands.d.ts +0 -72
  146. package/dist/lib/codex-manager/auth-commands.d.ts.map +0 -1
  147. package/dist/lib/codex-manager/auth-commands.js +0 -643
  148. package/dist/lib/codex-manager/auth-commands.js.map +0 -1
  149. package/dist/lib/codex-manager/commands/doctor.d.ts +0 -85
  150. package/dist/lib/codex-manager/commands/doctor.d.ts.map +0 -1
  151. package/dist/lib/codex-manager/commands/doctor.js +0 -424
  152. package/dist/lib/codex-manager/commands/doctor.js.map +0 -1
  153. package/dist/lib/codex-manager/commands/fix.d.ts +0 -92
  154. package/dist/lib/codex-manager/commands/fix.d.ts.map +0 -1
  155. package/dist/lib/codex-manager/commands/fix.js +0 -347
  156. package/dist/lib/codex-manager/commands/fix.js.map +0 -1
  157. package/dist/lib/codex-manager/commands/verify-flagged.d.ts +0 -69
  158. package/dist/lib/codex-manager/commands/verify-flagged.d.ts.map +0 -1
  159. package/dist/lib/codex-manager/commands/verify-flagged.js +0 -251
  160. package/dist/lib/codex-manager/commands/verify-flagged.js.map +0 -1
@@ -68,6 +68,10 @@ export declare const PluginConfigSchema: z.ZodObject<{
68
68
  preemptiveQuotaRemainingPercent5h: z.ZodOptional<z.ZodNumber>;
69
69
  preemptiveQuotaRemainingPercent7d: z.ZodOptional<z.ZodNumber>;
70
70
  preemptiveQuotaMaxDeferralMs: z.ZodOptional<z.ZodNumber>;
71
+ routingMutex: z.ZodOptional<z.ZodEnum<{
72
+ enabled: "enabled";
73
+ legacy: "legacy";
74
+ }>>;
71
75
  }, z.core.$strip>;
72
76
  export type PluginConfigFromSchema = z.infer<typeof PluginConfigSchema>;
73
77
  /**
@@ -355,6 +359,102 @@ export declare const AnyAccountStorageSchema: z.ZodDiscriminatedUnion<[z.ZodObje
355
359
  }, z.core.$strip>>;
356
360
  }, z.core.$strip>], "version">;
357
361
  export type AnyAccountStorageFromSchema = z.infer<typeof AnyAccountStorageSchema>;
362
+ /**
363
+ * Flagged account metadata V1 - extends V3 account metadata with flagging info.
364
+ * Mirrors the `FlaggedAccountMetadataV1` TS interface in `lib/storage.ts`.
365
+ * Uses `passthrough` so V3-compatible extra fields (workspaces, etc.) survive.
366
+ */
367
+ export declare const FlaggedAccountMetadataV1Schema: z.ZodObject<{
368
+ accountId: z.ZodOptional<z.ZodString>;
369
+ accountIdSource: z.ZodOptional<z.ZodEnum<{
370
+ token: "token";
371
+ id_token: "id_token";
372
+ org: "org";
373
+ manual: "manual";
374
+ }>>;
375
+ accountLabel: z.ZodOptional<z.ZodString>;
376
+ email: z.ZodOptional<z.ZodString>;
377
+ refreshToken: z.ZodString;
378
+ accessToken: z.ZodOptional<z.ZodString>;
379
+ expiresAt: z.ZodOptional<z.ZodNumber>;
380
+ enabled: z.ZodOptional<z.ZodBoolean>;
381
+ addedAt: z.ZodNumber;
382
+ lastUsed: z.ZodNumber;
383
+ lastSwitchReason: z.ZodOptional<z.ZodEnum<{
384
+ "rate-limit": "rate-limit";
385
+ initial: "initial";
386
+ rotation: "rotation";
387
+ best: "best";
388
+ restore: "restore";
389
+ }>>;
390
+ rateLimitResetTimes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodOptional<z.ZodNumber>>>;
391
+ coolingDownUntil: z.ZodOptional<z.ZodNumber>;
392
+ cooldownReason: z.ZodOptional<z.ZodEnum<{
393
+ "auth-failure": "auth-failure";
394
+ "network-error": "network-error";
395
+ "server-error": "server-error";
396
+ "rate-limit": "rate-limit";
397
+ }>>;
398
+ flaggedAt: z.ZodNumber;
399
+ flaggedReason: z.ZodOptional<z.ZodString>;
400
+ lastError: z.ZodOptional<z.ZodString>;
401
+ }, z.core.$loose>;
402
+ export type FlaggedAccountMetadataV1FromSchema = z.infer<typeof FlaggedAccountMetadataV1Schema>;
403
+ /**
404
+ * Flagged account storage V1 format (version: 1, accounts: []).
405
+ */
406
+ export declare const FlaggedAccountStorageV1Schema: z.ZodObject<{
407
+ version: z.ZodLiteral<1>;
408
+ accounts: z.ZodArray<z.ZodObject<{
409
+ accountId: z.ZodOptional<z.ZodString>;
410
+ accountIdSource: z.ZodOptional<z.ZodEnum<{
411
+ token: "token";
412
+ id_token: "id_token";
413
+ org: "org";
414
+ manual: "manual";
415
+ }>>;
416
+ accountLabel: z.ZodOptional<z.ZodString>;
417
+ email: z.ZodOptional<z.ZodString>;
418
+ refreshToken: z.ZodString;
419
+ accessToken: z.ZodOptional<z.ZodString>;
420
+ expiresAt: z.ZodOptional<z.ZodNumber>;
421
+ enabled: z.ZodOptional<z.ZodBoolean>;
422
+ addedAt: z.ZodNumber;
423
+ lastUsed: z.ZodNumber;
424
+ lastSwitchReason: z.ZodOptional<z.ZodEnum<{
425
+ "rate-limit": "rate-limit";
426
+ initial: "initial";
427
+ rotation: "rotation";
428
+ best: "best";
429
+ restore: "restore";
430
+ }>>;
431
+ rateLimitResetTimes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodOptional<z.ZodNumber>>>;
432
+ coolingDownUntil: z.ZodOptional<z.ZodNumber>;
433
+ cooldownReason: z.ZodOptional<z.ZodEnum<{
434
+ "auth-failure": "auth-failure";
435
+ "network-error": "network-error";
436
+ "server-error": "server-error";
437
+ "rate-limit": "rate-limit";
438
+ }>>;
439
+ flaggedAt: z.ZodNumber;
440
+ flaggedReason: z.ZodOptional<z.ZodString>;
441
+ lastError: z.ZodOptional<z.ZodString>;
442
+ }, z.core.$loose>>;
443
+ }, z.core.$strip>;
444
+ export type FlaggedAccountStorageV1FromSchema = z.infer<typeof FlaggedAccountStorageV1Schema>;
445
+ /**
446
+ * WAL journal entry used to persist in-flight account storage state.
447
+ * `content` is a JSON string that parses into an `AnyAccountStorage` payload.
448
+ * Mirrors the internal `AccountsJournalEntry` type in `lib/storage.ts`.
449
+ */
450
+ export declare const AccountsJournalEntrySchema: z.ZodObject<{
451
+ version: z.ZodLiteral<1>;
452
+ createdAt: z.ZodOptional<z.ZodNumber>;
453
+ path: z.ZodOptional<z.ZodString>;
454
+ content: z.ZodString;
455
+ checksum: z.ZodString;
456
+ }, z.core.$strip>;
457
+ export type AccountsJournalEntryFromSchema = z.infer<typeof AccountsJournalEntrySchema>;
358
458
  /**
359
459
  * Token failure reason codes.
360
460
  */
@@ -454,6 +554,31 @@ export declare function safeParseTokenResult(data: unknown): TokenResultFromSche
454
554
  * Returns null on failure.
455
555
  */
456
556
  export declare function safeParseOAuthTokenResponse(data: unknown): OAuthTokenResponseFromSchema | null;
557
+ /**
558
+ * Safely parse flagged account storage V1.
559
+ * Returns null on failure.
560
+ */
561
+ export declare function safeParseFlaggedAccountStorageV1(data: unknown): FlaggedAccountStorageV1FromSchema | null;
562
+ /**
563
+ * Safely parse accounts WAL journal entry.
564
+ * Returns null on failure.
565
+ */
566
+ export declare function safeParseAccountsJournalEntry(data: unknown): AccountsJournalEntryFromSchema | null;
567
+ /**
568
+ * Fail-closed helper that wraps BOTH `JSON.parse` and Zod schema validation.
569
+ *
570
+ * Behavior:
571
+ * - Returns `null` if `raw` is not a string.
572
+ * - Returns `null` on `JSON.parse` `SyntaxError`, logging a debug-level message
573
+ * tagged with `context` so callers can identify the boundary.
574
+ * - Returns `null` on schema validation failure, logging a debug-level message
575
+ * with the first validation issues.
576
+ * - Returns the parsed + validated data on success.
577
+ *
578
+ * Use this at JSON.parse boundaries (disk reads, user imports, WAL replay) so
579
+ * schema drift and corrupt files fail closed instead of crashing the caller.
580
+ */
581
+ export declare function safeParseJson<T>(raw: unknown, schema: z.ZodType<T>, context?: string): T | null;
457
582
  /**
458
583
  * Get validation errors as a flat array of strings.
459
584
  * Useful for logging and error messages.
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../lib/schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../lib/schemas.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,20 @@
4
4
  * Types are inferred from schemas using z.infer.
5
5
  */
6
6
  import { z } from "zod";
7
+ import { createLogger } from "./logger.js";
7
8
  import { MODEL_FAMILIES } from "./prompts/codex.js";
9
+ // Lazy-init so partial `vi.mock("../lib/logger.js", ...)` stubs in tests that
10
+ // do not export `createLogger` (e.g. `test/auth-logging.test.ts`) continue to
11
+ // load this module without crashing at import time.
12
+ let schemaLogInstance = null;
13
+ function schemaLog() {
14
+ if (schemaLogInstance)
15
+ return schemaLogInstance;
16
+ if (typeof createLogger !== "function")
17
+ return null;
18
+ schemaLogInstance = createLogger("schemas");
19
+ return schemaLogInstance;
20
+ }
8
21
  // ============================================================================
9
22
  // Plugin Configuration Schema
10
23
  // ============================================================================
@@ -22,7 +35,9 @@ export const PluginConfigSchema = z.object({
22
35
  unsupportedCodexPolicy: z.enum(["strict", "fallback"]).optional(),
23
36
  fallbackOnUnsupportedCodexModel: z.boolean().optional(),
24
37
  fallbackToGpt52OnUnsupportedGpt53: z.boolean().optional(),
25
- unsupportedCodexFallbackChain: z.record(z.string(), z.array(z.string().min(1))).optional(),
38
+ unsupportedCodexFallbackChain: z
39
+ .record(z.string(), z.array(z.string().min(1)))
40
+ .optional(),
26
41
  tokenRefreshSkewMs: z.number().min(0).optional(),
27
42
  rateLimitToastDebounceMs: z.number().min(0).optional(),
28
43
  toastDurationMs: z.number().min(1000).optional(),
@@ -58,6 +73,7 @@ export const PluginConfigSchema = z.object({
58
73
  preemptiveQuotaRemainingPercent5h: z.number().min(0).max(100).optional(),
59
74
  preemptiveQuotaRemainingPercent7d: z.number().min(0).max(100).optional(),
60
75
  preemptiveQuotaMaxDeferralMs: z.number().min(1_000).optional(),
76
+ routingMutex: z.enum(["enabled", "legacy"]).optional(),
61
77
  });
62
78
  // ============================================================================
63
79
  // Account Storage Schemas
@@ -65,11 +81,21 @@ export const PluginConfigSchema = z.object({
65
81
  /**
66
82
  * Source of the accountId used for ChatGPT requests.
67
83
  */
68
- export const AccountIdSourceSchema = z.enum(["token", "id_token", "org", "manual"]);
84
+ export const AccountIdSourceSchema = z.enum([
85
+ "token",
86
+ "id_token",
87
+ "org",
88
+ "manual",
89
+ ]);
69
90
  /**
70
91
  * Cooldown reason for temporary account suspension.
71
92
  */
72
- export const CooldownReasonSchema = z.enum(["auth-failure", "network-error", "server-error", "rate-limit"]);
93
+ export const CooldownReasonSchema = z.enum([
94
+ "auth-failure",
95
+ "network-error",
96
+ "server-error",
97
+ "rate-limit",
98
+ ]);
73
99
  /**
74
100
  * Last switch reason for account rotation tracking.
75
101
  */
@@ -106,8 +132,13 @@ export const AccountMetadataV3Schema = z.object({
106
132
  /**
107
133
  * Build activeIndexByFamily schema dynamically from MODEL_FAMILIES.
108
134
  */
109
- const modelFamilyEntries = MODEL_FAMILIES.map((family) => [family, z.number().optional()]);
110
- export const ActiveIndexByFamilySchema = z.object(Object.fromEntries(modelFamilyEntries)).partial();
135
+ const modelFamilyEntries = MODEL_FAMILIES.map((family) => [
136
+ family,
137
+ z.number().optional(),
138
+ ]);
139
+ export const ActiveIndexByFamilySchema = z
140
+ .object(Object.fromEntries(modelFamilyEntries))
141
+ .partial();
111
142
  /**
112
143
  * Account storage V3 - current storage format with per-family active indices.
113
144
  */
@@ -152,6 +183,41 @@ export const AnyAccountStorageSchema = z.discriminatedUnion("version", [
152
183
  AccountStorageV3Schema,
153
184
  ]);
154
185
  // ============================================================================
186
+ // Flagged Account Storage Schemas
187
+ // ============================================================================
188
+ /**
189
+ * Flagged account metadata V1 - extends V3 account metadata with flagging info.
190
+ * Mirrors the `FlaggedAccountMetadataV1` TS interface in `lib/storage.ts`.
191
+ * Uses `passthrough` so V3-compatible extra fields (workspaces, etc.) survive.
192
+ */
193
+ export const FlaggedAccountMetadataV1Schema = AccountMetadataV3Schema.extend({
194
+ flaggedAt: z.number(),
195
+ flaggedReason: z.string().optional(),
196
+ lastError: z.string().optional(),
197
+ }).passthrough();
198
+ /**
199
+ * Flagged account storage V1 format (version: 1, accounts: []).
200
+ */
201
+ export const FlaggedAccountStorageV1Schema = z.object({
202
+ version: z.literal(1),
203
+ accounts: z.array(FlaggedAccountMetadataV1Schema),
204
+ });
205
+ // ============================================================================
206
+ // Accounts Journal (WAL) Entry Schema
207
+ // ============================================================================
208
+ /**
209
+ * WAL journal entry used to persist in-flight account storage state.
210
+ * `content` is a JSON string that parses into an `AnyAccountStorage` payload.
211
+ * Mirrors the internal `AccountsJournalEntry` type in `lib/storage.ts`.
212
+ */
213
+ export const AccountsJournalEntrySchema = z.object({
214
+ version: z.literal(1),
215
+ createdAt: z.number().optional(),
216
+ path: z.string().optional(),
217
+ content: z.string(),
218
+ checksum: z.string(),
219
+ });
220
+ // ============================================================================
155
221
  // Token Result Schemas
156
222
  // ============================================================================
157
223
  /**
@@ -263,6 +329,74 @@ export function safeParseOAuthTokenResponse(data) {
263
329
  }
264
330
  return result.data;
265
331
  }
332
+ /**
333
+ * Safely parse flagged account storage V1.
334
+ * Returns null on failure.
335
+ */
336
+ export function safeParseFlaggedAccountStorageV1(data) {
337
+ const result = FlaggedAccountStorageV1Schema.safeParse(data);
338
+ if (!result.success) {
339
+ return null;
340
+ }
341
+ return result.data;
342
+ }
343
+ /**
344
+ * Safely parse accounts WAL journal entry.
345
+ * Returns null on failure.
346
+ */
347
+ export function safeParseAccountsJournalEntry(data) {
348
+ const result = AccountsJournalEntrySchema.safeParse(data);
349
+ if (!result.success) {
350
+ return null;
351
+ }
352
+ return result.data;
353
+ }
354
+ /**
355
+ * Fail-closed helper that wraps BOTH `JSON.parse` and Zod schema validation.
356
+ *
357
+ * Behavior:
358
+ * - Returns `null` if `raw` is not a string.
359
+ * - Returns `null` on `JSON.parse` `SyntaxError`, logging a debug-level message
360
+ * tagged with `context` so callers can identify the boundary.
361
+ * - Returns `null` on schema validation failure, logging a debug-level message
362
+ * with the first validation issues.
363
+ * - Returns the parsed + validated data on success.
364
+ *
365
+ * Use this at JSON.parse boundaries (disk reads, user imports, WAL replay) so
366
+ * schema drift and corrupt files fail closed instead of crashing the caller.
367
+ */
368
+ export function safeParseJson(raw, schema, context = "safeParseJson") {
369
+ if (typeof raw !== "string") {
370
+ schemaLog()?.debug("safeParseJson received non-string input", {
371
+ context,
372
+ type: typeof raw,
373
+ });
374
+ return null;
375
+ }
376
+ let parsed;
377
+ try {
378
+ parsed = JSON.parse(raw);
379
+ }
380
+ catch (error) {
381
+ schemaLog()?.debug("safeParseJson JSON.parse failed", {
382
+ context,
383
+ error: error instanceof Error ? error.message : String(error),
384
+ });
385
+ return null;
386
+ }
387
+ const result = schema.safeParse(parsed);
388
+ if (!result.success) {
389
+ schemaLog()?.debug("safeParseJson schema validation failed", {
390
+ context,
391
+ issues: result.error.issues.slice(0, 3).map((issue) => {
392
+ const path = issue.path.length > 0 ? `${issue.path.join(".")}: ` : "";
393
+ return `${path}${issue.message}`;
394
+ }),
395
+ });
396
+ return null;
397
+ }
398
+ return result.data;
399
+ }
266
400
  /**
267
401
  * Get validation errors as a flat array of strings.
268
402
  * Useful for logging and error messages.
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../lib/schemas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAoB,MAAM,oBAAoB,CAAC;AAEtE,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAClC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3E,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClE,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACnC,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5D,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAC/D,2BAA2B,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACnD,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvD,0BAA0B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxD,sBAAsB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;IACjE,+BAA+B,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACvD,iCAAiC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACzD,6BAA6B,EAAE,CAAC,CAAC,MAAM,CACtC,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAC1B,CAAC,QAAQ,EAAE;IACZ,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAChD,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAChD,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC1C,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACvC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAClC,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACvC,6BAA6B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClE,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACrD,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvD,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpD,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;IACvD,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;IACvD,8BAA8B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5D,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACxC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;IAChD,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;IACtD,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACvC,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxD,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACrD,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACvC,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;IACtD,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvD,oBAAoB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC5C,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC3C,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChD,0BAA0B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;IAC5D,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IAC3D,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpD,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACnD,oBAAoB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC5C,sBAAsB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC9C,iCAAiC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACxE,iCAAiC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACxE,4BAA4B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;CAC9D,CAAC,CAAC;AAIH,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAIpF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;AAI5G;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC;IACxC,YAAY;IACZ,SAAS;IACT,UAAU;IACV,MAAM;IACN,SAAS;CACT,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAIlF;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,eAAe,EAAE,qBAAqB,CAAC,QAAQ,EAAE;IACjD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,sBAAsB;IACvD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,gBAAgB,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IAC/C,mBAAmB,EAAE,sBAAsB,CAAC,QAAQ,EAAE;IACtD,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,cAAc,EAAE,oBAAoB,CAAC,QAAQ,EAAE;CAC/C,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,kBAAkB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC3F,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAChD,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAoD,CACzF,CAAC,OAAO,EAAE,CAAC;AAIZ;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC;IAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,mBAAmB,EAAE,yBAAyB,CAAC,QAAQ,EAAE;CACzD,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,eAAe,EAAE,qBAAqB,CAAC,QAAQ,EAAE;IACjD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,gBAAgB,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IAC/C,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,uBAAuB;IAClE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,cAAc,EAAE,oBAAoB,CAAC,QAAQ,EAAE;CAC/C,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC;IAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC9B,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;IACtE,sBAAsB;IACtB,sBAAsB;CACtB,CAAC,CAAC;AAIH,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC9C,YAAY;IACZ,kBAAkB;IAClB,eAAe;IACf,iBAAiB;IACjB,SAAS;CACT,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,MAAM,EAAE,wBAAwB,CAAC,QAAQ,EAAE;IAC3C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC7D,kBAAkB;IAClB,kBAAkB;CAClB,CAAC,CAAC;AAIH,+EAA+E;AAC/E,wDAAwD;AACxD,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAIH,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAa;IAClD,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAa;IACpD,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAa;IACtD,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAa;IACjD,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAa;IACxD,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,IAAa;IACnE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../lib/schemas.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../lib/shutdown.ts"],"names":[],"mappings":"AAAA,KAAK,SAAS,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAK5C,wBAAgB,eAAe,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAGnD;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAKrD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAWhD;AAmBD,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
1
+ {"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../lib/shutdown.ts"],"names":[],"mappings":"AAAA,KAAK,SAAS,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAM5C,wBAAgB,eAAe,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAGnD;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAKrD;AAED,wBAAgB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAqB1C;AAmBD,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
@@ -1,5 +1,6 @@
1
1
  const cleanupFunctions = [];
2
2
  let shutdownRegistered = false;
3
+ let cleanupPromise = null;
3
4
  export function registerCleanup(fn) {
4
5
  cleanupFunctions.push(fn);
5
6
  ensureShutdownHandler();
@@ -10,17 +11,25 @@ export function unregisterCleanup(fn) {
10
11
  cleanupFunctions.splice(index, 1);
11
12
  }
12
13
  }
13
- export async function runCleanup() {
14
- const fns = [...cleanupFunctions];
15
- cleanupFunctions.length = 0;
16
- for (const fn of fns) {
17
- try {
18
- await fn();
19
- }
20
- catch {
21
- // Ignore cleanup errors during shutdown
22
- }
14
+ export function runCleanup() {
15
+ if (cleanupPromise) {
16
+ return cleanupPromise;
23
17
  }
18
+ cleanupPromise = (async () => {
19
+ const fns = [...cleanupFunctions];
20
+ cleanupFunctions.length = 0;
21
+ for (const fn of fns) {
22
+ try {
23
+ await fn();
24
+ }
25
+ catch {
26
+ // Ignore cleanup errors during shutdown
27
+ }
28
+ }
29
+ })().finally(() => {
30
+ cleanupPromise = null;
31
+ });
32
+ return cleanupPromise;
24
33
  }
25
34
  function ensureShutdownHandler() {
26
35
  if (shutdownRegistered)
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../lib/shutdown.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAgB,EAAE,CAAC;AACzC,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAE/B,MAAM,UAAU,eAAe,CAAC,EAAa;IAC5C,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,qBAAqB,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAa;IAC9C,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QAClB,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC/B,MAAM,GAAG,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC;IAClC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;IAE5B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC;YACJ,MAAM,EAAE,EAAE,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACR,wCAAwC;QACzC,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,qBAAqB;IAC7B,IAAI,kBAAkB;QAAE,OAAO;IAC/B,kBAAkB,GAAG,IAAI,CAAC;IAE1B,MAAM,YAAY,GAAG,GAAG,EAAE;QACzB,KAAK,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;QAC/B,KAAK,UAAU,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe;IAC9B,OAAO,gBAAgB,CAAC,MAAM,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../lib/shutdown.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAgB,EAAE,CAAC;AACzC,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAC/B,IAAI,cAAc,GAAyB,IAAI,CAAC;AAEhD,MAAM,UAAU,eAAe,CAAC,EAAa;IAC5C,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,qBAAqB,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAa;IAC9C,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QAClB,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;AACF,CAAC;AAED,MAAM,UAAU,UAAU;IACzB,IAAI,cAAc,EAAE,CAAC;QACpB,OAAO,cAAc,CAAC;IACvB,CAAC;IAED,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;QAC5B,MAAM,GAAG,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC;QAClC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;QAE5B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC;gBACJ,MAAM,EAAE,EAAE,CAAC;YACZ,CAAC;YAAC,MAAM,CAAC;gBACR,wCAAwC;YACzC,CAAC;QACF,CAAC;IACF,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;QACjB,cAAc,GAAG,IAAI,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,OAAO,cAAc,CAAC;AACvB,CAAC;AAED,SAAS,qBAAqB;IAC7B,IAAI,kBAAkB;QAAE,OAAO;IAC/B,kBAAkB,GAAG,IAAI,CAAC;IAE1B,MAAM,YAAY,GAAG,GAAG,EAAE;QACzB,KAAK,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;QAC/B,KAAK,UAAU,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe;IAC9B,OAAO,gBAAgB,CAAC,MAAM,CAAC;AAChC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"account-clear.d.ts","sourceRoot":"","sources":["../../../lib/storage/account-clear.ts"],"names":[],"mappings":"AAWA,wBAAsB,4BAA4B,CAAC,MAAM,EAAE;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACtE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDhB"}
1
+ {"version":3,"file":"account-clear.d.ts","sourceRoot":"","sources":["../../../lib/storage/account-clear.ts"],"names":[],"mappings":"AAWA,wBAAsB,4BAA4B,CAAC,MAAM,EAAE;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACtE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DhB"}
@@ -44,9 +44,15 @@ export async function clearAccountStorageArtifacts(params) {
44
44
  });
45
45
  }
46
46
  };
47
+ // Write the intentional-reset marker BEFORE we start deleting artifacts.
48
+ // If the process crashes between the primary unlink and the marker write,
49
+ // the next load looks like accidental loss rather than an intentional
50
+ // reset (AUDIT-M04 / E-07). Writing the marker first lets restore logic
51
+ // recognise the clear-in-progress state and skip the "corrupted" path,
52
+ // matching the ordering already used by the flagged-clear flow.
53
+ await fs.writeFile(params.resetMarkerPath, JSON.stringify({ version: 1, createdAt: Date.now() }), { encoding: "utf-8", mode: 0o600 });
47
54
  await clearPath(params.path, true);
48
55
  await clearPath(params.walPath, true);
49
- await fs.writeFile(params.resetMarkerPath, JSON.stringify({ version: 1, createdAt: Date.now() }), { encoding: "utf-8", mode: 0o600 });
50
56
  for (const backupPath of params.backupPaths) {
51
57
  try {
52
58
  await clearPath(backupPath, false);
@@ -1 +1 @@
1
- {"version":3,"file":"account-clear.js","sourceRoot":"","sources":["../../../lib/storage/account-clear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAEzC,SAAS,kBAAkB,CAAC,KAAc;IACzC,MAAM,IAAI,GAAI,KAA2C,EAAE,IAAI,CAAC;IAChE,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,EAAU;IAC9B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,MAMlD;IACA,MAAM,SAAS,GAAG,KAAK,EACtB,UAAkB,EAClB,QAAiB,EACD,EAAE;QAClB,IAAI,CAAC;YACJ,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;gBACjD,IAAI,CAAC;oBACJ,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oBAC5B,OAAO;gBACR,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;oBACnD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACvB,OAAO;oBACR,CAAC;oBACD,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;wBAChD,MAAM,KAAK,CAAC;oBACb,CAAC;oBACD,MAAM,KAAK,CAAC,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC;gBAChC,CAAC;YACF,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;YACnD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvB,OAAO;YACR,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACd,MAAM,CAAC,QAAQ,CAAC,0CAA0C,EAAE;oBAC3D,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;iBACpB,CAAC,CAAC;gBACH,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,CAAC,QAAQ,CAAC,0CAA0C,EAAE;gBAC3D,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;aACpB,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,MAAM,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,EAAE,CAAC,SAAS,CACjB,MAAM,CAAC,eAAe,EACtB,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EACrD,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAClC,CAAC;IACF,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QAC7C,IAAI,CAAC;YACJ,MAAM,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACR,yDAAyD;QAC1D,CAAC;IACF,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"account-clear.js","sourceRoot":"","sources":["../../../lib/storage/account-clear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAEzC,SAAS,kBAAkB,CAAC,KAAc;IACzC,MAAM,IAAI,GAAI,KAA2C,EAAE,IAAI,CAAC;IAChE,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,EAAU;IAC9B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,MAMlD;IACA,MAAM,SAAS,GAAG,KAAK,EACtB,UAAkB,EAClB,QAAiB,EACD,EAAE;QAClB,IAAI,CAAC;YACJ,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;gBACjD,IAAI,CAAC;oBACJ,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oBAC5B,OAAO;gBACR,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;oBACnD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACvB,OAAO;oBACR,CAAC;oBACD,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;wBAChD,MAAM,KAAK,CAAC;oBACb,CAAC;oBACD,MAAM,KAAK,CAAC,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC;gBAChC,CAAC;YACF,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;YACnD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvB,OAAO;YACR,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACd,MAAM,CAAC,QAAQ,CAAC,0CAA0C,EAAE;oBAC3D,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;iBACpB,CAAC,CAAC;gBACH,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,CAAC,QAAQ,CAAC,0CAA0C,EAAE;gBAC3D,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;aACpB,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC;IAEF,yEAAyE;IACzE,0EAA0E;IAC1E,sEAAsE;IACtE,wEAAwE;IACxE,uEAAuE;IACvE,gEAAgE;IAChE,MAAM,EAAE,CAAC,SAAS,CACjB,MAAM,CAAC,eAAe,EACtB,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EACrD,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAClC,CAAC;IACF,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,MAAM,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtC,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QAC7C,IAAI,CAAC;YACJ,MAAM,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACR,yDAAyD;QAC1D,CAAC;IACF,CAAC;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"flagged-storage-file.d.ts","sourceRoot":"","sources":["../../../lib/storage/flagged-storage-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAU7D,wBAAsB,iBAAiB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IACL,QAAQ,EAAE,cAAc,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACrD,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC,GACC,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED,wBAAsB,2BAA2B,CAChD,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IACL,QAAQ,EAAE,cAAc,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACrD,uBAAuB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,uBAAuB,CAAC;IACpE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC,GACC,OAAO,CAAC,uBAAuB,CAAC,CAIlC"}
1
+ {"version":3,"file":"flagged-storage-file.d.ts","sourceRoot":"","sources":["../../../lib/storage/flagged-storage-file.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAe7D,wBAAsB,iBAAiB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IACL,QAAQ,EAAE,cAAc,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACrD,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC,GACC,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED,wBAAsB,2BAA2B,CAChD,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IACL,QAAQ,EAAE,cAAc,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACrD,uBAAuB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,uBAAuB,CAAC;IACpE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC,GACC,OAAO,CAAC,uBAAuB,CAAC,CAkBlC"}
@@ -1,5 +1,11 @@
1
+ import { FlaggedAccountStorageV1Schema, safeParseJson } from "../schemas.js";
1
2
  import { sleep } from "../utils.js";
2
- const RETRYABLE_READ_CODES = new Set(["EBUSY", "EAGAIN"]);
3
+ // Include EPERM: on Windows, antivirus + file-indexing briefly take an
4
+ // exclusive lock on recently-written files, producing EPERM on the reader's
5
+ // next open. The write side of this module already retries EBUSY/EPERM, so
6
+ // the read side must match or the flagged-state reader fails prematurely and
7
+ // triggers unnecessary empty/backup fallbacks (AUDIT-M05 / E-08).
8
+ const RETRYABLE_READ_CODES = new Set(["EBUSY", "EPERM", "EAGAIN"]);
3
9
  function isRetryableReadError(error) {
4
10
  const code = error?.code;
5
11
  return typeof code === "string" && RETRYABLE_READ_CODES.has(code);
@@ -19,6 +25,16 @@ export async function readFileWithRetry(path, deps) {
19
25
  }
20
26
  export async function loadFlaggedAccountsFromFile(path, deps) {
21
27
  const content = await readFileWithRetry(path, deps);
28
+ // Fail-closed JSON boundary: Zod is the primary validator. On happy path
29
+ // the validated payload flows straight to the TS normalizer (Zod wins).
30
+ // On schema or syntax failure we fall through to `JSON.parse` so:
31
+ // - structurally-unknown legacy payloads still reach the normalizer, and
32
+ // - `SyntaxError` continues to propagate to outer callers in
33
+ // `flagged-storage-io.ts`, which log + fall back to backups.
34
+ const validated = safeParseJson(content, FlaggedAccountStorageV1Schema, "storage.loadFlaggedAccountsFromFile");
35
+ if (validated !== null) {
36
+ return deps.normalizeFlaggedStorage(validated);
37
+ }
22
38
  const data = JSON.parse(content);
23
39
  return deps.normalizeFlaggedStorage(data);
24
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"flagged-storage-file.js","sourceRoot":"","sources":["../../../lib/storage/flagged-storage-file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE1D,SAAS,oBAAoB,CAAC,KAAc;IAC3C,MAAM,IAAI,GAAI,KAA2C,EAAE,IAAI,CAAC;IAChE,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,IAAY,EACZ,IAGC;IAED,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC;YACJ,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;gBAClD,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC;QAChD,CAAC;IACF,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAChD,IAAY,EACZ,IAIC;IAED,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;IAC5C,OAAO,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"flagged-storage-file.js","sourceRoot":"","sources":["../../../lib/storage/flagged-storage-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE7E,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,uEAAuE;AACvE,4EAA4E;AAC5E,2EAA2E;AAC3E,6EAA6E;AAC7E,kEAAkE;AAClE,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEnE,SAAS,oBAAoB,CAAC,KAAc;IAC3C,MAAM,IAAI,GAAI,KAA2C,EAAE,IAAI,CAAC;IAChE,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,IAAY,EACZ,IAGC;IAED,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC;YACJ,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;gBAClD,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC;QAChD,CAAC;IACF,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAChD,IAAY,EACZ,IAIC;IAED,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpD,yEAAyE;IACzE,wEAAwE;IACxE,kEAAkE;IAClE,2EAA2E;IAC3E,+DAA+D;IAC/D,iEAAiE;IACjE,MAAM,SAAS,GAAG,aAAa,CAC9B,OAAO,EACP,6BAA6B,EAC7B,qCAAqC,CACrC,CAAC;IACF,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;IAC5C,OAAO,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"flagged-storage-io.d.ts","sourceRoot":"","sources":["../../../lib/storage/flagged-storage-io.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAqD7D,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,uBAAuB,CAAC;IACpE,sBAAsB,EAAE,CACvB,OAAO,EAAE,uBAAuB,EAChC,eAAe,EAAE,MAAM,KACnB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,mBAAmB,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACtE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACrE,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA0HnC;AAED,wBAAsB,iCAAiC,CACtD,OAAO,EAAE,uBAAuB,EAChC,MAAM,EAAE;IACP,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,uBAAuB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,uBAAuB,CAAC;IACpE,iBAAiB,EAAE,CAClB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAAE,KACtC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACrE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACtE,GACC,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAED,wBAAsB,0BAA0B,CAAC,MAAM,EAAE;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACtE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDhB"}
1
+ {"version":3,"file":"flagged-storage-io.d.ts","sourceRoot":"","sources":["../../../lib/storage/flagged-storage-io.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAwE7D,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,uBAAuB,CAAC;IACpE,sBAAsB,EAAE,CACvB,OAAO,EAAE,uBAAuB,EAChC,eAAe,EAAE,MAAM,KACnB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,mBAAmB,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACtE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACrE,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA0InC;AAED,wBAAsB,iCAAiC,CACtD,OAAO,EAAE,uBAAuB,EAChC,MAAM,EAAE;IACP,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,uBAAuB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,uBAAuB,CAAC;IACpE,iBAAiB,EAAE,CAClB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAAE,KACtC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACrE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACtE,GACC,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAED,wBAAsB,0BAA0B,CAAC,MAAM,EAAE;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACtE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8ChB"}
@@ -1,5 +1,6 @@
1
1
  import { existsSync, promises as fs } from "node:fs";
2
2
  import { dirname } from "node:path";
3
+ import { FlaggedAccountStorageV1Schema, safeParseJson } from "../schemas.js";
3
4
  import { readFileWithRetry } from "./flagged-storage-file.js";
4
5
  const RETRYABLE_UNLINK_CODES = new Set(["EBUSY", "EAGAIN", "EPERM"]);
5
6
  function isValidFlaggedStorageCandidate(data, storage) {
@@ -15,6 +16,24 @@ function isValidFlaggedStorageCandidate(data, storage) {
15
16
  }
16
17
  return candidate.accounts.length === 0 || storage.accounts.length > 0;
17
18
  }
19
+ /**
20
+ * Parse flagged account storage content with Zod as the authoritative
21
+ * validator while preserving legacy JSON-level recovery semantics.
22
+ *
23
+ * - On Zod-valid JSON: returns the validated payload directly (Zod wins).
24
+ * - On JSON-valid but schema-invalid: returns the raw JSON so the caller can
25
+ * still invoke `normalizeFlaggedStorage` + `isValidFlaggedStorageCandidate`
26
+ * (preserves legacy partial-recovery behavior).
27
+ * - On `SyntaxError`: the error propagates to outer `try/catch` blocks which
28
+ * log + fall back to backups (same as pre-migration behavior).
29
+ */
30
+ function parseFlaggedStorageContent(content, context) {
31
+ const validated = safeParseJson(content, FlaggedAccountStorageV1Schema, context);
32
+ if (validated !== null) {
33
+ return validated;
34
+ }
35
+ return JSON.parse(content);
36
+ }
18
37
  /**
19
38
  * Return the ordered backup paths consulted for flagged-account recovery.
20
39
  */
@@ -32,9 +51,7 @@ async function unlinkWithRetry(candidatePath) {
32
51
  if (code === "ENOENT") {
33
52
  return;
34
53
  }
35
- if (!code ||
36
- !RETRYABLE_UNLINK_CODES.has(code) ||
37
- attempt >= 4) {
54
+ if (!code || !RETRYABLE_UNLINK_CODES.has(code) || attempt >= 4) {
38
55
  throw error;
39
56
  }
40
57
  await new Promise((resolve) => setTimeout(resolve, 10 * 2 ** attempt));
@@ -55,7 +72,7 @@ export async function loadFlaggedAccountsState(params) {
55
72
  const backupContent = await readFileWithRetry(backupPath, {
56
73
  readFile: fs.readFile,
57
74
  });
58
- const backupData = JSON.parse(backupContent);
75
+ const backupData = parseFlaggedStorageContent(backupContent, "loadFlaggedAccountsState.backup");
59
76
  const recovered = params.normalizeFlaggedStorage(backupData);
60
77
  if (!isValidFlaggedStorageCandidate(backupData, recovered)) {
61
78
  params.logError("Skipping invalid flagged account backup payload", {
@@ -104,7 +121,7 @@ export async function loadFlaggedAccountsState(params) {
104
121
  const content = await readFileWithRetry(params.path, {
105
122
  readFile: fs.readFile,
106
123
  });
107
- const data = JSON.parse(content);
124
+ const data = parseFlaggedStorageContent(content, "loadFlaggedAccountsState.primary");
108
125
  const loaded = params.normalizeFlaggedStorage(data);
109
126
  if (!isValidFlaggedStorageCandidate(data, loaded)) {
110
127
  throw new Error("Invalid flagged account storage payload");
@@ -135,7 +152,7 @@ export async function loadFlaggedAccountsState(params) {
135
152
  const legacyContent = await readFileWithRetry(params.legacyPath, {
136
153
  readFile: fs.readFile,
137
154
  });
138
- const legacyData = JSON.parse(legacyContent);
155
+ const legacyData = parseFlaggedStorageContent(legacyContent, "loadFlaggedAccountsState.legacy");
139
156
  const migrated = params.normalizeFlaggedStorage(legacyData);
140
157
  if (migrated.accounts.length > 0) {
141
158
  await params.saveFlaggedAccounts(migrated);
@@ -220,10 +237,7 @@ export async function clearFlaggedAccountsOnDisk(params) {
220
237
  });
221
238
  throw error;
222
239
  }
223
- for (const candidate of [
224
- params.path,
225
- ...params.backupPaths,
226
- ]) {
240
+ for (const candidate of [params.path, ...params.backupPaths]) {
227
241
  try {
228
242
  await unlinkWithRetry(candidate);
229
243
  }