@dxos/client-services 0.4.10-main.99ef736 → 0.4.10-main.fa5a270
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-Z5IWAFLC.mjs → chunk-7PYX6UUA.mjs} +21 -29
- package/dist/lib/browser/{chunk-Z5IWAFLC.mjs.map → chunk-7PYX6UUA.mjs.map} +3 -3
- package/dist/lib/browser/index.mjs +20 -48
- 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-IMCYLQK4.cjs → chunk-4TX623I7.cjs} +24 -32
- package/dist/lib/node/{chunk-IMCYLQK4.cjs.map → chunk-4TX623I7.cjs.map} +2 -2
- package/dist/lib/node/index.cjs +57 -85
- 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/services/service-host.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 +0 -2
- package/dist/types/src/packlets/vault/worker-runtime.d.ts.map +1 -1
- package/dist/types/src/packlets/vault/worker-session.d.ts +0 -2
- 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/services/service-host.ts +0 -3
- package/src/packlets/vault/shared-worker-connection.ts +8 -3
- package/src/packlets/vault/worker-runtime.ts +2 -27
- package/src/packlets/vault/worker-session.ts +0 -6
- package/src/version.ts +1 -1
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_4TX623I7.ClientRpcServer,
|
|
22
|
+
ClientServicesHost: () => import_chunk_4TX623I7.ClientServicesHost,
|
|
23
|
+
DataSpace: () => import_chunk_4TX623I7.DataSpace,
|
|
24
|
+
DataSpaceManager: () => import_chunk_4TX623I7.DataSpaceManager,
|
|
25
|
+
DeviceInvitationProtocol: () => import_chunk_4TX623I7.DeviceInvitationProtocol,
|
|
26
|
+
DevtoolsHostEvents: () => import_chunk_4TX623I7.DevtoolsHostEvents,
|
|
27
|
+
DevtoolsServiceImpl: () => import_chunk_4TX623I7.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_4TX623I7.Identity,
|
|
30
|
+
IdentityManager: () => import_chunk_4TX623I7.IdentityManager,
|
|
31
|
+
IdentityServiceImpl: () => import_chunk_4TX623I7.IdentityServiceImpl,
|
|
32
|
+
InvitationsHandler: () => import_chunk_4TX623I7.InvitationsHandler,
|
|
33
|
+
InvitationsServiceImpl: () => import_chunk_4TX623I7.InvitationsServiceImpl,
|
|
34
|
+
Lock: () => import_chunk_4TX623I7.Lock,
|
|
35
|
+
ServiceContext: () => import_chunk_4TX623I7.ServiceContext,
|
|
36
|
+
ServiceRegistry: () => import_chunk_4TX623I7.ServiceRegistry,
|
|
37
37
|
SharedWorkerConnection: () => SharedWorkerConnection,
|
|
38
38
|
ShellRuntimeImpl: () => ShellRuntimeImpl,
|
|
39
|
-
SpaceInvitationProtocol: () =>
|
|
40
|
-
SpacesServiceImpl: () =>
|
|
41
|
-
TrustedKeySetAuthVerifier: () =>
|
|
39
|
+
SpaceInvitationProtocol: () => import_chunk_4TX623I7.SpaceInvitationProtocol,
|
|
40
|
+
SpacesServiceImpl: () => import_chunk_4TX623I7.SpacesServiceImpl,
|
|
41
|
+
TrustedKeySetAuthVerifier: () => import_chunk_4TX623I7.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_4TX623I7.createAuthProvider,
|
|
45
|
+
createDiagnostics: () => import_chunk_4TX623I7.createDiagnostics,
|
|
46
|
+
createStorageObjects: () => import_chunk_4TX623I7.createStorageObjects,
|
|
47
|
+
getNetworkPeers: () => import_chunk_4TX623I7.getNetworkPeers,
|
|
48
|
+
invitationExpired: () => import_chunk_4TX623I7.invitationExpired,
|
|
49
|
+
isLocked: () => import_chunk_4TX623I7.isLocked,
|
|
50
|
+
subscribeToFeedBlocks: () => import_chunk_4TX623I7.subscribeToFeedBlocks,
|
|
51
|
+
subscribeToFeeds: () => import_chunk_4TX623I7.subscribeToFeeds,
|
|
52
|
+
subscribeToNetworkStatus: () => import_chunk_4TX623I7.subscribeToNetworkStatus,
|
|
53
|
+
subscribeToNetworkTopics: () => import_chunk_4TX623I7.subscribeToNetworkTopics,
|
|
54
|
+
subscribeToSignal: () => import_chunk_4TX623I7.subscribeToSignal,
|
|
55
|
+
subscribeToSpaces: () => import_chunk_4TX623I7.subscribeToSpaces,
|
|
56
|
+
subscribeToSwarmInfo: () => import_chunk_4TX623I7.subscribeToSwarmInfo
|
|
57
57
|
});
|
|
58
58
|
module.exports = __toCommonJS(node_exports);
|
|
59
|
-
var
|
|
59
|
+
var import_chunk_4TX623I7 = require("./chunk-4TX623I7.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,13 +78,12 @@ 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");
|
|
82
81
|
var import_log3 = require("@dxos/log");
|
|
83
82
|
var import_messaging2 = require("@dxos/messaging");
|
|
84
83
|
var import_network_manager3 = require("@dxos/network-manager");
|
|
85
84
|
var import_async5 = require("@dxos/async");
|
|
86
85
|
var import_client_protocol4 = require("@dxos/client-protocol");
|
|
87
|
-
var
|
|
86
|
+
var import_invariant2 = require("@dxos/invariant");
|
|
88
87
|
var import_log4 = require("@dxos/log");
|
|
89
88
|
var import_rpc3 = require("@dxos/rpc");
|
|
90
89
|
var import_util3 = require("@dxos/util");
|
|
@@ -191,7 +190,7 @@ var IFrameHostRuntime = class {
|
|
|
191
190
|
iceServers: this._config.get("runtime.services.ice")
|
|
192
191
|
});
|
|
193
192
|
const signals = this._config.get("runtime.services.signaling");
|
|
194
|
-
this._clientServices = new
|
|
193
|
+
this._clientServices = new import_chunk_4TX623I7.ClientServicesHost({
|
|
195
194
|
lockKey: LOCK_KEY,
|
|
196
195
|
config: this._config,
|
|
197
196
|
signalManager: signals ? new import_messaging.WebsocketSignalManager(signals) : new import_messaging.MemorySignalManager(new import_messaging.MemorySignalManagerContext()),
|
|
@@ -217,7 +216,7 @@ var IFrameHostRuntime = class {
|
|
|
217
216
|
return handler(method, params);
|
|
218
217
|
}
|
|
219
218
|
};
|
|
220
|
-
this._clientRpc = new
|
|
219
|
+
this._clientRpc = new import_chunk_4TX623I7.ClientRpcServer({
|
|
221
220
|
serviceRegistry: this._clientServices.serviceRegistry,
|
|
222
221
|
port: this._appPort,
|
|
223
222
|
...middleware
|
|
@@ -280,7 +279,7 @@ var SharedWorkerConnection = class {
|
|
|
280
279
|
get shell() {
|
|
281
280
|
return this._shellRuntime;
|
|
282
281
|
}
|
|
283
|
-
async open(
|
|
282
|
+
async open(origin) {
|
|
284
283
|
this._config = await (0, import_util2.getAsyncValue)(this._configProvider);
|
|
285
284
|
this._transportService = new import_network_manager2.SimplePeerTransportService({
|
|
286
285
|
iceServers: this._config.get("runtime.services.ice")
|
|
@@ -298,7 +297,7 @@ var SharedWorkerConnection = class {
|
|
|
298
297
|
});
|
|
299
298
|
let lockKey;
|
|
300
299
|
if (typeof navigator !== "undefined") {
|
|
301
|
-
lockKey = this._lockKey(
|
|
300
|
+
lockKey = this._lockKey(origin);
|
|
302
301
|
this._release = new import_async3.Trigger();
|
|
303
302
|
const ready = new import_async3.Trigger();
|
|
304
303
|
void navigator.locks.request(lockKey, async () => {
|
|
@@ -310,13 +309,13 @@ var SharedWorkerConnection = class {
|
|
|
310
309
|
try {
|
|
311
310
|
await this._systemRpc.open();
|
|
312
311
|
await this._systemRpc.rpc.WorkerService.start({
|
|
313
|
-
|
|
314
|
-
|
|
312
|
+
origin,
|
|
313
|
+
lockKey
|
|
315
314
|
});
|
|
316
315
|
} catch (err) {
|
|
317
316
|
import_log2.log.catch(err, void 0, {
|
|
318
317
|
F: __dxlog_file3,
|
|
319
|
-
L:
|
|
318
|
+
L: 100,
|
|
320
319
|
S: this,
|
|
321
320
|
C: (f, a) => f(...a)
|
|
322
321
|
});
|
|
@@ -352,9 +351,9 @@ var WorkerSession = class {
|
|
|
352
351
|
constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }) {
|
|
353
352
|
this._startTrigger = new import_async5.Trigger();
|
|
354
353
|
this.onClose = new import_util3.Callback();
|
|
355
|
-
(0,
|
|
354
|
+
(0, import_invariant2.invariant)(serviceHost, void 0, {
|
|
356
355
|
F: __dxlog_file4,
|
|
357
|
-
L:
|
|
356
|
+
L: 50,
|
|
358
357
|
S: this,
|
|
359
358
|
A: [
|
|
360
359
|
"serviceHost",
|
|
@@ -382,12 +381,12 @@ var WorkerSession = class {
|
|
|
382
381
|
return handler(method, params);
|
|
383
382
|
}
|
|
384
383
|
};
|
|
385
|
-
this._clientRpc = new
|
|
384
|
+
this._clientRpc = new import_chunk_4TX623I7.ClientRpcServer({
|
|
386
385
|
serviceRegistry: this._serviceHost.serviceRegistry,
|
|
387
386
|
port: appPort,
|
|
388
387
|
...middleware
|
|
389
388
|
});
|
|
390
|
-
this._shellClientRpc = shellPort ? new
|
|
389
|
+
this._shellClientRpc = shellPort ? new import_chunk_4TX623I7.ClientRpcServer({
|
|
391
390
|
serviceRegistry: this._serviceHost.serviceRegistry,
|
|
392
391
|
port: shellPort,
|
|
393
392
|
...middleware
|
|
@@ -400,8 +399,6 @@ var WorkerSession = class {
|
|
|
400
399
|
start: async (request) => {
|
|
401
400
|
this.origin = request.origin;
|
|
402
401
|
this.lockKey = request.lockKey;
|
|
403
|
-
this.observabilityGroup = request.observabilityGroup;
|
|
404
|
-
this.signalTelemetryEnabled = request.signalTelemetryEnabled;
|
|
405
402
|
this._startTrigger.wake();
|
|
406
403
|
},
|
|
407
404
|
stop: async () => {
|
|
@@ -411,7 +408,7 @@ var WorkerSession = class {
|
|
|
411
408
|
} catch (err) {
|
|
412
409
|
import_log4.log.catch(err, void 0, {
|
|
413
410
|
F: __dxlog_file4,
|
|
414
|
-
L:
|
|
411
|
+
L: 102,
|
|
415
412
|
S: this,
|
|
416
413
|
C: (f, a) => f(...a)
|
|
417
414
|
});
|
|
@@ -428,7 +425,7 @@ var WorkerSession = class {
|
|
|
428
425
|
async open() {
|
|
429
426
|
import_log4.log.info("opening...", void 0, {
|
|
430
427
|
F: __dxlog_file4,
|
|
431
|
-
L:
|
|
428
|
+
L: 116,
|
|
432
429
|
S: this,
|
|
433
430
|
C: (f, a) => f(...a)
|
|
434
431
|
});
|
|
@@ -445,7 +442,7 @@ var WorkerSession = class {
|
|
|
445
442
|
}
|
|
446
443
|
import_log4.log.info("opened", void 0, {
|
|
447
444
|
F: __dxlog_file4,
|
|
448
|
-
L:
|
|
445
|
+
L: 127,
|
|
449
446
|
S: this,
|
|
450
447
|
C: (f, a) => f(...a)
|
|
451
448
|
});
|
|
@@ -453,7 +450,7 @@ var WorkerSession = class {
|
|
|
453
450
|
async close() {
|
|
454
451
|
import_log4.log.info("closing...", void 0, {
|
|
455
452
|
F: __dxlog_file4,
|
|
456
|
-
L:
|
|
453
|
+
L: 131,
|
|
457
454
|
S: this,
|
|
458
455
|
C: (f, a) => f(...a)
|
|
459
456
|
});
|
|
@@ -462,7 +459,7 @@ var WorkerSession = class {
|
|
|
462
459
|
} catch (err) {
|
|
463
460
|
import_log4.log.catch(err, void 0, {
|
|
464
461
|
F: __dxlog_file4,
|
|
465
|
-
L:
|
|
462
|
+
L: 135,
|
|
466
463
|
S: this,
|
|
467
464
|
C: (f, a) => f(...a)
|
|
468
465
|
});
|
|
@@ -473,7 +470,7 @@ var WorkerSession = class {
|
|
|
473
470
|
]);
|
|
474
471
|
import_log4.log.info("closed", void 0, {
|
|
475
472
|
F: __dxlog_file4,
|
|
476
|
-
L:
|
|
473
|
+
L: 139,
|
|
477
474
|
S: this,
|
|
478
475
|
C: (f, a) => f(...a)
|
|
479
476
|
});
|
|
@@ -484,7 +481,7 @@ var WorkerSession = class {
|
|
|
484
481
|
} catch {
|
|
485
482
|
import_log4.log.info("No shell connected.", void 0, {
|
|
486
483
|
F: __dxlog_file4,
|
|
487
|
-
L:
|
|
484
|
+
L: 146,
|
|
488
485
|
S: this,
|
|
489
486
|
C: (f, a) => f(...a)
|
|
490
487
|
});
|
|
@@ -508,13 +505,9 @@ var WorkerRuntime = class {
|
|
|
508
505
|
this._transportFactory = new import_network_manager3.SimplePeerTransportProxyFactory();
|
|
509
506
|
this._ready = new import_async4.Trigger();
|
|
510
507
|
this._sessions = /* @__PURE__ */ new Set();
|
|
511
|
-
this._signalMetadataTags = {
|
|
512
|
-
runtime: "worker-runtime"
|
|
513
|
-
};
|
|
514
|
-
this._signalTelemetryEnabled = false;
|
|
515
508
|
this._acquireLock = acquireLock;
|
|
516
509
|
this._releaseLock = releaseLock;
|
|
517
|
-
this._clientServices = new
|
|
510
|
+
this._clientServices = new import_chunk_4TX623I7.ClientServicesHost({
|
|
518
511
|
callbacks: {
|
|
519
512
|
onReset: async () => onReset()
|
|
520
513
|
}
|
|
@@ -526,7 +519,7 @@ var WorkerRuntime = class {
|
|
|
526
519
|
async start() {
|
|
527
520
|
(0, import_log3.log)("starting...", void 0, {
|
|
528
521
|
F: __dxlog_file5,
|
|
529
|
-
L:
|
|
522
|
+
L: 63,
|
|
530
523
|
S: this,
|
|
531
524
|
C: (f, a) => f(...a)
|
|
532
525
|
});
|
|
@@ -536,29 +529,22 @@ var WorkerRuntime = class {
|
|
|
536
529
|
const signals = this._config.get("runtime.services.signaling");
|
|
537
530
|
this._clientServices.initialize({
|
|
538
531
|
config: this._config,
|
|
539
|
-
signalManager: signals ? new import_messaging2.WebsocketSignalManager(signals
|
|
532
|
+
signalManager: signals ? new import_messaging2.WebsocketSignalManager(signals) : new import_messaging2.MemorySignalManager(new import_messaging2.MemorySignalManagerContext()),
|
|
540
533
|
transportFactory: this._transportFactory
|
|
541
534
|
});
|
|
542
535
|
await this._clientServices.open(new import_context2.Context());
|
|
543
536
|
this._ready.wake(void 0);
|
|
544
537
|
(0, import_log3.log)("started", void 0, {
|
|
545
538
|
F: __dxlog_file5,
|
|
546
|
-
L:
|
|
539
|
+
L: 78,
|
|
547
540
|
S: this,
|
|
548
541
|
C: (f, a) => f(...a)
|
|
549
542
|
});
|
|
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
|
-
});
|
|
557
543
|
} catch (err) {
|
|
558
544
|
this._ready.wake(err);
|
|
559
545
|
import_log3.log.error("starting", err, {
|
|
560
546
|
F: __dxlog_file5,
|
|
561
|
-
L:
|
|
547
|
+
L: 81,
|
|
562
548
|
S: this,
|
|
563
549
|
C: (f, a) => f(...a)
|
|
564
550
|
});
|
|
@@ -588,20 +574,6 @@ var WorkerRuntime = class {
|
|
|
588
574
|
}
|
|
589
575
|
});
|
|
590
576
|
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;
|
|
605
577
|
this._sessions.add(session);
|
|
606
578
|
this._reconnectWebrtc();
|
|
607
579
|
}
|
|
@@ -611,7 +583,7 @@ var WorkerRuntime = class {
|
|
|
611
583
|
_reconnectWebrtc() {
|
|
612
584
|
(0, import_log3.log)("reconnecting webrtc...", void 0, {
|
|
613
585
|
F: __dxlog_file5,
|
|
614
|
-
L:
|
|
586
|
+
L: 124,
|
|
615
587
|
S: this,
|
|
616
588
|
C: (f, a) => f(...a)
|
|
617
589
|
});
|
|
@@ -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(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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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(\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,IAAAJ,cAAoB;AACpB,IAAAK,oBAAwF;AACxF,IAAAJ,0BAAgD;ACLhD,IAAAH,gBAAsC;AACtC,IAAAC,0BAKO;AACP,IAAAO,oBAA0B;AAC1B,IAAAN,cAA6B;AAE7B,IAAAE,cAAoE;AACpE,IAAAC,eAA4C;;AHDrC,IAAMI,mBAAN,MAAMA;EAOXC,YAA6BC,OAAgB;SAAhBA,QAAAA;SANpBC,eAAe,IAAIC,oBAAAA;SAEpBC,UAAUC,0BAAYC;EAIgB;EAE9C,IAAIC,SAAS;AACX,WAAO,KAAKH;EACd;EAEA,IAAII,iBAAiB;AACnB,WAAO,KAAKC;EACd;EAEA,IAAIC,WAAW;AACb,WAAO,KAAKC;EACd;EAEAC,UAAU,EAAEL,QAAQC,gBAAgBE,SAAQ,GAAmB;AAC7D,SAAKN,UAAUG;AACf,SAAKE,kBAAkBD;AACvB,SAAKG,YAAYD;AACjB,SAAKR,aAAaW,KAAK;MAAEN;MAAQC;MAAgBE;IAAS,CAAA;EAC5D;EAEA,MAAMI,cAAcC,SAA4B;AAC9CC,oCAAU,KAAKC,SAAS,oBAAA;;;;;;;;;AAExB,UAAM,KAAKA,QAAQC,IAAIC,WAAWC,WAAWL,OAAAA;EAC/C;EAEA,MAAMM,OAAO;AACX,SAAKJ,cAAUK,+BAAmB;MAChCC,WAAWC;MACXC,SAASC;MACTC,UAAU;QACRC,cAAc;UACZhB,WAAW,OAAOiB,YAAAA;AAChB,iBAAKzB,UAAUyB,QAAQtB;AACvB,iBAAKE,kBAAkBoB,QAAQrB;AAC/B,iBAAKG,YAAYkB,QAAQnB;AACzB,iBAAKR,aAAaW,KAAKgB,OAAAA;UACzB;QACF;MACF;MACAC,MAAM,KAAK7B;IACb,CAAA;AAEA,UAAM,KAAKgB,QAAQI,KAAI;EACzB;EAEA,MAAMU,QAAQ;AACZ,UAAM,KAAKd,SAASc,MAAAA;AACpB,SAAKd,UAAUe;EACjB;AACF;;;;;;;;;;;;ADtDA,IAAMC,WAAW;AAiBV,IAAMC,oBAAN,MAAMA;EAiBXlC,YAAY,EAAEmC,QAAQC,QAAQC,SAASC,UAAS,GAA6B;AAf5DC,SAAAA,SAAS,IAAIC,qBAAAA;AAgB5B,SAAKC,kBAAkBN;AACvB,SAAKC,SAASA;AACd,SAAKM,WAAWL;AAChB,SAAKM,aAAaL;AAElB,QAAI,KAAKK,YAAY;AACnB,WAAKC,gBAAgB,IAAI7C,iBAAiB,KAAK4C,UAAU;IAC3D;EACF;EAEA,IAAIE,WAAW;AACb,WAAO,KAAKC;EACd;EAEA,IAAIC,QAAkC;AACpC,WAAO,KAAKH;EACd;EAEA,MAAMI,QAAQ;AACZC,wBAAI,eAAA,QAAA;;;;;;AACJ,QAAI;AACF,WAAKC,UAAU,UAAMC,2BAAc,KAAKV,eAAe;AACvD,WAAKW,wBAAoBC,yDAAiC;QACxDC,YAAY,KAAKJ,QAAQK,IAAI,sBAAA;MAC/B,CAAA;AACA,YAAMC,UAAU,KAAKN,QAAQK,IAAI,4BAAA;AACjC,WAAKT,kBAAkB,IAAIW,yCAAmB;QAC5CC,SAASzB;QACTE,QAAQ,KAAKe;QACbS,eAAeH,UACX,IAAII,wCAAuBJ,OAAAA,IAC3B,IAAIK,qCAAoB,IAAIC,4CAAAA,CAAAA;QAChCC,kBAAkB,KAAKX;MACzB,CAAA;AAEA,YAAMY,aAAyE;QAC7EC,YAAY,OAAOC,QAAQC,QAAQC,YAAAA;AACjC,gBAAMC,QAAQ,MAAM,KAAK9B,OAAO+B,KAAK;YAAEC,SAASC;UAAyB,CAAA;AACzE,cAAIH,OAAO;AACT,kBAAMA;UACR;AAEA,iBAAOD,QAAQF,QAAQC,MAAAA;QACzB;QACAM,cAAc,OAAOP,QAAQC,QAAQC,YAAAA;AACnC,gBAAMC,QAAQ,MAAM,KAAK9B,OAAO+B,KAAK;YAAEC,SAASC;UAAyB,CAAA;AACzE,cAAIH,OAAO;AACT,kBAAMA;UACR;AAEA,iBAAOD,QAAQF,QAAQC,MAAAA;QACzB;MACF;AAEA,WAAKO,aAAa,IAAIC,sCAAgB;QACpCC,iBAAiB,KAAK9B,gBAAgB8B;QACtC9C,MAAM,KAAKY;QACX,GAAGsB;MACL,CAAA;AAEA,YAAMa,QAAQC,IAAI;QAAC,KAAKhC,gBAAgBzB,KAAK,IAAI0D,uBAAAA,CAAAA;QAAY,KAAKL,WAAWrD,KAAI;QAAI,KAAKuB,eAAevB,KAAAA;OAAO;AAChH,WAAKkB,OAAOyC,KAAKhD,MAAAA;AACjBiB,0BAAI,WAAA,QAAA;;;;;;IACN,SAASgC,KAAU;AACjB,WAAK1C,OAAOyC,KAAKC,GAAAA;AACjBhC,qBAAIiC,MAAMD,KAAAA,QAAAA;;;;;;IACZ;EACF;EAEA,MAAME,OAAO;AACXlC,wBAAI,eAAA,QAAA;;;;;;AACJ,UAAM,KAAKyB,WAAW3C,MAAK;AAC3B,UAAM,KAAKe,gBAAgBf,MAAK;AAChC,UAAM,KAAKa,eAAeb,MAAAA;AAC1BkB,wBAAI,WAAA,QAAA;;;;;;EACN;AACF;;EAhFGmC;GAdUlD,kBAAAA,WAAAA,UAAAA,MAAAA;;AEDN,IAAMmD,yBAAN,MAAMA;EAWXrF,YAAY,EAAEmC,QAAQmD,YAAYhD,UAAS,GAAmC;AAV7DiD,SAAAA,MAAMC,OAAOC,KAAKC,MAAMD,KAAKE,OAAM,IAAK,GAAA,CAAA;AAIjDC,SAAAA,WAAW,IAAIpD,cAAAA,QAAAA;AAOrB,SAAKC,kBAAkBN;AACvB,SAAK0D,cAAcP;AACnB,SAAK3C,aAAaL;AAElB,QAAI,KAAKK,YAAY;AACnB,WAAKC,gBAAgB,IAAI7C,iBAAiB,KAAK4C,UAAU;IAC3D;EACF;EAEA,IAAII,QAAkC;AACpC,WAAO,KAAKH;EACd;EAEA,MAAMvB,KAIJe,QACA;AACA,SAAKc,UAAU,UAAMC,aAAAA,eAAc,KAAKV,eAAe;AAEvD,SAAKqD,oBAAoB,IAAIC,mDAA2B;MACtDzC,YAAY,KAAKJ,QAAQK,IAAI,sBAAA;IAC/B,CAAA;AAEA,SAAKyC,iBAAa1E,YAAAA,oBAAmB;MACnCC,WAAW0E;MACXxE,SAASyE;MACTvE,UAAU;QACRwE,eAAe,KAAKL;MACtB;MACAhE,MAAM,KAAK+D;;;MAGXtB,SAAS;IACX,CAAA;AAEA,QAAIb;AACJ,QAAI,OAAO0C,cAAc,aAAa;AACpC1C,gBAAU,KAAK2C,SAASjE,MAAAA;AACxB,WAAKwD,WAAW,IAAIpD,cAAAA,QAAAA;AACpB,YAAM8D,QAAQ,IAAI9D,cAAAA,QAAAA;AAClB,WAAK4D,UAAUG,MAAM1E,QAAQ6B,SAAS,YAAA;AACpC4C,cAAMtB,KAAI;AACV,cAAM,KAAKY,SAAStB,KAAI;MAC1B,CAAA;AACA,YAAMgC,MAAMhC,KAAI;IAClB;AAEA,QAAI;AACF,YAAM,KAAK0B,WAAW3E,KAAI;AAC1B,YAAM,KAAK2E,WAAW9E,IAAIsF,cAAcxD,MAAM;QAAEZ;QAAQsB;MAAQ,CAAA;IAClE,SAASuB,KAAK;AACZhC,kBAAAA,IAAIiC,MAAMD,KAAAA,QAAAA;;;;;;AACV,YAAM,IAAIwB,8CAA6B,6BAAA;IACzC;AACA,UAAM,KAAK7D,eAAevB,KAAAA;EAC5B;EAEA,MAAMU,QAAQ;AACZ,SAAK6D,SAASZ,KAAI;AAClB,UAAM,KAAKpC,eAAeb,MAAAA;AAC1B,QAAI;AACF,YAAM,KAAKiE,WAAW9E,IAAIsF,cAAcrB,KAAI;IAC9C,QAAQ;IAER;AACA,UAAM,KAAKa,WAAWjE,MAAK;EAC7B;EAEQsE,SAASjE,QAAgB;AAC/B,WAAO,GAAGA,MAAAA,IAAU,KAAKmD,GAAG;EAC9B;AACF;;;;;;;;;;;;AExFO,IAAMmB,gBAAN,MAAMA;EAiBX1G,YAAY,EAAE2G,aAAarB,YAAYjD,SAASC,WAAWsE,YAAW,GAAyB;AAb9EC,SAAAA,gBAAgB,IAAIrE,cAAAA,QAAAA;AAGrBsE,SAAAA,UAAU,IAAIC,sBAAAA;AAW5B/F,0BAAAA,WAAU2F,aAAAA,QAAAA;;;;;;;;;AACV,SAAKK,eAAeL;AAEpB,UAAM3C,aAAyE;MAC7EC,YAAY,OAAOC,QAAQC,QAAQC,YAAAA;AACjC,cAAMC,QAAQ,MAAMuC,YAAYtC,KAAK;UAAEC,SAASC,wBAAAA;QAAyB,CAAA;AACzE,YAAIH,OAAO;AACT,gBAAMA;QACR;AAEA,eAAOD,QAAQF,QAAQC,MAAAA;MACzB;MACAM,cAAc,OAAOP,QAAQC,QAAQC,YAAAA;AACnC,cAAMC,QAAQ,MAAMuC,YAAYtC,KAAK;UAAEC,SAASC,wBAAAA;QAAyB,CAAA;AACzE,YAAIH,OAAO;AACT,gBAAMA;QACR;AAEA,eAAOD,QAAQF,QAAQC,MAAAA;MACzB;IACF;AAEA,SAAKO,aAAa,IAAIC,sCAAgB;MACpCC,iBAAiB,KAAKoC,aAAapC;MACnC9C,MAAMO;MACN,GAAG2B;IACL,CAAA;AAEA,SAAKiD,kBAAkB3E,YACnB,IAAIqC,sCAAgB;MAClBC,iBAAiB,KAAKoC,aAAapC;MACnC9C,MAAMQ;MACN,GAAG0B;IACL,CAAA,IACAhC;AAEJ,SAAKkF,iBAAa5F,YAAAA,oBAAmB;MACnCC,WAAW2E,wBAAAA;MACXzE,SAASwE,wBAAAA;MACTtE,UAAU;QACR6E,eAAe;UACbxD,OAAO,OAAOnB,YAAAA;AACZ,iBAAKO,SAASP,QAAQO;AACtB,iBAAKsB,UAAU7B,QAAQ6B;AACvB,iBAAKmD,cAAc7B,KAAI;UACzB;UAEAG,MAAM,YAAA;AACJgC,uBAAW,YAAA;AACT,kBAAI;AACF,sBAAM,KAAKpF,MAAK;cAClB,SAASkD,KAAU;AACjBhC,4BAAAA,IAAIiC,MAAMD,KAAAA,QAAAA;;;;;;cACZ;YACF,CAAA;UACF;QACF;MACF;MACAnD,MAAMwD;MACNf,SAAS;IACX,CAAA;AAEA,SAAK6C,gBAAgB,KAAKF,WAAWhG,IAAIiF;EAC3C;EAEA,MAAM9E,OAAO;AACX4B,gBAAAA,IAAIoE,KAAK,cAAA,QAAA;;;;;;AACT,UAAMxC,QAAQC,IAAI;MAAC,KAAKJ,WAAWrD,KAAI;MAAI,KAAK6F,WAAW7F,KAAI;MAAI,KAAKiG,gBAAe;KAAG;AAG1F,UAAM,KAAKT,cAAcvC,KAAK;MAAEC,SAASC,wBAAAA;IAAyB,CAAA;AAGlE,QAAI,KAAKd,SAAS;AAChB,WAAK,KAAK6D,mBAAmB,KAAK7D,SAAS,MAAM,KAAK3B,MAAK,CAAA;IAC7D;AAEAkB,gBAAAA,IAAIoE,KAAK,UAAA,QAAA;;;;;;EACX;EAEA,MAAMtF,QAAQ;AACZkB,gBAAAA,IAAIoE,KAAK,cAAA,QAAA;;;;;;AACT,QAAI;AACF,YAAM,KAAKP,QAAQU,UAAS;IAC9B,SAASvC,KAAU;AACjBhC,kBAAAA,IAAIiC,MAAMD,KAAAA,QAAAA;;;;;;IACZ;AAEA,UAAMJ,QAAQC,IAAI;MAAC,KAAKJ,WAAW3C,MAAK;MAAI,KAAKmF,WAAWnF,MAAK;KAAG;AACpEkB,gBAAAA,IAAIoE,KAAK,UAAA,QAAA;;;;;;EACX;EAEA,MAAcC,kBAAkB;AAC9B,QAAI;AACF,WAAKL,mBAAoB,UAAMQ,4BAAa,KAAKR,gBAAgB5F,KAAI,GAAI,GAAA;IAC3E,QAAQ;AACN4B,kBAAAA,IAAIoE,KAAK,uBAAA,QAAA;;;;;;IACX;EACF;EAEQE,mBAAmB7D,SAAiBgE,UAAmD;AAC7F,WAAOtB,UAAUG,MACd1E,QAAQ6B,SAAS,MAAA;IAElB,CAAA,EACCiE,KAAKD,QAAAA;EACV;AACF;;EApHGtC,YAAAA;GATUsB,cAAAA,WAAAA,UAAAA,MAAAA;;EAYVtB,YAAAA;GAZUsB,cAAAA,WAAAA,WAAAA,MAAAA;;ADGN,IAAMkB,gBAAN,MAAMA;EAUX5H,YACmByC,iBACjB,EAAEoF,aAAaC,aAAaC,QAAO,GACnC;SAFiBtF,kBAAAA;SARFW,oBAAoB,IAAI4E,wDAAAA;SACxBzF,SAAS,IAAIC,cAAAA,QAAAA;SACbyF,YAAY,oBAAIC,IAAAA;AAS/B,SAAKC,eAAeN;AACpB,SAAKO,eAAeN;AACpB,SAAKhF,kBAAkB,IAAIW,yCAAmB;MAC5C4E,WAAW;QACTN,SAAS,YAAYA,QAAAA;MACvB;IACF,CAAA;EACF;EAEA,IAAIO,OAAO;AACT,WAAO,KAAKxF;EACd;EAEA,MAAME,QAAQ;AACZC,oBAAAA,KAAI,eAAA,QAAA;;;;;;AACJ,QAAI;AACF,YAAM,KAAKkF,aAAY;AACvB,WAAKjF,UAAU,MAAM,KAAKT,gBAAe;AACzC,YAAMe,UAAU,KAAKN,QAAQK,IAAI,4BAAA;AACjC,WAAKT,gBAAgByF,WAAW;QAC9BpG,QAAQ,KAAKe;QACbS,eAAeH,UACX,IAAII,kBAAAA,uBAAuBJ,OAAAA,IAC3B,IAAIK,kBAAAA,oBAAoB,IAAIC,kBAAAA,2BAAAA,CAAAA;QAChCC,kBAAkB,KAAKX;MACzB,CAAA;AAEA,YAAM,KAAKN,gBAAgBzB,KAAK,IAAI0D,gBAAAA,QAAAA,CAAAA;AACpC,WAAKxC,OAAOyC,KAAKhD,MAAAA;AACjBiB,sBAAAA,KAAI,WAAA,QAAA;;;;;;IACN,SAASgC,KAAU;AACjB,WAAK1C,OAAOyC,KAAKC,GAAAA;AACjBhC,kBAAAA,IAAIoB,MAAM,YAAYY,KAAAA;;;;;;IACxB;EACF;EAEA,MAAME,OAAO;AAEX,SAAKiD,aAAY;AACjB,UAAM,KAAKtF,gBAAgBf,MAAK;EAClC;;;;EAKA,MAAMyG,cAAc,EAAEnG,SAASiD,YAAYhD,UAAS,GAAyB;AAC3E,UAAMmG,UAAU,IAAI/B,cAAc;MAChCC,aAAa,KAAK7D;MAClBT;MACAiD;MACAhD;MACAsE,aAAa,KAAKrE;IACpB,CAAA;AAGAkG,YAAQ3B,QAAQ4B,IAAI,YAAA;AAClB,WAAKT,UAAUU,OAAOF,OAAAA;AACtB,UAAI,KAAKR,UAAUW,SAAS,GAAG;AAE7BC,aAAK9G,MAAK;MACZ,OAAO;AACL,aAAK+G,iBAAgB;MACvB;IACF,CAAA;AAEA,UAAML,QAAQpH,KAAI;AAClB,SAAK4G,UAAUc,IAAIN,OAAAA;AAEnB,SAAKK,iBAAgB;EACvB;;;;EAKQA,mBAAmB;AACzB7F,oBAAAA,KAAI,0BAAA,QAAA;;;;;;AAEJ,QAAI,KAAK+F,uBAAuB;AAC9B,UAAI,CAAC,KAAKf,UAAUgB,IAAI,KAAKD,qBAAqB,GAAG;AACnD,aAAKA,wBAAwBhH;MAC/B;IACF;AAGA,QAAI,CAAC,KAAKgH,uBAAuB;AAC/B,YAAME,WAAWC,MAAMC,KAAK,KAAKnB,SAAS,EAAEoB,KAAK,CAACZ,YAAYA,QAAQrB,aAAa;AACnF,UAAI8B,UAAU;AACZ,aAAKF,wBAAwBE;AAC7B,aAAK9F,kBAAkBkG,iBAAiBJ,SAAS9B,aAAa;MAChE,OAAO;AACL,aAAKhE,kBAAkBkG,iBAAiBtH,MAAAA;MAC1C;IACF;EACF;AACF;",
|
|
6
|
+
"names": ["import_async", "import_client_protocol", "import_log", "import_network_manager", "import_rpc", "import_util", "import_context", "import_messaging", "import_invariant", "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", "setTimeout", "bridgeService", "info", "_maybeOpenShell", "_afterLockReleases", "callIfSet", "asyncTimeout", "callback", "then", "WorkerRuntime", "acquireLock", "releaseLock", "onReset", "SimplePeerTransportProxyFactory", "_sessions", "Set", "_acquireLock", "_releaseLock", "callbacks", "host", "initialize", "createSession", "session", "set", "delete", "size", "self", "_reconnectWebrtc", "add", "_sessionForNetworking", "has", "selected", "Array", "from", "find", "setBridgeService"]
|
|
7
7
|
}
|