@dxos/client-services 0.6.14-main.2b6a0f3 → 0.6.14-main.f49f251

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 (33) hide show
  1. package/dist/lib/browser/{chunk-BBLK6AUB.mjs → chunk-Z3SSMM5X.mjs} +488 -174
  2. package/dist/lib/browser/chunk-Z3SSMM5X.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +43 -314
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +1 -2
  7. package/dist/lib/browser/testing/index.mjs.map +1 -1
  8. package/dist/lib/node/{chunk-SJEDBF7U.cjs → chunk-ZORMUE2S.cjs} +755 -433
  9. package/dist/lib/node/chunk-ZORMUE2S.cjs.map +7 -0
  10. package/dist/lib/node/index.cjs +95 -366
  11. package/dist/lib/node/index.cjs.map +4 -4
  12. package/dist/lib/node/meta.json +1 -1
  13. package/dist/lib/node/testing/index.cjs +8 -8
  14. package/dist/lib/node-esm/{chunk-A6GS6OOD.mjs → chunk-4NBD4YSD.mjs} +488 -166
  15. package/dist/lib/node-esm/chunk-4NBD4YSD.mjs.map +7 -0
  16. package/dist/lib/node-esm/index.mjs +43 -314
  17. package/dist/lib/node-esm/index.mjs.map +4 -4
  18. package/dist/lib/node-esm/meta.json +1 -1
  19. package/dist/lib/node-esm/testing/index.mjs +1 -1
  20. package/dist/types/src/packlets/invitations/device-invitation-protocol.d.ts.map +1 -1
  21. package/dist/types/src/packlets/invitations/invitation-state.d.ts.map +1 -1
  22. package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
  23. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts.map +1 -1
  24. package/dist/types/src/version.d.ts +1 -1
  25. package/package.json +43 -49
  26. package/src/packlets/invitations/device-invitation-protocol.ts +3 -1
  27. package/src/packlets/invitations/invitation-state.ts +13 -12
  28. package/src/packlets/invitations/invitations-handler.ts +34 -5
  29. package/src/packlets/invitations/space-invitation-protocol.ts +1 -0
  30. package/src/version.ts +1 -1
  31. package/dist/lib/browser/chunk-BBLK6AUB.mjs.map +0 -7
  32. package/dist/lib/node/chunk-SJEDBF7U.cjs.map +0 -7
  33. package/dist/lib/node-esm/chunk-A6GS6OOD.mjs.map +0 -7
@@ -1,11 +1,13 @@
1
1
  import "@dxos/node-std/globals";
