@dxos/client-services 0.1.52 → 0.1.53-main.01cbc6b

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 (64) hide show
  1. package/dist/lib/browser/{chunk-C3SPTMW3.mjs → chunk-EYXOVYW5.mjs} +817 -694
  2. package/dist/lib/browser/chunk-EYXOVYW5.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +101 -120
  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 +24 -7
  7. package/dist/lib/browser/packlets/testing/index.mjs.map +3 -3
  8. package/dist/lib/node/index.cjs +884 -782
  9. package/dist/lib/node/index.cjs.map +3 -3
  10. package/dist/lib/node/meta.json +1 -1
  11. package/dist/lib/node/packlets/testing/index.cjs +801 -664
  12. package/dist/lib/node/packlets/testing/index.cjs.map +3 -3
  13. package/dist/types/src/packlets/devtools/devtools.d.ts.map +1 -1
  14. package/dist/types/src/packlets/identity/identity.d.ts.map +1 -1
  15. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  16. package/dist/types/src/packlets/services/service-host.d.ts +7 -1
  17. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  18. package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
  19. package/dist/types/src/packlets/spaces/data-space.d.ts +11 -2
  20. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  21. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts +2 -1
  22. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts.map +1 -1
  23. package/dist/types/src/packlets/spaces/spaces-service.d.ts +2 -2
  24. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  25. package/dist/types/src/packlets/testing/test-builder.d.ts +7 -1
  26. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  27. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts +1 -1
  28. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts.map +1 -1
  29. package/dist/types/src/packlets/vault/iframe-proxy-runtime.d.ts +1 -1
  30. package/dist/types/src/packlets/vault/iframe-proxy-runtime.d.ts.map +1 -1
  31. package/dist/types/src/packlets/vault/shell-runtime.d.ts +1 -21
  32. package/dist/types/src/packlets/vault/shell-runtime.d.ts.map +1 -1
  33. package/package.json +33 -32
  34. package/src/packlets/devtools/devtools.ts +2 -2
  35. package/src/packlets/identity/identity-manager.test.ts +1 -1
  36. package/src/packlets/identity/identity-manager.ts +8 -8
  37. package/src/packlets/identity/identity-service.ts +2 -2
  38. package/src/packlets/identity/identity.test.ts +1 -1
  39. package/src/packlets/identity/identity.ts +22 -27
  40. package/src/packlets/invitations/device-invitation-protocol.ts +4 -4
  41. package/src/packlets/invitations/invitation-extension.ts +5 -5
  42. package/src/packlets/invitations/invitations-handler.ts +6 -6
  43. package/src/packlets/invitations/invitations-service.ts +3 -3
  44. package/src/packlets/invitations/space-invitation-protocol.ts +9 -9
  45. package/src/packlets/locks/node.ts +2 -2
  46. package/src/packlets/logging/logging-service.ts +4 -4
  47. package/src/packlets/services/service-context.test.ts +1 -1
  48. package/src/packlets/services/service-context.ts +12 -10
  49. package/src/packlets/services/service-host.test.ts +50 -2
  50. package/src/packlets/services/service-host.ts +28 -10
  51. package/src/packlets/spaces/data-space-manager.test.ts +72 -118
  52. package/src/packlets/spaces/data-space-manager.ts +18 -9
  53. package/src/packlets/spaces/data-space.ts +66 -20
  54. package/src/packlets/spaces/notarization-plugin.test.ts +1 -1
  55. package/src/packlets/spaces/notarization-plugin.ts +9 -5
  56. package/src/packlets/spaces/spaces-service.ts +46 -32
  57. package/src/packlets/testing/invitation-utils.ts +2 -2
  58. package/src/packlets/testing/test-builder.ts +36 -4
  59. package/src/packlets/vault/iframe-host-runtime.ts +2 -2
  60. package/src/packlets/vault/iframe-proxy-runtime.ts +2 -2
  61. package/src/packlets/vault/shell-runtime.ts +3 -49
  62. package/src/packlets/vault/worker-runtime.ts +1 -1
  63. package/src/packlets/vault/worker-session.ts +2 -2
  64. package/dist/lib/browser/chunk-C3SPTMW3.mjs.map +0 -7
@@ -1,4 +1,4 @@
1
- import "@dxos/node-std/globals"
1
+ import "@dxos/node-std/globals";
2
2
  import {
3
3
  ClientServicesHost,
4
4
  DataSpace,
@@ -18,6 +18,7 @@ import {
18
18
  SpacesServiceImpl,
19
19
  TrustedKeySetAuthVerifier,
20
20
  createAuthProvider,
21
+ createDefaultModelFactory,
21
22
  createStorageObjects,
22
23
  getNetworkPeers,
23
24
  isLocked,
@@ -28,7 +29,7 @@ import {
28
29
  subscribeToSignal,
29
30
  subscribeToSpaces,
30
31
  subscribeToSwarmInfo
31
- } from "./chunk-C3SPTMW3.mjs";
32
+ } from "./chunk-EYXOVYW5.mjs";
32
33
 
33
34
  // packages/sdk/client-services/src/packlets/vault/iframe-host-runtime.ts
34
35
  import { Trigger } from "@dxos/async";
@@ -92,7 +93,7 @@ var ClientRpcServer = class {
92
93
  };
93
94
 
94
95
  // packages/sdk/client-services/src/packlets/vault/shell-runtime.ts
95
- import assert from "@dxos/node-std/assert";
96
+ import invariant from "tiny-invariant";
96
97
  import { Event } from "@dxos/async";
97
98
  import { appServiceBundle, shellServiceBundle } from "@dxos/client-protocol";
98
99
  import { ShellLayout } from "@dxos/protocols/proto/dxos/iframe";
@@ -122,7 +123,7 @@ var ShellRuntimeImpl = class {
122
123
  });
