cojson-storage-indexeddb 0.19.18 → 0.19.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +7 -0
- package/dist/CoJsonIDBTransaction.d.ts +8 -4
- package/dist/CoJsonIDBTransaction.d.ts.map +1 -1
- package/dist/CoJsonIDBTransaction.js +17 -11
- package/dist/CoJsonIDBTransaction.js.map +1 -1
- package/dist/idbClient.d.ts +38 -3
- package/dist/idbClient.d.ts.map +1 -1
- package/dist/idbClient.js +78 -3
- package/dist/idbClient.js.map +1 -1
- package/dist/idbNode.d.ts.map +1 -1
- package/dist/idbNode.js +11 -1
- package/dist/idbNode.js.map +1 -1
- package/dist/tests/CoJsonIDBTransaction.test.js +49 -0
- package/dist/tests/CoJsonIDBTransaction.test.js.map +1 -1
- package/dist/tests/storage.indexeddb.test.js +101 -27
- package/dist/tests/storage.indexeddb.test.js.map +1 -1
- package/dist/tests/testUtils.d.ts +8 -1
- package/dist/tests/testUtils.d.ts.map +1 -1
- package/dist/tests/testUtils.js +50 -1
- package/dist/tests/testUtils.js.map +1 -1
- package/package.json +2 -2
- package/src/CoJsonIDBTransaction.ts +21 -19
- package/src/idbClient.ts +122 -2
- package/src/idbNode.ts +15 -1
- package/src/tests/CoJsonIDBTransaction.test.ts +87 -0
- package/src/tests/storage.indexeddb.test.ts +146 -95
- package/src/tests/testUtils.ts +83 -2
- package/vitest.config.ts +6 -1
|
@@ -1,20 +1,25 @@
|
|
|
1
|
-
import { LocalNode, StorageApiAsync } from "cojson";
|
|
1
|
+
import { LocalNode, StorageApiAsync, cojsonInternals } from "cojson";
|
|
2
2
|
import { WasmCrypto } from "cojson/crypto/WasmCrypto";
|
|
3
|
-
import { afterEach, beforeEach, expect, test, vi } from "vitest";
|
|
4
|
-
import { getIndexedDBStorage } from "../index.js";
|
|
3
|
+
import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
|
|
4
|
+
import { getIndexedDBStorage, internal_setDatabaseName } from "../index.js";
|
|
5
5
|
import { toSimplifiedMessages } from "./messagesTestUtils.js";
|
|
6
|
-
import { trackMessages, waitFor } from "./testUtils.js";
|
|
6
|
+
import { clearObjectStore, connectToSyncServer, createTestNode, trackMessages, waitFor, } from "./testUtils.js";
|
|
7
7
|
const Crypto = await WasmCrypto.create();
|
|
8
8
|
let syncMessages;
|
|
9
|
+
const DATABASE_NAME = "jazz-storage";
|
|
10
|
+
internal_setDatabaseName(DATABASE_NAME);
|
|
9
11
|
beforeEach(() => {
|
|
10
12
|
syncMessages = trackMessages();
|
|
13
|
+
cojsonInternals.setSyncStateTrackingBatchDelay(0);
|
|
14
|
+
cojsonInternals.setCoValueLoadingRetryDelay(10);
|
|
11
15
|
});
|
|
12
|
-
afterEach(() => {
|
|
16
|
+
afterEach(async () => {
|
|
13
17
|
syncMessages.restore();
|
|
18
|
+
cojsonInternals.setSyncStateTrackingBatchDelay(1000);
|
|
19
|
+
await clearObjectStore(DATABASE_NAME, "unsyncedCoValues");
|
|
14
20
|
});
|
|
15
21
|
test("should sync and load data from storage", async () => {
|
|
16
|
-
const
|
|
17
|
-
const node1 = new LocalNode(agentSecret, Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), Crypto);
|
|
22
|
+
const node1 = createTestNode();
|
|
18
23
|
node1.setStorage(await getIndexedDBStorage());
|
|
19
24
|
const group = node1.createGroup();
|
|
20
25
|
const map = group.createMap();
|
|
@@ -31,7 +36,7 @@ test("should sync and load data from storage", async () => {
|
|
|
31
36
|
`);
|
|
32
37
|
node1.gracefulShutdown();
|
|
33
38
|
syncMessages.clear();
|
|
34
|
-
const node2 =
|
|
39
|
+
const node2 = createTestNode({ secret: node1.agentSecret });
|
|
35
40
|
node2.setStorage(await getIndexedDBStorage());
|
|
36
41
|
const map2 = await node2.load(map.id);
|
|
37
42
|
if (map2 === "unavailable") {
|
|
@@ -50,8 +55,7 @@ test("should sync and load data from storage", async () => {
|
|
|
50
55
|
`);
|
|
51
56
|
});
|
|
52
57
|
test("should send an empty content message if there is no content", async () => {
|
|
53
|
-
const
|
|
54
|
-
const node1 = new LocalNode(agentSecret, Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), Crypto);
|
|
58
|
+
const node1 = createTestNode();
|
|
55
59
|
node1.setStorage(await getIndexedDBStorage());
|
|
56
60
|
const group = node1.createGroup();
|
|
57
61
|
const map = group.createMap();
|
|
@@ -67,7 +71,7 @@ test("should send an empty content message if there is no content", async () =>
|
|
|
67
71
|
`);
|
|
68
72
|
syncMessages.clear();
|
|
69
73
|
node1.gracefulShutdown();
|
|
70
|
-
const node2 =
|
|
74
|
+
const node2 = createTestNode({ secret: node1.agentSecret });
|
|
71
75
|
node2.setStorage(await getIndexedDBStorage());
|
|
72
76
|
const map2 = await node2.load(map.id);
|
|
73
77
|
if (map2 === "unavailable") {
|
|
@@ -85,8 +89,7 @@ test("should send an empty content message if there is no content", async () =>
|
|
|
85
89
|
`);
|
|
86
90
|
});
|
|
87
91
|
test("should load dependencies correctly (group inheritance)", async () => {
|
|
88
|
-
const
|
|
89
|
-
const node1 = new LocalNode(agentSecret, Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), Crypto);
|
|
92
|
+
const node1 = createTestNode();
|
|
90
93
|
node1.setStorage(await getIndexedDBStorage());
|
|
91
94
|
const group = node1.createGroup();
|
|
92
95
|
const parentGroup = node1.createGroup();
|
|
@@ -108,7 +111,7 @@ test("should load dependencies correctly (group inheritance)", async () => {
|
|
|
108
111
|
`);
|
|
109
112
|
syncMessages.clear();
|
|
110
113
|
node1.gracefulShutdown();
|
|
111
|
-
const node2 =
|
|
114
|
+
const node2 = createTestNode({ secret: node1.agentSecret });
|
|
112
115
|
node2.setStorage(await getIndexedDBStorage());
|
|
113
116
|
await node2.load(map.id);
|
|
114
117
|
expect(node2.expectCoValueLoaded(map.id)).toBeTruthy();
|
|
@@ -128,8 +131,7 @@ test("should load dependencies correctly (group inheritance)", async () => {
|
|
|
128
131
|
`);
|
|
129
132
|
});
|
|
130
133
|
test("should not send the same dependency value twice", async () => {
|
|
131
|
-
const
|
|
132
|
-
const node1 = new LocalNode(agentSecret, Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), Crypto);
|
|
134
|
+
const node1 = createTestNode();
|
|
133
135
|
node1.setStorage(await getIndexedDBStorage());
|
|
134
136
|
const group = node1.createGroup();
|
|
135
137
|
const parentGroup = node1.createGroup();
|
|
@@ -142,7 +144,7 @@ test("should not send the same dependency value twice", async () => {
|
|
|
142
144
|
await mapFromParent.core.waitForSync();
|
|
143
145
|
syncMessages.clear();
|
|
144
146
|
node1.gracefulShutdown();
|
|
145
|
-
const node2 =
|
|
147
|
+
const node2 = createTestNode({ secret: node1.agentSecret });
|
|
146
148
|
node2.setStorage(await getIndexedDBStorage());
|
|
147
149
|
await node2.load(map.id);
|
|
148
150
|
await node2.load(mapFromParent.id);
|
|
@@ -167,8 +169,7 @@ test("should not send the same dependency value twice", async () => {
|
|
|
167
169
|
`);
|
|
168
170
|
});
|
|
169
171
|
test("should recover from data loss", async () => {
|
|
170
|
-
const
|
|
171
|
-
const node1 = new LocalNode(agentSecret, Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), Crypto);
|
|
172
|
+
const node1 = createTestNode();
|
|
172
173
|
const storage = await getIndexedDBStorage();
|
|
173
174
|
node1.setStorage(storage);
|
|
174
175
|
const group = node1.createGroup();
|
|
@@ -200,7 +201,7 @@ test("should recover from data loss", async () => {
|
|
|
200
201
|
`);
|
|
201
202
|
syncMessages.clear();
|
|
202
203
|
node1.gracefulShutdown();
|
|
203
|
-
const node2 =
|
|
204
|
+
const node2 = createTestNode({ secret: node1.agentSecret });
|
|
204
205
|
node2.setStorage(await getIndexedDBStorage());
|
|
205
206
|
const map2 = await node2.load(map.id);
|
|
206
207
|
if (map2 === "unavailable") {
|
|
@@ -224,15 +225,14 @@ test("should recover from data loss", async () => {
|
|
|
224
225
|
`);
|
|
225
226
|
});
|
|
226
227
|
test("should sync multiple sessions in a single content message", async () => {
|
|
227
|
-
const
|
|
228
|
-
const node1 = new LocalNode(agentSecret, Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), Crypto);
|
|
228
|
+
const node1 = createTestNode();
|
|
229
229
|
node1.setStorage(await getIndexedDBStorage());
|
|
230
230
|
const group = node1.createGroup();
|
|
231
231
|
const map = group.createMap();
|
|
232
232
|
map.set("hello", "world");
|
|
233
233
|
await map.core.waitForSync();
|
|
234
234
|
node1.gracefulShutdown();
|
|
235
|
-
const node2 =
|
|
235
|
+
const node2 = createTestNode({ secret: node1.agentSecret });
|
|
236
236
|
node2.setStorage(await getIndexedDBStorage());
|
|
237
237
|
const map2 = await node2.load(map.id);
|
|
238
238
|
if (map2 === "unavailable") {
|
|
@@ -242,7 +242,7 @@ test("should sync multiple sessions in a single content message", async () => {
|
|
|
242
242
|
map2.set("hello", "world2");
|
|
243
243
|
await map2.core.waitForSync();
|
|
244
244
|
node2.gracefulShutdown();
|
|
245
|
-
const node3 =
|
|
245
|
+
const node3 = createTestNode({ secret: node1.agentSecret });
|
|
246
246
|
syncMessages.clear();
|
|
247
247
|
node3.setStorage(await getIndexedDBStorage());
|
|
248
248
|
const map3 = await node3.load(map.id);
|
|
@@ -262,8 +262,7 @@ test("should sync multiple sessions in a single content message", async () => {
|
|
|
262
262
|
`);
|
|
263
263
|
});
|
|
264
264
|
test("large coValue upload streaming", async () => {
|
|
265
|
-
const
|
|
266
|
-
const node1 = new LocalNode(agentSecret, Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)), Crypto);
|
|
265
|
+
const node1 = createTestNode();
|
|
267
266
|
node1.setStorage(await getIndexedDBStorage());
|
|
268
267
|
const group = node1.createGroup();
|
|
269
268
|
const largeMap = group.createMap();
|
|
@@ -280,7 +279,7 @@ test("large coValue upload streaming", async () => {
|
|
|
280
279
|
await largeMap.core.waitForSync();
|
|
281
280
|
const knownState = largeMap.core.knownState();
|
|
282
281
|
node1.gracefulShutdown();
|
|
283
|
-
const node2 =
|
|
282
|
+
const node2 = createTestNode({ secret: node1.agentSecret });
|
|
284
283
|
syncMessages.clear();
|
|
285
284
|
node2.setStorage(await getIndexedDBStorage());
|
|
286
285
|
const largeMapOnNode2 = await node2.load(largeMap.id);
|
|
@@ -355,4 +354,79 @@ test("should sync and load accounts from storage", async () => {
|
|
|
355
354
|
`);
|
|
356
355
|
expect(node2.getCoValue(accountID).isAvailable()).toBeTruthy();
|
|
357
356
|
});
|
|
357
|
+
describe("sync state persistence", () => {
|
|
358
|
+
test("unsynced coValues are asynchronously persisted to storage", async () => {
|
|
359
|
+
// Client is not connected to a sync server, so sync will not be completed
|
|
360
|
+
const client = createTestNode();
|
|
361
|
+
client.setStorage(await getIndexedDBStorage());
|
|
362
|
+
const group = client.createGroup();
|
|
363
|
+
const map = group.createMap();
|
|
364
|
+
map.set("key", "value");
|
|
365
|
+
// Wait for the unsynced coValues to be persisted to storage
|
|
366
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
367
|
+
const unsyncedCoValueIDs = await new Promise((resolve) => client.storage?.getUnsyncedCoValueIDs(resolve));
|
|
368
|
+
expect(unsyncedCoValueIDs).toHaveLength(2);
|
|
369
|
+
expect(unsyncedCoValueIDs).toContain(map.id);
|
|
370
|
+
expect(unsyncedCoValueIDs).toContain(group.id);
|
|
371
|
+
await client.gracefulShutdown();
|
|
372
|
+
});
|
|
373
|
+
test("synced coValues are removed from storage", async () => {
|
|
374
|
+
const syncServer = createTestNode();
|
|
375
|
+
const client = createTestNode();
|
|
376
|
+
client.setStorage(await getIndexedDBStorage());
|
|
377
|
+
connectToSyncServer(client, syncServer);
|
|
378
|
+
const group = client.createGroup();
|
|
379
|
+
const map = group.createMap();
|
|
380
|
+
map.set("key", "value");
|
|
381
|
+
// Wait enough time for the coValue to be synced
|
|
382
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
383
|
+
const unsyncedCoValueIDs = await new Promise((resolve) => client.storage?.getUnsyncedCoValueIDs(resolve));
|
|
384
|
+
expect(unsyncedCoValueIDs).toHaveLength(0);
|
|
385
|
+
expect(client.syncManager.unsyncedTracker.has(map.id)).toBe(false);
|
|
386
|
+
await client.gracefulShutdown();
|
|
387
|
+
await syncServer.gracefulShutdown();
|
|
388
|
+
});
|
|
389
|
+
test("unsynced coValues are persisted to storage when the node is shutdown", async () => {
|
|
390
|
+
const client = createTestNode();
|
|
391
|
+
client.setStorage(await getIndexedDBStorage());
|
|
392
|
+
const group = client.createGroup();
|
|
393
|
+
const map = group.createMap();
|
|
394
|
+
map.set("key", "value");
|
|
395
|
+
// Wait for local transaction to trigger sync
|
|
396
|
+
await new Promise((resolve) => queueMicrotask(resolve));
|
|
397
|
+
await client.gracefulShutdown();
|
|
398
|
+
const unsyncedCoValueIDs = await new Promise((resolve) => client.storage?.getUnsyncedCoValueIDs(resolve));
|
|
399
|
+
expect(unsyncedCoValueIDs).toHaveLength(2);
|
|
400
|
+
expect(unsyncedCoValueIDs).toContain(map.id);
|
|
401
|
+
expect(unsyncedCoValueIDs).toContain(group.id);
|
|
402
|
+
});
|
|
403
|
+
});
|
|
404
|
+
describe("sync resumption", () => {
|
|
405
|
+
test("unsynced coValues are resumed when the node is restarted", async () => {
|
|
406
|
+
// Client is not connected to a sync server, so sync will not be completed
|
|
407
|
+
const node1 = createTestNode();
|
|
408
|
+
const storage = await getIndexedDBStorage();
|
|
409
|
+
node1.setStorage(storage);
|
|
410
|
+
const getUnsyncedCoValueIDsFromStorage = async () => new Promise((resolve) => node1.storage?.getUnsyncedCoValueIDs(resolve));
|
|
411
|
+
const group = node1.createGroup();
|
|
412
|
+
const map = group.createMap();
|
|
413
|
+
map.set("key", "value");
|
|
414
|
+
// Wait for the unsynced coValues to be persisted to storage
|
|
415
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
416
|
+
const unsyncedTracker = node1.syncManager.unsyncedTracker;
|
|
417
|
+
expect(unsyncedTracker.has(map.id)).toBe(true);
|
|
418
|
+
expect(await getUnsyncedCoValueIDsFromStorage()).toHaveLength(2);
|
|
419
|
+
node1.gracefulShutdown();
|
|
420
|
+
// Create second node with the same storage
|
|
421
|
+
const node2 = createTestNode();
|
|
422
|
+
node2.setStorage(storage);
|
|
423
|
+
// Connect to sync server
|
|
424
|
+
const syncServer = createTestNode();
|
|
425
|
+
connectToSyncServer(node2, syncServer);
|
|
426
|
+
await node2.syncManager.waitForAllCoValuesSync();
|
|
427
|
+
// Wait for sync to resume & complete
|
|
428
|
+
await waitFor(async () => (await getUnsyncedCoValueIDsFromStorage()).length === 0);
|
|
429
|
+
await node2.gracefulShutdown();
|
|
430
|
+
});
|
|
431
|
+
});
|
|
358
432
|
//# sourceMappingURL=storage.indexeddb.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.indexeddb.test.js","sourceRoot":"","sources":["../../src/tests/storage.indexeddb.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"storage.indexeddb.test.js","sourceRoot":"","sources":["../../src/tests/storage.indexeddb.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { SyncMessage } from "cojson";
|
|
1
|
+
import type { AgentSecret, SessionID, SyncMessage } from "cojson";
|
|
2
|
+
import { ControlledAgent, LocalNode } from "cojson";
|
|
2
3
|
export declare function trackMessages(): {
|
|
3
4
|
messages: {
|
|
4
5
|
from: "client" | "server" | "storage";
|
|
@@ -8,4 +9,10 @@ export declare function trackMessages(): {
|
|
|
8
9
|
clear: () => void;
|
|
9
10
|
};
|
|
10
11
|
export declare function waitFor(callback: () => boolean | undefined | Promise<boolean | undefined>): Promise<void>;
|
|
12
|
+
export declare function clearObjectStore(dbName: string, storeName: string): Promise<void>;
|
|
13
|
+
export declare function getAgentAndSessionID(secret?: AgentSecret): [ControlledAgent, SessionID];
|
|
14
|
+
export declare function createTestNode(opts?: {
|
|
15
|
+
secret?: AgentSecret;
|
|
16
|
+
}): LocalNode;
|
|
17
|
+
export declare function connectToSyncServer(client: LocalNode, syncServer: LocalNode): void;
|
|
11
18
|
//# 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,EAAW,WAAW,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../../src/tests/testUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAW,SAAS,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC3E,OAAO,EAEL,eAAe,EACf,SAAS,EAEV,MAAM,QAAQ,CAAC;AAIhB,wBAAgB,aAAa;;cAEnB,QAAQ,GAAG,QAAQ,GAAG,SAAS;aAChC,WAAW;;;;EA+EnB;AAED,wBAAgB,OAAO,CACrB,QAAQ,EAAE,MAAM,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,iBA2BnE;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAsCf;AAID,wBAAgB,oBAAoB,CAClC,MAAM,GAAE,WAA2C,GAClD,CAAC,eAAe,EAAE,SAAS,CAAC,CAG9B;AAED,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,aAG7D;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,SAAS,GACpB,IAAI,CAaN"}
|
package/dist/tests/testUtils.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { StorageApiAsync } from "cojson";
|
|
1
|
+
import { cojsonInternals, ControlledAgent, LocalNode, StorageApiAsync, } from "cojson";
|
|
2
|
+
import { WasmCrypto } from "cojson/crypto/WasmCrypto";
|
|
2
3
|
import { onTestFinished } from "vitest";
|
|
3
4
|
export function trackMessages() {
|
|
4
5
|
const messages = [];
|
|
@@ -89,4 +90,52 @@ export function waitFor(callback) {
|
|
|
89
90
|
}, 100);
|
|
90
91
|
});
|
|
91
92
|
}
|
|
93
|
+
export async function clearObjectStore(dbName, storeName) {
|
|
94
|
+
return new Promise((resolve, reject) => {
|
|
95
|
+
const openReq = indexedDB.open(dbName);
|
|
96
|
+
openReq.onerror = () => reject(openReq.error);
|
|
97
|
+
openReq.onsuccess = () => {
|
|
98
|
+
const db = openReq.result;
|
|
99
|
+
if (!db.objectStoreNames.contains(storeName)) {
|
|
100
|
+
db.close();
|
|
101
|
+
resolve();
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const tx = db.transaction(storeName, "readwrite");
|
|
105
|
+
const store = tx.objectStore(storeName);
|
|
106
|
+
const clearReq = store.clear();
|
|
107
|
+
clearReq.onerror = () => reject(clearReq.error);
|
|
108
|
+
tx.oncomplete = () => {
|
|
109
|
+
db.close();
|
|
110
|
+
resolve();
|
|
111
|
+
};
|
|
112
|
+
tx.onerror = () => {
|
|
113
|
+
db.close();
|
|
114
|
+
reject(tx.error);
|
|
115
|
+
};
|
|
116
|
+
tx.onabort = () => {
|
|
117
|
+
db.close();
|
|
118
|
+
reject(tx.error || new Error("Transaction aborted"));
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
const Crypto = await WasmCrypto.create();
|
|
124
|
+
export function getAgentAndSessionID(secret = Crypto.newRandomAgentSecret()) {
|
|
125
|
+
const sessionID = Crypto.newRandomSessionID(Crypto.getAgentID(secret));
|
|
126
|
+
return [new ControlledAgent(secret, Crypto), sessionID];
|
|
127
|
+
}
|
|
128
|
+
export function createTestNode(opts) {
|
|
129
|
+
const [admin, session] = getAgentAndSessionID(opts?.secret);
|
|
130
|
+
return new LocalNode(admin.agentSecret, session, Crypto);
|
|
131
|
+
}
|
|
132
|
+
export function connectToSyncServer(client, syncServer) {
|
|
133
|
+
const [clientPeer, serverPeer] = cojsonInternals.connectedPeers(client.currentSessionID, syncServer.currentSessionID, {
|
|
134
|
+
peer1role: "client",
|
|
135
|
+
peer2role: "server",
|
|
136
|
+
persistent: true,
|
|
137
|
+
});
|
|
138
|
+
client.syncManager.addPeer(serverPeer);
|
|
139
|
+
syncServer.syncManager.addPeer(clientPeer);
|
|
140
|
+
}
|
|
92
141
|
//# sourceMappingURL=testUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../../src/tests/testUtils.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../../src/tests/testUtils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cojson-storage-indexeddb",
|
|
3
|
-
"version": "0.19.
|
|
3
|
+
"version": "0.19.19",
|
|
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.19.
|
|
9
|
+
"cojson": "0.19.19"
|
|
10
10
|
},
|
|
11
11
|
"devDependencies": {
|
|
12
12
|
"typescript": "5.6.2",
|
|
@@ -2,13 +2,22 @@ export type StoreName =
|
|
|
2
2
|
| "coValues"
|
|
3
3
|
| "sessions"
|
|
4
4
|
| "transactions"
|
|
5
|
-
| "signatureAfter"
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
| "signatureAfter"
|
|
6
|
+
| "unsyncedCoValues";
|
|
7
|
+
|
|
8
|
+
const DEFAULT_TX_STORES: StoreName[] = [
|
|
9
|
+
"coValues",
|
|
10
|
+
"sessions",
|
|
11
|
+
"transactions",
|
|
12
|
+
"signatureAfter",
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* An access unit for the IndexedDB Jazz database.
|
|
17
|
+
* It's a wrapper around the IDBTransaction object that helps on batching multiple operations
|
|
18
|
+
* in a single transaction.
|
|
19
|
+
*/
|
|
10
20
|
export class CoJsonIDBTransaction {
|
|
11
|
-
db: IDBDatabase;
|
|
12
21
|
declare tx: IDBTransaction;
|
|
13
22
|
|
|
14
23
|
pendingRequests: ((txEntry: this) => void)[] = [];
|
|
@@ -20,17 +29,16 @@ export class CoJsonIDBTransaction {
|
|
|
20
29
|
failed = false;
|
|
21
30
|
done = false;
|
|
22
31
|
|
|
23
|
-
constructor(
|
|
24
|
-
|
|
25
|
-
|
|
32
|
+
constructor(
|
|
33
|
+
public db: IDBDatabase,
|
|
34
|
+
// The object stores this transaction will operate on
|
|
35
|
+
private storeNames: StoreName[] = DEFAULT_TX_STORES,
|
|
36
|
+
) {
|
|
26
37
|
this.refresh();
|
|
27
38
|
}
|
|
28
39
|
|
|
29
40
|
refresh() {
|
|
30
|
-
this.tx = this.db.transaction(
|
|
31
|
-
["coValues", "sessions", "transactions", "signatureAfter"],
|
|
32
|
-
"readwrite",
|
|
33
|
-
);
|
|
41
|
+
this.tx = this.db.transaction(this.storeNames, "readwrite");
|
|
34
42
|
|
|
35
43
|
this.tx.oncomplete = () => {
|
|
36
44
|
this.done = true;
|
|
@@ -44,12 +52,6 @@ export class CoJsonIDBTransaction {
|
|
|
44
52
|
this.tx.abort();
|
|
45
53
|
}
|
|
46
54
|
|
|
47
|
-
startedAt = performance.now();
|
|
48
|
-
isReusable() {
|
|
49
|
-
const delta = performance.now() - this.startedAt;
|
|
50
|
-
return !this.done && !this.failed && delta <= 100;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
55
|
getObjectStore(name: StoreName) {
|
|
54
56
|
try {
|
|
55
57
|
return this.tx.objectStore(name);
|
package/src/idbClient.ts
CHANGED
|
@@ -17,12 +17,13 @@ import {
|
|
|
17
17
|
CoJsonIDBTransaction,
|
|
18
18
|
putIndexedDbStore,
|
|
19
19
|
queryIndexedDbStore,
|
|
20
|
+
StoreName,
|
|
20
21
|
} from "./CoJsonIDBTransaction.js";
|
|
21
22
|
|
|
22
23
|
export class IDBTransaction implements DBTransactionInterfaceAsync {
|
|
23
24
|
constructor(private tx: CoJsonIDBTransaction) {}
|
|
24
25
|
|
|
25
|
-
run<T>(
|
|
26
|
+
private async run<T>(
|
|
26
27
|
handler: (txEntry: CoJsonIDBTransaction) => IDBRequest<T>,
|
|
27
28
|
): Promise<T> {
|
|
28
29
|
return this.tx.handleRequest<T>(handler);
|
|
@@ -91,6 +92,55 @@ export class IDBTransaction implements DBTransactionInterfaceAsync {
|
|
|
91
92
|
}),
|
|
92
93
|
);
|
|
93
94
|
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Get an unsynced CoValue record by coValueId and peerId.
|
|
98
|
+
*/
|
|
99
|
+
async getUnsyncedCoValueRecord(
|
|
100
|
+
coValueId: RawCoID,
|
|
101
|
+
peerId: string,
|
|
102
|
+
): Promise<
|
|
103
|
+
{ rowID: number; coValueId: RawCoID; peerId: string } | undefined
|
|
104
|
+
> {
|
|
105
|
+
return this.run((tx) =>
|
|
106
|
+
tx
|
|
107
|
+
.getObjectStore("unsyncedCoValues")
|
|
108
|
+
.index("uniqueUnsyncedCoValues")
|
|
109
|
+
.get([coValueId, peerId]),
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Get all unsynced CoValue records for a given coValueId.
|
|
115
|
+
*/
|
|
116
|
+
async getAllUnsyncedCoValueRecords(
|
|
117
|
+
coValueId: RawCoID,
|
|
118
|
+
): Promise<{ rowID: number; coValueId: RawCoID; peerId: string }[]> {
|
|
119
|
+
return this.run((tx) =>
|
|
120
|
+
tx
|
|
121
|
+
.getObjectStore("unsyncedCoValues")
|
|
122
|
+
.index("byCoValueId")
|
|
123
|
+
.getAll(coValueId),
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Delete an unsynced CoValue record by rowID.
|
|
129
|
+
*/
|
|
130
|
+
async deleteUnsyncedCoValueRecord(rowID: number): Promise<void> {
|
|
131
|
+
await this.run((tx) => tx.getObjectStore("unsyncedCoValues").delete(rowID));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Insert or update an unsynced CoValue record.
|
|
136
|
+
*/
|
|
137
|
+
async putUnsyncedCoValueRecord(record: {
|
|
138
|
+
rowID?: number;
|
|
139
|
+
coValueId: RawCoID;
|
|
140
|
+
peerId: string;
|
|
141
|
+
}): Promise<void> {
|
|
142
|
+
await this.run((tx) => tx.getObjectStore("unsyncedCoValues").put(record));
|
|
143
|
+
}
|
|
94
144
|
}
|
|
95
145
|
|
|
96
146
|
export class IDBClient implements DBClientInterfaceAsync {
|
|
@@ -161,8 +211,9 @@ export class IDBClient implements DBClientInterfaceAsync {
|
|
|
161
211
|
|
|
162
212
|
async transaction(
|
|
163
213
|
operationsCallback: (tx: DBTransactionInterfaceAsync) => Promise<unknown>,
|
|
214
|
+
storeNames?: StoreName[],
|
|
164
215
|
) {
|
|
165
|
-
const tx = new CoJsonIDBTransaction(this.db);
|
|
216
|
+
const tx = new CoJsonIDBTransaction(this.db, storeNames);
|
|
166
217
|
|
|
167
218
|
try {
|
|
168
219
|
await operationsCallback(new IDBTransaction(tx));
|
|
@@ -171,4 +222,73 @@ export class IDBClient implements DBClientInterfaceAsync {
|
|
|
171
222
|
tx.rollback();
|
|
172
223
|
}
|
|
173
224
|
}
|
|
225
|
+
|
|
226
|
+
async trackCoValuesSyncState(
|
|
227
|
+
updates: { id: RawCoID; peerId: string; synced: boolean }[],
|
|
228
|
+
): Promise<void> {
|
|
229
|
+
if (updates.length === 0) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
await this.transaction(
|
|
234
|
+
async (tx) => {
|
|
235
|
+
const idbTx = tx as IDBTransaction;
|
|
236
|
+
await Promise.all(
|
|
237
|
+
updates.map(async (update) => {
|
|
238
|
+
const record = await idbTx.getUnsyncedCoValueRecord(
|
|
239
|
+
update.id,
|
|
240
|
+
update.peerId,
|
|
241
|
+
);
|
|
242
|
+
if (update.synced) {
|
|
243
|
+
// Delete
|
|
244
|
+
if (record) {
|
|
245
|
+
await idbTx.deleteUnsyncedCoValueRecord(record.rowID);
|
|
246
|
+
}
|
|
247
|
+
} else {
|
|
248
|
+
// Insert or update
|
|
249
|
+
await idbTx.putUnsyncedCoValueRecord(
|
|
250
|
+
record
|
|
251
|
+
? {
|
|
252
|
+
rowID: record.rowID,
|
|
253
|
+
coValueId: update.id,
|
|
254
|
+
peerId: update.peerId,
|
|
255
|
+
}
|
|
256
|
+
: {
|
|
257
|
+
coValueId: update.id,
|
|
258
|
+
peerId: update.peerId,
|
|
259
|
+
},
|
|
260
|
+
);
|
|
261
|
+
}
|
|
262
|
+
}),
|
|
263
|
+
);
|
|
264
|
+
},
|
|
265
|
+
["unsyncedCoValues"],
|
|
266
|
+
);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
async getUnsyncedCoValueIDs(): Promise<RawCoID[]> {
|
|
270
|
+
const records = await queryIndexedDbStore<
|
|
271
|
+
{ rowID: number; coValueId: RawCoID; peerId: string }[]
|
|
272
|
+
>(this.db, "unsyncedCoValues", (store) => store.getAll());
|
|
273
|
+
const uniqueIds = new Set<RawCoID>();
|
|
274
|
+
for (const record of records) {
|
|
275
|
+
uniqueIds.add(record.coValueId);
|
|
276
|
+
}
|
|
277
|
+
return Array.from(uniqueIds);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
async stopTrackingSyncState(id: RawCoID): Promise<void> {
|
|
281
|
+
await this.transaction(
|
|
282
|
+
async (tx) => {
|
|
283
|
+
const idbTx = tx as IDBTransaction;
|
|
284
|
+
const records = await idbTx.getAllUnsyncedCoValueRecords(id);
|
|
285
|
+
await Promise.all(
|
|
286
|
+
records.map((record) =>
|
|
287
|
+
idbTx.deleteUnsyncedCoValueRecord(record.rowID),
|
|
288
|
+
),
|
|
289
|
+
);
|
|
290
|
+
},
|
|
291
|
+
["unsyncedCoValues"],
|
|
292
|
+
);
|
|
293
|
+
}
|
|
174
294
|
}
|