cojson 0.18.28 → 0.18.30

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 (144) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +16 -0
  3. package/dist/PeerState.d.ts +23 -14
  4. package/dist/PeerState.d.ts.map +1 -1
  5. package/dist/PeerState.js +74 -23
  6. package/dist/PeerState.js.map +1 -1
  7. package/dist/SyncStateManager.d.ts +3 -3
  8. package/dist/SyncStateManager.d.ts.map +1 -1
  9. package/dist/SyncStateManager.js +18 -44
  10. package/dist/SyncStateManager.js.map +1 -1
  11. package/dist/coValueContentMessage.d.ts.map +1 -1
  12. package/dist/coValueContentMessage.js +2 -1
  13. package/dist/coValueContentMessage.js.map +1 -1
  14. package/dist/coValueCore/PeerKnownState.d.ts +21 -0
  15. package/dist/coValueCore/PeerKnownState.d.ts.map +1 -0
  16. package/dist/coValueCore/PeerKnownState.js +52 -0
  17. package/dist/coValueCore/PeerKnownState.js.map +1 -0
  18. package/dist/coValueCore/coValueCore.d.ts +39 -8
  19. package/dist/coValueCore/coValueCore.d.ts.map +1 -1
  20. package/dist/coValueCore/coValueCore.js +139 -40
  21. package/dist/coValueCore/coValueCore.js.map +1 -1
  22. package/dist/coValueCore/decryptTransactionChangesAndMeta.d.ts.map +1 -1
  23. package/dist/coValueCore/decryptTransactionChangesAndMeta.js +0 -5
  24. package/dist/coValueCore/decryptTransactionChangesAndMeta.js.map +1 -1
  25. package/dist/coValueCore/verifiedState.d.ts +0 -14
  26. package/dist/coValueCore/verifiedState.d.ts.map +1 -1
  27. package/dist/coValueCore/verifiedState.js +2 -32
  28. package/dist/coValueCore/verifiedState.js.map +1 -1
  29. package/dist/coValues/coList.d.ts +3 -4
  30. package/dist/coValues/coList.d.ts.map +1 -1
  31. package/dist/coValues/coList.js +4 -4
  32. package/dist/coValues/coList.js.map +1 -1
  33. package/dist/coValues/coMap.d.ts +3 -4
  34. package/dist/coValues/coMap.d.ts.map +1 -1
  35. package/dist/coValues/coMap.js +5 -4
  36. package/dist/coValues/coMap.js.map +1 -1
  37. package/dist/coValues/coStream.d.ts +3 -3
  38. package/dist/coValues/coStream.d.ts.map +1 -1
  39. package/dist/coValues/coStream.js +3 -4
  40. package/dist/coValues/coStream.js.map +1 -1
  41. package/dist/coValues/group.d.ts +3 -3
  42. package/dist/coValues/group.d.ts.map +1 -1
  43. package/dist/coValues/group.js +74 -52
  44. package/dist/coValues/group.js.map +1 -1
  45. package/dist/exports.d.ts +2 -2
  46. package/dist/exports.d.ts.map +1 -1
  47. package/dist/exports.js +2 -2
  48. package/dist/exports.js.map +1 -1
  49. package/dist/localNode.d.ts.map +1 -1
  50. package/dist/localNode.js +7 -5
  51. package/dist/localNode.js.map +1 -1
  52. package/dist/permissions.d.ts +5 -1
  53. package/dist/permissions.d.ts.map +1 -1
  54. package/dist/permissions.js +173 -109
  55. package/dist/permissions.js.map +1 -1
  56. package/dist/sync.d.ts.map +1 -1
  57. package/dist/sync.js +33 -44
  58. package/dist/sync.js.map +1 -1
  59. package/dist/tests/PeerKnownState.test.d.ts +2 -0
  60. package/dist/tests/PeerKnownState.test.d.ts.map +1 -0
  61. package/dist/tests/PeerKnownState.test.js +342 -0
  62. package/dist/tests/PeerKnownState.test.js.map +1 -0
  63. package/dist/tests/PeerState.test.js +17 -16
  64. package/dist/tests/PeerState.test.js.map +1 -1
  65. package/dist/tests/StorageApiAsync.test.js +12 -12
  66. package/dist/tests/StorageApiAsync.test.js.map +1 -1
  67. package/dist/tests/StorageApiSync.test.js +11 -11
  68. package/dist/tests/StorageApiSync.test.js.map +1 -1
  69. package/dist/tests/SyncStateManager.test.js +16 -21
  70. package/dist/tests/SyncStateManager.test.js.map +1 -1
  71. package/dist/tests/coValueCore.dependencies.test.js +59 -0
  72. package/dist/tests/coValueCore.dependencies.test.js.map +1 -1
  73. package/dist/tests/coValueCore.test.js +41 -21
  74. package/dist/tests/coValueCore.test.js.map +1 -1
  75. package/dist/tests/group.addMember.test.js +266 -219
  76. package/dist/tests/group.addMember.test.js.map +1 -1
  77. package/dist/tests/group.inheritance.test.js +12 -0
  78. package/dist/tests/group.inheritance.test.js.map +1 -1
  79. package/dist/tests/group.invite.test.js +77 -0
  80. package/dist/tests/group.invite.test.js.map +1 -1
  81. package/dist/tests/group.removeMember.test.js +64 -7
  82. package/dist/tests/group.removeMember.test.js.map +1 -1
  83. package/dist/tests/group.roleOf.test.js +14 -4
  84. package/dist/tests/group.roleOf.test.js.map +1 -1
  85. package/dist/tests/permissions.test.js +51 -202
  86. package/dist/tests/permissions.test.js.map +1 -1
  87. package/dist/tests/sync.content.test.js +2 -2
  88. package/dist/tests/sync.content.test.js.map +1 -1
  89. package/dist/tests/sync.invite.test.js +6 -6
  90. package/dist/tests/sync.load.test.js +22 -22
  91. package/dist/tests/sync.mesh.test.js +9 -9
  92. package/dist/tests/sync.storage.test.js +13 -7
  93. package/dist/tests/sync.storage.test.js.map +1 -1
  94. package/dist/tests/sync.storageAsync.test.js +3 -3
  95. package/dist/tests/sync.test.js +13 -33
  96. package/dist/tests/sync.test.js.map +1 -1
  97. package/dist/tests/sync.upload.test.js +2 -2
  98. package/package.json +3 -3
  99. package/src/PeerState.ts +86 -34
  100. package/src/SyncStateManager.ts +25 -60
  101. package/src/coValueContentMessage.ts +3 -1
  102. package/src/coValueCore/PeerKnownState.ts +74 -0
  103. package/src/coValueCore/coValueCore.ts +180 -49
  104. package/src/coValueCore/decryptTransactionChangesAndMeta.ts +0 -6
  105. package/src/coValueCore/verifiedState.ts +2 -37
  106. package/src/coValues/coList.ts +7 -7
  107. package/src/coValues/coMap.ts +9 -7
  108. package/src/coValues/coStream.ts +6 -5
  109. package/src/coValues/group.ts +99 -60
  110. package/src/exports.ts +2 -1
  111. package/src/localNode.ts +7 -5
  112. package/src/permissions.ts +204 -123
  113. package/src/sync.ts +37 -53
  114. package/src/tests/PeerKnownState.test.ts +426 -0
  115. package/src/tests/PeerState.test.ts +24 -24
  116. package/src/tests/StorageApiAsync.test.ts +12 -12
  117. package/src/tests/StorageApiSync.test.ts +11 -11
  118. package/src/tests/SyncStateManager.test.ts +23 -53
  119. package/src/tests/coValueCore.dependencies.test.ts +87 -0
  120. package/src/tests/coValueCore.test.ts +64 -22
  121. package/src/tests/group.addMember.test.ts +384 -345
  122. package/src/tests/group.inheritance.test.ts +33 -0
  123. package/src/tests/group.invite.test.ts +117 -0
  124. package/src/tests/group.removeMember.test.ts +95 -9
  125. package/src/tests/group.roleOf.test.ts +16 -4
  126. package/src/tests/permissions.test.ts +56 -295
  127. package/src/tests/sync.content.test.ts +2 -2
  128. package/src/tests/sync.invite.test.ts +6 -6
  129. package/src/tests/sync.load.test.ts +22 -22
  130. package/src/tests/sync.mesh.test.ts +9 -9
  131. package/src/tests/sync.storage.test.ts +13 -8
  132. package/src/tests/sync.storageAsync.test.ts +3 -3
  133. package/src/tests/sync.test.ts +21 -50
  134. package/src/tests/sync.upload.test.ts +2 -2
  135. package/dist/PeerKnownStates.d.ts +0 -19
  136. package/dist/PeerKnownStates.d.ts.map +0 -1
  137. package/dist/PeerKnownStates.js +0 -64
  138. package/dist/PeerKnownStates.js.map +0 -1
  139. package/dist/tests/PeerKnownStates.test.d.ts +0 -2
  140. package/dist/tests/PeerKnownStates.test.d.ts.map +0 -1
  141. package/dist/tests/PeerKnownStates.test.js +0 -77
  142. package/dist/tests/PeerKnownStates.test.js.map +0 -1
  143. package/src/PeerKnownStates.ts +0 -93
  144. package/src/tests/PeerKnownStates.test.ts +0 -99
