cojson-storage-indexeddb 0.13.31 → 0.14.0

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.
@@ -1,4 +1,4 @@
1
1
 
2
- > cojson-storage-indexeddb@0.13.31 build /home/runner/_work/jazz/jazz/packages/cojson-storage-indexeddb
2
+ > cojson-storage-indexeddb@0.14.0 build /home/runner/_work/jazz/jazz/packages/cojson-storage-indexeddb
3
3
  > rm -rf ./dist && tsc --sourceMap --outDir dist
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # cojson-storage-indexeddb
2
2
 
3
+ ## 0.14.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [5835ed1]
8
+ - cojson@0.14.0
9
+ - cojson-storage@0.14.0
10
+
11
+ ## 0.13.32
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies [2bf9743]
16
+ - cojson-storage@0.13.32
17
+
3
18
  ## 0.13.31
4
19
 
5
20
  ### Patch Changes
@@ -10,7 +10,7 @@ export declare class IDBClient implements DBClientInterfaceAsync {
10
10
  getCoValue(coValueId: RawCoID): Promise<StoredCoValueRow | undefined>;
11
11
  getCoValueSessions(coValueRowId: number): Promise<StoredSessionRow[]>;
12
12
  getSingleCoValueSession(coValueRowId: number, sessionID: SessionID): Promise<StoredSessionRow | undefined>;
13
- getNewTransactionInSession(sessionRowId: number, firstNewTxIdx: number): Promise<TransactionRow[]>;
13
+ getNewTransactionInSession(sessionRowId: number, fromIdx: number, toIdx: number): Promise<TransactionRow[]>;
14
14
  getSignatures(sessionRowId: number, firstNewTxIdx: number): Promise<SignatureAfterRow[]>;
15
15
  addCoValue(msg: CojsonInternalTypes.NewContentMessage): Promise<number>;
16
16
  addSessionUpdate({ sessionUpdate, sessionRow, }: {
@@ -1 +1 @@
1
- {"version":3,"file":"idbClient.d.ts","sourceRoot":"","sources":["../src/idbClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACtE,OAAO,KAAK,EAEV,sBAAsB,EACtB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,qBAAa,SAAU,YAAW,sBAAsB;IACtD,OAAO,CAAC,EAAE,CAAC;IAEX,iBAAiB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACpD,uBAAuB,EAAE,oBAAoB,GAAG,SAAS,CAAC;gBAE9C,EAAE,EAAE,WAAW;IAI3B,WAAW,CAAC,CAAC,EACX,OAAO,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,UAAU,CAAC,CAAC,CAAC,GACxD,OAAO,CAAC,CAAC,CAAC;IAgBP,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAMrE,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IASrE,uBAAuB,CAC3B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IASlC,0BAA0B,CAC9B,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,cAAc,EAAE,CAAC;IAatB,aAAa,CACjB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAazB,UAAU,CACd,GAAG,EAAE,mBAAmB,CAAC,iBAAiB,GACzC,OAAO,CAAC,MAAM,CAAC;IAcZ,gBAAgB,CAAC,EACrB,aAAa,EACb,UAAU,GACX,EAAE;QACD,aAAa,EAAE,UAAU,CAAC;QAC1B,UAAU,CAAC,EAAE,gBAAgB,CAAC;KAC/B,GAAG,OAAO,CAAC,MAAM,CAAC;IAcb,cAAc,CAClB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,mBAAmB,CAAC,WAAW;IAW3C,iBAAiB,CAAC,EACtB,YAAY,EACZ,GAAG,EACH,SAAS,GACV,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,mBAAmB,CAAC,SAAS,CAAC;KAC1C;IAUD,gBAAgB,CAAC,EAAE,EAAE,oBAAoB;IAQnC,WAAW,CAAC,kBAAkB,EAAE,MAAM,OAAO;CAYpD"}
1
+ {"version":3,"file":"idbClient.d.ts","sourceRoot":"","sources":["../src/idbClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACtE,OAAO,KAAK,EAEV,sBAAsB,EACtB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,qBAAa,SAAU,YAAW,sBAAsB;IACtD,OAAO,CAAC,EAAE,CAAC;IAEX,iBAAiB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACpD,uBAAuB,EAAE,oBAAoB,GAAG,SAAS,CAAC;gBAE9C,EAAE,EAAE,WAAW;IAI3B,WAAW,CAAC,CAAC,EACX,OAAO,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,UAAU,CAAC,CAAC,CAAC,GACxD,OAAO,CAAC,CAAC,CAAC;IAgBP,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAMrE,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IASrE,uBAAuB,CAC3B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IASlC,0BAA0B,CAC9B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,EAAE,CAAC;IAUtB,aAAa,CACjB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAazB,UAAU,CACd,GAAG,EAAE,mBAAmB,CAAC,iBAAiB,GACzC,OAAO,CAAC,MAAM,CAAC;IAcZ,gBAAgB,CAAC,EACrB,aAAa,EACb,UAAU,GACX,EAAE;QACD,aAAa,EAAE,UAAU,CAAC;QAC1B,UAAU,CAAC,EAAE,gBAAgB,CAAC;KAC/B,GAAG,OAAO,CAAC,MAAM,CAAC;IAcb,cAAc,CAClB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,mBAAmB,CAAC,WAAW;IAW3C,iBAAiB,CAAC,EACtB,YAAY,EACZ,GAAG,EACH,SAAS,GACV,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,mBAAmB,CAAC,SAAS,CAAC;KAC1C;IAUD,gBAAgB,CAAC,EAAE,EAAE,oBAAoB;IAQnC,WAAW,CAAC,kBAAkB,EAAE,MAAM,OAAO;CAYpD"}
package/dist/idbClient.js CHANGED
@@ -29,10 +29,10 @@ export class IDBClient {
29
29
  .index("uniqueSessions")
30
30
  .get([coValueRowId, sessionID]));
31
31
  }
32
- async getNewTransactionInSession(sessionRowId, firstNewTxIdx) {
32
+ async getNewTransactionInSession(sessionRowId, fromIdx, toIdx) {
33
33
  return this.makeRequest((tx) => tx
34
34
  .getObjectStore("transactions")
35
- .getAll(IDBKeyRange.bound([sessionRowId, firstNewTxIdx], [sessionRowId, Number.POSITIVE_INFINITY])));
35
+ .getAll(IDBKeyRange.bound([sessionRowId, fromIdx], [sessionRowId, toIdx])));
36
36
  }
37
37
  async getSignatures(sessionRowId, firstNewTxIdx) {
38
38
  return this.makeRequest((tx) => tx
@@ -1 +1 @@
1
- {"version":3,"file":"idbClient.js","sourceRoot":"","sources":["../src/idbClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idbClient.js","sourceRoot":"","sources":["../src/idbClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=storage.indexeddb.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.indexeddb.test.d.ts","sourceRoot":"","sources":["../../src/tests/storage.indexeddb.test.ts"],"names":[],"mappings":""}
@@ -4,7 +4,7 @@ import { WasmCrypto } from "cojson/crypto/WasmCrypto";
4
4
  import { expect, test, vi } from "vitest";
5
5
  import { IDBStorage } from "../index.js";
6
6
  import { toSimplifiedMessages } from "./messagesTestUtils.js";
7
- import { trackMessages } from "./testUtils.js";
7
+ import { trackMessages, waitFor } from "./testUtils.js";
8
8
  const Crypto = await WasmCrypto.create();
9
9
  test("Should be able to initialize and load from empty DB", async () => {
10
10
  const agentSecret = Crypto.newRandomAgentSecret();
@@ -50,11 +50,49 @@ test("should sync and load data from storage", async () => {
50
50
  }, node2Sync.messages)).toMatchInlineSnapshot(`
51
51
  [
52
52
  "client -> LOAD Map sessions: empty",
53
- "storage -> KNOWN Group sessions: header/3",
54
53
  "storage -> CONTENT Group header: true new: After: 0 New: 3",
55
- "storage -> KNOWN Map sessions: header/1",
56
54
  "storage -> CONTENT Map header: true new: After: 0 New: 1",
57
- "client -> KNOWN Group sessions: header/3",
55
+ ]
56
+ `);
57
+ node2Sync.restore();
58
+ });
59
+ test("should send an empty content message if there is no content", async () => {
60
+ const agentSecret = Crypto.newRandomAgentSecret();
61
+ const node1 = new LocalNode(agentSecret, Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), Crypto);
62
+ const node1Sync = trackMessages(node1);
63
+ const peer = await IDBStorage.asPeer();
64
+ node1.syncManager.addPeer(peer);
65
+ const group = node1.createGroup();
66
+ const map = group.createMap();
67
+ await new Promise((resolve) => setTimeout(resolve, 200));
68
+ expect(toSimplifiedMessages({
69
+ Map: map.core,
70
+ Group: group.core,
71
+ }, node1Sync.messages)).toMatchInlineSnapshot(`
72
+ [
73
+ "client -> CONTENT Group header: true new: After: 0 New: 3",
74
+ "storage -> KNOWN Group sessions: header/3",
75
+ "client -> CONTENT Map header: true new: ",
76
+ "storage -> KNOWN Map sessions: header/0",
77
+ ]
78
+ `);
79
+ node1Sync.restore();
80
+ const node2 = new LocalNode(agentSecret, Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), Crypto);
81
+ const node2Sync = trackMessages(node2);
82
+ const peer2 = await IDBStorage.asPeer();
83
+ node2.syncManager.addPeer(peer2);
84
+ const map2 = await node2.load(map.id);
85
+ if (map2 === "unavailable") {
86
+ throw new Error("Map is unavailable");
87
+ }
88
+ expect(toSimplifiedMessages({
89
+ Map: map.core,
90
+ Group: group.core,
91
+ }, node2Sync.messages)).toMatchInlineSnapshot(`
92
+ [
93
+ "client -> LOAD Map sessions: empty",
94
+ "storage -> CONTENT Group header: true new: After: 0 New: 3",
95
+ "storage -> CONTENT Map header: true new: ",
58
96
  ]
59
97
  `);
60
98
  node2Sync.restore();
@@ -101,14 +139,9 @@ test("should load dependencies correctly (group inheritance)", async () => {
101
139
  }, node2Sync.messages)).toMatchInlineSnapshot(`
102
140
  [
103
141
  "client -> LOAD Map sessions: empty",
104
- "storage -> KNOWN ParentGroup sessions: header/4",
105
142
  "storage -> CONTENT ParentGroup header: true new: After: 0 New: 4",
106
- "storage -> KNOWN Group sessions: header/5",
107
143
  "storage -> CONTENT Group header: true new: After: 0 New: 5",
108
- "client -> KNOWN ParentGroup sessions: header/4",
109
- "storage -> KNOWN Map sessions: header/1",
110
144
  "storage -> CONTENT Map header: true new: After: 0 New: 1",
111
- "client -> KNOWN Group sessions: header/5",
112
145
  ]
113
146
  `);
114
147
  });
@@ -145,19 +178,14 @@ test("should not send the same dependency value twice", async () => {
145
178
  }, node2Sync.messages)).toMatchInlineSnapshot(`
146
179
  [
147
180
  "client -> LOAD Map sessions: empty",
148
- "storage -> KNOWN ParentGroup sessions: header/4",
149
181
  "storage -> CONTENT ParentGroup header: true new: After: 0 New: 4",
150
- "storage -> KNOWN Group sessions: header/5",
151
182
  "storage -> CONTENT Group header: true new: After: 0 New: 5",
152
- "client -> KNOWN ParentGroup sessions: header/4",
153
- "storage -> KNOWN Map sessions: header/1",
154
183
  "storage -> CONTENT Map header: true new: After: 0 New: 1",
184
+ "client -> KNOWN ParentGroup sessions: header/4",
155
185
  "client -> KNOWN Group sessions: header/5",
156
186
  "client -> KNOWN Map sessions: header/1",
157
187
  "client -> LOAD MapFromParent sessions: empty",
158
- "storage -> KNOWN MapFromParent sessions: header/1",
159
188
  "storage -> CONTENT MapFromParent header: true new: After: 0 New: 1",
160
- "client -> KNOWN MapFromParent sessions: header/1",
161
189
  ]
162
190
  `);
163
191
  });
@@ -216,12 +244,95 @@ test("should recover from data loss", async () => {
216
244
  }, node2Sync.messages)).toMatchInlineSnapshot(`
217
245
  [
218
246
  "client -> LOAD Map sessions: empty",
219
- "storage -> KNOWN Group sessions: header/3",
220
247
  "storage -> CONTENT Group header: true new: After: 0 New: 3",
221
- "storage -> KNOWN Map sessions: header/4",
222
248
  "storage -> CONTENT Map header: true new: After: 0 New: 4",
249
+ ]
250
+ `);
251
+ });
252
+ test("should sync multiple sessions in a single content message", async () => {
253
+ const agentSecret = Crypto.newRandomAgentSecret();
254
+ const node1 = new LocalNode(agentSecret, Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), Crypto);
255
+ node1.syncManager.addPeer(await IDBStorage.asPeer());
256
+ const group = node1.createGroup();
257
+ const map = group.createMap();
258
+ map.set("hello", "world");
259
+ await new Promise((resolve) => setTimeout(resolve, 200));
260
+ node1.gracefulShutdown();
261
+ const node2 = new LocalNode(agentSecret, Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), Crypto);
262
+ node2.syncManager.addPeer(await IDBStorage.asPeer());
263
+ const map2 = await node2.load(map.id);
264
+ if (map2 === "unavailable") {
265
+ throw new Error("Map is unavailable");
266
+ }
267
+ expect(map2.get("hello")).toBe("world");
268
+ map2.set("hello", "world2");
269
+ await map2.core.waitForSync();
270
+ node2.gracefulShutdown();
271
+ const node3 = new LocalNode(agentSecret, Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), Crypto);
272
+ const node3Sync = trackMessages(node3);
273
+ node3.syncManager.addPeer(await IDBStorage.asPeer());
274
+ const map3 = await node3.load(map.id);
275
+ if (map3 === "unavailable") {
276
+ throw new Error("Map is unavailable");
277
+ }
278
+ expect(map3.get("hello")).toBe("world2");
279
+ expect(toSimplifiedMessages({
280
+ Map: map.core,
281
+ Group: group.core,
282
+ }, node3Sync.messages)).toMatchInlineSnapshot(`
283
+ [
284
+ "client -> LOAD Map sessions: empty",
285
+ "storage -> CONTENT Group header: true new: After: 0 New: 3",
286
+ "storage -> CONTENT Map header: true new: After: 0 New: 1 | After: 0 New: 1",
287
+ ]
288
+ `);
289
+ node3Sync.restore();
290
+ });
291
+ test("large coValue upload streaming", async () => {
292
+ const agentSecret = Crypto.newRandomAgentSecret();
293
+ const node1 = new LocalNode(agentSecret, Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), Crypto);
294
+ node1.syncManager.addPeer(await IDBStorage.asPeer());
295
+ const group = node1.createGroup();
296
+ const largeMap = group.createMap();
297
+ // Generate a large amount of data (about 100MB)
298
+ const dataSize = 1 * 1024 * 200;
299
+ const chunkSize = 1024; // 1KB chunks
300
+ const chunks = dataSize / chunkSize;
301
+ const value = "a".repeat(chunkSize);
302
+ for (let i = 0; i < chunks; i++) {
303
+ const key = `key${i}`;
304
+ largeMap.set(key, value, "trusting");
305
+ }
306
+ await largeMap.core.waitForSync();
307
+ const knownState = largeMap.core.knownState();
308
+ node1.gracefulShutdown();
309
+ const node2 = new LocalNode(agentSecret, Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), Crypto);
310
+ const node2Sync = trackMessages(node2);
311
+ node2.syncManager.addPeer(await IDBStorage.asPeer());
312
+ const largeMapOnNode2 = await node2.load(largeMap.id);
313
+ if (largeMapOnNode2 === "unavailable") {
314
+ throw new Error("Map is unavailable");
315
+ }
316
+ await waitFor(() => {
317
+ expect(largeMapOnNode2.core.knownState()).toEqual(knownState);
318
+ return true;
319
+ });
320
+ expect(toSimplifiedMessages({
321
+ Map: largeMap.core,
322
+ Group: group.core,
323
+ }, node2Sync.messages)).toMatchInlineSnapshot(`
324
+ [
325
+ "client -> LOAD Map sessions: empty",
326
+ "storage -> KNOWN Map sessions: header/200",
327
+ "storage -> CONTENT Group header: true new: After: 0 New: 3",
328
+ "storage -> CONTENT Map header: true new: After: 0 New: 97",
329
+ "storage -> CONTENT Map header: true new: After: 97 New: 97",
330
+ "storage -> CONTENT Map header: true new: After: 194 New: 6",
223
331
  "client -> KNOWN Group sessions: header/3",
332
+ "client -> KNOWN Map sessions: header/97",
333
+ "client -> KNOWN Map sessions: header/194",
334
+ "client -> KNOWN Map sessions: header/200",
224
335
  ]
225
336
  `);
