cojson 0.13.17 → 0.13.20

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 (180) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +18 -0
  3. package/dist/PeerState.d.ts +4 -1
  4. package/dist/PeerState.d.ts.map +1 -1
  5. package/dist/PeerState.js +16 -36
  6. package/dist/PeerState.js.map +1 -1
  7. package/dist/SyncStateManager.d.ts.map +1 -1
  8. package/dist/SyncStateManager.js +2 -3
  9. package/dist/SyncStateManager.js.map +1 -1
  10. package/dist/coValue.d.ts +4 -4
  11. package/dist/coValue.d.ts.map +1 -1
  12. package/dist/coValue.js +4 -4
  13. package/dist/coValue.js.map +1 -1
  14. package/dist/coValueCore/coValueCore.d.ts +143 -0
  15. package/dist/coValueCore/coValueCore.d.ts.map +1 -0
  16. package/dist/{coValueCore.js → coValueCore/coValueCore.js} +325 -253
  17. package/dist/coValueCore/coValueCore.js.map +1 -0
  18. package/dist/coValueCore/verifiedState.d.ts +65 -0
  19. package/dist/coValueCore/verifiedState.d.ts.map +1 -0
  20. package/dist/coValueCore/verifiedState.js +210 -0
  21. package/dist/coValueCore/verifiedState.js.map +1 -0
  22. package/dist/coValues/account.d.ts +8 -10
  23. package/dist/coValues/account.d.ts.map +1 -1
  24. package/dist/coValues/account.js +12 -13
  25. package/dist/coValues/account.js.map +1 -1
  26. package/dist/coValues/coList.d.ts +3 -3
  27. package/dist/coValues/coList.d.ts.map +1 -1
  28. package/dist/coValues/coList.js +6 -3
  29. package/dist/coValues/coList.js.map +1 -1
  30. package/dist/coValues/coMap.d.ts +3 -3
  31. package/dist/coValues/coMap.d.ts.map +1 -1
  32. package/dist/coValues/coMap.js +3 -3
  33. package/dist/coValues/coMap.js.map +1 -1
  34. package/dist/coValues/coPlainText.d.ts +2 -2
  35. package/dist/coValues/coPlainText.d.ts.map +1 -1
  36. package/dist/coValues/coPlainText.js +4 -4
  37. package/dist/coValues/coPlainText.js.map +1 -1
  38. package/dist/coValues/coStream.d.ts +3 -3
  39. package/dist/coValues/coStream.d.ts.map +1 -1
  40. package/dist/coValues/coStream.js +3 -3
  41. package/dist/coValues/coStream.js.map +1 -1
  42. package/dist/coValues/group.d.ts +7 -2
  43. package/dist/coValues/group.d.ts.map +1 -1
  44. package/dist/coValues/group.js +29 -26
  45. package/dist/coValues/group.js.map +1 -1
  46. package/dist/coreToCoValue.d.ts +2 -2
  47. package/dist/coreToCoValue.d.ts.map +1 -1
  48. package/dist/coreToCoValue.js +10 -14
  49. package/dist/coreToCoValue.js.map +1 -1
  50. package/dist/exports.d.ts +6 -5
  51. package/dist/exports.d.ts.map +1 -1
  52. package/dist/exports.js +3 -4
  53. package/dist/exports.js.map +1 -1
  54. package/dist/localNode.d.ts +30 -24
  55. package/dist/localNode.d.ts.map +1 -1
  56. package/dist/localNode.js +147 -173
  57. package/dist/localNode.js.map +1 -1
  58. package/dist/permissions.d.ts +2 -1
  59. package/dist/permissions.d.ts.map +1 -1
  60. package/dist/permissions.js +15 -11
  61. package/dist/permissions.js.map +1 -1
  62. package/dist/priority.d.ts +1 -1
  63. package/dist/priority.d.ts.map +1 -1
  64. package/dist/streamUtils.d.ts +5 -5
  65. package/dist/streamUtils.d.ts.map +1 -1
  66. package/dist/streamUtils.js +5 -20
  67. package/dist/streamUtils.js.map +1 -1
  68. package/dist/sync.d.ts +8 -6
  69. package/dist/sync.d.ts.map +1 -1
  70. package/dist/sync.js +121 -74
  71. package/dist/sync.js.map +1 -1
  72. package/dist/tests/PeerState.test.js +0 -31
  73. package/dist/tests/PeerState.test.js.map +1 -1
  74. package/dist/tests/SyncStateManager.test.js +41 -6
  75. package/dist/tests/SyncStateManager.test.js.map +1 -1
  76. package/dist/tests/account.test.js +16 -0
  77. package/dist/tests/account.test.js.map +1 -1
  78. package/dist/tests/coList.test.js +19 -16
  79. package/dist/tests/coList.test.js.map +1 -1
  80. package/dist/tests/coMap.test.js +12 -13
  81. package/dist/tests/coMap.test.js.map +1 -1
  82. package/dist/tests/coPlainText.test.js +9 -10
  83. package/dist/tests/coPlainText.test.js.map +1 -1
  84. package/dist/tests/coStream.test.js +22 -17
  85. package/dist/tests/coStream.test.js.map +1 -1
  86. package/dist/tests/coValueCore.test.js +22 -28
  87. package/dist/tests/coValueCore.test.js.map +1 -1
  88. package/dist/tests/coValueCoreLoadingState.test.d.ts +2 -0
  89. package/dist/tests/coValueCoreLoadingState.test.d.ts.map +1 -0
  90. package/dist/tests/{coValueState.test.js → coValueCoreLoadingState.test.js} +62 -46
  91. package/dist/tests/coValueCoreLoadingState.test.js.map +1 -0
  92. package/dist/tests/group.test.js +42 -43
  93. package/dist/tests/group.test.js.map +1 -1
  94. package/dist/tests/messagesTestUtils.d.ts +2 -2
  95. package/dist/tests/messagesTestUtils.d.ts.map +1 -1
  96. package/dist/tests/messagesTestUtils.js +1 -1
  97. package/dist/tests/messagesTestUtils.js.map +1 -1
  98. package/dist/tests/permissions.test.js +224 -292
  99. package/dist/tests/permissions.test.js.map +1 -1
  100. package/dist/tests/priority.test.js +13 -14
  101. package/dist/tests/priority.test.js.map +1 -1
  102. package/dist/tests/sync.auth.test.d.ts +2 -0
  103. package/dist/tests/sync.auth.test.d.ts.map +1 -0
  104. package/dist/tests/sync.auth.test.js +190 -0
  105. package/dist/tests/sync.auth.test.js.map +1 -0
  106. package/dist/tests/sync.load.test.js +6 -6
  107. package/dist/tests/sync.load.test.js.map +1 -1
  108. package/dist/tests/sync.mesh.test.js +25 -12
  109. package/dist/tests/sync.mesh.test.js.map +1 -1
  110. package/dist/tests/sync.peerReconciliation.test.js +19 -19
  111. package/dist/tests/sync.peerReconciliation.test.js.map +1 -1
  112. package/dist/tests/sync.storage.test.js +20 -13
  113. package/dist/tests/sync.storage.test.js.map +1 -1
  114. package/dist/tests/sync.test.js +32 -39
  115. package/dist/tests/sync.test.js.map +1 -1
  116. package/dist/tests/sync.upload.test.js +126 -37
  117. package/dist/tests/sync.upload.test.js.map +1 -1
  118. package/dist/tests/testUtils.d.ts +35 -17
  119. package/dist/tests/testUtils.d.ts.map +1 -1
  120. package/dist/tests/testUtils.js +103 -79
  121. package/dist/tests/testUtils.js.map +1 -1
  122. package/dist/typeUtils/expectGroup.js +1 -1
  123. package/dist/typeUtils/expectGroup.js.map +1 -1
  124. package/package.json +1 -1
  125. package/src/PeerState.ts +19 -40
  126. package/src/SyncStateManager.ts +2 -3
  127. package/src/coValue.ts +11 -8
  128. package/src/{coValueCore.ts → coValueCore/coValueCore.ts} +478 -422
  129. package/src/coValueCore/verifiedState.ts +376 -0
  130. package/src/coValues/account.ts +20 -25
  131. package/src/coValues/coList.ts +12 -6
  132. package/src/coValues/coMap.ts +9 -6
  133. package/src/coValues/coPlainText.ts +9 -6
  134. package/src/coValues/coStream.ts +9 -6
  135. package/src/coValues/group.ts +50 -28
  136. package/src/coreToCoValue.ts +14 -15
  137. package/src/exports.ts +9 -7
  138. package/src/localNode.ts +236 -275
  139. package/src/permissions.ts +18 -12
  140. package/src/priority.ts +1 -1
  141. package/src/streamUtils.ts +7 -34
  142. package/src/sync.ts +146 -84
  143. package/src/tests/PeerState.test.ts +0 -37
  144. package/src/tests/SyncStateManager.test.ts +56 -6
  145. package/src/tests/account.test.ts +24 -0
  146. package/src/tests/coList.test.ts +21 -15
  147. package/src/tests/coMap.test.ts +12 -13
  148. package/src/tests/coPlainText.test.ts +12 -9
  149. package/src/tests/coStream.test.ts +25 -16
  150. package/src/tests/coValueCore.test.ts +30 -27
  151. package/src/tests/{coValueState.test.ts → coValueCoreLoadingState.test.ts} +67 -57
  152. package/src/tests/group.test.ts +44 -69
  153. package/src/tests/messagesTestUtils.ts +3 -8
  154. package/src/tests/permissions.test.ts +283 -449
  155. package/src/tests/priority.test.ts +17 -13
  156. package/src/tests/sync.auth.test.ts +246 -0
  157. package/src/tests/sync.load.test.ts +7 -6
  158. package/src/tests/sync.mesh.test.ts +25 -12
  159. package/src/tests/sync.peerReconciliation.test.ts +25 -25
  160. package/src/tests/sync.storage.test.ts +20 -13
  161. package/src/tests/sync.test.ts +43 -43
  162. package/src/tests/sync.upload.test.ts +157 -37
  163. package/src/tests/testUtils.ts +143 -96
  164. package/src/typeUtils/expectGroup.ts +1 -1
  165. package/dist/CoValuesStore.d.ts +0 -14
  166. package/dist/CoValuesStore.d.ts.map +0 -1
  167. package/dist/CoValuesStore.js +0 -32
  168. package/dist/CoValuesStore.js.map +0 -1
  169. package/dist/coValueCore.d.ts +0 -142
  170. package/dist/coValueCore.d.ts.map +0 -1
  171. package/dist/coValueCore.js.map +0 -1
  172. package/dist/coValueState.d.ts +0 -34
  173. package/dist/coValueState.d.ts.map +0 -1
  174. package/dist/coValueState.js +0 -190
  175. package/dist/coValueState.js.map +0 -1
  176. package/dist/tests/coValueState.test.d.ts +0 -2
  177. package/dist/tests/coValueState.test.d.ts.map +0 -1
  178. package/dist/tests/coValueState.test.js.map +0 -1
  179. package/src/CoValuesStore.ts +0 -41
  180. package/src/coValueState.ts +0 -245
