cojson 0.16.2 → 0.16.4

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 (113) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +9 -0
  3. package/dist/coValue.d.ts +1 -1
  4. package/dist/coValueContentMessage.d.ts +10 -0
  5. package/dist/coValueContentMessage.d.ts.map +1 -0
  6. package/dist/coValueContentMessage.js +46 -0
  7. package/dist/coValueContentMessage.js.map +1 -0
  8. package/dist/coValueCore/coValueCore.d.ts.map +1 -1
  9. package/dist/coValueCore/coValueCore.js +5 -3
  10. package/dist/coValueCore/coValueCore.js.map +1 -1
  11. package/dist/coValueCore/verifiedState.d.ts +1 -0
  12. package/dist/coValueCore/verifiedState.d.ts.map +1 -1
  13. package/dist/coValueCore/verifiedState.js +14 -27
  14. package/dist/coValueCore/verifiedState.js.map +1 -1
  15. package/dist/coValues/group.d.ts.map +1 -1
  16. package/dist/coValues/group.js +16 -8
  17. package/dist/coValues/group.js.map +1 -1
  18. package/dist/localNode.d.ts +6 -1
  19. package/dist/localNode.d.ts.map +1 -1
  20. package/dist/localNode.js +7 -2
  21. package/dist/localNode.js.map +1 -1
  22. package/dist/queue/LocalTransactionsSyncQueue.d.ts +24 -0
  23. package/dist/queue/LocalTransactionsSyncQueue.d.ts.map +1 -0
  24. package/dist/queue/LocalTransactionsSyncQueue.js +55 -0
  25. package/dist/queue/LocalTransactionsSyncQueue.js.map +1 -0
  26. package/dist/queue/StoreQueue.d.ts +9 -6
  27. package/dist/queue/StoreQueue.d.ts.map +1 -1
  28. package/dist/queue/StoreQueue.js +10 -2
  29. package/dist/queue/StoreQueue.js.map +1 -1
  30. package/dist/storage/storageAsync.d.ts +11 -3
  31. package/dist/storage/storageAsync.d.ts.map +1 -1
  32. package/dist/storage/storageAsync.js +59 -46
  33. package/dist/storage/storageAsync.js.map +1 -1
  34. package/dist/storage/storageSync.d.ts +9 -3
  35. package/dist/storage/storageSync.d.ts.map +1 -1
  36. package/dist/storage/storageSync.js +48 -35
  37. package/dist/storage/storageSync.js.map +1 -1
  38. package/dist/storage/syncUtils.d.ts +2 -1
  39. package/dist/storage/syncUtils.d.ts.map +1 -1
  40. package/dist/storage/syncUtils.js +4 -0
  41. package/dist/storage/syncUtils.js.map +1 -1
  42. package/dist/storage/types.d.ts +3 -2
  43. package/dist/storage/types.d.ts.map +1 -1
  44. package/dist/sync.d.ts +6 -6
  45. package/dist/sync.d.ts.map +1 -1
  46. package/dist/sync.js +33 -56
  47. package/dist/sync.js.map +1 -1
  48. package/dist/tests/StorageApiAsync.test.d.ts +2 -0
  49. package/dist/tests/StorageApiAsync.test.d.ts.map +1 -0
  50. package/dist/tests/StorageApiAsync.test.js +574 -0
  51. package/dist/tests/StorageApiAsync.test.js.map +1 -0
  52. package/dist/tests/StorageApiSync.test.d.ts +2 -0
  53. package/dist/tests/StorageApiSync.test.d.ts.map +1 -0
  54. package/dist/tests/StorageApiSync.test.js +426 -0
  55. package/dist/tests/StorageApiSync.test.js.map +1 -0
  56. package/dist/tests/StoreQueue.test.js +9 -21
  57. package/dist/tests/StoreQueue.test.js.map +1 -1
  58. package/dist/tests/SyncStateManager.test.js +18 -8
  59. package/dist/tests/SyncStateManager.test.js.map +1 -1
  60. package/dist/tests/group.inheritance.test.js +79 -2
  61. package/dist/tests/group.inheritance.test.js.map +1 -1
  62. package/dist/tests/sync.auth.test.js +22 -10
  63. package/dist/tests/sync.auth.test.js.map +1 -1
  64. package/dist/tests/sync.load.test.js +25 -23
  65. package/dist/tests/sync.load.test.js.map +1 -1
  66. package/dist/tests/sync.mesh.test.js +12 -6
  67. package/dist/tests/sync.mesh.test.js.map +1 -1
  68. package/dist/tests/sync.peerReconciliation.test.js +6 -4
  69. package/dist/tests/sync.peerReconciliation.test.js.map +1 -1
  70. package/dist/tests/sync.storage.test.js +8 -14
  71. package/dist/tests/sync.storage.test.js.map +1 -1
  72. package/dist/tests/sync.storageAsync.test.js +31 -14
  73. package/dist/tests/sync.storageAsync.test.js.map +1 -1
  74. package/dist/tests/sync.test.js +5 -9
  75. package/dist/tests/sync.test.js.map +1 -1
  76. package/dist/tests/sync.upload.test.js +31 -1
  77. package/dist/tests/sync.upload.test.js.map +1 -1
  78. package/dist/tests/testStorage.d.ts +2 -3
  79. package/dist/tests/testStorage.d.ts.map +1 -1
  80. package/dist/tests/testStorage.js +16 -8
  81. package/dist/tests/testStorage.js.map +1 -1
  82. package/dist/tests/testUtils.d.ts +3 -0
  83. package/dist/tests/testUtils.d.ts.map +1 -1
  84. package/dist/tests/testUtils.js +17 -4
  85. package/dist/tests/testUtils.js.map +1 -1
  86. package/package.json +1 -1
  87. package/src/coValueContentMessage.ts +73 -0
  88. package/src/coValueCore/coValueCore.ts +14 -5
  89. package/src/coValueCore/verifiedState.ts +28 -35
  90. package/src/coValues/group.ts +20 -9
  91. package/src/localNode.ts +8 -3
  92. package/src/queue/LocalTransactionsSyncQueue.ts +96 -0
  93. package/src/queue/StoreQueue.ts +22 -12
  94. package/src/storage/storageAsync.ts +78 -56
  95. package/src/storage/storageSync.ts +66 -45
  96. package/src/storage/syncUtils.ts +9 -1
  97. package/src/storage/types.ts +6 -5
  98. package/src/sync.ts +47 -67
  99. package/src/tests/StorageApiAsync.test.ts +829 -0
  100. package/src/tests/StorageApiSync.test.ts +628 -0
  101. package/src/tests/StoreQueue.test.ts +10 -24
  102. package/src/tests/SyncStateManager.test.ts +22 -21
  103. package/src/tests/group.inheritance.test.ts +136 -1
  104. package/src/tests/sync.auth.test.ts +22 -10
  105. package/src/tests/sync.load.test.ts +27 -24
  106. package/src/tests/sync.mesh.test.ts +12 -6
  107. package/src/tests/sync.peerReconciliation.test.ts +6 -4
  108. package/src/tests/sync.storage.test.ts +8 -14
  109. package/src/tests/sync.storageAsync.test.ts +39 -14
  110. package/src/tests/sync.test.ts +6 -14
  111. package/src/tests/sync.upload.test.ts +38 -1
  112. package/src/tests/testStorage.ts +19 -13
  113. package/src/tests/testUtils.ts +24 -5
