on-zero 0.6.6 → 0.6.8

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/createMutators.cjs +7 -2
  2. package/dist/cjs/helpers/createMutators.native.js +7 -2
  3. package/dist/cjs/helpers/createMutators.native.js.map +1 -1
  4. package/dist/cjs/helpers/createMutators.test.cjs +43 -0
  5. package/dist/cjs/helpers/createMutators.test.native.js +46 -0
  6. package/dist/cjs/helpers/createMutators.test.native.js.map +1 -0
  7. package/dist/cjs/httpPull/completeAck.test.cjs +69 -0
  8. package/dist/cjs/httpPull/completeAck.test.native.js +76 -0
  9. package/dist/cjs/httpPull/completeAck.test.native.js.map +1 -0
  10. package/dist/cjs/httpPull/transport.test.cjs +177 -1
  11. package/dist/cjs/httpPull/transport.test.native.js +192 -0
  12. package/dist/cjs/httpPull/transport.test.native.js.map +1 -1
  13. package/dist/cjs/httpPullTransport.cjs +138 -12
  14. package/dist/cjs/httpPullTransport.native.js +173 -13
  15. package/dist/cjs/httpPullTransport.native.js.map +1 -1
  16. package/dist/esm/helpers/createMutators.mjs +7 -2
  17. package/dist/esm/helpers/createMutators.mjs.map +1 -1
  18. package/dist/esm/helpers/createMutators.native.js +7 -2
  19. package/dist/esm/helpers/createMutators.native.js.map +1 -1
  20. package/dist/esm/helpers/createMutators.test.mjs +44 -0
  21. package/dist/esm/helpers/createMutators.test.mjs.map +1 -0
  22. package/dist/esm/helpers/createMutators.test.native.js +44 -0
  23. package/dist/esm/helpers/createMutators.test.native.js.map +1 -0
  24. package/dist/esm/httpPull/completeAck.test.mjs +70 -0
  25. package/dist/esm/httpPull/completeAck.test.mjs.map +1 -0
  26. package/dist/esm/httpPull/completeAck.test.native.js +74 -0
  27. package/dist/esm/httpPull/completeAck.test.native.js.map +1 -0
  28. package/dist/esm/httpPull/transport.test.mjs +176 -0
  29. package/dist/esm/httpPull/transport.test.mjs.map +1 -1
  30. package/dist/esm/httpPull/transport.test.native.js +192 -0
  31. package/dist/esm/httpPull/transport.test.native.js.map +1 -1
  32. package/dist/esm/httpPullTransport.mjs +138 -12
  33. package/dist/esm/httpPullTransport.mjs.map +1 -1
  34. package/dist/esm/httpPullTransport.native.js +173 -13
  35. package/dist/esm/httpPullTransport.native.js.map +1 -1
  36. package/package.json +2 -2
  37. package/src/helpers/createMutators.test.ts +51 -0
  38. package/src/helpers/createMutators.ts +7 -2
  39. package/src/httpPull/completeAck.test.ts +80 -0
  40. package/src/httpPull/transport.test.ts +134 -0
  41. package/src/httpPullTransport.ts +198 -13
  42. package/types/helpers/createMutators.d.ts.map +1 -1
  43. package/types/helpers/createMutators.test.d.ts +2 -0
  44. package/types/helpers/createMutators.test.d.ts.map +1 -0
  45. package/types/httpPull/completeAck.test.d.ts +2 -0
  46. package/types/httpPull/completeAck.test.d.ts.map +1 -0
  47. package/types/httpPullTransport.d.ts +4 -0
  48. package/types/httpPullTransport.d.ts.map +1 -1
