@dxos/client-services 0.5.9-main.59deb28 → 0.5.9-main.5ad2d33

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 (47) hide show
  1. package/dist/lib/browser/{chunk-GCU4DHSQ.mjs → chunk-PLEBKZ2Q.mjs} +1132 -683
  2. package/dist/lib/browser/chunk-PLEBKZ2Q.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +13 -2
  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 +10 -3
  7. package/dist/lib/browser/packlets/testing/index.mjs.map +1 -1
  8. package/dist/lib/node/{chunk-MHRJ6WZU.cjs → chunk-E6HB26ZB.cjs} +1167 -718
  9. package/dist/lib/node/chunk-E6HB26ZB.cjs.map +7 -0
  10. package/dist/lib/node/index.cjs +53 -42
  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 +17 -10
  14. package/dist/lib/node/packlets/testing/index.cjs.map +1 -1
  15. package/dist/types/src/packlets/identity/contacts-service.d.ts +14 -0
  16. package/dist/types/src/packlets/identity/contacts-service.d.ts.map +1 -0
  17. package/dist/types/src/packlets/identity/identity-service.d.ts.map +1 -1
  18. package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
  19. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts.map +1 -1
  20. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  21. package/dist/types/src/packlets/spaces/data-space-manager.d.ts +10 -1
  22. package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
  23. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  24. package/dist/types/src/packlets/spaces/epoch-migrations.d.ts +2 -2
  25. package/dist/types/src/packlets/spaces/epoch-migrations.d.ts.map +1 -1
  26. package/dist/types/src/packlets/spaces/spaces-service.d.ts +4 -1
  27. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  28. package/dist/types/src/packlets/storage/index.d.ts +1 -0
  29. package/dist/types/src/packlets/storage/index.d.ts.map +1 -1
  30. package/dist/types/src/packlets/storage/profile-archive.d.ts +14 -0
  31. package/dist/types/src/packlets/storage/profile-archive.d.ts.map +1 -0
  32. package/dist/types/src/version.d.ts +1 -1
  33. package/package.json +36 -36
  34. package/src/packlets/identity/contacts-service.ts +85 -0
  35. package/src/packlets/identity/identity-service.ts +45 -18
  36. package/src/packlets/invitations/invitations-handler.ts +13 -5
  37. package/src/packlets/invitations/space-invitation-protocol.ts +11 -32
  38. package/src/packlets/services/service-host.ts +12 -4
  39. package/src/packlets/spaces/data-space-manager.ts +55 -2
  40. package/src/packlets/spaces/data-space.ts +8 -6
  41. package/src/packlets/spaces/epoch-migrations.ts +57 -38
  42. package/src/packlets/spaces/spaces-service.ts +52 -2
  43. package/src/packlets/storage/index.ts +1 -0
  44. package/src/packlets/storage/profile-archive.ts +111 -0
  45. package/src/version.ts +1 -1
  46. package/dist/lib/browser/chunk-GCU4DHSQ.mjs.map +0 -7
  47. package/dist/lib/node/chunk-MHRJ6WZU.cjs.map +0 -7
