on-zero 0.6.2 → 0.6.4

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 (82) hide show
  1. package/dist/cjs/createZeroClient.cjs +91 -12
  2. package/dist/cjs/createZeroClient.connection.test.cjs +163 -0
  3. package/dist/cjs/createZeroClient.connection.test.native.js +242 -0
  4. package/dist/cjs/createZeroClient.connection.test.native.js.map +1 -0
  5. package/dist/cjs/createZeroClient.native.js +99 -12
  6. package/dist/cjs/createZeroClient.native.js.map +1 -1
  7. package/dist/cjs/createZeroClient.recovery.test.cjs +52 -0
  8. package/dist/cjs/createZeroClient.recovery.test.native.js +52 -0
  9. package/dist/cjs/createZeroClient.recovery.test.native.js.map +1 -1
  10. package/dist/cjs/helpers/recoverZeroClient.cjs +197 -14
  11. package/dist/cjs/helpers/recoverZeroClient.native.js +220 -24
  12. package/dist/cjs/helpers/recoverZeroClient.native.js.map +1 -1
  13. package/dist/cjs/helpers/recoverZeroClient.test.cjs +241 -0
  14. package/dist/cjs/helpers/recoverZeroClient.test.native.js +269 -0
  15. package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -1
  16. package/dist/cjs/index.cjs +2 -0
  17. package/dist/cjs/index.native.js +2 -0
  18. package/dist/cjs/index.native.js.map +1 -1
  19. package/dist/cjs/multi.cjs +13 -0
  20. package/dist/cjs/multi.native.js +35 -0
  21. package/dist/cjs/multi.native.js.map +1 -1
  22. package/dist/cjs/multiPartition.test.cjs +42 -0
  23. package/dist/cjs/multiPartition.test.native.js +51 -0
  24. package/dist/cjs/multiPartition.test.native.js.map +1 -0
  25. package/dist/esm/createZeroClient.connection.test.mjs +164 -0
  26. package/dist/esm/createZeroClient.connection.test.mjs.map +1 -0
  27. package/dist/esm/createZeroClient.connection.test.native.js +240 -0
  28. package/dist/esm/createZeroClient.connection.test.native.js.map +1 -0
  29. package/dist/esm/createZeroClient.mjs +92 -13
  30. package/dist/esm/createZeroClient.mjs.map +1 -1
  31. package/dist/esm/createZeroClient.native.js +100 -13
  32. package/dist/esm/createZeroClient.native.js.map +1 -1
  33. package/dist/esm/createZeroClient.recovery.test.mjs +52 -0
  34. package/dist/esm/createZeroClient.recovery.test.mjs.map +1 -1
  35. package/dist/esm/createZeroClient.recovery.test.native.js +52 -0
  36. package/dist/esm/createZeroClient.recovery.test.native.js.map +1 -1
  37. package/dist/esm/helpers/recoverZeroClient.mjs +196 -15
  38. package/dist/esm/helpers/recoverZeroClient.mjs.map +1 -1
  39. package/dist/esm/helpers/recoverZeroClient.native.js +219 -25
  40. package/dist/esm/helpers/recoverZeroClient.native.js.map +1 -1
  41. package/dist/esm/helpers/recoverZeroClient.test.mjs +242 -1
  42. package/dist/esm/helpers/recoverZeroClient.test.mjs.map +1 -1
  43. package/dist/esm/helpers/recoverZeroClient.test.native.js +270 -1
  44. package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
  45. package/dist/esm/index.js +2 -2
  46. package/dist/esm/index.js.map +1 -1
  47. package/dist/esm/index.mjs +2 -2
  48. package/dist/esm/index.mjs.map +1 -1
  49. package/dist/esm/index.native.js +2 -2
  50. package/dist/esm/index.native.js.map +1 -1
  51. package/dist/esm/multi.mjs +13 -1
  52. package/dist/esm/multi.mjs.map +1 -1
  53. package/dist/esm/multi.native.js +35 -1
  54. package/dist/esm/multi.native.js.map +1 -1
  55. package/dist/esm/multiPartition.test.mjs +43 -0
  56. package/dist/esm/multiPartition.test.mjs.map +1 -0
  57. package/dist/esm/multiPartition.test.native.js +49 -0
  58. package/dist/esm/multiPartition.test.native.js.map +1 -0
  59. package/lint/ssr-guards.js +164 -0
  60. package/package.json +2 -2
  61. package/readme.md +126 -0
  62. package/src/createZeroClient.connection.test.tsx +162 -0
  63. package/src/createZeroClient.recovery.test.tsx +68 -0
  64. package/src/createZeroClient.tsx +159 -13
  65. package/src/helpers/recoverZeroClient.test.ts +270 -1
  66. package/src/helpers/recoverZeroClient.ts +347 -50
  67. package/src/index.ts +6 -0
  68. package/src/multi.ts +33 -0
  69. package/src/multiPartition.test.ts +38 -0
  70. package/types/createZeroClient.connection.test.d.ts +5 -0
  71. package/types/createZeroClient.connection.test.d.ts.map +1 -0
  72. package/types/createZeroClient.d.ts +17 -0
  73. package/types/createZeroClient.d.ts.map +1 -1
  74. package/types/createZeroServer.d.ts +4 -4
  75. package/types/helpers/recoverZeroClient.d.ts +23 -1
  76. package/types/helpers/recoverZeroClient.d.ts.map +1 -1
  77. package/types/index.d.ts +1 -1
  78. package/types/index.d.ts.map +1 -1
  79. package/types/multi.d.ts +1 -0
  80. package/types/multi.d.ts.map +1 -1
  81. package/types/multiPartition.test.d.ts +2 -0
  82. package/types/multiPartition.test.d.ts.map +1 -0
