@dxos/client-services 0.8.2-main.fbd8ed0 → 0.8.2-staging.7ac8446

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 (73) hide show
  1. package/dist/lib/browser/{chunk-I3QLQXQD.mjs → chunk-2TKMQ2UP.mjs} +167 -170
  2. package/dist/lib/browser/chunk-2TKMQ2UP.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +1 -1
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/testing/index.mjs +1 -1
  6. package/dist/lib/node/{chunk-Y747YVDI.cjs → chunk-HUMVSL5Y.cjs} +336 -339
  7. package/dist/lib/node/chunk-HUMVSL5Y.cjs.map +7 -0
  8. package/dist/lib/node/index.cjs +47 -47
  9. package/dist/lib/node/meta.json +1 -1
  10. package/dist/lib/node/testing/index.cjs +8 -8
  11. package/dist/lib/node-esm/{chunk-XNCWQTDB.mjs → chunk-DQCPFIVI.mjs} +167 -170
  12. package/dist/lib/node-esm/chunk-DQCPFIVI.mjs.map +7 -0
  13. package/dist/lib/node-esm/index.mjs +1 -1
  14. package/dist/lib/node-esm/meta.json +1 -1
  15. package/dist/lib/node-esm/testing/index.mjs +1 -1
  16. package/dist/types/src/packlets/agents/edge-agent-service.d.ts +1 -1
  17. package/dist/types/src/packlets/agents/edge-agent-service.d.ts.map +1 -1
  18. package/dist/types/src/packlets/devices/devices-service.d.ts.map +1 -1
  19. package/dist/types/src/packlets/devtools/feeds.d.ts.map +1 -1
  20. package/dist/types/src/packlets/devtools/keys.d.ts.map +1 -1
  21. package/dist/types/src/packlets/devtools/metadata.d.ts.map +1 -1
  22. package/dist/types/src/packlets/devtools/network.d.ts.map +1 -1
  23. package/dist/types/src/packlets/devtools/spaces.d.ts.map +1 -1
  24. package/dist/types/src/packlets/diagnostics/browser-diagnostics-broadcast.d.ts.map +1 -1
  25. package/dist/types/src/packlets/diagnostics/diagnostics-broadcast.d.ts.map +1 -1
  26. package/dist/types/src/packlets/diagnostics/diagnostics.d.ts.map +1 -1
  27. package/dist/types/src/packlets/identity/authenticator.d.ts.map +1 -1
  28. package/dist/types/src/packlets/invitations/invitation-host-extension.d.ts.map +1 -1
  29. package/dist/types/src/packlets/invitations/invitation-state.d.ts.map +1 -1
  30. package/dist/types/src/packlets/invitations/utils.d.ts.map +1 -1
  31. package/dist/types/src/packlets/locks/browser.d.ts.map +1 -1
  32. package/dist/types/src/packlets/locks/node.d.ts.map +1 -1
  33. package/dist/types/src/packlets/network/network-service.d.ts +1 -3
  34. package/dist/types/src/packlets/network/network-service.d.ts.map +1 -1
  35. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  36. package/dist/types/src/packlets/services/util.d.ts.map +1 -1
  37. package/dist/types/src/packlets/space-export/space-archive-reader.d.ts +1 -1
  38. package/dist/types/src/packlets/space-export/space-archive-reader.d.ts.map +1 -1
  39. package/dist/types/src/packlets/spaces/data-space-manager.d.ts +1 -1
  40. package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
  41. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  42. package/dist/types/src/packlets/spaces/edge-feed-replicator.d.ts.map +1 -1
  43. package/dist/types/src/packlets/spaces/epoch-migrations.d.ts.map +1 -1
  44. package/dist/types/src/packlets/spaces/genesis.d.ts.map +1 -1
  45. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  46. package/dist/types/src/packlets/storage/level.d.ts.map +1 -1
  47. package/dist/types/src/packlets/storage/profile-archive.d.ts.map +1 -1
  48. package/dist/types/src/packlets/storage/storage.d.ts.map +1 -1
  49. package/dist/types/src/packlets/storage/util.d.ts.map +1 -1
  50. package/dist/types/src/packlets/testing/credential-utils.d.ts.map +1 -1
  51. package/dist/types/src/packlets/testing/invitation-utils.d.ts.map +1 -1
  52. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  53. package/dist/types/src/version.d.ts +1 -1
  54. package/dist/types/src/version.d.ts.map +1 -1
  55. package/dist/types/tsconfig.tsbuildinfo +1 -1
  56. package/package.json +38 -39
  57. package/src/packlets/agents/edge-agent-service.ts +11 -8
  58. package/src/packlets/devices/devices-service.ts +3 -5
  59. package/src/packlets/identity/identity.test.ts +6 -9
  60. package/src/packlets/network/network-service.ts +15 -9
  61. package/src/packlets/services/service-host.ts +1 -5
  62. package/src/packlets/space-export/space-archive-reader.ts +1 -2
  63. package/src/packlets/spaces/data-space-manager.ts +29 -35
  64. package/src/packlets/spaces/data-space.ts +4 -11
  65. package/src/packlets/spaces/edge-feed-replicator.test.ts +1 -2
  66. package/src/packlets/spaces/edge-feed-replicator.ts +1 -2
  67. package/src/packlets/spaces/epoch-migrations.ts +2 -3
  68. package/src/packlets/spaces/spaces-service.ts +1 -2
  69. package/src/packlets/storage/profile-archive.ts +1 -2
  70. package/src/version.ts +1 -1
  71. package/dist/lib/browser/chunk-I3QLQXQD.mjs.map +0 -7
  72. package/dist/lib/node/chunk-Y747YVDI.cjs.map +0 -7
  73. package/dist/lib/node-esm/chunk-XNCWQTDB.mjs.map +0 -7
