on-zero 0.6.1 → 0.6.3

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 (48) hide show
  1. package/dist/cjs/helpers/recoverZeroClient.cjs +64 -7
  2. package/dist/cjs/helpers/recoverZeroClient.native.js +72 -9
  3. package/dist/cjs/helpers/recoverZeroClient.native.js.map +1 -1
  4. package/dist/cjs/helpers/recoverZeroClient.test.cjs +60 -0
  5. package/dist/cjs/helpers/recoverZeroClient.test.native.js +60 -0
  6. package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -1
  7. package/dist/cjs/httpPull/transport.test.cjs +17 -0
  8. package/dist/cjs/httpPull/transport.test.native.js +21 -0
  9. package/dist/cjs/httpPull/transport.test.native.js.map +1 -1
  10. package/dist/cjs/httpPullTransport.cjs +19 -3
  11. package/dist/cjs/httpPullTransport.native.js +19 -3
  12. package/dist/cjs/httpPullTransport.native.js.map +1 -1
  13. package/dist/cjs/index.cjs +1 -0
  14. package/dist/cjs/index.native.js +1 -0
  15. package/dist/cjs/index.native.js.map +1 -1
  16. package/dist/esm/helpers/recoverZeroClient.mjs +64 -8
  17. package/dist/esm/helpers/recoverZeroClient.mjs.map +1 -1
  18. package/dist/esm/helpers/recoverZeroClient.native.js +72 -10
  19. package/dist/esm/helpers/recoverZeroClient.native.js.map +1 -1
  20. package/dist/esm/helpers/recoverZeroClient.test.mjs +61 -1
  21. package/dist/esm/helpers/recoverZeroClient.test.mjs.map +1 -1
  22. package/dist/esm/helpers/recoverZeroClient.test.native.js +61 -1
  23. package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
  24. package/dist/esm/httpPull/transport.test.mjs +17 -0
  25. package/dist/esm/httpPull/transport.test.mjs.map +1 -1
  26. package/dist/esm/httpPull/transport.test.native.js +21 -0
  27. package/dist/esm/httpPull/transport.test.native.js.map +1 -1
  28. package/dist/esm/httpPullTransport.mjs +19 -3
  29. package/dist/esm/httpPullTransport.mjs.map +1 -1
  30. package/dist/esm/httpPullTransport.native.js +19 -3
  31. package/dist/esm/httpPullTransport.native.js.map +1 -1
  32. package/dist/esm/index.js +2 -2
  33. package/dist/esm/index.js.map +1 -1
  34. package/dist/esm/index.mjs +2 -2
  35. package/dist/esm/index.mjs.map +1 -1
  36. package/dist/esm/index.native.js +2 -2
  37. package/dist/esm/index.native.js.map +1 -1
  38. package/package.json +2 -2
  39. package/src/helpers/recoverZeroClient.test.ts +66 -0
  40. package/src/helpers/recoverZeroClient.ts +91 -15
  41. package/src/httpPull/transport.test.ts +19 -0
  42. package/src/httpPullTransport.ts +30 -2
  43. package/src/index.ts +3 -0
  44. package/types/helpers/recoverZeroClient.d.ts +9 -1
  45. package/types/helpers/recoverZeroClient.d.ts.map +1 -1
  46. package/types/httpPullTransport.d.ts.map +1 -1
  47. package/types/index.d.ts +1 -1
  48. package/types/index.d.ts.map +1 -1
@@ -27,6 +27,8 @@ __export(httpPullTransport_exports, {
27
27
  });
28
28
  module.exports = __toCommonJS(httpPullTransport_exports);
29
29
  const COOKIE_WIDTH = 20;
30
+ const TRANSIENT_RECONNECT_BACKOFF_BASE_MS = 1e3;
31
+ const TRANSIENT_RECONNECT_BACKOFF_MAX_MS = 3e4;
30
32
  function installHttpPullTransport(opts) {
31
33
  const previousWebSocket = globalThis.WebSocket;
32
34
  const fetchImpl = opts.fetch ?? globalThis.fetch;
@@ -43,7 +45,8 @@ function installHttpPullTransport(opts) {
43
45
  nativeWebSocket: previousWebSocket,
44
46
  sockets: /* @__PURE__ */new Set(),
45
47
  pullIntervalMs: opts.pullIntervalMs,
46
- nextPokeID: 0
48
+ nextPokeID: 0,
49
+ transientFailureCount: 0
47
50
  };
48
51
  const Shim = class {
49
52
  static CONNECTING = 0;
@@ -100,7 +103,7 @@ class ZeroHttpSocket {
100
103
  this.authToken = decoded.authToken;
101
104
  this.queueDesiredQueries(decoded.initConnectionMessage?.[1]);
102
105
  this.state.sockets.add(this);
103
- this.openTimer = setTimeout(() => this.open(), 0);
106
+ this.openTimer = setTimeout(() => this.open(), reconnectDelayMs(this.state));
104
107
  }
105
108
  CONNECTING = 0;
106
109
  OPEN = 1;
@@ -180,7 +183,7 @@ class ZeroHttpSocket {
180
183
  });
181
184
  }
