@dxos/client-services 0.1.56-main.83e9b8a → 0.1.56-main.a25bb93
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-P26UKXYR.mjs → chunk-MAHWP5I6.mjs} +970 -383
- package/dist/lib/browser/chunk-MAHWP5I6.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +50 -31
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/packlets/testing/index.mjs +12 -3
- package/dist/lib/browser/packlets/testing/index.mjs.map +3 -3
- package/dist/lib/node/index.cjs +1113 -510
- 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 +1260 -667
- package/dist/lib/node/packlets/testing/index.cjs.map +4 -4
- package/dist/types/src/packlets/identity/identity-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity-service.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/device-invitation-protocol.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitation-extension.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitations-service.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts.map +1 -1
- package/dist/types/src/packlets/logging/logging-service.d.ts +6 -2
- package/dist/types/src/packlets/logging/logging-service.d.ts.map +1 -1
- package/dist/types/src/packlets/services/diagnostics.d.ts +46 -0
- package/dist/types/src/packlets/services/diagnostics.d.ts.map +1 -0
- package/dist/types/src/packlets/services/index.d.ts +1 -0
- package/dist/types/src/packlets/services/index.d.ts.map +1 -1
- package/dist/types/src/packlets/services/platform.d.ts +16 -0
- package/dist/types/src/packlets/services/platform.d.ts.map +1 -0
- package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-host.d.ts +4 -2
- package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
- package/dist/types/src/packlets/services/util.d.ts +6 -0
- package/dist/types/src/packlets/services/util.d.ts.map +1 -0
- package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/notarization-plugin.d.ts.map +1 -1
- package/dist/types/src/packlets/system/system-service.d.ts +12 -2
- package/dist/types/src/packlets/system/system-service.d.ts.map +1 -1
- package/dist/types/src/packlets/testing/invitation-utils.d.ts.map +1 -1
- package/dist/types/src/packlets/vault/shell-runtime.d.ts.map +1 -1
- package/dist/types/src/packlets/vault/worker-session.d.ts.map +1 -1
- package/dist/types/src/version.d.ts +2 -0
- package/dist/types/src/version.d.ts.map +1 -0
- package/package.json +33 -33
- package/src/packlets/identity/authenticator.test.ts +2 -2
- package/src/packlets/identity/identity-manager.ts +1 -2
- package/src/packlets/identity/identity-service.ts +1 -2
- package/src/packlets/identity/identity.ts +1 -2
- package/src/packlets/invitations/device-invitation-protocol.ts +1 -2
- package/src/packlets/invitations/invitation-extension.ts +1 -2
- package/src/packlets/invitations/invitations-handler.ts +1 -2
- package/src/packlets/invitations/invitations-service.ts +1 -2
- package/src/packlets/invitations/space-invitation-protocol.ts +1 -2
- package/src/packlets/locks/node.ts +1 -1
- package/src/packlets/logging/logging-service.ts +17 -9
- package/src/packlets/services/diagnostics.ts +211 -0
- package/src/packlets/services/index.ts +1 -0
- package/src/packlets/services/platform.ts +48 -0
- package/src/packlets/services/service-context.ts +3 -5
- package/src/packlets/services/service-host.test.ts +5 -5
- package/src/packlets/services/service-host.ts +23 -20
- package/src/packlets/services/service-registry.test.ts +1 -0
- package/src/packlets/services/util.ts +33 -0
- package/src/packlets/spaces/data-space-manager.ts +1 -2
- package/src/packlets/spaces/notarization-plugin.ts +1 -2
- package/src/packlets/system/system-service.test.ts +1 -0
- package/src/packlets/system/system-service.ts +34 -2
- package/src/packlets/testing/invitation-utils.ts +1 -2
- package/src/packlets/vault/shell-runtime.ts +1 -2
- package/src/packlets/vault/worker-session.ts +7 -3
- package/src/version.ts +1 -0
- package/dist/lib/browser/chunk-P26UKXYR.mjs.map +0 -7
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
TrustedKeySetAuthVerifier,
|
|
21
21
|
createAuthProvider,
|
|
22
22
|
createDefaultModelFactory,
|
|
23
|
+
createDiagnostics,
|
|
23
24
|
createStorageObjects,
|
|
24
25
|
getNetworkPeers,
|
|
25
26
|
isLocked,
|
|
@@ -30,7 +31,7 @@ import {
|
|
|
30
31
|
subscribeToSignal,
|
|
31
32
|
subscribeToSpaces,
|
|
32
33
|
subscribeToSwarmInfo
|
|
33
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-MAHWP5I6.mjs";
|
|
34
35
|
|
|
35
36
|
// packages/sdk/client-services/src/packlets/vault/iframe-host-runtime.ts
|
|
36
37
|
import { Trigger } from "@dxos/async";
|
|
@@ -41,11 +42,12 @@ import { createWebRTCTransportFactory } from "@dxos/network-manager";
|
|
|
41
42
|
import { getAsyncValue } from "@dxos/util";
|
|
42
43
|
|
|
43
44
|
// packages/sdk/client-services/src/packlets/vault/shell-runtime.ts
|
|
44
|
-
import invariant from "tiny-invariant";
|
|
45
45
|
import { Event } from "@dxos/async";
|
|
46
46
|
import { appServiceBundle, shellServiceBundle } from "@dxos/client-protocol";
|
|
47
|
+
import { invariant } from "@dxos/invariant";
|
|
47
48
|
import { ShellLayout } from "@dxos/protocols/proto/dxos/iframe";
|
|
48
49
|
import { createProtoRpcPeer } from "@dxos/rpc";
|
|
50
|
+
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/vault/shell-runtime.ts";
|
|
49
51
|
var ShellRuntimeImpl = class {
|
|
50
52
|
constructor(_port) {
|
|
51
53
|
this._port = _port;
|
|
@@ -71,7 +73,15 @@ var ShellRuntimeImpl = class {
|
|
|
71
73
|
});
|
|
72
74
|
}
|
|
73
75
|
async setAppContext(context) {
|
|
74
|
-
invariant(this._appRpc, "runtime not open"
|
|
76
|
+
invariant(this._appRpc, "runtime not open", {
|
|
77
|
+
F: __dxlog_file,
|
|
78
|
+
L: 44,
|
|
79
|
+
S: this,
|
|
80
|
+
A: [
|
|
81
|
+
"this._appRpc",
|
|
82
|
+
"'runtime not open'"
|
|
83
|
+
]
|
|
84
|
+
});
|
|
75
85
|
await this._appRpc.rpc.AppService.setContext(context);
|
|
76
86
|
}
|
|
77
87
|
async open() {
|
|
@@ -110,7 +120,7 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
110
120
|
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
111
121
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
112
122
|
}
|
|
113
|
-
var
|
|
123
|
+
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/vault/iframe-host-runtime.ts";
|
|
114
124
|
var LOCK_KEY = "DXOS_RESOURCE_LOCK";
|
|
115
125
|
var IFrameHostRuntime = class {
|
|
116
126
|
constructor({ config, origin, appPort, shellPort }) {
|
|
@@ -132,7 +142,7 @@ var IFrameHostRuntime = class {
|
|
|
132
142
|
async start() {
|
|
133
143
|
var _a;
|
|
134
144
|
log("starting...", void 0, {
|
|
135
|
-
F:
|
|
145
|
+
F: __dxlog_file2,
|
|
136
146
|
L: 70,
|
|
137
147
|
S: this,
|
|
138
148
|
C: (f, a) => f(...a)
|
|
@@ -181,7 +191,7 @@ var IFrameHostRuntime = class {
|
|
|
181
191
|
]);
|
|
182
192
|
this._ready.wake(void 0);
|
|
183
193
|
log("started", void 0, {
|
|
184
|
-
F:
|
|
194
|
+
F: __dxlog_file2,
|
|
185
195
|
L: 113,
|
|
186
196
|
S: this,
|
|
187
197
|
C: (f, a) => f(...a)
|
|
@@ -189,7 +199,7 @@ var IFrameHostRuntime = class {
|
|
|
189
199
|
} catch (err) {
|
|
190
200
|
this._ready.wake(err);
|
|
191
201
|
log.catch(err, void 0, {
|
|
192
|
-
F:
|
|
202
|
+
F: __dxlog_file2,
|
|
193
203
|
L: 116,
|
|
194
204
|
S: this,
|
|
195
205
|
C: (f, a) => f(...a)
|
|
@@ -199,7 +209,7 @@ var IFrameHostRuntime = class {
|
|
|
199
209
|
async stop() {
|
|
200
210
|
var _a;
|
|
201
211
|
log("stopping...", void 0, {
|
|
202
|
-
F:
|
|
212
|
+
F: __dxlog_file2,
|
|
203
213
|
L: 121,
|
|
204
214
|
S: this,
|
|
205
215
|
C: (f, a) => f(...a)
|
|
@@ -208,7 +218,7 @@ var IFrameHostRuntime = class {
|
|
|
208
218
|
await this._clientServices.close();
|
|
209
219
|
await ((_a = this._shellRuntime) == null ? void 0 : _a.close());
|
|
210
220
|
log("stopped", void 0, {
|
|
211
|
-
F:
|
|
221
|
+
F: __dxlog_file2,
|
|
212
222
|
L: 125,
|
|
213
223
|
S: this,
|
|
214
224
|
C: (f, a) => f(...a)
|
|
@@ -227,7 +237,7 @@ import { log as log2 } from "@dxos/log";
|
|
|
227
237
|
import { WebRTCTransportService } from "@dxos/network-manager";
|
|
228
238
|
import { createProtoRpcPeer as createProtoRpcPeer2 } from "@dxos/rpc";
|
|
229
239
|
import { getAsyncValue as getAsyncValue2 } from "@dxos/util";
|
|
230
|
-
var
|
|
240
|
+
var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/vault/iframe-proxy-runtime.ts";
|
|
231
241
|
var IFrameProxyRuntime = class {
|
|
232
242
|
constructor({ config, systemPort, shellPort }) {
|
|
233
243
|
this._id = String(Math.floor(Math.random() * 1e6));
|
|
@@ -276,7 +286,7 @@ var IFrameProxyRuntime = class {
|
|
|
276
286
|
});
|
|
277
287
|
} catch (err) {
|
|
278
288
|
log2.catch(err, void 0, {
|
|
279
|
-
F:
|
|
289
|
+
F: __dxlog_file3,
|
|
280
290
|
L: 85,
|
|
281
291
|
S: this,
|
|
282
292
|
C: (f, a) => f(...a)
|
|
@@ -304,9 +314,9 @@ import { MemorySignalManager as MemorySignalManager2, MemorySignalManagerContext
|
|
|
304
314
|
import { WebRTCTransportProxyFactory } from "@dxos/network-manager";
|
|
305
315
|
|
|
306
316
|
// packages/sdk/client-services/src/packlets/vault/worker-session.ts
|
|
307
|
-
import invariant2 from "tiny-invariant";
|
|
308
317
|
import { asyncTimeout, Trigger as Trigger3 } from "@dxos/async";
|
|
309
318
|
import { iframeServiceBundle as iframeServiceBundle2, PROXY_CONNECTION_TIMEOUT as PROXY_CONNECTION_TIMEOUT2, workerServiceBundle as workerServiceBundle2 } from "@dxos/client-protocol";
|
|
319
|
+
import { invariant as invariant2 } from "@dxos/invariant";
|
|
310
320
|
import { log as log3, logInfo as logInfo2 } from "@dxos/log";
|
|
311
321
|
import { createProtoRpcPeer as createProtoRpcPeer3 } from "@dxos/rpc";
|
|
312
322
|
import { Callback } from "@dxos/util";
|
|
@@ -320,12 +330,20 @@ function _ts_decorate2(decorators, target, key, desc) {
|
|
|
320
330
|
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
321
331
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
322
332
|
}
|
|
323
|
-
var
|
|
333
|
+
var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/vault/worker-session.ts";
|
|
324
334
|
var WorkerSession = class {
|
|
325
335
|
constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }) {
|
|
326
336
|
this._startTrigger = new Trigger3();
|
|
327
337
|
this.onClose = new Callback();
|
|
328
|
-
invariant2(serviceHost
|
|
338
|
+
invariant2(serviceHost, void 0, {
|
|
339
|
+
F: __dxlog_file4,
|
|
340
|
+
L: 49,
|
|
341
|
+
S: this,
|
|
342
|
+
A: [
|
|
343
|
+
"serviceHost",
|
|
344
|
+
""
|
|
345
|
+
]
|
|
346
|
+
});
|
|
329
347
|
this._serviceHost = serviceHost;
|
|
330
348
|
const middleware = {
|
|
331
349
|
handleCall: async (method, params, handler) => {
|
|
@@ -373,7 +391,7 @@ var WorkerSession = class {
|
|
|
373
391
|
await this.close();
|
|
374
392
|
} catch (err) {
|
|
375
393
|
log3.catch(err, void 0, {
|
|
376
|
-
F:
|
|
394
|
+
F: __dxlog_file4,
|
|
377
395
|
L: 99,
|
|
378
396
|
S: this,
|
|
379
397
|
C: (f, a) => f(...a)
|
|
@@ -390,7 +408,7 @@ var WorkerSession = class {
|
|
|
390
408
|
}
|
|
391
409
|
async open() {
|
|
392
410
|
log3.info("opening...", void 0, {
|
|
393
|
-
F:
|
|
411
|
+
F: __dxlog_file4,
|
|
394
412
|
L: 113,
|
|
395
413
|
S: this,
|
|
396
414
|
C: (f, a) => f(...a)
|
|
@@ -407,16 +425,16 @@ var WorkerSession = class {
|
|
|
407
425
|
void this._afterLockReleases(this.lockKey, () => this.close());
|
|
408
426
|
}
|
|
409
427
|
log3.info("opened", void 0, {
|
|
410
|
-
F:
|
|
411
|
-
L:
|
|
428
|
+
F: __dxlog_file4,
|
|
429
|
+
L: 124,
|
|
412
430
|
S: this,
|
|
413
431
|
C: (f, a) => f(...a)
|
|
414
432
|
});
|
|
415
433
|
}
|
|
416
434
|
async close() {
|
|
417
435
|
log3.info("closing...", void 0, {
|
|
418
|
-
F:
|
|
419
|
-
L:
|
|
436
|
+
F: __dxlog_file4,
|
|
437
|
+
L: 128,
|
|
420
438
|
S: this,
|
|
421
439
|
C: (f, a) => f(...a)
|
|
422
440
|
});
|
|
@@ -424,8 +442,8 @@ var WorkerSession = class {
|
|
|
424
442
|
await this.onClose.callIfSet();
|
|
425
443
|
} catch (err) {
|
|
426
444
|
log3.catch(err, void 0, {
|
|
427
|
-
F:
|
|
428
|
-
L:
|
|
445
|
+
F: __dxlog_file4,
|
|
446
|
+
L: 132,
|
|
429
447
|
S: this,
|
|
430
448
|
C: (f, a) => f(...a)
|
|
431
449
|
});
|
|
@@ -435,8 +453,8 @@ var WorkerSession = class {
|
|
|
435
453
|
this._iframeRpc.close()
|
|
436
454
|
]);
|
|
437
455
|
log3.info("closed", void 0, {
|
|
438
|
-
F:
|
|
439
|
-
L:
|
|
456
|
+
F: __dxlog_file4,
|
|
457
|
+
L: 136,
|
|
440
458
|
S: this,
|
|
441
459
|
C: (f, a) => f(...a)
|
|
442
460
|
});
|
|
@@ -446,8 +464,8 @@ var WorkerSession = class {
|
|
|
446
464
|
await asyncTimeout(this._shellClientRpc.open(), 1e3);
|
|
447
465
|
} catch (e) {
|
|
448
466
|
log3.info("No shell connected.", void 0, {
|
|
449
|
-
F:
|
|
450
|
-
L:
|
|
467
|
+
F: __dxlog_file4,
|
|
468
|
+
L: 143,
|
|
451
469
|
S: this,
|
|
452
470
|
C: (f, a) => f(...a)
|
|
453
471
|
});
|
|
@@ -466,7 +484,7 @@ _ts_decorate2([
|
|
|
466
484
|
], WorkerSession.prototype, "lockKey", void 0);
|
|
467
485
|
|
|
468
486
|
// packages/sdk/client-services/src/packlets/vault/worker-runtime.ts
|
|
469
|
-
var
|
|
487
|
+
var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/vault/worker-runtime.ts";
|
|
470
488
|
var WorkerRuntime = class {
|
|
471
489
|
// prettier-ignore
|
|
472
490
|
constructor(_configProvider) {
|
|
@@ -487,7 +505,7 @@ var WorkerRuntime = class {
|
|
|
487
505
|
}
|
|
488
506
|
async start() {
|
|
489
507
|
log4("starting...", void 0, {
|
|
490
|
-
F:
|
|
508
|
+
F: __dxlog_file5,
|
|
491
509
|
L: 48,
|
|
492
510
|
S: this,
|
|
493
511
|
C: (f, a) => f(...a)
|
|
@@ -503,7 +521,7 @@ var WorkerRuntime = class {
|
|
|
503
521
|
await this._clientServices.open();
|
|
504
522
|
this._ready.wake(void 0);
|
|
505
523
|
log4("started", void 0, {
|
|
506
|
-
F:
|
|
524
|
+
F: __dxlog_file5,
|
|
507
525
|
L: 62,
|
|
508
526
|
S: this,
|
|
509
527
|
C: (f, a) => f(...a)
|
|
@@ -511,7 +529,7 @@ var WorkerRuntime = class {
|
|
|
511
529
|
} catch (err) {
|
|
512
530
|
this._ready.wake(err);
|
|
513
531
|
log4.catch(err, void 0, {
|
|
514
|
-
F:
|
|
532
|
+
F: __dxlog_file5,
|
|
515
533
|
L: 65,
|
|
516
534
|
S: this,
|
|
517
535
|
C: (f, a) => f(...a)
|
|
@@ -545,7 +563,7 @@ var WorkerRuntime = class {
|
|
|
545
563
|
*/
|
|
546
564
|
_reconnectWebrtc() {
|
|
547
565
|
log4("reconnecting webrtc...", void 0, {
|
|
548
|
-
F:
|
|
566
|
+
F: __dxlog_file5,
|
|
549
567
|
L: 102,
|
|
550
568
|
S: this,
|
|
551
569
|
C: (f, a) => f(...a)
|
|
@@ -592,6 +610,7 @@ export {
|
|
|
592
610
|
WorkerSession,
|
|
593
611
|
createAuthProvider,
|
|
594
612
|
createDefaultModelFactory,
|
|
613
|
+
createDiagnostics,
|
|
595
614
|
createStorageObjects,
|
|
596
615
|
getNetworkPeers,
|
|
597
616
|
isLocked,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/packlets/vault/iframe-host-runtime.ts", "../../../src/packlets/vault/shell-runtime.ts", "../../../src/packlets/vault/iframe-proxy-runtime.ts", "../../../src/packlets/vault/worker-runtime.ts", "../../../src/packlets/vault/worker-session.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { PROXY_CONNECTION_TIMEOUT, ShellRuntime } from '@dxos/client-protocol';\nimport { Config } from '@dxos/config';\nimport { log, logInfo } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { createWebRTCTransportFactory, TransportFactory } from '@dxos/network-manager';\nimport { RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, MaybePromise, Provider } from '@dxos/util';\n\nimport { ClientServicesHost } from '../services';\nimport { ClientRpcServer, ClientRpcServerParams } from '../services/client-rpc-server';\nimport { ShellRuntimeImpl } from './shell-runtime';\n\nconst LOCK_KEY = 'DXOS_RESOURCE_LOCK';\n\nexport type IFrameHostRuntimeParams = {\n config: Config | Provider<MaybePromise<Config>>;\n origin: string;\n appPort: RpcPort;\n shellPort?: RpcPort;\n};\n\n/**\n * Runs the client services in the main thread.\n *\n * Holds a lock over the client services such that only one instance can run at a time.\n * This should only be used when SharedWorker is not available.\n */\nexport class IFrameHostRuntime {\n private readonly _configProvider: IFrameHostRuntimeParams['config'];\n private readonly _ready = new Trigger<Error | undefined>();\n\n private readonly _appPort: RpcPort;\n private readonly _shellPort?: RpcPort;\n private _config!: Config;\n private _transportFactory!: TransportFactory;\n\n // TODO(dmaretskyi): Replace with host and figure out how to return services provider here.\n private _clientServices!: ClientServicesHost;\n private _clientRpc!: ClientRpcServer;\n private _shellRuntime?: ShellRuntimeImpl;\n\n @logInfo\n public origin: string;\n\n constructor({ config, origin, appPort, shellPort }: IFrameHostRuntimeParams) {\n this._configProvider = config;\n this.origin = origin;\n this._appPort = appPort;\n this._shellPort = shellPort;\n\n if (this._shellPort) {\n this._shellRuntime = new ShellRuntimeImpl(this._shellPort);\n }\n }\n\n get services() {\n return this._clientServices;\n }\n\n get shell(): ShellRuntime | undefined {\n return this._shellRuntime;\n }\n\n async start() {\n log('starting...');\n try {\n this._config = await getAsyncValue(this._configProvider);\n this._transportFactory = createWebRTCTransportFactory({\n iceServers: this._config.get('runtime.services.ice'),\n });\n const signals = this._config.get('runtime.services.signaling');\n this._clientServices = new ClientServicesHost({\n lockKey: LOCK_KEY,\n config: this._config,\n signalManager: signals\n ? new WebsocketSignalManager(signals)\n : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.\n transportFactory: this._transportFactory,\n });\n\n const middleware: Pick<ClientRpcServerParams, 'handleCall' | 'handleStream'> = {\n handleCall: async (method, params, handler) => {\n const error = await this._ready.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n handleStream: async (method, params, handler) => {\n const error = await this._ready.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n };\n\n this._clientRpc = new ClientRpcServer({\n serviceRegistry: this._clientServices.serviceRegistry,\n port: this._appPort,\n ...middleware,\n });\n\n await Promise.all([this._clientServices.open(), this._clientRpc.open(), this._shellRuntime?.open()]);\n this._ready.wake(undefined);\n log('started');\n } catch (err: any) {\n this._ready.wake(err);\n log.catch(err);\n }\n }\n\n async stop() {\n log('stopping...');\n await this._clientRpc.close();\n await this._clientServices.close();\n await this._shellRuntime?.close();\n log('stopped');\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport invariant from 'tiny-invariant';\n\nimport { Event } from '@dxos/async';\nimport { appServiceBundle, AppServiceBundle, ShellRuntime, shellServiceBundle } from '@dxos/client-protocol';\nimport { PublicKey } from '@dxos/keys';\nimport { AppContextRequest, LayoutRequest, ShellLayout } from '@dxos/protocols/proto/dxos/iframe';\nimport { createProtoRpcPeer, ProtoRpcPeer, RpcPort } from '@dxos/rpc';\n\n/**\n * Endpoint that handles shell services.\n */\nexport class ShellRuntimeImpl implements ShellRuntime {\n readonly layoutUpdate = new Event<LayoutRequest>();\n private _appRpc?: ProtoRpcPeer<AppServiceBundle>;\n private _layout = ShellLayout.DEFAULT;\n private _invitationCode?: string;\n private _spaceKey?: PublicKey;\n\n constructor(private readonly _port: RpcPort) {}\n\n get layout() {\n return this._layout;\n }\n\n get invitationCode() {\n return this._invitationCode;\n }\n\n get spaceKey() {\n return this._spaceKey;\n }\n\n setLayout(layout: ShellLayout, options: Omit<LayoutRequest, 'layout'> = {}) {\n this._layout = layout;\n this._invitationCode = options.invitationCode;\n this._spaceKey = options.spaceKey;\n this.layoutUpdate.emit({ layout, ...options });\n }\n\n async setAppContext(context: AppContextRequest) {\n invariant(this._appRpc, 'runtime not open');\n\n await this._appRpc.rpc.AppService.setContext(context);\n }\n\n async open() {\n this._appRpc = createProtoRpcPeer({\n requested: appServiceBundle,\n exposed: shellServiceBundle,\n handlers: {\n ShellService: {\n setLayout: async (request) => {\n this._layout = request.layout;\n this._invitationCode = request.invitationCode;\n this._spaceKey = request.spaceKey;\n this.layoutUpdate.emit(request);\n },\n },\n },\n port: this._port,\n });\n\n await this._appRpc.open();\n }\n\n async close() {\n await this._appRpc?.close();\n this._appRpc = undefined;\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { iframeServiceBundle, ShellRuntime, workerServiceBundle, WorkerServiceBundle } from '@dxos/client-protocol';\nimport { Config } from '@dxos/config';\nimport { RemoteServiceConnectionError } from '@dxos/errors';\nimport { log } from '@dxos/log';\nimport { WebRTCTransportService } from '@dxos/network-manager';\nimport { BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, ProtoRpcPeer, RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, MaybePromise, Provider } from '@dxos/util';\n\nimport { ShellRuntimeImpl } from './shell-runtime';\n\n// NOTE: Keep as RpcPorts to avoid dependency on @dxos/rpc-tunnel so we don't depend on browser-specific apis.\nexport type IFrameProxyRuntimeParams = {\n config: Config | Provider<MaybePromise<Config>>;\n systemPort: RpcPort;\n shellPort?: RpcPort;\n};\n\n/**\n * Manages the client connection to the shared worker.\n */\nexport class IFrameProxyRuntime {\n private readonly _id = String(Math.floor(Math.random() * 1000000));\n private readonly _configProvider: IFrameProxyRuntimeParams['config'];\n private readonly _systemPort: RpcPort;\n private readonly _shellPort?: RpcPort;\n private _release = new Trigger();\n private _config!: Config;\n private _transportService!: BridgeService;\n private _systemRpc!: ProtoRpcPeer<WorkerServiceBundle>;\n private _shellRuntime?: ShellRuntimeImpl;\n\n constructor({ config, systemPort, shellPort }: IFrameProxyRuntimeParams) {\n this._configProvider = config;\n this._systemPort = systemPort;\n this._shellPort = shellPort;\n\n if (this._shellPort) {\n this._shellRuntime = new ShellRuntimeImpl(this._shellPort);\n }\n }\n\n get shell(): ShellRuntime | undefined {\n return this._shellRuntime;\n }\n\n async open(origin: string) {\n this._config = await getAsyncValue(this._configProvider);\n\n this._transportService = new WebRTCTransportService({\n iceServers: this._config.get('runtime.services.ice'),\n });\n\n this._systemRpc = createProtoRpcPeer({\n requested: workerServiceBundle,\n exposed: iframeServiceBundle,\n handlers: {\n BridgeService: this._transportService,\n },\n port: this._systemPort,\n timeout: 200,\n });\n\n let lockKey: string | undefined;\n if (typeof navigator !== 'undefined') {\n lockKey = this._lockKey(origin);\n this._release = new Trigger();\n const ready = new Trigger();\n void navigator.locks.request(lockKey, async () => {\n ready.wake();\n await this._release.wait();\n });\n await ready.wait();\n }\n\n try {\n await this._systemRpc.open();\n await this._systemRpc.rpc.WorkerService.start({ origin, lockKey });\n } catch (err) {\n log.catch(err);\n throw new RemoteServiceConnectionError('Failed to connect to worker');\n }\n await this._shellRuntime?.open();\n }\n\n async close() {\n this._release.wake();\n await this._shellRuntime?.close();\n await this._systemRpc.rpc.WorkerService.stop();\n await this._systemRpc.close();\n }\n\n private _lockKey(origin: string) {\n return `${origin}-${this._id}`;\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { Config } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { WebRTCTransportProxyFactory } from '@dxos/network-manager';\nimport { RpcPort } from '@dxos/rpc';\nimport { MaybePromise } from '@dxos/util';\n\nimport { ClientServicesHost } from '../services';\nimport { WorkerSession } from './worker-session';\n\n// NOTE: Keep as RpcPorts to avoid dependency on @dxos/rpc-tunnel so we don't depend on browser-specific apis.\nexport type CreateSessionParams = {\n appPort: RpcPort;\n systemPort: RpcPort;\n shellPort: RpcPort;\n};\n\n/**\n * Runtime for the shared worker.\n * Manages connections from proxies (in tabs).\n * Tabs make requests to the `ClientServicesHost`, and provide a WebRTC gateway.\n */\nexport class WorkerRuntime {\n private readonly _transportFactory = new WebRTCTransportProxyFactory();\n private readonly _ready = new Trigger<Error | undefined>();\n private readonly sessions = new Set<WorkerSession>();\n private _sessionForNetworking?: WorkerSession;\n private _clientServices!: ClientServicesHost;\n private _config!: Config;\n\n // prettier-ignore\n constructor(\n private readonly _configProvider: () => MaybePromise<Config>\n ) {\n this._clientServices = new ClientServicesHost({ callbacks: { onReset: async () => { self.close(); } } });\n }\n\n get host() {\n return this._clientServices;\n }\n\n async start() {\n log('starting...');\n try {\n this._config = await this._configProvider();\n const signals = this._config.get('runtime.services.signaling');\n this._clientServices.initialize({\n config: this._config,\n signalManager: signals\n ? new WebsocketSignalManager(signals)\n : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.\n transportFactory: this._transportFactory,\n });\n\n await this._clientServices.open();\n this._ready.wake(undefined);\n log('started');\n } catch (err: any) {\n this._ready.wake(err);\n log.catch(err);\n }\n }\n\n async stop() {\n // TODO(dmaretskyi): Terminate active sessions.\n await this._clientServices.close();\n }\n\n /**\n * Create a new session.\n */\n async createSession({ appPort, systemPort, shellPort }: CreateSessionParams) {\n const session = new WorkerSession({\n serviceHost: this._clientServices,\n appPort,\n systemPort,\n shellPort,\n readySignal: this._ready,\n });\n\n // When tab is closed.\n session.onClose.set(async () => {\n this.sessions.delete(session);\n this._reconnectWebrtc();\n });\n\n await session.open();\n this.sessions.add(session);\n\n this._reconnectWebrtc();\n }\n\n /**\n * Selects one of the existing session fro WebRTC networking.\n */\n private _reconnectWebrtc() {\n log('reconnecting webrtc...');\n // Check if current session is already closed.\n if (this._sessionForNetworking) {\n if (!this.sessions.has(this._sessionForNetworking)) {\n this._sessionForNetworking = undefined;\n }\n }\n\n // Select existing session.\n if (!this._sessionForNetworking) {\n const selected = Array.from(this.sessions).find((session) => session.bridgeService);\n if (selected) {\n this._sessionForNetworking = selected;\n this._transportFactory.setBridgeService(selected.bridgeService);\n } else {\n this._transportFactory.setBridgeService(undefined);\n }\n }\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport invariant from 'tiny-invariant';\n\nimport { asyncTimeout, Trigger } from '@dxos/async';\nimport {\n iframeServiceBundle,\n IframeServiceBundle,\n PROXY_CONNECTION_TIMEOUT,\n workerServiceBundle,\n} from '@dxos/client-protocol';\nimport { log, logInfo } from '@dxos/log';\nimport { BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, ProtoRpcPeer, RpcPort } from '@dxos/rpc';\nimport { Callback, MaybePromise } from '@dxos/util';\n\nimport { ClientServicesHost, ClientRpcServer, ClientRpcServerParams } from '../services';\n\nexport type WorkerSessionParams = {\n serviceHost: ClientServicesHost;\n systemPort: RpcPort;\n appPort: RpcPort;\n shellPort: RpcPort;\n readySignal: Trigger<Error | undefined>;\n};\n\n/**\n * Represents a tab connection within the worker.\n */\nexport class WorkerSession {\n private readonly _clientRpc: ClientRpcServer;\n private readonly _shellClientRpc: ClientRpcServer;\n private readonly _iframeRpc: ProtoRpcPeer<IframeServiceBundle>;\n private readonly _startTrigger = new Trigger();\n private readonly _serviceHost: ClientServicesHost;\n\n public readonly onClose = new Callback<() => Promise<void>>();\n\n @logInfo\n public origin?: string;\n\n @logInfo\n public lockKey?: string;\n\n public bridgeService?: BridgeService;\n\n constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }: WorkerSessionParams) {\n invariant(serviceHost);\n this._serviceHost = serviceHost;\n\n const middleware: Pick<ClientRpcServerParams, 'handleCall' | 'handleStream'> = {\n handleCall: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n handleStream: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n };\n\n this._clientRpc = new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: appPort,\n ...middleware,\n });\n this._shellClientRpc = new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: shellPort,\n ...middleware,\n });\n\n this._iframeRpc = createProtoRpcPeer({\n requested: iframeServiceBundle,\n exposed: workerServiceBundle,\n handlers: {\n WorkerService: {\n start: async (request) => {\n this.origin = request.origin;\n this.lockKey = request.lockKey;\n this._startTrigger.wake();\n },\n\n stop: async () => {\n setTimeout(async () => {\n try {\n await this.close();\n } catch (err: any) {\n log.catch(err);\n }\n });\n },\n },\n },\n port: systemPort,\n timeout: 1000, // With low timeout heartbeat may fail if the tab's thread is saturated.\n });\n\n this.bridgeService = this._iframeRpc.rpc.BridgeService;\n }\n\n async open() {\n log.info('opening...');\n await Promise.all([this._clientRpc.open(), this._iframeRpc.open(), this._maybeOpenShell()]);\n\n await this._startTrigger.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (this.lockKey) {\n void this._afterLockReleases(this.lockKey, () => this.close());\n }\n log.info('opened');\n }\n\n async close() {\n log.info('closing...');\n try {\n await this.onClose.callIfSet();\n } catch (err: any) {\n log.catch(err);\n }\n\n await Promise.all([this._clientRpc.close(), this._iframeRpc.close()]);\n log.info('closed');\n }\n\n private async _maybeOpenShell() {\n try {\n await asyncTimeout(this._shellClientRpc.open(), 1_000);\n } catch {\n log.info('No shell connected.');\n }\n }\n\n private _afterLockReleases(lockKey: string, callback: () => MaybePromise<void>): Promise<void> {\n return navigator.locks\n .request(lockKey, () => {\n // No-op.\n })\n .then(callback);\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["Trigger", "PROXY_CONNECTION_TIMEOUT", "log", "logInfo", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "createWebRTCTransportFactory", "getAsyncValue", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { PROXY_CONNECTION_TIMEOUT, ShellRuntime } from '@dxos/client-protocol';\nimport { Config } from '@dxos/config';\nimport { log, logInfo } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { createWebRTCTransportFactory, TransportFactory } from '@dxos/network-manager';\nimport { RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, MaybePromise, Provider } from '@dxos/util';\n\nimport { ClientServicesHost } from '../services';\nimport { ClientRpcServer, ClientRpcServerParams } from '../services/client-rpc-server';\nimport { ShellRuntimeImpl } from './shell-runtime';\n\nconst LOCK_KEY = 'DXOS_RESOURCE_LOCK';\n\nexport type IFrameHostRuntimeParams = {\n config: Config | Provider<MaybePromise<Config>>;\n origin: string;\n appPort: RpcPort;\n shellPort?: RpcPort;\n};\n\n/**\n * Runs the client services in the main thread.\n *\n * Holds a lock over the client services such that only one instance can run at a time.\n * This should only be used when SharedWorker is not available.\n */\nexport class IFrameHostRuntime {\n private readonly _configProvider: IFrameHostRuntimeParams['config'];\n private readonly _ready = new Trigger<Error | undefined>();\n\n private readonly _appPort: RpcPort;\n private readonly _shellPort?: RpcPort;\n private _config!: Config;\n private _transportFactory!: TransportFactory;\n\n // TODO(dmaretskyi): Replace with host and figure out how to return services provider here.\n private _clientServices!: ClientServicesHost;\n private _clientRpc!: ClientRpcServer;\n private _shellRuntime?: ShellRuntimeImpl;\n\n @logInfo\n public origin: string;\n\n constructor({ config, origin, appPort, shellPort }: IFrameHostRuntimeParams) {\n this._configProvider = config;\n this.origin = origin;\n this._appPort = appPort;\n this._shellPort = shellPort;\n\n if (this._shellPort) {\n this._shellRuntime = new ShellRuntimeImpl(this._shellPort);\n }\n }\n\n get services() {\n return this._clientServices;\n }\n\n get shell(): ShellRuntime | undefined {\n return this._shellRuntime;\n }\n\n async start() {\n log('starting...');\n try {\n this._config = await getAsyncValue(this._configProvider);\n this._transportFactory = createWebRTCTransportFactory({\n iceServers: this._config.get('runtime.services.ice'),\n });\n const signals = this._config.get('runtime.services.signaling');\n this._clientServices = new ClientServicesHost({\n lockKey: LOCK_KEY,\n config: this._config,\n signalManager: signals\n ? new WebsocketSignalManager(signals)\n : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.\n transportFactory: this._transportFactory,\n });\n\n const middleware: Pick<ClientRpcServerParams, 'handleCall' | 'handleStream'> = {\n handleCall: async (method, params, handler) => {\n const error = await this._ready.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n handleStream: async (method, params, handler) => {\n const error = await this._ready.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n };\n\n this._clientRpc = new ClientRpcServer({\n serviceRegistry: this._clientServices.serviceRegistry,\n port: this._appPort,\n ...middleware,\n });\n\n await Promise.all([this._clientServices.open(), this._clientRpc.open(), this._shellRuntime?.open()]);\n this._ready.wake(undefined);\n log('started');\n } catch (err: any) {\n this._ready.wake(err);\n log.catch(err);\n }\n }\n\n async stop() {\n log('stopping...');\n await this._clientRpc.close();\n await this._clientServices.close();\n await this._shellRuntime?.close();\n log('stopped');\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Event } from '@dxos/async';\nimport { appServiceBundle, AppServiceBundle, ShellRuntime, shellServiceBundle } from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { AppContextRequest, LayoutRequest, ShellLayout } from '@dxos/protocols/proto/dxos/iframe';\nimport { createProtoRpcPeer, ProtoRpcPeer, RpcPort } from '@dxos/rpc';\n\n/**\n * Endpoint that handles shell services.\n */\nexport class ShellRuntimeImpl implements ShellRuntime {\n readonly layoutUpdate = new Event<LayoutRequest>();\n private _appRpc?: ProtoRpcPeer<AppServiceBundle>;\n private _layout = ShellLayout.DEFAULT;\n private _invitationCode?: string;\n private _spaceKey?: PublicKey;\n\n constructor(private readonly _port: RpcPort) {}\n\n get layout() {\n return this._layout;\n }\n\n get invitationCode() {\n return this._invitationCode;\n }\n\n get spaceKey() {\n return this._spaceKey;\n }\n\n setLayout(layout: ShellLayout, options: Omit<LayoutRequest, 'layout'> = {}) {\n this._layout = layout;\n this._invitationCode = options.invitationCode;\n this._spaceKey = options.spaceKey;\n this.layoutUpdate.emit({ layout, ...options });\n }\n\n async setAppContext(context: AppContextRequest) {\n invariant(this._appRpc, 'runtime not open');\n\n await this._appRpc.rpc.AppService.setContext(context);\n }\n\n async open() {\n this._appRpc = createProtoRpcPeer({\n requested: appServiceBundle,\n exposed: shellServiceBundle,\n handlers: {\n ShellService: {\n setLayout: async (request) => {\n this._layout = request.layout;\n this._invitationCode = request.invitationCode;\n this._spaceKey = request.spaceKey;\n this.layoutUpdate.emit(request);\n },\n },\n },\n port: this._port,\n });\n\n await this._appRpc.open();\n }\n\n async close() {\n await this._appRpc?.close();\n this._appRpc = undefined;\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { iframeServiceBundle, ShellRuntime, workerServiceBundle, WorkerServiceBundle } from '@dxos/client-protocol';\nimport { Config } from '@dxos/config';\nimport { RemoteServiceConnectionError } from '@dxos/errors';\nimport { log } from '@dxos/log';\nimport { WebRTCTransportService } from '@dxos/network-manager';\nimport { BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, ProtoRpcPeer, RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, MaybePromise, Provider } from '@dxos/util';\n\nimport { ShellRuntimeImpl } from './shell-runtime';\n\n// NOTE: Keep as RpcPorts to avoid dependency on @dxos/rpc-tunnel so we don't depend on browser-specific apis.\nexport type IFrameProxyRuntimeParams = {\n config: Config | Provider<MaybePromise<Config>>;\n systemPort: RpcPort;\n shellPort?: RpcPort;\n};\n\n/**\n * Manages the client connection to the shared worker.\n */\nexport class IFrameProxyRuntime {\n private readonly _id = String(Math.floor(Math.random() * 1000000));\n private readonly _configProvider: IFrameProxyRuntimeParams['config'];\n private readonly _systemPort: RpcPort;\n private readonly _shellPort?: RpcPort;\n private _release = new Trigger();\n private _config!: Config;\n private _transportService!: BridgeService;\n private _systemRpc!: ProtoRpcPeer<WorkerServiceBundle>;\n private _shellRuntime?: ShellRuntimeImpl;\n\n constructor({ config, systemPort, shellPort }: IFrameProxyRuntimeParams) {\n this._configProvider = config;\n this._systemPort = systemPort;\n this._shellPort = shellPort;\n\n if (this._shellPort) {\n this._shellRuntime = new ShellRuntimeImpl(this._shellPort);\n }\n }\n\n get shell(): ShellRuntime | undefined {\n return this._shellRuntime;\n }\n\n async open(origin: string) {\n this._config = await getAsyncValue(this._configProvider);\n\n this._transportService = new WebRTCTransportService({\n iceServers: this._config.get('runtime.services.ice'),\n });\n\n this._systemRpc = createProtoRpcPeer({\n requested: workerServiceBundle,\n exposed: iframeServiceBundle,\n handlers: {\n BridgeService: this._transportService,\n },\n port: this._systemPort,\n timeout: 200,\n });\n\n let lockKey: string | undefined;\n if (typeof navigator !== 'undefined') {\n lockKey = this._lockKey(origin);\n this._release = new Trigger();\n const ready = new Trigger();\n void navigator.locks.request(lockKey, async () => {\n ready.wake();\n await this._release.wait();\n });\n await ready.wait();\n }\n\n try {\n await this._systemRpc.open();\n await this._systemRpc.rpc.WorkerService.start({ origin, lockKey });\n } catch (err) {\n log.catch(err);\n throw new RemoteServiceConnectionError('Failed to connect to worker');\n }\n await this._shellRuntime?.open();\n }\n\n async close() {\n this._release.wake();\n await this._shellRuntime?.close();\n await this._systemRpc.rpc.WorkerService.stop();\n await this._systemRpc.close();\n }\n\n private _lockKey(origin: string) {\n return `${origin}-${this._id}`;\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { Config } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { WebRTCTransportProxyFactory } from '@dxos/network-manager';\nimport { RpcPort } from '@dxos/rpc';\nimport { MaybePromise } from '@dxos/util';\n\nimport { ClientServicesHost } from '../services';\nimport { WorkerSession } from './worker-session';\n\n// NOTE: Keep as RpcPorts to avoid dependency on @dxos/rpc-tunnel so we don't depend on browser-specific apis.\nexport type CreateSessionParams = {\n appPort: RpcPort;\n systemPort: RpcPort;\n shellPort: RpcPort;\n};\n\n/**\n * Runtime for the shared worker.\n * Manages connections from proxies (in tabs).\n * Tabs make requests to the `ClientServicesHost`, and provide a WebRTC gateway.\n */\nexport class WorkerRuntime {\n private readonly _transportFactory = new WebRTCTransportProxyFactory();\n private readonly _ready = new Trigger<Error | undefined>();\n private readonly sessions = new Set<WorkerSession>();\n private _sessionForNetworking?: WorkerSession;\n private _clientServices!: ClientServicesHost;\n private _config!: Config;\n\n // prettier-ignore\n constructor(\n private readonly _configProvider: () => MaybePromise<Config>\n ) {\n this._clientServices = new ClientServicesHost({ callbacks: { onReset: async () => { self.close(); } } });\n }\n\n get host() {\n return this._clientServices;\n }\n\n async start() {\n log('starting...');\n try {\n this._config = await this._configProvider();\n const signals = this._config.get('runtime.services.signaling');\n this._clientServices.initialize({\n config: this._config,\n signalManager: signals\n ? new WebsocketSignalManager(signals)\n : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.\n transportFactory: this._transportFactory,\n });\n\n await this._clientServices.open();\n this._ready.wake(undefined);\n log('started');\n } catch (err: any) {\n this._ready.wake(err);\n log.catch(err);\n }\n }\n\n async stop() {\n // TODO(dmaretskyi): Terminate active sessions.\n await this._clientServices.close();\n }\n\n /**\n * Create a new session.\n */\n async createSession({ appPort, systemPort, shellPort }: CreateSessionParams) {\n const session = new WorkerSession({\n serviceHost: this._clientServices,\n appPort,\n systemPort,\n shellPort,\n readySignal: this._ready,\n });\n\n // When tab is closed.\n session.onClose.set(async () => {\n this.sessions.delete(session);\n this._reconnectWebrtc();\n });\n\n await session.open();\n this.sessions.add(session);\n\n this._reconnectWebrtc();\n }\n\n /**\n * Selects one of the existing session fro WebRTC networking.\n */\n private _reconnectWebrtc() {\n log('reconnecting webrtc...');\n // Check if current session is already closed.\n if (this._sessionForNetworking) {\n if (!this.sessions.has(this._sessionForNetworking)) {\n this._sessionForNetworking = undefined;\n }\n }\n\n // Select existing session.\n if (!this._sessionForNetworking) {\n const selected = Array.from(this.sessions).find((session) => session.bridgeService);\n if (selected) {\n this._sessionForNetworking = selected;\n this._transportFactory.setBridgeService(selected.bridgeService);\n } else {\n this._transportFactory.setBridgeService(undefined);\n }\n }\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { asyncTimeout, Trigger } from '@dxos/async';\nimport {\n iframeServiceBundle,\n IframeServiceBundle,\n PROXY_CONNECTION_TIMEOUT,\n workerServiceBundle,\n} from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { log, logInfo } from '@dxos/log';\nimport { BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, ProtoRpcPeer, RpcPort } from '@dxos/rpc';\nimport { Callback, MaybePromise } from '@dxos/util';\n\nimport { ClientServicesHost, ClientRpcServer, ClientRpcServerParams } from '../services';\n\nexport type WorkerSessionParams = {\n serviceHost: ClientServicesHost;\n systemPort: RpcPort;\n appPort: RpcPort;\n shellPort: RpcPort;\n readySignal: Trigger<Error | undefined>;\n};\n\n/**\n * Represents a tab connection within the worker.\n */\nexport class WorkerSession {\n private readonly _clientRpc: ClientRpcServer;\n private readonly _shellClientRpc: ClientRpcServer;\n private readonly _iframeRpc: ProtoRpcPeer<IframeServiceBundle>;\n private readonly _startTrigger = new Trigger();\n private readonly _serviceHost: ClientServicesHost;\n\n public readonly onClose = new Callback<() => Promise<void>>();\n\n @logInfo\n public origin?: string;\n\n @logInfo\n public lockKey?: string;\n\n public bridgeService?: BridgeService;\n\n constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }: WorkerSessionParams) {\n invariant(serviceHost);\n this._serviceHost = serviceHost;\n\n const middleware: Pick<ClientRpcServerParams, 'handleCall' | 'handleStream'> = {\n handleCall: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n handleStream: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n };\n\n this._clientRpc = new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: appPort,\n ...middleware,\n });\n\n this._shellClientRpc = new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: shellPort,\n ...middleware,\n });\n\n this._iframeRpc = createProtoRpcPeer({\n requested: iframeServiceBundle,\n exposed: workerServiceBundle,\n handlers: {\n WorkerService: {\n start: async (request) => {\n this.origin = request.origin;\n this.lockKey = request.lockKey;\n this._startTrigger.wake();\n },\n\n stop: async () => {\n setTimeout(async () => {\n try {\n await this.close();\n } catch (err: any) {\n log.catch(err);\n }\n });\n },\n },\n },\n port: systemPort,\n timeout: 1_000, // With low timeout heartbeat may fail if the tab's thread is saturated.\n });\n\n this.bridgeService = this._iframeRpc.rpc.BridgeService;\n }\n\n async open() {\n log.info('opening...');\n await Promise.all([this._clientRpc.open(), this._iframeRpc.open(), this._maybeOpenShell()]);\n\n // Wait until the worker's RPC service has started.\n await this._startTrigger.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n\n // TODO(burdon): Comment required.\n if (this.lockKey) {\n void this._afterLockReleases(this.lockKey, () => this.close());\n }\n\n log.info('opened');\n }\n\n async close() {\n log.info('closing...');\n try {\n await this.onClose.callIfSet();\n } catch (err: any) {\n log.catch(err);\n }\n\n await Promise.all([this._clientRpc.close(), this._iframeRpc.close()]);\n log.info('closed');\n }\n\n private async _maybeOpenShell() {\n try {\n await asyncTimeout(this._shellClientRpc.open(), 1_000);\n } catch {\n log.info('No shell connected.');\n }\n }\n\n private _afterLockReleases(lockKey: string, callback: () => MaybePromise<void>): Promise<void> {\n return navigator.locks\n .request(lockKey, () => {\n // No-op.\n })\n .then(callback);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Trigger", "PROXY_CONNECTION_TIMEOUT", "log", "logInfo", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "createWebRTCTransportFactory", "getAsyncValue", "Event", "appServiceBundle", "shellServiceBundle", "invariant", "ShellLayout", "createProtoRpcPeer", "ShellRuntimeImpl", "constructor", "_port", "layoutUpdate", "_layout", "DEFAULT", "layout", "invitationCode", "_invitationCode", "spaceKey", "_spaceKey", "setLayout", "options", "emit", "setAppContext", "context", "_appRpc", "rpc", "AppService", "setContext", "open", "requested", "exposed", "handlers", "ShellService", "request", "port", "close", "undefined", "LOCK_KEY", "IFrameHostRuntime", "constructor", "config", "origin", "appPort", "shellPort", "_ready", "Trigger", "_configProvider", "_appPort", "_shellPort", "_shellRuntime", "ShellRuntimeImpl", "services", "_clientServices", "shell", "start", "log", "_config", "getAsyncValue", "_transportFactory", "createWebRTCTransportFactory", "iceServers", "get", "signals", "ClientServicesHost", "lockKey", "signalManager", "WebsocketSignalManager", "MemorySignalManager", "MemorySignalManagerContext", "transportFactory", "middleware", "handleCall", "method", "params", "handler", "error", "wait", "timeout", "PROXY_CONNECTION_TIMEOUT", "handleStream", "_clientRpc", "ClientRpcServer", "serviceRegistry", "port", "Promise", "all", "open", "wake", "undefined", "err", "catch", "stop", "close", "logInfo", "Trigger", "iframeServiceBundle", "workerServiceBundle", "RemoteServiceConnectionError", "log", "WebRTCTransportService", "createProtoRpcPeer", "getAsyncValue", "IFrameProxyRuntime", "constructor", "config", "systemPort", "shellPort", "_id", "String", "Math", "floor", "random", "_release", "Trigger", "_configProvider", "_systemPort", "_shellPort", "_shellRuntime", "ShellRuntimeImpl", "shell", "open", "origin", "_config", "getAsyncValue", "_transportService", "WebRTCTransportService", "iceServers", "get", "_systemRpc", "createProtoRpcPeer", "requested", "workerServiceBundle", "exposed", "iframeServiceBundle", "handlers", "BridgeService", "port", "timeout", "lockKey", "navigator", "_lockKey", "ready", "locks", "request", "wake", "wait", "rpc", "WorkerService", "start", "err", "log", "catch", "RemoteServiceConnectionError", "close", "stop", "Trigger", "log", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "WebRTCTransportProxyFactory", "asyncTimeout", "Trigger", "iframeServiceBundle", "PROXY_CONNECTION_TIMEOUT", "workerServiceBundle", "invariant", "log", "logInfo", "createProtoRpcPeer", "Callback", "WorkerSession", "constructor", "serviceHost", "systemPort", "appPort", "shellPort", "readySignal", "_startTrigger", "Trigger", "onClose", "Callback", "invariant", "_serviceHost", "middleware", "handleCall", "method", "params", "handler", "error", "wait", "timeout", "PROXY_CONNECTION_TIMEOUT", "handleStream", "_clientRpc", "ClientRpcServer", "serviceRegistry", "port", "_shellClientRpc", "_iframeRpc", "createProtoRpcPeer", "requested", "iframeServiceBundle", "exposed", "workerServiceBundle", "handlers", "WorkerService", "start", "request", "origin", "lockKey", "wake", "stop", "setTimeout", "close", "err", "log", "catch", "bridgeService", "rpc", "BridgeService", "open", "info", "Promise", "all", "_maybeOpenShell", "_afterLockReleases", "callIfSet", "asyncTimeout", "callback", "navigator", "locks", "then", "logInfo", "WorkerRuntime", "constructor", "_configProvider", "_transportFactory", "WebRTCTransportProxyFactory", "_ready", "Trigger", "sessions", "Set", "_clientServices", "ClientServicesHost", "callbacks", "onReset", "self", "close", "host", "start", "log", "_config", "signals", "get", "initialize", "config", "signalManager", "WebsocketSignalManager", "MemorySignalManager", "MemorySignalManagerContext", "transportFactory", "open", "wake", "undefined", "err", "catch", "stop", "createSession", "appPort", "systemPort", "shellPort", "session", "WorkerSession", "serviceHost", "readySignal", "onClose", "set", "delete", "_reconnectWebrtc", "add", "_sessionForNetworking", "has", "selected", "Array", "from", "find", "bridgeService", "setBridgeService"]
|
|
7
7
|
}
|