@dxos/client-services 0.1.0
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/LICENSE +21 -0
- package/README.md +20 -0
- package/dist/src/errors.d.ts +8 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +21 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +26 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/packlets/devtools/devtools-host-events.d.ts +5 -0
- package/dist/src/packlets/devtools/devtools-host-events.d.ts.map +1 -0
- package/dist/src/packlets/devtools/devtools-host-events.js +14 -0
- package/dist/src/packlets/devtools/devtools-host-events.js.map +1 -0
- package/dist/src/packlets/devtools/feeds.d.ts +11 -0
- package/dist/src/packlets/devtools/feeds.d.ts.map +1 -0
- package/dist/src/packlets/devtools/feeds.js +72 -0
- package/dist/src/packlets/devtools/feeds.js.map +1 -0
- package/dist/src/packlets/devtools/index.d.ts +5 -0
- package/dist/src/packlets/devtools/index.d.ts.map +1 -0
- package/dist/src/packlets/devtools/index.js +24 -0
- package/dist/src/packlets/devtools/index.js.map +1 -0
- package/dist/src/packlets/devtools/network.d.ts +19 -0
- package/dist/src/packlets/devtools/network.d.ts.map +1 -0
- package/dist/src/packlets/devtools/network.js +79 -0
- package/dist/src/packlets/devtools/network.js.map +1 -0
- package/dist/src/packlets/devtools/spaces.d.ts +5 -0
- package/dist/src/packlets/devtools/spaces.d.ts.map +1 -0
- package/dist/src/packlets/devtools/spaces.js +38 -0
- package/dist/src/packlets/devtools/spaces.js.map +1 -0
- package/dist/src/packlets/identity/authenticator.d.ts +7 -0
- package/dist/src/packlets/identity/authenticator.d.ts.map +1 -0
- package/dist/src/packlets/identity/authenticator.js +40 -0
- package/dist/src/packlets/identity/authenticator.js.map +1 -0
- package/dist/src/packlets/identity/authenticator.test.d.ts +2 -0
- package/dist/src/packlets/identity/authenticator.test.d.ts.map +1 -0
- package/dist/src/packlets/identity/authenticator.test.js +32 -0
- package/dist/src/packlets/identity/authenticator.test.js.map +1 -0
- package/dist/src/packlets/identity/identity-manager.d.ts +35 -0
- package/dist/src/packlets/identity/identity-manager.d.ts.map +1 -0
- package/dist/src/packlets/identity/identity-manager.js +151 -0
- package/dist/src/packlets/identity/identity-manager.js.map +1 -0
- package/dist/src/packlets/identity/identity-manager.test.d.ts +2 -0
- package/dist/src/packlets/identity/identity-manager.test.d.ts.map +1 -0
- package/dist/src/packlets/identity/identity-manager.test.js +92 -0
- package/dist/src/packlets/identity/identity-manager.test.js.map +1 -0
- package/dist/src/packlets/identity/identity.d.ts +43 -0
- package/dist/src/packlets/identity/identity.d.ts.map +1 -0
- package/dist/src/packlets/identity/identity.js +74 -0
- package/dist/src/packlets/identity/identity.js.map +1 -0
- package/dist/src/packlets/identity/identity.test.d.ts +2 -0
- package/dist/src/packlets/identity/identity.test.d.ts.map +1 -0
- package/dist/src/packlets/identity/identity.test.js +258 -0
- package/dist/src/packlets/identity/identity.test.js.map +1 -0
- package/dist/src/packlets/identity/index.d.ts +4 -0
- package/dist/src/packlets/identity/index.d.ts.map +1 -0
- package/dist/src/packlets/identity/index.js +23 -0
- package/dist/src/packlets/identity/index.js.map +1 -0
- package/dist/src/packlets/invitations/common.d.ts +35 -0
- package/dist/src/packlets/invitations/common.d.ts.map +1 -0
- package/dist/src/packlets/invitations/common.js +12 -0
- package/dist/src/packlets/invitations/common.js.map +1 -0
- package/dist/src/packlets/invitations/halo-invitations.d.ts +23 -0
- package/dist/src/packlets/invitations/halo-invitations.d.ts.map +1 -0
- package/dist/src/packlets/invitations/halo-invitations.js +150 -0
- package/dist/src/packlets/invitations/halo-invitations.js.map +1 -0
- package/dist/src/packlets/invitations/index.d.ts +5 -0
- package/dist/src/packlets/invitations/index.d.ts.map +1 -0
- package/dist/src/packlets/invitations/index.js +24 -0
- package/dist/src/packlets/invitations/index.js.map +1 -0
- package/dist/src/packlets/invitations/invitation-wrapper.d.ts +36 -0
- package/dist/src/packlets/invitations/invitation-wrapper.d.ts.map +1 -0
- package/dist/src/packlets/invitations/invitation-wrapper.js +104 -0
- package/dist/src/packlets/invitations/invitation-wrapper.js.map +1 -0
- package/dist/src/packlets/invitations/observable.test.d.ts +2 -0
- package/dist/src/packlets/invitations/observable.test.d.ts.map +1 -0
- package/dist/src/packlets/invitations/observable.test.js +43 -0
- package/dist/src/packlets/invitations/observable.test.js.map +1 -0
- package/dist/src/packlets/invitations/space-invitations.d.ts +25 -0
- package/dist/src/packlets/invitations/space-invitations.d.ts.map +1 -0
- package/dist/src/packlets/invitations/space-invitations.js +136 -0
- package/dist/src/packlets/invitations/space-invitations.js.map +1 -0
- package/dist/src/packlets/services/impl/devtools.d.ts +34 -0
- package/dist/src/packlets/services/impl/devtools.d.ts.map +1 -0
- package/dist/src/packlets/services/impl/devtools.js +77 -0
- package/dist/src/packlets/services/impl/devtools.js.map +1 -0
- package/dist/src/packlets/services/impl/halo.d.ts +20 -0
- package/dist/src/packlets/services/impl/halo.d.ts.map +1 -0
- package/dist/src/packlets/services/impl/halo.js +93 -0
- package/dist/src/packlets/services/impl/halo.js.map +1 -0
- package/dist/src/packlets/services/impl/index.d.ts +6 -0
- package/dist/src/packlets/services/impl/index.d.ts.map +1 -0
- package/dist/src/packlets/services/impl/index.js +26 -0
- package/dist/src/packlets/services/impl/index.js.map +1 -0
- package/dist/src/packlets/services/impl/party.d.ts +25 -0
- package/dist/src/packlets/services/impl/party.d.ts.map +1 -0
- package/dist/src/packlets/services/impl/party.js +265 -0
- package/dist/src/packlets/services/impl/party.js.map +1 -0
- package/dist/src/packlets/services/impl/profile.d.ts +19 -0
- package/dist/src/packlets/services/impl/profile.d.ts.map +1 -0
- package/dist/src/packlets/services/impl/profile.js +120 -0
- package/dist/src/packlets/services/impl/profile.js.map +1 -0
- package/dist/src/packlets/services/impl/system.d.ts +9 -0
- package/dist/src/packlets/services/impl/system.d.ts.map +1 -0
- package/dist/src/packlets/services/impl/system.js +20 -0
- package/dist/src/packlets/services/impl/system.js.map +1 -0
- package/dist/src/packlets/services/impl/tracing.d.ts +12 -0
- package/dist/src/packlets/services/impl/tracing.d.ts.map +1 -0
- package/dist/src/packlets/services/impl/tracing.js +22 -0
- package/dist/src/packlets/services/impl/tracing.js.map +1 -0
- package/dist/src/packlets/services/index.d.ts +6 -0
- package/dist/src/packlets/services/index.d.ts.map +1 -0
- package/dist/src/packlets/services/index.js +25 -0
- package/dist/src/packlets/services/index.js.map +1 -0
- package/dist/src/packlets/services/service-context.d.ts +36 -0
- package/dist/src/packlets/services/service-context.d.ts.map +1 -0
- package/dist/src/packlets/services/service-context.js +112 -0
- package/dist/src/packlets/services/service-context.js.map +1 -0
- package/dist/src/packlets/services/service-factory.d.ts +15 -0
- package/dist/src/packlets/services/service-factory.d.ts.map +1 -0
- package/dist/src/packlets/services/service-factory.js +25 -0
- package/dist/src/packlets/services/service-factory.js.map +1 -0
- package/dist/src/packlets/services/service-host.d.ts +27 -0
- package/dist/src/packlets/services/service-host.d.ts.map +1 -0
- package/dist/src/packlets/services/service-host.js +78 -0
- package/dist/src/packlets/services/service-host.js.map +1 -0
- package/dist/src/packlets/services/service-host.test.d.ts +2 -0
- package/dist/src/packlets/services/service-host.test.d.ts.map +1 -0
- package/dist/src/packlets/services/service-host.test.js +78 -0
- package/dist/src/packlets/services/service-host.test.js.map +1 -0
- package/dist/src/packlets/services/services.d.ts +19 -0
- package/dist/src/packlets/services/services.d.ts.map +1 -0
- package/dist/src/packlets/services/services.js +19 -0
- package/dist/src/packlets/services/services.js.map +1 -0
- package/dist/src/packlets/services/signer.d.ts +9 -0
- package/dist/src/packlets/services/signer.d.ts.map +1 -0
- package/dist/src/packlets/services/signer.js +6 -0
- package/dist/src/packlets/services/signer.js.map +1 -0
- package/dist/src/packlets/services/testing/halo.test.d.ts +2 -0
- package/dist/src/packlets/services/testing/halo.test.d.ts.map +1 -0
- package/dist/src/packlets/services/testing/halo.test.js +34 -0
- package/dist/src/packlets/services/testing/halo.test.js.map +1 -0
- package/dist/src/packlets/services/testing/spaces.test.d.ts +2 -0
- package/dist/src/packlets/services/testing/spaces.test.d.ts.map +1 -0
- package/dist/src/packlets/services/testing/spaces.test.js +68 -0
- package/dist/src/packlets/services/testing/spaces.test.js.map +1 -0
- package/dist/src/packlets/services/testing/testing.d.ts +8 -0
- package/dist/src/packlets/services/testing/testing.d.ts.map +1 -0
- package/dist/src/packlets/services/testing/testing.js +23 -0
- package/dist/src/packlets/services/testing/testing.js.map +1 -0
- package/dist/src/packlets/storage/index.d.ts +2 -0
- package/dist/src/packlets/storage/index.d.ts.map +1 -0
- package/dist/src/packlets/storage/index.js +21 -0
- package/dist/src/packlets/storage/index.js.map +1 -0
- package/dist/src/packlets/storage/storage.d.ts +7 -0
- package/dist/src/packlets/storage/storage.d.ts.map +1 -0
- package/dist/src/packlets/storage/storage.js +89 -0
- package/dist/src/packlets/storage/storage.js.map +1 -0
- package/package.json +61 -0
- package/src/errors.ts +19 -0
- package/src/index.ts +11 -0
- package/src/packlets/devtools/devtools-host-events.ts +8 -0
- package/src/packlets/devtools/feeds.ts +91 -0
- package/src/packlets/devtools/index.ts +8 -0
- package/src/packlets/devtools/network.ts +89 -0
- package/src/packlets/devtools/spaces.ts +50 -0
- package/src/packlets/identity/authenticator.test.ts +32 -0
- package/src/packlets/identity/authenticator.ts +49 -0
- package/src/packlets/identity/identity-manager.test.ts +121 -0
- package/src/packlets/identity/identity-manager.ts +207 -0
- package/src/packlets/identity/identity.test.ts +295 -0
- package/src/packlets/identity/identity.ts +109 -0
- package/src/packlets/identity/index.ts +7 -0
- package/src/packlets/invitations/common.ts +48 -0
- package/src/packlets/invitations/halo-invitations.ts +162 -0
- package/src/packlets/invitations/index.ts +8 -0
- package/src/packlets/invitations/invitation-wrapper.ts +140 -0
- package/src/packlets/invitations/observable.test.ts +67 -0
- package/src/packlets/invitations/space-invitations.ts +159 -0
- package/src/packlets/services/impl/devtools.ts +141 -0
- package/src/packlets/services/impl/halo.ts +107 -0
- package/src/packlets/services/impl/index.ts +11 -0
- package/src/packlets/services/impl/party.ts +305 -0
- package/src/packlets/services/impl/profile.ts +141 -0
- package/src/packlets/services/impl/system.ts +19 -0
- package/src/packlets/services/impl/tracing.ts +21 -0
- package/src/packlets/services/index.ts +9 -0
- package/src/packlets/services/service-context.ts +151 -0
- package/src/packlets/services/service-factory.ts +35 -0
- package/src/packlets/services/service-host.test.ts +88 -0
- package/src/packlets/services/service-host.ts +101 -0
- package/src/packlets/services/services.ts +39 -0
- package/src/packlets/services/signer.ts +13 -0
- package/src/packlets/services/testing/halo.test.ts +40 -0
- package/src/packlets/services/testing/spaces.test.ts +87 -0
- package/src/packlets/services/testing/testing.ts +28 -0
- package/src/packlets/storage/index.ts +5 -0
- package/src/packlets/storage/storage.ts +97 -0
- package/src/typings.d.ts +5 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
//
|
|
3
|
+
// Copyright 2022 DXOS.org
|
|
4
|
+
//
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.IdentityManager = void 0;
|
|
10
|
+
const assert_1 = __importDefault(require("assert"));
|
|
11
|
+
const async_1 = require("@dxos/async");
|
|
12
|
+
const credentials_1 = require("@dxos/credentials");
|
|
13
|
+
const echo_db_1 = require("@dxos/echo-db");
|
|
14
|
+
const log_1 = require("@dxos/log");
|
|
15
|
+
const credentials_2 = require("@dxos/protocols/proto/dxos/halo/credentials");
|
|
16
|
+
const identity_1 = require("../identity");
|
|
17
|
+
// TODO(dmaretskyi): Rename: represents the peer's state machine.
|
|
18
|
+
class IdentityManager {
|
|
19
|
+
// TODO(burdon): IdentityManagerParams.
|
|
20
|
+
// TODO(dmaretskyi): Perhaps this should take/generate the peerKey outside of an initialized identity.
|
|
21
|
+
constructor(_metadataStore, _feedStore, _keyring, _networkManager, _modelFactory) {
|
|
22
|
+
this._metadataStore = _metadataStore;
|
|
23
|
+
this._feedStore = _feedStore;
|
|
24
|
+
this._keyring = _keyring;
|
|
25
|
+
this._networkManager = _networkManager;
|
|
26
|
+
this._modelFactory = _modelFactory;
|
|
27
|
+
this.stateUpdate = new async_1.Event();
|
|
28
|
+
}
|
|
29
|
+
get identity() {
|
|
30
|
+
return this._identity;
|
|
31
|
+
}
|
|
32
|
+
async open() {
|
|
33
|
+
await this._metadataStore.load();
|
|
34
|
+
const identityRecord = this._metadataStore.getIdentityRecord();
|
|
35
|
+
if (identityRecord) {
|
|
36
|
+
this._identity = await this._constructIdentity(identityRecord);
|
|
37
|
+
await this._identity.open();
|
|
38
|
+
await this._identity.ready();
|
|
39
|
+
this.stateUpdate.emit();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async close() {
|
|
43
|
+
var _a;
|
|
44
|
+
await ((_a = this._identity) === null || _a === void 0 ? void 0 : _a.close());
|
|
45
|
+
}
|
|
46
|
+
async _constructIdentity(identityRecord) {
|
|
47
|
+
(0, assert_1.default)(!this._identity);
|
|
48
|
+
(0, log_1.log)('constructing identity', { identityRecord }, { file: "packages/sdk/client-services/src/packlets/identity/identity-manager.ts", line: 79 });
|
|
49
|
+
const space = await this._constructSpace({
|
|
50
|
+
spaceRecord: identityRecord.haloSpace,
|
|
51
|
+
swarmIdentity: {
|
|
52
|
+
peerKey: identityRecord.deviceKey,
|
|
53
|
+
credentialProvider: echo_db_1.MOCK_AUTH_PROVIDER,
|
|
54
|
+
credentialAuthenticator: echo_db_1.MOCK_AUTH_VERIFIER
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
(0, log_1.log)('done', { identityKey: identityRecord.identityKey }, { file: "packages/sdk/client-services/src/packlets/identity/identity-manager.ts", line: 90 });
|
|
58
|
+
return new identity_1.Identity({
|
|
59
|
+
space,
|
|
60
|
+
signer: this._keyring,
|
|
61
|
+
identityKey: identityRecord.identityKey,
|
|
62
|
+
deviceKey: identityRecord.deviceKey
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
async _constructSpace({ spaceRecord, swarmIdentity }) {
|
|
66
|
+
const controlFeed = await this._feedStore.openFeed(spaceRecord.writeControlFeedKey, { writable: true });
|
|
67
|
+
const dataFeed = await this._feedStore.openFeed(spaceRecord.writeDataFeedKey, { writable: true });
|
|
68
|
+
// The genesis feed will be the same as the control feed if the space was created by the local agent.
|
|
69
|
+
// NOTE: Must be initialized after writable feeds so that it is in a writable state.
|
|
70
|
+
const genesisFeed = await this._feedStore.openFeed(spaceRecord.genesisFeedKey);
|
|
71
|
+
const protocol = new echo_db_1.SpaceProtocol({
|
|
72
|
+
topic: spaceRecord.spaceKey,
|
|
73
|
+
identity: swarmIdentity,
|
|
74
|
+
networkManager: this._networkManager
|
|
75
|
+
});
|
|
76
|
+
return new echo_db_1.Space({
|
|
77
|
+
spaceKey: spaceRecord.spaceKey,
|
|
78
|
+
protocol,
|
|
79
|
+
genesisFeed,
|
|
80
|
+
controlFeed,
|
|
81
|
+
dataFeed,
|
|
82
|
+
feedProvider: (feedKey) => this._feedStore.openFeed(feedKey),
|
|
83
|
+
databaseFactory: async ({ databaseBackend }) => new echo_db_1.Database(this._modelFactory, databaseBackend, swarmIdentity.peerKey)
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
async createIdentity() {
|
|
87
|
+
(0, assert_1.default)(!this._identity, 'Identity already exists.');
|
|
88
|
+
(0, log_1.log)('creating identity...', {}, { file: "packages/sdk/client-services/src/packlets/identity/identity-manager.ts", line: 127 });
|
|
89
|
+
const controlFeedKey = await this._keyring.createKey();
|
|
90
|
+
const identityRecord = {
|
|
91
|
+
identityKey: await this._keyring.createKey(),
|
|
92
|
+
deviceKey: await this._keyring.createKey(),
|
|
93
|
+
haloSpace: {
|
|
94
|
+
spaceKey: await this._keyring.createKey(),
|
|
95
|
+
genesisFeedKey: controlFeedKey,
|
|
96
|
+
writeControlFeedKey: controlFeedKey,
|
|
97
|
+
writeDataFeedKey: await this._keyring.createKey()
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
const identity = await this._constructIdentity(identityRecord);
|
|
101
|
+
await identity.open();
|
|
102
|
+
{
|
|
103
|
+
const generator = new credentials_1.CredentialGenerator(this._keyring, identityRecord.identityKey, identityRecord.deviceKey);
|
|
104
|
+
const credentials = [
|
|
105
|
+
// Space genesis.
|
|
106
|
+
...(await generator.createSpaceGenesis(identityRecord.haloSpace.spaceKey, identityRecord.haloSpace.genesisFeedKey)),
|
|
107
|
+
// Feed admission.
|
|
108
|
+
await generator.createFeedAdmission(identityRecord.haloSpace.spaceKey, identityRecord.haloSpace.writeDataFeedKey, credentials_2.AdmittedFeed.Designation.DATA),
|
|
109
|
+
// Device authorization (writes device chain).
|
|
110
|
+
await generator.createDeviceAuthorization(identityRecord.deviceKey)
|
|
111
|
+
];
|
|
112
|
+
for (const credential of credentials) {
|
|
113
|
+
await identity.controlPipeline.writer.write({
|
|
114
|
+
'@type': 'dxos.echo.feed.CredentialsMessage',
|
|
115
|
+
credential
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// await this._keyring.deleteKey(identityRecord.identity_key);
|
|
120
|
+
// await this._keyring.deleteKey(identityRecord.halo_space.space_key);
|
|
121
|
+
await this._metadataStore.setIdentityRecord(identityRecord);
|
|
122
|
+
this._identity = identity;
|
|
123
|
+
await this._identity.ready();
|
|
124
|
+
this.stateUpdate.emit();
|
|
125
|
+
(0, log_1.log)('created identity', { identityKey: identity.identityKey }, { file: "packages/sdk/client-services/src/packlets/identity/identity-manager.ts", line: 180 });
|
|
126
|
+
return identity;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Accept an existing identity. Expects it's device key to be authorized.
|
|
130
|
+
*/
|
|
131
|
+
async acceptIdentity(params) {
|
|
132
|
+
(0, log_1.log)('accepting identity', { params }, { file: "packages/sdk/client-services/src/packlets/identity/identity-manager.ts", line: 188 });
|
|
133
|
+
(0, assert_1.default)(!this._identity, 'Identity already exists.');
|
|
134
|
+
const identity = await this._constructIdentity({
|
|
135
|
+
identityKey: params.identityKey,
|
|
136
|
+
deviceKey: await this._keyring.createKey(),
|
|
137
|
+
haloSpace: {
|
|
138
|
+
spaceKey: params.haloSpaceKey,
|
|
139
|
+
genesisFeedKey: params.haloGenesisFeedKey,
|
|
140
|
+
writeControlFeedKey: await this._keyring.createKey(),
|
|
141
|
+
writeDataFeedKey: await this._keyring.createKey()
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
await identity.open();
|
|
145
|
+
this._identity = identity;
|
|
146
|
+
this.stateUpdate.emit();
|
|
147
|
+
return identity;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
exports.IdentityManager = IdentityManager;
|
|
151
|
+
//# sourceMappingURL=identity-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-manager.js","sourceRoot":"","sources":["../../../../src/packlets/identity/identity-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-manager.test.d.ts","sourceRoot":"","sources":["../../../../src/packlets/identity/identity-manager.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
//
|
|
3
|
+
// Copyright 2022 DXOS.org
|
|
4
|
+
//
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const expect_1 = __importDefault(require("expect"));
|
|
10
|
+
const echo_db_1 = require("@dxos/echo-db");
|
|
11
|
+
const feed_store_1 = require("@dxos/feed-store");
|
|
12
|
+
const keyring_1 = require("@dxos/keyring");
|
|
13
|
+
const messaging_1 = require("@dxos/messaging");
|
|
14
|
+
const model_factory_1 = require("@dxos/model-factory");
|
|
15
|
+
const network_manager_1 = require("@dxos/network-manager");
|
|
16
|
+
const object_model_1 = require("@dxos/object-model");
|
|
17
|
+
const random_access_storage_1 = require("@dxos/random-access-storage");
|
|
18
|
+
const testutils_1 = require("@dxos/testutils");
|
|
19
|
+
const identity_manager_1 = require("./identity-manager");
|
|
20
|
+
describe('identity/identity-manager', function () {
|
|
21
|
+
const setupPeer = async ({ signalContext = new messaging_1.MemorySignalManagerContext(), storage = (0, random_access_storage_1.createStorage)({ type: random_access_storage_1.StorageType.RAM }) } = {}) => {
|
|
22
|
+
const metadataStore = new echo_db_1.MetadataStore(storage.createDirectory('metadata'));
|
|
23
|
+
const keyring = new keyring_1.Keyring(storage.createDirectory('keyring'));
|
|
24
|
+
const feedStore = new feed_store_1.FeedStore({
|
|
25
|
+
factory: new feed_store_1.FeedFactory({
|
|
26
|
+
root: storage.createDirectory('feeds'),
|
|
27
|
+
signer: keyring,
|
|
28
|
+
hypercore: {
|
|
29
|
+
valueEncoding: echo_db_1.valueEncoding
|
|
30
|
+
}
|
|
31
|
+
})
|
|
32
|
+
});
|
|
33
|
+
(0, testutils_1.afterTest)(() => feedStore.close());
|
|
34
|
+
const networkManager = new network_manager_1.NetworkManager({
|
|
35
|
+
signalManager: new messaging_1.MemorySignalManager(signalContext),
|
|
36
|
+
transportFactory: network_manager_1.MemoryTransportFactory
|
|
37
|
+
});
|
|
38
|
+
const identityManager = new identity_manager_1.IdentityManager(metadataStore, feedStore, keyring, networkManager, new model_factory_1.ModelFactory().registerModel(object_model_1.ObjectModel));
|
|
39
|
+
return {
|
|
40
|
+
identityManager,
|
|
41
|
+
feedStore
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
it('creates identity', async function () {
|
|
45
|
+
const { identityManager } = await setupPeer();
|
|
46
|
+
await identityManager.open();
|
|
47
|
+
(0, testutils_1.afterTest)(() => identityManager.close());
|
|
48
|
+
const identity = await identityManager.createIdentity();
|
|
49
|
+
(0, expect_1.default)(identity).toBeTruthy();
|
|
50
|
+
});
|
|
51
|
+
it('reload from storage', async function () {
|
|
52
|
+
const storage = (0, random_access_storage_1.createStorage)({ type: random_access_storage_1.StorageType.RAM });
|
|
53
|
+
const peer1 = await setupPeer({ storage });
|
|
54
|
+
await peer1.identityManager.open();
|
|
55
|
+
const identity1 = await peer1.identityManager.createIdentity();
|
|
56
|
+
await peer1.identityManager.close();
|
|
57
|
+
await peer1.feedStore.close();
|
|
58
|
+
const peer2 = await setupPeer({ storage });
|
|
59
|
+
await peer2.identityManager.open();
|
|
60
|
+
(0, expect_1.default)(peer2.identityManager.identity).toBeDefined();
|
|
61
|
+
(0, expect_1.default)(peer2.identityManager.identity.identityKey).toEqual(identity1.identityKey);
|
|
62
|
+
(0, expect_1.default)(peer2.identityManager.identity.deviceKey).toEqual(identity1.deviceKey);
|
|
63
|
+
// TODO(dmaretskyi): Check that identity is "alive" (space is working and can write mutations).
|
|
64
|
+
});
|
|
65
|
+
it('admit another device', async function () {
|
|
66
|
+
const signalContext = new messaging_1.MemorySignalManagerContext();
|
|
67
|
+
const peer1 = await setupPeer({ signalContext });
|
|
68
|
+
const identity1 = await peer1.identityManager.createIdentity();
|
|
69
|
+
const peer2 = await setupPeer({ signalContext });
|
|
70
|
+
// Identity2 is not yet ready at this point. Peer1 needs to admit peer2 device key and feed keys.
|
|
71
|
+
const identity2 = await peer2.identityManager.acceptIdentity({
|
|
72
|
+
identityKey: identity1.identityKey,
|
|
73
|
+
haloSpaceKey: identity1.haloSpaceKey,
|
|
74
|
+
haloGenesisFeedKey: identity1.haloGenesisFeedKey
|
|
75
|
+
});
|
|
76
|
+
await identity1.controlPipeline.writer.write({
|
|
77
|
+
'@type': 'dxos.echo.feed.CredentialsMessage',
|
|
78
|
+
credential: await identity1.getIdentityCredentialSigner().createCredential({
|
|
79
|
+
subject: identity2.deviceKey,
|
|
80
|
+
assertion: {
|
|
81
|
+
'@type': 'dxos.halo.credentials.AuthorizedDevice',
|
|
82
|
+
identityKey: identity2.identityKey,
|
|
83
|
+
deviceKey: identity2.deviceKey
|
|
84
|
+
}
|
|
85
|
+
})
|
|
86
|
+
});
|
|
87
|
+
// TODO(dmaretskyi): We'd also need to admit device2's feeds otherwise messages from them won't be processed by the pipeline.
|
|
88
|
+
// This would mean that peer2 has replicated it's device credential chain from peer1 and is ready to issue credentials.
|
|
89
|
+
await identity2.ready();
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=identity-manager.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-manager.test.js","sourceRoot":"","sources":["../../../../src/packlets/identity/identity-manager.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { CredentialSigner } from '@dxos/credentials';
|
|
2
|
+
import { Signer } from '@dxos/crypto';
|
|
3
|
+
import { Database, Space } from '@dxos/echo-db';
|
|
4
|
+
import { PublicKey } from '@dxos/keys';
|
|
5
|
+
import { ComplexSet } from '@dxos/util';
|
|
6
|
+
export declare type IdentityParams = {
|
|
7
|
+
identityKey: PublicKey;
|
|
8
|
+
deviceKey: PublicKey;
|
|
9
|
+
signer: Signer;
|
|
10
|
+
space: Space;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Agent identity manager, which includes the agent's Halo space.
|
|
14
|
+
*/
|
|
15
|
+
export declare class Identity {
|
|
16
|
+
private readonly _space;
|
|
17
|
+
private readonly _signer;
|
|
18
|
+
private readonly _deviceStateMachine;
|
|
19
|
+
readonly identityKey: PublicKey;
|
|
20
|
+
readonly deviceKey: PublicKey;
|
|
21
|
+
constructor({ space, signer, identityKey, deviceKey }: IdentityParams);
|
|
22
|
+
get authorizedDeviceKeys(): ComplexSet<PublicKey>;
|
|
23
|
+
open(): Promise<void>;
|
|
24
|
+
close(): Promise<void>;
|
|
25
|
+
ready(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* @test-only
|
|
28
|
+
*/
|
|
29
|
+
get controlPipeline(): import("@dxos/echo-db/dist/src/packlets/pipeline").PipelineAccessor;
|
|
30
|
+
get haloSpaceKey(): PublicKey;
|
|
31
|
+
get haloGenesisFeedKey(): PublicKey;
|
|
32
|
+
get haloDatabase(): Database;
|
|
33
|
+
/**
|
|
34
|
+
* Issues credentials as identity.
|
|
35
|
+
* Requires identity to be ready.
|
|
36
|
+
*/
|
|
37
|
+
getIdentityCredentialSigner(): CredentialSigner;
|
|
38
|
+
/**
|
|
39
|
+
* Issues credentials as device.
|
|
40
|
+
*/
|
|
41
|
+
getDeviceCredentialSigner(): CredentialSigner;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../../src/packlets/identity/identity.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,gBAAgB,EAGjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,oBAAY,cAAc,GAAG;IAC3B,WAAW,EAAE,SAAS,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IAEzD,SAAgB,WAAW,EAAE,SAAS,CAAC;IACvC,SAAgB,SAAS,EAAE,SAAS,CAAC;gBAEzB,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,cAAc;IAgBrE,IAAI,oBAAoB,IAAI,UAAU,CAAC,SAAS,CAAC,CAEhD;IAEK,IAAI;IAIJ,KAAK;IAIL,KAAK;IAMX;;OAEG;IACH,IAAI,eAAe,wEAElB;IAED,IAAI,YAAY,cAEf;IAED,IAAI,kBAAkB,cAErB;IAED,IAAI,YAAY,IAAI,QAAQ,CAE3B;IAED;;;OAGG;IACH,2BAA2B,IAAI,gBAAgB;IAS/C;;OAEG;IACH,yBAAyB,IAAI,gBAAgB;CAG9C"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
//
|
|
3
|
+
// Copyright 2022 DXOS.org
|
|
4
|
+
//
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.Identity = void 0;
|
|
10
|
+
const assert_1 = __importDefault(require("assert"));
|
|
11
|
+
const credentials_1 = require("@dxos/credentials");
|
|
12
|
+
const debug_1 = require("@dxos/debug");
|
|
13
|
+
/**
|
|
14
|
+
* Agent identity manager, which includes the agent's Halo space.
|
|
15
|
+
*/
|
|
16
|
+
class Identity {
|
|
17
|
+
constructor({ space, signer, identityKey, deviceKey }) {
|
|
18
|
+
this._space = space;
|
|
19
|
+
this._signer = signer;
|
|
20
|
+
this.identityKey = identityKey;
|
|
21
|
+
this.deviceKey = deviceKey;
|
|
22
|
+
this._deviceStateMachine = new credentials_1.DeviceStateMachine(this.identityKey, this.deviceKey);
|
|
23
|
+
// Save device key chain credential when processed by the party state machine.
|
|
24
|
+
this._space.onCredentialProcessed.set(async (credential) => {
|
|
25
|
+
await this._deviceStateMachine.process(credential);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
// TODO(burdon): Expose state object?
|
|
29
|
+
get authorizedDeviceKeys() {
|
|
30
|
+
return this._deviceStateMachine.authorizedDeviceKeys;
|
|
31
|
+
}
|
|
32
|
+
async open() {
|
|
33
|
+
await this._space.open();
|
|
34
|
+
}
|
|
35
|
+
async close() {
|
|
36
|
+
await this._space.close();
|
|
37
|
+
}
|
|
38
|
+
async ready() {
|
|
39
|
+
await this._deviceStateMachine.deviceChainReady.wait();
|
|
40
|
+
// TODO(dmaretskyi): Should we also wait for our feeds to be admitted?
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* @test-only
|
|
44
|
+
*/
|
|
45
|
+
get controlPipeline() {
|
|
46
|
+
return this._space.controlPipeline;
|
|
47
|
+
}
|
|
48
|
+
get haloSpaceKey() {
|
|
49
|
+
return this._space.key;
|
|
50
|
+
}
|
|
51
|
+
get haloGenesisFeedKey() {
|
|
52
|
+
return this._space.genesisFeedKey;
|
|
53
|
+
}
|
|
54
|
+
get haloDatabase() {
|
|
55
|
+
var _a;
|
|
56
|
+
return (_a = this._space.database) !== null && _a !== void 0 ? _a : (0, debug_1.failUndefined)();
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Issues credentials as identity.
|
|
60
|
+
* Requires identity to be ready.
|
|
61
|
+
*/
|
|
62
|
+
getIdentityCredentialSigner() {
|
|
63
|
+
(0, assert_1.default)(this._deviceStateMachine.deviceCredentialChain, 'Device credential chain is not ready.');
|
|
64
|
+
return (0, credentials_1.createCredentialSignerWithChain)(this._signer, this._deviceStateMachine.deviceCredentialChain, this.deviceKey);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Issues credentials as device.
|
|
68
|
+
*/
|
|
69
|
+
getDeviceCredentialSigner() {
|
|
70
|
+
return (0, credentials_1.createCredentialSignerWithKey)(this._signer, this.deviceKey);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.Identity = Identity;
|
|
74
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../../src/packlets/identity/identity.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;AAEF,oDAA4B;AAE5B,mDAK2B;AAE3B,uCAA4C;AAY5C;;GAEG;AACH,MAAa,QAAQ;IAQnB,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAkB;QACnE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEtB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,IAAI,CAAC,mBAAmB,GAAG,IAAI,gCAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEpF,8EAA8E;QAC9E,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YACzD,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qCAAqC;IACrC,IAAI,oBAAoB;QACtB,OAAO,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAEvD,sEAAsE;IACxE,CAAC;IAED;;OAEG;IACH,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;IACrC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IACzB,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;IACpC,CAAC;IAED,IAAI,YAAY;;QACd,OAAO,MAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,mCAAI,IAAA,qBAAa,GAAE,CAAC;IACjD,CAAC;IAED;;;OAGG;IACH,2BAA2B;QACzB,IAAA,gBAAM,EAAC,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,EAAE,uCAAuC,CAAC,CAAC;QAChG,OAAO,IAAA,6CAA+B,EACpC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,EAC9C,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,yBAAyB;QACvB,OAAO,IAAA,2CAA6B,EAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACrE,CAAC;CACF;AAhFD,4BAgFC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.test.d.ts","sourceRoot":"","sources":["../../../../src/packlets/identity/identity.test.ts"],"names":[],"mappings":""}
|