@dxos/client-services 0.4.10-main.826d4ee → 0.4.10-main.8583d5a

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 (84) hide show
  1. package/dist/lib/browser/{chunk-3JVGDOFN.mjs → chunk-ZBQ4LQQX.mjs} +751 -561
  2. package/dist/lib/browser/chunk-ZBQ4LQQX.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +11 -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 +11 -5
  7. package/dist/lib/browser/packlets/testing/index.mjs.map +3 -3
  8. package/dist/lib/node/{chunk-IGZXOIKB.cjs → chunk-HMAV5VTX.cjs} +696 -594
  9. package/dist/lib/node/chunk-HMAV5VTX.cjs.map +7 -0
  10. package/dist/lib/node/index.cjs +46 -38
  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 +15 -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 +2 -2
  28. package/dist/types/src/packlets/indexing/util.d.ts.map +1 -1
  29. package/dist/types/src/packlets/invitations/invitations-handler.d.ts +0 -1
  30. package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
  31. package/dist/types/src/packlets/invitations/invitations-service.d.ts.map +1 -1
  32. package/dist/types/src/packlets/services/index.d.ts +1 -1
  33. package/dist/types/src/packlets/services/index.d.ts.map +1 -1
  34. package/dist/types/src/packlets/services/service-context.d.ts +7 -5
  35. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  36. package/dist/types/src/packlets/services/service-host.d.ts +5 -1
  37. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  38. package/dist/types/src/packlets/services/util.d.ts +1 -0
  39. package/dist/types/src/packlets/services/util.d.ts.map +1 -1
  40. package/dist/types/src/packlets/storage/index.d.ts +1 -0
  41. package/dist/types/src/packlets/storage/index.d.ts.map +1 -1
  42. package/dist/types/src/packlets/storage/level.d.ts +4 -0
  43. package/dist/types/src/packlets/storage/level.d.ts.map +1 -0
  44. package/dist/types/src/packlets/storage/storage.d.ts.map +1 -1
  45. package/dist/types/src/packlets/storage/util.d.ts +4 -0
  46. package/dist/types/src/packlets/storage/util.d.ts.map +1 -0
  47. package/dist/types/src/packlets/system/system-service.d.ts +1 -1
  48. package/dist/types/src/packlets/system/system-service.d.ts.map +1 -1
  49. package/dist/types/src/packlets/testing/test-builder.d.ts +5 -2
  50. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  51. package/dist/types/src/version.d.ts +1 -1
  52. package/package.json +36 -34
  53. package/src/index.ts +1 -0
  54. package/src/packlets/devices/devices-service.test.ts +1 -1
  55. package/src/packlets/diagnostics/browser-diagnostics-broadcast.ts +94 -0
  56. package/src/packlets/diagnostics/diagnostics-broadcast.ts +20 -0
  57. package/src/packlets/diagnostics/diagnostics-collector.ts +65 -0
  58. package/src/packlets/{services → diagnostics}/diagnostics.ts +2 -2
  59. package/src/packlets/diagnostics/index.ts +7 -0
  60. package/src/packlets/identity/identity-service.test.ts +1 -1
  61. package/src/packlets/indexing/util.ts +4 -4
  62. package/src/packlets/invitations/device-invitation-protocol.test.ts +1 -1
  63. package/src/packlets/invitations/invitations-handler.ts +5 -12
  64. package/src/packlets/invitations/invitations-service.ts +5 -5
  65. package/src/packlets/network/network-service.test.ts +1 -1
  66. package/src/packlets/services/automerge-host.test.ts +9 -3
  67. package/src/packlets/services/index.ts +1 -1
  68. package/src/packlets/services/service-context.test.ts +9 -6
  69. package/src/packlets/services/service-context.ts +15 -8
  70. package/src/packlets/services/service-host.ts +49 -9
  71. package/src/packlets/services/service-registry.test.ts +1 -1
  72. package/src/packlets/services/util.ts +2 -0
  73. package/src/packlets/spaces/data-space-manager.test.ts +4 -4
  74. package/src/packlets/spaces/spaces-service.test.ts +1 -1
  75. package/src/packlets/storage/index.ts +1 -0
  76. package/src/packlets/storage/level.ts +19 -0
  77. package/src/packlets/storage/storage.ts +3 -9
  78. package/src/packlets/storage/util.ts +19 -0
  79. package/src/packlets/system/system-service.ts +1 -1
  80. package/src/packlets/testing/test-builder.ts +23 -5
  81. package/src/version.ts +1 -1
  82. package/dist/lib/browser/chunk-3JVGDOFN.mjs.map +0 -7
  83. package/dist/lib/node/chunk-IGZXOIKB.cjs.map +0 -7
  84. package/dist/types/src/packlets/services/diagnostics.d.ts.map +0 -1