@@ -3,7 +3,6 @@
3
3
  //
4
4
 
5
5
  import { Stream } from '@dxos/codec-protobuf/stream';
6
- import { type EdgeConnection } from '@dxos/edge-client';
7
6
  import { type SignalManager } from '@dxos/messaging';
8
7
  import { type SwarmNetworkManager } from '@dxos/network-manager';
9
8
  import {
@@ -24,11 +23,10 @@ export class NetworkServiceImpl implements NetworkService {
24
23
  constructor(
25
24
  private readonly networkManager: SwarmNetworkManager,
26
25
  private readonly signalManager: SignalManager,
27
- private readonly edgeConnection?: EdgeConnection,
28
26
  ) {}
29
27
 
30
28
  queryStatus() {
31
- return new Stream<NetworkStatus>(({ ctx, next }) => {
29
+ return new Stream<NetworkStatus>(({ next }) => {
32
30
  const update = () => {
33
31
  next({
34
32
  swarm: this.networkManager.connectionState,
@@ -37,9 +35,14 @@ export class NetworkServiceImpl implements NetworkService {
37
35
  });
38
36
  };
39
37
 
40
- this.networkManager.connectionStateChanged.on(ctx, () => update());
41
- this.signalManager.statusChanged?.on(ctx, () => update());
38
+ const unsubscribeSwarm = this.networkManager.connectionStateChanged.on(() => update());
39
+ const unsubscribeSignal = this.signalManager.statusChanged?.on(() => update());
42
40
  update();
41
+
42
+ return () => {
43
+ unsubscribeSwarm();
44
+ unsubscribeSignal?.();
45
+ };
43
46
  });
44
47
  }
45
48
 
@@ -60,12 +63,13 @@ export class NetworkServiceImpl implements NetworkService {
60
63
  }
61
64
 
62
65
  subscribeSwarmState(request: SubscribeSwarmStateRequest): Stream<SwarmResponse> {
63
- return new Stream<SwarmResponse>(({ ctx, next }) => {
64
- this.signalManager.swarmState?.on(ctx, (state) => {
66
+ return new Stream<SwarmResponse>(({ next }) => {
67
+ const unsubscribe = this.signalManager.swarmState?.on((state) => {
65
68
  if (request.topic.equals(state.swarmKey)) {
66
69
  next(state);
67
70
  }
68
71
  });
72
+ return unsubscribe;
69
73
  });
70
74
  }
71
75
 
@@ -74,12 +78,14 @@ export class NetworkServiceImpl implements NetworkService {
74
78
  }
75
79
 
76
80
  subscribeMessages(peer: Peer): Stream<Message> {
77
- return new Stream<Message>(({ ctx, next }) => {
78
- this.signalManager.onMessage.on(ctx, (message) => {
81
+ return new Stream<Message>(({ next }) => {
82
+ const unsubscribe = this.signalManager.onMessage.on((message) => {
79
83
  if (message.recipient.peerKey === peer.peerKey) {
80
84
  next(message);
81
85
  }
82
86
  });
87
+
88
+ return unsubscribe;
83
89
  });
84
90
  }
85
91
  }
@@ -329,11 +329,7 @@ export class ClientServicesHost {
329
329
  DataService: this._serviceContext.echoHost.dataService,
330
330
  QueryService: this._serviceContext.echoHost.queryService,
331
331
 
332
- NetworkService: new NetworkServiceImpl(
333
- this._serviceContext.networkManager,
334
- this._serviceContext.signalManager,
335
- this._edgeConnection,
336
- ),
332
+ NetworkService: new NetworkServiceImpl(this._serviceContext.networkManager, this._serviceContext.signalManager),
337
333
 
338
334
  LoggingService: this._loggingService,
339
335
  TracingService: this._tracingService,
@@ -2,8 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import type { DocumentId } from '@automerge/automerge-repo';
6
-
5
+ import type { DocumentId } from '@dxos/automerge/automerge-repo';
7
6
  import { assertArgument, failedInvariant, invariant } from '@dxos/invariant';
8
7
  import { log } from '@dxos/log';
9
8
  import { SpaceArchiveFileStructure, type SpaceArchiveMetadata } from '@dxos/protocols';
@@ -2,10 +2,14 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import { type Doc } from '@automerge/automerge';
6
- import { interpretAsDocumentId, type AutomergeUrl, type DocHandle, type DocumentId } from '@automerge/automerge-repo';
7
-
8
5
  import { Event, synchronized, trackLeaks } from '@dxos/async';
6
+ import { type Doc } from '@dxos/automerge/automerge';
7
+ import {
8
+ interpretAsDocumentId,
9
+ type AutomergeUrl,
10
+ type DocHandle,
11
+ type DocumentId,
12
+ } from '@dxos/automerge/automerge-repo';
9
13
  import { PropertiesType, TYPE_PROPERTIES } from '@dxos/client-protocol';
10
14
  import { Context, LifecycleState, Resource, cancelWithContext } from '@dxos/context';
11
15
  import {
@@ -28,7 +32,6 @@ import {
28
32
  type SpaceManager,
29
33
  type SpaceProtocol,
30
34
  type SpaceProtocolSession,
31
- FIND_PARAMS,
32
35
  } from '@dxos/echo-pipeline';
33
36
  import {
34
37
  SpaceDocVersion,
@@ -37,7 +40,7 @@ import {
37
40
  type ObjectStructure,
38
41
  type SpaceDoc,
39
42
  } from '@dxos/echo-protocol';
40
- import { ObjectId, getTypeReference } from '@dxos/echo-schema';
43
+ import { createObjectId, getTypeReference } from '@dxos/echo-schema';
41
44
  import type { EdgeConnection, EdgeHttpClient } from '@dxos/edge-client';
42
45
  import { writeMessages, type FeedStore } from '@dxos/feed-store';
43
46
  import { assertArgument, assertState, failedInvariant, invariant } from '@dxos/invariant';
@@ -174,29 +177,24 @@ export class DataSpaceManager extends Resource {
174
177
  id: 'spaces',
175
178
  name: 'Spaces',
176
179
  fetch: async () => {
177
- return Promise.all(
178
- Array.from(this._spaces.values()).map(async (space) => {
179
- const rootUrl = space.automergeSpaceState.rootUrl;
180
- const rootHandle = rootUrl
181
- ? await this._echoHost.automergeRepo.find<Doc<SpaceDoc>>(rootUrl as AutomergeUrl, FIND_PARAMS)
182
- : undefined;
183
- await rootHandle?.whenReady();
184
- const rootDoc = rootHandle?.doc();
185
-
186
- const properties = rootDoc && findInlineObjectOfType(rootDoc, TYPE_PROPERTIES);
187
-
188
- return {
189
- key: space.key.toHex(),
190
- state: SpaceState[space.state],
191
- name: properties?.[1].data.name ?? null,
192
- inlineObjects: rootDoc ? Object.keys(rootDoc.objects ?? {}).length : null,
193
- linkedObjects: rootDoc ? Object.keys(rootDoc.links ?? {}).length : null,
194
- credentials: space.inner.spaceState.credentials.length,
195
- members: space.inner.spaceState.members.size,
196
- rootUrl,
197
- };
198
- }),
199
- );
180
+ return Array.from(this._spaces.values()).map((space) => {
181
+ const rootUrl = space.automergeSpaceState.rootUrl;
182
+ const rootHandle = rootUrl ? this._echoHost.automergeRepo.find(rootUrl as AutomergeUrl) : undefined;
183
+ const rootDoc = rootHandle?.docSync() as Doc<SpaceDoc> | undefined;
184
+
185
+ const properties = rootDoc && findInlineObjectOfType(rootDoc, TYPE_PROPERTIES);
186
+
187
+ return {
188
+ key: space.key.toHex(),
189
+ state: SpaceState[space.state],
190
+ name: properties?.[1].data.name ?? null,
191
+ inlineObjects: rootDoc ? Object.keys(rootDoc.objects ?? {}).length : null,
192
+ linkedObjects: rootDoc ? Object.keys(rootDoc.links ?? {}).length : null,
193
+ credentials: space.inner.spaceState.credentials.length,
194
+ members: space.inner.spaceState.members.size,
195
+ rootUrl,
196
+ };
197
+ });
200
198
  },
201
199
  });
202
200
  }
@@ -321,11 +319,7 @@ export class DataSpaceManager extends Resource {
321
319
  }
322
320
  switch (space.databaseRoot.getVersion()) {
323
321
  case SpaceDocVersion.CURRENT: {
324
- if (!space.databaseRoot.handle.isReady()) {
325
- log.warn('waiting for space root to be ready', { spaceId: space.id });
326
- await space.databaseRoot.handle.whenReady();
327
- }
328
- const [_, properties] = findInlineObjectOfType(space.databaseRoot.doc()!, TYPE_PROPERTIES) ?? [];
322
+ const [_, properties] = findInlineObjectOfType(space.databaseRoot.docSync()!, TYPE_PROPERTIES) ?? [];
329
323
  return properties?.data?.[DEFAULT_SPACE_KEY] === this._signingContext.identityKey.toHex();
330
324
  }
331
325
  case SpaceDocVersion.LEGACY: {
@@ -355,7 +349,7 @@ export class DataSpaceManager extends Resource {
355
349
  },
356
350
  };
357
351
 
358
- const propertiesId = ObjectId.random();
352
+ const propertiesId = createObjectId();
359
353
  document.change((doc: SpaceDoc) => {
360
354
  setDeep(doc, ['objects', propertiesId], properties);
361
355
  });
@@ -367,7 +361,7 @@ export class DataSpaceManager extends Resource {
367
361
  private async _getSpaceRootDocument(space: DataSpace): Promise<DocHandle<SpaceDoc>> {
368
362
  const automergeIndex = space.automergeSpaceState.rootUrl;
369
363
  invariant(automergeIndex);
370
- const document = await this._echoHost.automergeRepo.find<SpaceDoc>(automergeIndex as any, FIND_PARAMS);
364
+ const document = this._echoHost.automergeRepo.find<SpaceDoc>(automergeIndex as any);
371
365
  await document.whenReady();
372
366
  return document;
373
367
  }
@@ -2,10 +2,8 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import { save } from '@automerge/automerge';
6
- import { type DocHandle } from '@automerge/automerge-repo';
7
-
8
5
  import { Event, Mutex, scheduleTask, sleep, synchronized, trackLeaks } from '@dxos/async';
6
+ import { save } from '@dxos/automerge/automerge';
9
7
  import { AUTH_TIMEOUT } from '@dxos/client-protocol';
10
8
  import { Context, ContextDisposedError, cancelWithContext } from '@dxos/context';
11
9
  import type { SpecificCredential } from '@dxos/credentials';
@@ -16,7 +14,6 @@ import {
16
14
  createMappedFeedWriter,
17
15
  type MetadataStore,
18
16
  type Space,
19
- FIND_PARAMS,
20
17
  } from '@dxos/echo-pipeline';
21
18
  import { SpaceDocVersion, type SpaceDoc } from '@dxos/echo-protocol';
22
19
  import type { EdgeConnection, EdgeHttpClient } from '@dxos/edge-client';
@@ -355,7 +352,7 @@ export class DataSpace {
355
352
 
356
353
  async *getAllDocuments(): AsyncIterable<[string, Uint8Array]> {
357
354
  invariant(this._databaseRoot, 'Space is not ready');
358
- const doc = this._databaseRoot.doc() ?? failedInvariant();
355
+ const doc = this._databaseRoot.docSync() ?? failedInvariant();
359
356
  const root = save(doc);
360
357
  yield [this._databaseRoot.documentId, root];
361
358
 
@@ -462,16 +459,12 @@ export class DataSpace {
462
459
  private _onNewAutomergeRoot(rootUrl: string) {
463
460
  log('loading automerge root doc for space', { space: this.key, rootUrl });
464
461
 
465
- let handle: DocHandle<SpaceDoc>;
462
+ const handle = this._echoHost.automergeRepo.find<SpaceDoc>(rootUrl as any);
466
463
 
467
464
  // TODO(dmaretskyi): Make this single-threaded (but doc loading should still be parallel to not block epoch processing).
468
465
  queueMicrotask(async () => {
469
466
  try {
470
467
  await warnAfterTimeout(5_000, 'Automerge root doc load timeout (DataSpace)', async () => {
471
- handle = await cancelWithContext(
472
- this._ctx,
473
- this._echoHost.automergeRepo.find<SpaceDoc>(rootUrl as any, FIND_PARAMS),
474
- );
475
468
  await cancelWithContext(this._ctx, handle.whenReady());
476
469
  });
477
470
  if (this._ctx.disposed) {
@@ -482,7 +475,7 @@ export class DataSpace {
482
475
  using _guard = await this._epochProcessingMutex.acquire();
483
476
 
484
477
  // Attaching space keys to legacy documents.
485
- const doc = handle.doc() ?? failedInvariant();
478
+ const doc = handle.docSync() ?? failedInvariant();
486
479
  if (!doc.access?.spaceKey) {
487
480
  handle.change((doc: any) => {
488
481
  doc.access = { spaceKey: this.key.toHex() };
@@ -14,7 +14,6 @@ import { createTestEdgeWsServer } from '@dxos/edge-client/testing';
14
14
  import { FeedFactory, FeedStore, type FeedWrapper } from '@dxos/feed-store';
15
15
  import { Keyring } from '@dxos/keyring';
16
16
  import { SpaceId } from '@dxos/keys';
17
- import { EdgeStatus } from '@dxos/protocols/proto/dxos/client/services';
18
17
  import { type FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
19
18
  import { createStorage } from '@dxos/random-access-storage';
20
19
  import { openAndClose } from '@dxos/test-utils';
@@ -45,7 +44,7 @@ describe('EdgeFeedReplicator', () => {
45
44
  const { endpoint, admitConnection, messageSink } = await createEdge();
46
45
  const { messenger } = await createClient(endpoint);
47
46
  admitConnection.wake();
48
- await expect.poll(() => messenger.status).toBe(EdgeStatus.CONNECTED);
47
+ await expect.poll(() => messenger.isConnected).toBeTruthy();
49
48
 
50
49
  await attachReplicator(messenger);
51
50
  await expect.poll(() => messageSink.length).toEqual(1);
@@ -19,7 +19,6 @@ import {
19
19
  type Message as RouterMessage,
20
20
  } from '@dxos/protocols/buf/dxos/edge/messenger_pb';
21
21
  import type { FeedBlock, ProtocolMessage } from '@dxos/protocols/feed-replication';
22
- import { EdgeStatus } from '@dxos/protocols/proto/dxos/client/services';
23
22
  import { ComplexMap, arrayToBuffer, bufferToArray, defaultMap, rangeFromTo } from '@dxos/util';
24
23
 
25
24
  export type EdgeFeedReplicatorParams = {
@@ -87,7 +86,7 @@ export class EdgeFeedReplicator extends Resource {
87
86
 
88
87
  private async _handleReconnect() {
89
88
  await this._resetConnection();
90
- if (this._messenger.status === EdgeStatus.CONNECTED) {
89
+ if (this._messenger.isConnected) {
91
90
  this._startReplication();
92
91
  }
93
92
  }
@@ -2,8 +2,7 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import type { AutomergeUrl } from '@automerge/automerge-repo';
6
-
5
+ import type { AutomergeUrl } from '@dxos/automerge/automerge-repo';
7
6
  import { type Context } from '@dxos/context';
8
7
  import { type EchoHost } from '@dxos/echo-pipeline';
9
8
  import { invariant } from '@dxos/invariant';
@@ -48,7 +47,7 @@ export const runEpochMigration = async (ctx: Context, context: MigrationContext)
48
47
  timeout: LOAD_DOC_TIMEOUT,
49
48
  });
50
49
 
51
- const newRoot = context.echoHost.createDoc(rootHandle.doc());
50
+ const newRoot = context.echoHost.createDoc(rootHandle.docSync());
52
51
  await context.echoHost.flush();
53
52
  return { newRoot: newRoot.url };
54
53
  }
@@ -2,9 +2,8 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import type { AutomergeUrl } from '@automerge/automerge-repo';
6
-
7
5
  import { SubscriptionList, UpdateScheduler, scheduleTask } from '@dxos/async';
6
+ import type { AutomergeUrl } from '@dxos/automerge/automerge-repo';
8
7
  import { Stream } from '@dxos/codec-protobuf/stream';
9
8
  import {
10
9
  type CredentialProcessor,
@@ -2,8 +2,7 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { cbor } from '@automerge/automerge-repo';
6
-
5
+ import { cbor } from '@dxos/automerge/automerge-repo';
7
6
  import { invariant } from '@dxos/invariant';
8
7
  import type { LevelDB } from '@dxos/kv-store';
9
8
  import { log } from '@dxos/log';
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const DXOS_VERSION = "0.8.2-main.fbd8ed0";
1
+ export const DXOS_VERSION = "0.8.2-staging.7ac8446";