182
185
  pull() {
183
- if (this.readyState === this.CLOSED) return Promise.resolve();
186
+ if (this.readyState !== this.OPEN) return Promise.resolve();
184
187
  if (this.pullInFlight) return this.pullInFlight;
185
188
  this.pullInFlight = this.fetchPull(this.clientGroupID, this.cookie).then(response => {
186
189
  if (response.unchanged) {
@@ -267,6 +270,7 @@ class ZeroHttpSocket {
267
270
  if (!response.ok) {
268
271
  throw new ZeroHttpResponseError(path, response.status);
269
272
  }
273
+ resetTransientFailures(this.state);
270
274
  return response.json();
271
275
  }
272
276
  run(promise) {
@@ -292,6 +296,7 @@ class ZeroHttpSocket {
292
296
  if (this.readyState !== this.CLOSED) this.close(1e3, error.message);
293
297
  return;
294
298
  }
299
+ recordTransientFailure(this.state);
295
300
  this.emit("error", {
296
301
  error
297
302
  });
@@ -455,4 +460,15 @@ function filterMutationResultsToClient(pushResponse, clientID) {
455
460
  }
456
461
  function isStaleClientCookieError(error) {
457
462
  return error instanceof ZeroHttpResponseError && error.path === "/pull" && error.status === 409;
463
+ }
464
+ function reconnectDelayMs(state) {
465
+ if (state.transientFailureCount === 0) return 0;
466
+ return Math.min(TRANSIENT_RECONNECT_BACKOFF_BASE_MS * 2 ** (state.transientFailureCount - 1), TRANSIENT_RECONNECT_BACKOFF_MAX_MS);
467
+ }
468
+ function recordTransientFailure(state) {
469
+ const maxExponent = Math.log2(TRANSIENT_RECONNECT_BACKOFF_MAX_MS / TRANSIENT_RECONNECT_BACKOFF_BASE_MS);
470
+ state.transientFailureCount = Math.min(state.transientFailureCount + 1, Math.ceil(maxExponent) + 1);
471
+ }
472
+ function resetTransientFailures(state) {
473
+ state.transientFailureCount = 0;
458
474
  }
@@ -167,6 +167,8 @@ function _is_native_reflect_construct() {
167
167
  })();
168
168
  }
169
169
  var COOKIE_WIDTH = 20;
170
+ var TRANSIENT_RECONNECT_BACKOFF_BASE_MS = 1e3;
171
+ var TRANSIENT_RECONNECT_BACKOFF_MAX_MS = 3e4;
170
172
  function installHttpPullTransport(opts) {
171
173
  var _class;
172
174
  var previousWebSocket = globalThis.WebSocket;
@@ -185,7 +187,8 @@ function installHttpPullTransport(opts) {
185
187
  nativeWebSocket: previousWebSocket,
186
188
  sockets: /* @__PURE__ */new Set(),
187
189
  pullIntervalMs: opts.pullIntervalMs,
188
- nextPokeID: 0
190
+ nextPokeID: 0,
191
+ transientFailureCount: 0
189
192
  };
190
193
  var Shim = (_class = function _class2(url, protocols) {
191
194
  "use strict";
@@ -286,7 +289,7 @@ var ZeroHttpSocket = /* @__PURE__ */function () {
286
289
  this.state.sockets.add(this);
287
290
  this.openTimer = setTimeout(function () {
288
291
  return _this.open();
289
- }, 0);
292
+ }, reconnectDelayMs(this.state));
290
293
  }
291
294
  _create_class(ZeroHttpSocket2, [{
292
295
  key: "addEventListener",
@@ -358,7 +361,7 @@ var ZeroHttpSocket = /* @__PURE__ */function () {
358
361
  key: "pull",
359
362
  value: function pull() {
360
363
  var _this = this;
361
- if (this.readyState === this.CLOSED) return Promise.resolve();
364
+ if (this.readyState !== this.OPEN) return Promise.resolve();
362
365
  if (this.pullInFlight) return this.pullInFlight;
363
366
  this.pullInFlight = this.fetchPull(this.clientGroupID, this.cookie).then(function (response) {
364
367
  if (response.unchanged) {
@@ -466,6 +469,7 @@ var ZeroHttpSocket = /* @__PURE__ */function () {
466
469
  if (!response.ok) {
467
470
  throw new ZeroHttpResponseError(path, response.status);
468
471
  }
472
+ resetTransientFailures(this.state);
469
473
  return response.json();
470
474
  }
471
475
  }, {
@@ -498,6 +502,7 @@ var ZeroHttpSocket = /* @__PURE__ */function () {
498
502
  if (this.readyState !== this.CLOSED) this.close(1e3, error.message);
499
503
  return;
500
504
  }
505
+ recordTransientFailure(this.state);
501
506
  this.emit("error", {
502
507
  error
503
508
  });
@@ -720,4 +725,15 @@ function filterMutationResultsToClient(pushResponse, clientID) {
720
725
  function isStaleClientCookieError(error) {
721
726
  return _instanceof(error, ZeroHttpResponseError) && error.path === "/pull" && error.status === 409;
722
727
  }
728
+ function reconnectDelayMs(state) {
729
+ if (state.transientFailureCount === 0) return 0;
730
+ return Math.min(TRANSIENT_RECONNECT_BACKOFF_BASE_MS * Math.pow(2, state.transientFailureCount - 1), TRANSIENT_RECONNECT_BACKOFF_MAX_MS);
731
+ }
732
+ function recordTransientFailure(state) {
733
+ var maxExponent = Math.log2(TRANSIENT_RECONNECT_BACKOFF_MAX_MS / TRANSIENT_RECONNECT_BACKOFF_BASE_MS);
734
+ state.transientFailureCount = Math.min(state.transientFailureCount + 1, Math.ceil(maxExponent) + 1);
735
+ }
736
+ function resetTransientFailures(state) {
737
+ state.transientFailureCount = 0;
738
+ }
723
739
  //# sourceMappingURL=httpPullTransport.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","httpPullTransport_exports","__export","ensureHttpPullTransport","installHttpPullTransport","module","exports","_assert_this_initialized","self","ReferenceError","_call_super","_this","derived","args","_get_prototype_of","_possible_constructor_return","_is_native_reflect_construct","Reflect","construct","constructor","apply","_class_call_check","instance","Constructor","TypeError","_construct","Parent","Class","Parent2","args2","Class2","a","push","Function","bind","_set_prototype_of","prototype","arguments","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","_define_property","obj","o","setPrototypeOf","getPrototypeOf","o2","__proto__","_inherits","subClass","superClass","create","_instanceof","left","right","Symbol","hasInstance","_is_native_function","fn","toString","call","indexOf","_type_of","p","p2","_wrap_native_super","_cache","Map","wrapNativeSuper","has","get","set","Wrapper","result","Boolean","valueOf","_","COOKIE_WIDTH","opts","_class","previousWebSocket","globalThis","WebSocket","_opts_fetch","fetchImpl","fetch","Error","state","origin","URL","originString","trimTrailingSlash","nativeWebSocket","sockets","Set","pullIntervalMs","nextPokeID","Shim","_class2","url","protocols","shouldIntercept","ZeroHttpSocket","String","pull","Promise","all","map","socket","connections","size","uninstall","transportsByOrigin","existing","transport","ZeroHttpSocket2","_this_cookie","_decoded_initConnectionMessage","CONNECTING","OPEN","CLOSING","CLOSED","readyState","listeners","open","message","close","error","pendingGotQueriesPatch","pullAfterCurrent","pushChain","resolve","connectURL","toHttpURL","_this_connectURL_searchParams_get","clientID","searchParams","_this_connectURL_searchParams_get1","clientGroupID","_this_connectURL_searchParams_get2","wsid","Date","now","baseCookie","cookie","suffixMatch","match","nextLocalCookieID","Number","decoded","decodeSecProtocol","authToken","queueDesiredQueries","initConnectionMessage","add","openTimer","setTimeout","addEventListener","type","listener","_this_listeners_type","removeEventListener","delete","dispatchEvent","event","emit","send","data","JSON","parse","requestPullAfterCurrent","auth","enqueuePush","emitMessage","run","answerMutationRecoveryPull","code","reason","clearTimeout","pullTimer","clearInterval","wasClean","pullInFlight","fetchPull","then","response","unchanged","emitGotQueriesPatch","emitPoke","catch","fail","finally","pullAgain","timestamp","setInterval","body","desiredQueriesPatch","Array","isArray","gotQueriesPatch","postJSON","filterMutationResultsToClient","pushResponse","nextPush","toWebSocketCookie","_ref","requestID","lastMutationIDChanges"],"sources":["../../src/httpPullTransport.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","httpPullTransport_exports","__export","ensureHttpPullTransport","installHttpPullTransport","module","exports","_assert_this_initialized","self","ReferenceError","_call_super","_this","derived","args","_get_prototype_of","_possible_constructor_return","_is_native_reflect_construct","Reflect","construct","constructor","apply","_class_call_check","instance","Constructor","TypeError","_construct","Parent","Class","Parent2","args2","Class2","a","push","Function","bind","_set_prototype_of","prototype","arguments","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","_define_property","obj","o","setPrototypeOf","getPrototypeOf","o2","__proto__","_inherits","subClass","superClass","create","_instanceof","left","right","Symbol","hasInstance","_is_native_function","fn","toString","call","indexOf","_type_of","p","p2","_wrap_native_super","_cache","Map","wrapNativeSuper","has","get","set","Wrapper","result","Boolean","valueOf","_","COOKIE_WIDTH","TRANSIENT_RECONNECT_BACKOFF_BASE_MS","TRANSIENT_RECONNECT_BACKOFF_MAX_MS","opts","_class","previousWebSocket","globalThis","WebSocket","_opts_fetch","fetchImpl","fetch","Error","state","origin","URL","originString","trimTrailingSlash","nativeWebSocket","sockets","Set","pullIntervalMs","nextPokeID","transientFailureCount","Shim","_class2","url","protocols","shouldIntercept","ZeroHttpSocket","String","pull","Promise","all","map","socket","connections","size","uninstall","transportsByOrigin","existing","transport","ZeroHttpSocket2","_this_cookie","_decoded_initConnectionMessage","CONNECTING","OPEN","CLOSING","CLOSED","readyState","listeners","open","message","close","error","pendingGotQueriesPatch","pullAfterCurrent","pushChain","resolve","connectURL","toHttpURL","_this_connectURL_searchParams_get","clientID","searchParams","_this_connectURL_searchParams_get1","clientGroupID","_this_connectURL_searchParams_get2","wsid","Date","now","baseCookie","cookie","suffixMatch","match","nextLocalCookieID","Number","decoded","decodeSecProtocol","authToken","queueDesiredQueries","initConnectionMessage","add","openTimer","setTimeout","reconnectDelayMs","addEventListener","type","listener","_this_listeners_type","removeEventListener","delete","dispatchEvent","event","emit","send","data","JSON","parse","requestPullAfterCurrent","auth","enqueuePush","emitMessage","run","answerMutationRecoveryPull","code","reason","clearTimeout","pullTimer","clearInterval","wasClean","pullInFlight","fetchPull","then","response","unchanged","emitGotQueriesPatch","emitPoke","catch","fail","finally","pullAgain","timestamp","setInterval","body","desiredQueriesPatch","Array","isArray","gotQueriesPatch","postJSON","filterMutationResultsToClient","pushResponse","nextPush","toWebSocketCookie","_ref","requestID","lastMutationIDChanges","toHttpCookie","path","method","headers","authorization","stringify","ok","ZeroHttpResponseError","status"],"sources":["../../src/httpPullTransport.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,
@@ -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,
@@ -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","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,uBAAA,EAAAA,CAAA,KAAAC,wBAAA,CAAAD,uBAAA;EAAAE,mBAAA,EAAAA,CAAA,KAAAC,0BAAA,CAAAD,mBAAA;EAAAE,sBAAA,EAAAA,CAAA,KAAAH,wBAAA,CAAAG,sBAAA;EAAAC,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,KAAAZ,wBAAA,CAAAY,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,GAAA9B,YAAc,CAAAK,aAAA;AACd0B,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,gCADd,GAAAH,MAAA,CAAAC,OAAA;AAEAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,+BAAAH,MAFd,CAAAC,OAAA;AAGAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,oCAAAH,MAHd,CAAAC,OAAA;AAIAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,wCAJdH,MAAA,CAAAC,OAAA;AAKAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,wCALdH,MAAA,CAAAC,OAAA;AAMAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,qCANd,GAAAH,MAAA,CAAAC,OAAA;AAOAC,UAAA,CAAA1B,aAAoC,EAAA2B,OAAA,qCAAAH,MAAA,CAAAC,OAAA;AACpC,IAAAZ,cAAA,GAA4Cc,OAAA;AAE5C,IAAAR,YAAA,GAAAQ,OAAA,oBAKO;AACP,IAAAnB,uBAAc,GAAAmB,OAAA,+BAhBd;AAiBAD,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,gCAjBd,GAAAH,MAAA,CAAAC,OAAA;AAkBAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,8BAlBd,EAAAH,MAAA,CAAAC,OAAA;AAmBAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,2BAnBd,GAAAH,MAAA,CAAAC,OAAA;AAoBAC,UAAA,CAAA1B,aAA2C,EAAA2B,OAAA,qBAAAH,MAAA,CAAAC,OAAA;AAC3C,IAAAH,iBAAA,GAAAK,OAAc;AACdD,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,wBAtBd,GAAAH,MAAA,CAAAC,OAAA;AAuBAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,uBAAAH,MAvBd,CAAAC,OAAA;AAwBAC,UAAA,CAAA1B,aAAA,EAAc2B,OAAA,0BAxBd,GAAAH,MAAA,CAAAC,OAAA;AAyBAC,UAAA,CAAA1B,aAA2C,EAAA2B,OAAA,qBAAAH,MAAA,CAAAC,OAAA;AAQ3C,IAAAf,WAAA,GAAAiB,OAAA,iBAGO;AACP,IAAAtB,0BAAA,GAKOsB,OAAA;AACP,IAAAV,0BAAA,GAOOU,OAAA","ignoreList":[]}
@@ -1,16 +1,24 @@
1
1
  const RECOVER_GUARD_MS = 6e4;
2
2
  const LOCAL_STORE_LOST = "Expected IndexedDB not found";
3
+ const SQLITE_ERROR_NAME = "SqliteError";
4
+ const SQLITE_STATEMENT_FINALIZED = "This statement has been finalized";
5
+ const STORE_CLOSED = "Store is closed";
6
+ const STORE_CLOSED_REPEAT_MIN_MS = 2e3;
7
+ const STORE_CLOSED_REPEAT_MAX_MS = 6e4;
3
8
  let reloadScheduled = false;
4
9
  const pendingDeletes = [];
5
10
  function recoveryGuardOpen(reasonKey) {
6
11
  try {
7
12
  const key = `on-zero-recover-${reasonKey}`;
8
- const last = Number(window.sessionStorage.getItem(key) || 0);
9
- if (Date.now() - last < RECOVER_GUARD_MS) return false;
10
- window.sessionStorage.setItem(key, String(Date.now()));
13
+ const rawLast = window.sessionStorage.getItem(key);
14
+ const now = Date.now();
15
+ const last = rawLast ? Number(rawLast) : 0;
16
+ if (last > 0 && now - last < RECOVER_GUARD_MS) return false;
17
+ window.sessionStorage.setItem(key, String(now));
11
18
  } catch {}
12
19
  return true;
13
20
  }
21
+ let lastStoreClosedAtMs = 0;
14
22
  function recover(deps, reasonKey, message, dropLocalState) {
15
23
  if (typeof window === "undefined") return;
16
24
  if (dropLocalState) {
@@ -50,15 +58,62 @@ function logToConsole(level, context, ...args) {
50
58
  const method = level === "debug" ? "debug" : level;
51
59
  console[method](...(prefix ? [prefix] : []), ...args);
52
60
  }
61
+ function logArgText(arg) {
62
+ if (typeof arg === "string") return arg;
63
+ if (arg instanceof Error) return `${arg.name} ${arg.message} ${arg.stack || ""}`;
64
+ if (arg && typeof arg === "object") {
65
+ const message = "message" in arg ? arg.message : void 0;
66
+ const name = "name" in arg ? arg.name : void 0;
67
+ if (typeof message === "string") return `${typeof name === "string" ? name : ""} ${message}`;
68
+ }
69
+ return "";
70
+ }
71
+ function isBenignStoreClosedLog(text) {
72
+ if (/Mutator\s+".*"\s+error on server/i.test(text)) return true;
73
+ if (/Mutator\s+".*"\s+app error on client/i.test(text)) return true;
74
+ return false;
75
+ }
76
+ function classifyZeroRecoveryLog(level, args, nowMs = Date.now()) {
77
+ if (level !== "error") return void 0;
78
+ const text = args.map(logArgText).join(" ");
79
+ if (text.includes(LOCAL_STORE_LOST)) {
80
+ return {
81
+ reason: "indexeddb-not-found",
82
+ reasonKey: "local-store",
83
+ message: "local store lost",
84
+ dropLocalState: true
85
+ };
86
+ }
87
+ if (text.includes(SQLITE_ERROR_NAME) && text.includes(SQLITE_STATEMENT_FINALIZED)) {
88
+ return {
89
+ reason: "sqlite-statement-finalized",
90
+ reasonKey: "sqlite-statement-finalized",
91
+ message: "sqlite statement finalized",
92
+ dropLocalState: true
93
+ };
94
+ }
95
+ if (text.includes(STORE_CLOSED) && !isBenignStoreClosedLog(text)) {
96
+ const prevMs = lastStoreClosedAtMs;
97
+ lastStoreClosedAtMs = nowMs;
98
+ if (prevMs > 0 && nowMs - prevMs >= STORE_CLOSED_REPEAT_MIN_MS && nowMs - prevMs <= STORE_CLOSED_REPEAT_MAX_MS) {
99
+ return {
100
+ reason: "store-closed-repeat",
101
+ reasonKey: "store-closed-repeat",
102
+ message: "local store closed repeatedly",
103
+ dropLocalState: true
104
+ };
105
+ }
106
+ }
107
+ return void 0;
108
+ }
53
109
  function composeRecoveryLogSink(deps, consumerLogSink) {
54
110
  const consumerFlush = consumerLogSink?.flush;
55
111
  return {
56
112
  log(level, context, ...args) {
57
113
  if (consumerLogSink) consumerLogSink.log(level, context, ...args);else logToConsole(level, context, ...args);
58
- if (level !== "error") return;
59
- const text = args.map(arg => typeof arg === "string" ? arg : arg && typeof arg === "object" && "message" in arg ? String(arg.message) : "").join(" ");
60
- if (text.includes(LOCAL_STORE_LOST)) {
61
- recover(deps, "local-store", "local store lost", true);
114
+ const recovery = classifyZeroRecoveryLog(level, args);
115
+ if (recovery) {
116
+ recover(deps, recovery.reasonKey, recovery.message, recovery.dropLocalState);
62
117
  }
63
118
  },
64
119
  // call through the consumer sink so a class-based sink keeps its `this`,
@@ -69,6 +124,7 @@ function composeRecoveryLogSink(deps, consumerLogSink) {
69
124
  function resetRecoveryStateForTests() {
70
125
  reloadScheduled = false;
71
126
  pendingDeletes.length = 0;
127
+ lastStoreClosedAtMs = 0;
72
128
  }
73
- export { composeRecoveryLogSink, makeZeroRecovery, resetRecoveryStateForTests };
129
+ export { classifyZeroRecoveryLog, composeRecoveryLogSink, makeZeroRecovery, resetRecoveryStateForTests };
74
130
  //# sourceMappingURL=recoverZeroClient.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["RECOVER_GUARD_MS","LOCAL_STORE_LOST","reloadScheduled","pendingDeletes","recoveryGuardOpen","reasonKey","key","last","Number","window","sessionStorage","getItem","Date","now","setItem","String","recover","deps","message","dropLocalState","push","Promise","resolve","then","deleteLocalState","catch","console","error","zeroEvents","emit","type","reason","warn","doReload","reload","globalThis","location","allSettled","beforeReload","finally","makeZeroRecovery","onUpdateNeeded","onClientStateNotFound","logToConsole","level","context","args","prefix","Object","entries","map","value","join","method","composeRecoveryLogSink","consumerLogSink","consumerFlush","flush","log","text","arg","includes","call","resetRecoveryStateForTests","length"],"sources":["../../../src/helpers/recoverZeroClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["RECOVER_GUARD_MS","LOCAL_STORE_LOST","SQLITE_ERROR_NAME","SQLITE_STATEMENT_FINALIZED","STORE_CLOSED","STORE_CLOSED_REPEAT_MIN_MS","STORE_CLOSED_REPEAT_MAX_MS","reloadScheduled","pendingDeletes","recoveryGuardOpen","reasonKey","key","rawLast","window","sessionStorage","getItem","now","Date","last","Number","setItem","String","lastStoreClosedAtMs","recover","deps","message","dropLocalState","push","Promise","resolve","then","deleteLocalState","catch","console","error","zeroEvents","emit","type","reason","warn","doReload","reload","globalThis","location","allSettled","beforeReload","finally","makeZeroRecovery","onUpdateNeeded","onClientStateNotFound","logToConsole","level","context","args","prefix","Object","entries","map","value","join","method","logArgText","arg","Error","name","stack","isBenignStoreClosedLog","text","test","classifyZeroRecoveryLog","nowMs","includes","prevMs","composeRecoveryLogSink","consumerLogSink","consumerFlush","flush","log","recovery","call","resetRecoveryStateForTests","length"],"sources":["../../../src/helpers/recoverZeroClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,10 @@
1
+ function _instanceof(left, right) {
2
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
3
+ return !!right[Symbol.hasInstance](left);
4
+ } else {
5
+ return left instanceof right;
6
+ }
7
+ }
1
8
  function _type_of(obj) {
2
9
  "@swc/helpers - typeof";
3
10
 
@@ -5,17 +12,25 @@ function _type_of(obj) {
5
12
  }
6
13
  var RECOVER_GUARD_MS = 6e4;
7
14
  var LOCAL_STORE_LOST = "Expected IndexedDB not found";
15
+ var SQLITE_ERROR_NAME = "SqliteError";
16
+ var SQLITE_STATEMENT_FINALIZED = "This statement has been finalized";
17
+ var STORE_CLOSED = "Store is closed";
18
+ var STORE_CLOSED_REPEAT_MIN_MS = 2e3;
19
+ var STORE_CLOSED_REPEAT_MAX_MS = 6e4;
8
20
  var reloadScheduled = false;
9
21
  var pendingDeletes = [];
10
22
  function recoveryGuardOpen(reasonKey) {
11
23
  try {
12
24
  var key = `on-zero-recover-${reasonKey}`;
13
- var last = Number(window.sessionStorage.getItem(key) || 0);
14
- if (Date.now() - last < RECOVER_GUARD_MS) return false;
15
- window.sessionStorage.setItem(key, String(Date.now()));
25
+ var rawLast = window.sessionStorage.getItem(key);
26
+ var now = Date.now();
27
+ var last = rawLast ? Number(rawLast) : 0;
28
+ if (last > 0 && now - last < RECOVER_GUARD_MS) return false;
29
+ window.sessionStorage.setItem(key, String(now));
16
30
  } catch (e) {}
17
31
  return true;
18
32
  }
33
+ var lastStoreClosedAtMs = 0;
19
34
  function recover(deps, reasonKey, message, dropLocalState) {
20
35
  if (typeof window === "undefined") return;
21
36
  if (dropLocalState) {
@@ -70,6 +85,55 @@ function logToConsole(level, context) {
70
85
  var method = level === "debug" ? "debug" : level;
71
86
  console[method](...(prefix ? [prefix] : []), ...args);
72
87
  }
88
+ function logArgText(arg) {
89
+ if (typeof arg === "string") return arg;
90
+ if (_instanceof(arg, Error)) return `${arg.name} ${arg.message} ${arg.stack || ""}`;
91
+ if (arg && (typeof arg === "undefined" ? "undefined" : _type_of(arg)) === "object") {
92
+ var message = "message" in arg ? arg.message : void 0;
93
+ var name = "name" in arg ? arg.name : void 0;
94
+ if (typeof message === "string") return `${typeof name === "string" ? name : ""} ${message}`;
95
+ }
96
+ return "";
97
+ }
98
+ function isBenignStoreClosedLog(text) {
99
+ if (/Mutator\s+".*"\s+error on server/i.test(text)) return true;
100
+ if (/Mutator\s+".*"\s+app error on client/i.test(text)) return true;
101
+ return false;
102
+ }
103
+ function classifyZeroRecoveryLog(level, args) {
104
+ var nowMs = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : Date.now();
105
+ if (level !== "error") return void 0;
106
+ var text = args.map(logArgText).join(" ");
107
+ if (text.includes(LOCAL_STORE_LOST)) {
108
+ return {
109
+ reason: "indexeddb-not-found",
110
+ reasonKey: "local-store",
111
+ message: "local store lost",
112
+ dropLocalState: true
113
+ };
114
+ }
115
+ if (text.includes(SQLITE_ERROR_NAME) && text.includes(SQLITE_STATEMENT_FINALIZED)) {
116
+ return {
117
+ reason: "sqlite-statement-finalized",
118
+ reasonKey: "sqlite-statement-finalized",
119
+ message: "sqlite statement finalized",
120
+ dropLocalState: true
121
+ };
122
+ }
123
+ if (text.includes(STORE_CLOSED) && !isBenignStoreClosedLog(text)) {
124
+ var prevMs = lastStoreClosedAtMs;
125
+ lastStoreClosedAtMs = nowMs;
126
+ if (prevMs > 0 && nowMs - prevMs >= STORE_CLOSED_REPEAT_MIN_MS && nowMs - prevMs <= STORE_CLOSED_REPEAT_MAX_MS) {
127
+ return {
128
+ reason: "store-closed-repeat",
129
+ reasonKey: "store-closed-repeat",
130
+ message: "local store closed repeatedly",
131
+ dropLocalState: true
132
+ };
133
+ }
134
+ }
135
+ return void 0;
136
+ }
73
137
  function composeRecoveryLogSink(deps, consumerLogSink) {
74
138
  var consumerFlush = consumerLogSink === null || consumerLogSink === void 0 ? void 0 : consumerLogSink.flush;
75
139
  return {
@@ -78,12 +142,9 @@ function composeRecoveryLogSink(deps, consumerLogSink) {
78
142
  args[_key - 2] = arguments[_key];
79
143
  }
80
144
  if (consumerLogSink) consumerLogSink.log(level, context, ...args);else logToConsole(level, context, ...args);
81
- if (level !== "error") return;
82
- var text = args.map(function (arg) {
83
- return typeof arg === "string" ? arg : arg && (typeof arg === "undefined" ? "undefined" : _type_of(arg)) === "object" && "message" in arg ? String(arg.message) : "";
84
- }).join(" ");
85
- if (text.includes(LOCAL_STORE_LOST)) {
86
- recover(deps, "local-store", "local store lost", true);
145
+ var recovery = classifyZeroRecoveryLog(level, args);
146
+ if (recovery) {
147
+ recover(deps, recovery.reasonKey, recovery.message, recovery.dropLocalState);
87
148
  }
88
149
  },
89
150
  // call through the consumer sink so a class-based sink keeps its `this`,
@@ -96,6 +157,7 @@ function composeRecoveryLogSink(deps, consumerLogSink) {
96
157
  function resetRecoveryStateForTests() {
97
158
  reloadScheduled = false;
98
159
  pendingDeletes.length = 0;
160
+ lastStoreClosedAtMs = 0;
99
161
  }
100
- export { composeRecoveryLogSink, makeZeroRecovery, resetRecoveryStateForTests };
162
+ export { classifyZeroRecoveryLog, composeRecoveryLogSink, makeZeroRecovery, resetRecoveryStateForTests };
101
163
  //# sourceMappingURL=recoverZeroClient.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_type_of","obj","Symbol","constructor","RECOVER_GUARD_MS","LOCAL_STORE_LOST","reloadScheduled","pendingDeletes","recoveryGuardOpen","reasonKey","key","last","Number","window","sessionStorage","getItem","Date","now","setItem","String","e","recover","deps","message","dropLocalState","push","Promise","resolve","then","deleteLocalState","catch","console","error","zeroEvents","emit","type","reason","warn","_deps_reload","doReload","reload","_globalThis_location_reload","_globalThis_location","globalThis","location","call","allSettled","_deps_beforeReload","beforeReload","finally","makeZeroRecovery","onUpdateNeeded","onClientStateNotFound","logToConsole","level","context","_len","arguments","length","args","Array","_key","prefix","Object","entries","map","param","value","join","method","composeRecoveryLogSink","consumerLogSink","consumerFlush","flush"],"sources":["../../../src/helpers/recoverZeroClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_instanceof","left","right","Symbol","hasInstance","_type_of","obj","constructor","RECOVER_GUARD_MS","LOCAL_STORE_LOST","SQLITE_ERROR_NAME","SQLITE_STATEMENT_FINALIZED","STORE_CLOSED","STORE_CLOSED_REPEAT_MIN_MS","STORE_CLOSED_REPEAT_MAX_MS","reloadScheduled","pendingDeletes","recoveryGuardOpen","reasonKey","key","rawLast","window","sessionStorage","getItem","now","Date","last","Number","setItem","String","e","lastStoreClosedAtMs","recover","deps","message","dropLocalState","push","Promise","resolve","then","deleteLocalState","catch","console","error","zeroEvents","emit","type","reason","warn","_deps_reload","doReload","reload","_globalThis_location_reload","_globalThis_location","globalThis","location","call","allSettled","_deps_beforeReload","beforeReload","finally","makeZeroRecovery","onUpdateNeeded","onClientStateNotFound","logToConsole","level","context","_len","arguments","length","args","Array","_key","prefix","Object","entries","map","param","value","join","method","logArgText","arg","Error","name","stack","isBenignStoreClosedLog","text","test","classifyZeroRecoveryLog","nowMs","includes","prevMs"],"sources":["../../../src/helpers/recoverZeroClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  import { createEmitter } from "@take-out/helpers";
2
2
  import { UpdateNeededReasonType } from "@rocicorp/zero";
3
3
  import { beforeEach, describe, expect, test, vi } from "vitest";
4
- import { composeRecoveryLogSink, makeZeroRecovery, resetRecoveryStateForTests } from "./recoverZeroClient.mjs";
4
+ import { classifyZeroRecoveryLog, composeRecoveryLogSink, makeZeroRecovery, resetRecoveryStateForTests } from "./recoverZeroClient.mjs";
5
5
  let emitterSeq = 0;
6
6
  function setup() {
7
7
  const events = [];
@@ -150,6 +150,45 @@ describe("zero recovery", () => {
150
150
  expect(deleteLocalState).toHaveBeenCalledTimes(1);
151
151
  expect(reload).toHaveBeenCalledTimes(1);
152
152
  });
153
+ 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 = composeRecoveryLogSink(deps);
162
+ sink.log("error", {
163
+ bgIntervalProcess: "Heartbeat"
164
+ }, "Error running.", sqliteError);
165
+ await flush();
166
+ expect(deleteLocalState).toHaveBeenCalledTimes(1);
167
+ expect(reload).toHaveBeenCalledTimes(1);
168
+ });
169
+ test("logSink recovers on repeated store-closed local-store loss", async () => {
170
+ const nowSpy = vi.spyOn(Date, "now");
171
+ const {
172
+ deps,
173
+ deleteLocalState,
174
+ reload
175
+ } = setup();
176
+ try {
177
+ const sink = composeRecoveryLogSink(deps);
178
+ nowSpy.mockReturnValue(1e4);
179
+ sink.log("error", void 0, "Failed to connect.", new Error("Store is closed"));
180
+ await flush();
181
+ expect(deleteLocalState).not.toHaveBeenCalled();
182
+ 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
+ expect(deleteLocalState).toHaveBeenCalledTimes(1);
187
+ expect(reload).toHaveBeenCalledTimes(1);
188
+ } finally {
189
+ nowSpy.mockRestore();
190
+ }
191
+ });
153
192
  test("logSink with no consumer preserves console output and still watches", async () => {
154
193
  const {
155
194
  deps,
@@ -198,6 +237,27 @@ describe("zero recovery", () => {
198
237
  expect(deleteLocalState).not.toHaveBeenCalled();
199
238
  expect(reload).not.toHaveBeenCalled();
200
239
  });
240
+ test("recovery log classification is narrow", () => {
241
+ const sqliteError = new Error("This statement has been finalized");
242
+ sqliteError.name = "SqliteError";
243
+ expect(classifyZeroRecoveryLog("error", ["Error running.", sqliteError])).toMatchObject({
244
+ reason: "sqlite-statement-finalized",
245
+ dropLocalState: true
246
+ });
247
+ expect(classifyZeroRecoveryLog("error", [{
248
+ name: "SqliteError",
249
+ message: "database is locked"
250
+ }])).toBeUndefined();
251
+ expect(classifyZeroRecoveryLog("warn", ["Expected IndexedDB not found"])).toBeUndefined();
252
+ expect(classifyZeroRecoveryLog("error", ["Store is closed"], 1e4)).toBeUndefined();
253
+ expect(classifyZeroRecoveryLog("error", ["Store is closed"], 11e3)).toBeUndefined();
254
+ expect(classifyZeroRecoveryLog("error", ["Store is closed"], 14e3)).toMatchObject({
255
+ reason: "store-closed-repeat",
256
+ dropLocalState: true
257
+ });
258
+ resetRecoveryStateForTests();
259
+ expect(classifyZeroRecoveryLog("error", ['Mutator "send" error on server', "Store is closed"], 2e4)).toBeUndefined();
260
+ });
201
261
  test("default reload path is a safe no-op when location is absent", async () => {
202
262
  const events = [];
203
263
  const zeroEvents = createEmitter(`test-recover-${emitterSeq++}`, null);