@dxos/client-services 0.5.8-next.4b7fabd → 0.5.9-main.2d0a5e6

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.
Files changed (67) hide show
  1. package/dist/lib/browser/{chunk-ACQUT3OK.mjs → chunk-5SOW3KZQ.mjs} +1141 -1134
  2. package/dist/lib/browser/chunk-5SOW3KZQ.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +55 -363
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/packlets/testing/index.mjs +4 -4
  7. package/dist/lib/browser/packlets/testing/index.mjs.map +3 -3
  8. package/dist/lib/node/{chunk-IBTSMFQY.cjs → chunk-KYH2GPWL.cjs} +1145 -1138
  9. package/dist/lib/node/chunk-KYH2GPWL.cjs.map +7 -0
  10. package/dist/lib/node/index.cjs +93 -396
  11. package/dist/lib/node/index.cjs.map +4 -4
  12. package/dist/lib/node/meta.json +1 -1
  13. package/dist/lib/node/packlets/testing/index.cjs +10 -10
  14. package/dist/lib/node/packlets/testing/index.cjs.map +3 -3
  15. package/dist/types/src/index.d.ts +3 -3
  16. package/dist/types/src/index.d.ts.map +1 -1
  17. package/dist/types/src/packlets/devtools/network.d.ts +4 -4
  18. package/dist/types/src/packlets/devtools/network.d.ts.map +1 -1
  19. package/dist/types/src/packlets/network/network-service.d.ts +2 -2
  20. package/dist/types/src/packlets/network/network-service.d.ts.map +1 -1
  21. package/dist/types/src/packlets/services/service-context.d.ts +4 -5
  22. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  23. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  24. package/dist/types/src/packlets/spaces/data-space.d.ts +1 -0
  25. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  26. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  27. package/dist/types/src/packlets/testing/test-builder.d.ts +3 -3
  28. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  29. package/dist/types/src/packlets/worker/index.d.ts +3 -0
  30. package/dist/types/src/packlets/worker/index.d.ts.map +1 -0
  31. package/dist/types/src/packlets/worker/worker-runtime.d.ts.map +1 -0
  32. package/dist/types/src/packlets/worker/worker-session.d.ts.map +1 -0
  33. package/dist/types/src/version.d.ts +1 -1
  34. package/package.json +36 -36
  35. package/src/index.ts +3 -3
  36. package/src/packlets/devtools/network.ts +4 -4
  37. package/src/packlets/identity/identity-manager.test.ts +2 -2
  38. package/src/packlets/identity/identity.test.ts +8 -4
  39. package/src/packlets/invitations/invitations-handler.ts +2 -2
  40. package/src/packlets/network/network-service.ts +2 -2
  41. package/src/packlets/services/service-context.ts +3 -3
  42. package/src/packlets/services/service-host.ts +6 -7
  43. package/src/packlets/spaces/data-space.ts +11 -1
  44. package/src/packlets/spaces/spaces-service.ts +1 -0
  45. package/src/packlets/testing/test-builder.ts +4 -4
  46. package/src/packlets/worker/index.ts +6 -0
  47. package/src/version.ts +1 -1
  48. package/dist/lib/browser/chunk-ACQUT3OK.mjs.map +0 -7
  49. package/dist/lib/node/chunk-IBTSMFQY.cjs.map +0 -7
  50. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts +0 -37
  51. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts.map +0 -1
  52. package/dist/types/src/packlets/vault/index.d.ts +0 -6
  53. package/dist/types/src/packlets/vault/index.d.ts.map +0 -1
  54. package/dist/types/src/packlets/vault/shared-worker-connection.d.ts +0 -36
  55. package/dist/types/src/packlets/vault/shared-worker-connection.d.ts.map +0 -1
  56. package/dist/types/src/packlets/vault/shell-runtime.d.ts +0 -33
  57. package/dist/types/src/packlets/vault/shell-runtime.d.ts.map +0 -1
  58. package/dist/types/src/packlets/vault/worker-runtime.d.ts.map +0 -1
  59. package/dist/types/src/packlets/vault/worker-session.d.ts.map +0 -1
  60. package/src/packlets/vault/iframe-host-runtime.ts +0 -130
  61. package/src/packlets/vault/index.ts +0 -9
  62. package/src/packlets/vault/shared-worker-connection.ts +0 -115
  63. package/src/packlets/vault/shell-runtime.ts +0 -111
  64. /package/dist/types/src/packlets/{vault → worker}/worker-runtime.d.ts +0 -0
  65. /package/dist/types/src/packlets/{vault → worker}/worker-session.d.ts +0 -0
  66. /package/src/packlets/{vault → worker}/worker-runtime.ts +0 -0
  67. /package/src/packlets/{vault → worker}/worker-session.ts +0 -0
