@dxos/client-services 0.3.11-main.4feb9c9 → 0.3.11-main.514e6e4

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 (44) hide show
  1. package/dist/lib/browser/{chunk-PLJC2KIW.mjs → chunk-G3HZC3ND.mjs} +133 -78
  2. package/dist/lib/browser/chunk-G3HZC3ND.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +1 -1
  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 +4 -11
  7. package/dist/lib/browser/packlets/testing/index.mjs.map +3 -3
  8. package/dist/lib/node/{chunk-W4V257LR.cjs → chunk-4DSU4MDX.cjs} +190 -135
  9. package/dist/lib/node/chunk-4DSU4MDX.cjs.map +7 -0
  10. package/dist/lib/node/index.cjs +37 -37
  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 +11 -18
  14. package/dist/lib/node/packlets/testing/index.cjs.map +3 -3
  15. package/dist/types/src/packlets/identity/identity-service.d.ts +3 -3
  16. package/dist/types/src/packlets/identity/identity-service.d.ts.map +1 -1
  17. package/dist/types/src/packlets/invitations/device-invitation-protocol.d.ts +2 -0
  18. package/dist/types/src/packlets/invitations/device-invitation-protocol.d.ts.map +1 -1
  19. package/dist/types/src/packlets/invitations/invitation-protocol.d.ts +28 -3
  20. package/dist/types/src/packlets/invitations/invitation-protocol.d.ts.map +1 -1
  21. package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
  22. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts +2 -0
  23. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts.map +1 -1
  24. package/dist/types/src/packlets/services/diagnostics.d.ts +4 -0
  25. package/dist/types/src/packlets/services/diagnostics.d.ts.map +1 -1
  26. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  27. package/dist/types/src/packlets/testing/invitation-utils.d.ts.map +1 -1
  28. package/dist/types/src/version.d.ts +1 -1
  29. package/package.json +35 -35
  30. package/src/packlets/identity/identity-service.test.ts +1 -1
  31. package/src/packlets/identity/identity-service.ts +6 -3
  32. package/src/packlets/invitations/device-invitation-protocol.test.ts +14 -0
  33. package/src/packlets/invitations/device-invitation-protocol.ts +14 -0
  34. package/src/packlets/invitations/invitation-protocol.ts +44 -6
  35. package/src/packlets/invitations/invitations-handler.ts +19 -17
  36. package/src/packlets/invitations/space-invitation-protocol.test.ts +28 -0
  37. package/src/packlets/invitations/space-invitation-protocol.ts +11 -0
  38. package/src/packlets/services/diagnostics.ts +18 -0
  39. package/src/packlets/services/service-host.ts +27 -12
  40. package/src/packlets/spaces/spaces-service.ts +1 -1
  41. package/src/packlets/testing/invitation-utils.ts +2 -10
  42. package/src/version.ts +1 -1
  43. package/dist/lib/browser/chunk-PLJC2KIW.mjs.map +0 -7
  44. package/dist/lib/node/chunk-W4V257LR.cjs.map +0 -7
