on-zero 0.6.20 → 0.6.22-1784492767691

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 (57) hide show
  1. package/dist/cjs/createPermissions.cjs +0 -2
  2. package/dist/cjs/createPermissions.native.js +0 -2
  3. package/dist/cjs/createPermissions.native.js.map +1 -1
  4. package/dist/cjs/createZeroSQLiteServer.test.cjs +97 -0
  5. package/dist/cjs/createZeroSQLiteServer.test.native.js +108 -0
  6. package/dist/cjs/createZeroSQLiteServer.test.native.js.map +1 -1
  7. package/dist/cjs/httpPull/transport.test.cjs +128 -11
  8. package/dist/cjs/httpPull/transport.test.native.js +151 -13
  9. package/dist/cjs/httpPull/transport.test.native.js.map +1 -1
  10. package/dist/cjs/httpPullTransport.cjs +151 -28
  11. package/dist/cjs/httpPullTransport.native.js +166 -32
  12. package/dist/cjs/httpPullTransport.native.js.map +1 -1
  13. package/dist/cjs/mutations.cjs +4 -11
  14. package/dist/cjs/mutations.native.js +4 -11
  15. package/dist/cjs/mutations.native.js.map +1 -1
  16. package/dist/esm/createPermissions.mjs +0 -2
  17. package/dist/esm/createPermissions.mjs.map +1 -1
  18. package/dist/esm/createPermissions.native.js +0 -2
  19. package/dist/esm/createPermissions.native.js.map +1 -1
  20. package/dist/esm/createZeroSQLiteServer.test.mjs +97 -0
  21. package/dist/esm/createZeroSQLiteServer.test.mjs.map +1 -1
  22. package/dist/esm/createZeroSQLiteServer.test.native.js +108 -0
  23. package/dist/esm/createZeroSQLiteServer.test.native.js.map +1 -1
  24. package/dist/esm/httpPull/transport.test.mjs +104 -11
  25. package/dist/esm/httpPull/transport.test.mjs.map +1 -1
  26. package/dist/esm/httpPull/transport.test.native.js +127 -13
  27. package/dist/esm/httpPull/transport.test.native.js.map +1 -1
  28. package/dist/esm/httpPullTransport.mjs +151 -28
  29. package/dist/esm/httpPullTransport.mjs.map +1 -1
  30. package/dist/esm/httpPullTransport.native.js +166 -32
  31. package/dist/esm/httpPullTransport.native.js.map +1 -1
  32. package/dist/esm/mutations.mjs +4 -11
  33. package/dist/esm/mutations.mjs.map +1 -1
  34. package/dist/esm/mutations.native.js +4 -11
  35. package/dist/esm/mutations.native.js.map +1 -1
  36. package/package.json +2 -2
  37. package/readme.md +45 -8
  38. package/src/createPermissions.ts +0 -2
  39. package/src/createZeroSQLiteServer.test.ts +94 -0
  40. package/src/httpPull/transport.test.ts +124 -14
  41. package/src/httpPullTransport.ts +228 -35
  42. package/src/mutations.ts +7 -21
  43. package/types/createPermissions.d.ts.map +1 -1
  44. package/types/httpPullTransport.d.ts +14 -1
  45. package/types/httpPullTransport.d.ts.map +1 -1
  46. package/types/mutations.d.ts +1 -1
  47. package/types/mutations.d.ts.map +1 -1
  48. package/dist/cjs/helpers/didRunPermissionCheck.cjs +0 -36
  49. package/dist/cjs/helpers/didRunPermissionCheck.native.js +0 -41
  50. package/dist/cjs/helpers/didRunPermissionCheck.native.js.map +0 -1
  51. package/dist/esm/helpers/didRunPermissionCheck.mjs +0 -10
  52. package/dist/esm/helpers/didRunPermissionCheck.mjs.map +0 -1
  53. package/dist/esm/helpers/didRunPermissionCheck.native.js +0 -12
  54. package/dist/esm/helpers/didRunPermissionCheck.native.js.map +0 -1
  55. package/src/helpers/didRunPermissionCheck.ts +0 -16
  56. package/types/helpers/didRunPermissionCheck.d.ts +0 -4
  57. package/types/helpers/didRunPermissionCheck.d.ts.map +0 -1
