@dxos/client-services 0.4.10-main.d658471 → 0.4.10-main.d6ef25d
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.
- package/dist/lib/browser/{chunk-MYKBSRL5.mjs → chunk-BASAWGAA.mjs} +1232 -972
- package/dist/lib/browser/chunk-BASAWGAA.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +13 -3
- package/dist/lib/browser/index.mjs.map +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/packlets/testing/index.mjs +9 -4
- package/dist/lib/browser/packlets/testing/index.mjs.map +3 -3
- package/dist/lib/node/{chunk-UBE57IO7.cjs → chunk-4PLPSVK3.cjs} +1094 -917
- package/dist/lib/node/chunk-4PLPSVK3.cjs.map +7 -0
- package/dist/lib/node/index.cjs +49 -39
- package/dist/lib/node/index.cjs.map +1 -1
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/packlets/testing/index.cjs +14 -9
- package/dist/lib/node/packlets/testing/index.cjs.map +3 -3
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/packlets/diagnostics/browser-diagnostics-broadcast.d.ts +5 -0
- package/dist/types/src/packlets/diagnostics/browser-diagnostics-broadcast.d.ts.map +1 -0
- package/dist/types/src/packlets/diagnostics/diagnostics-broadcast.d.ts +5 -0
- package/dist/types/src/packlets/diagnostics/diagnostics-broadcast.d.ts.map +1 -0
- package/dist/types/src/packlets/diagnostics/diagnostics-collector.d.ts +15 -0
- package/dist/types/src/packlets/diagnostics/diagnostics-collector.d.ts.map +1 -0
- package/dist/types/src/packlets/{services → diagnostics}/diagnostics.d.ts +1 -1
- package/dist/types/src/packlets/diagnostics/diagnostics.d.ts.map +1 -0
- package/dist/types/src/packlets/diagnostics/index.d.ts +4 -0
- package/dist/types/src/packlets/diagnostics/index.d.ts.map +1 -0
- package/dist/types/src/packlets/indexing/util.d.ts +2 -1
- package/dist/types/src/packlets/indexing/util.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/index.d.ts +1 -0
- package/dist/types/src/packlets/invitations/index.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitation-extension.d.ts +1 -0
- package/dist/types/src/packlets/invitations/invitation-extension.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitations-handler.d.ts +4 -2
- package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitations-manager.d.ts +42 -0
- package/dist/types/src/packlets/invitations/invitations-manager.d.ts.map +1 -0
- package/dist/types/src/packlets/invitations/invitations-service.d.ts +7 -23
- package/dist/types/src/packlets/invitations/invitations-service.d.ts.map +1 -1
- package/dist/types/src/packlets/services/index.d.ts +1 -1
- package/dist/types/src/packlets/services/index.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-context.d.ts +2 -0
- package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-host.d.ts +5 -1
- package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
- package/dist/types/src/packlets/services/util.d.ts +1 -0
- package/dist/types/src/packlets/services/util.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
- package/dist/types/src/packlets/system/system-service.d.ts +1 -1
- package/dist/types/src/packlets/system/system-service.d.ts.map +1 -1
- package/dist/types/src/packlets/testing/test-builder.d.ts +3 -1
- package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
- package/dist/types/src/version.d.ts +1 -1
- package/package.json +35 -34
- package/src/index.ts +1 -0
- package/src/packlets/diagnostics/browser-diagnostics-broadcast.ts +94 -0
- package/src/packlets/diagnostics/diagnostics-broadcast.ts +20 -0
- package/src/packlets/diagnostics/diagnostics-collector.ts +65 -0
- package/src/packlets/{services → diagnostics}/diagnostics.ts +2 -2
- package/src/packlets/diagnostics/index.ts +7 -0
- package/src/packlets/indexing/util.ts +15 -8
- package/src/packlets/invitations/index.ts +1 -0
- package/src/packlets/invitations/invitation-extension.ts +28 -1
- package/src/packlets/invitations/invitations-handler.ts +74 -34
- package/src/packlets/invitations/invitations-manager.ts +197 -0
- package/src/packlets/invitations/invitations-service.ts +21 -168
- package/src/packlets/services/automerge-host.test.ts +10 -4
- package/src/packlets/services/index.ts +1 -1
- package/src/packlets/services/service-context.test.ts +4 -1
- package/src/packlets/services/service-context.ts +16 -3
- package/src/packlets/services/service-host.ts +34 -19
- package/src/packlets/services/util.ts +2 -0
- package/src/packlets/spaces/data-space-manager.test.ts +4 -4
- package/src/packlets/spaces/data-space.ts +1 -1
- package/src/packlets/storage/level.ts +1 -1
- package/src/packlets/system/system-service.ts +1 -1
- package/src/packlets/testing/test-builder.ts +20 -4
- package/src/version.ts +1 -1
- package/dist/lib/browser/chunk-MYKBSRL5.mjs.map +0 -7
- package/dist/lib/node/chunk-UBE57IO7.cjs.map +0 -7
- package/dist/types/src/packlets/services/diagnostics.d.ts.map +0 -1
|
@@ -8,9 +8,15 @@ import { Event, synchronized } from '@dxos/async';
|
|
|
8
8
|
import { clientServiceBundle, defaultKey, type ClientServices, Properties } from '@dxos/client-protocol';
|
|
9
9
|
import { type Config } from '@dxos/config';
|
|
10
10
|
import { Context } from '@dxos/context';
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
import {
|
|
12
|
+
DataServiceImpl,
|
|
13
|
+
type ObjectStructure,
|
|
14
|
+
encodeReference,
|
|
15
|
+
type SpaceDoc,
|
|
16
|
+
type LevelDB,
|
|
17
|
+
} from '@dxos/echo-pipeline';
|
|
18
|
+
import { getTypeReference } from '@dxos/echo-schema';
|
|
19
|
+
import { QueryServiceImpl } from '@dxos/indexing';
|
|
14
20
|
import { invariant } from '@dxos/invariant';
|
|
15
21
|
import { PublicKey } from '@dxos/keys';
|
|
16
22
|
import { log } from '@dxos/log';
|
|
@@ -23,11 +29,15 @@ import { TRACE_PROCESSOR, trace as Trace } from '@dxos/tracing';
|
|
|
23
29
|
import { assignDeep } from '@dxos/util';
|
|
24
30
|
import { WebsocketRpcClient } from '@dxos/websocket-rpc';
|
|
25
31
|
|
|
26
|
-
import { createDiagnostics } from './diagnostics';
|
|
27
32
|
import { ServiceContext, type ServiceContextRuntimeParams } from './service-context';
|
|
28
33
|
import { ServiceRegistry } from './service-registry';
|
|
29
34
|
import { DevicesServiceImpl } from '../devices';
|
|
30
35
|
import { DevtoolsHostEvents, DevtoolsServiceImpl } from '../devtools';
|
|
36
|
+
import {
|
|
37
|
+
type CollectDiagnosticsBroadcastHandler,
|
|
38
|
+
createCollectDiagnosticsBroadcastHandler,
|
|
39
|
+
createDiagnostics,
|
|
40
|
+
} from '../diagnostics';
|
|
31
41
|
import { IdentityServiceImpl, type CreateIdentityOptions } from '../identity';
|
|
32
42
|
import { InvitationsServiceImpl } from '../invitations';
|
|
33
43
|
import { Lock, type ResourceLock } from '../locks';
|
|
@@ -46,6 +56,7 @@ export type ClientServicesHostParams = {
|
|
|
46
56
|
signalManager?: SignalManager;
|
|
47
57
|
connectionLog?: boolean;
|
|
48
58
|
storage?: Storage;
|
|
59
|
+
level?: LevelDB;
|
|
49
60
|
lockKey?: string;
|
|
50
61
|
callbacks?: ClientServicesHostCallbacks;
|
|
51
62
|
runtimeParams?: ServiceContextRuntimeParams;
|
|
@@ -72,6 +83,7 @@ export class ClientServicesHost {
|
|
|
72
83
|
private readonly _systemService: SystemServiceImpl;
|
|
73
84
|
private readonly _loggingService: LoggingServiceImpl;
|
|
74
85
|
private readonly _tracingService = TRACE_PROCESSOR.createTraceSender();
|
|
86
|
+
private _queryService!: QueryServiceImpl;
|
|
75
87
|
|
|
76
88
|
private _config?: Config;
|
|
77
89
|
private readonly _statusUpdate = new Event<void>();
|
|
@@ -84,6 +96,7 @@ export class ClientServicesHost {
|
|
|
84
96
|
|
|
85
97
|
private _serviceContext!: ServiceContext;
|
|
86
98
|
private readonly _runtimeParams?: ServiceContextRuntimeParams;
|
|
99
|
+
private diagnosticsBroadcastHandler: CollectDiagnosticsBroadcastHandler;
|
|
87
100
|
|
|
88
101
|
@Trace.info()
|
|
89
102
|
private _opening = false;
|
|
@@ -96,12 +109,14 @@ export class ClientServicesHost {
|
|
|
96
109
|
transportFactory,
|
|
97
110
|
signalManager,
|
|
98
111
|
storage,
|
|
112
|
+
level,
|
|
99
113
|
// TODO(wittjosiah): Turn this on by default.
|
|
100
114
|
lockKey,
|
|
101
115
|
callbacks,
|
|
102
116
|
runtimeParams,
|
|
103
117
|
}: ClientServicesHostParams = {}) {
|
|
104
118
|
this._storage = storage;
|
|
119
|
+
this._level = level;
|
|
105
120
|
this._callbacks = callbacks;
|
|
106
121
|
this._runtimeParams = runtimeParams;
|
|
107
122
|
|
|
@@ -141,6 +156,7 @@ export class ClientServicesHost {
|
|
|
141
156
|
},
|
|
142
157
|
});
|
|
143
158
|
|
|
159
|
+
this.diagnosticsBroadcastHandler = createCollectDiagnosticsBroadcastHandler(this._systemService);
|
|
144
160
|
this._loggingService = new LoggingServiceImpl();
|
|
145
161
|
|
|
146
162
|
this._serviceRegistry = new ServiceRegistry<ClientServices>(clientServiceBundle, {
|
|
@@ -233,6 +249,8 @@ export class ClientServicesHost {
|
|
|
233
249
|
if (!this._level) {
|
|
234
250
|
this._level = await createLevel(this._config.get('runtime.client.storage', {})!);
|
|
235
251
|
}
|
|
252
|
+
await this._level.open();
|
|
253
|
+
|
|
236
254
|
await this._resourceLock?.acquire();
|
|
237
255
|
|
|
238
256
|
await this._loggingService.open();
|
|
@@ -245,6 +263,12 @@ export class ClientServicesHost {
|
|
|
245
263
|
this._runtimeParams,
|
|
246
264
|
);
|
|
247
265
|
|
|
266
|
+
this._queryService = new QueryServiceImpl({
|
|
267
|
+
indexer: this._serviceContext.indexer,
|
|
268
|
+
automergeHost: this._serviceContext.automergeHost,
|
|
269
|
+
});
|
|
270
|
+
await this._queryService.open(ctx);
|
|
271
|
+
|
|
248
272
|
this._serviceRegistry.setServices({
|
|
249
273
|
SystemService: this._systemService,
|
|
250
274
|
|
|
@@ -255,11 +279,7 @@ export class ClientServicesHost {
|
|
|
255
279
|
(profile) => this._serviceContext.broadcastProfileUpdate(profile),
|
|
256
280
|
),
|
|
257
281
|
|
|
258
|
-
InvitationsService: new InvitationsServiceImpl(
|
|
259
|
-
this._serviceContext.invitations,
|
|
260
|
-
(invitation) => this._serviceContext.getInvitationHandler(invitation),
|
|
261
|
-
this._serviceContext.metadataStore,
|
|
262
|
-
),
|
|
282
|
+
InvitationsService: new InvitationsServiceImpl(this._serviceContext.invitationsManager),
|
|
263
283
|
|
|
264
284
|
DevicesService: new DevicesServiceImpl(this._serviceContext.identityManager),
|
|
265
285
|
|
|
@@ -274,10 +294,7 @@ export class ClientServicesHost {
|
|
|
274
294
|
|
|
275
295
|
DataService: new DataServiceImpl(this._serviceContext.automergeHost),
|
|
276
296
|
|
|
277
|
-
|
|
278
|
-
indexer: this._serviceContext.indexer,
|
|
279
|
-
automergeHost: this._serviceContext.automergeHost,
|
|
280
|
-
}),
|
|
297
|
+
QueryService: this._queryService,
|
|
281
298
|
|
|
282
299
|
NetworkService: new NetworkServiceImpl(this._serviceContext.networkManager, this._serviceContext.signalManager),
|
|
283
300
|
|
|
@@ -293,11 +310,6 @@ export class ClientServicesHost {
|
|
|
293
310
|
});
|
|
294
311
|
|
|
295
312
|
await this._serviceContext.open(ctx);
|
|
296
|
-
// TODO(nf): move to InvitationManager in ServiceContext?
|
|
297
|
-
invariant(this.serviceRegistry.services.InvitationsService);
|
|
298
|
-
const loadedInvitations = await this.serviceRegistry.services.InvitationsService.loadPersistentInvitations();
|
|
299
|
-
|
|
300
|
-
log('loaded persistent invitations', { count: loadedInvitations.invitations?.length });
|
|
301
313
|
|
|
302
314
|
const devtoolsProxy = this._config?.get('runtime.client.devtoolsProxy');
|
|
303
315
|
if (devtoolsProxy) {
|
|
@@ -309,6 +321,7 @@ export class ClientServicesHost {
|
|
|
309
321
|
});
|
|
310
322
|
void this._devtoolsProxy.open();
|
|
311
323
|
}
|
|
324
|
+
this.diagnosticsBroadcastHandler.start();
|
|
312
325
|
|
|
313
326
|
this._opening = false;
|
|
314
327
|
this._open = true;
|
|
@@ -327,9 +340,11 @@ export class ClientServicesHost {
|
|
|
327
340
|
|
|
328
341
|
const deviceKey = this._serviceContext.identityManager.identity?.deviceKey;
|
|
329
342
|
log('closing...', { deviceKey });
|
|
343
|
+
this.diagnosticsBroadcastHandler.stop();
|
|
330
344
|
await this._devtoolsProxy?.close();
|
|
331
345
|
this._serviceRegistry.setServices({ SystemService: this._systemService });
|
|
332
346
|
await this._loggingService.close();
|
|
347
|
+
await this._queryService.close();
|
|
333
348
|
await this._serviceContext.close();
|
|
334
349
|
await this._level?.close();
|
|
335
350
|
this._open = false;
|
|
@@ -364,7 +379,7 @@ export class ClientServicesHost {
|
|
|
364
379
|
// TODO(dmaretskyi): Better API for low-level data access.
|
|
365
380
|
const properties: ObjectStructure = {
|
|
366
381
|
system: {
|
|
367
|
-
type: encodeReference(
|
|
382
|
+
type: encodeReference(getTypeReference(Properties)!),
|
|
368
383
|
},
|
|
369
384
|
data: {
|
|
370
385
|
[defaultKey]: identity.identityKey.toHex(),
|
|
@@ -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);
|
|
@@ -6,7 +6,6 @@ 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 { TYPE_PROPERTIES } from '@dxos/echo-db';
|
|
10
9
|
import {
|
|
11
10
|
type MetadataStore,
|
|
12
11
|
type Space,
|
|
@@ -15,6 +14,7 @@ import {
|
|
|
15
14
|
type SpaceDoc,
|
|
16
15
|
} from '@dxos/echo-pipeline';
|
|
17
16
|
import { AutomergeDocumentLoaderImpl } from '@dxos/echo-pipeline';
|
|
17
|
+
import { TYPE_PROPERTIES } from '@dxos/echo-schema';
|
|
18
18
|
import { type FeedStore } from '@dxos/feed-store';
|
|
19
19
|
import { failedInvariant, invariant } from '@dxos/invariant';
|
|
20
20
|
import { type Keyring } from '@dxos/keyring';
|
|
@@ -12,7 +12,7 @@ import { getRootPath, isPersistent } from './util';
|
|
|
12
12
|
|
|
13
13
|
export const createLevel = async (config: Runtime.Client.Storage) => {
|
|
14
14
|
const persistent = isPersistent(config);
|
|
15
|
-
const storagePath = persistent ? getRootPath(config)
|
|
15
|
+
const storagePath = persistent ? path.join(getRootPath(config), 'level') : `/tmp/dxos-${PublicKey.random().toHex()}`;
|
|
16
16
|
const level = new Level<string, string>(storagePath);
|
|
17
17
|
await level.open();
|
|
18
18
|
return level;
|
|
@@ -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 '../
|
|
19
|
+
import { type Diagnostics } from '../diagnostics';
|
|
20
20
|
import { getPlatform } from '../services/platform';
|
|
21
21
|
|
|
22
22
|
export type SystemServiceOptions = {
|
|
@@ -6,9 +6,16 @@ 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 {
|
|
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
|
-
import { createTestLevel } from '@dxos/indexing/testing';
|
|
12
19
|
import { Keyring } from '@dxos/keyring';
|
|
13
20
|
import { MemorySignalManager, MemorySignalManagerContext } from '@dxos/messaging';
|
|
14
21
|
import { MemoryTransportFactory, NetworkManager } from '@dxos/network-manager';
|
|
@@ -42,7 +49,8 @@ export const createServiceContext = async ({
|
|
|
42
49
|
signalManager,
|
|
43
50
|
transportFactory: MemoryTransportFactory,
|
|
44
51
|
});
|
|
45
|
-
const level =
|
|
52
|
+
const level = createTestLevel();
|
|
53
|
+
await level.open();
|
|
46
54
|
|
|
47
55
|
return new ServiceContext(storage, level, networkManager, signalManager);
|
|
48
56
|
};
|
|
@@ -85,6 +93,7 @@ export type TestPeerOpts = {
|
|
|
85
93
|
|
|
86
94
|
export type TestPeerProps = {
|
|
87
95
|
storage?: Storage;
|
|
96
|
+
level?: LevelDB;
|
|
88
97
|
feedStore?: FeedStore<any>;
|
|
89
98
|
metadataStore?: MetadataStore;
|
|
90
99
|
keyring?: Keyring;
|
|
@@ -117,6 +126,10 @@ export class TestPeer {
|
|
|
117
126
|
return (this._props.keyring ??= new Keyring(this.storage.createDirectory('keyring')));
|
|
118
127
|
}
|
|
119
128
|
|
|
129
|
+
get level() {
|
|
130
|
+
return (this._props.level ??= createTestLevel());
|
|
131
|
+
}
|
|
132
|
+
|
|
120
133
|
get feedStore() {
|
|
121
134
|
return (this._props.feedStore ??= new FeedStore({
|
|
122
135
|
factory: new FeedFactory({
|
|
@@ -163,7 +176,9 @@ export class TestPeer {
|
|
|
163
176
|
}
|
|
164
177
|
|
|
165
178
|
get automergeHost() {
|
|
166
|
-
return (this._props.automergeHost ??= new AutomergeHost({
|
|
179
|
+
return (this._props.automergeHost ??= new AutomergeHost({
|
|
180
|
+
db: this.level.sublevel('automerge'),
|
|
181
|
+
}));
|
|
167
182
|
}
|
|
168
183
|
|
|
169
184
|
get dataSpaceManager() {
|
|
@@ -182,6 +197,7 @@ export class TestPeer {
|
|
|
182
197
|
}
|
|
183
198
|
|
|
184
199
|
async destroy() {
|
|
200
|
+
await this.level.close();
|
|
185
201
|
await this.storage.reset();
|
|
186
202
|
}
|
|
187
203
|
}
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const DXOS_VERSION = "0.4.10-main.
|
|
1
|
+
export const DXOS_VERSION = "0.4.10-main.d6ef25d";
|