@dxos/client-services 0.4.7-next.f4b92be → 0.4.8-main.00e6f19
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-NTKD4OQC.mjs → chunk-EQPR3Z5Y.mjs} +426 -164
- package/dist/lib/browser/chunk-EQPR3Z5Y.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-GCIW4VHF.cjs → chunk-VDSDEN45.cjs} +405 -146
- package/dist/lib/node/chunk-VDSDEN45.cjs.map +7 -0
- package/dist/lib/node/index.cjs +39 -37
- 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 +8 -8
- package/dist/types/src/packlets/indexing/index.d.ts +2 -0
- package/dist/types/src/packlets/indexing/index.d.ts.map +1 -0
- package/dist/types/src/packlets/indexing/util.d.ts +15 -0
- package/dist/types/src/packlets/indexing/util.d.ts.map +1 -0
- package/dist/types/src/packlets/invitations/invitations-handler.d.ts +1 -0
- package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitations-service.d.ts +9 -1
- package/dist/types/src/packlets/invitations/invitations-service.d.ts.map +1 -1
- package/dist/types/src/packlets/logging/logging-service.d.ts +1 -0
- package/dist/types/src/packlets/logging/logging-service.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-context.d.ts +2 -1
- package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/automerge-space-state.d.ts +2 -0
- package/dist/types/src/packlets/spaces/automerge-space-state.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/spaces-service.d.ts +1 -1
- package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
- package/dist/types/src/version.d.ts +1 -1
- package/package.json +37 -35
- package/src/packlets/identity/identity-manager.ts +1 -1
- package/src/packlets/indexing/index.ts +5 -0
- package/src/packlets/indexing/util.ts +89 -0
- package/src/packlets/invitations/invitations-handler.ts +37 -2
- package/src/packlets/invitations/invitations-service.ts +83 -5
- package/src/packlets/logging/logging-service.ts +9 -2
- package/src/packlets/services/service-context.ts +13 -2
- package/src/packlets/services/service-host.ts +15 -2
- package/src/packlets/spaces/automerge-space-state.ts +15 -0
- package/src/packlets/spaces/data-space.ts +33 -11
- package/src/packlets/spaces/spaces-service.ts +2 -2
- package/src/version.ts +1 -1
- package/dist/lib/browser/chunk-NTKD4OQC.mjs.map +0 -7
- package/dist/lib/node/chunk-GCIW4VHF.cjs.map +0 -7
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Stream } from '@dxos/codec-protobuf';
|
|
2
|
+
import { type MetadataStore } from '@dxos/echo-pipeline';
|
|
2
3
|
import { type AuthenticationRequest, type AcceptInvitationRequest, Invitation, type InvitationsService, QueryInvitationsResponse } from '@dxos/protocols/proto/dxos/client/services';
|
|
3
4
|
import { type InvitationProtocol } from './invitation-protocol';
|
|
4
5
|
import { type InvitationsHandler } from './invitations-handler';
|
|
@@ -8,15 +9,22 @@ import { type InvitationsHandler } from './invitations-handler';
|
|
|
8
9
|
export declare class InvitationsServiceImpl implements InvitationsService {
|
|
9
10
|
private readonly _invitationsHandler;
|
|
10
11
|
private readonly _getHandler;
|
|
12
|
+
private readonly _metadataStore;
|
|
11
13
|
private readonly _createInvitations;
|
|
12
14
|
private readonly _acceptInvitations;
|
|
13
15
|
private readonly _invitationCreated;
|
|
14
16
|
private readonly _invitationAccepted;
|
|
15
17
|
private readonly _removedCreated;
|
|
16
18
|
private readonly _removedAccepted;
|
|
17
|
-
|
|
19
|
+
private readonly _saved;
|
|
20
|
+
private readonly _persistentInvitationsLoadedEvent;
|
|
21
|
+
private _persistentInvitationsLoaded;
|
|
22
|
+
constructor(_invitationsHandler: InvitationsHandler, _getHandler: (invitation: Invitation) => InvitationProtocol, _metadataStore: MetadataStore);
|
|
18
23
|
getLoggingContext(): {};
|
|
19
24
|
createInvitation(options: Invitation): Stream<Invitation>;
|
|
25
|
+
loadPersistentInvitations(): Promise<{
|
|
26
|
+
invitations: Invitation[];
|
|
27
|
+
}>;
|
|
20
28
|
acceptInvitation({ invitation: options, deviceProfile }: AcceptInvitationRequest): Stream<Invitation>;
|
|
21
29
|
authenticate({ invitationId, authCode }: AuthenticationRequest): Promise<void>;
|
|
22
30
|
cancelInvitation({ invitationId }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invitations-service.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/invitations/invitations-service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"invitations-service.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/invitations/invitations-service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,UAAU,EACV,KAAK,kBAAkB,EACvB,wBAAwB,EACzB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEnF;;GAEG;AACH,qBAAa,sBAAuB,YAAW,kBAAkB;IAY7D,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAbjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA4C;IAC/E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA+C;IAClF,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;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,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;IAIhD,iBAAiB;IAMjB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAoDnD,yBAAyB;;;IAoB/B,gBAAgB,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,uBAAuB,GAAG,MAAM,CAAC,UAAU,CAAC;IAqC/F,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;IAmBjF,gBAAgB,IAAI,MAAM,CAAC,wBAAwB,CAAC;CA+ErD"}
|
|
@@ -6,6 +6,7 @@ import { type LogEntry, type LoggingService, QueryLogsRequest, type ControlMetri
|
|
|
6
6
|
export declare class LoggingServiceImpl implements LoggingService {
|
|
7
7
|
private readonly _logs;
|
|
8
8
|
private readonly _started;
|
|
9
|
+
private readonly _sessionId;
|
|
9
10
|
open(): Promise<void>;
|
|
10
11
|
close(): Promise<void>;
|
|
11
12
|
controlMetrics({ reset, record }: ControlMetricsRequest): Promise<ControlMetricsResponse>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging-service.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/logging/logging-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"logging-service.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/logging/logging-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAS9C,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,cAAc,EAEnB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,MAAM,4CAA4C,CAAC;AAGpD;;GAEG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IAEnD,IAAI;IAIJ,KAAK;IAKL,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAc/F;;OAEG;IACH,YAAY,CAAC,EAAE,QAAgB,EAAE,EAAE,mBAAmB,GAAG,MAAM,CAAC,oBAAoB,CAAC;IA+BrF,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC;IAiDtD,OAAO,CAAC,aAAa,CAEnB;CACH"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Trigger } from '@dxos/async';
|
|
2
2
|
import { Context } from '@dxos/context';
|
|
3
3
|
import { MetadataStore, SpaceManager, DataServiceSubscriptions, SnapshotStore, AutomergeHost } from '@dxos/echo-pipeline';
|
|
4
|
-
import { IndexMetadataStore } from '@dxos/echo-schema';
|
|
5
4
|
import { FeedStore } from '@dxos/feed-store';
|
|
5
|
+
import { IndexMetadataStore, Indexer } from '@dxos/indexing';
|
|
6
6
|
import { Keyring } from '@dxos/keyring';
|
|
7
7
|
import { type SignalManager } from '@dxos/messaging';
|
|
8
8
|
import { type ModelFactory } from '@dxos/model-factory';
|
|
@@ -40,6 +40,7 @@ export declare class ServiceContext {
|
|
|
40
40
|
readonly invitations: InvitationsHandler;
|
|
41
41
|
readonly automergeHost: AutomergeHost;
|
|
42
42
|
readonly indexMetadata: IndexMetadataStore;
|
|
43
|
+
readonly indexer: Indexer;
|
|
43
44
|
dataSpaceManager?: DataSpaceManager;
|
|
44
45
|
private readonly _handlerFactories;
|
|
45
46
|
private _deviceSpaceSync?;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-context.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/services/service-context.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,OAAO,EAEL,aAAa,EACb,YAAY,EACZ,wBAAwB,EACxB,aAAa,EACb,aAAa,EACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,
|
|
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":"AAKA,OAAO,EAAuB,KAAK,cAAc,EAA0B,MAAM,uBAAuB,CAAC;AACzG,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"service-host.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/services/service-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,9 @@ export declare class AutomergeSpaceState implements CredentialProcessor {
|
|
|
4
4
|
private readonly _onNewRoot;
|
|
5
5
|
rootUrl: string | undefined;
|
|
6
6
|
lastEpoch: SpecificCredential<Epoch> | undefined;
|
|
7
|
+
private _isProcessingRootDocs;
|
|
7
8
|
constructor(_onNewRoot: (rootUrl: string) => void);
|
|
8
9
|
processCredential(credential: Credential): Promise<void>;
|
|
10
|
+
startProcessingRootDocs(): void;
|
|
9
11
|
}
|
|
10
12
|
//# sourceMappingURL=automerge-space-state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"automerge-space-state.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/spaces/automerge-space-state.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAuB,MAAM,mBAAmB,CAAC;AAC3G,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,KAAK,EAAE,MAAM,6CAA6C,CAAC;AAE1F,qBAAa,mBAAoB,YAAW,mBAAmB;
|
|
1
|
+
{"version":3,"file":"automerge-space-state.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/spaces/automerge-space-state.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAuB,MAAM,mBAAmB,CAAC;AAC3G,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,KAAK,EAAE,MAAM,6CAA6C,CAAC;AAE1F,qBAAa,mBAAoB,YAAW,mBAAmB;IAMjD,OAAO,CAAC,QAAQ,CAAC,UAAU;IALhC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAa;IACxC,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAa;IAEpE,OAAO,CAAC,qBAAqB,CAAS;gBAET,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI;IAE5D,iBAAiB,CAAC,UAAU,EAAE,UAAU;IAe9C,uBAAuB;CAUxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-space.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/spaces/data-space.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"data-space.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/spaces/data-space.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ export declare class SpacesServiceImpl implements SpacesService {
|
|
|
19
19
|
subscribeMessages({ spaceKey, channel }: SubscribeMessagesRequest): Stream<GossipMessage>;
|
|
20
20
|
queryCredentials({ spaceKey, noTail }: QueryCredentialsRequest): Stream<Credential>;
|
|
21
21
|
writeCredentials({ spaceKey, credentials }: WriteCredentialsRequest): Promise<void>;
|
|
22
|
-
createEpoch({ spaceKey }: CreateEpochRequest): Promise<void>;
|
|
22
|
+
createEpoch({ spaceKey, migration }: CreateEpochRequest): Promise<void>;
|
|
23
23
|
private _serializeSpace;
|
|
24
24
|
}
|
|
25
25
|
//# sourceMappingURL=spaces-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spaces-service.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/spaces/spaces-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIvF,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,KAAK,EAGV,KAAK,aAAa,EAClB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC7B,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iDAAiD,CAAC;AACrF,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,qBAAa,iBAAkB,YAAW,aAAa;IAEnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAC1C,OAAO,CAAC,QAAQ,CAAC,oBAAoB;gBAHpB,gBAAgB,EAAE,eAAe,EACjC,aAAa,EAAE,YAAY,EAC3B,yBAAyB,EAAE,wBAAwB,EACnD,oBAAoB,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAGtE,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;IAU7B,WAAW,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,kBAAkB;IAmBzD,WAAW,IAAI,MAAM,CAAC,mBAAmB,CAAC;IAqDpC,WAAW,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,kBAAkB;IAMpE,iBAAiB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,wBAAwB;IAajE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,uBAAuB,GAAG,MAAM,CAAC,UAAU,CAAC;IAmB7E,gBAAgB,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,uBAAuB;IAmBnE,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE,kBAAkB;
|
|
1
|
+
{"version":3,"file":"spaces-service.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/spaces/spaces-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIvF,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,KAAK,EAGV,KAAK,aAAa,EAClB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC7B,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iDAAiD,CAAC;AACrF,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,qBAAa,iBAAkB,YAAW,aAAa;IAEnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAC1C,OAAO,CAAC,QAAQ,CAAC,oBAAoB;gBAHpB,gBAAgB,EAAE,eAAe,EACjC,aAAa,EAAE,YAAY,EAC3B,yBAAyB,EAAE,wBAAwB,EACnD,oBAAoB,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAGtE,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;IAU7B,WAAW,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,kBAAkB;IAmBzD,WAAW,IAAI,MAAM,CAAC,mBAAmB,CAAC;IAqDpC,WAAW,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,kBAAkB;IAMpE,iBAAiB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,wBAAwB;IAajE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,uBAAuB,GAAG,MAAM,CAAC,UAAU,CAAC;IAmB7E,gBAAgB,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,uBAAuB;IAmBnE,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,kBAAkB;IAM7D,OAAO,CAAC,eAAe;CA8CxB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const DXOS_VERSION = "0.4.
|
|
1
|
+
export declare const DXOS_VERSION = "0.4.8-main.00e6f19";
|
|
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.
|
|
3
|
+
"version": "0.4.8-main.00e6f19",
|
|
4
4
|
"description": "DXOS client services implementation",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -22,44 +22,46 @@
|
|
|
22
22
|
],
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"platform": "^1.3.6",
|
|
25
|
-
"@dxos/
|
|
26
|
-
"@dxos/
|
|
27
|
-
"@dxos/
|
|
28
|
-
"@dxos/config": "0.4.
|
|
29
|
-
"@dxos/
|
|
30
|
-
"@dxos/
|
|
31
|
-
"@dxos/
|
|
32
|
-
"@dxos/
|
|
33
|
-
"@dxos/
|
|
34
|
-
"@dxos/document-model": "0.4.
|
|
35
|
-
"@dxos/echo-
|
|
36
|
-
"@dxos/echo-schema": "0.4.
|
|
37
|
-
"@dxos/
|
|
38
|
-
"@dxos/
|
|
39
|
-
"@dxos/
|
|
40
|
-
"@dxos/
|
|
41
|
-
"@dxos/
|
|
42
|
-
"@dxos/
|
|
43
|
-
"@dxos/
|
|
44
|
-
"@dxos/
|
|
45
|
-
"@dxos/
|
|
46
|
-
"@dxos/
|
|
47
|
-
"@dxos/
|
|
48
|
-
"@dxos/
|
|
49
|
-
"@dxos/
|
|
50
|
-
"@dxos/
|
|
51
|
-
"@dxos/
|
|
52
|
-
"@dxos/teleport-extension-
|
|
53
|
-
"@dxos/
|
|
54
|
-
"@dxos/
|
|
55
|
-
"@dxos/
|
|
56
|
-
"@dxos/
|
|
57
|
-
"@dxos/
|
|
25
|
+
"@dxos/client-protocol": "0.4.8-main.00e6f19",
|
|
26
|
+
"@dxos/async": "0.4.8-main.00e6f19",
|
|
27
|
+
"@dxos/automerge": "0.4.8-main.00e6f19",
|
|
28
|
+
"@dxos/config": "0.4.8-main.00e6f19",
|
|
29
|
+
"@dxos/codec-protobuf": "0.4.8-main.00e6f19",
|
|
30
|
+
"@dxos/context": "0.4.8-main.00e6f19",
|
|
31
|
+
"@dxos/credentials": "0.4.8-main.00e6f19",
|
|
32
|
+
"@dxos/crypto": "0.4.8-main.00e6f19",
|
|
33
|
+
"@dxos/debug": "0.4.8-main.00e6f19",
|
|
34
|
+
"@dxos/document-model": "0.4.8-main.00e6f19",
|
|
35
|
+
"@dxos/echo-pipeline": "0.4.8-main.00e6f19",
|
|
36
|
+
"@dxos/echo-schema": "0.4.8-main.00e6f19",
|
|
37
|
+
"@dxos/echo-db": "0.4.8-main.00e6f19",
|
|
38
|
+
"@dxos/feed-store": "0.4.8-main.00e6f19",
|
|
39
|
+
"@dxos/indexing": "0.4.8-main.00e6f19",
|
|
40
|
+
"@dxos/invariant": "0.4.8-main.00e6f19",
|
|
41
|
+
"@dxos/keyring": "0.4.8-main.00e6f19",
|
|
42
|
+
"@dxos/keys": "0.4.8-main.00e6f19",
|
|
43
|
+
"@dxos/lock-file": "0.4.8-main.00e6f19",
|
|
44
|
+
"@dxos/log": "0.4.8-main.00e6f19",
|
|
45
|
+
"@dxos/messaging": "0.4.8-main.00e6f19",
|
|
46
|
+
"@dxos/network-manager": "0.4.8-main.00e6f19",
|
|
47
|
+
"@dxos/model-factory": "0.4.8-main.00e6f19",
|
|
48
|
+
"@dxos/protocols": "0.4.8-main.00e6f19",
|
|
49
|
+
"@dxos/node-std": "0.4.8-main.00e6f19",
|
|
50
|
+
"@dxos/rpc": "0.4.8-main.00e6f19",
|
|
51
|
+
"@dxos/random-access-storage": "0.4.8-main.00e6f19",
|
|
52
|
+
"@dxos/teleport-extension-gossip": "0.4.8-main.00e6f19",
|
|
53
|
+
"@dxos/teleport": "0.4.8-main.00e6f19",
|
|
54
|
+
"@dxos/teleport-extension-object-sync": "0.4.8-main.00e6f19",
|
|
55
|
+
"@dxos/text-model": "0.4.8-main.00e6f19",
|
|
56
|
+
"@dxos/timeframe": "0.4.8-main.00e6f19",
|
|
57
|
+
"@dxos/tracing": "0.4.8-main.00e6f19",
|
|
58
|
+
"@dxos/websocket-rpc": "0.4.8-main.00e6f19",
|
|
59
|
+
"@dxos/util": "0.4.8-main.00e6f19"
|
|
58
60
|
},
|
|
59
61
|
"devDependencies": {
|
|
60
62
|
"@types/platform": "^1.3.4",
|
|
61
63
|
"@types/readable-stream": "^2.3.9",
|
|
62
|
-
"@dxos/signal": "0.4.
|
|
64
|
+
"@dxos/signal": "0.4.8-main.00e6f19"
|
|
63
65
|
},
|
|
64
66
|
"publishConfig": {
|
|
65
67
|
"access": "public"
|
|
@@ -348,7 +348,7 @@ export class IdentityManager {
|
|
|
348
348
|
identityKey: identityRecord.identityKey,
|
|
349
349
|
});
|
|
350
350
|
await space.setControlFeed(controlFeed);
|
|
351
|
-
|
|
351
|
+
await space.setDataFeed(dataFeed);
|
|
352
352
|
|
|
353
353
|
const identity: Identity = new Identity({
|
|
354
354
|
space,
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { getHeads } from '@dxos/automerge/automerge';
|
|
6
|
+
import { type DocHandle } from '@dxos/automerge/automerge-repo';
|
|
7
|
+
import { warnAfterTimeout } from '@dxos/debug';
|
|
8
|
+
import { type AutomergeHost } from '@dxos/echo-pipeline';
|
|
9
|
+
import { type ObjectSnapshot } from '@dxos/indexing';
|
|
10
|
+
import { idCodec } from '@dxos/protocols';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Factory for `loadDocuments` iterator.
|
|
14
|
+
*/
|
|
15
|
+
export const createLoadDocuments = (automergeHost: AutomergeHost) =>
|
|
16
|
+
/**
|
|
17
|
+
* Get object data blobs from Automerge Repo by ids.
|
|
18
|
+
* @param ids
|
|
19
|
+
*/
|
|
20
|
+
// TODO(mykola): Unload automerge handles after usage.
|
|
21
|
+
async function* loadDocuments(ids: string[]) {
|
|
22
|
+
for (const id of ids) {
|
|
23
|
+
const { documentId, objectId } = idCodec.decode(id);
|
|
24
|
+
const handle = automergeHost.repo.find(documentId as any);
|
|
25
|
+
await warnAfterTimeout(5000, 'to long to load doc', () => handle.whenReady());
|
|
26
|
+
const doc = handle.docSync();
|
|
27
|
+
const heads = getHeads(doc);
|
|
28
|
+
yield [{ id, object: doc.objects[objectId], currentHash: heads.at(-1)! }];
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Factory for `getAllDocuments` iterator.
|
|
34
|
+
*/
|
|
35
|
+
export const createGetAllDocuments = (automergeHost: AutomergeHost) =>
|
|
36
|
+
/**
|
|
37
|
+
* Recursively get all object data blobs from Automerge Repo.
|
|
38
|
+
* @param ids
|
|
39
|
+
*/
|
|
40
|
+
// TODO(mykola): Unload automerge handles after usage.
|
|
41
|
+
async function* getAllDocuments(): AsyncGenerator<ObjectSnapshot[], void, 'done'> {
|
|
42
|
+
/** visited automerge handles */
|
|
43
|
+
const visited = new Set<string>();
|
|
44
|
+
|
|
45
|
+
async function* getObjectsFromHandle(handle: DocHandle<any>): AsyncGenerator<ObjectSnapshot[]> {
|
|
46
|
+
if (visited.has(handle.documentId)) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
await warnAfterTimeout(5000, 'to long to load doc', () => handle.whenReady());
|
|
51
|
+
const doc = handle.docSync();
|
|
52
|
+
|
|
53
|
+
const heads = getHeads(doc);
|
|
54
|
+
|
|
55
|
+
if (doc.objects) {
|
|
56
|
+
yield Object.entries(doc.objects as { [key: string]: any }).map(([objectId, object]) => {
|
|
57
|
+
return {
|
|
58
|
+
id: idCodec.encode({ documentId: handle.documentId, objectId }),
|
|
59
|
+
object,
|
|
60
|
+
currentHash: heads.at(-1)!,
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (doc.links) {
|
|
66
|
+
for (const id of Object.values(doc.links as { [echoId: string]: string })) {
|
|
67
|
+
if (visited.has(id)) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const linkHandle = automergeHost.repo.find(id as any);
|
|
71
|
+
for await (const result of getObjectsFromHandle(linkHandle)) {
|
|
72
|
+
yield result;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
visited.add(handle.documentId);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
for (const handle of Object.values(automergeHost.repo.handles)) {
|
|
81
|
+
if (visited.has(handle.documentId)) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
for await (const result of getObjectsFromHandle(handle)) {
|
|
85
|
+
yield result;
|
|
86
|
+
}
|
|
87
|
+
visited.add(handle.documentId);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
@@ -74,6 +74,9 @@ export class InvitationsHandler {
|
|
|
74
74
|
state = Invitation.State.INIT,
|
|
75
75
|
timeout = INVITATION_TIMEOUT,
|
|
76
76
|
swarmKey = PublicKey.random(),
|
|
77
|
+
persistent = true,
|
|
78
|
+
created = new Date(),
|
|
79
|
+
lifetime = 86400, // 1 day
|
|
77
80
|
} = options ?? {};
|
|
78
81
|
const authCode =
|
|
79
82
|
options?.authCode ??
|
|
@@ -88,14 +91,17 @@ export class InvitationsHandler {
|
|
|
88
91
|
swarmKey,
|
|
89
92
|
authCode,
|
|
90
93
|
timeout,
|
|
94
|
+
persistent,
|
|
95
|
+
created,
|
|
96
|
+
lifetime,
|
|
91
97
|
...protocol.getInvitationContext(),
|
|
92
98
|
};
|
|
93
99
|
|
|
94
100
|
const stream = new PushStream<Invitation>();
|
|
95
101
|
const ctx = new Context({
|
|
96
102
|
onError: (err) => {
|
|
97
|
-
void ctx.dispose();
|
|
98
103
|
stream.error(err);
|
|
104
|
+
void ctx.dispose();
|
|
99
105
|
},
|
|
100
106
|
});
|
|
101
107
|
|
|
@@ -181,7 +187,27 @@ export class InvitationsHandler {
|
|
|
181
187
|
return extension;
|
|
182
188
|
};
|
|
183
189
|
|
|
190
|
+
if (invitation.lifetime && invitation.created && invitation.lifetime !== 0) {
|
|
191
|
+
if (invitation.created.getTime() + invitation.lifetime * 1000 < Date.now()) {
|
|
192
|
+
log.warn('invitation has already expired');
|
|
193
|
+
} else {
|
|
194
|
+
scheduleTask(
|
|
195
|
+
ctx,
|
|
196
|
+
async () => {
|
|
197
|
+
// ensure the swarm is closed before changing state and closing the stream.
|
|
198
|
+
await swarmConnection.close();
|
|
199
|
+
stream.next({ ...invitation, state: Invitation.State.EXPIRED });
|
|
200
|
+
await ctx.dispose();
|
|
201
|
+
},
|
|
202
|
+
invitation.created.getTime() + invitation.lifetime * 1000 - Date.now(),
|
|
203
|
+
);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
184
207
|
let swarmConnection: SwarmConnection;
|
|
208
|
+
const invitationLabel =
|
|
209
|
+
'invitation host for ' +
|
|
210
|
+
(invitation.kind === Invitation.Kind.DEVICE ? 'device' : `space ${invitation.spaceKey?.truncate()}`);
|
|
185
211
|
scheduleTask(ctx, async () => {
|
|
186
212
|
const topic = invitation.swarmKey!;
|
|
187
213
|
swarmConnection = await this._networkManager.joinSwarm({
|
|
@@ -191,7 +217,7 @@ export class InvitationsHandler {
|
|
|
191
217
|
teleport.addExtension('dxos.halo.invitations', createExtension());
|
|
192
218
|
}),
|
|
193
219
|
topology: new StarTopology(topic),
|
|
194
|
-
label:
|
|
220
|
+
label: invitationLabel,
|
|
195
221
|
});
|
|
196
222
|
ctx.onDispose(() => swarmConnection.close());
|
|
197
223
|
|
|
@@ -398,3 +424,12 @@ export class InvitationsHandler {
|
|
|
398
424
|
return observable;
|
|
399
425
|
}
|
|
400
426
|
}
|
|
427
|
+
|
|
428
|
+
export const invitationExpired = (invitation: Invitation) => {
|
|
429
|
+
return (
|
|
430
|
+
invitation.created &&
|
|
431
|
+
invitation.lifetime &&
|
|
432
|
+
invitation.lifetime !== 0 &&
|
|
433
|
+
invitation.created.getTime() + invitation.lifetime * 1000 < Date.now()
|
|
434
|
+
);
|
|
435
|
+
};
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { Event } from '@dxos/async';
|
|
5
|
+
import { Event, scheduleTask } from '@dxos/async';
|
|
6
6
|
import { type AuthenticatingInvitation, type CancellableInvitation } from '@dxos/client-protocol';
|
|
7
7
|
import { Stream } from '@dxos/codec-protobuf';
|
|
8
|
+
import { Context } from '@dxos/context';
|
|
9
|
+
import { type MetadataStore } from '@dxos/echo-pipeline';
|
|
8
10
|
import { invariant } from '@dxos/invariant';
|
|
9
11
|
import { log } from '@dxos/log';
|
|
10
12
|
import {
|
|
@@ -16,7 +18,7 @@ import {
|
|
|
16
18
|
} from '@dxos/protocols/proto/dxos/client/services';
|
|
17
19
|
|
|
18
20
|
import { type InvitationProtocol } from './invitation-protocol';
|
|
19
|
-
import { type InvitationsHandler } from './invitations-handler';
|
|
21
|
+
import { invitationExpired, type InvitationsHandler } from './invitations-handler';
|
|
20
22
|
|
|
21
23
|
/**
|
|
22
24
|
* Adapts invitation service observable to client/service stream.
|
|
@@ -28,10 +30,14 @@ export class InvitationsServiceImpl implements InvitationsService {
|
|
|
28
30
|
private readonly _invitationAccepted = new Event<Invitation>();
|
|
29
31
|
private readonly _removedCreated = new Event<Invitation>();
|
|
30
32
|
private readonly _removedAccepted = new Event<Invitation>();
|
|
33
|
+
private readonly _saved = new Event<Invitation>();
|
|
34
|
+
private readonly _persistentInvitationsLoadedEvent = new Event();
|
|
35
|
+
private _persistentInvitationsLoaded = false;
|
|
31
36
|
|
|
32
37
|
constructor(
|
|
33
38
|
private readonly _invitationsHandler: InvitationsHandler,
|
|
34
39
|
private readonly _getHandler: (invitation: Invitation) => InvitationProtocol,
|
|
40
|
+
private readonly _metadataStore: MetadataStore,
|
|
35
41
|
) {}
|
|
36
42
|
|
|
37
43
|
// TODO(burdon): Guest/host label.
|
|
@@ -44,6 +50,7 @@ export class InvitationsServiceImpl implements InvitationsService {
|
|
|
44
50
|
createInvitation(options: Invitation): Stream<Invitation> {
|
|
45
51
|
let invitation: CancellableInvitation;
|
|
46
52
|
|
|
53
|
+
const savePersistentInvitationCtx = new Context();
|
|
47
54
|
const existingInvitation = this._createInvitations.get(options.invitationId);
|
|
48
55
|
if (existingInvitation) {
|
|
49
56
|
invitation = existingInvitation;
|
|
@@ -55,15 +62,34 @@ export class InvitationsServiceImpl implements InvitationsService {
|
|
|
55
62
|
}
|
|
56
63
|
|
|
57
64
|
return new Stream<Invitation>(({ next, close }) => {
|
|
65
|
+
if (invitation.get().persistent) {
|
|
66
|
+
scheduleTask(savePersistentInvitationCtx, async () => {
|
|
67
|
+
try {
|
|
68
|
+
await this._metadataStore.addInvitation(invitation.get());
|
|
69
|
+
this._saved.emit(invitation.get());
|
|
70
|
+
} catch (err: any) {
|
|
71
|
+
close(err);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
58
75
|
invitation.subscribe(
|
|
59
76
|
(invitation) => {
|
|
60
77
|
next(invitation);
|
|
61
78
|
},
|
|
62
|
-
(err: Error) => {
|
|
79
|
+
async (err: Error) => {
|
|
80
|
+
await savePersistentInvitationCtx.dispose();
|
|
81
|
+
|
|
82
|
+
// TODO(nf): also remove from storage?
|
|
63
83
|
close(err);
|
|
64
84
|
},
|
|
65
|
-
() => {
|
|
85
|
+
async () => {
|
|
66
86
|
close();
|
|
87
|
+
if (invitation.get().persistent) {
|
|
88
|
+
await savePersistentInvitationCtx.dispose();
|
|
89
|
+
// TODO(nf): remove on all complete conditions?
|
|
90
|
+
await this._metadataStore.removeInvitation(invitation.get().invitationId);
|
|
91
|
+
}
|
|
92
|
+
|
|
67
93
|
this._createInvitations.delete(invitation.get().invitationId);
|
|
68
94
|
if (invitation.get().type !== Invitation.Type.MULTIUSE) {
|
|
69
95
|
this._removedCreated.emit(invitation.get());
|
|
@@ -73,6 +99,26 @@ export class InvitationsServiceImpl implements InvitationsService {
|
|
|
73
99
|
});
|
|
74
100
|
}
|
|
75
101
|
|
|
102
|
+
async loadPersistentInvitations() {
|
|
103
|
+
const persistentInvitations = this._metadataStore.getInvitations();
|
|
104
|
+
|
|
105
|
+
// get saved persistent invitations, filter and remove from storage those that have expired.
|
|
106
|
+
const freshInvitations = persistentInvitations.filter(async (invitation) => !invitationExpired(invitation));
|
|
107
|
+
|
|
108
|
+
const cInvitations = freshInvitations.map((persistentInvitation) => {
|
|
109
|
+
invariant(!this._createInvitations.get(persistentInvitation.invitationId), 'invitation already exists');
|
|
110
|
+
|
|
111
|
+
const handler = this._getHandler(persistentInvitation);
|
|
112
|
+
const invitation = this._invitationsHandler.createInvitation(handler, persistentInvitation);
|
|
113
|
+
this._createInvitations.set(invitation.get().invitationId, invitation);
|
|
114
|
+
this._invitationCreated.emit(invitation.get());
|
|
115
|
+
return persistentInvitation;
|
|
116
|
+
});
|
|
117
|
+
this._persistentInvitationsLoadedEvent.emit();
|
|
118
|
+
this._persistentInvitationsLoaded = true;
|
|
119
|
+
return { invitations: cInvitations };
|
|
120
|
+
}
|
|
121
|
+
|
|
76
122
|
acceptInvitation({ invitation: options, deviceProfile }: AcceptInvitationRequest): Stream<Invitation> {
|
|
77
123
|
let invitation: AuthenticatingInvitation;
|
|
78
124
|
|
|
@@ -122,7 +168,7 @@ export class InvitationsServiceImpl implements InvitationsService {
|
|
|
122
168
|
}
|
|
123
169
|
|
|
124
170
|
async cancelInvitation({ invitationId }: { invitationId: string }): Promise<void> {
|
|
125
|
-
log('
|
|
171
|
+
log('cancelInvitation...', { invitationId });
|
|
126
172
|
invariant(invitationId);
|
|
127
173
|
const created = this._createInvitations.get(invitationId);
|
|
128
174
|
const accepted = this._acceptInvitations.get(invitationId);
|
|
@@ -130,6 +176,9 @@ export class InvitationsServiceImpl implements InvitationsService {
|
|
|
130
176
|
await created.cancel();
|
|
131
177
|
this._createInvitations.delete(invitationId);
|
|
132
178
|
this._removedCreated.emit(created.get());
|
|
179
|
+
if (created.get().persistent) {
|
|
180
|
+
await this._metadataStore.removeInvitation(created.get().invitationId);
|
|
181
|
+
}
|
|
133
182
|
} else if (accepted) {
|
|
134
183
|
await accepted.cancel();
|
|
135
184
|
this._acceptInvitations.delete(invitationId);
|
|
@@ -173,18 +222,47 @@ export class InvitationsServiceImpl implements InvitationsService {
|
|
|
173
222
|
});
|
|
174
223
|
});
|
|
175
224
|
|
|
225
|
+
// used only for testing
|
|
226
|
+
this._saved.on(ctx, (invitation) => {
|
|
227
|
+
next({
|
|
228
|
+
action: QueryInvitationsResponse.Action.SAVED,
|
|
229
|
+
type: QueryInvitationsResponse.Type.CREATED,
|
|
230
|
+
invitations: [invitation],
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
|
|
176
234
|
// Push existing invitations to the stream.
|
|
177
235
|
next({
|
|
178
236
|
action: QueryInvitationsResponse.Action.ADDED,
|
|
179
237
|
type: QueryInvitationsResponse.Type.CREATED,
|
|
180
238
|
invitations: Array.from(this._createInvitations.values()).map((invitation) => invitation.get()),
|
|
239
|
+
existing: true,
|
|
181
240
|
});
|
|
182
241
|
|
|
183
242
|
next({
|
|
184
243
|
action: QueryInvitationsResponse.Action.ADDED,
|
|
185
244
|
type: QueryInvitationsResponse.Type.ACCEPTED,
|
|
186
245
|
invitations: Array.from(this._acceptInvitations.values()).map((invitation) => invitation.get()),
|
|
246
|
+
existing: true,
|
|
187
247
|
});
|
|
248
|
+
|
|
249
|
+
if (this._persistentInvitationsLoaded) {
|
|
250
|
+
next({
|
|
251
|
+
action: QueryInvitationsResponse.Action.LOAD_COMPLETE,
|
|
252
|
+
type: QueryInvitationsResponse.Type.CREATED,
|
|
253
|
+
// TODO(nf): populate with invitations
|
|
254
|
+
});
|
|
255
|
+
} else {
|
|
256
|
+
this._persistentInvitationsLoadedEvent.on(ctx, () => {
|
|
257
|
+
next({
|
|
258
|
+
action: QueryInvitationsResponse.Action.LOAD_COMPLETE,
|
|
259
|
+
type: QueryInvitationsResponse.Type.CREATED,
|
|
260
|
+
// TODO(nf): populate with invitations
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// TODO(nf): expired invitations?
|
|
188
266
|
});
|
|
189
267
|
}
|
|
190
268
|
}
|