@@ -1,118 +1,295 @@
1
1
  import { beforeEach, describe, expect, test } from "vitest";
2
- import { expectMap } from "../coValue.js";
3
- import { SyncMessagesLog, loadCoValueOrFail, setupTestAccount, setupTestNode, waitFor, } from "./testUtils.js";
2
+ import { SyncMessagesLog, loadCoValueOrFail, setupTestAccount, setupTestNode, } from "./testUtils.js";
4
3
  beforeEach(async () => {
5
4
  SyncMessagesLog.clear();
6
5
  setupTestNode({ isSyncServer: true });
7
6
  });
7
+ // [sourceRole, from, to, canGrant]
8
+ const GRANT_MATRIX = [
9
+ // Admin can grant any role to anyone
10
+ ["admin", undefined, "admin", true],
11
+ ["admin", undefined, "manager", true],
12
+ ["admin", undefined, "writer", true],
13
+ ["admin", undefined, "reader", true],
14
+ ["admin", undefined, "writeOnly", true],
15
+ ["admin", "manager", "admin", true],
16
+ ["admin", "manager", "manager", true],
17
+ ["admin", "manager", "writer", true],
18
+ ["admin", "manager", "reader", true],
19
+ ["admin", "manager", "writeOnly", true],
20
+ ["admin", "admin", "admin", true],
21
+ ["admin", "admin", "manager", false],
22
+ ["admin", "admin", "writer", false],
23
+ ["admin", "admin", "reader", false],
24
+ ["admin", "admin", "writeOnly", false],
25
+ ["admin", "writer", "admin", true],
26
+ ["admin", "writer", "manager", true],
27
+ ["admin", "writer", "writer", true],
28
+ ["admin", "writer", "reader", true],
29
+ ["admin", "writer", "writeOnly", true],
30
+ ["admin", "reader", "admin", true],
31
+ ["admin", "reader", "manager", true],
32
+ ["admin", "reader", "writer", true],
33
+ ["admin", "reader", "reader", true],
34
+ ["admin", "reader", "writeOnly", true],
35
+ ["admin", "writeOnly", "admin", true],
36
+ ["admin", "writeOnly", "manager", true],
37
+ ["admin", "writeOnly", "writer", true],
38
+ ["admin", "writeOnly", "reader", true],
39
+ ["admin", "writeOnly", "writeOnly", true],
40
+ // Manager can grant any role except admin
41
+ // Manager can downgrade any role except admin
42
+ ["manager", undefined, "admin", false],
43
+ ["manager", undefined, "manager", true],
44
+ ["manager", undefined, "writer", true],
45
+ ["manager", undefined, "reader", true],
46
+ ["manager", undefined, "writeOnly", true],
47
+ ["manager", "manager", "admin", false],
48
+ ["manager", "manager", "manager", true],
49
+ ["manager", "manager", "writer", true],
50
+ ["manager", "manager", "reader", true],
51
+ ["manager", "manager", "writeOnly", true],
52
+ ["manager", "admin", "admin", true],
53
+ ["manager", "admin", "manager", false],
54
+ ["manager", "admin", "writer", false],
55
+ ["manager", "admin", "reader", false],
56
+ ["manager", "admin", "writeOnly", false],
57
+ ["manager", "writer", "admin", false],
58
+ ["manager", "writer", "manager", true],
59
+ ["manager", "writer", "writer", true],
60
+ ["manager", "writer", "reader", true],
61
+ ["manager", "writer", "writeOnly", true],
62
+ ["manager", "reader", "admin", false],
63
+ ["manager", "reader", "manager", true],
64
+ ["manager", "reader", "writer", true],
65
+ ["manager", "reader", "reader", true],
66
+ ["manager", "reader", "writeOnly", true],
67
+ ["manager", "writeOnly", "admin", false],
68
+ ["manager", "writeOnly", "manager", true],
69
+ ["manager", "writeOnly", "writer", true],
70
+ ["manager", "writeOnly", "reader", true],
71
+ ["manager", "writeOnly", "writeOnly", true],
72
+ // Writer cannot grant any roles to anyone
73
+ ["writer", undefined, "admin", false],
74
+ ["writer", undefined, "manager", false],
75
+ ["writer", undefined, "writer", false],
76
+ ["writer", undefined, "reader", false],
77
+ ["writer", undefined, "writeOnly", false],
78
+ ["writer", "manager", "admin", false],
79
+ ["writer", "manager", "manager", false],
80
+ ["writer", "manager", "writer", false],
81
+ ["writer", "manager", "reader", false],
82
+ ["writer", "manager", "writeOnly", false],
83
+ ["writer", "admin", "admin", false],
84
+ ["writer", "admin", "manager", false],
85
+ ["writer", "admin", "writer", false],
86
+ ["writer", "admin", "reader", false],
87
+ ["writer", "admin", "writeOnly", false],
88
+ ["writer", "writer", "admin", false],
89
+ ["writer", "writer", "manager", false],
90
+ ["writer", "writer", "writer", false],
91
+ ["writer", "writer", "reader", false],
92
+ ["writer", "writer", "writeOnly", false],
93
+ ["writer", "reader", "admin", false],
94
+ ["writer", "reader", "manager", false],
95
+ ["writer", "reader", "writer", false],
96
+ ["writer", "reader", "reader", false],
97
+ ["writer", "reader", "writeOnly", false],
98
+ ["writer", "writeOnly", "manager", false],
99
+ ["writer", "writeOnly", "admin", false],
100
+ ["writer", "writeOnly", "writer", false],
101
+ ["writer", "writeOnly", "reader", false],
102
+ ["writer", "writeOnly", "writeOnly", false],
103
+ // Reader cannot grant any roles to anyone
104
+ ["reader", undefined, "admin", false],
105
+ ["reader", undefined, "manager", false],
106
+ ["reader", undefined, "writer", false],
107
+ ["reader", undefined, "reader", false],
108
+ ["reader", undefined, "writeOnly", false],
109
+ ["reader", "manager", "admin", false],
110
+ ["reader", "manager", "manager", false],
111
+ ["reader", "manager", "writer", false],
112
+ ["reader", "manager", "reader", false],
113
+ ["reader", "manager", "writeOnly", false],
114
+ ["reader", "admin", "admin", false],
115
+ ["reader", "admin", "manager", false],
116
+ ["reader", "admin", "writer", false],
117
+ ["reader", "admin", "reader", false],
118
+ ["reader", "admin", "writeOnly", false],
119
+ ["reader", "writer", "admin", false],
120
+ ["reader", "writer", "manager", false],
121
+ ["reader", "writer", "writer", false],
122
+ ["reader", "writer", "reader", false],
123
+ ["reader", "writer", "writeOnly", false],
124
+ ["reader", "reader", "admin", false],
125
+ ["reader", "reader", "manager", false],
126
+ ["reader", "reader", "writer", false],
127
+ ["reader", "reader", "reader", false],
128
+ ["reader", "reader", "writeOnly", false],
129
+ ["reader", "writeOnly", "admin", false],
130
+ ["reader", "writeOnly", "manager", false],
131
+ ["reader", "writeOnly", "writer", false],
132
+ ["reader", "writeOnly", "reader", false],
133
+ ["reader", "writeOnly", "writeOnly", false],
134
+ // WriteOnly cannot grant any roles to anyone, so spell all writeOnly combinations out:
135
+ ["writeOnly", undefined, "admin", false],
136
+ ["writeOnly", undefined, "manager", false],
137
+ ["writeOnly", undefined, "writer", false],
138
+ ["writeOnly", undefined, "reader", false],
139
+ ["writeOnly", undefined, "writeOnly", false],
140
+ ["writeOnly", "manager", "admin", false],
141
+ ["writeOnly", "manager", "manager", false],
142
+ ["writeOnly", "manager", "writer", false],
143
+ ["writeOnly", "manager", "reader", false],
144
+ ["writeOnly", "manager", "writeOnly", false],
145
+ ["writeOnly", "admin", "admin", false],
146
+ ["writeOnly", "admin", "manager", false],
147
+ ["writeOnly", "admin", "writer", false],
148
+ ["writeOnly", "admin", "reader", false],
149
+ ["writeOnly", "admin", "writeOnly", false],
150
+ ["writeOnly", "writer", "admin", false],
151
+ ["writeOnly", "writer", "manager", false],
152
+ ["writeOnly", "writer", "writer", false],
153
+ ["writeOnly", "writer", "reader", false],
154
+ ["writeOnly", "writer", "writeOnly", false],
155
+ ["writeOnly", "reader", "admin", false],
156
+ ["writeOnly", "reader", "manager", false],
157
+ ["writeOnly", "reader", "writer", false],
158
+ ["writeOnly", "reader", "reader", false],
159
+ ["writeOnly", "reader", "writeOnly", false],
160
+ ["writeOnly", "writeOnly", "admin", false],
161
+ ["writeOnly", "writeOnly", "manager", false],
162
+ ["writeOnly", "writeOnly", "writer", false],
163
+ ["writeOnly", "writeOnly", "reader", false],
164
+ ["writeOnly", "writeOnly", "writeOnly", false],
165
+ ];
8
166
  describe("Group.addMember", () => {
9
- test("an admin should be able to grant read access", async () => {
10
- const admin = await setupTestAccount({
11
- connected: true,
12
- });
13
- const reader = await setupTestAccount({
167
+ for (const [sourceRole, from, to, canGrant] of GRANT_MATRIX) {
168
+ test(`${sourceRole} should ${canGrant ? "be able" : "not be able"} to grant ${from !== undefined ? `${from} -> ` : ""}${to} role`, async () => {
169
+ const source = await setupTestAccount({
170
+ connected: true,
171
+ });
172
+ const member = await setupTestAccount({
173
+ connected: true,
174
+ });
175
+ const memberOnSourceNode = await loadCoValueOrFail(source.node, member.accountID);
176
+ const group = source.node.createGroup();
177
+ // setup initial role for member
178
+ if (from !== undefined) {
179
+ group.addMember(memberOnSourceNode, from);
180
+ }
181
+ group.addMember(await loadCoValueOrFail(source.node, source.accountID), sourceRole);
182
+ expect(group.roleOf(source.accountID)).toEqual(sourceRole);
183
+ if (canGrant || from === to) {
184
+ group.addMember(memberOnSourceNode, to);
185
+ expect(group.roleOf(member.accountID)).toEqual(to);
186
+ }
187
+ else {
188
+ expect(() => {
189
+ group.addMember(memberOnSourceNode, to);
190
+ }).toThrow(`Failed to set role ${to} to ${member.accountID} (role of current account is ${sourceRole})`);
191
+ expect(group.roleOf(member.accountID)).toEqual(from);
192
+ }
193
+ });
194
+ }
195
+ test.each(["admin", "manager", "writer", "reader", "writeOnly"])("admin should be able to self downgrade to %s role", async (role) => {
196
+ const source = await setupTestAccount({
14
197
  connected: true,
15
198
  });
16
- const group = admin.node.createGroup();
17
- const person = group.createMap({
18
- name: "John Doe",
19
- });
20
- const personOnReaderNode = await loadCoValueOrFail(reader.node, person.id);
21
- expect(personOnReaderNode.get("name")).toEqual(undefined);
22
- const readerOnAdminNode = await loadCoValueOrFail(admin.node, reader.accountID);
23
- group.addMember(readerOnAdminNode, "reader");
24
- expect(group.roleOf(reader.accountID)).toEqual("reader");
25
- await waitFor(() => {
26
- expect(expectMap(personOnReaderNode.core.getCurrentContent()).get("name")).toEqual("John Doe");
27
- });
199
+ const memberOnSourceNode = await loadCoValueOrFail(source.node, source.accountID);
200
+ const group = source.node.createGroup();
201
+ group.addMember(memberOnSourceNode, role);
202
+ expect(group.roleOf(source.accountID)).toEqual(role);
28
203
  });
29
- test("an admin should be able to grant write access", async () => {
30
- const admin = await setupTestAccount({
204
+ test.each(["admin", "manager", "reader", "writeOnly"])("writer should not be able to self upgrade to %s role", async (role) => {
205
+ const source = await setupTestAccount({
31
206
  connected: true,
32
207
  });
33
- const writer = await setupTestAccount({
34
- connected: true,
35
- });
36
- const group = admin.node.createGroup();
37
- const person = group.createMap({
38
- name: "John Doe",
39
- });
40
- const personOnWriterNode = await loadCoValueOrFail(writer.node, person.id);
41
- expect(personOnWriterNode.get("name")).toEqual(undefined);
42
- const writerOnAdminNode = await loadCoValueOrFail(admin.node, writer.accountID);
43
- group.addMember(writerOnAdminNode, "writer");
44
- expect(group.roleOf(writer.accountID)).toEqual("writer");
45
- await waitFor(() => {
46
- expect(expectMap(personOnWriterNode.core.getCurrentContent()).get("name")).toEqual("John Doe");
47
- });
48
- personOnWriterNode.set("name", "Jane Doe");
49
- expect(personOnWriterNode.get("name")).toEqual("Jane Doe");
208
+ const memberOnSourceNode = await loadCoValueOrFail(source.node, source.accountID);
209
+ const group = source.node.createGroup();
210
+ group.addMember(memberOnSourceNode, "writer");
211
+ expect(group.roleOf(source.accountID)).toEqual("writer");
212
+ expect(() => {
213
+ group.addMember(memberOnSourceNode, role);
214
+ }).toThrow(`Failed to set role ${role} to ${source.accountID} (role of current account is writer)`);
50
215
  });
51
- test("an admin should be able to grant writeOnly access", async () => {
52
- const admin = await setupTestAccount({
53
- connected: true,
54
- });
55
- const writeOnlyUser = await setupTestAccount({
216
+ test.each(["admin", "manager", "writer", "writeOnly"])("reader should not be able to self upgrade to %s role", async (role) => {
217
+ const source = await setupTestAccount({
56
218
  connected: true,
57
219
  });
58
- const group = admin.node.createGroup();
59
- const person = group.createMap({
60
- name: "John Doe",
61
- });
62
- const writeOnlyUserOnAdminNode = await loadCoValueOrFail(admin.node, writeOnlyUser.accountID);
63
- group.addMember(writeOnlyUserOnAdminNode, "writeOnly");
64
- expect(group.roleOf(writeOnlyUser.accountID)).toEqual("writeOnly");
65
- const personOnWriteOnlyNode = await loadCoValueOrFail(writeOnlyUser.node, person.id);
66
- // Should not be able to read
67
- expect(personOnWriteOnlyNode.get("name")).toEqual(undefined);
68
- // Should be able to write
69
- personOnWriteOnlyNode.set("name", "Jane Doe");
70
- expect(personOnWriteOnlyNode.get("name")).toEqual("Jane Doe");
220
+ const memberOnSourceNode = await loadCoValueOrFail(source.node, source.accountID);
221
+ const group = source.node.createGroup();
222
+ group.addMember(memberOnSourceNode, "reader");
223
+ expect(group.roleOf(source.accountID)).toEqual("reader");
224
+ expect(() => {
225
+ group.addMember(memberOnSourceNode, role);
226
+ }).toThrow(`Failed to set role ${role} to ${source.accountID} (role of current account is reader)`);
71
227
  });
72
- test("an admin should be able to grant admin access", async () => {
73
- const admin = await setupTestAccount({
228
+ test.each(["admin", "superAdmin", "writer", "reader"])("writeOnly should not be able to self upgrade to %s role", async (role) => {
229
+ const source = await setupTestAccount({
74
230
  connected: true,
75
231
  });
76
- const otherAdmin = await setupTestAccount({
232
+ const memberOnSourceNode = await loadCoValueOrFail(source.node, source.accountID);
233
+ const group = source.node.createGroup();
234
+ group.addMember(memberOnSourceNode, "writeOnly");
235
+ expect(group.roleOf(source.accountID)).toEqual("writeOnly");
236
+ expect(() => {
237
+ group.addMember(memberOnSourceNode, role);
238
+ }).toThrow(`Failed to set role ${role} to ${source.accountID} (role of current account is writeOnly)`);
239
+ });
240
+ test.each(["admin"])("%s should be able to set writer role to EVERYONE", async (role) => {
241
+ const source = await setupTestAccount({
77
242
  connected: true,
78
243
  });
79
- const reader = await setupTestAccount({
244
+ const memberOnSourceNode = await loadCoValueOrFail(source.node, source.accountID);
245
+ const group = source.node.createGroup();
246
+ group.addMember(memberOnSourceNode, role);
247
+ expect(group.roleOf(source.accountID)).toEqual(role);
248
+ group.addMember("everyone", "writer");
249
+ expect(group.roleOf("everyone")).toEqual("writer");
250
+ });
251
+ test.each(["admin"])("%s should be able to set writeOnly role to EVERYONE", async (role) => {
252
+ const source = await setupTestAccount({
80
253
  connected: true,
81
254
  });
82
- const group = admin.node.createGroup();
83
- const person = group.createMap({
84
- name: "John Doe",
85
- });
86
- const otherAdminOnAdminNode = await loadCoValueOrFail(admin.node, otherAdmin.accountID);
87
- group.addMember(otherAdminOnAdminNode, "admin");
88
- const personOnReaderNode = await loadCoValueOrFail(reader.node, person.id);
89
- expect(personOnReaderNode.get("name")).toEqual(undefined);
90
- const readerOnOtherAdminNode = await loadCoValueOrFail(otherAdmin.node, reader.accountID);
91
- group.addMember(readerOnOtherAdminNode, "reader");
92
- await waitFor(() => {
93
- expect(expectMap(personOnReaderNode.core.getCurrentContent()).get("name")).toEqual("John Doe");
94
- });
255
+ const memberOnSourceNode = await loadCoValueOrFail(source.node, source.accountID);
256
+ const group = source.node.createGroup();
257
+ group.addMember(memberOnSourceNode, role);
258
+ expect(group.roleOf(source.accountID)).toEqual(role);
259
+ group.addMember("everyone", "writeOnly");
260
+ expect(group.roleOf("everyone")).toEqual("writeOnly");
95
261
  });
96
- test("an admin should be able downgrade a writer to reader", async () => {
97
- const admin = await setupTestAccount({
262
+ test.each(["admin", "manager"])("%s should be able to set reader role to EVERYONE", async (role) => {
263
+ const source = await setupTestAccount({
98
264
  connected: true,
99
265
  });
100
- const writer = await setupTestAccount({
266
+ const memberOnSourceNode = await loadCoValueOrFail(source.node, source.accountID);
267
+ const group = source.node.createGroup();
268
+ group.addMember(memberOnSourceNode, role);
269
+ expect(group.roleOf(source.accountID)).toEqual(role);
270
+ group.addMember("everyone", "reader");
271
+ expect(group.roleOf("everyone")).toEqual("reader");
272
+ });
273
+ test.each(["writer", "reader", "writeOnly"])("%s should not be able to set any role to EVERYONE", async (role) => {
274
+ const source = await setupTestAccount({
101
275
  connected: true,
102
276
  });
103
- const group = admin.node.createGroup();
104
- const person = group.createMap({
105
- name: "John Doe",
106
- });
107
- const writerOnAdminNode = await loadCoValueOrFail(admin.node, writer.accountID);
108
- group.addMember(writerOnAdminNode, "writer");
109
- group.addMember(writerOnAdminNode, "reader");
110
- expect(group.roleOf(writer.accountID)).toEqual("reader");
111
- // Verify writer can read and write
112
- const personOnWriterNode = await loadCoValueOrFail(writer.node, person.id);
113
- // Should not be able to write
114
- personOnWriterNode.set("name", "Jane Doe");
115
- expect(personOnWriterNode.get("name")).toEqual("John Doe");
277
+ const memberOnSourceNode = await loadCoValueOrFail(source.node, source.accountID);
278
+ const group = source.node.createGroup();
279
+ group.addMember(memberOnSourceNode, role);
280
+ expect(group.roleOf(source.accountID)).toEqual(role);
281
+ expect(() => {
282
+ group.addMember("everyone", "writer");
283
+ }).toThrow(`Failed to set role writer to everyone (role of current account is ${role})`);
284
+ expect(group.roleOf("everyone")).toEqual(undefined);
285
+ expect(() => {
286
+ group.addMember("everyone", "reader");
287
+ }).toThrow(`Failed to set role reader to everyone (role of current account is ${role})`);
288
+ expect(group.roleOf("everyone")).toEqual(undefined);
289
+ expect(() => {
290
+ group.addMember("everyone", "writeOnly");
291
+ }).toThrow(`Failed to set role writeOnly to everyone (role of current account is ${role})`);
292
+ expect(group.roleOf("everyone")).toEqual(undefined);
116
293
  });
117
294
  test("an admin should be able downgrade a reader to writeOnly", async () => {
118
295
  const admin = await setupTestAccount({
@@ -133,135 +310,5 @@ describe("Group.addMember", () => {
133
310
  const personOnReaderNode = await loadCoValueOrFail(reader.node, person.id);
134
311
  expect(personOnReaderNode.get("name")).toEqual(undefined);
135
312
  });
136
- test.each(["writer", "reader", "writeOnly"])("an admin should not be able to downgrade an admin to %s", async (targetRole) => {
137
- const admin = await setupTestAccount({
138
- connected: true,
139
- });
140
- const otherAdmin = await setupTestAccount({
141
- connected: true,
142
- });
143
- const group = admin.node.createGroup();
144
- const person = group.createMap({
145
- name: "John Doe",
146
- });
147
- const otherAdminOnAdminNode = await loadCoValueOrFail(admin.node, otherAdmin.accountID);
148
- group.addMember(otherAdminOnAdminNode, "admin");
149
- // Try to downgrade other admin
150
- expect(() => group.addMember(otherAdminOnAdminNode, targetRole)).toThrow("Administrators cannot demote other administrators in a group");
151
- expect(group.roleOf(otherAdmin.accountID)).toEqual("admin");
152
- // Verify other admin still has admin access by adding a new member
153
- const reader = await setupTestAccount({
154
- connected: true,
155
- });
156
- const readerOnOtherAdminNode = await loadCoValueOrFail(otherAdmin.node, reader.accountID);
157
- group.addMember(readerOnOtherAdminNode, "reader");
158
- const personOnReaderNode = await loadCoValueOrFail(reader.node, person.id);
159
- await waitFor(() => {
160
- expect(expectMap(personOnReaderNode.core.getCurrentContent()).get("name")).toEqual("John Doe");
161
- });
162
- });
163
- test.each(["writer", "reader", "writeOnly"])("an admin should be able downgrade themselves to %s", async (targetRole) => {
164
- const admin = await setupTestAccount({
165
- connected: true,
166
- });
167
- const group = admin.node.createGroup();
168
- const account = await loadCoValueOrFail(admin.node, admin.accountID);
169
- // Downgrade self to target role
170
- group.addMember(account, targetRole);
171
- expect(group.roleOf(admin.accountID)).toEqual(targetRole);
172
- });
173
- test("an admin should be able downgrade a writeOnly to reader", async () => {
174
- const admin = await setupTestAccount({
175
- connected: true,
176
- });
177
- const writeOnlyUser = await setupTestAccount({
178
- connected: true,
179
- });
180
- const group = admin.node.createGroup();
181
- const person = group.createMap({
182
- name: "John Doe",
183
- });
184
- const writeOnlyUserOnAdminNode = await loadCoValueOrFail(admin.node, writeOnlyUser.accountID);
185
- group.addMember(writeOnlyUserOnAdminNode, "writeOnly");
186
- group.addMember(writeOnlyUserOnAdminNode, "reader");
187
- expect(group.roleOf(writeOnlyUser.accountID)).toEqual("reader");
188
- const personOnWriteOnlyNode = await loadCoValueOrFail(writeOnlyUser.node, person.id);
189
- expect(personOnWriteOnlyNode.get("name")).toEqual("John Doe");
190
- });
191
- test("a reader should not be able to add a member", async () => {
192
- const admin = await setupTestAccount({
193
- connected: true,
194
- });
195
- const reader = await setupTestAccount({
196
- connected: true,
197
- });
198
- const newUser = await setupTestAccount({
199
- connected: true,
200
- });
201
- const group = admin.node.createGroup();
202
- const readerOnAdminNode = await loadCoValueOrFail(admin.node, reader.accountID);
203
- group.addMember(readerOnAdminNode, "reader");
204
- const newUserOnReaderNode = await loadCoValueOrFail(reader.node, newUser.accountID);
205
- const groupOnReaderNode = await loadCoValueOrFail(reader.node, group.id);
206
- // Try to add member as reader
207
- try {
208
- groupOnReaderNode.addMember(newUserOnReaderNode, "reader");
209
- throw new Error("Should not be able to add member as reader");
210
- }
211
- catch (e) {
212
- expect(e).toBeDefined();
213
- }
214
- expect(groupOnReaderNode.roleOf(newUser.accountID)).toBeUndefined();
215
- });
216
- test("a writer should not be able to add a member", async () => {
217
- const admin = await setupTestAccount({
218
- connected: true,
219
- });
220
- const writer = await setupTestAccount({
221
- connected: true,
222
- });
223
- const newUser = await setupTestAccount({
224
- connected: true,
225
- });
226
- const group = admin.node.createGroup();
227
- const writerOnAdminNode = await loadCoValueOrFail(admin.node, writer.accountID);
228
- group.addMember(writerOnAdminNode, "writer");
229
- const newUserOnWriterNode = await loadCoValueOrFail(writer.node, newUser.accountID);
230
- const groupOnWriterNode = await loadCoValueOrFail(writer.node, group.id);
231
- // Try to add member as writer
232
- try {
233
- groupOnWriterNode.addMember(newUserOnWriterNode, "reader");
234
- throw new Error("Should not be able to add member as writer");
235
- }
236
- catch (e) {
237
- expect(e).toBeDefined();
238
- }
239
- expect(groupOnWriterNode.roleOf(newUser.accountID)).toBeUndefined();
240
- });
241
- test("a writeOnly should not be able to add a member", async () => {
242
- const admin = await setupTestAccount({
243
- connected: true,
244
- });
245
- const writeOnlyUser = await setupTestAccount({
246
- connected: true,
247
- });
248
- const newUser = await setupTestAccount({
249
- connected: true,
250
- });
251
- const group = admin.node.createGroup();
252
- const writeOnlyUserOnAdminNode = await loadCoValueOrFail(admin.node, writeOnlyUser.accountID);
253
- group.addMember(writeOnlyUserOnAdminNode, "writeOnly");
254
- const newUserOnWriteOnlyNode = await loadCoValueOrFail(writeOnlyUser.node, newUser.accountID);
255
- const groupOnWriteOnlyNode = await loadCoValueOrFail(writeOnlyUser.node, group.id);
256
- // Try to add member as writeOnly user
257
- try {
258
- groupOnWriteOnlyNode.addMember(newUserOnWriteOnlyNode, "reader");
259
- throw new Error("Should not be able to add member as writeOnly user");
260
- }
261
- catch (e) {
262
- expect(e).toBeDefined();
263
- }
264
- expect(groupOnWriteOnlyNode.roleOf(newUser.accountID)).toBeUndefined();
265
- });
266
313
  });
267
314
  //# sourceMappingURL=group.addMember.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"group.addMember.test.js","sourceRoot":"","sources":["../../src/tests/group.addMember.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"group.addMember.test.js","sourceRoot":"","sources":["../../src/tests/group.addMember.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC5D,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,GACd,MAAM,gBAAgB,CAAC;AAGxB,UAAU,CAAC,KAAK,IAAI,EAAE;IACpB,eAAe,CAAC,KAAK,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,mCAAmC;AACnC,MAAM,YAAY,GAA8C;IAC9D,qCAAqC;IACrC,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;IACnC,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC;IACrC,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC;IACpC,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC;IACpC,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC;IAEvC,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;IACnC,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC;IACrC,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC;IACpC,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC;IACpC,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC;IAEvC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;IACjC,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC;IACpC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC;IACnC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC;IACnC,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC;IAEtC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;IAClC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC;IACpC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC;IACnC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC;IACnC,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC;IAEtC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;IAClC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC;IACpC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC;IACnC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC;IACnC,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC;IAEtC,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC;IACrC,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC;IACvC,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC;IACtC,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC;IACtC,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC;IAEzC,0CAA0C;IAC1C,8CAA8C;IAC9C,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC;IACtC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC;IACvC,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC;IACtC,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC;IACtC,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC;IAEzC,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC;IACtC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC;IACvC,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC;IACtC,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC;IACtC,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC;IAEzC,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;IACnC,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC;IACtC,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC;IACrC,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC;IACrC,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC;IAExC,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC;IACrC,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC;IACtC,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC;IACrC,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC;IACrC,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC;IAExC,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC;IACrC,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC;IACtC,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC;IACrC,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC;IACrC,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC;IAExC,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC;IACxC,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC;IACzC,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC;IACxC,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC;IACxC,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC;IAE3C,0CAA0C;IAC1C,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC;IACrC,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;IACvC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC;IACtC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC;IACtC,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC;IAEzC,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC;IACrC,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;IACvC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC;IACtC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC;IACtC,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC;IAEzC,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;IACnC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC;IACrC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC;IACpC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC;IACpC,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC;IAEvC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC;IACpC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;IACtC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;IACrC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;IACrC,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC;IAExC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC;IACpC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;IACtC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;IACrC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;IACrC,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC;IAExC,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC;IACzC,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC;IACvC,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC;IACxC,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC;IACxC,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC;IAE3C,0CAA0C;IAC1C,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC;IACrC,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;IACvC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC;IACtC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC;IACtC,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC;IAEzC,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC;IACrC,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;IACvC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC;IACtC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC;IACtC,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC;IAEzC,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;IACnC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC;IACrC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC;IACpC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC;IACpC,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC;IAEvC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC;IACpC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;IACtC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;IACrC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;IACrC,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC;IAExC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC;IACpC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;IACtC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;IACrC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;IACrC,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC;IAExC,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC;IACvC,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC;IACzC,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC;IACxC,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC;IACxC,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC;IAE3C,uFAAuF;IACvF,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC;IACxC,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;IAC1C,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC;IACzC,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC;IACzC,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC;IAE5C,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC;IACxC,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;IAC1C,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC;IACzC,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC;IACzC,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC;IAE5C,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;IACtC,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC;IACxC,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC;IACvC,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC;IACvC,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC;IAE1C,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC;IACvC,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;IACzC,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;IACxC,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;IACxC,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC;IAE3C,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC;IACvC,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;IACzC,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;IACxC,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;IACxC,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC;IAE3C,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC;IAC1C,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC;IAC5C,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC;IAC3C,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC;IAC3C,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC;CAC/C,CAAC;AAEF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,KAAK,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC;QAC5D,IAAI,CAAC,GAAG,UAAU,WAAW,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,aAAa,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;YAC5I,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;gBACpC,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;gBACpC,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YAEH,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAChD,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,SAAS,CACjB,CAAC;YAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAExC,gCAAgC;YAChC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;YAC5C,CAAC;YAED,KAAK,CAAC,SAAS,CACb,MAAM,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,EACtD,UAAkB,CACnB,CAAC;YAEF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE3D,IAAI,QAAQ,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;gBAC5B,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;gBAExC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,EAAE;oBACV,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;gBAC1C,CAAC,CAAC,CAAC,OAAO,CACR,sBAAsB,EAAE,OAAO,MAAM,CAAC,SAAS,gCAAgC,UAAU,GAAG,CAC7F,CAAC;gBAEF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAW,CAAC,CACxE,mDAAmD,EACnD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;YACpC,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAChD,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,SAAS,CACjB,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAExC,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAE1C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC,CACF,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAW,CAAC,CAC9D,sDAAsD,EACtD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;YACpC,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAChD,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,SAAS,CACjB,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAExC,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAE9C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEzD,MAAM,CAAC,GAAG,EAAE;YACV,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC,OAAO,CACR,sBAAsB,IAAI,OAAO,MAAM,CAAC,SAAS,sCAAsC,CACxF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAW,CAAC,CAC9D,sDAAsD,EACtD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;YACpC,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAChD,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,SAAS,CACjB,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAExC,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAE9C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEzD,MAAM,CAAC,GAAG,EAAE;YACV,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC,OAAO,CACR,sBAAsB,IAAI,OAAO,MAAM,CAAC,SAAS,sCAAsC,CACxF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAW,CAAC,CAC9D,yDAAyD,EACzD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;YACpC,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAChD,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,SAAS,CACjB,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAExC,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;QAEjD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE5D,MAAM,CAAC,GAAG,EAAE;YACV,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC,OAAO,CACR,sBAAsB,IAAI,OAAO,MAAM,CAAC,SAAS,yCAAyC,CAC3F,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAW,CAAC,CAC5B,kDAAkD,EAClD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;YACpC,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAChD,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,SAAS,CACjB,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAExC,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAErD,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC,CACF,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAW,CAAC,CAC5B,qDAAqD,EACrD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;YACpC,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAChD,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,SAAS,CACjB,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAExC,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAErD,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC,CACF,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAW,CAAC,CACvC,kDAAkD,EAClD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;YACpC,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAChD,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,SAAS,CACjB,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAExC,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAErD,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC,CACF,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAW,CAAC,CACpD,mDAAmD,EACnD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;YACpC,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAChD,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,SAAS,CACjB,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAExC,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAErD,MAAM,CAAC,GAAG,EAAE;YACV,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC,OAAO,CACR,qEAAqE,IAAI,GAAG,CAC7E,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEpD,MAAM,CAAC,GAAG,EAAE;YACV,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC,OAAO,CACR,qEAAqE,IAAI,GAAG,CAC7E,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEpD,MAAM,CAAC,GAAG,EAAE;YACV,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC,OAAO,CACR,wEAAwE,IAAI,GAAG,CAChF,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC,CACF,CAAC;IAEF,IAAI,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC;YACnC,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;YACpC,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAEvC,MAAM,iBAAiB,GAAG,MAAM,iBAAiB,CAC/C,KAAK,CAAC,IAAI,EACV,MAAM,CAAC,SAAS,CACjB,CAAC;QACF,KAAK,CAAC,SAAS,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAC7C,KAAK,CAAC,SAAS,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAEhD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;YAC7B,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC;QAEH,yBAAyB;QACzB,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAE3E,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -611,6 +611,18 @@ describe("extend with role mapping", () => {
611
611
  childGroupOnNode2.addMember(await loadCoValueOrFail(node2.node, node3.accountID), "reader");
612
612
  expect(childGroupOnNode2.roleOf(node3.accountID)).toEqual("reader");
613
613
  });
614
+ test("mapping to manager should add the ability to add members", async () => {
615
+ const { node1, node2, node3 } = await createThreeConnectedNodes("server", "server", "server");
616
+ const group = node1.node.createGroup();
617
+ group.addMember(await loadCoValueOrFail(node1.node, node2.accountID), "reader");
618
+ const childGroup = node1.node.createGroup();
619
+ childGroup.extend(group, "manager");
620
+ expect(childGroup.roleOf(node2.accountID)).toEqual("manager");
621
+ await childGroup.core.waitForSync();
622
+ const childGroupOnNode2 = await loadCoValueOrFail(node2.node, childGroup.id);
623
+ childGroupOnNode2.addMember(await loadCoValueOrFail(node2.node, node3.accountID), "reader");
624
+ expect(childGroupOnNode2.roleOf(node3.accountID)).toEqual("reader");
625
+ });
614
626
  test("mapping to reader should remove the ability to add members", async () => {
615
627
  const { node1, node2, node3 } = await createThreeConnectedNodes("server", "server", "server");
616
628
  const group = node1.node.createGroup();