@@ -27,7 +27,6 @@ __export(createPermissions_exports, {
27
27
  });
28
28
  module.exports = __toCommonJS(createPermissions_exports);
29
29
  var import_helpers = require("@take-out/helpers");
30
- var import_didRunPermissionCheck = require("./helpers/didRunPermissionCheck.cjs");
31
30
  var import_mutatorContext = require("./helpers/mutatorContext.cjs");
32
31
  var import_prettyFormatZeroQuery = require("./helpers/prettyFormatZeroQuery.cjs");
33
32
  var import_state = require("./state.cjs");
@@ -90,7 +89,6 @@ function createPermissions({
90
89
  throw new Error(`Must use where('table') style where to pass to can()`);
91
90
  }
92
91
  await ensurePermission(ctx.tx, ctx.authData, tableName, where, obj);
93
- (0, import_didRunPermissionCheck.setDidRunPermissionCheck)(ctx);
94
92
  }
95
93
  };
96
94
  async function ensurePermission(tx, authData, tableName, where, obj) {
@@ -29,7 +29,6 @@ __export(createPermissions_exports, {
29
29
  });
30
30
  module.exports = __toCommonJS(createPermissions_exports);
31
31
  var import_helpers = require("@take-out/helpers");
32
- var import_didRunPermissionCheck = require("./helpers/didRunPermissionCheck.native.js");
33
32
  var import_mutatorContext = require("./helpers/mutatorContext.native.js");
34
33
  var import_prettyFormatZeroQuery = require("./helpers/prettyFormatZeroQuery.native.js");
35
34
  var import_state = require("./state.native.js");
@@ -223,7 +222,6 @@ function createPermissions(param) {
223
222
  throw new Error(`Must use where('table') style where to pass to can()`);
224
223
  }
225
224
  await ensurePermission(ctx.tx, ctx.authData, tableName, where, obj);
226
- (0, import_didRunPermissionCheck.setDidRunPermissionCheck)(ctx);
227
225
  }
228
226
  };