@@ -2,12 +2,20 @@
2
2
  // Copyright 2021 DXOS.org
3
3
  //
4
4
 
5
+ import { type Level } from 'level';
6
+
5
7
  import { Event, synchronized } from '@dxos/async';
6
- import { Properties, clientServiceBundle, defaultKey, type ClientServices } from '@dxos/client-protocol';
8
+ import { clientServiceBundle, defaultKey, type ClientServices, Properties } from '@dxos/client-protocol';
7
9
  import { type Config } from '@dxos/config';
8
10
  import { Context } from '@dxos/context';
9
- import { DataServiceImpl, type SpaceDoc } from '@dxos/echo-pipeline';
10
- import { getAutomergeObjectCore, getRawDoc, type TypedObject } from '@dxos/echo-schema';
11
+ import {
12
+ DataServiceImpl,
13
+ type ObjectStructure,
14
+ encodeReference,
15
+ type SpaceDoc,
16
+ type MyLevel,
17
+ } from '@dxos/echo-pipeline';
18
+ import * as E from '@dxos/echo-schema';
11
19
  import { IndexServiceImpl } from '@dxos/indexing';
12
20
  import { invariant } from '@dxos/invariant';
13
21
  import { PublicKey } from '@dxos/keys';
@@ -21,18 +29,22 @@ import { TRACE_PROCESSOR, trace as Trace } from '@dxos/tracing';
21
29
  import { assignDeep } from '@dxos/util';
22
30
  import { WebsocketRpcClient } from '@dxos/websocket-rpc';
23
31
 
24
- import { createDiagnostics } from './diagnostics';
25
32
  import { ServiceContext, type ServiceContextRuntimeParams } from './service-context';
26
33
  import { ServiceRegistry } from './service-registry';
27
34
  import { DevicesServiceImpl } from '../devices';
28
35
  import { DevtoolsHostEvents, DevtoolsServiceImpl } from '../devtools';
36
+ import {
37
+ type CollectDiagnosticsBroadcastHandler,
38
+ createCollectDiagnosticsBroadcastHandler,
39
+ createDiagnostics,
40
+ } from '../diagnostics';
29
41
  import { IdentityServiceImpl, type CreateIdentityOptions } from '../identity';
30
42
  import { InvitationsServiceImpl } from '../invitations';
31
43
  import { Lock, type ResourceLock } from '../locks';
32
44
  import { LoggingServiceImpl } from '../logging';
33
45
  import { NetworkServiceImpl } from '../network';
34
46
  import { SpacesServiceImpl } from '../spaces';
35
- import { createStorageObjects } from '../storage';
47
+ import { createLevel, createStorageObjects } from '../storage';
36
48
  import { SystemServiceImpl } from '../system';
37
49
 
