@dxos/credentials 0.8.4-main.406dc2a → 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/{browser → neutral}/index.mjs +160 -243
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/{browser → neutral}/meta.json +1 -1
- package/dist/types/src/credentials/credential-factory.d.ts +4 -4
- package/dist/types/src/credentials/credential-factory.d.ts.map +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 +2 -2
- package/dist/types/src/processor/device-state-machine.d.ts.map +1 -1
- package/dist/types/src/processor/profile-state-machine.d.ts +2 -2
- 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/docs/README.md +17 -17
- package/moon.yml +2 -1
- package/package.json +18 -19
- package/src/credentials/credential-factory.ts +4 -4
- 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 +2 -3
- package/src/processor/profile-state-machine.ts +2 -3
- 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
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -2018
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
|
@@ -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,26 +322,21 @@ 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
|
-
function _define_property(obj, key, value) {
|
|
320
|
-
if (key in obj) {
|
|
321
|
-
Object.defineProperty(obj, key, {
|
|
322
|
-
value,
|
|
323
|
-
enumerable: true,
|
|
324
|
-
configurable: true,
|
|
325
|
-
writable: true
|
|
326
|
-
});
|
|
327
|
-
} else {
|
|
328
|
-
obj[key] = value;
|
|
329
|
-
}
|
|
330
|
-
return obj;
|
|
331
|
-
}
|
|
332
327
|
var CredentialGenerator = class {
|
|
328
|
+
_signer;
|
|
329
|
+
_identityKey;
|
|
330
|
+
_deviceKey;
|
|
331
|
+
constructor(_signer, _identityKey, _deviceKey) {
|
|
332
|
+
this._signer = _signer;
|
|
333
|
+
this._identityKey = _identityKey;
|
|
334
|
+
this._deviceKey = _deviceKey;
|
|
335
|
+
}
|
|
333
336
|
/**
|
|
334
337
|
* Create genesis messages for new Space.
|
|
335
338
|
*/
|
|
336
|
-
async createSpaceGenesis(spaceKey, controlKey, creatorProfile) {
|
|
339
|
+
async createSpaceGenesis(spaceKey, controlKey, creatorProfile, membershipPolicy = MembershipPolicy.INVITE) {
|
|
337
340
|
return [
|
|
338
341
|
await createCredential({
|
|
339
342
|
signer: this._signer,
|
|
@@ -341,7 +344,8 @@ var CredentialGenerator = class {
|
|
|
341
344
|
subject: spaceKey,
|
|
342
345
|
assertion: {
|
|
343
346
|
"@type": "dxos.halo.credentials.SpaceGenesis",
|
|
344
|
-
spaceKey
|
|
347
|
+
spaceKey,
|
|
348
|
+
membershipPolicy
|
|
345
349
|
}
|
|
346
350
|
}),
|
|
347
351
|
await createCredential({
|
|
@@ -451,14 +455,6 @@ var CredentialGenerator = class {
|
|
|
451
455
|
}
|
|
452
456
|
});
|
|
453
457
|
}
|
|
454
|
-
constructor(_signer, _identityKey, _deviceKey) {
|
|
455
|
-
_define_property(this, "_signer", void 0);
|
|
456
|
-
_define_property(this, "_identityKey", void 0);
|
|
457
|
-
_define_property(this, "_deviceKey", void 0);
|
|
458
|
-
this._signer = _signer;
|
|
459
|
-
this._identityKey = _identityKey;
|
|
460
|
-
this._deviceKey = _deviceKey;
|
|
461
|
-
}
|
|
462
458
|
};
|
|
463
459
|
var createDeviceAuthorization = async (signer, identityKey, deviceKey) => {
|
|
464
460
|
const credentials = await Promise.all([
|
|
@@ -476,7 +472,7 @@ var createDeviceAuthorization = async (signer, identityKey, deviceKey) => {
|
|
|
476
472
|
credential
|
|
477
473
|
}));
|
|
478
474
|
};
|
|
479
|
-
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) => {
|
|
480
476
|
const credentials = await Promise.all([
|
|
481
477
|
await signer.createCredential({
|
|
482
478
|
subject: identityKey,
|
|
@@ -487,7 +483,8 @@ var createAdmissionCredentials = async (signer, identityKey, spaceKey, genesisFe
|
|
|
487
483
|
role,
|
|
488
484
|
profile,
|
|
489
485
|
genesisFeedKey,
|
|
490
|
-
invitationCredentialId
|
|
486
|
+
invitationCredentialId,
|
|
487
|
+
tags: tags ?? []
|
|
491
488
|
}
|
|
492
489
|
})
|
|
493
490
|
]);
|
|
@@ -644,28 +641,21 @@ import { runInContextAsync, synchronized } from "@dxos/async";
|
|
|
644
641
|
import { Context } from "@dxos/context";
|
|
645
642
|
import { PublicKey as PublicKey8 } from "@dxos/keys";
|
|
646
643
|
import { log as log3 } from "@dxos/log";
|
|
647
|
-
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";
|
|
648
645
|
import { Callback as Callback4, ComplexMap as ComplexMap6, ComplexSet as ComplexSet3 } from "@dxos/util";
|
|
649
646
|
|
|
650
647
|
// src/state-machine/feed-state-machine.ts
|
|
651
648
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
652
649
|
import { PublicKey as PublicKey4 } from "@dxos/keys";
|
|
653
650
|
import { Callback, ComplexMap as ComplexMap2 } from "@dxos/util";
|
|
654
|
-
function _define_property2(obj, key, value) {
|
|
655
|
-
if (key in obj) {
|
|
656
|
-
Object.defineProperty(obj, key, {
|
|
657
|
-
value,
|
|
658
|
-
enumerable: true,
|
|
659
|
-
configurable: true,
|
|
660
|
-
writable: true
|
|
661
|
-
});
|
|
662
|
-
} else {
|
|
663
|
-
obj[key] = value;
|
|
664
|
-
}
|
|
665
|
-
return obj;
|
|
666
|
-
}
|
|
667
651
|
var __dxlog_file3 = "/__w/dxos/dxos/packages/core/halo/credentials/src/state-machine/feed-state-machine.ts";
|
|
668
652
|
var FeedStateMachine = class {
|
|
653
|
+
_spaceKey;
|
|
654
|
+
_feeds = new ComplexMap2(PublicKey4.hash);
|
|
655
|
+
onFeedAdmitted = new Callback();
|
|
656
|
+
constructor(_spaceKey) {
|
|
657
|
+
this._spaceKey = _spaceKey;
|
|
658
|
+
}
|
|
669
659
|
get feeds() {
|
|
670
660
|
return this._feeds;
|
|
671
661
|
}
|
|
@@ -704,33 +694,17 @@ var FeedStateMachine = class {
|
|
|
704
694
|
this._feeds.set(credential.subject.id, info);
|
|
705
695
|
await this.onFeedAdmitted.callIfSet(info);
|
|
706
696
|
}
|
|
707
|
-
constructor(_spaceKey) {
|
|
708
|
-
_define_property2(this, "_spaceKey", void 0);
|
|
709
|
-
_define_property2(this, "_feeds", void 0);
|
|
710
|
-
_define_property2(this, "onFeedAdmitted", void 0);
|
|
711
|
-
this._spaceKey = _spaceKey;
|
|
712
|
-
this._feeds = new ComplexMap2(PublicKey4.hash);
|
|
713
|
-
this.onFeedAdmitted = new Callback();
|
|
714
|
-
}
|
|
715
697
|
};
|
|
716
698
|
|
|
717
699
|
// src/state-machine/invitation-state-machine.ts
|
|
718
700
|
import { PublicKey as PublicKey5 } from "@dxos/keys";
|
|
719
701
|
import { Callback as Callback2, ComplexMap as ComplexMap3, ComplexSet } from "@dxos/util";
|
|
720
|
-
function _define_property3(obj, key, value) {
|
|
721
|
-
if (key in obj) {
|
|
722
|
-
Object.defineProperty(obj, key, {
|
|
723
|
-
value,
|
|
724
|
-
enumerable: true,
|
|
725
|
-
configurable: true,
|
|
726
|
-
writable: true
|
|
727
|
-
});
|
|
728
|
-
} else {
|
|
729
|
-
obj[key] = value;
|
|
730
|
-
}
|
|
731
|
-
return obj;
|
|
732
|
-
}
|
|
733
702
|
var InvitationStateMachine = class {
|
|
703
|
+
_invitations = new ComplexMap3(PublicKey5.hash);
|
|
704
|
+
_redeemedInvitationCredentialIds = new ComplexSet(PublicKey5.hash);
|
|
705
|
+
_cancelledInvitationCredentialIds = new ComplexSet(PublicKey5.hash);
|
|
706
|
+
onDelegatedInvitation = new Callback2();
|
|
707
|
+
onDelegatedInvitationRemoved = new Callback2();
|
|
734
708
|
get invitations() {
|
|
735
709
|
return this._invitations;
|
|
736
710
|
}
|
|
@@ -788,13 +762,6 @@ var InvitationStateMachine = class {
|
|
|
788
762
|
}
|
|
789
763
|
}
|
|
790
764
|
}
|
|
791
|
-
constructor() {
|
|
792
|
-
_define_property3(this, "_invitations", new ComplexMap3(PublicKey5.hash));
|
|
793
|
-
_define_property3(this, "_redeemedInvitationCredentialIds", new ComplexSet(PublicKey5.hash));
|
|
794
|
-
_define_property3(this, "_cancelledInvitationCredentialIds", new ComplexSet(PublicKey5.hash));
|
|
795
|
-
_define_property3(this, "onDelegatedInvitation", new Callback2());
|
|
796
|
-
_define_property3(this, "onDelegatedInvitationRemoved", new Callback2());
|
|
797
|
-
}
|
|
798
765
|
};
|
|
799
766
|
|
|
800
767
|
// src/state-machine/member-state-machine.ts
|
|
@@ -809,21 +776,43 @@ import { invariant as invariant4 } from "@dxos/invariant";
|
|
|
809
776
|
import { PublicKey as PublicKey6 } from "@dxos/keys";
|
|
810
777
|
import { log } from "@dxos/log";
|
|
811
778
|
import { Callback as Callback3, ComplexMap as ComplexMap4, ComplexSet as ComplexSet2 } from "@dxos/util";
|
|
812
|
-
function _define_property4(obj, key, value) {
|
|
813
|
-
if (key in obj) {
|
|
814
|
-
Object.defineProperty(obj, key, {
|
|
815
|
-
value,
|
|
816
|
-
enumerable: true,
|
|
817
|
-
configurable: true,
|
|
818
|
-
writable: true
|
|
819
|
-
});
|
|
820
|
-
} else {
|
|
821
|
-
obj[key] = value;
|
|
822
|
-
}
|
|
823
|
-
return obj;
|
|
824
|
-
}
|
|
825
779
|
var __dxlog_file4 = "/__w/dxos/dxos/packages/core/halo/credentials/src/graph/credential-graph.ts";
|
|
826
780
|
var CredentialGraph = class {
|
|
781
|
+
_stateHandler;
|
|
782
|
+
/**
|
|
783
|
+
* Local ids are used during traversals.
|
|
784
|
+
*/
|
|
785
|
+
_vertexIdGenerator = 1;
|
|
786
|
+
/**
|
|
787
|
+
* All credentials without parent references are connected to the root.
|
|
788
|
+
*/
|
|
789
|
+
_root = {
|
|
790
|
+
id: -1,
|
|
791
|
+
parents: [],
|
|
792
|
+
children: []
|
|
793
|
+
};
|
|
794
|
+
/**
|
|
795
|
+
* A credential which is not a parent of any other credential has the sentinel as a child.
|
|
796
|
+
* Sentinel is a virtual merge-point of all credentials.
|
|
797
|
+
*/
|
|
798
|
+
_sentinel = {
|
|
799
|
+
id: -2,
|
|
800
|
+
parents: [],
|
|
801
|
+
children: []
|
|
802
|
+
};
|
|
803
|
+
/**
|
|
804
|
+
* Vertex references are used for fast credential inserts into the graph.
|
|
805
|
+
*/
|
|
806
|
+
_vertexByCredentialId = new ComplexMap4(PublicKey6.hash);
|
|
807
|
+
/**
|
|
808
|
+
* The current state of the graph.
|
|
809
|
+
*/
|
|
810
|
+
_subjectToVertex = new ComplexMap4(PublicKey6.hash);
|
|
811
|
+
_subjectToState = new ComplexMap4(PublicKey6.hash);
|
|
812
|
+
onSubjectStateChanged = new Callback3();
|
|
813
|
+
constructor(_stateHandler) {
|
|
814
|
+
this._stateHandler = _stateHandler;
|
|
815
|
+
}
|
|
827
816
|
getSubjectState(subjectId) {
|
|
828
817
|
return this._subjectToState.get(subjectId);
|
|
829
818
|
}
|
|
@@ -1346,32 +1335,6 @@ var CredentialGraph = class {
|
|
|
1346
1335
|
credentials: new ComplexSet2(PublicKey6.hash)
|
|
1347
1336
|
};
|
|
1348
1337
|
}
|
|
1349
|
-
constructor(_stateHandler) {
|
|
1350
|
-
_define_property4(this, "_stateHandler", void 0);
|
|
1351
|
-
_define_property4(this, "_vertexIdGenerator", void 0);
|
|
1352
|
-
_define_property4(this, "_root", void 0);
|
|
1353
|
-
_define_property4(this, "_sentinel", void 0);
|
|
1354
|
-
_define_property4(this, "_vertexByCredentialId", void 0);
|
|
1355
|
-
_define_property4(this, "_subjectToVertex", void 0);
|
|
1356
|
-
_define_property4(this, "_subjectToState", void 0);
|
|
1357
|
-
_define_property4(this, "onSubjectStateChanged", void 0);
|
|
1358
|
-
this._stateHandler = _stateHandler;
|
|
1359
|
-
this._vertexIdGenerator = 1;
|
|
1360
|
-
this._root = {
|
|
1361
|
-
id: -1,
|
|
1362
|
-
parents: [],
|
|
1363
|
-
children: []
|
|
1364
|
-
};
|
|
1365
|
-
this._sentinel = {
|
|
1366
|
-
id: -2,
|
|
1367
|
-
parents: [],
|
|
1368
|
-
children: []
|
|
1369
|
-
};
|
|
1370
|
-
this._vertexByCredentialId = new ComplexMap4(PublicKey6.hash);
|
|
1371
|
-
this._subjectToVertex = new ComplexMap4(PublicKey6.hash);
|
|
1372
|
-
this._subjectToState = new ComplexMap4(PublicKey6.hash);
|
|
1373
|
-
this.onSubjectStateChanged = new Callback3();
|
|
1374
|
-
}
|
|
1375
1338
|
};
|
|
1376
1339
|
var toChosenPath = (path) => {
|
|
1377
1340
|
return Object.fromEntries(Object.entries(path.chosenPath).map(([k, vs]) => [
|
|
@@ -1381,21 +1344,16 @@ var toChosenPath = (path) => {
|
|
|
1381
1344
|
};
|
|
1382
1345
|
|
|
1383
1346
|
// src/state-machine/member-state-machine.ts
|
|
1384
|
-
function _define_property5(obj, key, value) {
|
|
1385
|
-
if (key in obj) {
|
|
1386
|
-
Object.defineProperty(obj, key, {
|
|
1387
|
-
value,
|
|
1388
|
-
enumerable: true,
|
|
1389
|
-
configurable: true,
|
|
1390
|
-
writable: true
|
|
1391
|
-
});
|
|
1392
|
-
} else {
|
|
1393
|
-
obj[key] = value;
|
|
1394
|
-
}
|
|
1395
|
-
return obj;
|
|
1396
|
-
}
|
|
1397
1347
|
var __dxlog_file5 = "/__w/dxos/dxos/packages/core/halo/credentials/src/state-machine/member-state-machine.ts";
|
|
1398
1348
|
var MemberStateMachine = class {
|
|
1349
|
+
_spaceKey;
|
|
1350
|
+
_ownerKey;
|
|
1351
|
+
_memberProfiles = new ComplexMap5(PublicKey7.hash);
|
|
1352
|
+
_hashgraph = new CredentialGraph(this);
|
|
1353
|
+
onMemberRoleChanged = this._hashgraph.onSubjectStateChanged;
|
|
1354
|
+
constructor(_spaceKey) {
|
|
1355
|
+
this._spaceKey = _spaceKey;
|
|
1356
|
+
}
|
|
1399
1357
|
get creator() {
|
|
1400
1358
|
return this._ownerKey && this._hashgraph.getSubjectState(this._ownerKey);
|
|
1401
1359
|
}
|
|
@@ -1531,33 +1489,9 @@ var MemberStateMachine = class {
|
|
|
1531
1489
|
}
|
|
1532
1490
|
return realRole;
|
|
1533
1491
|
}
|
|
1534
|
-
constructor(_spaceKey) {
|
|
1535
|
-
_define_property5(this, "_spaceKey", void 0);
|
|
1536
|
-
_define_property5(this, "_ownerKey", void 0);
|
|
1537
|
-
_define_property5(this, "_memberProfiles", void 0);
|
|
1538
|
-
_define_property5(this, "_hashgraph", void 0);
|
|
1539
|
-
_define_property5(this, "onMemberRoleChanged", void 0);
|
|
1540
|
-
this._spaceKey = _spaceKey;
|
|
1541
|
-
this._memberProfiles = new ComplexMap5(PublicKey7.hash);
|
|
1542
|
-
this._hashgraph = new CredentialGraph(this);
|
|
1543
|
-
this.onMemberRoleChanged = this._hashgraph.onSubjectStateChanged;
|
|
1544
|
-
}
|
|
1545
1492
|
};
|
|
1546
1493
|
|
|
1547
1494
|
// src/state-machine/space-state-machine.ts
|
|
1548
|
-
function _define_property6(obj, key, value) {
|
|
1549
|
-
if (key in obj) {
|
|
1550
|
-
Object.defineProperty(obj, key, {
|
|
1551
|
-
value,
|
|
1552
|
-
enumerable: true,
|
|
1553
|
-
configurable: true,
|
|
1554
|
-
writable: true
|
|
1555
|
-
});
|
|
1556
|
-
} else {
|
|
1557
|
-
obj[key] = value;
|
|
1558
|
-
}
|
|
1559
|
-
return obj;
|
|
1560
|
-
}
|
|
1561
1495
|
function _ts_decorate(decorators, target, key, desc) {
|
|
1562
1496
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1563
1497
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -1566,6 +1500,29 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
1566
1500
|
}
|
|
1567
1501
|
var __dxlog_file6 = "/__w/dxos/dxos/packages/core/halo/credentials/src/state-machine/space-state-machine.ts";
|
|
1568
1502
|
var SpaceStateMachine = class {
|
|
1503
|
+
_spaceKey;
|
|
1504
|
+
_members;
|
|
1505
|
+
_feeds;
|
|
1506
|
+
_invitations = new InvitationStateMachine();
|
|
1507
|
+
_credentials = [];
|
|
1508
|
+
_credentialsById = new ComplexMap6(PublicKey8.hash);
|
|
1509
|
+
_processedCredentials = new ComplexSet3(PublicKey8.hash);
|
|
1510
|
+
_genesisCredential;
|
|
1511
|
+
_tags = [];
|
|
1512
|
+
_membershipPolicy = MembershipPolicy2.INVITE;
|
|
1513
|
+
_credentialProcessors = [];
|
|
1514
|
+
onCredentialProcessed = new Callback4();
|
|
1515
|
+
onMemberRoleChanged;
|
|
1516
|
+
onFeedAdmitted;
|
|
1517
|
+
onDelegatedInvitation = this._invitations.onDelegatedInvitation;
|
|
1518
|
+
onDelegatedInvitationRemoved = this._invitations.onDelegatedInvitationRemoved;
|
|
1519
|
+
constructor(_spaceKey) {
|
|
1520
|
+
this._spaceKey = _spaceKey;
|
|
1521
|
+
this._members = new MemberStateMachine(this._spaceKey);
|
|
1522
|
+
this._feeds = new FeedStateMachine(this._spaceKey);
|
|
1523
|
+
this.onMemberRoleChanged = this._members.onMemberRoleChanged;
|
|
1524
|
+
this.onFeedAdmitted = this._feeds.onFeedAdmitted;
|
|
1525
|
+
}
|
|
1569
1526
|
get creator() {
|
|
1570
1527
|
return this._members.creator;
|
|
1571
1528
|
}
|
|
@@ -1587,6 +1544,12 @@ var SpaceStateMachine = class {
|
|
|
1587
1544
|
get genesisCredential() {
|
|
1588
1545
|
return this._genesisCredential;
|
|
1589
1546
|
}
|
|
1547
|
+
get tags() {
|
|
1548
|
+
return this._tags;
|
|
1549
|
+
}
|
|
1550
|
+
get membershipPolicy() {
|
|
1551
|
+
return this._membershipPolicy;
|
|
1552
|
+
}
|
|
1590
1553
|
get invitations() {
|
|
1591
1554
|
return this._invitations.invitations;
|
|
1592
1555
|
}
|
|
@@ -1628,7 +1591,7 @@ var SpaceStateMachine = class {
|
|
|
1628
1591
|
if (result.kind !== "pass") {
|
|
1629
1592
|
log3.warn(`Invalid credential: ${result.errors.join(", ")}`, void 0, {
|
|
1630
1593
|
F: __dxlog_file6,
|
|
1631
|
-
L:
|
|
1594
|
+
L: 173,
|
|
1632
1595
|
S: this,
|
|
1633
1596
|
C: (f, a) => f(...a)
|
|
1634
1597
|
});
|
|
@@ -1641,7 +1604,7 @@ var SpaceStateMachine = class {
|
|
|
1641
1604
|
if (this._genesisCredential) {
|
|
1642
1605
|
log3.warn("Space already has a genesis credential.", void 0, {
|
|
1643
1606
|
F: __dxlog_file6,
|
|
1644
|
-
L:
|
|
1607
|
+
L: 182,
|
|
1645
1608
|
S: this,
|
|
1646
1609
|
C: (f, a) => f(...a)
|
|
1647
1610
|
});
|
|
@@ -1650,7 +1613,7 @@ var SpaceStateMachine = class {
|
|
|
1650
1613
|
if (!credential.issuer.equals(this._spaceKey)) {
|
|
1651
1614
|
log3.warn("Space genesis credential must be issued by space.", void 0, {
|
|
1652
1615
|
F: __dxlog_file6,
|
|
1653
|
-
L:
|
|
1616
|
+
L: 186,
|
|
1654
1617
|
S: this,
|
|
1655
1618
|
C: (f, a) => f(...a)
|
|
1656
1619
|
});
|
|
@@ -1659,13 +1622,15 @@ var SpaceStateMachine = class {
|
|
|
1659
1622
|
if (!credential.subject.id.equals(this._spaceKey)) {
|
|
1660
1623
|
log3.warn("Space genesis credential must be issued to space.", void 0, {
|
|
1661
1624
|
F: __dxlog_file6,
|
|
1662
|
-
L:
|
|
1625
|
+
L: 190,
|
|
1663
1626
|
S: this,
|
|
1664
1627
|
C: (f, a) => f(...a)
|
|
1665
1628
|
});
|
|
1666
1629
|
return false;
|
|
1667
1630
|
}
|
|
1668
1631
|
this._genesisCredential = credential;
|
|
1632
|
+
this._tags = assertion.tags ?? [];
|
|
1633
|
+
this._membershipPolicy = assertion.membershipPolicy ?? MembershipPolicy2.INVITE;
|
|
1669
1634
|
break;
|
|
1670
1635
|
}
|
|
1671
1636
|
case "dxos.halo.credentials.SpaceMember": {
|
|
@@ -1675,7 +1640,7 @@ var SpaceStateMachine = class {
|
|
|
1675
1640
|
if (!this._genesisCredential) {
|
|
1676
1641
|
log3.warn("Space must have a genesis credential before adding members.", void 0, {
|
|
1677
1642
|
F: __dxlog_file6,
|
|
1678
|
-
L:
|
|
1643
|
+
L: 205,
|
|
1679
1644
|
S: this,
|
|
1680
1645
|
C: (f, a) => f(...a)
|
|
1681
1646
|
});
|
|
@@ -1684,7 +1649,7 @@ var SpaceStateMachine = class {
|
|
|
1684
1649
|
if (!this._canInviteNewMembers(credential.issuer)) {
|
|
1685
1650
|
log3.warn(`Space member is not authorized to invite new members: ${credential.issuer}`, void 0, {
|
|
1686
1651
|
F: __dxlog_file6,
|
|
1687
|
-
L:
|
|
1652
|
+
L: 209,
|
|
1688
1653
|
S: this,
|
|
1689
1654
|
C: (f, a) => f(...a)
|
|
1690
1655
|
});
|
|
@@ -1698,7 +1663,7 @@ var SpaceStateMachine = class {
|
|
|
1698
1663
|
if (!this._genesisCredential) {
|
|
1699
1664
|
log3.warn("Space must have a genesis credential before adding members.", void 0, {
|
|
1700
1665
|
F: __dxlog_file6,
|
|
1701
|
-
L:
|
|
1666
|
+
L: 220,
|
|
1702
1667
|
S: this,
|
|
1703
1668
|
C: (f, a) => f(...a)
|
|
1704
1669
|
});
|
|
@@ -1711,7 +1676,7 @@ var SpaceStateMachine = class {
|
|
|
1711
1676
|
if (!this._genesisCredential) {
|
|
1712
1677
|
log3.warn("Space must have a genesis credential before admitting feeds.", void 0, {
|
|
1713
1678
|
F: __dxlog_file6,
|
|
1714
|
-
L:
|
|
1679
|
+
L: 230,
|
|
1715
1680
|
S: this,
|
|
1716
1681
|
C: (f, a) => f(...a)
|
|
1717
1682
|
});
|
|
@@ -1725,7 +1690,7 @@ var SpaceStateMachine = class {
|
|
|
1725
1690
|
if (!this._canInviteNewMembers(credential.issuer)) {
|
|
1726
1691
|
log3.warn(`Invalid invitation, space member is not authorized to invite new members: ${credential.issuer}`, void 0, {
|
|
1727
1692
|
F: __dxlog_file6,
|
|
1728
|
-
L:
|
|
1693
|
+
L: 241,
|
|
1729
1694
|
S: this,
|
|
1730
1695
|
C: (f, a) => f(...a)
|
|
1731
1696
|
});
|
|
@@ -1759,42 +1724,35 @@ var SpaceStateMachine = class {
|
|
|
1759
1724
|
return this._canInviteNewMembers(memberKey);
|
|
1760
1725
|
}
|
|
1761
1726
|
_canInviteNewMembers(key) {
|
|
1727
|
+
if (this._membershipPolicy === MembershipPolicy2.LOCKED) {
|
|
1728
|
+
return key.equals(this._spaceKey) && this._members.members.size === 0;
|
|
1729
|
+
}
|
|
1762
1730
|
return key.equals(this._spaceKey) || this._members.getRole(key) === SpaceMember3.Role.ADMIN || this._members.getRole(key) === SpaceMember3.Role.OWNER;
|
|
1763
1731
|
}
|
|
1764
|
-
constructor(_spaceKey) {
|
|
1765
|
-
_define_property6(this, "_spaceKey", void 0);
|
|
1766
|
-
_define_property6(this, "_members", void 0);
|
|
1767
|
-
_define_property6(this, "_feeds", void 0);
|
|
1768
|
-
_define_property6(this, "_invitations", void 0);
|
|
1769
|
-
_define_property6(this, "_credentials", void 0);
|
|
1770
|
-
_define_property6(this, "_credentialsById", void 0);
|
|
1771
|
-
_define_property6(this, "_processedCredentials", void 0);
|
|
1772
|
-
_define_property6(this, "_genesisCredential", void 0);
|
|
1773
|
-
_define_property6(this, "_credentialProcessors", void 0);
|
|
1774
|
-
_define_property6(this, "onCredentialProcessed", void 0);
|
|
1775
|
-
_define_property6(this, "onMemberRoleChanged", void 0);
|
|
1776
|
-
_define_property6(this, "onFeedAdmitted", void 0);
|
|
1777
|
-
_define_property6(this, "onDelegatedInvitation", void 0);
|
|
1778
|
-
_define_property6(this, "onDelegatedInvitationRemoved", void 0);
|
|
1779
|
-
this._spaceKey = _spaceKey;
|
|
1780
|
-
this._invitations = new InvitationStateMachine();
|
|
1781
|
-
this._credentials = [];
|
|
1782
|
-
this._credentialsById = new ComplexMap6(PublicKey8.hash);
|
|
1783
|
-
this._processedCredentials = new ComplexSet3(PublicKey8.hash);
|
|
1784
|
-
this._credentialProcessors = [];
|
|
1785
|
-
this.onCredentialProcessed = new Callback4();
|
|
1786
|
-
this.onDelegatedInvitation = this._invitations.onDelegatedInvitation;
|
|
1787
|
-
this.onDelegatedInvitationRemoved = this._invitations.onDelegatedInvitationRemoved;
|
|
1788
|
-
this._members = new MemberStateMachine(this._spaceKey);
|
|
1789
|
-
this._feeds = new FeedStateMachine(this._spaceKey);
|
|
1790
|
-
this.onMemberRoleChanged = this._members.onMemberRoleChanged;
|
|
1791
|
-
this.onFeedAdmitted = this._feeds.onFeedAdmitted;
|
|
1792
|
-
}
|
|
1793
1732
|
};
|
|
1794
1733
|
_ts_decorate([
|
|
1795
1734
|
synchronized
|
|
1796
1735
|
], SpaceStateMachine.prototype, "process", null);
|
|
1797
1736
|
var CredentialConsumer = class {
|
|
1737
|
+
processor;
|
|
1738
|
+
_onOpen;
|
|
1739
|
+
_onClose;
|
|
1740
|
+
_ctx = new Context(void 0, {
|
|
1741
|
+
F: __dxlog_file6,
|
|
1742
|
+
L: 291
|
|
1743
|
+
});
|
|
1744
|
+
/**
|
|
1745
|
+
* @internal
|
|
1746
|
+
* Processor is ready to process live credentials.
|
|
1747
|
+
* NOTE: Setting this flag before all existing credentials are processed will cause them to be processed out of order.
|
|
1748
|
+
* Set externally.
|
|
1749
|
+
*/
|
|
1750
|
+
_isReadyForLiveCredentials = false;
|
|
1751
|
+
constructor(processor, _onOpen, _onClose) {
|
|
1752
|
+
this.processor = processor;
|
|
1753
|
+
this._onOpen = _onOpen;
|
|
1754
|
+
this._onClose = _onClose;
|
|
1755
|
+
}
|
|
1798
1756
|
/**
|
|
1799
1757
|
* @internal
|
|
1800
1758
|
*/
|
|
@@ -1813,21 +1771,6 @@ var CredentialConsumer = class {
|
|
|
1813
1771
|
await this._ctx.dispose();
|
|
1814
1772
|
await this._onClose();
|
|
1815
1773
|
}
|
|
1816
|
-
constructor(processor, _onOpen, _onClose) {
|
|
1817
|
-
_define_property6(this, "processor", void 0);
|
|
1818
|
-
_define_property6(this, "_onOpen", void 0);
|
|
1819
|
-
_define_property6(this, "_onClose", void 0);
|
|
1820
|
-
_define_property6(this, "_ctx", void 0);
|
|
1821
|
-
_define_property6(this, "_isReadyForLiveCredentials", void 0);
|
|
1822
|
-
this.processor = processor;
|
|
1823
|
-
this._onOpen = _onOpen;
|
|
1824
|
-
this._onClose = _onClose;
|
|
1825
|
-
this._ctx = new Context(void 0, {
|
|
1826
|
-
F: __dxlog_file6,
|
|
1827
|
-
L: 273
|
|
1828
|
-
});
|
|
1829
|
-
this._isReadyForLiveCredentials = false;
|
|
1830
|
-
}
|
|
1831
1774
|
};
|
|
1832
1775
|
|
|
1833
1776
|
// src/processor/device-state-machine.ts
|
|
@@ -1836,21 +1779,16 @@ import { invariant as invariant6 } from "@dxos/invariant";
|
|
|
1836
1779
|
import { PublicKey as PublicKey9 } from "@dxos/keys";
|
|
1837
1780
|
import { log as log4 } from "@dxos/log";
|
|
1838
1781
|
import { ComplexMap as ComplexMap7 } from "@dxos/util";
|
|
1839
|
-
function _define_property7(obj, key, value) {
|
|
1840
|
-
if (key in obj) {
|
|
1841
|
-
Object.defineProperty(obj, key, {
|
|
1842
|
-
value,
|
|
1843
|
-
enumerable: true,
|
|
1844
|
-
configurable: true,
|
|
1845
|
-
writable: true
|
|
1846
|
-
});
|
|
1847
|
-
} else {
|
|
1848
|
-
obj[key] = value;
|
|
1849
|
-
}
|
|
1850
|
-
return obj;
|
|
1851
|
-
}
|
|
1852
1782
|
var __dxlog_file7 = "/__w/dxos/dxos/packages/core/halo/credentials/src/processor/device-state-machine.ts";
|
|
1853
1783
|
var DeviceStateMachine = class {
|
|
1784
|
+
_params;
|
|
1785
|
+
// TODO(burdon): Return values via getter.
|
|
1786
|
+
authorizedDeviceKeys = new ComplexMap7(PublicKey9.hash);
|
|
1787
|
+
deviceChainReady = new Trigger();
|
|
1788
|
+
deviceCredentialChain;
|
|
1789
|
+
constructor(_params) {
|
|
1790
|
+
this._params = _params;
|
|
1791
|
+
}
|
|
1854
1792
|
async processCredential(credential) {
|
|
1855
1793
|
log4("processing credential...", {
|
|
1856
1794
|
identityKey: this._params.identityKey,
|
|
@@ -1858,7 +1796,7 @@ var DeviceStateMachine = class {
|
|
|
1858
1796
|
credential
|
|
1859
1797
|
}, {
|
|
1860
1798
|
F: __dxlog_file7,
|
|
1861
|
-
L:
|
|
1799
|
+
L: 35,
|
|
1862
1800
|
S: this,
|
|
1863
1801
|
C: (f, a) => f(...a)
|
|
1864
1802
|
});
|
|
@@ -1878,7 +1816,7 @@ var DeviceStateMachine = class {
|
|
|
1878
1816
|
size: this.authorizedDeviceKeys.size
|
|
1879
1817
|
}, {
|
|
1880
1818
|
F: __dxlog_file7,
|
|
1881
|
-
L:
|
|
1819
|
+
L: 55,
|
|
1882
1820
|
S: this,
|
|
1883
1821
|
C: (f, a) => f(...a)
|
|
1884
1822
|
});
|
|
@@ -1888,7 +1826,7 @@ var DeviceStateMachine = class {
|
|
|
1888
1826
|
case "dxos.halo.credentials.DeviceProfile": {
|
|
1889
1827
|
invariant6(this.authorizedDeviceKeys.has(credential.subject.id), "Device not found.", {
|
|
1890
1828
|
F: __dxlog_file7,
|
|
1891
|
-
L:
|
|
1829
|
+
L: 65,
|
|
1892
1830
|
S: this,
|
|
1893
1831
|
A: [
|
|
1894
1832
|
"this.authorizedDeviceKeys.has(credential.subject.id)",
|
|
@@ -1901,7 +1839,7 @@ var DeviceStateMachine = class {
|
|
|
1901
1839
|
profile: assertion.profile
|
|
1902
1840
|
}, {
|
|
1903
1841
|
F: __dxlog_file7,
|
|
1904
|
-
L:
|
|
1842
|
+
L: 68,
|
|
1905
1843
|
S: this,
|
|
1906
1844
|
C: (f, a) => f(...a)
|
|
1907
1845
|
});
|
|
@@ -1912,34 +1850,18 @@ var DeviceStateMachine = class {
|
|
|
1912
1850
|
}
|
|
1913
1851
|
}
|
|
1914
1852
|
}
|
|
1915
|
-
constructor(_params) {
|
|
1916
|
-
_define_property7(this, "_params", void 0);
|
|
1917
|
-
_define_property7(this, "authorizedDeviceKeys", void 0);
|
|
1918
|
-
_define_property7(this, "deviceChainReady", void 0);
|
|
1919
|
-
_define_property7(this, "deviceCredentialChain", void 0);
|
|
1920
|
-
this._params = _params;
|
|
1921
|
-
this.authorizedDeviceKeys = new ComplexMap7(PublicKey9.hash);
|
|
1922
|
-
this.deviceChainReady = new Trigger();
|
|
1923
|
-
}
|
|
1924
1853
|
};
|
|
1925
1854
|
|
|
1926
1855
|
// src/processor/profile-state-machine.ts
|
|
1927
1856
|
import { log as log5 } from "@dxos/log";
|
|
1928
|
-
function _define_property8(obj, key, value) {
|
|
1929
|
-
if (key in obj) {
|
|
1930
|
-
Object.defineProperty(obj, key, {
|
|
1931
|
-
value,
|
|
1932
|
-
enumerable: true,
|
|
1933
|
-
configurable: true,
|
|
1934
|
-
writable: true
|
|
1935
|
-
});
|
|
1936
|
-
} else {
|
|
1937
|
-
obj[key] = value;
|
|
1938
|
-
}
|
|
1939
|
-
return obj;
|
|
1940
|
-
}
|
|
1941
1857
|
var __dxlog_file8 = "/__w/dxos/dxos/packages/core/halo/credentials/src/processor/profile-state-machine.ts";
|
|
1942
1858
|
var ProfileStateMachine = class {
|
|
1859
|
+
_params;
|
|
1860
|
+
// TODO(burdon): Return values via getter.
|
|
1861
|
+
profile;
|
|
1862
|
+
constructor(_params) {
|
|
1863
|
+
this._params = _params;
|
|
1864
|
+
}
|
|
1943
1865
|
async processCredential(credential) {
|
|
1944
1866
|
const assertion = getCredentialAssertion(credential);
|
|
1945
1867
|
switch (assertion["@type"]) {
|
|
@@ -1950,7 +1872,7 @@ var ProfileStateMachine = class {
|
|
|
1950
1872
|
credential
|
|
1951
1873
|
}, {
|
|
1952
1874
|
F: __dxlog_file8,
|
|
1953
|
-
L:
|
|
1875
|
+
L: 34,
|
|
1954
1876
|
S: this,
|
|
1955
1877
|
C: (f, a) => f(...a)
|
|
1956
1878
|
});
|
|
@@ -1962,7 +1884,7 @@ var ProfileStateMachine = class {
|
|
|
1962
1884
|
profile: this.profile
|
|
1963
1885
|
}, {
|
|
1964
1886
|
F: __dxlog_file8,
|
|
1965
|
-
L:
|
|
1887
|
+
L: 40,
|
|
1966
1888
|
S: this,
|
|
1967
1889
|
C: (f, a) => f(...a)
|
|
1968
1890
|
});
|
|
@@ -1971,11 +1893,6 @@ var ProfileStateMachine = class {
|
|
|
1971
1893
|
}
|
|
1972
1894
|
}
|
|
1973
1895
|
}
|
|
1974
|
-
constructor(_params) {
|
|
1975
|
-
_define_property8(this, "_params", void 0);
|
|
1976
|
-
_define_property8(this, "profile", void 0);
|
|
1977
|
-
this._params = _params;
|
|
1978
|
-
}
|
|
1979
1896
|
};
|
|
1980
1897
|
export {
|
|
1981
1898
|
CredentialGenerator,
|