@dxos/client-services 0.5.9-main.1cc8373 → 0.5.9-main.1f2bcac

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.
@@ -30,7 +30,7 @@ __export(testing_exports, {
30
30
  sanitizeInvitation: () => sanitizeInvitation
31
31
  });
32
32
  module.exports = __toCommonJS(testing_exports);
33
- var import_chunk_Y4ZFTXGB = require("../../chunk-Y4ZFTXGB.cjs");
33
+ var import_chunk_3Z5PAMUS = require("../../chunk-3Z5PAMUS.cjs");
34
34
  var import_credentials = require("@dxos/credentials");
35
35
  var import_keys = require("@dxos/keys");
36
36
  var import_async = require("@dxos/async");
@@ -227,7 +227,7 @@ var createInvitation = async (host, options) => {
227
227
  authMethod: import_services.Invitation.AuthMethod.NONE,
228
228
  ...options ?? {}
229
229
  };
230
- if (host instanceof import_chunk_Y4ZFTXGB.ServiceContext) {
230
+ if (host instanceof import_chunk_3Z5PAMUS.ServiceContext) {
231
231
  return host.invitationsManager.createInvitation({
232
232
  kind: import_services.Invitation.Kind.SPACE,
233
233
  ...options
@@ -237,7 +237,7 @@ var createInvitation = async (host, options) => {
237
237
  };
238
238
  var acceptInvitation = (guest, invitation, guestDeviceProfile) => {
239
239
  invitation = sanitizeInvitation(invitation);
240
- if (guest instanceof import_chunk_Y4ZFTXGB.ServiceContext) {
240
+ if (guest instanceof import_chunk_3Z5PAMUS.ServiceContext) {
241
241
  return guest.invitationsManager.acceptInvitation({
242
242
  invitation,
243
243
  deviceProfile: guestDeviceProfile
@@ -247,7 +247,7 @@ var acceptInvitation = (guest, invitation, guestDeviceProfile) => {
247
247
  };
248
248
  var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/testing/test-builder.ts";
249
249
  var createServiceHost = (config, signalManagerContext) => {
250
- return new import_chunk_Y4ZFTXGB.ClientServicesHost({
250
+ return new import_chunk_3Z5PAMUS.ClientServicesHost({
251
251
  config,
252
252
  signalManager: new import_messaging.MemorySignalManager(signalManagerContext),
253
253
  transportFactory: import_network_manager.MemoryTransportFactory
@@ -263,7 +263,7 @@ var createServiceContext = async ({ signalContext = new import_messaging.MemoryS
263
263
  });
264
264
  const level = (0, import_testing.createTestLevel)();
265
265
  await level.open();
266
- return new import_chunk_Y4ZFTXGB.ServiceContext(storage, level, networkManager, signalManager, {
266
+ return new import_chunk_3Z5PAMUS.ServiceContext(storage, level, networkManager, signalManager, {
267
267
  invitationConnectionDefaultParams: {
268
268
  controlHeartbeatInterval: 200
269
269
  },
@@ -370,12 +370,12 @@ var TestPeer = class {
370
370
  });
371
371
  }
372
372
  get dataSpaceManager() {
373
- return this._props.dataSpaceManager ??= new import_chunk_Y4ZFTXGB.DataSpaceManager(this.spaceManager, this.metadataStore, this.keyring, this.identity, this.feedStore, this.echoHost, this.invitationsManager, this._opts.dataSpaceParams);
373
+ return this._props.dataSpaceManager ??= new import_chunk_3Z5PAMUS.DataSpaceManager(this.spaceManager, this.metadataStore, this.keyring, this.identity, this.feedStore, this.echoHost, this.invitationsManager, this._opts.dataSpaceParams);
374
374
  }
375
375
  get invitationsManager() {
376
- return this._props.invitationsManager ??= new import_chunk_Y4ZFTXGB.InvitationsManager(new import_chunk_Y4ZFTXGB.InvitationsHandler(this.networkManager), (invitation) => {
376
+ return this._props.invitationsManager ??= new import_chunk_3Z5PAMUS.InvitationsManager(new import_chunk_3Z5PAMUS.InvitationsHandler(this.networkManager), (invitation) => {
377
377
  if (invitation.kind === import_services2.Invitation.Kind.SPACE) {
378
- return new import_chunk_Y4ZFTXGB.SpaceInvitationProtocol(this.dataSpaceManager, this.identity, this.keyring, invitation.spaceKey);
378
+ return new import_chunk_3Z5PAMUS.SpaceInvitationProtocol(this.dataSpaceManager, this.identity, this.keyring, invitation.spaceKey);
379
379
  } else {
380
380
  throw new Error("not implemented");
381
381
  }
@@ -1 +1 @@
1
- {"version":3,"file":"identity-service.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/identity/identity-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,QAAQ,IAAI,aAAa,EAC9B,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAE7B,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAGtG,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAIlD,qBAAa,mBAAoB,SAAQ,QAAS,YAAW,eAAe;IAExE,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBAJjB,gBAAgB,EAAE,eAAe,EACjC,QAAQ,EAAE,OAAO,EACjB,yBAAyB,EAAE,MAAM,gBAAgB,EACjD,eAAe,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,OAAO,CAAC,QAAQ,CAAC,EACrE,gBAAgB,CAAC,aAAY,eAAe,GAAG,SAAS,KAAK,QAAQ,IAAI,CAAC,aAAA;cAKpE,KAAK;IAOxB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;YAO9D,mBAAmB;IAO3B,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,aAAa,CAAC;IAI9E,aAAa,IAAI,MAAM,CAAC,qBAAqB,CAAC;IAS9C,OAAO,CAAC,YAAY;IAYd,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC;IAO/D,gBAAgB,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC;YAYjF,+BAA+B;CAuC9C"}
1
+ {"version":3,"file":"identity-service.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/identity/identity-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,QAAQ,IAAI,aAAa,EAC9B,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAE7B,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAGtG,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAIlD,qBAAa,mBAAoB,SAAQ,QAAS,YAAW,eAAe;IAExE,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBAJjB,gBAAgB,EAAE,eAAe,EACjC,QAAQ,EAAE,OAAO,EACjB,yBAAyB,EAAE,MAAM,gBAAgB,EACjD,eAAe,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,OAAO,CAAC,QAAQ,CAAC,EACrE,gBAAgB,CAAC,aAAY,eAAe,GAAG,SAAS,KAAK,QAAQ,IAAI,CAAC,aAAA;cAKpE,KAAK;IAOxB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;YAO9D,mBAAmB;IAO3B,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,aAAa,CAAC;IAI9E,aAAa,IAAI,MAAM,CAAC,qBAAqB,CAAC;IAS9C,OAAO,CAAC,YAAY;IAYd,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC;IAO/D,gBAAgB,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC;YAYjF,+BAA+B;CA6C9C"}
@@ -1,9 +1,9 @@
1
- import type { Repo } from '@dxos/automerge/automerge-repo';
2
1
  import { type Context } from '@dxos/context';
2
+ import { type EchoHost } from '@dxos/echo-db';
3
3
  import type { PublicKey, SpaceId } from '@dxos/keys';
4
4
  import { CreateEpochRequest } from '@dxos/protocols/proto/dxos/client/services';
5
5
  export type MigrationContext = {
6
- repo: Repo;
6
+ echoHost: EchoHost;
7
7
  spaceId: SpaceId;
8
8
  /**
9
9
  * @deprecated Remove.
@@ -1 +1 @@
1
- {"version":3,"file":"epoch-migrations.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/spaces/epoch-migrations.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,IAAI,EAAgB,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAqB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAWhE,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAGhF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC;IACxC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAe,OAAO,WAAW,gBAAgB,KAAG,QAAQ,eAAe,CA2FxG,CAAC"}
1
+ {"version":3,"file":"epoch-migrations.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/spaces/epoch-migrations.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,eAAe,CAAC;AAIvB,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAEhF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IAEnB,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC;IACxC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAIF,eAAO,MAAM,iBAAiB,QAAe,OAAO,WAAW,gBAAgB,KAAG,QAAQ,eAAe,CA8GxG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"profile-archive.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/storage/profile-archive.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAA2B,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAG3D,eAAO,MAAM,oBAAoB,YAAa,cAAc,KAAG,UAAkC,CAAC;AAElG,eAAO,MAAM,oBAAoB,SAAU,UAAU,KAAG,cAAmC,CAAC;AAE5F,eAAO,MAAM,iBAAiB,wBAG3B;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB,KAAG,QAAQ,cAAc,CAqCzB,CAAC;AAEF,eAAO,MAAM,iBAAiB,wBAIzB;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB,WACQ,cAAc,KACtB,QAAQ,IAAI,CA0Bd,CAAC"}
1
+ {"version":3,"file":"profile-archive.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/storage/profile-archive.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAA2B,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAG3D,eAAO,MAAM,oBAAoB,YAAa,cAAc,KAAG,UAAkC,CAAC;AAElG,eAAO,MAAM,oBAAoB,SAAU,UAAU,KAAG,cAAmC,CAAC;AAE5F,eAAO,MAAM,iBAAiB,wBAG3B;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB,KAAG,QAAQ,cAAc,CAqCzB,CAAC;AAEF,eAAO,MAAM,iBAAiB,wBAIzB;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB,WACQ,cAAc,KACtB,QAAQ,IAAI,CAwCd,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const DXOS_VERSION = "0.5.9-main.1cc8373";
1
+ export declare const DXOS_VERSION = "0.5.9-main.1f2bcac";
2
2
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/client-services",
3
- "version": "0.5.9-main.1cc8373",
3
+ "version": "0.5.9-main.1f2bcac",
4
4
  "description": "DXOS client services implementation",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -23,45 +23,45 @@
23
23
  ],
24
24
  "dependencies": {
25
25
  "platform": "^1.3.6",
26
- "@dxos/async": "0.5.9-main.1cc8373",
27
- "@dxos/automerge": "0.5.9-main.1cc8373",
28
- "@dxos/client-protocol": "0.5.9-main.1cc8373",
29
- "@dxos/codec-protobuf": "0.5.9-main.1cc8373",
30
- "@dxos/context": "0.5.9-main.1cc8373",
31
- "@dxos/config": "0.5.9-main.1cc8373",
32
- "@dxos/credentials": "0.5.9-main.1cc8373",
33
- "@dxos/crypto": "0.5.9-main.1cc8373",
34
- "@dxos/debug": "0.5.9-main.1cc8373",
35
- "@dxos/echo-pipeline": "0.5.9-main.1cc8373",
36
- "@dxos/echo-db": "0.5.9-main.1cc8373",
37
- "@dxos/echo-protocol": "0.5.9-main.1cc8373",
38
- "@dxos/echo-schema": "0.5.9-main.1cc8373",
39
- "@dxos/feed-store": "0.5.9-main.1cc8373",
40
- "@dxos/invariant": "0.5.9-main.1cc8373",
41
- "@dxos/indexing": "0.5.9-main.1cc8373",
42
- "@dxos/keyring": "0.5.9-main.1cc8373",
43
- "@dxos/keys": "0.5.9-main.1cc8373",
44
- "@dxos/kv-store": "0.5.9-main.1cc8373",
45
- "@dxos/lock-file": "0.5.9-main.1cc8373",
46
- "@dxos/log": "0.5.9-main.1cc8373",
47
- "@dxos/messaging": "0.5.9-main.1cc8373",
48
- "@dxos/network-manager": "0.5.9-main.1cc8373",
49
- "@dxos/node-std": "0.5.9-main.1cc8373",
50
- "@dxos/protocols": "0.5.9-main.1cc8373",
51
- "@dxos/random-access-storage": "0.5.9-main.1cc8373",
52
- "@dxos/rpc": "0.5.9-main.1cc8373",
53
- "@dxos/teleport-extension-gossip": "0.5.9-main.1cc8373",
54
- "@dxos/teleport-extension-object-sync": "0.5.9-main.1cc8373",
55
- "@dxos/teleport": "0.5.9-main.1cc8373",
56
- "@dxos/timeframe": "0.5.9-main.1cc8373",
57
- "@dxos/tracing": "0.5.9-main.1cc8373",
58
- "@dxos/util": "0.5.9-main.1cc8373",
59
- "@dxos/websocket-rpc": "0.5.9-main.1cc8373"
26
+ "@dxos/async": "0.5.9-main.1f2bcac",
27
+ "@dxos/client-protocol": "0.5.9-main.1f2bcac",
28
+ "@dxos/automerge": "0.5.9-main.1f2bcac",
29
+ "@dxos/codec-protobuf": "0.5.9-main.1f2bcac",
30
+ "@dxos/credentials": "0.5.9-main.1f2bcac",
31
+ "@dxos/config": "0.5.9-main.1f2bcac",
32
+ "@dxos/context": "0.5.9-main.1f2bcac",
33
+ "@dxos/crypto": "0.5.9-main.1f2bcac",
34
+ "@dxos/debug": "0.5.9-main.1f2bcac",
35
+ "@dxos/echo-pipeline": "0.5.9-main.1f2bcac",
36
+ "@dxos/echo-db": "0.5.9-main.1f2bcac",
37
+ "@dxos/echo-protocol": "0.5.9-main.1f2bcac",
38
+ "@dxos/feed-store": "0.5.9-main.1f2bcac",
39
+ "@dxos/echo-schema": "0.5.9-main.1f2bcac",
40
+ "@dxos/invariant": "0.5.9-main.1f2bcac",
41
+ "@dxos/indexing": "0.5.9-main.1f2bcac",
42
+ "@dxos/keyring": "0.5.9-main.1f2bcac",
43
+ "@dxos/keys": "0.5.9-main.1f2bcac",
44
+ "@dxos/kv-store": "0.5.9-main.1f2bcac",
45
+ "@dxos/log": "0.5.9-main.1f2bcac",
46
+ "@dxos/lock-file": "0.5.9-main.1f2bcac",
47
+ "@dxos/network-manager": "0.5.9-main.1f2bcac",
48
+ "@dxos/messaging": "0.5.9-main.1f2bcac",
49
+ "@dxos/node-std": "0.5.9-main.1f2bcac",
50
+ "@dxos/protocols": "0.5.9-main.1f2bcac",
51
+ "@dxos/random-access-storage": "0.5.9-main.1f2bcac",
52
+ "@dxos/rpc": "0.5.9-main.1f2bcac",
53
+ "@dxos/teleport-extension-gossip": "0.5.9-main.1f2bcac",
54
+ "@dxos/teleport": "0.5.9-main.1f2bcac",
55
+ "@dxos/teleport-extension-object-sync": "0.5.9-main.1f2bcac",
56
+ "@dxos/tracing": "0.5.9-main.1f2bcac",
57
+ "@dxos/timeframe": "0.5.9-main.1f2bcac",
58
+ "@dxos/util": "0.5.9-main.1f2bcac",
59
+ "@dxos/websocket-rpc": "0.5.9-main.1f2bcac"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@types/platform": "^1.3.4",
63
63
  "@types/readable-stream": "^2.3.9",
64
- "@dxos/signal": "0.5.9-main.1cc8373"
64
+ "@dxos/signal": "0.5.9-main.1f2bcac"
65
65
  },
66
66
  "publishConfig": {
67
67
  "access": "public"
@@ -111,29 +111,35 @@ export class IdentityServiceImpl extends Resource implements IdentityService {
111
111
 
112
112
  const recordedDefaultSpaceTrigger = new Trigger();
113
113
 
114
- const allProcessed = safeAwaitAll(dataSpaceManager.spaces.values(), async (space) => {
115
- if (space.state === SpaceState.CLOSED) {
116
- await space.open();
117
-
118
- // Wait until the space is either READY or REQUIRES_MIGRATION.
119
- // NOTE: Space could potentially never initialize if the space data is corrupted.
120
- const requiresMigration = space.stateUpdate.waitForCondition(
121
- () => space.state === SpaceState.REQUIRES_MIGRATION,
122
- );
123
- await Promise.race([space.initializeDataPipeline(), requiresMigration]);
124
- }
125
- if (await dataSpaceManager.isDefaultSpace(space)) {
126
- if (foundDefaultSpace) {
127
- log.warn('Multiple default spaces found. Using the first one.', { duplicate: space.id });
128
- return;
114
+ const allProcessed = safeAwaitAll(
115
+ dataSpaceManager.spaces.values(),
116
+ async (space) => {
117
+ if (space.state === SpaceState.CLOSED) {
118
+ await space.open();
119
+
120
+ // Wait until the space is either READY or REQUIRES_MIGRATION.
121
+ // NOTE: Space could potentially never initialize if the space data is corrupted.
122
+ const requiresMigration = space.stateUpdate.waitForCondition(
123
+ () => space.state === SpaceState.REQUIRES_MIGRATION,
124
+ );
125
+ await Promise.race([space.initializeDataPipeline(), requiresMigration]);
129
126
  }
130
-
131
- foundDefaultSpace = true;
132
- await identity.updateDefaultSpace(space.id);
133
- recodedDefaultSpace = true;
134
- recordedDefaultSpaceTrigger.wake();
135
- }
136
- });
127
+ if (await dataSpaceManager.isDefaultSpace(space)) {
128
+ if (foundDefaultSpace) {
129
+ log.warn('Multiple default spaces found. Using the first one.', { duplicate: space.id });
130
+ return;
131
+ }
132
+
133
+ foundDefaultSpace = true;
134
+ await identity.updateDefaultSpace(space.id);
135
+ recodedDefaultSpace = true;
136
+ recordedDefaultSpaceTrigger.wake();
137
+ }
138
+ },
139
+ (err) => {
140
+ log.catch(err);
141
+ },
142
+ );
137
143
 
138
144
  // Wait for all spaces to be processed or until the default space is recorded.
139
145
  // If the timeout is reached, create a new default space.
@@ -454,7 +454,7 @@ export class DataSpace {
454
454
  }
455
455
 
456
456
  const { newRoot } = await runEpochMigration(ctx, {
457
- repo: this._echoHost.automergeRepo,
457
+ echoHost: this._echoHost,
458
458
  spaceId: this.id,
459
459
  spaceKey: this.key,
460
460
  migration: options.migration,
@@ -2,27 +2,25 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { asyncTimeout } from '@dxos/async';
6
- import { next as am } from '@dxos/automerge/automerge';
7
- import type { Repo, AutomergeUrl } from '@dxos/automerge/automerge-repo';
8
- import { cancelWithContext, type Context } from '@dxos/context';
5
+ import type { AutomergeUrl } from '@dxos/automerge/automerge-repo';
6
+ import { type Context } from '@dxos/context';
9
7
  import {
10
8
  convertLegacyReferences,
11
9
  convertLegacySpaceRootDoc,
12
10
  findInlineObjectOfType,
13
11
  migrateDocument,
12
+ type EchoHost,
14
13
  } from '@dxos/echo-db';
15
- import { AutomergeDocumentLoaderImpl } from '@dxos/echo-pipeline';
16
- import type { SpaceDoc } from '@dxos/echo-protocol';
14
+ import { SpaceDocVersion, type SpaceDoc } from '@dxos/echo-protocol';
17
15
  import { TYPE_PROPERTIES } from '@dxos/echo-schema';
18
16
  import { invariant } from '@dxos/invariant';
19
17
  import type { PublicKey, SpaceId } from '@dxos/keys';
20
18
  import { log } from '@dxos/log';
21
19
  import { CreateEpochRequest } from '@dxos/protocols/proto/dxos/client/services';
22
- import { assignDeep } from '@dxos/util';
23
20
 
24
21
  export type MigrationContext = {
25
- repo: Repo;
22
+ echoHost: EchoHost;
23
+
26
24
  spaceId: SpaceId;
27
25
  /**
28
26
  * @deprecated Remove.
@@ -41,30 +39,34 @@ export type MigrationResult = {
41
39
  newRoot?: string;
42
40
  };
43
41
 
42
+ const LOAD_DOC_TIMEOUT = 10_000;
43
+
44
44
  export const runEpochMigration = async (ctx: Context, context: MigrationContext): Promise<MigrationResult> => {
45
45
  switch (context.migration) {
46
46
  case CreateEpochRequest.Migration.INIT_AUTOMERGE: {
47
- const document = context.repo.create();
48
- await context.repo.flush();
47
+ const document = context.echoHost.createDoc();
48
+ await context.echoHost.flush();
49
49
  return { newRoot: document.url };
50
50
  }
51
51
  case CreateEpochRequest.Migration.PRUNE_AUTOMERGE_ROOT_HISTORY: {
52
52
  if (!context.currentRoot) {
53
53
  throw new Error('Space does not have an automerge root');
54
54
  }
55
- const rootHandle = context.repo.find(context.currentRoot as AutomergeUrl);
56
- await cancelWithContext(ctx, asyncTimeout(rootHandle.whenReady(), 10_000));
55
+ const rootHandle = await context.echoHost.loadDoc(ctx, context.currentRoot as AutomergeUrl, {
56
+ timeout: LOAD_DOC_TIMEOUT,
57
+ });
57
58
 
58
- const newRoot = context.repo.create(rootHandle.docSync());
59
- await context.repo.flush();
59
+ const newRoot = context.echoHost.createDoc(rootHandle.docSync());
60
+ await context.echoHost.flush();
60
61
  return { newRoot: newRoot.url };
61
62
  }
62
63
  case CreateEpochRequest.Migration.FRAGMENT_AUTOMERGE_ROOT: {
63
64
  log.info('Fragmenting');
64
65
 
65
66
  const currentRootUrl = context.currentRoot;
66
- const rootHandle = context.repo.find<SpaceDoc>(currentRootUrl as any);
67
- await cancelWithContext(ctx, asyncTimeout(rootHandle.whenReady(), 10_000));
67
+ const rootHandle = await context.echoHost.loadDoc<SpaceDoc>(ctx, currentRootUrl as any, {
68
+ timeout: LOAD_DOC_TIMEOUT,
69
+ });
68
70
 
69
71
  // Find properties object.
70
72
  const objects = Object.entries((rootHandle.docSync() as SpaceDoc).objects!);
@@ -73,48 +75,65 @@ export const runEpochMigration = async (ctx: Context, context: MigrationContext)
73
75
  invariant(properties, 'Properties not found');
74
76
 
75
77
  // Create a new space doc with the properties object.
76
- const newSpaceDoc: SpaceDoc = { ...rootHandle.docSync(), objects: Object.fromEntries([properties]) };
77
- const newRoot = context.repo.create(newSpaceDoc);
78
+ const newRoot = context.echoHost.createDoc({
79
+ ...rootHandle.docSync(),
80
+ objects: Object.fromEntries([properties]),
81
+ });
78
82
  invariant(typeof newRoot.url === 'string' && newRoot.url.length > 0);
79
83
 
80
84
  // Create new automerge documents for all objects.
81
- const docLoader = new AutomergeDocumentLoaderImpl(context.spaceId, context.repo, context.spaceKey);
82
- await docLoader.loadSpaceRootDocHandle(ctx, { rootUrl: newRoot.url });
83
-
84
- otherObjects.forEach(([key, value]) => {
85
- const handle = docLoader.createDocumentForObject(key);
86
- handle.change((doc: any) => {
87
- assignDeep(doc, ['objects', key], value);
85
+ const newLinks: [string, AutomergeUrl][] = [];
86
+ for (const [id, objData] of otherObjects) {
87
+ const handle = context.echoHost.createDoc<SpaceDoc>({
88
+ version: SpaceDocVersion.CURRENT,
89
+ access: {
90
+ spaceKey: context.spaceKey.toHex(),
91
+ },
92
+ objects: {
93
+ [id]: objData,
94
+ },
88
95
  });
96
+ newLinks.push([id, handle.url]);
97
+ }
98
+ newRoot.change((doc: SpaceDoc) => {
99
+ doc.links ??= {};
100
+ for (const [id, url] of newLinks) {
101
+ doc.links[id] = url;
102
+ }
89
103
  });
90
104
 
91
- await context.repo.flush();
105
+ await context.echoHost.flush();
92
106
  return {
93
107
  newRoot: newRoot.url,
94
108
  };
95
109
  }
96
110
  case CreateEpochRequest.Migration.MIGRATE_REFERENCES_TO_DXN: {
97
111
  const currentRootUrl = context.currentRoot;
98
- const rootHandle = context.repo.find<SpaceDoc>(currentRootUrl as any);
99
- await cancelWithContext(ctx, asyncTimeout(rootHandle.whenReady(), 10_000));
112
+ const rootHandle = await context.echoHost.loadDoc<SpaceDoc>(ctx, currentRootUrl as any, {
113
+ timeout: LOAD_DOC_TIMEOUT,
114
+ });
100
115
  invariant(rootHandle.docSync(), 'Root doc not found');
101
116
 
102
117
  const newRootContent = await convertLegacySpaceRootDoc(structuredClone(rootHandle.docSync()!));
103
118
 
104
119
  for (const [id, url] of Object.entries(newRootContent.links ?? {})) {
105
- const handle = context.repo.find(url as any);
106
- await cancelWithContext(ctx, asyncTimeout(handle.whenReady(), 10_000));
107
- invariant(handle.docSync(), 'Doc not found');
108
- const newDoc = await convertLegacyReferences(structuredClone(handle.docSync()!));
109
- const migratedDoc = migrateDocument(handle.docSync(), newDoc);
110
- const newHandle = context.repo.import(am.save(migratedDoc));
111
- newRootContent.links![id] = newHandle.url;
120
+ try {
121
+ const handle = await context.echoHost.loadDoc(ctx, url as any, { timeout: LOAD_DOC_TIMEOUT });
122
+ invariant(handle.docSync());
123
+ const newDoc = await convertLegacyReferences(structuredClone(handle.docSync()!));
124
+ const migratedDoc = migrateDocument(handle.docSync(), newDoc);
125
+ const newHandle = context.echoHost.createDoc(migratedDoc, { preserveHistory: true });
126
+ newRootContent.links![id] = newHandle.url;
127
+ } catch (err) {
128
+ log.warn('Failed to migrate reference', { id, url, error: err });
129
+ delete newRootContent.links![id];
130
+ }
112
131
  }
113
132
 
114
133
  const migratedRoot = migrateDocument(rootHandle.docSync(), newRootContent);
115
- const newRoot = context.repo.import(am.save(migratedRoot));
134
+ const newRoot = context.echoHost.createDoc(migratedRoot, { preserveHistory: true });
116
135
 
117
- await context.repo.flush();
136
+ await context.echoHost.flush();
118
137
  return {
119
138
  newRoot: newRoot.url,
120
139
  };
@@ -124,7 +143,7 @@ export const runEpochMigration = async (ctx: Context, context: MigrationContext)
124
143
  invariant(context.newAutomergeRoot);
125
144
 
126
145
  // Defensive programming - it should be the responsibility of the caller to flush the new root.
127
- await context.repo.flush();
146
+ await context.echoHost.flush();
128
147
  return {
129
148
  newRoot: context.newAutomergeRoot,
130
149
  };
@@ -69,8 +69,9 @@ export const importProfileData = async (
69
69
  },
70
70
  archive: ProfileArchive,
71
71
  ): Promise<void> => {
72
- const batch = level.batch();
72
+ let batch = level.batch();
73
73
 
74
+ let count = 0;
74
75
  for (const entry of archive.storage) {
75
76
  switch (entry.type) {
76
77
  case ProfileArchiveEntryType.FILE: {
@@ -91,7 +92,20 @@ export const importProfileData = async (
91
92
  default:
92
93
  throw new Error(`Invalid entry type: ${entry.type}`);
93
94
  }
95
+
96
+ if (++count % 1000 === 0) {
97
+ // Apparently indexedDB can't handle big batches.
98
+ await batch.write();
99
+ batch = level.batch();
100
+
101
+ log.info('importing', {
102
+ count,
103
+ total: archive.storage.length,
104
+ progress: `${((count / archive.storage.length) * 100).toFixed()}%`,
105
+ });
106
+ }
94
107
  }
95
108
 
109
+ log.info('committing changes..');
96
110
  await batch.write();
97
111
  };
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const DXOS_VERSION = "0.5.9-main.1cc8373";
1
+ export const DXOS_VERSION = "0.5.9-main.1f2bcac";