cojson 0.13.30 → 0.14.0

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 (43) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +15 -2
  3. package/dist/coValueCore/coValueCore.d.ts.map +1 -1
  4. package/dist/coValueCore/coValueCore.js +1 -4
  5. package/dist/coValueCore/coValueCore.js.map +1 -1
  6. package/dist/coValues/group.d.ts.map +1 -1
  7. package/dist/coValues/group.js +4 -1
  8. package/dist/coValues/group.js.map +1 -1
  9. package/dist/localNode.d.ts.map +1 -1
  10. package/dist/localNode.js +1 -1
  11. package/dist/localNode.js.map +1 -1
  12. package/dist/permissions.d.ts.map +1 -1
  13. package/dist/permissions.js +0 -12
  14. package/dist/permissions.js.map +1 -1
  15. package/dist/tests/group.inheritance.test.d.ts +2 -0
  16. package/dist/tests/group.inheritance.test.d.ts.map +1 -0
  17. package/dist/tests/group.inheritance.test.js +235 -0
  18. package/dist/tests/group.inheritance.test.js.map +1 -0
  19. package/dist/tests/group.invite.test.d.ts +2 -0
  20. package/dist/tests/group.invite.test.d.ts.map +1 -0
  21. package/dist/tests/group.invite.test.js +214 -0
  22. package/dist/tests/group.invite.test.js.map +1 -0
  23. package/dist/tests/group.removeMember.test.js +22 -0
  24. package/dist/tests/group.removeMember.test.js.map +1 -1
  25. package/dist/tests/group.roleOf.test.d.ts +2 -0
  26. package/dist/tests/group.roleOf.test.d.ts.map +1 -0
  27. package/dist/tests/group.roleOf.test.js +275 -0
  28. package/dist/tests/group.roleOf.test.js.map +1 -0
  29. package/dist/tests/group.test.js +1 -505
  30. package/dist/tests/group.test.js.map +1 -1
  31. package/dist/tests/permissions.test.js +0 -33
  32. package/dist/tests/permissions.test.js.map +1 -1
  33. package/package.json +1 -1
  34. package/src/coValueCore/coValueCore.ts +1 -6
  35. package/src/coValues/group.ts +4 -1
  36. package/src/localNode.ts +2 -1
  37. package/src/permissions.ts +0 -18
  38. package/src/tests/group.inheritance.test.ts +418 -0
  39. package/src/tests/group.invite.test.ts +350 -0
  40. package/src/tests/group.removeMember.test.ts +48 -0
  41. package/src/tests/group.roleOf.test.ts +450 -0
  42. package/src/tests/group.test.ts +0 -852
  43. package/src/tests/permissions.test.ts +0 -52