226
337
  });
227
- //# sourceMappingURL=indexeddb.test.js.map
338
+ //# sourceMappingURL=storage.indexeddb.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.indexeddb.test.js","sourceRoot":"","sources":["../../src/tests/storage.indexeddb.test.ts"],"names":[],"mappings":"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"}
@@ -6,4 +6,5 @@ export declare function trackMessages(node: LocalNode): {
6
6
  }[];
7
7
  restore: () => void;
8
8
  };
9
+ export declare function waitFor(callback: () => boolean | undefined | Promise<boolean | undefined>): Promise<void>;
9
10
  //# sourceMappingURL=testUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../../src/tests/testUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAIrD,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS;;cAEnC,QAAQ,GAAG,QAAQ,GAAG,SAAS;aAChC,WAAW;;;EAoCnB"}
1
+ {"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../../src/tests/testUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAIrD,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS;;cAEnC,QAAQ,GAAG,QAAQ,GAAG,SAAS;aAChC,WAAW;;;EAoCnB;AAED,wBAAgB,OAAO,CACrB,QAAQ,EAAE,MAAM,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,iBA2BnE"}
@@ -30,4 +30,28 @@ export function trackMessages(node) {
30
30
  restore,
31
31
  };
32
32
  }
33
+ export function waitFor(callback) {
34
+ return new Promise((resolve, reject) => {
35
+ const checkPassed = async () => {
36
+ try {
37
+ return { ok: await callback(), error: null };
38
+ }
39
+ catch (error) {
40
+ return { ok: false, error };
41
+ }
42
+ };
43
+ let retries = 0;
44
+ const interval = setInterval(async () => {
45
+ const { ok, error } = await checkPassed();
46
+ if (ok !== false) {
47
+ clearInterval(interval);
48
+ resolve();
49
+ }
50
+ if (++retries > 10) {
51
+ clearInterval(interval);
52
+ reject(error);
53
+ }
54
+ }, 100);
55
+ });
56
+ }
33
57
  //# sourceMappingURL=testUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../../src/tests/testUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,UAAU,aAAa,CAAC,IAAe;IAC3C,MAAM,QAAQ,GAGR,EAAE,CAAC;IAET,MAAM,yBAAyB,GAC7B,mBAAmB,CAAC,SAAS,CAAC,iBAAiB,CAAC;IAClD,MAAM,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC;IAEnE,mBAAmB,CAAC,SAAS,CAAC,iBAAiB,GAAG,KAAK,WAAW,GAAG;QACnE,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,QAAQ;YACd,GAAG;SACJ,CAAC,CAAC;QACH,OAAO,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC,CAAC;IAEF,IAAI,CAAC,WAAW,CAAC,iBAAiB,GAAG,KAAK,WAAW,GAAG,EAAE,IAAI;QAC5D,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,SAAS;YACf,GAAG;SACJ,CAAC,CAAC;QACH,OAAO,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,mBAAmB,CAAC,SAAS,CAAC,iBAAiB,GAAG,yBAAyB,CAAC;QAC5E,IAAI,CAAC,WAAW,CAAC,iBAAiB,GAAG,uBAAuB,CAAC;IAC/D,CAAC,CAAC;IAEF,cAAc,CAAC,GAAG,EAAE;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ;QACR,OAAO;KACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../../src/tests/testUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,UAAU,aAAa,CAAC,IAAe;IAC3C,MAAM,QAAQ,GAGR,EAAE,CAAC;IAET,MAAM,yBAAyB,GAC7B,mBAAmB,CAAC,SAAS,CAAC,iBAAiB,CAAC;IAClD,MAAM,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC;IAEnE,mBAAmB,CAAC,SAAS,CAAC,iBAAiB,GAAG,KAAK,WAAW,GAAG;QACnE,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,QAAQ;YACd,GAAG;SACJ,CAAC,CAAC;QACH,OAAO,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC,CAAC;IAEF,IAAI,CAAC,WAAW,CAAC,iBAAiB,GAAG,KAAK,WAAW,GAAG,EAAE,IAAI;QAC5D,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,SAAS;YACf,GAAG;SACJ,CAAC,CAAC;QACH,OAAO,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,mBAAmB,CAAC,SAAS,CAAC,iBAAiB,GAAG,yBAAyB,CAAC;QAC5E,IAAI,CAAC,WAAW,CAAC,iBAAiB,GAAG,uBAAuB,CAAC;IAC/D,CAAC,CAAC;IAEF,cAAc,CAAC,GAAG,EAAE;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ;QACR,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CACrB,QAAkE;IAElE,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;YAC7B,IAAI,CAAC;gBACH,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC/C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YACtC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;YAE1C,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;gBACjB,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACxB,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,CAAC;gBACnB,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACxB,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "cojson-storage-indexeddb",
