cojson 0.15.8 → 0.15.10

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 (218) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +12 -0
  3. package/dist/IncomingMessagesQueue.d.ts +27 -0
  4. package/dist/IncomingMessagesQueue.d.ts.map +1 -0
  5. package/dist/IncomingMessagesQueue.js +114 -0
  6. package/dist/IncomingMessagesQueue.js.map +1 -0
  7. package/dist/PeerState.d.ts +2 -10
  8. package/dist/PeerState.d.ts.map +1 -1
  9. package/dist/PeerState.js +9 -90
  10. package/dist/PeerState.js.map +1 -1
  11. package/dist/PriorityBasedMessageQueue.d.ts +2 -1
  12. package/dist/PriorityBasedMessageQueue.d.ts.map +1 -1
  13. package/dist/PriorityBasedMessageQueue.js +9 -6
  14. package/dist/PriorityBasedMessageQueue.js.map +1 -1
  15. package/dist/SyncStateManager.d.ts +1 -0
  16. package/dist/SyncStateManager.d.ts.map +1 -1
  17. package/dist/SyncStateManager.js +1 -1
  18. package/dist/SyncStateManager.js.map +1 -1
  19. package/dist/coValue.d.ts +1 -1
  20. package/dist/coValueCore/coValueCore.d.ts +9 -17
  21. package/dist/coValueCore/coValueCore.d.ts.map +1 -1
  22. package/dist/coValueCore/coValueCore.js +75 -50
  23. package/dist/coValueCore/coValueCore.js.map +1 -1
  24. package/dist/coValueCore/verifiedState.d.ts +10 -3
  25. package/dist/coValueCore/verifiedState.d.ts.map +1 -1
  26. package/dist/coValueCore/verifiedState.js +73 -14
  27. package/dist/coValueCore/verifiedState.js.map +1 -1
  28. package/dist/coValues/coMap.d.ts +3 -3
  29. package/dist/coValues/coStream.d.ts +2 -2
  30. package/dist/coValues/group.d.ts +1 -1
  31. package/dist/coValues/group.d.ts.map +1 -1
  32. package/dist/coValues/group.js +2 -4
  33. package/dist/coValues/group.js.map +1 -1
  34. package/dist/config.d.ts +19 -0
  35. package/dist/config.d.ts.map +1 -0
  36. package/dist/config.js +23 -0
  37. package/dist/config.js.map +1 -0
  38. package/dist/crypto/WasmCrypto.d.ts.map +1 -1
  39. package/dist/crypto/WasmCrypto.js +2 -1
  40. package/dist/crypto/WasmCrypto.js.map +1 -1
  41. package/dist/exports.d.ts +18 -7
  42. package/dist/exports.d.ts.map +1 -1
  43. package/dist/exports.js +11 -8
  44. package/dist/exports.js.map +1 -1
  45. package/dist/localNode.d.ts +8 -2
  46. package/dist/localNode.d.ts.map +1 -1
  47. package/dist/localNode.js +19 -12
  48. package/dist/localNode.js.map +1 -1
  49. package/dist/storage/StoreQueue.d.ts +15 -0
  50. package/dist/storage/StoreQueue.d.ts.map +1 -0
  51. package/dist/storage/StoreQueue.js +35 -0
  52. package/dist/storage/StoreQueue.js.map +1 -0
  53. package/dist/storage/index.d.ts +6 -0
  54. package/dist/storage/index.d.ts.map +1 -0
  55. package/dist/storage/index.js +6 -0
  56. package/dist/storage/index.js.map +1 -0
  57. package/dist/storage/knownState.d.ts +18 -0
  58. package/dist/storage/knownState.d.ts.map +1 -0
  59. package/dist/storage/knownState.js +63 -0
  60. package/dist/storage/knownState.js.map +1 -0
  61. package/dist/storage/sqlite/client.d.ts +37 -0
  62. package/dist/storage/sqlite/client.d.ts.map +1 -0
  63. package/dist/storage/sqlite/client.js +89 -0
  64. package/dist/storage/sqlite/client.js.map +1 -0
  65. package/dist/storage/sqlite/index.d.ts +5 -0
  66. package/dist/storage/sqlite/index.d.ts.map +1 -0
  67. package/dist/storage/sqlite/index.js +13 -0
  68. package/dist/storage/sqlite/index.js.map +1 -0
  69. package/dist/storage/sqlite/sqliteMigrations.d.ts +3 -0
  70. package/dist/storage/sqlite/sqliteMigrations.d.ts.map +1 -0
  71. package/dist/storage/sqlite/sqliteMigrations.js +44 -0
  72. package/dist/storage/sqlite/sqliteMigrations.js.map +1 -0
  73. package/dist/storage/sqlite/types.d.ts +8 -0
  74. package/dist/storage/sqlite/types.d.ts.map +1 -0
  75. package/dist/storage/sqlite/types.js +2 -0
  76. package/dist/storage/sqlite/types.js.map +1 -0
  77. package/dist/storage/sqliteAsync/client.d.ts +37 -0
  78. package/dist/storage/sqliteAsync/client.d.ts.map +1 -0
  79. package/dist/storage/sqliteAsync/client.js +88 -0
  80. package/dist/storage/sqliteAsync/client.js.map +1 -0
  81. package/dist/storage/sqliteAsync/index.d.ts +6 -0
  82. package/dist/storage/sqliteAsync/index.d.ts.map +1 -0
  83. package/dist/storage/sqliteAsync/index.js +15 -0
  84. package/dist/storage/sqliteAsync/index.js.map +1 -0
  85. package/dist/storage/sqliteAsync/types.d.ts +9 -0
  86. package/dist/storage/sqliteAsync/types.d.ts.map +1 -0
  87. package/dist/storage/sqliteAsync/types.js +2 -0
  88. package/dist/storage/sqliteAsync/types.js.map +1 -0
  89. package/dist/storage/storageAsync.d.ts +22 -0
  90. package/dist/storage/storageAsync.d.ts.map +1 -0
  91. package/dist/storage/storageAsync.js +214 -0
  92. package/dist/storage/storageAsync.js.map +1 -0
  93. package/dist/storage/storageSync.d.ts +21 -0
  94. package/dist/storage/storageSync.d.ts.map +1 -0
  95. package/dist/storage/storageSync.js +206 -0
  96. package/dist/storage/storageSync.js.map +1 -0
  97. package/dist/storage/syncUtils.d.ts +13 -0
  98. package/dist/storage/syncUtils.d.ts.map +1 -0
  99. package/dist/storage/syncUtils.js +25 -0
  100. package/dist/storage/syncUtils.js.map +1 -0
  101. package/dist/storage/types.d.ts +82 -0
  102. package/dist/storage/types.d.ts.map +1 -0
  103. package/dist/storage/types.js +2 -0
  104. package/dist/storage/types.js.map +1 -0
  105. package/dist/streamUtils.d.ts +13 -9
  106. package/dist/streamUtils.d.ts.map +1 -1
  107. package/dist/streamUtils.js +46 -13
  108. package/dist/streamUtils.js.map +1 -1
  109. package/dist/sync.d.ts +22 -14
  110. package/dist/sync.d.ts.map +1 -1
  111. package/dist/sync.js +143 -125
  112. package/dist/sync.js.map +1 -1
  113. package/dist/tests/IncomingMessagesQueue.test.d.ts +2 -0
  114. package/dist/tests/IncomingMessagesQueue.test.d.ts.map +1 -0
  115. package/dist/tests/IncomingMessagesQueue.test.js +437 -0
  116. package/dist/tests/IncomingMessagesQueue.test.js.map +1 -0
  117. package/dist/tests/PeerState.test.js +6 -94
  118. package/dist/tests/PeerState.test.js.map +1 -1
  119. package/dist/tests/PriorityBasedMessageQueue.test.js +14 -14
  120. package/dist/tests/PriorityBasedMessageQueue.test.js.map +1 -1
  121. package/dist/tests/StoreQueue.test.d.ts +2 -0
  122. package/dist/tests/StoreQueue.test.d.ts.map +1 -0
  123. package/dist/tests/StoreQueue.test.js +208 -0
  124. package/dist/tests/StoreQueue.test.js.map +1 -0
  125. package/dist/tests/SyncStateManager.test.js +3 -1
  126. package/dist/tests/SyncStateManager.test.js.map +1 -1
  127. package/dist/tests/account.test.js +9 -9
  128. package/dist/tests/account.test.js.map +1 -1
  129. package/dist/tests/coStream.test.js +1 -1
  130. package/dist/tests/coStream.test.js.map +1 -1
  131. package/dist/tests/coValueCore.test.js +208 -1
  132. package/dist/tests/coValueCore.test.js.map +1 -1
  133. package/dist/tests/coValueCoreLoadingState.test.js +2 -2
  134. package/dist/tests/coValueCoreLoadingState.test.js.map +1 -1
  135. package/dist/tests/group.addMember.test.js.map +1 -1
  136. package/dist/tests/group.removeMember.test.js +1 -1
  137. package/dist/tests/group.removeMember.test.js.map +1 -1
  138. package/dist/tests/messagesTestUtils.js +1 -1
  139. package/dist/tests/messagesTestUtils.js.map +1 -1
  140. package/dist/tests/sync.auth.test.js +23 -15
  141. package/dist/tests/sync.auth.test.js.map +1 -1
  142. package/dist/tests/sync.invite.test.js +10 -16
  143. package/dist/tests/sync.invite.test.js.map +1 -1
  144. package/dist/tests/sync.load.test.js +52 -50
  145. package/dist/tests/sync.load.test.js.map +1 -1
  146. package/dist/tests/sync.mesh.test.js +173 -56
  147. package/dist/tests/sync.mesh.test.js.map +1 -1
  148. package/dist/tests/sync.peerReconciliation.test.js +42 -32
  149. package/dist/tests/sync.peerReconciliation.test.js.map +1 -1
  150. package/dist/tests/sync.storage.test.js +162 -62
  151. package/dist/tests/sync.storage.test.js.map +1 -1
  152. package/dist/tests/sync.storageAsync.test.d.ts +2 -0
  153. package/dist/tests/sync.storageAsync.test.d.ts.map +1 -0
  154. package/dist/tests/sync.storageAsync.test.js +361 -0
  155. package/dist/tests/sync.storageAsync.test.js.map +1 -0
  156. package/dist/tests/sync.test.js +16 -21
  157. package/dist/tests/sync.test.js.map +1 -1
  158. package/dist/tests/sync.upload.test.js +28 -25
  159. package/dist/tests/sync.upload.test.js.map +1 -1
  160. package/dist/tests/testStorage.d.ts +12 -0
  161. package/dist/tests/testStorage.d.ts.map +1 -0
  162. package/dist/tests/testStorage.js +151 -0
  163. package/dist/tests/testStorage.js.map +1 -0
  164. package/dist/tests/testUtils.d.ts +20 -15
  165. package/dist/tests/testUtils.d.ts.map +1 -1
  166. package/dist/tests/testUtils.js +79 -45
  167. package/dist/tests/testUtils.js.map +1 -1
  168. package/package.json +2 -2
  169. package/src/IncomingMessagesQueue.ts +142 -0
  170. package/src/PeerState.ts +11 -110
  171. package/src/PriorityBasedMessageQueue.ts +13 -5
  172. package/src/SyncStateManager.ts +1 -1
  173. package/src/coValueCore/coValueCore.ts +100 -66
  174. package/src/coValueCore/verifiedState.ts +91 -21
  175. package/src/coValues/group.ts +2 -4
  176. package/src/config.ts +26 -0
  177. package/src/crypto/WasmCrypto.ts +3 -1
  178. package/src/exports.ts +20 -27
  179. package/src/localNode.ts +27 -12
  180. package/src/storage/StoreQueue.ts +56 -0
  181. package/src/storage/index.ts +5 -0
  182. package/src/storage/knownState.ts +88 -0
  183. package/src/storage/sqlite/client.ts +180 -0
  184. package/src/storage/sqlite/index.ts +19 -0
  185. package/src/storage/sqlite/sqliteMigrations.ts +44 -0
  186. package/src/storage/sqlite/types.ts +7 -0
  187. package/src/storage/sqliteAsync/client.ts +179 -0
  188. package/src/storage/sqliteAsync/index.ts +25 -0
  189. package/src/storage/sqliteAsync/types.ts +8 -0
  190. package/src/storage/storageAsync.ts +367 -0
  191. package/src/storage/storageSync.ts +343 -0
  192. package/src/storage/syncUtils.ts +50 -0
  193. package/src/storage/types.ts +162 -0
  194. package/src/streamUtils.ts +61 -19
  195. package/src/sync.ts +191 -160
  196. package/src/tests/IncomingMessagesQueue.test.ts +626 -0
  197. package/src/tests/PeerState.test.ts +6 -118
  198. package/src/tests/PriorityBasedMessageQueue.test.ts +18 -14
  199. package/src/tests/StoreQueue.test.ts +283 -0
  200. package/src/tests/SyncStateManager.test.ts +4 -1
  201. package/src/tests/account.test.ts +11 -12
  202. package/src/tests/coStream.test.ts +1 -3
  203. package/src/tests/coValueCore.test.ts +270 -1
  204. package/src/tests/coValueCoreLoadingState.test.ts +2 -2
  205. package/src/tests/group.addMember.test.ts +1 -0
  206. package/src/tests/group.removeMember.test.ts +2 -8
  207. package/src/tests/messagesTestUtils.ts +2 -2
  208. package/src/tests/sync.auth.test.ts +24 -14
  209. package/src/tests/sync.invite.test.ts +11 -17
  210. package/src/tests/sync.load.test.ts +53 -49
  211. package/src/tests/sync.mesh.test.ts +198 -56
  212. package/src/tests/sync.peerReconciliation.test.ts +44 -34
  213. package/src/tests/sync.storage.test.ts +231 -64
  214. package/src/tests/sync.storageAsync.test.ts +486 -0
  215. package/src/tests/sync.test.ts +17 -23
  216. package/src/tests/sync.upload.test.ts +29 -24
  217. package/src/tests/testStorage.ts +216 -0
  218. package/src/tests/testUtils.ts +89 -54
