@dxos/client-services 0.3.11-main.bd26370 → 0.3.11-main.dafb7f2

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.
Files changed (31) hide show
  1. package/dist/lib/browser/{chunk-X5Z3WL7N.mjs → chunk-TFTFBP6C.mjs} +2 -2
  2. package/dist/lib/browser/{chunk-X5Z3WL7N.mjs.map → chunk-TFTFBP6C.mjs.map} +1 -1
  3. package/dist/lib/browser/index.mjs +42 -33
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/packlets/testing/index.mjs +1 -1
  7. package/dist/lib/node/{chunk-OLCLRX7U.cjs → chunk-Y77542J4.cjs} +5 -5
  8. package/dist/lib/node/{chunk-OLCLRX7U.cjs.map → chunk-Y77542J4.cjs.map} +1 -1
  9. package/dist/lib/node/index.cjs +77 -68
  10. package/dist/lib/node/index.cjs.map +4 -4
  11. package/dist/lib/node/meta.json +1 -1
  12. package/dist/lib/node/packlets/testing/index.cjs +8 -8
  13. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts +2 -0
  14. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts.map +1 -1
  15. package/dist/types/src/packlets/vault/index.d.ts +1 -1
  16. package/dist/types/src/packlets/vault/index.d.ts.map +1 -1
  17. package/dist/types/src/packlets/vault/{iframe-proxy-runtime.d.ts → shared-worker-connection.d.ts} +12 -5
  18. package/dist/types/src/packlets/vault/shared-worker-connection.d.ts.map +1 -0
  19. package/dist/types/src/packlets/vault/worker-runtime.d.ts +10 -3
  20. package/dist/types/src/packlets/vault/worker-runtime.d.ts.map +1 -1
  21. package/dist/types/src/packlets/vault/worker-session.d.ts +2 -2
  22. package/dist/types/src/packlets/vault/worker-session.d.ts.map +1 -1
  23. package/dist/types/src/version.d.ts +1 -1
  24. package/package.json +35 -35
  25. package/src/packlets/vault/iframe-host-runtime.ts +2 -0
  26. package/src/packlets/vault/index.ts +1 -1
  27. package/src/packlets/vault/{iframe-proxy-runtime.ts → shared-worker-connection.ts} +18 -6
  28. package/src/packlets/vault/worker-runtime.ts +27 -9
  29. package/src/packlets/vault/worker-session.ts +11 -8
  30. package/src/version.ts +1 -1
  31. package/dist/types/src/packlets/vault/iframe-proxy-runtime.d.ts.map +0 -1
@@ -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: () => import_chunk_OLCLRX7U.ClientRpcServer,
22
- ClientServicesHost: () => import_chunk_OLCLRX7U.ClientServicesHost,
23
- DataSpace: () => import_chunk_OLCLRX7U.DataSpace,
24
- DataSpaceManager: () => import_chunk_OLCLRX7U.DataSpaceManager,
25
- DeviceInvitationProtocol: () => import_chunk_OLCLRX7U.DeviceInvitationProtocol,
26
- DevtoolsHostEvents: () => import_chunk_OLCLRX7U.DevtoolsHostEvents,
27
- DevtoolsServiceImpl: () => import_chunk_OLCLRX7U.DevtoolsServiceImpl,
21
+ ClientRpcServer: () => import_chunk_Y77542J4.ClientRpcServer,
22
+ ClientServicesHost: () => import_chunk_Y77542J4.ClientServicesHost,
23
+ DataSpace: () => import_chunk_Y77542J4.DataSpace,
24
+ DataSpaceManager: () => import_chunk_Y77542J4.DataSpaceManager,
25
+ DeviceInvitationProtocol: () => import_chunk_Y77542J4.DeviceInvitationProtocol,
26
+ DevtoolsHostEvents: () => import_chunk_Y77542J4.DevtoolsHostEvents,
27
+ DevtoolsServiceImpl: () => import_chunk_Y77542J4.DevtoolsServiceImpl,
28
28
  IFrameHostRuntime: () => IFrameHostRuntime,