3
- "version": "0.13.31",
3
+ "version": "0.14.0",
4
4
  "main": "dist/index.js",
5
5
  "type": "module",
6
6
  "types": "dist/index.d.ts",
7
7
  "license": "MIT",
8
8
  "dependencies": {
9
- "cojson": "0.13.31",
10
- "cojson-storage": "0.13.31"
9
+ "cojson": "0.14.0",
10
+ "cojson-storage": "0.14.0"
11
11
  },
12
12
  "devDependencies": {
13
13
  "typescript": "5.6.2",
package/src/idbClient.ts CHANGED
@@ -67,16 +67,14 @@ export class IDBClient implements DBClientInterfaceAsync {
67
67
 
68
68
  async getNewTransactionInSession(
69
69
  sessionRowId: number,
70
- firstNewTxIdx: number,
70
+ fromIdx: number,
71
+ toIdx: number,
71
72
  ): Promise<TransactionRow[]> {
72
73
  return this.makeRequest<TransactionRow[]>((tx) =>
73
74
  tx
74
75
  .getObjectStore("transactions")
75
76
  .getAll(
76
- IDBKeyRange.bound(
77
- [sessionRowId, firstNewTxIdx],
78
- [sessionRowId, Number.POSITIVE_INFINITY],
79
- ),
77
+ IDBKeyRange.bound([sessionRowId, fromIdx], [sessionRowId, toIdx]),
80
78
  ),
81
79
  );
82
80
  }
@@ -161,7 +159,7 @@ export class IDBClient implements DBClientInterfaceAsync {
161
159
  ses: sessionRowID,
162
160
  idx,
163
161
  signature,
164
- } satisfies SignatureAfterRow),
162
+ }),
165
163
  );