@@ -1,6 +1,6 @@
1
- import { afterEach, beforeEach, describe, expect, test, vi, } from "vitest";
1
+ import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
2
2
  import { PeerState } from "../PeerState";
3
- import { CoValueState } from "../coValueState";
3
+ import { CoValueCore } from "../coValueCore/coValueCore";
4
4
  import { createTestMetricReader, tearDownTestMetricReader } from "./testUtils";
5
5
  let metricReader;
6
6
  beforeEach(() => {
@@ -9,43 +9,46 @@ beforeEach(() => {
9
9
  afterEach(() => {
10
10
  tearDownTestMetricReader();
11
11
  });
12
- describe("CoValueState", () => {
12
+ const mockNode = {};
13
+ describe("CoValueCore loading state", () => {
13
14
  const mockCoValueId = "co_test123";
14
15
  test("should create unknown state", async () => {
15
- const state = new CoValueState(mockCoValueId);
16
+ const state = CoValueCore.fromID(mockCoValueId, mockNode);
16
17
  expect(state.id).toBe(mockCoValueId);
17
- expect(state.highLevelState).toBe("unknown");
18
+ expect(state.loadingState).toBe("unknown");
18
19
  expect(await metricReader.getMetricValue("jazz.covalues.loaded", {
19
20
  state: "unknown",
20
21
  })).toBe(1);
21
22
  });
22
23
  test("should create loading state", async () => {
23
- const state = new CoValueState(mockCoValueId);
24
+ const state = CoValueCore.fromID(mockCoValueId, mockNode);
24
25
  state.loadFromPeers([
25
26
  createMockPeerState({ id: "peer1", role: "server" }),
26
27
  createMockPeerState({ id: "peer2", role: "server" }),
27
28
  ]);
28
29
  expect(state.id).toBe(mockCoValueId);
29
- expect(state.highLevelState).toBe("loading");
30
+ expect(state.loadingState).toBe("loading");
30
31
  expect(await metricReader.getMetricValue("jazz.covalues.loaded", {
31
32
  state: "loading",
32
33
  })).toBe(1);
33
34
  });
34
35
  test("should create available state", async () => {
35
- const mockCoValue = createMockCoValueCore(mockCoValueId);
36
- const state = new CoValueState(mockCoValueId);
37
- state.internalMarkMagicallyAvailable(mockCoValue);
36
+ const mockVerified = createMockCoValueVerified(mockCoValueId);
37
+ const state = CoValueCore.fromID(mockCoValueId, mockNode);
38
+ state.internalMarkMagicallyAvailable(mockVerified);
38
39
  expect(state.id).toBe(mockCoValueId);
39
- expect(state.highLevelState).toBe("available");
40
- expect(state.core).toBe(mockCoValue);
41
- await expect(state.getCoValue()).resolves.toEqual(mockCoValue);
40
+ expect(state.loadingState).toBe("available");
41
+ expect(state.verified).toBe(mockVerified);
42
+ await expect(state.waitForAvailableOrUnavailable()).resolves.toMatchObject({
43
+ verified: mockVerified,
44
+ });
42
45
  expect(await metricReader.getMetricValue("jazz.covalues.loaded", {
43
46
  state: "available",
44
47
  })).toBe(1);
45
48
  });
46
49
  test("should handle found action", async () => {
47
- const mockCoValue = createMockCoValueCore(mockCoValueId);
48
- const state = new CoValueState(mockCoValueId);
50
+ const mockVerified = createMockCoValueVerified(mockCoValueId);
51
+ const state = CoValueCore.fromID(mockCoValueId, mockNode);
49
52
  state.loadFromPeers([
50
53
  createMockPeerState({ id: "peer1", role: "server" }),
51
54
  createMockPeerState({ id: "peer2", role: "server" }),
@@ -56,11 +59,13 @@ describe("CoValueState", () => {
56
59
  expect(await metricReader.getMetricValue("jazz.covalues.loaded", {
57
60
  state: "loading",
58
61
  })).toBe(1);
59
- const stateValuePromise = state.getCoValue();
60
- state.internalMarkMagicallyAvailable(mockCoValue);
61
- const result = await state.getCoValue();
62
- expect(result).toBe(mockCoValue);
63
- await expect(stateValuePromise).resolves.toBe(mockCoValue);
62
+ const stateValuePromise = state.waitForAvailableOrUnavailable();
63
+ state.internalMarkMagicallyAvailable(mockVerified);
64
+ const result = await state.waitForAvailableOrUnavailable();
65
+ expect(result).toMatchObject({ verified: mockVerified });
66
+ await expect(stateValuePromise).resolves.toMatchObject({
67
+ verified: mockVerified,
68
+ });
64
69
  expect(await metricReader.getMetricValue("jazz.covalues.loaded", {
65
70
  state: "available",
66
71
  })).toBe(1);
@@ -83,14 +88,16 @@ describe("CoValueState", () => {
83
88
  state.markNotFoundInPeer("peer2");
84
89
  });
85
90
  const mockPeers = [peer1, peer2];
86
- const state = new CoValueState(mockCoValueId);
91
+ const state = CoValueCore.fromID(mockCoValueId, mockNode);
87
92
  const loadPromise = state.loadFromPeers(mockPeers);
88
93
  await vi.runAllTimersAsync();
89
94
  await loadPromise;
90
95
  expect(peer1.pushOutgoingMessage).toHaveBeenCalledTimes(1);
91
96
  expect(peer2.pushOutgoingMessage).toHaveBeenCalledTimes(1);
92
- expect(state.highLevelState).toBe("unavailable");
93
- await expect(state.getCoValue()).resolves.toBe("unavailable");
97
+ expect(state.loadingState).toBe("unavailable");
98
+ await expect(state.waitForAvailableOrUnavailable()).resolves.toMatchObject({
99
+ verified: null,
100
+ });
94
101
  vi.useRealTimers();
95
102
  });
96
103
  test("should have a coValue as value property when becomes available after that have been marked as unavailable", async () => {
@@ -102,24 +109,26 @@ describe("CoValueState", () => {
102
109
  state.markNotFoundInPeer("peer1");
103
110
  });
104
111
  const mockPeers = [peer1];
105
- const state = new CoValueState(mockCoValueId);
112
+ const state = CoValueCore.fromID(mockCoValueId, mockNode);
106
113
  const loadPromise = state.loadFromPeers(mockPeers);
107
114
  await vi.runAllTimersAsync();
108
- state.internalMarkMagicallyAvailable(createMockCoValueCore(mockCoValueId));
115
+ state.internalMarkMagicallyAvailable(createMockCoValueVerified(mockCoValueId));
109
116
  await loadPromise;
110
117
  expect(peer1.pushOutgoingMessage).toHaveBeenCalledTimes(1);
111
- expect(state.highLevelState).toBe("available");
112
- await expect(state.getCoValue()).resolves.toEqual({ id: mockCoValueId });
118
+ expect(state.loadingState).toBe("available");
119
+ await expect(state.waitForAvailableOrUnavailable()).resolves.toMatchObject({
120
+ _verified: expect.any(Object),
121
+ });
113
122
  vi.useRealTimers();
114
123
  });
115
124
  test("should start sending the known state to peers when available", async () => {
116
125
  vi.useFakeTimers();
117
- const mockCoValue = createMockCoValueCore(mockCoValueId);
126
+ const mockVerified = createMockCoValueVerified(mockCoValueId);
118
127
  const peer1 = createMockPeerState({
119
128
  id: "peer1",
120
129
  role: "storage",
121
130
  }, async () => {
122
- state.markAvailable(mockCoValue, "peer1");
131
+ state.markAvailable({}, "peer1");
123
132
  });
124
133
  const peer2 = createMockPeerState({
125
134
  id: "peer2",
@@ -127,7 +136,7 @@ describe("CoValueState", () => {
127
136
  }, async () => {
128
137
  state.markNotFoundInPeer("peer2");
129
138
  });
130
- const state = new CoValueState(mockCoValueId);
139
+ const state = CoValueCore.fromID(mockCoValueId, mockNode);
131
140
  const loadPromise = state.loadFromPeers([peer1, peer2]);
132
141
  await vi.runAllTimersAsync();
133
142
  await loadPromise;
@@ -135,15 +144,17 @@ describe("CoValueState", () => {
135
144
  expect(peer2.pushOutgoingMessage).toHaveBeenCalledTimes(1);
136
145
  expect(peer2.pushOutgoingMessage).toHaveBeenCalledWith({
137
146
  action: "load",
138
- ...mockCoValue.knownState(),
147
+ ...mockVerified.knownState(),
148
+ });
149
+ expect(state.loadingState).toBe("available");
150
+ await expect(state.waitForAvailableOrUnavailable()).resolves.toMatchObject({
151
+ verified: mockVerified,
139
152
  });
140
- expect(state.highLevelState).toBe("available");
141
- await expect(state.getCoValue()).resolves.toEqual({ id: mockCoValueId });
142
153
  vi.useRealTimers();
143
154
  });
144
155
  test("should skip closed peers", async () => {
145
156
  vi.useFakeTimers();
146
- const mockCoValue = createMockCoValueCore(mockCoValueId);
157
+ const mockVerified = createMockCoValueVerified(mockCoValueId);
147
158
  const peer1 = createMockPeerState({
148
159
  id: "peer1",
149
160
  role: "storage",
@@ -154,17 +165,19 @@ describe("CoValueState", () => {
154
165
  id: "peer2",
155
166
  role: "server",
156
167
  }, async () => {
157
- state.markAvailable(mockCoValue, "peer2");
168
+ state.markAvailable({}, "peer2");
158
169
  });
159
170
  peer1.closed = true;
160
- const state = new CoValueState(mockCoValueId);
171
+ const state = CoValueCore.fromID(mockCoValueId, mockNode);
161
172
  const loadPromise = state.loadFromPeers([peer1, peer2]);
162
173
  await vi.runAllTimersAsync();
163
174
  await loadPromise;
164
175
  expect(peer1.pushOutgoingMessage).toHaveBeenCalledTimes(0);
165
176
  expect(peer2.pushOutgoingMessage).toHaveBeenCalledTimes(1);
166
- expect(state.highLevelState).toBe("available");
167
- await expect(state.getCoValue()).resolves.toEqual({ id: mockCoValueId });
177
+ expect(state.loadingState).toBe("available");
178
+ await expect(state.waitForAvailableOrUnavailable()).resolves.toMatchObject({
179
+ verified: mockVerified,
180
+ });
168
181
  vi.useRealTimers();
169
182
  });
170
183
  test("should not be stuck in loading state when not getting a response", async () => {
@@ -173,13 +186,15 @@ describe("CoValueState", () => {
173
186
  id: "peer1",
174
187
  role: "server",
175
188
  }, async () => { });
176
- const state = new CoValueState(mockCoValueId);
189
+ const state = CoValueCore.fromID(mockCoValueId, mockNode);
177
190
  const loadPromise = state.loadFromPeers([peer1]);
178
191
  await vi.runAllTimersAsync();
179
192
  await loadPromise;
180
193
  expect(peer1.pushOutgoingMessage).toHaveBeenCalledTimes(1);
181
- expect(state.highLevelState).toBe("unavailable");
182
- await expect(state.getCoValue()).resolves.toEqual("unavailable");
194
+ expect(state.loadingState).toBe("unavailable");
195
+ await expect(state.waitForAvailableOrUnavailable()).resolves.toMatchObject({
196
+ verified: null,
197
+ });
183
198
  vi.useRealTimers();
184
199
  });
185
200
  });
@@ -195,17 +210,18 @@ function createMockPeerState(peer, pushFn = () => Promise.resolve()) {
195
210
  vi.spyOn(peerState, "pushOutgoingMessage").mockImplementation(pushFn);
196
211
  return peerState;
197
212
  }
198
- function createMockCoValueCore(mockCoValueId) {
213
+ function createMockCoValueVerified(mockCoValueId) {
199
214
  // Setting the knownState as part of the prototype to simplify
200
215
  // the equality checks
201
- const mockCoValue = Object.create({
216
+ const mockCoValueVerified = Object.create({
217
+ id: mockCoValueId,
202
218
  knownState: vi.fn().mockReturnValue({
203
219
  id: mockCoValueId,
204
220
  header: true,
205
221
  sessions: {},
206
222
  }),
223
+ clone: vi.fn().mockReturnThis(),
207
224
  });
208
- mockCoValue.id = mockCoValueId;
209
- return mockCoValue;
225
+ return mockCoValueVerified;
210
226
  }
211
- //# sourceMappingURL=coValueState.test.js.map
227
+ //# sourceMappingURL=coValueCoreLoadingState.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coValueCoreLoadingState.test.js","sourceRoot":"","sources":["../../src/tests/coValueCoreLoadingState.test.ts"],"names":[],"mappings":"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"}
@@ -4,32 +4,31 @@ import { RawCoMap } from "../coValues/coMap.js";
4
4
  import { RawCoStream } from "../coValues/coStream.js";
5
5
  import { RawBinaryCoStream } from "../coValues/coStream.js";
6
6
  import { WasmCrypto } from "../crypto/WasmCrypto.js";
7
- import { LocalNode } from "../localNode.js";
8
- import { createThreeConnectedNodes, createTwoConnectedNodes, loadCoValueOrFail, randomAnonymousAccountAndSessionID, waitFor, } from "./testUtils.js";
7
+ import { createThreeConnectedNodes, createTwoConnectedNodes, loadCoValueOrFail, nodeWithRandomAgentAndSessionID, randomAgentAndSessionID, waitFor, } from "./testUtils.js";
9
8
  const Crypto = await WasmCrypto.create();
10
9
  test("Can create a RawCoMap in a group", () => {
11
- const node = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto);
10
+ const node = nodeWithRandomAgentAndSessionID();
12
11
  const group = node.createGroup();
13
12
  const map = group.createMap();
14
13
  expect(map.core.getCurrentContent().type).toEqual("comap");
15
14
  expect(map instanceof RawCoMap).toEqual(true);
16
15
  });
17
16
  test("Can create a CoList in a group", () => {
18
- const node = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto);
17
+ const node = nodeWithRandomAgentAndSessionID();
19
18
  const group = node.createGroup();
20
19
  const list = group.createList();
21
20
  expect(list.core.getCurrentContent().type).toEqual("colist");
22
21
  expect(list instanceof RawCoList).toEqual(true);
23
22
  });
24
23
  test("Can create a CoStream in a group", () => {
25
- const node = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto);
24
+ const node = nodeWithRandomAgentAndSessionID();
26
25
  const group = node.createGroup();
27
26
  const stream = group.createStream();
28
27
  expect(stream.core.getCurrentContent().type).toEqual("costream");
29
28
  expect(stream instanceof RawCoStream).toEqual(true);
30
29
  });
31
30
  test("Can create a FileStream in a group", () => {
32
- const node = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto);
31
+ const node = nodeWithRandomAgentAndSessionID();
33
32
  const group = node.createGroup();
34
33
  const stream = group.createBinaryStream();
35
34
  expect(stream.core.getCurrentContent().type).toEqual("costream");
@@ -55,7 +54,7 @@ test("Remove a member from a group where the admin role is inherited", async ()
55
54
  expect(mapOnNode3.get("test")).toEqual("Available to everyone");
56
55
  // The node1 account removes the reader from the group
57
56
  // The reader should be automatically kicked out of the child group
58
- await group.removeMember(node3.node.account);
57
+ await group.removeMember(node3.node.expectCurrentAccount("node3"));
59
58
  await group.core.waitForSync();
60
59
  // Update the map to check that node3 can't read updates anymore
61
60
  map.set("test", "Hidden to node3");
@@ -81,7 +80,7 @@ test("An admin should be able to rotate the readKey on child groups and keep acc
81
80
  // The node1 account removes the reader from the group
82
81
  // In this case we want to ensure that node1 is still able to read new coValues
83
82
  // Even if some childs are not available when the readKey is rotated
84
- await group.removeMember(node3.node.account);
83
+ await group.removeMember(node3.node.expectCurrentAccount("node3"));
85
84
  await group.core.waitForSync();
86
85
  const map = childGroup.createMap();
87
86
  map.set("test", "Available to node1");
@@ -103,7 +102,7 @@ test("An admin should be able to rotate the readKey on child groups even if it w
103
102
  // The node1 account removes the reader from the group
104
103
  // In this case we want to ensure that node1 is still able to read new coValues
105
104
  // Even if some childs are not available when the readKey is rotated
106
- await group.removeMember(node3.node.account);
105
+ await group.removeMember(node3.node.expectCurrentAccount("node3"));
107
106
  await group.core.waitForSync();
108
107
  const map = childGroup.createMap();
109
108
  map.set("test", "Available to node1");
@@ -127,7 +126,7 @@ test("An admin should be able to rotate the readKey on child groups even if it w
127
126
  // The node1 account removes the reader from the group
128
127
  // In this case we want to ensure that node1 is still able to read new coValues
129
128
  // Even if some childs are not available when the readKey is rotated
130
- await group.removeMember(node3.node.account);
129
+ await group.removeMember(node3.node.expectCurrentAccount("node3"));
131
130
  await group.core.waitForSync();
132
131
  const map = childGroup.createMap();
133
132
  map.set("test", "Available to node1");
@@ -143,7 +142,7 @@ test("A user add after a key rotation should have access to the old transactions
143
142
  const map = groupOnNode2.createMap();
144
143
  map.set("test", "Written from node2");
145
144
  await map.core.waitForSync();
146
- await group.removeMember(node3.node.account);
145
+ await group.removeMember(node3.node.expectCurrentAccount("node3"));
147
146
  group.addMember(await loadCoValueOrFail(node1.node, node3.accountID), "reader");
148
147
  await group.core.waitForSync();
149
148
  const mapOnNode3 = await loadCoValueOrFail(node3.node, map.id);
@@ -154,7 +153,7 @@ test("Invites should have access to the new keys", async () => {
154
153
  const group = node1.node.createGroup();
155
154
  group.addMember(await loadCoValueOrFail(node1.node, node3.accountID), "reader");
156
155
  const invite = group.createInvite("admin");
157
- await group.removeMember(node3.node.account);
156
+ await group.removeMember(node3.node.expectCurrentAccount("node3"));
158
157
  const map = group.createMap();
159
158
  map.set("test", "Written from node1");
160
159
  await map.core.waitForSync();
@@ -233,7 +232,7 @@ describe("writeOnly", () => {
233
232
  const map = groupOnNode2.createMap();
234
233
  map.set("test", "Written from a writeOnly member");
235
234
  await map.core.waitForSync();
236
- await group.removeMember(node3.node.account);
235
+ await group.removeMember(node3.node.expectCurrentAccount("node3"));
237
236
  await group.core.waitForSync();
238
237
  map.set("test", "Updated after key rotation");
239
238
  await map.core.waitForSync();
@@ -252,8 +251,8 @@ describe("writeOnly", () => {
252
251
  map.set("test", "Written from the writeOnly member");
253
252
  await map.core.waitForSync();
254
253
  group.addMember(await loadCoValueOrFail(node1.node, node2.accountID), "writer");
255
- node2.node.coValuesStore.coValues.delete(map.id);
256
- expect(node2.node.coValuesStore.get(map.id)?.highLevelState).toBe("unknown");
254
+ node2.node.internalDeleteCoValue(map.id);
255
+ expect(node2.node.getCoValue(map.id)?.loadingState).toBe("unknown");
257
256
  const mapOnNode2 = await loadCoValueOrFail(node2.node, map.id);
258
257
  // The writer role should be able to see the edits from the admin
259
258
  expect(mapOnNode2.get("test")).toEqual("Written from the writeOnly member");
@@ -493,60 +492,60 @@ describe("extend with role mapping", () => {
493
492
  });
494
493
  describe("roleOf", () => {
495
494
  test("returns direct role assignments", () => {
496
- const node = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto);
495
+ const node = nodeWithRandomAgentAndSessionID();
497
496
  const group = node.createGroup();
498
- const account = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto).account;
499
- group.addMember(account, "writer");
500
- expect(group.roleOf(account.id)).toEqual("writer");
497
+ const [agent2] = randomAgentAndSessionID();
498
+ group.addMember(agent2, "writer");
499
+ expect(group.roleOfInternal(agent2.id)).toEqual("writer");
501
500
  });
502
501
  test("returns undefined for non-members", () => {
503
- const node = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto);
502
+ const node = nodeWithRandomAgentAndSessionID();
504
503
  const group = node.createGroup();
505
- const account = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto).account;
506
- expect(group.roleOf(account.id)).toEqual(undefined);
504
+ const [agent2] = randomAgentAndSessionID();
505
+ expect(group.roleOfInternal(agent2.id)).toEqual(undefined);
507
506
  });
508
507
  test("revoked roles return undefined", () => {
509
- const node = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto);
508
+ const node = nodeWithRandomAgentAndSessionID();
510
509
  const group = node.createGroup();
511
- const account = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto).account;
512
- group.addMember(account, "writer");
513
- group.removeMemberInternal(account);
514
- expect(group.roleOf(account.id)).toEqual(undefined);
510
+ const [agent2] = randomAgentAndSessionID();
511
+ group.addMember(agent2, "writer");
512
+ group.removeMemberInternal(agent2);
513
+ expect(group.roleOfInternal(agent2.id)).toEqual(undefined);
515
514
  });
516
515
  test("everyone role applies to all accounts", () => {
517
- const node = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto);
516
+ const node = nodeWithRandomAgentAndSessionID();
518
517
  const group = node.createGroup();
519
- const account = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto).account;
518
+ const [agent2, sessionID2] = randomAgentAndSessionID();
520
519
  group.addMemberInternal("everyone", "reader");
521
- expect(group.roleOf(account.id)).toEqual("reader");
520
+ expect(group.roleOfInternal(agent2.id)).toEqual("reader");
522
521
  });
523
522
  test("account role overrides everyone role", () => {
524
- const node = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto);
523
+ const node = nodeWithRandomAgentAndSessionID();
525
524
  const group = node.createGroup();
526
- const account = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto).account;
525
+ const [agent2, sessionID2] = randomAgentAndSessionID();
527
526
  group.addMemberInternal("everyone", "writer");
528
- group.addMember(account, "reader");
529
- expect(group.roleOf(account.id)).toEqual("reader");
527
+ group.addMember(agent2, "reader");
528
+ expect(group.roleOfInternal(agent2.id)).toEqual("reader");
530
529
  });
531
530
  test("Revoking access on everyone role should not affect existing members", () => {
532
- const node = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto);
531
+ const node = nodeWithRandomAgentAndSessionID();
533
532
  const group = node.createGroup();
534
- const account = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto).account;
533
+ const [agent2, sessionID2] = randomAgentAndSessionID();
535
534
  group.addMemberInternal("everyone", "reader");
536
- group.addMember(account, "writer");
535
+ group.addMember(agent2, "writer");
537
536
  group.removeMemberInternal("everyone");
538
- expect(group.roleOf(account.id)).toEqual("writer");
539
- expect(group.roleOf("123")).toEqual(undefined);
537
+ expect(group.roleOfInternal(agent2.id)).toEqual("writer");
538
+ expect(group.roleOfInternal("123")).toEqual(undefined);
540
539
  });
541
540
  test("Everyone role is inherited following the most permissive algorithm", () => {
542
- const node = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto);
541
+ const node = nodeWithRandomAgentAndSessionID();
543
542
  const group = node.createGroup();
544
- const account = new LocalNode(...randomAnonymousAccountAndSessionID(), Crypto).account;
543
+ const [agent2, sessionID2] = randomAgentAndSessionID();
545
544
  const parentGroup = node.createGroup();
546
545
  parentGroup.addMemberInternal("everyone", "writer");
547
546
  group.extend(parentGroup);
548
- group.addMember(account, "reader");
549
- expect(group.roleOf(account.id)).toEqual("writer");
547
+ group.addMember(agent2, "reader");
548
+ expect(group.roleOfInternal(agent2.id)).toEqual("writer");
550
549
  });
551
550
  test("roleOf should prioritize explicit account role over everyone role in same group", async () => {
552
551
  const { node1, node2 } = await createTwoConnectedNodes("server", "server");