29
- IFrameProxyRuntime: () => IFrameProxyRuntime,
30
- Identity: () => import_chunk_OLCLRX7U.Identity,
31
- IdentityManager: () => import_chunk_OLCLRX7U.IdentityManager,
32
- IdentityServiceImpl: () => import_chunk_OLCLRX7U.IdentityServiceImpl,
33
- InvitationsHandler: () => import_chunk_OLCLRX7U.InvitationsHandler,
34
- InvitationsServiceImpl: () => import_chunk_OLCLRX7U.InvitationsServiceImpl,
35
- Lock: () => import_chunk_OLCLRX7U.Lock,
36
- ServiceContext: () => import_chunk_OLCLRX7U.ServiceContext,
37
- ServiceRegistry: () => import_chunk_OLCLRX7U.ServiceRegistry,
29
+ Identity: () => import_chunk_Y77542J4.Identity,
30
+ IdentityManager: () => import_chunk_Y77542J4.IdentityManager,
31
+ IdentityServiceImpl: () => import_chunk_Y77542J4.IdentityServiceImpl,
32
+ InvitationsHandler: () => import_chunk_Y77542J4.InvitationsHandler,
33
+ InvitationsServiceImpl: () => import_chunk_Y77542J4.InvitationsServiceImpl,
34
+ Lock: () => import_chunk_Y77542J4.Lock,
35
+ ServiceContext: () => import_chunk_Y77542J4.ServiceContext,
36
+ ServiceRegistry: () => import_chunk_Y77542J4.ServiceRegistry,
37
+ SharedWorkerConnection: () => SharedWorkerConnection,
38
38
  ShellRuntimeImpl: () => ShellRuntimeImpl,
39
- SpaceInvitationProtocol: () => import_chunk_OLCLRX7U.SpaceInvitationProtocol,
40
- SpacesServiceImpl: () => import_chunk_OLCLRX7U.SpacesServiceImpl,
41
- TrustedKeySetAuthVerifier: () => import_chunk_OLCLRX7U.TrustedKeySetAuthVerifier,
39
+ SpaceInvitationProtocol: () => import_chunk_Y77542J4.SpaceInvitationProtocol,
40
+ SpacesServiceImpl: () => import_chunk_Y77542J4.SpacesServiceImpl,
41
+ TrustedKeySetAuthVerifier: () => import_chunk_Y77542J4.TrustedKeySetAuthVerifier,
42
42
  WorkerRuntime: () => WorkerRuntime,
43
43
  WorkerSession: () => WorkerSession,
44
- createAuthProvider: () => import_chunk_OLCLRX7U.createAuthProvider,
45
- createDefaultModelFactory: () => import_chunk_OLCLRX7U.createDefaultModelFactory,
46
- createDiagnostics: () => import_chunk_OLCLRX7U.createDiagnostics,
47
- createStorageObjects: () => import_chunk_OLCLRX7U.createStorageObjects,
48
- getNetworkPeers: () => import_chunk_OLCLRX7U.getNetworkPeers,
49
- isLocked: () => import_chunk_OLCLRX7U.isLocked,
50
- subscribeToFeedBlocks: () => import_chunk_OLCLRX7U.subscribeToFeedBlocks,
51
- subscribeToFeeds: () => import_chunk_OLCLRX7U.subscribeToFeeds,
52
- subscribeToNetworkStatus: () => import_chunk_OLCLRX7U.subscribeToNetworkStatus,
53
- subscribeToNetworkTopics: () => import_chunk_OLCLRX7U.subscribeToNetworkTopics,
54
- subscribeToSignal: () => import_chunk_OLCLRX7U.subscribeToSignal,
55
- subscribeToSpaces: () => import_chunk_OLCLRX7U.subscribeToSpaces,
56
- subscribeToSwarmInfo: () => import_chunk_OLCLRX7U.subscribeToSwarmInfo
44
+ createAuthProvider: () => import_chunk_Y77542J4.createAuthProvider,
45
+ createDefaultModelFactory: () => import_chunk_Y77542J4.createDefaultModelFactory,
46
+ createDiagnostics: () => import_chunk_Y77542J4.createDiagnostics,
47
+ createStorageObjects: () => import_chunk_Y77542J4.createStorageObjects,
48
+ getNetworkPeers: () => import_chunk_Y77542J4.getNetworkPeers,
49
+ isLocked: () => import_chunk_Y77542J4.isLocked,
50
+ subscribeToFeedBlocks: () => import_chunk_Y77542J4.subscribeToFeedBlocks,
51
+ subscribeToFeeds: () => import_chunk_Y77542J4.subscribeToFeeds,
52
+ subscribeToNetworkStatus: () => import_chunk_Y77542J4.subscribeToNetworkStatus,
53
+ subscribeToNetworkTopics: () => import_chunk_Y77542J4.subscribeToNetworkTopics,
54
+ subscribeToSignal: () => import_chunk_Y77542J4.subscribeToSignal,
55
+ subscribeToSpaces: () => import_chunk_Y77542J4.subscribeToSpaces,
56
+ subscribeToSwarmInfo: () => import_chunk_Y77542J4.subscribeToSwarmInfo
57
57
  });