2
2
  import {
3
+ ClientRpcServer,
3
4
  ClientServicesHost,
4
5
  DataSpace,
5
6
  DataSpaceManager,
6
7
  DeviceInvitationProtocol,
7
8
  DevtoolsHostEvents,
8
9
  DevtoolsServiceImpl,
10
+ DiagnosticsCollector,
9
11
  EdgeAgentManager,
10
12
  EdgeAgentServiceImpl,
11
13
  EdgeFeedReplicator,
@@ -28,7 +30,11 @@ import {
28
30
  createDiagnostics,
29
31
  createLevel,
30
32
  createStorageObjects,
33
+ decodeProfileArchive,
34
+ encodeProfileArchive,
35
+ exportProfileData,
31
36
  getNetworkPeers,
37
+ importProfileData,
32
38
  isLocked,
33
39
  subscribeToFeedBlocks,
34
40
  subscribeToFeeds,
@@ -37,314 +43,37 @@ import {
37
43
  subscribeToSignal,
38
44
  subscribeToSpaces,
39
45
  subscribeToSwarmInfo
40
- } from "./chunk-BBLK6AUB.mjs";
41
-
42
- // packages/sdk/client-services/src/packlets/diagnostics/diagnostics-collector.ts
43
- import { ClientServicesProviderResource } from "@dxos/client-protocol";
44
- import { ConfigResource } from "@dxos/config";
45
- import { GetDiagnosticsRequest } from "@dxos/protocols/proto/dxos/client/services";
46
- import { TRACE_PROCESSOR } from "@dxos/tracing";
47
- import { jsonKeyReplacer, nonNullable } from "@dxos/util";
48
- var GET_DIAGNOSTICS_RPC_TIMEOUT = 1e4;
49
- var DiagnosticsCollector = class {
50
- static {
51
- this.broadcastSender = createCollectDiagnosticsBroadcastSender();
52
- }
53
- static async collect(config = findConfigs(), services = findSystemServiceProvider(), options = {}) {
54
- const serviceDiagnostics = await services?.services?.SystemService?.getDiagnostics({
55
- keys: options.humanize ? GetDiagnosticsRequest.KEY_OPTION.HUMANIZE : options.truncate ? GetDiagnosticsRequest.KEY_OPTION.TRUNCATE : void 0
56
- }, {
57
- timeout: GET_DIAGNOSTICS_RPC_TIMEOUT
58
- });
59
- const clientDiagnostics = {
60
- config,
61
- trace: TRACE_PROCESSOR.getDiagnostics()
62
- };
63
- const diagnostics = serviceDiagnostics != null ? {
64
- client: clientDiagnostics,
65
- services: serviceDiagnostics
66
- } : {
67
- client: clientDiagnostics,
68
- broadcast: await this.broadcastSender.broadcastDiagnosticsRequest()
69
- };
70
- return JSON.parse(JSON.stringify(diagnostics, jsonKeyReplacer(options)));
71
- }
72
- };
73
- var findSystemServiceProvider = () => {
74
- const serviceProviders = TRACE_PROCESSOR.findResourcesByAnnotation(ClientServicesProviderResource);
75
- const providerResource = serviceProviders.find((r) => r.instance.deref()?.services?.SystemService != null);
76
- return providerResource?.instance?.deref() ?? null;
77
- };
78
- var findConfigs = () => {
79
- const configs = TRACE_PROCESSOR.findResourcesByAnnotation(ConfigResource);
80
- return configs.map((r) => r.instance.deref()).filter(nonNullable);
81
- };
82
-
83
- // packages/sdk/client-services/src/packlets/services/client-rpc-server.ts
84
- import { Stream } from "@dxos/codec-protobuf";
85
- import { raise } from "@dxos/debug";
86
- import { parseMethodName, RpcPeer } from "@dxos/rpc";
87
- import { MapCounter, trace } from "@dxos/tracing";
88
- function _ts_decorate(decorators, target, key, desc) {
89
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
90
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
91
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
92
- return c > 3 && r && Object.defineProperty(target, key, r), r;
93
- }
94
- var ClientRpcServer = class {
95
- constructor(params) {
96
- this._handlerCache = /* @__PURE__ */ new Map();
97
- this._callMetrics = new MapCounter();
98
- const { serviceRegistry, handleCall, handleStream, ...rpcOptions } = params;
99
- this._handleCall = handleCall;
100
- this._handleStream = handleStream;
101
- this._serviceRegistry = serviceRegistry;
102
- this._rpcPeer = new RpcPeer({
103
- ...rpcOptions,
104
- callHandler: (method, params2) => {
105
- const [serviceName, methodName] = parseMethodName(method);
106
- const handler = (method2, params3) => this._getServiceHandler(serviceName).call(method2, params3);
107
- this._callMetrics.inc(`${serviceName}.${methodName} request`);
108
- if (this._handleCall) {
109
- return this._handleCall(methodName, params2, handler);
110
- } else {
111
- return handler(methodName, params2);
112
- }
113
- },
114
- streamHandler: (method, params2) => {
115
- const [serviceName, methodName] = parseMethodName(method);
116
- const handler = (method2, params3) => this._getServiceHandler(serviceName).callStream(method2, params3);
117
- this._callMetrics.inc(`${serviceName}.${methodName} request stream`);
118
- if (this._handleStream) {
119
- return Stream.map(Stream.unwrapPromise(this._handleStream(methodName, params2, handler)), (data) => {
120
- this._callMetrics.inc(`${serviceName}.${methodName} response stream`);
121
- return data;
122
- });
123
- } else {
124
- return handler(methodName, params2);
125
- }
126
- }
127
- });
128
- }
129
- get _services() {
130
- return Object.keys(this._serviceRegistry.services);
131
- }
132
- async open() {
133
- await this._rpcPeer.open();
134
- }
135
- async close() {
136
- await this._rpcPeer.close();
137
- }
138
- _getServiceHandler(serviceName) {
139
- if (!this._handlerCache.has(serviceName)) {
140
- const [key, descriptor] = Object.entries(this._serviceRegistry.descriptors).find(([key2, descriptor2]) => descriptor2.name === serviceName) ?? raise(new Error(`Service not available: ${serviceName}`));
141
- const service = this._serviceRegistry.services[key];
142
- if (!service) {
143
- throw new Error(`Service not available: ${serviceName}`);
144
- }
145
- this._handlerCache.set(serviceName, descriptor.createServer(service));
146
- }
147
- return this._handlerCache.get(serviceName);
148
- }
149
- };
150
- _ts_decorate([
151
- trace.metricsCounter()
152
- ], ClientRpcServer.prototype, "_callMetrics", void 0);
153
- _ts_decorate([
154
- trace.info()
155
- ], ClientRpcServer.prototype, "_services", null);
156
- ClientRpcServer = _ts_decorate([
157
- trace.resource()
158
- ], ClientRpcServer);
159
-
160
- // packages/sdk/client-services/src/packlets/storage/profile-archive.ts
161
- import { cbor } from "@dxos/automerge/automerge-repo";
162
- import { invariant } from "@dxos/invariant";
163
- import { log } from "@dxos/log";
164
- import { ProfileArchiveEntryType } from "@dxos/protocols";
165
- import { arrayToBuffer } from "@dxos/util";
166
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/storage/profile-archive.ts";
167
- var encodeProfileArchive = (profile) => cbor.encode(profile);
168
- var decodeProfileArchive = (data) => cbor.decode(data);
169
- var exportProfileData = async ({ storage, level }) => {
170
- const archive = {
171
- storage: [],
172
- meta: {
173
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
174
- }
175
- };
176
- {
177
- const directory = await storage.createDirectory();
178
- const files = await directory.list();
179
- log.info("begin exporting files", {
180
- count: files.length
181
- }, {
182
- F: __dxlog_file,
183
- L: 30,
184
- S: void 0,
185
- C: (f, a) => f(...a)
186
- });
187
- for (const filename of files) {
188
- const file = await directory.getOrCreateFile(filename);
189
- const { size } = await file.stat();
190
- const data = await file.read(0, size);
191
- archive.storage.push({
192
- type: ProfileArchiveEntryType.FILE,
193
- key: filename,
194
- value: data
195
- });
196
- }
197
- log.info("done exporting files", {
198
- count: files.length
199
- }, {
200
- F: __dxlog_file,
201
- L: 41,
202
- S: void 0,
203
- C: (f, a) => f(...a)
204
- });
205
- }
206
- {
207
- log.info("begin exporting kv pairs", void 0, {
208
- F: __dxlog_file,
209
- L: 45,
210
- S: void 0,
211
- C: (f, a) => f(...a)
212
- });
213
- const iter = await level.iterator({
214
- keyEncoding: "binary",
215
- valueEncoding: "binary"
216
- });
217
- let count = 0;
218
- for await (const [key, value] of iter) {
219
- archive.storage.push({
220
- type: ProfileArchiveEntryType.KEY_VALUE,
221
- key,
222
- value
223
- });
224
- count++;
225
- }
226
- log.info("done exporting kv pairs", {
227
- count
228
- }, {
229
- F: __dxlog_file,
230
- L: 56,
231
- S: void 0,
232
- C: (f, a) => f(...a)
233
- });
234
- }
235
- return archive;
236
- };
237
- var importProfileData = async ({ storage, level }, archive) => {
238
- let batch = level.batch();
239
- let count = 0;
240
- for (const entry of archive.storage) {
241
- switch (entry.type) {
242
- case ProfileArchiveEntryType.FILE: {
243
- const directory = await storage.createDirectory();
244
- invariant(typeof entry.key === "string", "Invalid key type", {
245
- F: __dxlog_file,
246
- L: 79,
247
- S: void 0,
248
- A: [
249
- "typeof entry.key === 'string'",
250
- "'Invalid key type'"
251
- ]
252
- });
253
- const file = await directory.getOrCreateFile(entry.key);
254
- invariant(entry.value instanceof Uint8Array, "Invalid value type", {
255
- F: __dxlog_file,
256
- L: 81,
257
- S: void 0,
258
- A: [
259
- "entry.value instanceof Uint8Array",
260
- "'Invalid value type'"
261
- ]
262
- });
263
- await file.write(0, arrayToBuffer(entry.value));
264
- await file.close();
265
- break;
266
- }
267
- case ProfileArchiveEntryType.KEY_VALUE: {
268
- invariant(entry.key instanceof Uint8Array, "Invalid key type", {
269
- F: __dxlog_file,
270
- L: 87,
271
- S: void 0,
272
- A: [
273
- "entry.key instanceof Uint8Array",
274
- "'Invalid key type'"
275
- ]
276
- });
277
- invariant(entry.value instanceof Uint8Array, "Invalid value type", {
278
- F: __dxlog_file,
279
- L: 88,
280
- S: void 0,
281
- A: [
282
- "entry.value instanceof Uint8Array",
283
- "'Invalid value type'"
284
- ]
285
- });
286
- batch.put(entry.key, entry.value, {
287
- keyEncoding: "binary",
288
- valueEncoding: "binary"
289
- });
290
- break;
291
- }
292
- default:
293
- throw new Error(`Invalid entry type: ${entry.type}`);
294
- }
295
- if (++count % 1e3 === 0) {
296
- await batch.write();
297
- batch = level.batch();
298
- log.info("importing", {
299
- count,
300
- total: archive.storage.length,
301
- progress: `${(count / archive.storage.length * 100).toFixed()}%`
302
- }, {
303
- F: __dxlog_file,
304
- L: 101,
305
- S: void 0,
306
- C: (f, a) => f(...a)
307
- });
308
- }
309
- }
310
- log.info("committing changes..", void 0, {
311
- F: __dxlog_file,
312
- L: 109,
313
- S: void 0,
314
- C: (f, a) => f(...a)
315
- });
316
- await batch.write();
317
- };
46
+ } from "./chunk-Z3SSMM5X.mjs";
318
47
 
319
48
  // packages/sdk/client-services/src/packlets/worker/worker-runtime.ts
320
49
  import { Trigger as Trigger2 } from "@dxos/async";
321
50
  import { DEFAULT_WORKER_BROADCAST_CHANNEL } from "@dxos/client-protocol";
322
51
  import { Context } from "@dxos/context";
323
- import { invariant as invariant3 } from "@dxos/invariant";
324
- import { log as log3 } from "@dxos/log";
52
+ import { invariant as invariant2 } from "@dxos/invariant";
53
+ import { log as log2 } from "@dxos/log";
325
54
  import { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager, setIdentityTags } from "@dxos/messaging";
326
55
  import { RtcTransportProxyFactory } from "@dxos/network-manager";
327
56
 
328
57
  // packages/sdk/client-services/src/packlets/worker/worker-session.ts
329
58
  import { asyncTimeout, Trigger } from "@dxos/async";
330
59
  import { iframeServiceBundle, PROXY_CONNECTION_TIMEOUT, workerServiceBundle } from "@dxos/client-protocol";
331
- import { invariant as invariant2 } from "@dxos/invariant";
332
- import { log as log2, logInfo } from "@dxos/log";
60
+ import { invariant } from "@dxos/invariant";
61
+ import { log, logInfo } from "@dxos/log";
333
62
  import { createProtoRpcPeer } from "@dxos/rpc";
334
63
  import { Callback } from "@dxos/util";
335
- function _ts_decorate2(decorators, target, key, desc) {
64
+ function _ts_decorate(decorators, target, key, desc) {
336
65
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
337
66
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
338
67
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
339
68
  return c > 3 && r && Object.defineProperty(target, key, r), r;
340
69
  }
341
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/worker/worker-session.ts";
70
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/worker/worker-session.ts";
342
71
  var WorkerSession = class {
343
72
  constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }) {
344
73
  this._startTrigger = new Trigger();
345
74
  this.onClose = new Callback();
346
- invariant2(serviceHost, void 0, {
347
- F: __dxlog_file2,
75
+ invariant(serviceHost, void 0, {
76
+ F: __dxlog_file,
348
77
  L: 54,
349
78
  S: this,
350
79
  A: [
@@ -400,8 +129,8 @@ var WorkerSession = class {
400
129
  try {
401
130
  await this.close();
402
131
  } catch (err) {
403
- log2.catch(err, void 0, {
404
- F: __dxlog_file2,
132
+ log.catch(err, void 0, {
133
+ F: __dxlog_file,
405
134
  L: 108,
406
135
  S: this,
407
136
  C: (f, a) => f(...a)
@@ -417,8 +146,8 @@ var WorkerSession = class {
417
146
  this.bridgeService = this._iframeRpc.rpc.BridgeService;
418
147
  }
419
148
  async open() {
420
- log2.info("opening...", void 0, {
421
- F: __dxlog_file2,
149
+ log.info("opening...", void 0, {
150
+ F: __dxlog_file,
422
151
  L: 122,
423
152
  S: this,
424
153
  C: (f, a) => f(...a)
@@ -434,16 +163,16 @@ var WorkerSession = class {
434
163
  if (this.lockKey) {
435
164
  void this._afterLockReleases(this.lockKey, () => this.close());
436
165
  }
437
- log2.info("opened", void 0, {
438
- F: __dxlog_file2,
166
+ log.info("opened", void 0, {
167
+ F: __dxlog_file,
439
168
  L: 133,
440
169
  S: this,
441
170
  C: (f, a) => f(...a)
442
171
  });
443
172
  }
444
173
  async close() {
445
- log2.info("closing...", void 0, {
446
- F: __dxlog_file2,
174
+ log.info("closing...", void 0, {
175
+ F: __dxlog_file,
447
176
  L: 137,
448
177
  S: this,
449
178
  C: (f, a) => f(...a)
@@ -451,8 +180,8 @@ var WorkerSession = class {
451
180
  try {
452
181
  await this.onClose.callIfSet();
453
182
  } catch (err) {
454
- log2.catch(err, void 0, {
455
- F: __dxlog_file2,
183
+ log.catch(err, void 0, {
184
+ F: __dxlog_file,
456
185
  L: 141,
457
186
  S: this,
458
187
  C: (f, a) => f(...a)
@@ -462,8 +191,8 @@ var WorkerSession = class {
462
191
  this._clientRpc.close(),
463
192
  this._iframeRpc.close()
464
193
  ]);
465
- log2.info("closed", void 0, {
466
- F: __dxlog_file2,
194
+ log.info("closed", void 0, {
195
+ F: __dxlog_file,
467
196
  L: 145,
468
197
  S: this,
469
198
  C: (f, a) => f(...a)
@@ -473,8 +202,8 @@ var WorkerSession = class {
473
202
  try {
474
203
  this._shellClientRpc && await asyncTimeout(this._shellClientRpc.open(), 1e3);
475
204
  } catch {
476
- log2.info("No shell connected.", void 0, {
477
- F: __dxlog_file2,
205
+ log.info("No shell connected.", void 0, {
206
+ F: __dxlog_file,
478
207
  L: 152,
479
208
  S: this,
480
209
  C: (f, a) => f(...a)
@@ -486,15 +215,15 @@ var WorkerSession = class {
486
215
  }).then(callback);
487
216
  }
488
217
  };
489
- _ts_decorate2([
218
+ _ts_decorate([
490
219
  logInfo
491
220
  ], WorkerSession.prototype, "origin", void 0);
492
- _ts_decorate2([
221
+ _ts_decorate([
493
222
  logInfo
494
223
  ], WorkerSession.prototype, "lockKey", void 0);
495
224
 
496
225
  // packages/sdk/client-services/src/packlets/worker/worker-runtime.ts
497
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/worker/worker-runtime.ts";
226
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/worker/worker-runtime.ts";
498
227
  var WorkerRuntime = class {
499
228
  constructor({ channel = DEFAULT_WORKER_BROADCAST_CHANNEL, configProvider, acquireLock, releaseLock, onStop }) {
500
229
  this._transportFactory = new RtcTransportProxyFactory();
@@ -519,8 +248,8 @@ var WorkerRuntime = class {
519
248
  return this._clientServices;
520
249
  }
521
250
  async start() {
522
- log3("starting...", void 0, {
523
- F: __dxlog_file3,
251
+ log2("starting...", void 0, {
252
+ F: __dxlog_file2,
524
253
  L: 84,
525
254
  S: this,
526
255
  C: (f, a) => f(...a)
@@ -544,12 +273,12 @@ var WorkerRuntime = class {
544
273
  transportFactory: this._transportFactory
545
274
  });
546
275
  await this._clientServices.open(new Context(void 0, {
547
- F: __dxlog_file3,
276
+ F: __dxlog_file2,
548
277
  L: 107
549
278
  }));
550
279
  this._ready.wake(void 0);
551
- log3("started", void 0, {
552
- F: __dxlog_file3,
280
+ log2("started", void 0, {
281
+ F: __dxlog_file2,
553
282
  L: 109,
554
283
  S: this,
555
284
  C: (f, a) => f(...a)
@@ -563,8 +292,8 @@ var WorkerRuntime = class {
563
292
  });
564
293
  } catch (err) {
565
294
  this._ready.wake(err);
566
- log3.error("starting", err, {
567
- F: __dxlog_file3,
295
+ log2.error("starting", err, {
296
+ F: __dxlog_file2,
568
297
  L: 119,
569
298
  S: this,
570
299
  C: (f, a) => f(...a)
@@ -598,8 +327,8 @@ var WorkerRuntime = class {
598
327
  }
599
328
  });
600
329
  await session.open();
601
- invariant3(!this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin, `worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`, {
602
- F: __dxlog_file3,
330
+ invariant2(!this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin, `worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`, {
331
+ F: __dxlog_file2,
603
332
  L: 157,
604
333
  S: this,
605
334
  A: [
@@ -619,8 +348,8 @@ var WorkerRuntime = class {
619
348
  * Selects one of the existing session for WebRTC networking.
620
349
  */
621
350
  _reconnectWebrtc() {
622
- log3("reconnecting webrtc...", void 0, {
623
- F: __dxlog_file3,
351
+ log2("reconnecting webrtc...", void 0, {
352
+ F: __dxlog_file2,
624
353
  L: 175,
625
354
  S: this,
626
355
  C: (f, a) => f(...a)
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/packlets/diagnostics/diagnostics-collector.ts", "../../../src/packlets/services/client-rpc-server.ts", "../../../src/packlets/storage/profile-archive.ts", "../../../src/packlets/worker/worker-runtime.ts", "../../../src/packlets/worker/worker-session.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ClientServicesProvider, ClientServicesProviderResource } from '@dxos/client-protocol';\nimport { type Config, ConfigResource } from '@dxos/config';\nimport { GetDiagnosticsRequest } from '@dxos/protocols/proto/dxos/client/services';\nimport { TRACE_PROCESSOR } from '@dxos/tracing';\nimport { type JsonKeyOptions, jsonKeyReplacer, nonNullable } from '@dxos/util';\n\nimport { createCollectDiagnosticsBroadcastSender } from './diagnostics-broadcast';\n\nconst GET_DIAGNOSTICS_RPC_TIMEOUT = 10_000;\n\nexport interface CollectDiagnosticsBroadcastSender {\n broadcastDiagnosticsRequest(): any;\n}\n\nexport interface CollectDiagnosticsBroadcastHandler {\n start(): void;\n stop(): void;\n}\n\nexport class DiagnosticsCollector {\n private static broadcastSender = createCollectDiagnosticsBroadcastSender();\n\n public static async collect(\n config: Config | Config[] = findConfigs(),\n services: ClientServicesProvider | null = findSystemServiceProvider(),\n options: JsonKeyOptions = {},\n ): Promise<any> {\n const serviceDiagnostics = await services?.services?.SystemService?.getDiagnostics(\n {\n keys: options.humanize\n ? GetDiagnosticsRequest.KEY_OPTION.HUMANIZE\n : options.truncate\n ? GetDiagnosticsRequest.KEY_OPTION.TRUNCATE\n : undefined,\n },\n { timeout: GET_DIAGNOSTICS_RPC_TIMEOUT },\n );\n\n const clientDiagnostics = {\n config,\n trace: TRACE_PROCESSOR.getDiagnostics(),\n };\n\n const diagnostics =\n serviceDiagnostics != null\n ? { client: clientDiagnostics, services: serviceDiagnostics }\n : {\n client: clientDiagnostics,\n broadcast: await this.broadcastSender.broadcastDiagnosticsRequest(),\n };\n\n return JSON.parse(JSON.stringify(diagnostics, jsonKeyReplacer(options)));\n }\n}\n\nconst findSystemServiceProvider = (): ClientServicesProvider | null => {\n const serviceProviders = TRACE_PROCESSOR.findResourcesByAnnotation(ClientServicesProviderResource);\n const providerResource = serviceProviders.find((r) => r.instance.deref()?.services?.SystemService != null);\n return providerResource?.instance?.deref() ?? null;\n};\n\nconst findConfigs = (): Config[] => {\n const configs = TRACE_PROCESSOR.findResourcesByAnnotation(ConfigResource);\n return configs.map((r) => r.instance.deref()).filter(nonNullable);\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type ClientServices } from '@dxos/client-protocol';\nimport { type Any, type ServiceHandler, Stream } from '@dxos/codec-protobuf';\nimport { raise } from '@dxos/debug';\nimport { parseMethodName, RpcPeer, type RpcPeerOptions, type ServiceBundle } from '@dxos/rpc';\nimport { MapCounter, trace } from '@dxos/tracing';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { type 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\n@trace.resource()\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 @trace.metricsCounter()\n private readonly _callMetrics = new MapCounter();\n\n @trace.info()\n private get _services() {\n return Object.keys(this._serviceRegistry.services);\n }\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 this._callMetrics.inc(`${serviceName}.${methodName} request`);\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 this._callMetrics.inc(`${serviceName}.${methodName} request stream`);\n\n if (this._handleStream) {\n return Stream.map(Stream.unwrapPromise(this._handleStream(methodName, params, handler)), (data) => {\n this._callMetrics.inc(`${serviceName}.${methodName} response stream`);\n return data;\n });\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 as ServiceBundle<Record<string, any>>).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] as any;\n if (!service) {\n throw new Error(`Service not available: ${serviceName}`);\n }\n\n this._handlerCache.set(serviceName, descriptor.createServer(service));\n }\n\n return this._handlerCache.get(serviceName)!;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { cbor } from '@dxos/automerge/automerge-repo';\nimport { invariant } from '@dxos/invariant';\nimport type { LevelDB } from '@dxos/kv-store';\nimport { log } from '@dxos/log';\nimport { ProfileArchiveEntryType, type ProfileArchive } from '@dxos/protocols';\nimport type { Storage } from '@dxos/random-access-storage';\nimport { arrayToBuffer } from '@dxos/util';\n\nexport const encodeProfileArchive = (profile: ProfileArchive): Uint8Array => cbor.encode(profile);\n\nexport const decodeProfileArchive = (data: Uint8Array): ProfileArchive => cbor.decode(data);\n\nexport const exportProfileData = async ({\n storage,\n level,\n}: {\n storage: Storage;\n level: LevelDB;\n}): Promise<ProfileArchive> => {\n const archive: ProfileArchive = { storage: [], meta: { timestamp: new Date().toISOString() } };\n\n {\n const directory = await storage.createDirectory();\n const files = await directory.list();\n\n log.info('begin exporting files', { count: files.length });\n for (const filename of files) {\n const file = await directory.getOrCreateFile(filename);\n const { size } = await file.stat();\n const data = await file.read(0, size);\n archive.storage.push({\n type: ProfileArchiveEntryType.FILE,\n key: filename,\n value: data,\n });\n }\n log.info('done exporting files', { count: files.length });\n }\n\n {\n log.info('begin exporting kv pairs');\n const iter = await level.iterator<Uint8Array, Uint8Array>({ keyEncoding: 'binary', valueEncoding: 'binary' });\n let count = 0;\n for await (const [key, value] of iter) {\n archive.storage.push({\n type: ProfileArchiveEntryType.KEY_VALUE,\n key,\n value,\n });\n count++;\n }\n log.info('done exporting kv pairs', { count });\n }\n\n return archive;\n};\n\nexport const importProfileData = async (\n {\n storage,\n level,\n }: {\n storage: Storage;\n level: LevelDB;\n },\n archive: ProfileArchive,\n): Promise<void> => {\n let batch = level.batch();\n\n let count = 0;\n for (const entry of archive.storage) {\n switch (entry.type) {\n case ProfileArchiveEntryType.FILE: {\n const directory = await storage.createDirectory();\n invariant(typeof entry.key === 'string', 'Invalid key type');\n const file = await directory.getOrCreateFile(entry.key);\n invariant(entry.value instanceof Uint8Array, 'Invalid value type');\n await file.write(0, arrayToBuffer(entry.value));\n await file.close();\n break;\n }\n case ProfileArchiveEntryType.KEY_VALUE: {\n invariant(entry.key instanceof Uint8Array, 'Invalid key type');\n invariant(entry.value instanceof Uint8Array, 'Invalid value type');\n batch.put(entry.key, entry.value, { keyEncoding: 'binary', valueEncoding: 'binary' });\n break;\n }\n default:\n throw new Error(`Invalid entry type: ${entry.type}`);\n }\n\n if (++count % 1000 === 0) {\n // Apparently indexedDB can't handle big batches.\n await batch.write();\n batch = level.batch();\n\n log.info('importing', {\n count,\n total: archive.storage.length,\n progress: `${((count / archive.storage.length) * 100).toFixed()}%`,\n });\n }\n }\n\n log.info('committing changes..');\n await batch.write();\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { DEFAULT_WORKER_BROADCAST_CHANNEL } from '@dxos/client-protocol';\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 { RtcTransportProxyFactory } 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 WorkerRuntimeOptions = {\n channel?: string;\n configProvider: () => MaybePromise<Config>;\n acquireLock: () => Promise<void>;\n releaseLock: () => void;\n onStop?: () => 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 _configProvider: () => MaybePromise<Config>;\n private readonly _acquireLock: () => Promise<void>;\n private readonly _releaseLock: () => void;\n private readonly _onStop?: () => Promise<void>;\n private readonly _transportFactory = new RtcTransportProxyFactory();\n private readonly _ready = new Trigger<Error | undefined>();\n private readonly _sessions = new Set<WorkerSession>();\n private readonly _clientServices!: ClientServicesHost;\n private readonly _channel: string;\n private _broadcastChannel?: BroadcastChannel;\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 channel = DEFAULT_WORKER_BROADCAST_CHANNEL,\n configProvider,\n acquireLock,\n releaseLock,\n onStop,\n }: WorkerRuntimeOptions) {\n this._configProvider = configProvider;\n this._acquireLock = acquireLock;\n this._releaseLock = releaseLock;\n this._onStop = onStop;\n this._channel = channel;\n this._clientServices = new ClientServicesHost({\n callbacks: {\n onReset: async () => this.stop(),\n },\n });\n }\n\n get host() {\n return this._clientServices;\n }\n\n async start() {\n log('starting...');\n try {\n this._broadcastChannel = new BroadcastChannel(this._channel);\n this._broadcastChannel.postMessage({ action: 'stop' });\n this._broadcastChannel.onmessage = async (event) => {\n if (event.data?.action === 'stop') {\n await this.stop();\n }\n };\n\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: this._config.get('runtime.client.edgeFeatures')?.signaling\n ? undefined\n : 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 this._broadcastChannel?.close();\n this._broadcastChannel = undefined;\n await this._clientServices.close();\n await this._onStop?.();\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 await this.stop();\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": "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",
6
- "names": ["ClientServicesProviderResource", "ConfigResource", "GetDiagnosticsRequest", "TRACE_PROCESSOR", "jsonKeyReplacer", "nonNullable", "GET_DIAGNOSTICS_RPC_TIMEOUT", "DiagnosticsCollector", "broadcastSender", "createCollectDiagnosticsBroadcastSender", "collect", "config", "findConfigs", "services", "findSystemServiceProvider", "options", "serviceDiagnostics", "SystemService", "getDiagnostics", "keys", "humanize", "GetDiagnosticsRequest", "KEY_OPTION", "HUMANIZE", "truncate", "TRUNCATE", "undefined", "timeout", "clientDiagnostics", "trace", "TRACE_PROCESSOR", "diagnostics", "client", "broadcast", "broadcastDiagnosticsRequest", "JSON", "parse", "stringify", "jsonKeyReplacer", "serviceProviders", "findResourcesByAnnotation", "ClientServicesProviderResource", "providerResource", "find", "r", "instance", "deref", "configs", "ConfigResource", "map", "filter", "nonNullable", "Stream", "raise", "parseMethodName", "RpcPeer", "MapCounter", "trace", "ClientRpcServer", "constructor", "params", "_handlerCache", "Map", "_callMetrics", "MapCounter", "serviceRegistry", "handleCall", "handleStream", "rpcOptions", "_handleCall", "_handleStream", "_serviceRegistry", "_rpcPeer", "RpcPeer", "callHandler", "method", "serviceName", "methodName", "parseMethodName", "handler", "_getServiceHandler", "call", "inc", "streamHandler", "callStream", "Stream", "map", "unwrapPromise", "data", "_services", "Object", "keys", "services", "open", "close", "has", "key", "descriptor", "entries", "descriptors", "find", "name", "raise", "Error", "service", "set", "createServer", "get", "trace", "metricsCounter", "info", "resource", "cbor", "invariant", "log", "ProfileArchiveEntryType", "arrayToBuffer", "encodeProfileArchive", "profile", "encode", "decodeProfileArchive", "data", "decode", "exportProfileData", "storage", "level", "archive", "meta", "timestamp", "Date", "toISOString", "directory", "createDirectory", "files", "list", "info", "count", "length", "filename", "file", "getOrCreateFile", "size", "stat", "read", "push", "type", "FILE", "key", "value", "iter", "iterator", "keyEncoding", "valueEncoding", "KEY_VALUE", "importProfileData", "batch", "entry", "Uint8Array", "write", "close", "put", "Error", "total", "progress", "toFixed", "Trigger", "DEFAULT_WORKER_BROADCAST_CHANNEL", "Context", "invariant", "log", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "setIdentityTags", "RtcTransportProxyFactory", "asyncTimeout", "Trigger", "iframeServiceBundle", "PROXY_CONNECTION_TIMEOUT", "workerServiceBundle", "invariant", "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", "undefined", "_iframeRpc", "createProtoRpcPeer", "requested", "iframeServiceBundle", "exposed", "workerServiceBundle", "handlers", "WorkerService", "start", "request", "origin", "lockKey", "observabilityGroup", "signalTelemetryEnabled", "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", "channel", "DEFAULT_WORKER_BROADCAST_CHANNEL", "configProvider", "acquireLock", "releaseLock", "onStop", "_transportFactory", "RtcTransportProxyFactory", "_ready", "Trigger", "_sessions", "Set", "_signalMetadataTags", "runtime", "_signalTelemetryEnabled", "_configProvider", "_acquireLock", "_releaseLock", "_onStop", "_channel", "_clientServices", "ClientServicesHost", "callbacks", "onReset", "stop", "host", "start", "log", "_broadcastChannel", "BroadcastChannel", "postMessage", "action", "onmessage", "event", "data", "_config", "signals", "get", "initialize", "config", "signalManager", "signaling", "undefined", "WebsocketSignalManager", "MemorySignalManager", "MemorySignalManagerContext", "transportFactory", "open", "Context", "wake", "setIdentityTags", "identityService", "services", "IdentityService", "devicesService", "DevicesService", "setTag", "k", "v", "err", "error", "close", "createSession", "appPort", "systemPort", "shellPort", "session", "WorkerSession", "serviceHost", "readySignal", "onClose", "set", "delete", "size", "_reconnectWebrtc", "invariant", "origin", "observabilityGroup", "group", "signalTelemetryEnabled", "add", "_sessionForNetworking", "has", "selected", "Array", "from", "find", "bridgeService", "setBridgeService"]
3
+ "sources": ["../../../src/packlets/worker/worker-runtime.ts", "../../../src/packlets/worker/worker-session.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { DEFAULT_WORKER_BROADCAST_CHANNEL } from '@dxos/client-protocol';\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 { RtcTransportProxyFactory } 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 WorkerRuntimeOptions = {\n channel?: string;\n configProvider: () => MaybePromise<Config>;\n acquireLock: () => Promise<void>;\n releaseLock: () => void;\n onStop?: () => 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 _configProvider: () => MaybePromise<Config>;\n private readonly _acquireLock: () => Promise<void>;\n private readonly _releaseLock: () => void;\n private readonly _onStop?: () => Promise<void>;\n private readonly _transportFactory = new RtcTransportProxyFactory();\n private readonly _ready = new Trigger<Error | undefined>();\n private readonly _sessions = new Set<WorkerSession>();\n private readonly _clientServices!: ClientServicesHost;\n private readonly _channel: string;\n private _broadcastChannel?: BroadcastChannel;\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 channel = DEFAULT_WORKER_BROADCAST_CHANNEL,\n configProvider,\n acquireLock,\n releaseLock,\n onStop,\n }: WorkerRuntimeOptions) {\n this._configProvider = configProvider;\n this._acquireLock = acquireLock;\n this._releaseLock = releaseLock;\n this._onStop = onStop;\n this._channel = channel;\n this._clientServices = new ClientServicesHost({\n callbacks: {\n onReset: async () => this.stop(),\n },\n });\n }\n\n get host() {\n return this._clientServices;\n }\n\n async start() {\n log('starting...');\n try {\n this._broadcastChannel = new BroadcastChannel(this._channel);\n this._broadcastChannel.postMessage({ action: 'stop' });\n this._broadcastChannel.onmessage = async (event) => {\n if (event.data?.action === 'stop') {\n await this.stop();\n }\n };\n\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: this._config.get('runtime.client.edgeFeatures')?.signaling\n ? undefined\n : 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 this._broadcastChannel?.close();\n this._broadcastChannel = undefined;\n await this._clientServices.close();\n await this._onStop?.();\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 await this.stop();\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": "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",
6
+ "names": ["Trigger", "DEFAULT_WORKER_BROADCAST_CHANNEL", "Context", "invariant", "log", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "setIdentityTags", "RtcTransportProxyFactory", "asyncTimeout", "Trigger", "iframeServiceBundle", "PROXY_CONNECTION_TIMEOUT", "workerServiceBundle", "invariant", "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", "undefined", "_iframeRpc", "createProtoRpcPeer", "requested", "iframeServiceBundle", "exposed", "workerServiceBundle", "handlers", "WorkerService", "start", "request", "origin", "lockKey", "observabilityGroup", "signalTelemetryEnabled", "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", "channel", "DEFAULT_WORKER_BROADCAST_CHANNEL", "configProvider", "acquireLock", "releaseLock", "onStop", "_transportFactory", "RtcTransportProxyFactory", "_ready", "Trigger", "_sessions", "Set", "_signalMetadataTags", "runtime", "_signalTelemetryEnabled", "_configProvider", "_acquireLock", "_releaseLock", "_onStop", "_channel", "_clientServices", "ClientServicesHost", "callbacks", "onReset", "stop", "host", "start", "log", "_broadcastChannel", "BroadcastChannel", "postMessage", "action", "onmessage", "event", "data", "_config", "signals", "get", "initialize", "config", "signalManager", "signaling", "undefined", "WebsocketSignalManager", "MemorySignalManager", "MemorySignalManagerContext", "transportFactory", "open", "Context", "wake", "setIdentityTags", "identityService", "services", "IdentityService", "devicesService", "DevicesService", "setTag", "k", "v", "err", "error", "close", "createSession", "appPort", "systemPort", "shellPort", "session", "WorkerSession", "serviceHost", "readySignal", "onClose", "set", "delete", "size", "_reconnectWebrtc", "invariant", "origin", "observabilityGroup", "group", "signalTelemetryEnabled", "add", "_sessionForNetworking", "has", "selected", "Array", "from", "find", "bridgeService", "setBridgeService"]
7
7
  }