@dxos/client-services 0.4.10-main.ec8b427 → 0.4.10-main.f68a1ca
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-4NKBBUMB.mjs → chunk-B4JZEXRB.mjs} +128 -53
- package/dist/lib/browser/{chunk-4NKBBUMB.mjs.map → chunk-B4JZEXRB.mjs.map} +3 -3
- package/dist/lib/browser/index.mjs +48 -20
- 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 +1 -1
- package/dist/lib/node/{chunk-5YRLBMIC.cjs → chunk-EC2QGJ2V.cjs} +133 -58
- package/dist/lib/node/chunk-EC2QGJ2V.cjs.map +7 -0
- package/dist/lib/node/index.cjs +85 -57
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/packlets/testing/index.cjs +6 -6
- package/dist/types/src/packlets/indexing/util.d.ts +2 -2
- package/dist/types/src/packlets/indexing/util.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
- package/dist/types/src/packlets/vault/shared-worker-connection.d.ts +5 -5
- package/dist/types/src/packlets/vault/shared-worker-connection.d.ts.map +1 -1
- package/dist/types/src/packlets/vault/worker-runtime.d.ts +2 -0
- package/dist/types/src/packlets/vault/worker-runtime.d.ts.map +1 -1
- package/dist/types/src/packlets/vault/worker-session.d.ts +2 -0
- package/dist/types/src/packlets/vault/worker-session.d.ts.map +1 -1
- package/dist/types/src/version.d.ts +1 -1
- package/package.json +34 -34
- package/src/packlets/indexing/util.ts +3 -3
- package/src/packlets/services/service-context.ts +3 -3
- package/src/packlets/services/service-host.ts +15 -8
- package/src/packlets/spaces/data-space.ts +51 -2
- package/src/packlets/vault/shared-worker-connection.ts +3 -8
- package/src/packlets/vault/worker-runtime.ts +27 -2
- package/src/packlets/vault/worker-session.ts +6 -0
- package/src/version.ts +1 -1
- package/dist/lib/node/chunk-5YRLBMIC.cjs.map +0 -7
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
subscribeToSignal,
|
|
32
32
|
subscribeToSpaces,
|
|
33
33
|
subscribeToSwarmInfo
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-B4JZEXRB.mjs";
|
|
35
35
|
|
|
36
36
|
// packages/sdk/client-services/src/packlets/vault/iframe-host-runtime.ts
|
|
37
37
|
import { Trigger } from "@dxos/async";
|
|
@@ -251,7 +251,7 @@ var SharedWorkerConnection = class {
|
|
|
251
251
|
get shell() {
|
|
252
252
|
return this._shellRuntime;
|
|
253
253
|
}
|
|
254
|
-
async open(
|
|
254
|
+
async open(params) {
|
|
255
255
|
this._config = await getAsyncValue2(this._configProvider);
|
|
256
256
|
this._transportService = new SimplePeerTransportService({
|
|
257
257
|
iceServers: this._config.get("runtime.services.ice")
|
|
@@ -269,7 +269,7 @@ var SharedWorkerConnection = class {
|
|
|
269
269
|
});
|
|
270
270
|
let lockKey;
|
|
271
271
|
if (typeof navigator !== "undefined") {
|
|
272
|
-
lockKey = this._lockKey(origin);
|
|
272
|
+
lockKey = this._lockKey(params.origin);
|
|
273
273
|
this._release = new Trigger2();
|
|
274
274
|
const ready = new Trigger2();
|
|
275
275
|
void navigator.locks.request(lockKey, async () => {
|
|
@@ -281,13 +281,13 @@ var SharedWorkerConnection = class {
|
|
|
281
281
|
try {
|
|
282
282
|
await this._systemRpc.open();
|
|
283
283
|
await this._systemRpc.rpc.WorkerService.start({
|
|
284
|
-
|
|
285
|
-
|
|
284
|
+
lockKey,
|
|
285
|
+
...params
|
|
286
286
|
});
|
|
287
287
|
} catch (err) {
|
|
288
288
|
log2.catch(err, void 0, {
|
|
289
289
|
F: __dxlog_file3,
|
|
290
|
-
L:
|
|
290
|
+
L: 95,
|
|
291
291
|
S: this,
|
|
292
292
|
C: (f, a) => f(...a)
|
|
293
293
|
});
|
|
@@ -312,8 +312,9 @@ var SharedWorkerConnection = class {
|
|
|
312
312
|
// packages/sdk/client-services/src/packlets/vault/worker-runtime.ts
|
|
313
313
|
import { Trigger as Trigger4 } from "@dxos/async";
|
|
314
314
|
import { Context as Context2 } from "@dxos/context";
|
|
315
|
+
import { invariant as invariant3 } from "@dxos/invariant";
|
|
315
316
|
import { log as log4 } from "@dxos/log";
|
|
316
|
-
import { MemorySignalManager as MemorySignalManager2, MemorySignalManagerContext as MemorySignalManagerContext2, WebsocketSignalManager as WebsocketSignalManager2 } from "@dxos/messaging";
|
|
317
|
+
import { MemorySignalManager as MemorySignalManager2, MemorySignalManagerContext as MemorySignalManagerContext2, WebsocketSignalManager as WebsocketSignalManager2, setIdentityTags } from "@dxos/messaging";
|
|
317
318
|
import { SimplePeerTransportProxyFactory } from "@dxos/network-manager";
|
|
318
319
|
|
|
319
320
|
// packages/sdk/client-services/src/packlets/vault/worker-session.ts
|
|
@@ -340,7 +341,7 @@ var WorkerSession = class {
|
|
|
340
341
|
this.onClose = new Callback();
|
|
341
342
|
invariant2(serviceHost, void 0, {
|
|
342
343
|
F: __dxlog_file4,
|
|
343
|
-
L:
|
|
344
|
+
L: 54,
|
|
344
345
|
S: this,
|
|
345
346
|
A: [
|
|
346
347
|
"serviceHost",
|
|
@@ -386,6 +387,8 @@ var WorkerSession = class {
|
|
|
386
387
|
start: async (request) => {
|
|
387
388
|
this.origin = request.origin;
|
|
388
389
|
this.lockKey = request.lockKey;
|
|
390
|
+
this.observabilityGroup = request.observabilityGroup;
|
|
391
|
+
this.signalTelemetryEnabled = request.signalTelemetryEnabled;
|
|
389
392
|
this._startTrigger.wake();
|
|
390
393
|
},
|
|
391
394
|
stop: async () => {
|
|
@@ -395,7 +398,7 @@ var WorkerSession = class {
|
|
|
395
398
|
} catch (err) {
|
|
396
399
|
log3.catch(err, void 0, {
|
|
397
400
|
F: __dxlog_file4,
|
|
398
|
-
L:
|
|
401
|
+
L: 108,
|
|
399
402
|
S: this,
|
|
400
403
|
C: (f, a) => f(...a)
|
|
401
404
|
});
|
|
@@ -412,7 +415,7 @@ var WorkerSession = class {
|
|
|
412
415
|
async open() {
|
|
413
416
|
log3.info("opening...", void 0, {
|
|
414
417
|
F: __dxlog_file4,
|
|
415
|
-
L:
|
|
418
|
+
L: 122,
|
|
416
419
|
S: this,
|
|
417
420
|
C: (f, a) => f(...a)
|
|
418
421
|
});
|
|
@@ -429,7 +432,7 @@ var WorkerSession = class {
|
|
|
429
432
|
}
|
|
430
433
|
log3.info("opened", void 0, {
|
|
431
434
|
F: __dxlog_file4,
|
|
432
|
-
L:
|
|
435
|
+
L: 133,
|
|
433
436
|
S: this,
|
|
434
437
|
C: (f, a) => f(...a)
|
|
435
438
|
});
|
|
@@ -437,7 +440,7 @@ var WorkerSession = class {
|
|
|
437
440
|
async close() {
|
|
438
441
|
log3.info("closing...", void 0, {
|
|
439
442
|
F: __dxlog_file4,
|
|
440
|
-
L:
|
|
443
|
+
L: 137,
|
|
441
444
|
S: this,
|
|
442
445
|
C: (f, a) => f(...a)
|
|
443
446
|
});
|
|
@@ -446,7 +449,7 @@ var WorkerSession = class {
|
|
|
446
449
|
} catch (err) {
|
|
447
450
|
log3.catch(err, void 0, {
|
|
448
451
|
F: __dxlog_file4,
|
|
449
|
-
L:
|
|
452
|
+
L: 141,
|
|
450
453
|
S: this,
|
|
451
454
|
C: (f, a) => f(...a)
|
|
452
455
|
});
|
|
@@ -457,7 +460,7 @@ var WorkerSession = class {
|
|
|
457
460
|
]);
|
|
458
461
|
log3.info("closed", void 0, {
|
|
459
462
|
F: __dxlog_file4,
|
|
460
|
-
L:
|
|
463
|
+
L: 145,
|
|
461
464
|
S: this,
|
|
462
465
|
C: (f, a) => f(...a)
|
|
463
466
|
});
|
|
@@ -468,7 +471,7 @@ var WorkerSession = class {
|
|
|
468
471
|
} catch {
|
|
469
472
|
log3.info("No shell connected.", void 0, {
|
|
470
473
|
F: __dxlog_file4,
|
|
471
|
-
L:
|
|
474
|
+
L: 152,
|
|
472
475
|
S: this,
|
|
473
476
|
C: (f, a) => f(...a)
|
|
474
477
|
});
|
|
@@ -494,6 +497,10 @@ var WorkerRuntime = class {
|
|
|
494
497
|
this._transportFactory = new SimplePeerTransportProxyFactory();
|
|
495
498
|
this._ready = new Trigger4();
|
|
496
499
|
this._sessions = /* @__PURE__ */ new Set();
|
|
500
|
+
this._signalMetadataTags = {
|
|
501
|
+
runtime: "worker-runtime"
|
|
502
|
+
};
|
|
503
|
+
this._signalTelemetryEnabled = false;
|
|
497
504
|
this._acquireLock = acquireLock;
|
|
498
505
|
this._releaseLock = releaseLock;
|
|
499
506
|
this._clientServices = new ClientServicesHost({
|
|
@@ -508,7 +515,7 @@ var WorkerRuntime = class {
|
|
|
508
515
|
async start() {
|
|
509
516
|
log4("starting...", void 0, {
|
|
510
517
|
F: __dxlog_file5,
|
|
511
|
-
L:
|
|
518
|
+
L: 71,
|
|
512
519
|
S: this,
|
|
513
520
|
C: (f, a) => f(...a)
|
|
514
521
|
});
|
|
@@ -518,22 +525,29 @@ var WorkerRuntime = class {
|
|
|
518
525
|
const signals = this._config.get("runtime.services.signaling");
|
|
519
526
|
this._clientServices.initialize({
|
|
520
527
|
config: this._config,
|
|
521
|
-
signalManager: signals ? new WebsocketSignalManager2(signals) : new MemorySignalManager2(new MemorySignalManagerContext2()),
|
|
528
|
+
signalManager: signals ? new WebsocketSignalManager2(signals, () => this._signalTelemetryEnabled ? this._signalMetadataTags : {}) : new MemorySignalManager2(new MemorySignalManagerContext2()),
|
|
522
529
|
transportFactory: this._transportFactory
|
|
523
530
|
});
|
|
524
531
|
await this._clientServices.open(new Context2());
|
|
525
532
|
this._ready.wake(void 0);
|
|
526
533
|
log4("started", void 0, {
|
|
527
534
|
F: __dxlog_file5,
|
|
528
|
-
L:
|
|
535
|
+
L: 86,
|
|
529
536
|
S: this,
|
|
530
537
|
C: (f, a) => f(...a)
|
|
531
538
|
});
|
|
539
|
+
setIdentityTags({
|
|
540
|
+
identityService: this._clientServices.services.IdentityService,
|
|
541
|
+
devicesService: this._clientServices.services.DevicesService,
|
|
542
|
+
setTag: (k, v) => {
|
|
543
|
+
this._signalMetadataTags[k] = v;
|
|
544
|
+
}
|
|
545
|
+
});
|
|
532
546
|
} catch (err) {
|
|
533
547
|
this._ready.wake(err);
|
|
534
548
|
log4.error("starting", err, {
|
|
535
549
|
F: __dxlog_file5,
|
|
536
|
-
L:
|
|
550
|
+
L: 96,
|
|
537
551
|
S: this,
|
|
538
552
|
C: (f, a) => f(...a)
|
|
539
553
|
});
|
|
@@ -563,6 +577,20 @@ var WorkerRuntime = class {
|
|
|
563
577
|
}
|
|
564
578
|
});
|
|
565
579
|
await session.open();
|
|
580
|
+
invariant3(!this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin, `worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`, {
|
|
581
|
+
F: __dxlog_file5,
|
|
582
|
+
L: 131,
|
|
583
|
+
S: this,
|
|
584
|
+
A: [
|
|
585
|
+
"!this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin",
|
|
586
|
+
"`worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`"
|
|
587
|
+
]
|
|
588
|
+
});
|
|
589
|
+
if (session.observabilityGroup) {
|
|
590
|
+
this._signalMetadataTags.group = session.observabilityGroup;
|
|
591
|
+
}
|
|
592
|
+
this._signalTelemetryEnabled = session.signalTelemetryEnabled ?? false;
|
|
593
|
+
this._signalMetadataTags.origin = session.origin;
|
|
566
594
|
this._sessions.add(session);
|
|
567
595
|
this._reconnectWebrtc();
|
|
568
596
|
}
|
|
@@ -572,7 +600,7 @@ var WorkerRuntime = class {
|
|
|
572
600
|
_reconnectWebrtc() {
|
|
573
601
|
log4("reconnecting webrtc...", void 0, {
|
|
574
602
|
F: __dxlog_file5,
|
|
575
|
-
L:
|
|
603
|
+
L: 149,
|
|
576
604
|
S: this,
|
|
577
605
|
C: (f, a) => f(...a)
|
|
578
606
|
});
|
|
@@ -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/shared-worker-connection.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, type ShellRuntime } from '@dxos/client-protocol';\nimport { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { log, logInfo } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { createSimplePeerTransportFactory, type TransportFactory } from '@dxos/network-manager';\nimport { type RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, type MaybePromise, type Provider } from '@dxos/util';\n\nimport { ShellRuntimeImpl } from './shell-runtime';\nimport { ClientServicesHost } from '../services';\nimport { ClientRpcServer, type ClientRpcServerParams } from '../services/client-rpc-server';\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 *\n * @deprecated\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 = createSimplePeerTransportFactory({\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(new Context()), 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, type AppServiceBundle, type ShellRuntime, shellServiceBundle } from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { type PublicKey } from '@dxos/keys';\nimport { type AppContextRequest, type LayoutRequest, ShellLayout } from '@dxos/protocols/proto/dxos/iframe';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type 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, invitationCode, spaceKey }: LayoutRequest) {\n this._layout = layout;\n this._invitationCode = invitationCode;\n this._spaceKey = spaceKey;\n this.layoutUpdate.emit({ layout, invitationCode, spaceKey });\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 {\n iframeServiceBundle,\n type ShellRuntime,\n workerServiceBundle,\n type WorkerServiceBundle,\n} from '@dxos/client-protocol';\nimport { type Config } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport { SimplePeerTransportService } from '@dxos/network-manager';\nimport { RemoteServiceConnectionError } from '@dxos/protocols';\nimport { type BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, type MaybePromise, type 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 SharedWorkerConnectionOptions = {\n config: Config | Provider<MaybePromise<Config>>;\n systemPort: RpcPort;\n /**\n * @deprecated Only used with iframes.\n */\n shellPort?: RpcPort;\n};\n\n/**\n * Manages the client connection to the shared worker.\n */\nexport class SharedWorkerConnection {\n private readonly _id = String(Math.floor(Math.random() * 1000000));\n private readonly _configProvider: SharedWorkerConnectionOptions['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 }: SharedWorkerConnectionOptions) {\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(\n /**\n * @deprecated Only used with iframes.\n */\n origin: string,\n ) {\n this._config = await getAsyncValue(this._configProvider);\n\n this._transportService = new SimplePeerTransportService({\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 // TODO(wittjosiah): Make longer and factor out to constant.\n // TODO(wittjosiah): If this is too long then it breaks the reset flows in Composer.\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 try {\n await this._systemRpc.rpc.WorkerService.stop();\n } catch {\n // If this fails, the worker is probably already gone.\n }\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 { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { log } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { SimplePeerTransportProxyFactory } from '@dxos/network-manager';\nimport { type RpcPort } from '@dxos/rpc';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { WorkerSession } from './worker-session';\nimport { ClientServicesHost } from '../services';\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\nexport type WorkerRuntimeCallbacks = {\n acquireLock: () => Promise<void>;\n releaseLock: () => void;\n onReset: () => Promise<void>;\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 _acquireLock: () => Promise<void>;\n private readonly _releaseLock: () => void;\n private readonly _transportFactory = new SimplePeerTransportProxyFactory();\n private readonly _ready = new Trigger<Error | undefined>();\n private readonly _sessions = new Set<WorkerSession>();\n private readonly _clientServices!: ClientServicesHost;\n private _sessionForNetworking?: WorkerSession; // TODO(burdon): Expose to client QueryStatusResponse.\n private _config!: Config;\n\n constructor(\n private readonly _configProvider: () => MaybePromise<Config>,\n { acquireLock, releaseLock, onReset }: WorkerRuntimeCallbacks,\n ) {\n this._acquireLock = acquireLock;\n this._releaseLock = releaseLock;\n this._clientServices = new ClientServicesHost({\n callbacks: {\n onReset: async () => onReset(),\n },\n });\n }\n\n get host() {\n return this._clientServices;\n }\n\n async start() {\n log('starting...');\n try {\n await this._acquireLock();\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(new Context());\n this._ready.wake(undefined);\n log('started');\n } catch (err: any) {\n this._ready.wake(err);\n log.error('starting', err);\n }\n }\n\n async stop() {\n // Release the lock to notify remote clients that the worker is terminating.\n this._releaseLock();\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 or client is destroyed.\n session.onClose.set(async () => {\n this._sessions.delete(session);\n if (this._sessions.size === 0) {\n // Terminate the worker when all sessions are closed.\n self.close();\n } else {\n this._reconnectWebrtc();\n }\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 for 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 type IframeServiceBundle,\n PROXY_CONNECTION_TIMEOUT,\n workerServiceBundle,\n} from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { log, logInfo } from '@dxos/log';\nimport { type BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';\nimport { Callback, type MaybePromise } from '@dxos/util';\n\nimport { type ClientServicesHost, ClientRpcServer, type ClientRpcServerParams } from '../services';\n\nexport type WorkerSessionParams = {\n serviceHost: ClientServicesHost;\n systemPort: RpcPort;\n appPort: RpcPort;\n // TODO(wittjosiah): Remove shellPort.\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 = shellPort\n ? new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: shellPort,\n ...middleware,\n })\n : undefined;\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 this._shellClientRpc && (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", "Context", "log", "logInfo", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "createSimplePeerTransportFactory", "getAsyncValue", "Event", "appServiceBundle", "shellServiceBundle", "invariant", "ShellLayout", "createProtoRpcPeer", "ShellRuntimeImpl", "constructor", "_port", "layoutUpdate", "_layout", "DEFAULT", "layout", "invitationCode", "_invitationCode", "spaceKey", "_spaceKey", "setLayout", "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", "createSimplePeerTransportFactory", "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", "Context", "wake", "undefined", "err", "catch", "stop", "close", "logInfo", "Trigger", "iframeServiceBundle", "workerServiceBundle", "log", "SimplePeerTransportService", "RemoteServiceConnectionError", "createProtoRpcPeer", "getAsyncValue", "SharedWorkerConnection", "constructor", "config", "systemPort", "shellPort", "_id", "String", "Math", "floor", "random", "_release", "Trigger", "_configProvider", "_systemPort", "_shellPort", "_shellRuntime", "ShellRuntimeImpl", "shell", "open", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { PROXY_CONNECTION_TIMEOUT, type ShellRuntime } from '@dxos/client-protocol';\nimport { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { log, logInfo } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { createSimplePeerTransportFactory, type TransportFactory } from '@dxos/network-manager';\nimport { type RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, type MaybePromise, type Provider } from '@dxos/util';\n\nimport { ShellRuntimeImpl } from './shell-runtime';\nimport { ClientServicesHost } from '../services';\nimport { ClientRpcServer, type ClientRpcServerParams } from '../services/client-rpc-server';\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 *\n * @deprecated\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 = createSimplePeerTransportFactory({\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(new Context()), 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, type AppServiceBundle, type ShellRuntime, shellServiceBundle } from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { type PublicKey } from '@dxos/keys';\nimport { type AppContextRequest, type LayoutRequest, ShellLayout } from '@dxos/protocols/proto/dxos/iframe';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type 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, invitationCode, spaceKey }: LayoutRequest) {\n this._layout = layout;\n this._invitationCode = invitationCode;\n this._spaceKey = spaceKey;\n this.layoutUpdate.emit({ layout, invitationCode, spaceKey });\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 {\n iframeServiceBundle,\n type ShellRuntime,\n workerServiceBundle,\n type WorkerServiceBundle,\n} from '@dxos/client-protocol';\nimport { type Config } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport { SimplePeerTransportService } from '@dxos/network-manager';\nimport { RemoteServiceConnectionError } from '@dxos/protocols';\nimport { type BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, type MaybePromise, type 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 SharedWorkerConnectionOptions = {\n config: Config | Provider<MaybePromise<Config>>;\n systemPort: RpcPort;\n /**\n * @deprecated Only used with iframes.\n */\n shellPort?: RpcPort;\n};\n\n/**\n * Manages the client connection to the shared worker.\n */\nexport class SharedWorkerConnection {\n private readonly _id = String(Math.floor(Math.random() * 1000000));\n private readonly _configProvider: SharedWorkerConnectionOptions['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 }: SharedWorkerConnectionOptions) {\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(params: { origin: string; observabilityGroup?: string; signalTelemetryEnabled?: boolean }) {\n this._config = await getAsyncValue(this._configProvider);\n\n this._transportService = new SimplePeerTransportService({\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 // TODO(wittjosiah): Make longer and factor out to constant.\n // TODO(wittjosiah): If this is too long then it breaks the reset flows in Composer.\n timeout: 200,\n });\n\n let lockKey: string | undefined;\n if (typeof navigator !== 'undefined') {\n lockKey = this._lockKey(params.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({ lockKey, ...params });\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 try {\n await this._systemRpc.rpc.WorkerService.stop();\n } catch {\n // If this fails, the worker is probably already gone.\n }\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 { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport {\n MemorySignalManager,\n MemorySignalManagerContext,\n WebsocketSignalManager,\n setIdentityTags,\n} from '@dxos/messaging';\nimport { SimplePeerTransportProxyFactory } from '@dxos/network-manager';\nimport { type RpcPort } from '@dxos/rpc';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { WorkerSession } from './worker-session';\nimport { ClientServicesHost } from '../services';\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\nexport type WorkerRuntimeCallbacks = {\n acquireLock: () => Promise<void>;\n releaseLock: () => void;\n onReset: () => Promise<void>;\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 _acquireLock: () => Promise<void>;\n private readonly _releaseLock: () => void;\n private readonly _transportFactory = new SimplePeerTransportProxyFactory();\n private readonly _ready = new Trigger<Error | undefined>();\n private readonly _sessions = new Set<WorkerSession>();\n private readonly _clientServices!: ClientServicesHost;\n private _sessionForNetworking?: WorkerSession; // TODO(burdon): Expose to client QueryStatusResponse.\n private _config!: Config;\n private _signalMetadataTags: any = { runtime: 'worker-runtime' };\n private _signalTelemetryEnabled: boolean = false;\n\n constructor(\n private readonly _configProvider: () => MaybePromise<Config>,\n { acquireLock, releaseLock, onReset }: WorkerRuntimeCallbacks,\n ) {\n this._acquireLock = acquireLock;\n this._releaseLock = releaseLock;\n this._clientServices = new ClientServicesHost({\n callbacks: {\n onReset: async () => onReset(),\n },\n });\n }\n\n get host() {\n return this._clientServices;\n }\n\n async start() {\n log('starting...');\n try {\n await this._acquireLock();\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, () => (this._signalTelemetryEnabled ? this._signalMetadataTags : {}))\n : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.\n transportFactory: this._transportFactory,\n });\n\n await this._clientServices.open(new Context());\n this._ready.wake(undefined);\n log('started');\n setIdentityTags({\n identityService: this._clientServices.services.IdentityService!,\n devicesService: this._clientServices.services.DevicesService!,\n setTag: (k: string, v: string) => {\n this._signalMetadataTags[k] = v;\n },\n });\n } catch (err: any) {\n this._ready.wake(err);\n log.error('starting', err);\n }\n }\n\n async stop() {\n // Release the lock to notify remote clients that the worker is terminating.\n this._releaseLock();\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 or client is destroyed.\n session.onClose.set(async () => {\n this._sessions.delete(session);\n if (this._sessions.size === 0) {\n // Terminate the worker when all sessions are closed.\n self.close();\n } else {\n this._reconnectWebrtc();\n }\n });\n\n await session.open();\n // A worker can only service one origin currently\n invariant(\n !this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin,\n `worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`,\n );\n if (session.observabilityGroup) {\n this._signalMetadataTags.group = session.observabilityGroup;\n }\n this._signalTelemetryEnabled = session.signalTelemetryEnabled ?? false;\n this._signalMetadataTags.origin = session.origin;\n this._sessions.add(session);\n\n this._reconnectWebrtc();\n }\n\n /**\n * Selects one of the existing session for 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 type IframeServiceBundle,\n PROXY_CONNECTION_TIMEOUT,\n workerServiceBundle,\n} from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { log, logInfo } from '@dxos/log';\nimport { type BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';\nimport { Callback, type MaybePromise } from '@dxos/util';\n\nimport { type ClientServicesHost, ClientRpcServer, type ClientRpcServerParams } from '../services';\n\nexport type WorkerSessionParams = {\n serviceHost: ClientServicesHost;\n systemPort: RpcPort;\n appPort: RpcPort;\n // TODO(wittjosiah): Remove shellPort.\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 // TODO(nf): factor out?\n public observabilityGroup?: string;\n public signalTelemetryEnabled?: boolean;\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 = shellPort\n ? new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: shellPort,\n ...middleware,\n })\n : undefined;\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.observabilityGroup = request.observabilityGroup;\n this.signalTelemetryEnabled = request.signalTelemetryEnabled;\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 this._shellClientRpc && (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", "Context", "log", "logInfo", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "createSimplePeerTransportFactory", "getAsyncValue", "Event", "appServiceBundle", "shellServiceBundle", "invariant", "ShellLayout", "createProtoRpcPeer", "ShellRuntimeImpl", "constructor", "_port", "layoutUpdate", "_layout", "DEFAULT", "layout", "invitationCode", "_invitationCode", "spaceKey", "_spaceKey", "setLayout", "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", "createSimplePeerTransportFactory", "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", "Context", "wake", "undefined", "err", "catch", "stop", "close", "logInfo", "Trigger", "iframeServiceBundle", "workerServiceBundle", "log", "SimplePeerTransportService", "RemoteServiceConnectionError", "createProtoRpcPeer", "getAsyncValue", "SharedWorkerConnection", "constructor", "config", "systemPort", "shellPort", "_id", "String", "Math", "floor", "random", "_release", "Trigger", "_configProvider", "_systemPort", "_shellPort", "_shellRuntime", "ShellRuntimeImpl", "shell", "open", "params", "_config", "getAsyncValue", "_transportService", "SimplePeerTransportService", "iceServers", "get", "_systemRpc", "createProtoRpcPeer", "requested", "workerServiceBundle", "exposed", "iframeServiceBundle", "handlers", "BridgeService", "port", "timeout", "lockKey", "navigator", "_lockKey", "origin", "ready", "locks", "request", "wake", "wait", "rpc", "WorkerService", "start", "err", "log", "catch", "RemoteServiceConnectionError", "close", "stop", "Trigger", "Context", "invariant", "log", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "setIdentityTags", "SimplePeerTransportProxyFactory", "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", "undefined", "_iframeRpc", "createProtoRpcPeer", "requested", "iframeServiceBundle", "exposed", "workerServiceBundle", "handlers", "WorkerService", "start", "request", "origin", "lockKey", "observabilityGroup", "signalTelemetryEnabled", "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", "acquireLock", "releaseLock", "onReset", "_transportFactory", "SimplePeerTransportProxyFactory", "_ready", "Trigger", "_sessions", "Set", "_signalMetadataTags", "runtime", "_signalTelemetryEnabled", "_acquireLock", "_releaseLock", "_clientServices", "ClientServicesHost", "callbacks", "host", "start", "log", "_config", "signals", "get", "initialize", "config", "signalManager", "WebsocketSignalManager", "MemorySignalManager", "MemorySignalManagerContext", "transportFactory", "open", "Context", "wake", "undefined", "setIdentityTags", "identityService", "services", "IdentityService", "devicesService", "DevicesService", "setTag", "k", "v", "err", "error", "stop", "close", "createSession", "appPort", "systemPort", "shellPort", "session", "WorkerSession", "serviceHost", "readySignal", "onClose", "set", "delete", "size", "self", "_reconnectWebrtc", "invariant", "origin", "observabilityGroup", "group", "signalTelemetryEnabled", "add", "_sessionForNetworking", "has", "selected", "Array", "from", "find", "bridgeService", "setBridgeService"]
|
|
7
7
|
}
|