@@ -150,6 +150,45 @@ async function flush() {
150
150
  (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
151
151
  (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
152
152
  });
153
+ (0, import_vitest.test)("logSink recovers on native sqlite finalized-statement local-store loss", async () => {
154
+ const {
155
+ deps,
156
+ deleteLocalState,
157
+ reload
158
+ } = setup();
159
+ const sqliteError = new Error("This statement has been finalized");
160
+ sqliteError.name = "SqliteError";
161
+ const sink = (0, import_recoverZeroClient.composeRecoveryLogSink)(deps);
162
+ sink.log("error", {
163
+ bgIntervalProcess: "Heartbeat"
164
+ }, "Error running.", sqliteError);
165
+ await flush();
166
+ (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
167
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
168
+ });
169
+ (0, import_vitest.test)("logSink recovers on repeated store-closed local-store loss", async () => {
170
+ const nowSpy = import_vitest.vi.spyOn(Date, "now");
171
+ const {
172
+ deps,
173
+ deleteLocalState,
174
+ reload
175
+ } = setup();
176
+ try {
177
+ const sink = (0, import_recoverZeroClient.composeRecoveryLogSink)(deps);
178
+ nowSpy.mockReturnValue(1e4);
179
+ sink.log("error", void 0, "Failed to connect.", new Error("Store is closed"));
180
+ await flush();
181
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
182
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
183
+ nowSpy.mockReturnValue(13e3);
184
+ sink.log("error", void 0, "Failed to connect.", new Error("Store is closed"));
185
+ await flush();
186
+ (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
187
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
188
+ } finally {
189
+ nowSpy.mockRestore();
190
+ }
191
+ });
153
192
  (0, import_vitest.test)("logSink with no consumer preserves console output and still watches", async () => {
154
193
  const {
155
194
  deps,
@@ -198,6 +237,27 @@ async function flush() {
198
237
  (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
199
238
  (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
200
239
  });
240
+ (0, import_vitest.test)("recovery log classification is narrow", () => {
241
+ const sqliteError = new Error("This statement has been finalized");
242
+ sqliteError.name = "SqliteError";
243
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ["Error running.", sqliteError])).toMatchObject({
244
+ reason: "sqlite-statement-finalized",
245
+ dropLocalState: true
246
+ });
247
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", [{
248
+ name: "SqliteError",
249
+ message: "database is locked"
250
+ }])).toBeUndefined();
251
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("warn", ["Expected IndexedDB not found"])).toBeUndefined();
252
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ["Store is closed"], 1e4)).toBeUndefined();
253
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ["Store is closed"], 11e3)).toBeUndefined();
254
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ["Store is closed"], 14e3)).toMatchObject({
255
+ reason: "store-closed-repeat",
256
+ dropLocalState: true
257
+ });
258
+ (0, import_recoverZeroClient.resetRecoveryStateForTests)();
259
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ['Mutator "send" error on server', "Store is closed"], 2e4)).toBeUndefined();
260
+ });
201
261
  (0, import_vitest.test)("default reload path is a safe no-op when location is absent", async () => {
202
262
  const events = [];
203
263
  const zeroEvents = (0, import_helpers.createEmitter)(`test-recover-${emitterSeq++}`, null);
@@ -229,4 +289,185 @@ async function flush() {
229
289
  reason: "client state not found"
230
290
  });
231
291
  });