166
164
  }
167
165
 
@@ -4,7 +4,7 @@ import { WasmCrypto } from "cojson/crypto/WasmCrypto";
4
4
  import { expect, test, vi } from "vitest";
5
5
  import { IDBStorage } from "../index.js";
6
6
  import { toSimplifiedMessages } from "./messagesTestUtils.js";
7
- import { trackMessages } from "./testUtils.js";
7
+ import { trackMessages, waitFor } from "./testUtils.js";
8
8
 
9
9
  const Crypto = await WasmCrypto.create();
10
10
 
@@ -96,11 +96,84 @@ test("should sync and load data from storage", async () => {
96
96
  ).toMatchInlineSnapshot(`
97
97
  [
98
98
  "client -> LOAD Map sessions: empty",
99
- "storage -> KNOWN Group sessions: header/3",
100
99
  "storage -> CONTENT Group header: true new: After: 0 New: 3",
101
- "storage -> KNOWN Map sessions: header/1",
102
100
  "storage -> CONTENT Map header: true new: After: 0 New: 1",
103
- "client -> KNOWN Group sessions: header/3",
101
+ ]
102
+ `);
103
+
104
+ node2Sync.restore();
105
+ });
106
+
107
+ test("should send an empty content message if there is no content", async () => {
108
+ const agentSecret = Crypto.newRandomAgentSecret();
109
+
110
+ const node1 = new LocalNode(
111
+ agentSecret,
112
+ Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)),
113
+ Crypto,
114
+ );
115
+
116
+ const node1Sync = trackMessages(node1);
117
+
118
+ const peer = await IDBStorage.asPeer();
119
+
120
+ node1.syncManager.addPeer(peer);
121
+
122
+ const group = node1.createGroup();
123
+
124
+ const map = group.createMap();
125
+
126
+ await new Promise((resolve) => setTimeout(resolve, 200));
127
+
128
+ expect(
129
+ toSimplifiedMessages(
130
+ {
131
+ Map: map.core,
132
+ Group: group.core,
133
+ },
134
+ node1Sync.messages,
135
+ ),
136
+ ).toMatchInlineSnapshot(`
137
+ [
138
+ "client -> CONTENT Group header: true new: After: 0 New: 3",
139
+ "storage -> KNOWN Group sessions: header/3",
140
+ "client -> CONTENT Map header: true new: ",
141
+ "storage -> KNOWN Map sessions: header/0",
142
+ ]
143
+ `);
144
+
145
+ node1Sync.restore();
146
+
147
+ const node2 = new LocalNode(
148
+ agentSecret,
149
+ Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)),
150
+ Crypto,
151
+ );
152
+
153
+ const node2Sync = trackMessages(node2);
154
+
155
+ const peer2 = await IDBStorage.asPeer();
156
+
157
+ node2.syncManager.addPeer(peer2);
158
+
159
+ const map2 = await node2.load(map.id);
160
+ if (map2 === "unavailable") {
161
+ throw new Error("Map is unavailable");
162
+ }
163
+
164
+ expect(
165
+ toSimplifiedMessages(
166
+ {
167
+ Map: map.core,
168
+ Group: group.core,
169
+ },
170
+ node2Sync.messages,
171
+ ),
172
+ ).toMatchInlineSnapshot(`
173
+ [
174
+ "client -> LOAD Map sessions: empty",
175
+ "storage -> CONTENT Group header: true new: After: 0 New: 3",
176
+ "storage -> CONTENT Map header: true new: ",
104
177
  ]
105
178
  `);
