@dxos/client-services 0.1.41 → 0.1.45-next.45667d4
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-T73F4MV4.mjs → chunk-IHSMRQ3L.mjs} +985 -867
- package/dist/lib/browser/chunk-IHSMRQ3L.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +7 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/packlets/testing/index.mjs +121 -297
- package/dist/lib/browser/packlets/testing/index.mjs.map +4 -4
- package/dist/lib/node/index.cjs +589 -469
- 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 +688 -740
- package/dist/lib/node/packlets/testing/index.cjs.map +4 -4
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/packlets/devices/devices-service.d.ts +1 -1
- package/dist/types/src/packlets/devices/devices-service.d.ts.map +1 -1
- package/dist/types/src/packlets/devtools/devtools.d.ts +4 -2
- package/dist/types/src/packlets/devtools/devtools.d.ts.map +1 -1
- package/dist/types/src/packlets/devtools/keys.d.ts.map +1 -1
- package/dist/types/src/packlets/devtools/network.d.ts +5 -4
- package/dist/types/src/packlets/devtools/network.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/authenticator.d.ts +1 -1
- package/dist/types/src/packlets/identity/authenticator.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity-manager.d.ts +2 -4
- package/dist/types/src/packlets/identity/identity-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity.d.ts +1 -1
- package/dist/types/src/packlets/identity/identity.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitation-extension.d.ts +2 -3
- package/dist/types/src/packlets/invitations/invitation-extension.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitations-handler.d.ts +1 -3
- package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts +1 -2
- package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts.map +1 -1
- package/dist/types/src/packlets/network/network-service.d.ts +6 -4
- package/dist/types/src/packlets/network/network-service.d.ts.map +1 -1
- package/dist/types/src/packlets/services/client-rpc-server.d.ts +2 -2
- package/dist/types/src/packlets/services/client-rpc-server.d.ts.map +1 -1
- package/dist/types/src/packlets/services/index.d.ts +0 -1
- package/dist/types/src/packlets/services/index.d.ts.map +1 -1
- package/dist/types/src/packlets/services/local-client-services.d.ts +1 -1
- package/dist/types/src/packlets/services/local-client-services.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-context.d.ts +4 -2
- package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-host.d.ts +16 -9
- package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/data-space-manager.d.ts +12 -7
- package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/data-space.d.ts +15 -10
- package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/genesis.d.ts +5 -0
- package/dist/types/src/packlets/spaces/genesis.d.ts.map +1 -0
- package/dist/types/src/packlets/spaces/notarization-plugin.d.ts +4 -4
- package/dist/types/src/packlets/spaces/notarization-plugin.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/spaces-service.d.ts +2 -1
- package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
- package/dist/types/src/packlets/system/system-service.d.ts +1 -1
- package/dist/types/src/packlets/system/system-service.d.ts.map +1 -1
- package/dist/types/src/packlets/testing/credential-utils.d.ts +1 -1
- package/dist/types/src/packlets/testing/index.d.ts +0 -1
- package/dist/types/src/packlets/testing/index.d.ts.map +1 -1
- package/dist/types/src/packlets/testing/invitation-utils.d.ts +13 -7
- package/dist/types/src/packlets/testing/invitation-utils.d.ts.map +1 -1
- package/dist/types/src/packlets/testing/test-builder.d.ts +35 -32
- package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
- package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts +1 -1
- package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts.map +1 -1
- package/dist/types/src/packlets/vault/iframe-proxy-runtime.d.ts +5 -2
- package/dist/types/src/packlets/vault/iframe-proxy-runtime.d.ts.map +1 -1
- package/dist/types/src/packlets/vault/vault-resource-lock.d.ts +1 -1
- package/dist/types/src/packlets/vault/vault-resource-lock.d.ts.map +1 -1
- package/dist/types/src/packlets/vault/worker-runtime.d.ts +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 -7
- package/dist/types/src/packlets/vault/worker-session.d.ts.map +1 -1
- package/package.json +30 -31
- package/src/index.ts +1 -0
- package/src/packlets/devices/devices-service.ts +5 -5
- package/src/packlets/devtools/devtools.ts +25 -4
- package/src/packlets/devtools/feeds.ts +10 -10
- package/src/packlets/devtools/keys.ts +6 -6
- package/src/packlets/devtools/network.ts +14 -13
- package/src/packlets/devtools/spaces.ts +4 -4
- package/src/packlets/identity/authenticator.test.ts +1 -1
- package/src/packlets/identity/authenticator.ts +2 -2
- package/src/packlets/identity/identity-manager.test.ts +17 -13
- package/src/packlets/identity/identity-manager.ts +21 -22
- package/src/packlets/identity/identity-service.ts +3 -3
- package/src/packlets/identity/identity.test.ts +65 -36
- package/src/packlets/identity/identity.ts +17 -17
- package/src/packlets/invitations/device-invitation-protocol.test.ts +1 -1
- package/src/packlets/invitations/device-invitation-protocol.ts +7 -7
- package/src/packlets/invitations/invitation-extension.ts +16 -27
- package/src/packlets/invitations/invitations-handler.ts +17 -25
- package/src/packlets/invitations/invitations-service.ts +11 -11
- package/src/packlets/invitations/space-invitation-protocol.test.ts +9 -9
- package/src/packlets/invitations/space-invitation-protocol.ts +11 -12
- package/src/packlets/logging/logging-service.ts +8 -3
- package/src/packlets/network/network-service.test.ts +8 -8
- package/src/packlets/network/network-service.ts +20 -8
- package/src/packlets/services/client-rpc-server.ts +5 -5
- package/src/packlets/services/index.ts +0 -1
- package/src/packlets/services/local-client-services.ts +1 -1
- package/src/packlets/services/service-context.test.ts +3 -3
- package/src/packlets/services/service-context.ts +26 -24
- package/src/packlets/services/service-host.test.ts +6 -6
- package/src/packlets/services/service-host.ts +57 -31
- package/src/packlets/services/service-registry.test.ts +20 -38
- package/src/packlets/spaces/data-space-manager.test.ts +17 -29
- package/src/packlets/spaces/data-space-manager.ts +29 -35
- package/src/packlets/spaces/data-space.ts +73 -47
- package/src/packlets/spaces/genesis.ts +81 -0
- package/src/packlets/spaces/notarization-plugin.test.ts +2 -2
- package/src/packlets/spaces/notarization-plugin.ts +12 -12
- package/src/packlets/spaces/spaces-service.test.ts +2 -2
- package/src/packlets/spaces/spaces-service.ts +21 -10
- package/src/packlets/storage/storage.ts +3 -3
- package/src/packlets/system/system-service.test.ts +1 -1
- package/src/packlets/system/system-service.ts +1 -1
- package/src/packlets/testing/credential-utils.ts +4 -4
- package/src/packlets/testing/index.ts +0 -1
- package/src/packlets/testing/invitation-utils.ts +28 -33
- package/src/packlets/testing/test-builder.ts +132 -168
- package/src/packlets/vault/iframe-host-runtime.ts +8 -11
- package/src/packlets/vault/iframe-proxy-runtime.ts +25 -9
- package/src/packlets/vault/shell-runtime.ts +4 -4
- package/src/packlets/vault/vault-resource-lock.ts +2 -2
- package/src/packlets/vault/worker-runtime.ts +7 -9
- package/src/packlets/vault/worker-session.ts +24 -45
- package/dist/lib/browser/chunk-T73F4MV4.mjs.map +0 -7
- package/dist/types/src/packlets/services/utils.d.ts +0 -7
- package/dist/types/src/packlets/services/utils.d.ts.map +0 -1
- package/dist/types/src/packlets/testing/host-test-builder.d.ts +0 -43
- package/dist/types/src/packlets/testing/host-test-builder.d.ts.map +0 -1
- package/dist/types/src/packlets/tests/client-services.test.d.ts +0 -2
- package/dist/types/src/packlets/tests/client-services.test.d.ts.map +0 -1
- package/dist/types/src/packlets/tests/client.test.d.ts +0 -2
- package/dist/types/src/packlets/tests/client.test.d.ts.map +0 -1
- package/dist/types/src/packlets/tests/halo-credentials.test.d.ts +0 -2
- package/dist/types/src/packlets/tests/halo-credentials.test.d.ts.map +0 -1
- package/dist/types/src/packlets/tests/halo-persistent.test.d.ts +0 -2
- package/dist/types/src/packlets/tests/halo-persistent.test.d.ts.map +0 -1
- package/dist/types/src/packlets/tests/halo-profile.test.d.ts +0 -2
- package/dist/types/src/packlets/tests/halo-profile.test.d.ts.map +0 -1
- package/dist/types/src/packlets/tests/invitations.test.d.ts +0 -2
- package/dist/types/src/packlets/tests/invitations.test.d.ts.map +0 -1
- package/dist/types/src/packlets/tests/shared-worker.test.d.ts +0 -2
- package/dist/types/src/packlets/tests/shared-worker.test.d.ts.map +0 -1
- package/dist/types/src/packlets/tests/spaces-invitations.test.d.ts +0 -2
- package/dist/types/src/packlets/tests/spaces-invitations.test.d.ts.map +0 -1
- package/dist/types/src/packlets/tests/spaces.test.d.ts +0 -2
- package/dist/types/src/packlets/tests/spaces.test.d.ts.map +0 -1
- package/dist/types/src/packlets/tests/text.test.d.ts +0 -2
- package/dist/types/src/packlets/tests/text.test.d.ts.map +0 -1
- package/src/packlets/services/utils.ts +0 -53
- package/src/packlets/testing/host-test-builder.ts +0 -163
- package/src/packlets/tests/client-services.test.ts +0 -222
- package/src/packlets/tests/client.test.ts +0 -140
- package/src/packlets/tests/halo-credentials.test.ts +0 -94
- package/src/packlets/tests/halo-persistent.test.ts +0 -53
- package/src/packlets/tests/halo-profile.test.ts +0 -48
- package/src/packlets/tests/invitations.test.ts +0 -389
- package/src/packlets/tests/shared-worker.test.ts +0 -92
- package/src/packlets/tests/spaces-invitations.test.ts +0 -46
- package/src/packlets/tests/spaces.test.ts +0 -147
- package/src/packlets/tests/text.test.ts +0 -206
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
import assert from 'node:assert';
|
|
6
6
|
|
|
7
7
|
import { asyncTimeout, Trigger } from '@dxos/async';
|
|
8
|
-
import { iframeServiceBundle, IframeServiceBundle, workerServiceBundle } from '@dxos/client';
|
|
8
|
+
import { iframeServiceBundle, IframeServiceBundle, workerServiceBundle } from '@dxos/client-protocol';
|
|
9
9
|
import { log, logInfo } from '@dxos/log';
|
|
10
10
|
import { BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';
|
|
11
11
|
import { createProtoRpcPeer, ProtoRpcPeer, RpcPort } from '@dxos/rpc';
|
|
12
|
-
import { Callback } from '@dxos/util';
|
|
12
|
+
import { Callback, MaybePromise } from '@dxos/util';
|
|
13
13
|
|
|
14
14
|
import { ClientServicesHost } from '../services';
|
|
15
15
|
import { ClientRpcServer, ClientRpcServerParams } from '../services/client-rpc-server';
|
|
@@ -20,9 +20,6 @@ export type WorkerSessionParams = {
|
|
|
20
20
|
appPort: RpcPort;
|
|
21
21
|
shellPort: RpcPort;
|
|
22
22
|
readySignal: Trigger<Error | undefined>;
|
|
23
|
-
options?: {
|
|
24
|
-
heartbeatInterval: number;
|
|
25
|
-
};
|
|
26
23
|
};
|
|
27
24
|
|
|
28
25
|
/**
|
|
@@ -34,29 +31,19 @@ export class WorkerSession {
|
|
|
34
31
|
private readonly _iframeRpc: ProtoRpcPeer<IframeServiceBundle>;
|
|
35
32
|
private readonly _startTrigger = new Trigger();
|
|
36
33
|
private readonly _serviceHost: ClientServicesHost;
|
|
37
|
-
private readonly _options: NonNullable<WorkerSessionParams['options']>;
|
|
38
|
-
private _heartbeatTimer?: NodeJS.Timeout;
|
|
39
34
|
|
|
40
35
|
public readonly onClose = new Callback<() => Promise<void>>();
|
|
41
36
|
|
|
42
37
|
@logInfo
|
|
43
38
|
public origin?: string;
|
|
44
39
|
|
|
40
|
+
@logInfo
|
|
41
|
+
public lockKey?: string;
|
|
42
|
+
|
|
45
43
|
public bridgeService?: BridgeService;
|
|
46
44
|
|
|
47
|
-
constructor({
|
|
48
|
-
serviceHost,
|
|
49
|
-
systemPort,
|
|
50
|
-
appPort,
|
|
51
|
-
shellPort,
|
|
52
|
-
readySignal,
|
|
53
|
-
options = {
|
|
54
|
-
heartbeatInterval: 1_000
|
|
55
|
-
}
|
|
56
|
-
}: WorkerSessionParams) {
|
|
57
|
-
assert(options);
|
|
45
|
+
constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }: WorkerSessionParams) {
|
|
58
46
|
assert(serviceHost);
|
|
59
|
-
this._options = options;
|
|
60
47
|
this._serviceHost = serviceHost;
|
|
61
48
|
|
|
62
49
|
const middleware: Pick<ClientRpcServerParams, 'handleCall' | 'handleStream'> = {
|
|
@@ -75,18 +62,18 @@ export class WorkerSession {
|
|
|
75
62
|
}
|
|
76
63
|
|
|
77
64
|
return handler(method, params);
|
|
78
|
-
}
|
|
65
|
+
},
|
|
79
66
|
};
|
|
80
67
|
|
|
81
68
|
this._clientRpc = new ClientRpcServer({
|
|
82
69
|
serviceRegistry: this._serviceHost.serviceRegistry,
|
|
83
70
|
port: appPort,
|
|
84
|
-
...middleware
|
|
71
|
+
...middleware,
|
|
85
72
|
});
|
|
86
73
|
this._shellClientRpc = new ClientRpcServer({
|
|
87
74
|
serviceRegistry: this._serviceHost.serviceRegistry,
|
|
88
75
|
port: shellPort,
|
|
89
|
-
...middleware
|
|
76
|
+
...middleware,
|
|
90
77
|
});
|
|
91
78
|
|
|
92
79
|
this._iframeRpc = createProtoRpcPeer({
|
|
@@ -96,6 +83,7 @@ export class WorkerSession {
|
|
|
96
83
|
WorkerService: {
|
|
97
84
|
start: async (request) => {
|
|
98
85
|
this.origin = request.origin;
|
|
86
|
+
this.lockKey = request.lockKey;
|
|
99
87
|
this._startTrigger.wake();
|
|
100
88
|
},
|
|
101
89
|
|
|
@@ -107,11 +95,11 @@ export class WorkerSession {
|
|
|
107
95
|
log.catch(err);
|
|
108
96
|
}
|
|
109
97
|
});
|
|
110
|
-
}
|
|
111
|
-
}
|
|
98
|
+
},
|
|
99
|
+
},
|
|
112
100
|
},
|
|
113
101
|
port: systemPort,
|
|
114
|
-
timeout: 1000 // With low timeout heartbeat may fail if the tab's thread is saturated.
|
|
102
|
+
timeout: 1000, // With low timeout heartbeat may fail if the tab's thread is saturated.
|
|
115
103
|
});
|
|
116
104
|
|
|
117
105
|
this.bridgeService = this._iframeRpc.rpc.BridgeService;
|
|
@@ -122,22 +110,9 @@ export class WorkerSession {
|
|
|
122
110
|
await Promise.all([this._clientRpc.open(), this._iframeRpc.open(), this._maybeOpenShell()]);
|
|
123
111
|
|
|
124
112
|
await this._startTrigger.wait({ timeout: 3_000 });
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
// How do we detect if the client's tab closed?
|
|
129
|
-
this._heartbeatTimer = setInterval(async () => {
|
|
130
|
-
try {
|
|
131
|
-
await this._iframeRpc.rpc.IframeService.heartbeat();
|
|
132
|
-
} catch (err) {
|
|
133
|
-
log.warn('Heartbeat failed', { err });
|
|
134
|
-
try {
|
|
135
|
-
await this.close();
|
|
136
|
-
} catch (err: any) {
|
|
137
|
-
log.catch(err);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}, this._options.heartbeatInterval);
|
|
113
|
+
if (this.lockKey) {
|
|
114
|
+
void this._afterLockReleases(this.lockKey, () => this.close());
|
|
115
|
+
}
|
|
141
116
|
}
|
|
142
117
|
|
|
143
118
|
async close() {
|
|
@@ -148,10 +123,6 @@ export class WorkerSession {
|
|
|
148
123
|
log.catch(err);
|
|
149
124
|
}
|
|
150
125
|
|
|
151
|
-
if (this._heartbeatTimer !== undefined) {
|
|
152
|
-
clearInterval(this._heartbeatTimer);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
126
|
await Promise.all([this._clientRpc.close(), this._iframeRpc.close()]);
|
|
156
127
|
}
|
|
157
128
|
|
|
@@ -162,4 +133,12 @@ export class WorkerSession {
|
|
|
162
133
|
log.info('No shell connected.');
|
|
163
134
|
}
|
|
164
135
|
}
|
|
136
|
+
|
|
137
|
+
private _afterLockReleases(lockKey: string, callback: () => MaybePromise<void>): Promise<void> {
|
|
138
|
+
return navigator.locks
|
|
139
|
+
.request(lockKey, () => {
|
|
140
|
+
// No-op.
|
|
141
|
+
})
|
|
142
|
+
.then(callback);
|
|
143
|
+
}
|
|
165
144
|
}
|