@@ -0,0 +1,235 @@
1
+ import { describe, expect, test } from "vitest";
2
+ import { createThreeConnectedNodes, createTwoConnectedNodes, loadCoValueOrFail, } from "./testUtils";
3
+ describe("extend", () => {
4
+ test("inherited writer roles should work correctly", async () => {
5
+ const { node1, node2 } = await createTwoConnectedNodes("server", "server");
6
+ const group = node1.node.createGroup();
7
+ group.addMember(await loadCoValueOrFail(node1.node, node2.accountID), "writer");
8
+ const childGroup = node1.node.createGroup();
9
+ childGroup.extend(group);
10
+ childGroup.addMember(await loadCoValueOrFail(node1.node, node2.accountID), "writeOnly");
11
+ const map = childGroup.createMap();
12
+ map.set("test", "Written from the admin");
13
+ await map.core.waitForSync();
14
+ const mapOnNode2 = await loadCoValueOrFail(node2.node, map.id);
15
+ // The writer role should be able to see the edits from the admin
16
+ expect(mapOnNode2.get("test")).toEqual("Written from the admin");
17
+ });
18
+ test("a user should be able to extend a group when his role on the parent group is writer", async () => {
19
+ const { node1, node2 } = await createTwoConnectedNodes("server", "server");
20
+ const group = node1.node.createGroup();
21
+ group.addMember(await loadCoValueOrFail(node1.node, node2.accountID), "writer");
22
+ await group.core.waitForSync();
23
+ const groupOnNode2 = await loadCoValueOrFail(node2.node, group.id);
24
+ const childGroup = node2.node.createGroup();
25
+ childGroup.extend(groupOnNode2);
26
+ const map = childGroup.createMap();
27
+ map.set("test", "Written from node2");
28
+ await map.core.waitForSync();
29
+ await childGroup.core.waitForSync();
30
+ const mapOnNode2 = await loadCoValueOrFail(node2.node, map.id);
31
+ expect(mapOnNode2.get("test")).toEqual("Written from node2");
32
+ });
33
+ test("a user should be able to extend a group when his role on the parent group is reader", async () => {
34
+ const { node1, node2 } = await createTwoConnectedNodes("server", "server");
35
+ const group = node1.node.createGroup();
36
+ group.addMember(await loadCoValueOrFail(node1.node, node2.accountID), "reader");
37
+ await group.core.waitForSync();
38
+ const groupOnNode2 = await loadCoValueOrFail(node2.node, group.id);
39
+ const childGroup = node2.node.createGroup();
40
+ childGroup.extend(groupOnNode2);
41
+ const map = childGroup.createMap();
42
+ map.set("test", "Written from node2");
43
+ await map.core.waitForSync();
44
+ await childGroup.core.waitForSync();
45
+ const mapOnNode2 = await loadCoValueOrFail(node2.node, map.id);
46
+ expect(mapOnNode2.get("test")).toEqual("Written from node2");
47
+ });
48
+ test("a user should be able to extend a group when his role on the parent group is writeOnly", async () => {
49
+ const { node1, node2 } = await createTwoConnectedNodes("server", "server");
50
+ const group = node1.node.createGroup();
51
+ group.addMember(await loadCoValueOrFail(node1.node, node2.accountID), "writeOnly");
52
+ await group.core.waitForSync();
53
+ const groupOnNode2 = await loadCoValueOrFail(node2.node, group.id);
54
+ const childGroup = node2.node.createGroup();
55
+ childGroup.extend(groupOnNode2);
56
+ const map = childGroup.createMap();
57
+ map.set("test", "Written from node2");
58
+ await map.core.waitForSync();
59
+ await childGroup.core.waitForSync();
60
+ const mapOnNode2 = await loadCoValueOrFail(node2.node, map.id);
61
+ expect(mapOnNode2.get("test")).toEqual("Written from node2");
62
+ });
63
+ test("self-extend a group should not break anything", async () => {
64
+ const { node1 } = await createTwoConnectedNodes("server", "server");
65
+ const group = node1.node.createGroup();
66
+ group.extend(group);
67
+ const map = group.createMap();
68
+ map.set("test", "Hello!");
69
+ expect(map.get("test")).toEqual("Hello!");
70
+ });
71
+ test("should not break when introducing extend cycles", async () => {
72
+ const { node1 } = await createTwoConnectedNodes("server", "server");
73
+ const group = node1.node.createGroup();
74
+ const group2 = node1.node.createGroup();
75
+ const group3 = node1.node.createGroup();
76
+ group.extend(group2);
77
+ group2.extend(group3);
78
+ group3.extend(group);
79
+ const map = group.createMap();
80
+ map.set("test", "Hello!");
81
+ expect(map.get("test")).toEqual("Hello!");
82
+ });
83
+ test("a writerInvite role should not be inherited", async () => {
84
+ const { node1, node2 } = await createTwoConnectedNodes("server", "server");
85
+ const group = node1.node.createGroup();
86
+ group.addMember(await loadCoValueOrFail(node1.node, node2.accountID), "writerInvite");
87
+ const childGroup = node1.node.createGroup();
88
+ childGroup.extend(group);
89
+ expect(childGroup.roleOf(node2.accountID)).toEqual(undefined);
90
+ });
91
+ });
92
+ describe("unextend", () => {
93
+ test("should revoke roles", async () => {
94
+ const { node1, node2, node3 } = await createThreeConnectedNodes("server", "server", "server");
95
+ // `parentGroup` has `alice` as a writer
96
+ const parentGroup = node1.node.createGroup();
97
+ const alice = await loadCoValueOrFail(node1.node, node2.accountID);
98
+ parentGroup.addMember(alice, "writer");
99
+ // `alice`'s role in `parentGroup` is `"writer"`
100
+ expect(parentGroup.roleOf(alice.id)).toBe("writer");
101
+ // `childGroup` has `bob` as a reader
102
+ const childGroup = node1.node.createGroup();
103
+ const bob = await loadCoValueOrFail(node1.node, node3.accountID);
104
+ childGroup.addMember(bob, "reader");
105
+ // `bob`'s role in `childGroup` is `"reader"`
106
+ expect(childGroup.roleOf(bob.id)).toBe("reader");
107
+ // `childGroup` has `parentGroup`'s members (in this case, `alice` as a writer)
108
+ childGroup.extend(parentGroup);
109
+ expect(childGroup.roleOf(alice.id)).toBe("writer");
110
+ // `childGroup` no longer has `parentGroup`'s members
111
+ await childGroup.revokeExtend(parentGroup);
112
+ expect(childGroup.roleOf(bob.id)).toBe("reader");
113
+ expect(childGroup.roleOf(alice.id)).toBe(undefined);
114
+ });
115
+ test("should do nothing if applied to a group that is not extended", async () => {
116
+ const { node1, node2, node3 } = await createThreeConnectedNodes("server", "server", "server");
117
+ const parentGroup = node1.node.createGroup();
118
+ const alice = await loadCoValueOrFail(node1.node, node2.accountID);
119
+ parentGroup.addMember(alice, "writer");
120
+ const childGroup = node1.node.createGroup();
121
+ const bob = await loadCoValueOrFail(node1.node, node3.accountID);
122
+ childGroup.addMember(bob, "reader");
123
+ await childGroup.revokeExtend(parentGroup);
124
+ expect(childGroup.roleOf(bob.id)).toBe("reader");
125
+ expect(childGroup.roleOf(alice.id)).toBe(undefined);
126
+ });
127
+ test("should not throw if the revokeExtend is called twice", async () => {
128
+ const { node1, node2, node3 } = await createThreeConnectedNodes("server", "server", "server");
129
+ const parentGroup = node1.node.createGroup();
130
+ const alice = await loadCoValueOrFail(node1.node, node2.accountID);
131
+ parentGroup.addMember(alice, "writer");
132
+ const childGroup = node1.node.createGroup();
133
+ const bob = await loadCoValueOrFail(node1.node, node3.accountID);
134
+ childGroup.addMember(bob, "reader");
135
+ childGroup.extend(parentGroup);
136
+ await childGroup.revokeExtend(parentGroup);
137
+ await childGroup.revokeExtend(parentGroup);
138
+ expect(childGroup.roleOf(bob.id)).toBe("reader");
139
+ expect(childGroup.roleOf(alice.id)).toBe(undefined);
140
+ });
141
+ });
142
+ describe("extend with role mapping", () => {
143
+ test("mapping to writer should add the ability to write", async () => {
144
+ const { node1, node2 } = await createTwoConnectedNodes("server", "server");
145
+ const group = node1.node.createGroup();
146
+ group.addMember(await loadCoValueOrFail(node1.node, node2.accountID), "reader");
147
+ const childGroup = node1.node.createGroup();
148
+ childGroup.extend(group, "writer");
149
+ expect(childGroup.roleOf(node2.accountID)).toEqual("writer");
150
+ const map = childGroup.createMap();
151
+ map.set("test", "Written from the admin");
152
+ await map.core.waitForSync();
153
+ const mapOnNode2 = await loadCoValueOrFail(node2.node, map.id);
154
+ expect(mapOnNode2.get("test")).toEqual("Written from the admin");
155
+ mapOnNode2.set("test", "Written from the inherited role");
156
+ expect(mapOnNode2.get("test")).toEqual("Written from the inherited role");
157
+ await mapOnNode2.core.waitForSync();
158
+ expect(map.get("test")).toEqual("Written from the inherited role");
159
+ });
160
+ test("mapping to reader should remove the ability to write", async () => {
161
+ const { node1, node2 } = await createTwoConnectedNodes("server", "server");
162
+ const group = node1.node.createGroup();
163
+ group.addMember(await loadCoValueOrFail(node1.node, node2.accountID), "writer");
164
+ const childGroup = node1.node.createGroup();
165
+ childGroup.extend(group, "reader");
166
+ expect(childGroup.roleOf(node2.accountID)).toEqual("reader");
167
+ const map = childGroup.createMap();
168
+ map.set("test", "Written from the admin");
169
+ await map.core.waitForSync();
170
+ const mapOnNode2 = await loadCoValueOrFail(node2.node, map.id);
171
+ expect(mapOnNode2.get("test")).toEqual("Written from the admin");
172
+ mapOnNode2.set("test", "Should not be visible");
173
+ await mapOnNode2.core.waitForSync();
174
+ expect(map.get("test")).toEqual("Written from the admin");
175
+ expect(mapOnNode2.get("test")).toEqual("Written from the admin");
176
+ });
177
+ test("mapping to admin should add the ability to add members", async () => {
178
+ const { node1, node2, node3 } = await createThreeConnectedNodes("server", "server", "server");
179
+ const group = node1.node.createGroup();
180
+ group.addMember(await loadCoValueOrFail(node1.node, node2.accountID), "reader");
181
+ const childGroup = node1.node.createGroup();
182
+ childGroup.extend(group, "admin");
183
+ expect(childGroup.roleOf(node2.accountID)).toEqual("admin");
184
+ await childGroup.core.waitForSync();
185
+ const childGroupOnNode2 = await loadCoValueOrFail(node2.node, childGroup.id);
186
+ childGroupOnNode2.addMember(await loadCoValueOrFail(node2.node, node3.accountID), "reader");
187
+ expect(childGroupOnNode2.roleOf(node3.accountID)).toEqual("reader");
188
+ });
189
+ test("mapping to reader should remove the ability to add members", async () => {
190
+ const { node1, node2, node3 } = await createThreeConnectedNodes("server", "server", "server");
191
+ const group = node1.node.createGroup();
192
+ group.addMember(await loadCoValueOrFail(node1.node, node2.accountID), "admin");
193
+ const childGroup = node1.node.createGroup();
194
+ childGroup.extend(group, "reader");
195
+ expect(childGroup.roleOf(node2.accountID)).toEqual("reader");
196
+ await childGroup.core.waitForSync();
197
+ const childGroupOnNode2 = await loadCoValueOrFail(node2.node, childGroup.id);
198
+ const accountToAdd = await loadCoValueOrFail(node2.node, node3.accountID);
199
+ expect(() => {
200
+ childGroupOnNode2.addMember(accountToAdd, "reader");
201
+ }).toThrow();
202
+ expect(childGroupOnNode2.roleOf(node3.accountID)).toEqual(undefined);
203
+ });
204
+ test("non-inheritable roles should not give access to the child group when role mapping is used", async () => {
205
+ const { node1, node2 } = await createTwoConnectedNodes("server", "server");
206
+ const group = node1.node.createGroup();
207
+ group.addMember(await loadCoValueOrFail(node1.node, node2.accountID), "writeOnly");
208
+ const childGroup = node1.node.createGroup();
209
+ childGroup.extend(group, "reader");
210
+ expect(childGroup.roleOf(node2.accountID)).toEqual(undefined);
211
+ const map = childGroup.createMap();
212
+ map.set("test", "Written from the admin");
213
+ await map.core.waitForSync();
214
+ const mapOnNode2 = await loadCoValueOrFail(node2.node, map.id);
215
+ expect(mapOnNode2.get("test")).toEqual(undefined);
216
+ });
217
+ test("invite roles should not give write access to the child group when role mapping is used", async () => {
218
+ const { node1, node2 } = await createTwoConnectedNodes("server", "server");
219
+ const group = node1.node.createGroup();
220
+ group.addMember(await loadCoValueOrFail(node1.node, node2.accountID), "writerInvite");
221
+ const childGroup = node1.node.createGroup();
222
+ childGroup.extend(group, "writer");
223
+ expect(childGroup.roleOf(node2.accountID)).toEqual(undefined);
224
+ const map = childGroup.createMap();
225
+ map.set("test", "Written from the admin");
226
+ await map.core.waitForSync();
227
+ const mapOnNode2 = await loadCoValueOrFail(node2.node, map.id);
228
+ expect(mapOnNode2.get("test")).toEqual("Written from the admin"); // The invite roles have access to the readKey hence can read the values on inherited groups
229
+ mapOnNode2.set("test", "Should not be visible");
230
+ await mapOnNode2.core.waitForSync();
231
+ expect(map.get("test")).toEqual("Written from the admin");
232
+ expect(mapOnNode2.get("test")).toEqual("Written from the admin");
233
+ });
234
+ });
235
+ //# sourceMappingURL=group.inheritance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.inheritance.test.js","sourceRoot":"","sources":["../../src/tests/group.inheritance.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,IAAI,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE3E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,CAAC,SAAS,CACb,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EACpD,QAAQ,CACT,CAAC;QAEF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,UAAU,CAAC,SAAS,CAClB,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EACpD,WAAW,CACZ,CAAC;QAEF,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QACnC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QAE1C,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAE7B,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAE/D,iEAAiE;QACjE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;QACrG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE3E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,CAAC,SAAS,CACb,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EACpD,QAAQ,CACT,CAAC;QAEF,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAE/B,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAEnE,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAEhC,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QACnC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAEtC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAE/D,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;QACrG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE3E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,CAAC,SAAS,CACb,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EACpD,QAAQ,CACT,CAAC;QAEF,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAE/B,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAEnE,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAEhC,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QACnC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAEtC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAE/D,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wFAAwF,EAAE,KAAK,IAAI,EAAE;QACxG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE3E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,CAAC,SAAS,CACb,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EACpD,WAAW,CACZ,CAAC;QAEF,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAE/B,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAEnE,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAEhC,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QACnC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAEtC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAE/D,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEpE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEpB,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAC9B,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE1B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEpE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAExC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAErB,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAC9B,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE1B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE3E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,CAAC,SAAS,CACb,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EACpD,cAAc,CACf,CAAC;QAEF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,IAAI,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,yBAAyB,CAC7D,QAAQ,EACR,QAAQ,EACR,QAAQ,CACT,CAAC;QAEF,wCAAwC;QACxC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACnE,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvC,gDAAgD;QAChD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEpD,qCAAqC;QACrC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACjE,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACpC,6CAA6C;QAC7C,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEjD,+EAA+E;QAC/E,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC/B,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEnD,qDAAqD;QACrD,MAAM,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,yBAAyB,CAC7D,QAAQ,EACR,QAAQ,EACR,QAAQ,CACT,CAAC;QAEF,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACnE,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACjE,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACpC,MAAM,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,yBAAyB,CAC7D,QAAQ,EACR,QAAQ,EACR,QAAQ,CACT,CAAC;QAEF,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACnE,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACjE,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAEpC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAE/B,MAAM,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAI,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE3E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,CAAC,SAAS,CACb,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EACpD,QAAQ,CACT,CAAC;QAEF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEnC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE7D,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QACnC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QAE1C,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAE7B,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAE/D,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACjE,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;QAC1D,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;QAE1E,MAAM,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE3E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,CAAC,SAAS,CACb,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EACpD,QAAQ,CACT,CAAC;QAEF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEnC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE7D,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QACnC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QAE1C,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAE7B,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAE/D,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAEjE,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAEhD,MAAM,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAC1D,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,yBAAyB,CAC7D,QAAQ,EACR,QAAQ,EACR,QAAQ,CACT,CAAC;QAEF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,CAAC,SAAS,CACb,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EACpD,QAAQ,CACT,CAAC;QAEF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAElC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE5D,MAAM,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,MAAM,iBAAiB,GAAG,MAAM,iBAAiB,CAC/C,KAAK,CAAC,IAAI,EACV,UAAU,CAAC,EAAE,CACd,CAAC;QAEF,iBAAiB,CAAC,SAAS,CACzB,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EACpD,QAAQ,CACT,CAAC;QAEF,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,yBAAyB,CAC7D,QAAQ,EACR,QAAQ,EACR,QAAQ,CACT,CAAC;QAEF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,CAAC,SAAS,CACb,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EACpD,OAAO,CACR,CAAC;QAEF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEnC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE7D,MAAM,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,MAAM,iBAAiB,GAAG,MAAM,iBAAiB,CAC/C,KAAK,CAAC,IAAI,EACV,UAAU,CAAC,EAAE,CACd,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAE1E,MAAM,CAAC,GAAG,EAAE;YACV,iBAAiB,CAAC,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAEb,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;QAC3G,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE3E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,CAAC,SAAS,CACb,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EACpD,WAAW,CACZ,CAAC;QAEF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEnC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE9D,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QACnC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QAE1C,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAE7B,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAE/D,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wFAAwF,EAAE,KAAK,IAAI,EAAE;QACxG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE3E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,CAAC,SAAS,CACb,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EACpD,cAAc,CACf,CAAC;QAEF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEnC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE9D,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QACnC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QAE1C,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAE7B,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAE/D,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC,4FAA4F;QAE9J,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAEhD,MAAM,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAC1D,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=group.invite.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.invite.test.d.ts","sourceRoot":"","sources":["../../src/tests/group.invite.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,214 @@
1
+ import { beforeEach, describe, expect, test } from "vitest";
2
+ import { expectMap } from "../coValue.js";
3
+ import { LogLevel, logger } from "../logger.js";
4
+ import { SyncMessagesLog, loadCoValueOrFail, setupTestAccount, setupTestNode, waitFor, } from "./testUtils.js";
5
+ beforeEach(async () => {
6
+ SyncMessagesLog.clear();
7
+ setupTestNode({ isSyncServer: true });
8
+ });
9
+ describe("Group invites", () => {
10
+ test("should be able to accept a reader invite", async () => {
11
+ const admin = await setupTestAccount({
12
+ connected: true,
13
+ });
14
+ const newMember = await setupTestAccount({
15
+ connected: true,
16
+ });
17
+ const group = admin.node.createGroup();
18
+ const person = group.createMap({
19
+ name: "John Doe",
20
+ });
21
+ const inviteSecret = group.createInvite("reader");
22
+ const personOnNewMemberNode = await loadCoValueOrFail(newMember.node, person.id);
23
+ expect(personOnNewMemberNode.get("name")).toEqual(undefined);
24
+ await newMember.node.acceptInvite(group.id, inviteSecret);
25
+ await waitFor(() => {
26
+ expect(expectMap(personOnNewMemberNode.core.getCurrentContent()).get("name")).toEqual("John Doe");
27
+ });
28
+ const groupOnNewMemberNode = await loadCoValueOrFail(newMember.node, group.id);
29
+ expect(groupOnNewMemberNode.roleOf(newMember.accountID)).toEqual("reader");
30
+ });
31
+ test("should be able to accept a writer invite", async () => {
32
+ const admin = await setupTestAccount({
33
+ connected: true,
34
+ });
35
+ const newMember = await setupTestAccount({
36
+ connected: true,
37
+ });
38
+ const group = admin.node.createGroup();
39
+ const person = group.createMap({
40
+ name: "John Doe",
41
+ });
42
+ const inviteSecret = group.createInvite("writer");
43
+ const personOnNewMemberNode = await loadCoValueOrFail(newMember.node, person.id);
44
+ expect(personOnNewMemberNode.get("name")).toEqual(undefined);
45
+ await newMember.node.acceptInvite(group.id, inviteSecret);
46
+ await waitFor(() => {
47
+ expect(expectMap(personOnNewMemberNode.core.getCurrentContent()).get("name")).toEqual("John Doe");
48
+ });
49
+ const groupOnNewMemberNode = await loadCoValueOrFail(newMember.node, group.id);
50
+ expect(groupOnNewMemberNode.roleOf(newMember.accountID)).toEqual("writer");
51
+ // Verify write access
52
+ personOnNewMemberNode.set("name", "Jane Doe");
53
+ expect(personOnNewMemberNode.get("name")).toEqual("Jane Doe");
54
+ });
55
+ test("should be able to accept a writeOnly invite", async () => {
56
+ const admin = await setupTestAccount({
57
+ connected: true,
58
+ });
59
+ const newMember = await setupTestAccount({
60
+ connected: true,
61
+ });
62
+ const group = admin.node.createGroup();
63
+ const person = group.createMap({
64
+ name: "John Doe",
65
+ });
66
+ const inviteSecret = group.createInvite("writeOnly");
67
+ const personOnNewMemberNode = await loadCoValueOrFail(newMember.node, person.id);
68
+ expect(personOnNewMemberNode.get("name")).toEqual(undefined);
69
+ await newMember.node.acceptInvite(group.id, inviteSecret);
70
+ const groupOnNewMemberNode = await loadCoValueOrFail(newMember.node, group.id);
71
+ expect(groupOnNewMemberNode.roleOf(newMember.accountID)).toEqual("writeOnly");
72
+ // Should not be able to read
73
+ expect(personOnNewMemberNode.get("name")).toEqual(undefined);
74
+ // Should be able to write
75
+ personOnNewMemberNode.set("name", "Jane Doe");
76
+ expect(personOnNewMemberNode.get("name")).toEqual("Jane Doe");
77
+ });
78
+ test("should be able to accept an admin invite", async () => {
79
+ const admin = await setupTestAccount({
80
+ connected: true,
81
+ });
82
+ const newMember = await setupTestAccount({
83
+ connected: true,
84
+ });
85
+ const group = admin.node.createGroup();
86
+ const person = group.createMap({
87
+ name: "John Doe",
88
+ });
89
+ const inviteSecret = group.createInvite("admin");
90
+ const personOnNewMemberNode = await loadCoValueOrFail(newMember.node, person.id);
91
+ expect(personOnNewMemberNode.get("name")).toEqual(undefined);
92
+ await newMember.node.acceptInvite(group.id, inviteSecret);
93
+ await waitFor(() => {
94
+ expect(expectMap(personOnNewMemberNode.core.getCurrentContent()).get("name")).toEqual("John Doe");
95
+ });
96
+ const groupOnNewMemberNode = await loadCoValueOrFail(newMember.node, group.id);
97
+ expect(groupOnNewMemberNode.roleOf(newMember.accountID)).toEqual("admin");
98
+ // Verify admin access by adding another member
99
+ const reader = await setupTestAccount({
100
+ connected: true,
101
+ });
102
+ const readerOnNewMemberNode = await loadCoValueOrFail(newMember.node, reader.accountID);
103
+ groupOnNewMemberNode.addMember(readerOnNewMemberNode, "reader");
104
+ const personOnReaderNode = await loadCoValueOrFail(reader.node, person.id);
105
+ await waitFor(() => {
106
+ expect(expectMap(personOnReaderNode.core.getCurrentContent()).get("name")).toEqual("John Doe");
107
+ });
108
+ });
109
+ test("should not be able to accept an invite twice", async () => {
110
+ const admin = await setupTestAccount({
111
+ connected: true,
112
+ });
113
+ const newMember = await setupTestAccount({
114
+ connected: true,
115
+ });
116
+ const group = admin.node.createGroup();
117
+ const inviteSecret = group.createInvite("reader");
118
+ await newMember.node.acceptInvite(group.id, inviteSecret);
119
+ const groupOnNewMemberNode = await loadCoValueOrFail(newMember.node, group.id);
120
+ expect(groupOnNewMemberNode.roleOf(newMember.accountID)).toEqual("reader");
121
+ // Try to accept the same invite again
122
+ await newMember.node.acceptInvite(group.id, inviteSecret);
123
+ expect(groupOnNewMemberNode.roleOf(newMember.accountID)).toEqual("reader");
124
+ });
125
+ test("invites should not downgrade the role of an existing member", async () => {
126
+ const admin = await setupTestAccount({
127
+ connected: true,
128
+ });
129
+ const member = await setupTestAccount({
130
+ connected: true,
131
+ });
132
+ const group = admin.node.createGroup();
133
+ const person = group.createMap({
134
+ name: "John Doe",
135
+ });
136
+ // First add member as admin
137
+ const memberAccount = await loadCoValueOrFail(member.node, member.accountID);
138
+ group.addMember(memberAccount, "admin");
139
+ // Create a reader invite
140
+ const inviteSecret = group.createInvite("reader");
141
+ // Try to accept the lower-privilege invite
142
+ await member.node.acceptInvite(group.id, inviteSecret);
143
+ const groupOnMemberNode = await loadCoValueOrFail(member.node, group.id);
144
+ expect(groupOnMemberNode.roleOf(member.accountID)).toEqual("admin");
145
+ });
146
+ logger.setLevel(LogLevel.DEBUG);
147
+ test("invites should be able to upgrade the role of an existing member", async () => {
148
+ const admin = await setupTestAccount({
149
+ connected: true,
150
+ });
151
+ const member = await setupTestAccount({
152
+ connected: true,
153
+ });
154
+ const group = admin.node.createGroup();
155
+ // First add member as reader
156
+ const memberAccount = await loadCoValueOrFail(member.node, member.accountID);
157
+ group.addMember(memberAccount, "reader");
158
+ // Create an admin invite
159
+ const inviteSecret = group.createInvite("admin");
160
+ const groupOnMemberNode = await loadCoValueOrFail(member.node, group.id);
161
+ // Accept the higher-privilege invite
162
+ await member.node.acceptInvite(groupOnMemberNode.id, inviteSecret);
163
+ expect(groupOnMemberNode.roleOf(member.accountID)).toEqual("admin");
164
+ // Verify admin access by adding another member
165
+ const reader = await setupTestAccount({
166
+ connected: true,
167
+ });
168
+ const readerAccount = await loadCoValueOrFail(member.node, reader.accountID);
169
+ groupOnMemberNode.addMember(readerAccount, "reader");
170
+ });
171
+ test("invites should work on revoked members", async () => {
172
+ const admin = await setupTestAccount({
173
+ connected: true,
174
+ });
175
+ const member = await setupTestAccount({
176
+ connected: true,
177
+ });
178
+ const group = admin.node.createGroup();
179
+ const person = group.createMap({
180
+ name: "John Doe",
181
+ });
182
+ // First add member as reader
183
+ const memberAccount = await loadCoValueOrFail(member.node, member.accountID);
184
+ group.addMember(memberAccount, "reader");
185
+ await group.removeMember(memberAccount);
186
+ // Create a new reader invite
187
+ const inviteSecret = group.createInvite("reader");
188
+ const groupOnMemberNode = await loadCoValueOrFail(member.node, group.id);
189
+ // Accept the invite after being revoked
190
+ await member.node.acceptInvite(groupOnMemberNode.id, inviteSecret);
191
+ expect(groupOnMemberNode.roleOf(member.accountID)).toEqual("reader");
192
+ // Verify read access is restored
193
+ const personOnMemberNode = await loadCoValueOrFail(member.node, person.id);
194
+ expect(personOnMemberNode.get("name")).toEqual("John Doe");
195
+ });
196
+ test("should not be able to accept an invalid invite", async () => {
197
+ const admin = await setupTestAccount({
198
+ connected: true,
199
+ });
200
+ const newMember = await setupTestAccount({
201
+ connected: true,
202
+ });
203
+ const group = admin.node.createGroup();
204
+ const invalidInvite = "inviteSecret_zinvalid";
205
+ try {
206
+ await newMember.node.acceptInvite(group.id, invalidInvite);
207
+ throw new Error("Should not be able to accept invalid invite");
208
+ }
209
+ catch (e) {
210
+ expect(e).toBeDefined();
211
+ }
212
+ });
213
+ });
214
+ //# sourceMappingURL=group.invite.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.invite.test.js","sourceRoot":"","sources":["../../src/tests/group.invite.test.ts"],"names":[],"mappings":"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"}
@@ -129,5 +129,27 @@ describe("Group.removeMember", () => {
129
129
  await groupOnReaderNode.removeMember(otherMemberOnReaderNode);
130
130
  expect(groupOnReaderNode.roleOf(otherMember.accountID)).toEqual("writer");
131
131
  });