292
+ (0, import_vitest.test)("scheduleReload defers the reload AND the store delete until performReload runs", async () => {
293
+ const {
294
+ deps,
295
+ deleteLocalState,
296
+ reload
297
+ } = setup();
298
+ let captured;
299
+ deps.scheduleReload = ctx => {
300
+ captured = ctx;
301
+ };
302
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
303
+ await flush();
304
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
305
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
306
+ (0, import_vitest.expect)(captured).toMatchObject({
307
+ reasonKey: "client-state-not-found",
308
+ dropLocalState: true
309
+ });
310
+ await captured.performReload();
311
+ await flush();
312
+ (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
313
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
314
+ });
315
+ (0, import_vitest.test)("scheduleReload that reloads directly skips the delete and beforeReload", async () => {
316
+ const {
317
+ deps,
318
+ deleteLocalState,
319
+ reload
320
+ } = setup();
321
+ const nativeReload = import_vitest.vi.fn();
322
+ const beforeReload = import_vitest.vi.fn(async () => {});
323
+ deps.beforeReload = beforeReload;
324
+ deps.scheduleReload = () => {
325
+ nativeReload();
326
+ };
327
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
328
+ await flush();
329
+ (0, import_vitest.expect)(nativeReload).toHaveBeenCalledTimes(1);
330
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
331
+ (0, import_vitest.expect)(beforeReload).not.toHaveBeenCalled();
332
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
333
+ });
334
+ (0, import_vitest.test)("scheduleReload performReload is idempotent (one reload even if called twice)", async () => {
335
+ const {
336
+ deps,
337
+ deleteLocalState,
338
+ reload
339
+ } = setup();
340
+ let captured;
341
+ deps.scheduleReload = ctx => {
342
+ captured = ctx;
343
+ };
344
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
345
+ await flush();
346
+ await captured.performReload();
347
+ await captured.performReload();
348
+ await flush();
349
+ (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
350
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
351
+ });
352
+ (0, import_vitest.test)("scheduleReload deferred PAST the latch timeout still deletes and reloads exactly once", async () => {
353
+ import_vitest.vi.useFakeTimers();
354
+ try {
355
+ const {
356
+ deps,
357
+ deleteLocalState,
358
+ reload
359
+ } = setup();
360
+ let captured;
361
+ deps.scheduleReload = ctx => {
362
+ captured = ctx;
363
+ };
364
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
365
+ (0, import_vitest.expect)(captured).toBeDefined();
366
+ await import_vitest.vi.advanceTimersByTimeAsync(2e4);
367
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
368
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
369
+ await captured.performReload();
370
+ (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
371
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
372
+ } finally {
373
+ import_vitest.vi.useRealTimers();
374
+ }
375
+ });
376
+ (0, import_vitest.test)("a slow beforeReload holds the latch through the timeout window (no double reload)", async () => {
377
+ import_vitest.vi.useFakeTimers();
378
+ try {
379
+ const {
380
+ deps,
381
+ reload
382
+ } = setup();
383
+ let releaseBeforeReload = () => {};
384
+ deps.beforeReload = () => new Promise(resolve => {
385
+ releaseBeforeReload = resolve;
386
+ });
387
+ const recovery = (0, import_recoverZeroClient.makeZeroRecovery)(deps);
388
+ recovery.onClientStateNotFound();
389
+ await import_vitest.vi.advanceTimersByTimeAsync(2e4);
390
+ recovery.onClientStateNotFound();
391
+ await import_vitest.vi.advanceTimersByTimeAsync(0);
392
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
393
+ releaseBeforeReload();
394
+ await import_vitest.vi.advanceTimersByTimeAsync(0);
395
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
396
+ } finally {
397
+ import_vitest.vi.useRealTimers();
398
+ }
399
+ });
400
+ (0, import_vitest.test)("injectable guardStorage gives cross-reload loop protection (Hermes has no sessionStorage)", async () => {
401
+ const store = /* @__PURE__ */new Map();
402
+ const {
403
+ deps,
404
+ reload,
405
+ events
406
+ } = setup();
407
+ deps.guardStorage = {
408
+ getItem: key => store.get(key) ?? null,
409
+ setItem: (key, value) => {
410
+ store.set(key, value);
411
+ }
412
+ };
413
+ const recovery = (0, import_recoverZeroClient.makeZeroRecovery)(deps);
414
+ recovery.onClientStateNotFound();
415
+ await flush();
416
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
417
+ (0, import_recoverZeroClient.resetRecoveryStateForTests)();
418
+ recovery.onClientStateNotFound();
419
+ await flush();
420
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
421
+ (0, import_vitest.expect)(events.some(event => event.type === "fatal")).toBe(true);
422
+ });
423
+ (0, import_vitest.test)("a guardStorage that throws never crashes recovery (in-memory is the floor)", async () => {
424
+ const {
425
+ deps,
426
+ reload
427
+ } = setup();
428
+ deps.guardStorage = {
429
+ getItem: () => {
430
+ throw new Error("no storage on this platform");
431
+ },
432
+ setItem: () => {
433
+ throw new Error("no storage on this platform");
434
+ }
435
+ };
436
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
437
+ await flush();
438
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
439
+ });
440
+ (0, import_vitest.test)("classifier recognizes the mutation / connection desync class", () => {
441
+ const cases = [[["sent mutation ID 5 but expected 4"], "mutation-desync"], [["oooMutation detected"], "mutation-desync"], [["Server reported an out-of-order mutation"], "mutation-desync"], [["Ignoring mutation 3, already processed. Expected: 4"], "mutation-desync"], [["InvalidConnectionRequestLastMutationID"], "mutation-desync"], [["InvalidConnectionRequestBaseCookie"], "connection-cookie-invalid"], [["ClientNotFound: client gone"], "client-not-found"], [["connection userID mismatch"], "connection-userid-mismatch"]];
442
+ for (const [args, reason] of cases) {
443
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", args)).toMatchObject({
444
+ reason,
445
+ dropLocalState: true
446
+ });
447
+ }
448
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ["consecutive server-ack timeouts"])).toBeUndefined();
449
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ["Connection attempt timed out after 10 seconds"])).toBeUndefined();
450
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("warn", ["ClientNotFound"])).toBeUndefined();
451
+ });
452
+ (0, import_vitest.test)("benignLogFilter suppresses recovery for a matching classified log", async () => {
453
+ const {
454
+ deps,
455
+ deleteLocalState,
456
+ reload
457
+ } = setup();
458
+ deps.benignLogFilter = message => message.includes("ClientNotFound");
459
+ const sink = (0, import_recoverZeroClient.composeRecoveryLogSink)(deps);
460
+ sink.log("error", void 0, "ClientNotFound: gone");
461
+ await flush();
462
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
463
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
464
+ sink.log("error", void 0, "sent mutation ID 5 but expected 4");
465
+ await flush();
466
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
467
+ });
468
+ (0, import_vitest.test)("isRecoverableZeroStalePokeMessage matches only the stale-cookie signatures", () => {
469
+ (0, import_vitest.expect)((0, import_recoverZeroClient.isRecoverableZeroStalePokeMessage)("Server returned unexpected base cookie during sync")).toBe(true);
470
+ (0, import_vitest.expect)((0, import_recoverZeroClient.isRecoverableZeroStalePokeMessage)("Received cookie 5 is < than last snapshot cookie 9, ignoring client view")).toBe(true);
471
+ (0, import_vitest.expect)((0, import_recoverZeroClient.isRecoverableZeroStalePokeMessage)("client state not found")).toBe(false);
472
+ });
232
473
  });