@@ -1,9 +1,10 @@
1
- import { beforeEach, describe, expect, test } from "vitest";
2
- import { SyncMessagesLog, loadCoValueOrFail, setupTestNode } from "./testUtils";
1
+ import { assert, afterEach, beforeEach, describe, expect, test, vi, } from "vitest";
2
+ import { emptyKnownState } from "../exports";
3
+ import { SyncMessagesLog, TEST_NODE_CONFIG, createTestMetricReader, loadCoValueOrFail, setupTestNode, tearDownTestMetricReader, waitFor, } from "./testUtils";
4
+ // We want to simulate a real world communication that happens asynchronously
5
+ TEST_NODE_CONFIG.withAsyncPeers = true;
3
6
  describe("client with storage syncs with server", () => {
4
- let jazzCloud = setupTestNode({
5
- isSyncServer: true,
6
- });
7
+ let jazzCloud;
7
8
  beforeEach(async () => {
8
9
  SyncMessagesLog.clear();
9
10
  jazzCloud = setupTestNode({
@@ -13,7 +14,7 @@ describe("client with storage syncs with server", () => {
13
14
  test("coValue loading (empty storage)", async () => {
14
15
  const client = setupTestNode();
15
16
  client.connectToSyncServer();
16
- client.addStoragePeer();
17
+ client.addStorage();
17
18
  const group = jazzCloud.node.createGroup();
18
19
  const map = group.createMap();
19
20
  map.set("hello", "world", "trusting");
@@ -28,27 +29,29 @@ describe("client with storage syncs with server", () => {
28
29
  "storage -> client | KNOWN Map sessions: empty",
29
30
  "client -> server | LOAD Map sessions: empty",
30
31
  "server -> client | CONTENT Group header: true new: After: 0 New: 3",
31
- "client -> server | KNOWN Group sessions: header/3",
32
- "client -> storage | LOAD Group sessions: header/3",
33
32
  "server -> client | CONTENT Map header: true new: After: 0 New: 1",
34
- "storage -> client | KNOWN Group sessions: empty",
35
- "client -> server | KNOWN Map sessions: header/1",
33
+ "client -> server | KNOWN Group sessions: header/3",
36
34
  "client -> storage | CONTENT Group header: true new: After: 0 New: 3",
37
- "storage -> client | KNOWN Group sessions: header/3",
35
+ "client -> server | KNOWN Map sessions: header/1",
38
36
  "client -> storage | CONTENT Map header: true new: After: 0 New: 1",
39
- "storage -> client | KNOWN Map sessions: header/1",
40
37
  ]
41
38
  `);
42
39
  });
43
40
  test("coValue loading (synced storage)", async () => {
44
41
  const client = setupTestNode();
45
42
  client.connectToSyncServer();
46
- const { storage } = client.addStoragePeer();
47
- // biome-ignore lint/suspicious/noExplicitAny: Super ugly, might have unintended side effects
48
- storage.coValues = jazzCloud.node.coValues;
43
+ const { storage } = client.addStorage();
49
44
  const group = jazzCloud.node.createGroup();
50
45
  const map = group.createMap();
51
46
  map.set("hello", "world", "trusting");
47
+ await loadCoValueOrFail(client.node, map.id);
48
+ client.restart();
49
+ client.connectToSyncServer();
50
+ client.addStorage({
51
+ ourName: "client",
52
+ storage,
53
+ });
54
+ SyncMessagesLog.clear();
52
55
  const mapOnClient = await loadCoValueOrFail(client.node, map.id);
53
56
  expect(mapOnClient.get("hello")).toEqual("world");
54
57
  expect(SyncMessagesLog.getMessages({
@@ -58,20 +61,16 @@ describe("client with storage syncs with server", () => {
58
61
  [
59
62
  "client -> storage | LOAD Map sessions: empty",
60
63
  "storage -> client | CONTENT Group header: true new: After: 0 New: 3",
61
- "client -> storage | KNOWN Group sessions: header/3",
62
64
  "client -> server | LOAD Group sessions: header/3",
63
65
  "storage -> client | CONTENT Map header: true new: After: 0 New: 1",
64
- "server -> client | KNOWN Group sessions: header/3",
65
- "client -> storage | KNOWN Map sessions: header/1",
66
66
  "client -> server | LOAD Map sessions: header/1",
67
- "server -> client | KNOWN Map sessions: header/1",
68
67
  ]
69
68
  `);
70
69
  });
71
70
  test("coValue with parent groups loading", async () => {
72
71
  const client = setupTestNode();
73
72
  client.connectToSyncServer();
74
- client.addStoragePeer();
73
+ client.addStorage();
75
74
  const group = jazzCloud.node.createGroup();
76
75
  const parentGroup = jazzCloud.node.createGroup();
77
76
  parentGroup.addMember("everyone", "reader");
@@ -90,28 +89,21 @@ describe("client with storage syncs with server", () => {
90
89
  "storage -> client | KNOWN Map sessions: empty",
91
90
  "client -> server | LOAD Map sessions: empty",
92
91
  "server -> client | CONTENT ParentGroup header: true new: After: 0 New: 6",
93
- "client -> server | KNOWN ParentGroup sessions: header/6",
94
- "client -> storage | LOAD ParentGroup sessions: header/6",
95
92
  "server -> client | CONTENT Group header: true new: After: 0 New: 5",
96
- "storage -> client | KNOWN ParentGroup sessions: empty",
97
- "client -> server | KNOWN Group sessions: header/5",
98
- "client -> storage | LOAD Group sessions: header/5",
99
93
  "server -> client | CONTENT Map header: true new: After: 0 New: 1",
100
- "storage -> client | KNOWN Group sessions: empty",
94
+ "client -> server | KNOWN ParentGroup sessions: header/6",
101
95
  "client -> storage | CONTENT ParentGroup header: true new: After: 0 New: 6",
102
- "client -> server | KNOWN Map sessions: header/1",
103
- "storage -> client | KNOWN ParentGroup sessions: header/6",
96
+ "client -> server | KNOWN Group sessions: header/5",
104
97
  "client -> storage | CONTENT Group header: true new: After: 0 New: 5",
105
- "storage -> client | KNOWN Group sessions: header/5",
98
+ "client -> server | KNOWN Map sessions: header/1",
106
99
  "client -> storage | CONTENT Map header: true new: After: 0 New: 1",
107
- "storage -> client | KNOWN Map sessions: header/1",
108
100
  ]
109
101
  `);
110
102
  });
111
103
  test("updating a coValue while offline", async () => {
112
104
  const client = setupTestNode();
113
105
  client.connectToSyncServer();
114
- client.addStoragePeer();
106
+ client.addStorage();
115
107
  const group = jazzCloud.node.createGroup();
116
108
  const map = group.createMap();
117
109
  map.set("hello", "world", "trusting");
@@ -129,31 +121,36 @@ describe("client with storage syncs with server", () => {
129
121
  })).toMatchInlineSnapshot(`
130
122
  [
131
123
  "client -> server | LOAD Group sessions: header/3",
132
- "server -> client | KNOWN Group sessions: header/3",
133
124
  "client -> server | LOAD Map sessions: header/1",
125
+ "server -> client | CONTENT Group header: true new: After: 0 New: 3",
126
+ "server -> client | CONTENT Map header: true new: After: 0 New: 2",
134
127
  "server -> client | CONTENT Map header: false new: After: 1 New: 1",
128
+ "client -> server | KNOWN Group sessions: header/3",
129
+ "client -> storage | CONTENT Group header: true new: After: 0 New: 3",
135
130
  "client -> server | KNOWN Map sessions: header/2",
136
- "client -> storage | CONTENT Map header: false new: After: 1 New: 1",
137
- "server -> client | CONTENT Map header: false new: After: 1 New: 1",
138
- "storage -> client | KNOWN Map sessions: header/2",
131
+ "client -> storage | CONTENT Map header: true new: After: 0 New: 2",
139
132
  "client -> server | KNOWN Map sessions: header/2",
133
+ "client -> storage | CONTENT Map header: false new: After: 1 New: 1",
140
134
  ]
141
135
  `);
142
136
  });
143
137
  });
144
138
  describe("client syncs with a server with storage", () => {
145
- let jazzCloud = setupTestNode({
146
- isSyncServer: true,
147
- });
139
+ let jazzCloud;
140
+ let metricReader;
148
141
  beforeEach(async () => {
149
142
  SyncMessagesLog.clear();
143
+ metricReader = createTestMetricReader();
150
144
  jazzCloud = setupTestNode({
151
145
  isSyncServer: true,
152
146
  });
153
- jazzCloud.addStoragePeer({
147
+ jazzCloud.addStorage({
154
148
  ourName: "server",
155
149
  });
156
150
  });
151
+ afterEach(() => {
152
+ tearDownTestMetricReader();
153
+ });
157
154
  test("coValue uploading", async () => {
158
155
  const client = setupTestNode();
159
156
  client.connectToSyncServer();
@@ -169,44 +166,147 @@ describe("client syncs with a server with storage", () => {
169
166
  })).toMatchInlineSnapshot(`
170
167
  [
171
168
  "client -> server | CONTENT Group header: true new: After: 0 New: 3",
172
- "server -> client | KNOWN Group sessions: header/3",
173
- "server -> storage | LOAD Group sessions: header/3",
174
169
  "client -> server | CONTENT Map header: true new: After: 0 New: 1",
175
- "storage -> server | KNOWN Group sessions: empty",
176
- "server -> client | KNOWN Map sessions: header/1",
177
- "server -> storage | LOAD Map sessions: header/1",
178
- "storage -> server | KNOWN Map sessions: empty",
170
+ "server -> client | KNOWN Group sessions: header/3",
179
171
  "server -> storage | CONTENT Group header: true new: After: 0 New: 3",
180
- "storage -> server | KNOWN Group sessions: header/3",
172
+ "server -> client | KNOWN Map sessions: header/1",
181
173
  "server -> storage | CONTENT Map header: true new: After: 0 New: 1",
182
- "storage -> server | KNOWN Map sessions: header/1",
183
174
  ]
184
175
  `);
185
176
  });
186
- test.skip("server restarts", async () => {
177
+ test("loading a large coValue from storage", async () => {
187
178
  const client = setupTestNode();
188
- client.addStoragePeer();
179
+ client.connectToSyncServer({
180
+ syncServer: jazzCloud.node,
181
+ });
182
+ const { storage } = client.addStorage({
183
+ ourName: "client",
184
+ });
189
185
  const group = client.node.createGroup();
190
- const map = group.createMap();
191
- map.set("hello", "world", "trusting");
192
- await map.core.waitForSync();
193
- jazzCloud.restart();
186
+ group.addMember("everyone", "writer");
187
+ const largeMap = group.createMap();
188
+ // Generate a large amount of data (about 100MB)
189
+ const dataSize = 1 * 200 * 1024;
190
+ const chunkSize = 1024; // 1KB chunks
191
+ const chunks = dataSize / chunkSize;
192
+ const value = Buffer.alloc(chunkSize, `value$`).toString("base64");
193
+ for (let i = 0; i < chunks; i++) {
194
+ const key = `key${i}`;
195
+ largeMap.set(key, value, "trusting");
196
+ }
197
+ await largeMap.core.waitForSync();
198
+ // Test streaming counter during initial sync
199
+ // The streaming counter should be 0 after the sync is complete
200
+ const streamingCounterAfterSync = await metricReader.getMetricValue("jazz.storage.streaming");
201
+ expect(streamingCounterAfterSync).toBe(0);
202
+ expect(SyncMessagesLog.getMessages({
203
+ Group: group.core,
204
+ Map: largeMap.core,
205
+ })).toMatchInlineSnapshot(`
206
+ [
207
+ "client -> storage | CONTENT Group header: true new: After: 0 New: 5",
208
+ "client -> server | CONTENT Group header: true new: After: 0 New: 5",
209
+ "client -> storage | CONTENT Map header: true new: expectContentUntil: header/200",
210
+ "client -> storage | CONTENT Map header: false new: After: 0 New: 73",
211
+ "client -> storage | CONTENT Map header: false new: After: 73 New: 73",
212
+ "client -> storage | CONTENT Map header: false new: After: 146 New: 54",
213
+ "client -> server | CONTENT Map header: true new: expectContentUntil: header/200",
214
+ "client -> server | CONTENT Map header: false new: After: 0 New: 73",
215
+ "client -> server | CONTENT Map header: false new: After: 73 New: 73",
216
+ "client -> server | CONTENT Map header: false new: After: 146 New: 54",
217
+ "server -> client | KNOWN Group sessions: header/5",
218
+ "server -> storage | CONTENT Group header: true new: After: 0 New: 5",
219
+ "server -> client | KNOWN Map sessions: header/0",
220
+ "server -> storage | CONTENT Map header: true new: expectContentUntil: header/200",
221
+ "server -> client | KNOWN Map sessions: header/73",
222
+ "server -> storage | CONTENT Map header: false new: After: 0 New: 73",
223
+ "server -> client | KNOWN Map sessions: header/146",
224
+ "server -> storage | CONTENT Map header: false new: After: 73 New: 73",
225
+ "server -> client | KNOWN Map sessions: header/200",
226
+ "server -> storage | CONTENT Map header: false new: After: 146 New: 54",
227
+ ]
228
+ `);
194
229
  SyncMessagesLog.clear();
195
- client.addStoragePeer();
196
- const mapOnServer = await loadCoValueOrFail(jazzCloud.node, map.id);
197
- expect(mapOnServer.get("hello")).toEqual("world");
230
+ client.restart();
231
+ client.connectToSyncServer({
232
+ ourName: "client",
233
+ syncServer: jazzCloud.node,
234
+ });
235
+ client.addStorage({
236
+ ourName: "client",
237
+ storage,
238
+ });
239
+ // Test streaming counter before loading the large coValue
240
+ const streamingCounterBeforeLoad = await metricReader.getMetricValue("jazz.storage.streaming");
241
+ expect(streamingCounterBeforeLoad).toBe(0);
242
+ const promise = loadCoValueOrFail(client.node, largeMap.id);
243
+ // Test streaming counter during loading (should be 1 during streaming)
244
+ const streamingCounterDuringLoad = await metricReader.getMetricValue("jazz.storage.streaming");
245
+ expect(streamingCounterDuringLoad).toBe(1);
246
+ const mapOnClient2 = await promise;
247
+ await mapOnClient2.core.waitForSync();
248
+ // Test streaming counter after loading is complete (should be 0)
249
+ await waitFor(async () => {
250
+ const streamingCounterAfterLoad = await metricReader.getMetricValue("jazz.storage.streaming");
251
+ expect(streamingCounterAfterLoad).toBe(0);
252
+ });
198
253
  expect(SyncMessagesLog.getMessages({
199
254
  Group: group.core,
200
- Map: map.core,
255
+ Map: largeMap.core,
201
256
  })).toMatchInlineSnapshot(`
202
257
  [
203
- "server -> storage | LOAD Group sessions: header/3",
204
- "storage -> server | KNOWN Map sessions: header/1",
205
- "storage -> server | KNOWN Group sessions: empty",
206
- "server -> storage | LOAD Map sessions: header/1",
207
- "storage -> server | KNOWN Map sessions: empty",
258
+ "client -> storage | LOAD Map sessions: empty",
259
+ "storage -> client | CONTENT Group header: true new: After: 0 New: 5",
260
+ "client -> server | LOAD Group sessions: header/5",
261
+ "storage -> client | CONTENT Map header: true new: After: 0 New: 73 expectContentUntil: header/200",
262
+ "client -> server | LOAD Map sessions: header/200",
263
+ "server -> client | KNOWN Group sessions: header/5",
264
+ "server -> client | KNOWN Map sessions: header/200",
265
+ "storage -> client | CONTENT Map header: true new: After: 73 New: 73",
266
+ "storage -> client | CONTENT Map header: true new: After: 146 New: 54",
208
267
  ]
209
268
  `);
210
269
  });
270
+ test("storing stale data should not compromise the signatures", async () => {
271
+ const client = setupTestNode();
272
+ client.connectToSyncServer({
273
+ syncServer: jazzCloud.node,
274
+ });
275
+ const { storage } = client.addStorage({
276
+ ourName: "client",
277
+ });
278
+ const group = client.node.createGroup();
279
+ group.addMember("everyone", "writer");
280
+ const largeMap = group.createMap();
281
+ // Generate a large amount of data (about 100MB)
282
+ const dataSize = 1 * 200 * 1024;
283
+ const chunkSize = 1024; // 1KB chunks
284
+ const chunks = dataSize / chunkSize;
285
+ const value = Buffer.alloc(chunkSize, `value$`).toString("base64");
286
+ for (let i = 0; i < chunks; i++) {
287
+ const key = `key${i}`;
288
+ largeMap.set(key, value, "trusting");
289
+ }
290
+ await largeMap.core.waitForSync();
291
+ const newContentChunks = largeMap.core.verified.newContentSince(emptyKnownState(largeMap.id));
292
+ assert(newContentChunks);
293
+ assert(newContentChunks.length > 1);
294
+ const correctionSpy = vi.fn();
295
+ client.node.storage?.store(newContentChunks.slice(1, 2), correctionSpy);
296
+ expect(correctionSpy).not.toHaveBeenCalled();
297
+ client.restart();
298
+ client.connectToSyncServer({
299
+ ourName: "client",
300
+ syncServer: jazzCloud.node,
301
+ });
302
+ client.addStorage({
303
+ ourName: "client",
304
+ storage,
305
+ });
306
+ const mapOnClient2 = await loadCoValueOrFail(client.node, largeMap.id);
307
+ await waitFor(async () => {
308
+ expect(mapOnClient2.core.knownState()).toEqual(largeMap.core.knownState());
309
+ });
310
+ });
211
311
  });
212
312
  //# sourceMappingURL=sync.storage.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.storage.test.js","sourceRoot":"","sources":["../../src/tests/sync.storage.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.storage.test.js","sourceRoot":"","sources":["../../src/tests/sync.storage.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sync.storageAsync.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.storageAsync.test.d.ts","sourceRoot":"","sources":["../../src/tests/sync.storageAsync.test.ts"],"names":[],"mappings":""}