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.
- package/dist/cjs/createZeroClient.cjs +91 -12
- package/dist/cjs/createZeroClient.connection.test.cjs +163 -0
- package/dist/cjs/createZeroClient.connection.test.native.js +242 -0
- package/dist/cjs/createZeroClient.connection.test.native.js.map +1 -0
- package/dist/cjs/createZeroClient.native.js +99 -12
- package/dist/cjs/createZeroClient.native.js.map +1 -1
- package/dist/cjs/createZeroClient.recovery.test.cjs +52 -0
- package/dist/cjs/createZeroClient.recovery.test.native.js +52 -0
- package/dist/cjs/createZeroClient.recovery.test.native.js.map +1 -1
- package/dist/cjs/helpers/recoverZeroClient.cjs +197 -14
- package/dist/cjs/helpers/recoverZeroClient.native.js +220 -24
- package/dist/cjs/helpers/recoverZeroClient.native.js.map +1 -1
- package/dist/cjs/helpers/recoverZeroClient.test.cjs +241 -0
- package/dist/cjs/helpers/recoverZeroClient.test.native.js +269 -0
- package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/index.native.js +2 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/multi.cjs +13 -0
- package/dist/cjs/multi.native.js +35 -0
- package/dist/cjs/multi.native.js.map +1 -1
- package/dist/cjs/multiPartition.test.cjs +42 -0
- package/dist/cjs/multiPartition.test.native.js +51 -0
- package/dist/cjs/multiPartition.test.native.js.map +1 -0
- package/dist/esm/createZeroClient.connection.test.mjs +164 -0
- package/dist/esm/createZeroClient.connection.test.mjs.map +1 -0
- package/dist/esm/createZeroClient.connection.test.native.js +240 -0
- package/dist/esm/createZeroClient.connection.test.native.js.map +1 -0
- package/dist/esm/createZeroClient.mjs +92 -13
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +100 -13
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/createZeroClient.recovery.test.mjs +52 -0
- package/dist/esm/createZeroClient.recovery.test.mjs.map +1 -1
- package/dist/esm/createZeroClient.recovery.test.native.js +52 -0
- package/dist/esm/createZeroClient.recovery.test.native.js.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.mjs +196 -15
- package/dist/esm/helpers/recoverZeroClient.mjs.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.native.js +219 -25
- package/dist/esm/helpers/recoverZeroClient.native.js.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.test.mjs +242 -1
- package/dist/esm/helpers/recoverZeroClient.test.mjs.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.test.native.js +270 -1
- package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +2 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -2
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/multi.mjs +13 -1
- package/dist/esm/multi.mjs.map +1 -1
- package/dist/esm/multi.native.js +35 -1
- package/dist/esm/multi.native.js.map +1 -1
- package/dist/esm/multiPartition.test.mjs +43 -0
- package/dist/esm/multiPartition.test.mjs.map +1 -0
- package/dist/esm/multiPartition.test.native.js +49 -0
- package/dist/esm/multiPartition.test.native.js.map +1 -0
- package/lint/ssr-guards.js +164 -0
- package/package.json +2 -2
- package/readme.md +126 -0
- package/src/createZeroClient.connection.test.tsx +162 -0
- package/src/createZeroClient.recovery.test.tsx +68 -0
- package/src/createZeroClient.tsx +159 -13
- package/src/helpers/recoverZeroClient.test.ts +270 -1
- package/src/helpers/recoverZeroClient.ts +347 -50
- package/src/index.ts +6 -0
- package/src/multi.ts +33 -0
- package/src/multiPartition.test.ts +38 -0
- package/types/createZeroClient.connection.test.d.ts +5 -0
- package/types/createZeroClient.connection.test.d.ts.map +1 -0
- package/types/createZeroClient.d.ts +17 -0
- package/types/createZeroClient.d.ts.map +1 -1
- package/types/createZeroServer.d.ts +4 -4
- package/types/helpers/recoverZeroClient.d.ts +23 -1
- package/types/helpers/recoverZeroClient.d.ts.map +1 -1
- package/types/index.d.ts +1 -1
- package/types/index.d.ts.map +1 -1
- package/types/multi.d.ts +1 -0
- package/types/multi.d.ts.map +1 -1
- package/types/multiPartition.test.d.ts +2 -0
- 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":[]}
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -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,
|
package/dist/cjs/index.native.js
CHANGED
|
@@ -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","
|
|
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":[]}
|