@dxos/client-services 0.4.9-main.a108ade → 0.4.9-main.a3cfaa7

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 (53) hide show
  1. package/dist/lib/browser/{chunk-565CLS7S.mjs → chunk-2YG3XNTV.mjs} +207 -279
  2. package/dist/lib/browser/chunk-2YG3XNTV.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +1 -3
  4. package/dist/lib/browser/index.mjs.map +1 -1
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/packlets/testing/index.mjs +6 -15
  7. package/dist/lib/browser/packlets/testing/index.mjs.map +3 -3
  8. package/dist/lib/node/{chunk-WKOJPBHT.cjs → chunk-WBOCFJUB.cjs} +223 -296
  9. package/dist/lib/node/chunk-WBOCFJUB.cjs.map +7 -0
  10. package/dist/lib/node/index.cjs +37 -39
  11. package/dist/lib/node/index.cjs.map +1 -1
  12. package/dist/lib/node/meta.json +1 -1
  13. package/dist/lib/node/packlets/testing/index.cjs +8 -17
  14. package/dist/lib/node/packlets/testing/index.cjs.map +3 -3
  15. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts.map +1 -1
  16. package/dist/types/src/packlets/services/diagnostics.d.ts +1 -1
  17. package/dist/types/src/packlets/services/diagnostics.d.ts.map +1 -1
  18. package/dist/types/src/packlets/services/service-context.d.ts +3 -6
  19. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  20. package/dist/types/src/packlets/services/service-host.d.ts +1 -5
  21. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  22. package/dist/types/src/packlets/spaces/automerge-space-state.d.ts +3 -0
  23. package/dist/types/src/packlets/spaces/automerge-space-state.d.ts.map +1 -1
  24. package/dist/types/src/packlets/spaces/data-space-manager.d.ts +2 -3
  25. package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
  26. package/dist/types/src/packlets/spaces/data-space.d.ts +5 -3
  27. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  28. package/dist/types/src/packlets/spaces/spaces-service.d.ts +2 -3
  29. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  30. package/dist/types/src/packlets/testing/test-builder.d.ts +2 -6
  31. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  32. package/dist/types/src/version.d.ts +1 -1
  33. package/package.json +34 -37
  34. package/src/packlets/identity/identity-manager.test.ts +0 -2
  35. package/src/packlets/identity/identity.test.ts +0 -4
  36. package/src/packlets/indexing/util.ts +2 -2
  37. package/src/packlets/invitations/space-invitation-protocol.test.ts +3 -12
  38. package/src/packlets/invitations/space-invitation-protocol.ts +0 -1
  39. package/src/packlets/services/automerge-host.test.ts +2 -5
  40. package/src/packlets/services/diagnostics.ts +5 -44
  41. package/src/packlets/services/service-context.test.ts +3 -76
  42. package/src/packlets/services/service-context.ts +5 -18
  43. package/src/packlets/services/service-host.ts +6 -23
  44. package/src/packlets/spaces/automerge-space-state.ts +9 -0
  45. package/src/packlets/spaces/data-space-manager.test.ts +3 -145
  46. package/src/packlets/spaces/data-space-manager.ts +3 -18
  47. package/src/packlets/spaces/data-space.ts +11 -43
  48. package/src/packlets/spaces/spaces-service.test.ts +4 -9
  49. package/src/packlets/spaces/spaces-service.ts +11 -15
  50. package/src/packlets/testing/test-builder.ts +4 -26
  51. package/src/version.ts +1 -1
  52. package/dist/lib/browser/chunk-565CLS7S.mjs.map +0 -7
  53. package/dist/lib/node/chunk-WKOJPBHT.cjs.map +0 -7
@@ -3,24 +3,16 @@
3
3
  //
4
4
 
5
5
  import { expect } from 'chai';
6
- import path from 'node:path';
7
6
 
8
7
  import { asyncTimeout, latch } from '@dxos/async';
9
- import { type SpecificCredential, createAdmissionCredentials } from '@dxos/credentials';
8
+ import { createAdmissionCredentials } from '@dxos/credentials';
10
9
  import { AuthStatus } from '@dxos/echo-pipeline';
