@dxos/echo-pipeline 0.5.9-main.a2de4fa → 0.5.9-main.aa46ff0
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/{chunk-I2J5TTHJ.mjs → chunk-HS77A4I4.mjs} +174 -23
- package/dist/lib/browser/{chunk-I2J5TTHJ.mjs.map → chunk-HS77A4I4.mjs.map} +4 -4
- package/dist/lib/browser/index.mjs +10 -3
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +11 -7
- package/dist/lib/browser/testing/index.mjs.map +1 -1
- package/dist/lib/node/{chunk-QPCNQ4ZK.cjs → chunk-Y5U7UXEL.cjs} +185 -34
- package/dist/lib/node/{chunk-QPCNQ4ZK.cjs.map → chunk-Y5U7UXEL.cjs.map} +4 -4
- package/dist/lib/node/index.cjs +32 -25
- package/dist/lib/node/index.cjs.map +2 -2
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +21 -17
- package/dist/lib/node/testing/index.cjs.map +1 -1
- package/dist/types/src/space/admission-discovery-extension.d.ts +30 -0
- package/dist/types/src/space/admission-discovery-extension.d.ts.map +1 -0
- package/dist/types/src/space/index.d.ts +1 -0
- package/dist/types/src/space/index.d.ts.map +1 -1
- package/dist/types/src/space/space-manager.d.ts +8 -0
- package/dist/types/src/space/space-manager.d.ts.map +1 -1
- package/package.json +33 -33
- package/src/automerge/mesh-echo-replicator.ts +1 -1
- package/src/space/admission-discovery-extension.ts +90 -0
- package/src/space/index.ts +1 -0
- package/src/space/space-manager.ts +46 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/echo-pipeline",
|
|
3
|
-
"version": "0.5.9-main.
|
|
3
|
+
"version": "0.5.9-main.aa46ff0",
|
|
4
4
|
"description": "ECHO database.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -39,38 +39,38 @@
|
|
|
39
39
|
"crc-32": "^1.2.2",
|
|
40
40
|
"level": "^8.0.1",
|
|
41
41
|
"level-transcoder": "^1.0.1",
|
|
42
|
-
"@dxos/async": "0.5.9-main.
|
|
43
|
-
"@dxos/automerge": "0.5.9-main.
|
|
44
|
-
"@dxos/
|
|
45
|
-
"@dxos/
|
|
46
|
-
"@dxos/
|
|
47
|
-
"@dxos/
|
|
48
|
-
"@dxos/debug": "0.5.9-main.
|
|
49
|
-
"@dxos/echo-protocol": "0.5.9-main.
|
|
50
|
-
"@dxos/echo-schema": "0.5.9-main.
|
|
51
|
-
"@dxos/hypercore": "0.5.9-main.
|
|
52
|
-
"@dxos/indexing": "0.5.9-main.
|
|
53
|
-
"@dxos/
|
|
54
|
-
"@dxos/
|
|
55
|
-
"@dxos/
|
|
56
|
-
"@dxos/keys": "0.5.9-main.
|
|
57
|
-
"@dxos/kv-store": "0.5.9-main.
|
|
58
|
-
"@dxos/log": "0.5.9-main.
|
|
59
|
-
"@dxos/messaging": "0.5.9-main.
|
|
60
|
-
"@dxos/network-manager": "0.5.9-main.
|
|
61
|
-
"@dxos/
|
|
62
|
-
"@dxos/
|
|
63
|
-
"@dxos/
|
|
64
|
-
"@dxos/
|
|
65
|
-
"@dxos/
|
|
66
|
-
"@dxos/teleport-extension-
|
|
67
|
-
"@dxos/teleport-extension-
|
|
68
|
-
"@dxos/teleport-extension-
|
|
69
|
-
"@dxos/timeframe": "0.5.9-main.
|
|
70
|
-
"@dxos/teleport-extension-
|
|
71
|
-
"@dxos/
|
|
72
|
-
"@dxos/
|
|
73
|
-
"@dxos/
|
|
42
|
+
"@dxos/async": "0.5.9-main.aa46ff0",
|
|
43
|
+
"@dxos/automerge": "0.5.9-main.aa46ff0",
|
|
44
|
+
"@dxos/codec-protobuf": "0.5.9-main.aa46ff0",
|
|
45
|
+
"@dxos/context": "0.5.9-main.aa46ff0",
|
|
46
|
+
"@dxos/crypto": "0.5.9-main.aa46ff0",
|
|
47
|
+
"@dxos/credentials": "0.5.9-main.aa46ff0",
|
|
48
|
+
"@dxos/debug": "0.5.9-main.aa46ff0",
|
|
49
|
+
"@dxos/echo-protocol": "0.5.9-main.aa46ff0",
|
|
50
|
+
"@dxos/echo-schema": "0.5.9-main.aa46ff0",
|
|
51
|
+
"@dxos/hypercore": "0.5.9-main.aa46ff0",
|
|
52
|
+
"@dxos/indexing": "0.5.9-main.aa46ff0",
|
|
53
|
+
"@dxos/invariant": "0.5.9-main.aa46ff0",
|
|
54
|
+
"@dxos/keyring": "0.5.9-main.aa46ff0",
|
|
55
|
+
"@dxos/feed-store": "0.5.9-main.aa46ff0",
|
|
56
|
+
"@dxos/keys": "0.5.9-main.aa46ff0",
|
|
57
|
+
"@dxos/kv-store": "0.5.9-main.aa46ff0",
|
|
58
|
+
"@dxos/log": "0.5.9-main.aa46ff0",
|
|
59
|
+
"@dxos/messaging": "0.5.9-main.aa46ff0",
|
|
60
|
+
"@dxos/network-manager": "0.5.9-main.aa46ff0",
|
|
61
|
+
"@dxos/protocols": "0.5.9-main.aa46ff0",
|
|
62
|
+
"@dxos/node-std": "0.5.9-main.aa46ff0",
|
|
63
|
+
"@dxos/random-access-storage": "0.5.9-main.aa46ff0",
|
|
64
|
+
"@dxos/teleport": "0.5.9-main.aa46ff0",
|
|
65
|
+
"@dxos/rpc": "0.5.9-main.aa46ff0",
|
|
66
|
+
"@dxos/teleport-extension-automerge-replicator": "0.5.9-main.aa46ff0",
|
|
67
|
+
"@dxos/teleport-extension-object-sync": "0.5.9-main.aa46ff0",
|
|
68
|
+
"@dxos/teleport-extension-replicator": "0.5.9-main.aa46ff0",
|
|
69
|
+
"@dxos/timeframe": "0.5.9-main.aa46ff0",
|
|
70
|
+
"@dxos/teleport-extension-gossip": "0.5.9-main.aa46ff0",
|
|
71
|
+
"@dxos/util": "0.5.9-main.aa46ff0",
|
|
72
|
+
"@dxos/tracing": "0.5.9-main.aa46ff0",
|
|
73
|
+
"@dxos/typings": "0.5.9-main.aa46ff0"
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
76
|
"fast-check": "^3.19.0",
|
|
@@ -70,8 +70,8 @@ export class MeshEchoReplicator implements EchoReplicator {
|
|
|
70
70
|
onRemoteDisconnected: async () => {
|
|
71
71
|
log('onRemoteDisconnected', { peerId: connection.peerId });
|
|
72
72
|
this._context?.onConnectionClosed(connection);
|
|
73
|
-
await connection.disable();
|
|
74
73
|
this._connectionsPerPeer.delete(connection.peerId);
|
|
74
|
+
await connection.disable();
|
|
75
75
|
this._connections.delete(connection);
|
|
76
76
|
},
|
|
77
77
|
shouldAdvertize: async (params: ShouldAdvertizeParams) => {
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { scheduleTask, type Trigger } from '@dxos/async';
|
|
6
|
+
import { Context } from '@dxos/context';
|
|
7
|
+
import { ProtocolError, schema } from '@dxos/protocols';
|
|
8
|
+
import { type Credential } from '@dxos/protocols/proto/dxos/halo/credentials';
|
|
9
|
+
import {
|
|
10
|
+
type AdmissionDiscoveryService,
|
|
11
|
+
type GetAdmissionCredentialResponse,
|
|
12
|
+
type GetAdmissionCredentialRequest,
|
|
13
|
+
} from '@dxos/protocols/proto/dxos/mesh/teleport';
|
|
14
|
+
import { type ExtensionContext, RpcExtension } from '@dxos/teleport';
|
|
15
|
+
|
|
16
|
+
import { type Space } from './space';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Guest's side for a connection to a concrete peer in p2p network during invitation.
|
|
20
|
+
*/
|
|
21
|
+
export class CredentialRetrieverExtension extends RpcExtension<
|
|
22
|
+
{ AdmissionDiscoveryService: AdmissionDiscoveryService },
|
|
23
|
+
{}
|
|
24
|
+
> {
|
|
25
|
+
private _ctx = new Context();
|
|
26
|
+
|
|
27
|
+
constructor(
|
|
28
|
+
private readonly _request: GetAdmissionCredentialRequest,
|
|
29
|
+
private readonly _onResult: Trigger<Credential>,
|
|
30
|
+
) {
|
|
31
|
+
super({
|
|
32
|
+
requested: {
|
|
33
|
+
AdmissionDiscoveryService: schema.getService('dxos.mesh.teleport.AdmissionDiscoveryService'),
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
protected override async getHandlers(): Promise<{}> {
|
|
39
|
+
return {};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
override async onOpen(context: ExtensionContext) {
|
|
43
|
+
await super.onOpen(context);
|
|
44
|
+
scheduleTask(this._ctx, async () => {
|
|
45
|
+
try {
|
|
46
|
+
const result = await this.rpc.AdmissionDiscoveryService.getAdmissionCredential(this._request);
|
|
47
|
+
this._onResult.wake(result.admissionCredential);
|
|
48
|
+
} catch (err: any) {
|
|
49
|
+
context.close(err);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
override async onClose() {
|
|
55
|
+
await this._ctx.dispose();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
override async onAbort(): Promise<void> {
|
|
59
|
+
await this._ctx.dispose();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export class CredentialServerExtension extends RpcExtension<
|
|
64
|
+
{},
|
|
65
|
+
{ AdmissionDiscoveryService: AdmissionDiscoveryService }
|
|
66
|
+
> {
|
|
67
|
+
constructor(private readonly _space: Space) {
|
|
68
|
+
super({
|
|
69
|
+
exposed: {
|
|
70
|
+
AdmissionDiscoveryService: schema.getService('dxos.mesh.teleport.AdmissionDiscoveryService'),
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
protected override async getHandlers(): Promise<{ AdmissionDiscoveryService: AdmissionDiscoveryService }> {
|
|
76
|
+
return {
|
|
77
|
+
AdmissionDiscoveryService: {
|
|
78
|
+
getAdmissionCredential: async (
|
|
79
|
+
request: GetAdmissionCredentialRequest,
|
|
80
|
+
): Promise<GetAdmissionCredentialResponse> => {
|
|
81
|
+
const memberInfo = this._space.spaceState.members.get(request.memberKey);
|
|
82
|
+
if (!memberInfo?.credential) {
|
|
83
|
+
throw new ProtocolError('Space member not found.', request);
|
|
84
|
+
}
|
|
85
|
+
return { admissionCredential: memberInfo.credential };
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
package/src/space/index.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { synchronized, trackLeaks } from '@dxos/async';
|
|
5
|
+
import { synchronized, trackLeaks, Trigger } from '@dxos/async';
|
|
6
6
|
import { type DelegateInvitationCredential, type MemberInfo } from '@dxos/credentials';
|
|
7
7
|
import { failUndefined } from '@dxos/debug';
|
|
8
8
|
import { type FeedStore } from '@dxos/feed-store';
|
|
@@ -12,10 +12,12 @@ import { type SwarmNetworkManager } from '@dxos/network-manager';
|
|
|
12
12
|
import { trace } from '@dxos/protocols';
|
|
13
13
|
import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
|
|
14
14
|
import { type SpaceMetadata } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
15
|
+
import type { Credential } from '@dxos/protocols/proto/dxos/halo/credentials';
|
|
15
16
|
import { type Teleport } from '@dxos/teleport';
|
|
16
17
|
import { type BlobStore } from '@dxos/teleport-extension-object-sync';
|
|
17
18
|
import { ComplexMap } from '@dxos/util';
|
|
18
19
|
|
|
20
|
+
import { CredentialRetrieverExtension } from './admission-discovery-extension';
|
|
19
21
|
import { Space, createIdFromSpaceKey } from './space';
|
|
20
22
|
import { SpaceProtocol, type SwarmIdentity } from './space-protocol';
|
|
21
23
|
import { SnapshotManager, type SnapshotStore } from '../db-host';
|
|
@@ -47,6 +49,13 @@ export type ConstructSpaceParams = {
|
|
|
47
49
|
onMemberRolesChanged: (member: MemberInfo[]) => Promise<void>;
|
|
48
50
|
};
|
|
49
51
|
|
|
52
|
+
export type RequestSpaceAdmissionCredentialParams = {
|
|
53
|
+
spaceKey: PublicKey;
|
|
54
|
+
identityKey: PublicKey;
|
|
55
|
+
swarmIdentity: SwarmIdentity;
|
|
56
|
+
timeout: number;
|
|
57
|
+
};
|
|
58
|
+
|
|
50
59
|
/**
|
|
51
60
|
* Manages a collection of ECHO (Data) Spaces.
|
|
52
61
|
*/
|
|
@@ -126,4 +135,40 @@ export class SpaceManager {
|
|
|
126
135
|
log.trace('dxos.echo.space-manager.construct-space', trace.end({ id: this._instanceId }));
|
|
127
136
|
return space;
|
|
128
137
|
}
|
|
138
|
+
|
|
139
|
+
public async requestSpaceAdmissionCredential(params: RequestSpaceAdmissionCredentialParams): Promise<Credential> {
|
|
140
|
+
const traceKey = 'dxos.echo.space-manager.request-space-admission';
|
|
141
|
+
log.trace(traceKey, trace.begin({ id: this._instanceId }));
|
|
142
|
+
log('requesting space admission credential...', { spaceKey: params.spaceKey });
|
|
143
|
+
|
|
144
|
+
const onCredentialResolved = new Trigger<Credential>();
|
|
145
|
+
const protocol = new SpaceProtocol({
|
|
146
|
+
topic: params.spaceKey,
|
|
147
|
+
swarmIdentity: params.swarmIdentity,
|
|
148
|
+
networkManager: this._networkManager,
|
|
149
|
+
onSessionAuth: (session: Teleport) => {
|
|
150
|
+
session.addExtension(
|
|
151
|
+
'dxos.mesh.teleport.admission-discovery',
|
|
152
|
+
new CredentialRetrieverExtension(
|
|
153
|
+
{ spaceKey: params.spaceKey, memberKey: params.identityKey },
|
|
154
|
+
onCredentialResolved,
|
|
155
|
+
),
|
|
156
|
+
);
|
|
157
|
+
},
|
|
158
|
+
onAuthFailure: (session: Teleport) => session.close(),
|
|
159
|
+
blobStore: this._blobStore,
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
try {
|
|
163
|
+
await protocol.start();
|
|
164
|
+
const credential = await onCredentialResolved.wait({ timeout: params.timeout });
|
|
165
|
+
log.trace(traceKey, trace.end({ id: this._instanceId }));
|
|
166
|
+
return credential;
|
|
167
|
+
} catch (err: any) {
|
|
168
|
+
log.trace(traceKey, trace.error({ id: this._instanceId, error: err }));
|
|
169
|
+
throw err;
|
|
170
|
+
} finally {
|
|
171
|
+
await protocol.stop();
|
|
172
|
+
}
|
|
173
|
+
}
|
|
129
174
|
}
|