106
179
 
@@ -185,14 +258,9 @@ test("should load dependencies correctly (group inheritance)", async () => {
185
258
  ).toMatchInlineSnapshot(`
186
259
  [
187
260
  "client -> LOAD Map sessions: empty",
188
- "storage -> KNOWN ParentGroup sessions: header/4",
189
261
  "storage -> CONTENT ParentGroup header: true new: After: 0 New: 4",
190
- "storage -> KNOWN Group sessions: header/5",
191
262
  "storage -> CONTENT Group header: true new: After: 0 New: 5",
192
- "client -> KNOWN ParentGroup sessions: header/4",
193
- "storage -> KNOWN Map sessions: header/1",
194
263
  "storage -> CONTENT Map header: true new: After: 0 New: 1",
195
- "client -> KNOWN Group sessions: header/5",
196
264
  ]
197
265
  `);
198
266
  });
@@ -260,19 +328,14 @@ test("should not send the same dependency value twice", async () => {
260
328
  ).toMatchInlineSnapshot(`
261
329
  [
262
330
  "client -> LOAD Map sessions: empty",
263
- "storage -> KNOWN ParentGroup sessions: header/4",
264
331
  "storage -> CONTENT ParentGroup header: true new: After: 0 New: 4",
265
- "storage -> KNOWN Group sessions: header/5",
266
332
  "storage -> CONTENT Group header: true new: After: 0 New: 5",
267
- "client -> KNOWN ParentGroup sessions: header/4",
268
- "storage -> KNOWN Map sessions: header/1",
269
333
  "storage -> CONTENT Map header: true new: After: 0 New: 1",
334
+ "client -> KNOWN ParentGroup sessions: header/4",
270
335
  "client -> KNOWN Group sessions: header/5",
271
336
  "client -> KNOWN Map sessions: header/1",
272
337
  "client -> LOAD MapFromParent sessions: empty",
273
- "storage -> KNOWN MapFromParent sessions: header/1",
274
338
  "storage -> CONTENT MapFromParent header: true new: After: 0 New: 1",
275
- "client -> KNOWN MapFromParent sessions: header/1",
276
339
  ]
277
340
  `);
278
341
  });
