@dxos/client-services 0.1.30-next.7c60cd3 → 0.1.30

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 (161) hide show
  1. package/dist/lib/browser/{chunk-JLLUQQXD.mjs → chunk-DFO3FW2W.mjs} +949 -1150
  2. package/dist/lib/browser/chunk-DFO3FW2W.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +5 -41
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/packlets/testing/index.mjs +221 -50
  6. package/dist/lib/browser/packlets/testing/index.mjs.map +4 -4
  7. package/dist/lib/node/index.cjs +837 -1062
  8. package/dist/lib/node/index.cjs.map +4 -4
  9. package/dist/lib/node/meta.json +1 -1
  10. package/dist/lib/node/packlets/testing/index.cjs +2937 -2719
  11. package/dist/lib/node/packlets/testing/index.cjs.map +4 -4
  12. package/dist/types/src/packlets/invitations/device-invitations-handler.d.ts +1 -2
  13. package/dist/types/src/packlets/invitations/device-invitations-handler.d.ts.map +1 -1
  14. package/dist/types/src/packlets/invitations/device-invitations-service.d.ts +1 -1
  15. package/dist/types/src/packlets/invitations/device-invitations-service.d.ts.map +1 -1
  16. package/dist/types/src/packlets/invitations/index.d.ts +0 -6
  17. package/dist/types/src/packlets/invitations/index.d.ts.map +1 -1
  18. package/dist/types/src/packlets/invitations/invitations-service.d.ts +2 -3
  19. package/dist/types/src/packlets/invitations/invitations-service.d.ts.map +1 -1
  20. package/dist/types/src/packlets/invitations/space-invitations-handler.d.ts +2 -4
  21. package/dist/types/src/packlets/invitations/space-invitations-handler.d.ts.map +1 -1
  22. package/dist/types/src/packlets/invitations/space-invitations-service.d.ts +2 -3
  23. package/dist/types/src/packlets/invitations/space-invitations-service.d.ts.map +1 -1
  24. package/dist/types/src/packlets/services/client-rpc-server.d.ts +22 -0
  25. package/dist/types/src/packlets/services/client-rpc-server.d.ts.map +1 -0
  26. package/dist/types/src/packlets/services/index.d.ts +2 -3
  27. package/dist/types/src/packlets/services/index.d.ts.map +1 -1
  28. package/dist/types/src/packlets/services/local-client-services.d.ts +3 -2
  29. package/dist/types/src/packlets/services/local-client-services.d.ts.map +1 -1
  30. package/dist/types/src/packlets/services/service-context.d.ts +1 -1
  31. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  32. package/dist/types/src/packlets/services/service-host.d.ts +22 -8
  33. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  34. package/dist/types/src/packlets/services/service-registry.d.ts +3 -1
  35. package/dist/types/src/packlets/services/service-registry.d.ts.map +1 -1
  36. package/dist/types/src/packlets/services/utils.d.ts +7 -0
  37. package/dist/types/src/packlets/services/utils.d.ts.map +1 -0
  38. package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
  39. package/dist/types/src/packlets/spaces/data-space.d.ts +8 -1
  40. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  41. package/dist/types/src/packlets/spaces/index.d.ts +2 -0
  42. package/dist/types/src/packlets/spaces/index.d.ts.map +1 -1
  43. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts.map +1 -1
  44. package/dist/types/src/packlets/spaces/spaces-service.d.ts +4 -1
  45. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  46. package/dist/types/src/packlets/system/system-service.d.ts +2 -2
  47. package/dist/types/src/packlets/system/system-service.d.ts.map +1 -1
  48. package/dist/types/src/packlets/testing/host-test-builder.d.ts +43 -0
  49. package/dist/types/src/packlets/testing/host-test-builder.d.ts.map +1 -0
  50. package/dist/types/src/packlets/testing/index.d.ts +1 -0
  51. package/dist/types/src/packlets/testing/index.d.ts.map +1 -1
  52. package/dist/types/src/packlets/testing/invitation-utils.d.ts +1 -1
  53. package/dist/types/src/packlets/testing/invitation-utils.d.ts.map +1 -1
  54. package/dist/types/src/packlets/testing/test-builder.d.ts +32 -34
  55. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  56. package/dist/types/src/packlets/tests/client-services.test.d.ts +2 -0
  57. package/dist/types/src/packlets/tests/client-services.test.d.ts.map +1 -0
  58. package/dist/types/src/packlets/tests/client.test.d.ts +2 -0
  59. package/dist/types/src/packlets/tests/client.test.d.ts.map +1 -0
  60. package/dist/types/src/packlets/tests/halo-credentials.test.d.ts +2 -0
  61. package/dist/types/src/packlets/tests/halo-credentials.test.d.ts.map +1 -0
  62. package/dist/types/src/packlets/tests/halo-persistent.test.d.ts +2 -0
  63. package/dist/types/src/packlets/tests/halo-persistent.test.d.ts.map +1 -0
  64. package/dist/types/src/packlets/tests/halo-profile.test.d.ts +2 -0
  65. package/dist/types/src/packlets/tests/halo-profile.test.d.ts.map +1 -0
  66. package/dist/types/src/packlets/tests/shared-worker.test.d.ts +2 -0
  67. package/dist/types/src/packlets/tests/shared-worker.test.d.ts.map +1 -0
  68. package/dist/types/src/packlets/tests/spaces-invitations.test.d.ts +2 -0
  69. package/dist/types/src/packlets/tests/spaces-invitations.test.d.ts.map +1 -0
  70. package/dist/types/src/packlets/tests/spaces.test.d.ts +2 -0
  71. package/dist/types/src/packlets/tests/spaces.test.d.ts.map +1 -0
  72. package/dist/types/src/packlets/tests/text.test.d.ts +2 -0
  73. package/dist/types/src/packlets/tests/text.test.d.ts.map +1 -0
  74. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts +0 -1
  75. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts.map +1 -1
  76. package/dist/types/src/packlets/vault/iframe-proxy-runtime.d.ts.map +1 -1
  77. package/dist/types/src/packlets/vault/index.d.ts +0 -2
  78. package/dist/types/src/packlets/vault/index.d.ts.map +1 -1
  79. package/dist/types/src/packlets/vault/shell-runtime.d.ts.map +1 -1
  80. package/dist/types/src/packlets/vault/worker-runtime.d.ts.map +1 -1
  81. package/dist/types/src/packlets/vault/worker-session.d.ts +4 -4
  82. package/dist/types/src/packlets/vault/worker-session.d.ts.map +1 -1
  83. package/package.json +31 -30
  84. package/src/packlets/invitations/device-invitations-handler.ts +10 -9
  85. package/src/packlets/invitations/device-invitations-service.test.ts +1 -1
  86. package/src/packlets/invitations/device-invitations-service.ts +1 -1
  87. package/src/packlets/invitations/index.ts +0 -6
  88. package/src/packlets/invitations/invitations-service.ts +7 -2
  89. package/src/packlets/invitations/space-invitations-handler.test.ts +3 -3
  90. package/src/packlets/invitations/space-invitations-handler.ts +11 -11
  91. package/src/packlets/invitations/space-invitations-service.test.ts +1 -1
  92. package/src/packlets/invitations/space-invitations-service.ts +2 -3
  93. package/src/packlets/services/client-rpc-server.ts +91 -0
  94. package/src/packlets/services/index.ts +2 -3
  95. package/src/packlets/services/local-client-services.ts +5 -1
  96. package/src/packlets/services/service-context.test.ts +4 -4
  97. package/src/packlets/services/service-context.ts +1 -1
  98. package/src/packlets/services/service-host.ts +52 -19
  99. package/src/packlets/services/service-registry.test.ts +2 -2
  100. package/src/packlets/services/service-registry.ts +9 -1
  101. package/src/packlets/services/utils.ts +53 -0
  102. package/src/packlets/spaces/data-space-manager.test.ts +64 -4
  103. package/src/packlets/spaces/data-space-manager.ts +11 -7
  104. package/src/packlets/spaces/data-space.ts +13 -1
  105. package/src/packlets/spaces/index.ts +2 -0
  106. package/src/packlets/spaces/notarization-plugin.ts +9 -2
  107. package/src/packlets/spaces/spaces-service.ts +25 -0
  108. package/src/packlets/system/system-service.ts +3 -3
  109. package/src/packlets/testing/host-test-builder.ts +163 -0
  110. package/src/packlets/testing/index.ts +1 -0
  111. package/src/packlets/testing/invitation-utils.ts +1 -2
  112. package/src/packlets/testing/test-builder.ts +156 -138
  113. package/src/packlets/tests/client-services.test.ts +252 -0
  114. package/src/packlets/tests/client.test.ts +143 -0
  115. package/src/packlets/tests/halo-credentials.test.ts +94 -0
  116. package/src/packlets/tests/halo-persistent.test.ts +53 -0
  117. package/src/packlets/tests/halo-profile.test.ts +74 -0
  118. package/src/packlets/tests/shared-worker.test.ts +93 -0
  119. package/src/packlets/tests/spaces-invitations.test.ts +64 -0
  120. package/src/packlets/tests/spaces.test.ts +136 -0
  121. package/src/packlets/tests/text.test.ts +206 -0
  122. package/src/packlets/vault/iframe-host-runtime.ts +26 -34
  123. package/src/packlets/vault/iframe-proxy-runtime.ts +1 -1
  124. package/src/packlets/vault/index.ts +0 -2
  125. package/src/packlets/vault/shell-runtime.ts +1 -2
  126. package/src/packlets/vault/worker-runtime.ts +5 -15
  127. package/src/packlets/vault/worker-session.ts +39 -23
  128. package/dist/lib/browser/chunk-JLLUQQXD.mjs.map +0 -7
  129. package/dist/types/src/packlets/invitations/device-invitations-proxy.d.ts +0 -8
  130. package/dist/types/src/packlets/invitations/device-invitations-proxy.d.ts.map +0 -1
  131. package/dist/types/src/packlets/invitations/encoder.d.ts +0 -9
  132. package/dist/types/src/packlets/invitations/encoder.d.ts.map +0 -1
  133. package/dist/types/src/packlets/invitations/encoder.test.d.ts +0 -2
  134. package/dist/types/src/packlets/invitations/encoder.test.d.ts.map +0 -1
  135. package/dist/types/src/packlets/invitations/invitations-handler.d.ts +0 -56
  136. package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +0 -1
  137. package/dist/types/src/packlets/invitations/invitations-proxy.d.ts +0 -18
  138. package/dist/types/src/packlets/invitations/invitations-proxy.d.ts.map +0 -1
  139. package/dist/types/src/packlets/invitations/invitations.d.ts +0 -55
  140. package/dist/types/src/packlets/invitations/invitations.d.ts.map +0 -1
  141. package/dist/types/src/packlets/invitations/space-invitations-proxy.d.ts +0 -11
  142. package/dist/types/src/packlets/invitations/space-invitations-proxy.d.ts.map +0 -1
  143. package/dist/types/src/packlets/services/service-definitions.d.ts +0 -30
  144. package/dist/types/src/packlets/services/service-definitions.d.ts.map +0 -1
  145. package/dist/types/src/packlets/services/service-proxy.d.ts +0 -17
  146. package/dist/types/src/packlets/services/service-proxy.d.ts.map +0 -1
  147. package/dist/types/src/packlets/vault/services.d.ts +0 -21
  148. package/dist/types/src/packlets/vault/services.d.ts.map +0 -1
  149. package/dist/types/src/packlets/vault/shell-controller.d.ts +0 -18
  150. package/dist/types/src/packlets/vault/shell-controller.d.ts.map +0 -1
  151. package/src/packlets/invitations/device-invitations-proxy.ts +0 -14
  152. package/src/packlets/invitations/encoder.test.ts +0 -23
  153. package/src/packlets/invitations/encoder.ts +0 -26
  154. package/src/packlets/invitations/invitations-handler.ts +0 -68
  155. package/src/packlets/invitations/invitations-proxy.ts +0 -159
  156. package/src/packlets/invitations/invitations.ts +0 -113
  157. package/src/packlets/invitations/space-invitations-proxy.ts +0 -16
  158. package/src/packlets/services/service-definitions.ts +0 -68
  159. package/src/packlets/services/service-proxy.ts +0 -54
  160. package/src/packlets/vault/services.ts +0 -42
  161. package/src/packlets/vault/shell-controller.ts +0 -56
