@dxos/client-services 0.4.10-main.fa5a270 → 0.4.10-main.fe71b4c

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 (98) hide show
  1. package/dist/lib/browser/{chunk-7PYX6UUA.mjs → chunk-7S34JE6M.mjs} +980 -656
  2. package/dist/lib/browser/chunk-7S34JE6M.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +60 -22
  4. package/dist/lib/browser/index.mjs.map +3 -3
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/packlets/testing/index.mjs +12 -5
  7. package/dist/lib/browser/packlets/testing/index.mjs.map +3 -3
  8. package/dist/lib/node/{chunk-4TX623I7.cjs → chunk-DQMGKBOV.cjs} +922 -685
  9. package/dist/lib/node/chunk-DQMGKBOV.cjs.map +7 -0
  10. package/dist/lib/node/index.cjs +96 -58
  11. package/dist/lib/node/index.cjs.map +3 -3
  12. package/dist/lib/node/meta.json +1 -1
  13. package/dist/lib/node/packlets/testing/index.cjs +16 -9
  14. package/dist/lib/node/packlets/testing/index.cjs.map +3 -3
  15. package/dist/types/src/index.d.ts +1 -0
  16. package/dist/types/src/index.d.ts.map +1 -1
  17. package/dist/types/src/packlets/diagnostics/browser-diagnostics-broadcast.d.ts +5 -0
  18. package/dist/types/src/packlets/diagnostics/browser-diagnostics-broadcast.d.ts.map +1 -0
  19. package/dist/types/src/packlets/diagnostics/diagnostics-broadcast.d.ts +5 -0
  20. package/dist/types/src/packlets/diagnostics/diagnostics-broadcast.d.ts.map +1 -0
  21. package/dist/types/src/packlets/diagnostics/diagnostics-collector.d.ts +15 -0
  22. package/dist/types/src/packlets/diagnostics/diagnostics-collector.d.ts.map +1 -0
  23. package/dist/types/src/packlets/{services → diagnostics}/diagnostics.d.ts +1 -1
  24. package/dist/types/src/packlets/diagnostics/diagnostics.d.ts.map +1 -0
  25. package/dist/types/src/packlets/diagnostics/index.d.ts +4 -0
  26. package/dist/types/src/packlets/diagnostics/index.d.ts.map +1 -0
  27. package/dist/types/src/packlets/indexing/util.d.ts +3 -2
  28. package/dist/types/src/packlets/indexing/util.d.ts.map +1 -1
  29. package/dist/types/src/packlets/invitations/invitation-extension.d.ts +1 -0
  30. package/dist/types/src/packlets/invitations/invitation-extension.d.ts.map +1 -1
  31. package/dist/types/src/packlets/invitations/invitations-handler.d.ts +4 -2
  32. package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
  33. package/dist/types/src/packlets/invitations/invitations-service.d.ts.map +1 -1
  34. package/dist/types/src/packlets/services/index.d.ts +1 -1
  35. package/dist/types/src/packlets/services/index.d.ts.map +1 -1
  36. package/dist/types/src/packlets/services/service-context.d.ts +7 -5
  37. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  38. package/dist/types/src/packlets/services/service-host.d.ts +5 -1
  39. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  40. package/dist/types/src/packlets/services/util.d.ts +1 -0
  41. package/dist/types/src/packlets/services/util.d.ts.map +1 -1
  42. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  43. package/dist/types/src/packlets/storage/index.d.ts +1 -0
  44. package/dist/types/src/packlets/storage/index.d.ts.map +1 -1
  45. package/dist/types/src/packlets/storage/level.d.ts +4 -0
  46. package/dist/types/src/packlets/storage/level.d.ts.map +1 -0
  47. package/dist/types/src/packlets/storage/storage.d.ts.map +1 -1
  48. package/dist/types/src/packlets/storage/util.d.ts +4 -0
  49. package/dist/types/src/packlets/storage/util.d.ts.map +1 -0
  50. package/dist/types/src/packlets/system/system-service.d.ts +1 -1
  51. package/dist/types/src/packlets/system/system-service.d.ts.map +1 -1
  52. package/dist/types/src/packlets/testing/test-builder.d.ts +4 -2
  53. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  54. package/dist/types/src/packlets/vault/shared-worker-connection.d.ts +5 -5
  55. package/dist/types/src/packlets/vault/shared-worker-connection.d.ts.map +1 -1
  56. package/dist/types/src/packlets/vault/worker-runtime.d.ts +2 -0
  57. package/dist/types/src/packlets/vault/worker-runtime.d.ts.map +1 -1
  58. package/dist/types/src/packlets/vault/worker-session.d.ts +2 -0
  59. package/dist/types/src/packlets/vault/worker-session.d.ts.map +1 -1
  60. package/dist/types/src/version.d.ts +1 -1
  61. package/package.json +36 -34
  62. package/src/index.ts +1 -0
  63. package/src/packlets/devices/devices-service.test.ts +1 -1
  64. package/src/packlets/diagnostics/browser-diagnostics-broadcast.ts +94 -0
  65. package/src/packlets/diagnostics/diagnostics-broadcast.ts +20 -0
  66. package/src/packlets/diagnostics/diagnostics-collector.ts +65 -0
  67. package/src/packlets/{services → diagnostics}/diagnostics.ts +2 -2
  68. package/src/packlets/diagnostics/index.ts +7 -0
  69. package/src/packlets/identity/identity-service.test.ts +1 -1
  70. package/src/packlets/indexing/util.ts +6 -6
  71. package/src/packlets/invitations/device-invitation-protocol.test.ts +1 -1
  72. package/src/packlets/invitations/invitation-extension.ts +28 -1
  73. package/src/packlets/invitations/invitations-handler.ts +73 -32
  74. package/src/packlets/invitations/invitations-service.ts +5 -5
  75. package/src/packlets/network/network-service.test.ts +1 -1
  76. package/src/packlets/services/automerge-host.test.ts +9 -3
  77. package/src/packlets/services/index.ts +1 -1
  78. package/src/packlets/services/service-context.test.ts +9 -6
  79. package/src/packlets/services/service-context.ts +18 -11
  80. package/src/packlets/services/service-host.ts +52 -9
  81. package/src/packlets/services/service-registry.test.ts +1 -1
  82. package/src/packlets/services/util.ts +2 -0
  83. package/src/packlets/spaces/data-space-manager.test.ts +4 -4
  84. package/src/packlets/spaces/data-space.ts +51 -2
  85. package/src/packlets/spaces/spaces-service.test.ts +1 -1
  86. package/src/packlets/storage/index.ts +1 -0
  87. package/src/packlets/storage/level.ts +19 -0
  88. package/src/packlets/storage/storage.ts +3 -9
  89. package/src/packlets/storage/util.ts +19 -0
  90. package/src/packlets/system/system-service.ts +1 -1
  91. package/src/packlets/testing/test-builder.ts +23 -5
  92. package/src/packlets/vault/shared-worker-connection.ts +3 -8
  93. package/src/packlets/vault/worker-runtime.ts +27 -2
  94. package/src/packlets/vault/worker-session.ts +6 -0
  95. package/src/version.ts +1 -1
  96. package/dist/lib/browser/chunk-7PYX6UUA.mjs.map +0 -7
  97. package/dist/lib/node/chunk-4TX623I7.cjs.map +0 -7
  98. package/dist/types/src/packlets/services/diagnostics.d.ts.map +0 -1
@@ -18,45 +18,50 @@ 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_4TX623I7.ClientRpcServer,
22
- ClientServicesHost: () => import_chunk_4TX623I7.ClientServicesHost,
23
- DataSpace: () => import_chunk_4TX623I7.DataSpace,
24
- DataSpaceManager: () => import_chunk_4TX623I7.DataSpaceManager,
25
- DeviceInvitationProtocol: () => import_chunk_4TX623I7.DeviceInvitationProtocol,
26
- DevtoolsHostEvents: () => import_chunk_4TX623I7.DevtoolsHostEvents,
27
- DevtoolsServiceImpl: () => import_chunk_4TX623I7.DevtoolsServiceImpl,
21
+ ClientRpcServer: () => import_chunk_DQMGKBOV.ClientRpcServer,
22
+ ClientServicesHost: () => import_chunk_DQMGKBOV.ClientServicesHost,
23
+ ClientServicesProviderResource: () => import_chunk_DQMGKBOV.ClientServicesProviderResource,
24
+ DataSpace: () => import_chunk_DQMGKBOV.DataSpace,
25
+ DataSpaceManager: () => import_chunk_DQMGKBOV.DataSpaceManager,
26
+ DeviceInvitationProtocol: () => import_chunk_DQMGKBOV.DeviceInvitationProtocol,
27
+ DevtoolsHostEvents: () => import_chunk_DQMGKBOV.DevtoolsHostEvents,
28
+ DevtoolsServiceImpl: () => import_chunk_DQMGKBOV.DevtoolsServiceImpl,
29
+ DiagnosticsCollector: () => import_chunk_DQMGKBOV.DiagnosticsCollector,
28
30
  IFrameHostRuntime: () => IFrameHostRuntime,
29
- Identity: () => import_chunk_4TX623I7.Identity,
30
- IdentityManager: () => import_chunk_4TX623I7.IdentityManager,
31
- IdentityServiceImpl: () => import_chunk_4TX623I7.IdentityServiceImpl,
32
- InvitationsHandler: () => import_chunk_4TX623I7.InvitationsHandler,
33
- InvitationsServiceImpl: () => import_chunk_4TX623I7.InvitationsServiceImpl,
34
- Lock: () => import_chunk_4TX623I7.Lock,
35
- ServiceContext: () => import_chunk_4TX623I7.ServiceContext,
36
- ServiceRegistry: () => import_chunk_4TX623I7.ServiceRegistry,
31
+ Identity: () => import_chunk_DQMGKBOV.Identity,
32
+ IdentityManager: () => import_chunk_DQMGKBOV.IdentityManager,
33
+ IdentityServiceImpl: () => import_chunk_DQMGKBOV.IdentityServiceImpl,
34
+ InvitationsHandler: () => import_chunk_DQMGKBOV.InvitationsHandler,
35
+ InvitationsServiceImpl: () => import_chunk_DQMGKBOV.InvitationsServiceImpl,
36
+ Lock: () => import_chunk_DQMGKBOV.Lock,
37
+ ServiceContext: () => import_chunk_DQMGKBOV.ServiceContext,
38
+ ServiceRegistry: () => import_chunk_DQMGKBOV.ServiceRegistry,
37
39
  SharedWorkerConnection: () => SharedWorkerConnection,
38
40
  ShellRuntimeImpl: () => ShellRuntimeImpl,
