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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/dist/lib/browser/{chunk-7PYX6UUA.mjs → chunk-7S34JE6M.mjs} +980 -656
  2. package/dist/lib/browser/chunk-7S34JE6M.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +60 -22
  4. package/dist/lib/browser/index.mjs.map +3 -3
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/packlets/testing/index.mjs +12 -5
  7. package/dist/lib/browser/packlets/testing/index.mjs.map +3 -3
  8. package/dist/lib/node/{chunk-4TX623I7.cjs → chunk-DQMGKBOV.cjs} +922 -685
  9. package/dist/lib/node/chunk-DQMGKBOV.cjs.map +7 -0
  10. package/dist/lib/node/index.cjs +96 -58
  11. package/dist/lib/node/index.cjs.map +3 -3
  12. package/dist/lib/node/meta.json +1 -1
  13. package/dist/lib/node/packlets/testing/index.cjs +16 -9
  14. package/dist/lib/node/packlets/testing/index.cjs.map +3 -3
  15. package/dist/types/src/index.d.ts +1 -0
  16. package/dist/types/src/index.d.ts.map +1 -1
  17. package/dist/types/src/packlets/diagnostics/browser-diagnostics-broadcast.d.ts +5 -0
  18. package/dist/types/src/packlets/diagnostics/browser-diagnostics-broadcast.d.ts.map +1 -0
  19. package/dist/types/src/packlets/diagnostics/diagnostics-broadcast.d.ts +5 -0
  20. package/dist/types/src/packlets/diagnostics/diagnostics-broadcast.d.ts.map +1 -0
  21. package/dist/types/src/packlets/diagnostics/diagnostics-collector.d.ts +15 -0
  22. package/dist/types/src/packlets/diagnostics/diagnostics-collector.d.ts.map +1 -0
  23. package/dist/types/src/packlets/{services → diagnostics}/diagnostics.d.ts +1 -1
  24. package/dist/types/src/packlets/diagnostics/diagnostics.d.ts.map +1 -0
  25. package/dist/types/src/packlets/diagnostics/index.d.ts +4 -0
  26. package/dist/types/src/packlets/diagnostics/index.d.ts.map +1 -0
  27. package/dist/types/src/packlets/indexing/util.d.ts +3 -2
  28. package/dist/types/src/packlets/indexing/util.d.ts.map +1 -1
  29. package/dist/types/src/packlets/invitations/invitation-extension.d.ts +1 -0
  30. package/dist/types/src/packlets/invitations/invitation-extension.d.ts.map +1 -1
  31. package/dist/types/src/packlets/invitations/invitations-handler.d.ts +4 -2
  32. package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
  33. package/dist/types/src/packlets/invitations/invitations-service.d.ts.map +1 -1
  34. package/dist/types/src/packlets/services/index.d.ts +1 -1
  35. package/dist/types/src/packlets/services/index.d.ts.map +1 -1
  36. package/dist/types/src/packlets/services/service-context.d.ts +7 -5
  37. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  38. package/dist/types/src/packlets/services/service-host.d.ts +5 -1
  39. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  40. package/dist/types/src/packlets/services/util.d.ts +1 -0
  41. package/dist/types/src/packlets/services/util.d.ts.map +1 -1
  42. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  43. package/dist/types/src/packlets/storage/index.d.ts +1 -0
  44. package/dist/types/src/packlets/storage/index.d.ts.map +1 -1
  45. package/dist/types/src/packlets/storage/level.d.ts +4 -0
  46. package/dist/types/src/packlets/storage/level.d.ts.map +1 -0
  47. package/dist/types/src/packlets/storage/storage.d.ts.map +1 -1
  48. package/dist/types/src/packlets/storage/util.d.ts +4 -0
  49. package/dist/types/src/packlets/storage/util.d.ts.map +1 -0
  50. package/dist/types/src/packlets/system/system-service.d.ts +1 -1
  51. package/dist/types/src/packlets/system/system-service.d.ts.map +1 -1
  52. package/dist/types/src/packlets/testing/test-builder.d.ts +4 -2
  53. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  54. package/dist/types/src/packlets/vault/shared-worker-connection.d.ts +5 -5
  55. package/dist/types/src/packlets/vault/shared-worker-connection.d.ts.map +1 -1
  56. package/dist/types/src/packlets/vault/worker-runtime.d.ts +2 -0
  57. package/dist/types/src/packlets/vault/worker-runtime.d.ts.map +1 -1
  58. package/dist/types/src/packlets/vault/worker-session.d.ts +2 -0
  59. package/dist/types/src/packlets/vault/worker-session.d.ts.map +1 -1
  60. package/dist/types/src/version.d.ts +1 -1
  61. package/package.json +36 -34
  62. package/src/index.ts +1 -0
  63. package/src/packlets/devices/devices-service.test.ts +1 -1
  64. package/src/packlets/diagnostics/browser-diagnostics-broadcast.ts +94 -0
  65. package/src/packlets/diagnostics/diagnostics-broadcast.ts +20 -0
  66. package/src/packlets/diagnostics/diagnostics-collector.ts +65 -0
  67. package/src/packlets/{services → diagnostics}/diagnostics.ts +2 -2
  68. package/src/packlets/diagnostics/index.ts +7 -0
  69. package/src/packlets/identity/identity-service.test.ts +1 -1
  70. package/src/packlets/indexing/util.ts +6 -6
  71. package/src/packlets/invitations/device-invitation-protocol.test.ts +1 -1
  72. package/src/packlets/invitations/invitation-extension.ts +28 -1
  73. package/src/packlets/invitations/invitations-handler.ts +73 -32
  74. package/src/packlets/invitations/invitations-service.ts +5 -5
  75. package/src/packlets/network/network-service.test.ts +1 -1
  76. package/src/packlets/services/automerge-host.test.ts +9 -3
  77. package/src/packlets/services/index.ts +1 -1
  78. package/src/packlets/services/service-context.test.ts +9 -6
  79. package/src/packlets/services/service-context.ts +18 -11
  80. package/src/packlets/services/service-host.ts +52 -9
  81. package/src/packlets/services/service-registry.test.ts +1 -1
  82. package/src/packlets/services/util.ts +2 -0
  83. package/src/packlets/spaces/data-space-manager.test.ts +4 -4
  84. package/src/packlets/spaces/data-space.ts +51 -2
  85. package/src/packlets/spaces/spaces-service.test.ts +1 -1
  86. package/src/packlets/storage/index.ts +1 -0
  87. package/src/packlets/storage/level.ts +19 -0
  88. package/src/packlets/storage/storage.ts +3 -9
  89. package/src/packlets/storage/util.ts +19 -0
  90. package/src/packlets/system/system-service.ts +1 -1
  91. package/src/packlets/testing/test-builder.ts +23 -5
  92. package/src/packlets/vault/shared-worker-connection.ts +3 -8
  93. package/src/packlets/vault/worker-runtime.ts +27 -2
  94. package/src/packlets/vault/worker-session.ts +6 -0
  95. package/src/version.ts +1 -1
  96. package/dist/lib/browser/chunk-7PYX6UUA.mjs.map +0 -7
  97. package/dist/lib/node/chunk-4TX623I7.cjs.map +0 -7
  98. package/dist/types/src/packlets/services/diagnostics.d.ts.map +0 -1
