@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.
- package/dist/lib/neutral/index.mjs +45 -22
- package/dist/lib/neutral/index.mjs.map +3 -3
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/types/src/credentials/credential-generator.d.ts +3 -3
- package/dist/types/src/credentials/credential-generator.d.ts.map +1 -1
- package/dist/types/src/credentials/signing.d.ts.map +1 -1
- package/dist/types/src/presentations/presentation.d.ts.map +1 -1
- package/dist/types/src/presentations/verifier.d.ts.map +1 -1
- package/dist/types/src/processor/device-state-machine.d.ts.map +1 -1
- package/dist/types/src/processor/profile-state-machine.d.ts.map +1 -1
- package/dist/types/src/state-machine/space-state-machine.d.ts +7 -1
- package/dist/types/src/state-machine/space-state-machine.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -15
- package/src/credentials/credential-generator.ts +5 -0
- package/src/credentials/signing.ts +12 -0
- package/src/presentations/json-encoding.test.ts +0 -2
- package/src/presentations/presentation.ts +0 -1
- package/src/presentations/verifier.test.ts +0 -1
- package/src/presentations/verifier.ts +0 -1
- package/src/processor/device-state-machine.ts +0 -1
- package/src/processor/profile-state-machine.ts +0 -1
- package/src/state-machine/invitation-state-machine.test.ts +0 -1
- package/src/state-machine/member-state-machine.test.ts +0 -1
- package/src/state-machine/space-state-machine.test.ts +243 -2
- package/src/state-machine/space-state-machine.ts +20 -2
|
@@ -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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
1887
|
+
L: 40,
|
|
1865
1888
|
S: this,
|
|
1866
1889
|
C: (f, a) => f(...a)
|
|
1867
1890
|
});
|