@@ -192,6 +192,45 @@ async function flush() {
192
192
  (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
193
193
  (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
194
194
  });
195
+ (0, import_vitest.test)("logSink recovers on native sqlite finalized-statement local-store loss", async function () {
196
+ var {
197
+ deps,
198
+ deleteLocalState,
199
+ reload
200
+ } = setup();
201
+ var sqliteError = new Error("This statement has been finalized");
202
+ sqliteError.name = "SqliteError";
203
+ var sink = (0, import_recoverZeroClient.composeRecoveryLogSink)(deps);
204
+ sink.log("error", {
205
+ bgIntervalProcess: "Heartbeat"
206
+ }, "Error running.", sqliteError);
207
+ await flush();
208
+ (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
209
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
210
+ });
211
+ (0, import_vitest.test)("logSink recovers on repeated store-closed local-store loss", async function () {
212
+ var nowSpy = import_vitest.vi.spyOn(Date, "now");
213
+ var {
214
+ deps,
215
+ deleteLocalState,
216
+ reload
217
+ } = setup();
218
+ try {
219
+ var sink = (0, import_recoverZeroClient.composeRecoveryLogSink)(deps);
220
+ nowSpy.mockReturnValue(1e4);
221
+ sink.log("error", void 0, "Failed to connect.", new Error("Store is closed"));
222
+ await flush();
223
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
224
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
225
+ nowSpy.mockReturnValue(13e3);
226
+ sink.log("error", void 0, "Failed to connect.", new Error("Store is closed"));
227
+ await flush();
228
+ (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
229
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
230
+ } finally {
231
+ nowSpy.mockRestore();
232
+ }
233
+ });
195
234
  (0, import_vitest.test)("logSink with no consumer preserves console output and still watches", async function () {
196
235
  var {
197
236
  deps,
@@ -252,6 +291,27 @@ async function flush() {
252
291
  (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
253
292
  (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
254
293
  });
294
+ (0, import_vitest.test)("recovery log classification is narrow", function () {
295
+ var sqliteError = new Error("This statement has been finalized");
296
+ sqliteError.name = "SqliteError";
297
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ["Error running.", sqliteError])).toMatchObject({
298
+ reason: "sqlite-statement-finalized",
299
+ dropLocalState: true
300
+ });
301
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", [{
302
+ name: "SqliteError",
303
+ message: "database is locked"
304
+ }])).toBeUndefined();
305
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("warn", ["Expected IndexedDB not found"])).toBeUndefined();
306
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ["Store is closed"], 1e4)).toBeUndefined();
307
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ["Store is closed"], 11e3)).toBeUndefined();
308
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ["Store is closed"], 14e3)).toMatchObject({
309
+ reason: "store-closed-repeat",
310
+ dropLocalState: true
311
+ });
312
+ (0, import_recoverZeroClient.resetRecoveryStateForTests)();
313
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ['Mutator "send" error on server', "Store is closed"], 2e4)).toBeUndefined();
314
+ });
255
315
  (0, import_vitest.test)("default reload path is a safe no-op when location is absent", async function () {
256
316
  var events = [];
257
317
  var zeroEvents = (0, import_helpers.createEmitter)(`test-recover-${emitterSeq++}`, null);
@@ -285,5 +345,214 @@ async function flush() {
285
345
  reason: "client state not found"
286
346
  });
287
347
  });
