cojson 0.10.0 → 0.10.2

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 (212) hide show
  1. package/.turbo/turbo-build.log +2 -10
  2. package/CHANGELOG.md +13 -0
  3. package/dist/CoValuesStore.js.map +1 -0
  4. package/dist/PeerKnownStates.js.map +1 -0
  5. package/dist/PeerState.js.map +1 -0
  6. package/dist/PriorityBasedMessageQueue.js.map +1 -0
  7. package/dist/SyncStateManager.js.map +1 -0
  8. package/dist/base64url.js.map +1 -0
  9. package/dist/base64url.test.js.map +1 -0
  10. package/dist/coValue.js.map +1 -0
  11. package/dist/coValueCore.js.map +1 -0
  12. package/dist/{native/coValueState.js → coValueState.js} +1 -0
  13. package/dist/coValueState.js.map +1 -0
  14. package/dist/coValues/account.js.map +1 -0
  15. package/dist/coValues/coList.js.map +1 -0
  16. package/dist/coValues/coMap.js.map +1 -0
  17. package/dist/coValues/coPlainText.js.map +1 -0
  18. package/dist/coValues/coStream.js.map +1 -0
  19. package/dist/coValues/group.js.map +1 -0
  20. package/dist/coreToCoValue.js.map +1 -0
  21. package/dist/crypto/PureJSCrypto.js.map +1 -0
  22. package/dist/crypto/WasmCrypto.js.map +1 -0
  23. package/dist/crypto/crypto.js.map +1 -0
  24. package/dist/exports.js.map +1 -0
  25. package/dist/ids.js.map +1 -0
  26. package/dist/index.js +2 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/jsonStringify.js.map +1 -0
  29. package/dist/{native/jsonValue.js.map → jsonValue.js.map} +1 -1
  30. package/dist/localNode.js.map +1 -0
  31. package/dist/logger.js.map +1 -0
  32. package/dist/media.js.map +1 -0
  33. package/dist/permissions.js.map +1 -0
  34. package/dist/priority.js.map +1 -0
  35. package/dist/storage/FileSystem.js.map +1 -0
  36. package/dist/storage/chunksAndKnownStates.js.map +1 -0
  37. package/dist/storage/index.js.map +1 -0
  38. package/dist/streamUtils.js.map +1 -0
  39. package/dist/{web/sync.js → sync.js} +5 -1
  40. package/dist/sync.js.map +1 -0
  41. package/dist/typeUtils/accountOrAgentIDfromSessionID.js.map +1 -0
  42. package/dist/typeUtils/expectGroup.js.map +1 -0
  43. package/dist/typeUtils/isAccountID.js.map +1 -0
  44. package/dist/typeUtils/isCoValue.js.map +1 -0
  45. package/package.json +19 -21
  46. package/src/coValueState.ts +1 -0
  47. package/src/exports.ts +1 -0
  48. package/src/index.ts +1 -0
  49. package/src/sync.ts +5 -1
  50. package/tsconfig.json +3 -1
  51. package/dist/native/CoValuesStore.js.map +0 -1
  52. package/dist/native/PeerKnownStates.js.map +0 -1
  53. package/dist/native/PeerState.js.map +0 -1
  54. package/dist/native/PriorityBasedMessageQueue.js.map +0 -1
  55. package/dist/native/SyncStateManager.js.map +0 -1
  56. package/dist/native/base64url.js.map +0 -1
  57. package/dist/native/base64url.test.js.map +0 -1
  58. package/dist/native/coValue.js.map +0 -1
  59. package/dist/native/coValueCore.js.map +0 -1
  60. package/dist/native/coValueState.js.map +0 -1
  61. package/dist/native/coValues/account.js.map +0 -1
  62. package/dist/native/coValues/coList.js.map +0 -1
  63. package/dist/native/coValues/coMap.js.map +0 -1
  64. package/dist/native/coValues/coPlainText.js.map +0 -1
  65. package/dist/native/coValues/coStream.js.map +0 -1
  66. package/dist/native/coValues/group.js.map +0 -1
  67. package/dist/native/coreToCoValue.js.map +0 -1
  68. package/dist/native/crypto/PureJSCrypto.js.map +0 -1
  69. package/dist/native/crypto/WasmCrypto.js.map +0 -1
  70. package/dist/native/crypto/crypto.js.map +0 -1
  71. package/dist/native/crypto/export.js +0 -3
  72. package/dist/native/crypto/export.js.map +0 -1
  73. package/dist/native/exports.js.map +0 -1
  74. package/dist/native/ids.js.map +0 -1
  75. package/dist/native/index.native.js +0 -3
  76. package/dist/native/index.native.js.map +0 -1
  77. package/dist/native/jsonStringify.js.map +0 -1
  78. package/dist/native/localNode.js.map +0 -1
  79. package/dist/native/logger.js.map +0 -1
  80. package/dist/native/media.js.map +0 -1
  81. package/dist/native/permissions.js.map +0 -1
  82. package/dist/native/priority.js.map +0 -1
  83. package/dist/native/storage/FileSystem.js.map +0 -1
  84. package/dist/native/storage/chunksAndKnownStates.js.map +0 -1
  85. package/dist/native/storage/index.js.map +0 -1
  86. package/dist/native/streamUtils.js.map +0 -1
  87. package/dist/native/sync.js +0 -555
  88. package/dist/native/sync.js.map +0 -1
  89. package/dist/native/typeUtils/accountOrAgentIDfromSessionID.js.map +0 -1
  90. package/dist/native/typeUtils/expectGroup.js.map +0 -1
  91. package/dist/native/typeUtils/isAccountID.js.map +0 -1
  92. package/dist/native/typeUtils/isCoValue.js.map +0 -1
  93. package/dist/web/CoValuesStore.js +0 -31
  94. package/dist/web/CoValuesStore.js.map +0 -1
  95. package/dist/web/PeerKnownStates.js +0 -68
  96. package/dist/web/PeerKnownStates.js.map +0 -1
  97. package/dist/web/PeerState.js +0 -103
  98. package/dist/web/PeerState.js.map +0 -1
  99. package/dist/web/PriorityBasedMessageQueue.js +0 -98
  100. package/dist/web/PriorityBasedMessageQueue.js.map +0 -1
  101. package/dist/web/SyncStateManager.js +0 -94
  102. package/dist/web/SyncStateManager.js.map +0 -1
  103. package/dist/web/base64url.js +0 -53
  104. package/dist/web/base64url.js.map +0 -1
  105. package/dist/web/base64url.test.js +0 -25
  106. package/dist/web/base64url.test.js.map +0 -1
  107. package/dist/web/coValue.js +0 -52
  108. package/dist/web/coValue.js.map +0 -1
  109. package/dist/web/coValueCore.js +0 -597
  110. package/dist/web/coValueCore.js.map +0 -1
  111. package/dist/web/coValueState.js +0 -267
  112. package/dist/web/coValueState.js.map +0 -1
  113. package/dist/web/coValues/account.js +0 -100
  114. package/dist/web/coValues/account.js.map +0 -1
  115. package/dist/web/coValues/coList.js +0 -381
  116. package/dist/web/coValues/coList.js.map +0 -1
  117. package/dist/web/coValues/coMap.js +0 -273
  118. package/dist/web/coValues/coMap.js.map +0 -1
  119. package/dist/web/coValues/coPlainText.js +0 -86
  120. package/dist/web/coValues/coPlainText.js.map +0 -1
  121. package/dist/web/coValues/coStream.js +0 -224
  122. package/dist/web/coValues/coStream.js.map +0 -1
  123. package/dist/web/coValues/group.js +0 -522
  124. package/dist/web/coValues/group.js.map +0 -1
  125. package/dist/web/coreToCoValue.js +0 -46
  126. package/dist/web/coreToCoValue.js.map +0 -1
  127. package/dist/web/crypto/PureJSCrypto.js +0 -94
  128. package/dist/web/crypto/PureJSCrypto.js.map +0 -1
  129. package/dist/web/crypto/WasmCrypto.js +0 -115
  130. package/dist/web/crypto/WasmCrypto.js.map +0 -1
  131. package/dist/web/crypto/crypto.js +0 -152
  132. package/dist/web/crypto/crypto.js.map +0 -1
  133. package/dist/web/crypto/export.js +0 -3
  134. package/dist/web/crypto/export.js.map +0 -1
  135. package/dist/web/exports.js +0 -48
  136. package/dist/web/exports.js.map +0 -1
  137. package/dist/web/ids.js +0 -50
  138. package/dist/web/ids.js.map +0 -1
  139. package/dist/web/index.web.js +0 -3
  140. package/dist/web/index.web.js.map +0 -1
  141. package/dist/web/jsonStringify.js +0 -57
  142. package/dist/web/jsonStringify.js.map +0 -1
  143. package/dist/web/jsonValue.js +0 -2
  144. package/dist/web/jsonValue.js.map +0 -1
  145. package/dist/web/localNode.js +0 -412
  146. package/dist/web/localNode.js.map +0 -1
  147. package/dist/web/logger.js +0 -58
  148. package/dist/web/logger.js.map +0 -1
  149. package/dist/web/media.js +0 -2
  150. package/dist/web/media.js.map +0 -1
  151. package/dist/web/permissions.js +0 -341
  152. package/dist/web/permissions.js.map +0 -1
  153. package/dist/web/priority.js +0 -31
  154. package/dist/web/priority.js.map +0 -1
  155. package/dist/web/storage/FileSystem.js +0 -48
  156. package/dist/web/storage/FileSystem.js.map +0 -1
  157. package/dist/web/storage/chunksAndKnownStates.js +0 -98
  158. package/dist/web/storage/chunksAndKnownStates.js.map +0 -1
  159. package/dist/web/storage/index.js +0 -336
  160. package/dist/web/storage/index.js.map +0 -1
  161. package/dist/web/streamUtils.js +0 -41
  162. package/dist/web/streamUtils.js.map +0 -1
  163. package/dist/web/sync.js.map +0 -1
  164. package/dist/web/typeUtils/accountOrAgentIDfromSessionID.js +0 -5
  165. package/dist/web/typeUtils/accountOrAgentIDfromSessionID.js.map +0 -1
  166. package/dist/web/typeUtils/expectGroup.js +0 -13
  167. package/dist/web/typeUtils/expectGroup.js.map +0 -1
  168. package/dist/web/typeUtils/isAccountID.js +0 -4
  169. package/dist/web/typeUtils/isAccountID.js.map +0 -1
  170. package/dist/web/typeUtils/isCoValue.js +0 -11
  171. package/dist/web/typeUtils/isCoValue.js.map +0 -1
  172. package/src/crypto/export.ts +0 -2
  173. package/src/index.native.ts +0 -2
  174. package/src/index.web.ts +0 -2
  175. package/tsconfig.native.json +0 -10
  176. package/tsconfig.web.json +0 -5
  177. /package/dist/{native/CoValuesStore.js → CoValuesStore.js} +0 -0
  178. /package/dist/{native/PeerKnownStates.js → PeerKnownStates.js} +0 -0
  179. /package/dist/{native/PeerState.js → PeerState.js} +0 -0
  180. /package/dist/{native/PriorityBasedMessageQueue.js → PriorityBasedMessageQueue.js} +0 -0
  181. /package/dist/{native/SyncStateManager.js → SyncStateManager.js} +0 -0
  182. /package/dist/{native/base64url.js → base64url.js} +0 -0
  183. /package/dist/{native/base64url.test.js → base64url.test.js} +0 -0
  184. /package/dist/{native/coValue.js → coValue.js} +0 -0
  185. /package/dist/{native/coValueCore.js → coValueCore.js} +0 -0
  186. /package/dist/{native/coValues → coValues}/account.js +0 -0
  187. /package/dist/{native/coValues → coValues}/coList.js +0 -0
  188. /package/dist/{native/coValues → coValues}/coMap.js +0 -0
  189. /package/dist/{native/coValues → coValues}/coPlainText.js +0 -0
  190. /package/dist/{native/coValues → coValues}/coStream.js +0 -0
  191. /package/dist/{native/coValues → coValues}/group.js +0 -0
  192. /package/dist/{native/coreToCoValue.js → coreToCoValue.js} +0 -0
  193. /package/dist/{native/crypto → crypto}/PureJSCrypto.js +0 -0
  194. /package/dist/{native/crypto → crypto}/WasmCrypto.js +0 -0
  195. /package/dist/{native/crypto → crypto}/crypto.js +0 -0
  196. /package/dist/{native/exports.js → exports.js} +0 -0
  197. /package/dist/{native/ids.js → ids.js} +0 -0
  198. /package/dist/{native/jsonStringify.js → jsonStringify.js} +0 -0
  199. /package/dist/{native/jsonValue.js → jsonValue.js} +0 -0
  200. /package/dist/{native/localNode.js → localNode.js} +0 -0
  201. /package/dist/{native/logger.js → logger.js} +0 -0
  202. /package/dist/{native/media.js → media.js} +0 -0
  203. /package/dist/{native/permissions.js → permissions.js} +0 -0
  204. /package/dist/{native/priority.js → priority.js} +0 -0
  205. /package/dist/{native/storage → storage}/FileSystem.js +0 -0
  206. /package/dist/{native/storage → storage}/chunksAndKnownStates.js +0 -0
  207. /package/dist/{native/storage → storage}/index.js +0 -0
  208. /package/dist/{native/streamUtils.js → streamUtils.js} +0 -0
  209. /package/dist/{native/typeUtils → typeUtils}/accountOrAgentIDfromSessionID.js +0 -0
  210. /package/dist/{native/typeUtils → typeUtils}/expectGroup.js +0 -0
  211. /package/dist/{native/typeUtils → typeUtils}/isAccountID.js +0 -0
  212. /package/dist/{native/typeUtils → typeUtils}/isCoValue.js +0 -0
