@dxos/client-services 0.4.10-main.fe71b4c → 0.4.10-next.71cec10
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-7S34JE6M.mjs → chunk-5U7G5S73.mjs} +379 -330
- package/dist/lib/browser/chunk-5U7G5S73.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +3 -1
- package/dist/lib/browser/index.mjs.map +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/packlets/testing/index.mjs +1 -1
- package/dist/lib/node/{chunk-DQMGKBOV.cjs → chunk-Y3ADPF24.cjs} +377 -329
- package/dist/lib/node/chunk-Y3ADPF24.cjs.map +7 -0
- package/dist/lib/node/index.cjs +44 -42
- package/dist/lib/node/index.cjs.map +1 -1
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/packlets/testing/index.cjs +6 -6
- package/dist/types/src/packlets/indexing/util.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/index.d.ts +1 -0
- package/dist/types/src/packlets/invitations/index.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitations-manager.d.ts +42 -0
- package/dist/types/src/packlets/invitations/invitations-manager.d.ts.map +1 -0
- package/dist/types/src/packlets/invitations/invitations-service.d.ts +7 -23
- package/dist/types/src/packlets/invitations/invitations-service.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-context.d.ts +2 -0
- package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-host.d.ts +1 -0
- package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
- package/dist/types/src/version.d.ts +1 -1
- package/package.json +34 -34
- package/src/packlets/indexing/util.ts +13 -6
- package/src/packlets/invitations/index.ts +1 -0
- package/src/packlets/invitations/invitations-handler.ts +1 -2
- package/src/packlets/invitations/invitations-manager.ts +197 -0
- package/src/packlets/invitations/invitations-service.ts +21 -168
- package/src/packlets/services/automerge-host.test.ts +1 -1
- package/src/packlets/services/service-context.ts +11 -0
- package/src/packlets/services/service-host.ts +11 -15
- package/src/packlets/spaces/data-space.ts +1 -1
- package/src/version.ts +1 -1
- package/dist/lib/browser/chunk-7S34JE6M.mjs.map +0 -7
- package/dist/lib/node/chunk-DQMGKBOV.cjs.map +0 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invitations-handler.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/invitations/invitations-handler.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,wBAAwB,EAExB,qBAAqB,EAEtB,MAAM,uBAAuB,CAAC;AAc/B,OAAO,EAAE,KAAK,gBAAgB,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AAC/F,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AASzF,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,kBAAkB;IAIjB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAE5C,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,qBAAqB;IAgLpG,gBAAgB,CACd,QAAQ,EAAE,kBAAkB,EAC5B,UAAU,EAAE,UAAU,EACtB,aAAa,CAAC,EAAE,qBAAqB,GACpC,wBAAwB;
|
|
1
|
+
{"version":3,"file":"invitations-handler.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/invitations/invitations-handler.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,wBAAwB,EAExB,qBAAqB,EAEtB,MAAM,uBAAuB,CAAC;AAc/B,OAAO,EAAE,KAAK,gBAAgB,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AAC/F,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AASzF,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,kBAAkB;IAIjB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAE5C,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,qBAAqB;IAgLpG,gBAAgB,CACd,QAAQ,EAAE,kBAAkB,EAC5B,UAAU,EAAE,UAAU,EACtB,aAAa,CAAC,EAAE,qBAAqB,GACpC,wBAAwB;YAyKb,mBAAmB;YA6BnB,mBAAmB;CAsBlC;AAED,eAAO,MAAM,sBAAsB,QAAO,gBAGzC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Event } from '@dxos/async';
|
|
2
|
+
import type { AuthenticatingInvitation, CancellableInvitation } from '@dxos/client-protocol';
|
|
3
|
+
import { type Context } from '@dxos/context';
|
|
4
|
+
import { type MetadataStore } from '@dxos/echo-pipeline';
|
|
5
|
+
import { type AcceptInvitationRequest, type Invitation, type AuthenticationRequest } from '@dxos/protocols/proto/dxos/client/services';
|
|
6
|
+
import type { InvitationProtocol } from './invitation-protocol';
|
|
7
|
+
import type { InvitationsHandler } from './invitations-handler';
|
|
8
|
+
/**
|
|
9
|
+
* Entry point for creating and accepting invitations, keeps track of existing invitation set and
|
|
10
|
+
* emits events when the set changes.
|
|
11
|
+
*/
|
|
12
|
+
export declare class InvitationsManager {
|
|
13
|
+
private readonly _invitationsHandler;
|
|
14
|
+
private readonly _getHandler;
|
|
15
|
+
private readonly _metadataStore;
|
|
16
|
+
private readonly _createInvitations;
|
|
17
|
+
private readonly _acceptInvitations;
|
|
18
|
+
readonly invitationCreated: Event<Invitation>;
|
|
19
|
+
readonly invitationAccepted: Event<Invitation>;
|
|
20
|
+
readonly removedCreated: Event<Invitation>;
|
|
21
|
+
readonly removedAccepted: Event<Invitation>;
|
|
22
|
+
readonly saved: Event<Invitation>;
|
|
23
|
+
private readonly _persistentInvitationsLoadedEvent;
|
|
24
|
+
private _persistentInvitationsLoaded;
|
|
25
|
+
constructor(_invitationsHandler: InvitationsHandler, _getHandler: (invitation: Invitation) => InvitationProtocol, _metadataStore: MetadataStore);
|
|
26
|
+
createInvitation(options: Invitation): CancellableInvitation;
|
|
27
|
+
loadPersistentInvitations(): Promise<{
|
|
28
|
+
invitations: Invitation[];
|
|
29
|
+
}>;
|
|
30
|
+
acceptInvitation(request: AcceptInvitationRequest): AuthenticatingInvitation;
|
|
31
|
+
authenticate({ invitationId, authCode }: AuthenticationRequest): Promise<void>;
|
|
32
|
+
cancelInvitation({ invitationId }: {
|
|
33
|
+
invitationId: string;
|
|
34
|
+
}): Promise<void>;
|
|
35
|
+
getCreatedInvitations(): Invitation[];
|
|
36
|
+
getAcceptedInvitations(): Invitation[];
|
|
37
|
+
onPersistentInvitationsLoaded(ctx: Context, callback: () => void): void;
|
|
38
|
+
private _safePersistInBackground;
|
|
39
|
+
private _safeDeleteInvitation;
|
|
40
|
+
private _onInvitationComplete;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=invitations-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invitations-manager.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/invitations/invitations-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAG/E,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC3B,MAAM,4CAA4C,CAAC;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;;GAGG;AACH,qBAAa,kBAAkB;IAc3B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAfjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA4C;IAC/E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA+C;IAElF,SAAgB,iBAAiB,oBAA2B;IAC5D,SAAgB,kBAAkB,oBAA2B;IAC7D,SAAgB,cAAc,oBAA2B;IACzD,SAAgB,eAAe,oBAA2B;IAC1D,SAAgB,KAAK,oBAA2B;IAEhD,OAAO,CAAC,QAAQ,CAAC,iCAAiC,CAAe;IACjE,OAAO,CAAC,4BAA4B,CAAS;gBAG1B,mBAAmB,EAAE,kBAAkB,EACvC,WAAW,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,kBAAkB,EAC3D,cAAc,EAAE,aAAa;IAGhD,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,qBAAqB;IA4BtD,yBAAyB,IAAI,OAAO,CAAC;QAAE,WAAW,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IAyBzE,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,wBAAwB;IAoBtE,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;IAuBjF,qBAAqB,IAAI,UAAU,EAAE;IAIrC,sBAAsB,IAAI,UAAU,EAAE;IAItC,6BAA6B,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI;IAQhE,OAAO,CAAC,wBAAwB;YAgBlB,qBAAqB;IAQnC,OAAO,CAAC,qBAAqB;CAO9B"}
|
|
@@ -1,33 +1,17 @@
|
|
|
1
1
|
import { Stream } from '@dxos/codec-protobuf';
|
|
2
|
-
import { type
|
|
3
|
-
import { type
|
|
4
|
-
import { type InvitationProtocol } from './invitation-protocol';
|
|
5
|
-
import { type InvitationsHandler } from './invitations-handler';
|
|
2
|
+
import { type AuthenticationRequest, type AcceptInvitationRequest, type Invitation, type InvitationsService, QueryInvitationsResponse } from '@dxos/protocols/proto/dxos/client/services';
|
|
3
|
+
import { type InvitationsManager } from './invitations-manager';
|
|
6
4
|
/**
|
|
7
5
|
* Adapts invitation service observable to client/service stream.
|
|
8
6
|
*/
|
|
9
7
|
export declare class InvitationsServiceImpl implements InvitationsService {
|
|
10
|
-
private readonly
|
|
11
|
-
|
|
12
|
-
private readonly _metadataStore;
|
|
13
|
-
private readonly _createInvitations;
|
|
14
|
-
private readonly _acceptInvitations;
|
|
15
|
-
private readonly _invitationCreated;
|
|
16
|
-
private readonly _invitationAccepted;
|
|
17
|
-
private readonly _removedCreated;
|
|
18
|
-
private readonly _removedAccepted;
|
|
19
|
-
private readonly _saved;
|
|
20
|
-
private readonly _persistentInvitationsLoadedEvent;
|
|
21
|
-
private _persistentInvitationsLoaded;
|
|
22
|
-
constructor(_invitationsHandler: InvitationsHandler, _getHandler: (invitation: Invitation) => InvitationProtocol, _metadataStore: MetadataStore);
|
|
8
|
+
private readonly _invitationsManager;
|
|
9
|
+
constructor(_invitationsManager: InvitationsManager);
|
|
23
10
|
getLoggingContext(): {};
|
|
24
11
|
createInvitation(options: Invitation): Stream<Invitation>;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
acceptInvitation({ invitation: options, deviceProfile }: AcceptInvitationRequest): Stream<Invitation>;
|
|
29
|
-
authenticate({ invitationId, authCode }: AuthenticationRequest): Promise<void>;
|
|
30
|
-
cancelInvitation({ invitationId }: {
|
|
12
|
+
acceptInvitation(request: AcceptInvitationRequest): Stream<Invitation>;
|
|
13
|
+
authenticate(request: AuthenticationRequest): Promise<void>;
|
|
14
|
+
cancelInvitation(request: {
|
|
31
15
|
invitationId: string;
|
|
32
16
|
}): Promise<void>;
|
|
33
17
|
queryInvitations(): Stream<QueryInvitationsResponse>;
|
|
@@ -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":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,wBAAwB,EACzB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;GAEG;AACH,qBAAa,sBAAuB,YAAW,kBAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAAnB,mBAAmB,EAAE,kBAAkB;IAGpE,iBAAiB;IAMjB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAOzD,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CAAC,UAAU,CAAC;IAOhE,YAAY,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,gBAAgB,CAAC,OAAO,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxE,gBAAgB,IAAI,MAAM,CAAC,wBAAwB,CAAC;CAsErD"}
|
|
@@ -14,6 +14,7 @@ import { type Storage } from '@dxos/random-access-storage';
|
|
|
14
14
|
import { BlobStore } from '@dxos/teleport-extension-object-sync';
|
|
15
15
|
import { IdentityManager, type CreateIdentityOptions, type IdentityManagerRuntimeParams } from '../identity';
|
|
16
16
|
import { InvitationsHandler, type InvitationProtocol } from '../invitations';
|
|
17
|
+
import { InvitationsManager } from '../invitations/invitations-manager';
|
|
17
18
|
import { DataSpaceManager, type DataSpaceManagerRuntimeParams } from '../spaces';
|
|
18
19
|
export type ServiceContextRuntimeParams = IdentityManagerRuntimeParams & DataSpaceManagerRuntimeParams;
|
|
19
20
|
/**
|
|
@@ -37,6 +38,7 @@ export declare class ServiceContext extends Resource {
|
|
|
37
38
|
readonly spaceManager: SpaceManager;
|
|
38
39
|
readonly identityManager: IdentityManager;
|
|
39
40
|
readonly invitations: InvitationsHandler;
|
|
41
|
+
readonly invitationsManager: InvitationsManager;
|
|
40
42
|
readonly automergeHost: AutomergeHost;
|
|
41
43
|
readonly indexMetadata: IndexMetadataStore;
|
|
42
44
|
readonly indexer: Indexer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-context.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/services/service-context.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAiB,MAAM,qBAAqB,CAAC;AAC/G,OAAO,EAAe,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAc,OAAO,EAA0B,MAAM,gBAAgB,CAAC;AAEjG,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,6CAA6C,CAAC;AACpG,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAIjE,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EAElC,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,kBAAkB,EAElB,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,KAAK,6BAA6B,EAAuB,MAAM,WAAW,CAAC;AAEtG,MAAM,MAAM,2BAA2B,GAAG,4BAA4B,GAAG,6BAA6B,CAAC;AACvG;;GAEG;AAGH,qBAEa,cAAe,SAAQ,QAAQ;
|
|
1
|
+
{"version":3,"file":"service-context.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/services/service-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-host.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/services/service-host.ts"],"names":[],"mappings":"AAOA,OAAO,EAAmC,KAAK,cAAc,EAAc,MAAM,uBAAuB,CAAC;AACzG,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAKL,KAAK,OAAO,EACb,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EAA0B,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAoD,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGhH,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAK3D,OAAO,EAAE,cAAc,EAAE,KAAK,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAiBrD,MAAM,MAAM,wBAAwB,GAAG;IACrC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,2BAA2B,CAAC;IACxC,aAAa,CAAC,EAAE,2BAA2B,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,qBACa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkC;IACnE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoB;IACnD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuC;
|
|
1
|
+
{"version":3,"file":"service-host.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/services/service-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-space.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/spaces/data-space.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAA+D,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"data-space.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/spaces/data-space.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const DXOS_VERSION = "0.4.10-
|
|
1
|
+
export declare const DXOS_VERSION = "0.4.10-next.71cec10";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/client-services",
|
|
3
|
-
"version": "0.4.10-
|
|
3
|
+
"version": "0.4.10-next.71cec10",
|
|
4
4
|
"description": "DXOS client services implementation",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -24,43 +24,43 @@
|
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"level": "^8.0.1",
|
|
26
26
|
"platform": "^1.3.6",
|
|
27
|
-
"@dxos/async": "0.4.10-
|
|
28
|
-
"@dxos/
|
|
29
|
-
"@dxos/
|
|
30
|
-
"@dxos/
|
|
31
|
-
"@dxos/codec-protobuf": "0.4.10-
|
|
32
|
-
"@dxos/
|
|
33
|
-
"@dxos/
|
|
34
|
-
"@dxos/
|
|
35
|
-
"@dxos/debug": "0.4.10-
|
|
36
|
-
"@dxos/echo-
|
|
37
|
-
"@dxos/echo-
|
|
38
|
-
"@dxos/
|
|
39
|
-
"@dxos/
|
|
40
|
-
"@dxos/invariant": "0.4.10-
|
|
41
|
-
"@dxos/
|
|
42
|
-
"@dxos/
|
|
43
|
-
"@dxos/
|
|
44
|
-
"@dxos/
|
|
45
|
-
"@dxos/
|
|
46
|
-
"@dxos/
|
|
47
|
-
"@dxos/
|
|
48
|
-
"@dxos/
|
|
49
|
-
"@dxos/
|
|
50
|
-
"@dxos/
|
|
51
|
-
"@dxos/
|
|
52
|
-
"@dxos/
|
|
53
|
-
"@dxos/teleport-extension-gossip": "0.4.10-
|
|
54
|
-
"@dxos/teleport-extension-object-sync": "0.4.10-
|
|
55
|
-
"@dxos/
|
|
56
|
-
"@dxos/
|
|
57
|
-
"@dxos/
|
|
58
|
-
"@dxos/
|
|
27
|
+
"@dxos/async": "0.4.10-next.71cec10",
|
|
28
|
+
"@dxos/automerge": "0.4.10-next.71cec10",
|
|
29
|
+
"@dxos/client-protocol": "0.4.10-next.71cec10",
|
|
30
|
+
"@dxos/config": "0.4.10-next.71cec10",
|
|
31
|
+
"@dxos/codec-protobuf": "0.4.10-next.71cec10",
|
|
32
|
+
"@dxos/context": "0.4.10-next.71cec10",
|
|
33
|
+
"@dxos/credentials": "0.4.10-next.71cec10",
|
|
34
|
+
"@dxos/crypto": "0.4.10-next.71cec10",
|
|
35
|
+
"@dxos/debug": "0.4.10-next.71cec10",
|
|
36
|
+
"@dxos/echo-pipeline": "0.4.10-next.71cec10",
|
|
37
|
+
"@dxos/echo-db": "0.4.10-next.71cec10",
|
|
38
|
+
"@dxos/feed-store": "0.4.10-next.71cec10",
|
|
39
|
+
"@dxos/indexing": "0.4.10-next.71cec10",
|
|
40
|
+
"@dxos/invariant": "0.4.10-next.71cec10",
|
|
41
|
+
"@dxos/keyring": "0.4.10-next.71cec10",
|
|
42
|
+
"@dxos/echo-schema": "0.4.10-next.71cec10",
|
|
43
|
+
"@dxos/keys": "0.4.10-next.71cec10",
|
|
44
|
+
"@dxos/messaging": "0.4.10-next.71cec10",
|
|
45
|
+
"@dxos/log": "0.4.10-next.71cec10",
|
|
46
|
+
"@dxos/lock-file": "0.4.10-next.71cec10",
|
|
47
|
+
"@dxos/node-std": "0.4.10-next.71cec10",
|
|
48
|
+
"@dxos/protocols": "0.4.10-next.71cec10",
|
|
49
|
+
"@dxos/network-manager": "0.4.10-next.71cec10",
|
|
50
|
+
"@dxos/rpc": "0.4.10-next.71cec10",
|
|
51
|
+
"@dxos/random-access-storage": "0.4.10-next.71cec10",
|
|
52
|
+
"@dxos/teleport": "0.4.10-next.71cec10",
|
|
53
|
+
"@dxos/teleport-extension-gossip": "0.4.10-next.71cec10",
|
|
54
|
+
"@dxos/teleport-extension-object-sync": "0.4.10-next.71cec10",
|
|
55
|
+
"@dxos/timeframe": "0.4.10-next.71cec10",
|
|
56
|
+
"@dxos/tracing": "0.4.10-next.71cec10",
|
|
57
|
+
"@dxos/util": "0.4.10-next.71cec10",
|
|
58
|
+
"@dxos/websocket-rpc": "0.4.10-next.71cec10"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@types/platform": "^1.3.4",
|
|
62
62
|
"@types/readable-stream": "^2.3.9",
|
|
63
|
-
"@dxos/signal": "0.4.10-
|
|
63
|
+
"@dxos/signal": "0.4.10-next.71cec10"
|
|
64
64
|
},
|
|
65
65
|
"publishConfig": {
|
|
66
66
|
"access": "public"
|
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { getHeads } from '@dxos/automerge/automerge';
|
|
6
|
-
import { type DocHandle } from '@dxos/automerge/automerge-repo';
|
|
7
|
-
import { warnAfterTimeout } from '@dxos/debug';
|
|
6
|
+
import { type DocumentId, type DocHandle } from '@dxos/automerge/automerge-repo';
|
|
8
7
|
import { type AutomergeHost } from '@dxos/echo-pipeline';
|
|
9
8
|
import { type ObjectSnapshot } from '@dxos/indexing';
|
|
10
9
|
import { type ObjectPointerEncoded, idCodec } from '@dxos/protocols';
|
|
@@ -21,8 +20,12 @@ export const createSelectedDocumentsIterator = (automergeHost: AutomergeHost) =>
|
|
|
21
20
|
async function* loadDocuments(ids: ObjectPointerEncoded[]) {
|
|
22
21
|
for (const id of ids) {
|
|
23
22
|
const { documentId, objectId } = idCodec.decode(id);
|
|
24
|
-
const handle =
|
|
25
|
-
|
|
23
|
+
const handle =
|
|
24
|
+
automergeHost.repo.handles[documentId as DocumentId] ?? automergeHost.repo.find(documentId as DocumentId);
|
|
25
|
+
if (!handle.isReady()) {
|
|
26
|
+
// `whenReady` creates a timeout so we guard it with an if to skip it if the handle is already ready.
|
|
27
|
+
await handle.whenReady();
|
|
28
|
+
}
|
|
26
29
|
const doc = handle.docSync();
|
|
27
30
|
const hash = getHeads(doc).join('');
|
|
28
31
|
yield doc.objects?.[objectId] ? [{ id, object: doc.objects[objectId], currentHash: hash }] : [];
|
|
@@ -47,7 +50,10 @@ export const createDocumentsIterator = (automergeHost: AutomergeHost) =>
|
|
|
47
50
|
return;
|
|
48
51
|
}
|
|
49
52
|
|
|
50
|
-
|
|
53
|
+
if (!handle.isReady()) {
|
|
54
|
+
// `whenReady` creates a timeout so we guard it with an if to skip it if the handle is already ready.
|
|
55
|
+
await handle.whenReady();
|
|
56
|
+
}
|
|
51
57
|
const doc = handle.docSync();
|
|
52
58
|
|
|
53
59
|
const heads = getHeads(doc);
|
|
@@ -67,7 +73,7 @@ export const createDocumentsIterator = (automergeHost: AutomergeHost) =>
|
|
|
67
73
|
if (visited.has(id)) {
|
|
68
74
|
continue;
|
|
69
75
|
}
|
|
70
|
-
const linkHandle = automergeHost.repo.find(id as
|
|
76
|
+
const linkHandle = automergeHost.repo.handles[id as DocumentId] ?? automergeHost.repo.find(id as DocumentId);
|
|
71
77
|
for await (const result of getObjectsFromHandle(linkHandle)) {
|
|
72
78
|
yield result;
|
|
73
79
|
}
|
|
@@ -77,6 +83,7 @@ export const createDocumentsIterator = (automergeHost: AutomergeHost) =>
|
|
|
77
83
|
visited.add(handle.documentId);
|
|
78
84
|
}
|
|
79
85
|
|
|
86
|
+
// TODO(mykola): Use list of roots instead of iterating over all handles.
|
|
80
87
|
for (const handle of Object.values(automergeHost.repo.handles)) {
|
|
81
88
|
if (visited.has(handle.documentId)) {
|
|
82
89
|
continue;
|
|
@@ -193,7 +193,7 @@ export class InvitationsHandler {
|
|
|
193
193
|
return extension;
|
|
194
194
|
};
|
|
195
195
|
|
|
196
|
-
if (invitation.lifetime && invitation.created
|
|
196
|
+
if (invitation.lifetime && invitation.created) {
|
|
197
197
|
if (invitation.created.getTime() + invitation.lifetime * 1000 < Date.now()) {
|
|
198
198
|
log.warn('invitation has already expired');
|
|
199
199
|
} else {
|
|
@@ -251,7 +251,6 @@ export class InvitationsHandler {
|
|
|
251
251
|
const { timeout = INVITATION_TIMEOUT } = invitation;
|
|
252
252
|
invariant(protocol);
|
|
253
253
|
|
|
254
|
-
// TODO(nf): duplicate check in InvitationsService
|
|
255
254
|
if (deviceProfile) {
|
|
256
255
|
invariant(invitation.kind === Invitation.Kind.DEVICE, 'deviceProfile provided for non-device invitation');
|
|
257
256
|
}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { Event } from '@dxos/async';
|
|
6
|
+
import type { AuthenticatingInvitation, CancellableInvitation } from '@dxos/client-protocol';
|
|
7
|
+
import { type Context } from '@dxos/context';
|
|
8
|
+
import { hasInvitationExpired, type MetadataStore } from '@dxos/echo-pipeline';
|
|
9
|
+
import { invariant } from '@dxos/invariant';
|
|
10
|
+
import { log } from '@dxos/log';
|
|
11
|
+
import {
|
|
12
|
+
type AcceptInvitationRequest,
|
|
13
|
+
type Invitation,
|
|
14
|
+
type AuthenticationRequest,
|
|
15
|
+
} from '@dxos/protocols/proto/dxos/client/services';
|
|
16
|
+
|
|
17
|
+
import type { InvitationProtocol } from './invitation-protocol';
|
|
18
|
+
import type { InvitationsHandler } from './invitations-handler';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Entry point for creating and accepting invitations, keeps track of existing invitation set and
|
|
22
|
+
* emits events when the set changes.
|
|
23
|
+
*/
|
|
24
|
+
export class InvitationsManager {
|
|
25
|
+
private readonly _createInvitations = new Map<string, CancellableInvitation>();
|
|
26
|
+
private readonly _acceptInvitations = new Map<string, AuthenticatingInvitation>();
|
|
27
|
+
|
|
28
|
+
public readonly invitationCreated = new Event<Invitation>();
|
|
29
|
+
public readonly invitationAccepted = new Event<Invitation>();
|
|
30
|
+
public readonly removedCreated = new Event<Invitation>();
|
|
31
|
+
public readonly removedAccepted = new Event<Invitation>();
|
|
32
|
+
public readonly saved = new Event<Invitation>();
|
|
33
|
+
|
|
34
|
+
private readonly _persistentInvitationsLoadedEvent = new Event();
|
|
35
|
+
private _persistentInvitationsLoaded = false;
|
|
36
|
+
|
|
37
|
+
constructor(
|
|
38
|
+
private readonly _invitationsHandler: InvitationsHandler,
|
|
39
|
+
private readonly _getHandler: (invitation: Invitation) => InvitationProtocol,
|
|
40
|
+
private readonly _metadataStore: MetadataStore,
|
|
41
|
+
) {}
|
|
42
|
+
|
|
43
|
+
createInvitation(options: Invitation): CancellableInvitation {
|
|
44
|
+
const existingInvitation = this._createInvitations.get(options.invitationId);
|
|
45
|
+
if (existingInvitation) {
|
|
46
|
+
return existingInvitation;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const handler = this._getHandler(options);
|
|
50
|
+
const invitation = this._invitationsHandler.createInvitation(handler, options);
|
|
51
|
+
this._createInvitations.set(invitation.get().invitationId, invitation);
|
|
52
|
+
this.invitationCreated.emit(invitation.get());
|
|
53
|
+
|
|
54
|
+
const saveInvitationTask = invitation.get().persistent
|
|
55
|
+
? this._safePersistInBackground(invitation)
|
|
56
|
+
: Promise.resolve();
|
|
57
|
+
|
|
58
|
+
// onComplete is called on cancel, expiration, or redemption of a single-use invitation
|
|
59
|
+
this._onInvitationComplete(invitation, async () => {
|
|
60
|
+
this._createInvitations.delete(invitation.get().invitationId);
|
|
61
|
+
this.removedCreated.emit(invitation.get());
|
|
62
|
+
if (invitation.get().persistent) {
|
|
63
|
+
await saveInvitationTask;
|
|
64
|
+
await this._safeDeleteInvitation(invitation.get());
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
return invitation;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async loadPersistentInvitations(): Promise<{ invitations: Invitation[] }> {
|
|
72
|
+
if (this._persistentInvitationsLoaded) {
|
|
73
|
+
const invitations = this.getCreatedInvitations().filter((i) => i.persistent);
|
|
74
|
+
return { invitations };
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
const persistentInvitations = this._metadataStore.getInvitations();
|
|
78
|
+
// get saved persistent invitations, filter and remove from storage those that have expired.
|
|
79
|
+
const freshInvitations = persistentInvitations.filter((invitation) => !hasInvitationExpired(invitation));
|
|
80
|
+
|
|
81
|
+
const cInvitations = freshInvitations.map((persistentInvitation) => {
|
|
82
|
+
invariant(!this._createInvitations.get(persistentInvitation.invitationId), 'invitation already exists');
|
|
83
|
+
return this.createInvitation({ ...persistentInvitation, persistent: false }).get();
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
return { invitations: cInvitations };
|
|
87
|
+
} catch (err) {
|
|
88
|
+
log.catch(err);
|
|
89
|
+
return { invitations: [] };
|
|
90
|
+
} finally {
|
|
91
|
+
this._persistentInvitationsLoadedEvent.emit();
|
|
92
|
+
this._persistentInvitationsLoaded = true;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
acceptInvitation(request: AcceptInvitationRequest): AuthenticatingInvitation {
|
|
97
|
+
const options = request.invitation;
|
|
98
|
+
const existingInvitation = this._acceptInvitations.get(options.invitationId);
|
|
99
|
+
if (existingInvitation) {
|
|
100
|
+
return existingInvitation;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const handler = this._getHandler(options);
|
|
104
|
+
const invitation = this._invitationsHandler.acceptInvitation(handler, options, request.deviceProfile);
|
|
105
|
+
this._acceptInvitations.set(invitation.get().invitationId, invitation);
|
|
106
|
+
this.invitationAccepted.emit(invitation.get());
|
|
107
|
+
|
|
108
|
+
this._onInvitationComplete(invitation, () => {
|
|
109
|
+
this._acceptInvitations.delete(invitation.get().invitationId);
|
|
110
|
+
this.removedAccepted.emit(invitation.get());
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
return invitation;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
async authenticate({ invitationId, authCode }: AuthenticationRequest): Promise<void> {
|
|
117
|
+
log('authenticating...');
|
|
118
|
+
invariant(invitationId);
|
|
119
|
+
const observable = this._acceptInvitations.get(invitationId);
|
|
120
|
+
if (!observable) {
|
|
121
|
+
log.warn('invalid invitation', { invitationId });
|
|
122
|
+
} else {
|
|
123
|
+
await observable.authenticate(authCode);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
async cancelInvitation({ invitationId }: { invitationId: string }): Promise<void> {
|
|
128
|
+
log('cancelInvitation...', { invitationId });
|
|
129
|
+
invariant(invitationId);
|
|
130
|
+
const created = this._createInvitations.get(invitationId);
|
|
131
|
+
if (created) {
|
|
132
|
+
// remove from storage before modifying in-memory state, higher chance of failing
|
|
133
|
+
if (created.get().persistent) {
|
|
134
|
+
await this._metadataStore.removeInvitation(invitationId);
|
|
135
|
+
}
|
|
136
|
+
await created.cancel();
|
|
137
|
+
this._createInvitations.delete(invitationId);
|
|
138
|
+
this.removedCreated.emit(created.get());
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const accepted = this._acceptInvitations.get(invitationId);
|
|
143
|
+
if (accepted) {
|
|
144
|
+
await accepted.cancel();
|
|
145
|
+
this._acceptInvitations.delete(invitationId);
|
|
146
|
+
this.removedAccepted.emit(accepted.get());
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
getCreatedInvitations(): Invitation[] {
|
|
151
|
+
return [...this._createInvitations.values()].map((i) => i.get());
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
getAcceptedInvitations(): Invitation[] {
|
|
155
|
+
return [...this._acceptInvitations.values()].map((i) => i.get());
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
onPersistentInvitationsLoaded(ctx: Context, callback: () => void) {
|
|
159
|
+
if (this._persistentInvitationsLoaded) {
|
|
160
|
+
callback();
|
|
161
|
+
} else {
|
|
162
|
+
this._persistentInvitationsLoadedEvent.once(ctx, () => callback());
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
private _safePersistInBackground(invitation: CancellableInvitation): Promise<void> {
|
|
167
|
+
return new Promise((resolve) => {
|
|
168
|
+
setTimeout(async () => {
|
|
169
|
+
try {
|
|
170
|
+
await this._metadataStore.addInvitation(invitation.get());
|
|
171
|
+
this.saved.emit(invitation.get());
|
|
172
|
+
} catch (err: any) {
|
|
173
|
+
log.catch(err);
|
|
174
|
+
await invitation.cancel();
|
|
175
|
+
} finally {
|
|
176
|
+
resolve();
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
private async _safeDeleteInvitation(invitation: Invitation): Promise<void> {
|
|
183
|
+
try {
|
|
184
|
+
await this._metadataStore.removeInvitation(invitation.invitationId);
|
|
185
|
+
} catch (err) {
|
|
186
|
+
log.catch(err);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
private _onInvitationComplete(invitation: CancellableInvitation, callback: () => void) {
|
|
191
|
+
invitation.subscribe(
|
|
192
|
+
() => {},
|
|
193
|
+
() => {},
|
|
194
|
+
callback,
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
}
|