@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
package/dist/lib/node/index.cjs
CHANGED
|
@@ -18,45 +18,45 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var node_exports = {};
|
|
20
20
|
__export(node_exports, {
|
|
21
|
-
ClientRpcServer: () =>
|
|
22
|
-
ClientServicesHost: () =>
|
|
23
|
-
DataSpace: () =>
|
|
24
|
-
DataSpaceManager: () =>
|
|
25
|
-
DeviceInvitationProtocol: () =>
|
|
26
|
-
DevtoolsHostEvents: () =>
|
|
27
|
-
DevtoolsServiceImpl: () =>
|
|
21
|
+
ClientRpcServer: () => import_chunk_EC2QGJ2V.ClientRpcServer,
|
|
22
|
+
ClientServicesHost: () => import_chunk_EC2QGJ2V.ClientServicesHost,
|
|
23
|
+
DataSpace: () => import_chunk_EC2QGJ2V.DataSpace,
|
|
24
|
+
DataSpaceManager: () => import_chunk_EC2QGJ2V.DataSpaceManager,
|
|
25
|
+
DeviceInvitationProtocol: () => import_chunk_EC2QGJ2V.DeviceInvitationProtocol,
|
|
26
|
+
DevtoolsHostEvents: () => import_chunk_EC2QGJ2V.DevtoolsHostEvents,
|
|
27
|
+
DevtoolsServiceImpl: () => import_chunk_EC2QGJ2V.DevtoolsServiceImpl,
|
|
28
28
|
IFrameHostRuntime: () => IFrameHostRuntime,
|
|
29
|
-
Identity: () =>
|
|
30
|
-
IdentityManager: () =>
|
|
31
|
-
IdentityServiceImpl: () =>
|
|
32
|
-
InvitationsHandler: () =>
|
|
33
|
-
InvitationsServiceImpl: () =>
|
|
34
|
-
Lock: () =>
|
|
35
|
-
ServiceContext: () =>
|
|
36
|
-
ServiceRegistry: () =>
|
|
29
|
+
Identity: () => import_chunk_EC2QGJ2V.Identity,
|
|
30
|
+
IdentityManager: () => import_chunk_EC2QGJ2V.IdentityManager,
|
|
31
|
+
IdentityServiceImpl: () => import_chunk_EC2QGJ2V.IdentityServiceImpl,
|
|
32
|
+
InvitationsHandler: () => import_chunk_EC2QGJ2V.InvitationsHandler,
|
|
33
|
+
InvitationsServiceImpl: () => import_chunk_EC2QGJ2V.InvitationsServiceImpl,
|
|
34
|
+
Lock: () => import_chunk_EC2QGJ2V.Lock,
|
|
35
|
+
ServiceContext: () => import_chunk_EC2QGJ2V.ServiceContext,
|
|
36
|
+
ServiceRegistry: () => import_chunk_EC2QGJ2V.ServiceRegistry,
|
|
37
37
|
SharedWorkerConnection: () => SharedWorkerConnection,
|
|
38
38
|
ShellRuntimeImpl: () => ShellRuntimeImpl,
|
|
39
|
-
SpaceInvitationProtocol: () =>
|
|
40
|
-
SpacesServiceImpl: () =>
|
|
41
|
-
TrustedKeySetAuthVerifier: () =>
|
|
39
|
+
SpaceInvitationProtocol: () => import_chunk_EC2QGJ2V.SpaceInvitationProtocol,
|
|
40
|
+
SpacesServiceImpl: () => import_chunk_EC2QGJ2V.SpacesServiceImpl,
|
|
41
|
+
TrustedKeySetAuthVerifier: () => import_chunk_EC2QGJ2V.TrustedKeySetAuthVerifier,
|
|
42
42
|
WorkerRuntime: () => WorkerRuntime,
|
|
43
43
|
WorkerSession: () => WorkerSession,
|
|
44
|
-
createAuthProvider: () =>
|
|
45
|
-
createDiagnostics: () =>
|
|
46
|
-
createStorageObjects: () =>
|
|
47
|
-
getNetworkPeers: () =>
|
|
48
|
-
invitationExpired: () =>
|
|
49
|
-
isLocked: () =>
|
|
50
|
-
subscribeToFeedBlocks: () =>
|
|
51
|
-
subscribeToFeeds: () =>
|
|
52
|
-
subscribeToNetworkStatus: () =>
|
|
53
|
-
subscribeToNetworkTopics: () =>
|
|
54
|
-
subscribeToSignal: () =>
|
|
55
|
-
subscribeToSpaces: () =>
|
|
56
|
-
subscribeToSwarmInfo: () =>
|
|
44
|
+
createAuthProvider: () => import_chunk_EC2QGJ2V.createAuthProvider,
|
|
45
|
+
createDiagnostics: () => import_chunk_EC2QGJ2V.createDiagnostics,
|
|
46
|
+
createStorageObjects: () => import_chunk_EC2QGJ2V.createStorageObjects,
|
|
47
|
+
getNetworkPeers: () => import_chunk_EC2QGJ2V.getNetworkPeers,
|
|
48
|
+
invitationExpired: () => import_chunk_EC2QGJ2V.invitationExpired,
|
|
49
|
+
isLocked: () => import_chunk_EC2QGJ2V.isLocked,
|
|
50
|
+
subscribeToFeedBlocks: () => import_chunk_EC2QGJ2V.subscribeToFeedBlocks,
|
|
51
|
+
subscribeToFeeds: () => import_chunk_EC2QGJ2V.subscribeToFeeds,
|
|
52
|
+
subscribeToNetworkStatus: () => import_chunk_EC2QGJ2V.subscribeToNetworkStatus,
|
|
53
|
+
subscribeToNetworkTopics: () => import_chunk_EC2QGJ2V.subscribeToNetworkTopics,
|
|
54
|
+
subscribeToSignal: () => import_chunk_EC2QGJ2V.subscribeToSignal,
|
|
55
|
+
subscribeToSpaces: () => import_chunk_EC2QGJ2V.subscribeToSpaces,
|
|
56
|
+
subscribeToSwarmInfo: () => import_chunk_EC2QGJ2V.subscribeToSwarmInfo
|
|
57
57
|
});
|
|
58
58
|
module.exports = __toCommonJS(node_exports);
|
|
59
|
-
var
|
|
59
|
+
var import_chunk_EC2QGJ2V = require("./chunk-EC2QGJ2V.cjs");
|
|
60
60
|
var import_async = require("@dxos/async");
|
|
61
61
|
var import_client_protocol = require("@dxos/client-protocol");
|
|
62
62
|
var import_context = require("@dxos/context");
|
|
@@ -78,12 +78,13 @@ var import_rpc2 = require("@dxos/rpc");
|
|
|
78
78
|
var import_util2 = require("@dxos/util");
|
|
79
79
|
var import_async4 = require("@dxos/async");
|
|
80
80
|
var import_context2 = require("@dxos/context");
|
|
81
|
+
var import_invariant2 = require("@dxos/invariant");
|
|
81
82
|
var import_log3 = require("@dxos/log");
|
|
82
83
|
var import_messaging2 = require("@dxos/messaging");
|
|
83
84
|
var import_network_manager3 = require("@dxos/network-manager");
|
|
84
85
|
var import_async5 = require("@dxos/async");
|
|
85
86
|
var import_client_protocol4 = require("@dxos/client-protocol");
|
|
86
|
-
var
|
|
87
|
+
var import_invariant3 = require("@dxos/invariant");
|
|
87
88
|
var import_log4 = require("@dxos/log");
|
|
88
89
|
var import_rpc3 = require("@dxos/rpc");
|
|
89
90
|
var import_util3 = require("@dxos/util");
|
|
@@ -190,7 +191,7 @@ var IFrameHostRuntime = class {
|
|
|
190
191
|
iceServers: this._config.get("runtime.services.ice")
|
|
191
192
|
});
|
|
192
193
|
const signals = this._config.get("runtime.services.signaling");
|
|
193
|
-
this._clientServices = new
|
|
194
|
+
this._clientServices = new import_chunk_EC2QGJ2V.ClientServicesHost({
|
|
194
195
|
lockKey: LOCK_KEY,
|
|
195
196
|
config: this._config,
|
|
196
197
|
signalManager: signals ? new import_messaging.WebsocketSignalManager(signals) : new import_messaging.MemorySignalManager(new import_messaging.MemorySignalManagerContext()),
|
|
@@ -216,7 +217,7 @@ var IFrameHostRuntime = class {
|
|
|
216
217
|
return handler(method, params);
|
|
217
218
|
}
|
|
218
219
|
};
|
|
219
|
-
this._clientRpc = new
|
|
220
|
+
this._clientRpc = new import_chunk_EC2QGJ2V.ClientRpcServer({
|
|
220
221
|
serviceRegistry: this._clientServices.serviceRegistry,
|
|
221
222
|
port: this._appPort,
|
|
222
223
|
...middleware
|
|
@@ -279,7 +280,7 @@ var SharedWorkerConnection = class {
|
|
|
279
280
|
get shell() {
|
|
280
281
|
return this._shellRuntime;
|
|
281
282
|
}
|
|
282
|
-
async open(
|
|
283
|
+
async open(params) {
|
|
283
284
|
this._config = await (0, import_util2.getAsyncValue)(this._configProvider);
|
|
284
285
|
this._transportService = new import_network_manager2.SimplePeerTransportService({
|
|
285
286
|
iceServers: this._config.get("runtime.services.ice")
|
|
@@ -297,7 +298,7 @@ var SharedWorkerConnection = class {
|
|
|
297
298
|
});
|
|
298
299
|
let lockKey;
|
|
299
300
|
if (typeof navigator !== "undefined") {
|
|
300
|
-
lockKey = this._lockKey(origin);
|
|
301
|
+
lockKey = this._lockKey(params.origin);
|
|
301
302
|
this._release = new import_async3.Trigger();
|
|
302
303
|
const ready = new import_async3.Trigger();
|
|
303
304
|
void navigator.locks.request(lockKey, async () => {
|
|
@@ -309,13 +310,13 @@ var SharedWorkerConnection = class {
|
|
|
309
310
|
try {
|
|
310
311
|
await this._systemRpc.open();
|
|
311
312
|
await this._systemRpc.rpc.WorkerService.start({
|
|
312
|
-
|
|
313
|
-
|
|
313
|
+
lockKey,
|
|
314
|
+
...params
|
|
314
315
|
});
|
|
315
316
|
} catch (err) {
|
|
316
317
|
import_log2.log.catch(err, void 0, {
|
|
317
318
|
F: __dxlog_file3,
|
|
318
|
-
L:
|
|
319
|
+
L: 95,
|
|
319
320
|
S: this,
|
|
320
321
|
C: (f, a) => f(...a)
|
|
321
322
|
});
|
|
@@ -351,9 +352,9 @@ var WorkerSession = class {
|
|
|
351
352
|
constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }) {
|
|
352
353
|
this._startTrigger = new import_async5.Trigger();
|
|
353
354
|
this.onClose = new import_util3.Callback();
|
|
354
|
-
(0,
|
|
355
|
+
(0, import_invariant3.invariant)(serviceHost, void 0, {
|
|
355
356
|
F: __dxlog_file4,
|
|
356
|
-
L:
|
|
357
|
+
L: 54,
|
|
357
358
|
S: this,
|
|
358
359
|
A: [
|
|
359
360
|
"serviceHost",
|
|
@@ -381,12 +382,12 @@ var WorkerSession = class {
|
|
|
381
382
|
return handler(method, params);
|
|
382
383
|
}
|
|
383
384
|
};
|
|
384
|
-
this._clientRpc = new
|
|
385
|
+
this._clientRpc = new import_chunk_EC2QGJ2V.ClientRpcServer({
|
|
385
386
|
serviceRegistry: this._serviceHost.serviceRegistry,
|
|
386
387
|
port: appPort,
|
|
387
388
|
...middleware
|
|
388
389
|
});
|
|
389
|
-
this._shellClientRpc = shellPort ? new
|
|
390
|
+
this._shellClientRpc = shellPort ? new import_chunk_EC2QGJ2V.ClientRpcServer({
|
|
390
391
|
serviceRegistry: this._serviceHost.serviceRegistry,
|
|
391
392
|
port: shellPort,
|
|
392
393
|
...middleware
|
|
@@ -399,6 +400,8 @@ var WorkerSession = class {
|
|
|
399
400
|
start: async (request) => {
|
|
400
401
|
this.origin = request.origin;
|
|
401
402
|
this.lockKey = request.lockKey;
|
|
403
|
+
this.observabilityGroup = request.observabilityGroup;
|
|
404
|
+
this.signalTelemetryEnabled = request.signalTelemetryEnabled;
|
|
402
405
|
this._startTrigger.wake();
|
|
403
406
|
},
|
|
404
407
|
stop: async () => {
|
|
@@ -408,7 +411,7 @@ var WorkerSession = class {
|
|
|
408
411
|
} catch (err) {
|
|
409
412
|
import_log4.log.catch(err, void 0, {
|
|
410
413
|
F: __dxlog_file4,
|
|
411
|
-
L:
|
|
414
|
+
L: 108,
|
|
412
415
|
S: this,
|
|
413
416
|
C: (f, a) => f(...a)
|
|
414
417
|
});
|
|
@@ -425,7 +428,7 @@ var WorkerSession = class {
|
|
|
425
428
|
async open() {
|
|
426
429
|
import_log4.log.info("opening...", void 0, {
|
|
427
430
|
F: __dxlog_file4,
|
|
428
|
-
L:
|
|
431
|
+
L: 122,
|
|
429
432
|
S: this,
|
|
430
433
|
C: (f, a) => f(...a)
|
|
431
434
|
});
|
|
@@ -442,7 +445,7 @@ var WorkerSession = class {
|
|
|
442
445
|
}
|
|
443
446
|
import_log4.log.info("opened", void 0, {
|
|
444
447
|
F: __dxlog_file4,
|
|
445
|
-
L:
|
|
448
|
+
L: 133,
|
|
446
449
|
S: this,
|
|
447
450
|
C: (f, a) => f(...a)
|
|
448
451
|
});
|
|
@@ -450,7 +453,7 @@ var WorkerSession = class {
|
|
|
450
453
|
async close() {
|
|
451
454
|
import_log4.log.info("closing...", void 0, {
|
|
452
455
|
F: __dxlog_file4,
|
|
453
|
-
L:
|
|
456
|
+
L: 137,
|
|
454
457
|
S: this,
|
|
455
458
|
C: (f, a) => f(...a)
|
|
456
459
|
});
|
|
@@ -459,7 +462,7 @@ var WorkerSession = class {
|
|
|
459
462
|
} catch (err) {
|
|
460
463
|
import_log4.log.catch(err, void 0, {
|
|
461
464
|
F: __dxlog_file4,
|
|
462
|
-
L:
|
|
465
|
+
L: 141,
|
|
463
466
|
S: this,
|
|
464
467
|
C: (f, a) => f(...a)
|
|
465
468
|
});
|
|
@@ -470,7 +473,7 @@ var WorkerSession = class {
|
|
|
470
473
|
]);
|
|
471
474
|
import_log4.log.info("closed", void 0, {
|
|
472
475
|
F: __dxlog_file4,
|
|
473
|
-
L:
|
|
476
|
+
L: 145,
|
|
474
477
|
S: this,
|
|
475
478
|
C: (f, a) => f(...a)
|
|
476
479
|
});
|
|
@@ -481,7 +484,7 @@ var WorkerSession = class {
|
|
|
481
484
|
} catch {
|
|
482
485
|
import_log4.log.info("No shell connected.", void 0, {
|
|
483
486
|
F: __dxlog_file4,
|
|
484
|
-
L:
|
|
487
|
+
L: 152,
|
|
485
488
|
S: this,
|
|
486
489
|
C: (f, a) => f(...a)
|
|
487
490
|
});
|
|
@@ -505,9 +508,13 @@ var WorkerRuntime = class {
|
|
|
505
508
|
this._transportFactory = new import_network_manager3.SimplePeerTransportProxyFactory();
|
|
506
509
|
this._ready = new import_async4.Trigger();
|
|
507
510
|
this._sessions = /* @__PURE__ */ new Set();
|
|
511
|
+
this._signalMetadataTags = {
|
|
512
|
+
runtime: "worker-runtime"
|
|
513
|
+
};
|
|
514
|
+
this._signalTelemetryEnabled = false;
|
|
508
515
|
this._acquireLock = acquireLock;
|
|
509
516
|
this._releaseLock = releaseLock;
|
|
510
|
-
this._clientServices = new
|
|
517
|
+
this._clientServices = new import_chunk_EC2QGJ2V.ClientServicesHost({
|
|
511
518
|
callbacks: {
|
|
512
519
|
onReset: async () => onReset()
|
|
513
520
|
}
|
|
@@ -519,7 +526,7 @@ var WorkerRuntime = class {
|
|
|
519
526
|
async start() {
|
|
520
527
|
(0, import_log3.log)("starting...", void 0, {
|
|
521
528
|
F: __dxlog_file5,
|
|
522
|
-
L:
|
|
529
|
+
L: 71,
|
|
523
530
|
S: this,
|
|
524
531
|
C: (f, a) => f(...a)
|
|
525
532
|
});
|
|
@@ -529,22 +536,29 @@ var WorkerRuntime = class {
|
|
|
529
536
|
const signals = this._config.get("runtime.services.signaling");
|
|
530
537
|
this._clientServices.initialize({
|
|
531
538
|
config: this._config,
|
|
532
|
-
signalManager: signals ? new import_messaging2.WebsocketSignalManager(signals) : new import_messaging2.MemorySignalManager(new import_messaging2.MemorySignalManagerContext()),
|
|
539
|
+
signalManager: signals ? new import_messaging2.WebsocketSignalManager(signals, () => this._signalTelemetryEnabled ? this._signalMetadataTags : {}) : new import_messaging2.MemorySignalManager(new import_messaging2.MemorySignalManagerContext()),
|
|
533
540
|
transportFactory: this._transportFactory
|
|
534
541
|
});
|
|
535
542
|
await this._clientServices.open(new import_context2.Context());
|
|
536
543
|
this._ready.wake(void 0);
|
|
537
544
|
(0, import_log3.log)("started", void 0, {
|
|
538
545
|
F: __dxlog_file5,
|
|
539
|
-
L:
|
|
546
|
+
L: 86,
|
|
540
547
|
S: this,
|
|
541
548
|
C: (f, a) => f(...a)
|
|
542
549
|
});
|
|
550
|
+
(0, import_messaging2.setIdentityTags)({
|
|
551
|
+
identityService: this._clientServices.services.IdentityService,
|
|
552
|
+
devicesService: this._clientServices.services.DevicesService,
|
|
553
|
+
setTag: (k, v) => {
|
|
554
|
+
this._signalMetadataTags[k] = v;
|
|
555
|
+
}
|
|
556
|
+
});
|
|
543
557
|
} catch (err) {
|
|
544
558
|
this._ready.wake(err);
|
|
545
559
|
import_log3.log.error("starting", err, {
|
|
546
560
|
F: __dxlog_file5,
|
|
547
|
-
L:
|
|
561
|
+
L: 96,
|
|
548
562
|
S: this,
|
|
549
563
|
C: (f, a) => f(...a)
|
|
550
564
|
});
|
|
@@ -574,6 +588,20 @@ var WorkerRuntime = class {
|
|
|
574
588
|
}
|
|
575
589
|
});
|
|
576
590
|
await session.open();
|
|
591
|
+
(0, import_invariant2.invariant)(!this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin, `worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`, {
|
|
592
|
+
F: __dxlog_file5,
|
|
593
|
+
L: 131,
|
|
594
|
+
S: this,
|
|
595
|
+
A: [
|
|
596
|
+
"!this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin",
|
|
597
|
+
"`worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`"
|
|
598
|
+
]
|
|
599
|
+
});
|
|
600
|
+
if (session.observabilityGroup) {
|
|
601
|
+
this._signalMetadataTags.group = session.observabilityGroup;
|
|
602
|
+
}
|
|
603
|
+
this._signalTelemetryEnabled = session.signalTelemetryEnabled ?? false;
|
|
604
|
+
this._signalMetadataTags.origin = session.origin;
|
|
577
605
|
this._sessions.add(session);
|
|
578
606
|
this._reconnectWebrtc();
|
|
579
607
|
}
|
|
@@ -583,7 +611,7 @@ var WorkerRuntime = class {
|
|
|
583
611
|
_reconnectWebrtc() {
|
|
584
612
|
(0, import_log3.log)("reconnecting webrtc...", void 0, {
|
|
585
613
|
F: __dxlog_file5,
|
|
586
|
-
L:
|
|
614
|
+
L: 149,
|
|
587
615
|
S: this,
|
|
588
616
|
C: (f, a) => f(...a)
|
|
589
617
|
});
|
|
@@ -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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAAwB;AACxB,6BAA4D;AAE5D,qBAAwB;AACxB,iBAA6B;AAC7B,uBAAwF;AACxF,6BAAwE;AAExE,kBAAgE;ACRhE,IAAAA,gBAAsB;AACtB,IAAAC,0BAA+F;AAC/F,uBAA0B;AAE1B,oBAAwE;AACxE,iBAAoE;ACLpE,IAAAD,gBAAwB;AACxB,IAAAC,0BAKO;AAEP,IAAAC,cAAoB;AACpB,IAAAC,0BAA2C;AAC3C,uBAA6C;AAE7C,IAAAC,cAAoE;AACpE,IAAAC,eAAgE;ACbhE,IAAAL,gBAAwB;AAExB,IAAAM,kBAAwB;AACxB,
|
|
6
|
-
"names": ["import_async", "import_client_protocol", "import_log", "import_network_manager", "import_rpc", "import_util", "import_context", "
|
|
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": ["import_async", "import_client_protocol", "import_log", "import_network_manager", "import_rpc", "import_util", "import_context", "import_invariant", "import_messaging", "ShellRuntimeImpl", "constructor", "_port", "layoutUpdate", "Event", "_layout", "ShellLayout", "DEFAULT", "layout", "invitationCode", "_invitationCode", "spaceKey", "_spaceKey", "setLayout", "emit", "setAppContext", "context", "invariant", "_appRpc", "rpc", "AppService", "setContext", "open", "createProtoRpcPeer", "requested", "appServiceBundle", "exposed", "shellServiceBundle", "handlers", "ShellService", "request", "port", "close", "undefined", "LOCK_KEY", "IFrameHostRuntime", "config", "origin", "appPort", "shellPort", "_ready", "Trigger", "_configProvider", "_appPort", "_shellPort", "_shellRuntime", "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", "Promise", "all", "Context", "wake", "err", "catch", "stop", "logInfo", "SharedWorkerConnection", "systemPort", "_id", "String", "Math", "floor", "random", "_release", "_systemPort", "_transportService", "SimplePeerTransportService", "_systemRpc", "workerServiceBundle", "iframeServiceBundle", "BridgeService", "navigator", "_lockKey", "ready", "locks", "WorkerService", "RemoteServiceConnectionError", "WorkerSession", "serviceHost", "readySignal", "_startTrigger", "onClose", "Callback", "_serviceHost", "_shellClientRpc", "_iframeRpc", "observabilityGroup", "signalTelemetryEnabled", "setTimeout", "bridgeService", "info", "_maybeOpenShell", "_afterLockReleases", "callIfSet", "asyncTimeout", "callback", "then", "WorkerRuntime", "acquireLock", "releaseLock", "onReset", "SimplePeerTransportProxyFactory", "_sessions", "Set", "_signalMetadataTags", "runtime", "_signalTelemetryEnabled", "_acquireLock", "_releaseLock", "callbacks", "host", "initialize", "setIdentityTags", "identityService", "IdentityService", "devicesService", "DevicesService", "setTag", "k", "v", "createSession", "session", "set", "delete", "size", "self", "_reconnectWebrtc", "group", "add", "_sessionForNetworking", "has", "selected", "Array", "from", "find", "setBridgeService"]
|
|
7
7
|
}
|