@@ -374,11 +437,164 @@ test("should recover from data loss", async () => {
374
437
  ).toMatchInlineSnapshot(`
375
438
  [
376
439
  "client -> LOAD Map sessions: empty",
377
- "storage -> KNOWN Group sessions: header/3",
378
440
  "storage -> CONTENT Group header: true new: After: 0 New: 3",
379
- "storage -> KNOWN Map sessions: header/4",
380
441
  "storage -> CONTENT Map header: true new: After: 0 New: 4",
442
+ ]
443
+ `);
444
+ });
445
+
446
+ test("should sync multiple sessions in a single content message", async () => {
447
+ const agentSecret = Crypto.newRandomAgentSecret();
448
+
449
+ const node1 = new LocalNode(
450
+ agentSecret,
451
+ Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)),
452
+ Crypto,
453
+ );
454
+
455
+ node1.syncManager.addPeer(await IDBStorage.asPeer());
456
+
457
+ const group = node1.createGroup();
458
+
459
+ const map = group.createMap();
460
+
461
+ map.set("hello", "world");
462
+
463
+ await new Promise((resolve) => setTimeout(resolve, 200));
464
+
465
+ node1.gracefulShutdown();
466
+
467
+ const node2 = new LocalNode(
468
+ agentSecret,
469
+ Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)),
470
+ Crypto,
471
+ );
472
+
473
+ node2.syncManager.addPeer(await IDBStorage.asPeer());
474
+
475
+ const map2 = await node2.load(map.id);
476
+ if (map2 === "unavailable") {
477
+ throw new Error("Map is unavailable");
478
+ }
479
+
480
+ expect(map2.get("hello")).toBe("world");
481
+
482
+ map2.set("hello", "world2");
483
+
484
+ await map2.core.waitForSync();
485
+
486
+ node2.gracefulShutdown();
487
+
488
+ const node3 = new LocalNode(
489
+ agentSecret,
490
+ Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)),
491
+ Crypto,
492
+ );
493
+
494
+ const node3Sync = trackMessages(node3);
495
+
496
+ node3.syncManager.addPeer(await IDBStorage.asPeer());
497
+
498
+ const map3 = await node3.load(map.id);
499
+ if (map3 === "unavailable") {
500
+ throw new Error("Map is unavailable");
501
+ }
502
+
503
+ expect(map3.get("hello")).toBe("world2");
504
+
505
+ expect(
506
+ toSimplifiedMessages(
507
+ {
508
+ Map: map.core,
509
+ Group: group.core,
510
+ },
511
+ node3Sync.messages,
512
+ ),
513
+ ).toMatchInlineSnapshot(`
514
+ [
515
+ "client -> LOAD Map sessions: empty",
516
+ "storage -> CONTENT Group header: true new: After: 0 New: 3",
517
+ "storage -> CONTENT Map header: true new: After: 0 New: 1 | After: 0 New: 1",
518
+ ]
519
+ `);
520
+
521
+ node3Sync.restore();
522
+ });
523
+
524
+ test("large coValue upload streaming", async () => {
525
+ const agentSecret = Crypto.newRandomAgentSecret();
526
+
527
+ const node1 = new LocalNode(
528
+ agentSecret,
529
+ Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)),
530
+ Crypto,
531
+ );
532
+
533
+ node1.syncManager.addPeer(await IDBStorage.asPeer());
534
+
535
+ const group = node1.createGroup();
536
+ const largeMap = group.createMap();
537
+
538
+ // Generate a large amount of data (about 100MB)
539
+ const dataSize = 1 * 1024 * 200;
540
+ const chunkSize = 1024; // 1KB chunks
541
+ const chunks = dataSize / chunkSize;
542
+
543
+ const value = "a".repeat(chunkSize);
544
+
545
+ for (let i = 0; i < chunks; i++) {
546
+ const key = `key${i}`;
547
+ largeMap.set(key, value, "trusting");
548
+ }
549
+
550
+ await largeMap.core.waitForSync();
551
+
552
+ const knownState = largeMap.core.knownState();
553
+
554
+ node1.gracefulShutdown();
555
+
556
+ const node2 = new LocalNode(
557
+ agentSecret,
558
+ Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)),
559
+ Crypto,
560
+ );
561
+
562
+ const node2Sync = trackMessages(node2);
563
+
564
+ node2.syncManager.addPeer(await IDBStorage.asPeer());
565
+
566
+ const largeMapOnNode2 = await node2.load(largeMap.id);
567
+
568
+ if (largeMapOnNode2 === "unavailable") {
569
+ throw new Error("Map is unavailable");
570
+ }
571
+
572
+ await waitFor(() => {
573
+ expect(largeMapOnNode2.core.knownState()).toEqual(knownState);
574
+
575
+ return true;
576
+ });
577
+
578
+ expect(
579
+ toSimplifiedMessages(
580
+ {
581
+ Map: largeMap.core,
582
+ Group: group.core,
583
+ },
584
+ node2Sync.messages,
585
+ ),
586
+ ).toMatchInlineSnapshot(`
587
+ [
588
+ "client -> LOAD Map sessions: empty",
589
+ "storage -> KNOWN Map sessions: header/200",
590
+ "storage -> CONTENT Group header: true new: After: 0 New: 3",
591
+ "storage -> CONTENT Map header: true new: After: 0 New: 97",
592
+ "storage -> CONTENT Map header: true new: After: 97 New: 97",
593
+ "storage -> CONTENT Map header: true new: After: 194 New: 6",
381
594
  "client -> KNOWN Group sessions: header/3",
595
+ "client -> KNOWN Map sessions: header/97",
596
+ "client -> KNOWN Map sessions: header/194",
597
+ "client -> KNOWN Map sessions: header/200",
382
598
  ]
383
599
  `);
384
600
  });
@@ -42,3 +42,33 @@ export function trackMessages(node: LocalNode) {
42
42
  restore,
43
43
  };
44
44
  }
45
+
46
+ export function waitFor(
47
+ callback: () => boolean | undefined | Promise<boolean | undefined>,
48
+ ) {
49
+ return new Promise<void>((resolve, reject) => {
50
+ const checkPassed = async () => {
51
+ try {
52
+ return { ok: await callback(), error: null };
53
+ } catch (error) {
54
+ return { ok: false, error };
55
+ }
56
+ };
57
+
58
+ let retries = 0;
59
+
60
+ const interval = setInterval(async () => {
61
+ const { ok, error } = await checkPassed();
62
+
63
+ if (ok !== false) {
64
+ clearInterval(interval);
65
+ resolve();
66
+ }
67
+
68
+ if (++retries > 10) {
69
+ clearInterval(interval);
70
+ reject(error);
71
+ }
72
+ }, 100);
73
+ });
74
+ }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=indexeddb.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexeddb.test.d.ts","sourceRoot":"","sources":["../../src/tests/indexeddb.test.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexeddb.test.js","sourceRoot":"","sources":["../../src/tests/indexeddb.test.ts"],"names":[],"mappings":"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"}