@@ -85,6 +85,7 @@ var subscribeToFeedBlocks = ({ feedStore }, { feedKey, maxBlocks = 10 }) => {
85
85
  import { Stream as Stream2 } from "@dxos/codec-protobuf";
86
86
  import { Context } from "@dxos/context";
87
87
  import { PublicKey as PublicKey2 } from "@dxos/keys";
88
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/devtools/network.ts";
88
89
  var subscribeToNetworkStatus = ({ signalManager }) => new Stream2(({ next, close }) => {
89
90
  const update = () => {
90
91
  try {
@@ -100,7 +101,10 @@ var subscribeToNetworkStatus = ({ signalManager }) => new Stream2(({ next, close
100
101
  update();
101
102
  });
102
103
  var subscribeToSignal = ({ signalManager }) => new Stream2(({ next }) => {
103
- const ctx = new Context();
104
+ const ctx = new Context(void 0, {
105
+ F: __dxlog_file,
106
+ L: 36
107
+ });
104
108
  signalManager.onMessage.on(ctx, (message) => {
105
109
  next({
106
110
  message: {
@@ -355,7 +359,7 @@ import { SpaceMember } from "@dxos/protocols/proto/dxos/client/services";
355
359
  import { TRACE_PROCESSOR } from "@dxos/tracing";
356
360
 
357
361
  // packages/sdk/client-services/src/version.ts
358
- var DXOS_VERSION = "0.5.9-main.59deb28";
362
+ var DXOS_VERSION = "0.5.9-main.5ad2d33";
359
363
 
360
364
  // packages/sdk/client-services/src/packlets/services/platform.ts
361
365
  import { Platform } from "@dxos/protocols/proto/dxos/client/services";
@@ -388,7 +392,7 @@ var getPlatform = () => {
388
392
  };
389
393
 
390
394
  // packages/sdk/client-services/src/packlets/diagnostics/diagnostics.ts
391
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/diagnostics/diagnostics.ts";
395
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/diagnostics/diagnostics.ts";
392
396
  var DEFAULT_TIMEOUT = 1e3;
393
397
  var createDiagnostics = async (clientServices, serviceContext, config) => {
394
398
  const diagnostics = {
@@ -405,7 +409,7 @@ var createDiagnostics = async (clientServices, serviceContext, config) => {
405
409
  await Promise.all([
406
410
  (async () => {
407
411
  invariant(clientServices.LoggingService, "SystemService is not available.", {
408
- F: __dxlog_file,
412
+ F: __dxlog_file2,
409
413
  L: 110,
410
414
  S: void 0,
411
415
  A: [
@@ -510,7 +514,7 @@ var getStorageDiagnostics = async () => {
510
514
  // packages/sdk/client-services/src/packlets/diagnostics/browser-diagnostics-broadcast.ts
511
515
  import { Trigger } from "@dxos/async";
512
516
  import { log } from "@dxos/log";
513
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/diagnostics/browser-diagnostics-broadcast.ts";
517
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/diagnostics/browser-diagnostics-broadcast.ts";
514
518
  var CHANNEL_NAME = "dxos.diagnostics.broadcast";
515
519
  var MessageType;
516
520
  (function(MessageType2) {
@@ -579,7 +583,7 @@ var createCollectDiagnosticsBroadcastHandler = (systemService) => {
579
583
  }
580
584
  } catch (error) {
581
585
  log.catch(error, void 0, {
582
- F: __dxlog_file2,
586
+ F: __dxlog_file3,
583
587
  L: 77,
584
588
  S: void 0,
585
589
  C: (f, a) => f(...a)
@@ -687,7 +691,7 @@ import { Context as Context2 } from "@dxos/context";
687
691
  import { verifyCredential } from "@dxos/credentials";
688
692
  import { log as log2 } from "@dxos/log";
689
693
  import { schema } from "@dxos/protocols";
690
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/identity/authenticator.ts";
694
+ var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/identity/authenticator.ts";
691
695
  var Credential = schema.getCodecForType("dxos.halo.credentials.Credential");
692
696
  var createAuthProvider = (signer) => async (nonce) => {
693
697
  const credential = await signer.createCredential({
@@ -702,7 +706,10 @@ var createAuthProvider = (signer) => async (nonce) => {
702
706
  var TrustedKeySetAuthVerifier = class {
703
707
  constructor(_params) {
704
708
  this._params = _params;
705
- this._ctx = new Context2();
709
+ this._ctx = new Context2(void 0, {
710
+ F: __dxlog_file4,
711
+ L: 45
712
+ });
706
713
  }
707
714
  async close() {
708
715
  await this._ctx.dispose();
@@ -713,7 +720,7 @@ var TrustedKeySetAuthVerifier = class {
713
720
  log2("authenticating...", {
714
721
  credential
715
722
  }, {
716
- F: __dxlog_file3,
723
+ F: __dxlog_file4,
717
724
  L: 56,
718
725
  S: this,
719
726
  C: (f, a) => f(...a)
@@ -723,7 +730,7 @@ var TrustedKeySetAuthVerifier = class {
723
730
  log2("Invalid credential", {
724
731
  result
725
732
  }, {
726
- F: __dxlog_file3,
733
+ F: __dxlog_file4,
727
734
  L: 60,
728
735
  S: this,
729
736
  C: (f, a) => f(...a)
@@ -735,7 +742,7 @@ var TrustedKeySetAuthVerifier = class {
735
742
  nonce,
736
743
  credential
737
744
  }, {
738
- F: __dxlog_file3,
745
+ F: __dxlog_file4,
739
746
  L: 65,
740
747
  S: this,
741
748
  C: (f, a) => f(...a)
@@ -746,7 +753,7 @@ var TrustedKeySetAuthVerifier = class {
746
753
  log2("key is not currently in trusted set, waiting...", {
747
754
  key: credential.issuer
748
755
  }, {
749
- F: __dxlog_file3,
756
+ F: __dxlog_file4,
750
757
  L: 70,
751
758
  S: this,
752
759
  C: (f, a) => f(...a)
@@ -762,7 +769,7 @@ var TrustedKeySetAuthVerifier = class {
762
769
  log2("auth success", {
763
770
  key: credential.issuer
764
771
  }, {
765
- F: __dxlog_file3,
772
+ F: __dxlog_file4,
766
773
  L: 81,
767
774
  S: this,
768
775
  C: (f, a) => f(...a)
@@ -772,7 +779,7 @@ var TrustedKeySetAuthVerifier = class {
772
779
  log2("key is not currently in trusted set, waiting...", {
773
780
  key: credential.issuer
774
781
  }, {
775
- F: __dxlog_file3,
782
+ F: __dxlog_file4,
776
783
  L: 84,
777
784
  S: this,
778
785
  C: (f, a) => f(...a)
@@ -813,7 +820,7 @@ import { ComplexSet } from "@dxos/util";
813
820
  import { getCredentialAssertion } from "@dxos/credentials";
814
821
  import { SpaceId } from "@dxos/keys";
815
822
  import { log as log3 } from "@dxos/log";
816
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/identity/default-space-state-machine.ts";
823
+ var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/identity/default-space-state-machine.ts";
817
824
  var DefaultSpaceStateMachine = class {
818
825
  constructor(_params) {
819
826
  this._params = _params;
@@ -830,7 +837,7 @@ var DefaultSpaceStateMachine = class {
830
837
  expectedIdentity: this._params.identityKey,
831
838
  credential
832
839
  }, {
833
- F: __dxlog_file4,
840
+ F: __dxlog_file5,
834
841
  L: 32,
835
842
  S: this,
836
843
  C: (f, a) => f(...a)
@@ -841,7 +848,7 @@ var DefaultSpaceStateMachine = class {
841
848
  log3.warn("Invalid default space id", {
842
849
  id: assertion.spaceId
843
850
  }, {
844
- F: __dxlog_file4,
851
+ F: __dxlog_file5,
845
852
  L: 36,
846
853
  S: this,
847
854
  C: (f, a) => f(...a)
@@ -866,7 +873,7 @@ function _ts_decorate2(decorators, target, key, desc) {
866
873
  r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
867
874
  return c > 3 && r && Object.defineProperty(target, key, r), r;
868
875
  }
869
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/identity/identity.ts";
876
+ var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/identity/identity.ts";
870
877
  var Identity = class {
871
878
  constructor({ space, signer, identityKey, deviceKey, presence }) {
872
879
  this.stateUpdate = new Event();
@@ -878,7 +885,7 @@ var Identity = class {
878
885
  log4.trace("dxos.halo.device", {
879
886
  deviceKey
880
887
  }, {
881
- F: __dxlog_file5,
888
+ F: __dxlog_file6,
882
889
  L: 70,
883
890
  S: this,
884
891
  C: (f, a) => f(...a)
@@ -957,7 +964,7 @@ var Identity = class {
957
964
  */
958
965
  getIdentityCredentialSigner() {
959
966
  invariant2(this._deviceStateMachine.deviceCredentialChain, "Device credential chain is not ready.", {
960
- F: __dxlog_file5,
967
+ F: __dxlog_file6,
961
968
  L: 159,
962
969
  S: this,
963
970
  A: [
@@ -1001,7 +1008,7 @@ var Identity = class {
1001
1008
  controlFeedKey,
1002
1009
  dataFeedKey
1003
1010
  }, {
1004
- F: __dxlog_file5,
1011
+ F: __dxlog_file6,
1005
1012
  L: 184,
1006
1013
  S: this,
1007
1014
  C: (f, a) => f(...a)
@@ -1078,7 +1085,7 @@ function _ts_decorate3(decorators, target, key, desc) {
1078
1085
  r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1079
1086
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1080
1087
  }
1081
- var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/identity/identity-manager.ts";
1088
+ var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/identity/identity-manager.ts";
1082
1089
  var DEVICE_PRESENCE_ANNOUNCE_INTERVAL = 1e4;
1083
1090
  var DEVICE_PRESENCE_OFFLINE_TIMEOUT = 2e4;
1084
1091
  var IdentityManager = class {
@@ -1102,7 +1109,7 @@ var IdentityManager = class {
1102
1109
  log5.trace("dxos.halo.identity-manager.open", trace3.begin({
1103
1110
  id: traceId
1104
1111
  }), {
1105
- F: __dxlog_file6,
1112
+ F: __dxlog_file7,
1106
1113
  L: 104,
1107
1114
  S: this,
1108
1115
  C: (f, a) => f(...a)
@@ -1111,7 +1118,7 @@ var IdentityManager = class {
1111
1118
  log5("identity record", {
1112
1119
  identityRecord
1113
1120
  }, {
1114
- F: __dxlog_file6,
1121
+ F: __dxlog_file7,
1115
1122
  L: 107,
1116
1123
  S: this,
1117
1124
  C: (f, a) => f(...a)
@@ -1124,7 +1131,7 @@ var IdentityManager = class {
1124
1131
  identityKey: identityRecord.identityKey,
1125
1132
  displayName: this._identity.profileDocument?.displayName
1126
1133
  }, {
1127
- F: __dxlog_file6,
1134
+ F: __dxlog_file7,
1128
1135
  L: 112,
1129
1136
  S: this,
1130
1137
  C: (f, a) => f(...a)
@@ -1134,18 +1141,21 @@ var IdentityManager = class {
1134
1141
  log5.trace("dxos.halo.identity-manager.open", trace3.end({
1135
1142
  id: traceId
1136
1143
  }), {
1137
- F: __dxlog_file6,
1144
+ F: __dxlog_file7,
1138
1145
  L: 119,
1139
1146
  S: this,
1140
1147
  C: (f, a) => f(...a)
1141
1148
  });
1142
1149
  }
1143
1150
  async close() {
1144
- await this._identity?.close(new Context3());
1151
+ await this._identity?.close(new Context3(void 0, {
1152
+ F: __dxlog_file7,
1153
+ L: 123
1154
+ }));
1145
1155
  }
1146
1156
  async createIdentity({ displayName, deviceProfile } = {}) {
1147
1157
  invariant3(!this._identity, "Identity already exists.", {
1148
- F: __dxlog_file6,
1158
+ F: __dxlog_file7,
1149
1159
  L: 128,
1150
1160
  S: this,
1151
1161
  A: [
@@ -1154,7 +1164,7 @@ var IdentityManager = class {
1154
1164
  ]
1155
1165
  });
1156
1166
  log5("creating identity...", void 0, {
1157
- F: __dxlog_file6,
1167
+ F: __dxlog_file7,
1158
1168
  L: 129,
1159
1169
  S: this,
1160
1170
  C: (f, a) => f(...a)
@@ -1171,11 +1181,14 @@ var IdentityManager = class {
1171
1181
  }
1172
1182
  };
1173
1183
  const identity = await this._constructIdentity(identityRecord);
1174
- await identity.open(new Context3());
1184
+ await identity.open(new Context3(void 0, {
1185
+ F: __dxlog_file7,
1186
+ L: 144
1187
+ }));
1175
1188
  {
1176
1189
  const generator = new CredentialGenerator(this._keyring, identityRecord.identityKey, identityRecord.deviceKey);
1177
1190
  invariant3(identityRecord.haloSpace.genesisFeedKey, "Genesis feed key is required.", {
1178
- F: __dxlog_file6,
1191
+ F: __dxlog_file7,
1179
1192
  L: 148,
1180
1193
  S: this,
1181
1194
  A: [
@@ -1184,7 +1197,7 @@ var IdentityManager = class {
1184
1197
  ]
1185
1198
  });
1186
1199
  invariant3(identityRecord.haloSpace.dataFeedKey, "Data feed key is required.", {
1187
- F: __dxlog_file6,
1200
+ F: __dxlog_file7,
1188
1201
  L: 149,
1189
1202
  S: this,
1190
1203
  A: [
@@ -1223,7 +1236,7 @@ var IdentityManager = class {
1223
1236
  identityKey: identityRecord.identityKey,
1224
1237
  displayName: this._identity.profileDocument?.displayName
1225
1238
  }, {
1226
- F: __dxlog_file6,
1239
+ F: __dxlog_file7,
1227
1240
  L: 191,
1228
1241
  S: this,
1229
1242
  C: (f, a) => f(...a)
@@ -1234,7 +1247,7 @@ var IdentityManager = class {
1234
1247
  deviceKey: identity.deviceKey,
1235
1248
  profile: identity.profileDocument
1236
1249
  }, {
1237
- F: __dxlog_file6,
1250
+ F: __dxlog_file7,
1238
1251
  L: 197,
1239
1252
  S: this,
1240
1253
  C: (f, a) => f(...a)
@@ -1271,13 +1284,13 @@ var IdentityManager = class {
1271
1284
  log5("accepting identity", {
1272
1285
  params
1273
1286
  }, {
1274
- F: __dxlog_file6,
1287
+ F: __dxlog_file7,
1275
1288
  L: 235,
1276
1289
  S: this,
1277
1290
  C: (f, a) => f(...a)
1278
1291
  });
1279
1292
  invariant3(!this._identity, "Identity already exists.", {
1280
- F: __dxlog_file6,
1293
+ F: __dxlog_file7,
1281
1294
  L: 236,
1282
1295
  S: this,
1283
1296
  A: [
@@ -1297,7 +1310,10 @@ var IdentityManager = class {
1297
1310
  }
1298
1311
  };
1299
1312
  const identity = await this._constructIdentity(identityRecord);
1300
- await identity.open(new Context3());
1313
+ await identity.open(new Context3(void 0, {
1314
+ F: __dxlog_file7,
1315
+ L: 251
1316
+ }));
1301
1317
  this._identity = identity;
1302
1318
  await this._metadataStore.setIdentityRecord(identityRecord);
1303
1319
  await this._identity.ready();
@@ -1305,7 +1321,7 @@ var IdentityManager = class {
1305
1321
  identityKey: identityRecord.identityKey,
1306
1322
  displayName: this._identity.profileDocument?.displayName
1307
1323
  }, {
1308
- F: __dxlog_file6,
1324
+ F: __dxlog_file7,
1309
1325
  L: 255,
1310
1326
  S: this,
1311
1327
  C: (f, a) => f(...a)
@@ -1319,7 +1335,7 @@ var IdentityManager = class {
1319
1335
  identityKey: identity.identityKey,
1320
1336
  deviceKey: identity.deviceKey
1321
1337
  }, {
1322
- F: __dxlog_file6,
1338
+ F: __dxlog_file7,
1323
1339
  L: 265,
1324
1340
  S: this,
1325
1341
  C: (f, a) => f(...a)
@@ -1331,7 +1347,7 @@ var IdentityManager = class {
1331
1347
  */
1332
1348
  async updateProfile(profile) {
1333
1349
  invariant3(this._identity, "Identity not initialized.", {
1334
- F: __dxlog_file6,
1350
+ F: __dxlog_file7,
1335
1351
  L: 273,
1336
1352
  S: this,
1337
1353
  A: [
@@ -1362,7 +1378,7 @@ var IdentityManager = class {
1362
1378
  }
1363
1379
  async updateDeviceProfile(profile) {
1364
1380
  invariant3(this._identity, "Identity not initialized.", {
1365
- F: __dxlog_file6,
1381
+ F: __dxlog_file7,
1366
1382
  L: 290,
1367
1383
  S: this,
1368
1384
  A: [
@@ -1398,7 +1414,7 @@ var IdentityManager = class {
1398
1414
  }
1399
1415
  async _constructIdentity(identityRecord) {
1400
1416
  invariant3(!this._identity, void 0, {
1401
- F: __dxlog_file6,
1417
+ F: __dxlog_file7,
1402
1418
  L: 316,
1403
1419
  S: this,
1404
1420
  A: [
@@ -1409,7 +1425,7 @@ var IdentityManager = class {
1409
1425
  log5("constructing identity", {
1410
1426
  identityRecord
1411
1427
  }, {
1412
- F: __dxlog_file6,
1428
+ F: __dxlog_file7,
1413
1429
  L: 317,
1414
1430
  S: this,
1415
1431
  C: (f, a) => f(...a)
@@ -1424,7 +1440,7 @@ var IdentityManager = class {
1424
1440
  gossip
1425
1441
  });
1426
1442
  invariant3(identityRecord.haloSpace.controlFeedKey, void 0, {
1427
- F: __dxlog_file6,
1443
+ F: __dxlog_file7,
1428
1444
  L: 330,
1429
1445
  S: this,
1430
1446
  A: [
@@ -1436,7 +1452,7 @@ var IdentityManager = class {
1436
1452
  writable: true
1437
1453
  });
1438
1454
  invariant3(identityRecord.haloSpace.dataFeedKey, void 0, {
1439
- F: __dxlog_file6,
1455
+ F: __dxlog_file7,
1440
1456
  L: 334,
1441
1457
  S: this,
1442
1458
  A: [
@@ -1470,7 +1486,7 @@ var IdentityManager = class {
1470
1486
  log5("done", {
1471
1487
  identityKey: identityRecord.identityKey
1472
1488
  }, {
1473
- F: __dxlog_file6,
1489
+ F: __dxlog_file7,
1474
1490
  L: 360,
1475
1491
  S: this,
1476
1492
  C: (f, a) => f(...a)
@@ -1495,7 +1511,7 @@ var IdentityManager = class {
1495
1511
  },
1496
1512
  onAuthFailure: () => {
1497
1513
  log5.warn("auth failure", void 0, {
1498
- F: __dxlog_file6,
1514
+ F: __dxlog_file7,
1499
1515
  L: 385,
1500
1516
  S: this,
1501
1517
  C: (f, a) => f(...a)
@@ -1519,13 +1535,17 @@ IdentityManager = _ts_decorate3([
1519
1535
  ], IdentityManager);
1520
1536
 
1521
1537
  // packages/sdk/client-services/src/packlets/identity/identity-service.ts
1538
+ import { Trigger as Trigger3, sleep } from "@dxos/async";
1522
1539
  import { Stream as Stream8 } from "@dxos/codec-protobuf";
1523
1540
  import { Resource } from "@dxos/context";
1524
1541
  import { signPresentation } from "@dxos/credentials";
1525
1542
  import { todo } from "@dxos/debug";
1526
1543
  import { invariant as invariant4 } from "@dxos/invariant";
1544
+ import { log as log6 } from "@dxos/log";
1527
1545
  import { SpaceState } from "@dxos/protocols/proto/dxos/client/services";
1528
- var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/identity/identity-service.ts";
1546
+ import { safeAwaitAll } from "@dxos/util";
1547
+ var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/identity/identity-service.ts";
1548
+ var DEFAULT_SPACE_SEARCH_TIMEOUT = 1e4;
1529
1549
  var IdentityServiceImpl = class extends Resource {
1530
1550
  constructor(_identityManager, _keyring, _dataSpaceManagerProvider, _createIdentity, _onProfileUpdate) {
1531
1551
  super();
@@ -1554,8 +1574,8 @@ var IdentityServiceImpl = class extends Resource {
1554
1574
  const space = await dataSpaceManager.createDefaultSpace();
1555
1575
  const identity = this._identityManager.identity;
1556
1576
  invariant4(identity, void 0, {
1557
- F: __dxlog_file7,
1558
- L: 54,
1577
+ F: __dxlog_file8,
1578
+ L: 59,
1559
1579
  S: this,
1560
1580
  A: [
1561
1581
  "identity",
@@ -1588,8 +1608,8 @@ var IdentityServiceImpl = class extends Resource {
1588
1608
  }
1589
1609
  async updateProfile(profile) {
1590
1610
  invariant4(this._identityManager.identity, "Identity not initialized.", {
1591
- F: __dxlog_file7,
1592
- L: 84,
1611
+ F: __dxlog_file8,
1612
+ L: 89,
1593
1613
  S: this,
1594
1614
  A: [
1595
1615
  "this._identityManager.identity",
@@ -1602,8 +1622,8 @@ var IdentityServiceImpl = class extends Resource {
1602
1622
  }
1603
1623
  async signPresentation({ presentation, nonce }) {
1604
1624
  invariant4(this._identityManager.identity, "Identity not initialized.", {
1605
- F: __dxlog_file7,
1606
- L: 91,
1625
+ F: __dxlog_file8,
1626
+ L: 96,
1607
1627
  S: this,
1608
1628
  A: [
1609
1629
  "this._identityManager.identity",
@@ -1619,9 +1639,11 @@ var IdentityServiceImpl = class extends Resource {
1619
1639
  });
1620
1640
  }
1621
1641
  async _fixIdentityWithoutDefaultSpace(identity) {
1622
- let hasDefaultSpace = false;
1642
+ let recodedDefaultSpace = false;
1643
+ let foundDefaultSpace = false;
1623
1644
  const dataSpaceManager = this._dataSpaceManagerProvider();
1624
- for (const space of dataSpaceManager.spaces.values()) {
1645
+ const recordedDefaultSpaceTrigger = new Trigger3();
1646
+ const allProcessed = safeAwaitAll(dataSpaceManager.spaces.values(), async (space) => {
1625
1647
  if (space.state === SpaceState.CLOSED) {
1626
1648
  await space.open();
1627
1649
  const requiresMigration = space.stateUpdate.waitForCondition(() => space.state === SpaceState.REQUIRES_MIGRATION);
@@ -1631,12 +1653,36 @@ var IdentityServiceImpl = class extends Resource {
1631
1653
  ]);
1632
1654
  }
1633
1655
  if (await dataSpaceManager.isDefaultSpace(space)) {
1656
+ if (foundDefaultSpace) {
1657
+ log6.warn("Multiple default spaces found. Using the first one.", {
1658
+ duplicate: space.id
1659
+ }, {
1660
+ F: __dxlog_file8,
1661
+ L: 129,
1662
+ S: this,
1663
+ C: (f, a) => f(...a)
1664
+ });
1665
+ return;
1666
+ }
1667
+ foundDefaultSpace = true;
1634
1668
  await identity.updateDefaultSpace(space.id);
1635
- hasDefaultSpace = true;
1636
- break;
1669
+ recodedDefaultSpace = true;
1670
+ recordedDefaultSpaceTrigger.wake();
1637
1671
  }
1638
- }
1639
- if (!hasDefaultSpace) {
1672
+ }, (err) => {
1673
+ log6.catch(err, void 0, {
1674
+ F: __dxlog_file8,
1675
+ L: 140,
1676
+ S: this,
1677
+ C: (f, a) => f(...a)
1678
+ });
1679
+ });
1680
+ await Promise.race([
1681
+ allProcessed,
1682
+ recordedDefaultSpaceTrigger.wait(),
1683
+ sleep(DEFAULT_SPACE_SEARCH_TIMEOUT)
1684
+ ]);
1685
+ if (!recodedDefaultSpace) {
1640
1686
  await this._createDefaultSpace(dataSpaceManager);
1641
1687
  }
1642
1688
  }
@@ -1646,7 +1692,7 @@ var IdentityServiceImpl = class extends Resource {
1646
1692
  import { invariant as invariant5 } from "@dxos/invariant";
1647
1693
  import { AlreadyJoinedError } from "@dxos/protocols";
1648
1694
  import { Invitation } from "@dxos/protocols/proto/dxos/client/services";
1649
- var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/device-invitation-protocol.ts";
1695
+ var __dxlog_file9 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/device-invitation-protocol.ts";
1650
1696
  var DeviceInvitationProtocol = class {
1651
1697
  constructor(_keyring, _getIdentity, _acceptIdentity) {
1652
1698
  this._keyring = _keyring;
@@ -1672,7 +1718,7 @@ var DeviceInvitationProtocol = class {
1672
1718
  }
1673
1719
  async admit(_, request) {
1674
1720
  invariant5(request.device, void 0, {
1675
- F: __dxlog_file8,
1721
+ F: __dxlog_file9,
1676
1722
  L: 50,
1677
1723
  S: this,
1678
1724
  A: [
@@ -1718,7 +1764,7 @@ var DeviceInvitationProtocol = class {
1718
1764
  }
1719
1765
  async accept(response, request) {
1720
1766
  invariant5(response.device, void 0, {
1721
- F: __dxlog_file8,
1767
+ F: __dxlog_file9,
1722
1768
  L: 95,
1723
1769
  S: this,
1724
1770
  A: [
@@ -1728,7 +1774,7 @@ var DeviceInvitationProtocol = class {
1728
1774
  });
1729
1775
  const { identityKey, haloSpaceKey, genesisFeedKey, controlTimeframe } = response.device;
1730
1776
  invariant5(request.device, void 0, {
1731
- F: __dxlog_file8,
1777
+ F: __dxlog_file9,
1732
1778
  L: 98,
1733
1779
  S: this,
1734
1780
  A: [
@@ -1760,7 +1806,7 @@ import { ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
1760
1806
  import { createKeyPair, sign } from "@dxos/crypto";
1761
1807
  import { invariant as invariant9 } from "@dxos/invariant";
1762
1808
  import { PublicKey as PublicKey7 } from "@dxos/keys";
1763
- import { log as log9 } from "@dxos/log";
1809
+ import { log as log10 } from "@dxos/log";
1764
1810
  import { createTeleportProtocolFactory } from "@dxos/network-manager";
1765
1811
  import { InvalidInvitationExtensionRoleError as InvalidInvitationExtensionRoleError3, trace as trace5 } from "@dxos/protocols";
1766
1812
  import { Invitation as Invitation4 } from "@dxos/protocols/proto/dxos/client/services";
@@ -1769,10 +1815,10 @@ import { Options as Options4 } from "@dxos/protocols/proto/dxos/halo/invitations
1769
1815
  import { ComplexSet as ComplexSet3 } from "@dxos/util";
1770
1816
 
1771
1817
  // packages/sdk/client-services/src/packlets/invitations/invitation-guest-extenstion.ts
1772
- import { Trigger as Trigger3 } from "@dxos/async";
1818
+ import { Trigger as Trigger4 } from "@dxos/async";
1773
1819
  import { cancelWithContext as cancelWithContext2, Context as Context4 } from "@dxos/context";
1774
1820
  import { invariant as invariant6 } from "@dxos/invariant";
1775
- import { log as log6 } from "@dxos/log";
1821
+ import { log as log7 } from "@dxos/log";
1776
1822
  import { InvalidInvitationExtensionRoleError, schema as schema2 } from "@dxos/protocols";
1777
1823
  import { Options } from "@dxos/protocols/proto/dxos/halo/invitations";
1778
1824
  import { RpcExtension } from "@dxos/teleport";
@@ -1797,7 +1843,7 @@ var tryAcquireBeforeContextDisposed = async (ctx, mutex) => {
1797
1843
  };
1798
1844
 
1799
1845
  // packages/sdk/client-services/src/packlets/invitations/invitation-guest-extenstion.ts
1800
- var __dxlog_file9 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/invitation-guest-extenstion.ts";
1846
+ var __dxlog_file10 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/invitation-guest-extenstion.ts";
1801
1847
  var OPTIONS_TIMEOUT = 1e4;
1802
1848
  var InvitationGuestExtension = class extends RpcExtension {
1803
1849
  constructor(_invitationFlowMutex, _callbacks) {
@@ -1811,8 +1857,11 @@ var InvitationGuestExtension = class extends RpcExtension {
1811
1857
  });
1812
1858
  this._invitationFlowMutex = _invitationFlowMutex;
1813
1859
  this._callbacks = _callbacks;
1814
- this._ctx = new Context4();
1815
- this._remoteOptionsTrigger = new Trigger3();
1860
+ this._ctx = new Context4(void 0, {
1861
+ F: __dxlog_file10,
1862
+ L: 33
1863
+ });
1864
+ this._remoteOptionsTrigger = new Trigger4();
1816
1865
  this._invitationFlowLock = null;
1817
1866
  }
1818
1867
  hasFlowLock() {
@@ -1823,7 +1872,7 @@ var InvitationGuestExtension = class extends RpcExtension {
1823
1872
  InvitationHostService: {
1824
1873
  options: async (options) => {
1825
1874
  invariant6(!this._remoteOptions, "Remote options already set.", {
1826
- F: __dxlog_file9,
1875
+ F: __dxlog_file10,
1827
1876
  L: 63,
1828
1877
  S: this,
1829
1878
  A: [
@@ -1849,15 +1898,15 @@ var InvitationGuestExtension = class extends RpcExtension {
1849
1898
  async onOpen(context) {
1850
1899
  await super.onOpen(context);
1851
1900
  try {
1852
- log6("guest acquire lock", void 0, {
1853
- F: __dxlog_file9,
1901
+ log7("guest acquire lock", void 0, {
1902
+ F: __dxlog_file10,
1854
1903
  L: 84,
1855
1904
  S: this,
1856
1905
  C: (f, a) => f(...a)
1857
1906
  });
1858
1907
  this._invitationFlowLock = await tryAcquireBeforeContextDisposed(this._ctx, this._invitationFlowMutex);
1859
- log6("guest lock acquired", void 0, {
1860
- F: __dxlog_file9,
1908
+ log7("guest lock acquired", void 0, {
1909
+ F: __dxlog_file10,
1861
1910
  L: 86,
1862
1911
  S: this,
1863
1912
  C: (f, a) => f(...a)
@@ -1865,8 +1914,8 @@ var InvitationGuestExtension = class extends RpcExtension {
1865
1914
  await cancelWithContext2(this._ctx, this.rpc.InvitationHostService.options({
1866
1915
  role: Options.Role.GUEST
1867
1916
  }));
1868
- log6("options sent", void 0, {
1869
- F: __dxlog_file9,
1917
+ log7("options sent", void 0, {
1918
+ F: __dxlog_file10,
1870
1919
  L: 88,
1871
1920
  S: this,
1872
1921
  C: (f, a) => f(...a)
@@ -1874,8 +1923,8 @@ var InvitationGuestExtension = class extends RpcExtension {
1874
1923
  await cancelWithContext2(this._ctx, this._remoteOptionsTrigger.wait({
1875
1924
  timeout: OPTIONS_TIMEOUT
1876
1925
  }));
1877
- log6("options received", void 0, {
1878
- F: __dxlog_file9,
1926
+ log7("options received", void 0, {
1927
+ F: __dxlog_file10,
1879
1928
  L: 90,
1880
1929
  S: this,
1881
1930
  C: (f, a) => f(...a)
@@ -1908,8 +1957,8 @@ var InvitationGuestExtension = class extends RpcExtension {
1908
1957
  if (this._invitationFlowLock != null) {
1909
1958
  this._invitationFlowLock.release();
1910
1959
  this._invitationFlowLock = null;
1911
- log6("invitation flow lock released", void 0, {
1912
- F: __dxlog_file9,
1960
+ log7("invitation flow lock released", void 0, {
1961
+ F: __dxlog_file10,
1913
1962
  L: 123,
1914
1963
  S: this,
1915
1964
  C: (f, a) => f(...a)
@@ -1919,17 +1968,17 @@ var InvitationGuestExtension = class extends RpcExtension {
1919
1968
  };
1920
1969
 
1921
1970
  // packages/sdk/client-services/src/packlets/invitations/invitation-host-extension.ts
1922
- import { Trigger as Trigger4, scheduleTask as scheduleTask2 } from "@dxos/async";
1971
+ import { Trigger as Trigger5, scheduleTask as scheduleTask2 } from "@dxos/async";
1923
1972
  import { cancelWithContext as cancelWithContext3, Context as Context5 } from "@dxos/context";
1924
1973
  import { randomBytes, verify } from "@dxos/crypto";
1925
1974
  import { invariant as invariant7, InvariantViolation } from "@dxos/invariant";
1926
1975
  import { PublicKey as PublicKey5 } from "@dxos/keys";
1927
- import { log as log7 } from "@dxos/log";
1976
+ import { log as log8 } from "@dxos/log";
1928
1977
  import { InvalidInvitationExtensionRoleError as InvalidInvitationExtensionRoleError2, schema as schema3, trace as trace4 } from "@dxos/protocols";
1929
1978
  import { Invitation as Invitation3 } from "@dxos/protocols/proto/dxos/client/services";
1930
1979
  import { AuthenticationResponse, Options as Options2 } from "@dxos/protocols/proto/dxos/halo/invitations";
1931
1980
  import { RpcExtension as RpcExtension2 } from "@dxos/teleport";
1932
- var __dxlog_file10 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/invitation-host-extension.ts";
1981
+ var __dxlog_file11 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/invitation-host-extension.ts";
1933
1982
  var OPTIONS_TIMEOUT2 = 1e4;
1934
1983
  var MAX_OTP_ATTEMPTS = 3;
1935
1984
  var InvitationHostExtension = class extends RpcExtension2 {
@@ -1944,13 +1993,16 @@ var InvitationHostExtension = class extends RpcExtension2 {
1944
1993
  });
1945
1994
  this._invitationFlowMutex = _invitationFlowMutex;
1946
1995
  this._callbacks = _callbacks;
1947
- this._ctx = new Context5();
1948
- this._remoteOptionsTrigger = new Trigger4();
1996
+ this._ctx = new Context5(void 0, {
1997
+ F: __dxlog_file11,
1998
+ L: 52
1999
+ });
2000
+ this._remoteOptionsTrigger = new Trigger5();
1949
2001
  this._challenge = void 0;
1950
2002
  this.guestProfile = void 0;
1951
2003
  this.authenticationPassed = false;
1952
2004
  this.authenticationRetry = 0;
1953
- this.completedTrigger = new Trigger4();
2005
+ this.completedTrigger = new Trigger5();
1954
2006
  this._invitationFlowLock = null;
1955
2007
  }
1956
2008
  hasFlowLock() {
@@ -1963,7 +2015,7 @@ var InvitationHostExtension = class extends RpcExtension2 {
1963
2015
  InvitationHostService: {
1964
2016
  options: async (options) => {
1965
2017
  invariant7(!this._remoteOptions, "Remote options already set.", {
1966
- F: __dxlog_file10,
2018
+ F: __dxlog_file11,
1967
2019
  L: 101,
1968
2020
  S: this,
1969
2021
  A: [
@@ -1977,10 +2029,10 @@ var InvitationHostExtension = class extends RpcExtension2 {
1977
2029
  introduce: async (request) => {
1978
2030
  const { profile, invitationId } = request;
1979
2031
  const traceId = PublicKey5.random().toHex();
1980
- log7.trace("dxos.sdk.invitation-handler.host.introduce", trace4.begin({
2032
+ log8.trace("dxos.sdk.invitation-handler.host.introduce", trace4.begin({
1981
2033
  id: traceId
1982
2034
  }), {
1983
- F: __dxlog_file10,
2035
+ F: __dxlog_file11,
1984
2036
  L: 110,
1985
2037
  S: this,
1986
2038
  C: (f, a) => f(...a)
@@ -1988,11 +2040,11 @@ var InvitationHostExtension = class extends RpcExtension2 {
1988
2040
  const invitation = this._requireActiveInvitation();
1989
2041
  this._assertInvitationState(Invitation3.State.CONNECTED);
1990
2042
  if (invitationId !== invitation?.invitationId) {
1991
- log7.warn("incorrect invitationId", {
2043
+ log8.warn("incorrect invitationId", {
1992
2044
  expected: invitation.invitationId,
1993
2045
  actual: invitationId
1994
2046
  }, {
1995
- F: __dxlog_file10,
2047
+ F: __dxlog_file11,
1996
2048
  L: 116,
1997
2049
  S: this,
1998
2050
  C: (f, a) => f(...a)
@@ -2003,10 +2055,10 @@ var InvitationHostExtension = class extends RpcExtension2 {
2003
2055
  authMethod: Invitation3.AuthMethod.NONE
2004
2056
  };
2005
2057
  }
2006
- log7("guest introduced themselves", {
2058
+ log8("guest introduced themselves", {
2007
2059
  guestProfile: profile
2008
2060
  }, {
2009
- F: __dxlog_file10,
2061
+ F: __dxlog_file11,
2010
2062
  L: 125,
2011
2063
  S: this,
2012
2064
  C: (f, a) => f(...a)
@@ -2014,10 +2066,10 @@ var InvitationHostExtension = class extends RpcExtension2 {
2014
2066
  this.guestProfile = profile;
2015
2067
  this._callbacks.onStateUpdate(Invitation3.State.READY_FOR_AUTHENTICATION);
2016
2068
  this._challenge = invitation.authMethod === Invitation3.AuthMethod.KNOWN_PUBLIC_KEY ? randomBytes(32) : void 0;
2017
- log7.trace("dxos.sdk.invitation-handler.host.introduce", trace4.end({
2069
+ log8.trace("dxos.sdk.invitation-handler.host.introduce", trace4.end({
2018
2070
  id: traceId
2019
2071
  }), {
2020
- F: __dxlog_file10,
2072
+ F: __dxlog_file11,
2021
2073
  L: 132,
2022
2074
  S: this,
2023
2075
  C: (f, a) => f(...a)
@@ -2029,19 +2081,19 @@ var InvitationHostExtension = class extends RpcExtension2 {
2029
2081
  },
2030
2082
  authenticate: async ({ authCode: code, signedChallenge }) => {
2031
2083
  const traceId = PublicKey5.random().toHex();
2032
- log7.trace("dxos.sdk.invitation-handler.host.authenticate", trace4.begin({
2084
+ log8.trace("dxos.sdk.invitation-handler.host.authenticate", trace4.begin({
2033
2085
  id: traceId
2034
2086
  }), {
2035
- F: __dxlog_file10,
2087
+ F: __dxlog_file11,
2036
2088
  L: 141,
2037
2089
  S: this,
2038
2090
  C: (f, a) => f(...a)
2039
2091
  });
2040
2092
  const invitation = this._requireActiveInvitation();
2041
- log7("received authentication request", {
2093
+ log8("received authentication request", {
2042
2094
  authCode: code
2043
2095
  }, {
2044
- F: __dxlog_file10,
2096
+ F: __dxlog_file11,
2045
2097
  L: 144,
2046
2098
  S: this,
2047
2099
  C: (f, a) => f(...a)
@@ -2054,8 +2106,8 @@ var InvitationHostExtension = class extends RpcExtension2 {
2054
2106
  this._callbacks.onStateUpdate(Invitation3.State.AUTHENTICATING);
2055
2107
  switch (invitation.authMethod) {
2056
2108
  case Invitation3.AuthMethod.NONE: {
2057
- log7("authentication not required", void 0, {
2058
- F: __dxlog_file10,
2109
+ log8("authentication not required", void 0, {
2110
+ F: __dxlog_file11,
2059
2111
  L: 152,
2060
2112
  S: this,
2061
2113
  C: (f, a) => f(...a)
@@ -2090,10 +2142,10 @@ var InvitationHostExtension = class extends RpcExtension2 {
2090
2142
  break;
2091
2143
  }
2092
2144
  default: {
2093
- log7.error("invalid authentication method", {
2145
+ log8.error("invalid authentication method", {
2094
2146
  authMethod: invitation.authMethod
2095
2147
  }, {
2096
- F: __dxlog_file10,
2148
+ F: __dxlog_file11,
2097
2149
  L: 190,
2098
2150
  S: this,
2099
2151
  C: (f, a) => f(...a)
@@ -2112,13 +2164,13 @@ var InvitationHostExtension = class extends RpcExtension2 {
2112
2164
  status
2113
2165
  };
2114
2166
  }
2115
- log7.trace("dxos.sdk.invitation-handler.host.authenticate", trace4.end({
2167
+ log8.trace("dxos.sdk.invitation-handler.host.authenticate", trace4.end({
2116
2168
  id: traceId,
2117
2169
  data: {
2118
2170
  status
2119
2171
  }
2120
2172
  }), {
2121
- F: __dxlog_file10,
2173
+ F: __dxlog_file11,
2122
2174
  L: 202,
2123
2175
  S: this,
2124
2176
  C: (f, a) => f(...a)
@@ -2129,10 +2181,10 @@ var InvitationHostExtension = class extends RpcExtension2 {
2129
2181
  },
2130
2182
  admit: async (request) => {
2131
2183
  const traceId = PublicKey5.random().toHex();
2132
- log7.trace("dxos.sdk.invitation-handler.host.admit", trace4.begin({
2184
+ log8.trace("dxos.sdk.invitation-handler.host.admit", trace4.begin({
2133
2185
  id: traceId
2134
2186
  }), {
2135
- F: __dxlog_file10,
2187
+ F: __dxlog_file11,
2136
2188
  L: 208,
2137
2189
  S: this,
2138
2190
  C: (f, a) => f(...a)
@@ -2146,10 +2198,10 @@ var InvitationHostExtension = class extends RpcExtension2 {
2146
2198
  }
2147
2199
  }
2148
2200
  const response = await this._callbacks.admit(request);
2149
- log7.trace("dxos.sdk.invitation-handler.host.admit", trace4.end({
2201
+ log8.trace("dxos.sdk.invitation-handler.host.admit", trace4.end({
2150
2202
  id: traceId
2151
2203
  }), {
2152
- F: __dxlog_file10,
2204
+ F: __dxlog_file11,
2153
2205
  L: 222,
2154
2206
  S: this,
2155
2207
  C: (f, a) => f(...a)
@@ -2166,15 +2218,15 @@ var InvitationHostExtension = class extends RpcExtension2 {
2166
2218
  async onOpen(context) {
2167
2219
  await super.onOpen(context);
2168
2220
  try {
2169
- log7("host acquire lock", void 0, {
2170
- F: __dxlog_file10,
2221
+ log8("host acquire lock", void 0, {
2222
+ F: __dxlog_file11,
2171
2223
  L: 237,
2172
2224
  S: this,
2173
2225
  C: (f, a) => f(...a)
2174
2226
  });
2175
2227
  this._invitationFlowLock = await tryAcquireBeforeContextDisposed(this._ctx, this._invitationFlowMutex);
2176
- log7("host lock acquired", void 0, {
2177
- F: __dxlog_file10,
2228
+ log8("host lock acquired", void 0, {
2229
+ F: __dxlog_file11,
2178
2230
  L: 239,
2179
2231
  S: this,
2180
2232
  C: (f, a) => f(...a)
@@ -2184,8 +2236,8 @@ var InvitationHostExtension = class extends RpcExtension2 {
2184
2236
  await this.rpc.InvitationHostService.options({
2185
2237
  role: Options2.Role.HOST
2186
2238
  });
2187
- log7("options sent", void 0, {
2188
- F: __dxlog_file10,
2239
+ log8("options sent", void 0, {
2240
+ F: __dxlog_file11,
2189
2241
  L: 243,
2190
2242
  S: this,
2191
2243
  C: (f, a) => f(...a)
@@ -2193,8 +2245,8 @@ var InvitationHostExtension = class extends RpcExtension2 {
2193
2245
  await cancelWithContext3(this._ctx, this._remoteOptionsTrigger.wait({
2194
2246
  timeout: OPTIONS_TIMEOUT2
2195
2247
  }));
2196
- log7("options received", void 0, {
2197
- F: __dxlog_file10,
2248
+ log8("options received", void 0, {
2249
+ F: __dxlog_file11,
2198
2250
  L: 245,
2199
2251
  S: this,
2200
2252
  C: (f, a) => f(...a)
@@ -2247,8 +2299,8 @@ var InvitationHostExtension = class extends RpcExtension2 {
2247
2299
  if (this._invitationFlowLock != null) {
2248
2300
  this._invitationFlowLock?.release();
2249
2301
  this._invitationFlowLock = null;
2250
- log7("invitation flow lock released", void 0, {
2251
- F: __dxlog_file10,
2302
+ log8("invitation flow lock released", void 0, {
2303
+ F: __dxlog_file11,
2252
2304
  L: 300,
2253
2305
  S: this,
2254
2306
  C: (f, a) => f(...a)
@@ -2261,10 +2313,10 @@ var isAuthenticationRequired = (invitation) => invitation.authMethod !== Invitat
2261
2313
  // packages/sdk/client-services/src/packlets/invitations/invitation-topology.ts
2262
2314
  import { invariant as invariant8 } from "@dxos/invariant";
2263
2315
  import { PublicKey as PublicKey6 } from "@dxos/keys";
2264
- import { log as log8 } from "@dxos/log";
2316
+ import { log as log9 } from "@dxos/log";
2265
2317
  import { Options as Options3 } from "@dxos/protocols/proto/dxos/halo/invitations";
2266
2318
  import { ComplexSet as ComplexSet2 } from "@dxos/util";
2267
- var __dxlog_file11 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/invitation-topology.ts";
2319
+ var __dxlog_file12 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/invitation-topology.ts";
2268
2320
  var InvitationTopology = class {
2269
2321
  constructor(_role) {
2270
2322
  this._role = _role;
@@ -2272,7 +2324,7 @@ var InvitationTopology = class {
2272
2324
  }
2273
2325
  init(controller) {
2274
2326
  invariant8(!this._controller, "Already initialized.", {
2275
- F: __dxlog_file11,
2327
+ F: __dxlog_file12,
2276
2328
  L: 42,
2277
2329
  S: this,
2278
2330
  A: [
@@ -2284,7 +2336,7 @@ var InvitationTopology = class {
2284
2336
  }
2285
2337
  update() {
2286
2338
  invariant8(this._controller, "Not initialized.", {
2287
- F: __dxlog_file11,
2339
+ F: __dxlog_file12,
2288
2340
  L: 47,
2289
2341
  S: this,
2290
2342
  A: [
@@ -2303,11 +2355,11 @@ var InvitationTopology = class {
2303
2355
  const firstUnknownPeer = candidates.find((peerId) => !this._seenPeers.has(peerId));
2304
2356
  this._seenPeers = new ComplexSet2(PublicKey6.hash, allPeers.filter((peerId) => this._seenPeers.has(peerId)));
2305
2357
  if (firstUnknownPeer != null) {
2306
- log8("invitation connect", {
2358
+ log9("invitation connect", {
2307
2359
  ownPeerId,
2308
2360
  remotePeerId: firstUnknownPeer
2309
2361
  }, {
2310
- F: __dxlog_file11,
2362
+ F: __dxlog_file12,
2311
2363
  L: 69,
2312
2364
  S: this,
2313
2365
  C: (f, a) => f(...a)
@@ -2318,7 +2370,7 @@ var InvitationTopology = class {
2318
2370
  }
2319
2371
  async onOffer(peer) {
2320
2372
  invariant8(this._controller, "Not initialized.", {
2321
- F: __dxlog_file11,
2373
+ F: __dxlog_file12,
2322
2374
  L: 76,
2323
2375
  S: this,
2324
2376
  A: [
@@ -2337,7 +2389,7 @@ var InvitationTopology = class {
2337
2389
  };
2338
2390
 
2339
2391
  // packages/sdk/client-services/src/packlets/invitations/invitations-handler.ts
2340
- var __dxlog_file12 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/invitations-handler.ts";
2392
+ var __dxlog_file13 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/invitations-handler.ts";
2341
2393
  var MAX_DELEGATED_INVITATION_HOST_TRIES = 3;
2342
2394
  var InvitationsHandler = class {
2343
2395
  /**
@@ -2362,7 +2414,7 @@ var InvitationsHandler = class {
2362
2414
  try {
2363
2415
  const deviceKey = admissionRequest.device?.deviceKey ?? admissionRequest.space?.deviceKey;
2364
2416
  invariant9(deviceKey, void 0, {
2365
- F: __dxlog_file12,
2417
+ F: __dxlog_file13,
2366
2418
  L: 90,
2367
2419
  S: this,
2368
2420
  A: [
@@ -2388,18 +2440,18 @@ var InvitationsHandler = class {
2388
2440
  scheduleTask3(connectionCtx, async () => {
2389
2441
  const traceId = PublicKey7.random().toHex();
2390
2442
  try {
2391
- log9.trace("dxos.sdk.invitations-handler.host.onOpen", trace5.begin({
2443
+ log10.trace("dxos.sdk.invitations-handler.host.onOpen", trace5.begin({
2392
2444
  id: traceId
2393
2445
  }), {
2394
- F: __dxlog_file12,
2446
+ F: __dxlog_file13,
2395
2447
  L: 115,
2396
2448
  S: this,
2397
2449
  C: (f, a) => f(...a)
2398
2450
  });
2399
- log9("connected", {
2451
+ log10("connected", {
2400
2452
  ...protocol.toJSON()
2401
2453
  }, {
2402
- F: __dxlog_file12,
2454
+ F: __dxlog_file13,
2403
2455
  L: 116,
2404
2456
  S: this,
2405
2457
  C: (f, a) => f(...a)
@@ -2407,20 +2459,20 @@ var InvitationsHandler = class {
2407
2459
  const deviceKey = await extension.completedTrigger.wait({
2408
2460
  timeout: invitation.timeout
2409
2461
  });
2410
- log9("admitted guest", {
2462
+ log10("admitted guest", {
2411
2463
  guest: deviceKey,
2412
2464
  ...protocol.toJSON()
2413
2465
  }, {
2414
- F: __dxlog_file12,
2466
+ F: __dxlog_file13,
2415
2467
  L: 118,
2416
2468
  S: this,
2417
2469
  C: (f, a) => f(...a)
2418
2470
  });
2419
2471
  guardedState.set(extension, Invitation4.State.SUCCESS);
2420
- log9.trace("dxos.sdk.invitations-handler.host.onOpen", trace5.end({
2472
+ log10.trace("dxos.sdk.invitations-handler.host.onOpen", trace5.end({
2421
2473
  id: traceId
2422
2474
  }), {
2423
- F: __dxlog_file12,
2475
+ F: __dxlog_file13,
2424
2476
  L: 120,
2425
2477
  S: this,
2426
2478
  C: (f, a) => f(...a)
@@ -2432,10 +2484,10 @@ var InvitationsHandler = class {
2432
2484
  } catch (err) {
2433
2485
  if (err instanceof TimeoutError) {
2434
2486
  if (guardedState.set(extension, Invitation4.State.TIMEOUT)) {
2435
- log9("timeout", {
2487
+ log10("timeout", {
2436
2488
  ...protocol.toJSON()
2437
2489
  }, {
2438
- F: __dxlog_file12,
2490
+ F: __dxlog_file13,
2439
2491
  L: 129,
2440
2492
  S: this,
2441
2493
  C: (f, a) => f(...a)
@@ -2443,19 +2495,19 @@ var InvitationsHandler = class {
2443
2495
  }
2444
2496
  } else {
2445
2497
  if (guardedState.error(extension, err)) {
2446
- log9.error("failed", err, {
2447
- F: __dxlog_file12,
2498
+ log10.error("failed", err, {
2499
+ F: __dxlog_file13,
2448
2500
  L: 133,
2449
2501
  S: this,
2450
2502
  C: (f, a) => f(...a)
2451
2503
  });
2452
2504
  }
2453
2505
  }
2454
- log9.trace("dxos.sdk.invitations-handler.host.onOpen", trace5.error({
2506
+ log10.trace("dxos.sdk.invitations-handler.host.onOpen", trace5.error({
2455
2507
  id: traceId,
2456
2508
  error: err
2457
2509
  }), {
2458
- F: __dxlog_file12,
2510
+ F: __dxlog_file13,
2459
2511
  L: 136,
2460
2512
  S: this,
2461
2513
  C: (f, a) => f(...a)
@@ -2466,10 +2518,10 @@ var InvitationsHandler = class {
2466
2518
  },
2467
2519
  onError: (err) => {
2468
2520
  if (err instanceof InvalidInvitationExtensionRoleError3) {
2469
- log9("invalid role", {
2521
+ log10("invalid role", {
2470
2522
  ...err.context
2471
2523
  }, {
2472
- F: __dxlog_file12,
2524
+ F: __dxlog_file13,
2473
2525
  L: 144,
2474
2526
  S: this,
2475
2527
  C: (f, a) => f(...a)
@@ -2478,10 +2530,10 @@ var InvitationsHandler = class {
2478
2530
  }
2479
2531
  if (err instanceof TimeoutError) {
2480
2532
  if (guardedState.set(extension, Invitation4.State.TIMEOUT)) {
2481
- log9("timeout", {
2533
+ log10("timeout", {
2482
2534
  err
2483
2535
  }, {
2484
- F: __dxlog_file12,
2536
+ F: __dxlog_file13,
2485
2537
  L: 149,
2486
2538
  S: this,
2487
2539
  C: (f, a) => f(...a)
@@ -2489,8 +2541,8 @@ var InvitationsHandler = class {
2489
2541
  }
2490
2542
  } else {
2491
2543
  if (guardedState.error(extension, err)) {
2492
- log9.error("failed", err, {
2493
- F: __dxlog_file12,
2544
+ log10.error("failed", err, {
2545
+ F: __dxlog_file13,
2494
2546
  L: 153,
2495
2547
  S: this,
2496
2548
  C: (f, a) => f(...a)
@@ -2503,8 +2555,8 @@ var InvitationsHandler = class {
2503
2555
  };
2504
2556
  if (invitation.lifetime && invitation.created) {
2505
2557
  if (invitation.created.getTime() + invitation.lifetime * 1e3 < Date.now()) {
2506
- log9.warn("invitation has already expired", void 0, {
2507
- F: __dxlog_file12,
2558
+ log10.warn("invitation has already expired", void 0, {
2559
+ F: __dxlog_file13,
2508
2560
  L: 164,
2509
2561
  S: this,
2510
2562
  C: (f, a) => f(...a)
@@ -2527,7 +2579,7 @@ var InvitationsHandler = class {
2527
2579
  const { timeout = INVITATION_TIMEOUT } = invitation;
2528
2580
  if (deviceProfile) {
2529
2581
  invariant9(invitation.kind === Invitation4.Kind.DEVICE, "deviceProfile provided for non-device invitation", {
2530
- F: __dxlog_file12,
2582
+ F: __dxlog_file13,
2531
2583
  L: 197,
2532
2584
  S: this,
2533
2585
  A: [
@@ -2540,12 +2592,12 @@ var InvitationsHandler = class {
2540
2592
  const guardedState = this._createGuardedState(ctx, invitation, stream);
2541
2593
  const shouldCancelInvitationFlow = (extension) => {
2542
2594
  const isLockedByAnotherConnection = guardedState.mutex.isLocked() && !extension.hasFlowLock();
2543
- log9("should cancel invitation flow", {
2595
+ log10("should cancel invitation flow", {
2544
2596
  isLockedByAnotherConnection,
2545
2597
  invitationType: Invitation4.Type.DELEGATED,
2546
2598
  triedPeers: triedPeersIds.size
2547
2599
  }, {
2548
- F: __dxlog_file12,
2600
+ F: __dxlog_file13,
2549
2601
  L: 205,
2550
2602
  S: this,
2551
2603
  C: (f, a) => f(...a)
@@ -2568,11 +2620,11 @@ var InvitationsHandler = class {
2568
2620
  return;
2569
2621
  }
2570
2622
  connectionCtx.onDispose(async () => {
2571
- log9("extension disposed", {
2623
+ log10("extension disposed", {
2572
2624
  admitted,
2573
2625
  currentState: guardedState.current.state
2574
2626
  }, {
2575
- F: __dxlog_file12,
2627
+ F: __dxlog_file13,
2576
2628
  L: 233,
2577
2629
  S: this,
2578
2630
  C: (f, a) => f(...a)
@@ -2587,10 +2639,10 @@ var InvitationsHandler = class {
2587
2639
  scheduleTask3(connectionCtx, async () => {
2588
2640
  const traceId = PublicKey7.random().toHex();
2589
2641
  try {
2590
- log9.trace("dxos.sdk.invitations-handler.guest.onOpen", trace5.begin({
2642
+ log10.trace("dxos.sdk.invitations-handler.guest.onOpen", trace5.begin({
2591
2643
  id: traceId
2592
2644
  }), {
2593
- F: __dxlog_file12,
2645
+ F: __dxlog_file13,
2594
2646
  L: 245,
2595
2647
  S: this,
2596
2648
  C: (f, a) => f(...a)
@@ -2599,19 +2651,19 @@ var InvitationsHandler = class {
2599
2651
  guardedState.set(extension, Invitation4.State.TIMEOUT);
2600
2652
  extensionCtx.close();
2601
2653
  }, timeout);
2602
- log9("connected", {
2654
+ log10("connected", {
2603
2655
  ...protocol.toJSON()
2604
2656
  }, {
2605
- F: __dxlog_file12,
2657
+ F: __dxlog_file13,
2606
2658
  L: 256,
2607
2659
  S: this,
2608
2660
  C: (f, a) => f(...a)
2609
2661
  });
2610
2662
  guardedState.set(extension, Invitation4.State.CONNECTED);
2611
- log9("introduce", {
2663
+ log10("introduce", {
2612
2664
  ...protocol.toJSON()
2613
2665
  }, {
2614
- F: __dxlog_file12,
2666
+ F: __dxlog_file13,
2615
2667
  L: 260,
2616
2668
  S: this,
2617
2669
  C: (f, a) => f(...a)
@@ -2620,11 +2672,11 @@ var InvitationsHandler = class {
2620
2672
  invitationId: invitation.invitationId,
2621
2673
  ...protocol.createIntroduction()
2622
2674
  });
2623
- log9("introduce response", {
2675
+ log10("introduce response", {
2624
2676
  ...protocol.toJSON(),
2625
2677
  response: introductionResponse
2626
2678
  }, {
2627
- F: __dxlog_file12,
2679
+ F: __dxlog_file13,
2628
2680
  L: 265,
2629
2681
  S: this,
2630
2682
  C: (f, a) => f(...a)
@@ -2642,10 +2694,10 @@ var InvitationsHandler = class {
2642
2694
  break;
2643
2695
  }
2644
2696
  }
2645
- log9("request admission", {
2697
+ log10("request admission", {
2646
2698
  ...protocol.toJSON()
2647
2699
  }, {
2648
- F: __dxlog_file12,
2700
+ F: __dxlog_file13,
2649
2701
  L: 291,
2650
2702
  S: this,
2651
2703
  C: (f, a) => f(...a)
@@ -2654,10 +2706,10 @@ var InvitationsHandler = class {
2654
2706
  const admissionResponse = await extension.rpc.InvitationHostService.admit(admissionRequest);
2655
2707
  admitted = true;
2656
2708
  const result = await protocol.accept(admissionResponse, admissionRequest);
2657
- log9("admitted by host", {
2709
+ log10("admitted by host", {
2658
2710
  ...protocol.toJSON()
2659
2711
  }, {
2660
- F: __dxlog_file12,
2712
+ F: __dxlog_file13,
2661
2713
  L: 302,
2662
2714
  S: this,
2663
2715
  C: (f, a) => f(...a)
@@ -2667,28 +2719,28 @@ var InvitationsHandler = class {
2667
2719
  ...result,
2668
2720
  state: Invitation4.State.SUCCESS
2669
2721
  });
2670
- log9.trace("dxos.sdk.invitations-handler.guest.onOpen", trace5.end({
2722
+ log10.trace("dxos.sdk.invitations-handler.guest.onOpen", trace5.end({
2671
2723
  id: traceId
2672
2724
  }), {
2673
- F: __dxlog_file12,
2725
+ F: __dxlog_file13,
2674
2726
  L: 308,
2675
2727
  S: this,
2676
2728
  C: (f, a) => f(...a)
2677
2729
  });
2678
2730
  } catch (err) {
2679
2731
  if (err instanceof TimeoutError) {
2680
- log9("timeout", {
2732
+ log10("timeout", {
2681
2733
  ...protocol.toJSON()
2682
2734
  }, {
2683
- F: __dxlog_file12,
2735
+ F: __dxlog_file13,
2684
2736
  L: 311,
2685
2737
  S: this,
2686
2738
  C: (f, a) => f(...a)
2687
2739
  });
2688
2740
  guardedState.set(extension, Invitation4.State.TIMEOUT);
2689
2741
  } else {
2690
- log9("auth failed", err, {
2691
- F: __dxlog_file12,
2742
+ log10("auth failed", err, {
2743
+ F: __dxlog_file13,
2692
2744
  L: 314,
2693
2745
  S: this,
2694
2746
  C: (f, a) => f(...a)
@@ -2696,11 +2748,11 @@ var InvitationsHandler = class {
2696
2748
  guardedState.error(extension, err);
2697
2749
  }
2698
2750
  extensionCtx.close(err);
2699
- log9.trace("dxos.sdk.invitations-handler.guest.onOpen", trace5.error({
2751
+ log10.trace("dxos.sdk.invitations-handler.guest.onOpen", trace5.error({
2700
2752
  id: traceId,
2701
2753
  error: err
2702
2754
  }), {
2703
- F: __dxlog_file12,
2755
+ F: __dxlog_file13,
2704
2756
  L: 318,
2705
2757
  S: this,
2706
2758
  C: (f, a) => f(...a)
@@ -2713,18 +2765,18 @@ var InvitationsHandler = class {
2713
2765
  return;
2714
2766
  }
2715
2767
  if (err instanceof TimeoutError) {
2716
- log9("timeout", {
2768
+ log10("timeout", {
2717
2769
  ...protocol.toJSON()
2718
2770
  }, {
2719
- F: __dxlog_file12,
2771
+ F: __dxlog_file13,
2720
2772
  L: 327,
2721
2773
  S: this,
2722
2774
  C: (f, a) => f(...a)
2723
2775
  });
2724
2776
  guardedState.set(extension, Invitation4.State.TIMEOUT);
2725
2777
  } else {
2726
- log9("auth failed", err, {
2727
- F: __dxlog_file12,
2778
+ log10("auth failed", err, {
2779
+ F: __dxlog_file13,
2728
2780
  L: 330,
2729
2781
  S: this,
2730
2782
  C: (f, a) => f(...a)
@@ -2742,7 +2794,7 @@ var InvitationsHandler = class {
2742
2794
  await ctx.dispose();
2743
2795
  } else {
2744
2796
  invariant9(invitation.swarmKey, void 0, {
2745
- F: __dxlog_file12,
2797
+ F: __dxlog_file13,
2746
2798
  L: 345,
2747
2799
  S: this,
2748
2800
  A: [
@@ -2836,16 +2888,29 @@ var InvitationsHandler = class {
2836
2888
  };
2837
2889
  }
2838
2890
  _logStateUpdate(invitation, actor, newState) {
2839
- log9("invitation state update", {
2840
- actor: actor?.constructor.name,
2841
- newState: stateToString(newState),
2842
- oldState: stateToString(invitation.state)
2843
- }, {
2844
- F: __dxlog_file12,
2845
- L: 438,
2846
- S: this,
2847
- C: (f, a) => f(...a)
2848
- });
2891
+ if (this._isNotTerminal(newState)) {
2892
+ log10("invitation state update", {
2893
+ actor: actor?.constructor.name,
2894
+ newState: stateToString(newState),
2895
+ oldState: stateToString(invitation.state)
2896
+ }, {
2897
+ F: __dxlog_file13,
2898
+ L: 439,
2899
+ S: this,
2900
+ C: (f, a) => f(...a)
2901
+ });
2902
+ } else {
2903
+ log10.info("invitation state update", {
2904
+ actor: actor?.constructor.name,
2905
+ newState: stateToString(newState),
2906
+ oldState: stateToString(invitation.state)
2907
+ }, {
2908
+ F: __dxlog_file13,
2909
+ L: 445,
2910
+ S: this,
2911
+ C: (f, a) => f(...a)
2912
+ });
2913
+ }
2849
2914
  }
2850
2915
  _isNotTerminal(currentState) {
2851
2916
  return ![
@@ -2858,17 +2923,17 @@ var InvitationsHandler = class {
2858
2923
  }
2859
2924
  async _handleGuestOtpAuth(extension, setState, authenticated, options) {
2860
2925
  for (let attempt = 1; attempt <= MAX_OTP_ATTEMPTS; attempt++) {
2861
- log9("guest waiting for authentication code...", void 0, {
2862
- F: __dxlog_file12,
2863
- L: 462,
2926
+ log10("guest waiting for authentication code...", void 0, {
2927
+ F: __dxlog_file13,
2928
+ L: 470,
2864
2929
  S: this,
2865
2930
  C: (f, a) => f(...a)
2866
2931
  });
2867
2932
  setState(Invitation4.State.READY_FOR_AUTHENTICATION);
2868
2933
  const authCode = await authenticated.wait(options);
2869
- log9("sending authentication request", void 0, {
2870
- F: __dxlog_file12,
2871
- L: 466,
2934
+ log10("sending authentication request", void 0, {
2935
+ F: __dxlog_file13,
2936
+ L: 474,
2872
2937
  S: this,
2873
2938
  C: (f, a) => f(...a)
2874
2939
  });
@@ -2883,11 +2948,11 @@ var InvitationsHandler = class {
2883
2948
  if (attempt === MAX_OTP_ATTEMPTS) {
2884
2949
  throw new Error(`Maximum retry attempts: ${MAX_OTP_ATTEMPTS}`);
2885
2950
  } else {
2886
- log9("retrying invalid code", {
2951
+ log10("retrying invalid code", {
2887
2952
  attempt
2888
2953
  }, {
2889
- F: __dxlog_file12,
2890
- L: 477,
2954
+ F: __dxlog_file13,
2955
+ L: 485,
2891
2956
  S: this,
2892
2957
  C: (f, a) => f(...a)
2893
2958
  });
@@ -2903,9 +2968,9 @@ var InvitationsHandler = class {
2903
2968
  if (introductionResponse.challenge == null) {
2904
2969
  throw new Error("challenge missing in the introduction");
2905
2970
  }
2906
- log9("sending authentication request", void 0, {
2907
- F: __dxlog_file12,
2908
- L: 496,
2971
+ log10("sending authentication request", void 0, {
2972
+ F: __dxlog_file13,
2973
+ L: 504,
2909
2974
  S: this,
2910
2975
  C: (f, a) => f(...a)
2911
2976
  });
@@ -3025,14 +3090,14 @@ var InvitationsServiceImpl = class {
3025
3090
  };
3026
3091
 
3027
3092
  // packages/sdk/client-services/src/packlets/invitations/space-invitation-protocol.ts
3028
- import { createAdmissionCredentials, createCancelDelegatedSpaceInvitationCredential, createDelegatedSpaceInvitationCredential, getCredentialAssertion as getCredentialAssertion2 } from "@dxos/credentials";
3093
+ import { createCancelDelegatedSpaceInvitationCredential, createDelegatedSpaceInvitationCredential, getCredentialAssertion as getCredentialAssertion2 } from "@dxos/credentials";
3029
3094
  import { writeMessages as writeMessages2 } from "@dxos/feed-store";
3030
3095
  import { invariant as invariant10 } from "@dxos/invariant";
3031
- import { log as log10 } from "@dxos/log";
3096
+ import { log as log11 } from "@dxos/log";
3032
3097
  import { AlreadyJoinedError as AlreadyJoinedError2, AuthorizationError, InvalidInvitationError, SpaceNotFoundError } from "@dxos/protocols";
3033
3098
  import { Invitation as Invitation5 } from "@dxos/protocols/proto/dxos/client/services";
3034
3099
  import { SpaceMember as SpaceMember2 } from "@dxos/protocols/proto/dxos/halo/credentials";
3035
- var __dxlog_file13 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/space-invitation-protocol.ts";
3100
+ var __dxlog_file14 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/space-invitation-protocol.ts";
3036
3101
  var SpaceInvitationProtocol = class {
3037
3102
  constructor(_spaceManager, _signingContext, _keyring, _spaceKey) {
3038
3103
  this._spaceManager = _spaceManager;
@@ -3066,79 +3131,43 @@ var SpaceInvitationProtocol = class {
3066
3131
  };
3067
3132
  }
3068
3133
  async admit(invitation, request, guestProfile) {
3069
- invariant10(this._spaceKey, void 0, {
3070
- F: __dxlog_file13,
3071
- L: 76,
3072
- S: this,
3073
- A: [
3074
- "this._spaceKey",
3075
- ""
3076
- ]
3077
- });
3078
- const space = this._spaceManager.spaces.get(this._spaceKey);
3079
- invariant10(space, void 0, {
3080
- F: __dxlog_file13,
3081
- L: 78,
3082
- S: this,
3083
- A: [
3084
- "space",
3085
- ""
3086
- ]
3087
- });
3088
- invariant10(request.space, void 0, {
3089
- F: __dxlog_file13,
3090
- L: 80,
3134
+ invariant10(this._spaceKey && request.space, void 0, {
3135
+ F: __dxlog_file14,
3136
+ L: 74,
3091
3137
  S: this,
3092
3138
  A: [
3093
- "request.space",
3139
+ "this._spaceKey && request.space",
3094
3140
  ""
3095
3141
  ]
3096
3142
  });
3097
- const { identityKey, deviceKey } = request.space;
3098
- if (space.inner.spaceState.getMemberRole(identityKey) !== SpaceMember2.Role.REMOVED) {
3099
- throw new AlreadyJoinedError2();
3100
- }
3101
- log10("writing guest credentials", {
3143
+ log11("writing guest credentials", {
3102
3144
  host: this._signingContext.deviceKey,
3103
- guest: deviceKey
3145
+ guest: request.space.deviceKey
3104
3146
  }, {
3105
- F: __dxlog_file13,
3106
- L: 87,
3147
+ F: __dxlog_file14,
3148
+ L: 75,
3107
3149
  S: this,
3108
3150
  C: (f, a) => f(...a)
3109
3151
  });
3110
- const credentials = await createAdmissionCredentials(this._signingContext.credentialSigner, identityKey, space.key, space.inner.genesisFeedKey, invitation.role ?? SpaceMember2.Role.ADMIN, space.inner.spaceState.membershipChainHeads, guestProfile, invitation.delegationCredentialId);
3111
- invariant10(credentials[0].credential, void 0, {
3112
- F: __dxlog_file13,
3113
- L: 101,
3114
- S: this,
3115
- A: [
3116
- "credentials[0].credential",
3117
- ""
3118
- ]
3119
- });
3120
- const spaceMemberCredential = credentials[0].credential.credential;
3121
- invariant10(getCredentialAssertion2(spaceMemberCredential)["@type"] === "dxos.halo.credentials.SpaceMember", void 0, {
3122
- F: __dxlog_file13,
3123
- L: 103,
3124
- S: this,
3125
- A: [
3126
- "getCredentialAssertion(spaceMemberCredential)['@type'] === 'dxos.halo.credentials.SpaceMember'",
3127
- ""
3128
- ]
3152
+ const spaceMemberCredential = await this._spaceManager.admitMember({
3153
+ spaceKey: this._spaceKey,
3154
+ identityKey: request.space.identityKey,
3155
+ role: invitation.role ?? SpaceMember2.Role.ADMIN,
3156
+ profile: guestProfile,
3157
+ delegationCredentialId: invitation.delegationCredentialId
3129
3158
  });
3130
- await writeMessages2(space.inner.controlPipeline.writer, credentials);
3159
+ const space = this._spaceManager.spaces.get(this._spaceKey);
3131
3160
  return {
3132
3161
  space: {
3133
3162
  credential: spaceMemberCredential,
3134
- controlTimeframe: space.inner.controlPipeline.state.timeframe
3163
+ controlTimeframe: space?.inner.controlPipeline.state.timeframe
3135
3164
  }
3136
3165
  };
3137
3166
  }
3138
3167
  async delegate(invitation) {
3139
3168
  invariant10(this._spaceKey, void 0, {
3140
- F: __dxlog_file13,
3141
- L: 116,
3169
+ F: __dxlog_file14,
3170
+ L: 95,
3142
3171
  S: this,
3143
3172
  A: [
3144
3173
  "this._spaceKey",
@@ -3147,8 +3176,8 @@ var SpaceInvitationProtocol = class {
3147
3176
  });
3148
3177
  const space = this._spaceManager.spaces.get(this._spaceKey);
3149
3178
  invariant10(space, void 0, {
3150
- F: __dxlog_file13,
3151
- L: 118,
3179
+ F: __dxlog_file14,
3180
+ L: 97,
3152
3181
  S: this,
3153
3182
  A: [
3154
3183
  "space",
@@ -3157,8 +3186,8 @@ var SpaceInvitationProtocol = class {
3157
3186
  });
3158
3187
  if (invitation.authMethod === Invitation5.AuthMethod.KNOWN_PUBLIC_KEY) {
3159
3188
  invariant10(invitation.guestKeypair?.publicKey, void 0, {
3160
- F: __dxlog_file13,
3161
- L: 120,
3189
+ F: __dxlog_file14,
3190
+ L: 99,
3162
3191
  S: this,
3163
3192
  A: [
3164
3193
  "invitation.guestKeypair?.publicKey",
@@ -3166,12 +3195,12 @@ var SpaceInvitationProtocol = class {
3166
3195
  ]
3167
3196
  });
3168
3197
  }
3169
- log10("writing delegate space invitation", {
3198
+ log11("writing delegate space invitation", {
3170
3199
  host: this._signingContext.deviceKey,
3171
3200
  id: invitation.invitationId
3172
3201
  }, {
3173
- F: __dxlog_file13,
3174
- L: 123,
3202
+ F: __dxlog_file14,
3203
+ L: 102,
3175
3204
  S: this,
3176
3205
  C: (f, a) => f(...a)
3177
3206
  });
@@ -3185,8 +3214,8 @@ var SpaceInvitationProtocol = class {
3185
3214
  guestKey: invitation.authMethod === Invitation5.AuthMethod.KNOWN_PUBLIC_KEY ? invitation.guestKeypair.publicKey : void 0
3186
3215
  });
3187
3216
  invariant10(credential.credential, void 0, {
3188
- F: __dxlog_file13,
3189
- L: 143,
3217
+ F: __dxlog_file14,
3218
+ L: 122,
3190
3219
  S: this,
3191
3220
  A: [
3192
3221
  "credential.credential",
@@ -3200,8 +3229,8 @@ var SpaceInvitationProtocol = class {
3200
3229
  }
3201
3230
  async cancelDelegation(invitation) {
3202
3231
  invariant10(this._spaceKey, void 0, {
3203
- F: __dxlog_file13,
3204
- L: 149,
3232
+ F: __dxlog_file14,
3233
+ L: 128,
3205
3234
  S: this,
3206
3235
  A: [
3207
3236
  "this._spaceKey",
@@ -3209,8 +3238,8 @@ var SpaceInvitationProtocol = class {
3209
3238
  ]
3210
3239
  });
3211
3240
  invariant10(invitation.type === Invitation5.Type.DELEGATED && invitation.delegationCredentialId, void 0, {
3212
- F: __dxlog_file13,
3213
- L: 150,
3241
+ F: __dxlog_file14,
3242
+ L: 129,
3214
3243
  S: this,
3215
3244
  A: [
3216
3245
  "invitation.type === Invitation.Type.DELEGATED && invitation.delegationCredentialId",
@@ -3219,27 +3248,27 @@ var SpaceInvitationProtocol = class {
3219
3248
  });
3220
3249
  const space = this._spaceManager.spaces.get(this._spaceKey);
3221
3250
  invariant10(space, void 0, {
3222
- F: __dxlog_file13,
3223
- L: 152,
3251
+ F: __dxlog_file14,
3252
+ L: 131,
3224
3253
  S: this,
3225
3254
  A: [
3226
3255
  "space",
3227
3256
  ""
3228
3257
  ]
3229
3258
  });
3230
- log10("cancelling delegated space invitation", {
3259
+ log11("cancelling delegated space invitation", {
3231
3260
  host: this._signingContext.deviceKey,
3232
3261
  id: invitation.invitationId
3233
3262
  }, {
3234
- F: __dxlog_file13,
3235
- L: 154,
3263
+ F: __dxlog_file14,
3264
+ L: 133,
3236
3265
  S: this,
3237
3266
  C: (f, a) => f(...a)
3238
3267
  });
3239
3268
  const credential = await createCancelDelegatedSpaceInvitationCredential(this._signingContext.credentialSigner, space.key, invitation.delegationCredentialId);
3240
3269
  invariant10(credential.credential, void 0, {
3241
- F: __dxlog_file13,
3242
- L: 161,
3270
+ F: __dxlog_file14,
3271
+ L: 140,
3243
3272
  S: this,
3244
3273
  A: [
3245
3274
  "credential.credential",
@@ -3277,8 +3306,8 @@ var SpaceInvitationProtocol = class {
3277
3306
  }
3278
3307
  async accept(response) {
3279
3308
  invariant10(response.space, void 0, {
3280
- F: __dxlog_file13,
3281
- L: 196,
3309
+ F: __dxlog_file14,
3310
+ L: 175,
3282
3311
  S: this,
3283
3312
  A: [
3284
3313
  "response.space",
@@ -3288,8 +3317,8 @@ var SpaceInvitationProtocol = class {
3288
3317
  const { credential, controlTimeframe, dataTimeframe } = response.space;
3289
3318
  const assertion = getCredentialAssertion2(credential);
3290
3319
  invariant10(assertion["@type"] === "dxos.halo.credentials.SpaceMember", "Invalid credential", {
3291
- F: __dxlog_file13,
3292
- L: 199,
3320
+ F: __dxlog_file14,
3321
+ L: 178,
3293
3322
  S: this,
3294
3323
  A: [
3295
3324
  "assertion['@type'] === 'dxos.halo.credentials.SpaceMember'",
@@ -3297,8 +3326,8 @@ var SpaceInvitationProtocol = class {
3297
3326
  ]
3298
3327
  });
3299
3328
  invariant10(credential.subject.id.equals(this._signingContext.identityKey), void 0, {
3300
- F: __dxlog_file13,
3301
- L: 200,
3329
+ F: __dxlog_file14,
3330
+ L: 179,
3302
3331
  S: this,
3303
3332
  A: [
3304
3333
  "credential.subject.id.equals(this._signingContext.identityKey)",
@@ -3322,17 +3351,17 @@ var SpaceInvitationProtocol = class {
3322
3351
  };
3323
3352
 
3324
3353
  // packages/sdk/client-services/src/packlets/invitations/invitations-manager.ts
3325
- import { Event as Event3, PushStream, TimeoutError as TimeoutError2, Trigger as Trigger5 } from "@dxos/async";
3354
+ import { Event as Event3, PushStream, TimeoutError as TimeoutError2, Trigger as Trigger6 } from "@dxos/async";
3326
3355
  import { AuthenticatingInvitation, AUTHENTICATION_CODE_LENGTH, CancellableInvitation, INVITATION_TIMEOUT as INVITATION_TIMEOUT2 } from "@dxos/client-protocol";
3327
3356
  import { Context as Context6 } from "@dxos/context";
3328
3357
  import { generatePasscode } from "@dxos/credentials";
3329
3358
  import { hasInvitationExpired } from "@dxos/echo-pipeline";
3330
3359
  import { invariant as invariant11 } from "@dxos/invariant";
3331
3360
  import { PublicKey as PublicKey8 } from "@dxos/keys";
3332
- import { log as log11 } from "@dxos/log";
3361
+ import { log as log12 } from "@dxos/log";
3333
3362
  import { Invitation as Invitation6 } from "@dxos/protocols/proto/dxos/client/services";
3334
3363
  import { SpaceMember as SpaceMember3 } from "@dxos/protocols/proto/dxos/halo/credentials";
3335
- var __dxlog_file14 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/invitations-manager.ts";
3364
+ var __dxlog_file15 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/invitations/invitations-manager.ts";
3336
3365
  var InvitationsManager = class {
3337
3366
  constructor(_invitationsHandler, _getHandler, _metadataStore) {
3338
3367
  this._invitationsHandler = _invitationsHandler;
@@ -3374,8 +3403,8 @@ var InvitationsManager = class {
3374
3403
  try {
3375
3404
  await this._persistIfRequired(handler, stream, invitation);
3376
3405
  } catch (err) {
3377
- log11.catch(err, void 0, {
3378
- F: __dxlog_file14,
3406
+ log12.catch(err, void 0, {
3407
+ F: __dxlog_file15,
3379
3408
  L: 82,
3380
3409
  S: this,
3381
3410
  C: (f, a) => f(...a)
@@ -3398,7 +3427,7 @@ var InvitationsManager = class {
3398
3427
  const freshInvitations = persistentInvitations.filter((invitation) => !hasInvitationExpired(invitation));
3399
3428
  const loadTasks = freshInvitations.map((persistentInvitation) => {
3400
3429
  invariant11(!this._createInvitations.get(persistentInvitation.invitationId), "invitation already exists", {
3401
- F: __dxlog_file14,
3430
+ F: __dxlog_file15,
3402
3431
  L: 103,
3403
3432
  S: this,
3404
3433
  A: [
@@ -3416,8 +3445,8 @@ var InvitationsManager = class {
3416
3445
  invitations: cInvitations.map((invitation) => invitation.get())
3417
3446
  };
3418
3447
  } catch (err) {
3419
- log11.catch(err, void 0, {
3420
- F: __dxlog_file14,
3448
+ log12.catch(err, void 0, {
3449
+ F: __dxlog_file15,
3421
3450
  L: 110,
3422
3451
  S: this,
3423
3452
  C: (f, a) => f(...a)
@@ -3448,14 +3477,14 @@ var InvitationsManager = class {
3448
3477
  return invitation;
3449
3478
  }
3450
3479
  async authenticate({ invitationId, authCode }) {
3451
- log11("authenticating...", void 0, {
3452
- F: __dxlog_file14,
3480
+ log12("authenticating...", void 0, {
3481
+ F: __dxlog_file15,
3453
3482
  L: 140,
3454
3483
  S: this,
3455
3484
  C: (f, a) => f(...a)
3456
3485
  });
3457
3486
  invariant11(invitationId, void 0, {
3458
- F: __dxlog_file14,
3487
+ F: __dxlog_file15,
3459
3488
  L: 141,
3460
3489
  S: this,
3461
3490
  A: [
@@ -3465,10 +3494,10 @@ var InvitationsManager = class {
3465
3494
  });
3466
3495
  const observable = this._acceptInvitations.get(invitationId);
3467
3496
  if (!observable) {
3468
- log11.warn("invalid invitation", {
3497
+ log12.warn("invalid invitation", {
3469
3498
  invitationId
3470
3499
  }, {
3471
- F: __dxlog_file14,
3500
+ F: __dxlog_file15,
3472
3501
  L: 144,
3473
3502
  S: this,
3474
3503
  C: (f, a) => f(...a)
@@ -3478,16 +3507,16 @@ var InvitationsManager = class {
3478
3507
  }
3479
3508
  }
3480
3509
  async cancelInvitation({ invitationId }) {
3481
- log11("cancelInvitation...", {
3510
+ log12("cancelInvitation...", {
3482
3511
  invitationId
3483
3512
  }, {
3484
- F: __dxlog_file14,
3513
+ F: __dxlog_file15,
3485
3514
  L: 151,
3486
3515
  S: this,
3487
3516
  C: (f, a) => f(...a)
3488
3517
  });
3489
3518
  invariant11(invitationId, void 0, {
3490
- F: __dxlog_file14,
3519
+ F: __dxlog_file15,
3491
3520
  L: 152,
3492
3521
  S: this,
3493
3522
  A: [
@@ -3561,12 +3590,15 @@ var InvitationsManager = class {
3561
3590
  stream.error(err);
3562
3591
  void ctx.dispose();
3563
3592
  }
3593
+ }, {
3594
+ F: __dxlog_file15,
3595
+ L: 234
3564
3596
  });
3565
3597
  ctx.onDispose(() => {
3566
- log11("complete", {
3598
+ log12("complete", {
3567
3599
  ...handler.toJSON()
3568
3600
  }, {
3569
- F: __dxlog_file14,
3601
+ F: __dxlog_file15,
3570
3602
  L: 241,
3571
3603
  S: this,
3572
3604
  C: (f, a) => f(...a)
@@ -3591,15 +3623,15 @@ var InvitationsManager = class {
3591
3623
  };
3592
3624
  }
3593
3625
  _createObservableAcceptingInvitation(handler, initialState) {
3594
- const otpEnteredTrigger = new Trigger5();
3626
+ const otpEnteredTrigger = new Trigger6();
3595
3627
  const stream = new PushStream();
3596
3628
  const ctx = new Context6({
3597
3629
  onError: (err) => {
3598
3630
  if (err instanceof TimeoutError2) {
3599
- log11("timeout", {
3631
+ log12("timeout", {
3600
3632
  ...handler.toJSON()
3601
3633
  }, {
3602
- F: __dxlog_file14,
3634
+ F: __dxlog_file15,
3603
3635
  L: 261,
3604
3636
  S: this,
3605
3637
  C: (f, a) => f(...a)
@@ -3609,8 +3641,8 @@ var InvitationsManager = class {
3609
3641
  state: Invitation6.State.TIMEOUT
3610
3642
  });
3611
3643
  } else {
3612
- log11.warn("auth failed", err, {
3613
- F: __dxlog_file14,
3644
+ log12.warn("auth failed", err, {
3645
+ F: __dxlog_file15,
3614
3646
  L: 264,
3615
3647
  S: this,
3616
3648
  C: (f, a) => f(...a)
@@ -3622,12 +3654,15 @@ var InvitationsManager = class {
3622
3654
  }
3623
3655
  void ctx.dispose();
3624
3656
  }
3657
+ }, {
3658
+ F: __dxlog_file15,
3659
+ L: 258
3625
3660
  });
3626
3661
  ctx.onDispose(() => {
3627
- log11("complete", {
3662
+ log12("complete", {
3628
3663
  ...handler.toJSON()
3629
3664
  }, {
3630
- F: __dxlog_file14,
3665
+ F: __dxlog_file15,
3631
3666
  L: 271,
3632
3667
  S: this,
3633
3668
  C: (f, a) => f(...a)
@@ -3671,8 +3706,8 @@ var InvitationsManager = class {
3671
3706
  try {
3672
3707
  await this._metadataStore.removeInvitation(invitation.invitationId);
3673
3708
  } catch (err) {
3674
- log11.catch(err, void 0, {
3675
- F: __dxlog_file14,
3709
+ log12.catch(err, void 0, {
3710
+ F: __dxlog_file15,
3676
3711
  L: 307,
3677
3712
  S: this,
3678
3713
  C: (f, a) => f(...a)
@@ -3687,15 +3722,15 @@ var InvitationsManager = class {
3687
3722
  };
3688
3723
 
3689
3724
  // packages/sdk/client-services/src/packlets/spaces/data-space.ts
3690
- import { Event as Event6, Mutex as Mutex2, scheduleTask as scheduleTask5, sleep as sleep2, synchronized, trackLeaks } from "@dxos/async";
3725
+ import { Event as Event6, Mutex as Mutex2, scheduleTask as scheduleTask5, sleep as sleep3, synchronized, trackLeaks } from "@dxos/async";
3691
3726
  import { AUTH_TIMEOUT as AUTH_TIMEOUT2 } from "@dxos/client-protocol";
3692
- import { Context as Context8, ContextDisposedError as ContextDisposedError3, cancelWithContext as cancelWithContext5 } from "@dxos/context";
3727
+ import { Context as Context8, ContextDisposedError as ContextDisposedError3, cancelWithContext as cancelWithContext4 } from "@dxos/context";
3693
3728
  import { timed, warnAfterTimeout } from "@dxos/debug";
3694
3729
  import { createMappedFeedWriter } from "@dxos/echo-pipeline";
3695
- import { SpaceDocVersion } from "@dxos/echo-protocol";
3730
+ import { SpaceDocVersion as SpaceDocVersion2 } from "@dxos/echo-protocol";
3696
3731
  import { failedInvariant } from "@dxos/invariant";
3697
3732
  import { PublicKey as PublicKey10 } from "@dxos/keys";
3698
- import { log as log14 } from "@dxos/log";
3733
+ import { log as log15 } from "@dxos/log";
3699
3734
  import { CancelledError, SystemError } from "@dxos/protocols";
3700
3735
  import { SpaceState as SpaceState2 } from "@dxos/protocols/proto/dxos/client/services";
3701
3736
  import { AdmittedFeed as AdmittedFeed3, SpaceMember as SpaceMember4 } from "@dxos/protocols/proto/dxos/halo/credentials";
@@ -3749,22 +3784,19 @@ var AutomergeSpaceState = class extends Resource2 {
3749
3784
  };
3750
3785
 
3751
3786
  // packages/sdk/client-services/src/packlets/spaces/epoch-migrations.ts
3752
- import { asyncTimeout as asyncTimeout2 } from "@dxos/async";
3753
- import { next as am } from "@dxos/automerge/automerge";
3754
- import { cancelWithContext as cancelWithContext4 } from "@dxos/context";
3755
3787
  import { convertLegacyReferences, convertLegacySpaceRootDoc, findInlineObjectOfType, migrateDocument } from "@dxos/echo-db";
3756
- import { AutomergeDocumentLoaderImpl } from "@dxos/echo-pipeline";
3788
+ import { SpaceDocVersion } from "@dxos/echo-protocol";
3757
3789
  import { TYPE_PROPERTIES } from "@dxos/echo-schema";
3758
3790
  import { invariant as invariant12 } from "@dxos/invariant";
3759
- import { log as log12 } from "@dxos/log";
3791
+ import { log as log13 } from "@dxos/log";
3760
3792
  import { CreateEpochRequest } from "@dxos/protocols/proto/dxos/client/services";
3761
- import { assignDeep } from "@dxos/util";
3762
- var __dxlog_file15 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/spaces/epoch-migrations.ts";
3793
+ var __dxlog_file16 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/spaces/epoch-migrations.ts";
3794
+ var LOAD_DOC_TIMEOUT = 1e4;
3763
3795
  var runEpochMigration = async (ctx, context) => {
3764
3796
  switch (context.migration) {
3765
3797
  case CreateEpochRequest.Migration.INIT_AUTOMERGE: {
3766
- const document = context.repo.create();
3767
- await context.repo.flush();
3798
+ const document = context.echoHost.createDoc();
3799
+ await context.echoHost.flush();
3768
3800
  return {
3769
3801
  newRoot: document.url
3770
3802
  };
@@ -3773,77 +3805,88 @@ var runEpochMigration = async (ctx, context) => {
3773
3805
  if (!context.currentRoot) {
3774
3806
  throw new Error("Space does not have an automerge root");
3775
3807
  }
3776
- const rootHandle = context.repo.find(context.currentRoot);
3777
- await cancelWithContext4(ctx, asyncTimeout2(rootHandle.whenReady(), 1e4));
3778
- const newRoot = context.repo.create(rootHandle.docSync());
3779
- await context.repo.flush();
3808
+ const rootHandle = await context.echoHost.loadDoc(ctx, context.currentRoot, {
3809
+ timeout: LOAD_DOC_TIMEOUT
3810
+ });
3811
+ const newRoot = context.echoHost.createDoc(rootHandle.docSync());
3812
+ await context.echoHost.flush();
3780
3813
  return {
3781
3814
  newRoot: newRoot.url
3782
3815
  };
3783
3816
  }
3784
3817
  case CreateEpochRequest.Migration.FRAGMENT_AUTOMERGE_ROOT: {
3785
- log12.info("Fragmenting", void 0, {
3786
- F: __dxlog_file15,
3787
- L: 63,
3818
+ log13.info("Fragmenting", void 0, {
3819
+ F: __dxlog_file16,
3820
+ L: 64,
3788
3821
  S: void 0,
3789
3822
  C: (f, a) => f(...a)
3790
3823
  });
3791
3824
  const currentRootUrl = context.currentRoot;
3792
- const rootHandle = context.repo.find(currentRootUrl);
3793
- await cancelWithContext4(ctx, asyncTimeout2(rootHandle.whenReady(), 1e4));
3825
+ const rootHandle = await context.echoHost.loadDoc(ctx, currentRootUrl, {
3826
+ timeout: LOAD_DOC_TIMEOUT
3827
+ });
3794
3828
  const objects = Object.entries(rootHandle.docSync().objects);
3795
3829
  const properties = findInlineObjectOfType(rootHandle.docSync(), TYPE_PROPERTIES);
3796
3830
  const otherObjects = objects.filter(([key]) => key !== properties?.[0]);
3797
3831
  invariant12(properties, "Properties not found", {
3798
- F: __dxlog_file15,
3799
- L: 73,
3832
+ F: __dxlog_file16,
3833
+ L: 75,
3800
3834
  S: void 0,
3801
3835
  A: [
3802
3836
  "properties",
3803
3837
  "'Properties not found'"
3804
3838
  ]
3805
3839
  });
3806
- const newSpaceDoc = {
3840
+ const newRoot = context.echoHost.createDoc({
3807
3841
  ...rootHandle.docSync(),
3808
3842
  objects: Object.fromEntries([
3809
3843
  properties
3810
3844
  ])
3811
- };
3812
- const newRoot = context.repo.create(newSpaceDoc);
3845
+ });
3813
3846
  invariant12(typeof newRoot.url === "string" && newRoot.url.length > 0, void 0, {
3814
- F: __dxlog_file15,
3815
- L: 78,
3847
+ F: __dxlog_file16,
3848
+ L: 82,
3816
3849
  S: void 0,
3817
3850
  A: [
3818
3851
  "typeof newRoot.url === 'string' && newRoot.url.length > 0",
3819
3852
  ""
3820
3853
  ]
3821
3854
  });
3822
- const docLoader = new AutomergeDocumentLoaderImpl(context.spaceId, context.repo, context.spaceKey);
3823
- await docLoader.loadSpaceRootDocHandle(ctx, {
3824
- rootUrl: newRoot.url
3825
- });
3826
- otherObjects.forEach(([key, value]) => {
3827
- const handle = docLoader.createDocumentForObject(key);
3828
- handle.change((doc) => {
3829
- assignDeep(doc, [
3830
- "objects",
3831
- key
3832
- ], value);
3855
+ const newLinks = [];
3856
+ for (const [id, objData] of otherObjects) {
3857
+ const handle = context.echoHost.createDoc({
3858
+ version: SpaceDocVersion.CURRENT,
3859
+ access: {
3860
+ spaceKey: context.spaceKey.toHex()
3861
+ },
3862
+ objects: {
3863
+ [id]: objData
3864
+ }
3833
3865
  });
3866
+ newLinks.push([
3867
+ id,
3868
+ handle.url
3869
+ ]);
3870
+ }
3871
+ newRoot.change((doc) => {
3872
+ doc.links ??= {};
3873
+ for (const [id, url] of newLinks) {
3874
+ doc.links[id] = url;
3875
+ }
3834
3876
  });
3835
- await context.repo.flush();
3877
+ await context.echoHost.flush();
3836
3878
  return {
3837
3879
  newRoot: newRoot.url
3838
3880
  };
3839
3881
  }
3840
3882
  case CreateEpochRequest.Migration.MIGRATE_REFERENCES_TO_DXN: {
3841
3883
  const currentRootUrl = context.currentRoot;
3842
- const rootHandle = context.repo.find(currentRootUrl);
3843
- await cancelWithContext4(ctx, asyncTimeout2(rootHandle.whenReady(), 1e4));
3884
+ const rootHandle = await context.echoHost.loadDoc(ctx, currentRootUrl, {
3885
+ timeout: LOAD_DOC_TIMEOUT
3886
+ });
3844
3887
  invariant12(rootHandle.docSync(), "Root doc not found", {
3845
- F: __dxlog_file15,
3846
- L: 100,
3888
+ F: __dxlog_file16,
3889
+ L: 115,
3847
3890
  S: void 0,
3848
3891
  A: [
3849
3892
  "rootHandle.docSync()",
@@ -3852,40 +3895,59 @@ var runEpochMigration = async (ctx, context) => {
3852
3895
  });
3853
3896
  const newRootContent = await convertLegacySpaceRootDoc(structuredClone(rootHandle.docSync()));
3854
3897
  for (const [id, url] of Object.entries(newRootContent.links ?? {})) {
3855
- const handle = context.repo.find(url);
3856
- await cancelWithContext4(ctx, asyncTimeout2(handle.whenReady(), 1e4));
3857
- invariant12(handle.docSync(), "Doc not found", {
3858
- F: __dxlog_file15,
3859
- L: 107,
3860
- S: void 0,
3861
- A: [
3862
- "handle.docSync()",
3863
- "'Doc not found'"
3864
- ]
3865
- });
3866
- const newDoc = await convertLegacyReferences(structuredClone(handle.docSync()));
3867
- const migratedDoc = migrateDocument(handle.docSync(), newDoc);
3868
- const newHandle = context.repo.import(am.save(migratedDoc));
3869
- newRootContent.links[id] = newHandle.url;
3898
+ try {
3899
+ const handle = await context.echoHost.loadDoc(ctx, url, {
3900
+ timeout: LOAD_DOC_TIMEOUT
3901
+ });
3902
+ invariant12(handle.docSync(), void 0, {
3903
+ F: __dxlog_file16,
3904
+ L: 122,
3905
+ S: void 0,
3906
+ A: [
3907
+ "handle.docSync()",
3908
+ ""
3909
+ ]
3910
+ });
3911
+ const newDoc = await convertLegacyReferences(structuredClone(handle.docSync()));
3912
+ const migratedDoc = migrateDocument(handle.docSync(), newDoc);
3913
+ const newHandle = context.echoHost.createDoc(migratedDoc, {
3914
+ preserveHistory: true
3915
+ });
3916
+ newRootContent.links[id] = newHandle.url;
3917
+ } catch (err) {
3918
+ log13.warn("Failed to migrate reference", {
3919
+ id,
3920
+ url,
3921
+ error: err
3922
+ }, {
3923
+ F: __dxlog_file16,
3924
+ L: 128,
3925
+ S: void 0,
3926
+ C: (f, a) => f(...a)
3927
+ });
3928
+ delete newRootContent.links[id];
3929
+ }
3870
3930
  }
3871
3931
  const migratedRoot = migrateDocument(rootHandle.docSync(), newRootContent);
3872
- const newRoot = context.repo.import(am.save(migratedRoot));
3873
- await context.repo.flush();
3932
+ const newRoot = context.echoHost.createDoc(migratedRoot, {
3933
+ preserveHistory: true
3934
+ });
3935
+ await context.echoHost.flush();
3874
3936
  return {
3875
3937
  newRoot: newRoot.url
3876
3938
  };
3877
3939
  }
3878
3940
  case CreateEpochRequest.Migration.REPLACE_AUTOMERGE_ROOT: {
3879
3941
  invariant12(context.newAutomergeRoot, void 0, {
3880
- F: __dxlog_file15,
3881
- L: 124,
3942
+ F: __dxlog_file16,
3943
+ L: 143,
3882
3944
  S: void 0,
3883
3945
  A: [
3884
3946
  "context.newAutomergeRoot",
3885
3947
  ""
3886
3948
  ]
3887
3949
  });
3888
- await context.repo.flush();
3950
+ await context.echoHost.flush();
3889
3951
  return {
3890
3952
  newRoot: context.newAutomergeRoot
3891
3953
  };
@@ -3895,22 +3957,25 @@ var runEpochMigration = async (ctx, context) => {
3895
3957
  };
3896
3958
 
3897
3959
  // packages/sdk/client-services/src/packlets/spaces/notarization-plugin.ts
3898
- import { DeferredTask, Event as Event5, scheduleTask as scheduleTask4, sleep, TimeoutError as TimeoutError3, Trigger as Trigger6 } from "@dxos/async";
3960
+ import { DeferredTask, Event as Event5, scheduleTask as scheduleTask4, sleep as sleep2, TimeoutError as TimeoutError3, Trigger as Trigger7 } from "@dxos/async";
3899
3961
  import { Context as Context7, rejectOnDispose } from "@dxos/context";
3900
3962
  import { invariant as invariant13 } from "@dxos/invariant";
3901
3963
  import { PublicKey as PublicKey9 } from "@dxos/keys";
3902
- import { log as log13 } from "@dxos/log";
3964
+ import { log as log14 } from "@dxos/log";
3903
3965
  import { schema as schema4 } from "@dxos/protocols";
3904
3966
  import { RpcExtension as RpcExtension3 } from "@dxos/teleport";
3905
3967
  import { ComplexMap as ComplexMap2, ComplexSet as ComplexSet4, entry } from "@dxos/util";
3906
- var __dxlog_file16 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/spaces/notarization-plugin.ts";
3968
+ var __dxlog_file17 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/spaces/notarization-plugin.ts";
3907
3969
  var DEFAULT_RETRY_TIMEOUT = 1e3;
3908
3970
  var DEFAULT_SUCCESS_DELAY = 1e3;
3909
3971
  var DEFAULT_NOTARIZE_TIMEOUT = 1e4;
3910
3972
  var WRITER_NOT_SET_ERROR_CODE = "WRITER_NOT_SET";
3911
3973
  var NotarizationPlugin = class {
3912
3974
  constructor() {
3913
- this._ctx = new Context7();
3975
+ this._ctx = new Context7(void 0, {
3976
+ F: __dxlog_file17,
3977
+ L: 62
3978
+ });
3914
3979
  this._extensionOpened = new Event5();
3915
3980
  this._extensions = /* @__PURE__ */ new Set();
3916
3981
  this._processedCredentials = new ComplexSet4(PublicKey9.hash);
@@ -3928,16 +3993,16 @@ var NotarizationPlugin = class {
3928
3993
  * Request credentials to be notarized.
3929
3994
  */
3930
3995
  async notarize({ ctx: opCtx, credentials, timeout = DEFAULT_NOTARIZE_TIMEOUT, retryTimeout = DEFAULT_RETRY_TIMEOUT, successDelay = DEFAULT_SUCCESS_DELAY }) {
3931
- log13("notarize", {
3996
+ log14("notarize", {
3932
3997
  credentials
3933
3998
  }, {
3934
- F: __dxlog_file16,
3999
+ F: __dxlog_file17,
3935
4000
  L: 90,
3936
4001
  S: this,
3937
4002
  C: (f, a) => f(...a)
3938
4003
  });
3939
4004
  invariant13(credentials.every((credential) => credential.id), "Credentials must have an id", {
3940
- F: __dxlog_file16,
4005
+ F: __dxlog_file17,
3941
4006
  L: 91,
3942
4007
  S: this,
3943
4008
  A: [
@@ -3945,13 +4010,13 @@ var NotarizationPlugin = class {
3945
4010
  "'Credentials must have an id'"
3946
4011
  ]
3947
4012
  });
3948
- const errors = new Trigger6();
4013
+ const errors = new Trigger7();
3949
4014
  const ctx = this._ctx.derive({
3950
4015
  onError: (err) => {
3951
- log13.warn("Notarization error", {
4016
+ log14.warn("Notarization error", {
3952
4017
  err
3953
4018
  }, {
3954
- F: __dxlog_file16,
4019
+ F: __dxlog_file17,
3955
4020
  L: 99,
3956
4021
  S: this,
3957
4022
  C: (f, a) => f(...a)
@@ -3963,11 +4028,11 @@ var NotarizationPlugin = class {
3963
4028
  opCtx?.onDispose(() => ctx.dispose());
3964
4029
  if (timeout !== 0) {
3965
4030
  scheduleTask4(ctx, () => {
3966
- log13.warn("Notarization timeout", {
4031
+ log14.warn("Notarization timeout", {
3967
4032
  timeout,
3968
4033
  peers: Array.from(this._extensions).map((extension) => extension.remotePeerId)
3969
4034
  }, {
3970
- F: __dxlog_file16,
4035
+ F: __dxlog_file17,
3971
4036
  L: 111,
3972
4037
  S: this,
3973
4038
  C: (f, a) => f(...a)
@@ -3987,10 +4052,10 @@ var NotarizationPlugin = class {
3987
4052
  ...this._extensions
3988
4053
  ].find((peer2) => !peersTried.has(peer2));
3989
4054
  if (!peer) {
3990
- log13.info("Exhausted all peers to notarize with", {
4055
+ log14.info("Exhausted all peers to notarize with", {
3991
4056
  retryIn: retryTimeout
3992
4057
  }, {
3993
- F: __dxlog_file16,
4058
+ F: __dxlog_file17,
3994
4059
  L: 136,
3995
4060
  S: this,
3996
4061
  C: (f, a) => f(...a)
@@ -4000,11 +4065,11 @@ var NotarizationPlugin = class {
4000
4065
  return;
4001
4066
  }
4002
4067
  peersTried.add(peer);
4003
- log13("try notarizing", {
4068
+ log14("try notarizing", {
4004
4069
  peer: peer.localPeerId,
4005
4070
  credentialId: credentials.map((credential) => credential.id)
4006
4071
  }, {
4007
- F: __dxlog_file16,
4072
+ F: __dxlog_file17,
4008
4073
  L: 143,
4009
4074
  S: this,
4010
4075
  C: (f, a) => f(...a)
@@ -4012,17 +4077,17 @@ var NotarizationPlugin = class {
4012
4077
  await peer.rpc.NotarizationService.notarize({
4013
4078
  credentials: credentials.filter((credential) => !this._processedCredentials.has(credential.id))
4014
4079
  });
4015
- log13("success", void 0, {
4016
- F: __dxlog_file16,
4080
+ log14("success", void 0, {
4081
+ F: __dxlog_file17,
4017
4082
  L: 147,
4018
4083
  S: this,
4019
4084
  C: (f, a) => f(...a)
4020
4085
  });
4021
- await sleep(successDelay);
4086
+ await sleep2(successDelay);
4022
4087
  } catch (err) {
4023
4088
  if (!ctx.disposed && !err.message.includes(WRITER_NOT_SET_ERROR_CODE)) {
4024
- log13.info("error notarizing (recoverable)", err, {
4025
- F: __dxlog_file16,
4089
+ log14.info("error notarizing (recoverable)", err, {
4090
+ F: __dxlog_file17,
4026
4091
  L: 151,
4027
4092
  S: this,
4028
4093
  C: (f, a) => f(...a)
@@ -4039,8 +4104,8 @@ var NotarizationPlugin = class {
4039
4104
  allNotarized,
4040
4105
  errors.wait()
4041
4106
  ]);
4042
- log13("done", void 0, {
4043
- F: __dxlog_file16,
4107
+ log14("done", void 0, {
4108
+ F: __dxlog_file17,
4044
4109
  L: 162,
4045
4110
  S: this,
4046
4111
  C: (f, a) => f(...a)
@@ -4062,7 +4127,7 @@ var NotarizationPlugin = class {
4062
4127
  }
4063
4128
  setWriter(writer) {
4064
4129
  invariant13(!this._writer, "Writer already set.", {
4065
- F: __dxlog_file16,
4130
+ F: __dxlog_file17,
4066
4131
  L: 181,
4067
4132
  S: this,
4068
4133
  A: [
@@ -4076,7 +4141,7 @@ var NotarizationPlugin = class {
4076
4141
  if (this._processedCredentials.has(id)) {
4077
4142
  return;
4078
4143
  }
4079
- await entry(this._processCredentialsTriggers, id).orInsert(new Trigger6()).value.wait();
4144
+ await entry(this._processCredentialsTriggers, id).orInsert(new Trigger7()).value.wait();
4080
4145
  }
4081
4146
  /**
4082
4147
  * Requests from other peers to notarize credentials.
@@ -4087,7 +4152,7 @@ var NotarizationPlugin = class {
4087
4152
  }
4088
4153
  for (const credential of request.credentials ?? []) {
4089
4154
  invariant13(credential.id, "Credential must have an id", {
4090
- F: __dxlog_file16,
4155
+ F: __dxlog_file17,
4091
4156
  L: 200,
4092
4157
  S: this,
4093
4158
  A: [
@@ -4104,10 +4169,10 @@ var NotarizationPlugin = class {
4104
4169
  createExtension() {
4105
4170
  const extension = new NotarizationTeleportExtension({
4106
4171
  onOpen: async () => {
4107
- log13("extension opened", {
4172
+ log14("extension opened", {
4108
4173
  peer: extension.localPeerId
4109
4174
  }, {
4110
- F: __dxlog_file16,
4175
+ F: __dxlog_file17,
4111
4176
  L: 211,
4112
4177
  S: this,
4113
4178
  C: (f, a) => f(...a)
@@ -4116,10 +4181,10 @@ var NotarizationPlugin = class {
4116
4181
  this._extensionOpened.emit();
4117
4182
  },
4118
4183
  onClose: async () => {
4119
- log13("extension closed", {
4184
+ log14("extension closed", {
4120
4185
  peer: extension.localPeerId
4121
4186
  }, {
4122
- F: __dxlog_file16,
4187
+ F: __dxlog_file17,
4123
4188
  L: 216,
4124
4189
  S: this,
4125
4190
  C: (f, a) => f(...a)
@@ -4236,10 +4301,13 @@ function _using_ctx() {
4236
4301
  }
4237
4302
  };
4238
4303
  }
4239
- var __dxlog_file17 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/spaces/data-space.ts";
4304
+ var __dxlog_file18 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/spaces/data-space.ts";
4240
4305
  var DataSpace = class {
4241
4306
  constructor(params) {
4242
- this._ctx = new Context8();
4307
+ this._ctx = new Context8(void 0, {
4308
+ F: __dxlog_file18,
4309
+ L: 84
4310
+ });
4243
4311
  this._notarizationPlugin = new NotarizationPlugin();
4244
4312
  this._cache = void 0;
4245
4313
  // TODO(dmaretskyi): Move into Space?
@@ -4270,10 +4338,10 @@ var DataSpace = class {
4270
4338
  });
4271
4339
  this._cache = params.cache;
4272
4340
  this._state = params.initialState;
4273
- log14("new state", {
4341
+ log15("new state", {
4274
4342
  state: SpaceState2[this._state]
4275
4343
  }, {
4276
- F: __dxlog_file17,
4344
+ F: __dxlog_file18,
4277
4345
  L: 146,
4278
4346
  S: this,
4279
4347
  C: (f, a) => f(...a)
@@ -4328,12 +4396,15 @@ var DataSpace = class {
4328
4396
  await this._inner.spaceState.addCredentialProcessor(this._notarizationPlugin);
4329
4397
  await this._automergeSpaceState.open();
4330
4398
  await this._inner.spaceState.addCredentialProcessor(this._automergeSpaceState);
4331
- await this._inner.open(new Context8());
4399
+ await this._inner.open(new Context8(void 0, {
4400
+ F: __dxlog_file18,
4401
+ L: 215
4402
+ }));
4332
4403
  this._state = SpaceState2.CONTROL_ONLY;
4333
- log14("new state", {
4404
+ log15("new state", {
4334
4405
  state: SpaceState2[this._state]
4335
4406
  }, {
4336
- F: __dxlog_file17,
4407
+ F: __dxlog_file18,
4337
4408
  L: 217,
4338
4409
  S: this,
4339
4410
  C: (f, a) => f(...a)
@@ -4348,16 +4419,19 @@ var DataSpace = class {
4348
4419
  async _close() {
4349
4420
  await this._callbacks.beforeClose?.();
4350
4421
  this._state = SpaceState2.CLOSED;
4351
- log14("new state", {
4422
+ log15("new state", {
4352
4423
  state: SpaceState2[this._state]
4353
4424
  }, {
4354
- F: __dxlog_file17,
4425
+ F: __dxlog_file18,
4355
4426
  L: 231,
4356
4427
  S: this,
4357
4428
  C: (f, a) => f(...a)
4358
4429
  });
4359
4430
  await this._ctx.dispose();
4360
- this._ctx = new Context8();
4431
+ this._ctx = new Context8(void 0, {
4432
+ F: __dxlog_file18,
4433
+ L: 233
4434
+ });
4361
4435
  await this.authVerifier.close();
4362
4436
  await this._inner.close();
4363
4437
  await this._inner.spaceState.removeCredentialProcessor(this._automergeSpaceState);
@@ -4383,25 +4457,25 @@ var DataSpace = class {
4383
4457
  await this.initializeDataPipeline();
4384
4458
  } catch (err) {
4385
4459
  if (err instanceof CancelledError || err instanceof ContextDisposedError3) {
4386
- log14("data pipeline initialization cancelled", err, {
4387
- F: __dxlog_file17,
4460
+ log15("data pipeline initialization cancelled", err, {
4461
+ F: __dxlog_file18,
4388
4462
  L: 265,
4389
4463
  S: this,
4390
4464
  C: (f, a) => f(...a)
4391
4465
  });
4392
4466
  return;
4393
4467
  }
4394
- log14.error("Error initializing data pipeline", err, {
4395
- F: __dxlog_file17,
4468
+ log15.error("Error initializing data pipeline", err, {
4469
+ F: __dxlog_file18,
4396
4470
  L: 269,
4397
4471
  S: this,
4398
4472
  C: (f, a) => f(...a)
4399
4473
  });
4400
4474
  this._state = SpaceState2.ERROR;
4401
- log14("new state", {
4475
+ log15("new state", {
4402
4476
  state: SpaceState2[this._state]
4403
4477
  }, {
4404
- F: __dxlog_file17,
4478
+ F: __dxlog_file18,
4405
4479
  L: 271,
4406
4480
  S: this,
4407
4481
  C: (f, a) => f(...a)
@@ -4418,16 +4492,16 @@ var DataSpace = class {
4418
4492
  throw new SystemError("Invalid operation");
4419
4493
  }
4420
4494
  this._state = SpaceState2.INITIALIZING;
4421
- log14("new state", {
4495
+ log15("new state", {
4422
4496
  state: SpaceState2[this._state]
4423
4497
  }, {
4424
- F: __dxlog_file17,
4498
+ F: __dxlog_file18,
4425
4499
  L: 287,
4426
4500
  S: this,
4427
4501
  C: (f, a) => f(...a)
4428
4502
  });
4429
4503
  await this._initializeAndReadControlPipeline();
4430
- await sleep2(1);
4504
+ await sleep3(1);
4431
4505
  const ready = this.stateUpdate.waitForCondition(() => this._state === SpaceState2.READY);
4432
4506
  this._automergeSpaceState.startProcessingRootDocs();
4433
4507
  await ready;
@@ -4435,10 +4509,10 @@ var DataSpace = class {
4435
4509
  async _enterReadyState() {
4436
4510
  await this._callbacks.beforeReady?.();
4437
4511
  this._state = SpaceState2.READY;
4438
- log14("new state", {
4512
+ log15("new state", {
4439
4513
  state: SpaceState2[this._state]
4440
4514
  }, {
4441
- F: __dxlog_file17,
4515
+ F: __dxlog_file18,
4442
4516
  L: 306,
4443
4517
  S: this,
4444
4518
  C: (f, a) => f(...a)
@@ -4453,8 +4527,8 @@ var DataSpace = class {
4453
4527
  });
4454
4528
  this.metrics.controlPipelineReady = /* @__PURE__ */ new Date();
4455
4529
  await this._createWritableFeeds();
4456
- log14("writable feeds created", void 0, {
4457
- F: __dxlog_file17,
4530
+ log15("writable feeds created", void 0, {
4531
+ F: __dxlog_file18,
4458
4532
  L: 322,
4459
4533
  S: this,
4460
4534
  C: (f, a) => f(...a)
@@ -4513,23 +4587,22 @@ var DataSpace = class {
4513
4587
  }
4514
4588
  }
4515
4589
  _onNewAutomergeRoot(rootUrl) {
4516
- log14("loading automerge root doc for space", {
4590
+ log15("loading automerge root doc for space", {
4517
4591
  space: this.key,
4518
4592
  rootUrl
4519
4593
  }, {
4520
- F: __dxlog_file17,
4594
+ F: __dxlog_file18,
4521
4595
  L: 388,
4522
4596
  S: this,
4523
4597
  C: (f, a) => f(...a)
4524
4598
  });
4525
- this._echoHost.replicateDocument(rootUrl);
4526
4599
  const handle = this._echoHost.automergeRepo.find(rootUrl);
4527
4600
  queueMicrotask(async () => {
4528
4601
  try {
4529
4602
  try {
4530
4603
  var _usingCtx = _using_ctx();
4531
4604
  await warnAfterTimeout(5e3, "Automerge root doc load timeout (DataSpace)", async () => {
4532
- await cancelWithContext5(this._ctx, handle.whenReady());
4605
+ await cancelWithContext4(this._ctx, handle.whenReady());
4533
4606
  });
4534
4607
  if (this._ctx.disposed) {
4535
4608
  return;
@@ -4548,9 +4621,11 @@ var DataSpace = class {
4548
4621
  }
4549
4622
  const root = await this._echoHost.openSpaceRoot(handle.url);
4550
4623
  this._databaseRoot = root;
4551
- if (root.getVersion() !== SpaceDocVersion.CURRENT) {
4552
- this._state = SpaceState2.REQUIRES_MIGRATION;
4553
- this.stateUpdate.emit();
4624
+ if (root.getVersion() !== SpaceDocVersion2.CURRENT) {
4625
+ if (this._state !== SpaceState2.REQUIRES_MIGRATION) {
4626
+ this._state = SpaceState2.REQUIRES_MIGRATION;
4627
+ this.stateUpdate.emit();
4628
+ }
4554
4629
  } else {
4555
4630
  if (this._state !== SpaceState2.READY) {
4556
4631
  await this._enterReadyState();
@@ -4565,13 +4640,13 @@ var DataSpace = class {
4565
4640
  if (err instanceof ContextDisposedError3) {
4566
4641
  return;
4567
4642
  }
4568
- log14.warn("error loading automerge root doc", {
4643
+ log15.warn("error loading automerge root doc", {
4569
4644
  space: this.key,
4570
4645
  rootUrl,
4571
4646
  err
4572
4647
  }, {
4573
- F: __dxlog_file17,
4574
- L: 431,
4648
+ F: __dxlog_file18,
4649
+ L: 433,
4575
4650
  S: this,
4576
4651
  C: (f, a) => f(...a)
4577
4652
  });
@@ -4599,7 +4674,7 @@ var DataSpace = class {
4599
4674
  return null;
4600
4675
  }
4601
4676
  const { newRoot } = await runEpochMigration(ctx, {
4602
- repo: this._echoHost.automergeRepo,
4677
+ echoHost: this._echoHost,
4603
4678
  spaceId: this.id,
4604
4679
  spaceKey: this.key,
4605
4680
  migration: options.migration,
@@ -4653,11 +4728,11 @@ var DataSpace = class {
4653
4728
  await this._close();
4654
4729
  }
4655
4730
  this._state = SpaceState2.INACTIVE;
4656
- log14("new state", {
4731
+ log15("new state", {
4657
4732
  state: SpaceState2[this._state]
4658
4733
  }, {
4659
- F: __dxlog_file17,
4660
- L: 512,
4734
+ F: __dxlog_file18,
4735
+ L: 514,
4661
4736
  S: this,
4662
4737
  C: (f, a) => f(...a)
4663
4738
  });
@@ -4716,21 +4791,23 @@ DataSpace = _ts_decorate4([
4716
4791
  // packages/sdk/client-services/src/packlets/spaces/data-space-manager.ts
4717
4792
  import { Event as Event7, synchronized as synchronized2, trackLeaks as trackLeaks2 } from "@dxos/async";
4718
4793
  import { PropertiesType } from "@dxos/client-protocol";
4719
- import { Context as Context9, cancelWithContext as cancelWithContext6 } from "@dxos/context";
4720
- import { getCredentialAssertion as getCredentialAssertion3 } from "@dxos/credentials";
4794
+ import { Context as Context9, cancelWithContext as cancelWithContext5 } from "@dxos/context";
4795
+ import { getCredentialAssertion as getCredentialAssertion3, createAdmissionCredentials } from "@dxos/credentials";
4721
4796
  import { convertLegacyReferences as convertLegacyReferences2, findInlineObjectOfType as findInlineObjectOfType2 } from "@dxos/echo-db";
4722
4797
  import { AuthStatus } from "@dxos/echo-pipeline";
4723
- import { LEGACY_TYPE_PROPERTIES, SpaceDocVersion as SpaceDocVersion2, encodeReference } from "@dxos/echo-protocol";
4798
+ import { CredentialServerExtension } from "@dxos/echo-pipeline";
4799
+ import { LEGACY_TYPE_PROPERTIES, SpaceDocVersion as SpaceDocVersion3, encodeReference } from "@dxos/echo-protocol";
4724
4800
  import { TYPE_PROPERTIES as TYPE_PROPERTIES2, generateEchoId, getTypeReference } from "@dxos/echo-schema";
4801
+ import { writeMessages as writeMessages3 } from "@dxos/feed-store";
4725
4802
  import { invariant as invariant14 } from "@dxos/invariant";
4726
4803
  import { PublicKey as PublicKey11 } from "@dxos/keys";
4727
- import { log as log15 } from "@dxos/log";
4728
- import { trace as Trace2 } from "@dxos/protocols";
4804
+ import { log as log16 } from "@dxos/log";
4805
+ import { trace as Trace2, AlreadyJoinedError as AlreadyJoinedError3 } from "@dxos/protocols";
4729
4806
  import { Invitation as Invitation7, SpaceState as SpaceState3 } from "@dxos/protocols/proto/dxos/client/services";
4730
4807
  import { SpaceMember as SpaceMember6 } from "@dxos/protocols/proto/dxos/halo/credentials";
4731
4808
  import { Gossip as Gossip2, Presence as Presence2 } from "@dxos/teleport-extension-gossip";
4732
4809
  import { trace as trace7 } from "@dxos/tracing";
4733
- import { ComplexMap as ComplexMap3, assignDeep as assignDeep2, deferFunction as deferFunction2, forEachAsync } from "@dxos/util";
4810
+ import { ComplexMap as ComplexMap3, assignDeep, deferFunction as deferFunction2, forEachAsync } from "@dxos/util";
4734
4811
 
4735
4812
  // packages/sdk/client-services/src/packlets/spaces/genesis.ts
4736
4813
  import { createCredential } from "@dxos/credentials";
@@ -4813,7 +4890,7 @@ function _ts_decorate5(decorators, target, key, desc) {
4813
4890
  r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
4814
4891
  return c > 3 && r && Object.defineProperty(target, key, r), r;
4815
4892
  }
4816
- var __dxlog_file18 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/spaces/data-space-manager.ts";
4893
+ var __dxlog_file19 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/spaces/data-space-manager.ts";
4817
4894
  var PRESENCE_ANNOUNCE_INTERVAL = 1e4;
4818
4895
  var PRESENCE_OFFLINE_TIMEOUT = 2e4;
4819
4896
  var DEFAULT_SPACE_KEY = "__DEFAULT__";
@@ -4827,7 +4904,10 @@ var DataSpaceManager = class {
4827
4904
  this._echoHost = _echoHost;
4828
4905
  this._invitationsManager = _invitationsManager;
4829
4906
  this._params = _params;
4830
- this._ctx = new Context9();
4907
+ this._ctx = new Context9(void 0, {
4908
+ F: __dxlog_file19,
4909
+ L: 104
4910
+ });
4831
4911
  this.updated = new Event7();
4832
4912
  this._spaces = new ComplexMap3(PublicKey11.hash);
4833
4913
  this._isOpen = false;
@@ -4860,46 +4940,46 @@ var DataSpaceManager = class {
4860
4940
  return this._spaces;
4861
4941
  }
4862
4942
  async open() {
4863
- log15("open", void 0, {
4864
- F: __dxlog_file18,
4865
- L: 146,
4943
+ log16("open", void 0, {
4944
+ F: __dxlog_file19,
4945
+ L: 156,
4866
4946
  S: this,
4867
4947
  C: (f, a) => f(...a)
4868
4948
  });
4869
- log15.trace("dxos.echo.data-space-manager.open", Trace2.begin({
4949
+ log16.trace("dxos.echo.data-space-manager.open", Trace2.begin({
4870
4950
  id: this._instanceId
4871
4951
  }), {
4872
- F: __dxlog_file18,
4873
- L: 147,
4952
+ F: __dxlog_file19,
4953
+ L: 157,
4874
4954
  S: this,
4875
4955
  C: (f, a) => f(...a)
4876
4956
  });
4877
- log15("metadata loaded", {
4957
+ log16("metadata loaded", {
4878
4958
  spaces: this._metadataStore.spaces.length
4879
4959
  }, {
4880
- F: __dxlog_file18,
4881
- L: 148,
4960
+ F: __dxlog_file19,
4961
+ L: 158,
4882
4962
  S: this,
4883
4963
  C: (f, a) => f(...a)
4884
4964
  });
4885
4965
  await forEachAsync(this._metadataStore.spaces, async (spaceMetadata) => {
4886
4966
  try {
4887
- log15("load space", {
4967
+ log16("load space", {
4888
4968
  spaceMetadata
4889
4969
  }, {
4890
- F: __dxlog_file18,
4891
- L: 152,
4970
+ F: __dxlog_file19,
4971
+ L: 162,
4892
4972
  S: this,
4893
4973
  C: (f, a) => f(...a)
4894
4974
  });
4895
4975
  await this._constructSpace(spaceMetadata);
4896
4976
  } catch (err) {
4897
- log15.error("Error loading space", {
4977
+ log16.error("Error loading space", {
4898
4978
  spaceMetadata,
4899
4979
  err
4900
4980
  }, {
4901
- F: __dxlog_file18,
4902
- L: 155,
4981
+ F: __dxlog_file19,
4982
+ L: 165,
4903
4983
  S: this,
4904
4984
  C: (f, a) => f(...a)
4905
4985
  });
@@ -4907,19 +4987,19 @@ var DataSpaceManager = class {
4907
4987
  });
4908
4988
  this._isOpen = true;
4909
4989
  this.updated.emit();
4910
- log15.trace("dxos.echo.data-space-manager.open", Trace2.end({
4990
+ log16.trace("dxos.echo.data-space-manager.open", Trace2.end({
4911
4991
  id: this._instanceId
4912
4992
  }), {
4913
- F: __dxlog_file18,
4914
- L: 162,
4993
+ F: __dxlog_file19,
4994
+ L: 172,
4915
4995
  S: this,
4916
4996
  C: (f, a) => f(...a)
4917
4997
  });
4918
4998
  }
4919
4999
  async close() {
4920
- log15("close", void 0, {
4921
- F: __dxlog_file18,
4922
- L: 167,
5000
+ log16("close", void 0, {
5001
+ F: __dxlog_file19,
5002
+ L: 177,
4923
5003
  S: this,
4924
5004
  C: (f, a) => f(...a)
4925
5005
  });
@@ -4935,8 +5015,8 @@ var DataSpaceManager = class {
4935
5015
  */
4936
5016
  async createSpace() {
4937
5017
  invariant14(this._isOpen, "Not open.", {
4938
- F: __dxlog_file18,
4939
- L: 181,
5018
+ F: __dxlog_file19,
5019
+ L: 191,
4940
5020
  S: this,
4941
5021
  A: [
4942
5022
  "this._isOpen",
@@ -4953,11 +5033,11 @@ var DataSpaceManager = class {
4953
5033
  dataFeedKey,
4954
5034
  state: SpaceState3.ACTIVE
4955
5035
  };
4956
- log15("creating space...", {
5036
+ log16("creating space...", {
4957
5037
  spaceKey
4958
5038
  }, {
4959
- F: __dxlog_file18,
4960
- L: 193,
5039
+ F: __dxlog_file19,
5040
+ L: 203,
4961
5041
  S: this,
4962
5042
  C: (f, a) => f(...a)
4963
5043
  });
@@ -4968,8 +5048,8 @@ var DataSpaceManager = class {
4968
5048
  await this._metadataStore.addSpace(metadata);
4969
5049
  const memberCredential = credentials[1];
4970
5050
  invariant14(getCredentialAssertion3(memberCredential)["@type"] === "dxos.halo.credentials.SpaceMember", void 0, {
4971
- F: __dxlog_file18,
4972
- L: 203,
5051
+ F: __dxlog_file19,
5052
+ L: 213,
4973
5053
  S: this,
4974
5054
  A: [
4975
5055
  "getCredentialAssertion(memberCredential)['@type'] === 'dxos.halo.credentials.SpaceMember'",
@@ -4986,22 +5066,22 @@ var DataSpaceManager = class {
4986
5066
  return false;
4987
5067
  }
4988
5068
  switch (space.databaseRoot.getVersion()) {
4989
- case SpaceDocVersion2.CURRENT: {
5069
+ case SpaceDocVersion3.CURRENT: {
4990
5070
  const [_, properties] = findInlineObjectOfType2(space.databaseRoot.docSync(), TYPE_PROPERTIES2) ?? [];
4991
5071
  return properties?.data?.[DEFAULT_SPACE_KEY] === this._signingContext.identityKey.toHex();
4992
5072
  }
4993
- case SpaceDocVersion2.LEGACY: {
5073
+ case SpaceDocVersion3.LEGACY: {
4994
5074
  const convertedDoc = await convertLegacyReferences2(space.databaseRoot.docSync());
4995
5075
  const [_, properties] = findInlineObjectOfType2(convertedDoc, LEGACY_TYPE_PROPERTIES) ?? [];
4996
5076
  return properties?.data?.[DEFAULT_SPACE_KEY] === this._signingContext.identityKey.toHex();
4997
5077
  }
4998
5078
  default:
4999
- log15.warn("unknown space version", {
5079
+ log16.warn("unknown space version", {
5000
5080
  version: space.databaseRoot.getVersion(),
5001
5081
  spaceId: space.id
5002
5082
  }, {
5003
- F: __dxlog_file18,
5004
- L: 228,
5083
+ F: __dxlog_file19,
5084
+ L: 238,
5005
5085
  S: this,
5006
5086
  C: (f, a) => f(...a)
5007
5087
  });
@@ -5024,7 +5104,7 @@ var DataSpaceManager = class {
5024
5104
  };
5025
5105
  const propertiesId = generateEchoId();
5026
5106
  document.change((doc) => {
5027
- assignDeep2(doc, [
5107
+ assignDeep(doc, [
5028
5108
  "objects",
5029
5109
  propertiesId
5030
5110
  ], properties);
@@ -5035,8 +5115,8 @@ var DataSpaceManager = class {
5035
5115
  async _getSpaceRootDocument(space) {
5036
5116
  const automergeIndex = space.automergeSpaceState.rootUrl;
5037
5117
  invariant14(automergeIndex, void 0, {
5038
- F: __dxlog_file18,
5039
- L: 261,
5118
+ F: __dxlog_file19,
5119
+ L: 271,
5040
5120
  S: this,
5041
5121
  A: [
5042
5122
  "automergeIndex",
@@ -5049,17 +5129,17 @@ var DataSpaceManager = class {
5049
5129
  }
5050
5130
  // TODO(burdon): Rename join space.
5051
5131
  async acceptSpace(opts) {
5052
- log15("accept space", {
5132
+ log16("accept space", {
5053
5133
  opts
5054
5134
  }, {
5055
- F: __dxlog_file18,
5056
- L: 270,
5135
+ F: __dxlog_file19,
5136
+ L: 280,
5057
5137
  S: this,
5058
5138
  C: (f, a) => f(...a)
5059
5139
  });
5060
5140
  invariant14(this._isOpen, "Not open.", {
5061
- F: __dxlog_file18,
5062
- L: 271,
5141
+ F: __dxlog_file19,
5142
+ L: 281,
5063
5143
  S: this,
5064
5144
  A: [
5065
5145
  "this._isOpen",
@@ -5067,8 +5147,8 @@ var DataSpaceManager = class {
5067
5147
  ]
5068
5148
  });
5069
5149
  invariant14(!this._spaces.has(opts.spaceKey), "Space already exists.", {
5070
- F: __dxlog_file18,
5071
- L: 272,
5150
+ F: __dxlog_file19,
5151
+ L: 282,
5072
5152
  S: this,
5073
5153
  A: [
5074
5154
  "!this._spaces.has(opts.spaceKey)",
@@ -5088,23 +5168,72 @@ var DataSpaceManager = class {
5088
5168
  this.updated.emit();
5089
5169
  return space;
5090
5170
  }
5171
+ async admitMember(options) {
5172
+ const space = this._spaceManager.spaces.get(options.spaceKey);
5173
+ invariant14(space, void 0, {
5174
+ F: __dxlog_file19,
5175
+ L: 302,
5176
+ S: this,
5177
+ A: [
5178
+ "space",
5179
+ ""
5180
+ ]
5181
+ });
5182
+ if (space.spaceState.getMemberRole(options.identityKey) !== SpaceMember6.Role.REMOVED) {
5183
+ throw new AlreadyJoinedError3();
5184
+ }
5185
+ const credentials = await createAdmissionCredentials(this._signingContext.credentialSigner, options.identityKey, space.key, space.genesisFeedKey, options.role, space.spaceState.membershipChainHeads, options.profile, options.delegationCredentialId);
5186
+ invariant14(credentials[0].credential, void 0, {
5187
+ F: __dxlog_file19,
5188
+ L: 321,
5189
+ S: this,
5190
+ A: [
5191
+ "credentials[0].credential",
5192
+ ""
5193
+ ]
5194
+ });
5195
+ const spaceMemberCredential = credentials[0].credential.credential;
5196
+ invariant14(getCredentialAssertion3(spaceMemberCredential)["@type"] === "dxos.halo.credentials.SpaceMember", void 0, {
5197
+ F: __dxlog_file19,
5198
+ L: 323,
5199
+ S: this,
5200
+ A: [
5201
+ "getCredentialAssertion(spaceMemberCredential)['@type'] === 'dxos.halo.credentials.SpaceMember'",
5202
+ ""
5203
+ ]
5204
+ });
5205
+ await writeMessages3(space.controlPipeline.writer, credentials);
5206
+ return spaceMemberCredential;
5207
+ }
5091
5208
  /**
5092
5209
  * Wait until the space data pipeline is fully initialized.
5093
5210
  * Used by invitation handler.
5094
5211
  * TODO(dmaretskyi): Consider removing.
5095
5212
  */
5096
5213
  async waitUntilSpaceReady(spaceKey) {
5097
- await cancelWithContext6(this._ctx, this.updated.waitForCondition(() => {
5214
+ await cancelWithContext5(this._ctx, this.updated.waitForCondition(() => {
5098
5215
  const space = this._spaces.get(spaceKey);
5099
5216
  return !!space && space.state === SpaceState3.READY;
5100
5217
  }));
5101
5218
  }
5219
+ async requestSpaceAdmissionCredential(spaceKey) {
5220
+ return this._spaceManager.requestSpaceAdmissionCredential({
5221
+ spaceKey,
5222
+ identityKey: this._signingContext.identityKey,
5223
+ timeout: 15e3,
5224
+ swarmIdentity: {
5225
+ peerKey: this._signingContext.deviceKey,
5226
+ credentialProvider: createAuthProvider(this._signingContext.credentialSigner),
5227
+ credentialAuthenticator: async () => true
5228
+ }
5229
+ });
5230
+ }
5102
5231
  async _constructSpace(metadata) {
5103
- log15("construct space", {
5232
+ log16("construct space", {
5104
5233
  metadata
5105
5234
  }, {
5106
- F: __dxlog_file18,
5107
- L: 306,
5235
+ F: __dxlog_file19,
5236
+ L: 358,
5108
5237
  S: this,
5109
5238
  C: (f, a) => f(...a)
5110
5239
  });
@@ -5132,6 +5261,7 @@ var DataSpaceManager = class {
5132
5261
  credentialAuthenticator: deferFunction2(() => dataSpace.authVerifier.verifier)
5133
5262
  },
5134
5263
  onAuthorizedConnection: (session) => {
5264
+ session.addExtension("dxos.mesh.teleport.admission-discovery", new CredentialServerExtension(space));
5135
5265
  session.addExtension("dxos.mesh.teleport.gossip", gossip.createExtension({
5136
5266
  remotePeerId: session.remotePeerId
5137
5267
  }));
@@ -5140,9 +5270,9 @@ var DataSpaceManager = class {
5140
5270
  session.addExtension("dxos.mesh.teleport.automerge", this._echoHost.createReplicationExtension());
5141
5271
  },
5142
5272
  onAuthFailure: () => {
5143
- log15.warn("auth failure", void 0, {
5144
- F: __dxlog_file18,
5145
- L: 343,
5273
+ log16.warn("auth failure", void 0, {
5274
+ F: __dxlog_file19,
5275
+ L: 396,
5146
5276
  S: this,
5147
5277
  C: (f, a) => f(...a)
5148
5278
  });
@@ -5171,22 +5301,22 @@ var DataSpaceManager = class {
5171
5301
  signingContext: this._signingContext,
5172
5302
  callbacks: {
5173
5303
  beforeReady: async () => {
5174
- log15("before space ready", {
5304
+ log16("before space ready", {
5175
5305
  space: space.key
5176
5306
  }, {
5177
- F: __dxlog_file18,
5178
- L: 370,
5307
+ F: __dxlog_file19,
5308
+ L: 423,
5179
5309
  S: this,
5180
5310
  C: (f, a) => f(...a)
5181
5311
  });
5182
5312
  },
5183
5313
  afterReady: async () => {
5184
- log15("after space ready", {
5314
+ log16("after space ready", {
5185
5315
  space: space.key,
5186
5316
  open: this._isOpen
5187
5317
  }, {
5188
- F: __dxlog_file18,
5189
- L: 373,
5318
+ F: __dxlog_file19,
5319
+ L: 426,
5190
5320
  S: this,
5191
5321
  C: (f, a) => f(...a)
5192
5322
  });
@@ -5201,11 +5331,11 @@ var DataSpaceManager = class {
5201
5331
  }
5202
5332
  },
5203
5333
  beforeClose: async () => {
5204
- log15("before space close", {
5334
+ log16("before space close", {
5205
5335
  space: space.key
5206
5336
  }, {
5207
- F: __dxlog_file18,
5208
- L: 381,
5337
+ F: __dxlog_file19,
5338
+ L: 434,
5209
5339
  S: this,
5210
5340
  C: (f, a) => f(...a)
5211
5341
  });
@@ -5236,17 +5366,17 @@ var DataSpaceManager = class {
5236
5366
  return (s && member.role === SpaceMember6.Role.REMOVED !== (s.authStatus === AuthStatus.FAILURE)) ?? false;
5237
5367
  });
5238
5368
  sessionsToClose.forEach((session) => {
5239
- void session.close().catch(log15.error);
5369
+ void session.close().catch(log16.error);
5240
5370
  });
5241
5371
  closedSessions += sessionsToClose.length;
5242
5372
  }
5243
- log15("processed member role changes", {
5373
+ log16("processed member role changes", {
5244
5374
  roleChangeCount: memberInfo.length,
5245
5375
  peersOnline: presence.getPeersOnline().length,
5246
5376
  closedSessions
5247
5377
  }, {
5248
- F: __dxlog_file18,
5249
- L: 417,
5378
+ F: __dxlog_file19,
5379
+ L: 470,
5250
5380
  S: this,
5251
5381
  C: (f, a) => f(...a)
5252
5382
  });
@@ -5257,15 +5387,15 @@ var DataSpaceManager = class {
5257
5387
  if (role === SpaceMember6.Role.REMOVED) {
5258
5388
  const session = peerState.peerId && space.protocol.sessions.get(peerState.peerId);
5259
5389
  if (session != null) {
5260
- log15("closing a session with a removed peer", {
5390
+ log16("closing a session with a removed peer", {
5261
5391
  peerId: peerState.peerId
5262
5392
  }, {
5263
- F: __dxlog_file18,
5264
- L: 431,
5393
+ F: __dxlog_file19,
5394
+ L: 484,
5265
5395
  S: this,
5266
5396
  C: (f, a) => f(...a)
5267
5397
  });
5268
- void session.close().catch(log15.error);
5398
+ void session.close().catch(log16.error);
5269
5399
  }
5270
5400
  }
5271
5401
  }
@@ -5326,13 +5456,13 @@ import { EventSubscriptions as EventSubscriptions2, UpdateScheduler, scheduleTas
5326
5456
  import { Stream as Stream10 } from "@dxos/codec-protobuf";
5327
5457
  import { createAdmissionCredentials as createAdmissionCredentials2, getCredentialAssertion as getCredentialAssertion4 } from "@dxos/credentials";
5328
5458
  import { raise as raise2 } from "@dxos/debug";
5329
- import { writeMessages as writeMessages3 } from "@dxos/feed-store";
5459
+ import { writeMessages as writeMessages4 } from "@dxos/feed-store";
5330
5460
  import { invariant as invariant15 } from "@dxos/invariant";
5331
- import { log as log16 } from "@dxos/log";
5461
+ import { log as log17 } from "@dxos/log";
5332
5462
  import { ApiError, SpaceNotFoundError as SpaceNotFoundError2, encodeError, IdentityNotInitializedError, AuthorizationError as AuthorizationError2 } from "@dxos/protocols";
5333
5463
  import { SpaceMember as SpaceMember7, SpaceState as SpaceState4 } from "@dxos/protocols/proto/dxos/client/services";
5334
5464
  import { trace as trace8 } from "@dxos/tracing";
5335
- var __dxlog_file19 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/spaces/spaces-service.ts";
5465
+ var __dxlog_file20 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/spaces/spaces-service.ts";
5336
5466
  var SpacesServiceImpl = class {
5337
5467
  constructor(_identityManager, _spaceManager, _getDataSpaceManager) {
5338
5468
  this._identityManager = _identityManager;
@@ -5376,8 +5506,8 @@ var SpacesServiceImpl = class {
5376
5506
  }
5377
5507
  const credentials = await createAdmissionCredentials2(identity.getIdentityCredentialSigner(), request.memberKey, space.key, space.genesisFeedKey, request.newRole, space.spaceState.membershipChainHeads);
5378
5508
  invariant15(credentials[0].credential, void 0, {
5379
- F: __dxlog_file19,
5380
- L: 98,
5509
+ F: __dxlog_file20,
5510
+ L: 102,
5381
5511
  S: this,
5382
5512
  A: [
5383
5513
  "credentials[0].credential",
@@ -5386,26 +5516,26 @@ var SpacesServiceImpl = class {
5386
5516
  });
5387
5517
  const spaceMemberCredential = credentials[0].credential.credential;
5388
5518
  invariant15(getCredentialAssertion4(spaceMemberCredential)["@type"] === "dxos.halo.credentials.SpaceMember", void 0, {
5389
- F: __dxlog_file19,
5390
- L: 100,
5519
+ F: __dxlog_file20,
5520
+ L: 104,
5391
5521
  S: this,
5392
5522
  A: [
5393
5523
  "getCredentialAssertion(spaceMemberCredential)['@type'] === 'dxos.halo.credentials.SpaceMember'",
5394
5524
  ""
5395
5525
  ]
5396
5526
  });
5397
- await writeMessages3(space.controlPipeline.writer, credentials);
5527
+ await writeMessages4(space.controlPipeline.writer, credentials);
5398
5528
  }
5399
5529
  querySpaces() {
5400
5530
  return new Stream10(({ next, ctx }) => {
5401
5531
  const scheduler = new UpdateScheduler(ctx, async () => {
5402
5532
  const dataSpaceManager = await this._getDataSpaceManager();
5403
5533
  const spaces = Array.from(dataSpaceManager.spaces.values()).map((space) => this._serializeSpace(space));
5404
- log16("update", {
5534
+ log17("update", {
5405
5535
  spaces
5406
5536
  }, {
5407
- F: __dxlog_file19,
5408
- L: 111,
5537
+ F: __dxlog_file20,
5538
+ L: 115,
5409
5539
  S: this,
5410
5540
  C: (f, a) => f(...a)
5411
5541
  });
@@ -5423,7 +5553,15 @@ var SpacesServiceImpl = class {
5423
5553
  const subscribeSpaces = () => {
5424
5554
  subscriptions.clear();
5425
5555
  for (const space of dataSpaceManager.spaces.values()) {
5426
- subscriptions.add(space.stateUpdate.on(ctx, () => scheduler.forceTrigger()));
5556
+ let lastState;
5557
+ subscriptions.add(space.stateUpdate.on(ctx, () => {
5558
+ if (space.state !== lastState) {
5559
+ scheduler.forceTrigger();
5560
+ } else {
5561
+ scheduler.trigger();
5562
+ }
5563
+ lastState = space.state;
5564
+ }));
5427
5565
  subscriptions.add(space.presence.updated.on(ctx, () => scheduler.trigger()));
5428
5566
  subscriptions.add(space.automergeSpaceState.onNewEpoch.on(ctx, () => scheduler.trigger()));
5429
5567
  subscriptions.add(space.inner.controlPipeline.state.timeframeUpdate.on(ctx, () => scheduler.trigger()));
@@ -5488,8 +5626,8 @@ var SpacesServiceImpl = class {
5488
5626
  });
5489
5627
  } else {
5490
5628
  invariant15(!credential.id, "Id on unsigned credentials is not allowed", {
5491
- F: __dxlog_file19,
5492
- L: 199,
5629
+ F: __dxlog_file20,
5630
+ L: 213,
5493
5631
  S: this,
5494
5632
  A: [
5495
5633
  "!credential.id",
@@ -5497,8 +5635,8 @@ var SpacesServiceImpl = class {
5497
5635
  ]
5498
5636
  });
5499
5637
  invariant15(this._identityManager.identity, "Identity is not available", {
5500
- F: __dxlog_file19,
5501
- L: 200,
5638
+ F: __dxlog_file20,
5639
+ L: 214,
5502
5640
  S: this,
5503
5641
  A: [
5504
5642
  "this._identityManager.identity",
@@ -5507,8 +5645,8 @@ var SpacesServiceImpl = class {
5507
5645
  });
5508
5646
  const signer = this._identityManager.identity.getIdentityCredentialSigner();
5509
5647
  invariant15(credential.issuer.equals(signer.getIssuer()), void 0, {
5510
- F: __dxlog_file19,
5511
- L: 202,
5648
+ F: __dxlog_file20,
5649
+ L: 216,
5512
5650
  S: this,
5513
5651
  A: [
5514
5652
  "credential.issuer.equals(signer.getIssuer())",
@@ -5538,6 +5676,59 @@ var SpacesServiceImpl = class {
5538
5676
  epochCredential: credential ?? void 0
5539
5677
  };
5540
5678
  }
5679
+ async admitContact(request) {
5680
+ const dataSpaceManager = await this._getDataSpaceManager();
5681
+ await dataSpaceManager.admitMember({
5682
+ spaceKey: request.spaceKey,
5683
+ identityKey: request.contact.identityKey,
5684
+ role: request.role
5685
+ });
5686
+ }
5687
+ async joinBySpaceKey({ spaceKey }) {
5688
+ const dataSpaceManager = await this._getDataSpaceManager();
5689
+ const credential = await dataSpaceManager.requestSpaceAdmissionCredential(spaceKey);
5690
+ return this._joinByAdmission({
5691
+ credential
5692
+ });
5693
+ }
5694
+ async _joinByAdmission({ credential }) {
5695
+ const assertion = getCredentialAssertion4(credential);
5696
+ invariant15(assertion["@type"] === "dxos.halo.credentials.SpaceMember", "Invalid credential", {
5697
+ F: __dxlog_file20,
5698
+ L: 250,
5699
+ S: this,
5700
+ A: [
5701
+ "assertion['@type'] === 'dxos.halo.credentials.SpaceMember'",
5702
+ "'Invalid credential'"
5703
+ ]
5704
+ });
5705
+ const myIdentity = this._identityManager.identity;
5706
+ invariant15(myIdentity && credential.subject.id.equals(myIdentity.identityKey), void 0, {
5707
+ F: __dxlog_file20,
5708
+ L: 252,
5709
+ S: this,
5710
+ A: [
5711
+ "myIdentity && credential.subject.id.equals(myIdentity.identityKey)",
5712
+ ""
5713
+ ]
5714
+ });
5715
+ const dataSpaceManager = await this._getDataSpaceManager();
5716
+ let dataSpace = dataSpaceManager.spaces.get(assertion.spaceKey);
5717
+ if (!dataSpace) {
5718
+ dataSpace = await dataSpaceManager.acceptSpace({
5719
+ spaceKey: assertion.spaceKey,
5720
+ genesisFeedKey: assertion.genesisFeedKey
5721
+ });
5722
+ await myIdentity.controlPipeline.writer.write({
5723
+ credential: {
5724
+ credential
5725
+ }
5726
+ });
5727
+ }
5728
+ return {
5729
+ space: this._serializeSpace(dataSpace)
5730
+ };
5731
+ }
5541
5732
  _serializeSpace(space) {
5542
5733
  return {
5543
5734
  id: space.id,
@@ -5555,7 +5746,8 @@ var SpacesServiceImpl = class {
5555
5746
  startDataTimeframe: void 0,
5556
5747
  currentDataTimeframe: void 0,
5557
5748
  targetDataTimeframe: void 0,
5558
- totalDataTimeframe: void 0
5749
+ totalDataTimeframe: void 0,
5750
+ spaceRootUrl: space.databaseRoot?.url
5559
5751
  },
5560
5752
  members: Array.from(space.inner.spaceState.members.values()).map((member) => {
5561
5753
  const peers = space.presence.getPeersOnline().filter(({ identityKey }) => identityKey.equals(member.key));
@@ -5599,7 +5791,7 @@ var SpacesServiceImpl = class {
5599
5791
  var getChannelId = (channel) => `user-channel/${channel}`;
5600
5792
 
5601
5793
  // packages/sdk/client-services/src/packlets/services/service-context.ts
5602
- import { Trigger as Trigger7 } from "@dxos/async";
5794
+ import { Trigger as Trigger8 } from "@dxos/async";
5603
5795
  import { Context as Context10, Resource as Resource3 } from "@dxos/context";
5604
5796
  import { getCredentialAssertion as getCredentialAssertion5 } from "@dxos/credentials";
5605
5797
  import { failUndefined as failUndefined2 } from "@dxos/debug";
@@ -5609,7 +5801,7 @@ import { FeedFactory, FeedStore } from "@dxos/feed-store";
5609
5801
  import { invariant as invariant16 } from "@dxos/invariant";
5610
5802
  import { Keyring } from "@dxos/keyring";
5611
5803
  import { PublicKey as PublicKey12 } from "@dxos/keys";
5612
- import { log as log17 } from "@dxos/log";
5804
+ import { log as log18 } from "@dxos/log";
5613
5805
  import { InvalidStorageVersionError, STORAGE_VERSION as STORAGE_VERSION2, trace as trace9 } from "@dxos/protocols";
5614
5806
  import { Invitation as Invitation8 } from "@dxos/protocols/proto/dxos/client/services";
5615
5807
  import { BlobStore } from "@dxos/teleport-extension-object-sync";
@@ -5625,7 +5817,7 @@ function _ts_decorate6(decorators, target, key, desc) {
5625
5817
  r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5626
5818
  return c > 3 && r && Object.defineProperty(target, key, r), r;
5627
5819
  }
5628
- var __dxlog_file20 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/services/service-context.ts";
5820
+ var __dxlog_file21 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/services/service-context.ts";
5629
5821
  var ServiceContext = class extends Resource3 {
5630
5822
  constructor(storage, level, networkManager, signalManager, _runtimeParams) {
5631
5823
  super();
@@ -5634,7 +5826,7 @@ var ServiceContext = class extends Resource3 {
5634
5826
  this.networkManager = networkManager;
5635
5827
  this.signalManager = signalManager;
5636
5828
  this._runtimeParams = _runtimeParams;
5637
- this.initialized = new Trigger7();
5829
+ this.initialized = new Trigger8();
5638
5830
  this._handlerFactories = /* @__PURE__ */ new Map();
5639
5831
  this._instanceId = PublicKey12.random().toHex();
5640
5832
  this.metadataStore = new MetadataStore(storage.createDirectory("metadata"));
@@ -5668,16 +5860,16 @@ var ServiceContext = class extends Resource3 {
5668
5860
  }
5669
5861
  async _open(ctx) {
5670
5862
  await this._checkStorageVersion();
5671
- log17("opening...", void 0, {
5672
- F: __dxlog_file20,
5863
+ log18("opening...", void 0, {
5864
+ F: __dxlog_file21,
5673
5865
  L: 149,
5674
5866
  S: this,
5675
5867
  C: (f, a) => f(...a)
5676
5868
  });
5677
- log17.trace("dxos.sdk.service-context.open", trace9.begin({
5869
+ log18.trace("dxos.sdk.service-context.open", trace9.begin({
5678
5870
  id: this._instanceId
5679
5871
  }), {
5680
- F: __dxlog_file20,
5872
+ F: __dxlog_file21,
5681
5873
  L: 150,
5682
5874
  S: this,
5683
5875
  C: (f, a) => f(...a)
@@ -5692,32 +5884,32 @@ var ServiceContext = class extends Resource3 {
5692
5884
  await this._initialize(ctx);
5693
5885
  }
5694
5886
  const loadedInvitations = await this.invitationsManager.loadPersistentInvitations();
5695
- log17("loaded persistent invitations", {
5887
+ log18("loaded persistent invitations", {
5696
5888
  count: loadedInvitations.invitations?.length
5697
5889
  }, {
5698
- F: __dxlog_file20,
5890
+ F: __dxlog_file21,
5699
5891
  L: 163,
5700
5892
  S: this,
5701
5893
  C: (f, a) => f(...a)
5702
5894
  });
5703
- log17.trace("dxos.sdk.service-context.open", trace9.end({
5895
+ log18.trace("dxos.sdk.service-context.open", trace9.end({
5704
5896
  id: this._instanceId
5705
5897
  }), {
5706
- F: __dxlog_file20,
5898
+ F: __dxlog_file21,
5707
5899
  L: 165,
5708
5900
  S: this,
5709
5901
  C: (f, a) => f(...a)
5710
5902
  });
5711
- log17("opened", void 0, {
5712
- F: __dxlog_file20,
5903
+ log18("opened", void 0, {
5904
+ F: __dxlog_file21,
5713
5905
  L: 166,
5714
5906
  S: this,
5715
5907
  C: (f, a) => f(...a)
5716
5908
  });
5717
5909
  }
5718
5910
  async _close(ctx) {
5719
- log17("closing...", void 0, {
5720
- F: __dxlog_file20,
5911
+ log18("closing...", void 0, {
5912
+ F: __dxlog_file21,
5721
5913
  L: 170,
5722
5914
  S: this,
5723
5915
  C: (f, a) => f(...a)
@@ -5733,8 +5925,8 @@ var ServiceContext = class extends Resource3 {
5733
5925
  await this.echoHost.close(ctx);
5734
5926
  await this.networkManager.close();
5735
5927
  await this.signalManager.close();
5736
- log17("closed", void 0, {
5737
- F: __dxlog_file20,
5928
+ log18("closed", void 0, {
5929
+ F: __dxlog_file21,
5738
5930
  L: 182,
5739
5931
  S: this,
5740
5932
  C: (f, a) => f(...a)
@@ -5742,13 +5934,16 @@ var ServiceContext = class extends Resource3 {
5742
5934
  }
5743
5935
  async createIdentity(params = {}) {
5744
5936
  const identity = await this.identityManager.createIdentity(params);
5745
- await this._initialize(new Context10());
5937
+ await this._initialize(new Context10(void 0, {
5938
+ F: __dxlog_file21,
5939
+ L: 187
5940
+ }));
5746
5941
  return identity;
5747
5942
  }
5748
5943
  getInvitationHandler(invitation) {
5749
5944
  const factory = this._handlerFactories.get(invitation.kind);
5750
5945
  invariant16(factory, `Unknown invitation kind: ${invitation.kind}`, {
5751
- F: __dxlog_file20,
5946
+ F: __dxlog_file21,
5752
5947
  L: 193,
5753
5948
  S: this,
5754
5949
  A: [
@@ -5768,7 +5963,10 @@ var ServiceContext = class extends Resource3 {
5768
5963
  }
5769
5964
  async _acceptIdentity(params) {
5770
5965
  const identity = await this.identityManager.acceptIdentity(params);
5771
- await this._initialize(new Context10());
5966
+ await this._initialize(new Context10(void 0, {
5967
+ F: __dxlog_file21,
5968
+ L: 209
5969
+ }));
5772
5970
  return identity;
5773
5971
  }
5774
5972
  async _checkStorageVersion() {
@@ -5779,8 +5977,8 @@ var ServiceContext = class extends Resource3 {
5779
5977
  }
5780
5978
  // Called when identity is created.
5781
5979
  async _initialize(ctx) {
5782
- log17("initializing spaces...", void 0, {
5783
- F: __dxlog_file20,
5980
+ log18("initializing spaces...", void 0, {
5981
+ F: __dxlog_file21,
5784
5982
  L: 224,
5785
5983
  S: this,
5786
5984
  C: (f, a) => f(...a)
@@ -5803,7 +6001,7 @@ var ServiceContext = class extends Resource3 {
5803
6001
  await this.dataSpaceManager.open();
5804
6002
  this._handlerFactories.set(Invitation8.Kind.SPACE, (invitation) => {
5805
6003
  invariant16(this.dataSpaceManager, "dataSpaceManager not initialized yet", {
5806
- F: __dxlog_file20,
6004
+ F: __dxlog_file21,
5807
6005
  L: 249,
5808
6006
  S: this,
5809
6007
  A: [
@@ -5824,10 +6022,10 @@ var ServiceContext = class extends Resource3 {
5824
6022
  return;
5825
6023
  }
5826
6024
  if (!this.dataSpaceManager) {
5827
- log17("dataSpaceManager not initialized yet, ignoring space admission", {
6025
+ log18("dataSpaceManager not initialized yet, ignoring space admission", {
5828
6026
  details: assertion
5829
6027
  }, {
5830
- F: __dxlog_file20,
6028
+ F: __dxlog_file21,
5831
6029
  L: 265,
5832
6030
  S: this,
5833
6031
  C: (f, a) => f(...a)
@@ -5835,10 +6033,10 @@ var ServiceContext = class extends Resource3 {
5835
6033
  return;
5836
6034
  }
5837
6035
  if (this.dataSpaceManager.spaces.has(assertion.spaceKey)) {
5838
- log17("space already exists, ignoring space admission", {
6036
+ log18("space already exists, ignoring space admission", {
5839
6037
  details: assertion
5840
6038
  }, {
5841
- F: __dxlog_file20,
6039
+ F: __dxlog_file21,
5842
6040
  L: 269,
5843
6041
  S: this,
5844
6042
  C: (f, a) => f(...a)
@@ -5846,10 +6044,10 @@ var ServiceContext = class extends Resource3 {
5846
6044
  return;
5847
6045
  }
5848
6046
  try {
5849
- log17("accepting space recorded in halo", {
6047
+ log18("accepting space recorded in halo", {
5850
6048
  details: assertion
5851
6049
  }, {
5852
- F: __dxlog_file20,
6050
+ F: __dxlog_file21,
5853
6051
  L: 274,
5854
6052
  S: this,
5855
6053
  C: (f, a) => f(...a)
@@ -5859,8 +6057,8 @@ var ServiceContext = class extends Resource3 {
5859
6057
  genesisFeedKey: assertion.genesisFeedKey
5860
6058
  });
5861
6059
  } catch (err) {
5862
- log17.catch(err, void 0, {
5863
- F: __dxlog_file20,
6060
+ log18.catch(err, void 0, {
6061
+ F: __dxlog_file21,
5864
6062
  L: 280,
5865
6063
  S: this,
5866
6064
  C: (f, a) => f(...a)
@@ -5907,9 +6105,9 @@ var ServiceRegistry = class {
5907
6105
  };
5908
6106
 
5909
6107
  // packages/sdk/client-services/src/packlets/locks/browser.ts
5910
- import { asyncTimeout as asyncTimeout3, Trigger as Trigger8 } from "@dxos/async";
6108
+ import { asyncTimeout as asyncTimeout2, Trigger as Trigger9 } from "@dxos/async";
5911
6109
  import { RESOURCE_LOCK_TIMEOUT } from "@dxos/client-protocol";
5912
- import { log as log18, logInfo } from "@dxos/log";
6110
+ import { log as log19, logInfo } from "@dxos/log";
5913
6111
  function _ts_decorate7(decorators, target, key, desc) {
5914
6112
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
5915
6113
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
@@ -5920,7 +6118,7 @@ function _ts_decorate7(decorators, target, key, desc) {
5920
6118
  r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5921
6119
  return c > 3 && r && Object.defineProperty(target, key, r), r;
5922
6120
  }
5923
- var __dxlog_file21 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/locks/browser.ts";
6121
+ var __dxlog_file22 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/locks/browser.ts";
5924
6122
  var Message;
5925
6123
  (function(Message2) {
5926
6124
  Message2["ACQUIRING"] = "acquiring";
@@ -5928,7 +6126,7 @@ var Message;
5928
6126
  var Lock = class {
5929
6127
  constructor({ lockKey, onAcquire, onRelease }) {
5930
6128
  this._broadcastChannel = new BroadcastChannel("vault-resource-lock");
5931
- this._releaseTrigger = new Trigger8();
6129
+ this._releaseTrigger = new Trigger9();
5932
6130
  this._lockKey = lockKey;
5933
6131
  this._onAcquire = onAcquire;
5934
6132
  this._onRelease = onRelease;
@@ -5942,29 +6140,29 @@ var Lock = class {
5942
6140
  message: "acquiring"
5943
6141
  });
5944
6142
  try {
5945
- log18("aquiring lock...", void 0, {
5946
- F: __dxlog_file21,
6143
+ log19("aquiring lock...", void 0, {
6144
+ F: __dxlog_file22,
5947
6145
  L: 42,
5948
6146
  S: this,
5949
6147
  C: (f, a) => f(...a)
5950
6148
  });
5951
- await asyncTimeout3(this._requestLock(), RESOURCE_LOCK_TIMEOUT);
5952
- log18("acquired lock", void 0, {
5953
- F: __dxlog_file21,
6149
+ await asyncTimeout2(this._requestLock(), RESOURCE_LOCK_TIMEOUT);
6150
+ log19("acquired lock", void 0, {
6151
+ F: __dxlog_file22,
5954
6152
  L: 44,
5955
6153
  S: this,
5956
6154
  C: (f, a) => f(...a)
5957
6155
  });
5958
6156
  } catch {
5959
- log18("stealing lock...", void 0, {
5960
- F: __dxlog_file21,
6157
+ log19("stealing lock...", void 0, {
6158
+ F: __dxlog_file22,
5961
6159
  L: 46,
5962
6160
  S: this,
5963
6161
  C: (f, a) => f(...a)
5964
6162
  });
5965
6163
  await this._requestLock(true);
5966
- log18("stolen lock", void 0, {
5967
- F: __dxlog_file21,
6164
+ log19("stolen lock", void 0, {
6165
+ F: __dxlog_file22,
5968
6166
  L: 48,
5969
6167
  S: this,
5970
6168
  C: (f, a) => f(...a)
@@ -5980,31 +6178,31 @@ var Lock = class {
5980
6178
  }
5981
6179
  }
5982
6180
  async _requestLock(steal = false) {
5983
- log18("requesting lock...", {
6181
+ log19("requesting lock...", {
5984
6182
  steal
5985
6183
  }, {
5986
- F: __dxlog_file21,
6184
+ F: __dxlog_file22,
5987
6185
  L: 63,
5988
6186
  S: this,
5989
6187
  C: (f, a) => f(...a)
5990
6188
  });
5991
- const acquired = new Trigger8();
6189
+ const acquired = new Trigger9();
5992
6190
  void navigator.locks.request(this._lockKey, {
5993
6191
  steal
5994
6192
  }, async () => {
5995
6193
  await this._onAcquire?.();
5996
6194
  acquired.wake();
5997
- this._releaseTrigger = new Trigger8();
6195
+ this._releaseTrigger = new Trigger9();
5998
6196
  await this._releaseTrigger.wait();
5999
- log18("releasing lock...", void 0, {
6000
- F: __dxlog_file21,
6197
+ log19("releasing lock...", void 0, {
6198
+ F: __dxlog_file22,
6001
6199
  L: 72,
6002
6200
  S: this,
6003
6201
  C: (f, a) => f(...a)
6004
6202
  });
6005
6203
  await this._onRelease?.();
6006
- log18("released lock", void 0, {
6007
- F: __dxlog_file21,
6204
+ log19("released lock", void 0, {
6205
+ F: __dxlog_file22,
6008
6206
  L: 74,
6009
6207
  S: this,
6010
6208
  C: (f, a) => f(...a)
@@ -6013,10 +6211,10 @@ var Lock = class {
6013
6211
  await this._onRelease?.();
6014
6212
  });
6015
6213
  await acquired.wait();
6016
- log18("recieved lock", {
6214
+ log19("recieved lock", {
6017
6215
  steal
6018
6216
  }, {
6019
- F: __dxlog_file21,
6217
+ F: __dxlog_file22,
6020
6218
  L: 81,
6021
6219
  S: this,
6022
6220
  C: (f, a) => f(...a)
@@ -6104,13 +6302,172 @@ var createLevel = async (config) => {
6104
6302
  return level;
6105
6303
  };
6106
6304
 
6305
+ // packages/sdk/client-services/src/packlets/storage/profile-archive.ts
6306
+ import { cbor } from "@dxos/automerge/automerge-repo";
6307
+ import { invariant as invariant17 } from "@dxos/invariant";
6308
+ import { log as log20 } from "@dxos/log";
6309
+ import { ProfileArchiveEntryType } from "@dxos/protocols";
6310
+ import { arrayToBuffer } from "@dxos/util";
6311
+ var __dxlog_file23 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/storage/profile-archive.ts";
6312
+ var encodeProfileArchive = (profile) => cbor.encode(profile);
6313
+ var decodeProfileArchive = (data) => cbor.decode(data);
6314
+ var exportProfileData = async ({ storage, level }) => {
6315
+ const archive = {
6316
+ storage: [],
6317
+ meta: {
6318
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
6319
+ }
6320
+ };
6321
+ {
6322
+ const directory = await storage.createDirectory();
6323
+ const files = await directory.list();
6324
+ log20.info("begin exporting files", {
6325
+ count: files.length
6326
+ }, {
6327
+ F: __dxlog_file23,
6328
+ L: 30,
6329
+ S: void 0,
6330
+ C: (f, a) => f(...a)
6331
+ });
6332
+ for (const filename of files) {
6333
+ const file = await directory.getOrCreateFile(filename);
6334
+ const { size } = await file.stat();
6335
+ const data = await file.read(0, size);
6336
+ archive.storage.push({
6337
+ type: ProfileArchiveEntryType.FILE,
6338
+ key: filename,
6339
+ value: data
6340
+ });
6341
+ }
6342
+ log20.info("done exporting files", {
6343
+ count: files.length
6344
+ }, {
6345
+ F: __dxlog_file23,
6346
+ L: 41,
6347
+ S: void 0,
6348
+ C: (f, a) => f(...a)
6349
+ });
6350
+ }
6351
+ {
6352
+ log20.info("begin exporting kv pairs", void 0, {
6353
+ F: __dxlog_file23,
6354
+ L: 45,
6355
+ S: void 0,
6356
+ C: (f, a) => f(...a)
6357
+ });
6358
+ const iter = await level.iterator({
6359
+ keyEncoding: "binary",
6360
+ valueEncoding: "binary"
6361
+ });
6362
+ let count = 0;
6363
+ for await (const [key, value] of iter) {
6364
+ archive.storage.push({
6365
+ type: ProfileArchiveEntryType.KEY_VALUE,
6366
+ key,
6367
+ value
6368
+ });
6369
+ count++;
6370
+ }
6371
+ log20.info("done exporting kv pairs", {
6372
+ count
6373
+ }, {
6374
+ F: __dxlog_file23,
6375
+ L: 56,
6376
+ S: void 0,
6377
+ C: (f, a) => f(...a)
6378
+ });
6379
+ }
6380
+ return archive;
6381
+ };
6382
+ var importProfileData = async ({ storage, level }, archive) => {
6383
+ let batch = level.batch();
6384
+ let count = 0;
6385
+ for (const entry2 of archive.storage) {
6386
+ switch (entry2.type) {
6387
+ case ProfileArchiveEntryType.FILE: {
6388
+ const directory = await storage.createDirectory();
6389
+ invariant17(typeof entry2.key === "string", "Invalid key type", {
6390
+ F: __dxlog_file23,
6391
+ L: 79,
6392
+ S: void 0,
6393
+ A: [
6394
+ "typeof entry.key === 'string'",
6395
+ "'Invalid key type'"
6396
+ ]
6397
+ });
6398
+ const file = await directory.getOrCreateFile(entry2.key);
6399
+ invariant17(entry2.value instanceof Uint8Array, "Invalid value type", {
6400
+ F: __dxlog_file23,
6401
+ L: 81,
6402
+ S: void 0,
6403
+ A: [
6404
+ "entry.value instanceof Uint8Array",
6405
+ "'Invalid value type'"
6406
+ ]
6407
+ });
6408
+ await file.write(0, arrayToBuffer(entry2.value));
6409
+ await file.close();
6410
+ break;
6411
+ }
6412
+ case ProfileArchiveEntryType.KEY_VALUE: {
6413
+ invariant17(entry2.key instanceof Uint8Array, "Invalid key type", {
6414
+ F: __dxlog_file23,
6415
+ L: 87,
6416
+ S: void 0,
6417
+ A: [
6418
+ "entry.key instanceof Uint8Array",
6419
+ "'Invalid key type'"
6420
+ ]
6421
+ });
6422
+ invariant17(entry2.value instanceof Uint8Array, "Invalid value type", {
6423
+ F: __dxlog_file23,
6424
+ L: 88,
6425
+ S: void 0,
6426
+ A: [
6427
+ "entry.value instanceof Uint8Array",
6428
+ "'Invalid value type'"
6429
+ ]
6430
+ });
6431
+ batch.put(entry2.key, entry2.value, {
6432
+ keyEncoding: "binary",
6433
+ valueEncoding: "binary"
6434
+ });
6435
+ break;
6436
+ }
6437
+ default:
6438
+ throw new Error(`Invalid entry type: ${entry2.type}`);
6439
+ }
6440
+ if (++count % 1e3 === 0) {
6441
+ await batch.write();
6442
+ batch = level.batch();
6443
+ log20.info("importing", {
6444
+ count,
6445
+ total: archive.storage.length,
6446
+ progress: `${(count / archive.storage.length * 100).toFixed()}%`
6447
+ }, {
6448
+ F: __dxlog_file23,
6449
+ L: 101,
6450
+ S: void 0,
6451
+ C: (f, a) => f(...a)
6452
+ });
6453
+ }
6454
+ }
6455
+ log20.info("committing changes..", void 0, {
6456
+ F: __dxlog_file23,
6457
+ L: 109,
6458
+ S: void 0,
6459
+ C: (f, a) => f(...a)
6460
+ });
6461
+ await batch.write();
6462
+ };
6463
+
6107
6464
  // packages/sdk/client-services/src/packlets/services/service-host.ts
6108
6465
  import { Event as Event9, synchronized as synchronized3 } from "@dxos/async";
6109
6466
  import { clientServiceBundle } from "@dxos/client-protocol";
6110
6467
  import { Context as Context11 } from "@dxos/context";
6111
- import { invariant as invariant18 } from "@dxos/invariant";
6112
- import { PublicKey as PublicKey16 } from "@dxos/keys";
6113
- import { log as log20 } from "@dxos/log";
6468
+ import { invariant as invariant19 } from "@dxos/invariant";
6469
+ import { PublicKey as PublicKey17 } from "@dxos/keys";
6470
+ import { log as log22 } from "@dxos/log";
6114
6471
  import { WebsocketSignalManager } from "@dxos/messaging";
6115
6472
  import { SwarmNetworkManager, createSimplePeerTransportFactory } from "@dxos/network-manager";
6116
6473
  import { trace as trace10 } from "@dxos/protocols";
@@ -6121,9 +6478,9 @@ import { WebsocketRpcClient } from "@dxos/websocket-rpc";
6121
6478
  // packages/sdk/client-services/src/packlets/devices/devices-service.ts
6122
6479
  import { EventSubscriptions as EventSubscriptions3 } from "@dxos/async";
6123
6480
  import { Stream as Stream11 } from "@dxos/codec-protobuf";
6124
- import { invariant as invariant17 } from "@dxos/invariant";
6481
+ import { invariant as invariant18 } from "@dxos/invariant";
6125
6482
  import { Device as Device2, DeviceKind as DeviceKind2 } from "@dxos/protocols/proto/dxos/client/services";
6126
- var __dxlog_file22 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/devices/devices-service.ts";
6483
+ var __dxlog_file24 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/devices/devices-service.ts";
6127
6484
  var DevicesServiceImpl = class {
6128
6485
  constructor(_identityManager) {
6129
6486
  this._identityManager = _identityManager;
@@ -6140,8 +6497,8 @@ var DevicesServiceImpl = class {
6140
6497
  devices: []
6141
6498
  });
6142
6499
  } else {
6143
- invariant17(this._identityManager.identity?.presence, "presence not present", {
6144
- F: __dxlog_file22,
6500
+ invariant18(this._identityManager.identity?.presence, "presence not present", {
6501
+ F: __dxlog_file24,
6145
6502
  L: 32,
6146
6503
  S: this,
6147
6504
  A: [
@@ -6247,28 +6604,111 @@ var findConfigs = () => {
6247
6604
  return configs.map((r) => r.instance.deref()).filter(nonNullable);
6248
6605
  };
6249
6606
 
6250
- // packages/sdk/client-services/src/packlets/logging/logging-service.ts
6251
- import { Event as Event8 } from "@dxos/async";
6607
+ // packages/sdk/client-services/src/packlets/identity/contacts-service.ts
6608
+ import { EventSubscriptions as EventSubscriptions4, scheduleTask as scheduleTask7, UpdateScheduler as UpdateScheduler2 } from "@dxos/async";
6252
6609
  import { Stream as Stream12 } from "@dxos/codec-protobuf";
6253
6610
  import { PublicKey as PublicKey15 } from "@dxos/keys";
6254
- import { getContextFromEntry, log as log19 } from "@dxos/log";
6611
+ import { ComplexMap as ComplexMap4, ComplexSet as ComplexSet6 } from "@dxos/util";
6612
+ var ContactsServiceImpl = class {
6613
+ constructor(_identityManager, _spaceManager, _dataSpaceManagerProvider) {
6614
+ this._identityManager = _identityManager;
6615
+ this._spaceManager = _spaceManager;
6616
+ this._dataSpaceManagerProvider = _dataSpaceManagerProvider;
6617
+ }
6618
+ async getContacts() {
6619
+ const identity = this._identityManager.identity;
6620
+ if (identity == null) {
6621
+ return {
6622
+ contacts: []
6623
+ };
6624
+ }
6625
+ const contacts = [
6626
+ ...this._spaceManager.spaces.values()
6627
+ ].flatMap((s) => [
6628
+ ...s.spaceState.members.values()
6629
+ ].map((m) => [
6630
+ s.key,
6631
+ m
6632
+ ])).reduce((acc, v) => {
6633
+ const [spaceKey, memberInfo] = v;
6634
+ if (memberInfo.key.equals(identity.identityKey)) {
6635
+ return acc;
6636
+ }
6637
+ const existing = acc.get(memberInfo.key);
6638
+ if (existing != null) {
6639
+ existing.profile ??= memberInfo.profile;
6640
+ existing.commonSpaces?.push(spaceKey);
6641
+ } else {
6642
+ acc.set(memberInfo.key, {
6643
+ identityKey: memberInfo.key,
6644
+ profile: memberInfo.profile,
6645
+ commonSpaces: [
6646
+ spaceKey
6647
+ ]
6648
+ });
6649
+ }
6650
+ return acc;
6651
+ }, new ComplexMap4(PublicKey15.hash));
6652
+ return {
6653
+ contacts: [
6654
+ ...contacts.values()
6655
+ ]
6656
+ };
6657
+ }
6658
+ queryContacts() {
6659
+ const subscribedSpaceKeySet = new ComplexSet6(PublicKey15.hash);
6660
+ return new Stream12(({ next, ctx }) => {
6661
+ const pushUpdateTask = new UpdateScheduler2(ctx, async () => {
6662
+ const contacts = await this.getContacts();
6663
+ next(contacts);
6664
+ }, {
6665
+ maxFrequency: 2
6666
+ });
6667
+ scheduleTask7(ctx, async () => {
6668
+ const subscriptions = new EventSubscriptions4();
6669
+ ctx.onDispose(() => subscriptions.clear());
6670
+ const subscribeToSpaceAndUpdate = () => {
6671
+ const oldSetSize = subscribedSpaceKeySet.size;
6672
+ for (const space of this._spaceManager.spaces.values()) {
6673
+ if (!subscribedSpaceKeySet.has(space.key)) {
6674
+ subscriptions.add(space.stateUpdate.on(ctx, () => pushUpdateTask.trigger()));
6675
+ subscribedSpaceKeySet.add(space.key);
6676
+ }
6677
+ }
6678
+ if (oldSetSize !== subscribedSpaceKeySet.size) {
6679
+ pushUpdateTask.trigger();
6680
+ }
6681
+ };
6682
+ const unsubscribe = (await this._dataSpaceManagerProvider()).updated.on(ctx, subscribeToSpaceAndUpdate);
6683
+ ctx.onDispose(unsubscribe);
6684
+ subscribeToSpaceAndUpdate();
6685
+ });
6686
+ });
6687
+ }
6688
+ };
6689
+
6690
+ // packages/sdk/client-services/src/packlets/logging/logging-service.ts
6691
+ import { Event as Event8 } from "@dxos/async";
6692
+ import { Stream as Stream13 } from "@dxos/codec-protobuf";
6693
+ import { PublicKey as PublicKey16 } from "@dxos/keys";
6694
+ import { getContextFromEntry, log as log21 } from "@dxos/log";
6255
6695
  import { QueryLogsRequest } from "@dxos/protocols/proto/dxos/client/services";
6256
6696
  import { getDebugName, jsonify, numericalValues, tracer } from "@dxos/util";
6257
6697
  var LoggingServiceImpl = class {
6258
6698
  constructor() {
6259
6699
  this._logs = new Event8();
6260
6700
  this._started = Date.now();
6261
- this._sessionId = PublicKey15.random().toHex();
6701
+ this._sessionId = PublicKey16.random().toHex();
6262
6702
  this._logProcessor = (_config, entry2) => {
6263
6703
  this._logs.emit(entry2);
6264
6704
  };
6265
6705
  }
6266
6706
  async open() {
6267
- log19.runtimeConfig.processors.push(this._logProcessor);
6707
+ log21.runtimeConfig.processors.push(this._logProcessor);
6268
6708
  }
6269
6709
  async close() {
6270
- const index = log19.runtimeConfig.processors.findIndex((processor) => processor === this._logProcessor);
6271
- log19.runtimeConfig.processors.splice(index, 1);
6710
+ const index = log21.runtimeConfig.processors.findIndex((processor) => processor === this._logProcessor);
6711
+ log21.runtimeConfig.processors.splice(index, 1);
6272
6712
  }
6273
6713
  async controlMetrics({ reset, record }) {
6274
6714
  if (reset) {
@@ -6294,7 +6734,7 @@ var LoggingServiceImpl = class {
6294
6734
  stats: numericalValues(events, "duration")
6295
6735
  };
6296
6736
  };
6297
- return new Stream12(({ next }) => {
6737
+ return new Stream13(({ next }) => {
6298
6738
  const update = () => {
6299
6739
  const metrics = {
6300
6740
  timestamp: /* @__PURE__ */ new Date(),
@@ -6316,7 +6756,7 @@ var LoggingServiceImpl = class {
6316
6756
  });
6317
6757
  }
6318
6758
  queryLogs(request) {
6319
- return new Stream12(({ ctx, next }) => {
6759
+ return new Stream13(({ ctx, next }) => {
6320
6760
  const handler = (entry2) => {
6321
6761
  if (LOG_PROCESSING > 0) {
6322
6762
  return;
@@ -6372,14 +6812,14 @@ var shouldLog = (entry2, request) => {
6372
6812
  var LOG_PROCESSING = 0;
6373
6813
 
6374
6814
  // packages/sdk/client-services/src/packlets/network/network-service.ts
6375
- import { Stream as Stream13 } from "@dxos/codec-protobuf";
6815
+ import { Stream as Stream14 } from "@dxos/codec-protobuf";
6376
6816
  var NetworkServiceImpl = class {
6377
6817
  constructor(networkManager, signalManager) {
6378
6818
  this.networkManager = networkManager;
6379
6819
  this.signalManager = signalManager;
6380
6820
  }
6381
6821
  queryStatus() {
6382
- return new Stream13(({ next }) => {
6822
+ return new Stream14(({ next }) => {
6383
6823
  const update = () => {
6384
6824
  next({
6385
6825
  swarm: this.networkManager.connectionState,
@@ -6405,7 +6845,7 @@ var NetworkServiceImpl = class {
6405
6845
  };
6406
6846
 
6407
6847
  // packages/sdk/client-services/src/packlets/system/system-service.ts
6408
- import { Stream as Stream14 } from "@dxos/codec-protobuf";
6848
+ import { Stream as Stream15 } from "@dxos/codec-protobuf";
6409
6849
  import { GetDiagnosticsRequest as GetDiagnosticsRequest2 } from "@dxos/protocols/proto/dxos/client/services";
6410
6850
  import { jsonKeyReplacer as jsonKeyReplacer2 } from "@dxos/util";
6411
6851
  var SystemServiceImpl = class {
@@ -6441,7 +6881,7 @@ var SystemServiceImpl = class {
6441
6881
  }
6442
6882
  // TODO(burdon): Standardize interval option in stream request?
6443
6883
  queryStatus({ interval = 3e3 } = {}) {
6444
- return new Stream14(({ next }) => {
6884
+ return new Stream15(({ next }) => {
6445
6885
  const update = () => {
6446
6886
  next({
6447
6887
  status: this._getCurrentStatus()
@@ -6472,7 +6912,7 @@ function _ts_decorate8(decorators, target, key, desc) {
6472
6912
  r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6473
6913
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6474
6914
  }
6475
- var __dxlog_file23 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/services/service-host.ts";
6915
+ var __dxlog_file25 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/services/service-host.ts";
6476
6916
  var ClientServicesHost = class {
6477
6917
  constructor({
6478
6918
  config,
@@ -6505,7 +6945,10 @@ var ClientServicesHost = class {
6505
6945
  lockKey,
6506
6946
  onAcquire: () => {
6507
6947
  if (!this._opening) {
6508
- void this.open(new Context11());
6948
+ void this.open(new Context11(void 0, {
6949
+ F: __dxlog_file25,
6950
+ L: 121
6951
+ }));
6509
6952
  }
6510
6953
  },
6511
6954
  onRelease: () => this.close()
@@ -6560,25 +7003,25 @@ var ClientServicesHost = class {
6560
7003
  * Can only be called once.
6561
7004
  */
6562
7005
  initialize({ config, ...options }) {
6563
- invariant18(!this._open, "service host is open", {
6564
- F: __dxlog_file23,
6565
- L: 186,
7006
+ invariant19(!this._open, "service host is open", {
7007
+ F: __dxlog_file25,
7008
+ L: 187,
6566
7009
  S: this,
6567
7010
  A: [
6568
7011
  "!this._open",
6569
7012
  "'service host is open'"
6570
7013
  ]
6571
7014
  });
6572
- log20("initializing...", void 0, {
6573
- F: __dxlog_file23,
6574
- L: 187,
7015
+ log22("initializing...", void 0, {
7016
+ F: __dxlog_file25,
7017
+ L: 188,
6575
7018
  S: this,
6576
7019
  C: (f, a) => f(...a)
6577
7020
  });
6578
7021
  if (config) {
6579
- invariant18(!this._config, "config already set", {
6580
- F: __dxlog_file23,
6581
- L: 190,
7022
+ invariant19(!this._config, "config already set", {
7023
+ F: __dxlog_file25,
7024
+ L: 191,
6582
7025
  S: this,
6583
7026
  A: [
6584
7027
  "!this._config",
@@ -6591,9 +7034,9 @@ var ClientServicesHost = class {
6591
7034
  }
6592
7035
  }
6593
7036
  if (!options.signalManager) {
6594
- log20.warn("running signaling without telemetry metadata.", void 0, {
6595
- F: __dxlog_file23,
6596
- L: 198,
7037
+ log22.warn("running signaling without telemetry metadata.", void 0, {
7038
+ F: __dxlog_file25,
7039
+ L: 199,
6597
7040
  S: this,
6598
7041
  C: (f, a) => f(...a)
6599
7042
  });
@@ -6602,9 +7045,9 @@ var ClientServicesHost = class {
6602
7045
  iceServers: this._config?.get("runtime.services.ice")
6603
7046
  }), signalManager = new WebsocketSignalManager(this._config?.get("runtime.services.signaling") ?? []) } = options;
6604
7047
  this._signalManager = signalManager;
6605
- invariant18(!this._networkManager, "network manager already set", {
6606
- F: __dxlog_file23,
6607
- L: 209,
7048
+ invariant19(!this._networkManager, "network manager already set", {
7049
+ F: __dxlog_file25,
7050
+ L: 210,
6608
7051
  S: this,
6609
7052
  A: [
6610
7053
  "!this._networkManager",
@@ -6616,9 +7059,9 @@ var ClientServicesHost = class {
6616
7059
  transportFactory,
6617
7060
  signalManager
6618
7061
  });
6619
- log20("initialized", void 0, {
6620
- F: __dxlog_file23,
6621
- L: 216,
7062
+ log22("initialized", void 0, {
7063
+ F: __dxlog_file25,
7064
+ L: 217,
6622
7065
  S: this,
6623
7066
  C: (f, a) => f(...a)
6624
7067
  });
@@ -6627,45 +7070,45 @@ var ClientServicesHost = class {
6627
7070
  if (this._open) {
6628
7071
  return;
6629
7072
  }
6630
- const traceId = PublicKey16.random().toHex();
6631
- log20.trace("dxos.client-services.host.open", trace10.begin({
7073
+ const traceId = PublicKey17.random().toHex();
7074
+ log22.trace("dxos.client-services.host.open", trace10.begin({
6632
7075
  id: traceId
6633
7076
  }), {
6634
- F: __dxlog_file23,
6635
- L: 227,
7077
+ F: __dxlog_file25,
7078
+ L: 228,
6636
7079
  S: this,
6637
7080
  C: (f, a) => f(...a)
6638
7081
  });
6639
- invariant18(this._config, "config not set", {
6640
- F: __dxlog_file23,
6641
- L: 229,
7082
+ invariant19(this._config, "config not set", {
7083
+ F: __dxlog_file25,
7084
+ L: 230,
6642
7085
  S: this,
6643
7086
  A: [
6644
7087
  "this._config",
6645
7088
  "'config not set'"
6646
7089
  ]
6647
7090
  });
6648
- invariant18(this._storage, "storage not set", {
6649
- F: __dxlog_file23,
6650
- L: 230,
7091
+ invariant19(this._storage, "storage not set", {
7092
+ F: __dxlog_file25,
7093
+ L: 231,
6651
7094
  S: this,
6652
7095
  A: [
6653
7096
  "this._storage",
6654
7097
  "'storage not set'"
6655
7098
  ]
6656
7099
  });
6657
- invariant18(this._signalManager, "signal manager not set", {
6658
- F: __dxlog_file23,
6659
- L: 231,
7100
+ invariant19(this._signalManager, "signal manager not set", {
7101
+ F: __dxlog_file25,
7102
+ L: 232,
6660
7103
  S: this,
6661
7104
  A: [
6662
7105
  "this._signalManager",
6663
7106
  "'signal manager not set'"
6664
7107
  ]
6665
7108
  });
6666
- invariant18(this._networkManager, "network manager not set", {
6667
- F: __dxlog_file23,
6668
- L: 232,
7109
+ invariant19(this._networkManager, "network manager not set", {
7110
+ F: __dxlog_file25,
7111
+ L: 233,
6669
7112
  S: this,
6670
7113
  A: [
6671
7114
  "this._networkManager",
@@ -6673,11 +7116,11 @@ var ClientServicesHost = class {
6673
7116
  ]
6674
7117
  });
6675
7118
  this._opening = true;
6676
- log20("opening...", {
7119
+ log22("opening...", {
6677
7120
  lockKey: this._resourceLock?.lockKey
6678
7121
  }, {
6679
- F: __dxlog_file23,
6680
- L: 235,
7122
+ F: __dxlog_file25,
7123
+ L: 236,
6681
7124
  S: this,
6682
7125
  C: (f, a) => f(...a)
6683
7126
  });
@@ -6688,16 +7131,18 @@ var ClientServicesHost = class {
6688
7131
  await this._level.open();
6689
7132
  await this._loggingService.open();
6690
7133
  this._serviceContext = new ServiceContext(this._storage, this._level, this._networkManager, this._signalManager, this._runtimeParams);
7134
+ const dataSpaceManagerProvider = async () => {
7135
+ await this._serviceContext.initialized.wait();
7136
+ return this._serviceContext.dataSpaceManager;
7137
+ };
6691
7138
  const identityService = new IdentityServiceImpl(this._serviceContext.identityManager, this._serviceContext.keyring, () => this._serviceContext.dataSpaceManager, (params) => this._createIdentity(params), (profile) => this._serviceContext.broadcastProfileUpdate(profile));
6692
7139
  this._serviceRegistry.setServices({
6693
7140
  SystemService: this._systemService,
6694
7141
  IdentityService: identityService,
7142
+ ContactsService: new ContactsServiceImpl(this._serviceContext.identityManager, this._serviceContext.spaceManager, dataSpaceManagerProvider),
6695
7143
  InvitationsService: new InvitationsServiceImpl(this._serviceContext.invitationsManager),
6696
7144
  DevicesService: new DevicesServiceImpl(this._serviceContext.identityManager),
6697
- SpacesService: new SpacesServiceImpl(this._serviceContext.identityManager, this._serviceContext.spaceManager, async () => {
6698
- await this._serviceContext.initialized.wait();
6699
- return this._serviceContext.dataSpaceManager;
6700
- }),
7145
+ SpacesService: new SpacesServiceImpl(this._serviceContext.identityManager, this._serviceContext.spaceManager, dataSpaceManagerProvider),
6701
7146
  DataService: this._serviceContext.echoHost.dataService,
6702
7147
  QueryService: this._serviceContext.echoHost.queryService,
6703
7148
  NetworkService: new NetworkServiceImpl(this._serviceContext.networkManager, this._serviceContext.signalManager),
@@ -6727,19 +7172,19 @@ var ClientServicesHost = class {
6727
7172
  this._open = true;
6728
7173
  this._statusUpdate.emit();
6729
7174
  const deviceKey = this._serviceContext.identityManager.identity?.deviceKey;
6730
- log20("opened", {
7175
+ log22("opened", {
6731
7176
  deviceKey
6732
7177
  }, {
6733
- F: __dxlog_file23,
6734
- L: 314,
7178
+ F: __dxlog_file25,
7179
+ L: 322,
6735
7180
  S: this,
6736
7181
  C: (f, a) => f(...a)
6737
7182
  });
6738
- log20.trace("dxos.client-services.host.open", trace10.end({
7183
+ log22.trace("dxos.client-services.host.open", trace10.end({
6739
7184
  id: traceId
6740
7185
  }), {
6741
- F: __dxlog_file23,
6742
- L: 315,
7186
+ F: __dxlog_file25,
7187
+ L: 323,
6743
7188
  S: this,
6744
7189
  C: (f, a) => f(...a)
6745
7190
  });
@@ -6749,11 +7194,11 @@ var ClientServicesHost = class {
6749
7194
  return;
6750
7195
  }
6751
7196
  const deviceKey = this._serviceContext.identityManager.identity?.deviceKey;
6752
- log20("closing...", {
7197
+ log22("closing...", {
6753
7198
  deviceKey
6754
7199
  }, {
6755
- F: __dxlog_file23,
6756
- L: 326,
7200
+ F: __dxlog_file25,
7201
+ L: 334,
6757
7202
  S: this,
6758
7203
  C: (f, a) => f(...a)
6759
7204
  });
@@ -6767,44 +7212,44 @@ var ClientServicesHost = class {
6767
7212
  await this._level?.close();
6768
7213
  this._open = false;
6769
7214
  this._statusUpdate.emit();
6770
- log20("closed", {
7215
+ log22("closed", {
6771
7216
  deviceKey
6772
7217
  }, {
6773
- F: __dxlog_file23,
6774
- L: 335,
7218
+ F: __dxlog_file25,
7219
+ L: 343,
6775
7220
  S: this,
6776
7221
  C: (f, a) => f(...a)
6777
7222
  });
6778
7223
  }
6779
7224
  async reset() {
6780
- const traceId = PublicKey16.random().toHex();
6781
- log20.trace("dxos.sdk.client-services-host.reset", trace10.begin({
7225
+ const traceId = PublicKey17.random().toHex();
7226
+ log22.trace("dxos.sdk.client-services-host.reset", trace10.begin({
6782
7227
  id: traceId
6783
7228
  }), {
6784
- F: __dxlog_file23,
6785
- L: 340,
7229
+ F: __dxlog_file25,
7230
+ L: 348,
6786
7231
  S: this,
6787
7232
  C: (f, a) => f(...a)
6788
7233
  });
6789
- log20.info("resetting...", void 0, {
6790
- F: __dxlog_file23,
6791
- L: 342,
7234
+ log22.info("resetting...", void 0, {
7235
+ F: __dxlog_file25,
7236
+ L: 350,
6792
7237
  S: this,
6793
7238
  C: (f, a) => f(...a)
6794
7239
  });
6795
7240
  await this._serviceContext?.close();
6796
7241
  await this._storage.reset();
6797
- log20.info("reset", void 0, {
6798
- F: __dxlog_file23,
6799
- L: 345,
7242
+ log22.info("reset", void 0, {
7243
+ F: __dxlog_file25,
7244
+ L: 353,
6800
7245
  S: this,
6801
7246
  C: (f, a) => f(...a)
6802
7247
  });
6803
- log20.trace("dxos.sdk.client-services-host.reset", trace10.end({
7248
+ log22.trace("dxos.sdk.client-services-host.reset", trace10.end({
6804
7249
  id: traceId
6805
7250
  }), {
6806
- F: __dxlog_file23,
6807
- L: 346,
7251
+ F: __dxlog_file25,
7252
+ L: 354,
6808
7253
  S: this,
6809
7254
  C: (f, a) => f(...a)
6810
7255
  });
@@ -6870,8 +7315,12 @@ export {
6870
7315
  isLocked,
6871
7316
  createStorageObjects,
6872
7317
  createLevel,
7318
+ encodeProfileArchive,
7319
+ decodeProfileArchive,
7320
+ exportProfileData,
7321
+ importProfileData,
6873
7322
  ClientServicesHost,
6874
7323
  ClientServicesProviderResource,
6875
7324
  DiagnosticsCollector
6876
7325
  };
6877
- //# sourceMappingURL=chunk-GCU4DHSQ.mjs.map
7326
+ //# sourceMappingURL=chunk-PLEBKZ2Q.mjs.map