@dxos/credentials 0.8.4-main.40e3dcdf1b → 0.8.4-main.422d1c7879

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.
@@ -68,6 +68,14 @@ var getCredentialProofPayload = (credential) => {
68
68
  delete copy.parentCredentialIds;
69
69
  }
70
70
  delete copy.id;
71
+ const assertion = copy.subject?.assertion;
72
+ if (assertion) {
73
+ for (const key of Object.keys(assertion)) {
74
+ if (Array.isArray(assertion[key]) && assertion[key].length === 0) {
75
+ delete assertion[key];
76
+ }
77
+ }
78
+ }
71
79
  return Buffer.from(canonicalStringify(copy));
72
80
  };
73
81
  var canonicalStringify = (obj) => stableStringify(obj, {
@@ -314,7 +322,7 @@ var createCredentialSignerWithChain = (signer, chain, signingKey) => ({
314
322
  });
315
323
 
316
324
  // src/credentials/credential-generator.ts
317
- import { AdmittedFeed, SpaceMember } from "@dxos/protocols/proto/dxos/halo/credentials";
325
+ import { AdmittedFeed, MembershipPolicy, SpaceMember } from "@dxos/protocols/proto/dxos/halo/credentials";
318
326
  import { Timeframe as Timeframe2 } from "@dxos/timeframe";
319
327
  var CredentialGenerator = class {
320
328
  _signer;
@@ -328,7 +336,7 @@ var CredentialGenerator = class {
328
336
  /**
329
337
  * Create genesis messages for new Space.
330
338
  */
331
- async createSpaceGenesis(spaceKey, controlKey, creatorProfile) {
339
+ async createSpaceGenesis(spaceKey, controlKey, creatorProfile, membershipPolicy = MembershipPolicy.INVITE) {
332
340
  return [
333
341
  await createCredential({
334
342
  signer: this._signer,
@@ -336,7 +344,8 @@ var CredentialGenerator = class {
336
344
  subject: spaceKey,
337
345
  assertion: {
338
346
  "@type": "dxos.halo.credentials.SpaceGenesis",
339
- spaceKey
347
+ spaceKey,
348
+ membershipPolicy
340
349
  }
341
350
  }),
342
351
  await createCredential({
@@ -463,7 +472,7 @@ var createDeviceAuthorization = async (signer, identityKey, deviceKey) => {
463
472
  credential
464
473
  }));
465
474
  };
466
- var createAdmissionCredentials = async (signer, identityKey, spaceKey, genesisFeedKey, role = SpaceMember.Role.ADMIN, membershipChainHeads = [], profile, invitationCredentialId) => {
475
+ var createAdmissionCredentials = async (signer, identityKey, spaceKey, genesisFeedKey, role = SpaceMember.Role.ADMIN, membershipChainHeads = [], profile, invitationCredentialId, tags) => {
467
476
  const credentials = await Promise.all([
468
477
  await signer.createCredential({
469
478
  subject: identityKey,
@@ -474,7 +483,8 @@ var createAdmissionCredentials = async (signer, identityKey, spaceKey, genesisFe
474
483
  role,
475
484
  profile,
476
485
  genesisFeedKey,
477
- invitationCredentialId
486
+ invitationCredentialId,
487
+ tags: tags ?? []
478
488
  }
479
489
  })
480
490
  ]);
@@ -631,7 +641,7 @@ import { runInContextAsync, synchronized } from "@dxos/async";
631
641
  import { Context } from "@dxos/context";
632
642
  import { PublicKey as PublicKey8 } from "@dxos/keys";
633
643
  import { log as log3 } from "@dxos/log";
634
- import { SpaceMember as SpaceMember3 } from "@dxos/protocols/proto/dxos/halo/credentials";
644
+ import { MembershipPolicy as MembershipPolicy2, SpaceMember as SpaceMember3 } from "@dxos/protocols/proto/dxos/halo/credentials";
635
645
  import { Callback as Callback4, ComplexMap as ComplexMap6, ComplexSet as ComplexSet3 } from "@dxos/util";
636
646
 
637
647
  // src/state-machine/feed-state-machine.ts
@@ -1498,6 +1508,8 @@ var SpaceStateMachine = class {
1498
1508
  _credentialsById = new ComplexMap6(PublicKey8.hash);
1499
1509
  _processedCredentials = new ComplexSet3(PublicKey8.hash);
1500
1510
  _genesisCredential;
1511
+ _tags = [];
1512
+ _membershipPolicy = MembershipPolicy2.INVITE;
1501
1513
  _credentialProcessors = [];
1502
1514
  onCredentialProcessed = new Callback4();
1503
1515
  onMemberRoleChanged;
@@ -1532,6 +1544,12 @@ var SpaceStateMachine = class {
1532
1544
  get genesisCredential() {
1533
1545
  return this._genesisCredential;
1534
1546
  }
1547
+ get tags() {
1548
+ return this._tags;
1549
+ }
1550
+ get membershipPolicy() {
1551
+ return this._membershipPolicy;
1552
+ }
1535
1553
  get invitations() {
1536
1554
  return this._invitations.invitations;
1537
1555
  }
@@ -1573,7 +1591,7 @@ var SpaceStateMachine = class {
1573
1591
  if (result.kind !== "pass") {
1574
1592
  log3.warn(`Invalid credential: ${result.errors.join(", ")}`, void 0, {
1575
1593
  F: __dxlog_file6,
1576
- L: 162,
1594
+ L: 173,
1577
1595
  S: this,
1578
1596
  C: (f, a) => f(...a)
1579
1597
  });
@@ -1586,7 +1604,7 @@ var SpaceStateMachine = class {
1586
1604
  if (this._genesisCredential) {
1587
1605
  log3.warn("Space already has a genesis credential.", void 0, {
1588
1606
  F: __dxlog_file6,
1589
- L: 171,
1607
+ L: 182,
1590
1608
  S: this,
1591
1609
  C: (f, a) => f(...a)
1592
1610
  });
@@ -1595,7 +1613,7 @@ var SpaceStateMachine = class {
1595
1613
  if (!credential.issuer.equals(this._spaceKey)) {
1596
1614
  log3.warn("Space genesis credential must be issued by space.", void 0, {
1597
1615
  F: __dxlog_file6,
1598
- L: 175,
1616
+ L: 186,
1599
1617
  S: this,
1600
1618
  C: (f, a) => f(...a)
1601
1619
  });
@@ -1604,13 +1622,15 @@ var SpaceStateMachine = class {
1604
1622
  if (!credential.subject.id.equals(this._spaceKey)) {
1605
1623
  log3.warn("Space genesis credential must be issued to space.", void 0, {
1606
1624
  F: __dxlog_file6,
1607
- L: 179,
1625
+ L: 190,
1608
1626
  S: this,
1609
1627
  C: (f, a) => f(...a)
1610
1628
  });
1611
1629
  return false;
1612
1630
  }
1613
1631
  this._genesisCredential = credential;
1632
+ this._tags = assertion.tags ?? [];
1633
+ this._membershipPolicy = assertion.membershipPolicy ?? MembershipPolicy2.INVITE;
1614
1634
  break;
1615
1635
  }
1616
1636
  case "dxos.halo.credentials.SpaceMember": {
@@ -1620,7 +1640,7 @@ var SpaceStateMachine = class {
1620
1640
  if (!this._genesisCredential) {
1621
1641
  log3.warn("Space must have a genesis credential before adding members.", void 0, {
1622
1642
  F: __dxlog_file6,
1623
- L: 192,
1643
+ L: 205,
1624
1644
  S: this,
1625
1645
  C: (f, a) => f(...a)
1626
1646
  });
@@ -1629,7 +1649,7 @@ var SpaceStateMachine = class {
1629
1649
  if (!this._canInviteNewMembers(credential.issuer)) {
1630
1650
  log3.warn(`Space member is not authorized to invite new members: ${credential.issuer}`, void 0, {
1631
1651
  F: __dxlog_file6,
1632
- L: 196,
1652
+ L: 209,
1633
1653
  S: this,
1634
1654
  C: (f, a) => f(...a)
1635
1655
  });
@@ -1643,7 +1663,7 @@ var SpaceStateMachine = class {
1643
1663
  if (!this._genesisCredential) {
1644
1664
  log3.warn("Space must have a genesis credential before adding members.", void 0, {
1645
1665
  F: __dxlog_file6,
1646
- L: 207,
1666
+ L: 220,
1647
1667
  S: this,
1648
1668
  C: (f, a) => f(...a)
1649
1669
  });
@@ -1656,7 +1676,7 @@ var SpaceStateMachine = class {
1656
1676
  if (!this._genesisCredential) {
1657
1677
  log3.warn("Space must have a genesis credential before admitting feeds.", void 0, {
1658
1678
  F: __dxlog_file6,
1659
- L: 217,
1679
+ L: 230,
1660
1680
  S: this,
1661
1681
  C: (f, a) => f(...a)
1662
1682
  });
@@ -1670,7 +1690,7 @@ var SpaceStateMachine = class {
1670
1690
  if (!this._canInviteNewMembers(credential.issuer)) {
1671
1691
  log3.warn(`Invalid invitation, space member is not authorized to invite new members: ${credential.issuer}`, void 0, {
1672
1692
  F: __dxlog_file6,
1673
- L: 228,
1693
+ L: 241,
1674
1694
  S: this,
1675
1695
  C: (f, a) => f(...a)
1676
1696
  });
@@ -1704,6 +1724,9 @@ var SpaceStateMachine = class {
1704
1724
  return this._canInviteNewMembers(memberKey);
1705
1725
  }
1706
1726
  _canInviteNewMembers(key) {
1727
+ if (this._membershipPolicy === MembershipPolicy2.LOCKED) {
1728
+ return key.equals(this._spaceKey) && this._members.members.size === 0;
1729
+ }
1707
1730
  return key.equals(this._spaceKey) || this._members.getRole(key) === SpaceMember3.Role.ADMIN || this._members.getRole(key) === SpaceMember3.Role.OWNER;
1708
1731
  }
1709
1732
  };
@@ -1716,7 +1739,7 @@ var CredentialConsumer = class {
1716
1739
  _onClose;
1717
1740
  _ctx = new Context(void 0, {
1718
1741
  F: __dxlog_file6,
1719
- L: 273
1742
+ L: 291
1720
1743
  });
1721
1744
  /**
1722
1745
  * @internal
@@ -1773,7 +1796,7 @@ var DeviceStateMachine = class {
1773
1796
  credential
1774
1797
  }, {
1775
1798
  F: __dxlog_file7,
1776
- L: 36,
1799
+ L: 35,
1777
1800
  S: this,
1778
1801
  C: (f, a) => f(...a)
1779
1802
  });
@@ -1793,7 +1816,7 @@ var DeviceStateMachine = class {
1793
1816
  size: this.authorizedDeviceKeys.size
1794
1817
  }, {
1795
1818
  F: __dxlog_file7,
1796
- L: 56,
1819
+ L: 55,
1797
1820
  S: this,
1798
1821
  C: (f, a) => f(...a)
1799
1822
  });
@@ -1803,7 +1826,7 @@ var DeviceStateMachine = class {
1803
1826
  case "dxos.halo.credentials.DeviceProfile": {
1804
1827
  invariant6(this.authorizedDeviceKeys.has(credential.subject.id), "Device not found.", {
1805
1828
  F: __dxlog_file7,
1806
- L: 66,
1829
+ L: 65,
1807
1830
  S: this,
1808
1831
  A: [
1809
1832
  "this.authorizedDeviceKeys.has(credential.subject.id)",
@@ -1816,7 +1839,7 @@ var DeviceStateMachine = class {
1816
1839
  profile: assertion.profile
1817
1840
  }, {
1818
1841
  F: __dxlog_file7,
1819
- L: 69,
1842
+ L: 68,
1820
1843
  S: this,
1821
1844
  C: (f, a) => f(...a)
1822
1845
  });
@@ -1849,7 +1872,7 @@ var ProfileStateMachine = class {
1849
1872
  credential
1850
1873
  }, {
1851
1874
  F: __dxlog_file8,
1852
- L: 35,
1875
+ L: 34,
1853
1876
  S: this,
1854
1877
  C: (f, a) => f(...a)
1855
1878
  });
@@ -1861,7 +1884,7 @@ var ProfileStateMachine = class {
1861
1884
  profile: this.profile
1862
1885
  }, {
1863
1886
  F: __dxlog_file8,
1864
- L: 41,
1887
+ L: 40,
1865
1888
  S: this,
1866
1889
  C: (f, a) => f(...a)
1867
1890
  });