@@ -26,8 +26,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_W4V257LR_exports = {};
30
- __export(chunk_W4V257LR_exports, {
29
+ var chunk_4DSU4MDX_exports = {};
30
+ __export(chunk_4DSU4MDX_exports, {
31
31
  ClientRpcServer: () => ClientRpcServer,
32
32
  ClientServicesHost: () => ClientServicesHost,
33
33
  DataSpace: () => DataSpace,
@@ -60,7 +60,7 @@ __export(chunk_W4V257LR_exports, {
60
60
  subscribeToSpaces: () => subscribeToSpaces,
61
61
  subscribeToSwarmInfo: () => subscribeToSwarmInfo
62
62
  });
63
- module.exports = __toCommonJS(chunk_W4V257LR_exports);
63
+ module.exports = __toCommonJS(chunk_4DSU4MDX_exports);
64
64
  var import_async = require("@dxos/async");
65
65
  var import_codec_protobuf = require("@dxos/codec-protobuf");
66
66
  var import_feed_store = require("@dxos/feed-store");
@@ -108,6 +108,7 @@ var import_credentials6 = require("@dxos/credentials");
108
108
  var import_debug2 = require("@dxos/debug");
109
109
  var import_invariant3 = require("@dxos/invariant");
110
110
  var import_invariant4 = require("@dxos/invariant");
111
+ var import_protocols3 = require("@dxos/protocols");
111
112
  var import_services = require("@dxos/protocols/proto/dxos/client/services");
112
113
  var import_async7 = require("@dxos/async");
113
114
  var import_client_protocol2 = require("@dxos/client-protocol");
@@ -117,7 +118,7 @@ var import_invariant5 = require("@dxos/invariant");
117
118
  var import_keys5 = require("@dxos/keys");
118
119
  var import_log4 = require("@dxos/log");
119
120
  var import_network_manager = require("@dxos/network-manager");
120
- var import_protocols3 = require("@dxos/protocols");
121
+ var import_protocols4 = require("@dxos/protocols");
121
122
  var import_services2 = require("@dxos/protocols/proto/dxos/client/services");
122
123
  var import_invitations = require("@dxos/protocols/proto/dxos/halo/invitations");
123
124
  var import_async8 = require("@dxos/async");
@@ -125,7 +126,7 @@ var import_context5 = require("@dxos/context");
125
126
  var import_invariant6 = require("@dxos/invariant");
126
127
  var import_keys6 = require("@dxos/keys");
127
128
  var import_log5 = require("@dxos/log");
128
- var import_protocols4 = require("@dxos/protocols");
129
+ var import_protocols5 = require("@dxos/protocols");
129
130
  var import_services3 = require("@dxos/protocols/proto/dxos/client/services");
130
131
  var import_invitations2 = require("@dxos/protocols/proto/dxos/halo/invitations");
131
132
  var import_teleport = require("@dxos/teleport");
@@ -138,6 +139,7 @@ var import_credentials8 = require("@dxos/credentials");
138
139
  var import_feed_store3 = require("@dxos/feed-store");
139
140
  var import_invariant8 = require("@dxos/invariant");
140
141
  var import_log7 = require("@dxos/log");
142
+ var import_protocols6 = require("@dxos/protocols");
141
143
  var import_services5 = require("@dxos/protocols/proto/dxos/client/services");
142
144
  var import_codec_protobuf9 = require("@dxos/codec-protobuf");
143
145
  var import_debug3 = require("@dxos/debug");
@@ -149,7 +151,7 @@ var import_document_model = require("@dxos/document-model");
149
151
  var import_echo_db = require("@dxos/echo-db");
150
152
  var import_invariant9 = require("@dxos/invariant");
151
153
  var import_log8 = require("@dxos/log");
152
- var import_protocols5 = require("@dxos/protocols");
154
+ var import_protocols7 = require("@dxos/protocols");
153
155
  var import_services6 = require("@dxos/protocols/proto/dxos/client/services");
154
156
  var import_async10 = require("@dxos/async");
155
157
  var import_client_protocol3 = require("@dxos/client-protocol");
@@ -158,7 +160,7 @@ var import_debug4 = require("@dxos/debug");
158
160
  var import_echo_pipeline = require("@dxos/echo-pipeline");
159
161
  var import_keys7 = require("@dxos/keys");
160
162
  var import_log9 = require("@dxos/log");
161
- var import_protocols6 = require("@dxos/protocols");
163
+ var import_protocols8 = require("@dxos/protocols");
162
164
  var import_services7 = require("@dxos/protocols/proto/dxos/client/services");
163
165
  var import_credentials10 = require("@dxos/protocols/proto/dxos/halo/credentials");
164
166
  var import_timeframe2 = require("@dxos/timeframe");
@@ -170,7 +172,7 @@ var import_context7 = require("@dxos/context");
170
172
  var import_invariant10 = require("@dxos/invariant");
171
173
  var import_keys8 = require("@dxos/keys");
172
174
  var import_log10 = require("@dxos/log");
173
- var import_protocols7 = require("@dxos/protocols");
175
+ var import_protocols9 = require("@dxos/protocols");
174
176
  var import_teleport2 = require("@dxos/teleport");
175
177
  var import_util5 = require("@dxos/util");
176
178
  var import_async12 = require("@dxos/async");
@@ -179,7 +181,7 @@ var import_credentials12 = require("@dxos/credentials");
179
181
  var import_invariant11 = require("@dxos/invariant");
180
182
  var import_keys9 = require("@dxos/keys");
181
183
  var import_log11 = require("@dxos/log");
182
- var import_protocols8 = require("@dxos/protocols");
184
+ var import_protocols10 = require("@dxos/protocols");
183
185
  var import_services8 = require("@dxos/protocols/proto/dxos/client/services");
184
186
  var import_teleport_extension_gossip = require("@dxos/teleport-extension-gossip");
185
187
  var import_util6 = require("@dxos/util");
@@ -192,7 +194,7 @@ var import_codec_protobuf11 = require("@dxos/codec-protobuf");
192
194
  var import_debug6 = require("@dxos/debug");
193
195
  var import_invariant12 = require("@dxos/invariant");
194
196
  var import_log12 = require("@dxos/log");
195
- var import_protocols9 = require("@dxos/protocols");
197
+ var import_protocols11 = require("@dxos/protocols");
196
198
  var import_services9 = require("@dxos/protocols/proto/dxos/client/services");
197
199
  var import_async14 = require("@dxos/async");
198
200
  var import_context9 = require("@dxos/context");
@@ -204,7 +206,7 @@ var import_invariant13 = require("@dxos/invariant");
204
206
  var import_keyring = require("@dxos/keyring");
205
207
  var import_keys10 = require("@dxos/keys");
206
208
  var import_log13 = require("@dxos/log");
207
- var import_protocols10 = require("@dxos/protocols");
209
+ var import_protocols12 = require("@dxos/protocols");
208
210
  var import_services10 = require("@dxos/protocols/proto/dxos/client/services");
209
211
  var import_teleport_extension_object_sync = require("@dxos/teleport-extension-object-sync");
210
212
  var import_tracing5 = require("@dxos/tracing");
@@ -213,7 +215,7 @@ var import_invariant14 = require("@dxos/invariant");
213
215
  var import_lock_file = require("@dxos/lock-file");
214
216
  var import_log14 = require("@dxos/log");
215
217
  var import_client_protocol4 = require("@dxos/client-protocol");
216
- var import_protocols11 = require("@dxos/protocols");
218
+ var import_protocols13 = require("@dxos/protocols");
217
219
  var import_config = require("@dxos/protocols/proto/dxos/config");
218
220
  var import_random_access_storage = require("@dxos/random-access-storage");
219
221
  var import_util8 = require("@dxos/util");
@@ -229,7 +231,7 @@ var import_log15 = require("@dxos/log");
229
231
  var import_messaging = require("@dxos/messaging");
230
232
  var import_model_factory = require("@dxos/model-factory");
231
233
  var import_network_manager2 = require("@dxos/network-manager");
232
- var import_protocols12 = require("@dxos/protocols");
234
+ var import_protocols14 = require("@dxos/protocols");
233
235
  var import_services11 = require("@dxos/protocols/proto/dxos/client/services");
234
236
  var import_text_model = require("@dxos/text-model");
235
237
  var import_tracing6 = require("@dxos/tracing");
@@ -675,7 +677,7 @@ function _ts_decorate(decorators, target, key, desc) {
675
677
  return c > 3 && r && Object.defineProperty(target, key, r), r;
676
678
  }
677
679
  var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/identity/identity.ts";
678
- var Identity = class Identity2 {
680
+ var Identity = class {
679
681
  constructor({ space, signer, identityKey, deviceKey }) {
680
682
  this.stateUpdate = new import_async5.Event();
681
683
  this.space = space;
@@ -843,7 +845,7 @@ function _ts_decorate2(decorators, target, key, desc) {
843
845
  return c > 3 && r && Object.defineProperty(target, key, r), r;
844
846
  }
845
847
  var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/identity/identity-manager.ts";
846
- var IdentityManager = class IdentityManager2 {
848
+ var IdentityManager = class {
847
849
  // TODO(burdon): IdentityManagerParams.
848
850
  // TODO(dmaretskyi): Perhaps this should take/generate the peerKey outside of an initialized identity.
849
851
  constructor(_metadataStore, _keyring, _feedStore, _spaceManager) {
@@ -1197,6 +1199,7 @@ IdentityManager = _ts_decorate2([
1197
1199
  import_tracing2.trace.resource()
1198
1200
  ], IdentityManager);
1199
1201
  var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/identity/identity-service.ts";
1202
+ var CREATE_PROFILE_WITH_AUTOMERGE_DEFAULT = true;
1200
1203
  var IdentityServiceImpl = class {
1201
1204
  constructor(_createIdentity, _identityManager, _keyring, _onProfileUpdate) {
1202
1205
  this._createIdentity = _createIdentity;
@@ -1205,7 +1208,7 @@ var IdentityServiceImpl = class {
1205
1208
  this._onProfileUpdate = _onProfileUpdate;
1206
1209
  }
1207
1210
  async createIdentity(request) {
1208
- await this._createIdentity(request);
1211
+ await this._createIdentity(request.profile ?? {}, request.useAutomerge ?? CREATE_PROFILE_WITH_AUTOMERGE_DEFAULT);
1209
1212
  return this._getIdentity();
1210
1213
  }
1211
1214
  async recoverIdentity(request) {
@@ -1233,7 +1236,7 @@ var IdentityServiceImpl = class {
1233
1236
  async updateProfile(profile) {
1234
1237
  (0, import_invariant3.invariant)(this._identityManager.identity, "Identity not initialized.", {
1235
1238
  F: __dxlog_file4,
1236
- L: 60,
1239
+ L: 63,
1237
1240
  S: this,
1238
1241
  A: [
1239
1242
  "this._identityManager.identity",
@@ -1247,7 +1250,7 @@ var IdentityServiceImpl = class {
1247
1250
  async signPresentation({ presentation, nonce }) {
1248
1251
  (0, import_invariant3.invariant)(this._identityManager.identity, "Identity not initialized.", {
1249
1252
  F: __dxlog_file4,
1250
- L: 67,
1253
+ L: 70,
1251
1254
  S: this,
1252
1255
  A: [
1253
1256
  "this._identityManager.identity",
@@ -1281,7 +1284,7 @@ var DeviceInvitationProtocol = class {
1281
1284
  async admit(request) {
1282
1285
  (0, import_invariant4.invariant)(request.device, void 0, {
1283
1286
  F: __dxlog_file5,
1284
- L: 35,
1287
+ L: 36,
1285
1288
  S: this,
1286
1289
  A: [
1287
1290
  "request.device",
@@ -1299,6 +1302,15 @@ var DeviceInvitationProtocol = class {
1299
1302
  }
1300
1303
  };
1301
1304
  }
1305
+ checkInvitation(invitation) {
1306
+ try {
1307
+ const identity = this._getIdentity();
1308
+ if (identity) {
1309
+ return new import_protocols3.AlreadyJoinedError("Currently only one identity per client is supported.");
1310
+ }
1311
+ } catch {
1312
+ }
1313
+ }
1302
1314
  createIntroduction() {
1303
1315
  return {};
1304
1316
  }
@@ -1317,7 +1329,7 @@ var DeviceInvitationProtocol = class {
1317
1329
  async accept(response, request) {
1318
1330
  (0, import_invariant4.invariant)(response.device, void 0, {
1319
1331
  F: __dxlog_file5,
1320
- L: 68,
1332
+ L: 80,
1321
1333
  S: this,
1322
1334
  A: [
1323
1335
  "response.device",
@@ -1327,7 +1339,7 @@ var DeviceInvitationProtocol = class {
1327
1339
  const { identityKey, haloSpaceKey, genesisFeedKey, controlTimeframe } = response.device;
1328
1340
  (0, import_invariant4.invariant)(request.device, void 0, {
1329
1341
  F: __dxlog_file5,
1330
- L: 71,
1342
+ L: 83,
1331
1343
  S: this,
1332
1344
  A: [
1333
1345
  "request.device",
@@ -1356,10 +1368,10 @@ var InvitationHostExtension = class extends import_teleport.RpcExtension {
1356
1368
  constructor(_callbacks) {
1357
1369
  super({
1358
1370
  requested: {
1359
- InvitationHostService: import_protocols4.schema.getService("dxos.halo.invitations.InvitationHostService")
1371
+ InvitationHostService: import_protocols5.schema.getService("dxos.halo.invitations.InvitationHostService")
1360
1372
  },
1361
1373
  exposed: {
1362
- InvitationHostService: import_protocols4.schema.getService("dxos.halo.invitations.InvitationHostService")
1374
+ InvitationHostService: import_protocols5.schema.getService("dxos.halo.invitations.InvitationHostService")
1363
1375
  }
1364
1376
  });
1365
1377
  this._callbacks = _callbacks;
@@ -1392,7 +1404,7 @@ var InvitationHostExtension = class extends import_teleport.RpcExtension {
1392
1404
  introduce: async (request) => {
1393
1405
  const { profile, invitationId } = request;
1394
1406
  const traceId = import_keys6.PublicKey.random().toHex();
1395
- import_log5.log.trace("dxos.sdk.invitation-handler.host.introduce", import_protocols4.trace.begin({
1407
+ import_log5.log.trace("dxos.sdk.invitation-handler.host.introduce", import_protocols5.trace.begin({
1396
1408
  id: traceId
1397
1409
  }), {
1398
1410
  F: __dxlog_file6,
@@ -1429,7 +1441,7 @@ var InvitationHostExtension = class extends import_teleport.RpcExtension {
1429
1441
  ...this.invitation,
1430
1442
  state: import_services3.Invitation.State.READY_FOR_AUTHENTICATION
1431
1443
  });
1432
- import_log5.log.trace("dxos.sdk.invitation-handler.host.introduce", import_protocols4.trace.end({
1444
+ import_log5.log.trace("dxos.sdk.invitation-handler.host.introduce", import_protocols5.trace.end({
1433
1445
  id: traceId
1434
1446
  }), {
1435
1447
  F: __dxlog_file6,
@@ -1443,7 +1455,7 @@ var InvitationHostExtension = class extends import_teleport.RpcExtension {
1443
1455
  },
1444
1456
  authenticate: async ({ authCode: code }) => {
1445
1457
  const traceId = import_keys6.PublicKey.random().toHex();
1446
- import_log5.log.trace("dxos.sdk.invitation-handler.host.authenticate", import_protocols4.trace.begin({
1458
+ import_log5.log.trace("dxos.sdk.invitation-handler.host.authenticate", import_protocols5.trace.begin({
1447
1459
  id: traceId
1448
1460
  }), {
1449
1461
  F: __dxlog_file6,
@@ -1506,7 +1518,7 @@ var InvitationHostExtension = class extends import_teleport.RpcExtension {
1506
1518
  break;
1507
1519
  }
1508
1520
  }
1509
- import_log5.log.trace("dxos.sdk.invitation-handler.host.authenticate", import_protocols4.trace.end({
1521
+ import_log5.log.trace("dxos.sdk.invitation-handler.host.authenticate", import_protocols5.trace.end({
1510
1522
  id: traceId,
1511
1523
  data: {
1512
1524
  status
@@ -1523,7 +1535,7 @@ var InvitationHostExtension = class extends import_teleport.RpcExtension {
1523
1535
  },
1524
1536
  admit: async (request) => {
1525
1537
  const traceId = import_keys6.PublicKey.random().toHex();
1526
- import_log5.log.trace("dxos.sdk.invitation-handler.host.admit", import_protocols4.trace.begin({
1538
+ import_log5.log.trace("dxos.sdk.invitation-handler.host.admit", import_protocols5.trace.begin({
1527
1539
  id: traceId
1528
1540
  }), {
1529
1541
  F: __dxlog_file6,
@@ -1545,7 +1557,7 @@ var InvitationHostExtension = class extends import_teleport.RpcExtension {
1545
1557
  throw new Error("Not authenticated");
1546
1558
  }
1547
1559
  const response = await this._callbacks.admit(request);
1548
- import_log5.log.trace("dxos.sdk.invitation-handler.host.admit", import_protocols4.trace.end({
1560
+ import_log5.log.trace("dxos.sdk.invitation-handler.host.admit", import_protocols5.trace.end({
1549
1561
  id: traceId
1550
1562
  }), {
1551
1563
  F: __dxlog_file6,
@@ -1572,7 +1584,7 @@ var InvitationHostExtension = class extends import_teleport.RpcExtension {
1572
1584
  timeout: OPTIONS_TIMEOUT
1573
1585
  }));
1574
1586
  if (this._remoteOptions?.role !== import_invitations2.Options.Role.GUEST) {
1575
- throw new import_protocols4.InvalidInvitationExtensionRoleError(void 0, {
1587
+ throw new import_protocols5.InvalidInvitationExtensionRoleError(void 0, {
1576
1588
  expected: import_invitations2.Options.Role.GUEST,
1577
1589
  remoteOptions: this._remoteOptions
1578
1590
  });
@@ -1590,10 +1602,10 @@ var InvitationGuestExtension = class extends import_teleport.RpcExtension {
1590
1602
  constructor(_callbacks) {
1591
1603
  super({
1592
1604
  requested: {
1593
- InvitationHostService: import_protocols4.schema.getService("dxos.halo.invitations.InvitationHostService")
1605
+ InvitationHostService: import_protocols5.schema.getService("dxos.halo.invitations.InvitationHostService")
1594
1606
  },
1595
1607
  exposed: {
1596
- InvitationHostService: import_protocols4.schema.getService("dxos.halo.invitations.InvitationHostService")
1608
+ InvitationHostService: import_protocols5.schema.getService("dxos.halo.invitations.InvitationHostService")
1597
1609
  }
1598
1610
  });
1599
1611
  this._callbacks = _callbacks;
@@ -1650,7 +1662,7 @@ var InvitationGuestExtension = class extends import_teleport.RpcExtension {
1650
1662
  C: (f, a) => f(...a)
1651
1663
  });
1652
1664
  if (this._remoteOptions?.role !== import_invitations2.Options.Role.HOST) {
1653
- throw new import_protocols4.InvalidInvitationExtensionRoleError(void 0, {
1665
+ throw new import_protocols5.InvalidInvitationExtensionRoleError(void 0, {
1654
1666
  expected: import_invitations2.Options.Role.HOST,
1655
1667
  remoteOptions: this._remoteOptions
1656
1668
  });
@@ -1763,7 +1775,7 @@ var InvitationsHandler = class {
1763
1775
  (0, import_async7.scheduleTask)(ctx, async () => {
1764
1776
  const traceId = import_keys5.PublicKey.random().toHex();
1765
1777
  try {
1766
- import_log4.log.trace("dxos.sdk.invitations-handler.host.onOpen", import_protocols3.trace.begin({
1778
+ import_log4.log.trace("dxos.sdk.invitations-handler.host.onOpen", import_protocols4.trace.begin({
1767
1779
  id: traceId
1768
1780
  }), {
1769
1781
  F: __dxlog_file7,
@@ -1799,7 +1811,7 @@ var InvitationsHandler = class {
1799
1811
  ...invitation,
1800
1812
  state: import_services2.Invitation.State.SUCCESS
1801
1813
  });
1802
- import_log4.log.trace("dxos.sdk.invitations-handler.host.onOpen", import_protocols3.trace.end({
1814
+ import_log4.log.trace("dxos.sdk.invitations-handler.host.onOpen", import_protocols4.trace.end({
1803
1815
  id: traceId
1804
1816
  }), {
1805
1817
  F: __dxlog_file7,
@@ -1830,7 +1842,7 @@ var InvitationsHandler = class {
1830
1842
  });
1831
1843
  stream.error(err);
1832
1844
  }
1833
- import_log4.log.trace("dxos.sdk.invitations-handler.host.onOpen", import_protocols3.trace.error({
1845
+ import_log4.log.trace("dxos.sdk.invitations-handler.host.onOpen", import_protocols4.trace.error({
1834
1846
  id: traceId,
1835
1847
  error: err
1836
1848
  }), {
@@ -1848,7 +1860,7 @@ var InvitationsHandler = class {
1848
1860
  });
1849
1861
  },
1850
1862
  onError: (err) => {
1851
- if (err instanceof import_protocols3.InvalidInvitationExtensionRoleError) {
1863
+ if (err instanceof import_protocols4.InvalidInvitationExtensionRoleError) {
1852
1864
  return;
1853
1865
  }
1854
1866
  if (err instanceof import_async7.TimeoutError) {
@@ -1996,7 +2008,7 @@ var InvitationsHandler = class {
1996
2008
  (0, import_async7.scheduleTask)(ctx, async () => {
1997
2009
  const traceId = import_keys5.PublicKey.random().toHex();
1998
2010
  try {
1999
- import_log4.log.trace("dxos.sdk.invitations-handler.guest.onOpen", import_protocols3.trace.begin({
2011
+ import_log4.log.trace("dxos.sdk.invitations-handler.guest.onOpen", import_protocols4.trace.begin({
2000
2012
  id: traceId
2001
2013
  }), {
2002
2014
  F: __dxlog_file7,
@@ -2083,16 +2095,12 @@ var InvitationsHandler = class {
2083
2095
  }
2084
2096
  }
2085
2097
  }
2086
- } else {
2087
- setState({
2088
- state: import_services2.Invitation.State.READY_FOR_AUTHENTICATION
2089
- });
2090
2098
  }
2091
2099
  (0, import_log4.log)("request admission", {
2092
2100
  ...protocol.toJSON()
2093
2101
  }, {
2094
2102
  F: __dxlog_file7,
2095
- L: 312,
2103
+ L: 309,
2096
2104
  S: this,
2097
2105
  C: (f, a) => f(...a)
2098
2106
  });
@@ -2104,7 +2112,7 @@ var InvitationsHandler = class {
2104
2112
  ...protocol.toJSON()
2105
2113
  }, {
2106
2114
  F: __dxlog_file7,
2107
- L: 323,
2115
+ L: 320,
2108
2116
  S: this,
2109
2117
  C: (f, a) => f(...a)
2110
2118
  });
@@ -2113,11 +2121,11 @@ var InvitationsHandler = class {
2113
2121
  target: invitation.target,
2114
2122
  state: import_services2.Invitation.State.SUCCESS
2115
2123
  });
2116
- import_log4.log.trace("dxos.sdk.invitations-handler.guest.onOpen", import_protocols3.trace.end({
2124
+ import_log4.log.trace("dxos.sdk.invitations-handler.guest.onOpen", import_protocols4.trace.end({
2117
2125
  id: traceId
2118
2126
  }), {
2119
2127
  F: __dxlog_file7,
2120
- L: 325,
2128
+ L: 322,
2121
2129
  S: this,
2122
2130
  C: (f, a) => f(...a)
2123
2131
  });
@@ -2127,7 +2135,7 @@ var InvitationsHandler = class {
2127
2135
  ...protocol.toJSON()
2128
2136
  }, {
2129
2137
  F: __dxlog_file7,
2130
- L: 328,
2138
+ L: 325,
2131
2139
  S: this,
2132
2140
  C: (f, a) => f(...a)
2133
2141
  });
@@ -2137,18 +2145,18 @@ var InvitationsHandler = class {
2137
2145
  } else {
2138
2146
  (0, import_log4.log)("auth failed", err, {
2139
2147
  F: __dxlog_file7,
2140
- L: 331,
2148
+ L: 328,
2141
2149
  S: this,
2142
2150
  C: (f, a) => f(...a)
2143
2151
  });
2144
2152
  stream.error(err);
2145
2153
  }
2146
- import_log4.log.trace("dxos.sdk.invitations-handler.guest.onOpen", import_protocols3.trace.error({
2154
+ import_log4.log.trace("dxos.sdk.invitations-handler.guest.onOpen", import_protocols4.trace.error({
2147
2155
  id: traceId,
2148
2156
  error: err
2149
2157
  }), {
2150
2158
  F: __dxlog_file7,
2151
- L: 334,
2159
+ L: 331,
2152
2160
  S: this,
2153
2161
  C: (f, a) => f(...a)
2154
2162
  });
@@ -2158,7 +2166,7 @@ var InvitationsHandler = class {
2158
2166
  });
2159
2167
  },
2160
2168
  onError: (err) => {
2161
- if (err instanceof import_protocols3.InvalidInvitationExtensionRoleError) {
2169
+ if (err instanceof import_protocols4.InvalidInvitationExtensionRoleError) {
2162
2170
  return;
2163
2171
  }
2164
2172
  if (err instanceof import_async7.TimeoutError) {
@@ -2166,7 +2174,7 @@ var InvitationsHandler = class {
2166
2174
  ...protocol.toJSON()
2167
2175
  }, {
2168
2176
  F: __dxlog_file7,
2169
- L: 345,
2177
+ L: 342,
2170
2178
  S: this,
2171
2179
  C: (f, a) => f(...a)
2172
2180
  });
@@ -2176,7 +2184,7 @@ var InvitationsHandler = class {
2176
2184
  } else {
2177
2185
  (0, import_log4.log)("auth failed", err, {
2178
2186
  F: __dxlog_file7,
2179
- L: 348,
2187
+ L: 345,
2180
2188
  S: this,
2181
2189
  C: (f, a) => f(...a)
2182
2190
  });
@@ -2187,29 +2195,34 @@ var InvitationsHandler = class {
2187
2195
  return extension;
2188
2196
  };
2189
2197
  (0, import_async7.scheduleTask)(ctx, async () => {
2190
- (0, import_invariant5.invariant)(invitation.swarmKey, void 0, {
2191
- F: __dxlog_file7,
2192
- L: 358,
2193
- S: this,
2194
- A: [
2195
- "invitation.swarmKey",
2196
- ""
2197
- ]
2198
- });
2199
- const topic = invitation.swarmKey;
2200
- const swarmConnection = await this._networkManager.joinSwarm({
2201
- topic,
2202
- peerId: import_keys5.PublicKey.random(),
2203
- protocolProvider: (0, import_network_manager.createTeleportProtocolFactory)(async (teleport) => {
2204
- teleport.addExtension("dxos.halo.invitations", createExtension());
2205
- }),
2206
- topology: new import_network_manager.StarTopology(topic),
2207
- label: "invitation guest"
2208
- });
2209
- ctx.onDispose(() => swarmConnection.close());
2210
- setState({
2211
- state: import_services2.Invitation.State.CONNECTING
2212
- });
2198
+ const error = protocol.checkInvitation(invitation);
2199
+ if (error) {
2200
+ stream.error(error);
2201
+ } else {
2202
+ (0, import_invariant5.invariant)(invitation.swarmKey, void 0, {
2203
+ F: __dxlog_file7,
2204
+ L: 359,
2205
+ S: this,
2206
+ A: [
2207
+ "invitation.swarmKey",
2208
+ ""
2209
+ ]
2210
+ });
2211
+ const topic = invitation.swarmKey;
2212
+ const swarmConnection = await this._networkManager.joinSwarm({
2213
+ topic,
2214
+ peerId: import_keys5.PublicKey.random(),
2215
+ protocolProvider: (0, import_network_manager.createTeleportProtocolFactory)(async (teleport) => {
2216
+ teleport.addExtension("dxos.halo.invitations", createExtension());
2217
+ }),
2218
+ topology: new import_network_manager.StarTopology(topic),
2219
+ label: "invitation guest"
2220
+ });
2221
+ ctx.onDispose(() => swarmConnection.close());
2222
+ setState({
2223
+ state: import_services2.Invitation.State.CONNECTING
2224
+ });
2225
+ }
2213
2226
  });
2214
2227
  const observable = new import_client_protocol2.AuthenticatingInvitation({
2215
2228
  initialInvitation: invitation,
@@ -2425,7 +2438,7 @@ var SpaceInvitationProtocol = class {
2425
2438
  async admit(request, guestProfile) {
2426
2439
  (0, import_invariant8.invariant)(this._spaceKey, void 0, {
2427
2440
  F: __dxlog_file9,
2428
- L: 46,
2441
+ L: 47,
2429
2442
  S: this,
2430
2443
  A: [
2431
2444
  "this._spaceKey",
@@ -2435,7 +2448,7 @@ var SpaceInvitationProtocol = class {
2435
2448
  const space = await this._spaceManager.spaces.get(this._spaceKey);
2436
2449
  (0, import_invariant8.invariant)(space, void 0, {
2437
2450
  F: __dxlog_file9,
2438
- L: 48,
2451
+ L: 49,
2439
2452
  S: this,
2440
2453
  A: [
2441
2454
  "space",
@@ -2444,7 +2457,7 @@ var SpaceInvitationProtocol = class {
2444
2457
  });
2445
2458
  (0, import_invariant8.invariant)(request.space, void 0, {
2446
2459
  F: __dxlog_file9,
2447
- L: 50,
2460
+ L: 51,
2448
2461
  S: this,
2449
2462
  A: [
2450
2463
  "request.space",
@@ -2457,14 +2470,14 @@ var SpaceInvitationProtocol = class {
2457
2470
  guest: deviceKey
2458
2471
  }, {
2459
2472
  F: __dxlog_file9,
2460
- L: 53,
2473
+ L: 54,
2461
2474
  S: this,
2462
2475
  C: (f, a) => f(...a)
2463
2476
  });
2464
2477
  const credentials = await (0, import_credentials8.createAdmissionCredentials)(this._signingContext.credentialSigner, identityKey, space.key, space.inner.genesisFeedKey, guestProfile);
2465
2478
  (0, import_invariant8.invariant)(credentials[0].credential, void 0, {
2466
2479
  F: __dxlog_file9,
2467
- L: 64,
2480
+ L: 65,
2468
2481
  S: this,
2469
2482
  A: [
2470
2483
  "credentials[0].credential",
@@ -2474,7 +2487,7 @@ var SpaceInvitationProtocol = class {
2474
2487
  const spaceMemberCredential = credentials[0].credential.credential;
2475
2488
  (0, import_invariant8.invariant)((0, import_credentials8.getCredentialAssertion)(spaceMemberCredential)["@type"] === "dxos.halo.credentials.SpaceMember", void 0, {
2476
2489
  F: __dxlog_file9,
2477
- L: 66,
2490
+ L: 67,
2478
2491
  S: this,
2479
2492
  A: [
2480
2493
  "getCredentialAssertion(spaceMemberCredential)['@type'] === 'dxos.halo.credentials.SpaceMember'",
@@ -2490,6 +2503,11 @@ var SpaceInvitationProtocol = class {
2490
2503
  }
2491
2504
  };
2492
2505
  }
2506
+ checkInvitation(invitation) {
2507
+ if (invitation.spaceKey && this._spaceManager.spaces.has(invitation.spaceKey)) {
2508
+ return new import_protocols6.AlreadyJoinedError("Already joined space.");
2509
+ }
2510
+ }
2493
2511
  createIntroduction() {
2494
2512
  return {
2495
2513
  profile: this._signingContext.getProfile()
@@ -2510,7 +2528,7 @@ var SpaceInvitationProtocol = class {
2510
2528
  async accept(response) {
2511
2529
  (0, import_invariant8.invariant)(response.space, void 0, {
2512
2530
  F: __dxlog_file9,
2513
- L: 101,
2531
+ L: 108,
2514
2532
  S: this,
2515
2533
  A: [
2516
2534
  "response.space",
@@ -2521,7 +2539,7 @@ var SpaceInvitationProtocol = class {
2521
2539
  const assertion = (0, import_credentials8.getCredentialAssertion)(credential);
2522
2540
  (0, import_invariant8.invariant)(assertion["@type"] === "dxos.halo.credentials.SpaceMember", "Invalid credential", {
2523
2541
  F: __dxlog_file9,
2524
- L: 104,
2542
+ L: 111,
2525
2543
  S: this,
2526
2544
  A: [
2527
2545
  "assertion['@type'] === 'dxos.halo.credentials.SpaceMember'",
@@ -2530,13 +2548,16 @@ var SpaceInvitationProtocol = class {
2530
2548
  });
2531
2549
  (0, import_invariant8.invariant)(credential.subject.id.equals(this._signingContext.identityKey), void 0, {
2532
2550
  F: __dxlog_file9,
2533
- L: 105,
2551
+ L: 112,
2534
2552
  S: this,
2535
2553
  A: [
2536
2554
  "credential.subject.id.equals(this._signingContext.identityKey)",
2537
2555
  ""
2538
2556
  ]
2539
2557
  });
2558
+ if (this._spaceManager.spaces.has(assertion.spaceKey)) {
2559
+ throw new import_protocols6.AlreadyJoinedError("Already joined space.");
2560
+ }
2540
2561
  await this._spaceManager.acceptSpace({
2541
2562
  spaceKey: assertion.spaceKey,
2542
2563
  genesisFeedKey: assertion.genesisFeedKey,
@@ -2559,7 +2580,7 @@ function _ts_decorate3(decorators, target, key, desc) {
2559
2580
  r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
2560
2581
  return c > 3 && r && Object.defineProperty(target, key, r), r;
2561
2582
  }
2562
- var ClientRpcServer = class ClientRpcServer2 {
2583
+ var ClientRpcServer = class {
2563
2584
  constructor(params) {
2564
2585
  this._handlerCache = /* @__PURE__ */ new Map();
2565
2586
  this._callMetrics = new import_tracing3.MapCounter();
@@ -2650,7 +2671,7 @@ var getPlatform = () => {
2650
2671
  };
2651
2672
  }
2652
2673
  };
2653
- var DXOS_VERSION = "0.3.11-main.4feb9c9";
2674
+ var DXOS_VERSION = "0.3.11-main.514e6e4";
2654
2675
  var __dxlog_file10 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/services/diagnostics.ts";
2655
2676
  var DEFAULT_TIMEOUT = 1e3;
2656
2677
  var createDiagnostics = async (clientServices, serviceContext, config) => {
@@ -2660,14 +2681,14 @@ var createDiagnostics = async (clientServices, serviceContext, config) => {
2660
2681
  client: {
2661
2682
  version: DXOS_VERSION,
2662
2683
  storage: {
2663
- version: import_protocols5.STORAGE_VERSION
2684
+ version: import_protocols7.STORAGE_VERSION
2664
2685
  }
2665
2686
  }
2666
2687
  };
2667
2688
  {
2668
2689
  (0, import_invariant9.invariant)(clientServices.LoggingService, "SystemService is not available.", {
2669
2690
  F: __dxlog_file10,
2670
- L: 92,
2691
+ L: 93,
2671
2692
  S: void 0,
2672
2693
  A: [
2673
2694
  "clientServices.LoggingService",
@@ -2678,6 +2699,21 @@ var createDiagnostics = async (clientServices, serviceContext, config) => {
2678
2699
  timeout: DEFAULT_TIMEOUT
2679
2700
  }).catch(() => void 0);
2680
2701
  }
2702
+ if (typeof navigator !== "undefined" && navigator.storage) {
2703
+ const map = /* @__PURE__ */ new Map();
2704
+ const dir = await navigator.storage.getDirectory();
2705
+ for await (const filename of dir?.keys()) {
2706
+ const idx = filename.indexOf("-", filename.indexOf("-") + 1);
2707
+ if (idx === -1) {
2708
+ continue;
2709
+ }
2710
+ map.set(filename.slice(0, idx), (map.get(filename.slice(0, idx)) ?? 0) + 1);
2711
+ }
2712
+ diagnostics.storage = Array.from(map.entries()).sort((a, b) => b[1] - a[1]).map(([file, count]) => ({
2713
+ file,
2714
+ count
2715
+ }));
2716
+ }
2681
2717
  const identity = serviceContext.identityManager.identity;
2682
2718
  if (identity) {
2683
2719
  diagnostics.identity = {
@@ -2718,7 +2754,7 @@ var getProperties = (space) => {
2718
2754
  } catch (err) {
2719
2755
  import_log8.log.warn(err.message, void 0, {
2720
2756
  F: __dxlog_file10,
2721
- L: 160,
2757
+ L: 178,
2722
2758
  S: void 0,
2723
2759
  C: (f, a) => f(...a)
2724
2760
  });
@@ -3019,10 +3055,10 @@ var NotarizationTeleportExtension = class extends import_teleport2.RpcExtension
3019
3055
  constructor(_params) {
3020
3056
  super({
3021
3057
  requested: {
3022
- NotarizationService: import_protocols7.schema.getService("dxos.mesh.teleport.notarization.NotarizationService")
3058
+ NotarizationService: import_protocols9.schema.getService("dxos.mesh.teleport.notarization.NotarizationService")
3023
3059
  },
3024
3060
  exposed: {
3025
- NotarizationService: import_protocols7.schema.getService("dxos.mesh.teleport.notarization.NotarizationService")
3061
+ NotarizationService: import_protocols9.schema.getService("dxos.mesh.teleport.notarization.NotarizationService")
3026
3062
  }
3027
3063
  });
3028
3064
  this._params = _params;
@@ -3057,7 +3093,7 @@ function _ts_decorate4(decorators, target, key, desc) {
3057
3093
  }
3058
3094
  var __dxlog_file12 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/spaces/data-space.ts";
3059
3095
  var ENABLE_FEED_PURGE = false;
3060
- var DataSpace = class DataSpace2 {
3096
+ var DataSpace = class {
3061
3097
  constructor(params) {
3062
3098
  this._ctx = new import_context6.Context();
3063
3099
  this._notarizationPlugin = new NotarizationPlugin();
@@ -3182,7 +3218,7 @@ var DataSpace = class DataSpace2 {
3182
3218
  this.metrics.pipelineInitBegin = /* @__PURE__ */ new Date();
3183
3219
  await this.initializeDataPipeline();
3184
3220
  } catch (err) {
3185
- if (err instanceof import_protocols6.CancelledError) {
3221
+ if (err instanceof import_protocols8.CancelledError) {
3186
3222
  (0, import_log9.log)("data pipeline initialization cancelled", err, {
3187
3223
  F: __dxlog_file12,
3188
3224
  L: 236,
@@ -3215,7 +3251,7 @@ var DataSpace = class DataSpace2 {
3215
3251
  }
3216
3252
  async initializeDataPipeline() {
3217
3253
  if (this._state !== import_services7.SpaceState.CONTROL_ONLY) {
3218
- throw new import_protocols6.SystemError("Invalid operation");
3254
+ throw new import_protocols8.SystemError("Invalid operation");
3219
3255
  }
3220
3256
  this._state = import_services7.SpaceState.INITIALIZING;
3221
3257
  (0, import_log9.log)("new state", {
@@ -3522,7 +3558,7 @@ function _ts_decorate5(decorators, target, key, desc) {
3522
3558
  var __dxlog_file13 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/spaces/data-space-manager.ts";
3523
3559
  var PRESENCE_ANNOUNCE_INTERVAL = 1e4;
3524
3560
  var PRESENCE_OFFLINE_TIMEOUT = 2e4;
3525
- var DataSpaceManager = class DataSpaceManager2 {
3561
+ var DataSpaceManager = class {
3526
3562
  constructor(_spaceManager, _metadataStore, _dataServiceSubscriptions, _keyring, _signingContext, _feedStore, _automergeHost) {
3527
3563
  this._spaceManager = _spaceManager;
3528
3564
  this._metadataStore = _metadataStore;
@@ -3548,7 +3584,7 @@ var DataSpaceManager = class DataSpaceManager2 {
3548
3584
  S: this,
3549
3585
  C: (f, a) => f(...a)
3550
3586
  });
3551
- import_log11.log.trace("dxos.echo.data-space-manager.open", import_protocols8.trace.begin({
3587
+ import_log11.log.trace("dxos.echo.data-space-manager.open", import_protocols10.trace.begin({
3552
3588
  id: this._instanceId
3553
3589
  }), {
3554
3590
  F: __dxlog_file13,
@@ -3594,7 +3630,7 @@ var DataSpaceManager = class DataSpaceManager2 {
3594
3630
  space.initializeDataPipelineAsync();
3595
3631
  }
3596
3632
  }
3597
- import_log11.log.trace("dxos.echo.data-space-manager.open", import_protocols8.trace.end({
3633
+ import_log11.log.trace("dxos.echo.data-space-manager.open", import_protocols10.trace.end({
3598
3634
  id: this._instanceId
3599
3635
  }), {
3600
3636
  F: __dxlog_file13,
@@ -3856,7 +3892,7 @@ var SpacesServiceImpl = class {
3856
3892
  }
3857
3893
  async createSpace() {
3858
3894
  if (!this._identityManager.identity) {
3859
- throw new Error("This device has no HALO identity available. See https://docs.dxos.org/guide/halo");
3895
+ throw new Error("This device has no HALO identity available. See https://docs.dxos.org/guide/platform/halo");
3860
3896
  }
3861
3897
  const dataSpaceManager = await this._getDataSpaceManager();
3862
3898
  const space = await dataSpaceManager.createSpace();
@@ -3864,7 +3900,7 @@ var SpacesServiceImpl = class {
3864
3900
  }
3865
3901
  async updateSpace({ spaceKey, state }) {
3866
3902
  const dataSpaceManager = await this._getDataSpaceManager();
3867
- const space = dataSpaceManager.spaces.get(spaceKey) ?? (0, import_debug6.raise)(new import_protocols9.SpaceNotFoundError(spaceKey));
3903
+ const space = dataSpaceManager.spaces.get(spaceKey) ?? (0, import_debug6.raise)(new import_protocols11.SpaceNotFoundError(spaceKey));
3868
3904
  if (state) {
3869
3905
  switch (state) {
3870
3906
  case import_services9.SpaceState.ACTIVE:
@@ -3874,7 +3910,7 @@ var SpacesServiceImpl = class {
3874
3910
  await space.deactivate();
3875
3911
  break;
3876
3912
  default:
3877
- throw new import_protocols9.ApiError("Invalid space state");
3913
+ throw new import_protocols11.ApiError("Invalid space state");
3878
3914
  }
3879
3915
  }
3880
3916
  }
@@ -3929,14 +3965,14 @@ var SpacesServiceImpl = class {
3929
3965
  }
3930
3966
  async postMessage({ spaceKey, channel, message }) {
3931
3967
  const dataSpaceManager = await this._getDataSpaceManager();
3932
- const space = dataSpaceManager.spaces.get(spaceKey) ?? (0, import_debug6.raise)(new import_protocols9.SpaceNotFoundError(spaceKey));
3968
+ const space = dataSpaceManager.spaces.get(spaceKey) ?? (0, import_debug6.raise)(new import_protocols11.SpaceNotFoundError(spaceKey));
3933
3969
  await space.postMessage(getChannelId(channel), message);
3934
3970
  }
3935
3971
  subscribeMessages({ spaceKey, channel }) {
3936
3972
  return new import_codec_protobuf11.Stream(({ ctx, next }) => {
3937
3973
  (0, import_async13.scheduleTask)(ctx, async () => {
3938
3974
  const dataSpaceManager = await this._getDataSpaceManager();
3939
- const space = dataSpaceManager.spaces.get(spaceKey) ?? (0, import_debug6.raise)(new import_protocols9.SpaceNotFoundError(spaceKey));
3975
+ const space = dataSpaceManager.spaces.get(spaceKey) ?? (0, import_debug6.raise)(new import_protocols11.SpaceNotFoundError(spaceKey));
3940
3976
  const handle = space.listen(getChannelId(channel), (message) => {
3941
3977
  next(message);
3942
3978
  });
@@ -3946,7 +3982,7 @@ var SpacesServiceImpl = class {
3946
3982
  }
3947
3983
  queryCredentials({ spaceKey, noTail }) {
3948
3984
  return new import_codec_protobuf11.Stream(({ ctx, next, close }) => {
3949
- const space = this._spaceManager.spaces.get(spaceKey) ?? (0, import_debug6.raise)(new import_protocols9.SpaceNotFoundError(spaceKey));
3985
+ const space = this._spaceManager.spaces.get(spaceKey) ?? (0, import_debug6.raise)(new import_protocols11.SpaceNotFoundError(spaceKey));
3950
3986
  const processor = {
3951
3987
  processCredential: async (credential) => {
3952
3988
  next(credential);
@@ -3962,7 +3998,7 @@ var SpacesServiceImpl = class {
3962
3998
  });
3963
3999
  }
3964
4000
  async writeCredentials({ spaceKey, credentials }) {
3965
- const space = this._spaceManager.spaces.get(spaceKey) ?? (0, import_debug6.raise)(new import_protocols9.SpaceNotFoundError(spaceKey));
4001
+ const space = this._spaceManager.spaces.get(spaceKey) ?? (0, import_debug6.raise)(new import_protocols11.SpaceNotFoundError(spaceKey));
3966
4002
  for (const credential of credentials ?? []) {
3967
4003
  if (credential.proof) {
3968
4004
  await space.controlPipeline.writer.write({
@@ -4013,14 +4049,14 @@ var SpacesServiceImpl = class {
4013
4049
  }
4014
4050
  async createEpoch({ spaceKey }) {
4015
4051
  const dataSpaceManager = await this._getDataSpaceManager();
4016
- const space = dataSpaceManager.spaces.get(spaceKey) ?? (0, import_debug6.raise)(new import_protocols9.SpaceNotFoundError(spaceKey));
4052
+ const space = dataSpaceManager.spaces.get(spaceKey) ?? (0, import_debug6.raise)(new import_protocols11.SpaceNotFoundError(spaceKey));
4017
4053
  await space.createEpoch();
4018
4054
  }
4019
4055
  _serializeSpace(space) {
4020
4056
  return {
4021
4057
  spaceKey: space.key,
4022
4058
  state: space.state,
4023
- error: space.error ? (0, import_protocols9.encodeError)(space.error) : void 0,
4059
+ error: space.error ? (0, import_protocols11.encodeError)(space.error) : void 0,
4024
4060
  pipeline: {
4025
4061
  currentEpoch: space.dataPipeline.currentEpoch,
4026
4062
  appliedEpoch: space.dataPipeline.appliedEpoch,
@@ -4069,7 +4105,7 @@ function _ts_decorate6(decorators, target, key, desc) {
4069
4105
  return c > 3 && r && Object.defineProperty(target, key, r), r;
4070
4106
  }
4071
4107
  var __dxlog_file15 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/services/service-context.ts";
4072
- var ServiceContext = class ServiceContext2 {
4108
+ var ServiceContext = class {
4073
4109
  constructor(storage, networkManager, signalManager, modelFactory) {
4074
4110
  this.storage = storage;
4075
4111
  this.networkManager = networkManager;
@@ -4114,7 +4150,7 @@ var ServiceContext = class ServiceContext2 {
4114
4150
  S: this,
4115
4151
  C: (f, a) => f(...a)
4116
4152
  });
4117
- import_log13.log.trace("dxos.sdk.service-context.open", import_protocols10.trace.begin({
4153
+ import_log13.log.trace("dxos.sdk.service-context.open", import_protocols12.trace.begin({
4118
4154
  id: this._instanceId
4119
4155
  }), {
4120
4156
  F: __dxlog_file15,
@@ -4130,7 +4166,7 @@ var ServiceContext = class ServiceContext2 {
4130
4166
  if (this.identityManager.identity) {
4131
4167
  await this._initialize(ctx);
4132
4168
  }
4133
- import_log13.log.trace("dxos.sdk.service-context.open", import_protocols10.trace.end({
4169
+ import_log13.log.trace("dxos.sdk.service-context.open", import_protocols12.trace.end({
4134
4170
  id: this._instanceId
4135
4171
  }), {
4136
4172
  F: __dxlog_file15,
@@ -4204,8 +4240,8 @@ var ServiceContext = class ServiceContext2 {
4204
4240
  }
4205
4241
  async _checkStorageVersion() {
4206
4242
  await this.metadataStore.load();
4207
- if (this.metadataStore.version !== import_protocols10.STORAGE_VERSION) {
4208
- throw new import_protocols10.InvalidStorageVersionError(import_protocols10.STORAGE_VERSION, this.metadataStore.version);
4243
+ if (this.metadataStore.version !== import_protocols12.STORAGE_VERSION) {
4244
+ throw new import_protocols12.InvalidStorageVersionError(import_protocols12.STORAGE_VERSION, this.metadataStore.version);
4209
4245
  }
4210
4246
  }
4211
4247
  // Called when identity is created.
@@ -4392,16 +4428,16 @@ var StorageDriver = import_config.Runtime.Client.Storage.StorageDriver;
4392
4428
  var createStorageObjects = (config) => {
4393
4429
  const { persistent = false, keyStore, dataStore, dataRoot = (0, import_util8.isNode)() ? import_client_protocol4.DX_DATA : "dxos/storage" } = config ?? {};
4394
4430
  if (persistent && dataStore === StorageDriver.RAM) {
4395
- throw new import_protocols11.InvalidConfigError("RAM storage cannot be used in persistent mode.");
4431
+ throw new import_protocols13.InvalidConfigError("RAM storage cannot be used in persistent mode.");
4396
4432
  }
4397
4433
  if (!persistent && dataStore !== void 0 && dataStore !== StorageDriver.RAM) {
4398
- throw new import_protocols11.InvalidConfigError("Cannot use a persistent storage in not persistent mode.");
4434
+ throw new import_protocols13.InvalidConfigError("Cannot use a persistent storage in not persistent mode.");
4399
4435
  }
4400
4436
  if (persistent && keyStore === StorageDriver.RAM) {
4401
- throw new import_protocols11.InvalidConfigError("RAM key storage cannot be used in persistent mode.");
4437
+ throw new import_protocols13.InvalidConfigError("RAM key storage cannot be used in persistent mode.");
4402
4438
  }
4403
4439
  if (!persistent && keyStore !== StorageDriver.RAM && keyStore !== void 0) {
4404
- throw new import_protocols11.InvalidConfigError("Cannot use a persistent key storage in not persistent mode.");
4440
+ throw new import_protocols13.InvalidConfigError("Cannot use a persistent key storage in not persistent mode.");
4405
4441
  }
4406
4442
  return {
4407
4443
  storage: (0, import_random_access_storage.createStorage)({
@@ -4683,7 +4719,7 @@ var createGenesisMutationFromTypedObject = (obj) => {
4683
4719
  }
4684
4720
  };
4685
4721
  };
4686
- var ClientServicesHost = class ClientServicesHost2 {
4722
+ var ClientServicesHost = class {
4687
4723
  constructor({
4688
4724
  config,
4689
4725
  modelFactory = createDefaultModelFactory(),
@@ -4827,7 +4863,7 @@ var ClientServicesHost = class ClientServicesHost2 {
4827
4863
  return;
4828
4864
  }
4829
4865
  const traceId = import_keys11.PublicKey.random().toHex();
4830
- import_log15.log.trace("dxos.client-services.host.open", import_protocols12.trace.begin({
4866
+ import_log15.log.trace("dxos.client-services.host.open", import_protocols14.trace.begin({
4831
4867
  id: traceId
4832
4868
  }), {
4833
4869
  F: __dxlog_file17,
@@ -4885,7 +4921,7 @@ var ClientServicesHost = class ClientServicesHost2 {
4885
4921
  this._serviceContext = new ServiceContext(this._storage, this._networkManager, this._signalManager, this._modelFactory);
4886
4922
  this._serviceRegistry.setServices({
4887
4923
  SystemService: this._systemService,
4888
- IdentityService: new IdentityServiceImpl((params) => this._createIdentity(params), this._serviceContext.identityManager, this._serviceContext.keyring, (profile) => this._serviceContext.broadcastProfileUpdate(profile)),
4924
+ IdentityService: new IdentityServiceImpl((params, useAutomerge) => this._createIdentity(params, useAutomerge), this._serviceContext.identityManager, this._serviceContext.keyring, (profile) => this._serviceContext.broadcastProfileUpdate(profile)),
4889
4925
  InvitationsService: new InvitationsServiceImpl(this._serviceContext.invitations, (invitation) => this._serviceContext.getInvitationHandler(invitation)),
4890
4926
  DevicesService: new DevicesServiceImpl(this._serviceContext.identityManager),
4891
4927
  SpacesService: new SpacesServiceImpl(this._serviceContext.identityManager, this._serviceContext.spaceManager, this._serviceContext.dataServiceSubscriptions, async () => {
@@ -4926,7 +4962,7 @@ var ClientServicesHost = class ClientServicesHost2 {
4926
4962
  S: this,
4927
4963
  C: (f, a) => f(...a)
4928
4964
  });
4929
- import_log15.log.trace("dxos.client-services.host.open", import_protocols12.trace.end({
4965
+ import_log15.log.trace("dxos.client-services.host.open", import_protocols14.trace.end({
4930
4966
  id: traceId
4931
4967
  }), {
4932
4968
  F: __dxlog_file17,
@@ -4967,7 +5003,7 @@ var ClientServicesHost = class ClientServicesHost2 {
4967
5003
  }
4968
5004
  async reset() {
4969
5005
  const traceId = import_keys11.PublicKey.random().toHex();
4970
- import_log15.log.trace("dxos.sdk.client-services-host.reset", import_protocols12.trace.begin({
5006
+ import_log15.log.trace("dxos.sdk.client-services-host.reset", import_protocols14.trace.begin({
4971
5007
  id: traceId
4972
5008
  }), {
4973
5009
  F: __dxlog_file17,
@@ -4989,7 +5025,7 @@ var ClientServicesHost = class ClientServicesHost2 {
4989
5025
  S: this,
4990
5026
  C: (f, a) => f(...a)
4991
5027
  });
4992
- import_log15.log.trace("dxos.sdk.client-services-host.reset", import_protocols12.trace.end({
5028
+ import_log15.log.trace("dxos.sdk.client-services-host.reset", import_protocols14.trace.end({
4993
5029
  id: traceId
4994
5030
  }), {
4995
5031
  F: __dxlog_file17,
@@ -4999,25 +5035,44 @@ var ClientServicesHost = class ClientServicesHost2 {
4999
5035
  });
5000
5036
  await this._callbacks?.onReset?.();
5001
5037
  }
5002
- async _createIdentity(params) {
5038
+ async _createIdentity(params, useAutomerge) {
5003
5039
  const identity = await this._serviceContext.createIdentity(params);
5004
5040
  await this._serviceContext.initialized.wait();
5005
5041
  const space = await this._serviceContext.dataSpaceManager.createSpace();
5006
5042
  const obj = new import_client_protocol5.Properties(void 0, {
5007
- automerge: false
5043
+ automerge: useAutomerge
5008
5044
  });
5009
5045
  obj[import_client_protocol5.defaultKey] = identity.identityKey.toHex();
5010
- await this._serviceRegistry.services.DataService.write({
5011
- spaceKey: space.key,
5012
- batch: {
5013
- objects: [
5014
- createGenesisMutationFromTypedObject(obj)
5046
+ if (!useAutomerge) {
5047
+ await this._serviceRegistry.services.DataService.write({
5048
+ spaceKey: space.key,
5049
+ batch: {
5050
+ objects: [
5051
+ createGenesisMutationFromTypedObject(obj)
5052
+ ]
5053
+ }
5054
+ });
5055
+ await this._serviceRegistry.services.DataService.flush({
5056
+ spaceKey: space.key
5057
+ });
5058
+ } else {
5059
+ const automergeIndex = space.automergeSpaceState.rootUrl;
5060
+ (0, import_invariant15.invariant)(automergeIndex, void 0, {
5061
+ F: __dxlog_file17,
5062
+ L: 375,
5063
+ S: this,
5064
+ A: [
5065
+ "automergeIndex",
5066
+ ""
5015
5067
  ]
5016
- }
5017
- });
5018
- await this._serviceRegistry.services.DataService.flush({
5019
- spaceKey: space.key
5020
- });
5068
+ });
5069
+ const document = await this._serviceContext.automergeHost.repo.find(automergeIndex);
5070
+ await document.whenReady();
5071
+ document.change((doc) => {
5072
+ doc.objects ??= {};
5073
+ doc.objects[obj[import_echo_schema.base]._id] = (0, import_echo_schema.getRawDoc)(obj).handle.docSync();
5074
+ });
5075
+ }
5021
5076
  return identity;
5022
5077
  }
5023
5078
  };
@@ -5072,4 +5127,4 @@ ClientServicesHost = _ts_decorate8([
5072
5127
  subscribeToSpaces,
5073
5128
  subscribeToSwarmInfo
5074
5129
  });
5075
- //# sourceMappingURL=chunk-W4V257LR.cjs.map
5130
+ //# sourceMappingURL=chunk-4DSU4MDX.cjs.map