@@ -1,37 +0,0 @@
1
- import { type ShellRuntime } from '@dxos/client-protocol';
2
- import { type Config } from '@dxos/config';
3
- import { type RpcPort } from '@dxos/rpc';
4
- import { type MaybePromise, type Provider } from '@dxos/util';
5
- import { ClientServicesHost } from '../services';
6
- export type IFrameHostRuntimeParams = {
7
- config: Config | Provider<MaybePromise<Config>>;
8
- origin: string;
9
- appPort: RpcPort;
10
- shellPort?: RpcPort;
11
- };
12
- /**
13
- * Runs the client services in the main thread.
14
- *
15
- * Holds a lock over the client services such that only one instance can run at a time.
16
- * This should only be used when SharedWorker is not available.
17
- *
18
- * @deprecated
19
- */
20
- export declare class IFrameHostRuntime {
21
- private readonly _configProvider;
22
- private readonly _ready;
23
- private readonly _appPort;
24
- private readonly _shellPort?;
25
- private _config;
26
- private _transportFactory;
27
- private _clientServices;
28
- private _clientRpc;
29
- private _shellRuntime?;
30
- origin: string;
31
- constructor({ config, origin, appPort, shellPort }: IFrameHostRuntimeParams);
32
- get services(): ClientServicesHost;
33
- get shell(): ShellRuntime | undefined;
34
- start(): Promise<void>;
35
- stop(): Promise<void>;
36
- }
37
- //# sourceMappingURL=iframe-host-runtime.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"iframe-host-runtime.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/vault/iframe-host-runtime.ts"],"names":[],"mappings":"AAKA,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAK3C,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAiB,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAKjD,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;;;;;;GAOG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoC;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;IACzB,OAAO,CAAC,iBAAiB,CAAoB;IAG7C,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,aAAa,CAAC,CAAmB;IAGlC,MAAM,EAAE,MAAM,CAAC;gBAEV,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,uBAAuB;IAW3E,IAAI,QAAQ,uBAEX;IAED,IAAI,KAAK,IAAI,YAAY,GAAG,SAAS,CAEpC;IAEK,KAAK;IAmDL,IAAI;CAOX"}
@@ -1,6 +0,0 @@
1
- export * from './iframe-host-runtime';
2
- export * from './shared-worker-connection';
3
- export * from './shell-runtime';
4
- export * from './worker-runtime';
5
- export * from './worker-session';
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/vault/index.ts"],"names":[],"mappings":"AAIA,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
@@ -1,36 +0,0 @@
1
- import { type ShellRuntime } from '@dxos/client-protocol';
2
- import { type Config } from '@dxos/config';
3
- import { type RpcPort } from '@dxos/rpc';
4
- import { type MaybePromise, type Provider } from '@dxos/util';
5
- export type SharedWorkerConnectionOptions = {
6
- config: Config | Provider<MaybePromise<Config>>;
7
- systemPort: RpcPort;
8
- /**
9
- * @deprecated Only used with iframes.
10
- */
11
- shellPort?: RpcPort;
12
- };
13
- /**
14
- * Manages the client connection to the shared worker.
15
- */
16
- export declare class SharedWorkerConnection {
17
- private readonly _id;
18
- private readonly _configProvider;
19
- private readonly _systemPort;
20
- private readonly _shellPort?;
21
- private _release;
22
- private _config;
23
- private _transportService;
24
- private _systemRpc;
25
- private _shellRuntime?;
26
- constructor({ config, systemPort, shellPort }: SharedWorkerConnectionOptions);
27
- get shell(): ShellRuntime | undefined;
28
- open(params: {
29
- origin: string;
30
- observabilityGroup?: string;
31
- signalTelemetryEnabled?: boolean;
32
- }): Promise<void>;
33
- close(): Promise<void>;
34
- private _lockKey;
35
- }
36
- //# sourceMappingURL=shared-worker-connection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared-worker-connection.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/vault/shared-worker-connection.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,YAAY,EAGlB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAK3C,OAAO,EAAyC,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAChF,OAAO,EAAiB,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAK7E,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA+C;IACnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0C;IAC1E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,iBAAiB,CAAiB;IAC1C,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,aAAa,CAAC,CAAmB;gBAE7B,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,6BAA6B;IAU5E,IAAI,KAAK,IAAI,YAAY,GAAG,SAAS,CAEpC;IAEK,IAAI,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;KAAE;IAyC9F,KAAK;IAWX,OAAO,CAAC,QAAQ;CAGjB"}
@@ -1,33 +0,0 @@
1
- import { Event } from '@dxos/async';
2
- import { type ShellRuntime } from '@dxos/client-protocol';
3
- import { type PublicKey } from '@dxos/keys';
4
- import { type AppContextRequest, type LayoutRequest, ShellLayout, type InvitationUrlRequest } from '@dxos/protocols/proto/dxos/iframe';
5
- import { type RpcPort } from '@dxos/rpc';
6
- /**
7
- * Endpoint that handles shell services.
8
- */
9
- export declare class ShellRuntimeImpl implements ShellRuntime {
10
- private readonly _port;
11
- readonly layoutUpdate: Event<LayoutRequest>;
12
- readonly invitationUrlUpdate: Event<InvitationUrlRequest>;
13
- private _appRpc?;
14
- private _layout;
15
- private _spaceKey?;
16
- private _invitationCode?;
17
- private _invitationUrl?;
18
- private _deviceInvitationParam;
19
- private _spaceInvitationParam;
20
- constructor(_port: RpcPort);
21
- get layout(): ShellLayout;
22
- get invitationCode(): string | undefined;
23
- get spaceKey(): PublicKey | undefined;
24
- get invitationUrl(): string;
25
- get deviceInvitationParam(): string;
26
- get spaceInvitationParam(): string;
27
- setLayout({ layout, invitationCode, spaceKey }: LayoutRequest): void;
28
- setInvitationUrl({ invitationUrl, deviceInvitationParam, spaceInvitationParam }: InvitationUrlRequest): void;
29
- setAppContext(context: AppContextRequest): Promise<void>;
30
- open(): Promise<void>;
31
- close(): Promise<void>;
32
- }
33
- //# sourceMappingURL=shell-runtime.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shell-runtime.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/vault/shell-runtime.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAA2C,KAAK,YAAY,EAAsB,MAAM,uBAAuB,CAAC;AAEvH,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,WAAW,EACX,KAAK,oBAAoB,EAC1B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAyC,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAEhF;;GAEG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IAevC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAdlC,QAAQ,CAAC,YAAY,uBAA8B;IACnD,QAAQ,CAAC,mBAAmB,8BAAqC;IAEjE,OAAO,CAAC,OAAO,CAAC,CAAiC;IACjD,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,SAAS,CAAC,CAAY;IAE9B,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,cAAc,CAAC,CAAsE;IAG7F,OAAO,CAAC,sBAAsB,CAA0B;IACxD,OAAO,CAAC,qBAAqB,CAAyB;gBAEzB,KAAK,EAAE,OAAO;IAE3C,IAAI,MAAM,gBAET;IAED,IAAI,cAAc,uBAEjB;IAED,IAAI,QAAQ,0BAEX;IAED,IAAI,aAAa,WAEhB;IAED,IAAI,qBAAqB,WAExB;IAED,IAAI,oBAAoB,WAEvB;IAED,SAAS,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,aAAa;IAO7D,gBAAgB,CAAC,EAAE,aAAa,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,EAAE,oBAAoB;IAO/F,aAAa,CAAC,OAAO,EAAE,iBAAiB;IAMxC,IAAI;IA0BJ,KAAK;CAIZ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker-runtime.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/vault/worker-runtime.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAW3C,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,qBAAa,aAAa;IAatB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAZlC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAa;IAC1C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyC;IAC3E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IACtD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsB;IACtD,OAAO,CAAC,qBAAqB,CAAC,CAAgB;IAC9C,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,mBAAmB,CAAsC;IACjE,OAAO,CAAC,uBAAuB,CAAkB;gBAG9B,eAAe,EAAE,MAAM,YAAY,CAAC,MAAM,CAAC,EAC5D,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,sBAAsB;IAW/D,IAAI,IAAI,uBAEP;IAEK,KAAK;IA8BL,IAAI;IAMV;;OAEG;IACG,aAAa,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,mBAAmB;IAsC3E;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAoBzB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker-session.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/vault/worker-session.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,OAAO,EAAE,MAAM,aAAa,CAAC;AASpD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAyC,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAqB,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,KAAK,kBAAkB,EAA+C,MAAM,aAAa,CAAC;AAEnG,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,kBAAkB,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IAEjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;CACzC,CAAC;AAEF;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAC/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAElD,SAAgB,OAAO,iBAAsB,QAAQ,IAAI,CAAC,EAAI;IAGvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAGjC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,aAAa,CAAC,EAAE,aAAa,CAAC;gBAEzB,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,mBAAmB;IAoEvF,IAAI;IAeJ,KAAK;YAYG,eAAe;IAQ7B,OAAO,CAAC,kBAAkB;CAO3B"}
@@ -1,130 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { Trigger } from '@dxos/async';
6
- import { PROXY_CONNECTION_TIMEOUT, type ShellRuntime } from '@dxos/client-protocol';
7
- import { type Config } from '@dxos/config';
8
- import { Context } from '@dxos/context';
9
- import { log, logInfo } from '@dxos/log';
10
- import { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';
11
- import { createSimplePeerTransportFactory, type TransportFactory } from '@dxos/network-manager';
12
- import { type RpcPort } from '@dxos/rpc';
13
- import { getAsyncValue, type MaybePromise, type Provider } from '@dxos/util';
14
-
15
- import { ShellRuntimeImpl } from './shell-runtime';
16
- import { ClientServicesHost } from '../services';
17
- import { ClientRpcServer, type ClientRpcServerParams } from '../services/client-rpc-server';
18
-
19
- const LOCK_KEY = 'DXOS_RESOURCE_LOCK';
20
-
21
- export type IFrameHostRuntimeParams = {
22
- config: Config | Provider<MaybePromise<Config>>;
23
- origin: string;
24
- appPort: RpcPort;
25
- shellPort?: RpcPort;
26
- };
27
-
28
- /**
29
- * Runs the client services in the main thread.
30
- *
31
- * Holds a lock over the client services such that only one instance can run at a time.
32
- * This should only be used when SharedWorker is not available.
33
- *
34
- * @deprecated
35
- */
36
- export class IFrameHostRuntime {
37
- private readonly _configProvider: IFrameHostRuntimeParams['config'];
38
- private readonly _ready = new Trigger<Error | undefined>();
39
-
40
- private readonly _appPort: RpcPort;
41
- private readonly _shellPort?: RpcPort;
42
- private _config!: Config;
43
- private _transportFactory!: TransportFactory;
44
-
45
- // TODO(dmaretskyi): Replace with host and figure out how to return services provider here.
46
- private _clientServices!: ClientServicesHost;
47
- private _clientRpc!: ClientRpcServer;
48
- private _shellRuntime?: ShellRuntimeImpl;
49
-
50
- @logInfo
51
- public origin: string;
52
-
53
- constructor({ config, origin, appPort, shellPort }: IFrameHostRuntimeParams) {
54
- this._configProvider = config;
55
- this.origin = origin;
56
- this._appPort = appPort;
57
- this._shellPort = shellPort;
58
-
59
- if (this._shellPort) {
60
- this._shellRuntime = new ShellRuntimeImpl(this._shellPort);
61
- }
62
- }
63
-
64
- get services() {
65
- return this._clientServices;
66
- }
67
-
68
- get shell(): ShellRuntime | undefined {
69
- return this._shellRuntime;
70
- }
71
-
72
- async start() {
73
- log('starting...');
74
- try {
75
- this._config = await getAsyncValue(this._configProvider);
76
- this._transportFactory = createSimplePeerTransportFactory({
77
- iceServers: this._config.get('runtime.services.ice'),
78
- });
79
- const signals = this._config.get('runtime.services.signaling');
80
- this._clientServices = new ClientServicesHost({
81
- lockKey: LOCK_KEY,
82
- config: this._config,
83
- signalManager: signals
84
- ? new WebsocketSignalManager(signals)
85
- : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.
86
- transportFactory: this._transportFactory,
87
- });
88
-
89
- const middleware: Pick<ClientRpcServerParams, 'handleCall' | 'handleStream'> = {
90
- handleCall: async (method, params, handler) => {
91
- const error = await this._ready.wait({ timeout: PROXY_CONNECTION_TIMEOUT });
92
- if (error) {
93
- throw error;
94
- }
95
-
96
- return handler(method, params);
97
- },
98
- handleStream: async (method, params, handler) => {
99
- const error = await this._ready.wait({ timeout: PROXY_CONNECTION_TIMEOUT });
100
- if (error) {
101
- throw error;
102
- }
103
-
104
- return handler(method, params);
105
- },
106
- };
107
-
108
- this._clientRpc = new ClientRpcServer({
109
- serviceRegistry: this._clientServices.serviceRegistry,
110
- port: this._appPort,
111
- ...middleware,
112
- });
113
-
114
- await Promise.all([this._clientServices.open(new Context()), this._clientRpc.open(), this._shellRuntime?.open()]);
115
- this._ready.wake(undefined);
116
- log('started');
117
- } catch (err: any) {
118
- this._ready.wake(err);
119
- log.catch(err);
120
- }
121
- }
122
-
123
- async stop() {
124
- log('stopping...');
125
- await this._clientRpc.close();
126
- await this._clientServices.close();
127
- await this._shellRuntime?.close();
128
- log('stopped');
129
- }
130
- }
@@ -1,9 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- export * from './iframe-host-runtime';
6
- export * from './shared-worker-connection';
7
- export * from './shell-runtime';
8
- export * from './worker-runtime';
9
- export * from './worker-session';
@@ -1,115 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- import { Trigger } from '@dxos/async';
6
- import {
7
- iframeServiceBundle,
8
- type ShellRuntime,
9
- workerServiceBundle,
10
- type WorkerServiceBundle,
11
- } from '@dxos/client-protocol';
12
- import { type Config } from '@dxos/config';
13
- import { log } from '@dxos/log';
14
- import { SimplePeerTransportService } from '@dxos/network-manager';
15
- import { RemoteServiceConnectionError } from '@dxos/protocols';
16
- import { type BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';
17
- import { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';
18
- import { getAsyncValue, type MaybePromise, type Provider } from '@dxos/util';
19
-
20
- import { ShellRuntimeImpl } from './shell-runtime';
21
-
22
- // NOTE: Keep as RpcPorts to avoid dependency on @dxos/rpc-tunnel so we don't depend on browser-specific apis.
23
- export type SharedWorkerConnectionOptions = {
24
- config: Config | Provider<MaybePromise<Config>>;
25
- systemPort: RpcPort;
26
- /**
27
- * @deprecated Only used with iframes.
28
- */
29
- shellPort?: RpcPort;
30
- };
31
-
32
- /**
33
- * Manages the client connection to the shared worker.
34
- */
35
- export class SharedWorkerConnection {
36
- private readonly _id = String(Math.floor(Math.random() * 1000000));
37
- private readonly _configProvider: SharedWorkerConnectionOptions['config'];
38
- private readonly _systemPort: RpcPort;
39
- private readonly _shellPort?: RpcPort;
40
- private _release = new Trigger();
41
- private _config!: Config;
42
- private _transportService!: BridgeService;
43
- private _systemRpc!: ProtoRpcPeer<WorkerServiceBundle>;
44
- private _shellRuntime?: ShellRuntimeImpl;
45
-
46
- constructor({ config, systemPort, shellPort }: SharedWorkerConnectionOptions) {
47
- this._configProvider = config;
48
- this._systemPort = systemPort;
49
- this._shellPort = shellPort;
50
-
51
- if (this._shellPort) {
52
- this._shellRuntime = new ShellRuntimeImpl(this._shellPort);
53
- }
54
- }
55
-
56
- get shell(): ShellRuntime | undefined {
57
- return this._shellRuntime;
58
- }
59
-
60
- async open(params: { origin: string; observabilityGroup?: string; signalTelemetryEnabled?: boolean }) {
61
- this._config = await getAsyncValue(this._configProvider);
62
-
63
- this._transportService = new SimplePeerTransportService({
64
- iceServers: this._config.get('runtime.services.ice'),
65
- });
66
-
67
- this._systemRpc = createProtoRpcPeer({
68
- requested: workerServiceBundle,
69
- exposed: iframeServiceBundle,
70
- handlers: {
71
- BridgeService: this._transportService,
72
- },
73
- port: this._systemPort,
74
- // TODO(wittjosiah): Make longer and factor out to constant.
75
- // TODO(wittjosiah): If this is too long then it breaks the reset flows in Composer.
76
- timeout: 200,
77
- });
78
-
79
- let lockKey: string | undefined;
80
- if (typeof navigator !== 'undefined') {
81
- lockKey = this._lockKey(params.origin);
82
- this._release = new Trigger();
83
- const ready = new Trigger();
84
- void navigator.locks.request(lockKey, async () => {
85
- ready.wake();
86
- await this._release.wait();
87
- });
88
- await ready.wait();
89
- }
90
-
91
- try {
92
- await this._systemRpc.open();
93
- await this._systemRpc.rpc.WorkerService.start({ lockKey, ...params });
94
- } catch (err) {
95
- log.catch(err);
96
- throw new RemoteServiceConnectionError('Failed to connect to worker');
97
- }
98
- await this._shellRuntime?.open();
99
- }
100
-
101
- async close() {
102
- this._release.wake();
103
- await this._shellRuntime?.close();
104
- try {
105
- await this._systemRpc.rpc.WorkerService.stop();
106
- } catch {
107
- // If this fails, the worker is probably already gone.
108
- }
109
- await this._systemRpc.close();
110
- }
111
-
112
- private _lockKey(origin: string) {
113
- return `${origin}-${this._id}`;
114
- }
115
- }
@@ -1,111 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { Event } from '@dxos/async';
6
- import { appServiceBundle, type AppServiceBundle, type ShellRuntime, shellServiceBundle } from '@dxos/client-protocol';
7
- import { invariant } from '@dxos/invariant';
8
- import { type PublicKey } from '@dxos/keys';
9
- import {
10
- type AppContextRequest,
11
- type LayoutRequest,
12
- ShellLayout,
13
- type InvitationUrlRequest,
14
- } from '@dxos/protocols/proto/dxos/iframe';
15
- import { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';
16
-
17
- /**
18
- * Endpoint that handles shell services.
19
- */
20
- export class ShellRuntimeImpl implements ShellRuntime {
21
- readonly layoutUpdate = new Event<LayoutRequest>();
22
- readonly invitationUrlUpdate = new Event<InvitationUrlRequest>();
23
-
24
- private _appRpc?: ProtoRpcPeer<AppServiceBundle>;
25
- private _layout = ShellLayout.DEFAULT;
26
- private _spaceKey?: PublicKey;
27
-
28
- private _invitationCode?: string;
29
- private _invitationUrl? = typeof window !== 'undefined' ? window.location.origin : undefined;
30
-
31
- // TODO(burdon): Change to using underscores (coordinate with @dxos/web-auth).
32
- private _deviceInvitationParam = 'deviceInvitationCode'; // TODO(burdon): device_invitation_code
33
- private _spaceInvitationParam = 'spaceInvitationCode'; // TODO(burdon): space_invitation_code
34
-
35
- constructor(private readonly _port: RpcPort) {}
36
-
37
- get layout() {
38
- return this._layout;
39
- }
40
-
41
- get invitationCode() {
42
- return this._invitationCode;
43
- }
44
-
45
- get spaceKey() {
46
- return this._spaceKey;
47
- }
48
-
49
- get invitationUrl() {
50
- return this._invitationUrl!;
51
- }
52
-
53
- get deviceInvitationParam() {
54
- return this._deviceInvitationParam;
55
- }
56
-
57
- get spaceInvitationParam() {
58
- return this._spaceInvitationParam;
59
- }
60
-
61
- setLayout({ layout, invitationCode, spaceKey }: LayoutRequest) {
62
- this._layout = layout;
63
- this._invitationCode = invitationCode;
64
- this._spaceKey = spaceKey;
65
- this.layoutUpdate.emit({ layout, invitationCode, spaceKey });
66
- }
67
-
68
- setInvitationUrl({ invitationUrl, deviceInvitationParam, spaceInvitationParam }: InvitationUrlRequest) {
69
- this._invitationUrl = invitationUrl;
70
- this._deviceInvitationParam = deviceInvitationParam;
71
- this._spaceInvitationParam = spaceInvitationParam;
72
- this.invitationUrlUpdate.emit({ invitationUrl, deviceInvitationParam, spaceInvitationParam });
73
- }
74
-
75
- async setAppContext(context: AppContextRequest) {
76
- invariant(this._appRpc, 'runtime not open');
77
-
78
- await this._appRpc.rpc.AppService.setContext(context);
79
- }
80
-
81
- async open() {
82
- this._appRpc = createProtoRpcPeer({
83
- requested: appServiceBundle,
84
- exposed: shellServiceBundle,
85
- handlers: {
86
- ShellService: {
87
- setLayout: async (request) => {
88
- this._layout = request.layout;
89
- this._invitationCode = request.invitationCode;
90
- this._spaceKey = request.spaceKey;
91
- this.layoutUpdate.emit(request);
92
- },
93
- setInvitationUrl: async (request) => {
94
- this._invitationUrl = request.invitationUrl;
95
- this._deviceInvitationParam = request.deviceInvitationParam;
96
- this._spaceInvitationParam = request.spaceInvitationParam;
97
- this.invitationUrlUpdate.emit(request);
98
- },
99
- },
100
- },
101
- port: this._port,
102
- });
103
-
104
- await this._appRpc.open();
105
- }
106
-
107
- async close() {
108
- await this._appRpc?.close();
109
- this._appRpc = undefined;
110
- }
111
- }