39
- SpaceInvitationProtocol: () => import_chunk_4TX623I7.SpaceInvitationProtocol,
40
- SpacesServiceImpl: () => import_chunk_4TX623I7.SpacesServiceImpl,
41
- TrustedKeySetAuthVerifier: () => import_chunk_4TX623I7.TrustedKeySetAuthVerifier,
41
+ SpaceInvitationProtocol: () => import_chunk_DQMGKBOV.SpaceInvitationProtocol,
42
+ SpacesServiceImpl: () => import_chunk_DQMGKBOV.SpacesServiceImpl,
43
+ TrustedKeySetAuthVerifier: () => import_chunk_DQMGKBOV.TrustedKeySetAuthVerifier,
42
44
  WorkerRuntime: () => WorkerRuntime,
43
45
  WorkerSession: () => WorkerSession,
44
- createAuthProvider: () => import_chunk_4TX623I7.createAuthProvider,
45
- createDiagnostics: () => import_chunk_4TX623I7.createDiagnostics,
46
- createStorageObjects: () => import_chunk_4TX623I7.createStorageObjects,
47
- getNetworkPeers: () => import_chunk_4TX623I7.getNetworkPeers,
48
- invitationExpired: () => import_chunk_4TX623I7.invitationExpired,
49
- isLocked: () => import_chunk_4TX623I7.isLocked,
50
- subscribeToFeedBlocks: () => import_chunk_4TX623I7.subscribeToFeedBlocks,
51
- subscribeToFeeds: () => import_chunk_4TX623I7.subscribeToFeeds,
52
- subscribeToNetworkStatus: () => import_chunk_4TX623I7.subscribeToNetworkStatus,
53
- subscribeToNetworkTopics: () => import_chunk_4TX623I7.subscribeToNetworkTopics,
54
- subscribeToSignal: () => import_chunk_4TX623I7.subscribeToSignal,
55
- subscribeToSpaces: () => import_chunk_4TX623I7.subscribeToSpaces,
56
- subscribeToSwarmInfo: () => import_chunk_4TX623I7.subscribeToSwarmInfo
46
+ createAdmissionKeypair: () => import_chunk_DQMGKBOV.createAdmissionKeypair,
47
+ createAuthProvider: () => import_chunk_DQMGKBOV.createAuthProvider,
48
+ createCollectDiagnosticsBroadcastHandler: () => import_chunk_DQMGKBOV.createCollectDiagnosticsBroadcastHandler,
49
+ createCollectDiagnosticsBroadcastSender: () => import_chunk_DQMGKBOV.createCollectDiagnosticsBroadcastSender,
50
+ createDiagnostics: () => import_chunk_DQMGKBOV.createDiagnostics,
51
+ createLevel: () => import_chunk_DQMGKBOV.createLevel,
52
+ createStorageObjects: () => import_chunk_DQMGKBOV.createStorageObjects,
53
+ getNetworkPeers: () => import_chunk_DQMGKBOV.getNetworkPeers,
54
+ isLocked: () => import_chunk_DQMGKBOV.isLocked,
55
+ subscribeToFeedBlocks: () => import_chunk_DQMGKBOV.subscribeToFeedBlocks,
56
+ subscribeToFeeds: () => import_chunk_DQMGKBOV.subscribeToFeeds,
57
+ subscribeToNetworkStatus: () => import_chunk_DQMGKBOV.subscribeToNetworkStatus,
58
+ subscribeToNetworkTopics: () => import_chunk_DQMGKBOV.subscribeToNetworkTopics,
59
+ subscribeToSignal: () => import_chunk_DQMGKBOV.subscribeToSignal,
60
+ subscribeToSpaces: () => import_chunk_DQMGKBOV.subscribeToSpaces,
61
+ subscribeToSwarmInfo: () => import_chunk_DQMGKBOV.subscribeToSwarmInfo
57
62
  });
58
63
  module.exports = __toCommonJS(node_exports);
59
- var import_chunk_4TX623I7 = require("./chunk-4TX623I7.cjs");
64
+ var import_chunk_DQMGKBOV = require("./chunk-DQMGKBOV.cjs");
60
65
  var import_async = require("@dxos/async");
61
66
  var import_client_protocol = require("@dxos/client-protocol");
62
67
  var import_context = require("@dxos/context");
@@ -78,12 +83,13 @@ var import_rpc2 = require("@dxos/rpc");
78
83
  var import_util2 = require("@dxos/util");
79
84
  var import_async4 = require("@dxos/async");
80
85
  var import_context2 = require("@dxos/context");
86
+ var import_invariant2 = require("@dxos/invariant");
81
87
  var import_log3 = require("@dxos/log");
82
88
  var import_messaging2 = require("@dxos/messaging");
83
89
  var import_network_manager3 = require("@dxos/network-manager");
84
90
  var import_async5 = require("@dxos/async");
85
91
  var import_client_protocol4 = require("@dxos/client-protocol");
86
- var import_invariant2 = require("@dxos/invariant");
92
+ var import_invariant3 = require("@dxos/invariant");
87
93
  var import_log4 = require("@dxos/log");
88
94
  var import_rpc3 = require("@dxos/rpc");
89
95
  var import_util3 = require("@dxos/util");
@@ -190,7 +196,7 @@ var IFrameHostRuntime = class {
190
196
  iceServers: this._config.get("runtime.services.ice")
191
197
  });
192
198
  const signals = this._config.get("runtime.services.signaling");