@@ -0,0 +1,426 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { unlinkSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { describe, expect, onTestFinished, test, vi } from "vitest";
6
+ import { WasmCrypto } from "../crypto/WasmCrypto.js";
7
+ import { LocalNode, logger } from "../exports.js";
8
+ import { emptyKnownState, } from "../sync.js";
9
+ import { createSyncStorage } from "./testStorage.js";
10
+ import { loadCoValueOrFail, randomAgentAndSessionID } from "./testUtils.js";
11
+ const crypto = await WasmCrypto.create();
12
+ /**
13
+ * Helper function that gets new content since a known state, throwing if:
14
+ * - The coValue is not verified
15
+ * - There is no new content
16
+ */
17
+ function getNewContentSince(coValue, knownState) {
18
+ if (!coValue.verified) {
19
+ throw new Error(`CoValue ${coValue.id} is not verified`);
20
+ }
21
+ const contentMessage = coValue.verified.newContentSince(knownState)?.[0];
22
+ if (!contentMessage) {
23
+ throw new Error(`No new content available for coValue ${coValue.id}`);
24
+ }
25
+ return contentMessage;
26
+ }
27
+ async function createFixturesNode(customDbPath) {
28
+ const [admin, session] = randomAgentAndSessionID();
29
+ const node = new LocalNode(admin.agentSecret, session, crypto);
30
+ // Create a unique database file for each test
31
+ const dbPath = customDbPath ?? join(tmpdir(), `test-${randomUUID()}.db`);
32
+ const storage = createSyncStorage({
33
+ filename: dbPath,
34
+ nodeName: "test",
35
+ storageName: "test-storage",
36
+ });
37
+ onTestFinished(() => {
38
+ try {
39
+ unlinkSync(dbPath);
40
+ }
41
+ catch { }
42
+ });
43
+ node.setStorage(storage);
44
+ return {
45
+ fixturesNode: node,
46
+ dbPath,
47
+ };
48
+ }
49
+ async function createTestNode(dbPath) {
50
+ const [admin, session] = randomAgentAndSessionID();
51
+ const node = new LocalNode(admin.agentSecret, session, crypto);
52
+ const storage = createSyncStorage({
53
+ filename: dbPath,
54
+ nodeName: "test",
55
+ storageName: "test-storage",
56
+ });
57
+ return {
58
+ node,
59
+ storage,
60
+ };
61
+ }
62
+ describe("StorageApiSync", () => {
63
+ describe("getKnownState", () => {
64
+ test("should return empty known state for new coValue ID and cache the result", async () => {
65
+ const { fixturesNode } = await createFixturesNode();
66
+ const { storage } = await createTestNode();
67
+ const id = fixturesNode.createGroup().id;
68
+ const knownState = storage.getKnownState(id);
69
+ expect(knownState).toEqual(emptyKnownState(id));
70
+ expect(storage.getKnownState(id)).toBe(knownState); // Should return same instance
71
+ });
72
+ test("should return separate known state instances for different coValue IDs", async () => {
73
+ const { storage } = await createTestNode();
74
+ const id1 = "test-id-1";
75
+ const id2 = "test-id-2";
76
+ const knownState1 = storage.getKnownState(id1);
77
+ const knownState2 = storage.getKnownState(id2);
78
+ expect(knownState1).not.toBe(knownState2);
79
+ });
80
+ });
81
+ describe("load", () => {
82
+ test("should fail gracefully when loading non-existent coValue and preserve known state", async () => {
83
+ const { storage } = await createTestNode();
84
+ const id = "non-existent-id";
85
+ const callback = vi.fn();
86
+ const done = vi.fn();
87
+ // Get initial known state
88
+ const initialKnownState = storage.getKnownState(id);
89
+ expect(initialKnownState).toEqual(emptyKnownState(id));
90
+ await storage.load(id, callback, done);
91
+ expect(done).toHaveBeenCalledWith(false);
92
+ expect(callback).not.toHaveBeenCalled();
93
+ // Verify that storage known state is NOT updated when load fails
94
+ const afterLoadKnownState = storage.getKnownState(id);
95
+ expect(afterLoadKnownState).toEqual(initialKnownState);
96
+ });
97
+ test("should successfully load coValue with header and update known state", async () => {
98
+ const { fixturesNode, dbPath } = await createFixturesNode();
99
+ const { node, storage } = await createTestNode(dbPath);
100
+ const callback = vi.fn((content) => node.syncManager.handleNewContent(content, "storage"));
101
+ const done = vi.fn();
102
+ // Create a real group and get its content message
103
+ const group = fixturesNode.createGroup();
104
+ await group.core.waitForSync();
105
+ // Get initial known state
106
+ const initialKnownState = storage.getKnownState(group.id);
107
+ expect(initialKnownState).toEqual(emptyKnownState(group.id));
108
+ await storage.load(group.id, callback, done);
109
+ expect(callback).toHaveBeenCalledWith(expect.objectContaining({
110
+ id: group.id,
111
+ header: group.core.verified.header,
112
+ new: expect.any(Object),
113
+ }));
114
+ expect(done).toHaveBeenCalledWith(true);
115
+ // Verify that storage known state is updated after load
116
+ const updatedKnownState = storage.getKnownState(group.id);
117
+ expect(updatedKnownState).toEqual(group.core.verified.knownState());
118
+ const groupOnNode = await loadCoValueOrFail(node, group.id);
119
+ expect(groupOnNode.core.verified.header).toEqual(group.core.verified.header);
120
+ });
121
+ test("should successfully load coValue with transactions and update known state", async () => {
122
+ const { fixturesNode, dbPath } = await createFixturesNode();
123
+ const { node, storage } = await createTestNode(dbPath);
124
+ const callback = vi.fn((content) => node.syncManager.handleNewContent(content, "storage"));
125
+ const done = vi.fn();
126
+ // Create a real group and add a member to create transactions
127
+ const group = fixturesNode.createGroup();
128
+ group.addMember("everyone", "reader");
129
+ await group.core.waitForSync();
130
+ // Get initial known state
131
+ const initialKnownState = storage.getKnownState(group.id);
132
+ expect(initialKnownState).toEqual(emptyKnownState(group.id));
133
+ await storage.load(group.id, callback, done);
134
+ expect(callback).toHaveBeenCalledWith(expect.objectContaining({
135
+ id: group.id,
136
+ header: group.core.verified.header,
137
+ new: expect.objectContaining({
138
+ [fixturesNode.currentSessionID]: expect.any(Object),
139
+ }),
140
+ }));
141
+ expect(done).toHaveBeenCalledWith(true);
142
+ // Verify that storage known state is updated after load
143
+ const updatedKnownState = storage.getKnownState(group.id);
144
+ expect(updatedKnownState).toEqual(group.core.verified.knownState());
145
+ const groupOnNode = await loadCoValueOrFail(node, group.id);
146
+ expect(groupOnNode.get("everyone")).toEqual("reader");
147
+ });
148
+ });
149
+ describe("store", () => {
150
+ test("should successfully store new coValue with header and update known state", async () => {
151
+ const { fixturesNode } = await createFixturesNode();
152
+ const { node, storage } = await createTestNode();
153
+ // Create a real group and get its content message
154
+ const group = fixturesNode.createGroup();
155
+ const contentMessage = getNewContentSince(group.core, emptyKnownState(group.id));
156
+ const correctionCallback = vi.fn();
157
+ // Get initial known state
158
+ const initialKnownState = storage.getKnownState(group.id);
159
+ expect(initialKnownState).toEqual(emptyKnownState(group.id));
160
+ storage.store(contentMessage, correctionCallback);
161
+ // Verify that storage known state is updated after store
162
+ const updatedKnownState = storage.getKnownState(group.id);
163
+ expect(updatedKnownState).toEqual(group.core.verified.knownState());
164
+ node.setStorage(storage);
165
+ const groupOnNode = await loadCoValueOrFail(node, group.id);
166
+ expect(groupOnNode.core.verified.header).toEqual(group.core.verified.header);
167
+ });
168
+ test("should successfully store coValue with transactions and update known state", async () => {
169
+ const { fixturesNode } = await createFixturesNode();
170
+ const { node, storage } = await createTestNode();
171
+ // Create a real group and add a member to create transactions
172
+ const group = fixturesNode.createGroup();
173
+ const knownState = group.core.verified.knownState();
174
+ group.addMember("everyone", "reader");
175
+ const contentMessage = getNewContentSince(group.core, emptyKnownState(group.id));
176
+ const correctionCallback = vi.fn();
177
+ // Get initial known state
178
+ const initialKnownState = storage.getKnownState(group.id);
179
+ expect(initialKnownState).toEqual(emptyKnownState(group.id));
180
+ storage.store(contentMessage, correctionCallback);
181
+ // Verify that storage known state is updated after store
182
+ const updatedKnownState = storage.getKnownState(group.id);
183
+ expect(updatedKnownState).toEqual(group.core.verified.knownState());
184
+ node.setStorage(storage);
185
+ const groupOnNode = await loadCoValueOrFail(node, group.id);
186
+ expect(groupOnNode.get("everyone")).toEqual("reader");
187
+ });
188
+ test("should handle correction when header assumption is invalid", async () => {
189
+ const { fixturesNode } = await createFixturesNode();
190
+ const { node, storage } = await createTestNode();
191
+ const group = fixturesNode.createGroup();
192
+ const knownState = group.core.verified.knownState();
193
+ group.addMember("everyone", "reader");
194
+ const contentMessage = getNewContentSince(group.core, knownState);
195
+ const correctionCallback = vi.fn((known) => {
196
+ expect(known).toEqual(emptyKnownState(group.id));
197
+ return group.core.verified.newContentSince(known);
198
+ });
199
+ // Get initial known state
200
+ const initialKnownState = storage.getKnownState(group.id);
201
+ expect(initialKnownState).toEqual(emptyKnownState(group.id));
202
+ const result = storage.store(contentMessage, correctionCallback);
203
+ expect(correctionCallback).toHaveBeenCalledTimes(1);
204
+ expect(result).toBe(true);
205
+ // Verify that storage known state is updated after store with correction
206
+ const updatedKnownState = storage.getKnownState(group.id);
207
+ expect(updatedKnownState).toEqual(group.core.verified.knownState());
208
+ node.setStorage(storage);
209
+ const groupOnNode = await loadCoValueOrFail(node, group.id);
210
+ expect(groupOnNode.get("everyone")).toEqual("reader");
211
+ });
212
+ test("should handle correction when new content assumption is invalid", async () => {
213
+ const { fixturesNode } = await createFixturesNode();
214
+ const { node, storage } = await createTestNode();
215
+ const group = fixturesNode.createGroup();
216
+ const initialContent = getNewContentSince(group.core, emptyKnownState(group.id));
217
+ const initialKnownState = group.core.knownState();
218
+ group.addMember("everyone", "reader");
219
+ const knownState = group.core.knownState();
220
+ group.addMember("everyone", "writer");
221
+ const contentMessage = getNewContentSince(group.core, knownState);
222
+ const correctionCallback = vi.fn((known) => {
223
+ expect(known).toEqual(initialKnownState);
224
+ return group.core.verified.newContentSince(known);
225
+ });
226
+ // Get initial storage known state
227
+ const initialStorageKnownState = storage.getKnownState(group.id);
228
+ expect(initialStorageKnownState).toEqual(emptyKnownState(group.id));
229
+ storage.store(initialContent, correctionCallback);
230
+ // Verify storage known state after first store
231
+ const afterFirstStore = storage.getKnownState(group.id);
232
+ expect(afterFirstStore).toEqual(initialKnownState);
233
+ const result = storage.store(contentMessage, correctionCallback);
234
+ expect(correctionCallback).toHaveBeenCalledTimes(1);
235
+ expect(result).toBe(true);
236
+ // Verify that storage known state is updated after store with correction
237
+ const finalKnownState = storage.getKnownState(group.id);
238
+ expect(finalKnownState).toEqual(group.core.verified.knownState());
239
+ node.setStorage(storage);
240
+ const groupOnNode = await loadCoValueOrFail(node, group.id);
241
+ expect(groupOnNode.get("everyone")).toEqual("writer");
242
+ });
243
+ test("should log error and fail when correction callback returns undefined", async () => {
244
+ const { fixturesNode } = await createFixturesNode();
245
+ const { storage } = await createTestNode();
246
+ const group = fixturesNode.createGroup();
247
+ const knownState = group.core.knownState();
248
+ group.addMember("everyone", "writer");
249
+ const contentMessage = getNewContentSince(group.core, knownState);
250
+ const correctionCallback = vi.fn((known) => {
251
+ return undefined;
252
+ });
253
+ // Get initial known state
254
+ const initialKnownState = storage.getKnownState(group.id);
255
+ expect(initialKnownState).toEqual(emptyKnownState(group.id));
256
+ const errorSpy = vi.spyOn(logger, "error").mockImplementation(() => { });
257
+ const result = storage.store(contentMessage, correctionCallback);
258
+ expect(correctionCallback).toHaveBeenCalledTimes(1);
259
+ expect(result).toBe(false);
260
+ // Verify that storage known state is NOT updated when store fails
261
+ const afterStoreKnownState = storage.getKnownState(group.id);
262
+ expect(afterStoreKnownState).toEqual(initialKnownState);
263
+ expect(errorSpy).toHaveBeenCalledWith("Correction callback returned undefined", {
264
+ knownState: expect.any(Object),
265
+ correction: null,
266
+ });
267
+ errorSpy.mockClear();
268
+ });
269
+ test("should log error and fail when correction callback returns invalid content message", async () => {
270
+ const { fixturesNode } = await createFixturesNode();
271
+ const { storage } = await createTestNode();
272
+ const group = fixturesNode.createGroup();
273
+ const knownState = group.core.knownState();
274
+ group.addMember("everyone", "writer");
275
+ const contentMessage = getNewContentSince(group.core, knownState);
276
+ const correctionCallback = vi.fn(() => {
277
+ return [contentMessage];
278
+ });
279
+ const errorSpy = vi.spyOn(logger, "error").mockImplementation(() => { });
280
+ const result = storage.store(contentMessage, correctionCallback);
281
+ expect(correctionCallback).toHaveBeenCalledTimes(1);
282
+ expect(result).toBe(false);
283
+ expect(errorSpy).toHaveBeenCalledWith("Correction callback returned undefined", {
284
+ knownState: expect.any(Object),
285
+ correction: null,
286
+ });
287
+ expect(errorSpy).toHaveBeenCalledWith("Double correction requested", {
288
+ knownState: expect.any(Object),
289
+ msg: expect.any(Object),
290
+ });
291
+ errorSpy.mockClear();
292
+ });
293
+ test("should successfully store coValue with multiple sessions", async () => {
294
+ const { fixturesNode, dbPath } = await createFixturesNode();
295
+ const { fixturesNode: fixtureNode2 } = await createFixturesNode(dbPath);
296
+ const { node, storage } = await createTestNode();
297
+ const coValue = fixturesNode.createCoValue({
298
+ type: "comap",
299
+ ruleset: { type: "unsafeAllowAll" },
300
+ meta: null,
301
+ ...crypto.createdNowUnique(),
302
+ });
303
+ coValue.makeTransaction([
304
+ {
305
+ count: 1,
306
+ },
307
+ ], "trusting");
308
+ await coValue.waitForSync();
309
+ const mapOnNode2 = await loadCoValueOrFail(fixtureNode2, coValue.id);
310
+ coValue.makeTransaction([
311
+ {
312
+ count: 2,
313
+ },
314
+ ], "trusting");
315
+ const knownState = mapOnNode2.core.knownState();
316
+ const contentMessage = getNewContentSince(mapOnNode2.core, emptyKnownState(mapOnNode2.id));
317
+ const correctionCallback = vi.fn();
318
+ storage.store(contentMessage, correctionCallback);
319
+ node.setStorage(storage);
320
+ const finalMap = await loadCoValueOrFail(node, mapOnNode2.id);
321
+ expect(finalMap.core.knownState()).toEqual(knownState);
322
+ });
323
+ });
324
+ describe("dependencies", () => {
325
+ test("should load dependencies before dependent coValues and update all known states", async () => {
326
+ const { fixturesNode, dbPath } = await createFixturesNode();
327
+ const { node, storage } = await createTestNode(dbPath);
328
+ // Create a group and a map owned by that group to create dependencies
329
+ const group = fixturesNode.createGroup();
330
+ group.addMember("everyone", "reader");
331
+ const map = group.createMap({ test: "value" });
332
+ await group.core.waitForSync();
333
+ await map.core.waitForSync();
334
+ const callback = vi.fn((content) => node.syncManager.handleNewContent(content, "storage"));
335
+ const done = vi.fn();
336
+ // Get initial known states
337
+ const initialGroupKnownState = storage.getKnownState(group.id);
338
+ const initialMapKnownState = storage.getKnownState(map.id);
339
+ expect(initialGroupKnownState).toEqual(emptyKnownState(group.id));
340
+ expect(initialMapKnownState).toEqual(emptyKnownState(map.id));
341
+ // Load the map, which should also load the group dependency first
342
+ await storage.load(map.id, callback, done);
343
+ expect(callback).toHaveBeenCalledTimes(2); // Group first, then map
344
+ expect(callback).toHaveBeenNthCalledWith(1, expect.objectContaining({
345
+ id: group.id,
346
+ }));
347
+ expect(callback).toHaveBeenNthCalledWith(2, expect.objectContaining({
348
+ id: map.id,
349
+ }));
350
+ expect(done).toHaveBeenCalledWith(true);
351
+ // Verify that storage known states are updated after load
352
+ const updatedGroupKnownState = storage.getKnownState(group.id);
353
+ const updatedMapKnownState = storage.getKnownState(map.id);
354
+ expect(updatedGroupKnownState).toEqual(group.core.verified.knownState());
355
+ expect(updatedMapKnownState).toEqual(map.core.verified.knownState());
356
+ node.setStorage(storage);
357
+ const mapOnNode = await loadCoValueOrFail(node, map.id);
358
+ expect(mapOnNode.get("test")).toEqual("value");
359
+ });
360
+ test("should skip loading already loaded dependencies", async () => {
361
+ const { fixturesNode, dbPath } = await createFixturesNode();
362
+ const { node, storage } = await createTestNode(dbPath);
363
+ // Create a group and a map owned by that group
364
+ const group = fixturesNode.createGroup();
365
+ group.addMember("everyone", "reader");
366
+ const map = group.createMap({ test: "value" });
367
+ await group.core.waitForSync();
368
+ await map.core.waitForSync();
369
+ const callback = vi.fn((content) => node.syncManager.handleNewContent(content, "storage"));
370
+ const done = vi.fn();
371
+ // Get initial known states
372
+ const initialGroupKnownState = storage.getKnownState(group.id);
373
+ const initialMapKnownState = storage.getKnownState(map.id);
374
+ expect(initialGroupKnownState).toEqual(emptyKnownState(group.id));
375
+ expect(initialMapKnownState).toEqual(emptyKnownState(map.id));
376
+ // First load the group
377
+ await storage.load(group.id, callback, done);
378
+ callback.mockClear();
379
+ done.mockClear();
380
+ // Verify group known state is updated after first load
381
+ const afterGroupLoad = storage.getKnownState(group.id);
382
+ expect(afterGroupLoad).toEqual(group.core.verified.knownState());
383
+ // Then load the map - the group dependency should already be loaded
384
+ await storage.load(map.id, callback, done);
385
+ // Should only call callback once for the map since group is already loaded
386
+ expect(callback).toHaveBeenCalledTimes(1);
387
+ expect(callback).toHaveBeenCalledWith(expect.objectContaining({
388
+ id: map.id,
389
+ }));
390
+ expect(done).toHaveBeenCalledWith(true);
391
+ // Verify map known state is updated after second load
392
+ const finalMapKnownState = storage.getKnownState(map.id);
393
+ expect(finalMapKnownState).toEqual(map.core.verified.knownState());
394
+ node.setStorage(storage);
395
+ const mapOnNode = await loadCoValueOrFail(node, map.id);
396
+ expect(mapOnNode.get("test")).toEqual("value");
397
+ });
398
+ });
399
+ describe("waitForSync", () => {
400
+ test("should resolve immediately when coValue is already synced", async () => {
401
+ const { fixturesNode, dbPath } = await createFixturesNode();
402
+ const { node, storage } = await createTestNode(dbPath);
403
+ // Create a group and add a member
404
+ const group = fixturesNode.createGroup();
405
+ group.addMember("everyone", "reader");
406
+ await group.core.waitForSync();
407
+ // Store the group in storage
408
+ const contentMessage = getNewContentSince(group.core, emptyKnownState(group.id));
409
+ const correctionCallback = vi.fn();
410
+ storage.store(contentMessage, correctionCallback);
411
+ node.setStorage(storage);
412
+ // Load the group on the new node
413
+ const groupOnNode = await loadCoValueOrFail(node, group.id);
414
+ // Wait for sync should resolve immediately since the coValue is already synced
415
+ await expect(storage.waitForSync(group.id, groupOnNode.core)).resolves.toBeUndefined();
416
+ expect(groupOnNode.get("everyone")).toEqual("reader");
417
+ });
418
+ });
419
+ describe("close", () => {
420
+ test("should close storage without throwing errors", async () => {
421
+ const { storage } = await createTestNode();
422
+ expect(() => storage.close()).not.toThrow();
423
+ });
424
+ });
425
+ });
426
+ //# sourceMappingURL=StorageApiSync.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorageApiSync.test.js","sourceRoot":"","sources":["../../src/tests/StorageApiSync.test.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,12 @@
1
1
  import { describe, expect, test, vi } from "vitest";
2
2
  import { StoreQueue } from "../queue/StoreQueue.js";
3
3
  function createMockNewContentMessage(id) {
4
- return [
5
- {
6
- action: "content",
7
- id: id,
8
- priority: 0,
9
- new: {},
10
- },
11
- ];
4
+ return {
5
+ action: "content",
6
+ id: id,
7
+ priority: 0,
8
+ new: {},
9
+ };
12
10
  }
13
11
  function setup() {
14
12
  const storeQueue = new StoreQueue();
@@ -109,12 +107,12 @@ describe("StoreQueue", () => {
109
107
  const data2 = createMockNewContentMessage("co2");
110
108
  storeQueue.push(data1, mockCorrectionCallback);
111
109
  storeQueue.push(data2, mockCorrectionCallback);
112
- storeQueue.drain();
110
+ storeQueue.close();
113
111
  expect(storeQueue.pull()).toBeUndefined();
114
112
  });
115
113
  test("should handle empty queue", () => {
116
114
  const { storeQueue } = setup();
117
- expect(() => storeQueue.drain()).not.toThrow();
115
+ expect(() => storeQueue.close()).not.toThrow();
118
116
  expect(storeQueue.pull()).toBeUndefined();
119
117
  });
120
118
  });