123
124
  }
124
125
  async setAppContext(context) {
125
- assert(this._appRpc, "runtime not open");
126
+ invariant(this._appRpc, "runtime not open");
126
127
  await this._appRpc.rpc.AppService.setContext(context);
127
128
  }
128
129
  async open() {
@@ -149,39 +150,9 @@ var ShellRuntimeImpl = class {
149
150
  this._appRpc = void 0;
150
151
  }
151
152
  };
152
- var MemoryShellRuntime = class {
153
- constructor({ layout, invitationCode, spaceKey } = {}) {
154
- this.layoutUpdate = new Event();
155
- this.contextUpdate = new Event();
156
- this._layout = layout != null ? layout : ShellLayout.DEFAULT;
157
- this._invitationCode = invitationCode;
158
- this._spaceKey = spaceKey;
159
- }
160
- get layout() {
161
- return this._layout;
162
- }
163
- get invitationCode() {
164
- return this._invitationCode;
165
- }
166
- get spaceKey() {
167
- return this._spaceKey;
168
- }
169
- setLayout(layout, options = {}) {
170
- this._layout = layout;
171
- this._invitationCode = options.invitationCode;
172
- this._spaceKey = options.spaceKey;
173
- this.layoutUpdate.emit({
174
- layout,
175
- ...options
176
- });
177
- }
178
- async setAppContext(context) {
179
- this.contextUpdate.emit(context);
180
- }
181
- };
182
153
 
183
154
  // packages/sdk/client-services/src/packlets/vault/iframe-host-runtime.ts
