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.
- package/dist/cjs/helpers/recoverZeroClient.cjs +64 -7
- package/dist/cjs/helpers/recoverZeroClient.native.js +72 -9
- package/dist/cjs/helpers/recoverZeroClient.native.js.map +1 -1
- package/dist/cjs/helpers/recoverZeroClient.test.cjs +60 -0
- package/dist/cjs/helpers/recoverZeroClient.test.native.js +60 -0
- package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/cjs/httpPull/transport.test.cjs +17 -0
- package/dist/cjs/httpPull/transport.test.native.js +21 -0
- package/dist/cjs/httpPull/transport.test.native.js.map +1 -1
- package/dist/cjs/httpPullTransport.cjs +19 -3
- package/dist/cjs/httpPullTransport.native.js +19 -3
- package/dist/cjs/httpPullTransport.native.js.map +1 -1
- package/dist/cjs/index.cjs +1 -0
- package/dist/cjs/index.native.js +1 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.mjs +64 -8
- package/dist/esm/helpers/recoverZeroClient.mjs.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.native.js +72 -10
- package/dist/esm/helpers/recoverZeroClient.native.js.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.test.mjs +61 -1
- package/dist/esm/helpers/recoverZeroClient.test.mjs.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.test.native.js +61 -1
- package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/esm/httpPull/transport.test.mjs +17 -0
- package/dist/esm/httpPull/transport.test.mjs.map +1 -1
- package/dist/esm/httpPull/transport.test.native.js +21 -0
- package/dist/esm/httpPull/transport.test.native.js.map +1 -1
- package/dist/esm/httpPullTransport.mjs +19 -3
- package/dist/esm/httpPullTransport.mjs.map +1 -1
- package/dist/esm/httpPullTransport.native.js +19 -3
- package/dist/esm/httpPullTransport.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/package.json +2 -2
- package/src/helpers/recoverZeroClient.test.ts +66 -0
- package/src/helpers/recoverZeroClient.ts +91 -15
- package/src/httpPull/transport.test.ts +19 -0
- package/src/httpPullTransport.ts +30 -2
- package/src/index.ts +3 -0
- package/types/helpers/recoverZeroClient.d.ts +9 -1
- package/types/helpers/recoverZeroClient.d.ts.map +1 -1
- package/types/httpPullTransport.d.ts.map +1 -1
- package/types/index.d.ts +1 -1
- 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(),
|
|
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
|
|
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
|
-
},
|
|
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
|
|
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":[]}
|
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,
|
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,
|
|
@@ -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","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
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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","
|
|
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
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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":["
|
|
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);
|