@@ -172,20 +170,10 @@ describe("StoreQueue", () => {
172
170
  });
173
171
  });
174
172
  describe("edge cases", () => {
175
- test("should handle undefined data", () => {
176
- const { storeQueue, mockCorrectionCallback } = setup();
177
- const data = [];
178
- storeQueue.push(data, mockCorrectionCallback);
179
- const entry = storeQueue.pull();
180
- expect(entry).toEqual({
181
- data,
182
- correctionCallback: mockCorrectionCallback,
183
- });
184
- });
185
173
  test("should handle null correction callback", () => {
186
174
  const { storeQueue } = setup();
187
175
  const data = createMockNewContentMessage("co1");
188
- const nullCallback = () => { };
176
+ const nullCallback = () => undefined;
189
177
  storeQueue.push(data, nullCallback);
190
178
  const entry = storeQueue.pull();
191
179
  expect(entry).toEqual({ data, correctionCallback: nullCallback });
@@ -1 +1 @@
1
- {"version":3,"file":"StoreQueue.test.js","sourceRoot":"","sources":["../../src/tests/StoreQueue.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StoreQueue.test.js","sourceRoot":"","sources":["../../src/tests/StoreQueue.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,SAAS,2BAA2B,CAAC,EAAU;IAC7C,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,EAAE,EAAE,EAAS;QACb,QAAQ,EAAE,CAAC;QACX,GAAG,EAAE,EAAE;KACR,CAAC;AACJ,CAAC;AAED,SAAS,KAAK;IACZ,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IACpC,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAC7B,MAAM,sBAAsB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAEvC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC;AAC9D,CAAC;AAED,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACtD,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEjD,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAC/C,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,sBAAsB;YAExD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,KAAK;gBACX,kBAAkB,EAAE,sBAAsB;aAC3C,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,KAAK;gBACX,kBAAkB,EAAE,sBAAsB;aAC3C,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACrC,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACtC,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEhD,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YAEhC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;gBACpB,IAAI;gBACJ,kBAAkB,EAAE,sBAAsB;aAC3C,CAAC,CAAC;YACH,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACrE,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEjD,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAC/C,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAE/C,MAAM,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE5C,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,CAAC,YAAY,CAAC,CAAC,uBAAuB,CAC1C,CAAC,EACD,KAAK,EACL,sBAAsB,CACvB,CAAC;YACF,MAAM,CAAC,YAAY,CAAC,CAAC,uBAAuB,CAC1C,CAAC,EACD,KAAK,EACL,sBAAsB,CACvB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACrE,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEhD,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAE9C,mBAAmB;YACnB,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE9D,gDAAgD;YAChD,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE9D,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC;YAEtD,6BAA6B;YAC7B,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;YACtF,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACrE,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEhD,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAE9C,MAAM,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE5C,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAE9C,MAAM,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE5C,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,KAAK,EAAE,CAAC;YAC7C,MAAM,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE5C,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAC5C,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEhD,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAE9C,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;YAEzE,MAAM,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;YAC7C,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAChD,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEjD,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAC/C,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAE/C,UAAU,CAAC,KAAK,EAAE,CAAC;YAEnB,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACrC,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YAC/C,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,IAAI,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACrE,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEjD,eAAe;YACf,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAC/C,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAE/C,gBAAgB;YAChB,MAAM,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE5C,oCAAoC;YACpC,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;YAE1C,qCAAqC;YACrC,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YACjD,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAE/C,MAAM,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE5C,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,CAAC,YAAY,CAAC,CAAC,wBAAwB,CAC3C,KAAK,EACL,sBAAsB,CACvB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,uBAA8B,CAAC;YACjD,MAAM,UAAU,GAAsB;gBACpC,EAAE,EAAE,KAAY;gBAChB,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;aAC7B,CAAC;YAEF,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEhD,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAE9C,MAAM,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE;gBAC/D,2BAA2B;gBAC3B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;gBACxD,+BAA+B;gBAC/B,kBAAkB,CAAC,UAAU,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,sBAAsB,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACrE,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEhD,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAE9C,kDAAkD;YAClD,MAAM,QAAQ,GAAG;gBACf,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC;gBACrC,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC;gBACrC,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC;aACtC,CAAC;YAEF,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE5B,2BAA2B;YAC3B,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAClD,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEhD,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;YACrC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAEpC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,YAAY,EAAE,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACtD,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACvD,MAAM,OAAO,GAAG,IAAI,CAAC;YAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACnD,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAChD,CAAC;YAED,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,OAAO,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;gBACzB,KAAK,EAAE,CAAC;YACV,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -21,8 +21,6 @@ describe("SyncStateManager", () => {
21
21
  const subscriptionManager = client.node.syncManager.syncState;
22
22
  const updateSpy = vi.fn();
23
23
  const unsubscribe = subscriptionManager.subscribeToUpdates(updateSpy);
24
- await client.node.syncManager.syncCoValue(map.core);
25
- expect(updateSpy).toHaveBeenCalledWith(peerState.id, emptyKnownState(map.core.id), { uploaded: false });
26
24
  await waitFor(() => {
27
25
  return subscriptionManager.getCurrentSyncState(peerState.id, map.core.id)
28
26
  .uploaded;
@@ -53,14 +51,12 @@ describe("SyncStateManager", () => {
53
51
  unsubscribe1();
54
52
  unsubscribe2();
55
53
  });
56
- await client.node.syncManager.syncCoValue(map.core);
57
- expect(updateToJazzCloudSpy).toHaveBeenCalledWith(emptyKnownState(map.core.id), { uploaded: false });
58
54
  await waitFor(() => {
59
55
  return subscriptionManager.getCurrentSyncState(peerState.id, map.core.id)
60
56
  .uploaded;
61
57
  });
62
58
  expect(updateToJazzCloudSpy).toHaveBeenLastCalledWith(client.node.syncManager.peers[peerState.id].knownStates.get(map.core.id), { uploaded: true });
63
- expect(updateToStorageSpy).toHaveBeenLastCalledWith(emptyKnownState(group.core.id), { uploaded: false });
59
+ expect(updateToStorageSpy).toHaveBeenCalledWith(emptyKnownState(group.core.id), { uploaded: false });
64
60
  });
65
61
  test("getIsCoValueFullyUploadedIntoPeer returns correct status", async () => {
66
62
  // Setup nodes
@@ -70,7 +66,6 @@ describe("SyncStateManager", () => {
70
66
  const group = client.node.createGroup();
71
67
  const map = group.createMap();
72
68
  map.set("key1", "value1", "trusting");
73
- await client.node.syncManager.syncCoValue(map.core);
74
69
  const subscriptionManager = client.node.syncManager.syncState;
75
70
  expect(subscriptionManager.getCurrentSyncState(peerState.id, map.core.id)
76
71
  .uploaded).toBe(false);
@@ -95,7 +90,6 @@ describe("SyncStateManager", () => {
95
90
  const unsubscribe2 = subscriptionManager.subscribeToPeerUpdates(peerState.id, anyUpdateSpy);
96
91
  unsubscribe1();
97
92
  unsubscribe2();
98
- await client.node.syncManager.syncCoValue(map.core);
99
93
  anyUpdateSpy.mockClear();
100
94
  await waitFor(() => {
101
95
  return subscriptionManager.getCurrentSyncState(peerState.id, map.core.id)
@@ -188,7 +182,23 @@ describe("SyncStateManager", () => {
188
182
  sessions: {},
189
183
  });
190
184
  await map.core.waitForSync();
191
- expect(client.node.getCoValue(map.id).isAvailable()).toBe(true);
185
+ expect(client.node.getCoValue(map.id).hasVerifiedContent()).toBe(true);
186
+ // Since only the map is subscribed, the dependencies are pushed after the client requests them
187
+ await waitFor(() => {
188
+ expect(client.node.getCoValue(map.id).isAvailable()).toBe(true);
189
+ });
190
+ expect(SyncMessagesLog.getMessages({
191
+ Map: map.core,
192
+ Group: group.core,
193
+ })).toMatchInlineSnapshot(`
194
+ [
195
+ "server -> client | CONTENT Map header: true new: After: 0 New: 1",
196
+ "client -> server | LOAD Group sessions: empty",
197
+ "client -> server | KNOWN Map sessions: header/1",
198
+ "server -> client | CONTENT Group header: true new: After: 0 New: 3",
199
+ "client -> server | KNOWN Group sessions: header/3",
200
+ ]
201
+ `);
192
202
  });
193
203
  });
194
204
  //# sourceMappingURL=SyncStateManager.test.js.map