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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +18 -0
- package/dist/PeerState.d.ts +4 -1
- package/dist/PeerState.d.ts.map +1 -1
- package/dist/PeerState.js +16 -36
- package/dist/PeerState.js.map +1 -1
- package/dist/SyncStateManager.d.ts.map +1 -1
- package/dist/SyncStateManager.js +2 -3
- package/dist/SyncStateManager.js.map +1 -1
- package/dist/coValue.d.ts +4 -4
- package/dist/coValue.d.ts.map +1 -1
- package/dist/coValue.js +4 -4
- package/dist/coValue.js.map +1 -1
- package/dist/coValueCore/coValueCore.d.ts +143 -0
- package/dist/coValueCore/coValueCore.d.ts.map +1 -0
- package/dist/{coValueCore.js → coValueCore/coValueCore.js} +325 -253
- package/dist/coValueCore/coValueCore.js.map +1 -0
- package/dist/coValueCore/verifiedState.d.ts +65 -0
- package/dist/coValueCore/verifiedState.d.ts.map +1 -0
- package/dist/coValueCore/verifiedState.js +210 -0
- package/dist/coValueCore/verifiedState.js.map +1 -0
- package/dist/coValues/account.d.ts +8 -10
- package/dist/coValues/account.d.ts.map +1 -1
- package/dist/coValues/account.js +12 -13
- package/dist/coValues/account.js.map +1 -1
- package/dist/coValues/coList.d.ts +3 -3
- package/dist/coValues/coList.d.ts.map +1 -1
- package/dist/coValues/coList.js +6 -3
- package/dist/coValues/coList.js.map +1 -1
- package/dist/coValues/coMap.d.ts +3 -3
- package/dist/coValues/coMap.d.ts.map +1 -1
- package/dist/coValues/coMap.js +3 -3
- package/dist/coValues/coMap.js.map +1 -1
- package/dist/coValues/coPlainText.d.ts +2 -2
- package/dist/coValues/coPlainText.d.ts.map +1 -1
- package/dist/coValues/coPlainText.js +4 -4
- package/dist/coValues/coPlainText.js.map +1 -1
- package/dist/coValues/coStream.d.ts +3 -3
- package/dist/coValues/coStream.d.ts.map +1 -1
- package/dist/coValues/coStream.js +3 -3
- package/dist/coValues/coStream.js.map +1 -1
- package/dist/coValues/group.d.ts +7 -2
- package/dist/coValues/group.d.ts.map +1 -1
- package/dist/coValues/group.js +29 -26
- package/dist/coValues/group.js.map +1 -1
- package/dist/coreToCoValue.d.ts +2 -2
- package/dist/coreToCoValue.d.ts.map +1 -1
- package/dist/coreToCoValue.js +10 -14
- package/dist/coreToCoValue.js.map +1 -1
- package/dist/exports.d.ts +6 -5
- package/dist/exports.d.ts.map +1 -1
- package/dist/exports.js +3 -4
- package/dist/exports.js.map +1 -1
- package/dist/localNode.d.ts +30 -24
- package/dist/localNode.d.ts.map +1 -1
- package/dist/localNode.js +147 -173
- package/dist/localNode.js.map +1 -1
- package/dist/permissions.d.ts +2 -1
- package/dist/permissions.d.ts.map +1 -1
- package/dist/permissions.js +15 -11
- package/dist/permissions.js.map +1 -1
- package/dist/priority.d.ts +1 -1
- package/dist/priority.d.ts.map +1 -1
- package/dist/streamUtils.d.ts +5 -5
- package/dist/streamUtils.d.ts.map +1 -1
- package/dist/streamUtils.js +5 -20
- package/dist/streamUtils.js.map +1 -1
- package/dist/sync.d.ts +8 -6
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +121 -74
- package/dist/sync.js.map +1 -1
- package/dist/tests/PeerState.test.js +0 -31
- package/dist/tests/PeerState.test.js.map +1 -1
- package/dist/tests/SyncStateManager.test.js +41 -6
- package/dist/tests/SyncStateManager.test.js.map +1 -1
- package/dist/tests/account.test.js +16 -0
- package/dist/tests/account.test.js.map +1 -1
- package/dist/tests/coList.test.js +19 -16
- package/dist/tests/coList.test.js.map +1 -1
- package/dist/tests/coMap.test.js +12 -13
- package/dist/tests/coMap.test.js.map +1 -1
- package/dist/tests/coPlainText.test.js +9 -10
- package/dist/tests/coPlainText.test.js.map +1 -1
- package/dist/tests/coStream.test.js +22 -17
- package/dist/tests/coStream.test.js.map +1 -1
- package/dist/tests/coValueCore.test.js +22 -28
- package/dist/tests/coValueCore.test.js.map +1 -1
- package/dist/tests/coValueCoreLoadingState.test.d.ts +2 -0
- package/dist/tests/coValueCoreLoadingState.test.d.ts.map +1 -0
- package/dist/tests/{coValueState.test.js → coValueCoreLoadingState.test.js} +62 -46
- package/dist/tests/coValueCoreLoadingState.test.js.map +1 -0
- package/dist/tests/group.test.js +42 -43
- package/dist/tests/group.test.js.map +1 -1
- package/dist/tests/messagesTestUtils.d.ts +2 -2
- package/dist/tests/messagesTestUtils.d.ts.map +1 -1
- package/dist/tests/messagesTestUtils.js +1 -1
- package/dist/tests/messagesTestUtils.js.map +1 -1
- package/dist/tests/permissions.test.js +224 -292
- package/dist/tests/permissions.test.js.map +1 -1
- package/dist/tests/priority.test.js +13 -14
- package/dist/tests/priority.test.js.map +1 -1
- package/dist/tests/sync.auth.test.d.ts +2 -0
- package/dist/tests/sync.auth.test.d.ts.map +1 -0
- package/dist/tests/sync.auth.test.js +190 -0
- package/dist/tests/sync.auth.test.js.map +1 -0
- package/dist/tests/sync.load.test.js +6 -6
- package/dist/tests/sync.load.test.js.map +1 -1
- package/dist/tests/sync.mesh.test.js +25 -12
- package/dist/tests/sync.mesh.test.js.map +1 -1
- package/dist/tests/sync.peerReconciliation.test.js +19 -19
- package/dist/tests/sync.peerReconciliation.test.js.map +1 -1
- package/dist/tests/sync.storage.test.js +20 -13
- package/dist/tests/sync.storage.test.js.map +1 -1
- package/dist/tests/sync.test.js +32 -39
- package/dist/tests/sync.test.js.map +1 -1
- package/dist/tests/sync.upload.test.js +126 -37
- package/dist/tests/sync.upload.test.js.map +1 -1
- package/dist/tests/testUtils.d.ts +35 -17
- package/dist/tests/testUtils.d.ts.map +1 -1
- package/dist/tests/testUtils.js +103 -79
- package/dist/tests/testUtils.js.map +1 -1
- package/dist/typeUtils/expectGroup.js +1 -1
- package/dist/typeUtils/expectGroup.js.map +1 -1
- package/package.json +1 -1
- package/src/PeerState.ts +19 -40
- package/src/SyncStateManager.ts +2 -3
- package/src/coValue.ts +11 -8
- package/src/{coValueCore.ts → coValueCore/coValueCore.ts} +478 -422
- package/src/coValueCore/verifiedState.ts +376 -0
- package/src/coValues/account.ts +20 -25
- package/src/coValues/coList.ts +12 -6
- package/src/coValues/coMap.ts +9 -6
- package/src/coValues/coPlainText.ts +9 -6
- package/src/coValues/coStream.ts +9 -6
- package/src/coValues/group.ts +50 -28
- package/src/coreToCoValue.ts +14 -15
- package/src/exports.ts +9 -7
- package/src/localNode.ts +236 -275
- package/src/permissions.ts +18 -12
- package/src/priority.ts +1 -1
- package/src/streamUtils.ts +7 -34
- package/src/sync.ts +146 -84
- package/src/tests/PeerState.test.ts +0 -37
- package/src/tests/SyncStateManager.test.ts +56 -6
- package/src/tests/account.test.ts +24 -0
- package/src/tests/coList.test.ts +21 -15
- package/src/tests/coMap.test.ts +12 -13
- package/src/tests/coPlainText.test.ts +12 -9
- package/src/tests/coStream.test.ts +25 -16
- package/src/tests/coValueCore.test.ts +30 -27
- package/src/tests/{coValueState.test.ts → coValueCoreLoadingState.test.ts} +67 -57
- package/src/tests/group.test.ts +44 -69
- package/src/tests/messagesTestUtils.ts +3 -8
- package/src/tests/permissions.test.ts +283 -449
- package/src/tests/priority.test.ts +17 -13
- package/src/tests/sync.auth.test.ts +246 -0
- package/src/tests/sync.load.test.ts +7 -6
- package/src/tests/sync.mesh.test.ts +25 -12
- package/src/tests/sync.peerReconciliation.test.ts +25 -25
- package/src/tests/sync.storage.test.ts +20 -13
- package/src/tests/sync.test.ts +43 -43
- package/src/tests/sync.upload.test.ts +157 -37
- package/src/tests/testUtils.ts +143 -96
- package/src/typeUtils/expectGroup.ts +1 -1
- package/dist/CoValuesStore.d.ts +0 -14
- package/dist/CoValuesStore.d.ts.map +0 -1
- package/dist/CoValuesStore.js +0 -32
- package/dist/CoValuesStore.js.map +0 -1
- package/dist/coValueCore.d.ts +0 -142
- package/dist/coValueCore.d.ts.map +0 -1
- package/dist/coValueCore.js.map +0 -1
- package/dist/coValueState.d.ts +0 -34
- package/dist/coValueState.d.ts.map +0 -1
- package/dist/coValueState.js +0 -190
- package/dist/coValueState.js.map +0 -1
- package/dist/tests/coValueState.test.d.ts +0 -2
- package/dist/tests/coValueState.test.d.ts.map +0 -1
- package/dist/tests/coValueState.test.js.map +0 -1
- package/src/CoValuesStore.ts +0 -41
- package/src/coValueState.ts +0 -245
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, test, vi
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
|
|
2
2
|
import { PeerState } from "../PeerState";
|
|
3
|
-
import {
|
|
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
|
-
|
|
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 =
|
|
16
|
+
const state = CoValueCore.fromID(mockCoValueId, mockNode);
|
|
16
17
|
expect(state.id).toBe(mockCoValueId);
|
|
17
|
-
expect(state.
|
|
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 =
|
|
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.
|
|
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
|
|
36
|
-
const state =
|
|
37
|
-
state.internalMarkMagicallyAvailable(
|
|
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.
|
|
40
|
-
expect(state.
|
|
41
|
-
await expect(state.
|
|
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
|
|
48
|
-
const state =
|
|
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.
|
|
60
|
-
state.internalMarkMagicallyAvailable(
|
|
61
|
-
const result = await state.
|
|
62
|
-
expect(result).
|
|
63
|
-
await expect(stateValuePromise).resolves.
|
|
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 =
|
|
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.
|
|
93
|
-
await expect(state.
|
|
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 =
|
|
112
|
+
const state = CoValueCore.fromID(mockCoValueId, mockNode);
|
|
106
113
|
const loadPromise = state.loadFromPeers(mockPeers);
|
|
107
114
|
await vi.runAllTimersAsync();
|
|
108
|
-
state.internalMarkMagicallyAvailable(
|
|
115
|
+
state.internalMarkMagicallyAvailable(createMockCoValueVerified(mockCoValueId));
|
|
109
116
|
await loadPromise;
|
|
110
117
|
expect(peer1.pushOutgoingMessage).toHaveBeenCalledTimes(1);
|
|
111
|
-
expect(state.
|
|
112
|
-
await expect(state.
|
|
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
|
|
126
|
+
const mockVerified = createMockCoValueVerified(mockCoValueId);
|
|
118
127
|
const peer1 = createMockPeerState({
|
|
119
128
|
id: "peer1",
|
|
120
129
|
role: "storage",
|
|
121
130
|
}, async () => {
|
|
122
|
-
state.markAvailable(
|
|
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 =
|
|
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
|
-
...
|
|
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
|
|
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(
|
|
168
|
+
state.markAvailable({}, "peer2");
|
|
158
169
|
});
|
|
159
170
|
peer1.closed = true;
|
|
160
|
-
const state =
|
|
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.
|
|
167
|
-
await expect(state.
|
|
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 =
|
|
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.
|
|
182
|
-
await expect(state.
|
|
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
|
|
213
|
+
function createMockCoValueVerified(mockCoValueId) {
|
|
199
214
|
// Setting the knownState as part of the prototype to simplify
|
|
200
215
|
// the equality checks
|
|
201
|
-
const
|
|
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
|
-
|
|
209
|
-
return mockCoValue;
|
|
225
|
+
return mockCoValueVerified;
|
|
210
226
|
}
|
|
211
|
-
//# sourceMappingURL=
|
|
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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"}
|
package/dist/tests/group.test.js
CHANGED
|
@@ -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 {
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
256
|
-
expect(node2.node.
|
|
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 =
|
|
495
|
+
const node = nodeWithRandomAgentAndSessionID();
|
|
497
496
|
const group = node.createGroup();
|
|
498
|
-
const
|
|
499
|
-
group.addMember(
|
|
500
|
-
expect(group.
|
|
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 =
|
|
502
|
+
const node = nodeWithRandomAgentAndSessionID();
|
|
504
503
|
const group = node.createGroup();
|
|
505
|
-
const
|
|
506
|
-
expect(group.
|
|
504
|
+
const [agent2] = randomAgentAndSessionID();
|
|
505
|
+
expect(group.roleOfInternal(agent2.id)).toEqual(undefined);
|
|
507
506
|
});
|
|
508
507
|
test("revoked roles return undefined", () => {
|
|
509
|
-
const node =
|
|
508
|
+
const node = nodeWithRandomAgentAndSessionID();
|
|
510
509
|
const group = node.createGroup();
|
|
511
|
-
const
|
|
512
|
-
group.addMember(
|
|
513
|
-
group.removeMemberInternal(
|
|
514
|
-
expect(group.
|
|
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 =
|
|
516
|
+
const node = nodeWithRandomAgentAndSessionID();
|
|
518
517
|
const group = node.createGroup();
|
|
519
|
-
const
|
|
518
|
+
const [agent2, sessionID2] = randomAgentAndSessionID();
|
|
520
519
|
group.addMemberInternal("everyone", "reader");
|
|
521
|
-
expect(group.
|
|
520
|
+
expect(group.roleOfInternal(agent2.id)).toEqual("reader");
|
|
522
521
|
});
|
|
523
522
|
test("account role overrides everyone role", () => {
|
|
524
|
-
const node =
|
|
523
|
+
const node = nodeWithRandomAgentAndSessionID();
|
|
525
524
|
const group = node.createGroup();
|
|
526
|
-
const
|
|
525
|
+
const [agent2, sessionID2] = randomAgentAndSessionID();
|
|
527
526
|
group.addMemberInternal("everyone", "writer");
|
|
528
|
-
group.addMember(
|
|
529
|
-
expect(group.
|
|
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 =
|
|
531
|
+
const node = nodeWithRandomAgentAndSessionID();
|
|
533
532
|
const group = node.createGroup();
|
|
534
|
-
const
|
|
533
|
+
const [agent2, sessionID2] = randomAgentAndSessionID();
|
|
535
534
|
group.addMemberInternal("everyone", "reader");
|
|
536
|
-
group.addMember(
|
|
535
|
+
group.addMember(agent2, "writer");
|
|
537
536
|
group.removeMemberInternal("everyone");
|
|
538
|
-
expect(group.
|
|
539
|
-
expect(group.
|
|
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 =
|
|
541
|
+
const node = nodeWithRandomAgentAndSessionID();
|
|
543
542
|
const group = node.createGroup();
|
|
544
|
-
const
|
|
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(
|
|
549
|
-
expect(group.
|
|
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");
|