@dxos/client-services 0.1.39 → 0.1.40
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-2DGNNQWS.mjs → chunk-LGMYP2WL.mjs} +679 -569
- package/dist/lib/browser/chunk-LGMYP2WL.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/packlets/testing/index.mjs +14 -14
- package/dist/lib/browser/packlets/testing/index.mjs.map +3 -3
- package/dist/lib/node/index.cjs +721 -611
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/packlets/testing/index.cjs +725 -621
- package/dist/lib/node/packlets/testing/index.cjs.map +4 -4
- package/dist/types/src/packlets/invitations/invitation-extension.d.ts +54 -0
- package/dist/types/src/packlets/invitations/invitation-extension.d.ts.map +1 -0
- package/dist/types/src/packlets/invitations/invitations-handler.d.ts +1 -1
- package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitations-service.d.ts +8 -3
- package/dist/types/src/packlets/invitations/invitations-service.d.ts.map +1 -1
- package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
- package/dist/types/src/packlets/vault/iframe-proxy-runtime.d.ts.map +1 -1
- package/package.json +30 -30
- package/src/packlets/invitations/invitation-extension.ts +211 -0
- package/src/packlets/invitations/invitations-handler.ts +54 -123
- package/src/packlets/invitations/invitations-service.ts +106 -137
- package/src/packlets/services/utils.ts +3 -3
- package/src/packlets/testing/test-builder.ts +9 -7
- package/src/packlets/vault/iframe-host-runtime.ts +3 -3
- package/src/packlets/vault/iframe-proxy-runtime.ts +11 -3
- package/src/packlets/vault/worker-runtime.ts +3 -3
- package/dist/lib/browser/chunk-2DGNNQWS.mjs.map +0 -7
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Context } from '@dxos/context';
|
|
2
|
+
import { AdmissionRequest, AdmissionResponse, AuthenticationRequest, AuthenticationResponse, IntroductionRequest, IntroductionResponse, InvitationHostService } from '@dxos/protocols/proto/dxos/halo/invitations';
|
|
3
|
+
import { ExtensionContext, RpcExtension } from '@dxos/teleport';
|
|
4
|
+
declare type InvitationHostExtensionCallbacks = {
|
|
5
|
+
onOpen: () => void;
|
|
6
|
+
onError: (error: Error) => void;
|
|
7
|
+
introduce: (request: IntroductionRequest) => Promise<IntroductionResponse>;
|
|
8
|
+
authenticate: (request: AuthenticationRequest) => Promise<AuthenticationResponse>;
|
|
9
|
+
admit: (request: AdmissionRequest) => Promise<AdmissionResponse>;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Host's side for a connection to a concrete peer in p2p network during invitation.
|
|
13
|
+
*/
|
|
14
|
+
export declare class InvitationHostExtension extends RpcExtension<{
|
|
15
|
+
InvitationHostService: InvitationHostService;
|
|
16
|
+
}, {
|
|
17
|
+
InvitationHostService: InvitationHostService;
|
|
18
|
+
}> {
|
|
19
|
+
private readonly _callbacks;
|
|
20
|
+
private _ctx;
|
|
21
|
+
private _remoteOptions?;
|
|
22
|
+
private _remoteOptionsTrigger;
|
|
23
|
+
constructor(_callbacks: InvitationHostExtensionCallbacks);
|
|
24
|
+
protected getHandlers(): Promise<{
|
|
25
|
+
InvitationHostService: InvitationHostService;
|
|
26
|
+
}>;
|
|
27
|
+
onOpen(context: ExtensionContext): Promise<void>;
|
|
28
|
+
onClose(): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
declare type InvitationGuestExtensionCallbacks = {
|
|
31
|
+
onOpen: (ctx: Context) => void;
|
|
32
|
+
onError: (error: Error) => void;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Guest's side for a connection to a concrete peer in p2p network during invitation.
|
|
36
|
+
*/
|
|
37
|
+
export declare class InvitationGuestExtension extends RpcExtension<{
|
|
38
|
+
InvitationHostService: InvitationHostService;
|
|
39
|
+
}, {
|
|
40
|
+
InvitationHostService: InvitationHostService;
|
|
41
|
+
}> {
|
|
42
|
+
private readonly _callbacks;
|
|
43
|
+
private _ctx;
|
|
44
|
+
private _remoteOptions?;
|
|
45
|
+
private _remoteOptionsTrigger;
|
|
46
|
+
constructor(_callbacks: InvitationGuestExtensionCallbacks);
|
|
47
|
+
protected getHandlers(): Promise<{
|
|
48
|
+
InvitationHostService: InvitationHostService;
|
|
49
|
+
}>;
|
|
50
|
+
onOpen(context: ExtensionContext): Promise<void>;
|
|
51
|
+
onClose(): Promise<void>;
|
|
52
|
+
}
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=invitation-extension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invitation-extension.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/invitations/invitation-extension.ts"],"names":[],"mappings":"AAOA,OAAO,EAAqB,OAAO,EAAE,MAAM,eAAe,CAAC;AAK3D,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EAEtB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAKhE,aAAK,gCAAgC,GAAG;IAEtC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEhC,SAAS,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC3E,YAAY,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAClF,KAAK,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAClE,CAAC;AAEF;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,YAAY,CACvD;IAAE,qBAAqB,EAAE,qBAAqB,CAAA;CAAE,EAChD;IAAE,qBAAqB,EAAE,qBAAqB,CAAA;CAAE,CACjD;IAUa,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJvC,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,cAAc,CAAC,CAAU;IACjC,OAAO,CAAC,qBAAqB,CAAiB;gBAEjB,UAAU,EAAE,gCAAgC;cAWhD,WAAW,IAAI,OAAO,CAAC;QAAE,qBAAqB,EAAE,qBAAqB,CAAA;KAAE,CAAC;IA+ClF,MAAM,CAAC,OAAO,EAAE,gBAAgB;IAmBhC,OAAO;CAGvB;AAED,aAAK,iCAAiC,GAAG;IAEvC,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/B,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,YAAY,CACxD;IAAE,qBAAqB,EAAE,qBAAqB,CAAA;CAAE,EAChD;IAAE,qBAAqB,EAAE,qBAAqB,CAAA;CAAE,CACjD;IAKa,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJvC,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,cAAc,CAAC,CAAU;IACjC,OAAO,CAAC,qBAAqB,CAAiB;gBAEjB,UAAU,EAAE,iCAAiC;cAWjD,WAAW,IAAI,OAAO,CAAC;QAAE,qBAAqB,EAAE,qBAAqB,CAAA;KAAE,CAAC;IAqBlF,MAAM,CAAC,OAAO,EAAE,gBAAgB;IAsBhC,OAAO;CAIvB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AuthenticatingInvitationObservable, CancellableInvitationObservable } from '@dxos/client';
|
|
2
2
|
import { NetworkManager } from '@dxos/network-manager';
|
|
3
3
|
import { Invitation } from '@dxos/protocols/proto/dxos/client/services';
|
|
4
4
|
import { InvitationProtocol } from './invitation-protocol';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invitations-handler.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/invitations/invitations-handler.ts"],"names":[],"mappings":"AAOA,OAAO,
|
|
1
|
+
{"version":3,"file":"invitations-handler.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/invitations/invitations-handler.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,kCAAkC,EAElC,+BAA+B,EAGhC,MAAM,cAAc,CAAC;AAMtB,OAAO,EAAiC,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEpG,OAAO,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AAKxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAI3D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,kBAAkB;IAKjB,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,cAAc;IAE5D,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,+BAA+B;IAqM9G,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,GAAG,kCAAkC;CA8K3G"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Stream } from '@dxos/codec-protobuf';
|
|
2
|
-
import { AuthenticationRequest, Invitation, InvitationsService } from '@dxos/protocols/proto/dxos/client/services';
|
|
2
|
+
import { AuthenticationRequest, Invitation, InvitationsService, QueryInvitationsResponse } from '@dxos/protocols/proto/dxos/client/services';
|
|
3
3
|
import { InvitationProtocol } from './invitation-protocol';
|
|
4
4
|
import { InvitationsHandler } from './invitations-handler';
|
|
5
5
|
/**
|
|
@@ -10,13 +10,18 @@ export declare class InvitationsServiceImpl implements InvitationsService {
|
|
|
10
10
|
private readonly _getHandler;
|
|
11
11
|
private readonly _createInvitations;
|
|
12
12
|
private readonly _acceptInvitations;
|
|
13
|
+
private readonly _invitationCreated;
|
|
14
|
+
private readonly _invitationAccepted;
|
|
15
|
+
private readonly _removedCreated;
|
|
16
|
+
private readonly _removedAccepted;
|
|
13
17
|
constructor(_invitationsHandler: InvitationsHandler, _getHandler: (invitation: Invitation) => InvitationProtocol);
|
|
14
18
|
getLoggingContext(): {};
|
|
15
|
-
createInvitation(
|
|
16
|
-
acceptInvitation(
|
|
19
|
+
createInvitation(options: Invitation): Stream<Invitation>;
|
|
20
|
+
acceptInvitation(options: Invitation): Stream<Invitation>;
|
|
17
21
|
authenticate({ invitationId, authCode }: AuthenticationRequest): Promise<void>;
|
|
18
22
|
cancelInvitation({ invitationId }: {
|
|
19
23
|
invitationId: string;
|
|
20
24
|
}): Promise<void>;
|
|
25
|
+
queryInvitations(): Stream<QueryInvitationsResponse>;
|
|
21
26
|
}
|
|
22
27
|
//# sourceMappingURL=invitations-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invitations-service.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/invitations/invitations-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"invitations-service.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/invitations/invitations-service.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;GAEG;AACH,qBAAa,sBAAuB,YAAW,kBAAkB;IAS7D,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAT9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAsD;IACzF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAyD;IAC5F,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA2B;IAC9D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA2B;IAC/D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2B;IAC3D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2B;gBAGzC,mBAAmB,EAAE,kBAAkB,EACvC,WAAW,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,kBAAkB;IAI9E,iBAAiB;IAMjB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IA6BzD,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IA6BnD,YAAY,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9E,gBAAgB,CAAC,EAAE,YAAY,EAAE,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBjF,gBAAgB,IAAI,MAAM,CAAC,wBAAwB,CAAC;CAkDrD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-builder.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/testing/test-builder.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAA8E,MAAM,cAAc,CAAC;AAClH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAmB,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAuB,0BAA0B,EAA0B,MAAM,iBAAiB,CAAC;AAC1G,OAAO,EAAwD,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC7G,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAyC,YAAY,EAAE,MAAM,WAAW,CAAC;AAEhF,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEtE,eAAO,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"test-builder.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/testing/test-builder.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAA8E,MAAM,cAAc,CAAC;AAClH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAmB,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAuB,0BAA0B,EAA0B,MAAM,iBAAiB,CAAC;AAC1G,OAAO,EAAwD,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC7G,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAyC,YAAY,EAAE,MAAM,WAAW,CAAC;AAEhF,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEtE,eAAO,MAAM,yBAAyB,QAYpC,CAAC;AAEH;;GAEG;AACH,qBAAa,WAAW;IAQpB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IARxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAE1B,OAAO,CAAC,EAAE,OAAO,CAAC;gBAIvB,MAAM,CAAC,EAAE,MAAM,EACE,aAAa,6CAA8B,EAC3C,qBAAqB,6BAAmC;IAK3E,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;OAEG;IACH,IAAI,cAAc,mBAkBjB;IAED;;OAEG;IACH,wBAAwB;IASxB;;OAEG;IACH,WAAW;IASX;;OAEG;IACH,kBAAkB,CAAC,IAAI,GAAE,kBAAoD,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;CAY3G;AAED,eAAO,MAAM,SAAS,WAAkB,aAAa,UAAS,aAAa,kDAe1E,CAAC;AAEF,eAAO,MAAM,SAAS,QAAe,aAAa,OAAO,aAAa,kBAMrE,CAAC;AAEF,eAAO,MAAM,eAAe,4BAAmC,MAAM,EAAE,aAAa,SAAS,KAAG,QAAQ,SAAS,CA+ChH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iframe-proxy-runtime.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/vault/iframe-proxy-runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"iframe-proxy-runtime.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/vault/iframe-proxy-runtime.ts"],"names":[],"mappings":"AASA,OAAO,EAAoC,OAAO,EAAE,MAAM,WAAW,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAoB,MAAM,iBAAiB,CAAC;AAGjE,oBAAY,wBAAwB,GAAG;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAmB;IAClD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAO/B;gBAES,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,wBAAwB;IA6B7F,IAAI,KAAK,IAAI,YAAY,GAAG,SAAS,CAEpC;IAEK,IAAI,CAAC,MAAM,EAAE,MAAM;IAYnB,KAAK;CAKZ"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/client-services",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.40",
|
|
4
4
|
"description": "DXOS client services implementation",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -20,39 +20,39 @@
|
|
|
20
20
|
"src"
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@dxos/async": "0.1.
|
|
24
|
-
"@dxos/client": "0.1.
|
|
25
|
-
"@dxos/codec-protobuf": "0.1.
|
|
26
|
-
"@dxos/config": "0.1.
|
|
27
|
-
"@dxos/context": "0.1.
|
|
28
|
-
"@dxos/credentials": "0.1.
|
|
29
|
-
"@dxos/crypto": "0.1.
|
|
30
|
-
"@dxos/debug": "0.1.
|
|
31
|
-
"@dxos/document-model": "0.1.
|
|
32
|
-
"@dxos/echo-db": "0.1.
|
|
33
|
-
"@dxos/echo-pipeline": "0.1.
|
|
34
|
-
"@dxos/errors": "0.1.
|
|
35
|
-
"@dxos/feed-store": "0.1.
|
|
36
|
-
"@dxos/keyring": "0.1.
|
|
37
|
-
"@dxos/keys": "0.1.
|
|
38
|
-
"@dxos/log": "0.1.
|
|
39
|
-
"@dxos/messaging": "0.1.
|
|
40
|
-
"@dxos/model-factory": "0.1.
|
|
41
|
-
"@dxos/network-manager": "0.1.
|
|
42
|
-
"@dxos/node-std": "0.1.
|
|
43
|
-
"@dxos/protocols": "0.1.
|
|
44
|
-
"@dxos/random-access-storage": "0.1.
|
|
45
|
-
"@dxos/rpc": "0.1.
|
|
46
|
-
"@dxos/teleport": "0.1.
|
|
47
|
-
"@dxos/teleport-extension-gossip": "0.1.
|
|
48
|
-
"@dxos/text-model": "0.1.
|
|
49
|
-
"@dxos/timeframe": "0.1.
|
|
50
|
-
"@dxos/util": "0.1.
|
|
23
|
+
"@dxos/async": "0.1.40",
|
|
24
|
+
"@dxos/client": "0.1.40",
|
|
25
|
+
"@dxos/codec-protobuf": "0.1.40",
|
|
26
|
+
"@dxos/config": "0.1.40",
|
|
27
|
+
"@dxos/context": "0.1.40",
|
|
28
|
+
"@dxos/credentials": "0.1.40",
|
|
29
|
+
"@dxos/crypto": "0.1.40",
|
|
30
|
+
"@dxos/debug": "0.1.40",
|
|
31
|
+
"@dxos/document-model": "0.1.40",
|
|
32
|
+
"@dxos/echo-db": "0.1.40",
|
|
33
|
+
"@dxos/echo-pipeline": "0.1.40",
|
|
34
|
+
"@dxos/errors": "0.1.40",
|
|
35
|
+
"@dxos/feed-store": "0.1.40",
|
|
36
|
+
"@dxos/keyring": "0.1.40",
|
|
37
|
+
"@dxos/keys": "0.1.40",
|
|
38
|
+
"@dxos/log": "0.1.40",
|
|
39
|
+
"@dxos/messaging": "0.1.40",
|
|
40
|
+
"@dxos/model-factory": "0.1.40",
|
|
41
|
+
"@dxos/network-manager": "0.1.40",
|
|
42
|
+
"@dxos/node-std": "0.1.40",
|
|
43
|
+
"@dxos/protocols": "0.1.40",
|
|
44
|
+
"@dxos/random-access-storage": "0.1.40",
|
|
45
|
+
"@dxos/rpc": "0.1.40",
|
|
46
|
+
"@dxos/teleport": "0.1.40",
|
|
47
|
+
"@dxos/teleport-extension-gossip": "0.1.40",
|
|
48
|
+
"@dxos/text-model": "0.1.40",
|
|
49
|
+
"@dxos/timeframe": "0.1.40",
|
|
50
|
+
"@dxos/util": "0.1.40"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@types/readable-stream": "^2.3.9",
|
|
54
54
|
"fast-check": "~3.3.0",
|
|
55
|
-
"@dxos/signal": "0.1.
|
|
55
|
+
"@dxos/signal": "0.1.40"
|
|
56
56
|
},
|
|
57
57
|
"publishConfig": {
|
|
58
58
|
"access": "public"
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2022 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import assert from 'node:assert';
|
|
6
|
+
|
|
7
|
+
import { Trigger } from '@dxos/async';
|
|
8
|
+
import { cancelWithContext, Context } from '@dxos/context';
|
|
9
|
+
import { InvalidInvitationExtensionRoleError } from '@dxos/errors';
|
|
10
|
+
import { PublicKey } from '@dxos/keys';
|
|
11
|
+
import { log } from '@dxos/log';
|
|
12
|
+
import { schema, trace } from '@dxos/protocols';
|
|
13
|
+
import {
|
|
14
|
+
AdmissionRequest,
|
|
15
|
+
AdmissionResponse,
|
|
16
|
+
AuthenticationRequest,
|
|
17
|
+
AuthenticationResponse,
|
|
18
|
+
IntroductionRequest,
|
|
19
|
+
IntroductionResponse,
|
|
20
|
+
InvitationHostService,
|
|
21
|
+
Options
|
|
22
|
+
} from '@dxos/protocols/proto/dxos/halo/invitations';
|
|
23
|
+
import { ExtensionContext, RpcExtension } from '@dxos/teleport';
|
|
24
|
+
|
|
25
|
+
/// Timeout for the options exchange.
|
|
26
|
+
const OPTIONS_TIMEOUT = 10_000;
|
|
27
|
+
|
|
28
|
+
type InvitationHostExtensionCallbacks = {
|
|
29
|
+
// Deliberately not async to not block the extensions opening.
|
|
30
|
+
onOpen: () => void;
|
|
31
|
+
onError: (error: Error) => void;
|
|
32
|
+
|
|
33
|
+
introduce: (request: IntroductionRequest) => Promise<IntroductionResponse>;
|
|
34
|
+
authenticate: (request: AuthenticationRequest) => Promise<AuthenticationResponse>;
|
|
35
|
+
admit: (request: AdmissionRequest) => Promise<AdmissionResponse>;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Host's side for a connection to a concrete peer in p2p network during invitation.
|
|
40
|
+
*/
|
|
41
|
+
export class InvitationHostExtension extends RpcExtension<
|
|
42
|
+
{ InvitationHostService: InvitationHostService },
|
|
43
|
+
{ InvitationHostService: InvitationHostService }
|
|
44
|
+
> {
|
|
45
|
+
/**
|
|
46
|
+
* @internal
|
|
47
|
+
*/
|
|
48
|
+
public _traceParent?: string;
|
|
49
|
+
|
|
50
|
+
private _ctx = new Context();
|
|
51
|
+
private _remoteOptions?: Options;
|
|
52
|
+
private _remoteOptionsTrigger = new Trigger();
|
|
53
|
+
|
|
54
|
+
constructor(private readonly _callbacks: InvitationHostExtensionCallbacks) {
|
|
55
|
+
super({
|
|
56
|
+
requested: {
|
|
57
|
+
InvitationHostService: schema.getService('dxos.halo.invitations.InvitationHostService')
|
|
58
|
+
},
|
|
59
|
+
exposed: {
|
|
60
|
+
InvitationHostService: schema.getService('dxos.halo.invitations.InvitationHostService')
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
protected override async getHandlers(): Promise<{ InvitationHostService: InvitationHostService }> {
|
|
66
|
+
return {
|
|
67
|
+
// TODO(dmaretskyi): For now this is just forwarding the data to callbacks since we don't have session-specific logic.
|
|
68
|
+
// Perhaps in the future we will have more complex logic here.
|
|
69
|
+
InvitationHostService: {
|
|
70
|
+
options: async (options) => {
|
|
71
|
+
assert(!this._remoteOptions, 'Remote options already set.');
|
|
72
|
+
this._remoteOptions = options;
|
|
73
|
+
this._remoteOptionsTrigger.wake();
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
introduce: async (request) => {
|
|
77
|
+
const traceId = PublicKey.random().toHex();
|
|
78
|
+
log.trace(
|
|
79
|
+
'dxos.sdk.invitation-handler.host.introduce',
|
|
80
|
+
trace.begin({ id: traceId, parentId: this._traceParent })
|
|
81
|
+
);
|
|
82
|
+
const response = await this._callbacks.introduce(request);
|
|
83
|
+
log.trace('dxos.sdk.invitation-handler.host.introduce', trace.end({ id: traceId }));
|
|
84
|
+
return response;
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
authenticate: async (request) => {
|
|
88
|
+
const traceId = PublicKey.random().toHex();
|
|
89
|
+
log.trace(
|
|
90
|
+
'dxos.sdk.invitation-handler.host.authenticate',
|
|
91
|
+
trace.begin({ id: traceId, parentId: this._traceParent })
|
|
92
|
+
);
|
|
93
|
+
const response = await this._callbacks.authenticate(request);
|
|
94
|
+
log.trace('dxos.sdk.invitation-handler.host.authenticate', trace.end({ id: traceId, data: { ...response } }));
|
|
95
|
+
return response;
|
|
96
|
+
},
|
|
97
|
+
|
|
98
|
+
admit: async (request) => {
|
|
99
|
+
const traceId = PublicKey.random().toHex();
|
|
100
|
+
log.trace(
|
|
101
|
+
'dxos.sdk.invitation-handler.host.admit',
|
|
102
|
+
trace.begin({ id: traceId, parentId: this._traceParent })
|
|
103
|
+
);
|
|
104
|
+
const response = await this._callbacks.admit(request);
|
|
105
|
+
log.trace('dxos.sdk.invitation-handler.host.admit', trace.end({ id: traceId }));
|
|
106
|
+
return response;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
override async onOpen(context: ExtensionContext) {
|
|
113
|
+
await super.onOpen(context);
|
|
114
|
+
|
|
115
|
+
try {
|
|
116
|
+
await this.rpc.InvitationHostService.options({ role: Options.Role.HOST });
|
|
117
|
+
await cancelWithContext(this._ctx, this._remoteOptionsTrigger.wait({ timeout: OPTIONS_TIMEOUT }));
|
|
118
|
+
if (this._remoteOptions?.role !== Options.Role.GUEST) {
|
|
119
|
+
throw new InvalidInvitationExtensionRoleError(undefined, {
|
|
120
|
+
expected: Options.Role.GUEST,
|
|
121
|
+
remoteOptions: this._remoteOptions
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
this._callbacks.onOpen();
|
|
126
|
+
} catch (err: any) {
|
|
127
|
+
this._callbacks.onError(err);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
override async onClose() {
|
|
132
|
+
await this._ctx.dispose();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
type InvitationGuestExtensionCallbacks = {
|
|
137
|
+
// Deliberately not async to not block the extensions opening.
|
|
138
|
+
onOpen: (ctx: Context) => void;
|
|
139
|
+
onError: (error: Error) => void;
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Guest's side for a connection to a concrete peer in p2p network during invitation.
|
|
144
|
+
*/
|
|
145
|
+
export class InvitationGuestExtension extends RpcExtension<
|
|
146
|
+
{ InvitationHostService: InvitationHostService },
|
|
147
|
+
{ InvitationHostService: InvitationHostService }
|
|
148
|
+
> {
|
|
149
|
+
private _ctx = new Context();
|
|
150
|
+
private _remoteOptions?: Options;
|
|
151
|
+
private _remoteOptionsTrigger = new Trigger();
|
|
152
|
+
|
|
153
|
+
constructor(private readonly _callbacks: InvitationGuestExtensionCallbacks) {
|
|
154
|
+
super({
|
|
155
|
+
requested: {
|
|
156
|
+
InvitationHostService: schema.getService('dxos.halo.invitations.InvitationHostService')
|
|
157
|
+
},
|
|
158
|
+
exposed: {
|
|
159
|
+
InvitationHostService: schema.getService('dxos.halo.invitations.InvitationHostService')
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
protected override async getHandlers(): Promise<{ InvitationHostService: InvitationHostService }> {
|
|
165
|
+
return {
|
|
166
|
+
InvitationHostService: {
|
|
167
|
+
options: async (options) => {
|
|
168
|
+
assert(!this._remoteOptions, 'Remote options already set.');
|
|
169
|
+
this._remoteOptions = options;
|
|
170
|
+
this._remoteOptionsTrigger.wake();
|
|
171
|
+
},
|
|
172
|
+
introduce: () => {
|
|
173
|
+
throw new Error('Method not allowed.');
|
|
174
|
+
},
|
|
175
|
+
authenticate: () => {
|
|
176
|
+
throw new Error('Method not allowed.');
|
|
177
|
+
},
|
|
178
|
+
admit: () => {
|
|
179
|
+
throw new Error('Method not allowed.');
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
override async onOpen(context: ExtensionContext) {
|
|
186
|
+
await super.onOpen(context);
|
|
187
|
+
|
|
188
|
+
try {
|
|
189
|
+
log('begin options');
|
|
190
|
+
await cancelWithContext(this._ctx, this.rpc.InvitationHostService.options({ role: Options.Role.GUEST }));
|
|
191
|
+
await cancelWithContext(this._ctx, this._remoteOptionsTrigger.wait({ timeout: OPTIONS_TIMEOUT }));
|
|
192
|
+
log('end options');
|
|
193
|
+
if (this._remoteOptions?.role !== Options.Role.HOST) {
|
|
194
|
+
throw new InvalidInvitationExtensionRoleError(undefined, {
|
|
195
|
+
expected: Options.Role.HOST,
|
|
196
|
+
remoteOptions: this._remoteOptions
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
this._callbacks.onOpen(this._ctx);
|
|
201
|
+
} catch (err: any) {
|
|
202
|
+
log('openError', err);
|
|
203
|
+
this._callbacks.onError(err);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
override async onClose() {
|
|
208
|
+
log('onClose');
|
|
209
|
+
await this._ctx.dispose();
|
|
210
|
+
}
|
|
211
|
+
}
|