cojson 0.8.34 → 0.8.35

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 (46) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/native/coValueCore.js +73 -37
  3. package/dist/native/coValueCore.js.map +1 -1
  4. package/dist/native/coValues/coMap.js +2 -2
  5. package/dist/native/coValues/coMap.js.map +1 -1
  6. package/dist/native/coValues/group.js +132 -5
  7. package/dist/native/coValues/group.js.map +1 -1
  8. package/dist/native/exports.js +5 -2
  9. package/dist/native/exports.js.map +1 -1
  10. package/dist/native/ids.js +33 -0
  11. package/dist/native/ids.js.map +1 -1
  12. package/dist/native/permissions.js +206 -145
  13. package/dist/native/permissions.js.map +1 -1
  14. package/dist/native/storage/index.js +8 -4
  15. package/dist/native/storage/index.js.map +1 -1
  16. package/dist/native/sync.js +41 -25
  17. package/dist/native/sync.js.map +1 -1
  18. package/dist/web/coValueCore.js +73 -37
  19. package/dist/web/coValueCore.js.map +1 -1
  20. package/dist/web/coValues/coMap.js +2 -2
  21. package/dist/web/coValues/coMap.js.map +1 -1
  22. package/dist/web/coValues/group.js +132 -5
  23. package/dist/web/coValues/group.js.map +1 -1
  24. package/dist/web/exports.js +5 -2
  25. package/dist/web/exports.js.map +1 -1
  26. package/dist/web/ids.js +33 -0
  27. package/dist/web/ids.js.map +1 -1
  28. package/dist/web/permissions.js +206 -145
  29. package/dist/web/permissions.js.map +1 -1
  30. package/dist/web/storage/index.js +8 -4
  31. package/dist/web/storage/index.js.map +1 -1
  32. package/dist/web/sync.js +41 -25
  33. package/dist/web/sync.js.map +1 -1
  34. package/package.json +1 -1
  35. package/src/coValueCore.ts +119 -46
  36. package/src/coValues/coMap.ts +3 -6
  37. package/src/coValues/group.ts +219 -6
  38. package/src/exports.ts +18 -3
  39. package/src/ids.ts +48 -0
  40. package/src/permissions.ts +297 -204
  41. package/src/storage/index.ts +12 -4
  42. package/src/sync.ts +43 -26
  43. package/src/tests/group.test.ts +152 -1
  44. package/src/tests/permissions.test.ts +785 -2
  45. package/src/tests/sync.test.ts +29 -0
  46. package/src/tests/testUtils.ts +102 -1
package/dist/web/sync.js CHANGED
@@ -164,13 +164,17 @@ export class SyncManager {
164
164
  });