193
- this._clientServices = new import_chunk_4TX623I7.ClientServicesHost({
199
+ this._clientServices = new import_chunk_DQMGKBOV.ClientServicesHost({
194
200
  lockKey: LOCK_KEY,
195
201
  config: this._config,
196
202
  signalManager: signals ? new import_messaging.WebsocketSignalManager(signals) : new import_messaging.MemorySignalManager(new import_messaging.MemorySignalManagerContext()),
@@ -216,7 +222,7 @@ var IFrameHostRuntime = class {
216
222
  return handler(method, params);
217
223
  }
218
224
  };
219
- this._clientRpc = new import_chunk_4TX623I7.ClientRpcServer({
225
+ this._clientRpc = new import_chunk_DQMGKBOV.ClientRpcServer({
220
226
  serviceRegistry: this._clientServices.serviceRegistry,
221
227
  port: this._appPort,
222
228
  ...middleware
@@ -279,7 +285,7 @@ var SharedWorkerConnection = class {
279
285
  get shell() {
280
286
  return this._shellRuntime;
281
287
  }
282
- async open(origin) {
288
+ async open(params) {
283
289
  this._config = await (0, import_util2.getAsyncValue)(this._configProvider);
284
290
  this._transportService = new import_network_manager2.SimplePeerTransportService({
285
291
  iceServers: this._config.get("runtime.services.ice")
@@ -297,7 +303,7 @@ var SharedWorkerConnection = class {
297
303
  });
298
304
  let lockKey;
299
305
  if (typeof navigator !== "undefined") {
300
- lockKey = this._lockKey(origin);
306
+ lockKey = this._lockKey(params.origin);
301
307
  this._release = new import_async3.Trigger();
302
308
  const ready = new import_async3.Trigger();
303
309
  void navigator.locks.request(lockKey, async () => {
@@ -309,13 +315,13 @@ var SharedWorkerConnection = class {
309
315
  try {
310
316
  await this._systemRpc.open();
311
317
  await this._systemRpc.rpc.WorkerService.start({
312
- origin,
313
- lockKey
318
+ lockKey,
319
+ ...params
314
320
  });
315
321
  } catch (err) {
316
322
  import_log2.log.catch(err, void 0, {
317
323
  F: __dxlog_file3,
318
- L: 100,
324
+ L: 95,
319
325
  S: this,
320
326
  C: (f, a) => f(...a)
321
327
  });
@@ -351,9 +357,9 @@ var WorkerSession = class {
351
357
  constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }) {
352
358
  this._startTrigger = new import_async5.Trigger();
353
359
  this.onClose = new import_util3.Callback();
354
- (0, import_invariant2.invariant)(serviceHost, void 0, {
360
+ (0, import_invariant3.invariant)(serviceHost, void 0, {
355
361
  F: __dxlog_file4,
356
- L: 50,
362
+ L: 54,
357
363
  S: this,
358
364
  A: [
359
365
  "serviceHost",
@@ -381,12 +387,12 @@ var WorkerSession = class {
381
387
  return handler(method, params);
382
388
  }
383
389
  };
384
- this._clientRpc = new import_chunk_4TX623I7.ClientRpcServer({
390
+ this._clientRpc = new import_chunk_DQMGKBOV.ClientRpcServer({
385
391
  serviceRegistry: this._serviceHost.serviceRegistry,
386
392
  port: appPort,
387
393
  ...middleware
388
394
  });
389
- this._shellClientRpc = shellPort ? new import_chunk_4TX623I7.ClientRpcServer({
395
+ this._shellClientRpc = shellPort ? new import_chunk_DQMGKBOV.ClientRpcServer({
390
396
  serviceRegistry: this._serviceHost.serviceRegistry,
391
397
  port: shellPort,
392
398
  ...middleware
@@ -399,6 +405,8 @@ var WorkerSession = class {
399
405
  start: async (request) => {
400
406
  this.origin = request.origin;
401
407
  this.lockKey = request.lockKey;
408
+ this.observabilityGroup = request.observabilityGroup;
409
+ this.signalTelemetryEnabled = request.signalTelemetryEnabled;
402
410
  this._startTrigger.wake();
403
411
  },
404
412
  stop: async () => {
@@ -408,7 +416,7 @@ var WorkerSession = class {
408
416
  } catch (err) {
409
417
  import_log4.log.catch(err, void 0, {
410
418
  F: __dxlog_file4,
411
- L: 102,
419
+ L: 108,
412
420
  S: this,
413
421
  C: (f, a) => f(...a)
414
422
  });
@@ -425,7 +433,7 @@ var WorkerSession = class {
425
433
  async open() {
426
434
  import_log4.log.info("opening...", void 0, {
427
435
  F: __dxlog_file4,
428
- L: 116,
436
+ L: 122,
429
437
  S: this,
430
438
  C: (f, a) => f(...a)
431
439
  });
@@ -442,7 +450,7 @@ var WorkerSession = class {
442
450
  }
443
451
  import_log4.log.info("opened", void 0, {
444
452
  F: __dxlog_file4,
445
- L: 127,
453
+ L: 133,
446
454
  S: this,
447
455
  C: (f, a) => f(...a)
448
456
  });
@@ -450,7 +458,7 @@ var WorkerSession = class {
450
458
  async close() {
451
459
  import_log4.log.info("closing...", void 0, {
452
460
  F: __dxlog_file4,
453
- L: 131,
461
+ L: 137,
454
462
  S: this,
455
463
  C: (f, a) => f(...a)
456
464
  });
@@ -459,7 +467,7 @@ var WorkerSession = class {
459
467
  } catch (err) {
460
468
  import_log4.log.catch(err, void 0, {
461
469
  F: __dxlog_file4,
462
- L: 135,
470
+ L: 141,
463
471
  S: this,
464
472
  C: (f, a) => f(...a)
465
473
  });
@@ -470,7 +478,7 @@ var WorkerSession = class {
470
478
  ]);
471
479
  import_log4.log.info("closed", void 0, {
472
480
  F: __dxlog_file4,
473
- L: 139,
481
+ L: 145,
474
482
  S: this,
475
483
  C: (f, a) => f(...a)
476
484
  });
@@ -481,7 +489,7 @@ var WorkerSession = class {
481
489
  } catch {
482
490
  import_log4.log.info("No shell connected.", void 0, {
483
491
  F: __dxlog_file4,
484
- L: 146,
492
+ L: 152,
485
493
  S: this,
486
494
  C: (f, a) => f(...a)
487
495
  });
@@ -505,9 +513,13 @@ var WorkerRuntime = class {
505
513
  this._transportFactory = new import_network_manager3.SimplePeerTransportProxyFactory();
506
514
  this._ready = new import_async4.Trigger();
507
515
  this._sessions = /* @__PURE__ */ new Set();
516
+ this._signalMetadataTags = {
517
+ runtime: "worker-runtime"
518
+ };
519
+ this._signalTelemetryEnabled = false;
508
520
  this._acquireLock = acquireLock;
509
521
  this._releaseLock = releaseLock;
510
- this._clientServices = new import_chunk_4TX623I7.ClientServicesHost({
522
+ this._clientServices = new import_chunk_DQMGKBOV.ClientServicesHost({
511
523
  callbacks: {
512
524
  onReset: async () => onReset()
513
525
  }
@@ -519,7 +531,7 @@ var WorkerRuntime = class {
519
531
  async start() {
520
532
  (0, import_log3.log)("starting...", void 0, {
521
533
  F: __dxlog_file5,
522
- L: 63,
534
+ L: 71,
523
535
  S: this,
524
536
  C: (f, a) => f(...a)
525
537
  });
@@ -529,22 +541,29 @@ var WorkerRuntime = class {
529
541
  const signals = this._config.get("runtime.services.signaling");
530
542
  this._clientServices.initialize({
531
543
  config: this._config,
532
- signalManager: signals ? new import_messaging2.WebsocketSignalManager(signals) : new import_messaging2.MemorySignalManager(new import_messaging2.MemorySignalManagerContext()),
544
+ signalManager: signals ? new import_messaging2.WebsocketSignalManager(signals, () => this._signalTelemetryEnabled ? this._signalMetadataTags : {}) : new import_messaging2.MemorySignalManager(new import_messaging2.MemorySignalManagerContext()),
533
545
  transportFactory: this._transportFactory
534
546
  });
535
547
  await this._clientServices.open(new import_context2.Context());
536
548
  this._ready.wake(void 0);
537
549
  (0, import_log3.log)("started", void 0, {
538
550
  F: __dxlog_file5,
539
- L: 78,
551
+ L: 86,
540
552
  S: this,
541
553
  C: (f, a) => f(...a)
542
554
  });
555
+ (0, import_messaging2.setIdentityTags)({
556
+ identityService: this._clientServices.services.IdentityService,
557
+ devicesService: this._clientServices.services.DevicesService,
558
+ setTag: (k, v) => {
559
+ this._signalMetadataTags[k] = v;
560
+ }
561
+ });
543
562
  } catch (err) {
544
563
  this._ready.wake(err);
545
564
  import_log3.log.error("starting", err, {
546
565
  F: __dxlog_file5,
547
- L: 81,
566
+ L: 96,
548
567
  S: this,
549
568
  C: (f, a) => f(...a)
550
569
  });
@@ -574,6 +593,20 @@ var WorkerRuntime = class {
574
593
  }
575
594
  });
576
595
  await session.open();
596
+ (0, import_invariant2.invariant)(!this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin, `worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`, {
597
+ F: __dxlog_file5,
598
+ L: 131,
599
+ S: this,
600
+ A: [
601
+ "!this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin",
602
+ "`worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`"
603
+ ]
604
+ });
605
+ if (session.observabilityGroup) {
606
+ this._signalMetadataTags.group = session.observabilityGroup;
607
+ }
608
+ this._signalTelemetryEnabled = session.signalTelemetryEnabled ?? false;
609
+ this._signalMetadataTags.origin = session.origin;
577
610
  this._sessions.add(session);
578
611
  this._reconnectWebrtc();
579
612
  }
@@ -583,7 +616,7 @@ var WorkerRuntime = class {
583
616
  _reconnectWebrtc() {
584
617
  (0, import_log3.log)("reconnecting webrtc...", void 0, {
585
618
  F: __dxlog_file5,
586
- L: 124,
619
+ L: 149,
587
620
  S: this,
588
621
  C: (f, a) => f(...a)
589
622
  });
@@ -607,11 +640,13 @@ var WorkerRuntime = class {
607
640
  0 && (module.exports = {
608
641
  ClientRpcServer,
609
642
  ClientServicesHost,
643
+ ClientServicesProviderResource,
610
644
  DataSpace,
611
645
  DataSpaceManager,
612
646
  DeviceInvitationProtocol,
613
647
  DevtoolsHostEvents,
614
648
  DevtoolsServiceImpl,
649
+ DiagnosticsCollector,
615
650
  IFrameHostRuntime,
616
651
  Identity,
617
652
  IdentityManager,
@@ -628,11 +663,14 @@ var WorkerRuntime = class {
628
663
  TrustedKeySetAuthVerifier,
629
664
  WorkerRuntime,
630
665
  WorkerSession,
666
+ createAdmissionKeypair,
631
667
  createAuthProvider,
668
+ createCollectDiagnosticsBroadcastHandler,
669
+ createCollectDiagnosticsBroadcastSender,
632
670
  createDiagnostics,
671
+ createLevel,
633
672
  createStorageObjects,
634
673
  getNetworkPeers,
635
- invitationExpired,
636
674
  isLocked,
637
675
  subscribeToFeedBlocks,
638
676
  subscribeToFeeds,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/packlets/vault/iframe-host-runtime.ts", "../../../src/packlets/vault/shell-runtime.ts", "../../../src/packlets/vault/shared-worker-connection.ts", "../../../src/packlets/vault/worker-runtime.ts", "../../../src/packlets/vault/worker-session.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { PROXY_CONNECTION_TIMEOUT, type ShellRuntime } from '@dxos/client-protocol';\nimport { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { log, logInfo } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { createSimplePeerTransportFactory, type TransportFactory } from '@dxos/network-manager';\nimport { type RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, type MaybePromise, type Provider } from '@dxos/util';\n\nimport { ShellRuntimeImpl } from './shell-runtime';\nimport { ClientServicesHost } from '../services';\nimport { ClientRpcServer, type ClientRpcServerParams } from '../services/client-rpc-server';\n\nconst LOCK_KEY = 'DXOS_RESOURCE_LOCK';\n\nexport type IFrameHostRuntimeParams = {\n config: Config | Provider<MaybePromise<Config>>;\n origin: string;\n appPort: RpcPort;\n shellPort?: RpcPort;\n};\n\n/**\n * Runs the client services in the main thread.\n *\n * Holds a lock over the client services such that only one instance can run at a time.\n * This should only be used when SharedWorker is not available.\n *\n * @deprecated\n */\nexport class IFrameHostRuntime {\n private readonly _configProvider: IFrameHostRuntimeParams['config'];\n private readonly _ready = new Trigger<Error | undefined>();\n\n private readonly _appPort: RpcPort;\n private readonly _shellPort?: RpcPort;\n private _config!: Config;\n private _transportFactory!: TransportFactory;\n\n // TODO(dmaretskyi): Replace with host and figure out how to return services provider here.\n private _clientServices!: ClientServicesHost;\n private _clientRpc!: ClientRpcServer;\n private _shellRuntime?: ShellRuntimeImpl;\n\n @logInfo\n public origin: string;\n\n constructor({ config, origin, appPort, shellPort }: IFrameHostRuntimeParams) {\n this._configProvider = config;\n this.origin = origin;\n this._appPort = appPort;\n this._shellPort = shellPort;\n\n if (this._shellPort) {\n this._shellRuntime = new ShellRuntimeImpl(this._shellPort);\n }\n }\n\n get services() {\n return this._clientServices;\n }\n\n get shell(): ShellRuntime | undefined {\n return this._shellRuntime;\n }\n\n async start() {\n log('starting...');\n try {\n this._config = await getAsyncValue(this._configProvider);\n this._transportFactory = createSimplePeerTransportFactory({\n iceServers: this._config.get('runtime.services.ice'),\n });\n const signals = this._config.get('runtime.services.signaling');\n this._clientServices = new ClientServicesHost({\n lockKey: LOCK_KEY,\n config: this._config,\n signalManager: signals\n ? new WebsocketSignalManager(signals)\n : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.\n transportFactory: this._transportFactory,\n });\n\n const middleware: Pick<ClientRpcServerParams, 'handleCall' | 'handleStream'> = {\n handleCall: async (method, params, handler) => {\n const error = await this._ready.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n handleStream: async (method, params, handler) => {\n const error = await this._ready.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n };\n\n this._clientRpc = new ClientRpcServer({\n serviceRegistry: this._clientServices.serviceRegistry,\n port: this._appPort,\n ...middleware,\n });\n\n await Promise.all([this._clientServices.open(new Context()), this._clientRpc.open(), this._shellRuntime?.open()]);\n this._ready.wake(undefined);\n log('started');\n } catch (err: any) {\n this._ready.wake(err);\n log.catch(err);\n }\n }\n\n async stop() {\n log('stopping...');\n await this._clientRpc.close();\n await this._clientServices.close();\n await this._shellRuntime?.close();\n log('stopped');\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Event } from '@dxos/async';\nimport { appServiceBundle, type AppServiceBundle, type ShellRuntime, shellServiceBundle } from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { type PublicKey } from '@dxos/keys';\nimport { type AppContextRequest, type LayoutRequest, ShellLayout } from '@dxos/protocols/proto/dxos/iframe';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';\n\n/**\n * Endpoint that handles shell services.\n */\nexport class ShellRuntimeImpl implements ShellRuntime {\n readonly layoutUpdate = new Event<LayoutRequest>();\n private _appRpc?: ProtoRpcPeer<AppServiceBundle>;\n private _layout = ShellLayout.DEFAULT;\n private _invitationCode?: string;\n private _spaceKey?: PublicKey;\n\n constructor(private readonly _port: RpcPort) {}\n\n get layout() {\n return this._layout;\n }\n\n get invitationCode() {\n return this._invitationCode;\n }\n\n get spaceKey() {\n return this._spaceKey;\n }\n\n setLayout({ layout, invitationCode, spaceKey }: LayoutRequest) {\n this._layout = layout;\n this._invitationCode = invitationCode;\n this._spaceKey = spaceKey;\n this.layoutUpdate.emit({ layout, invitationCode, spaceKey });\n }\n\n async setAppContext(context: AppContextRequest) {\n invariant(this._appRpc, 'runtime not open');\n\n await this._appRpc.rpc.AppService.setContext(context);\n }\n\n async open() {\n this._appRpc = createProtoRpcPeer({\n requested: appServiceBundle,\n exposed: shellServiceBundle,\n handlers: {\n ShellService: {\n setLayout: async (request) => {\n this._layout = request.layout;\n this._invitationCode = request.invitationCode;\n this._spaceKey = request.spaceKey;\n this.layoutUpdate.emit(request);\n },\n },\n },\n port: this._port,\n });\n\n await this._appRpc.open();\n }\n\n async close() {\n await this._appRpc?.close();\n this._appRpc = undefined;\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport {\n iframeServiceBundle,\n type ShellRuntime,\n workerServiceBundle,\n type WorkerServiceBundle,\n} from '@dxos/client-protocol';\nimport { type Config } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport { SimplePeerTransportService } from '@dxos/network-manager';\nimport { RemoteServiceConnectionError } from '@dxos/protocols';\nimport { type BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, type MaybePromise, type Provider } from '@dxos/util';\n\nimport { ShellRuntimeImpl } from './shell-runtime';\n\n// NOTE: Keep as RpcPorts to avoid dependency on @dxos/rpc-tunnel so we don't depend on browser-specific apis.\nexport type SharedWorkerConnectionOptions = {\n config: Config | Provider<MaybePromise<Config>>;\n systemPort: RpcPort;\n /**\n * @deprecated Only used with iframes.\n */\n shellPort?: RpcPort;\n};\n\n/**\n * Manages the client connection to the shared worker.\n */\nexport class SharedWorkerConnection {\n private readonly _id = String(Math.floor(Math.random() * 1000000));\n private readonly _configProvider: SharedWorkerConnectionOptions['config'];\n private readonly _systemPort: RpcPort;\n private readonly _shellPort?: RpcPort;\n private _release = new Trigger();\n private _config!: Config;\n private _transportService!: BridgeService;\n private _systemRpc!: ProtoRpcPeer<WorkerServiceBundle>;\n private _shellRuntime?: ShellRuntimeImpl;\n\n constructor({ config, systemPort, shellPort }: SharedWorkerConnectionOptions) {\n this._configProvider = config;\n this._systemPort = systemPort;\n this._shellPort = shellPort;\n\n if (this._shellPort) {\n this._shellRuntime = new ShellRuntimeImpl(this._shellPort);\n }\n }\n\n get shell(): ShellRuntime | undefined {\n return this._shellRuntime;\n }\n\n async open(\n /**\n * @deprecated Only used with iframes.\n */\n origin: string,\n ) {\n this._config = await getAsyncValue(this._configProvider);\n\n this._transportService = new SimplePeerTransportService({\n iceServers: this._config.get('runtime.services.ice'),\n });\n\n this._systemRpc = createProtoRpcPeer({\n requested: workerServiceBundle,\n exposed: iframeServiceBundle,\n handlers: {\n BridgeService: this._transportService,\n },\n port: this._systemPort,\n // TODO(wittjosiah): Make longer and factor out to constant.\n // TODO(wittjosiah): If this is too long then it breaks the reset flows in Composer.\n timeout: 200,\n });\n\n let lockKey: string | undefined;\n if (typeof navigator !== 'undefined') {\n lockKey = this._lockKey(origin);\n this._release = new Trigger();\n const ready = new Trigger();\n void navigator.locks.request(lockKey, async () => {\n ready.wake();\n await this._release.wait();\n });\n await ready.wait();\n }\n\n try {\n await this._systemRpc.open();\n await this._systemRpc.rpc.WorkerService.start({ origin, lockKey });\n } catch (err) {\n log.catch(err);\n throw new RemoteServiceConnectionError('Failed to connect to worker');\n }\n await this._shellRuntime?.open();\n }\n\n async close() {\n this._release.wake();\n await this._shellRuntime?.close();\n try {\n await this._systemRpc.rpc.WorkerService.stop();\n } catch {\n // If this fails, the worker is probably already gone.\n }\n await this._systemRpc.close();\n }\n\n private _lockKey(origin: string) {\n return `${origin}-${this._id}`;\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { log } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { SimplePeerTransportProxyFactory } from '@dxos/network-manager';\nimport { type RpcPort } from '@dxos/rpc';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { WorkerSession } from './worker-session';\nimport { ClientServicesHost } from '../services';\n\n// NOTE: Keep as RpcPorts to avoid dependency on @dxos/rpc-tunnel so we don't depend on browser-specific apis.\nexport type CreateSessionParams = {\n appPort: RpcPort;\n systemPort: RpcPort;\n shellPort?: RpcPort;\n};\n\nexport type WorkerRuntimeCallbacks = {\n acquireLock: () => Promise<void>;\n releaseLock: () => void;\n onReset: () => Promise<void>;\n};\n\n/**\n * Runtime for the shared worker.\n * Manages connections from proxies (in tabs).\n * Tabs make requests to the `ClientServicesHost`, and provide a WebRTC gateway.\n */\nexport class WorkerRuntime {\n private readonly _acquireLock: () => Promise<void>;\n private readonly _releaseLock: () => void;\n private readonly _transportFactory = new SimplePeerTransportProxyFactory();\n private readonly _ready = new Trigger<Error | undefined>();\n private readonly _sessions = new Set<WorkerSession>();\n private readonly _clientServices!: ClientServicesHost;\n private _sessionForNetworking?: WorkerSession; // TODO(burdon): Expose to client QueryStatusResponse.\n private _config!: Config;\n\n constructor(\n private readonly _configProvider: () => MaybePromise<Config>,\n { acquireLock, releaseLock, onReset }: WorkerRuntimeCallbacks,\n ) {\n this._acquireLock = acquireLock;\n this._releaseLock = releaseLock;\n this._clientServices = new ClientServicesHost({\n callbacks: {\n onReset: async () => onReset(),\n },\n });\n }\n\n get host() {\n return this._clientServices;\n }\n\n async start() {\n log('starting...');\n try {\n await this._acquireLock();\n this._config = await this._configProvider();\n const signals = this._config.get('runtime.services.signaling');\n this._clientServices.initialize({\n config: this._config,\n signalManager: signals\n ? new WebsocketSignalManager(signals)\n : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.\n transportFactory: this._transportFactory,\n });\n\n await this._clientServices.open(new Context());\n this._ready.wake(undefined);\n log('started');\n } catch (err: any) {\n this._ready.wake(err);\n log.error('starting', err);\n }\n }\n\n async stop() {\n // Release the lock to notify remote clients that the worker is terminating.\n this._releaseLock();\n await this._clientServices.close();\n }\n\n /**\n * Create a new session.\n */\n async createSession({ appPort, systemPort, shellPort }: CreateSessionParams) {\n const session = new WorkerSession({\n serviceHost: this._clientServices,\n appPort,\n systemPort,\n shellPort,\n readySignal: this._ready,\n });\n\n // When tab is closed or client is destroyed.\n session.onClose.set(async () => {\n this._sessions.delete(session);\n if (this._sessions.size === 0) {\n // Terminate the worker when all sessions are closed.\n self.close();\n } else {\n this._reconnectWebrtc();\n }\n });\n\n await session.open();\n this._sessions.add(session);\n\n this._reconnectWebrtc();\n }\n\n /**\n * Selects one of the existing session for WebRTC networking.\n */\n private _reconnectWebrtc() {\n log('reconnecting webrtc...');\n // Check if current session is already closed.\n if (this._sessionForNetworking) {\n if (!this._sessions.has(this._sessionForNetworking)) {\n this._sessionForNetworking = undefined;\n }\n }\n\n // Select existing session.\n if (!this._sessionForNetworking) {\n const selected = Array.from(this._sessions).find((session) => session.bridgeService);\n if (selected) {\n this._sessionForNetworking = selected;\n this._transportFactory.setBridgeService(selected.bridgeService);\n } else {\n this._transportFactory.setBridgeService(undefined);\n }\n }\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { asyncTimeout, Trigger } from '@dxos/async';\nimport {\n iframeServiceBundle,\n type IframeServiceBundle,\n PROXY_CONNECTION_TIMEOUT,\n workerServiceBundle,\n} from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { log, logInfo } from '@dxos/log';\nimport { type BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';\nimport { Callback, type MaybePromise } from '@dxos/util';\n\nimport { type ClientServicesHost, ClientRpcServer, type ClientRpcServerParams } from '../services';\n\nexport type WorkerSessionParams = {\n serviceHost: ClientServicesHost;\n systemPort: RpcPort;\n appPort: RpcPort;\n // TODO(wittjosiah): Remove shellPort.\n shellPort?: RpcPort;\n readySignal: Trigger<Error | undefined>;\n};\n\n/**\n * Represents a tab connection within the worker.\n */\nexport class WorkerSession {\n private readonly _clientRpc: ClientRpcServer;\n private readonly _shellClientRpc?: ClientRpcServer;\n private readonly _iframeRpc: ProtoRpcPeer<IframeServiceBundle>;\n private readonly _startTrigger = new Trigger();\n private readonly _serviceHost: ClientServicesHost;\n\n public readonly onClose = new Callback<() => Promise<void>>();\n\n @logInfo\n public origin?: string;\n\n @logInfo\n public lockKey?: string;\n\n public bridgeService?: BridgeService;\n\n constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }: WorkerSessionParams) {\n invariant(serviceHost);\n this._serviceHost = serviceHost;\n\n const middleware: Pick<ClientRpcServerParams, 'handleCall' | 'handleStream'> = {\n handleCall: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n handleStream: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n };\n\n this._clientRpc = new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: appPort,\n ...middleware,\n });\n\n this._shellClientRpc = shellPort\n ? new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: shellPort,\n ...middleware,\n })\n : undefined;\n\n this._iframeRpc = createProtoRpcPeer({\n requested: iframeServiceBundle,\n exposed: workerServiceBundle,\n handlers: {\n WorkerService: {\n start: async (request) => {\n this.origin = request.origin;\n this.lockKey = request.lockKey;\n this._startTrigger.wake();\n },\n\n stop: async () => {\n setTimeout(async () => {\n try {\n await this.close();\n } catch (err: any) {\n log.catch(err);\n }\n });\n },\n },\n },\n port: systemPort,\n timeout: 1_000, // With low timeout heartbeat may fail if the tab's thread is saturated.\n });\n\n this.bridgeService = this._iframeRpc.rpc.BridgeService;\n }\n\n async open() {\n log.info('opening...');\n await Promise.all([this._clientRpc.open(), this._iframeRpc.open(), this._maybeOpenShell()]);\n\n // Wait until the worker's RPC service has started.\n await this._startTrigger.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n\n // TODO(burdon): Comment required.\n if (this.lockKey) {\n void this._afterLockReleases(this.lockKey, () => this.close());\n }\n\n log.info('opened');\n }\n\n async close() {\n log.info('closing...');\n try {\n await this.onClose.callIfSet();\n } catch (err: any) {\n log.catch(err);\n }\n\n await Promise.all([this._clientRpc.close(), this._iframeRpc.close()]);\n log.info('closed');\n }\n\n private async _maybeOpenShell() {\n try {\n this._shellClientRpc && (await asyncTimeout(this._shellClientRpc.open(), 1_000));\n } catch {\n log.info('No shell connected.');\n }\n }\n\n private _afterLockReleases(lockKey: string, callback: () => MaybePromise<void>): Promise<void> {\n return navigator.locks\n .request(lockKey, () => {\n // No-op.\n })\n .then(callback);\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["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"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { PROXY_CONNECTION_TIMEOUT, type ShellRuntime } from '@dxos/client-protocol';\nimport { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { log, logInfo } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { createSimplePeerTransportFactory, type TransportFactory } from '@dxos/network-manager';\nimport { type RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, type MaybePromise, type Provider } from '@dxos/util';\n\nimport { ShellRuntimeImpl } from './shell-runtime';\nimport { ClientServicesHost } from '../services';\nimport { ClientRpcServer, type ClientRpcServerParams } from '../services/client-rpc-server';\n\nconst LOCK_KEY = 'DXOS_RESOURCE_LOCK';\n\nexport type IFrameHostRuntimeParams = {\n config: Config | Provider<MaybePromise<Config>>;\n origin: string;\n appPort: RpcPort;\n shellPort?: RpcPort;\n};\n\n/**\n * Runs the client services in the main thread.\n *\n * Holds a lock over the client services such that only one instance can run at a time.\n * This should only be used when SharedWorker is not available.\n *\n * @deprecated\n */\nexport class IFrameHostRuntime {\n private readonly _configProvider: IFrameHostRuntimeParams['config'];\n private readonly _ready = new Trigger<Error | undefined>();\n\n private readonly _appPort: RpcPort;\n private readonly _shellPort?: RpcPort;\n private _config!: Config;\n private _transportFactory!: TransportFactory;\n\n // TODO(dmaretskyi): Replace with host and figure out how to return services provider here.\n private _clientServices!: ClientServicesHost;\n private _clientRpc!: ClientRpcServer;\n private _shellRuntime?: ShellRuntimeImpl;\n\n @logInfo\n public origin: string;\n\n constructor({ config, origin, appPort, shellPort }: IFrameHostRuntimeParams) {\n this._configProvider = config;\n this.origin = origin;\n this._appPort = appPort;\n this._shellPort = shellPort;\n\n if (this._shellPort) {\n this._shellRuntime = new ShellRuntimeImpl(this._shellPort);\n }\n }\n\n get services() {\n return this._clientServices;\n }\n\n get shell(): ShellRuntime | undefined {\n return this._shellRuntime;\n }\n\n async start() {\n log('starting...');\n try {\n this._config = await getAsyncValue(this._configProvider);\n this._transportFactory = createSimplePeerTransportFactory({\n iceServers: this._config.get('runtime.services.ice'),\n });\n const signals = this._config.get('runtime.services.signaling');\n this._clientServices = new ClientServicesHost({\n lockKey: LOCK_KEY,\n config: this._config,\n signalManager: signals\n ? new WebsocketSignalManager(signals)\n : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.\n transportFactory: this._transportFactory,\n });\n\n const middleware: Pick<ClientRpcServerParams, 'handleCall' | 'handleStream'> = {\n handleCall: async (method, params, handler) => {\n const error = await this._ready.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n handleStream: async (method, params, handler) => {\n const error = await this._ready.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n };\n\n this._clientRpc = new ClientRpcServer({\n serviceRegistry: this._clientServices.serviceRegistry,\n port: this._appPort,\n ...middleware,\n });\n\n await Promise.all([this._clientServices.open(new Context()), this._clientRpc.open(), this._shellRuntime?.open()]);\n this._ready.wake(undefined);\n log('started');\n } catch (err: any) {\n this._ready.wake(err);\n log.catch(err);\n }\n }\n\n async stop() {\n log('stopping...');\n await this._clientRpc.close();\n await this._clientServices.close();\n await this._shellRuntime?.close();\n log('stopped');\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Event } from '@dxos/async';\nimport { appServiceBundle, type AppServiceBundle, type ShellRuntime, shellServiceBundle } from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { type PublicKey } from '@dxos/keys';\nimport { type AppContextRequest, type LayoutRequest, ShellLayout } from '@dxos/protocols/proto/dxos/iframe';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';\n\n/**\n * Endpoint that handles shell services.\n */\nexport class ShellRuntimeImpl implements ShellRuntime {\n readonly layoutUpdate = new Event<LayoutRequest>();\n private _appRpc?: ProtoRpcPeer<AppServiceBundle>;\n private _layout = ShellLayout.DEFAULT;\n private _invitationCode?: string;\n private _spaceKey?: PublicKey;\n\n constructor(private readonly _port: RpcPort) {}\n\n get layout() {\n return this._layout;\n }\n\n get invitationCode() {\n return this._invitationCode;\n }\n\n get spaceKey() {\n return this._spaceKey;\n }\n\n setLayout({ layout, invitationCode, spaceKey }: LayoutRequest) {\n this._layout = layout;\n this._invitationCode = invitationCode;\n this._spaceKey = spaceKey;\n this.layoutUpdate.emit({ layout, invitationCode, spaceKey });\n }\n\n async setAppContext(context: AppContextRequest) {\n invariant(this._appRpc, 'runtime not open');\n\n await this._appRpc.rpc.AppService.setContext(context);\n }\n\n async open() {\n this._appRpc = createProtoRpcPeer({\n requested: appServiceBundle,\n exposed: shellServiceBundle,\n handlers: {\n ShellService: {\n setLayout: async (request) => {\n this._layout = request.layout;\n this._invitationCode = request.invitationCode;\n this._spaceKey = request.spaceKey;\n this.layoutUpdate.emit(request);\n },\n },\n },\n port: this._port,\n });\n\n await this._appRpc.open();\n }\n\n async close() {\n await this._appRpc?.close();\n this._appRpc = undefined;\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport {\n iframeServiceBundle,\n type ShellRuntime,\n workerServiceBundle,\n type WorkerServiceBundle,\n} from '@dxos/client-protocol';\nimport { type Config } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport { SimplePeerTransportService } from '@dxos/network-manager';\nimport { RemoteServiceConnectionError } from '@dxos/protocols';\nimport { type BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, type MaybePromise, type Provider } from '@dxos/util';\n\nimport { ShellRuntimeImpl } from './shell-runtime';\n\n// NOTE: Keep as RpcPorts to avoid dependency on @dxos/rpc-tunnel so we don't depend on browser-specific apis.\nexport type SharedWorkerConnectionOptions = {\n config: Config | Provider<MaybePromise<Config>>;\n systemPort: RpcPort;\n /**\n * @deprecated Only used with iframes.\n */\n shellPort?: RpcPort;\n};\n\n/**\n * Manages the client connection to the shared worker.\n */\nexport class SharedWorkerConnection {\n private readonly _id = String(Math.floor(Math.random() * 1000000));\n private readonly _configProvider: SharedWorkerConnectionOptions['config'];\n private readonly _systemPort: RpcPort;\n private readonly _shellPort?: RpcPort;\n private _release = new Trigger();\n private _config!: Config;\n private _transportService!: BridgeService;\n private _systemRpc!: ProtoRpcPeer<WorkerServiceBundle>;\n private _shellRuntime?: ShellRuntimeImpl;\n\n constructor({ config, systemPort, shellPort }: SharedWorkerConnectionOptions) {\n this._configProvider = config;\n this._systemPort = systemPort;\n this._shellPort = shellPort;\n\n if (this._shellPort) {\n this._shellRuntime = new ShellRuntimeImpl(this._shellPort);\n }\n }\n\n get shell(): ShellRuntime | undefined {\n return this._shellRuntime;\n }\n\n async open(params: { origin: string; observabilityGroup?: string; signalTelemetryEnabled?: boolean }) {\n this._config = await getAsyncValue(this._configProvider);\n\n this._transportService = new SimplePeerTransportService({\n iceServers: this._config.get('runtime.services.ice'),\n });\n\n this._systemRpc = createProtoRpcPeer({\n requested: workerServiceBundle,\n exposed: iframeServiceBundle,\n handlers: {\n BridgeService: this._transportService,\n },\n port: this._systemPort,\n // TODO(wittjosiah): Make longer and factor out to constant.\n // TODO(wittjosiah): If this is too long then it breaks the reset flows in Composer.\n timeout: 200,\n });\n\n let lockKey: string | undefined;\n if (typeof navigator !== 'undefined') {\n lockKey = this._lockKey(params.origin);\n this._release = new Trigger();\n const ready = new Trigger();\n void navigator.locks.request(lockKey, async () => {\n ready.wake();\n await this._release.wait();\n });\n await ready.wait();\n }\n\n try {\n await this._systemRpc.open();\n await this._systemRpc.rpc.WorkerService.start({ lockKey, ...params });\n } catch (err) {\n log.catch(err);\n throw new RemoteServiceConnectionError('Failed to connect to worker');\n }\n await this._shellRuntime?.open();\n }\n\n async close() {\n this._release.wake();\n await this._shellRuntime?.close();\n try {\n await this._systemRpc.rpc.WorkerService.stop();\n } catch {\n // If this fails, the worker is probably already gone.\n }\n await this._systemRpc.close();\n }\n\n private _lockKey(origin: string) {\n return `${origin}-${this._id}`;\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport {\n MemorySignalManager,\n MemorySignalManagerContext,\n WebsocketSignalManager,\n setIdentityTags,\n} from '@dxos/messaging';\nimport { SimplePeerTransportProxyFactory } from '@dxos/network-manager';\nimport { type RpcPort } from '@dxos/rpc';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { WorkerSession } from './worker-session';\nimport { ClientServicesHost } from '../services';\n\n// NOTE: Keep as RpcPorts to avoid dependency on @dxos/rpc-tunnel so we don't depend on browser-specific apis.\nexport type CreateSessionParams = {\n appPort: RpcPort;\n systemPort: RpcPort;\n shellPort?: RpcPort;\n};\n\nexport type WorkerRuntimeCallbacks = {\n acquireLock: () => Promise<void>;\n releaseLock: () => void;\n onReset: () => Promise<void>;\n};\n\n/**\n * Runtime for the shared worker.\n * Manages connections from proxies (in tabs).\n * Tabs make requests to the `ClientServicesHost`, and provide a WebRTC gateway.\n */\nexport class WorkerRuntime {\n private readonly _acquireLock: () => Promise<void>;\n private readonly _releaseLock: () => void;\n private readonly _transportFactory = new SimplePeerTransportProxyFactory();\n private readonly _ready = new Trigger<Error | undefined>();\n private readonly _sessions = new Set<WorkerSession>();\n private readonly _clientServices!: ClientServicesHost;\n private _sessionForNetworking?: WorkerSession; // TODO(burdon): Expose to client QueryStatusResponse.\n private _config!: Config;\n private _signalMetadataTags: any = { runtime: 'worker-runtime' };\n private _signalTelemetryEnabled: boolean = false;\n\n constructor(\n private readonly _configProvider: () => MaybePromise<Config>,\n { acquireLock, releaseLock, onReset }: WorkerRuntimeCallbacks,\n ) {\n this._acquireLock = acquireLock;\n this._releaseLock = releaseLock;\n this._clientServices = new ClientServicesHost({\n callbacks: {\n onReset: async () => onReset(),\n },\n });\n }\n\n get host() {\n return this._clientServices;\n }\n\n async start() {\n log('starting...');\n try {\n await this._acquireLock();\n this._config = await this._configProvider();\n const signals = this._config.get('runtime.services.signaling');\n this._clientServices.initialize({\n config: this._config,\n signalManager: signals\n ? new WebsocketSignalManager(signals, () => (this._signalTelemetryEnabled ? this._signalMetadataTags : {}))\n : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.\n transportFactory: this._transportFactory,\n });\n\n await this._clientServices.open(new Context());\n this._ready.wake(undefined);\n log('started');\n setIdentityTags({\n identityService: this._clientServices.services.IdentityService!,\n devicesService: this._clientServices.services.DevicesService!,\n setTag: (k: string, v: string) => {\n this._signalMetadataTags[k] = v;\n },\n });\n } catch (err: any) {\n this._ready.wake(err);\n log.error('starting', err);\n }\n }\n\n async stop() {\n // Release the lock to notify remote clients that the worker is terminating.\n this._releaseLock();\n await this._clientServices.close();\n }\n\n /**\n * Create a new session.\n */\n async createSession({ appPort, systemPort, shellPort }: CreateSessionParams) {\n const session = new WorkerSession({\n serviceHost: this._clientServices,\n appPort,\n systemPort,\n shellPort,\n readySignal: this._ready,\n });\n\n // When tab is closed or client is destroyed.\n session.onClose.set(async () => {\n this._sessions.delete(session);\n if (this._sessions.size === 0) {\n // Terminate the worker when all sessions are closed.\n self.close();\n } else {\n this._reconnectWebrtc();\n }\n });\n\n await session.open();\n // A worker can only service one origin currently\n invariant(\n !this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin,\n `worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`,\n );\n if (session.observabilityGroup) {\n this._signalMetadataTags.group = session.observabilityGroup;\n }\n this._signalTelemetryEnabled = session.signalTelemetryEnabled ?? false;\n this._signalMetadataTags.origin = session.origin;\n this._sessions.add(session);\n\n this._reconnectWebrtc();\n }\n\n /**\n * Selects one of the existing session for WebRTC networking.\n */\n private _reconnectWebrtc() {\n log('reconnecting webrtc...');\n // Check if current session is already closed.\n if (this._sessionForNetworking) {\n if (!this._sessions.has(this._sessionForNetworking)) {\n this._sessionForNetworking = undefined;\n }\n }\n\n // Select existing session.\n if (!this._sessionForNetworking) {\n const selected = Array.from(this._sessions).find((session) => session.bridgeService);\n if (selected) {\n this._sessionForNetworking = selected;\n this._transportFactory.setBridgeService(selected.bridgeService);\n } else {\n this._transportFactory.setBridgeService(undefined);\n }\n }\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { asyncTimeout, Trigger } from '@dxos/async';\nimport {\n iframeServiceBundle,\n type IframeServiceBundle,\n PROXY_CONNECTION_TIMEOUT,\n workerServiceBundle,\n} from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { log, logInfo } from '@dxos/log';\nimport { type BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';\nimport { Callback, type MaybePromise } from '@dxos/util';\n\nimport { type ClientServicesHost, ClientRpcServer, type ClientRpcServerParams } from '../services';\n\nexport type WorkerSessionParams = {\n serviceHost: ClientServicesHost;\n systemPort: RpcPort;\n appPort: RpcPort;\n // TODO(wittjosiah): Remove shellPort.\n shellPort?: RpcPort;\n readySignal: Trigger<Error | undefined>;\n};\n\n/**\n * Represents a tab connection within the worker.\n */\nexport class WorkerSession {\n private readonly _clientRpc: ClientRpcServer;\n private readonly _shellClientRpc?: ClientRpcServer;\n private readonly _iframeRpc: ProtoRpcPeer<IframeServiceBundle>;\n private readonly _startTrigger = new Trigger();\n private readonly _serviceHost: ClientServicesHost;\n\n public readonly onClose = new Callback<() => Promise<void>>();\n\n @logInfo\n public origin?: string;\n\n // TODO(nf): factor out?\n public observabilityGroup?: string;\n public signalTelemetryEnabled?: boolean;\n\n @logInfo\n public lockKey?: string;\n\n public bridgeService?: BridgeService;\n\n constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }: WorkerSessionParams) {\n invariant(serviceHost);\n this._serviceHost = serviceHost;\n\n const middleware: Pick<ClientRpcServerParams, 'handleCall' | 'handleStream'> = {\n handleCall: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n handleStream: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n };\n\n this._clientRpc = new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: appPort,\n ...middleware,\n });\n\n this._shellClientRpc = shellPort\n ? new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: shellPort,\n ...middleware,\n })\n : undefined;\n\n this._iframeRpc = createProtoRpcPeer({\n requested: iframeServiceBundle,\n exposed: workerServiceBundle,\n handlers: {\n WorkerService: {\n start: async (request) => {\n this.origin = request.origin;\n this.lockKey = request.lockKey;\n this.observabilityGroup = request.observabilityGroup;\n this.signalTelemetryEnabled = request.signalTelemetryEnabled;\n this._startTrigger.wake();\n },\n\n stop: async () => {\n setTimeout(async () => {\n try {\n await this.close();\n } catch (err: any) {\n log.catch(err);\n }\n });\n },\n },\n },\n port: systemPort,\n timeout: 1_000, // With low timeout heartbeat may fail if the tab's thread is saturated.\n });\n\n this.bridgeService = this._iframeRpc.rpc.BridgeService;\n }\n\n async open() {\n log.info('opening...');\n await Promise.all([this._clientRpc.open(), this._iframeRpc.open(), this._maybeOpenShell()]);\n\n // Wait until the worker's RPC service has started.\n await this._startTrigger.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n\n // TODO(burdon): Comment required.\n if (this.lockKey) {\n void this._afterLockReleases(this.lockKey, () => this.close());\n }\n\n log.info('opened');\n }\n\n async close() {\n log.info('closing...');\n try {\n await this.onClose.callIfSet();\n } catch (err: any) {\n log.catch(err);\n }\n\n await Promise.all([this._clientRpc.close(), this._iframeRpc.close()]);\n log.info('closed');\n }\n\n private async _maybeOpenShell() {\n try {\n this._shellClientRpc && (await asyncTimeout(this._shellClientRpc.open(), 1_000));\n } catch {\n log.info('No shell connected.');\n }\n }\n\n private _afterLockReleases(lockKey: string, callback: () => MaybePromise<void>): Promise<void> {\n return navigator.locks\n .request(lockKey, () => {\n // No-op.\n })\n .then(callback);\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAAwB;AACxB,6BAA4D;AAE5D,qBAAwB;AACxB,iBAA6B;AAC7B,uBAAwF;AACxF,6BAAwE;AAExE,kBAAgE;ACRhE,IAAAA,gBAAsB;AACtB,IAAAC,0BAA+F;AAC/F,uBAA0B;AAE1B,oBAAwE;AACxE,iBAAoE;ACLpE,IAAAD,gBAAwB;AACxB,IAAAC,0BAKO;AAEP,IAAAC,cAAoB;AACpB,IAAAC,0BAA2C;AAC3C,uBAA6C;AAE7C,IAAAC,cAAoE;AACpE,IAAAC,eAAgE;ACbhE,IAAAL,gBAAwB;AAExB,IAAAM,kBAAwB;AACxB,IAAAC,oBAA0B;AAC1B,IAAAL,cAAoB;AACpB,IAAAM,oBAKO;AACP,IAAAL,0BAAgD;ACXhD,IAAAH,gBAAsC;AACtC,IAAAC,0BAKO;AACP,IAAAM,oBAA0B;AAC1B,IAAAL,cAA6B;AAE7B,IAAAE,cAAoE;AACpE,IAAAC,eAA4C;;AHDrC,IAAMI,mBAAN,MAAMA;EAOXC,YAA6BC,OAAgB;SAAhBA,QAAAA;SANpBC,eAAe,IAAIC,oBAAAA;SAEpBC,UAAUC,0BAAYC;EAIgB;EAE9C,IAAIC,SAAS;AACX,WAAO,KAAKH;EACd;EAEA,IAAII,iBAAiB;AACnB,WAAO,KAAKC;EACd;EAEA,IAAIC,WAAW;AACb,WAAO,KAAKC;EACd;EAEAC,UAAU,EAAEL,QAAQC,gBAAgBE,SAAQ,GAAmB;AAC7D,SAAKN,UAAUG;AACf,SAAKE,kBAAkBD;AACvB,SAAKG,YAAYD;AACjB,SAAKR,aAAaW,KAAK;MAAEN;MAAQC;MAAgBE;IAAS,CAAA;EAC5D;EAEA,MAAMI,cAAcC,SAA4B;AAC9CC,oCAAU,KAAKC,SAAS,oBAAA;;;;;;;;;AAExB,UAAM,KAAKA,QAAQC,IAAIC,WAAWC,WAAWL,OAAAA;EAC/C;EAEA,MAAMM,OAAO;AACX,SAAKJ,cAAUK,+BAAmB;MAChCC,WAAWC;MACXC,SAASC;MACTC,UAAU;QACRC,cAAc;UACZhB,WAAW,OAAOiB,YAAAA;AAChB,iBAAKzB,UAAUyB,QAAQtB;AACvB,iBAAKE,kBAAkBoB,QAAQrB;AAC/B,iBAAKG,YAAYkB,QAAQnB;AACzB,iBAAKR,aAAaW,KAAKgB,OAAAA;UACzB;QACF;MACF;MACAC,MAAM,KAAK7B;IACb,CAAA;AAEA,UAAM,KAAKgB,QAAQI,KAAI;EACzB;EAEA,MAAMU,QAAQ;AACZ,UAAM,KAAKd,SAASc,MAAAA;AACpB,SAAKd,UAAUe;EACjB;AACF;;;;;;;;;;;;ADtDA,IAAMC,WAAW;AAiBV,IAAMC,oBAAN,MAAMA;EAiBXlC,YAAY,EAAEmC,QAAQC,QAAQC,SAASC,UAAS,GAA6B;AAf5DC,SAAAA,SAAS,IAAIC,qBAAAA;AAgB5B,SAAKC,kBAAkBN;AACvB,SAAKC,SAASA;AACd,SAAKM,WAAWL;AAChB,SAAKM,aAAaL;AAElB,QAAI,KAAKK,YAAY;AACnB,WAAKC,gBAAgB,IAAI7C,iBAAiB,KAAK4C,UAAU;IAC3D;EACF;EAEA,IAAIE,WAAW;AACb,WAAO,KAAKC;EACd;EAEA,IAAIC,QAAkC;AACpC,WAAO,KAAKH;EACd;EAEA,MAAMI,QAAQ;AACZC,wBAAI,eAAA,QAAA;;;;;;AACJ,QAAI;AACF,WAAKC,UAAU,UAAMC,2BAAc,KAAKV,eAAe;AACvD,WAAKW,wBAAoBC,yDAAiC;QACxDC,YAAY,KAAKJ,QAAQK,IAAI,sBAAA;MAC/B,CAAA;AACA,YAAMC,UAAU,KAAKN,QAAQK,IAAI,4BAAA;AACjC,WAAKT,kBAAkB,IAAIW,yCAAmB;QAC5CC,SAASzB;QACTE,QAAQ,KAAKe;QACbS,eAAeH,UACX,IAAII,wCAAuBJ,OAAAA,IAC3B,IAAIK,qCAAoB,IAAIC,4CAAAA,CAAAA;QAChCC,kBAAkB,KAAKX;MACzB,CAAA;AAEA,YAAMY,aAAyE;QAC7EC,YAAY,OAAOC,QAAQC,QAAQC,YAAAA;AACjC,gBAAMC,QAAQ,MAAM,KAAK9B,OAAO+B,KAAK;YAAEC,SAASC;UAAyB,CAAA;AACzE,cAAIH,OAAO;AACT,kBAAMA;UACR;AAEA,iBAAOD,QAAQF,QAAQC,MAAAA;QACzB;QACAM,cAAc,OAAOP,QAAQC,QAAQC,YAAAA;AACnC,gBAAMC,QAAQ,MAAM,KAAK9B,OAAO+B,KAAK;YAAEC,SAASC;UAAyB,CAAA;AACzE,cAAIH,OAAO;AACT,kBAAMA;UACR;AAEA,iBAAOD,QAAQF,QAAQC,MAAAA;QACzB;MACF;AAEA,WAAKO,aAAa,IAAIC,sCAAgB;QACpCC,iBAAiB,KAAK9B,gBAAgB8B;QACtC9C,MAAM,KAAKY;QACX,GAAGsB;MACL,CAAA;AAEA,YAAMa,QAAQC,IAAI;QAAC,KAAKhC,gBAAgBzB,KAAK,IAAI0D,uBAAAA,CAAAA;QAAY,KAAKL,WAAWrD,KAAI;QAAI,KAAKuB,eAAevB,KAAAA;OAAO;AAChH,WAAKkB,OAAOyC,KAAKhD,MAAAA;AACjBiB,0BAAI,WAAA,QAAA;;;;;;IACN,SAASgC,KAAU;AACjB,WAAK1C,OAAOyC,KAAKC,GAAAA;AACjBhC,qBAAIiC,MAAMD,KAAAA,QAAAA;;;;;;IACZ;EACF;EAEA,MAAME,OAAO;AACXlC,wBAAI,eAAA,QAAA;;;;;;AACJ,UAAM,KAAKyB,WAAW3C,MAAK;AAC3B,UAAM,KAAKe,gBAAgBf,MAAK;AAChC,UAAM,KAAKa,eAAeb,MAAAA;AAC1BkB,wBAAI,WAAA,QAAA;;;;;;EACN;AACF;;EAhFGmC;GAdUlD,kBAAAA,WAAAA,UAAAA,MAAAA;;AEDN,IAAMmD,yBAAN,MAAMA;EAWXrF,YAAY,EAAEmC,QAAQmD,YAAYhD,UAAS,GAAmC;AAV7DiD,SAAAA,MAAMC,OAAOC,KAAKC,MAAMD,KAAKE,OAAM,IAAK,GAAA,CAAA;AAIjDC,SAAAA,WAAW,IAAIpD,cAAAA,QAAAA;AAOrB,SAAKC,kBAAkBN;AACvB,SAAK0D,cAAcP;AACnB,SAAK3C,aAAaL;AAElB,QAAI,KAAKK,YAAY;AACnB,WAAKC,gBAAgB,IAAI7C,iBAAiB,KAAK4C,UAAU;IAC3D;EACF;EAEA,IAAII,QAAkC;AACpC,WAAO,KAAKH;EACd;EAEA,MAAMvB,KAAK8C,QAA2F;AACpG,SAAKjB,UAAU,UAAMC,aAAAA,eAAc,KAAKV,eAAe;AAEvD,SAAKqD,oBAAoB,IAAIC,mDAA2B;MACtDzC,YAAY,KAAKJ,QAAQK,IAAI,sBAAA;IAC/B,CAAA;AAEA,SAAKyC,iBAAa1E,YAAAA,oBAAmB;MACnCC,WAAW0E;MACXxE,SAASyE;MACTvE,UAAU;QACRwE,eAAe,KAAKL;MACtB;MACAhE,MAAM,KAAK+D;;;MAGXtB,SAAS;IACX,CAAA;AAEA,QAAIb;AACJ,QAAI,OAAO0C,cAAc,aAAa;AACpC1C,gBAAU,KAAK2C,SAASlC,OAAO/B,MAAM;AACrC,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;QAAEU;QAAS,GAAGS;MAAO,CAAA;IACrE,SAASc,KAAK;AACZhC,kBAAAA,IAAIiC,MAAMD,KAAAA,QAAAA;;;;;;AACV,YAAM,IAAIwB,8CAA6B,6BAAA;IACzC;AACA,UAAM,KAAK7D,eAAevB,KAAAA;EAC5B;EAEA,MAAMU,QAAQ;AACZ,SAAK6D,SAASZ,KAAI;AAClB,UAAM,KAAKpC,eAAeb,MAAAA;AAC1B,QAAI;AACF,YAAM,KAAKiE,WAAW9E,IAAIsF,cAAcrB,KAAI;IAC9C,QAAQ;IAER;AACA,UAAM,KAAKa,WAAWjE,MAAK;EAC7B;EAEQsE,SAASjE,QAAgB;AAC/B,WAAO,GAAGA,MAAAA,IAAU,KAAKmD,GAAG;EAC9B;AACF;;;;;;;;;;;;AEnFO,IAAMmB,gBAAN,MAAMA;EAqBX1G,YAAY,EAAE2G,aAAarB,YAAYjD,SAASC,WAAWsE,YAAW,GAAyB;AAjB9EC,SAAAA,gBAAgB,IAAIrE,cAAAA,QAAAA;AAGrBsE,SAAAA,UAAU,IAAIC,sBAAAA;AAe5B/F,0BAAAA,WAAU2F,aAAAA,QAAAA;;;;;;;;;AACV,SAAKK,eAAeL;AAEpB,UAAM3C,aAAyE;MAC7EC,YAAY,OAAOC,QAAQC,QAAQC,YAAAA;AACjC,cAAMC,QAAQ,MAAMuC,YAAYtC,KAAK;UAAEC,SAASC,wBAAAA;QAAyB,CAAA;AACzE,YAAIH,OAAO;AACT,gBAAMA;QACR;AAEA,eAAOD,QAAQF,QAAQC,MAAAA;MACzB;MACAM,cAAc,OAAOP,QAAQC,QAAQC,YAAAA;AACnC,cAAMC,QAAQ,MAAMuC,YAAYtC,KAAK;UAAEC,SAASC,wBAAAA;QAAyB,CAAA;AACzE,YAAIH,OAAO;AACT,gBAAMA;QACR;AAEA,eAAOD,QAAQF,QAAQC,MAAAA;MACzB;IACF;AAEA,SAAKO,aAAa,IAAIC,sCAAgB;MACpCC,iBAAiB,KAAKoC,aAAapC;MACnC9C,MAAMO;MACN,GAAG2B;IACL,CAAA;AAEA,SAAKiD,kBAAkB3E,YACnB,IAAIqC,sCAAgB;MAClBC,iBAAiB,KAAKoC,aAAapC;MACnC9C,MAAMQ;MACN,GAAG0B;IACL,CAAA,IACAhC;AAEJ,SAAKkF,iBAAa5F,YAAAA,oBAAmB;MACnCC,WAAW2E,wBAAAA;MACXzE,SAASwE,wBAAAA;MACTtE,UAAU;QACR6E,eAAe;UACbxD,OAAO,OAAOnB,YAAAA;AACZ,iBAAKO,SAASP,QAAQO;AACtB,iBAAKsB,UAAU7B,QAAQ6B;AACvB,iBAAKyD,qBAAqBtF,QAAQsF;AAClC,iBAAKC,yBAAyBvF,QAAQuF;AACtC,iBAAKP,cAAc7B,KAAI;UACzB;UAEAG,MAAM,YAAA;AACJkC,uBAAW,YAAA;AACT,kBAAI;AACF,sBAAM,KAAKtF,MAAK;cAClB,SAASkD,KAAU;AACjBhC,4BAAAA,IAAIiC,MAAMD,KAAAA,QAAAA;;;;;;cACZ;YACF,CAAA;UACF;QACF;MACF;MACAnD,MAAMwD;MACNf,SAAS;IACX,CAAA;AAEA,SAAK+C,gBAAgB,KAAKJ,WAAWhG,IAAIiF;EAC3C;EAEA,MAAM9E,OAAO;AACX4B,gBAAAA,IAAIsE,KAAK,cAAA,QAAA;;;;;;AACT,UAAM1C,QAAQC,IAAI;MAAC,KAAKJ,WAAWrD,KAAI;MAAI,KAAK6F,WAAW7F,KAAI;MAAI,KAAKmG,gBAAe;KAAG;AAG1F,UAAM,KAAKX,cAAcvC,KAAK;MAAEC,SAASC,wBAAAA;IAAyB,CAAA;AAGlE,QAAI,KAAKd,SAAS;AAChB,WAAK,KAAK+D,mBAAmB,KAAK/D,SAAS,MAAM,KAAK3B,MAAK,CAAA;IAC7D;AAEAkB,gBAAAA,IAAIsE,KAAK,UAAA,QAAA;;;;;;EACX;EAEA,MAAMxF,QAAQ;AACZkB,gBAAAA,IAAIsE,KAAK,cAAA,QAAA;;;;;;AACT,QAAI;AACF,YAAM,KAAKT,QAAQY,UAAS;IAC9B,SAASzC,KAAU;AACjBhC,kBAAAA,IAAIiC,MAAMD,KAAAA,QAAAA;;;;;;IACZ;AAEA,UAAMJ,QAAQC,IAAI;MAAC,KAAKJ,WAAW3C,MAAK;MAAI,KAAKmF,WAAWnF,MAAK;KAAG;AACpEkB,gBAAAA,IAAIsE,KAAK,UAAA,QAAA;;;;;;EACX;EAEA,MAAcC,kBAAkB;AAC9B,QAAI;AACF,WAAKP,mBAAoB,UAAMU,4BAAa,KAAKV,gBAAgB5F,KAAI,GAAI,GAAA;IAC3E,QAAQ;AACN4B,kBAAAA,IAAIsE,KAAK,uBAAA,QAAA;;;;;;IACX;EACF;EAEQE,mBAAmB/D,SAAiBkE,UAAmD;AAC7F,WAAOxB,UAAUG,MACd1E,QAAQ6B,SAAS,MAAA;IAElB,CAAA,EACCmE,KAAKD,QAAAA;EACV;AACF;;EA1HGxC,YAAAA;GATUsB,cAAAA,WAAAA,UAAAA,MAAAA;;EAgBVtB,YAAAA;GAhBUsB,cAAAA,WAAAA,WAAAA,MAAAA;;ADSN,IAAMoB,gBAAN,MAAMA;EAYX9H,YACmByC,iBACjB,EAAEsF,aAAaC,aAAaC,QAAO,GACnC;SAFiBxF,kBAAAA;SAVFW,oBAAoB,IAAI8E,wDAAAA;SACxB3F,SAAS,IAAIC,cAAAA,QAAAA;SACb2F,YAAY,oBAAIC,IAAAA;SAIzBC,sBAA2B;MAAEC,SAAS;IAAiB;SACvDC,0BAAmC;AAMzC,SAAKC,eAAeT;AACpB,SAAKU,eAAeT;AACpB,SAAKlF,kBAAkB,IAAIW,yCAAmB;MAC5CiF,WAAW;QACTT,SAAS,YAAYA,QAAAA;MACvB;IACF,CAAA;EACF;EAEA,IAAIU,OAAO;AACT,WAAO,KAAK7F;EACd;EAEA,MAAME,QAAQ;AACZC,oBAAAA,KAAI,eAAA,QAAA;;;;;;AACJ,QAAI;AACF,YAAM,KAAKuF,aAAY;AACvB,WAAKtF,UAAU,MAAM,KAAKT,gBAAe;AACzC,YAAMe,UAAU,KAAKN,QAAQK,IAAI,4BAAA;AACjC,WAAKT,gBAAgB8F,WAAW;QAC9BzG,QAAQ,KAAKe;QACbS,eAAeH,UACX,IAAII,kBAAAA,uBAAuBJ,SAAS,MAAO,KAAK+E,0BAA0B,KAAKF,sBAAsB,CAAC,CAAA,IACtG,IAAIxE,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;;;;;;AACJ4F,6CAAgB;QACdC,iBAAiB,KAAKhG,gBAAgBD,SAASkG;QAC/CC,gBAAgB,KAAKlG,gBAAgBD,SAASoG;QAC9CC,QAAQ,CAACC,GAAWC,MAAAA;AAClB,eAAKf,oBAAoBc,CAAAA,IAAKC;QAChC;MACF,CAAA;IACF,SAASnE,KAAU;AACjB,WAAK1C,OAAOyC,KAAKC,GAAAA;AACjBhC,kBAAAA,IAAIoB,MAAM,YAAYY,KAAAA;;;;;;IACxB;EACF;EAEA,MAAME,OAAO;AAEX,SAAKsD,aAAY;AACjB,UAAM,KAAK3F,gBAAgBf,MAAK;EAClC;;;;EAKA,MAAMsH,cAAc,EAAEhH,SAASiD,YAAYhD,UAAS,GAAyB;AAC3E,UAAMgH,UAAU,IAAI5C,cAAc;MAChCC,aAAa,KAAK7D;MAClBT;MACAiD;MACAhD;MACAsE,aAAa,KAAKrE;IACpB,CAAA;AAGA+G,YAAQxC,QAAQyC,IAAI,YAAA;AAClB,WAAKpB,UAAUqB,OAAOF,OAAAA;AACtB,UAAI,KAAKnB,UAAUsB,SAAS,GAAG;AAE7BC,aAAK3H,MAAK;MACZ,OAAO;AACL,aAAK4H,iBAAgB;MACvB;IACF,CAAA;AAEA,UAAML,QAAQjI,KAAI;AAElBL,0BAAAA,WACE,CAAC,KAAKqH,oBAAoBjG,UAAU,KAAKiG,oBAAoBjG,WAAWkH,QAAQlH,QAChF,8BAA8B,KAAKiG,oBAAoBjG,MAAM,OAAOkH,QAAQlH,MAAM,KAAG;;;;;;;;;AAEvF,QAAIkH,QAAQnC,oBAAoB;AAC9B,WAAKkB,oBAAoBuB,QAAQN,QAAQnC;IAC3C;AACA,SAAKoB,0BAA0Be,QAAQlC,0BAA0B;AACjE,SAAKiB,oBAAoBjG,SAASkH,QAAQlH;AAC1C,SAAK+F,UAAU0B,IAAIP,OAAAA;AAEnB,SAAKK,iBAAgB;EACvB;;;;EAKQA,mBAAmB;AACzB1G,oBAAAA,KAAI,0BAAA,QAAA;;;;;;AAEJ,QAAI,KAAK6G,uBAAuB;AAC9B,UAAI,CAAC,KAAK3B,UAAU4B,IAAI,KAAKD,qBAAqB,GAAG;AACnD,aAAKA,wBAAwB9H;MAC/B;IACF;AAGA,QAAI,CAAC,KAAK8H,uBAAuB;AAC/B,YAAME,WAAWC,MAAMC,KAAK,KAAK/B,SAAS,EAAEgC,KAAK,CAACb,YAAYA,QAAQhC,aAAa;AACnF,UAAI0C,UAAU;AACZ,aAAKF,wBAAwBE;AAC7B,aAAK5G,kBAAkBgH,iBAAiBJ,SAAS1C,aAAa;MAChE,OAAO;AACL,aAAKlE,kBAAkBgH,iBAAiBpI,MAAAA;MAC1C;IACF;EACF;AACF;",
6
+ "names": ["import_async", "import_client_protocol", "import_log", "import_network_manager", "import_rpc", "import_util", "import_context", "import_invariant", "import_messaging", "ShellRuntimeImpl", "constructor", "_port", "layoutUpdate", "Event", "_layout", "ShellLayout", "DEFAULT", "layout", "invitationCode", "_invitationCode", "spaceKey", "_spaceKey", "setLayout", "emit", "setAppContext", "context", "invariant", "_appRpc", "rpc", "AppService", "setContext", "open", "createProtoRpcPeer", "requested", "appServiceBundle", "exposed", "shellServiceBundle", "handlers", "ShellService", "request", "port", "close", "undefined", "LOCK_KEY", "IFrameHostRuntime", "config", "origin", "appPort", "shellPort", "_ready", "Trigger", "_configProvider", "_appPort", "_shellPort", "_shellRuntime", "services", "_clientServices", "shell", "start", "log", "_config", "getAsyncValue", "_transportFactory", "createSimplePeerTransportFactory", "iceServers", "get", "signals", "ClientServicesHost", "lockKey", "signalManager", "WebsocketSignalManager", "MemorySignalManager", "MemorySignalManagerContext", "transportFactory", "middleware", "handleCall", "method", "params", "handler", "error", "wait", "timeout", "PROXY_CONNECTION_TIMEOUT", "handleStream", "_clientRpc", "ClientRpcServer", "serviceRegistry", "Promise", "all", "Context", "wake", "err", "catch", "stop", "logInfo", "SharedWorkerConnection", "systemPort", "_id", "String", "Math", "floor", "random", "_release", "_systemPort", "_transportService", "SimplePeerTransportService", "_systemRpc", "workerServiceBundle", "iframeServiceBundle", "BridgeService", "navigator", "_lockKey", "ready", "locks", "WorkerService", "RemoteServiceConnectionError", "WorkerSession", "serviceHost", "readySignal", "_startTrigger", "onClose", "Callback", "_serviceHost", "_shellClientRpc", "_iframeRpc", "observabilityGroup", "signalTelemetryEnabled", "setTimeout", "bridgeService", "info", "_maybeOpenShell", "_afterLockReleases", "callIfSet", "asyncTimeout", "callback", "then", "WorkerRuntime", "acquireLock", "releaseLock", "onReset", "SimplePeerTransportProxyFactory", "_sessions", "Set", "_signalMetadataTags", "runtime", "_signalTelemetryEnabled", "_acquireLock", "_releaseLock", "callbacks", "host", "initialize", "setIdentityTags", "identityService", "IdentityService", "devicesService", "DevicesService", "setTag", "k", "v", "createSession", "session", "set", "delete", "size", "self", "_reconnectWebrtc", "group", "add", "_sessionForNetworking", "has", "selected", "Array", "from", "find", "setBridgeService"]
7
7
  }