@@ -147,6 +147,7 @@ function installHttpPullTransport(opts) {
147
147
  if (!fetchImpl) {
148
148
  throw new Error("installHttpPullTransport requires a fetch implementation");
149
149
  }
150
+ var _opts_wake;
150
151
  var state = {
151
152
  origin: new URL(opts.origin),
152
153
  originString: trimTrailingSlash(new URL(opts.origin).toString()),
@@ -157,6 +158,10 @@ function installHttpPullTransport(opts) {
157
158
  nativeWebSocket: previousWebSocket,
158
159
  sockets: /* @__PURE__ */new Set(),
159
160
  pullIntervalMs: opts.pullIntervalMs,
161
+ wakeEnabled: (_opts_wake = opts.wake) !== null && _opts_wake !== void 0 ? _opts_wake : false,
162
+ queryTransform: opts.queryTransform,
163
+ queryForward: opts.queryForward === true,
164
+ queryAware: opts.queryTransform !== void 0 || opts.queryForward === true,
160
165
  nextPokeID: 0,
161
166
  transientFailureCount: 0
162
167
  };
@@ -220,12 +225,18 @@ var ZeroHttpSocket = /* @__PURE__ */function () {
220
225
  _define_property(this, "wsid", void 0);
221
226
  _define_property(this, "cookie", void 0);
222
227
  _define_property(this, "pendingGotQueriesPatch", void 0);
228
+ _define_property(this, "desiredQueryPatch", void 0);
229
+ _define_property(this, "queryVersion", void 0);
230
+ _define_property(this, "sentQueryVersion", void 0);
231
+ _define_property(this, "sentQueryPatchLen", void 0);
223
232
  _define_property(this, "pullInFlight", void 0);
224
233
  _define_property(this, "pullAfterCurrent", void 0);
225
234
  _define_property(this, "pushChain", void 0);
226
235
  _define_property(this, "nextLocalCookieID", void 0);
227
236
  _define_property(this, "openTimer", void 0);
228
237
  _define_property(this, "pullTimer", void 0);
238
+ _define_property(this, "wakeSocket", void 0);
239
+ _define_property(this, "wakeReconnectTimer", void 0);
229
240
  this.state = state;
230
241
  this.CONNECTING = 0;
231
242
  this.OPEN = 1;
@@ -239,6 +250,9 @@ var ZeroHttpSocket = /* @__PURE__ */function () {
239
250
  error: /* @__PURE__ */new Set()
240
251
  };
241
252
  this.pendingGotQueriesPatch = [];
253
+ this.desiredQueryPatch = [];
254
+ this.queryVersion = 0;
255
+ this.sentQueryPatchLen = 0;
242
256
  this.pullAfterCurrent = false;
243
257
  this.pushChain = Promise.resolve();
244
258
  this.connectURL = toHttpURL(url);
@@ -319,6 +333,7 @@ var ZeroHttpSocket = /* @__PURE__ */function () {
319
333
  if (this.readyState === this.CLOSED) return;
320
334
  if (this.openTimer) clearTimeout(this.openTimer);
321
335
  if (this.pullTimer) clearInterval(this.pullTimer);
336
+ this.closeWakeChannel();
322
337
  this.readyState = this.CLOSED;
323
338
  this.state.sockets.delete(this);
324
339
  this.emit("close", {
@@ -333,7 +348,8 @@ var ZeroHttpSocket = /* @__PURE__ */function () {
333
348
  var _this = this;
334
349
  if (this.readyState !== this.OPEN) return Promise.resolve();
335
350
  if (this.pullInFlight) return this.pullInFlight;
336
- this.pullInFlight = this.fetchPull(this.clientGroupID, this.cookie).then(function (response) {
351
+ this.pullInFlight = this.fetchPull(this.clientGroupID, this.cookie, true).then(function (response) {
352
+ if (_this.state.queryAware) _this.applyServerGotQueries(response);
337
353
  if (response.unchanged) {
338
354
  _this.emitGotQueriesPatch(response.cookie);
339
355
  return;
@@ -369,13 +385,129 @@ var ZeroHttpSocket = /* @__PURE__ */function () {
369
385
  _this.run(_this.pull());
370
386
  }, this.state.pullIntervalMs);
371
387
  }
388
+ if (this.state.wakeEnabled) this.openWakeChannel();
389
+ }
390
+ }, {
391
+ key: "openWakeChannel",
392
+ value:
393
+ // notification-only wake channel: a real WebSocket to <origin>/wake that
394
+ // carries no data. any frame means "pull now", so a wake triggers an
395
+ // immediate (coalesced) pull — push-shaped propagation without waiting on
396
+ // the poll interval. advisory only: if it drops we reconnect, and the
397
+ // interval poll remains the safety net that guarantees convergence.
398
+ function openWakeChannel() {
399
+ var _this = this;
400
+ var Native = this.state.nativeWebSocket;
401
+ if (!Native || this.wakeSocket || this.readyState !== this.OPEN) return;
402
+ var wsBase = this.state.originString.replace(/^http/, "ws");
403
+ var url = `${wsBase}/wake?clientID=${encodeURIComponent(this.clientID)}`;
404
+ var socket;
405
+ try {
406
+ socket = new Native(url);
407
+ } catch (e) {
408
+ return;
409
+ }
410
+ this.wakeSocket = socket;
411
+ var reconnect = function () {
412
+ if (_this.wakeSocket !== socket) return;
413
+ _this.wakeSocket = void 0;
414
+ if (_this.readyState !== _this.OPEN || _this.wakeReconnectTimer) return;
415
+ _this.wakeReconnectTimer = setTimeout(function () {
416
+ _this.wakeReconnectTimer = void 0;
417
+ _this.openWakeChannel();
418
+ }, 500);
419
+ };
420
+ socket.onmessage = function () {
421
+ return _this.requestPullAfterCurrent();
422
+ };
423
+ socket.onclose = reconnect;
424
+ socket.onerror = reconnect;
425
+ }
426
+ }, {
427
+ key: "closeWakeChannel",
428
+ value: function closeWakeChannel() {
429
+ if (this.wakeReconnectTimer) {
430
+ clearTimeout(this.wakeReconnectTimer);
431
+ this.wakeReconnectTimer = void 0;
432
+ }
433
+ var socket = this.wakeSocket;
434
+ this.wakeSocket = void 0;
435
+ if (socket) {
436
+ try {
437
+ socket.close();
438
+ } catch (e) {}
439
+ }
372
440
  }
373
441
  }, {
374
442
  key: "queueDesiredQueries",
375
- value: function queueDesiredQueries(body) {
443
+ value:
444
+ // best effort: an already-closing wake socket is harmless
445
+ function queueDesiredQueries(body) {
376
446
  var desiredQueriesPatch = body === null || body === void 0 ? void 0 : body.desiredQueriesPatch;
377
447
  if (!Array.isArray(desiredQueriesPatch)) return;
378
- this.pendingGotQueriesPatch.push(...gotQueriesPatch(desiredQueriesPatch));
448
+ if (!this.state.queryAware) {
449
+ this.pendingGotQueriesPatch.push(...gotQueriesPatch(desiredQueriesPatch));
450
+ return;
451
+ }
452
+ var transform = this.state.queryTransform;
453
+ var _iteratorNormalCompletion = true,
454
+ _didIteratorError = false,
455
+ _iteratorError = void 0;
456
+ try {
457
+ for (var _iterator = desiredQueriesPatch[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
458
+ var op = _step.value;
459
+ if (op.op === "clear") {
460
+ this.desiredQueryPatch.push({
461
+ op: "clear"
462
+ });
463
+ } else if (op.op === "del") {
464
+ this.desiredQueryPatch.push({
465
+ op: "del",
466
+ hash: op.hash
467
+ });
468
+ } else if (op.op === "put") {
469
+ var inline = op.ast;
470
+ var _op_name;
471
+ var name = (_op_name = op.name) !== null && _op_name !== void 0 ? _op_name : "";
472
+ var _op_args;
473
+ var args = (_op_args = op.args) !== null && _op_args !== void 0 ? _op_args : [];
474
+ if (this.state.queryForward) {
475
+ this.desiredQueryPatch.push({
476
+ op: "put",
477
+ hash: op.hash,
478
+ name,
479
+ args
480
+ });
481
+ } else if (inline !== void 0) {
482
+ this.desiredQueryPatch.push({
483
+ op: "put",
484
+ hash: op.hash,
485
+ ast: inline
486
+ });
487
+ } else if (transform) {
488
+ this.desiredQueryPatch.push({
489
+ op: "put",
490
+ hash: op.hash,
491
+ ast: transform(name, args)
492
+ });
493
+ }
494
+ }
495
+ }
496
+ } catch (err) {
497
+ _didIteratorError = true;
498
+ _iteratorError = err;
499
+ } finally {
500
+ try {
501
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
502
+ _iterator.return();
503
+ }
504
+ } finally {
505
+ if (_didIteratorError) {
506
+ throw _iteratorError;
507
+ }
508
+ }
509
+ }
510
+ this.queryVersion++;
379
511
  }
380
512
  }, {
381
513
  key: "push",
@@ -404,10 +536,26 @@ var ZeroHttpSocket = /* @__PURE__ */function () {
404
536
  }
405
537
  this.run(this.pull());
406
538
  }
539
+ }, {
540
+ key: "applyServerGotQueries",
541
+ value:
542
+ // in query-aware mode the got-query ack is authoritative from the server:
543
+ // take the server's gotQueries.patch as the got patch to emit (replacing
544
+ // local synthesis), and clear the acked prefix of the shipped desired delta
545
+ // once the server acks that version (the ack never leads its row effects —
546
+ // invariant 13 — so the client marks a query got only after its rows land).
547
+ function applyServerGotQueries(response) {
548
+ var got = response.gotQueries;
549
+ this.pendingGotQueriesPatch = got ? got.patch : [];
550
+ if (got && this.sentQueryVersion !== void 0 && got.version >= this.sentQueryVersion) {
551
+ this.desiredQueryPatch.splice(0, this.sentQueryPatchLen);
552
+ this.sentQueryVersion = void 0;
553
+ }
554
+ }
407
555
  }, {
408
556
  key: "answerMutationRecoveryPull",
409
557
  value: async function answerMutationRecoveryPull(body) {
410
- var response = await this.fetchPull(body.clientGroupID, body.cookie);
558
+ var response = await this.fetchPull(body.clientGroupID, body.cookie, false);
411
559
  var cookie = toWebSocketCookie(response.cookie);
412
560
  var _ref;
413
561
  this.emitMessage(["pull", {
@@ -418,12 +566,23 @@ var ZeroHttpSocket = /* @__PURE__ */function () {
418
566
  }
419
567
  }, {
420
568
  key: "fetchPull",
421
- value: async function fetchPull(clientGroupID, cookie) {
422
- return await this.postJSON("/pull", {
569
+ value: async function fetchPull(clientGroupID, cookie, includeQueries) {
570
+ var body = {
423
571
  clientID: this.clientID,
424
572
  clientGroupID,
425
573
  cookie: toHttpCookie(cookie)
426
- });
574
+ };
575
+ if (includeQueries && this.state.queryAware && this.desiredQueryPatch.length > 0) {
576
+ this.sentQueryVersion = this.queryVersion;
577
+ this.sentQueryPatchLen = this.desiredQueryPatch.length;
578
+ body.queries = {
579
+ version: this.queryVersion,
580
+ patch: [...this.desiredQueryPatch]
581
+ };
582
+ } else {
583
+ this.sentQueryVersion = void 0;
584
+ }
585
+ return await this.postJSON("/pull", body);
427
586
  }
428
587
  }, {
429
588
  key: "postJSON",
@@ -481,9 +640,14 @@ var ZeroHttpSocket = /* @__PURE__ */function () {
481
640
  }, {
482
641
  key: "emitPoke",
483
642
  value: function emitPoke(response) {
484
- var nextCookie = toWebSocketCookie(response.cookie);
485
- if (isStaleCookie(this.cookie, response.cookie)) {
643
+ var currentServer = toHttpCookie(this.cookie);
644
+ var nextCookie;
645
+ if (currentServer !== null && response.cookie < currentServer) {
486
646
  throw new Error(`zero-http pull returned stale cookie ${response.cookie} for ${this.cookie}`);
647
+ } else if (currentServer !== null && response.cookie === currentServer) {
648
+ nextCookie = toLocalWebSocketCookie(response.cookie, ++this.nextLocalCookieID);
649
+ } else {
650
+ nextCookie = toWebSocketCookie(response.cookie);
487
651
  }
488
652
  var pokeID = `zero-http-${++this.state.nextPokeID}`;
489
653
  var gotQueries = this.pendingGotQueriesPatch;
@@ -658,10 +822,6 @@ function toWebSocketCookie(cookie) {
658
822
  function toLocalWebSocketCookie(cookie, localID) {
659
823
  return `${String(cookie).padStart(COOKIE_WIDTH, "0")}#${String(localID).padStart(6, "0")}`;
660
824
  }
661
- function isStaleCookie(current, next) {
662
- var currentNumber = toHttpCookie(current);
663
- return currentNumber !== null && next <= currentNumber;
664
- }
665
825
  function errorMessage(error) {
666
826
  return _instanceof(error, Error) ? error.message : String(error);
667
827
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_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","value","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","installHttpPullTransport","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","ensureHttpPullTransport","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","resetTransientFailures"],"sources":["../../src/httpPullTransport.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_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","value","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","installHttpPullTransport","opts","_class","previousWebSocket","globalThis","WebSocket","_opts_fetch","fetchImpl","fetch","Error","_opts_wake","state","origin","URL","originString","trimTrailingSlash","nativeWebSocket","sockets","Set","pullIntervalMs","wakeEnabled","wake","queryTransform","queryForward","queryAware","nextPokeID","transientFailureCount","Shim","_class2","url","protocols","shouldIntercept","ZeroHttpSocket","String","pull","Promise","all","map","socket","connections","size","uninstall","transportsByOrigin","ensureHttpPullTransport","existing","transport","ZeroHttpSocket2","_this_cookie","_decoded_initConnectionMessage","CONNECTING","OPEN","CLOSING","CLOSED","readyState","listeners","open","message","close","error","pendingGotQueriesPatch","desiredQueryPatch","queryVersion","sentQueryPatchLen","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","closeWakeChannel","wasClean","pullInFlight","fetchPull","then","response","applyServerGotQueries","unchanged","emitGotQueriesPatch","emitPoke","catch","fail","finally","pullAgain","timestamp","setInterval","openWakeChannel","Native","wakeSocket","wsBase","replace","encodeURIComponent","e","reconnect","wakeReconnectTimer","onmessage","onclose","onerror","body","desiredQueriesPatch","Array","isArray","gotQueriesPatch","transform","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","iterator","_step","next","done","op","hash","inline","ast","_op_name","name","_op_args","err","return","postJSON","filterMutationResultsToClient","pushResponse","nextPush","got","gotQueries","patch","sentQueryVersion","version","splice"],"sources":["../../src/httpPullTransport.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "on-zero",
3
- "version": "0.6.6",
3
+ "version": "0.6.8",
4
4
  "description": "A typed layer over @rocicorp/zero with queries, mutations, and permissions",
5
5
  "sideEffects": false,
6
6
  "source": "src/index.ts",
@@ -83,7 +83,7 @@
83
83
  }
84
84
  },
85
85
  "dependencies": {
86
- "@take-out/helpers": "0.6.6",
86
+ "@take-out/helpers": "0.6.8",
87
87
  "chokidar": "^4.0.3",
88
88
  "citty": "^0.1.6",
89
89
  "valibot": "^1.1.0"
@@ -0,0 +1,51 @@
1
+ import { afterEach, describe, expect, test, vi } from 'vitest'
2
+
3
+ import { createMutators } from './createMutators'
4
+
5
+ afterEach(() => {
6
+ vi.useRealTimers()
7
+ })
8
+
9
+ describe('createMutators timeout guard', () => {
10
+ test('releases the timeout when a mutation succeeds', async () => {
11
+ vi.useFakeTimers()
12
+ const mutators = createMutators({
13
+ environment: 'server',
14
+ authData: null,
15
+ can: {} as never,
16
+ models: {
17
+ task: {
18
+ mutate: {
19
+ create: async () => {},
20
+ },
21
+ },
22
+ } as never,
23
+ }) as any
24
+
25
+ await mutators.task.create({}, {})
26
+
27
+ expect(vi.getTimerCount()).toBe(0)
28
+ })
29
+
30
+ test('releases the timeout when a mutation fails', async () => {
31
+ vi.useFakeTimers()
32
+ const mutators = createMutators({
33
+ environment: 'server',
34
+ authData: null,
35
+ can: {} as never,
36
+ models: {
37
+ task: {
38
+ mutate: {
39
+ create: async () => {
40
+ throw new Error('nope')
41
+ },
42
+ },
43
+ },
44
+ } as never,
45
+ }) as any
46
+
47
+ await expect(mutators.task.create({}, {})).rejects.toThrow('nope')
48
+
49
+ expect(vi.getTimerCount()).toBe(0)
50
+ })
51
+ })
@@ -131,13 +131,18 @@ export function createMutators<Models extends GenericModels>({
131
131
  timeoutMs: number = time.ms.minutes(1),
132
132
  ) {
133
133
  return async (...args: Args): Promise<void> => {
134
+ let timeoutId: ReturnType<typeof setTimeout> | undefined
134
135
  const timeoutPromise = new Promise<never>((_, reject) => {
135
- setTimeout(() => {
136
+ timeoutId = setTimeout(() => {
136
137
  reject(new Error(`[mutator] ${name} timeout after ${timeoutMs}ms`))
137
138
  }, timeoutMs)
138
139
  })
139
140
 
140
- return Promise.race([fn(...args), timeoutPromise])
141
+ try {
142
+ return await Promise.race([fn(...args), timeoutPromise])
143
+ } finally {
144
+ if (timeoutId !== undefined) clearTimeout(timeoutId)
145
+ }
141
146
  }
142
147
  }
143
148
 
@@ -0,0 +1,80 @@
1
+ import { afterEach, expect, test } from 'vitest'
2
+
3
+ import {
4
+ eventually,
5
+ startZeroHttpHarness,
6
+ waitForComplete,
7
+ type ZeroHttpHarness,
8
+ } from './testHarness'
9
+
10
+ // repro for the soot `sb read-state` hang (2026-07-10): named-query `complete`
11
+ // never resolves for queries that were already desired when the socket
12
+ // (re)connects, while queries desired after connect ack fine. these tests pin
13
+ // the got-ack contract across the transport's reconnect path.
14
+
15
+ let harness: ZeroHttpHarness | undefined
16
+
17
+ afterEach(async () => {
18
+ await harness?.close()
19
+ harness = undefined
20
+ })
21
+
22
+ test('query desired before first connect reaches complete', async () => {
23
+ harness = await startZeroHttpHarness({
24
+ seed: { user: [{ id: 'u1', name: 'ada' }] },
25
+ })
26
+ const zero = harness.createZero('u1')
27
+ // materialize synchronously after construction so the desired query rides
28
+ // the initial connection handshake, not a later changeDesiredQueries.
29
+ const view = zero.query.user.materialize()
30
+ const rows = await waitForComplete<any[]>(view)
31
+ expect(rows).toEqual([{ id: 'u1', name: 'ada' }])
32
+ view.destroy()
33
+ })
34
+
35
+ test('existing + new queries reach complete again after a transport drop', async () => {
36
+ let failNextPull = false
37
+ harness = await startZeroHttpHarness({
38
+ seed: {
39
+ user: [{ id: 'u1', name: 'ada' }],
40
+ project: [{ id: 'p1', ownerId: 'u1', name: 'first' }],
41
+ },
42
+ interceptFetch: (next) => (input, init) => {
43
+ const url = String(input)
44
+ if (failNextPull && url.endsWith('/pull')) {
45
+ failNextPull = false
46
+ return Promise.reject(new Error('injected transient pull failure'))
47
+ }
48
+ return next(input, init)
49
+ },
50
+ })
51
+ const zero = harness.createZero('u1')
52
+
53
+ const userView = zero.query.user.materialize()
54
+ await waitForComplete<any[]>(userView)
55
+
56
+ // drop the socket: a failed pull closes it (1011) and zero reconnects with
57
+ // every currently-desired query in the connection handshake.
58
+ failNextPull = true
59
+ await harness.transport.pull().catch(() => {})
60
+
61
+ // wait until sync is live again (a write round-trips).
62
+ const mutation = zero.mutate.project.create({ id: 'p2', ownerId: 'u1', name: 'second' })
63
+ await mutation.client
64
+ await mutation.server.catch(() => {})
65
+
66
+ // the already-desired query must be able to reach complete again on the new
67
+ // socket (this is what sb read-state does: re-run an already-subscribed
68
+ // named query with {type:'complete'}).
69
+ const userAgain = zero.query.user.materialize()
70
+ await waitForComplete<any[]>(userAgain)
71
+
72
+ // and a query desired only after the reconnect must too.
73
+ const projectView = zero.query.project.materialize()
74
+ const projects = await waitForComplete<any[]>(projectView)
75
+ expect(projects.map((p: any) => p.id).sort()).toEqual(['p1', 'p2'])
76
+
77
+ userView.destroy()
78
+ userAgain.destroy()
79
+ projectView.destroy()
80
+ })
@@ -662,3 +662,137 @@ function defer<T>() {
662
662
  })
663
663
  return { promise, resolve, reject }
664
664
  }
665
+
666
+ // installs the transport with the query-aware extension on (a queryTransform
667
+ // resolver), pushing it for afterEach cleanup.
668
+ function installWithQueries(
669
+ fetch: typeof globalThis.fetch,
670
+ queryTransform: (name: string, args: readonly unknown[]) => unknown,
671
+ ) {
672
+ const transport = installHttpPullTransport({ origin: ORIGIN, fetch, queryTransform })
673
+ transports.push(transport)
674
+ return transport
675
+ }
676
+
677
+ describe('zero-http query-aware extension', () => {
678
+ test('ships desired queries with pull state (transformed AST) and emits server got-query ack', async () => {
679
+ const requests: RequestRecord[] = []
680
+ const fetch = vi.fn(async (input: RequestInfo | URL, init?: RequestInit) => {
681
+ const request = recordRequest(input, init)
682
+ requests.push(request)
683
+ return jsonResponse({
684
+ cookie: 1,
685
+ lastMutationIDChanges: {},
686
+ rowsPatch: [{ op: 'clear' }],
687
+ gotQueries: { version: 1, patch: [{ op: 'put', hash: 'h1' }] },
688
+ })
689
+ })
690
+ installWithQueries(fetch, (name, args) => ({ resolved: name, args }))
691
+
692
+ const { messages } = openRawSocketWithMessages({
693
+ desiredQueriesPatch: [
694
+ { op: 'put', hash: 'h1', name: 'byOwner', args: [{ ownerId: 'u1' }] },
695
+ ],
696
+ })
697
+
698
+ await eventually(() => expect(requests.length).toBeGreaterThan(0))
699
+ // the pull body ships {queries:{version, patch:[{op:'put',hash,ast}]}} with
700
+ // name+args resolved to the AST by the transform
701
+ expect(requests[0].body.queries).toEqual({
702
+ version: 1,
703
+ patch: [
704
+ {
705
+ op: 'put',
706
+ hash: 'h1',
707
+ ast: { resolved: 'byOwner', args: [{ ownerId: 'u1' }] },
708
+ },
709
+ ],
710
+ })
711
+ // the server's got-query ack is emitted to the client (not synthesized)
712
+ await eventually(() => {
713
+ const poke = messages.find(
714
+ (m) => m[0] === 'pokePart' && Array.isArray(m[1].gotQueriesPatch),
715
+ )
716
+ expect(poke?.[1].gotQueriesPatch).toEqual([{ op: 'put', hash: 'h1' }])
717
+ })
718
+ })
719
+
720
+ test('an ad-hoc put with an inline ast ships that ast unchanged', async () => {
721
+ const requests: RequestRecord[] = []
722
+ const fetch = vi.fn(async (input: RequestInfo | URL, init?: RequestInit) => {
723
+ requests.push(recordRequest(input, init))
724
+ return jsonResponse({ cookie: 1, unchanged: true })
725
+ })
726
+ // a transform that would throw if called — an inline ast must bypass it
727
+ installWithQueries(fetch, () => {
728
+ throw new Error('transform should not run for an inline ast')
729
+ })
730
+
731
+ openRawSocketWithMessages({
732
+ desiredQueriesPatch: [{ op: 'put', hash: 'h2', ast: { inline: true } }],
733
+ })
734
+
735
+ await eventually(() => expect(requests.length).toBeGreaterThan(0))
736
+ expect(requests[0].body.queries.patch).toEqual([
737
+ { op: 'put', hash: 'h2', ast: { inline: true } },
738
+ ])
739
+ })
740
+
741
+ test('reconnect re-ships the desired set', async () => {
742
+ const requests: RequestRecord[] = []
743
+ const fetch = vi.fn(async (input: RequestInfo | URL, init?: RequestInit) => {
744
+ requests.push(recordRequest(input, init))
745
+ // never ack the query version, so the desire stays un-acked
746
+ return jsonResponse({ cookie: 1, unchanged: true })
747
+ })
748
+ installWithQueries(fetch, (name) => ({ resolved: name }))
749
+
750
+ const desired = [{ op: 'put', hash: 'h1', name: 'byOwner', args: [] }]
751
+ const first = openRawSocketWithMessages({ desiredQueriesPatch: desired })
752
+ await eventually(() => expect(requests.length).toBeGreaterThan(0))
753
+ first.socket.close()
754
+
755
+ const before = requests.length
756
+ openRawSocketWithMessages({ desiredQueriesPatch: desired })
757
+ await eventually(() => expect(requests.length).toBeGreaterThan(before))
758
+ // the reconnected socket re-ships the (still un-acked) desired query
759
+ const replay = requests[requests.length - 1].body.queries
760
+ expect(replay.patch).toEqual([
761
+ { op: 'put', hash: 'h1', ast: { resolved: 'byOwner' } },
762
+ ])
763
+ })
764
+
765
+ test('queryForward ships name+args for the server to resolve (no client transform)', async () => {
766
+ const requests: RequestRecord[] = []
767
+ const fetch = vi.fn(async (input: RequestInfo | URL, init?: RequestInit) => {
768
+ requests.push(recordRequest(input, init))
769
+ return jsonResponse({ cookie: 1, unchanged: true })
770
+ })
771
+ // queryForward on, no transform: the permission transform stays server-side
772
+ const transport = installHttpPullTransport({
773
+ origin: ORIGIN,
774
+ fetch,
775
+ queryForward: true,
776
+ })
777
+ transports.push(transport)
778
+
779
+ openRawSocketWithMessages({
780
+ desiredQueriesPatch: [
781
+ {
782
+ op: 'put',
783
+ hash: 'h3',
784
+ name: 'byOwner',
785
+ args: [{ ownerId: 'u1' }],
786
+ // Zero may include a locally evaluable AST on a named query put.
787
+ // queryForward must discard it so the server remains authoritative.
788
+ ast: { table: 'secret' },
789
+ },
790
+ ],
791
+ })
792
+
793
+ await eventually(() => expect(requests.length).toBeGreaterThan(0))
794
+ expect(requests[0].body.queries.patch).toEqual([
795
+ { op: 'put', hash: 'h3', name: 'byOwner', args: [{ ownerId: 'u1' }] },
796
+ ])
797
+ })
798
+ })