348
+ (0, import_vitest.test)("scheduleReload defers the reload AND the store delete until performReload runs", async function () {
349
+ var {
350
+ deps,
351
+ deleteLocalState,
352
+ reload
353
+ } = setup();
354
+ var captured;
355
+ deps.scheduleReload = function (ctx) {
356
+ captured = ctx;
357
+ };
358
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
359
+ await flush();
360
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
361
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
362
+ (0, import_vitest.expect)(captured).toMatchObject({
363
+ reasonKey: "client-state-not-found",
364
+ dropLocalState: true
365
+ });
366
+ await captured.performReload();
367
+ await flush();
368
+ (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
369
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
370
+ });
371
+ (0, import_vitest.test)("scheduleReload that reloads directly skips the delete and beforeReload", async function () {
372
+ var {
373
+ deps,
374
+ deleteLocalState,
375
+ reload
376
+ } = setup();
377
+ var nativeReload = import_vitest.vi.fn();
378
+ var beforeReload = import_vitest.vi.fn(async function () {});
379
+ deps.beforeReload = beforeReload;
380
+ deps.scheduleReload = function () {
381
+ nativeReload();
382
+ };
383
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
384
+ await flush();
385
+ (0, import_vitest.expect)(nativeReload).toHaveBeenCalledTimes(1);
386
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
387
+ (0, import_vitest.expect)(beforeReload).not.toHaveBeenCalled();
388
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
389
+ });
390
+ (0, import_vitest.test)("scheduleReload performReload is idempotent (one reload even if called twice)", async function () {
391
+ var {
392
+ deps,
393
+ deleteLocalState,
394
+ reload
395
+ } = setup();
396
+ var captured;
397
+ deps.scheduleReload = function (ctx) {
398
+ captured = ctx;
399
+ };
400
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
401
+ await flush();
402
+ await captured.performReload();
403
+ await captured.performReload();
404
+ await flush();
405
+ (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
406
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
407
+ });
408
+ (0, import_vitest.test)("scheduleReload deferred PAST the latch timeout still deletes and reloads exactly once", async function () {
409
+ import_vitest.vi.useFakeTimers();
410
+ try {
411
+ var {
412
+ deps,
413
+ deleteLocalState,
414
+ reload
415
+ } = setup();
416
+ var captured;
417
+ deps.scheduleReload = function (ctx) {
418
+ captured = ctx;
419
+ };
420
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
421
+ (0, import_vitest.expect)(captured).toBeDefined();
422
+ await import_vitest.vi.advanceTimersByTimeAsync(2e4);
423
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
424
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
425
+ await captured.performReload();
426
+ (0, import_vitest.expect)(deleteLocalState).toHaveBeenCalledTimes(1);
427
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
428
+ } finally {
429
+ import_vitest.vi.useRealTimers();
430
+ }
431
+ });
432
+ (0, import_vitest.test)("a slow beforeReload holds the latch through the timeout window (no double reload)", async function () {
433
+ import_vitest.vi.useFakeTimers();
434
+ try {
435
+ var {
436
+ deps,
437
+ reload
438
+ } = setup();
439
+ var releaseBeforeReload = function () {};
440
+ deps.beforeReload = function () {
441
+ return new Promise(function (resolve) {
442
+ releaseBeforeReload = resolve;
443
+ });
444
+ };
445
+ var recovery = (0, import_recoverZeroClient.makeZeroRecovery)(deps);
446
+ recovery.onClientStateNotFound();
447
+ await import_vitest.vi.advanceTimersByTimeAsync(2e4);
448
+ recovery.onClientStateNotFound();
449
+ await import_vitest.vi.advanceTimersByTimeAsync(0);
450
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
451
+ releaseBeforeReload();
452
+ await import_vitest.vi.advanceTimersByTimeAsync(0);
453
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
454
+ } finally {
455
+ import_vitest.vi.useRealTimers();
456
+ }
457
+ });
458
+ (0, import_vitest.test)("injectable guardStorage gives cross-reload loop protection (Hermes has no sessionStorage)", async function () {
459
+ var store = /* @__PURE__ */new Map();
460
+ var {
461
+ deps,
462
+ reload,
463
+ events
464
+ } = setup();
465
+ deps.guardStorage = {
466
+ getItem: function (key) {
467
+ var _store_get;
468
+ return (_store_get = store.get(key)) !== null && _store_get !== void 0 ? _store_get : null;
469
+ },
470
+ setItem: function (key, value) {
471
+ store.set(key, value);
472
+ }
473
+ };
474
+ var recovery = (0, import_recoverZeroClient.makeZeroRecovery)(deps);
475
+ recovery.onClientStateNotFound();
476
+ await flush();
477
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
478
+ (0, import_recoverZeroClient.resetRecoveryStateForTests)();
479
+ recovery.onClientStateNotFound();
480
+ await flush();
481
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
482
+ (0, import_vitest.expect)(events.some(function (event) {
483
+ return event.type === "fatal";
484
+ })).toBe(true);
485
+ });
486
+ (0, import_vitest.test)("a guardStorage that throws never crashes recovery (in-memory is the floor)", async function () {
487
+ var {
488
+ deps,
489
+ reload
490
+ } = setup();
491
+ deps.guardStorage = {
492
+ getItem: function () {
493
+ throw new Error("no storage on this platform");
494
+ },
495
+ setItem: function () {
496
+ throw new Error("no storage on this platform");
497
+ }
498
+ };
499
+ (0, import_recoverZeroClient.makeZeroRecovery)(deps).onClientStateNotFound();
500
+ await flush();
501
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
502
+ });
503
+ (0, import_vitest.test)("classifier recognizes the mutation / connection desync class", function () {
504
+ var cases = [[["sent mutation ID 5 but expected 4"], "mutation-desync"], [["oooMutation detected"], "mutation-desync"], [["Server reported an out-of-order mutation"], "mutation-desync"], [["Ignoring mutation 3, already processed. Expected: 4"], "mutation-desync"], [["InvalidConnectionRequestLastMutationID"], "mutation-desync"], [["InvalidConnectionRequestBaseCookie"], "connection-cookie-invalid"], [["ClientNotFound: client gone"], "client-not-found"], [["connection userID mismatch"], "connection-userid-mismatch"]];
505
+ var _iteratorNormalCompletion = true,
506
+ _didIteratorError = false,
507
+ _iteratorError = void 0;
508
+ try {
509
+ for (var _iterator = cases[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
510
+ var [args, reason] = _step.value;
511
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", args)).toMatchObject({
512
+ reason,
513
+ dropLocalState: true
514
+ });
515
+ }
516
+ } catch (err) {
517
+ _didIteratorError = true;
518
+ _iteratorError = err;
519
+ } finally {
520
+ try {
521
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
522
+ _iterator.return();
523
+ }
524
+ } finally {
525
+ if (_didIteratorError) {
526
+ throw _iteratorError;
527
+ }
528
+ }
529
+ }
530
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ["consecutive server-ack timeouts"])).toBeUndefined();
531
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("error", ["Connection attempt timed out after 10 seconds"])).toBeUndefined();
532
+ (0, import_vitest.expect)((0, import_recoverZeroClient.classifyZeroRecoveryLog)("warn", ["ClientNotFound"])).toBeUndefined();
533
+ });
534
+ (0, import_vitest.test)("benignLogFilter suppresses recovery for a matching classified log", async function () {
535
+ var {
536
+ deps,
537
+ deleteLocalState,
538
+ reload
539
+ } = setup();
540
+ deps.benignLogFilter = function (message) {
541
+ return message.includes("ClientNotFound");
542
+ };
543
+ var sink = (0, import_recoverZeroClient.composeRecoveryLogSink)(deps);
544
+ sink.log("error", void 0, "ClientNotFound: gone");
545
+ await flush();
546
+ (0, import_vitest.expect)(deleteLocalState).not.toHaveBeenCalled();
547
+ (0, import_vitest.expect)(reload).not.toHaveBeenCalled();
548
+ sink.log("error", void 0, "sent mutation ID 5 but expected 4");
549
+ await flush();
550
+ (0, import_vitest.expect)(reload).toHaveBeenCalledTimes(1);
551
+ });
552
+ (0, import_vitest.test)("isRecoverableZeroStalePokeMessage matches only the stale-cookie signatures", function () {
553
+ (0, import_vitest.expect)((0, import_recoverZeroClient.isRecoverableZeroStalePokeMessage)("Server returned unexpected base cookie during sync")).toBe(true);
554
+ (0, import_vitest.expect)((0, import_recoverZeroClient.isRecoverableZeroStalePokeMessage)("Received cookie 5 is < than last snapshot cookie 9, ignoring client view")).toBe(true);
555
+ (0, import_vitest.expect)((0, import_recoverZeroClient.isRecoverableZeroStalePokeMessage)("client state not found")).toBe(false);
556
+ });
288
557
  });