@@ -1,113 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- import assert from 'node:assert';
6
-
7
- import {
8
- AsyncEvents,
9
- CancellableObservable,
10
- CancellableObservableEvents,
11
- CancellableObservableProvider
12
- } from '@dxos/async';
13
- import type { Stream } from '@dxos/codec-protobuf';
14
- import { AuthenticationRequest, CancelInvitationRequest, Invitation } from '@dxos/protocols/proto/dxos/client/services';
15
-
16
- export const AUTHENTICATION_CODE_LENGTH = 6;
17
-
18
- export const INVITATION_TIMEOUT = 3 * 60_000; // 3 mins.
19
-
20
- // TODO(burdon): Don't close until RPC has complete (bug).
21
- export const ON_CLOSE_DELAY = 1000;
22
-
23
- export interface InvitationsService {
24
- createInvitation(invitation: Invitation): Stream<Invitation>;
25
- authenticate(request: AuthenticationRequest): Promise<void>;
26
- acceptInvitation(invitation: Invitation): Stream<Invitation>;
27
- cancelInvitation(request: CancelInvitationRequest): Promise<void>;
28
- }
29
-
30
- /**
31
- * Common invitation events (callbacks) for creating and accepting invitations.
32
- */
33
- // TODO(burdon): Remove optionals.
34
- export interface InvitationEvents extends AsyncEvents, CancellableObservableEvents {
35
- onConnecting?(invitation: Invitation): void;
36
- onConnected?(invitation: Invitation): void;
37
- onAuthenticating?(invitation: Invitation): void;
38
- onSuccess(invitation: Invitation): void; // TODO(burdon): Collides with AsyncEvents.
39
- }
40
-
41
- /**
42
- * Base class for all invitation observables and providers.
43
- * Observable that supports inspection of the current value.
44
- */
45
- export interface CancellableInvitationObservable extends CancellableObservable<InvitationEvents> {
46
- get invitation(): Invitation | undefined;
47
- }
48
-
49
- // TODO(wittjosiah): Update with Observable.value.
50
- export class InvitationObservableProvider
51
- extends CancellableObservableProvider<InvitationEvents>
52
- implements CancellableInvitationObservable
53
- {
54
- private _invitation?: Invitation;
55
-
56
- get invitation(): Invitation | undefined {
57
- return this._invitation;
58
- }
59
-
60
- setInvitation(invitation: Invitation) {
61
- this._invitation = invitation;
62
- }
63
- }
64
-
65
- /**
66
- * Cancelable observer that relays authentication requests.
67
- */
68
- export interface AuthenticatingInvitationObservable extends CancellableInvitationObservable {
69
- authenticate(code: string): Promise<void>;
70
- }
71
-
72
- export interface AuthenticatingInvitationProviderActions {
73
- onCancel(): Promise<void>;
74
- onAuthenticate(code: string): Promise<void>;
75
- }
76
-
77
- export class AuthenticatingInvitationProvider
78
- extends InvitationObservableProvider
79
- implements AuthenticatingInvitationObservable
80
- {
81
- // prettier-ignore
82
- constructor(
83
- private readonly _actions: AuthenticatingInvitationProviderActions
84
- ) {
85
- super(() => this._actions.onCancel());
86
- }
87
-
88
- async authenticate(authenticationCode: string): Promise<void> {
89
- return this._actions.onAuthenticate(authenticationCode);
90
- }
91
- }
92
-
93
- /**
94
- * Testing util to wrap non-authenticating observable with promise.
95
- * Don't use this in production code.
96
- * @deprecated
97
- */
98
- // TODO(burdon): Throw error if auth requested.
99
- export const wrapObservable = async (observable: CancellableInvitationObservable): Promise<Invitation> => {
100
- return new Promise((resolve, reject) => {
101
- const unsubscribe = observable.subscribe({
102
- onSuccess: (invitation: Invitation) => {
103
- assert(invitation.state === Invitation.State.SUCCESS);
104
- unsubscribe();
105
- resolve(invitation);
106
- },
107
- onError: (err: Error) => {
108
- unsubscribe();
109
- reject(err);
110
- }
111
- });
112
- });
113
- };
@@ -1,16 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- import { PublicKey } from '@dxos/keys';
6
-
7
- import { AbstractInvitationsProxy } from './invitations-proxy';
8
-
9
- /**
10
- * Adapts invitation service observable to client/service stream.
11
- */
12
- export class SpaceInvitationsProxy extends AbstractInvitationsProxy<PublicKey> {
13
- getInvitationOptions(context: PublicKey) {
14
- return { spaceKey: context };
15
- }
16
- }
@@ -1,68 +0,0 @@
1
- //
2
- // Copyright 2020 DXOS.org
3
- //
4
-
5
- import { schema } from '@dxos/protocols';
6
- import {
7
- DevicesService,
8
- DeviceInvitationsService,
9
- IdentityService,
10
- NetworkService,
11
- SpaceInvitationsService,
12
- SpacesService,
13
- SystemService
14
- } from '@dxos/protocols/proto/dxos/client/services';
15
- import { DevtoolsHost, TracingService } from '@dxos/protocols/proto/dxos/devtools/host';
16
- import { DataService } from '@dxos/protocols/proto/dxos/echo/service';
17
- import { createServiceBundle, ServiceBundle } from '@dxos/rpc';
18
-
19
- //
20
- // NOTE: Should contain client/proxy dependencies only.
21
- //
22
-
23
- export type ClientServices = {
24
- SystemService: SystemService;
25
-
26
- IdentityService: IdentityService;
27
- DeviceInvitationsService: DeviceInvitationsService;
28
- DevicesService: DevicesService;
29
-
30
- SpaceInvitationsService: SpaceInvitationsService;
31
- SpacesService: SpacesService;
32
- DataService: DataService;
33
-
34
- NetworkService: NetworkService;
35
-
36
- // TODO(burdon): Deprecated.
37
- DevtoolsHost: DevtoolsHost;
38
- TracingService: TracingService;
39
- };
40
-
41
- /**
42
- * Provide access to client services definitions and service handler.
43
- */
44
- export interface ClientServicesProvider {
45
- descriptors: ServiceBundle<ClientServices>;
46
- services: Partial<ClientServices>;
47
-
48
- open(): Promise<void>;
49
- close(): Promise<void>;
50
- }
51
-
52
- /**
53
- * Services supported by host.
54
- */
55
- export const clientServiceBundle = createServiceBundle<ClientServices>({
56
- SystemService: schema.getService('dxos.client.services.SystemService'),
57
- IdentityService: schema.getService('dxos.client.services.IdentityService'),
58
- DeviceInvitationsService: schema.getService('dxos.client.services.DeviceInvitationsService'),
59
- DevicesService: schema.getService('dxos.client.services.DevicesService'),
60
- SpaceInvitationsService: schema.getService('dxos.client.services.SpaceInvitationsService'),
61
- SpacesService: schema.getService('dxos.client.services.SpacesService'),
62
- DataService: schema.getService('dxos.echo.service.DataService'),
63
- NetworkService: schema.getService('dxos.client.services.NetworkService'),
64
-
65
- // TODO(burdon): Deprecated.
66
- DevtoolsHost: schema.getService('dxos.devtools.host.DevtoolsHost'),
67
- TracingService: schema.getService('dxos.devtools.host.TracingService')
68
- });
@@ -1,54 +0,0 @@
1
- //
2
- // Copyright 2021 DXOS.org
3
- //
4
-
5
- import { asyncTimeout } from '@dxos/async';
6
- import { RemoteServiceConnectionTimeout } from '@dxos/errors';
7
- import { createProtoRpcPeer, ProtoRpcPeer, RpcPort } from '@dxos/rpc';
8
-
9
- import { ClientServicesProvider, ClientServices, clientServiceBundle } from './service-definitions';
10
-
11
- /**
12
- * Implements services that are not local to the app.
13
- * For example, the services can be located in Wallet Extension.
14
- */
15
- // TODO(burdon): Separate construction of port from availability of services.
16
- // TODO(burdon): Create `@dxos/client-proxy` package with thin-client only dependencies (for code-splitting).
17
- export class ClientServicesProxy implements ClientServicesProvider {
18
- private readonly _proxy: ProtoRpcPeer<ClientServices>;
19
-
20
- // prettier-ignore
21
- constructor(
22
- port: RpcPort,
23
- // NOTE: With lower timeout the shared worker does not have enough time to start.
24
- // TODO(dmaretskyi): Find better ways to detected when the worker has finished loading. It might take a while on slow connections.
25
- private readonly _timeout = 30_000
26
- ) {
27
- this._proxy = createProtoRpcPeer({
28
- requested: clientServiceBundle,
29
- exposed: {},
30
- handlers: {},
31
- port
32
- });
33
- }
34
-
35
- get proxy() {
36
- return this._proxy;
37
- }
38
-
39
- get descriptors() {
40
- return clientServiceBundle;
41
- }
42
-
43
- get services() {
44
- return this._proxy.rpc;
45
- }
46
-
47
- async open() {
48
- await asyncTimeout(this._proxy.open(), this._timeout, new RemoteServiceConnectionTimeout());
49
- }
50
-
51
- async close() {
52
- await this._proxy.close();
53
- }
54
- }
@@ -1,42 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- import { schema } from '@dxos/protocols';
6
- import type { IframeService, AppService, ShellService, WorkerService } from '@dxos/protocols/proto/dxos/iframe';
7
- import type { BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';
8
- import { ServiceBundle } from '@dxos/rpc';
9
-
10
- export type IframeServiceBundle = {
11
- IframeService: IframeService;
12
- BridgeService: BridgeService;
13
- };
14
-
15
- export const iframeServiceBundle: ServiceBundle<IframeServiceBundle> = {
16
- IframeService: schema.getService('dxos.iframe.IframeService'),
17
- BridgeService: schema.getService('dxos.mesh.bridge.BridgeService')
18
- };
19
-
20
- export type WorkerServiceBundle = {
21
- WorkerService: WorkerService;
22
- };
23
-
24
- export const workerServiceBundle: ServiceBundle<WorkerServiceBundle> = {
25
- WorkerService: schema.getService('dxos.iframe.WorkerService')
26
- };
27
-
28
- export type AppServiceBundle = {
29
- AppService: AppService;
30
- };
31
-
32
- export const appServiceBundle: ServiceBundle<AppServiceBundle> = {
33
- AppService: schema.getService('dxos.iframe.AppService')
34
- };
35
-
36
- export type ShellServiceBundle = {
37
- ShellService: ShellService;
38
- };
39
-
40
- export const shellServiceBundle: ServiceBundle<ShellServiceBundle> = {
41
- ShellService: schema.getService('dxos.iframe.ShellService')
42
- };
@@ -1,56 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { Event } from '@dxos/async';
6
- import { log } from '@dxos/log';
7
- import { AppContextRequest, LayoutRequest, ShellDisplay, ShellLayout } from '@dxos/protocols/proto/dxos/iframe';
8
- import { createProtoRpcPeer, ProtoRpcPeer, RpcPort } from '@dxos/rpc';
9
-
10
- import { appServiceBundle, shellServiceBundle, ShellServiceBundle } from './services';
11
-
12
- /**
13
- * Provide access to the shell via RPC connection.
14
- */
15
- export class ShellController {
16
- readonly contextUpdate = new Event<AppContextRequest>();
17
- private _shellRpc?: ProtoRpcPeer<ShellServiceBundle>;
18
- private _display = ShellDisplay.NONE;
19
-
20
- constructor(private readonly _port: RpcPort) {}
21
-
22
- get display() {
23
- return this._display;
24
- }
25
-
26
- async setLayout(layout: ShellLayout, options: Omit<LayoutRequest, 'layout'> = {}) {
27
- log('set layout', { layout, ...options });
28
- this._display = ShellDisplay.FULLSCREEN;
29
- this.contextUpdate.emit({ display: this._display });
30
- await this._shellRpc?.rpc.ShellService.setLayout({ layout, ...options });
31
- }
32
-
33
- async open() {
34
- this._shellRpc = createProtoRpcPeer({
35
- requested: shellServiceBundle,
36
- exposed: appServiceBundle,
37
- handlers: {
38
- AppService: {
39
- setContext: async (request) => {
40
- log('set context', request);
41
- this._display = request.display;
42
- this.contextUpdate.emit(request);
43
- }
44
- }
45
- },
46
- port: this._port
47
- });
48
-
49
- await this._shellRpc.open();
50
- }
51
-
52
- async close() {
53
- await this._shellRpc?.close();
54
- this._shellRpc = undefined;
55
- }
56
- }