58
58
  module.exports = __toCommonJS(node_exports);
59
- var import_chunk_OLCLRX7U = require("./chunk-OLCLRX7U.cjs");
59
+ var import_chunk_Y77542J4 = require("./chunk-Y77542J4.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: 71,
183
+ L: 73,
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 import_chunk_OLCLRX7U.ClientServicesHost({
193
+ this._clientServices = new import_chunk_Y77542J4.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 import_chunk_OLCLRX7U.ClientRpcServer({
219
+ this._clientRpc = new import_chunk_Y77542J4.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: 114,
232
+ L: 116,
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: 117,
240
+ L: 119,
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: 122,
249
+ L: 124,
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: 126,
258
+ L: 128,
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/iframe-proxy-runtime.ts";
268
- var IFrameProxyRuntime = class {
267
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/vault/shared-worker-connection.ts";
268
+ var SharedWorkerConnection = 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 IFrameProxyRuntime = class {
313
313
  } catch (err) {
314
314
  import_log2.log.catch(err, void 0, {
315
315
  F: __dxlog_file3,
316
- L: 90,
316
+ L: 98,
317
317
  S: this,
318
318
  C: (f, a) => f(...a)
319
319
  });
@@ -324,7 +324,10 @@ var IFrameProxyRuntime = class {
324
324
  async close() {
325
325
  this._release.wake();
326
326
  await this._shellRuntime?.close();
327
- await this._systemRpc.rpc.WorkerService.stop();
327
+ try {
328
+ await this._systemRpc.rpc.WorkerService.stop();
329
+ } catch {
330
+ }
328
331
  await this._systemRpc.close();
329
332
  }
330
333
  _lockKey(origin) {
@@ -348,7 +351,7 @@ var WorkerSession = class {
348
351
  this.onClose = new import_util3.Callback();
349
352
  (0, import_invariant2.invariant)(serviceHost, void 0, {
350
353
  F: __dxlog_file4,
351
- L: 49,
354
+ L: 50,
352
355
  S: this,
353
356
  A: [
354
357
  "serviceHost",
@@ -376,16 +379,16 @@ var WorkerSession = class {
376
379
  return handler(method, params);
377
380
  }
378
381
  };
379
- this._clientRpc = new import_chunk_OLCLRX7U.ClientRpcServer({
382
+ this._clientRpc = new import_chunk_Y77542J4.ClientRpcServer({
380
383
  serviceRegistry: this._serviceHost.serviceRegistry,
381
384
  port: appPort,
382
385
  ...middleware
383
386
  });
384
- this._shellClientRpc = new import_chunk_OLCLRX7U.ClientRpcServer({
387
+ this._shellClientRpc = shellPort ? new import_chunk_Y77542J4.ClientRpcServer({
385
388
  serviceRegistry: this._serviceHost.serviceRegistry,
386
389
  port: shellPort,
387
390
  ...middleware
388
- });
391
+ }) : void 0;
389
392
  this._iframeRpc = (0, import_rpc3.createProtoRpcPeer)({
390
393
  requested: import_client_protocol4.iframeServiceBundle,
391
394
  exposed: import_client_protocol4.workerServiceBundle,
@@ -403,7 +406,7 @@ var WorkerSession = class {
403
406
  } catch (err) {
404
407
  import_log4.log.catch(err, void 0, {
405
408
  F: __dxlog_file4,
406
- L: 99,
409
+ L: 102,
407
410
  S: this,
408
411
  C: (f, a) => f(...a)
409
412
  });
@@ -420,7 +423,7 @@ var WorkerSession = class {
420
423
  async open() {
421
424
  import_log4.log.info("opening...", void 0, {
422
425
  F: __dxlog_file4,
423
- L: 113,
426
+ L: 116,
424
427
  S: this,
425
428
  C: (f, a) => f(...a)
426
429
  });
@@ -437,7 +440,7 @@ var WorkerSession = class {
437
440
  }
438
441
  import_log4.log.info("opened", void 0, {
439
442
  F: __dxlog_file4,
440
- L: 124,
443
+ L: 127,
441
444
  S: this,
442
445
  C: (f, a) => f(...a)
443
446
  });
@@ -445,7 +448,7 @@ var WorkerSession = class {
445
448
  async close() {
446
449
  import_log4.log.info("closing...", void 0, {
447
450
  F: __dxlog_file4,
448
- L: 128,
451
+ L: 131,
449
452
  S: this,
450
453
  C: (f, a) => f(...a)
451
454
  });
@@ -454,7 +457,7 @@ var WorkerSession = class {
454
457
  } catch (err) {
455
458
  import_log4.log.catch(err, void 0, {
456
459
  F: __dxlog_file4,
457
- L: 132,
460
+ L: 135,
458
461
  S: this,
459
462
  C: (f, a) => f(...a)
460
463
  });
@@ -465,18 +468,18 @@ var WorkerSession = class {
465
468
  ]);
466
469
  import_log4.log.info("closed", void 0, {
467
470
  F: __dxlog_file4,
468
- L: 136,
471
+ L: 139,
469
472
  S: this,
470
473
  C: (f, a) => f(...a)
471
474
  });
472
475
  }
473
476
  async _maybeOpenShell() {
474
477
  try {
475
- await (0, import_async5.asyncTimeout)(this._shellClientRpc.open(), 1e3);
478
+ this._shellClientRpc && await (0, import_async5.asyncTimeout)(this._shellClientRpc.open(), 1e3);
476
479
  } catch {
477
480
  import_log4.log.info("No shell connected.", void 0, {
478
481
  F: __dxlog_file4,
479
- L: 143,
482
+ L: 146,
480
483
  S: this,
481
484
  C: (f, a) => f(...a)
482
485
  });
@@ -495,16 +498,16 @@ _ts_decorate2([
495
498
  ], WorkerSession.prototype, "lockKey", void 0);
496
499
  var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/vault/worker-runtime.ts";
497
500
  var WorkerRuntime = class {
498
- constructor(_configProvider) {
501
+ constructor(_configProvider, { acquireLock, releaseLock, onReset }) {
499
502
  this._configProvider = _configProvider;
500
503
  this._transportFactory = new import_network_manager3.SimplePeerTransportProxyFactory();
501
504
  this._ready = new import_async4.Trigger();
502
505
  this._sessions = /* @__PURE__ */ new Set();
503
- this._clientServices = new import_chunk_OLCLRX7U.ClientServicesHost({
506
+ this._acquireLock = acquireLock;
507
+ this._releaseLock = releaseLock;
508
+ this._clientServices = new import_chunk_Y77542J4.ClientServicesHost({
504
509
  callbacks: {
505
- onReset: async () => {
506
- self.close();
507
- }
510
+ onReset: async () => onReset()
508
511
  }
509
512
  });
510
513
  }
@@ -514,11 +517,12 @@ var WorkerRuntime = class {
514
517
  async start() {
515
518
  (0, import_log3.log)("starting...", void 0, {
516
519
  F: __dxlog_file5,
517
- L: 52,
520
+ L: 63,
518
521
  S: this,
519
522
  C: (f, a) => f(...a)
520
523
  });
521
524
  try {
525
+ await this._acquireLock();
522
526
  this._config = await this._configProvider();
523
527
  const signals = this._config.get("runtime.services.signaling");
524
528
  this._clientServices.initialize({
@@ -530,7 +534,7 @@ var WorkerRuntime = class {
530
534
  this._ready.wake(void 0);
531
535
  (0, import_log3.log)("started", void 0, {
532
536
  F: __dxlog_file5,
533
- L: 66,
537
+ L: 78,
534
538
  S: this,
535
539
  C: (f, a) => f(...a)
536
540
  });
@@ -538,13 +542,14 @@ var WorkerRuntime = class {
538
542
  this._ready.wake(err);
539
543
  import_log3.log.error("starting", err, {
540
544
  F: __dxlog_file5,
541
- L: 69,
545
+ L: 81,
542
546
  S: this,
543
547
  C: (f, a) => f(...a)
544
548
  });
545
549
  }
546
550
  }
547
551
  async stop() {
552
+ this._releaseLock();
548
553
  await this._clientServices.close();
549
554
  }
550
555
  /**
@@ -560,19 +565,23 @@ var WorkerRuntime = class {
560
565
  });
561
566
  session.onClose.set(async () => {
562
567
  this._sessions.delete(session);
563
- this._reconnectWebrtc();
568
+ if (this._sessions.size === 0) {
569
+ self.close();
570
+ } else {
571
+ this._reconnectWebrtc();
572
+ }
564
573
  });
565
574
  await session.open();
566
575
  this._sessions.add(session);
567
576
  this._reconnectWebrtc();
568
577
  }
569
578
  /**
570
- * Selects one of the existing session fro WebRTC networking.
579
+ * Selects one of the existing session for WebRTC networking.
571
580
  */
572
581
  _reconnectWebrtc() {
573
582
  (0, import_log3.log)("reconnecting webrtc...", void 0, {
574
583
  F: __dxlog_file5,
575
- L: 106,
584
+ L: 124,
576
585
  S: this,
577
586
  C: (f, a) => f(...a)
578
587
  });
@@ -602,7 +611,6 @@ var WorkerRuntime = class {
602
611
  DevtoolsHostEvents,
603
612
  DevtoolsServiceImpl,
604
613
  IFrameHostRuntime,
605
- IFrameProxyRuntime,
606
614
  Identity,
607
615
  IdentityManager,
608
616
  IdentityServiceImpl,
@@ -611,6 +619,7 @@ var WorkerRuntime = class {
611
619
  Lock,
612
620
  ServiceContext,
613
621
  ServiceRegistry,
622
+ SharedWorkerConnection,
614
623
  ShellRuntimeImpl,
615
624
  SpaceInvitationProtocol,
616
625
  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/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": "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",
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"]
3
+ "sources": ["../../../src/packlets/vault/iframe-host-runtime.ts", "../../../src/packlets/vault/shell-runtime.ts", "../../../src/packlets/vault/shared-worker-connection.ts", "../../../src/packlets/vault/worker-runtime.ts", "../../../src/packlets/vault/worker-session.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { PROXY_CONNECTION_TIMEOUT, type ShellRuntime } from '@dxos/client-protocol';\nimport { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { log, logInfo } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { createSimplePeerTransportFactory, type TransportFactory } from '@dxos/network-manager';\nimport { type RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, type MaybePromise, type Provider } from '@dxos/util';\n\nimport { ShellRuntimeImpl } from './shell-runtime';\nimport { ClientServicesHost } from '../services';\nimport { ClientRpcServer, type ClientRpcServerParams } from '../services/client-rpc-server';\n\nconst LOCK_KEY = 'DXOS_RESOURCE_LOCK';\n\nexport type IFrameHostRuntimeParams = {\n config: Config | Provider<MaybePromise<Config>>;\n origin: string;\n appPort: RpcPort;\n shellPort?: RpcPort;\n};\n\n/**\n * Runs the client services in the main thread.\n *\n * Holds a lock over the client services such that only one instance can run at a time.\n * This should only be used when SharedWorker is not available.\n *\n * @deprecated\n */\nexport class IFrameHostRuntime {\n private readonly _configProvider: IFrameHostRuntimeParams['config'];\n private readonly _ready = new Trigger<Error | undefined>();\n\n private readonly _appPort: RpcPort;\n private readonly _shellPort?: RpcPort;\n private _config!: Config;\n private _transportFactory!: TransportFactory;\n\n // TODO(dmaretskyi): Replace with host and figure out how to return services provider here.\n private _clientServices!: ClientServicesHost;\n private _clientRpc!: ClientRpcServer;\n private _shellRuntime?: ShellRuntimeImpl;\n\n @logInfo\n public origin: string;\n\n constructor({ config, origin, appPort, shellPort }: IFrameHostRuntimeParams) {\n this._configProvider = config;\n this.origin = origin;\n this._appPort = appPort;\n this._shellPort = shellPort;\n\n if (this._shellPort) {\n this._shellRuntime = new ShellRuntimeImpl(this._shellPort);\n }\n }\n\n get services() {\n return this._clientServices;\n }\n\n get shell(): ShellRuntime | undefined {\n return this._shellRuntime;\n }\n\n async start() {\n log('starting...');\n try {\n this._config = await getAsyncValue(this._configProvider);\n this._transportFactory = createSimplePeerTransportFactory({\n iceServers: this._config.get('runtime.services.ice'),\n });\n const signals = this._config.get('runtime.services.signaling');\n this._clientServices = new ClientServicesHost({\n lockKey: LOCK_KEY,\n config: this._config,\n signalManager: signals\n ? new WebsocketSignalManager(signals)\n : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.\n transportFactory: this._transportFactory,\n });\n\n const middleware: Pick<ClientRpcServerParams, 'handleCall' | 'handleStream'> = {\n handleCall: async (method, params, handler) => {\n const error = await this._ready.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n handleStream: async (method, params, handler) => {\n const error = await this._ready.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n };\n\n this._clientRpc = new ClientRpcServer({\n serviceRegistry: this._clientServices.serviceRegistry,\n port: this._appPort,\n ...middleware,\n });\n\n await Promise.all([this._clientServices.open(new Context()), this._clientRpc.open(), this._shellRuntime?.open()]);\n this._ready.wake(undefined);\n log('started');\n } catch (err: any) {\n this._ready.wake(err);\n log.catch(err);\n }\n }\n\n async stop() {\n log('stopping...');\n await this._clientRpc.close();\n await this._clientServices.close();\n await this._shellRuntime?.close();\n log('stopped');\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Event } from '@dxos/async';\nimport { appServiceBundle, type AppServiceBundle, type ShellRuntime, shellServiceBundle } from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { type PublicKey } from '@dxos/keys';\nimport { type AppContextRequest, type LayoutRequest, ShellLayout } from '@dxos/protocols/proto/dxos/iframe';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';\n\n/**\n * Endpoint that handles shell services.\n */\nexport class ShellRuntimeImpl implements ShellRuntime {\n readonly layoutUpdate = new Event<LayoutRequest>();\n private _appRpc?: ProtoRpcPeer<AppServiceBundle>;\n private _layout = ShellLayout.DEFAULT;\n private _invitationCode?: string;\n private _spaceKey?: PublicKey;\n\n constructor(private readonly _port: RpcPort) {}\n\n get layout() {\n return this._layout;\n }\n\n get invitationCode() {\n return this._invitationCode;\n }\n\n get spaceKey() {\n return this._spaceKey;\n }\n\n setLayout({ layout, invitationCode, spaceKey }: LayoutRequest) {\n this._layout = layout;\n this._invitationCode = invitationCode;\n this._spaceKey = spaceKey;\n this.layoutUpdate.emit({ layout, invitationCode, spaceKey });\n }\n\n async setAppContext(context: AppContextRequest) {\n invariant(this._appRpc, 'runtime not open');\n\n await this._appRpc.rpc.AppService.setContext(context);\n }\n\n async open() {\n this._appRpc = createProtoRpcPeer({\n requested: appServiceBundle,\n exposed: shellServiceBundle,\n handlers: {\n ShellService: {\n setLayout: async (request) => {\n this._layout = request.layout;\n this._invitationCode = request.invitationCode;\n this._spaceKey = request.spaceKey;\n this.layoutUpdate.emit(request);\n },\n },\n },\n port: this._port,\n });\n\n await this._appRpc.open();\n }\n\n async close() {\n await this._appRpc?.close();\n this._appRpc = undefined;\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport {\n iframeServiceBundle,\n type ShellRuntime,\n workerServiceBundle,\n type WorkerServiceBundle,\n} from '@dxos/client-protocol';\nimport { type Config } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport { SimplePeerTransportService } from '@dxos/network-manager';\nimport { RemoteServiceConnectionError } from '@dxos/protocols';\nimport { type BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, type MaybePromise, type Provider } from '@dxos/util';\n\nimport { ShellRuntimeImpl } from './shell-runtime';\n\n// NOTE: Keep as RpcPorts to avoid dependency on @dxos/rpc-tunnel so we don't depend on browser-specific apis.\nexport type SharedWorkerConnectionOptions = {\n config: Config | Provider<MaybePromise<Config>>;\n systemPort: RpcPort;\n /**\n * @deprecated Only used with iframes.\n */\n shellPort?: RpcPort;\n};\n\n/**\n * Manages the client connection to the shared worker.\n */\nexport class SharedWorkerConnection {\n private readonly _id = String(Math.floor(Math.random() * 1000000));\n private readonly _configProvider: SharedWorkerConnectionOptions['config'];\n private readonly _systemPort: RpcPort;\n private readonly _shellPort?: RpcPort;\n private _release = new Trigger();\n private _config!: Config;\n private _transportService!: BridgeService;\n private _systemRpc!: ProtoRpcPeer<WorkerServiceBundle>;\n private _shellRuntime?: ShellRuntimeImpl;\n\n constructor({ config, systemPort, shellPort }: SharedWorkerConnectionOptions) {\n this._configProvider = config;\n this._systemPort = systemPort;\n this._shellPort = shellPort;\n\n if (this._shellPort) {\n this._shellRuntime = new ShellRuntimeImpl(this._shellPort);\n }\n }\n\n get shell(): ShellRuntime | undefined {\n return this._shellRuntime;\n }\n\n async open(\n /**\n * @deprecated Only used with iframes.\n */\n origin: string,\n ) {\n this._config = await getAsyncValue(this._configProvider);\n\n this._transportService = new SimplePeerTransportService({\n iceServers: this._config.get('runtime.services.ice'),\n });\n\n this._systemRpc = createProtoRpcPeer({\n requested: workerServiceBundle,\n exposed: iframeServiceBundle,\n handlers: {\n BridgeService: this._transportService,\n },\n port: this._systemPort,\n timeout: 200,\n });\n\n let lockKey: string | undefined;\n if (typeof navigator !== 'undefined') {\n lockKey = this._lockKey(origin);\n this._release = new Trigger();\n const ready = new Trigger();\n void navigator.locks.request(lockKey, async () => {\n ready.wake();\n await this._release.wait();\n });\n await ready.wait();\n }\n\n try {\n await this._systemRpc.open();\n await this._systemRpc.rpc.WorkerService.start({ origin, lockKey });\n } catch (err) {\n log.catch(err);\n throw new RemoteServiceConnectionError('Failed to connect to worker');\n }\n await this._shellRuntime?.open();\n }\n\n async close() {\n this._release.wake();\n await this._shellRuntime?.close();\n try {\n await this._systemRpc.rpc.WorkerService.stop();\n } catch {\n // If this fails, the worker is probably already gone.\n }\n await this._systemRpc.close();\n }\n\n private _lockKey(origin: string) {\n return `${origin}-${this._id}`;\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { log } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { SimplePeerTransportProxyFactory } from '@dxos/network-manager';\nimport { type RpcPort } from '@dxos/rpc';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { WorkerSession } from './worker-session';\nimport { ClientServicesHost } from '../services';\n\n// NOTE: Keep as RpcPorts to avoid dependency on @dxos/rpc-tunnel so we don't depend on browser-specific apis.\nexport type CreateSessionParams = {\n appPort: RpcPort;\n systemPort: RpcPort;\n shellPort?: RpcPort;\n};\n\nexport type WorkerRuntimeCallbacks = {\n acquireLock: () => Promise<void>;\n releaseLock: () => void;\n onReset: () => Promise<void>;\n};\n\n/**\n * Runtime for the shared worker.\n * Manages connections from proxies (in tabs).\n * Tabs make requests to the `ClientServicesHost`, and provide a WebRTC gateway.\n */\nexport class WorkerRuntime {\n private readonly _acquireLock: () => Promise<void>;\n private readonly _releaseLock: () => void;\n private readonly _transportFactory = new SimplePeerTransportProxyFactory();\n private readonly _ready = new Trigger<Error | undefined>();\n private readonly _sessions = new Set<WorkerSession>();\n private readonly _clientServices!: ClientServicesHost;\n private _sessionForNetworking?: WorkerSession; // TODO(burdon): Expose to client QueryStatusResponse.\n private _config!: Config;\n\n constructor(\n private readonly _configProvider: () => MaybePromise<Config>,\n { acquireLock, releaseLock, onReset }: WorkerRuntimeCallbacks,\n ) {\n this._acquireLock = acquireLock;\n this._releaseLock = releaseLock;\n this._clientServices = new ClientServicesHost({\n callbacks: {\n onReset: async () => onReset(),\n },\n });\n }\n\n get host() {\n return this._clientServices;\n }\n\n async start() {\n log('starting...');\n try {\n await this._acquireLock();\n this._config = await this._configProvider();\n const signals = this._config.get('runtime.services.signaling');\n this._clientServices.initialize({\n config: this._config,\n signalManager: signals\n ? new WebsocketSignalManager(signals)\n : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.\n transportFactory: this._transportFactory,\n });\n\n await this._clientServices.open(new Context());\n this._ready.wake(undefined);\n log('started');\n } catch (err: any) {\n this._ready.wake(err);\n log.error('starting', err);\n }\n }\n\n async stop() {\n // Release the lock to notify remote clients that the worker is terminating.\n this._releaseLock();\n await this._clientServices.close();\n }\n\n /**\n * Create a new session.\n */\n async createSession({ appPort, systemPort, shellPort }: CreateSessionParams) {\n const session = new WorkerSession({\n serviceHost: this._clientServices,\n appPort,\n systemPort,\n shellPort,\n readySignal: this._ready,\n });\n\n // When tab is closed or client is destroyed.\n session.onClose.set(async () => {\n this._sessions.delete(session);\n if (this._sessions.size === 0) {\n // Terminate the worker when all sessions are closed.\n self.close();\n } else {\n this._reconnectWebrtc();\n }\n });\n\n await session.open();\n this._sessions.add(session);\n\n this._reconnectWebrtc();\n }\n\n /**\n * Selects one of the existing session for WebRTC networking.\n */\n private _reconnectWebrtc() {\n log('reconnecting webrtc...');\n // Check if current session is already closed.\n if (this._sessionForNetworking) {\n if (!this._sessions.has(this._sessionForNetworking)) {\n this._sessionForNetworking = undefined;\n }\n }\n\n // Select existing session.\n if (!this._sessionForNetworking) {\n const selected = Array.from(this._sessions).find((session) => session.bridgeService);\n if (selected) {\n this._sessionForNetworking = selected;\n this._transportFactory.setBridgeService(selected.bridgeService);\n } else {\n this._transportFactory.setBridgeService(undefined);\n }\n }\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { asyncTimeout, Trigger } from '@dxos/async';\nimport {\n iframeServiceBundle,\n type IframeServiceBundle,\n PROXY_CONNECTION_TIMEOUT,\n workerServiceBundle,\n} from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { log, logInfo } from '@dxos/log';\nimport { type BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';\nimport { Callback, type MaybePromise } from '@dxos/util';\n\nimport { type ClientServicesHost, ClientRpcServer, type ClientRpcServerParams } from '../services';\n\nexport type WorkerSessionParams = {\n serviceHost: ClientServicesHost;\n systemPort: RpcPort;\n appPort: RpcPort;\n // TODO(wittjosiah): Remove shellPort.\n shellPort?: RpcPort;\n readySignal: Trigger<Error | undefined>;\n};\n\n/**\n * Represents a tab connection within the worker.\n */\nexport class WorkerSession {\n private readonly _clientRpc: ClientRpcServer;\n private readonly _shellClientRpc?: ClientRpcServer;\n private readonly _iframeRpc: ProtoRpcPeer<IframeServiceBundle>;\n private readonly _startTrigger = new Trigger();\n private readonly _serviceHost: ClientServicesHost;\n\n public readonly onClose = new Callback<() => Promise<void>>();\n\n @logInfo\n public origin?: string;\n\n @logInfo\n public lockKey?: string;\n\n public bridgeService?: BridgeService;\n\n constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }: WorkerSessionParams) {\n invariant(serviceHost);\n this._serviceHost = serviceHost;\n\n const middleware: Pick<ClientRpcServerParams, 'handleCall' | 'handleStream'> = {\n handleCall: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n handleStream: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n };\n\n this._clientRpc = new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: appPort,\n ...middleware,\n });\n\n this._shellClientRpc = shellPort\n ? new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: shellPort,\n ...middleware,\n })\n : undefined;\n\n this._iframeRpc = createProtoRpcPeer({\n requested: iframeServiceBundle,\n exposed: workerServiceBundle,\n handlers: {\n WorkerService: {\n start: async (request) => {\n this.origin = request.origin;\n this.lockKey = request.lockKey;\n this._startTrigger.wake();\n },\n\n stop: async () => {\n setTimeout(async () => {\n try {\n await this.close();\n } catch (err: any) {\n log.catch(err);\n }\n });\n },\n },\n },\n port: systemPort,\n timeout: 1_000, // With low timeout heartbeat may fail if the tab's thread is saturated.\n });\n\n this.bridgeService = this._iframeRpc.rpc.BridgeService;\n }\n\n async open() {\n log.info('opening...');\n await Promise.all([this._clientRpc.open(), this._iframeRpc.open(), this._maybeOpenShell()]);\n\n // Wait until the worker's RPC service has started.\n await this._startTrigger.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n\n // TODO(burdon): Comment required.\n if (this.lockKey) {\n void this._afterLockReleases(this.lockKey, () => this.close());\n }\n\n log.info('opened');\n }\n\n async close() {\n log.info('closing...');\n try {\n await this.onClose.callIfSet();\n } catch (err: any) {\n log.catch(err);\n }\n\n await Promise.all([this._clientRpc.close(), this._iframeRpc.close()]);\n log.info('closed');\n }\n\n private async _maybeOpenShell() {\n try {\n this._shellClientRpc && (await asyncTimeout(this._shellClientRpc.open(), 1_000));\n } catch {\n log.info('No shell connected.');\n }\n }\n\n private _afterLockReleases(lockKey: string, callback: () => MaybePromise<void>): Promise<void> {\n return navigator.locks\n .request(lockKey, () => {\n // No-op.\n })\n .then(callback);\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["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
  }