11
- import { testLocalDatabase } from '@dxos/echo-pipeline/testing';
12
10
  import { writeMessages } from '@dxos/feed-store';
13
- import { type PublicKey } from '@dxos/keys';
14
11
  import { log } from '@dxos/log';
15
12
  import { SpaceState } from '@dxos/protocols/proto/dxos/client/services';
16
- import { type SpaceSnapshot } from '@dxos/protocols/proto/dxos/echo/snapshot';
17
- import { type Epoch } from '@dxos/protocols/proto/dxos/halo/credentials';
18
- import { StorageType } from '@dxos/random-access-storage';
19
- import { afterTest, describe, openAndClose, test } from '@dxos/test';
20
- import { Timeframe } from '@dxos/timeframe';
21
- import { range } from '@dxos/util';
13
+ import { describe, openAndClose, test } from '@dxos/test';
22
14
 
23
- import { TestBuilder, syncItemsLocal } from '../testing';
15
+ import { TestBuilder } from '../testing';
24
16
 
25
17
  describe('DataSpaceManager', () => {
26
18
  test('create space', async () => {
@@ -103,8 +95,6 @@ describe('DataSpaceManager', () => {
103
95
  });
104
96
  log.break();
105
97
 
106
- await syncItemsLocal(space1.dataPipeline, space2.dataPipeline);
107
-
108
98
  expect(space1.inner.protocol.sessions.get(peer2.identity.deviceKey)).to.exist;
109
99
  expect(space1.inner.protocol.sessions.get(peer2.identity.deviceKey)?.authStatus).to.equal(AuthStatus.SUCCESS);
110
100
  expect(space2.inner.protocol.sessions.get(peer1.identity.deviceKey)).to.exist;
@@ -157,137 +147,6 @@ describe('DataSpaceManager', () => {
157
147
  await receivedMessage();
158
148
  });
159
149
 
160
- describe('Epochs', () => {
161
- test
162
- .skip('Epoch truncates feeds', async () => {
163
- const builder = new TestBuilder();
164
- afterTest(async () => builder.destroy());
165
-
166
- const peer = builder.createPeer({
167
- dataStore: typeof window === 'undefined' ? StorageType.NODE : StorageType.WEBFS,
168
- });
169
- await peer.createIdentity();
170
- await openAndClose(peer.dataSpaceManager);
171
- const space = await peer.dataSpaceManager.createSpace();
172
- await space.inner.controlPipeline.state.waitUntilTimeframe(space.inner.controlPipeline.state.endTimeframe);
173
-
174
- const feedDataPath = path.join(space.inner.dataPipeline.pipelineState!.feeds[0].key.toHex(), 'data');
175
- const directory = peer.storage.createDirectory('feeds');
176
- const file = directory.getOrCreateFile(feedDataPath);
177
- afterTest(() => file.close());
178
-
179
- expect((await file.stat()).size === 0).to.be.true;
180
-
181
- for (const _ in range(10)) {
182
- await testLocalDatabase(space.dataPipeline);
183
- }
184
-
185
- expect((await file.stat()).size !== 0).to.be.true;
186
- await space.createEpoch();
187
- expect((await file.stat()).size === 0).to.be.true;
188
- })
189
- .onlyEnvironments('nodejs', 'chromium', 'firefox')
190
- .tag('flaky');
191
-
192
- test('Loads only last epoch', async () => {
193
- const builder = new TestBuilder();
194
- afterTest(async () => builder.destroy());
195
-
196
- const peer = builder.createPeer();
197
- await peer.createIdentity();
198
- const epochsNumber = 10;
199
- let spaceKey: PublicKey;
200
- {
201
- // Create space and create epochs in it.s
202
- await openAndClose(peer.dataSpaceManager);
203
-
204
- const space = await peer.dataSpaceManager.createSpace();
205
- spaceKey = space.key;
206
- await space.inner.controlPipeline.state.waitUntilTimeframe(space.inner.controlPipeline.state.endTimeframe);
207
-
208
- for (const _ of range(epochsNumber)) {
209
- await testLocalDatabase(space.dataPipeline);
210
- await space.createEpoch();
211
- }
212
- await space.close();
213
- await peer.dataSpaceManager.close();
214
- peer.props.dataSpaceManager = undefined;
215
- }
216
- {
217
- // Load same space and check if it loads only last epoch.s
218
- await openAndClose(peer.dataSpaceManager);
219
-
220
- const space = peer.dataSpaceManager.spaces.get(spaceKey)!;
221
-
222
- const epochs: number[] = [];
223
- space.dataPipeline.onNewEpoch.on((epoch: SpecificCredential<Epoch>) => {
224
- epochs.push(epoch.subject.assertion.number);
225
- });
226
- const processedFirstEpoch = space.dataPipeline.onNewEpoch.waitFor(() => true);
227
-
228
- await space.inner.controlPipeline.state.waitUntilTimeframe(space.inner.controlPipeline.state.endTimeframe);
229
-
230
- await processedFirstEpoch;
231
- expect(epochs).to.deep.equal([epochsNumber]);
232
- }
233
- });
234
-
235
- test('Items are cleared before epoch applied', async () => {
236
- const builder = new TestBuilder();
237
- afterTest(async () => builder.destroy());
238
- const peer = builder.createPeer();
239
- await peer.createIdentity();
240
- await openAndClose(peer.dataSpaceManager);
241
-
242
- // Create space and fill it with Items.
243
- const space = await peer.dataSpaceManager.createSpace();
244
- await space.inner.controlPipeline.state.waitUntilTimeframe(space.inner.controlPipeline.state.endTimeframe);
245
- const itemsNumber = 2;
246
- for (const _ of range(itemsNumber)) {
247
- await testLocalDatabase(space.dataPipeline);
248
- }
249
-
250
- // Create empty Epoch and check if it clears items.
251
- {
252
- const processedFirstEpoch = space.dataPipeline.onNewEpoch.waitFor(
253
- (epoch) => epoch.subject.assertion.number === 1,
254
- );
255
-
256
- // Empty snapshot.
257
- const snapshot: SpaceSnapshot = {
258
- spaceKey: space.key.asUint8Array(),
259
- timeframe: space.inner.dataPipeline.pipelineState!.timeframe,
260
- database: {},
261
- };
262
-
263
- const snapshotCid = await peer.snapshotStore.saveSnapshot(snapshot);
264
-
265
- const epoch: Epoch = {
266
- previousId: space.dataPipeline.currentEpoch?.id,
267
- timeframe: space.inner.dataPipeline.pipelineState!.timeframe,
268
- number: (space.dataPipeline.currentEpoch?.subject.assertion as Epoch).number + 1,
269
- snapshotCid,
270
- };
271
-
272
- const receipt = await space.inner.controlPipeline.writer.write({
273
- credential: {
274
- credential: await peer.props.signingContext!.credentialSigner.createCredential({
275
- subject: space.key,
276
- assertion: {
277
- '@type': 'dxos.halo.credentials.Epoch',
278
- ...epoch,
279
- },
280
- }),
281
- },
282
- });
283
- await space.inner.controlPipeline.state.waitUntilTimeframe(new Timeframe([[receipt.feedKey, receipt.seq]]));
284
- await processedFirstEpoch;
285
- }
286
-
287
- expect(Array.from(space.dataPipeline.itemManager.entities.keys()).length).to.equal(0);
288
- });
289
- });
290
-
291
150
  describe('activation', () => {
292
151
  test('can activate and deactivate a space', async () => {
293
152
  const builder = new TestBuilder();
@@ -308,7 +167,6 @@ describe('DataSpaceManager', () => {
308
167
  space.stateUpdate.waitForCondition(() => space.state === SpaceState.READY),
309
168
  500,
310
169
  );
311
- await testLocalDatabase(space.dataPipeline);
312
170
  });
313
171
  });
314
172
  });
@@ -3,15 +3,9 @@
3
3
  //
4
4
 
5
5
  import { Event, synchronized, trackLeaks } from '@dxos/async';
6
- import { cancelWithContext, Context } from '@dxos/context';
7
- import { type CredentialSigner, getCredentialAssertion } from '@dxos/credentials';
8
- import {
9
- type AutomergeHost,
10
- type DataServiceSubscriptions,
11
- type MetadataStore,
12
- type Space,
13
- type SpaceManager,
14
- } from '@dxos/echo-pipeline';
6
+ import { Context, cancelWithContext } from '@dxos/context';
7
+ import { getCredentialAssertion, type CredentialSigner } from '@dxos/credentials';
8
+ import { type AutomergeHost, type MetadataStore, type Space, type SpaceManager } from '@dxos/echo-pipeline';
15
9
  import { type FeedStore } from '@dxos/feed-store';
16
10
  import { invariant } from '@dxos/invariant';
17
11
  import { type Keyring } from '@dxos/keyring';
@@ -80,7 +74,6 @@ export class DataSpaceManager {
80
74
  constructor(
81
75
  private readonly _spaceManager: SpaceManager,
82
76
  private readonly _metadataStore: MetadataStore,
83
- private readonly _dataServiceSubscriptions: DataServiceSubscriptions,
84
77
  private readonly _keyring: Keyring,
85
78
  private readonly _signingContext: SigningContext,
86
79
  private readonly _feedStore: FeedStore<FeedMessage>,
@@ -270,10 +263,6 @@ export class DataSpaceManager {
270
263
  callbacks: {
271
264
  beforeReady: async () => {
272
265
  log('before space ready', { space: space.key });
273
- await this._dataServiceSubscriptions.registerSpace(
274
- space.key,
275
- dataSpace.dataPipeline.databaseHost!.createDataServiceHost(),
276
- );
277
266
  },
278
267
  afterReady: async () => {
279
268
  log('after space ready', { space: space.key, open: this._isOpen });
@@ -283,7 +272,6 @@ export class DataSpaceManager {
283
272
  },
284
273
  beforeClose: async () => {
285
274
  log('before space close', { space: space.key });
286
- await this._dataServiceSubscriptions.unregisterSpace(space.key);
287
275
  },
288
276
  },
289
277
  cache: metadata.cache,
@@ -297,9 +285,6 @@ export class DataSpaceManager {
297
285
  if (metadata.controlTimeframe) {
298
286
  dataSpace.inner.controlPipeline.state.setTargetTimeframe(metadata.controlTimeframe);
299
287
  }
300
- if (metadata.dataTimeframe) {
301
- dataSpace.dataPipeline.setTargetTimeframe(metadata.dataTimeframe);
302
- }
303
288
 
304
289
  this._spaces.set(metadata.key, dataSpace);
305
290
  return dataSpace;
@@ -6,14 +6,7 @@ import { Event, asyncTimeout, scheduleTask, sleep, synchronized, trackLeaks } fr
6
6
  import { AUTH_TIMEOUT } from '@dxos/client-protocol';
7
7
  import { cancelWithContext, Context, ContextDisposedError } from '@dxos/context';
8
8
  import { timed, warnAfterTimeout } from '@dxos/debug';
9
- import {
10
- type MetadataStore,
11
- type Space,
12
- createMappedFeedWriter,
13
- type DataPipeline,
14
- type CreateEpochOptions,
15
- type AutomergeHost,
16
- } from '@dxos/echo-pipeline';
9
+ import { type MetadataStore, type Space, createMappedFeedWriter, type AutomergeHost } from '@dxos/echo-pipeline';
17
10
  import { type FeedStore } from '@dxos/feed-store';
18
11
  import { failedInvariant, invariant } from '@dxos/invariant';
19
12
  import { type Keyring } from '@dxos/keyring';
@@ -71,11 +64,9 @@ export type DataSpaceParams = {
71
64
  automergeHost: AutomergeHost;
72
65
  };
73
66
 
74
- /**
75
- * Delete feed blocks after an epoch is created.
76
- */
77
- // TODO(dmaretskyi): Disabled till better times https://github.com/dxos/dxos/issues/3949.
78
- const ENABLE_FEED_PURGE = false;
67
+ export type CreateEpochOptions = {
68
+ migration?: CreateEpochRequest.Migration;
69
+ };
79
70
 
80
71
  @trackLeaks('open', 'close')
81
72
  @trace.resource()
@@ -160,10 +151,6 @@ export class DataSpace {
160
151
  return this._inner;
161
152
  }
162
153
 
163
- get dataPipeline(): DataPipeline {
164
- return this._inner.dataPipeline;
165
- }
166
-
167
154
  get presence() {
168
155
  return this._presence;
169
156
  }
@@ -278,20 +265,8 @@ export class DataSpace {
278
265
 
279
266
  this._automergeSpaceState.startProcessingRootDocs();
280
267
 
281
- await this._inner.initializeDataPipeline();
282
-
283
- this.metrics.dataPipelineOpen = new Date();
284
-
285
268
  // Wait for the first epoch.
286
- await cancelWithContext(this._ctx, this._inner.dataPipeline.ensureEpochInitialized());
287
-
288
- log('waiting for data pipeline to reach target timeframe');
289
- // Wait for the data pipeline to catch up to its desired timeframe.
290
- await this._inner.dataPipeline.pipelineState!.waitUntilReachedTargetTimeframe({
291
- ctx: this._ctx,
292
- breakOnStall: false,
293
- });
294
- this.metrics.dataPipelineReady = new Date();
269
+ await cancelWithContext(this._ctx, this.automergeSpaceState.ensureEpochInitialized());
295
270
 
296
271
  log('data pipeline ready');
297
272
  await this._callbacks.beforeReady?.();
@@ -426,7 +401,12 @@ export class DataSpace {
426
401
  case CreateEpochRequest.Migration.NONE:
427
402
  {
428
403
  // TODO(dmaretskyi): Unify epoch construction.
429
- epoch = await this.dataPipeline.createEpoch();
404
+ epoch = {
405
+ previousId: this._automergeSpaceState.lastEpoch?.id,
406
+ number: (this._automergeSpaceState.lastEpoch?.subject.assertion.number ?? -1) + 1,
407
+ timeframe: this._automergeSpaceState.lastEpoch?.subject.assertion.timeframe ?? new Timeframe(),
408
+ automergeRoot: this._automergeSpaceState.lastEpoch?.subject.assertion?.automergeRoot,
409
+ };
430
410
  }
431
411
  break;
432
412
  case CreateEpochRequest.Migration.INIT_AUTOMERGE:
@@ -476,18 +456,6 @@ export class DataSpace {
476
456
  });
477
457
 
478
458
  await this.inner.controlPipeline.state.waitUntilTimeframe(new Timeframe([[receipt.feedKey, receipt.seq]]));
479
-
480
- // Clear feed blocks before epoch.
481
- if (ENABLE_FEED_PURGE) {
482
- for (const feed of this.inner.dataPipeline.pipelineState?.feeds ?? []) {
483
- const indexBeforeEpoch = epoch.timeframe.get(feed.key);
484
- if (indexBeforeEpoch === undefined) {
485
- continue;
486
- }
487
-
488
- await feed.safeClear(0, indexBeforeEpoch + 1);
489
- }
490
- }
491
459
  }
492
460
 
493
461
  @synchronized
@@ -24,15 +24,10 @@ describe('SpacesService', () => {
24
24
  beforeEach(async () => {
25
25
  serviceContext = createServiceContext();
26
26
  await serviceContext.open(new Context());
27
- spacesService = new SpacesServiceImpl(
28
- serviceContext.identityManager,
29
- serviceContext.spaceManager,
30
- serviceContext.dataServiceSubscriptions,
31
- async () => {
32
- await serviceContext.initialized.wait();
33
- return serviceContext.dataSpaceManager!;
34
- },
35
- );
27
+ spacesService = new SpacesServiceImpl(serviceContext.identityManager, serviceContext.spaceManager, async () => {
28
+ await serviceContext.initialized.wait();
29
+ return serviceContext.dataSpaceManager!;
30
+ });
36
31
  });
37
32
 
38
33
  afterEach(async () => {
@@ -6,18 +6,18 @@ import { EventSubscriptions, UpdateScheduler, scheduleTask } from '@dxos/async';
6
6
  import { Stream } from '@dxos/codec-protobuf';
7
7
  import { type CredentialProcessor } from '@dxos/credentials';
8
8
  import { raise } from '@dxos/debug';
9
- import { type DataServiceSubscriptions, type SpaceManager } from '@dxos/echo-pipeline';
9
+ import { type SpaceManager } from '@dxos/echo-pipeline';
10
10
  import { invariant } from '@dxos/invariant';
11
11
  import { log } from '@dxos/log';
12
12
  import { ApiError, SpaceNotFoundError, encodeError } from '@dxos/protocols';
13
13
  import {
14
+ SpaceMember,
15
+ SpaceState,
14
16
  type CreateEpochRequest,
15
17
  type PostMessageRequest,
16
18
  type QueryCredentialsRequest,
17
19
  type QuerySpacesResponse,
18
20
  type Space,
19
- SpaceMember,
20
- SpaceState,
21
21
  type SpacesService,
22
22
  type SubscribeMessagesRequest,
23
23
  type UpdateSpaceRequest,
@@ -35,7 +35,6 @@ export class SpacesServiceImpl implements SpacesService {
35
35
  constructor(
36
36
  private readonly _identityManager: IdentityManager,
37
37
  private readonly _spaceManager: SpaceManager,
38
- private readonly _dataServiceSubscriptions: DataServiceSubscriptions,
39
38
  private readonly _getDataSpaceManager: Provider<Promise<DataSpaceManager>>,
40
39
  ) {}
41
40
 
@@ -96,13 +95,10 @@ export class SpacesServiceImpl implements SpacesService {
96
95
  subscriptions.add(space.stateUpdate.on(ctx, () => scheduler.forceTrigger()));
97
96
 
98
97
  subscriptions.add(space.presence.updated.on(ctx, () => scheduler.trigger()));
99
- subscriptions.add(space.dataPipeline.onNewEpoch.on(ctx, () => scheduler.trigger()));
98
+ subscriptions.add(space.automergeSpaceState.onNewEpoch.on(ctx, () => scheduler.trigger()));
100
99
 
101
100
  // Pipeline progress.
102
101
  subscriptions.add(space.inner.controlPipeline.state.timeframeUpdate.on(ctx, () => scheduler.trigger()));
103
- if (space.dataPipeline.pipelineState) {
104
- subscriptions.add(space.dataPipeline.pipelineState.timeframeUpdate.on(ctx, () => scheduler.trigger()));
105
- }
106
102
  }
107
103
  };
108
104
 
@@ -190,19 +186,19 @@ export class SpacesServiceImpl implements SpacesService {
190
186
  state: space.state,
191
187
  error: space.error ? encodeError(space.error) : undefined,
192
188
  pipeline: {
193
- currentEpoch: space.dataPipeline.currentEpoch,
194
- appliedEpoch: space.dataPipeline.appliedEpoch,
189
+ currentEpoch: space.automergeSpaceState.lastEpoch,
190
+ appliedEpoch: space.automergeSpaceState.lastEpoch,
195
191
 
196
192
  controlFeeds: space.inner.controlPipeline.state.feeds.map((feed) => feed.key),
197
193
  currentControlTimeframe: space.inner.controlPipeline.state.timeframe,
198
194
  targetControlTimeframe: space.inner.controlPipeline.state.targetTimeframe,
199
195
  totalControlTimeframe: space.inner.controlPipeline.state.endTimeframe,
200
196
 
201
- dataFeeds: space.dataPipeline.pipelineState?.feeds.map((feed) => feed.key) ?? [],
202
- startDataTimeframe: space.dataPipeline.pipelineState?.startTimeframe,
203
- currentDataTimeframe: space.dataPipeline.pipelineState?.timeframe,
204
- targetDataTimeframe: space.dataPipeline.pipelineState?.targetTimeframe,
205
- totalDataTimeframe: space.dataPipeline.pipelineState?.endTimeframe,
197
+ dataFeeds: undefined,
198
+ startDataTimeframe: undefined,
199
+ currentDataTimeframe: undefined,
200
+ targetDataTimeframe: undefined,
201
+ totalDataTimeframe: undefined,
206
202
  },
207
203
  members: Array.from(space.inner.spaceState.members.values()).map((member) => {
208
204
  const peers = space.presence.getPeersOnline().filter(({ identityKey }) => identityKey.equals(member.key));
@@ -6,24 +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 {
10
- SnapshotStore,
11
- type DataPipeline,
12
- MetadataStore,
13
- SpaceManager,
14
- valueEncoding,
15
- DataServiceSubscriptions,
16
- AutomergeHost,
17
- } from '@dxos/echo-pipeline';
18
- import { testLocalDatabase } from '@dxos/echo-pipeline/testing';
9
+ import { AutomergeHost, MetadataStore, SnapshotStore, SpaceManager, valueEncoding } from '@dxos/echo-pipeline';
19
10
  import { FeedFactory, FeedStore } from '@dxos/feed-store';
20
11
  import { Keyring } from '@dxos/keyring';
21
12
  import { MemorySignalManager, MemorySignalManagerContext } from '@dxos/messaging';
22
13
  import { MemoryTransportFactory, NetworkManager } from '@dxos/network-manager';
23
- import { createStorage, type Storage, StorageType } from '@dxos/random-access-storage';
14
+ import { createStorage, StorageType, type Storage } from '@dxos/random-access-storage';
24
15
  import { BlobStore } from '@dxos/teleport-extension-object-sync';
25
16
 
26
- import { ClientServicesHost, createDefaultModelFactory, ServiceContext } from '../services';
17
+ import { ClientServicesHost, ServiceContext } from '../services';
27
18
  import { DataSpaceManager, type SigningContext } from '../spaces';
28
19
 
29
20
  //
@@ -51,8 +42,7 @@ export const createServiceContext = ({
51
42
  transportFactory: MemoryTransportFactory,
52
43
  });
53
44
 
54
- const modelFactory = createDefaultModelFactory();
55
- return new ServiceContext(storage, networkManager, signalManager, modelFactory);
45
+ return new ServiceContext(storage, networkManager, signalManager);
56
46
  };
57
47
 
58
48
  export const createPeers = async (numPeers: number) => {
@@ -72,16 +62,6 @@ export const createIdentity = async (peer: ServiceContext) => {
72
62
  return peer;
73
63
  };
74
64
 
75
- // TODO(burdon): Remove @dxos/client-testing.
76
- // TODO(burdon): Create builder and make configurable.
77
- /**
78
- * @deprecated
79
- */
80
- export const syncItemsLocal = async (db1: DataPipeline, db2: DataPipeline) => {
81
- await testLocalDatabase(db1, db2);
82
- await testLocalDatabase(db2, db1);
83
- };
84
-
85
65
  export class TestBuilder {
86
66
  public readonly signalContext = new MemorySignalManagerContext();
87
67
  private readonly _ctx = new Context();
@@ -171,7 +151,6 @@ export class TestPeer {
171
151
  feedStore: this.feedStore,
172
152
  networkManager: this.networkManager,
173
153
  metadataStore: this.metadataStore,
174
- modelFactory: createDefaultModelFactory(),
175
154
  snapshotStore: this.snapshotStore,
176
155
  blobStore: this.blobStore,
177
156
  }));
@@ -189,7 +168,6 @@ export class TestPeer {
189
168
  return (this._props.dataSpaceManager ??= new DataSpaceManager(
190
169
  this.spaceManager,
191
170
  this.metadataStore,
192
- new DataServiceSubscriptions(),
193
171
  this.keyring,
194
172
  this.identity,
195
173
  this.feedStore,
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const DXOS_VERSION = "0.4.9-main.a108ade";
1
+ export const DXOS_VERSION = "0.4.9-main.a3cfaa7";