289
558
  //# sourceMappingURL=recoverZeroClient.test.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["import_helpers","require","import_zero","import_vitest","import_recoverZeroClient","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj","value","emitterSeq","setup","events","zeroEvents","createEmitter","listen","event","push","deleteLocalState","vi","fn","Promise","resolve","reload","deps","flush","setTimeout","beforeEach","window","sessionStorage","clear","resetRecoveryStateForTests","describe","test","makeZeroRecovery","onUpdateNeeded","type","UpdateNeededReasonType","SchemaVersionNotSupported","expect","toEqual","reason","stringContaining","toHaveBeenCalledTimes","recovery","NewClientGroup","VersionNotSupported","not","toHaveBeenCalled","onClientStateNotFound","a","b","mock","calls","toBe","filter","some","consumer","log","sink","composeRecoveryLogSink","infoSpy","spyOn","console","mockImplementation","worker","toHaveBeenCalledWith","mockRestore"],"sources":["../../../src/helpers/recoverZeroClient.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["import_helpers","require","import_zero","import_vitest","import_recoverZeroClient","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj","value","emitterSeq","setup","events","zeroEvents","createEmitter","listen","event","push","deleteLocalState","vi","fn","Promise","resolve","reload","deps","flush","setTimeout","beforeEach","window","sessionStorage","clear","resetRecoveryStateForTests","describe","test","makeZeroRecovery","onUpdateNeeded","type","UpdateNeededReasonType","SchemaVersionNotSupported","expect","toEqual","reason","stringContaining","toHaveBeenCalledTimes","recovery","NewClientGroup","VersionNotSupported","not","toHaveBeenCalled","onClientStateNotFound","a","b","mock","calls","toBe","filter","some","consumer","log","sink","composeRecoveryLogSink","sqliteError","Error","name","bgIntervalProcess","nowSpy","spyOn","Date","mockReturnValue","mockRestore","infoSpy","console","mockImplementation","worker","toHaveBeenCalledWith","_sink_flush","ClassSink","ClassSink2","flush2","flushed","call","classifyZeroRecoveryLog","toMatchObject","dropLocalState","message","toBeUndefined","originalLocation","globalThis","location","toContainEqual","captured","scheduleReload","ctx","reasonKey","performReload","nativeReload","beforeReload","useFakeTimers","toBeDefined","advanceTimersByTimeAsync","useRealTimers","releaseBeforeReload"],"sources":["../../../src/helpers/recoverZeroClient.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -23,6 +23,7 @@ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