229
227
  async function ensurePermission(tx, authData, tableName, where, obj) {
@@ -1 +1 @@
1
- {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","createPermissions_exports","__export","PermissionError","createPermissions","module","exports","import_helpers","require","import_didRunPermissionCheck","import_mutatorContext","import_prettyFormatZeroQuery","import_state","import_where","_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","o","Object","setPrototypeOf","getPrototypeOf","o2","__proto__","_inherits","subClass","superClass","create","writable","configurable","_is_native_function","fn","toString","call","indexOf","_type_of","p","p2","obj","Symbol","_wrap_native_super","_cache","Map","wrapNativeSuper","has","get","set","Wrapper","enumerable"],"sources":["../../src/createPermissions.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","createPermissions_exports","__export","PermissionError","createPermissions","module","exports","import_helpers","require","import_mutatorContext","import_prettyFormatZeroQuery","import_state","import_where","_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","o","Object","setPrototypeOf","getPrototypeOf","o2","__proto__","_inherits","subClass","superClass","create","writable","configurable","_is_native_function","fn","toString","call","indexOf","_type_of","p","p2","obj","Symbol","_wrap_native_super","_cache","Map","wrapNativeSuper","has","get","set","Wrapper","enumerable"],"sources":["../../src/createPermissions.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -4,6 +4,8 @@ var import_bindings = require("@rocicorp/zero/bindings");
4
4
  var import_vitest = require("vitest");
5
5
  var import_createZeroSQLiteServer = require("./createZeroSQLiteServer.cjs");
6
6
  var import_fixtureSchema = require("./httpPull/fixtureSchema.cjs");
7
+ var import_mutations = require("./mutations.cjs");
8
+ var import_serverWhere = require("./serverWhere.cjs");
7
9
  const note = (0, import_zero.table)("note").from("note_records").columns({
8
10
  id: (0, import_zero.string)().from("note_id"),
9
11
  done: (0, import_zero.boolean)(),
@@ -252,6 +254,101 @@ function cleanupRequest() {
252
254
  message: "rejected"
253
255
  });
254
256
  });
257
+ (0, import_vitest.test)("allows a custom CRUD mutation to no-op without an automatic permission check", async () => {
258
+ const projectPermission = (0, import_serverWhere.serverWhere)("project", q => q.cmp("ownerId", "u1"));
259
+ const projectMutations = (0, import_mutations.mutations)("project", projectPermission, {
260
+ insert: async () => {}
261
+ });
262
+ const server = (0, import_createZeroSQLiteServer.createZeroSQLiteServer)({
263
+ schema: import_fixtureSchema.zeroHttpFixtureSchema,
264
+ models: {
265
+ project: {
266
+ mutate: projectMutations
267
+ }
268
+ },
269
+ createServerActions: () => ({}),
270
+ transactionProvider
271
+ });
272
+ const result = await server.handleMutationRequest({
273
+ authData: {
274
+ id: "u1",
275
+ role: "user"
276
+ },
277
+ request: pushRequest(1, "project.insert", {
278
+ id: "p1",
279
+ ownerId: "u1",
280
+ name: "skip"
281
+ })
282
+ });
283
+ (0, import_vitest.expect)(result.response.mutations[0].result).toEqual({});
284
+ (0, import_vitest.expect)(db.prepare("SELECT * FROM project").all()).toEqual([]);
285
+ });
286
+ (0, import_vitest.test)("rolls back when a custom CRUD mutation throws", async () => {
287
+ const projectPermission = (0, import_serverWhere.serverWhere)("project", q => q.cmp("ownerId", "u1"));
288
+ const projectMutations = (0, import_mutations.mutations)("project", projectPermission, {
289
+ insert: async ({
290
+ tx
291
+ }, value) => {
292
+ await tx.mutate.project.insert(value);
293
+ throw new Error("denied by custom validation");
294
+ }
295
+ });
296
+ const server = (0, import_createZeroSQLiteServer.createZeroSQLiteServer)({
297
+ schema: import_fixtureSchema.zeroHttpFixtureSchema,
298
+ models: {
299
+ project: {
300
+ mutate: projectMutations
301
+ }
302
+ },
303
+ createServerActions: () => ({}),
304
+ transactionProvider
305
+ });
306
+ const result = await server.handleMutationRequest({
307
+ authData: {
308
+ id: "u2",
309
+ role: "user"
310
+ },
311
+ request: pushRequest(1, "project.insert", {
312
+ id: "p2",
313
+ ownerId: "u2",
314
+ name: "unauthorized"
315
+ })
316
+ });
317
+ (0, import_vitest.expect)(result.response.mutations[0].result).toMatchObject({
318
+ error: "app",
319
+ message: "denied by custom validation"
320
+ });
321
+ (0, import_vitest.expect)(db.prepare("SELECT * FROM project").all()).toEqual([]);
322
+ });
323
+ (0, import_vitest.test)("permission-checks generated CRUD mutations", async () => {
324
+ let inserted;
325
+ let permissionChecks = 0;
326
+ const projectPermission = (0, import_serverWhere.serverWhere)("project", q => q.cmp("ownerId", "u1"));
327
+ const projectMutations = (0, import_mutations.mutations)("project", projectPermission);
328
+ const value = {
329
+ id: "p3",
330
+ ownerId: "u2",
331
+ name: "unauthorized"
332
+ };
333
+ await (0, import_vitest.expect)(projectMutations.insert({
334
+ tx: {
335
+ mutate: {
336
+ project: {
337
+ insert: async row => {
338
+ inserted = row;
339
+ }
340
+ }
341
+ }
342
+ },
343
+ can: async (_where, row) => {
344
+ permissionChecks++;
345
+ (0, import_vitest.expect)(row).toEqual(value);
346
+ throw new Error("denied");
347
+ }
348
+ }, value)).rejects.toThrow("denied");
349
+ (0, import_vitest.expect)(inserted).toEqual(value);
350
+ (0, import_vitest.expect)(permissionChecks).toBe(1);
351
+ });
255
352
  (0, import_vitest.test)("recovers duplicate results and deletes them through the cleanup mutation", async () => {
256
353
  const server = (0, import_createZeroSQLiteServer.createZeroSQLiteServer)({
257
354
  schema: import_fixtureSchema.zeroHttpFixtureSchema,
@@ -6,6 +6,8 @@ var import_bindings = require("@rocicorp/zero/bindings");
6
6
  var import_vitest = require("vitest");
7
7
  var import_createZeroSQLiteServer = require("./createZeroSQLiteServer.native.js");
8
8
  var import_fixtureSchema = require("./httpPull/fixtureSchema.native.js");
9
+ var import_mutations = require("./mutations.native.js");
10
+ var import_serverWhere = require("./serverWhere.native.js");
9
11
  var note = (0, import_zero.table)("note").from("note_records").columns({
10
12
  id: (0, import_zero.string)().from("note_id"),
11
13
  done: (0, import_zero.boolean)(),
@@ -268,6 +270,112 @@ function cleanupRequest() {
268
270
  message: "rejected"
269
271
  });
270
272
  });
273
+ (0, import_vitest.test)("allows a custom CRUD mutation to no-op without an automatic permission check", async function () {
274
+ var projectPermission = (0, import_serverWhere.serverWhere)("project", function (q) {
275
+ return q.cmp("ownerId", "u1");
276
+ });
277
+ var projectMutations = (0, import_mutations.mutations)("project", projectPermission, {
278
+ insert: async function () {}
279
+ });
280
+ var server = (0, import_createZeroSQLiteServer.createZeroSQLiteServer)({
281
+ schema: import_fixtureSchema.zeroHttpFixtureSchema,
282
+ models: {
283
+ project: {
284
+ mutate: projectMutations
285
+ }
286
+ },
287
+ createServerActions: function () {
288
+ return {};
289
+ },
290
+ transactionProvider
291
+ });
292
+ var result = await server.handleMutationRequest({
293
+ authData: {
294
+ id: "u1",
295
+ role: "user"
296
+ },
297
+ request: pushRequest(1, "project.insert", {
298
+ id: "p1",
299
+ ownerId: "u1",
300
+ name: "skip"
301
+ })
302
+ });
303
+ (0, import_vitest.expect)(result.response.mutations[0].result).toEqual({});
304
+ (0, import_vitest.expect)(db.prepare("SELECT * FROM project").all()).toEqual([]);
305
+ });
306
+ (0, import_vitest.test)("rolls back when a custom CRUD mutation throws", async function () {
307
+ var projectPermission = (0, import_serverWhere.serverWhere)("project", function (q) {
308
+ return q.cmp("ownerId", "u1");
309
+ });
310
+ var projectMutations = (0, import_mutations.mutations)("project", projectPermission, {
311
+ insert: async function (param, value) {
312
+ var {
313
+ tx
314
+ } = param;
315
+ await tx.mutate.project.insert(value);
316
+ throw new Error("denied by custom validation");
317
+ }
318
+ });
319
+ var server = (0, import_createZeroSQLiteServer.createZeroSQLiteServer)({
320
+ schema: import_fixtureSchema.zeroHttpFixtureSchema,
321
+ models: {
322
+ project: {
323
+ mutate: projectMutations
324
+ }
325
+ },
326
+ createServerActions: function () {
327
+ return {};
328
+ },
329
+ transactionProvider
330
+ });
331
+ var result = await server.handleMutationRequest({
332
+ authData: {
333
+ id: "u2",
334
+ role: "user"
335
+ },
336
+ request: pushRequest(1, "project.insert", {
337
+ id: "p2",
338
+ ownerId: "u2",
339
+ name: "unauthorized"
340
+ })
341
+ });
342
+ (0, import_vitest.expect)(result.response.mutations[0].result).toMatchObject({
343
+ error: "app",
344
+ message: "denied by custom validation"
345
+ });
346
+ (0, import_vitest.expect)(db.prepare("SELECT * FROM project").all()).toEqual([]);
347
+ });
348
+ (0, import_vitest.test)("permission-checks generated CRUD mutations", async function () {
349
+ var inserted;
350
+ var permissionChecks = 0;
351
+ var projectPermission = (0, import_serverWhere.serverWhere)("project", function (q) {
352
+ return q.cmp("ownerId", "u1");
353
+ });
354
+ var projectMutations = (0, import_mutations.mutations)("project", projectPermission);
355
+ var value = {
356
+ id: "p3",
357
+ ownerId: "u2",
358
+ name: "unauthorized"
359
+ };
360
+ await (0, import_vitest.expect)(projectMutations.insert({
361
+ tx: {
362
+ mutate: {
363
+ project: {
364
+ insert: async function (row) {
365
+ inserted = row;
366
+ }
367
+ }
368
+ }
369
+ },
370
+ can: async function (_where, row) {
371
+ permissionChecks++;
372
+ (0, import_vitest.expect)(row).toEqual(value);
373
+ throw new Error("denied");
374
+ }
375
+ }, value)).rejects.toThrow("denied");
376
+ (0, import_vitest.expect)(inserted).toEqual(value);
377
+ (0, import_vitest.expect)(permissionChecks).toBe(1);
378
+ });
271
379
  (0, import_vitest.test)("recovers duplicate results and deletes them through the cleanup mutation", async function () {
272
380
  var server = (0, import_createZeroSQLiteServer.createZeroSQLiteServer)({
273
381
  schema: import_fixtureSchema.zeroHttpFixtureSchema,
@@ -1 +1 @@
1
- {"version":3,"names":["import_node_sqlite","require","import_zero","import_bindings","import_vitest","import_createZeroSQLiteServer","import_fixtureSchema","note","table","from","columns","id","string","done","boolean","data","json","optional","primaryKey","sqliteTypesSchema","createSchema","tables","relationships","enableLegacyQueries","person","membership","personId","teamId","team","active","metadata","twoHopSchema","param","many","teams","sourceField","destSchema","destField","pushRequest","name","args","Request","method","headers","body","JSON","stringify","clientGroupID","mutations","type","clientID","timestamp","pushVersion","requestID","cleanupRequest","upToMutationID","describe","db","retryNextTransaction","transactionProvider","statements","beforeEach","DatabaseSync","exec","join","executor","sql","params","arguments","length","push","result","prepare","run","changes","Number","query","all","queryAst","ast","format","rows","map","row","note_id","parse","label","Error","singular","callback","value","error","afterEach","close","test","effectRuns","server","createZeroSQLiteServer","schema","zeroHttpFixtureSchema","models","project","mutate","create","tx","server2","insert","enqueueTask","barrier","createServerActions","handleMutationRequest","authData","request","ownerId","skipAsyncTasks","expect","response","toEqual","lastMutationID","asyncTasks","toHaveLength","toBe","task","fail","toMatchObject","message","get","stored","value2","duplicate","count","upsert","update","delete","q","resolves","transaction","location","one","dbTransaction"],"sources":["../../src/createZeroSQLiteServer.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["import_node_sqlite","require","import_zero","import_bindings","import_vitest","import_createZeroSQLiteServer","import_fixtureSchema","import_mutations","import_serverWhere","note","table","from","columns","id","string","done","boolean","data","json","optional","primaryKey","sqliteTypesSchema","createSchema","tables","relationships","enableLegacyQueries","person","membership","personId","teamId","team","active","metadata","twoHopSchema","param","many","teams","sourceField","destSchema","destField","pushRequest","name","args","Request","method","headers","body","JSON","stringify","clientGroupID","mutations","type","clientID","timestamp","pushVersion","requestID","cleanupRequest","upToMutationID","describe","db","retryNextTransaction","transactionProvider","statements","beforeEach","DatabaseSync","exec","join","executor","sql","params","arguments","length","push","result","prepare","run","changes","Number","query","all","queryAst","ast","format","rows","map","row","note_id","parse","label","Error","singular","callback","value","error","afterEach","close","test","effectRuns","server","createZeroSQLiteServer","schema","zeroHttpFixtureSchema","models","project","mutate","create","tx","server2","insert","enqueueTask","barrier","createServerActions","handleMutationRequest","authData","request","ownerId","skipAsyncTasks","expect","response","toEqual","lastMutationID","asyncTasks","toHaveLength","toBe","task","fail","toMatchObject","message","get","stored","projectPermission","serverWhere","q","cmp","projectMutations","role","inserted","permissionChecks","can","_where","rejects","toThrow","value2","duplicate","count","upsert","update","delete","resolves"],"sources":["../../src/createZeroSQLiteServer.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,27 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __copyProps = (to, from, except, desc) => {
8
+ if (from && typeof from === "object" || typeof from === "function") {
9
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
10
+ get: () => from[key],
11
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
12
+ });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
22
+ value: mod,
23
+ enumerable: true
24
+ }) : target, mod));
1
25
  var import_zero = require("@rocicorp/zero");
2
26
  var import_vitest = require("vitest");
3
27
  var import_fixtureSchema = require("./fixtureSchema.cjs");
@@ -196,10 +220,11 @@ let storageID = 0;
196
220
  await transport.pull();
197
221
  (0, import_vitest.expect)(requests.at(-1)?.headers.authorization).toBe("Bearer token-new");
198
222
  });
199
- (0, import_vitest.test)("push frames are serialized per socket", async () => {
223
+ (0, import_vitest.test)("push frames are serialized and queued bursts are batched per socket", async () => {
200
224
  const firstPushStarted = defer();
201
225
  const releaseFirstPush = defer();
202
- const pushIDs = [];
226
+ const pushRequests = [];
227
+ const lifecycle = [];
203
228
  const fetch = import_vitest.vi.fn(async (input, init) => {
204
229
  const request = recordRequest(input, init);
205
230
  if (request.path === "/pull") {
@@ -209,9 +234,9 @@ let storageID = 0;
209
234
  });
210
235
  }
211
236
  (0, import_vitest.expect)(request.path).toBe("/push");
212
- const mutationID = request.body.mutations[0].id;
213
- pushIDs.push(mutationID);
214
- if (mutationID === 1) {
237
+ const mutationIDs = request.body.mutations.map(mutation => mutation.id);
238
+ pushRequests.push(mutationIDs);
239
+ if (mutationIDs[0] === 1) {
215
240
  firstPushStarted.resolve();
216
241
  await releaseFirstPush.promise;
217
242
  }
@@ -227,7 +252,12 @@ let storageID = 0;
227
252
  }
228
253
  });
229
254
  });
230
- install(fetch);
255
+ const transport = (0, import_httpPullTransport.installHttpPullTransport)({
256
+ origin: ORIGIN,
257
+ fetch,
258
+ lifecycle: event => lifecycle.push(event)
259
+ });
260
+ transports.push(transport);
231
261
  const {
232
262
  messages,
233
263
  socket
@@ -236,12 +266,27 @@ let storageID = 0;
236
266
  socket.send(JSON.stringify(["push", pushBody(1)]));
237
267
  await firstPushStarted.promise;
238
268
  socket.send(JSON.stringify(["push", pushBody(2)]));
269
+ socket.send(JSON.stringify(["push", pushBody(3)]));
270
+ socket.send(JSON.stringify(["push", pushBody(4)]));
239
271
  await sleep(25);
240
- (0, import_vitest.expect)(pushIDs).toEqual([1]);
272
+ (0, import_vitest.expect)(pushRequests).toEqual([[1]]);
241
273
  releaseFirstPush.resolve();
242
- await eventually(() => (0, import_vitest.expect)(pushIDs).toEqual([1, 2]));
274
+ await eventually(() => (0, import_vitest.expect)(pushRequests).toEqual([[1], [2, 3, 4]]));
243
275
  await eventually(() => (0, import_vitest.expect)(messages.filter(message => message[0] === "pushResponse")).toHaveLength(2));
244
- (0, import_vitest.expect)(messages.filter(message => message[0] === "pushResponse").map(message => message[1].mutations[0].id.id)).toEqual([1, 2]);
276
+ (0, import_vitest.expect)(messages.filter(message => message[0] === "pushResponse").flatMap(message => message[1].mutations.map(mutation => mutation.id.id))).toEqual([1, 2, 3, 4]);
277
+ (0, import_vitest.expect)(lifecycle.filter(event => event.type === "push").map(({
278
+ pushFrameCount,
279
+ mutationCount
280
+ }) => ({
281
+ pushFrameCount,
282
+ mutationCount
283
+ }))).toEqual([{
284
+ pushFrameCount: 1,
285
+ mutationCount: 1
286
+ }, {
287
+ pushFrameCount: 3,
288
+ mutationCount: 3
289
+ }]);
245
290
  });
246
291
  (0, import_vitest.test)("cookie discipline skips unchanged pokes, chains changed pokes, and coalesces concurrent pulls", async () => {
247
292
  const requests = [];
@@ -515,6 +560,69 @@ let storageID = 0;
515
560
  args
516
561
  }) => args.some(arg => String(arg).includes("connect start time is undefined")))).toBe(false);
517
562
  });