38
50
  export type ClientServicesHostParams = {
@@ -44,6 +56,7 @@ export type ClientServicesHostParams = {
44
56
  signalManager?: SignalManager;
45
57
  connectionLog?: boolean;
46
58
  storage?: Storage;
59
+ level?: MyLevel;
47
60
  lockKey?: string;
48
61
  callbacks?: ClientServicesHostCallbacks;
49
62
  runtimeParams?: ServiceContextRuntimeParams;
@@ -76,11 +89,13 @@ export class ClientServicesHost {
76
89
  private _signalManager?: SignalManager;
77
90
  private _networkManager?: NetworkManager;
78
91
  private _storage?: Storage;
92
+ private _level?: Level<string, string>;
79
93
  private _callbacks?: ClientServicesHostCallbacks;
80
94
  private _devtoolsProxy?: WebsocketRpcClient<{}, ClientServices>;
81
95
 
82
96
  private _serviceContext!: ServiceContext;
83
97
  private readonly _runtimeParams?: ServiceContextRuntimeParams;
98
+ private diagnosticsBroadcastHandler: CollectDiagnosticsBroadcastHandler;
84
99
 
85
100
  @Trace.info()
86
101
  private _opening = false;
@@ -93,12 +108,14 @@ export class ClientServicesHost {
93
108
  transportFactory,
94
109
  signalManager,
95
110
  storage,
111
+ level,
96
112
  // TODO(wittjosiah): Turn this on by default.
97
113
  lockKey,
98
114
  callbacks,
99
115
  runtimeParams,
100
116
  }: ClientServicesHostParams = {}) {
101
117
  this._storage = storage;
118
+ this._level = level;
102
119
  this._callbacks = callbacks;
103
120
  this._runtimeParams = runtimeParams;
104
121
 
@@ -138,6 +155,7 @@ export class ClientServicesHost {
138
155
  },
139
156
  });
140
157
 
158
+ this.diagnosticsBroadcastHandler = createCollectDiagnosticsBroadcastHandler(this._systemService);
141
159
  this._loggingService = new LoggingServiceImpl();
142
160
 
143
161
  this._serviceRegistry = new ServiceRegistry<ClientServices>(clientServiceBundle, {
@@ -226,12 +244,19 @@ export class ClientServicesHost {
226
244
 
227
245
  this._opening = true;
228
246
  log('opening...', { lockKey: this._resourceLock?.lockKey });
247
+
248
+ if (!this._level) {
249
+ this._level = await createLevel(this._config.get('runtime.client.storage', {})!);
250
+ }
251
+ await this._level.open();
252
+
229
253
  await this._resourceLock?.acquire();
230
254
 
231
255
  await this._loggingService.open();
232
256
 
233
257
  this._serviceContext = new ServiceContext(
234
258
  this._storage,
259
+ this._level,
235
260
  this._networkManager,
236
261
  this._signalManager,
237
262
  this._runtimeParams,
@@ -301,6 +326,7 @@ export class ClientServicesHost {
301
326
  });
302
327
  void this._devtoolsProxy.open();
303
328
  }
329
+ this.diagnosticsBroadcastHandler.start();
304
330
 
305
331
  this._opening = false;
306
332
  this._open = true;
@@ -319,10 +345,12 @@ export class ClientServicesHost {
319
345
 
320
346
  const deviceKey = this._serviceContext.identityManager.identity?.deviceKey;
321
347
  log('closing...', { deviceKey });
348
+ this.diagnosticsBroadcastHandler.stop();
322
349
  await this._devtoolsProxy?.close();
323
350
  this._serviceRegistry.setServices({ SystemService: this._systemService });
324
351
  await this._loggingService.close();
325
352
  await this._serviceContext.close();
353
+ await this._level?.close();
326
354
  this._open = false;
327
355
  this._statusUpdate.emit();
328
356
  log('closed', { deviceKey });
@@ -347,18 +375,30 @@ export class ClientServicesHost {
347
375
  await this._serviceContext.initialized.wait();
348
376
  const space = await this._serviceContext.dataSpaceManager!.createSpace();
349
377
 
350
- const obj: TypedObject = new Properties(undefined);
351
- obj[defaultKey] = identity.identityKey.toHex();
352
-
353
378
  const automergeIndex = space.automergeSpaceState.rootUrl;
354
379
  invariant(automergeIndex);
355
380
  const document = await this._serviceContext.automergeHost.repo.find<SpaceDoc>(automergeIndex as any);
356
381
  await document.whenReady();
357
382
 
383
+ // TODO(dmaretskyi): Better API for low-level data access.
384
+ const properties: ObjectStructure = {
385
+ system: {
386
+ type: encodeReference(E.getTypeReference(Properties)!),
387
+ },
388
+ data: {
389
+ [defaultKey]: identity.identityKey.toHex(),
390
+ },
391
+ meta: {
392
+ keys: [],
393
+ },
394
+ };
395
+ const propertiesId = PublicKey.random().toHex();
358
396
  document.change((doc: SpaceDoc) => {
359
- assignDeep(doc, ['objects', getAutomergeObjectCore(obj).id], getRawDoc(obj).handle.docSync());
397
+ assignDeep(doc, ['objects', propertiesId], properties);
360
398
  });
361
399
 
400
+ await this._serviceContext.automergeHost.repo.flush();
401
+
362
402
  return identity;
363
403
  }
364
404
  }
@@ -31,7 +31,7 @@ const serviceBundle = createServiceBundle<TestServices>({
31
31
  describe('service registry', () => {
32
32
  test('builds a service registry', async () => {
33
33
  const remoteSource = 'https://remote.source';
34
- const serviceContext = createServiceContext();
34
+ const serviceContext = await createServiceContext();
35
35
  await serviceContext.open(new Context());
36
36
 
37
37
  const serviceRegistry = new ServiceRegistry(serviceBundle, {
@@ -5,6 +5,8 @@
5
5
  import { PublicKey } from '@dxos/keys';
6
6
  import { humanize } from '@dxos/util';
7
7
 
8
+ export const ClientServicesProviderResource = Symbol.for('dxos.resource.ClientServices');
9
+
8
10
  // TODO(burdon): Move to util.
9
11
 
10
12
  export type JsonStringifyOptions = {
@@ -20,7 +20,7 @@ describe('DataSpaceManager', () => {
20
20
 
21
21
  const peer = builder.createPeer();
22
22
  await peer.createIdentity();
23
- await openAndClose(peer.dataSpaceManager);
23
+ await openAndClose(peer.automergeHost, peer.dataSpaceManager);
24
24
 
25
25
  const space = await peer.dataSpaceManager.createSpace();
26
26
 
@@ -42,7 +42,7 @@ describe('DataSpaceManager', () => {
42
42
  const peer2 = builder.createPeer();
43
43
  await peer2.createIdentity();
44
44
 
45
- await openAndClose(peer1.dataSpaceManager, peer2.dataSpaceManager);
45
+ await openAndClose(peer1.automergeHost, peer1.dataSpaceManager, peer2.automergeHost, peer2.dataSpaceManager);
46
46
 
47
47
  const space1 = await peer1.dataSpaceManager.createSpace();
48
48
  await space1.inner.controlPipeline.state.waitUntilTimeframe(space1.inner.controlPipeline.state.endTimeframe);
@@ -111,7 +111,7 @@ describe('DataSpaceManager', () => {
111
111
  await peer2.createIdentity();
112
112
  await peer2.dataSpaceManager.open();
113
113
 
114
- await openAndClose(peer1.dataSpaceManager, peer2.dataSpaceManager);
114
+ await openAndClose(peer1.automergeHost, peer1.dataSpaceManager, peer2.automergeHost, peer2.dataSpaceManager);
115
115
 
116
116
  const space1 = await peer1.dataSpaceManager.createSpace();
117
117
  await space1.inner.controlPipeline.state.waitUntilTimeframe(space1.inner.controlPipeline.state.endTimeframe);
@@ -153,7 +153,7 @@ describe('DataSpaceManager', () => {
153
153
 
154
154
  const peer = builder.createPeer();
155
155
  await peer.createIdentity();
156
- await openAndClose(peer.dataSpaceManager);
156
+ await openAndClose(peer.automergeHost, peer.dataSpaceManager);
157
157
 
158
158
  const space = await peer.dataSpaceManager.createSpace();
159
159
  await space.inner.controlPipeline.state.waitUntilTimeframe(space.inner.controlPipeline.state.endTimeframe);
@@ -22,7 +22,7 @@ describe('SpacesService', () => {
22
22
  let spacesService: SpacesService;
23
23
 
24
24
  beforeEach(async () => {
25
- serviceContext = createServiceContext();
25
+ serviceContext = await createServiceContext();
26
26
  await serviceContext.open(new Context());
27
27
  spacesService = new SpacesServiceImpl(serviceContext.identityManager, serviceContext.spaceManager, async () => {
28
28
  await serviceContext.initialized.wait();
@@ -3,3 +3,4 @@
3
3
  //
4
4
 
5
5
  export * from './storage';
6
+ export * from './level';
@@ -0,0 +1,19 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { Level } from 'level';
6
+ import path from 'node:path';
7
+
8
+ import { PublicKey } from '@dxos/keys';
9
+ import { type Runtime } from '@dxos/protocols/proto/dxos/config';
10
+
11
+ import { getRootPath, isPersistent } from './util';
12
+
13
+ export const createLevel = async (config: Runtime.Client.Storage) => {
14
+ const persistent = isPersistent(config);
15
+ const storagePath = persistent ? path.join(getRootPath(config), 'level') : `/tmp/dxos-${PublicKey.random().toHex()}`;
16
+ const level = new Level<string, string>(storagePath);
17
+ await level.open();
18
+ return level;
19
+ };
@@ -4,22 +4,16 @@
4
4
  // Copyright 2023 DXOS.org
5
5
  //
6
6
 
7
- import { DX_DATA } from '@dxos/client-protocol';
8
7
  import { InvalidConfigError } from '@dxos/protocols';
9
8
  import { Runtime } from '@dxos/protocols/proto/dxos/config';
10
9
  import { createStorage, StorageType } from '@dxos/random-access-storage';
11
- import { isNode } from '@dxos/util';
12
10
 
13
11
  import StorageDriver = Runtime.Client.Storage.StorageDriver;
12
+ import { getRootPath } from './util';
14
13
 
15
14
  // TODO(burdon): Factor out.
16
15
  export const createStorageObjects = (config: Runtime.Client.Storage) => {
17
- const {
18
- persistent = false,
19
- keyStore,
20
- dataStore,
21
- dataRoot = isNode() ? DX_DATA : 'dxos/storage', // TODO(burdon): Factor out const.
22
- } = config ?? {};
16
+ const { persistent = false, keyStore, dataStore } = config ?? {};
23
17
 
24
18
  if (persistent && dataStore === StorageDriver.RAM) {
25
19
  throw new InvalidConfigError('RAM storage cannot be used in persistent mode.');
@@ -37,7 +31,7 @@ export const createStorageObjects = (config: Runtime.Client.Storage) => {
37
31
  return {
38
32
  storage: createStorage({
39
33
  type: persistent ? toStorageType(dataStore) : StorageType.RAM,
40
- root: `${dataRoot}/`,
34
+ root: getRootPath(config),
41
35
  }),
42
36
  };
43
37
  };
@@ -0,0 +1,19 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { DX_DATA } from '@dxos/client-protocol';
6
+ import { Runtime } from '@dxos/protocols/proto/dxos/config';
7
+ import { isNode } from '@dxos/util';
8
+
9
+ export const getRootPath = (config: Runtime.Client.Storage) => {
10
+ const { dataRoot = isNode() ? DX_DATA : 'dxos/storage' } = config ?? {};
11
+ return `${dataRoot}/`;
12
+ };
13
+
14
+ export const isPersistent = (config: Runtime.Client.Storage) => {
15
+ const { persistent = false } = config ?? {};
16
+ return (
17
+ (config.dataStore !== undefined && config.dataStore !== Runtime.Client.Storage.StorageDriver.RAM) || persistent
18
+ );
19
+ };
@@ -16,7 +16,7 @@ import {
16
16
  } from '@dxos/protocols/proto/dxos/client/services';
17
17
  import { jsonKeyReplacer, type MaybePromise } from '@dxos/util';
18
18
 
19
- import { type Diagnostics } from '../services';
19
+ import { type Diagnostics } from '../diagnostics';
20
20
  import { getPlatform } from '../services/platform';
21
21
 
22
22
  export type SystemServiceOptions = {
@@ -6,13 +6,22 @@ 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 MyLevel,
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';
13
21
  import { MemoryTransportFactory, NetworkManager } from '@dxos/network-manager';
14
22
  import { createStorage, StorageType, type Storage } from '@dxos/random-access-storage';
15
23
  import { BlobStore } from '@dxos/teleport-extension-object-sync';
24
+ import { type MaybePromise } from '@dxos/util';
16
25
 
17
26
  import { ClientServicesHost, ServiceContext } from '../services';
18
27
  import { DataSpaceManager, type SigningContext } from '../spaces';
@@ -29,7 +38,7 @@ export const createServiceHost = (config: Config, signalManagerContext: MemorySi
29
38
  });
30
39
  };
31
40
 
32
- export const createServiceContext = ({
41
+ export const createServiceContext = async ({
33
42
  signalContext = new MemorySignalManagerContext(),
34
43
  storage = createStorage({ type: StorageType.RAM }),
35
44
  }: {
@@ -41,8 +50,10 @@ export const createServiceContext = ({
41
50
  signalManager,
42
51
  transportFactory: MemoryTransportFactory,
43
52
  });
53
+ const level = createTestLevel();
54
+ await level.open();
44
55
 
45
- return new ServiceContext(storage, networkManager, signalManager);
56
+ return new ServiceContext(storage, level, networkManager, signalManager);
46
57
  };
47
58
 
48
59
  export const createPeers = async (numPeers: number) => {
@@ -50,7 +61,7 @@ export const createPeers = async (numPeers: number) => {
50
61
 
51
62
  return await Promise.all(
52
63
  Array.from(Array(numPeers)).map(async () => {
53
- const peer = createServiceContext({ signalContext });
64
+ const peer = await createServiceContext({ signalContext });
54
65
  await peer.open(new Context());
55
66
  return peer;
56
67
  }),
@@ -83,6 +94,7 @@ export type TestPeerOpts = {
83
94
 
84
95
  export type TestPeerProps = {
85
96
  storage?: Storage;
97
+ level?: MaybePromise<MyLevel>;
86
98
  feedStore?: FeedStore<any>;
87
99
  metadataStore?: MetadataStore;
88
100
  keyring?: Keyring;
@@ -115,6 +127,10 @@ export class TestPeer {
115
127
  return (this._props.keyring ??= new Keyring(this.storage.createDirectory('keyring')));
116
128
  }
117
129
 
130
+ get level() {
131
+ return (this._props.level ??= createTestLevel());
132
+ }
133
+
118
134
  get feedStore() {
119
135
  return (this._props.feedStore ??= new FeedStore({
120
136
  factory: new FeedFactory({
@@ -161,7 +177,9 @@ export class TestPeer {
161
177
  }
162
178
 
163
179
  get automergeHost() {
164
- return (this._props.automergeHost ??= new AutomergeHost({ directory: this.storage.createDirectory('automerge') }));
180
+ return (this._props.automergeHost ??= new AutomergeHost({
181
+ db: Promise.resolve(this.level).then((level) => level.sublevel('automerge')),
182
+ }));
165
183
  }
166
184
 
167
185
  get dataSpaceManager() {
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const DXOS_VERSION = "0.4.10-main.826d4ee";
1
+ export const DXOS_VERSION = "0.4.10-main.8583d5a";