@@ -6,7 +6,15 @@ import { type Config } from '@dxos/config';
6
6
  import { Context } from '@dxos/context';
7
7
  import { createCredentialSignerWithChain, CredentialGenerator } from '@dxos/credentials';
8
8
  import { failUndefined } from '@dxos/debug';
9
- import { AutomergeHost, MetadataStore, SnapshotStore, SpaceManager, valueEncoding } from '@dxos/echo-pipeline';
9
+ import {
10
+ AutomergeHost,
11
+ MetadataStore,
12
+ type LevelDB,
13
+ SnapshotStore,
14
+ SpaceManager,
15
+ valueEncoding,
16
+ } from '@dxos/echo-pipeline';
17
+ import { createTestLevel } from '@dxos/echo-pipeline/testing';
10
18
  import { FeedFactory, FeedStore } from '@dxos/feed-store';
11
19
  import { Keyring } from '@dxos/keyring';
12
20
  import { MemorySignalManager, MemorySignalManagerContext } from '@dxos/messaging';
@@ -29,7 +37,7 @@ export const createServiceHost = (config: Config, signalManagerContext: MemorySi
29
37
  });
30
38
  };
31
39
 
32
- export const createServiceContext = ({
40
+ export const createServiceContext = async ({
33
41
  signalContext = new MemorySignalManagerContext(),
34
42
  storage = createStorage({ type: StorageType.RAM }),
35
43
  }: {
@@ -41,8 +49,10 @@ export const createServiceContext = ({
41
49
  signalManager,
42
50
  transportFactory: MemoryTransportFactory,
43
51
  });
52
+ const level = createTestLevel();
53
+ await level.open();
44
54
 
45
- return new ServiceContext(storage, networkManager, signalManager);
55
+ return new ServiceContext(storage, level, networkManager, signalManager);
46
56
  };
47
57
 
48
58
  export const createPeers = async (numPeers: number) => {
@@ -50,7 +60,7 @@ export const createPeers = async (numPeers: number) => {
50
60
 
51
61
  return await Promise.all(
52
62
  Array.from(Array(numPeers)).map(async () => {
53
- const peer = createServiceContext({ signalContext });
63
+ const peer = await createServiceContext({ signalContext });
54
64
  await peer.open(new Context());
55
65
  return peer;
56
66
  }),
@@ -83,6 +93,7 @@ export type TestPeerOpts = {
83
93
 
84
94
  export type TestPeerProps = {
85
95
  storage?: Storage;
96
+ level?: LevelDB;
86
97
  feedStore?: FeedStore<any>;
87
98
  metadataStore?: MetadataStore;
88
99
  keyring?: Keyring;
@@ -115,6 +126,10 @@ export class TestPeer {
115
126
  return (this._props.keyring ??= new Keyring(this.storage.createDirectory('keyring')));
116
127
  }
117
128
 
129
+ get level() {
130
+ return (this._props.level ??= createTestLevel());
131
+ }
132
+
118
133
  get feedStore() {
119
134
  return (this._props.feedStore ??= new FeedStore({
120
135
  factory: new FeedFactory({
@@ -161,7 +176,9 @@ export class TestPeer {
161
176
  }
162
177
 
163
178
  get automergeHost() {
164
- return (this._props.automergeHost ??= new AutomergeHost({ directory: this.storage.createDirectory('automerge') }));
179
+ return (this._props.automergeHost ??= new AutomergeHost({
180
+ db: this.level.sublevel('automerge'),
181
+ }));
165
182
  }
166
183
 
167
184
  get dataSpaceManager() {
@@ -180,6 +197,7 @@ export class TestPeer {
180
197
  }
181
198
 
182
199
  async destroy() {
200
+ await this.level.close();
183
201
  await this.storage.reset();
184
202
  }
185
203
  }
@@ -57,12 +57,7 @@ export class SharedWorkerConnection {
57
57
  return this._shellRuntime;
58
58
  }
59
59
 
60
- async open(
61
- /**
62
- * @deprecated Only used with iframes.
63
- */
64
- origin: string,
65
- ) {
60
+ async open(params: { origin: string; observabilityGroup?: string; signalTelemetryEnabled?: boolean }) {
66
61
  this._config = await getAsyncValue(this._configProvider);
67
62
 
68
63
  this._transportService = new SimplePeerTransportService({
@@ -83,7 +78,7 @@ export class SharedWorkerConnection {
83
78
 
84
79
  let lockKey: string | undefined;
85
80
  if (typeof navigator !== 'undefined') {
86
- lockKey = this._lockKey(origin);
81
+ lockKey = this._lockKey(params.origin);
87
82
  this._release = new Trigger();
88
83
  const ready = new Trigger();
89
84
  void navigator.locks.request(lockKey, async () => {
@@ -95,7 +90,7 @@ export class SharedWorkerConnection {
95
90
 
96
91
  try {
97
92
  await this._systemRpc.open();
98
- await this._systemRpc.rpc.WorkerService.start({ origin, lockKey });
93
+ await this._systemRpc.rpc.WorkerService.start({ lockKey, ...params });
99
94
  } catch (err) {
100
95
  log.catch(err);
101
96
  throw new RemoteServiceConnectionError('Failed to connect to worker');
@@ -5,8 +5,14 @@
5
5
  import { Trigger } from '@dxos/async';
6
6
  import { type Config } from '@dxos/config';
7
7
  import { Context } from '@dxos/context';
8
+ import { invariant } from '@dxos/invariant';
8
9
  import { log } from '@dxos/log';
9
- import { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';
10
+ import {
11
+ MemorySignalManager,
12
+ MemorySignalManagerContext,
13
+ WebsocketSignalManager,
14
+ setIdentityTags,
15
+ } from '@dxos/messaging';
10
16
  import { SimplePeerTransportProxyFactory } from '@dxos/network-manager';
11
17
  import { type RpcPort } from '@dxos/rpc';
12
18
  import { type MaybePromise } from '@dxos/util';
@@ -41,6 +47,8 @@ export class WorkerRuntime {
41
47
  private readonly _clientServices!: ClientServicesHost;
42
48
  private _sessionForNetworking?: WorkerSession; // TODO(burdon): Expose to client QueryStatusResponse.
43
49
  private _config!: Config;
50
+ private _signalMetadataTags: any = { runtime: 'worker-runtime' };
51
+ private _signalTelemetryEnabled: boolean = false;
44
52
 
45
53
  constructor(
46
54
  private readonly _configProvider: () => MaybePromise<Config>,
@@ -68,7 +76,7 @@ export class WorkerRuntime {
68
76
  this._clientServices.initialize({
69
77
  config: this._config,
70
78
  signalManager: signals
71
- ? new WebsocketSignalManager(signals)
79
+ ? new WebsocketSignalManager(signals, () => (this._signalTelemetryEnabled ? this._signalMetadataTags : {}))
72
80
  : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.
73
81
  transportFactory: this._transportFactory,
74
82
  });
@@ -76,6 +84,13 @@ export class WorkerRuntime {
76
84
  await this._clientServices.open(new Context());
77
85
  this._ready.wake(undefined);
78
86
  log('started');
87
+ setIdentityTags({
88
+ identityService: this._clientServices.services.IdentityService!,
89
+ devicesService: this._clientServices.services.DevicesService!,
90
+ setTag: (k: string, v: string) => {
91
+ this._signalMetadataTags[k] = v;
92
+ },
93
+ });
79
94
  } catch (err: any) {
80
95
  this._ready.wake(err);
81
96
  log.error('starting', err);
@@ -112,6 +127,16 @@ export class WorkerRuntime {
112
127
  });
113
128
 
114
129
  await session.open();
130
+ // A worker can only service one origin currently
131
+ invariant(
132
+ !this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin,
133
+ `worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`,
134
+ );
135
+ if (session.observabilityGroup) {
136
+ this._signalMetadataTags.group = session.observabilityGroup;
137
+ }
138
+ this._signalTelemetryEnabled = session.signalTelemetryEnabled ?? false;
139
+ this._signalMetadataTags.origin = session.origin;
115
140
  this._sessions.add(session);
116
141
 
117
142
  this._reconnectWebrtc();
@@ -41,6 +41,10 @@ export class WorkerSession {
41
41
  @logInfo
42
42
  public origin?: string;
43
43
 
44
+ // TODO(nf): factor out?
45
+ public observabilityGroup?: string;
46
+ public signalTelemetryEnabled?: boolean;
47
+
44
48
  @logInfo
45
49
  public lockKey?: string;
46
50
 
@@ -91,6 +95,8 @@ export class WorkerSession {
91
95
  start: async (request) => {
92
96
  this.origin = request.origin;
93
97
  this.lockKey = request.lockKey;
98
+ this.observabilityGroup = request.observabilityGroup;
99
+ this.signalTelemetryEnabled = request.signalTelemetryEnabled;
94
100
  this._startTrigger.wake();
95
101
  },
96
102
 
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const DXOS_VERSION = "0.4.10-main.fa5a270";
1
+ export const DXOS_VERSION = "0.4.10-main.fe71b4c";