563
+ (0, import_vitest.test)("a pull 500 cannot let a timed-out socket construction open on the abandoned attempt", async () => {
564
+ import_vitest.vi.useFakeTimers();
565
+ const lifecycle = [];
566
+ let pullCount = 0;
567
+ const fetch = import_vitest.vi.fn(async (input, init) => {
568
+ const request = recordRequest(input, init);
569
+ pullCount++;
570
+ if (pullCount === 1) {
571
+ return jsonResponse({
572
+ error: "injected pull outage"
573
+ }, {
574
+ status: 500
575
+ });
576
+ }
577
+ return jsonResponse({
578
+ cookie: request.body.cookie,
579
+ unchanged: true
580
+ });
581
+ });
582
+ const transport = (0, import_httpPullTransport.installHttpPullTransport)({
583
+ origin: ORIGIN,
584
+ fetch,
585
+ lifecycle: event => lifecycle.push(event)
586
+ });
587
+ transports.push(transport);
588
+ const first = openRawSocketWithMessages({
589
+ wsid: "before-pull-500"
590
+ });
591
+ await import_vitest.vi.advanceTimersByTimeAsync(1);
592
+ (0, import_vitest.expect)(first.socket.readyState).toBe(first.socket.CLOSED);
593
+ let delayedOpened = false;
594
+ let delayedClosed = 0;
595
+ const delayed = openRawSocketWithMessages({
596
+ wsid: "delayed-reconnect",
597
+ attemptStartedAt: performance.now() - 10001
598
+ });
599
+ delayed.socket.addEventListener("open", () => {
600
+ delayedOpened = true;
601
+ });
602
+ delayed.socket.addEventListener("close", () => {
603
+ delayedClosed++;
604
+ });
605
+ await import_vitest.vi.advanceTimersByTimeAsync(1);
606
+ (0, import_vitest.expect)(delayedOpened).toBe(false);
607
+ (0, import_vitest.expect)(delayedClosed).toBe(1);
608
+ (0, import_vitest.expect)(lifecycle.filter(event => event.type === "open")).toHaveLength(1);
609
+ const aborted = lifecycle.find(event => event.type === "aborted");
610
+ (0, import_vitest.expect)(aborted).toMatchObject({
611
+ pageID: transport.pageID,
612
+ transportID: transport.transportID,
613
+ zeroInstanceID: `${transport.pageID}:zero:c1`,
614
+ clientID: "c1",
615
+ clientGroupID: "cg1",
616
+ connectionAttemptID: `${transport.pageID}:zero:c1:attempt:delayed-reconnect`,
617
+ socketID: `${transport.transportID}:socket:2`,
618
+ wsid: "delayed-reconnect",
619
+ generation: 2,
620
+ activeGeneration: 2,
621
+ code: 1e3
622
+ });
623
+ (0, import_vitest.expect)(aborted?.attemptAgeMs).toBeGreaterThanOrEqual(1e4);
624
+ (0, import_vitest.expect)(lifecycle.filter(event => event.generation === 2 && (event.type === "aborted" || event.type === "close" || event.type === "superseded"))).toHaveLength(1);
625
+ });
518
626
  (0, import_vitest.test)("a replacement socket supersedes stale open and connected events for the same client", async () => {
519
627
  import_vitest.vi.useFakeTimers();
520
628
  const lifecycle = [];
@@ -557,8 +665,10 @@ let storageID = 0;
557
665
  (0, import_vitest.expect)(lifecycle).toContainEqual(import_vitest.expect.objectContaining({
558
666
  type: "superseded",
559
667
  generation: 1,
668
+ activeGeneration: 2,
560
669
  wsid: "stale"
561
670
  }));
671
+ (0, import_vitest.expect)(lifecycle.filter(event => event.generation === 1 && (event.type === "aborted" || event.type === "close" || event.type === "superseded"))).toHaveLength(1);
562
672
  (0, import_vitest.expect)(errors).toEqual([]);
563
673
  });
