@dxos/client-services 0.3.11-main.1caa3af → 0.3.11-main.baa8c4d
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-IG6IJJ5Y.mjs → chunk-IALPJ5BW.mjs} +2 -2
- package/dist/lib/browser/{chunk-IG6IJJ5Y.mjs.map → chunk-IALPJ5BW.mjs.map} +1 -1
- package/dist/lib/browser/index.mjs +33 -42
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/packlets/testing/index.mjs +1 -1
- package/dist/lib/node/{chunk-VPQVVXW7.cjs → chunk-IOC4Z4I4.cjs} +5 -5
- package/dist/lib/node/{chunk-VPQVVXW7.cjs.map → chunk-IOC4Z4I4.cjs.map} +1 -1
- package/dist/lib/node/index.cjs +68 -77
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/packlets/testing/index.cjs +8 -8
- package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts +0 -2
- package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts.map +1 -1
- package/dist/types/src/packlets/vault/{shared-worker-connection.d.ts → iframe-proxy-runtime.d.ts} +5 -12
- package/dist/types/src/packlets/vault/iframe-proxy-runtime.d.ts.map +1 -0
- package/dist/types/src/packlets/vault/index.d.ts +1 -1
- package/dist/types/src/packlets/vault/index.d.ts.map +1 -1
- package/dist/types/src/packlets/vault/worker-runtime.d.ts +3 -10
- package/dist/types/src/packlets/vault/worker-runtime.d.ts.map +1 -1
- package/dist/types/src/packlets/vault/worker-session.d.ts +2 -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 +35 -35
- package/src/packlets/vault/iframe-host-runtime.ts +0 -2
- package/src/packlets/vault/{shared-worker-connection.ts → iframe-proxy-runtime.ts} +6 -18
- package/src/packlets/vault/index.ts +1 -1
- package/src/packlets/vault/worker-runtime.ts +9 -27
- package/src/packlets/vault/worker-session.ts +8 -11
- package/src/version.ts +1 -1
- package/dist/types/src/packlets/vault/shared-worker-connection.d.ts.map +0 -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_IOC4Z4I4.ClientRpcServer,
|
|
22
|
+
ClientServicesHost: () => import_chunk_IOC4Z4I4.ClientServicesHost,
|
|
23
|
+
DataSpace: () => import_chunk_IOC4Z4I4.DataSpace,
|
|
24
|
+
DataSpaceManager: () => import_chunk_IOC4Z4I4.DataSpaceManager,
|
|
25
|
+
DeviceInvitationProtocol: () => import_chunk_IOC4Z4I4.DeviceInvitationProtocol,
|
|
26
|
+
DevtoolsHostEvents: () => import_chunk_IOC4Z4I4.DevtoolsHostEvents,
|
|
27
|
+
DevtoolsServiceImpl: () => import_chunk_IOC4Z4I4.DevtoolsServiceImpl,
|
|
28
28
|
IFrameHostRuntime: () => IFrameHostRuntime,
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
29
|
+
IFrameProxyRuntime: () => IFrameProxyRuntime,
|
|
30
|
+
Identity: () => import_chunk_IOC4Z4I4.Identity,
|
|
31
|
+
IdentityManager: () => import_chunk_IOC4Z4I4.IdentityManager,
|
|
32
|
+
IdentityServiceImpl: () => import_chunk_IOC4Z4I4.IdentityServiceImpl,
|
|
33
|
+
InvitationsHandler: () => import_chunk_IOC4Z4I4.InvitationsHandler,
|
|
34
|
+
InvitationsServiceImpl: () => import_chunk_IOC4Z4I4.InvitationsServiceImpl,
|
|
35
|
+
Lock: () => import_chunk_IOC4Z4I4.Lock,
|
|
36
|
+
ServiceContext: () => import_chunk_IOC4Z4I4.ServiceContext,
|
|
37
|
+
ServiceRegistry: () => import_chunk_IOC4Z4I4.ServiceRegistry,
|
|
38
38
|
ShellRuntimeImpl: () => ShellRuntimeImpl,
|
|
39
|
-
SpaceInvitationProtocol: () =>
|
|
40
|
-
SpacesServiceImpl: () =>
|
|
41
|
-
TrustedKeySetAuthVerifier: () =>
|
|
39
|
+
SpaceInvitationProtocol: () => import_chunk_IOC4Z4I4.SpaceInvitationProtocol,
|
|
40
|
+
SpacesServiceImpl: () => import_chunk_IOC4Z4I4.SpacesServiceImpl,
|
|
41
|
+
TrustedKeySetAuthVerifier: () => import_chunk_IOC4Z4I4.TrustedKeySetAuthVerifier,
|
|
42
42
|
WorkerRuntime: () => WorkerRuntime,
|
|
43
43
|
WorkerSession: () => WorkerSession,
|
|
44
|
-
createAuthProvider: () =>
|
|
45
|
-
createDefaultModelFactory: () =>
|
|
46
|
-
createDiagnostics: () =>
|
|
47
|
-
createStorageObjects: () =>
|
|
48
|
-
getNetworkPeers: () =>
|
|
49
|
-
isLocked: () =>
|
|
50
|
-
subscribeToFeedBlocks: () =>
|
|
51
|
-
subscribeToFeeds: () =>
|
|
52
|
-
subscribeToNetworkStatus: () =>
|
|
53
|
-
subscribeToNetworkTopics: () =>
|
|
54
|
-
subscribeToSignal: () =>
|
|
55
|
-
subscribeToSpaces: () =>
|
|
56
|
-
subscribeToSwarmInfo: () =>
|
|
44
|
+
createAuthProvider: () => import_chunk_IOC4Z4I4.createAuthProvider,
|
|
45
|
+
createDefaultModelFactory: () => import_chunk_IOC4Z4I4.createDefaultModelFactory,
|
|
46
|
+
createDiagnostics: () => import_chunk_IOC4Z4I4.createDiagnostics,
|
|
47
|
+
createStorageObjects: () => import_chunk_IOC4Z4I4.createStorageObjects,
|
|
48
|
+
getNetworkPeers: () => import_chunk_IOC4Z4I4.getNetworkPeers,
|
|
49
|
+
isLocked: () => import_chunk_IOC4Z4I4.isLocked,
|
|
50
|
+
subscribeToFeedBlocks: () => import_chunk_IOC4Z4I4.subscribeToFeedBlocks,
|
|
51
|
+
subscribeToFeeds: () => import_chunk_IOC4Z4I4.subscribeToFeeds,
|
|
52
|
+
subscribeToNetworkStatus: () => import_chunk_IOC4Z4I4.subscribeToNetworkStatus,
|
|
53
|
+
subscribeToNetworkTopics: () => import_chunk_IOC4Z4I4.subscribeToNetworkTopics,
|
|
54
|
+
subscribeToSignal: () => import_chunk_IOC4Z4I4.subscribeToSignal,
|
|
55
|
+
subscribeToSpaces: () => import_chunk_IOC4Z4I4.subscribeToSpaces,
|
|
56
|
+
subscribeToSwarmInfo: () => import_chunk_IOC4Z4I4.subscribeToSwarmInfo
|
|
57
57
|
});
|
|
58
58
|
module.exports = __toCommonJS(node_exports);
|
|
59
|
-
var
|
|
59
|
+
var import_chunk_IOC4Z4I4 = require("./chunk-IOC4Z4I4.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");
|
|
@@ -180,7 +180,7 @@ var IFrameHostRuntime = class {
|
|
|
180
180
|
async start() {
|
|
181
181
|
(0, import_log.log)("starting...", void 0, {
|
|
182
182
|
F: __dxlog_file2,
|
|
183
|
-
L:
|
|
183
|
+
L: 71,
|
|
184
184
|
S: this,
|
|
185
185
|
C: (f, a) => f(...a)
|
|
186
186
|
});
|
|
@@ -190,7 +190,7 @@ var IFrameHostRuntime = class {
|
|
|
190
190
|
iceServers: this._config.get("runtime.services.ice")
|
|
191
191
|
});
|
|
192
192
|
const signals = this._config.get("runtime.services.signaling");
|
|
193
|
-
this._clientServices = new
|
|
193
|
+
this._clientServices = new import_chunk_IOC4Z4I4.ClientServicesHost({
|
|
194
194
|
lockKey: LOCK_KEY,
|
|
195
195
|
config: this._config,
|
|
196
196
|
signalManager: signals ? new import_messaging.WebsocketSignalManager(signals) : new import_messaging.MemorySignalManager(new import_messaging.MemorySignalManagerContext()),
|
|
@@ -216,7 +216,7 @@ var IFrameHostRuntime = class {
|
|
|
216
216
|
return handler(method, params);
|
|
217
217
|
}
|
|
218
218
|
};
|
|
219
|
-
this._clientRpc = new
|
|
219
|
+
this._clientRpc = new import_chunk_IOC4Z4I4.ClientRpcServer({
|
|
220
220
|
serviceRegistry: this._clientServices.serviceRegistry,
|
|
221
221
|
port: this._appPort,
|
|
222
222
|
...middleware
|
|
@@ -229,7 +229,7 @@ var IFrameHostRuntime = class {
|
|
|
229
229
|
this._ready.wake(void 0);
|
|
230
230
|
(0, import_log.log)("started", void 0, {
|
|
231
231
|
F: __dxlog_file2,
|
|
232
|
-
L:
|
|
232
|
+
L: 114,
|
|
233
233
|
S: this,
|
|
234
234
|
C: (f, a) => f(...a)
|
|
235
235
|
});
|
|
@@ -237,7 +237,7 @@ var IFrameHostRuntime = class {
|
|
|
237
237
|
this._ready.wake(err);
|
|
238
238
|
import_log.log.catch(err, void 0, {
|
|
239
239
|
F: __dxlog_file2,
|
|
240
|
-
L:
|
|
240
|
+
L: 117,
|
|
241
241
|
S: this,
|
|
242
242
|
C: (f, a) => f(...a)
|
|
243
243
|
});
|
|
@@ -246,7 +246,7 @@ var IFrameHostRuntime = class {
|
|
|
246
246
|
async stop() {
|
|
247
247
|
(0, import_log.log)("stopping...", void 0, {
|
|
248
248
|
F: __dxlog_file2,
|
|
249
|
-
L:
|
|
249
|
+
L: 122,
|
|
250
250
|
S: this,
|
|
251
251
|
C: (f, a) => f(...a)
|
|
252
252
|
});
|
|
@@ -255,7 +255,7 @@ var IFrameHostRuntime = class {
|
|
|
255
255
|
await this._shellRuntime?.close();
|
|
256
256
|
(0, import_log.log)("stopped", void 0, {
|
|
257
257
|
F: __dxlog_file2,
|
|
258
|
-
L:
|
|
258
|
+
L: 126,
|
|
259
259
|
S: this,
|
|
260
260
|
C: (f, a) => f(...a)
|
|
261
261
|
});
|
|
@@ -264,8 +264,8 @@ var IFrameHostRuntime = class {
|
|
|
264
264
|
_ts_decorate([
|
|
265
265
|
import_log.logInfo
|
|
266
266
|
], IFrameHostRuntime.prototype, "origin", void 0);
|
|
267
|
-
var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/vault/
|
|
268
|
-
var
|
|
267
|
+
var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/vault/iframe-proxy-runtime.ts";
|
|
268
|
+
var IFrameProxyRuntime = class {
|
|
269
269
|
constructor({ config, systemPort, shellPort }) {
|
|
270
270
|
this._id = String(Math.floor(Math.random() * 1e6));
|
|
271
271
|
this._release = new import_async3.Trigger();
|
|
@@ -313,7 +313,7 @@ var SharedWorkerConnection = class {
|
|
|
313
313
|
} catch (err) {
|
|
314
314
|
import_log2.log.catch(err, void 0, {
|
|
315
315
|
F: __dxlog_file3,
|
|
316
|
-
L:
|
|
316
|
+
L: 90,
|
|
317
317
|
S: this,
|
|
318
318
|
C: (f, a) => f(...a)
|
|
319
319
|
});
|
|
@@ -324,10 +324,7 @@ var SharedWorkerConnection = class {
|
|
|
324
324
|
async close() {
|
|
325
325
|
this._release.wake();
|
|
326
326
|
await this._shellRuntime?.close();
|
|
327
|
-
|
|
328
|
-
await this._systemRpc.rpc.WorkerService.stop();
|
|
329
|
-
} catch {
|
|
330
|
-
}
|
|
327
|
+
await this._systemRpc.rpc.WorkerService.stop();
|
|
331
328
|
await this._systemRpc.close();
|
|
332
329
|
}
|
|
333
330
|
_lockKey(origin) {
|
|
@@ -351,7 +348,7 @@ var WorkerSession = class {
|
|
|
351
348
|
this.onClose = new import_util3.Callback();
|
|
352
349
|
(0, import_invariant2.invariant)(serviceHost, void 0, {
|
|
353
350
|
F: __dxlog_file4,
|
|
354
|
-
L:
|
|
351
|
+
L: 49,
|
|
355
352
|
S: this,
|
|
356
353
|
A: [
|
|
357
354
|
"serviceHost",
|
|
@@ -379,16 +376,16 @@ var WorkerSession = class {
|
|
|
379
376
|
return handler(method, params);
|
|
380
377
|
}
|
|
381
378
|
};
|
|
382
|
-
this._clientRpc = new
|
|
379
|
+
this._clientRpc = new import_chunk_IOC4Z4I4.ClientRpcServer({
|
|
383
380
|
serviceRegistry: this._serviceHost.serviceRegistry,
|
|
384
381
|
port: appPort,
|
|
385
382
|
...middleware
|
|
386
383
|
});
|
|
387
|
-
this._shellClientRpc =
|
|
384
|
+
this._shellClientRpc = new import_chunk_IOC4Z4I4.ClientRpcServer({
|
|
388
385
|
serviceRegistry: this._serviceHost.serviceRegistry,
|
|
389
386
|
port: shellPort,
|
|
390
387
|
...middleware
|
|
391
|
-
})
|
|
388
|
+
});
|
|
392
389
|
this._iframeRpc = (0, import_rpc3.createProtoRpcPeer)({
|
|
393
390
|
requested: import_client_protocol4.iframeServiceBundle,
|
|
394
391
|
exposed: import_client_protocol4.workerServiceBundle,
|
|
@@ -406,7 +403,7 @@ var WorkerSession = class {
|
|
|
406
403
|
} catch (err) {
|
|
407
404
|
import_log4.log.catch(err, void 0, {
|
|
408
405
|
F: __dxlog_file4,
|
|
409
|
-
L:
|
|
406
|
+
L: 99,
|
|
410
407
|
S: this,
|
|
411
408
|
C: (f, a) => f(...a)
|
|
412
409
|
});
|
|
@@ -423,7 +420,7 @@ var WorkerSession = class {
|
|
|
423
420
|
async open() {
|
|
424
421
|
import_log4.log.info("opening...", void 0, {
|
|
425
422
|
F: __dxlog_file4,
|
|
426
|
-
L:
|
|
423
|
+
L: 113,
|
|
427
424
|
S: this,
|
|
428
425
|
C: (f, a) => f(...a)
|
|
429
426
|
});
|
|
@@ -440,7 +437,7 @@ var WorkerSession = class {
|
|
|
440
437
|
}
|
|
441
438
|
import_log4.log.info("opened", void 0, {
|
|
442
439
|
F: __dxlog_file4,
|
|
443
|
-
L:
|
|
440
|
+
L: 124,
|
|
444
441
|
S: this,
|
|
445
442
|
C: (f, a) => f(...a)
|
|
446
443
|
});
|
|
@@ -448,7 +445,7 @@ var WorkerSession = class {
|
|
|
448
445
|
async close() {
|
|
449
446
|
import_log4.log.info("closing...", void 0, {
|
|
450
447
|
F: __dxlog_file4,
|
|
451
|
-
L:
|
|
448
|
+
L: 128,
|
|
452
449
|
S: this,
|
|
453
450
|
C: (f, a) => f(...a)
|
|
454
451
|
});
|
|
@@ -457,7 +454,7 @@ var WorkerSession = class {
|
|
|
457
454
|
} catch (err) {
|
|
458
455
|
import_log4.log.catch(err, void 0, {
|
|
459
456
|
F: __dxlog_file4,
|
|
460
|
-
L:
|
|
457
|
+
L: 132,
|
|
461
458
|
S: this,
|
|
462
459
|
C: (f, a) => f(...a)
|
|
463
460
|
});
|
|
@@ -468,18 +465,18 @@ var WorkerSession = class {
|
|
|
468
465
|
]);
|
|
469
466
|
import_log4.log.info("closed", void 0, {
|
|
470
467
|
F: __dxlog_file4,
|
|
471
|
-
L:
|
|
468
|
+
L: 136,
|
|
472
469
|
S: this,
|
|
473
470
|
C: (f, a) => f(...a)
|
|
474
471
|
});
|
|
475
472
|
}
|
|
476
473
|
async _maybeOpenShell() {
|
|
477
474
|
try {
|
|
478
|
-
|
|
475
|
+
await (0, import_async5.asyncTimeout)(this._shellClientRpc.open(), 1e3);
|
|
479
476
|
} catch {
|
|
480
477
|
import_log4.log.info("No shell connected.", void 0, {
|
|
481
478
|
F: __dxlog_file4,
|
|
482
|
-
L:
|
|
479
|
+
L: 143,
|
|
483
480
|
S: this,
|
|
484
481
|
C: (f, a) => f(...a)
|
|
485
482
|
});
|
|
@@ -498,16 +495,16 @@ _ts_decorate2([
|
|
|
498
495
|
], WorkerSession.prototype, "lockKey", void 0);
|
|
499
496
|
var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/vault/worker-runtime.ts";
|
|
500
497
|
var WorkerRuntime = class {
|
|
501
|
-
constructor(_configProvider
|
|
498
|
+
constructor(_configProvider) {
|
|
502
499
|
this._configProvider = _configProvider;
|
|
503
500
|
this._transportFactory = new import_network_manager3.SimplePeerTransportProxyFactory();
|
|
504
501
|
this._ready = new import_async4.Trigger();
|
|
505
502
|
this._sessions = /* @__PURE__ */ new Set();
|
|
506
|
-
this.
|
|
507
|
-
this._releaseLock = releaseLock;
|
|
508
|
-
this._clientServices = new import_chunk_VPQVVXW7.ClientServicesHost({
|
|
503
|
+
this._clientServices = new import_chunk_IOC4Z4I4.ClientServicesHost({
|
|
509
504
|
callbacks: {
|
|
510
|
-
onReset: async () =>
|
|
505
|
+
onReset: async () => {
|
|
506
|
+
self.close();
|
|
507
|
+
}
|
|
511
508
|
}
|
|
512
509
|
});
|
|
513
510
|
}
|
|
@@ -517,12 +514,11 @@ var WorkerRuntime = class {
|
|
|
517
514
|
async start() {
|
|
518
515
|
(0, import_log3.log)("starting...", void 0, {
|
|
519
516
|
F: __dxlog_file5,
|
|
520
|
-
L:
|
|
517
|
+
L: 52,
|
|
521
518
|
S: this,
|
|
522
519
|
C: (f, a) => f(...a)
|
|
523
520
|
});
|
|
524
521
|
try {
|
|
525
|
-
await this._acquireLock();
|
|
526
522
|
this._config = await this._configProvider();
|
|
527
523
|
const signals = this._config.get("runtime.services.signaling");
|
|
528
524
|
this._clientServices.initialize({
|
|
@@ -534,7 +530,7 @@ var WorkerRuntime = class {
|
|
|
534
530
|
this._ready.wake(void 0);
|
|
535
531
|
(0, import_log3.log)("started", void 0, {
|
|
536
532
|
F: __dxlog_file5,
|
|
537
|
-
L:
|
|
533
|
+
L: 66,
|
|
538
534
|
S: this,
|
|
539
535
|
C: (f, a) => f(...a)
|
|
540
536
|
});
|
|
@@ -542,14 +538,13 @@ var WorkerRuntime = class {
|
|
|
542
538
|
this._ready.wake(err);
|
|
543
539
|
import_log3.log.error("starting", err, {
|
|
544
540
|
F: __dxlog_file5,
|
|
545
|
-
L:
|
|
541
|
+
L: 69,
|
|
546
542
|
S: this,
|
|
547
543
|
C: (f, a) => f(...a)
|
|
548
544
|
});
|
|
549
545
|
}
|
|
550
546
|
}
|
|
551
547
|
async stop() {
|
|
552
|
-
this._releaseLock();
|
|
553
548
|
await this._clientServices.close();
|
|
554
549
|
}
|
|
555
550
|
/**
|
|
@@ -565,23 +560,19 @@ var WorkerRuntime = class {
|
|
|
565
560
|
});
|
|
566
561
|
session.onClose.set(async () => {
|
|
567
562
|
this._sessions.delete(session);
|
|
568
|
-
|
|
569
|
-
self.close();
|
|
570
|
-
} else {
|
|
571
|
-
this._reconnectWebrtc();
|
|
572
|
-
}
|
|
563
|
+
this._reconnectWebrtc();
|
|
573
564
|
});
|
|
574
565
|
await session.open();
|
|
575
566
|
this._sessions.add(session);
|
|
576
567
|
this._reconnectWebrtc();
|
|
577
568
|
}
|
|
578
569
|
/**
|
|
579
|
-
* Selects one of the existing session
|
|
570
|
+
* Selects one of the existing session fro WebRTC networking.
|
|
580
571
|
*/
|
|
581
572
|
_reconnectWebrtc() {
|
|
582
573
|
(0, import_log3.log)("reconnecting webrtc...", void 0, {
|
|
583
574
|
F: __dxlog_file5,
|
|
584
|
-
L:
|
|
575
|
+
L: 106,
|
|
585
576
|
S: this,
|
|
586
577
|
C: (f, a) => f(...a)
|
|
587
578
|
});
|
|
@@ -611,6 +602,7 @@ var WorkerRuntime = class {
|
|
|
611
602
|
DevtoolsHostEvents,
|
|
612
603
|
DevtoolsServiceImpl,
|
|
613
604
|
IFrameHostRuntime,
|
|
605
|
+
IFrameProxyRuntime,
|
|
614
606
|
Identity,
|
|
615
607
|
IdentityManager,
|
|
616
608
|
IdentityServiceImpl,
|
|
@@ -619,7 +611,6 @@ var WorkerRuntime = class {
|
|
|
619
611
|
Lock,
|
|
620
612
|
ServiceContext,
|
|
621
613
|
ServiceRegistry,
|
|
622
|
-
SharedWorkerConnection,
|
|
623
614
|
ShellRuntimeImpl,
|
|
624
615
|
SpaceInvitationProtocol,
|
|
625
616
|
SpacesServiceImpl,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/packlets/vault/iframe-host-runtime.ts", "../../../src/packlets/vault/shell-runtime.ts", "../../../src/packlets/vault/
|
|
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 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;iBAAhBA;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;
|
|
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", "
|
|
3
|
+
"sources": ["../../../src/packlets/vault/iframe-host-runtime.ts", "../../../src/packlets/vault/shell-runtime.ts", "../../../src/packlets/vault/iframe-proxy-runtime.ts", "../../../src/packlets/vault/worker-runtime.ts", "../../../src/packlets/vault/worker-session.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { PROXY_CONNECTION_TIMEOUT, 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 */\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 IFrameProxyRuntimeParams = {\n config: Config | Provider<MaybePromise<Config>>;\n systemPort: RpcPort;\n shellPort?: RpcPort;\n};\n\n/**\n * Manages the client connection to the shared worker.\n */\nexport class IFrameProxyRuntime {\n private readonly _id = String(Math.floor(Math.random() * 1000000));\n private readonly _configProvider: IFrameProxyRuntimeParams['config'];\n private readonly _systemPort: RpcPort;\n private readonly _shellPort?: RpcPort;\n private _release = new Trigger();\n private _config!: Config;\n private _transportService!: BridgeService;\n private _systemRpc!: ProtoRpcPeer<WorkerServiceBundle>;\n private _shellRuntime?: ShellRuntimeImpl;\n\n constructor({ config, systemPort, shellPort }: IFrameProxyRuntimeParams) {\n this._configProvider = config;\n this._systemPort = systemPort;\n this._shellPort = shellPort;\n\n if (this._shellPort) {\n this._shellRuntime = new ShellRuntimeImpl(this._shellPort);\n }\n }\n\n get shell(): ShellRuntime | undefined {\n return this._shellRuntime;\n }\n\n async open(origin: string) {\n this._config = await getAsyncValue(this._configProvider);\n\n this._transportService = new 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 timeout: 200,\n });\n\n let lockKey: string | undefined;\n if (typeof navigator !== 'undefined') {\n lockKey = this._lockKey(origin);\n this._release = new Trigger();\n const ready = new Trigger();\n void navigator.locks.request(lockKey, async () => {\n ready.wake();\n await this._release.wait();\n });\n await ready.wait();\n }\n\n try {\n await this._systemRpc.open();\n await this._systemRpc.rpc.WorkerService.start({ origin, lockKey });\n } catch (err) {\n log.catch(err);\n throw new RemoteServiceConnectionError('Failed to connect to worker');\n }\n await this._shellRuntime?.open();\n }\n\n async close() {\n this._release.wake();\n await this._shellRuntime?.close();\n await this._systemRpc.rpc.WorkerService.stop();\n await this._systemRpc.close();\n }\n\n private _lockKey(origin: string) {\n return `${origin}-${this._id}`;\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { 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\n/**\n * Runtime for the shared worker.\n * Manages connections from proxies (in tabs).\n * Tabs make requests to the `ClientServicesHost`, and provide a WebRTC gateway.\n */\nexport class WorkerRuntime {\n private readonly _transportFactory = new 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(private readonly _configProvider: () => MaybePromise<Config>) {\n this._clientServices = new ClientServicesHost({\n callbacks: {\n onReset: async () => {\n self.close();\n },\n },\n });\n }\n\n get host() {\n return this._clientServices;\n }\n\n async start() {\n log('starting...');\n try {\n this._config = await this._configProvider();\n const signals = this._config.get('runtime.services.signaling');\n this._clientServices.initialize({\n config: this._config,\n signalManager: signals\n ? new WebsocketSignalManager(signals)\n : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.\n transportFactory: this._transportFactory,\n });\n\n await this._clientServices.open(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 // TODO(dmaretskyi): Terminate active sessions.\n await this._clientServices.close();\n }\n\n /**\n * Create a new session.\n */\n async createSession({ appPort, systemPort, shellPort }: CreateSessionParams) {\n const session = new WorkerSession({\n serviceHost: this._clientServices,\n appPort,\n systemPort,\n shellPort,\n readySignal: this._ready,\n });\n\n // When tab is closed.\n session.onClose.set(async () => {\n this._sessions.delete(session);\n this._reconnectWebrtc();\n });\n\n await session.open();\n this._sessions.add(session);\n\n this._reconnectWebrtc();\n }\n\n /**\n * Selects one of the existing session fro WebRTC networking.\n */\n private _reconnectWebrtc() {\n log('reconnecting webrtc...');\n // Check if current session is already closed.\n if (this._sessionForNetworking) {\n if (!this._sessions.has(this._sessionForNetworking)) {\n this._sessionForNetworking = undefined;\n }\n }\n\n // Select existing session.\n if (!this._sessionForNetworking) {\n const selected = Array.from(this._sessions).find((session) => session.bridgeService);\n if (selected) {\n this._sessionForNetworking = selected;\n this._transportFactory.setBridgeService(selected.bridgeService);\n } else {\n this._transportFactory.setBridgeService(undefined);\n }\n }\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { asyncTimeout, Trigger } from '@dxos/async';\nimport {\n iframeServiceBundle,\n 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 shellPort: RpcPort;\n readySignal: Trigger<Error | undefined>;\n};\n\n/**\n * Represents a tab connection within the worker.\n */\nexport class WorkerSession {\n private readonly _clientRpc: ClientRpcServer;\n private readonly _shellClientRpc: ClientRpcServer;\n private readonly _iframeRpc: ProtoRpcPeer<IframeServiceBundle>;\n private readonly _startTrigger = new Trigger();\n private readonly _serviceHost: ClientServicesHost;\n\n public readonly onClose = new Callback<() => Promise<void>>();\n\n @logInfo\n public origin?: string;\n\n @logInfo\n public lockKey?: string;\n\n public bridgeService?: BridgeService;\n\n constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }: WorkerSessionParams) {\n invariant(serviceHost);\n this._serviceHost = serviceHost;\n\n const middleware: Pick<ClientRpcServerParams, 'handleCall' | 'handleStream'> = {\n handleCall: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n handleStream: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n };\n\n this._clientRpc = new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: appPort,\n ...middleware,\n });\n\n this._shellClientRpc = new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: shellPort,\n ...middleware,\n });\n\n this._iframeRpc = createProtoRpcPeer({\n requested: iframeServiceBundle,\n exposed: workerServiceBundle,\n handlers: {\n WorkerService: {\n start: async (request) => {\n this.origin = request.origin;\n this.lockKey = request.lockKey;\n this._startTrigger.wake();\n },\n\n stop: async () => {\n setTimeout(async () => {\n try {\n await this.close();\n } catch (err: any) {\n log.catch(err);\n }\n });\n },\n },\n },\n port: systemPort,\n timeout: 1_000, // With low timeout heartbeat may fail if the tab's thread is saturated.\n });\n\n this.bridgeService = this._iframeRpc.rpc.BridgeService;\n }\n\n async open() {\n log.info('opening...');\n await Promise.all([this._clientRpc.open(), this._iframeRpc.open(), this._maybeOpenShell()]);\n\n // Wait until the worker's RPC service has started.\n await this._startTrigger.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n\n // TODO(burdon): Comment required.\n if (this.lockKey) {\n void this._afterLockReleases(this.lockKey, () => this.close());\n }\n\n log.info('opened');\n }\n\n async close() {\n log.info('closing...');\n try {\n await this.onClose.callIfSet();\n } catch (err: any) {\n log.catch(err);\n }\n\n await Promise.all([this._clientRpc.close(), this._iframeRpc.close()]);\n log.info('closed');\n }\n\n private async _maybeOpenShell() {\n try {\n await asyncTimeout(this._shellClientRpc.open(), 1_000);\n } catch {\n log.info('No shell connected.');\n }\n }\n\n private _afterLockReleases(lockKey: string, callback: () => MaybePromise<void>): Promise<void> {\n return navigator.locks\n .request(lockKey, () => {\n // No-op.\n })\n .then(callback);\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;iBAAhBA;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;AAeV,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;;AEFN,IAAMmD,qBAAN,MAAMA;EAWXrF,YAAY,EAAEmC,QAAQmD,YAAYhD,UAAS,GAA8B;AAVxDiD,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,KAAKe,QAAgB;AACzB,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;MACXtB,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,UAAM,KAAKiE,WAAW9E,IAAIsF,cAAcrB,KAAI;AAC5C,UAAM,KAAKa,WAAWjE,MAAK;EAC7B;EAEQsE,SAASjE,QAAgB;AAC/B,WAAO,GAAGA,MAAAA,IAAU,KAAKmD,GAAG;EAC9B;AACF;;;;;;;;;;;;AE3EO,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,kBAAkB,IAAItC,sCAAgB;MACzCC,iBAAiB,KAAKoC,aAAapC;MACnC9C,MAAMQ;MACN,GAAG0B;IACL,CAAA;AAEA,SAAKkD,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,gBAAMG,4BAAa,KAAKR,gBAAgB5F,KAAI,GAAI,GAAA;IAClD,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;;EAlHGtC,YAAAA;GATUsB,cAAAA,WAAAA,UAAAA,MAAAA;;EAYVtB,YAAAA;GAZUsB,cAAAA,WAAAA,WAAAA,MAAAA;;ADFN,IAAMkB,gBAAN,MAAMA;EAQX5H,YAA6ByC,iBAA6C;2BAA7CA;SAPZW,oBAAoB,IAAIyE,wDAAAA;SACxBtF,SAAS,IAAIC,cAAAA,QAAAA;SACbsF,YAAY,oBAAIC,IAAAA;AAM/B,SAAKjF,kBAAkB,IAAIW,yCAAmB;MAC5CuE,WAAW;QACTC,SAAS,YAAA;AACPC,eAAKnG,MAAK;QACZ;MACF;IACF,CAAA;EACF;EAEA,IAAIoG,OAAO;AACT,WAAO,KAAKrF;EACd;EAEA,MAAME,QAAQ;AACZC,oBAAAA,KAAI,eAAA,QAAA;;;;;;AACJ,QAAI;AACF,WAAKC,UAAU,MAAM,KAAKT,gBAAe;AACzC,YAAMe,UAAU,KAAKN,QAAQK,IAAI,4BAAA;AACjC,WAAKT,gBAAgBsF,WAAW;QAC9BjG,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,UAAM,KAAKrC,gBAAgBf,MAAK;EAClC;;;;EAKA,MAAMsG,cAAc,EAAEhG,SAASiD,YAAYhD,UAAS,GAAyB;AAC3E,UAAMgG,UAAU,IAAI5B,cAAc;MAChCC,aAAa,KAAK7D;MAClBT;MACAiD;MACAhD;MACAsE,aAAa,KAAKrE;IACpB,CAAA;AAGA+F,YAAQxB,QAAQyB,IAAI,YAAA;AAClB,WAAKT,UAAUU,OAAOF,OAAAA;AACtB,WAAKG,iBAAgB;IACvB,CAAA;AAEA,UAAMH,QAAQjH,KAAI;AAClB,SAAKyG,UAAUY,IAAIJ,OAAAA;AAEnB,SAAKG,iBAAgB;EACvB;;;;EAKQA,mBAAmB;AACzBxF,oBAAAA,KAAI,0BAAA,QAAA;;;;;;AAEJ,QAAI,KAAK0F,uBAAuB;AAC9B,UAAI,CAAC,KAAKb,UAAUc,IAAI,KAAKD,qBAAqB,GAAG;AACnD,aAAKA,wBAAwB3G;MAC/B;IACF;AAGA,QAAI,CAAC,KAAK2G,uBAAuB;AAC/B,YAAME,WAAWC,MAAMC,KAAK,KAAKjB,SAAS,EAAEkB,KAAK,CAACV,YAAYA,QAAQlB,aAAa;AACnF,UAAIyB,UAAU;AACZ,aAAKF,wBAAwBE;AAC7B,aAAKzF,kBAAkB6F,iBAAiBJ,SAASzB,aAAa;MAChE,OAAO;AACL,aAAKhE,kBAAkB6F,iBAAiBjH,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", "IFrameProxyRuntime", "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", "SimplePeerTransportProxyFactory", "_sessions", "Set", "callbacks", "onReset", "self", "host", "initialize", "createSession", "session", "set", "delete", "_reconnectWebrtc", "add", "_sessionForNetworking", "has", "selected", "Array", "from", "find", "setBridgeService"]
|
|
7
7
|
}
|