23
23
  }), mod);
24
24
  var index_exports = {};
25
25
  __export(index_exports, {
26
+ classifyZeroRecoveryLog: () => import_recoverZeroClient.classifyZeroRecoveryLog,
26
27
  clearZeroClientData: () => import_clearZeroClientData.clearZeroClientData,
27
28
  composeRecoveryLogSink: () => import_recoverZeroClient.composeRecoveryLogSink,
28
29
  createZeroClient: () => import_createZeroClient.createZeroClient,
@@ -30,6 +31,7 @@ __export(index_exports, {
30
31
  defineQuery: () => import_zero.defineQuery,
31
32
  ensureAuth: () => import_getAuth.ensureAuth,
32
33
  getAuth: () => import_getAuth.getAuth,
34
+ isRecoverableZeroStalePokeMessage: () => import_recoverZeroClient.isRecoverableZeroStalePokeMessage,
33
35
  makeZeroRecovery: () => import_recoverZeroClient.makeZeroRecovery,
34
36
  resetShownZeroClientError: () => import_showZeroClientError.resetShownZeroClientError,
35
37
  setAuthData: () => import_state.setAuthData,
@@ -25,6 +25,7 @@ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
25
25
  }), mod);
26
26
  var index_exports = {};
27
27
  __export(index_exports, {
28
+ classifyZeroRecoveryLog: () => import_recoverZeroClient.classifyZeroRecoveryLog,
28
29
  clearZeroClientData: () => import_clearZeroClientData.clearZeroClientData,
29
30
  composeRecoveryLogSink: () => import_recoverZeroClient.composeRecoveryLogSink,
30
31
  createZeroClient: () => import_createZeroClient.createZeroClient,
@@ -32,6 +33,7 @@ __export(index_exports, {
32
33
  defineQuery: () => import_zero.defineQuery,
33
34
  ensureAuth: () => import_getAuth.ensureAuth,
34
35
  getAuth: () => import_getAuth.getAuth,
36
+ isRecoverableZeroStalePokeMessage: () => import_recoverZeroClient.isRecoverableZeroStalePokeMessage,
35
37
  makeZeroRecovery: () => import_recoverZeroClient.makeZeroRecovery,
36
38
  resetShownZeroClientError: () => import_showZeroClientError.resetShownZeroClientError,
37
39
  setAuthData: () => import_state.setAuthData,
@@ -1 +1 @@
1
- {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","index_exports","__export","clearZeroClientData","import_clearZeroClientData","composeRecoveryLogSink","import_recoverZeroClient","createZeroClient","import_createZeroClient","defineQueries","import_zero","defineQuery","ensureAuth","import_getAuth","getAuth","makeZeroRecovery","resetShownZeroClientError","import_showZeroClientError","setAuthData","import_state","setEnvironment","setRunner","import_zeroRunner","showZeroClientErrorOnce","module","exports","__reExport","require"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,aAAA;AAAAC,QAAA,CAAAD,aAAA;EAAAE,mBAAA,EAAAA,CAAA,KAAAC,0BAAA,CAAAD,mBAAA;EAAAE,sBAAA,EAAAA,CAAA,KAAAC,wBAAA,CAAAD,sBAAA;EAAAE,gBAAA,EAAAA,CAAA,KAAAC,uBAAA,CAAAD,gBAAA;EAAAE,aAAA,EAAAA,CAAA,KAAAC,WAAA,CAAAD,aAAA;EAAAE,WAAA,EAAAA,CAAA,KAAAD,WAAA,CAAAC,WAAA;EAAAC,UAAA,EAAAA,CAAA,KAAAC,cAAA,CAAAD,UAAA;EAAAE,OAAA,EAAAA,CAAA,KAAAD,cAAA,CAAAC,OAAA;EAAAC,gBAAA,EAAAA,CAAA,KAAAT,wBAAA,CAAAS,gBAAA;EAAAC,yBAAA,EAAAA,CAAA,KAAAC,0BAAA,CAAAD,yBAAA;EAAAE,WAAA,EAAAA,CAAA,KAAAC,YAAA,CAAAD,WAAA;EAAAE,cAAA,EAAAA,CAAA,KAAAD,YAAA,CAAAC,cAAA;EAAAC,SAAA,EAAAA,CAAA,KAAAC,iBAAA,CAAAD,SAAA;EAAAE,uBAAA,EAAAA,CAAA,KAAAN,0BAAA,CAAAM;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAA7B,YAAc,CAAAK,aAAA;AACdyB,UAAA,CAAAzB,aAAA,EAAc0B,OAAA,gCADd,GAAAH,MAAA,CAAAC,OAAA;AAEAC,UAAA,CAAAzB,aAAA,EAAc0B,OAAA,+BAAAH,MAFd,CAAAC,OAAA;AAGAC,UAAA,CAAAzB,aAAA,EAAc0B,OAAA,oCAAAH,MAHd,CAAAC,OAAA;AAIAC,UAAA,CAAAzB,aAAA,EAAc0B,OAAA,wCAJdH,MAAA,CAAAC,OAAA;AAKAC,UAAA,CAAAzB,aAAA,EAAc0B,OAAA,wCALdH,MAAA,CAAAC,OAAA;AAMAC,UAAA,CAAAzB,aAAA,EAAc0B,OAAA,qCANd,GAAAH,MAAA,CAAAC,OAAA;AAOAC,UAAA,CAAAzB,aAAoC,EAAA0B,OAAA,qCAAAH,MAAA,CAAAC,OAAA;AACpC,IAAAZ,cAAA,GAA4Cc,OAAA;AAE5C,IAAAR,YAAA,GAAAQ,OAAA,oBAKO;AACP,IAAAnB,uBAAc,GAAAmB,OAAA,+BAhBd;AAiBAD,UAAA,CAAAzB,aAAA,EAAc0B,OAAA,gCAjBd,GAAAH,MAAA,CAAAC,OAAA;AAkBAC,UAAA,CAAAzB,aAAA,EAAc0B,OAAA,8BAlBd,EAAAH,MAAA,CAAAC,OAAA;AAmBAC,UAAA,CAAAzB,aAAA,EAAc0B,OAAA,2BAnBd,GAAAH,MAAA,CAAAC,OAAA;AAoBAC,UAAA,CAAAzB,aAA2C,EAAA0B,OAAA,qBAAAH,MAAA,CAAAC,OAAA;AAC3C,IAAAH,iBAAA,GAAAK,OAAc;AACdD,UAAA,CAAAzB,aAAA,EAAc0B,OAAA,wBAtBd,GAAAH,MAAA,CAAAC,OAAA;AAuBAC,UAAA,CAAAzB,aAAA,EAAc0B,OAAA,uBAAAH,MAvBd,CAAAC,OAAA;AAwBAC,UAAA,CAAAzB,aAAA,EAAc0B,OAAA,0BAxBd,GAAAH,MAAA,CAAAC,OAAA;AAyBAC,UAAA,CAAAzB,aAA2C,EAAA0B,OAAA,qBAAAH,MAAA,CAAAC,OAAA;AAQ3C,IAAAf,WAAA,GAAAiB,OAAA,iBAGO;AACP,IAAAvB,0BAAA,GAKOuB,OAAA;AACP,IAAAV,0BAAA,GAIOU,OAAA","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","index_exports","__export","classifyZeroRecoveryLog","import_recoverZeroClient","clearZeroClientData","import_clearZeroClientData","composeRecoveryLogSink","createZeroClient","import_createZeroClient","defineQueries","import_zero","defineQuery","ensureAuth","import_getAuth","getAuth","isRecoverableZeroStalePokeMessage","makeZeroRecovery","resetShownZeroClientError","import_showZeroClientError","setAuthData","import_state","setEnvironment","setRunner","import_zeroRunner","showZeroClientErrorOnce","module","exports","__reExport","require"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}