@@ -1,522 +0,0 @@
1
- import { base58 } from "@scure/base";
2
- import { getChildGroupId, getParentGroupId, isAgentID, isChildGroupReference, isParentGroupReference, } from "../ids.js";
3
- import { logger } from "../logger.js";
4
- import { expectGroup } from "../typeUtils/expectGroup.js";
5
- import { RawCoMap } from "./coMap.js";
6
- export const EVERYONE = "everyone";
7
- /** A `Group` is a scope for permissions of its members (`"reader" | "writer" | "admin"`), applying to objects owned by that group.
8
- *
9
- * A `Group` object exposes methods for permission management and allows you to create new CoValues owned by that group.
10
- *
11
- * (Internally, a `Group` is also just a `CoMap`, mapping member accounts to roles and containing some
12
- * state management for making cryptographic keys available to current members)
13
- *
14
- * @example
15
- * You typically get a group from a CoValue that you already have loaded:
16
- *
17
- * ```typescript
18
- * const group = coMap.group;
19
- * ```
20
- *
21
- * @example
22
- * Or, you can create a new group with a `LocalNode`:
23
- *
24
- * ```typescript
25
- * const localNode.createGroup();
26
- * ```
27
- * */
28
- export class RawGroup extends RawCoMap {
29
- /**
30
- * Returns the current role of a given account.
31
- *
32
- * @category 1. Role reading
33
- */
34
- roleOf(accountID) {
35
- return this.roleOfInternal(accountID)?.role;
36
- }
37
- /** @internal */
38
- roleOfInternal(accountID) {
39
- const roleHere = this.get(accountID);
40
- if (roleHere === "revoked") {
41
- return undefined;
42
- }
43
- let roleInfo = roleHere && { role: roleHere, via: undefined };
44
- const parentGroups = this.getParentGroups(this.atTimeFilter);
45
- for (const { group, role } of parentGroups) {
46
- const parentRole = group.roleOfInternal(accountID)?.role;
47
- if (!isInheritableRole(parentRole)) {
48
- continue;
49
- }
50
- const roleToInherit = role !== "extend" ? role : parentRole;
51
- if (isMorePermissiveAndShouldInherit(roleToInherit, roleInfo?.role)) {
52
- roleInfo = { role: roleToInherit, via: group.id };
53
- }
54
- }
55
- return roleInfo;
56
- }
57
- getParentGroups(atTime) {
58
- const groups = [];
59
- for (const key of this.keys()) {
60
- if (isParentGroupReference(key)) {
61
- const parent = this.core.node.expectCoValueLoaded(getParentGroupId(key), "Expected parent group to be loaded");
62
- const group = expectGroup(parent.getCurrentContent());
63
- const role = this.get(key);
64
- if (atTime) {
65
- groups.push({ group: group.atTime(atTime), role });
66
- }
67
- else {
68
- groups.push({ group, role });
69
- }
70
- }
71
- }
72
- return groups;
73
- }
74
- loadAllChildGroups() {
75
- const requests = [];
76
- const store = this.core.node.coValuesStore;
77
- const peers = this.core.node.syncManager.getServerAndStoragePeers();
78
- for (const key of this.keys()) {
79
- if (!isChildGroupReference(key)) {
80
- continue;
81
- }
82
- const id = getChildGroupId(key);
83
- const child = store.get(id);
84
- if (child.state.type === "unknown" ||
85
- child.state.type === "unavailable") {
86
- child.loadFromPeers(peers).catch(() => {
87
- logger.error(`Failed to load child group ${id}`);
88
- });
89
- }
90
- requests.push(child.getCoValue().then((coValue) => {
91
- if (coValue === "unavailable") {
92
- throw new Error(`Child group ${child.id} is unavailable`);
93
- }
94
- // Recursively load child groups
95
- return expectGroup(coValue.getCurrentContent()).loadAllChildGroups();
96
- }));
97
- }
98
- return Promise.all(requests);
99
- }
100
- getChildGroups() {
101
- const groups = [];
102
- for (const key of this.keys()) {
103
- if (isChildGroupReference(key)) {
104
- const child = this.core.node.expectCoValueLoaded(getChildGroupId(key), "Expected child group to be loaded");
105
- groups.push(expectGroup(child.getCurrentContent()));
106
- }
107
- }
108
- return groups;
109
- }
110
- /**
111
- * Returns the role of the current account in the group.
112
- *
113
- * @category 1. Role reading
114
- */
115
- myRole() {
116
- return this.roleOfInternal(this.core.node.account.id)?.role;
117
- }
118
- /**
119
- * Directly grants a new member a role in the group. The current account must be an
120
- * admin to be able to do so. Throws otherwise.
121
- *
122
- * @category 2. Role changing
123
- */
124
- addMember(account, role) {
125
- this.addMemberInternal(account, role);
126
- }
127
- /** @internal */
128
- addMemberInternal(account, role) {
129
- if (account === EVERYONE) {
130
- if (!(role === "reader" || role === "writer")) {
131
- throw new Error("Can't make everyone something other than reader or writer");
132
- }
133
- const currentReadKey = this.core.getCurrentReadKey();
134
- if (!currentReadKey.secret) {
135
- throw new Error("Can't add member without read key secret");
136
- }
137
- this.set(account, role, "trusting");
138
- if (this.get(account) !== role) {
139
- throw new Error("Failed to set role");
140
- }
141
- this.set(`${currentReadKey.id}_for_${EVERYONE}`, currentReadKey.secret, "trusting");
142
- return;
143
- }
144
- const memberKey = typeof account === "string" ? account : account.id;
145
- const agent = typeof account === "string"
146
- ? account
147
- : account.currentAgentID()._unsafeUnwrap({ withStackTrace: true });
148
- /**
149
- * WriteOnly members can only see their own changes.
150
- *
151
- * We don't want to reveal the readKey to them so we create a new one specifically for them and also reveal it to everyone else with a reader or higher-capability role (but crucially not to other writer-only members)
152
- * to everyone else.
153
- *
154
- * To never reveal the readKey to writeOnly members we also create a dedicated writeKey for the
155
- * invite.
156
- */
157
- if (role === "writeOnly" || role === "writeOnlyInvite") {
158
- const writeKeyForNewMember = this.core.crypto.newRandomKeySecret();
159
- this.set(memberKey, role, "trusting");
160
- this.set(`writeKeyFor_${memberKey}`, writeKeyForNewMember.id, "trusting");
161
- this.storeKeyRevelationForMember(memberKey, agent, writeKeyForNewMember.id, writeKeyForNewMember.secret);
162
- for (const otherMemberKey of this.getMemberKeys()) {
163
- const memberRole = this.get(otherMemberKey);
164
- if (memberRole === "reader" ||
165
- memberRole === "writer" ||
166
- memberRole === "admin" ||
167
- memberRole === "readerInvite" ||
168
- memberRole === "writerInvite" ||
169
- memberRole === "adminInvite") {
170
- const otherMemberAgent = this.core.node
171
- .resolveAccountAgent(otherMemberKey, "Expected member agent to be loaded")
172
- ._unsafeUnwrap({ withStackTrace: true });
173
- this.storeKeyRevelationForMember(otherMemberKey, otherMemberAgent, writeKeyForNewMember.id, writeKeyForNewMember.secret);
174
- }
175
- }
176
- }
177
- else {
178
- const currentReadKey = this.core.getCurrentReadKey();
179
- if (!currentReadKey.secret) {
180
- throw new Error("Can't add member without read key secret");
181
- }
182
- this.set(memberKey, role, "trusting");
183
- if (this.get(memberKey) !== role) {
184
- throw new Error("Failed to set role");
185
- }
186
- this.storeKeyRevelationForMember(memberKey, agent, currentReadKey.id, currentReadKey.secret);
187
- for (const keyID of this.getWriteOnlyKeys()) {
188
- const secret = this.core.getReadKey(keyID);
189
- if (!secret) {
190
- logger.error("Can't find key " + keyID);
191
- continue;
192
- }
193
- this.storeKeyRevelationForMember(memberKey, agent, keyID, secret);
194
- }
195
- }
196
- }
197
- storeKeyRevelationForMember(memberKey, agent, keyID, secret) {
198
- this.set(`${keyID}_for_${memberKey}`, this.core.crypto.seal({
199
- message: secret,
200
- from: this.core.node.account.currentSealerSecret(),
201
- to: this.core.crypto.getAgentSealerID(agent),
202
- nOnceMaterial: {
203
- in: this.id,
204
- tx: this.core.nextTransactionID(),
205
- },
206
- }), "trusting");
207
- }
208
- getWriteOnlyKeys() {
209
- const keys = [];
210
- for (const key of this.keys()) {
211
- if (key.startsWith("writeKeyFor_")) {
212
- keys.push(this.get(key));
213
- }
214
- }
215
- return keys;
216
- }
217
- getCurrentReadKeyId() {
218
- if (this.myRole() === "writeOnly") {
219
- const accountId = this.core.node.account.id;
220
- return this.get(`writeKeyFor_${accountId}`);
221
- }
222
- return this.get("readKey");
223
- }
224
- getMemberKeys() {
225
- return this.keys().filter((key) => {
226
- return key.startsWith("co_") || isAgentID(key);
227
- });
228
- }
229
- /** @internal */
230
- rotateReadKey(removedMemberKey) {
231
- const memberKeys = this.getMemberKeys().filter((key) => key !== removedMemberKey);
232
- const currentlyPermittedReaders = memberKeys.filter((key) => {
233
- const role = this.get(key);
234
- return (role === "admin" ||
235
- role === "writer" ||
236
- role === "reader" ||
237
- role === "adminInvite" ||
238
- role === "writerInvite" ||
239
- role === "readerInvite");
240
- });
241
- const writeOnlyMembers = memberKeys.filter((key) => {
242
- const role = this.get(key);
243
- return role === "writeOnly" || role === "writeOnlyInvite";
244
- });
245
- // Get these early, so we fail fast if they are unavailable
246
- const parentGroups = this.getParentGroups();
247
- const childGroups = this.getChildGroups();
248
- const maybeCurrentReadKey = this.core.getCurrentReadKey();
249
- if (!maybeCurrentReadKey.secret) {
250
- throw new Error("Can't rotate read key secret we don't have access to");
251
- }
252
- const currentReadKey = {
253
- id: maybeCurrentReadKey.id,
254
- secret: maybeCurrentReadKey.secret,
255
- };
256
- const newReadKey = this.core.crypto.newRandomKeySecret();
257
- for (const readerID of currentlyPermittedReaders) {
258
- const agent = this.core.node
259
- .resolveAccountAgent(readerID, "Expected to know currently permitted reader")
260
- ._unsafeUnwrap({ withStackTrace: true });
261
- this.storeKeyRevelationForMember(readerID, agent, newReadKey.id, newReadKey.secret);
262
- }
263
- /**
264
- * If there are some writeOnly members we need to rotate their keys
265
- * and reveal them to the other non-writeOnly members
266
- */
267
- for (const writeOnlyMemberID of writeOnlyMembers) {
268
- const agent = this.core.node
269
- .resolveAccountAgent(writeOnlyMemberID, "Expected to know writeOnly member")
270
- ._unsafeUnwrap({ withStackTrace: true });
271
- const writeOnlyKey = this.core.crypto.newRandomKeySecret();
272
- this.storeKeyRevelationForMember(writeOnlyMemberID, agent, writeOnlyKey.id, writeOnlyKey.secret);
273
- this.set(`writeKeyFor_${writeOnlyMemberID}`, writeOnlyKey.id, "trusting");
274
- for (const readerID of currentlyPermittedReaders) {
275
- const agent = this.core.node
276
- .resolveAccountAgent(readerID, "Expected to know currently permitted reader")
277
- ._unsafeUnwrap({ withStackTrace: true });
278
- this.storeKeyRevelationForMember(readerID, agent, writeOnlyKey.id, writeOnlyKey.secret);
279
- }
280
- }
281
- this.set(`${currentReadKey.id}_for_${newReadKey.id}`, this.core.crypto.encryptKeySecret({
282
- encrypting: newReadKey,
283
- toEncrypt: currentReadKey,
284
- }).encrypted, "trusting");
285
- this.set("readKey", newReadKey.id, "trusting");
286
- /**
287
- * The new read key needs to be revealed to the parent groups
288
- *
289
- * This way the members from the parent groups can still have access to this group
290
- */
291
- for (const { group: parent } of parentGroups) {
292
- const { id: parentReadKeyID, secret: parentReadKeySecret } = parent.core.getCurrentReadKey();
293
- if (!parentReadKeySecret) {
294
- throw new Error("Can't reveal new child key to parent where we don't have access to the parent read key");
295
- }
296
- this.set(`${newReadKey.id}_for_${parentReadKeyID}`, this.core.crypto.encryptKeySecret({
297
- encrypting: {
298
- id: parentReadKeyID,
299
- secret: parentReadKeySecret,
300
- },
301
- toEncrypt: newReadKey,
302
- }).encrypted, "trusting");
303
- }
304
- for (const child of childGroups) {
305
- // Since child references are mantained only for the key rotation,
306
- // circular references are skipped here because it's more performant
307
- // than always checking for circular references in childs inside the permission checks
308
- if (child.isSelfExtension(this)) {
309
- continue;
310
- }
311
- child.rotateReadKey(removedMemberKey);
312
- }
313
- }
314
- /** Detect circular references in group inheritance */
315
- isSelfExtension(parent) {
316
- if (parent.id === this.id) {
317
- return true;
318
- }
319
- const childGroups = this.getChildGroups();
320
- for (const child of childGroups) {
321
- if (child.isSelfExtension(parent)) {
322
- return true;
323
- }
324
- }
325
- return false;
326
- }
327
- extend(parent, role = "inherit") {
328
- if (this.isSelfExtension(parent)) {
329
- return;
330
- }
331
- if (this.myRole() !== "admin") {
332
- throw new Error("To extend a group, the current account must be an admin in the child group");
333
- }
334
- if (parent.myRole() !== "admin" &&
335
- parent.myRole() !== "writer" &&
336
- parent.myRole() !== "reader" &&
337
- parent.myRole() !== "writeOnly") {
338
- throw new Error("To extend a group, the current account must be a member of the parent group");
339
- }
340
- const value = role === "inherit" ? "extend" : role;
341
- this.set(`parent_${parent.id}`, value, "trusting");
342
- parent.set(`child_${this.id}`, "extend", "trusting");
343
- const { id: parentReadKeyID, secret: parentReadKeySecret } = parent.core.getCurrentReadKey();
344
- if (!parentReadKeySecret) {
345
- throw new Error("Can't extend group without parent read key secret");
346
- }
347
- const { id: childReadKeyID, secret: childReadKeySecret } = this.core.getCurrentReadKey();
348
- if (!childReadKeySecret) {
349
- throw new Error("Can't extend group without child read key secret");
350
- }
351
- this.set(`${childReadKeyID}_for_${parentReadKeyID}`, this.core.crypto.encryptKeySecret({
352
- encrypting: {
353
- id: parentReadKeyID,
354
- secret: parentReadKeySecret,
355
- },
356
- toEncrypt: {
357
- id: childReadKeyID,
358
- secret: childReadKeySecret,
359
- },
360
- }).encrypted, "trusting");
361
- }
362
- /**
363
- * Strips the specified member of all roles (preventing future writes in
364
- * the group and owned values) and rotates the read encryption key for that group
365
- * (preventing reads of new content in the group and owned values)
366
- *
367
- * @category 2. Role changing
368
- */
369
- async removeMember(account) {
370
- // Ensure all child groups are loaded before removing a member
371
- await this.loadAllChildGroups();
372
- this.removeMemberInternal(account);
373
- }
374
- /** @internal */
375
- removeMemberInternal(account) {
376
- const memberKey = typeof account === "string" ? account : account.id;
377
- this.rotateReadKey(memberKey);
378
- this.set(memberKey, "revoked", "trusting");
379
- }
380
- /**
381
- * Creates an invite for new members to indirectly join the group,
382
- * allowing them to grant themselves the specified role with the InviteSecret
383
- * (a string starting with "inviteSecret_") - use `LocalNode.acceptInvite()` for this purpose.
384
- *
385
- * @category 2. Role changing
386
- */
387
- createInvite(role) {
388
- const secretSeed = this.core.crypto.newRandomSecretSeed();
389
- const inviteSecret = this.core.crypto.agentSecretFromSecretSeed(secretSeed);
390
- const inviteID = this.core.crypto.getAgentID(inviteSecret);
391
- this.addMemberInternal(inviteID, `${role}Invite`);
392
- return inviteSecretFromSecretSeed(secretSeed);
393
- }
394
- /**
395
- * Creates a new `CoMap` within this group, with the specified specialized
396
- * `CoMap` type `M` and optional static metadata.
397
- *
398
- * @category 3. Value creation
399
- */
400
- createMap(init, meta, initPrivacy = "private", uniqueness = this.core.crypto.createdNowUnique()) {
401
- const map = this.core.node
402
- .createCoValue({
403
- type: "comap",
404
- ruleset: {
405
- type: "ownedByGroup",
406
- group: this.id,
407
- },
408
- meta: meta || null,
409
- ...uniqueness,
410
- })
411
- .getCurrentContent();
412
- if (init) {
413
- map.assign(init, initPrivacy);
414
- }
415
- return map;
416
- }
417
- /**
418
- * Creates a new `CoList` within this group, with the specified specialized
419
- * `CoList` type `L` and optional static metadata.
420
- *
421
- * @category 3. Value creation
422
- */
423
- createList(init, meta, initPrivacy = "private", uniqueness = this.core.crypto.createdNowUnique()) {
424
- const list = this.core.node
425
- .createCoValue({
426
- type: "colist",
427
- ruleset: {
428
- type: "ownedByGroup",
429
- group: this.id,
430
- },
431
- meta: meta || null,
432
- ...uniqueness,
433
- })
434
- .getCurrentContent();
435
- if (init?.length) {
436
- list.appendItems(init, undefined, initPrivacy);
437
- }
438
- return list;
439
- }
440
- /**
441
- * Creates a new `CoPlainText` within this group, with the specified specialized
442
- * `CoPlainText` type `T` and optional static metadata.
443
- *
444
- * @category 3. Value creation
445
- */
446
- createPlainText(init, meta, initPrivacy = "private") {
447
- const text = this.core.node
448
- .createCoValue({
449
- type: "coplaintext",
450
- ruleset: {
451
- type: "ownedByGroup",
452
- group: this.id,
453
- },
454
- meta: meta || null,
455
- ...this.core.crypto.createdNowUnique(),
456
- })
457
- .getCurrentContent();
458
- if (init) {
459
- text.insertAfter(0, init, initPrivacy);
460
- }
461
- return text;
462
- }
463
- /** @category 3. Value creation */
464
- createStream(meta, uniqueness = this.core.crypto.createdNowUnique()) {
465
- return this.core.node
466
- .createCoValue({
467
- type: "costream",
468
- ruleset: {
469
- type: "ownedByGroup",
470
- group: this.id,
471
- },
472
- meta: meta || null,
473
- ...uniqueness,
474
- })
475
- .getCurrentContent();
476
- }
477
- /** @category 3. Value creation */
478
- createBinaryStream(meta = { type: "binary" }, uniqueness = this.core.crypto.createdNowUnique()) {
479
- return this.core.node
480
- .createCoValue({
481
- type: "costream",
482
- ruleset: {
483
- type: "ownedByGroup",
484
- group: this.id,
485
- },
486
- meta: meta,
487
- ...uniqueness,
488
- })
489
- .getCurrentContent();
490
- }
491
- }
492
- export function isInheritableRole(roleInParent) {
493
- return (roleInParent === "admin" ||
494
- roleInParent === "writer" ||
495
- roleInParent === "reader");
496
- }
497
- function isMorePermissiveAndShouldInherit(roleInParent, roleInChild) {
498
- if (roleInParent === "admin") {
499
- return !roleInChild || roleInChild !== "admin";
500
- }
501
- if (roleInParent === "writer") {
502
- return (!roleInChild || roleInChild === "reader" || roleInChild === "writeOnly");
503
- }
504
- if (roleInParent === "reader") {
505
- return !roleInChild;
506
- }
507
- // writeOnly can't be inherited
508
- if (roleInParent === "writeOnly") {
509
- return false;
510
- }
511
- return false;
512
- }
513
- function inviteSecretFromSecretSeed(secretSeed) {
514
- return `inviteSecret_z${base58.encode(secretSeed)}`;
515
- }
516
- export function secretSeedFromInviteSecret(inviteSecret) {
517
- if (!inviteSecret.startsWith("inviteSecret_z")) {
518
- throw new Error("Invalid invite secret");
519
- }
520
- return base58.decode(inviteSecret.slice("inviteSecret_z".length));
521
- }
522
- //# sourceMappingURL=group.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"group.js","sourceRoot":"","sources":["../../../src/coValues/group.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- import { RawUnknownCoValue } from "./coValue.js";
2
- import { RawAccount, RawControlledAccount } from "./coValues/account.js";
3
- import { RawCoList } from "./coValues/coList.js";
4
- import { RawCoMap } from "./coValues/coMap.js";
5
- import { RawCoPlainText } from "./coValues/coPlainText.js";
6
- import { RawBinaryCoStream, RawCoStream } from "./coValues/coStream.js";
7
- import { RawGroup } from "./coValues/group.js";
8
- export function coreToCoValue(core, options) {
9
- if (core.header.type === "comap") {
10
- if (core.header.ruleset.type === "group") {
11
- if (core.header.meta?.type === "account" &&
12
- !options?.ignorePrivateTransactions) {
13
- if (core.id === core.node.account.id) {
14
- return new RawControlledAccount(core, core.node.account.agentSecret);
15
- }
16
- else {
17
- return new RawAccount(core);
18
- }
19
- }
20
- else {
21
- return new RawGroup(core, options);
22
- }
23
- }
24
- else {
25
- return new RawCoMap(core);
26
- }
27
- }
28
- else if (core.header.type === "coplaintext") {
29
- return new RawCoPlainText(core);
30
- }
31
- else if (core.header.type === "colist") {
32
- return new RawCoList(core);
33
- }
34
- else if (core.header.type === "costream") {
35
- if (core.header.meta && core.header.meta.type === "binary") {
36
- return new RawBinaryCoStream(core);
37
- }
38
- else {
39
- return new RawCoStream(core);
40
- }
41
- }
42
- else {
43
- return new RawUnknownCoValue(core);
44
- }
45
- }
46
- //# sourceMappingURL=coreToCoValue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"coreToCoValue.js","sourceRoot":"","sources":["../../src/coreToCoValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,UAAU,aAAa,CAC3B,IAAiB,EACjB,OAA6C;IAE7C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACzC,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS;gBACpC,CAAC,OAAO,EAAE,yBAAyB,EACnC,CAAC;gBACD,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;oBACrC,OAAO,IAAI,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBACvE,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAC9C,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3D,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;AACH,CAAC"}