132
+ test("removing a member when inheriting a group where the user lacks read rights", async () => {
133
+ const admin = await setupTestAccount({
134
+ connected: true,
135
+ });
136
+ const childAdmin = await setupTestAccount({
137
+ connected: true,
138
+ });
139
+ const reader = await setupTestAccount({
140
+ connected: true,
141
+ });
142
+ const childAdminOnAdminNode = await loadCoValueOrFail(admin.node, childAdmin.accountID);
143
+ const readerOnAdminNode = await loadCoValueOrFail(admin.node, reader.accountID);
144
+ const group = admin.node.createGroup();
145
+ const childGroup = admin.node.createGroup();
146
+ childGroup.addMember(childAdminOnAdminNode, "admin");
147
+ childGroup.addMember(readerOnAdminNode, "reader");
148
+ childGroup.extend(group);
149
+ const readerOnChildAdminNode = await loadCoValueOrFail(childAdmin.node, reader.accountID);
150
+ const childGroupOnChildAdminNode = await loadCoValueOrFail(childAdmin.node, childGroup.id);
151
+ await childGroupOnChildAdminNode.removeMember(readerOnChildAdminNode);
152
+ expect(childGroupOnChildAdminNode.roleOf(reader.accountID)).toEqual(undefined);
153
+ });
132
154
  });
133
155
  //# sourceMappingURL=group.removeMember.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"group.removeMember.test.js","sourceRoot":"","sources":["../../src/tests/group.removeMember.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"group.removeMember.test.js","sourceRoot":"","sources":["../../src/tests/group.removeMember.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=group.roleOf.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.roleOf.test.d.ts","sourceRoot":"","sources":["../../src/tests/group.roleOf.test.ts"],"names":[],"mappings":""}