564
674
  (0, import_vitest.test)("non-origin WebSockets pass through to the native implementation", () => {
@@ -585,17 +695,21 @@ let storageID = 0;
585
695
  (0, import_vitest.expect)(globalThis.WebSocket).toBe(NativeWebSocket);
586
696
  globalThis.WebSocket = previous;
587
697
  });
588
- (0, import_vitest.test)("ensureHttpPullTransport installs once per origin", () => {
698
+ (0, import_vitest.test)("ensureHttpPullTransport installs once per origin across module evaluation", async () => {
589
699
  const origin = "http://127.0.0.1:65501";
590
700
  const first = (0, import_httpPullTransport.ensureHttpPullTransport)({
591
701
  origin,
592
702
  fetch: import_vitest.vi.fn()
593
703
  });
594
- const second = (0, import_httpPullTransport.ensureHttpPullTransport)({
704
+ import_vitest.vi.resetModules();
705
+ const reloaded = await import("../httpPullTransport");
706
+ const second = reloaded.ensureHttpPullTransport({
595
707
  origin,
596
708
  fetch: import_vitest.vi.fn()
597
709
  });
598
710
  (0, import_vitest.expect)(second).toBe(first);
711
+ (0, import_vitest.expect)(first.pageID).toMatch(/^page-/);
712
+ (0, import_vitest.expect)(first.transportID).toMatch(new RegExp(`^${first.pageID}:transport:[1-9][0-9]*$`));
599
713
  first.uninstall();
600
714
  });
601
715
  (0, import_vitest.test)("push responses are filtered to this client \u2014 foreign (recovery) results are dropped", async () => {
@@ -743,6 +857,9 @@ function openRawSocketWithMessages(opts) {
743
857
  url.searchParams.set("baseCookie", "");
744
858
  url.searchParams.set("lmid", "0");
745
859
  url.searchParams.set("wsid", opts?.wsid ?? "ws-test");
860
+ if (opts?.attemptStartedAt !== void 0) {
861
+ url.searchParams.set("ts", String(opts.attemptStartedAt));
862
+ }
746
863
  const messages = [];
747
864
  const socket = new WebSocket(url, encodeSecProtocol(["initConnection", {
748
865
  desiredQueriesPatch: opts?.desiredQueriesPatch ?? []