@dxos/client-services 0.8.1-main.ba2dec9 → 0.8.1-staging.391c573

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 (43) hide show
  1. package/dist/lib/{node-esm/chunk-FLBMHVSB.mjs → browser/chunk-27WUD3Q6.mjs} +1303 -853
  2. package/dist/lib/browser/chunk-27WUD3Q6.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-K7LO776I.cjs → chunk-SJ3DQ4HS.cjs} +1013 -712
  7. package/dist/lib/node/chunk-SJ3DQ4HS.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/{browser/chunk-VJODS5QE.mjs → node-esm/chunk-ZQFIFOIV.mjs} +718 -554
  12. package/dist/lib/node-esm/chunk-ZQFIFOIV.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/space-export/index.d.ts +3 -0
  17. package/dist/types/src/packlets/space-export/index.d.ts.map +1 -0
  18. package/dist/types/src/packlets/space-export/space-archive-reader.d.ts +9 -0
  19. package/dist/types/src/packlets/space-export/space-archive-reader.d.ts.map +1 -0
  20. package/dist/types/src/packlets/space-export/space-archive-writer.d.ts +23 -0
  21. package/dist/types/src/packlets/space-export/space-archive-writer.d.ts.map +1 -0
  22. package/dist/types/src/packlets/space-export/tar.test.d.ts +2 -0
  23. package/dist/types/src/packlets/space-export/tar.test.d.ts.map +1 -0
  24. package/dist/types/src/packlets/spaces/data-space-manager.d.ts +8 -2
  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 +1 -0
  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 +3 -1
  29. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  30. package/dist/types/src/version.d.ts +1 -1
  31. package/dist/types/src/version.d.ts.map +1 -1
  32. package/package.json +39 -38
  33. package/src/packlets/space-export/index.ts +6 -0
  34. package/src/packlets/space-export/space-archive-reader.ts +33 -0
  35. package/src/packlets/space-export/space-archive-writer.ts +83 -0
  36. package/src/packlets/space-export/tar.test.ts +25 -0
  37. package/src/packlets/spaces/data-space-manager.ts +70 -9
  38. package/src/packlets/spaces/data-space.ts +14 -1
  39. package/src/packlets/spaces/spaces-service.ts +39 -1
  40. package/src/version.ts +1 -1
  41. package/dist/lib/browser/chunk-VJODS5QE.mjs.map +0 -7
  42. package/dist/lib/node/chunk-K7LO776I.cjs.map +0 -7
  43. package/dist/lib/node-esm/chunk-FLBMHVSB.mjs.map +0 -7
@@ -3,6 +3,7 @@
3
3
  //
4
4
 
5
5
  import { EventSubscriptions, UpdateScheduler, scheduleTask } from '@dxos/async';
6
+ import type { AutomergeUrl } from '@dxos/automerge/automerge-repo';
6
7
  import { Stream } from '@dxos/codec-protobuf/stream';
7
8
  import {
8
9
  createAdmissionCredentials,
@@ -13,7 +14,8 @@ import {
13
14
  import { raise } from '@dxos/debug';
14
15
  import { type SpaceManager } from '@dxos/echo-pipeline';
15
16
  import { writeMessages } from '@dxos/feed-store';
16
- import { invariant } from '@dxos/invariant';
17
+ import { assertArgument, assertState, invariant } from '@dxos/invariant';
18
+ import { SpaceId } from '@dxos/keys';
17
19
  import { log } from '@dxos/log';
18
20
  import {
19
21
  ApiError,
@@ -40,6 +42,10 @@ import {
40
42
  type JoinSpaceResponse,
41
43
  type JoinBySpaceKeyRequest,
42
44
  type CreateEpochResponse,
45
+ type ExportSpaceResponse,
46
+ type ExportSpaceRequest,
47
+ type ImportSpaceRequest,
48
+ type ImportSpaceResponse,
43
49
  } from '@dxos/protocols/proto/dxos/client/services';
44
50
  import { type Credential } from '@dxos/protocols/proto/dxos/halo/credentials';
45
51
  import { type GossipMessage } from '@dxos/protocols/proto/dxos/mesh/teleport/gossip';
@@ -49,6 +55,7 @@ import { type Provider } from '@dxos/util';
49
55
  import { type DataSpace } from './data-space';
50
56
  import { type DataSpaceManager } from './data-space-manager';
51
57
  import { type IdentityManager } from '../identity';
58
+ import { extractSpaceArchive, SpaceArchiveWriter } from '../space-export';
52
59
 
53
60
  export class SpacesServiceImpl implements SpacesService {
54
61
  constructor(
@@ -256,6 +263,37 @@ export class SpacesServiceImpl implements SpacesService {
256
263
  return this._joinByAdmission({ credential });
257
264
  }
258
265
 
266
+ async exportSpace(request: ExportSpaceRequest): Promise<ExportSpaceResponse> {
267
+ await using writer = await new SpaceArchiveWriter().open();
268
+ assertArgument(SpaceId.isValid(request.spaceId), 'Invalid space ID');
269
+
270
+ const dataSpaceManager = await this._getDataSpaceManager();
271
+ const space = dataSpaceManager.getSpaceById(request.spaceId) ?? raise(new Error('Space not found'));
272
+ await writer.begin({ spaceId: space.id });
273
+ const rootUrl = space.automergeSpaceState.lastEpoch?.subject.assertion.automergeRoot;
274
+ assertState(rootUrl, 'Space does not have a root URL');
275
+ await writer.setCurrentRootUrl(rootUrl);
276
+
277
+ for await (const [documentId, data] of space.getAllDocuments()) {
278
+ await writer.writeDocument(documentId, data);
279
+ }
280
+
281
+ const archive = await writer.finish();
282
+ return { archive };
283
+ }
284
+
285
+ async importSpace(request: ImportSpaceRequest): Promise<ImportSpaceResponse> {
286
+ const dataSpaceManager = await this._getDataSpaceManager();
287
+ const extracted = await extractSpaceArchive(request.archive);
288
+ invariant(extracted.metadata.echo?.currentRootUrl, 'Space archive does not contain a root URL');
289
+ const space = await dataSpaceManager.createSpace({
290
+ documents: extracted.documents,
291
+ rootUrl: extracted.metadata.echo?.currentRootUrl as AutomergeUrl,
292
+ });
293
+ await this._updateMetrics();
294
+ return { newSpaceId: space.id };
295
+ }
296
+
259
297
  private async _joinByAdmission({ credential }: ContactAdmission): Promise<JoinSpaceResponse> {
260
298
  const assertion = getCredentialAssertion(credential);
261
299
  invariant(assertion['@type'] === 'dxos.halo.credentials.SpaceMember', 'Invalid credential');
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const DXOS_VERSION = "0.8.1-main.ba2dec9";
1
+ export const DXOS_VERSION = "0.8.1-staging.391c573";