184
- var __decorate = function(decorators, target, key, desc) {
155
+ function _ts_decorate(decorators, target, key, desc) {
185
156
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
186
157
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
187
158
  r = Reflect.decorate(decorators, target, key, desc);
@@ -190,7 +161,8 @@ var __decorate = function(decorators, target, key, desc) {
190
161
  if (d = decorators[i])
191
162
  r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
192
163
  return c > 3 && r && Object.defineProperty(target, key, r), r;
193
- };
164
+ }
165
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/vault/iframe-host-runtime.ts";
194
166
  var LOCK_KEY = "DXOS_RESOURCE_LOCK";
195
167
  var IFrameHostRuntime = class {
196
168
  constructor({ config, origin, appPort, shellPort }) {
@@ -211,11 +183,11 @@ var IFrameHostRuntime = class {
211
183
  }
212
184
  async start() {
213
185
  var _a;
214
- log("starting...", {}, {
215
- file: "iframe-host-runtime.ts",
216
- line: 70,
217
- scope: this,
218
- callSite: (f, a) => f(...a)
186
+ log("starting...", void 0, {
187
+ F: __dxlog_file,
188
+ L: 70,
189
+ S: this,
190
+ C: (f, a) => f(...a)
219
191
  });
220
192
  try {
221
193
  this._config = await getAsyncValue(this._configProvider);
@@ -260,42 +232,42 @@ var IFrameHostRuntime = class {
260
232
  (_a = this._shellRuntime) == null ? void 0 : _a.open()
261
233
  ]);
262
234
  this._ready.wake(void 0);
263
- log("started", {}, {
264
- file: "iframe-host-runtime.ts",
265
- line: 113,
266
- scope: this,
267
- callSite: (f, a) => f(...a)
235
+ log("started", void 0, {
236
+ F: __dxlog_file,
237
+ L: 113,
238
+ S: this,
239
+ C: (f, a) => f(...a)
268
240
  });
269
241
  } catch (err) {
270
242
  this._ready.wake(err);
271
- log.catch(err, {}, {
272
- file: "iframe-host-runtime.ts",
273
- line: 116,
274
- scope: this,
275
- callSite: (f, a) => f(...a)
243
+ log.catch(err, void 0, {
244
+ F: __dxlog_file,
245
+ L: 116,
246
+ S: this,
247
+ C: (f, a) => f(...a)
276
248
  });
277
249
  }
278
250
  }
279
251
  async stop() {
280
252
  var _a;
281
- log("stopping...", {}, {
282
- file: "iframe-host-runtime.ts",
283
- line: 121,
284
- scope: this,
285
- callSite: (f, a) => f(...a)
253
+ log("stopping...", void 0, {
254
+ F: __dxlog_file,
255
+ L: 121,
256
+ S: this,
257
+ C: (f, a) => f(...a)
286
258
  });
287
259
  await this._clientRpc.close();
288
260
  await this._clientServices.close();
289
261
  await ((_a = this._shellRuntime) == null ? void 0 : _a.close());
290
- log("stopped", {}, {
291
- file: "iframe-host-runtime.ts",
292
- line: 125,
293
- scope: this,
294
- callSite: (f, a) => f(...a)
262
+ log("stopped", void 0, {
263
+ F: __dxlog_file,
264
+ L: 125,
265
+ S: this,
266
+ C: (f, a) => f(...a)
295
267
  });
296
268
  }
297
269
  };
298
- __decorate([
270
+ _ts_decorate([
299
271
  logInfo
300
272
  ], IFrameHostRuntime.prototype, "origin", void 0);
301
273
 
@@ -307,6 +279,7 @@ import { log as log2 } from "@dxos/log";
307
279
  import { WebRTCTransportService } from "@dxos/network-manager";
308
280
  import { createProtoRpcPeer as createProtoRpcPeer2 } from "@dxos/rpc";
309
281
  import { getAsyncValue as getAsyncValue2 } from "@dxos/util";
282
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/vault/iframe-proxy-runtime.ts";
310
283
  var IFrameProxyRuntime = class {
311
284
  constructor({ config, systemPort, shellPort }) {
312
285
  this._id = String(Math.floor(Math.random() * 1e6));
@@ -354,11 +327,11 @@ var IFrameProxyRuntime = class {
354
327
  lockKey
355
328
  });
356
329
  } catch (err) {
357
- log2.catch(err, {}, {
358
- file: "iframe-proxy-runtime.ts",
359
- line: 85,
360
- scope: this,
361
- callSite: (f, a) => f(...a)
330
+ log2.catch(err, void 0, {
331
+ F: __dxlog_file2,
332
+ L: 85,
333
+ S: this,
334
+ C: (f, a) => f(...a)
362
335
  });
363
336
  throw new RemoteServiceConnectionError("Failed to connect to worker");
364
337
  }
@@ -383,13 +356,13 @@ import { MemorySignalManager as MemorySignalManager2, MemorySignalManagerContext
383
356
  import { WebRTCTransportProxyFactory } from "@dxos/network-manager";
384
357
 
385
358
  // packages/sdk/client-services/src/packlets/vault/worker-session.ts
386
- import assert2 from "@dxos/node-std/assert";
359
+ import invariant2 from "tiny-invariant";
387
360
  import { asyncTimeout, Trigger as Trigger3 } from "@dxos/async";
388
361
  import { iframeServiceBundle as iframeServiceBundle2, PROXY_CONNECTION_TIMEOUT as PROXY_CONNECTION_TIMEOUT2, workerServiceBundle as workerServiceBundle2 } from "@dxos/client-protocol";
389
362
  import { log as log3, logInfo as logInfo2 } from "@dxos/log";
390
363
  import { createProtoRpcPeer as createProtoRpcPeer3 } from "@dxos/rpc";
391
364
  import { Callback } from "@dxos/util";
392
- var __decorate2 = function(decorators, target, key, desc) {
365
+ function _ts_decorate2(decorators, target, key, desc) {
393
366
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
394
367
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
395
368
  r = Reflect.decorate(decorators, target, key, desc);
@@ -398,12 +371,13 @@ var __decorate2 = function(decorators, target, key, desc) {
398
371
  if (d = decorators[i])
399
372
  r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
400
373
  return c > 3 && r && Object.defineProperty(target, key, r), r;
401
- };
374
+ }
375
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/vault/worker-session.ts";
402
376
  var WorkerSession = class {
403
377
  constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }) {
404
378
  this._startTrigger = new Trigger3();
405
379
  this.onClose = new Callback();
406
- assert2(serviceHost);
380
+ invariant2(serviceHost);
407
381
  this._serviceHost = serviceHost;
408
382
  const middleware = {
409
383
  handleCall: async (method, params, handler) => {
@@ -450,11 +424,11 @@ var WorkerSession = class {
450
424
  try {
451
425
  await this.close();
452
426
  } catch (err) {
453
- log3.catch(err, {}, {
454
- file: "worker-session.ts",
455
- line: 100,
456
- scope: this,
457
- callSite: (f, a) => f(...a)
427
+ log3.catch(err, void 0, {
428
+ F: __dxlog_file3,
429
+ L: 100,
430
+ S: this,
431
+ C: (f, a) => f(...a)
458
432
  });
459
433
  }
460
434
  });
@@ -467,11 +441,11 @@ var WorkerSession = class {
467
441
  this.bridgeService = this._iframeRpc.rpc.BridgeService;
468
442
  }
469
443
  async open() {
470
- log3.info("opening..", {}, {
471
- file: "worker-session.ts",
472
- line: 114,
473
- scope: this,
474
- callSite: (f, a) => f(...a)
444
+ log3.info("opening..", void 0, {
445
+ F: __dxlog_file3,
446
+ L: 114,
447
+ S: this,
448
+ C: (f, a) => f(...a)
475
449
  });
476
450
  await Promise.all([
477
451
  this._clientRpc.open(),
@@ -486,20 +460,20 @@ var WorkerSession = class {
486
460
  }
487
461
  }
488
462
  async close() {
489
- log3.info("closing..", {}, {
490
- file: "worker-session.ts",
491
- line: 124,
492
- scope: this,
493
- callSite: (f, a) => f(...a)
463
+ log3.info("closing..", void 0, {
464
+ F: __dxlog_file3,
465
+ L: 124,
466
+ S: this,
467
+ C: (f, a) => f(...a)
494
468
  });
495
469
  try {
496
470
  await this.onClose.callIfSet();
497
471
  } catch (err) {
498
- log3.catch(err, {}, {
499
- file: "worker-session.ts",
500
- line: 128,
501
- scope: this,
502
- callSite: (f, a) => f(...a)
472
+ log3.catch(err, void 0, {
473
+ F: __dxlog_file3,
474
+ L: 128,
475
+ S: this,
476
+ C: (f, a) => f(...a)
503
477
  });
504
478
  }
505
479
  await Promise.all([
@@ -511,11 +485,11 @@ var WorkerSession = class {
511
485
  try {
512
486
  await asyncTimeout(this._shellClientRpc.open(), 1e3);
513
487
  } catch (e) {
514
- log3.info("No shell connected.", {}, {
515
- file: "worker-session.ts",
516
- line: 138,
517
- scope: this,
518
- callSite: (f, a) => f(...a)
488
+ log3.info("No shell connected.", void 0, {
489
+ F: __dxlog_file3,
490
+ L: 138,
491
+ S: this,
492
+ C: (f, a) => f(...a)
519
493
  });
520
494
  }
521
495
  }
@@ -524,14 +498,15 @@ var WorkerSession = class {
524
498
  }).then(callback);
525
499
  }
526
500
  };
527
- __decorate2([
501
+ _ts_decorate2([
528
502
  logInfo2
529
503
  ], WorkerSession.prototype, "origin", void 0);
530
- __decorate2([
504
+ _ts_decorate2([
531
505
  logInfo2
532
506
  ], WorkerSession.prototype, "lockKey", void 0);
533
507
 
534
508
  // packages/sdk/client-services/src/packlets/vault/worker-runtime.ts
509
+ var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/vault/worker-runtime.ts";
535
510
  var WorkerRuntime = class {
536
511
  // prettier-ignore
537
512
  constructor(_configProvider) {
@@ -539,17 +514,23 @@ var WorkerRuntime = class {
539
514
  this._transportFactory = new WebRTCTransportProxyFactory();
540
515
  this._ready = new Trigger4();
541
516
  this.sessions = /* @__PURE__ */ new Set();
542
- this._clientServices = new ClientServicesHost();
517
+ this._clientServices = new ClientServicesHost({
518
+ callbacks: {
519
+ onReset: async () => {
520
+ self.close();
521
+ }
522
+ }
523
+ });
543
524
  }
544
525
  get host() {
545
526
  return this._clientServices;
546
527
  }
547
528
  async start() {
548
- log4("starting...", {}, {
549
- file: "worker-runtime.ts",
550
- line: 48,
551
- scope: this,
552
- callSite: (f, a) => f(...a)
529
+ log4("starting...", void 0, {
530
+ F: __dxlog_file4,
531
+ L: 48,
532
+ S: this,
533
+ C: (f, a) => f(...a)
553
534
  });
554
535
  try {
555
536
  this._config = await this._configProvider();
@@ -561,19 +542,19 @@ var WorkerRuntime = class {
561
542
  });
562
543
  await this._clientServices.open();
563
544
  this._ready.wake(void 0);
564
- log4("started", {}, {
565
- file: "worker-runtime.ts",
566
- line: 62,
567
- scope: this,
568
- callSite: (f, a) => f(...a)
545
+ log4("started", void 0, {
546
+ F: __dxlog_file4,
547
+ L: 62,
548
+ S: this,
549
+ C: (f, a) => f(...a)
569
550
  });
570
551
  } catch (err) {
571
552
  this._ready.wake(err);
572
- log4.catch(err, {}, {
573
- file: "worker-runtime.ts",
574
- line: 65,
575
- scope: this,
576
- callSite: (f, a) => f(...a)
553
+ log4.catch(err, void 0, {
554
+ F: __dxlog_file4,
555
+ L: 65,
556
+ S: this,
557
+ C: (f, a) => f(...a)
577
558
  });
578
559
  }
579
560
  }
@@ -603,11 +584,11 @@ var WorkerRuntime = class {
603
584
  * Selects one of the existing session fro WebRTC networking.
604
585
  */
605
586
  _reconnectWebrtc() {
606
- log4("reconnecting webrtc...", {}, {
607
- file: "worker-runtime.ts",
608
- line: 102,
609
- scope: this,
610
- callSite: (f, a) => f(...a)
587
+ log4("reconnecting webrtc...", void 0, {
588
+ F: __dxlog_file4,
589
+ L: 102,
590
+ S: this,
591
+ C: (f, a) => f(...a)
611
592
  });
612
593
  if (this._sessionForNetworking) {
613
594
  if (!this.sessions.has(this._sessionForNetworking)) {
@@ -640,7 +621,6 @@ export {
640
621
  InvitationsHandler,
641
622
  InvitationsServiceImpl,
642
623
  Lock,
643
- MemoryShellRuntime,
644
624
  ServiceContext,
645
625
  ServiceRegistry,
646
626
  ShellRuntimeImpl,
@@ -650,6 +630,7 @@ export {
650
630
  WorkerRuntime,
651
631
  WorkerSession,
652
632
  createAuthProvider,
633
+ createDefaultModelFactory,
653
634
  createStorageObjects,
654
635
  getNetworkPeers,
655
636
  isLocked,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/packlets/vault/iframe-host-runtime.ts", "../../../src/packlets/services/client-rpc-server.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 } from '@dxos/client-protocol';\nimport { Config } from '@dxos/config';\nimport { log, logInfo } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { createWebRTCTransportFactory, TransportFactory } from '@dxos/network-manager';\nimport { RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, MaybePromise, Provider } from '@dxos/util';\n\nimport { ClientServicesHost } from '../services';\nimport { ClientRpcServer, ClientRpcServerParams } from '../services/client-rpc-server';\nimport { ShellRuntime, ShellRuntimeImpl } from './shell-runtime';\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 = createWebRTCTransportFactory({\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(), 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 { ClientServices } from '@dxos/client-protocol';\nimport { Any, ServiceHandler, Stream } from '@dxos/codec-protobuf';\nimport { raise } from '@dxos/debug';\nimport { parseMethodName, RpcPeer, RpcPeerOptions } from '@dxos/rpc';\nimport { MaybePromise } from '@dxos/util';\n\nimport { ServiceRegistry } from './service-registry';\n\nexport type ClientRpcServerParams = {\n serviceRegistry: ServiceRegistry<ClientServices>;\n handleCall?: (\n method: string,\n params: Any,\n handler: (method: string, params: Any) => MaybePromise<Any>,\n ) => Promise<Any>;\n handleStream?: (\n method: string,\n params: Any,\n handler: (method: string, params: Any) => Stream<Any>,\n ) => MaybePromise<Stream<Any>>;\n} & Omit<RpcPeerOptions, 'callHandler' | 'streamHandler'>;\n\nexport class ClientRpcServer {\n private readonly _serviceRegistry: ServiceRegistry<ClientServices>;\n private readonly _rpcPeer: RpcPeer;\n private readonly _handlerCache = new Map<string, ServiceHandler<any>>();\n private readonly _handleCall: ClientRpcServerParams['handleCall'];\n private readonly _handleStream: ClientRpcServerParams['handleStream'];\n\n constructor(params: ClientRpcServerParams) {\n const { serviceRegistry, handleCall, handleStream, ...rpcOptions } = params;\n this._handleCall = handleCall;\n this._handleStream = handleStream;\n\n this._serviceRegistry = serviceRegistry;\n this._rpcPeer = new RpcPeer({\n ...rpcOptions,\n callHandler: (method, params) => {\n const [serviceName, methodName] = parseMethodName(method);\n const handler = (method: string, params: Any) => this._getServiceHandler(serviceName).call(method, params);\n\n if (this._handleCall) {\n return this._handleCall(methodName, params, handler);\n } else {\n return handler(methodName, params);\n }\n },\n streamHandler: (method, params) => {\n const [serviceName, methodName] = parseMethodName(method);\n const handler = (method: string, params: Any) =>\n this._getServiceHandler(serviceName).callStream(method, params);\n\n if (this._handleStream) {\n return Stream.unwrapPromise(this._handleStream(methodName, params, handler));\n } else {\n return handler(methodName, params);\n }\n },\n });\n }\n\n async open() {\n await this._rpcPeer.open();\n }\n\n async close() {\n await this._rpcPeer.close();\n }\n\n private _getServiceHandler(serviceName: string) {\n if (!this._handlerCache.has(serviceName)) {\n const [key, descriptor] =\n Object.entries(this._serviceRegistry.descriptors).find(\n ([key, descriptor]) => descriptor.name === serviceName,\n ) ?? raise(new Error(`Service not available: ${serviceName}`));\n\n const service = this._serviceRegistry.services[key as keyof ClientServices];\n if (!service) {\n throw new Error(`Service not available: ${serviceName}`);\n }\n\n this._handlerCache.set(serviceName, descriptor.createServer(service as any));\n }\n\n return this._handlerCache.get(serviceName)!;\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport assert from 'node:assert';\n\nimport { Event } from '@dxos/async';\nimport { appServiceBundle, AppServiceBundle, shellServiceBundle } from '@dxos/client-protocol';\nimport { PublicKey } from '@dxos/keys';\nimport { AppContextRequest, LayoutRequest, ShellLayout } from '@dxos/protocols/proto/dxos/iframe';\nimport { createProtoRpcPeer, ProtoRpcPeer, RpcPort } from '@dxos/rpc';\n\nexport interface ShellRuntime {\n layoutUpdate: Event<LayoutRequest>;\n layout: ShellLayout;\n invitationCode?: string;\n spaceKey?: PublicKey;\n setLayout: (layout: ShellLayout, options?: Omit<LayoutRequest, 'layout'>) => void;\n setAppContext: (context: AppContextRequest) => Promise<void>;\n}\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: ShellLayout, options: Omit<LayoutRequest, 'layout'> = {}) {\n this._layout = layout;\n this._invitationCode = options.invitationCode;\n this._spaceKey = options.spaceKey;\n this.layoutUpdate.emit({ layout, ...options });\n }\n\n async setAppContext(context: AppContextRequest) {\n assert(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\nexport class MemoryShellRuntime implements ShellRuntime {\n readonly layoutUpdate = new Event<LayoutRequest>();\n readonly contextUpdate = new Event<AppContextRequest>();\n private _layout: ShellLayout;\n private _invitationCode?: string;\n private _spaceKey?: PublicKey;\n\n constructor({ layout, invitationCode, spaceKey }: Partial<LayoutRequest> & Partial<AppContextRequest> = {}) {\n this._layout = layout ?? ShellLayout.DEFAULT;\n this._invitationCode = invitationCode;\n this._spaceKey = spaceKey;\n }\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: ShellLayout, options: Omit<LayoutRequest, 'layout'> = {}) {\n this._layout = layout;\n this._invitationCode = options.invitationCode;\n this._spaceKey = options.spaceKey;\n this.layoutUpdate.emit({ layout, ...options });\n }\n\n async setAppContext(context: AppContextRequest) {\n this.contextUpdate.emit(context);\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { iframeServiceBundle, workerServiceBundle, WorkerServiceBundle } from '@dxos/client-protocol';\nimport { Config } from '@dxos/config';\nimport { RemoteServiceConnectionError } from '@dxos/errors';\nimport { log } from '@dxos/log';\nimport { WebRTCTransportService } from '@dxos/network-manager';\nimport { BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, ProtoRpcPeer, RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, MaybePromise, Provider } from '@dxos/util';\n\nimport { ShellRuntime, 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 WebRTCTransportService({\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 { Config } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { WebRTCTransportProxyFactory } from '@dxos/network-manager';\nimport { RpcPort } from '@dxos/rpc';\nimport { MaybePromise } from '@dxos/util';\n\nimport { ClientServicesHost } from '../services';\nimport { WorkerSession } from './worker-session';\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 WebRTCTransportProxyFactory();\n private readonly _ready = new Trigger<Error | undefined>();\n private readonly sessions = new Set<WorkerSession>();\n private _sessionForNetworking?: WorkerSession;\n private _clientServices!: ClientServicesHost;\n private _config!: Config;\n\n // prettier-ignore\n constructor(\n private readonly _configProvider: () => MaybePromise<Config>\n ) {\n this._clientServices = new ClientServicesHost();\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();\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 // 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 assert from 'node:assert';\n\nimport { asyncTimeout, Trigger } from '@dxos/async';\nimport {\n iframeServiceBundle,\n IframeServiceBundle,\n PROXY_CONNECTION_TIMEOUT,\n workerServiceBundle,\n} from '@dxos/client-protocol';\nimport { log, logInfo } from '@dxos/log';\nimport { BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, ProtoRpcPeer, RpcPort } from '@dxos/rpc';\nimport { Callback, MaybePromise } from '@dxos/util';\n\nimport { ClientServicesHost } from '../services';\nimport { ClientRpcServer, ClientRpcServerParams } from '../services/client-rpc-server';\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 assert(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 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: 1000, // 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 await this._startTrigger.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (this.lockKey) {\n void this._afterLockReleases(this.lockKey, () => this.close());\n }\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 }\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": ["Trigger", "PROXY_CONNECTION_TIMEOUT", "log", "logInfo", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "createWebRTCTransportFactory", "getAsyncValue", "Stream", "raise", "parseMethodName", "RpcPeer", "ClientRpcServer", "constructor", "params", "_handlerCache", "Map", "serviceRegistry", "handleCall", "handleStream", "rpcOptions", "_handleCall", "_handleStream", "_serviceRegistry", "_rpcPeer", "callHandler", "method", "serviceName", "methodName", "handler", "_getServiceHandler", "call", "streamHandler", "callStream", "unwrapPromise", "open", "close", "has", "key", "descriptor", "Object", "entries", "descriptors", "find", "name", "Error", "service", "services", "set", "createServer", "get", "assert", "Event", "appServiceBundle", "shellServiceBundle", "ShellLayout", "createProtoRpcPeer", "ShellRuntimeImpl", "constructor", "_port", "layoutUpdate", "_layout", "DEFAULT", "layout", "invitationCode", "_invitationCode", "spaceKey", "_spaceKey", "setLayout", "options", "emit", "setAppContext", "context", "_appRpc", "rpc", "AppService", "setContext", "open", "requested", "exposed", "handlers", "ShellService", "request", "port", "close", "undefined", "MemoryShellRuntime", "contextUpdate", "LOCK_KEY", "IFrameHostRuntime", "constructor", "config", "origin", "appPort", "shellPort", "_ready", "Trigger", "_configProvider", "_appPort", "_shellPort", "_shellRuntime", "ShellRuntimeImpl", "services", "_clientServices", "shell", "start", "log", "_config", "getAsyncValue", "_transportFactory", "createWebRTCTransportFactory", "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", "port", "Promise", "all", "open", "wake", "undefined", "err", "catch", "stop", "close", "logInfo", "Trigger", "iframeServiceBundle", "workerServiceBundle", "RemoteServiceConnectionError", "log", "WebRTCTransportService", "createProtoRpcPeer", "getAsyncValue", "IFrameProxyRuntime", "constructor", "config", "systemPort", "shellPort", "_id", "String", "Math", "floor", "random", "_release", "Trigger", "_configProvider", "_systemPort", "_shellPort", "_shellRuntime", "ShellRuntimeImpl", "shell", "open", "origin", "_config", "getAsyncValue", "_transportService", "WebRTCTransportService", "iceServers", "get", "_systemRpc", "createProtoRpcPeer", "requested", "workerServiceBundle", "exposed", "iframeServiceBundle", "handlers", "BridgeService", "port", "timeout", "lockKey", "navigator", "_lockKey", "ready", "locks", "request", "wake", "wait", "rpc", "WorkerService", "start", "err", "log", "catch", "RemoteServiceConnectionError", "close", "stop", "Trigger", "log", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "WebRTCTransportProxyFactory", "assert", "asyncTimeout", "Trigger", "iframeServiceBundle", "PROXY_CONNECTION_TIMEOUT", "workerServiceBundle", "log", "logInfo", "createProtoRpcPeer", "Callback", "__decorate", "WorkerSession", "constructor", "serviceHost", "systemPort", "appPort", "shellPort", "readySignal", "_startTrigger", "Trigger", "onClose", "Callback", "assert", "_serviceHost", "middleware", "handleCall", "method", "params", "handler", "error", "wait", "timeout", "PROXY_CONNECTION_TIMEOUT", "handleStream", "_clientRpc", "ClientRpcServer", "serviceRegistry", "port", "_shellClientRpc", "_iframeRpc", "createProtoRpcPeer", "requested", "iframeServiceBundle", "exposed", "workerServiceBundle", "handlers", "WorkerService", "start", "request", "origin", "lockKey", "wake", "stop", "setTimeout", "close", "err", "log", "catch", "bridgeService", "rpc", "BridgeService", "open", "info", "Promise", "all", "_maybeOpenShell", "_afterLockReleases", "callIfSet", "asyncTimeout", "callback", "navigator", "locks", "then", "logInfo", "WorkerRuntime", "constructor", "_configProvider", "_transportFactory", "WebRTCTransportProxyFactory", "_ready", "Trigger", "sessions", "Set", "_clientServices", "ClientServicesHost", "host", "start", "log", "_config", "signals", "get", "initialize", "config", "signalManager", "WebsocketSignalManager", "MemorySignalManager", "MemorySignalManagerContext", "transportFactory", "open", "wake", "undefined", "err", "catch", "stop", "close", "createSession", "appPort", "systemPort", "shellPort", "session", "WorkerSession", "serviceHost", "readySignal", "onClose", "set", "delete", "_reconnectWebrtc", "add", "_sessionForNetworking", "has", "selected", "Array", "from", "find", "bridgeService", "setBridgeService"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { PROXY_CONNECTION_TIMEOUT, ShellRuntime } from '@dxos/client-protocol';\nimport { Config } from '@dxos/config';\nimport { log, logInfo } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { createWebRTCTransportFactory, TransportFactory } from '@dxos/network-manager';\nimport { RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, MaybePromise, Provider } from '@dxos/util';\n\nimport { ClientServicesHost } from '../services';\nimport { ClientRpcServer, ClientRpcServerParams } from '../services/client-rpc-server';\nimport { ShellRuntimeImpl } from './shell-runtime';\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 = createWebRTCTransportFactory({\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(), 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 { ClientServices } from '@dxos/client-protocol';\nimport { Any, ServiceHandler, Stream } from '@dxos/codec-protobuf';\nimport { raise } from '@dxos/debug';\nimport { parseMethodName, RpcPeer, RpcPeerOptions } from '@dxos/rpc';\nimport { MaybePromise } from '@dxos/util';\n\nimport { ServiceRegistry } from './service-registry';\n\nexport type ClientRpcServerParams = {\n serviceRegistry: ServiceRegistry<ClientServices>;\n handleCall?: (\n method: string,\n params: Any,\n handler: (method: string, params: Any) => MaybePromise<Any>,\n ) => Promise<Any>;\n handleStream?: (\n method: string,\n params: Any,\n handler: (method: string, params: Any) => Stream<Any>,\n ) => MaybePromise<Stream<Any>>;\n} & Omit<RpcPeerOptions, 'callHandler' | 'streamHandler'>;\n\nexport class ClientRpcServer {\n private readonly _serviceRegistry: ServiceRegistry<ClientServices>;\n private readonly _rpcPeer: RpcPeer;\n private readonly _handlerCache = new Map<string, ServiceHandler<any>>();\n private readonly _handleCall: ClientRpcServerParams['handleCall'];\n private readonly _handleStream: ClientRpcServerParams['handleStream'];\n\n constructor(params: ClientRpcServerParams) {\n const { serviceRegistry, handleCall, handleStream, ...rpcOptions } = params;\n this._handleCall = handleCall;\n this._handleStream = handleStream;\n\n this._serviceRegistry = serviceRegistry;\n this._rpcPeer = new RpcPeer({\n ...rpcOptions,\n callHandler: (method, params) => {\n const [serviceName, methodName] = parseMethodName(method);\n const handler = (method: string, params: Any) => this._getServiceHandler(serviceName).call(method, params);\n\n if (this._handleCall) {\n return this._handleCall(methodName, params, handler);\n } else {\n return handler(methodName, params);\n }\n },\n streamHandler: (method, params) => {\n const [serviceName, methodName] = parseMethodName(method);\n const handler = (method: string, params: Any) =>\n this._getServiceHandler(serviceName).callStream(method, params);\n\n if (this._handleStream) {\n return Stream.unwrapPromise(this._handleStream(methodName, params, handler));\n } else {\n return handler(methodName, params);\n }\n },\n });\n }\n\n async open() {\n await this._rpcPeer.open();\n }\n\n async close() {\n await this._rpcPeer.close();\n }\n\n private _getServiceHandler(serviceName: string) {\n if (!this._handlerCache.has(serviceName)) {\n const [key, descriptor] =\n Object.entries(this._serviceRegistry.descriptors).find(\n ([key, descriptor]) => descriptor.name === serviceName,\n ) ?? raise(new Error(`Service not available: ${serviceName}`));\n\n const service = this._serviceRegistry.services[key as keyof ClientServices];\n if (!service) {\n throw new Error(`Service not available: ${serviceName}`);\n }\n\n this._handlerCache.set(serviceName, descriptor.createServer(service as any));\n }\n\n return this._handlerCache.get(serviceName)!;\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport invariant from 'tiny-invariant';\n\nimport { Event } from '@dxos/async';\nimport { appServiceBundle, AppServiceBundle, ShellRuntime, shellServiceBundle } from '@dxos/client-protocol';\nimport { PublicKey } from '@dxos/keys';\nimport { AppContextRequest, LayoutRequest, ShellLayout } from '@dxos/protocols/proto/dxos/iframe';\nimport { createProtoRpcPeer, ProtoRpcPeer, 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: ShellLayout, options: Omit<LayoutRequest, 'layout'> = {}) {\n this._layout = layout;\n this._invitationCode = options.invitationCode;\n this._spaceKey = options.spaceKey;\n this.layoutUpdate.emit({ layout, ...options });\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 { iframeServiceBundle, ShellRuntime, workerServiceBundle, WorkerServiceBundle } from '@dxos/client-protocol';\nimport { Config } from '@dxos/config';\nimport { RemoteServiceConnectionError } from '@dxos/errors';\nimport { log } from '@dxos/log';\nimport { WebRTCTransportService } from '@dxos/network-manager';\nimport { BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, ProtoRpcPeer, RpcPort } from '@dxos/rpc';\nimport { getAsyncValue, MaybePromise, 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 WebRTCTransportService({\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 { Config } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { WebRTCTransportProxyFactory } from '@dxos/network-manager';\nimport { RpcPort } from '@dxos/rpc';\nimport { MaybePromise } from '@dxos/util';\n\nimport { ClientServicesHost } from '../services';\nimport { WorkerSession } from './worker-session';\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 WebRTCTransportProxyFactory();\n private readonly _ready = new Trigger<Error | undefined>();\n private readonly sessions = new Set<WorkerSession>();\n private _sessionForNetworking?: WorkerSession;\n private _clientServices!: ClientServicesHost;\n private _config!: Config;\n\n // prettier-ignore\n constructor(\n private readonly _configProvider: () => MaybePromise<Config>\n ) {\n this._clientServices = new ClientServicesHost({ callbacks: { onReset: async () => { self.close(); } } });\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();\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 // 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 invariant from 'tiny-invariant';\n\nimport { asyncTimeout, Trigger } from '@dxos/async';\nimport {\n iframeServiceBundle,\n IframeServiceBundle,\n PROXY_CONNECTION_TIMEOUT,\n workerServiceBundle,\n} from '@dxos/client-protocol';\nimport { log, logInfo } from '@dxos/log';\nimport { BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { createProtoRpcPeer, ProtoRpcPeer, RpcPort } from '@dxos/rpc';\nimport { Callback, MaybePromise } from '@dxos/util';\n\nimport { ClientServicesHost } from '../services';\nimport { ClientRpcServer, ClientRpcServerParams } from '../services/client-rpc-server';\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 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: 1000, // 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 await this._startTrigger.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (this.lockKey) {\n void this._afterLockReleases(this.lockKey, () => this.close());\n }\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 }\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": ["Trigger", "PROXY_CONNECTION_TIMEOUT", "log", "logInfo", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "createWebRTCTransportFactory", "getAsyncValue", "Stream", "raise", "parseMethodName", "RpcPeer", "ClientRpcServer", "constructor", "params", "_handlerCache", "Map", "serviceRegistry", "handleCall", "handleStream", "rpcOptions", "_handleCall", "_handleStream", "_serviceRegistry", "_rpcPeer", "RpcPeer", "callHandler", "method", "serviceName", "methodName", "parseMethodName", "handler", "_getServiceHandler", "call", "streamHandler", "callStream", "Stream", "unwrapPromise", "open", "close", "has", "key", "descriptor", "Object", "entries", "descriptors", "find", "name", "raise", "Error", "service", "services", "set", "createServer", "get", "invariant", "Event", "appServiceBundle", "shellServiceBundle", "ShellLayout", "createProtoRpcPeer", "ShellRuntimeImpl", "constructor", "_port", "layoutUpdate", "Event", "_layout", "ShellLayout", "DEFAULT", "layout", "invitationCode", "_invitationCode", "spaceKey", "_spaceKey", "setLayout", "options", "emit", "setAppContext", "context", "invariant", "_appRpc", "rpc", "AppService", "setContext", "open", "createProtoRpcPeer", "requested", "appServiceBundle", "exposed", "shellServiceBundle", "handlers", "ShellService", "request", "port", "close", "undefined", "LOCK_KEY", "IFrameHostRuntime", "constructor", "config", "origin", "appPort", "shellPort", "_ready", "Trigger", "_configProvider", "_appPort", "_shellPort", "_shellRuntime", "ShellRuntimeImpl", "services", "_clientServices", "shell", "start", "log", "_config", "getAsyncValue", "_transportFactory", "createWebRTCTransportFactory", "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", "port", "Promise", "all", "open", "wake", "undefined", "err", "catch", "stop", "close", "logInfo", "Trigger", "iframeServiceBundle", "workerServiceBundle", "RemoteServiceConnectionError", "log", "WebRTCTransportService", "createProtoRpcPeer", "getAsyncValue", "IFrameProxyRuntime", "constructor", "config", "systemPort", "shellPort", "_id", "String", "Math", "floor", "random", "_release", "Trigger", "_configProvider", "_systemPort", "_shellPort", "_shellRuntime", "ShellRuntimeImpl", "shell", "open", "origin", "_config", "getAsyncValue", "_transportService", "WebRTCTransportService", "iceServers", "get", "_systemRpc", "createProtoRpcPeer", "requested", "workerServiceBundle", "exposed", "iframeServiceBundle", "handlers", "BridgeService", "port", "timeout", "lockKey", "navigator", "_lockKey", "ready", "locks", "request", "wake", "wait", "rpc", "WorkerService", "start", "err", "log", "catch", "RemoteServiceConnectionError", "close", "stop", "Trigger", "log", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "WebRTCTransportProxyFactory", "invariant", "asyncTimeout", "Trigger", "iframeServiceBundle", "PROXY_CONNECTION_TIMEOUT", "workerServiceBundle", "log", "logInfo", "createProtoRpcPeer", "Callback", "WorkerSession", "constructor", "serviceHost", "systemPort", "appPort", "shellPort", "readySignal", "_startTrigger", "Trigger", "onClose", "Callback", "invariant", "_serviceHost", "middleware", "handleCall", "method", "params", "handler", "error", "wait", "timeout", "PROXY_CONNECTION_TIMEOUT", "handleStream", "_clientRpc", "ClientRpcServer", "serviceRegistry", "port", "_shellClientRpc", "_iframeRpc", "createProtoRpcPeer", "requested", "iframeServiceBundle", "exposed", "workerServiceBundle", "handlers", "WorkerService", "start", "request", "origin", "lockKey", "wake", "stop", "setTimeout", "close", "err", "log", "catch", "bridgeService", "rpc", "BridgeService", "open", "info", "Promise", "all", "_maybeOpenShell", "_afterLockReleases", "callIfSet", "asyncTimeout", "callback", "navigator", "locks", "then", "logInfo", "WorkerRuntime", "constructor", "_configProvider", "_transportFactory", "WebRTCTransportProxyFactory", "_ready", "Trigger", "sessions", "Set", "_clientServices", "ClientServicesHost", "callbacks", "onReset", "self", "close", "host", "start", "log", "_config", "signals", "get", "initialize", "config", "signalManager", "WebsocketSignalManager", "MemorySignalManager", "MemorySignalManagerContext", "transportFactory", "open", "wake", "undefined", "err", "catch", "stop", "createSession", "appPort", "systemPort", "shellPort", "session", "WorkerSession", "serviceHost", "readySignal", "onClose", "set", "delete", "_reconnectWebrtc", "add", "_sessionForNetworking", "has", "selected", "Array", "from", "find", "bridgeService", "setBridgeService"]
7
7
  }