@dxos/client-services 0.1.29-next.ed4ce05 → 0.1.29
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-ILMYW75X.mjs → chunk-ZIQUYEJS.mjs} +183 -94
- package/dist/lib/browser/{chunk-ILMYW75X.mjs.map → chunk-ZIQUYEJS.mjs.map} +4 -4
- package/dist/lib/browser/index.mjs +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/packlets/testing/index.mjs +1 -1
- package/dist/lib/node/index.cjs +191 -104
- 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 +196 -100
- package/dist/lib/node/packlets/testing/index.cjs.map +4 -4
- package/dist/types/src/packlets/services/client-rpc-server.d.ts +22 -0
- package/dist/types/src/packlets/services/client-rpc-server.d.ts.map +1 -0
- package/dist/types/src/packlets/services/local-client-services.d.ts +2 -1
- package/dist/types/src/packlets/services/local-client-services.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-host.d.ts +21 -6
- package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-registry.d.ts +3 -1
- package/dist/types/src/packlets/services/service-registry.d.ts.map +1 -1
- package/dist/types/src/packlets/system/system-service.d.ts +2 -2
- package/dist/types/src/packlets/system/system-service.d.ts.map +1 -1
- package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts +0 -1
- package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts.map +1 -1
- package/dist/types/src/packlets/vault/worker-runtime.d.ts.map +1 -1
- package/dist/types/src/packlets/vault/worker-session.d.ts +4 -4
- package/dist/types/src/packlets/vault/worker-session.d.ts.map +1 -1
- package/package.json +30 -30
- package/src/packlets/services/client-rpc-server.ts +91 -0
- package/src/packlets/services/local-client-services.ts +4 -0
- package/src/packlets/services/service-host.ts +51 -10
- package/src/packlets/services/service-registry.ts +9 -1
- package/src/packlets/system/system-service.ts +3 -3
- package/src/packlets/tests/shared-worker.test.ts +39 -42
- package/src/packlets/vault/iframe-host-runtime.ts +25 -34
- package/src/packlets/vault/worker-runtime.ts +5 -15
- package/src/packlets/vault/worker-session.ts +40 -28
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ClientServices } from '@dxos/client';
|
|
2
|
+
import { Any, Stream } from '@dxos/codec-protobuf';
|
|
3
|
+
import { RpcPeerOptions } from '@dxos/rpc';
|
|
4
|
+
import { MaybePromise } from '@dxos/util';
|
|
5
|
+
import { ServiceRegistry } from './service-registry';
|
|
6
|
+
export declare type ClientRpcServerParams = {
|
|
7
|
+
serviceRegistry: ServiceRegistry<ClientServices>;
|
|
8
|
+
handleCall?: (method: string, params: Any, handler: (method: string, params: Any) => MaybePromise<Any>) => Promise<Any>;
|
|
9
|
+
handleStream?: (method: string, params: Any, handler: (method: string, params: Any) => Stream<Any>) => MaybePromise<Stream<Any>>;
|
|
10
|
+
} & Omit<RpcPeerOptions, 'callHandler' | 'streamHandler'>;
|
|
11
|
+
export declare class ClientRpcServer {
|
|
12
|
+
private readonly _serviceRegistry;
|
|
13
|
+
private readonly _rpcPeer;
|
|
14
|
+
private readonly _handlerCache;
|
|
15
|
+
private readonly _handleCall;
|
|
16
|
+
private readonly _handleStream;
|
|
17
|
+
constructor(params: ClientRpcServerParams);
|
|
18
|
+
open(): Promise<void>;
|
|
19
|
+
close(): Promise<void>;
|
|
20
|
+
private _getServiceHandler;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=client-rpc-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-rpc-server.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/services/client-rpc-server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAkB,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EAA4B,cAAc,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,oBAAY,qBAAqB,GAAG;IAClC,eAAe,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,GAAG,EACX,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,YAAY,CAAC,GAAG,CAAC,KACxD,OAAO,CAAC,GAAG,CAAC,CAAC;IAClB,YAAY,CAAC,EAAE,CACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,GAAG,EACX,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,KAClD,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;CAChC,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,GAAG,eAAe,CAAC,CAAC;AAE1D,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkC;IACnE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA0C;IACxE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwC;gBAE1D,MAAM,EAAE,qBAAqB;IAgCnC,IAAI;IAIJ,KAAK;IAIX,OAAO,CAAC,kBAAkB;CAiB3B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ClientServices, ClientServicesProvider } from '@dxos/client';
|
|
2
2
|
import { ServiceBundle } from '@dxos/rpc';
|
|
3
|
-
import { ClientServicesHostParams } from './service-host';
|
|
3
|
+
import { ClientServicesHost, ClientServicesHostParams } from './service-host';
|
|
4
4
|
/**
|
|
5
5
|
* Starts a local instance of the service host.
|
|
6
6
|
*/
|
|
@@ -9,6 +9,7 @@ export declare class LocalClientServices implements ClientServicesProvider {
|
|
|
9
9
|
constructor(params: ClientServicesHostParams);
|
|
10
10
|
get descriptors(): ServiceBundle<ClientServices>;
|
|
11
11
|
get services(): Partial<ClientServices>;
|
|
12
|
+
get host(): ClientServicesHost;
|
|
12
13
|
open(): Promise<void>;
|
|
13
14
|
close(): Promise<void>;
|
|
14
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-client-services.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/services/local-client-services.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,
|
|
1
|
+
{"version":3,"file":"local-client-services.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/services/local-client-services.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE9E;;GAEG;AACH,qBAAa,mBAAoB,YAAW,sBAAsB;IAChE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;gBAE/B,MAAM,EAAE,wBAAwB;IAI5C,IAAI,WAAW,IAAI,aAAa,CAAC,cAAc,CAAC,CAE/C;IAED,IAAI,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC,CAEtC;IAED,IAAI,IAAI,IAAI,kBAAkB,CAE7B;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -3,13 +3,21 @@ import { Config } from '@dxos/config';
|
|
|
3
3
|
import { ModelFactory } from '@dxos/model-factory';
|
|
4
4
|
import { NetworkManager } from '@dxos/network-manager';
|
|
5
5
|
import { Storage } from '@dxos/random-access-storage';
|
|
6
|
+
import { ServiceRegistry } from './service-registry';
|
|
6
7
|
export declare type ClientServicesHostParams = {
|
|
7
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Can be omitted if `initialize` is later called.
|
|
10
|
+
*/
|
|
11
|
+
config?: Config;
|
|
8
12
|
modelFactory?: ModelFactory;
|
|
9
|
-
networkManager
|
|
13
|
+
networkManager?: NetworkManager;
|
|
10
14
|
storage?: Storage;
|
|
11
15
|
lockKey?: string;
|
|
12
16
|
};
|
|
17
|
+
export declare type InitializeOptions = {
|
|
18
|
+
config?: Config;
|
|
19
|
+
networkManager?: NetworkManager;
|
|
20
|
+
};
|
|
13
21
|
/**
|
|
14
22
|
* Remote service implementation.
|
|
15
23
|
*/
|
|
@@ -17,16 +25,23 @@ export declare class ClientServicesHost {
|
|
|
17
25
|
private readonly _resourceLock?;
|
|
18
26
|
private readonly _serviceRegistry;
|
|
19
27
|
private readonly _systemService;
|
|
20
|
-
private
|
|
28
|
+
private _config?;
|
|
21
29
|
private readonly _statusUpdate;
|
|
22
30
|
private readonly _modelFactory;
|
|
23
|
-
private
|
|
24
|
-
private
|
|
31
|
+
private _networkManager?;
|
|
32
|
+
private _storage?;
|
|
25
33
|
private _open;
|
|
26
|
-
constructor({ config, modelFactory, networkManager, storage, lockKey }
|
|
34
|
+
constructor({ config, modelFactory, networkManager, storage, lockKey }?: ClientServicesHostParams);
|
|
27
35
|
get isOpen(): boolean;
|
|
36
|
+
get serviceRegistry(): ServiceRegistry<ClientServices>;
|
|
28
37
|
get descriptors(): import("@dxos/rpc").ServiceBundle<ClientServices>;
|
|
29
38
|
get services(): Partial<ClientServices>;
|
|
39
|
+
/**
|
|
40
|
+
* Initialize the service host with the config.
|
|
41
|
+
* Config can also be provided in the constructor.
|
|
42
|
+
* Can only be called once.
|
|
43
|
+
*/
|
|
44
|
+
initialize({ config, networkManager }: InitializeOptions): void;
|
|
30
45
|
open(): Promise<void>;
|
|
31
46
|
close(): Promise<void>;
|
|
32
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-host.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/services/service-host.ts"],"names":[],"mappings":"AAOA,OAAO,EAAuB,cAAc,EAA6B,MAAM,cAAc,CAAC;AAC9F,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAItC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"service-host.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/services/service-host.ts"],"names":[],"mappings":"AAOA,OAAO,EAAuB,cAAc,EAA6B,MAAM,cAAc,CAAC;AAC9F,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAItC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAatD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,oBAAY,wBAAwB,GAAG;IACrC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,oBAAY,iBAAiB,GAAG;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAoB;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkC;IACnE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoB;IAEnD,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,CAAU;IAM3B,OAAO,CAAC,KAAK,CAAS;gBAEV,EACV,MAAM,EACN,YAA0C,EAE1C,cAAc,EACd,OAAO,EAEP,OAAO,EACR,GAAE,wBAA6B;IA2ChC,IAAI,MAAM,YAET;IAED,IAAI,eAAe,oCAElB;IAED,IAAI,WAAW,sDAEd;IAED,IAAI,QAAQ,4BAEX;IAED;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,iBAAiB;IAkBlD,IAAI;IAiEJ,KAAK;CAaZ"}
|
|
@@ -5,9 +5,11 @@ import { ServiceBundle } from '@dxos/rpc';
|
|
|
5
5
|
export declare class ServiceRegistry<Services> {
|
|
6
6
|
private readonly _serviceBundle;
|
|
7
7
|
private _handlers;
|
|
8
|
-
constructor(_serviceBundle: ServiceBundle<Services>, _handlers
|
|
8
|
+
constructor(_serviceBundle: ServiceBundle<Services>, _handlers?: Partial<Services>);
|
|
9
9
|
get descriptors(): ServiceBundle<Services>;
|
|
10
10
|
get services(): Partial<Services>;
|
|
11
11
|
setServices(services: Partial<Services>): void;
|
|
12
|
+
addService(name: keyof Services, service: Services[keyof Services]): void;
|
|
13
|
+
removeService(name: keyof Services): void;
|
|
12
14
|
}
|
|
13
15
|
//# sourceMappingURL=service-registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-registry.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/services/service-registry.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C;;GAEG;AACH,qBAAa,eAAe,CAAC,QAAQ;IAGjC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,SAAS;gBADA,cAAc,EAAE,aAAa,CAAC,QAAQ,CAAC,EAChD,SAAS,
|
|
1
|
+
{"version":3,"file":"service-registry.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/services/service-registry.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C;;GAEG;AACH,qBAAa,eAAe,CAAC,QAAQ;IAGjC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,SAAS;gBADA,cAAc,EAAE,aAAa,CAAC,QAAQ,CAAC,EAChD,SAAS,GAAE,OAAO,CAAC,QAAQ,CAAM;IAG3C,IAAI,WAAW,4BAEd;IAED,IAAI,QAAQ,sBAEX;IAED,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC;IAIvC,UAAU,CAAC,IAAI,EAAE,MAAM,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,QAAQ,CAAC;IAIlE,aAAa,CAAC,IAAI,EAAE,MAAM,QAAQ;CAGnC"}
|
|
@@ -4,7 +4,7 @@ import { Config } from '@dxos/config';
|
|
|
4
4
|
import { SystemStatus, SystemStatusResponse, SystemService, UpdateSystemStatusRequest } from '@dxos/protocols/proto/dxos/client/services';
|
|
5
5
|
import { MaybePromise } from '@dxos/util';
|
|
6
6
|
export declare type SystemServiceOptions = {
|
|
7
|
-
config
|
|
7
|
+
config?: Config;
|
|
8
8
|
statusUpdate: Event<void>;
|
|
9
9
|
getCurrentStatus: () => SystemStatus;
|
|
10
10
|
onUpdateStatus: (status: SystemStatus) => MaybePromise<void>;
|
|
@@ -14,7 +14,7 @@ export declare type SystemServiceOptions = {
|
|
|
14
14
|
*
|
|
15
15
|
*/
|
|
16
16
|
export declare class SystemServiceImpl implements SystemService {
|
|
17
|
-
private readonly _config
|
|
17
|
+
private readonly _config?;
|
|
18
18
|
private readonly _statusUpdate;
|
|
19
19
|
private readonly _getCurrentStatus;
|
|
20
20
|
private readonly _onUpdateStatus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-service.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/system/system-service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACb,yBAAyB,EAC1B,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,oBAAY,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"system-service.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/system/system-service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACb,yBAAyB,EAC1B,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,oBAAY,oBAAoB,GAAG;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,gBAAgB,EAAE,MAAM,YAAY,CAAC;IACrC,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7D,OAAO,EAAE,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;CACnC,CAAC;AAEF;;GAEG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAiC;IAC1D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuC;IACrE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2C;IAC7E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyC;IACzE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;gBAE/C,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,oBAAoB;IAQ/F,SAAS;IAIT,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,yBAAyB;IAIxD,WAAW,IAAI,MAAM,CAAC,oBAAoB,CAAC;IAiBrC,KAAK;CAGZ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iframe-host-runtime.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/vault/iframe-host-runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"iframe-host-runtime.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/vault/iframe-host-runtime.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAItC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAiB,QAAQ,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,YAAY,EAAoB,MAAM,iBAAiB,CAAC;AAIjE,oBAAY,uBAAuB,GAAG;IACpC,cAAc,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IACrE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAE3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAU;IACtC,OAAO,CAAC,OAAO,CAAU;IAGzB,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,aAAa,CAAC,CAAmB;IAGlC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEX,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,uBAAuB;IAU3E,IAAI,QAAQ,wBAEX;IAED,IAAI,KAAK,IAAI,YAAY,GAAG,SAAS,CAEpC;IAEK,KAAK;IAmDL,IAAI;CAOX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-runtime.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/vault/worker-runtime.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAItC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM1C,oBAAY,mBAAmB,GAAG;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,qBAAa,aAAa;IAUtB,OAAO,CAAC,QAAQ,CAAC,eAAe;IATlC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqC;IACvE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,qBAAqB,CAAC,CAAgB;IAC9C,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,OAAO,CAAU;gBAIN,eAAe,EAAE,MAAM,YAAY,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-runtime.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/vault/worker-runtime.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAItC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM1C,oBAAY,mBAAmB,GAAG;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,qBAAa,aAAa;IAUtB,OAAO,CAAC,QAAQ,CAAC,eAAe;IATlC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqC;IACvE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,qBAAqB,CAAC,CAAgB;IAC9C,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,OAAO,CAAU;gBAIN,eAAe,EAAE,MAAM,YAAY,CAAC,MAAM,CAAC;IAKxD,KAAK;IAyBL,IAAI;IAKV;;OAEG;IACG,aAAa,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,mBAAmB;IAqB3E;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAmBzB"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Trigger } from '@dxos/async';
|
|
2
|
-
import { ClientServices } from '@dxos/client';
|
|
3
2
|
import { BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';
|
|
4
3
|
import { RpcPort } from '@dxos/rpc';
|
|
5
4
|
import { Callback } from '@dxos/util';
|
|
5
|
+
import { ClientServicesHost } from '../services';
|
|
6
6
|
export declare type WorkerSessionParams = {
|
|
7
|
-
|
|
7
|
+
serviceHost: ClientServicesHost;
|
|
8
8
|
systemPort: RpcPort;
|
|
9
9
|
appPort: RpcPort;
|
|
10
10
|
shellPort: RpcPort;
|
|
@@ -21,13 +21,13 @@ export declare class WorkerSession {
|
|
|
21
21
|
private readonly _shellClientRpc;
|
|
22
22
|
private readonly _iframeRpc;
|
|
23
23
|
private readonly _startTrigger;
|
|
24
|
-
private readonly
|
|
24
|
+
private readonly _serviceHost;
|
|
25
25
|
private readonly _options;
|
|
26
26
|
private _heartbeatTimer?;
|
|
27
27
|
readonly onClose: Callback<() => Promise<void>>;
|
|
28
28
|
origin?: string;
|
|
29
29
|
bridgeService?: BridgeService;
|
|
30
|
-
constructor({
|
|
30
|
+
constructor({ serviceHost, systemPort, appPort, shellPort, readySignal, options }: WorkerSessionParams);
|
|
31
31
|
open(): Promise<void>;
|
|
32
32
|
close(): Promise<void>;
|
|
33
33
|
private _maybeOpenShell;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-session.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/vault/worker-session.ts"],"names":[],"mappings":"AAMA,OAAO,EAAgB,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-session.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/vault/worker-session.ts"],"names":[],"mappings":"AAMA,OAAO,EAAgB,OAAO,EAAE,MAAM,aAAa,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAoC,OAAO,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,oBAAY,mBAAmB,GAAG;IAChC,WAAW,EAAE,kBAAkB,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE;QACR,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAC/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8C;IACvE,OAAO,CAAC,eAAe,CAAC,CAAiB;IAEzC,SAAgB,OAAO,iBAAsB,QAAQ,IAAI,CAAC,EAAI;IAGvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,aAAa,CAAC,EAAE,aAAa,CAAC;gBAEzB,EACV,WAAW,EACX,UAAU,EACV,OAAO,EACP,SAAS,EACT,WAAW,EACX,OAEC,EACF,EAAE,mBAAmB;IAgEhB,IAAI;IAuBJ,KAAK;YAeG,eAAe;CAO9B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/client-services",
|
|
3
|
-
"version": "0.1.29
|
|
3
|
+
"version": "0.1.29",
|
|
4
4
|
"description": "DXOS client services implementation",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -20,38 +20,38 @@
|
|
|
20
20
|
"src"
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@dxos/async": "0.1.29
|
|
24
|
-
"@dxos/client": "0.1.29
|
|
25
|
-
"@dxos/codec-protobuf": "0.1.29
|
|
26
|
-
"@dxos/config": "0.1.29
|
|
27
|
-
"@dxos/context": "0.1.29
|
|
28
|
-
"@dxos/credentials": "0.1.29
|
|
29
|
-
"@dxos/crypto": "0.1.29
|
|
30
|
-
"@dxos/debug": "0.1.29
|
|
31
|
-
"@dxos/document-model": "0.1.29
|
|
32
|
-
"@dxos/echo-db": "0.1.29
|
|
33
|
-
"@dxos/echo-pipeline": "0.1.29
|
|
34
|
-
"@dxos/errors": "0.1.29
|
|
35
|
-
"@dxos/feed-store": "0.1.29
|
|
36
|
-
"@dxos/keyring": "0.1.29
|
|
37
|
-
"@dxos/keys": "0.1.29
|
|
38
|
-
"@dxos/log": "0.1.29
|
|
39
|
-
"@dxos/messaging": "0.1.29
|
|
40
|
-
"@dxos/model-factory": "0.1.29
|
|
41
|
-
"@dxos/network-manager": "0.1.29
|
|
42
|
-
"@dxos/node-std": "0.1.29
|
|
43
|
-
"@dxos/protocols": "0.1.29
|
|
44
|
-
"@dxos/random-access-storage": "0.1.29
|
|
45
|
-
"@dxos/rpc": "0.1.29
|
|
46
|
-
"@dxos/teleport": "0.1.29
|
|
47
|
-
"@dxos/teleport-extension-presence": "0.1.29
|
|
48
|
-
"@dxos/text-model": "0.1.29
|
|
49
|
-
"@dxos/timeframe": "0.1.29
|
|
50
|
-
"@dxos/util": "0.1.29
|
|
23
|
+
"@dxos/async": "0.1.29",
|
|
24
|
+
"@dxos/client": "0.1.29",
|
|
25
|
+
"@dxos/codec-protobuf": "0.1.29",
|
|
26
|
+
"@dxos/config": "0.1.29",
|
|
27
|
+
"@dxos/context": "0.1.29",
|
|
28
|
+
"@dxos/credentials": "0.1.29",
|
|
29
|
+
"@dxos/crypto": "0.1.29",
|
|
30
|
+
"@dxos/debug": "0.1.29",
|
|
31
|
+
"@dxos/document-model": "0.1.29",
|
|
32
|
+
"@dxos/echo-db": "0.1.29",
|
|
33
|
+
"@dxos/echo-pipeline": "0.1.29",
|
|
34
|
+
"@dxos/errors": "0.1.29",
|
|
35
|
+
"@dxos/feed-store": "0.1.29",
|
|
36
|
+
"@dxos/keyring": "0.1.29",
|
|
37
|
+
"@dxos/keys": "0.1.29",
|
|
38
|
+
"@dxos/log": "0.1.29",
|
|
39
|
+
"@dxos/messaging": "0.1.29",
|
|
40
|
+
"@dxos/model-factory": "0.1.29",
|
|
41
|
+
"@dxos/network-manager": "0.1.29",
|
|
42
|
+
"@dxos/node-std": "0.1.29",
|
|
43
|
+
"@dxos/protocols": "0.1.29",
|
|
44
|
+
"@dxos/random-access-storage": "0.1.29",
|
|
45
|
+
"@dxos/rpc": "0.1.29",
|
|
46
|
+
"@dxos/teleport": "0.1.29",
|
|
47
|
+
"@dxos/teleport-extension-presence": "0.1.29",
|
|
48
|
+
"@dxos/text-model": "0.1.29",
|
|
49
|
+
"@dxos/timeframe": "0.1.29",
|
|
50
|
+
"@dxos/util": "0.1.29"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@types/readable-stream": "^2.3.9",
|
|
54
|
-
"@dxos/signal": "0.1.29
|
|
54
|
+
"@dxos/signal": "0.1.29"
|
|
55
55
|
},
|
|
56
56
|
"publishConfig": {
|
|
57
57
|
"access": "public"
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { ClientServices } from '@dxos/client';
|
|
6
|
+
import { Any, ServiceHandler, Stream } from '@dxos/codec-protobuf';
|
|
7
|
+
import { raise } from '@dxos/debug';
|
|
8
|
+
import { parseMethodName, RpcPeer, RpcPeerOptions } from '@dxos/rpc';
|
|
9
|
+
import { MaybePromise } from '@dxos/util';
|
|
10
|
+
|
|
11
|
+
import { ServiceRegistry } from './service-registry';
|
|
12
|
+
|
|
13
|
+
export type ClientRpcServerParams = {
|
|
14
|
+
serviceRegistry: ServiceRegistry<ClientServices>;
|
|
15
|
+
handleCall?: (
|
|
16
|
+
method: string,
|
|
17
|
+
params: Any,
|
|
18
|
+
handler: (method: string, params: Any) => MaybePromise<Any>
|
|
19
|
+
) => Promise<Any>;
|
|
20
|
+
handleStream?: (
|
|
21
|
+
method: string,
|
|
22
|
+
params: Any,
|
|
23
|
+
handler: (method: string, params: Any) => Stream<Any>
|
|
24
|
+
) => MaybePromise<Stream<Any>>;
|
|
25
|
+
} & Omit<RpcPeerOptions, 'callHandler' | 'streamHandler'>;
|
|
26
|
+
|
|
27
|
+
export class ClientRpcServer {
|
|
28
|
+
private readonly _serviceRegistry: ServiceRegistry<ClientServices>;
|
|
29
|
+
private readonly _rpcPeer: RpcPeer;
|
|
30
|
+
private readonly _handlerCache = new Map<string, ServiceHandler<any>>();
|
|
31
|
+
private readonly _handleCall: ClientRpcServerParams['handleCall'];
|
|
32
|
+
private readonly _handleStream: ClientRpcServerParams['handleStream'];
|
|
33
|
+
|
|
34
|
+
constructor(params: ClientRpcServerParams) {
|
|
35
|
+
const { serviceRegistry, handleCall, handleStream, ...rpcOptions } = params;
|
|
36
|
+
this._handleCall = handleCall;
|
|
37
|
+
this._handleStream = handleStream;
|
|
38
|
+
|
|
39
|
+
this._serviceRegistry = serviceRegistry;
|
|
40
|
+
this._rpcPeer = new RpcPeer({
|
|
41
|
+
...rpcOptions,
|
|
42
|
+
callHandler: (method, params) => {
|
|
43
|
+
const [serviceName, methodName] = parseMethodName(method);
|
|
44
|
+
const handler = (method: string, params: Any) => this._getServiceHandler(serviceName).call(method, params);
|
|
45
|
+
|
|
46
|
+
if (this._handleCall) {
|
|
47
|
+
return this._handleCall(methodName, params, handler);
|
|
48
|
+
} else {
|
|
49
|
+
return handler(methodName, params);
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
streamHandler: (method, params) => {
|
|
53
|
+
const [serviceName, methodName] = parseMethodName(method);
|
|
54
|
+
const handler = (method: string, params: Any) =>
|
|
55
|
+
this._getServiceHandler(serviceName).callStream(method, params);
|
|
56
|
+
|
|
57
|
+
if (this._handleStream) {
|
|
58
|
+
return Stream.unwrapPromise(this._handleStream(methodName, params, handler));
|
|
59
|
+
} else {
|
|
60
|
+
return handler(methodName, params);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async open() {
|
|
67
|
+
await this._rpcPeer.open();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async close() {
|
|
71
|
+
await this._rpcPeer.close();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
private _getServiceHandler(serviceName: string) {
|
|
75
|
+
if (!this._handlerCache.has(serviceName)) {
|
|
76
|
+
const [key, descriptor] =
|
|
77
|
+
Object.entries(this._serviceRegistry.descriptors).find(
|
|
78
|
+
([key, descriptor]) => descriptor.name === serviceName
|
|
79
|
+
) ?? raise(new Error(`Service not available: ${serviceName}`));
|
|
80
|
+
|
|
81
|
+
const service = this._serviceRegistry.services[key as keyof ClientServices];
|
|
82
|
+
if (!service) {
|
|
83
|
+
throw new Error(`Service not available: ${serviceName}`);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
this._handlerCache.set(serviceName, descriptor.createServer(service as any));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return this._handlerCache.get(serviceName)!;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -29,13 +29,21 @@ import { ServiceContext } from './service-context';
|
|
|
29
29
|
import { ServiceRegistry } from './service-registry';
|
|
30
30
|
|
|
31
31
|
export type ClientServicesHostParams = {
|
|
32
|
-
|
|
32
|
+
/**
|
|
33
|
+
* Can be omitted if `initialize` is later called.
|
|
34
|
+
*/
|
|
35
|
+
config?: Config;
|
|
33
36
|
modelFactory?: ModelFactory;
|
|
34
|
-
networkManager
|
|
37
|
+
networkManager?: NetworkManager;
|
|
35
38
|
storage?: Storage;
|
|
36
39
|
lockKey?: string;
|
|
37
40
|
};
|
|
38
41
|
|
|
42
|
+
export type InitializeOptions = {
|
|
43
|
+
config?: Config;
|
|
44
|
+
networkManager?: NetworkManager;
|
|
45
|
+
};
|
|
46
|
+
|
|
39
47
|
/**
|
|
40
48
|
* Remote service implementation.
|
|
41
49
|
*/
|
|
@@ -44,11 +52,11 @@ export class ClientServicesHost {
|
|
|
44
52
|
private readonly _serviceRegistry: ServiceRegistry<ClientServices>;
|
|
45
53
|
private readonly _systemService: SystemServiceImpl;
|
|
46
54
|
|
|
47
|
-
private
|
|
55
|
+
private _config?: Config;
|
|
48
56
|
private readonly _statusUpdate = new Event<void>();
|
|
49
57
|
private readonly _modelFactory: ModelFactory;
|
|
50
|
-
private
|
|
51
|
-
private
|
|
58
|
+
private _networkManager?: NetworkManager;
|
|
59
|
+
private _storage?: Storage;
|
|
52
60
|
|
|
53
61
|
/**
|
|
54
62
|
* @internal
|
|
@@ -61,14 +69,16 @@ export class ClientServicesHost {
|
|
|
61
69
|
modelFactory = createDefaultModelFactory(),
|
|
62
70
|
// TODO(burdon): Create ApolloLink abstraction (see Client).
|
|
63
71
|
networkManager,
|
|
64
|
-
storage
|
|
72
|
+
storage,
|
|
65
73
|
// TODO(wittjosiah): Turn this on by default.
|
|
66
74
|
lockKey
|
|
67
|
-
}: ClientServicesHostParams) {
|
|
68
|
-
this._config = config;
|
|
69
|
-
this._modelFactory = modelFactory;
|
|
70
|
-
this._networkManager = networkManager;
|
|
75
|
+
}: ClientServicesHostParams = {}) {
|
|
71
76
|
this._storage = storage;
|
|
77
|
+
this._modelFactory = modelFactory;
|
|
78
|
+
|
|
79
|
+
if (config) {
|
|
80
|
+
this.initialize({ config, networkManager });
|
|
81
|
+
}
|
|
72
82
|
|
|
73
83
|
this._resourceLock = lockKey
|
|
74
84
|
? new VaultResourceLock({
|
|
@@ -109,6 +119,10 @@ export class ClientServicesHost {
|
|
|
109
119
|
return this._open;
|
|
110
120
|
}
|
|
111
121
|
|
|
122
|
+
get serviceRegistry() {
|
|
123
|
+
return this._serviceRegistry;
|
|
124
|
+
}
|
|
125
|
+
|
|
112
126
|
get descriptors() {
|
|
113
127
|
return this._serviceRegistry.descriptors;
|
|
114
128
|
}
|
|
@@ -117,11 +131,38 @@ export class ClientServicesHost {
|
|
|
117
131
|
return this._serviceRegistry.services;
|
|
118
132
|
}
|
|
119
133
|
|
|
134
|
+
/**
|
|
135
|
+
* Initialize the service host with the config.
|
|
136
|
+
* Config can also be provided in the constructor.
|
|
137
|
+
* Can only be called once.
|
|
138
|
+
*/
|
|
139
|
+
initialize({ config, networkManager }: InitializeOptions) {
|
|
140
|
+
assert(!this._open, 'service host is open');
|
|
141
|
+
|
|
142
|
+
if (config) {
|
|
143
|
+
assert(!this._config, 'config already set');
|
|
144
|
+
|
|
145
|
+
this._config = config;
|
|
146
|
+
if (!this._storage) {
|
|
147
|
+
this._storage = createStorageObjects(config.get('runtime.client.storage', {})!).storage;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (networkManager) {
|
|
152
|
+
assert(!this._networkManager, 'network manager already set');
|
|
153
|
+
this._networkManager = networkManager;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
120
157
|
async open() {
|
|
121
158
|
if (this._open) {
|
|
122
159
|
return;
|
|
123
160
|
}
|
|
124
161
|
|
|
162
|
+
assert(this._config, 'config not set');
|
|
163
|
+
assert(this._storage, 'storage not set');
|
|
164
|
+
assert(this._networkManager, 'network manager not set');
|
|
165
|
+
|
|
125
166
|
log('opening...');
|
|
126
167
|
await this._resourceLock?.acquire();
|
|
127
168
|
|
|
@@ -11,7 +11,7 @@ export class ServiceRegistry<Services> {
|
|
|
11
11
|
// prettier-ignore
|
|
12
12
|
constructor (
|
|
13
13
|
private readonly _serviceBundle: ServiceBundle<Services>,
|
|
14
|
-
private _handlers: Partial<Services>
|
|
14
|
+
private _handlers: Partial<Services> = {}
|
|
15
15
|
) {}
|
|
16
16
|
|
|
17
17
|
get descriptors() {
|
|
@@ -25,4 +25,12 @@ export class ServiceRegistry<Services> {
|
|
|
25
25
|
setServices(services: Partial<Services>) {
|
|
26
26
|
this._handlers = services;
|
|
27
27
|
}
|
|
28
|
+
|
|
29
|
+
addService(name: keyof Services, service: Services[keyof Services]) {
|
|
30
|
+
this._handlers[name] = service;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
removeService(name: keyof Services) {
|
|
34
|
+
delete this._handlers[name];
|
|
35
|
+
}
|
|
28
36
|
}
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
import { MaybePromise } from '@dxos/util';
|
|
15
15
|
|
|
16
16
|
export type SystemServiceOptions = {
|
|
17
|
-
config
|
|
17
|
+
config?: Config;
|
|
18
18
|
statusUpdate: Event<void>;
|
|
19
19
|
getCurrentStatus: () => SystemStatus;
|
|
20
20
|
onUpdateStatus: (status: SystemStatus) => MaybePromise<void>;
|
|
@@ -25,7 +25,7 @@ export type SystemServiceOptions = {
|
|
|
25
25
|
*
|
|
26
26
|
*/
|
|
27
27
|
export class SystemServiceImpl implements SystemService {
|
|
28
|
-
private readonly _config
|
|
28
|
+
private readonly _config?: SystemServiceOptions['config'];
|
|
29
29
|
private readonly _statusUpdate: SystemServiceOptions['statusUpdate'];
|
|
30
30
|
private readonly _getCurrentStatus: SystemServiceOptions['getCurrentStatus'];
|
|
31
31
|
private readonly _onUpdateStatus: SystemServiceOptions['onUpdateStatus'];
|
|
@@ -40,7 +40,7 @@ export class SystemServiceImpl implements SystemService {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
async getConfig() {
|
|
43
|
-
return this._config
|
|
43
|
+
return this._config?.values ?? {};
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
async updateStatus({ status }: UpdateSystemStatusRequest) {
|