165
165
  if (peerState.isServerOrStoragePeer()) {
166
166
  const initialSync = async () => {
167
- for (const id of this.local.coValuesStore.getKeys()) {
168
- // console.log("subscribing to after peer added", id, peer.id)
169
- await this.subscribeToIncludingDependencies(id, peerState);
170
- peerState.optimisticKnownStates.dispatch({
171
- type: "SET_AS_EMPTY",
172
- id,
173
- });
167
+ for (const entry of this.local.coValuesStore.getValues()) {
168
+ await this.subscribeToIncludingDependencies(entry.id, peerState);
169
+ if (entry.state.type === "available") {
170
+ await this.sendNewContentIncludingDependencies(entry.id, peerState);
171
+ }
172
+ if (!peerState.optimisticKnownStates.has(entry.id)) {
173
+ peerState.optimisticKnownStates.dispatch({
174
+ type: "SET_AS_EMPTY",
175
+ id: entry.id,
176
+ });
177
+ }
174
178
  }
175
179
  };
176
180
  void initialSync();
@@ -249,24 +253,36 @@ export class SyncManager {
249
253
  }
250
254
  }
251
255
  if (entry.state.type === "loading") {
252
- const value = await entry.getCoValue();
253
- if (value === "unavailable") {
254
- peer.dispatchToKnownStates({
255
- type: "SET",
256
- id: msg.id,
257
- value: knownStateIn(msg),
258
- });
259
- peer.toldKnownState.add(msg.id);
260
- this.trySendToPeer(peer, {
261
- action: "known",
262
- id: msg.id,
263
- header: false,
264
- sessions: {},
265
- }).catch((e) => {
266
- console.error("Error sending known state back", e);
267
- });
268
- return;
269
- }
256
+ // We need to return from handleLoad immediately and wait for the CoValue to be loaded
257
+ // in a new task, otherwise we might block further incoming content messages that would
258
+ // resolve the CoValue as available. This can happen when we receive fresh
259
+ // content from a client, but we are a server with our own upstream server(s)
260
+ entry
261
+ .getCoValue()
262
+ .then(async (value) => {
263
+ if (value === "unavailable") {
264
+ peer.dispatchToKnownStates({
265
+ type: "SET",
266
+ id: msg.id,
267
+ value: knownStateIn(msg),
268
+ });
269
+ peer.toldKnownState.add(msg.id);
270
+ this.trySendToPeer(peer, {
271
+ action: "known",
272
+ id: msg.id,
273
+ header: false,
274
+ sessions: {},
275
+ }).catch((e) => {
276
+ console.error("Error sending known state back", e);
277
+ });
278
+ return;
279
+ }
280
+ await this.tellUntoldKnownStateIncludingDependencies(msg.id, peer);
281
+ await this.sendNewContentIncludingDependencies(msg.id, peer);
282
+ })
283
+ .catch((e) => {
284
+ console.error("Error loading coValue in handleLoad loading state", e);
285
+ });
270
286
  }
271
287
  if (entry.state.type === "available") {
272
288
  await this.tellUntoldKnownStateIncludingDependencies(msg.id, peer);
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -19,7 +19,7 @@
19
19
  },
20
20
  "type": "module",
21
21
  "license": "MIT",
22
- "version": "0.8.34",
22
+ "version": "0.8.35",
23
23
  "devDependencies": {
24
24
  "@types/jest": "^29.5.3",
25
25
  "typescript": "^5.3.3",
@@ -13,7 +13,14 @@ import {
13
13
  SignerID,
14
14
  StreamingHash,
15
15
  } from "./crypto/crypto.js";
16
- import { RawCoID, SessionID, TransactionID } from "./ids.js";
16
+ import {
17
+ RawCoID,
18
+ SessionID,
19
+ TransactionID,
20
+ getGroupDependentKeyList,
21
+ getParentGroupId,
22
+ isParentGroupReference,
23
+ } from "./ids.js";
17
24
  import { Stringified, parseJSON, stableStringify } from "./jsonStringify.js";
18
25
  import { JsonObject, JsonValue } from "./jsonValue.js";
19
26
  import { LocalNode, ResolveAccountAgentError } from "./localNode.js";
@@ -614,51 +621,55 @@ export class CoValueCore {
614
621
  }): DecryptedTransaction[] {
615
622
  const validTransactions = determineValidTransactions(this);
616
623
 
617
- const allTransactions: DecryptedTransaction[] = validTransactions
618
- .flatMap(({ txID, tx }) => {
619
- if (tx.privacy === "trusting") {
620
- return {
621
- txID,
622
- madeAt: tx.madeAt,
623
- changes: parseJSON(tx.changes),
624
- };
625
- } else {
626
- if (options?.ignorePrivateTransactions) {
627
- return undefined;
628
- }
629
- const readKey = this.getReadKey(tx.keyUsed);
624
+ const allTransactions: DecryptedTransaction[] = [];
630
625
 
631
- if (!readKey) {
632
- return undefined;
633
- } else {
634
- let decrytedChanges = this._decryptionCache[tx.encryptedChanges];
626
+ for (const { txID, tx } of validTransactions) {
627
+ if (tx.privacy === "trusting") {
628
+ allTransactions.push({
629
+ txID,
630
+ madeAt: tx.madeAt,
631
+ changes: parseJSON(tx.changes),
632
+ });
633
+ continue;
634
+ }
635
635
 
636
- if (!decrytedChanges) {
637
- const decryptedString = this.crypto.decryptRawForTransaction(
638
- tx.encryptedChanges,
639
- readKey,
640
- {
641
- in: this.id,
642
- tx: txID,
643
- },
644
- );
645
- decrytedChanges = decryptedString && parseJSON(decryptedString);
646
- this._decryptionCache[tx.encryptedChanges] = decrytedChanges;
647
- }
636
+ if (options?.ignorePrivateTransactions) {
637
+ continue;
638
+ }
639
+
640
+ const readKey = this.getReadKey(tx.keyUsed);
641
+
642
+ if (!readKey) {
643
+ continue;
644
+ }
645
+
646
+ let decryptedChanges = this._decryptionCache[tx.encryptedChanges];
647
+
648
+ if (!decryptedChanges) {
649
+ const decryptedString = this.crypto.decryptRawForTransaction(
650
+ tx.encryptedChanges,
651
+ readKey,
652
+ {
653
+ in: this.id,
654
+ tx: txID,
655
+ },
656
+ );
657
+ decryptedChanges = decryptedString && parseJSON(decryptedString);
658
+ this._decryptionCache[tx.encryptedChanges] = decryptedChanges;
659
+ }
660
+
661
+ if (!decryptedChanges) {
662
+ console.error("Failed to decrypt transaction despite having key");
663
+ continue;
664
+ }
665
+
666
+ allTransactions.push({
667
+ txID,
668
+ madeAt: tx.madeAt,
669
+ changes: decryptedChanges,
670
+ });
671
+ }
648
672
 
649
- if (!decrytedChanges) {
650
- console.error("Failed to decrypt transaction despite having key");
651
- return undefined;
652
- }
653
- return {
654
- txID,
655
- madeAt: tx.madeAt,
656
- changes: decrytedChanges,
657
- };
658
- }
659
- }
660
- })
661
- .filter((x): x is Exclude<typeof x, undefined> => !!x);
662
673
  allTransactions.sort(
663
674
  (a, b) =>
664
675
  a.madeAt - b.madeAt ||
@@ -786,6 +797,48 @@ export class CoValueCore {
786
797
  }
787
798
  }
788
799
 
800
+ // try to find revelation to parent group read keys
801
+ for (const co of content.keys()) {
802
+ if (isParentGroupReference(co)) {
803
+ const parentGroupID = getParentGroupId(co);
804
+ const parentGroup = this.node.expectCoValueLoaded(
805
+ parentGroupID,
806
+ "Expected parent group to be loaded",
807
+ );
808
+
809
+ const parentKeys = this.findValidParentKeys(
810
+ keyID,
811
+ content,
812
+ parentGroup,
813
+ );
814
+
815
+ for (const parentKey of parentKeys) {
816
+ const revelationForParentKey = content.get(
817
+ `${keyID}_for_${parentKey.id}`,
818
+ );
819
+
820
+ if (revelationForParentKey) {
821
+ const secret = parentGroup.crypto.decryptKeySecret(
822
+ {
823
+ encryptedID: keyID,
824
+ encryptingID: parentKey.id,
825
+ encrypted: revelationForParentKey,
826
+ },
827
+ parentKey.secret,
828
+ );
829
+
830
+ if (secret) {
831
+ return secret as KeySecret;
832
+ } else {
833
+ console.error(
834
+ `Encrypting parent ${parentKey.id} key didn't decrypt ${keyID}`,
835
+ );
836
+ }
837
+ }
838
+ }
839
+ }
840
+ }
841
+
789
842
  return undefined;
790
843
  } else if (this.header.ruleset.type === "ownedByGroup") {
791
844
  return this.node
@@ -798,6 +851,28 @@ export class CoValueCore {
798
851
  }
799
852
  }
800
853
 
854
+ findValidParentKeys(keyID: KeyID, group: RawGroup, parentGroup: CoValueCore) {
855
+ const validParentKeys: { id: KeyID; secret: KeySecret }[] = [];
856
+
857
+ for (const co of group.keys()) {
858
+ if (isKeyForKeyField(co) && co.startsWith(keyID)) {
859
+ const encryptingKeyID = co.split("_for_")[1] as KeyID;
860
+ const encryptingKeySecret = parentGroup.getReadKey(encryptingKeyID);
861
+
862
+ if (!encryptingKeySecret) {
863
+ continue;
864
+ }
865
+
866
+ validParentKeys.push({
867
+ id: encryptingKeyID,
868
+ secret: encryptingKeySecret,
869
+ });
870
+ }
871
+ }
872
+
873
+ return validParentKeys;
874
+ }
875
+
801
876
  getGroup(): RawGroup {
802
877
  if (this.header.ruleset.type !== "ownedByGroup") {
803
878
  throw new Error("Only values owned by groups have groups");
@@ -951,9 +1026,7 @@ export class CoValueCore {
951
1026
  /** @internal */
952
1027
  getDependedOnCoValuesUncached(): RawCoID[] {
953
1028
  return this.header.ruleset.type === "group"
954
- ? expectGroup(this.getCurrentContent())
955
- .keys()
956
- .filter((k): k is RawAccountID => k.startsWith("co_"))
1029
+ ? getGroupDependentKeyList(expectGroup(this.getCurrentContent()).keys())
957
1030
  : this.header.ruleset.type === "ownedByGroup"
958
1031
  ? [
959
1032
  this.header.ruleset.group,
@@ -59,8 +59,8 @@ export class RawCoMapView<
59
59
  for (const { txID, changes, madeAt } of core.getValidSortedTransactions(
60
60
  options,
61
61
  )) {
62
- for (const [changeIdx, changeUntyped] of changes.entries()) {
63
- const change = changeUntyped as MapOpPayload<
62
+ for (let changeIdx = 0; changeIdx < changes.length; changeIdx++) {
63
+ const change = changes[changeIdx] as MapOpPayload<
64
64
  keyof Shape & string,
65
65
  Shape[keyof Shape & string]
66
66
  >;
@@ -73,10 +73,7 @@ export class RawCoMapView<
73
73
  txID,
74
74
  madeAt,
75
75
  changeIdx,
76
- ...(change as MapOpPayload<
77
- keyof Shape & string,
78
- Shape[keyof Shape & string]
79
- >),
76
+ ...change,
80
77
  });
81
78
  }
82
79
  }
@@ -2,9 +2,19 @@ import { base58 } from "@scure/base";
2
2
  import { CoID } from "../coValue.js";
3
3
  import { CoValueUniqueness } from "../coValueCore.js";
4
4
  import { Encrypted, KeyID, KeySecret, Sealed } from "../crypto/crypto.js";
5
- import { AgentID, isAgentID } from "../ids.js";
5
+ import {
6
+ AgentID,
7
+ ChildGroupReference,
8
+ ParentGroupReference,
9
+ getChildGroupId,
10
+ getParentGroupId,
11
+ isAgentID,
12
+ isChildGroupReference,
13
+ isParentGroupReference,
14
+ } from "../ids.js";
6
15
  import { JsonObject } from "../jsonValue.js";
7
16
  import { Role } from "../permissions.js";
17
+ import { expectGroup } from "../typeUtils/expectGroup.js";
8
18
  import {
9
19
  ControlledAccountOrAgent,
10
20
  RawAccount,
@@ -29,6 +39,8 @@ export type GroupShape = {
29
39
  KeySecret,
30
40
  { encryptedID: KeyID; encryptingID: KeyID }
31
41
  >;
42
+ [parent: ParentGroupReference]: "extend";
43
+ [child: ChildGroupReference]: "extend";
32
44
  };
33
45
 
34
46
  /** A `Group` is a scope for permissions of its members (`"reader" | "writer" | "admin"`), applying to objects owned by that group.
@@ -61,12 +73,109 @@ export class RawGroup<
61
73
  * @category 1. Role reading
62
74
  */
63
75
  roleOf(accountID: RawAccountID): Role | undefined {
64
- return this.roleOfInternal(accountID);
76
+ return this.roleOfInternal(accountID)?.role;
65
77
  }
66
78
 
67
79
  /** @internal */
68
- roleOfInternal(accountID: RawAccountID | AgentID): Role | undefined {
69
- return this.get(accountID);
80
+ roleOfInternal(
81
+ accountID: RawAccountID | AgentID | typeof EVERYONE,
82
+ ): { role: Role; via: CoID<RawGroup> | undefined } | undefined {
83
+ const roleHere = this.get(accountID);
84
+ if (roleHere === "revoked") {
85
+ return undefined;
86
+ }
87
+
88
+ let roleInfo:
89
+ | {
90
+ role: Exclude<Role, "revoked">;
91
+ via: CoID<RawGroup> | undefined;
92
+ }
93
+ | undefined = roleHere && { role: roleHere, via: undefined };
94
+
95
+ const parentGroups = this.getParentGroups();
96
+
97
+ for (const parentGroup of parentGroups) {
98
+ const roleInParent = parentGroup.roleOfInternal(accountID);
99
+
100
+ if (
101
+ roleInParent &&
102
+ roleInParent.role !== "revoked" &&
103
+ isMorePermissiveAndShouldInherit(roleInParent.role, roleInfo?.role)
104
+ ) {
105
+ roleInfo = { role: roleInParent.role, via: parentGroup.id };
106
+ }
107
+ }
108
+
109
+ return roleInfo;
110
+ }
111
+
112
+ getParentGroups() {
113
+ const groups: RawGroup[] = [];
114
+
115
+ for (const key of this.keys()) {
116
+ if (isParentGroupReference(key)) {
117
+ const parent = this.core.node.expectCoValueLoaded(
118
+ getParentGroupId(key),
119
+ "Expected parent group to be loaded",
120
+ );
121
+ groups.push(expectGroup(parent.getCurrentContent()));
122
+ }
123
+ }
124
+
125
+ return groups;
126
+ }
127
+
128
+ loadAllChildGroups() {
129
+ const requests: Promise<unknown>[] = [];
130
+ const store = this.core.node.coValuesStore;
131
+ const peers = this.core.node.syncManager.getServerAndStoragePeers();
132
+
133
+ for (const key of this.keys()) {
134
+ if (!isChildGroupReference(key)) {
135
+ continue;
136
+ }
137
+
138
+ const id = getChildGroupId(key);
139
+ const child = store.get(id);
140
+
141
+ if (
142
+ child.state.type === "unknown" ||
143
+ child.state.type === "unavailable"
144
+ ) {
145
+ child.loadFromPeers(peers).catch(() => {
146
+ console.error(`Failed to load child group ${id}`);
147
+ });
148
+ }
149
+
150
+ requests.push(
151
+ child.getCoValue().then((coValue) => {
152
+ if (coValue === "unavailable") {
153
+ throw new Error(`Child group ${child.id} is unavailable`);
154
+ }
155
+
156
+ // Recursively load child groups
157
+ return expectGroup(coValue.getCurrentContent()).loadAllChildGroups();
158
+ }),
159
+ );
160
+ }
161
+
162
+ return Promise.all(requests);
163
+ }
164
+
165
+ getChildGroups() {
166
+ const groups: RawGroup[] = [];
167
+
168
+ for (const key of this.keys()) {
169
+ if (isChildGroupReference(key)) {
170
+ const child = this.core.node.expectCoValueLoaded(
171
+ getChildGroupId(key),
172
+ "Expected child group to be loaded",
173
+ );
174
+ groups.push(expectGroup(child.getCurrentContent()));
175
+ }
176
+ }
177
+
178
+ return groups;
70
179
  }
71
180
 
72
181
  /**
@@ -75,7 +184,7 @@ export class RawGroup<
75
184
  * @category 1. Role reading
76
185
  */
77
186
  myRole(): Role | undefined {
78
- return this.roleOfInternal(this.core.node.account.id);
187
+ return this.roleOfInternal(this.core.node.account.id)?.role;
79
188
  }
80
189
 
81
190
  /**
@@ -158,6 +267,10 @@ export class RawGroup<
158
267
  }
159
268
  }) as (RawAccountID | AgentID)[];
160
269
 
270
+ // Get these early, so we fail fast if they are unavailable
271
+ const parentGroups = this.getParentGroups();
272
+ const childGroups = this.getChildGroups();
273
+
161
274
  const maybeCurrentReadKey = this.core.getCurrentReadKey();
162
275
 
163
276
  if (!maybeCurrentReadKey.secret) {
@@ -204,6 +317,73 @@ export class RawGroup<
204
317
  );
205
318
 
206
319
  this.set("readKey", newReadKey.id, "trusting");
320
+
321
+ // when we rotate our readKey (because someone got kicked out), we also need to (recursively)
322
+ // rotate the readKeys of all child groups (so they are kicked out there as well)
323
+ for (const parent of parentGroups) {
324
+ const { id: parentReadKeyID, secret: parentReadKeySecret } =
325
+ parent.core.getCurrentReadKey();
326
+
327
+ if (!parentReadKeySecret) {
328
+ throw new Error(
329
+ "Can't reveal new child key to parent where we don't have access to the parent read key",
330
+ );
331
+ }
332
+
333
+ this.set(
334
+ `${newReadKey.id}_for_${parentReadKeyID}`,
335
+ this.core.crypto.encryptKeySecret({
336
+ encrypting: {
337
+ id: parentReadKeyID,
338
+ secret: parentReadKeySecret,
339
+ },
340
+ toEncrypt: newReadKey,
341
+ }).encrypted,
342
+ "trusting",
343
+ );
344
+ }
345
+
346
+ for (const child of childGroups) {
347
+ child.rotateReadKey();
348
+ }
349
+ }
350
+
351
+ extend(parent: RawGroup) {
352
+ if (parent.myRole() !== "admin" || this.myRole() !== "admin") {
353
+ throw new Error(
354
+ "To extend a group, the current account must have admin role in both groups",
355
+ );
356
+ }
357
+
358
+ this.set(`parent_${parent.id}`, "extend", "trusting");
359
+ parent.set(`child_${this.id}`, "extend", "trusting");
360
+
361
+ const { id: parentReadKeyID, secret: parentReadKeySecret } =
362
+ parent.core.getCurrentReadKey();
363
+ if (!parentReadKeySecret) {
364
+ throw new Error("Can't extend group without parent read key secret");
365
+ }
366
+
367
+ const { id: childReadKeyID, secret: childReadKeySecret } =
368
+ this.core.getCurrentReadKey();
369
+ if (!childReadKeySecret) {
370
+ throw new Error("Can't extend group without child read key secret");
371
+ }
372
+
373
+ this.set(
374
+ `${childReadKeyID}_for_${parentReadKeyID}`,
375
+ this.core.crypto.encryptKeySecret({
376
+ encrypting: {
377
+ id: parentReadKeyID,
378
+ secret: parentReadKeySecret,
379
+ },
380
+ toEncrypt: {
381
+ id: childReadKeyID,
382
+ secret: childReadKeySecret,
383
+ },
384
+ }).encrypted,
385
+ "trusting",
386
+ );
207
387
  }
208
388
 
209
389
  /**
@@ -213,7 +393,12 @@ export class RawGroup<
213
393
  *
214
394
  * @category 2. Role changing
215
395
  */
216
- removeMember(account: RawAccount | ControlledAccountOrAgent | Everyone) {
396
+ async removeMember(
397
+ account: RawAccount | ControlledAccountOrAgent | Everyone,
398
+ ) {
399
+ // Ensure all child groups are loaded before removing a member
400
+ await this.loadAllChildGroups();
401
+
217
402
  this.removeMemberInternal(account);
218
403
  }
219
404
 
@@ -347,6 +532,34 @@ export class RawGroup<
347
532
  }
348
533
  }
349
534
 
535
+ function isMorePermissiveAndShouldInherit(
536
+ roleInParent: Role,
537
+ roleInChild: Exclude<Role, "revoked"> | undefined,
538
+ ) {
539
+ // invites should never be inherited
540
+ if (
541
+ roleInParent === "adminInvite" ||
542
+ roleInParent === "writerInvite" ||
543
+ roleInParent === "readerInvite"
544
+ ) {
545
+ return false;
546
+ }
547
+
548
+ if (roleInParent === "admin") {
549
+ return !roleInChild || roleInChild !== "admin";
550
+ }
551
+
552
+ if (roleInParent === "writer") {
553
+ return !roleInChild || roleInChild === "reader";
554
+ }
555
+
556
+ if (roleInParent === "reader") {
557
+ return !roleInChild;
558
+ }
559
+
560
+ return false;
561
+ }
562
+
350
563
  export type InviteSecret = `inviteSecret_z${string}`;
351
564
 
352
565
  function inviteSecretFromSecretSeed(secretSeed: Uint8Array): InviteSecret {