@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.
- package/dist/lib/browser/{chunk-GCU4DHSQ.mjs → chunk-PLEBKZ2Q.mjs} +1132 -683
- package/dist/lib/browser/chunk-PLEBKZ2Q.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +13 -2
- package/dist/lib/browser/index.mjs.map +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/packlets/testing/index.mjs +10 -3
- package/dist/lib/browser/packlets/testing/index.mjs.map +1 -1
- package/dist/lib/node/{chunk-MHRJ6WZU.cjs → chunk-E6HB26ZB.cjs} +1167 -718
- package/dist/lib/node/chunk-E6HB26ZB.cjs.map +7 -0
- package/dist/lib/node/index.cjs +53 -42
- package/dist/lib/node/index.cjs.map +1 -1
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/packlets/testing/index.cjs +17 -10
- package/dist/lib/node/packlets/testing/index.cjs.map +1 -1
- package/dist/types/src/packlets/identity/contacts-service.d.ts +14 -0
- package/dist/types/src/packlets/identity/contacts-service.d.ts.map +1 -0
- package/dist/types/src/packlets/identity/identity-service.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/data-space-manager.d.ts +10 -1
- package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/epoch-migrations.d.ts +2 -2
- package/dist/types/src/packlets/spaces/epoch-migrations.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/spaces-service.d.ts +4 -1
- package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
- package/dist/types/src/packlets/storage/index.d.ts +1 -0
- package/dist/types/src/packlets/storage/index.d.ts.map +1 -1
- package/dist/types/src/packlets/storage/profile-archive.d.ts +14 -0
- package/dist/types/src/packlets/storage/profile-archive.d.ts.map +1 -0
- package/dist/types/src/version.d.ts +1 -1
- package/package.json +36 -36
- package/src/packlets/identity/contacts-service.ts +85 -0
- package/src/packlets/identity/identity-service.ts +45 -18
- package/src/packlets/invitations/invitations-handler.ts +13 -5
- package/src/packlets/invitations/space-invitation-protocol.ts +11 -32
- package/src/packlets/services/service-host.ts +12 -4
- package/src/packlets/spaces/data-space-manager.ts +55 -2
- package/src/packlets/spaces/data-space.ts +8 -6
- package/src/packlets/spaces/epoch-migrations.ts +57 -38
- package/src/packlets/spaces/spaces-service.ts +52 -2
- package/src/packlets/storage/index.ts +1 -0
- package/src/packlets/storage/profile-archive.ts +111 -0
- package/src/version.ts +1 -1
- package/dist/lib/browser/chunk-GCU4DHSQ.mjs.map +0 -7
- 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.
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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:
|
|
1558
|
-
L:
|
|
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:
|
|
1592
|
-
L:
|
|
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:
|
|
1606
|
-
L:
|
|
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
|
|
1642
|
+
let recodedDefaultSpace = false;
|
|
1643
|
+
let foundDefaultSpace = false;
|
|
1623
1644
|
const dataSpaceManager = this._dataSpaceManagerProvider();
|
|
1624
|
-
|
|
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
|
-
|
|
1636
|
-
|
|
1669
|
+
recodedDefaultSpace = true;
|
|
1670
|
+
recordedDefaultSpaceTrigger.wake();
|
|
1637
1671
|
}
|
|
1638
|
-
}
|
|
1639
|
-
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
1853
|
-
F:
|
|
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
|
-
|
|
1860
|
-
F:
|
|
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
|
-
|
|
1869
|
-
F:
|
|
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
|
-
|
|
1878
|
-
F:
|
|
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
|
-
|
|
1912
|
-
F:
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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:
|
|
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
|
-
|
|
2032
|
+
log8.trace("dxos.sdk.invitation-handler.host.introduce", trace4.begin({
|
|
1981
2033
|
id: traceId
|
|
1982
2034
|
}), {
|
|
1983
|
-
F:
|
|
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
|
-
|
|
2043
|
+
log8.warn("incorrect invitationId", {
|
|
1992
2044
|
expected: invitation.invitationId,
|
|
1993
2045
|
actual: invitationId
|
|
1994
2046
|
}, {
|
|
1995
|
-
F:
|
|
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
|
-
|
|
2058
|
+
log8("guest introduced themselves", {
|
|
2007
2059
|
guestProfile: profile
|
|
2008
2060
|
}, {
|
|
2009
|
-
F:
|
|
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
|
-
|
|
2069
|
+
log8.trace("dxos.sdk.invitation-handler.host.introduce", trace4.end({
|
|
2018
2070
|
id: traceId
|
|
2019
2071
|
}), {
|
|
2020
|
-
F:
|
|
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
|
-
|
|
2084
|
+
log8.trace("dxos.sdk.invitation-handler.host.authenticate", trace4.begin({
|
|
2033
2085
|
id: traceId
|
|
2034
2086
|
}), {
|
|
2035
|
-
F:
|
|
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
|
-
|
|
2093
|
+
log8("received authentication request", {
|
|
2042
2094
|
authCode: code
|
|
2043
2095
|
}, {
|
|
2044
|
-
F:
|
|
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
|
-
|
|
2058
|
-
F:
|
|
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
|
-
|
|
2145
|
+
log8.error("invalid authentication method", {
|
|
2094
2146
|
authMethod: invitation.authMethod
|
|
2095
2147
|
}, {
|
|
2096
|
-
F:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
2184
|
+
log8.trace("dxos.sdk.invitation-handler.host.admit", trace4.begin({
|
|
2133
2185
|
id: traceId
|
|
2134
2186
|
}), {
|
|
2135
|
-
F:
|
|
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
|
-
|
|
2201
|
+
log8.trace("dxos.sdk.invitation-handler.host.admit", trace4.end({
|
|
2150
2202
|
id: traceId
|
|
2151
2203
|
}), {
|
|
2152
|
-
F:
|
|
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
|
-
|
|
2170
|
-
F:
|
|
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
|
-
|
|
2177
|
-
F:
|
|
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
|
-
|
|
2188
|
-
F:
|
|
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
|
-
|
|
2197
|
-
F:
|
|
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
|
-
|
|
2251
|
-
F:
|
|
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
|
|
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
|
|
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:
|
|
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:
|
|
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
|
-
|
|
2358
|
+
log9("invitation connect", {
|
|
2307
2359
|
ownPeerId,
|
|
2308
2360
|
remotePeerId: firstUnknownPeer
|
|
2309
2361
|
}, {
|
|
2310
|
-
F:
|
|
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:
|
|
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
|
|
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:
|
|
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
|
-
|
|
2443
|
+
log10.trace("dxos.sdk.invitations-handler.host.onOpen", trace5.begin({
|
|
2392
2444
|
id: traceId
|
|
2393
2445
|
}), {
|
|
2394
|
-
F:
|
|
2446
|
+
F: __dxlog_file13,
|
|
2395
2447
|
L: 115,
|
|
2396
2448
|
S: this,
|
|
2397
2449
|
C: (f, a) => f(...a)
|
|
2398
2450
|
});
|
|
2399
|
-
|
|
2451
|
+
log10("connected", {
|
|
2400
2452
|
...protocol.toJSON()
|
|
2401
2453
|
}, {
|
|
2402
|
-
F:
|
|
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
|
-
|
|
2462
|
+
log10("admitted guest", {
|
|
2411
2463
|
guest: deviceKey,
|
|
2412
2464
|
...protocol.toJSON()
|
|
2413
2465
|
}, {
|
|
2414
|
-
F:
|
|
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
|
-
|
|
2472
|
+
log10.trace("dxos.sdk.invitations-handler.host.onOpen", trace5.end({
|
|
2421
2473
|
id: traceId
|
|
2422
2474
|
}), {
|
|
2423
|
-
F:
|
|
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
|
-
|
|
2487
|
+
log10("timeout", {
|
|
2436
2488
|
...protocol.toJSON()
|
|
2437
2489
|
}, {
|
|
2438
|
-
F:
|
|
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
|
-
|
|
2447
|
-
F:
|
|
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
|
-
|
|
2506
|
+
log10.trace("dxos.sdk.invitations-handler.host.onOpen", trace5.error({
|
|
2455
2507
|
id: traceId,
|
|
2456
2508
|
error: err
|
|
2457
2509
|
}), {
|
|
2458
|
-
F:
|
|
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
|
-
|
|
2521
|
+
log10("invalid role", {
|
|
2470
2522
|
...err.context
|
|
2471
2523
|
}, {
|
|
2472
|
-
F:
|
|
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
|
-
|
|
2533
|
+
log10("timeout", {
|
|
2482
2534
|
err
|
|
2483
2535
|
}, {
|
|
2484
|
-
F:
|
|
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
|
-
|
|
2493
|
-
F:
|
|
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
|
-
|
|
2507
|
-
F:
|
|
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:
|
|
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
|
-
|
|
2595
|
+
log10("should cancel invitation flow", {
|
|
2544
2596
|
isLockedByAnotherConnection,
|
|
2545
2597
|
invitationType: Invitation4.Type.DELEGATED,
|
|
2546
2598
|
triedPeers: triedPeersIds.size
|
|
2547
2599
|
}, {
|
|
2548
|
-
F:
|
|
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
|
-
|
|
2623
|
+
log10("extension disposed", {
|
|
2572
2624
|
admitted,
|
|
2573
2625
|
currentState: guardedState.current.state
|
|
2574
2626
|
}, {
|
|
2575
|
-
F:
|
|
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
|
-
|
|
2642
|
+
log10.trace("dxos.sdk.invitations-handler.guest.onOpen", trace5.begin({
|
|
2591
2643
|
id: traceId
|
|
2592
2644
|
}), {
|
|
2593
|
-
F:
|
|
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
|
-
|
|
2654
|
+
log10("connected", {
|
|
2603
2655
|
...protocol.toJSON()
|
|
2604
2656
|
}, {
|
|
2605
|
-
F:
|
|
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
|
-
|
|
2663
|
+
log10("introduce", {
|
|
2612
2664
|
...protocol.toJSON()
|
|
2613
2665
|
}, {
|
|
2614
|
-
F:
|
|
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
|
-
|
|
2675
|
+
log10("introduce response", {
|
|
2624
2676
|
...protocol.toJSON(),
|
|
2625
2677
|
response: introductionResponse
|
|
2626
2678
|
}, {
|
|
2627
|
-
F:
|
|
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
|
-
|
|
2697
|
+
log10("request admission", {
|
|
2646
2698
|
...protocol.toJSON()
|
|
2647
2699
|
}, {
|
|
2648
|
-
F:
|
|
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
|
-
|
|
2709
|
+
log10("admitted by host", {
|
|
2658
2710
|
...protocol.toJSON()
|
|
2659
2711
|
}, {
|
|
2660
|
-
F:
|
|
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
|
-
|
|
2722
|
+
log10.trace("dxos.sdk.invitations-handler.guest.onOpen", trace5.end({
|
|
2671
2723
|
id: traceId
|
|
2672
2724
|
}), {
|
|
2673
|
-
F:
|
|
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
|
-
|
|
2732
|
+
log10("timeout", {
|
|
2681
2733
|
...protocol.toJSON()
|
|
2682
2734
|
}, {
|
|
2683
|
-
F:
|
|
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
|
-
|
|
2691
|
-
F:
|
|
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
|
-
|
|
2751
|
+
log10.trace("dxos.sdk.invitations-handler.guest.onOpen", trace5.error({
|
|
2700
2752
|
id: traceId,
|
|
2701
2753
|
error: err
|
|
2702
2754
|
}), {
|
|
2703
|
-
F:
|
|
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
|
-
|
|
2768
|
+
log10("timeout", {
|
|
2717
2769
|
...protocol.toJSON()
|
|
2718
2770
|
}, {
|
|
2719
|
-
F:
|
|
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
|
-
|
|
2727
|
-
F:
|
|
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:
|
|
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
|
-
|
|
2840
|
-
|
|
2841
|
-
|
|
2842
|
-
|
|
2843
|
-
|
|
2844
|
-
|
|
2845
|
-
|
|
2846
|
-
|
|
2847
|
-
|
|
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
|
-
|
|
2862
|
-
F:
|
|
2863
|
-
L:
|
|
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
|
-
|
|
2870
|
-
F:
|
|
2871
|
-
L:
|
|
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
|
-
|
|
2951
|
+
log10("retrying invalid code", {
|
|
2887
2952
|
attempt
|
|
2888
2953
|
}, {
|
|
2889
|
-
F:
|
|
2890
|
-
L:
|
|
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
|
-
|
|
2907
|
-
F:
|
|
2908
|
-
L:
|
|
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 {
|
|
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
|
|
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
|
|
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:
|
|
3071
|
-
L:
|
|
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
|
-
|
|
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:
|
|
3106
|
-
L:
|
|
3147
|
+
F: __dxlog_file14,
|
|
3148
|
+
L: 75,
|
|
3107
3149
|
S: this,
|
|
3108
3150
|
C: (f, a) => f(...a)
|
|
3109
3151
|
});
|
|
3110
|
-
const
|
|
3111
|
-
|
|
3112
|
-
|
|
3113
|
-
|
|
3114
|
-
|
|
3115
|
-
|
|
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
|
-
|
|
3159
|
+
const space = this._spaceManager.spaces.get(this._spaceKey);
|
|
3131
3160
|
return {
|
|
3132
3161
|
space: {
|
|
3133
3162
|
credential: spaceMemberCredential,
|
|
3134
|
-
controlTimeframe: space
|
|
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:
|
|
3141
|
-
L:
|
|
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:
|
|
3151
|
-
L:
|
|
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:
|
|
3161
|
-
L:
|
|
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
|
-
|
|
3198
|
+
log11("writing delegate space invitation", {
|
|
3170
3199
|
host: this._signingContext.deviceKey,
|
|
3171
3200
|
id: invitation.invitationId
|
|
3172
3201
|
}, {
|
|
3173
|
-
F:
|
|
3174
|
-
L:
|
|
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:
|
|
3189
|
-
L:
|
|
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:
|
|
3204
|
-
L:
|
|
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:
|
|
3213
|
-
L:
|
|
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:
|
|
3223
|
-
L:
|
|
3251
|
+
F: __dxlog_file14,
|
|
3252
|
+
L: 131,
|
|
3224
3253
|
S: this,
|
|
3225
3254
|
A: [
|
|
3226
3255
|
"space",
|
|
3227
3256
|
""
|
|
3228
3257
|
]
|
|
3229
3258
|
});
|
|
3230
|
-
|
|
3259
|
+
log11("cancelling delegated space invitation", {
|
|
3231
3260
|
host: this._signingContext.deviceKey,
|
|
3232
3261
|
id: invitation.invitationId
|
|
3233
3262
|
}, {
|
|
3234
|
-
F:
|
|
3235
|
-
L:
|
|
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:
|
|
3242
|
-
L:
|
|
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:
|
|
3281
|
-
L:
|
|
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:
|
|
3292
|
-
L:
|
|
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:
|
|
3301
|
-
L:
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
3378
|
-
F:
|
|
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:
|
|
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
|
-
|
|
3420
|
-
F:
|
|
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
|
-
|
|
3452
|
-
F:
|
|
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:
|
|
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
|
-
|
|
3497
|
+
log12.warn("invalid invitation", {
|
|
3469
3498
|
invitationId
|
|
3470
3499
|
}, {
|
|
3471
|
-
F:
|
|
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
|
-
|
|
3510
|
+
log12("cancelInvitation...", {
|
|
3482
3511
|
invitationId
|
|
3483
3512
|
}, {
|
|
3484
|
-
F:
|
|
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:
|
|
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
|
-
|
|
3598
|
+
log12("complete", {
|
|
3567
3599
|
...handler.toJSON()
|
|
3568
3600
|
}, {
|
|
3569
|
-
F:
|
|
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
|
|
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
|
-
|
|
3631
|
+
log12("timeout", {
|
|
3600
3632
|
...handler.toJSON()
|
|
3601
3633
|
}, {
|
|
3602
|
-
F:
|
|
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
|
-
|
|
3613
|
-
F:
|
|
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
|
-
|
|
3662
|
+
log12("complete", {
|
|
3628
3663
|
...handler.toJSON()
|
|
3629
3664
|
}, {
|
|
3630
|
-
F:
|
|
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
|
-
|
|
3675
|
-
F:
|
|
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
|
|
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
|
|
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
|
|
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 {
|
|
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
|
|
3791
|
+
import { log as log13 } from "@dxos/log";
|
|
3760
3792
|
import { CreateEpochRequest } from "@dxos/protocols/proto/dxos/client/services";
|
|
3761
|
-
|
|
3762
|
-
var
|
|
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.
|
|
3767
|
-
await context.
|
|
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.
|
|
3777
|
-
|
|
3778
|
-
|
|
3779
|
-
|
|
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
|
-
|
|
3786
|
-
F:
|
|
3787
|
-
L:
|
|
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.
|
|
3793
|
-
|
|
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:
|
|
3799
|
-
L:
|
|
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
|
|
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:
|
|
3815
|
-
L:
|
|
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
|
|
3823
|
-
|
|
3824
|
-
|
|
3825
|
-
|
|
3826
|
-
|
|
3827
|
-
|
|
3828
|
-
|
|
3829
|
-
|
|
3830
|
-
|
|
3831
|
-
|
|
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.
|
|
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.
|
|
3843
|
-
|
|
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:
|
|
3846
|
-
L:
|
|
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
|
-
|
|
3856
|
-
|
|
3857
|
-
|
|
3858
|
-
|
|
3859
|
-
|
|
3860
|
-
|
|
3861
|
-
|
|
3862
|
-
|
|
3863
|
-
|
|
3864
|
-
|
|
3865
|
-
|
|
3866
|
-
|
|
3867
|
-
|
|
3868
|
-
|
|
3869
|
-
|
|
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.
|
|
3873
|
-
|
|
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:
|
|
3881
|
-
L:
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
3996
|
+
log14("notarize", {
|
|
3932
3997
|
credentials
|
|
3933
3998
|
}, {
|
|
3934
|
-
F:
|
|
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:
|
|
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
|
|
4013
|
+
const errors = new Trigger7();
|
|
3949
4014
|
const ctx = this._ctx.derive({
|
|
3950
4015
|
onError: (err) => {
|
|
3951
|
-
|
|
4016
|
+
log14.warn("Notarization error", {
|
|
3952
4017
|
err
|
|
3953
4018
|
}, {
|
|
3954
|
-
F:
|
|
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
|
-
|
|
4031
|
+
log14.warn("Notarization timeout", {
|
|
3967
4032
|
timeout,
|
|
3968
4033
|
peers: Array.from(this._extensions).map((extension) => extension.remotePeerId)
|
|
3969
4034
|
}, {
|
|
3970
|
-
F:
|
|
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
|
-
|
|
4055
|
+
log14.info("Exhausted all peers to notarize with", {
|
|
3991
4056
|
retryIn: retryTimeout
|
|
3992
4057
|
}, {
|
|
3993
|
-
F:
|
|
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
|
-
|
|
4068
|
+
log14("try notarizing", {
|
|
4004
4069
|
peer: peer.localPeerId,
|
|
4005
4070
|
credentialId: credentials.map((credential) => credential.id)
|
|
4006
4071
|
}, {
|
|
4007
|
-
F:
|
|
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
|
-
|
|
4016
|
-
F:
|
|
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
|
|
4086
|
+
await sleep2(successDelay);
|
|
4022
4087
|
} catch (err) {
|
|
4023
4088
|
if (!ctx.disposed && !err.message.includes(WRITER_NOT_SET_ERROR_CODE)) {
|
|
4024
|
-
|
|
4025
|
-
F:
|
|
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
|
-
|
|
4043
|
-
F:
|
|
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:
|
|
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
|
|
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:
|
|
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
|
-
|
|
4172
|
+
log14("extension opened", {
|
|
4108
4173
|
peer: extension.localPeerId
|
|
4109
4174
|
}, {
|
|
4110
|
-
F:
|
|
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
|
-
|
|
4184
|
+
log14("extension closed", {
|
|
4120
4185
|
peer: extension.localPeerId
|
|
4121
4186
|
}, {
|
|
4122
|
-
F:
|
|
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
|
|
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
|
-
|
|
4341
|
+
log15("new state", {
|
|
4274
4342
|
state: SpaceState2[this._state]
|
|
4275
4343
|
}, {
|
|
4276
|
-
F:
|
|
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
|
-
|
|
4404
|
+
log15("new state", {
|
|
4334
4405
|
state: SpaceState2[this._state]
|
|
4335
4406
|
}, {
|
|
4336
|
-
F:
|
|
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
|
-
|
|
4422
|
+
log15("new state", {
|
|
4352
4423
|
state: SpaceState2[this._state]
|
|
4353
4424
|
}, {
|
|
4354
|
-
F:
|
|
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
|
-
|
|
4387
|
-
F:
|
|
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
|
-
|
|
4395
|
-
F:
|
|
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
|
-
|
|
4475
|
+
log15("new state", {
|
|
4402
4476
|
state: SpaceState2[this._state]
|
|
4403
4477
|
}, {
|
|
4404
|
-
F:
|
|
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
|
-
|
|
4495
|
+
log15("new state", {
|
|
4422
4496
|
state: SpaceState2[this._state]
|
|
4423
4497
|
}, {
|
|
4424
|
-
F:
|
|
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
|
|
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
|
-
|
|
4512
|
+
log15("new state", {
|
|
4439
4513
|
state: SpaceState2[this._state]
|
|
4440
4514
|
}, {
|
|
4441
|
-
F:
|
|
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
|
-
|
|
4457
|
-
F:
|
|
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
|
-
|
|
4590
|
+
log15("loading automerge root doc for space", {
|
|
4517
4591
|
space: this.key,
|
|
4518
4592
|
rootUrl
|
|
4519
4593
|
}, {
|
|
4520
|
-
F:
|
|
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
|
|
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() !==
|
|
4552
|
-
this._state
|
|
4553
|
-
|
|
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
|
-
|
|
4643
|
+
log15.warn("error loading automerge root doc", {
|
|
4569
4644
|
space: this.key,
|
|
4570
4645
|
rootUrl,
|
|
4571
4646
|
err
|
|
4572
4647
|
}, {
|
|
4573
|
-
F:
|
|
4574
|
-
L:
|
|
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
|
-
|
|
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
|
-
|
|
4731
|
+
log15("new state", {
|
|
4657
4732
|
state: SpaceState2[this._state]
|
|
4658
4733
|
}, {
|
|
4659
|
-
F:
|
|
4660
|
-
L:
|
|
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
|
|
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 {
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
4864
|
-
F:
|
|
4865
|
-
L:
|
|
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
|
-
|
|
4949
|
+
log16.trace("dxos.echo.data-space-manager.open", Trace2.begin({
|
|
4870
4950
|
id: this._instanceId
|
|
4871
4951
|
}), {
|
|
4872
|
-
F:
|
|
4873
|
-
L:
|
|
4952
|
+
F: __dxlog_file19,
|
|
4953
|
+
L: 157,
|
|
4874
4954
|
S: this,
|
|
4875
4955
|
C: (f, a) => f(...a)
|
|
4876
4956
|
});
|
|
4877
|
-
|
|
4957
|
+
log16("metadata loaded", {
|
|
4878
4958
|
spaces: this._metadataStore.spaces.length
|
|
4879
4959
|
}, {
|
|
4880
|
-
F:
|
|
4881
|
-
L:
|
|
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
|
-
|
|
4967
|
+
log16("load space", {
|
|
4888
4968
|
spaceMetadata
|
|
4889
4969
|
}, {
|
|
4890
|
-
F:
|
|
4891
|
-
L:
|
|
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
|
-
|
|
4977
|
+
log16.error("Error loading space", {
|
|
4898
4978
|
spaceMetadata,
|
|
4899
4979
|
err
|
|
4900
4980
|
}, {
|
|
4901
|
-
F:
|
|
4902
|
-
L:
|
|
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
|
-
|
|
4990
|
+
log16.trace("dxos.echo.data-space-manager.open", Trace2.end({
|
|
4911
4991
|
id: this._instanceId
|
|
4912
4992
|
}), {
|
|
4913
|
-
F:
|
|
4914
|
-
L:
|
|
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
|
-
|
|
4921
|
-
F:
|
|
4922
|
-
L:
|
|
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:
|
|
4939
|
-
L:
|
|
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
|
-
|
|
5036
|
+
log16("creating space...", {
|
|
4957
5037
|
spaceKey
|
|
4958
5038
|
}, {
|
|
4959
|
-
F:
|
|
4960
|
-
L:
|
|
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:
|
|
4972
|
-
L:
|
|
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
|
|
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
|
|
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
|
-
|
|
5079
|
+
log16.warn("unknown space version", {
|
|
5000
5080
|
version: space.databaseRoot.getVersion(),
|
|
5001
5081
|
spaceId: space.id
|
|
5002
5082
|
}, {
|
|
5003
|
-
F:
|
|
5004
|
-
L:
|
|
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
|
-
|
|
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:
|
|
5039
|
-
L:
|
|
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
|
-
|
|
5132
|
+
log16("accept space", {
|
|
5053
5133
|
opts
|
|
5054
5134
|
}, {
|
|
5055
|
-
F:
|
|
5056
|
-
L:
|
|
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:
|
|
5062
|
-
L:
|
|
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:
|
|
5071
|
-
L:
|
|
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
|
|
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
|
-
|
|
5232
|
+
log16("construct space", {
|
|
5104
5233
|
metadata
|
|
5105
5234
|
}, {
|
|
5106
|
-
F:
|
|
5107
|
-
L:
|
|
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
|
-
|
|
5144
|
-
F:
|
|
5145
|
-
L:
|
|
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
|
-
|
|
5304
|
+
log16("before space ready", {
|
|
5175
5305
|
space: space.key
|
|
5176
5306
|
}, {
|
|
5177
|
-
F:
|
|
5178
|
-
L:
|
|
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
|
-
|
|
5314
|
+
log16("after space ready", {
|
|
5185
5315
|
space: space.key,
|
|
5186
5316
|
open: this._isOpen
|
|
5187
5317
|
}, {
|
|
5188
|
-
F:
|
|
5189
|
-
L:
|
|
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
|
-
|
|
5334
|
+
log16("before space close", {
|
|
5205
5335
|
space: space.key
|
|
5206
5336
|
}, {
|
|
5207
|
-
F:
|
|
5208
|
-
L:
|
|
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(
|
|
5369
|
+
void session.close().catch(log16.error);
|
|
5240
5370
|
});
|
|
5241
5371
|
closedSessions += sessionsToClose.length;
|
|
5242
5372
|
}
|
|
5243
|
-
|
|
5373
|
+
log16("processed member role changes", {
|
|
5244
5374
|
roleChangeCount: memberInfo.length,
|
|
5245
5375
|
peersOnline: presence.getPeersOnline().length,
|
|
5246
5376
|
closedSessions
|
|
5247
5377
|
}, {
|
|
5248
|
-
F:
|
|
5249
|
-
L:
|
|
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
|
-
|
|
5390
|
+
log16("closing a session with a removed peer", {
|
|
5261
5391
|
peerId: peerState.peerId
|
|
5262
5392
|
}, {
|
|
5263
|
-
F:
|
|
5264
|
-
L:
|
|
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(
|
|
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
|
|
5459
|
+
import { writeMessages as writeMessages4 } from "@dxos/feed-store";
|
|
5330
5460
|
import { invariant as invariant15 } from "@dxos/invariant";
|
|
5331
|
-
import { log as
|
|
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
|
|
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:
|
|
5380
|
-
L:
|
|
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:
|
|
5390
|
-
L:
|
|
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
|
|
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
|
-
|
|
5534
|
+
log17("update", {
|
|
5405
5535
|
spaces
|
|
5406
5536
|
}, {
|
|
5407
|
-
F:
|
|
5408
|
-
L:
|
|
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
|
-
|
|
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:
|
|
5492
|
-
L:
|
|
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:
|
|
5501
|
-
L:
|
|
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:
|
|
5511
|
-
L:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
5672
|
-
F:
|
|
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
|
-
|
|
5869
|
+
log18.trace("dxos.sdk.service-context.open", trace9.begin({
|
|
5678
5870
|
id: this._instanceId
|
|
5679
5871
|
}), {
|
|
5680
|
-
F:
|
|
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
|
-
|
|
5887
|
+
log18("loaded persistent invitations", {
|
|
5696
5888
|
count: loadedInvitations.invitations?.length
|
|
5697
5889
|
}, {
|
|
5698
|
-
F:
|
|
5890
|
+
F: __dxlog_file21,
|
|
5699
5891
|
L: 163,
|
|
5700
5892
|
S: this,
|
|
5701
5893
|
C: (f, a) => f(...a)
|
|
5702
5894
|
});
|
|
5703
|
-
|
|
5895
|
+
log18.trace("dxos.sdk.service-context.open", trace9.end({
|
|
5704
5896
|
id: this._instanceId
|
|
5705
5897
|
}), {
|
|
5706
|
-
F:
|
|
5898
|
+
F: __dxlog_file21,
|
|
5707
5899
|
L: 165,
|
|
5708
5900
|
S: this,
|
|
5709
5901
|
C: (f, a) => f(...a)
|
|
5710
5902
|
});
|
|
5711
|
-
|
|
5712
|
-
F:
|
|
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
|
-
|
|
5720
|
-
F:
|
|
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
|
-
|
|
5737
|
-
F:
|
|
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:
|
|
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
|
-
|
|
5783
|
-
F:
|
|
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:
|
|
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
|
-
|
|
6025
|
+
log18("dataSpaceManager not initialized yet, ignoring space admission", {
|
|
5828
6026
|
details: assertion
|
|
5829
6027
|
}, {
|
|
5830
|
-
F:
|
|
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
|
-
|
|
6036
|
+
log18("space already exists, ignoring space admission", {
|
|
5839
6037
|
details: assertion
|
|
5840
6038
|
}, {
|
|
5841
|
-
F:
|
|
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
|
-
|
|
6047
|
+
log18("accepting space recorded in halo", {
|
|
5850
6048
|
details: assertion
|
|
5851
6049
|
}, {
|
|
5852
|
-
F:
|
|
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
|
-
|
|
5863
|
-
F:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
5946
|
-
F:
|
|
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
|
|
5952
|
-
|
|
5953
|
-
F:
|
|
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
|
-
|
|
5960
|
-
F:
|
|
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
|
-
|
|
5967
|
-
F:
|
|
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
|
-
|
|
6181
|
+
log19("requesting lock...", {
|
|
5984
6182
|
steal
|
|
5985
6183
|
}, {
|
|
5986
|
-
F:
|
|
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
|
|
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
|
|
6195
|
+
this._releaseTrigger = new Trigger9();
|
|
5998
6196
|
await this._releaseTrigger.wait();
|
|
5999
|
-
|
|
6000
|
-
F:
|
|
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
|
-
|
|
6007
|
-
F:
|
|
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
|
-
|
|
6214
|
+
log19("recieved lock", {
|
|
6017
6215
|
steal
|
|
6018
6216
|
}, {
|
|
6019
|
-
F:
|
|
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
|
|
6112
|
-
import { PublicKey as
|
|
6113
|
-
import { log as
|
|
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
|
|
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
|
|
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
|
-
|
|
6144
|
-
F:
|
|
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/
|
|
6251
|
-
import {
|
|
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 {
|
|
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 =
|
|
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
|
-
|
|
6707
|
+
log21.runtimeConfig.processors.push(this._logProcessor);
|
|
6268
6708
|
}
|
|
6269
6709
|
async close() {
|
|
6270
|
-
const index =
|
|
6271
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
6564
|
-
F:
|
|
6565
|
-
L:
|
|
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
|
-
|
|
6573
|
-
F:
|
|
6574
|
-
L:
|
|
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
|
-
|
|
6580
|
-
F:
|
|
6581
|
-
L:
|
|
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
|
-
|
|
6595
|
-
F:
|
|
6596
|
-
L:
|
|
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
|
-
|
|
6606
|
-
F:
|
|
6607
|
-
L:
|
|
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
|
-
|
|
6620
|
-
F:
|
|
6621
|
-
L:
|
|
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 =
|
|
6631
|
-
|
|
7073
|
+
const traceId = PublicKey17.random().toHex();
|
|
7074
|
+
log22.trace("dxos.client-services.host.open", trace10.begin({
|
|
6632
7075
|
id: traceId
|
|
6633
7076
|
}), {
|
|
6634
|
-
F:
|
|
6635
|
-
L:
|
|
7077
|
+
F: __dxlog_file25,
|
|
7078
|
+
L: 228,
|
|
6636
7079
|
S: this,
|
|
6637
7080
|
C: (f, a) => f(...a)
|
|
6638
7081
|
});
|
|
6639
|
-
|
|
6640
|
-
F:
|
|
6641
|
-
L:
|
|
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
|
-
|
|
6649
|
-
F:
|
|
6650
|
-
L:
|
|
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
|
-
|
|
6658
|
-
F:
|
|
6659
|
-
L:
|
|
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
|
-
|
|
6667
|
-
F:
|
|
6668
|
-
L:
|
|
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
|
-
|
|
7119
|
+
log22("opening...", {
|
|
6677
7120
|
lockKey: this._resourceLock?.lockKey
|
|
6678
7121
|
}, {
|
|
6679
|
-
F:
|
|
6680
|
-
L:
|
|
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,
|
|
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
|
-
|
|
7175
|
+
log22("opened", {
|
|
6731
7176
|
deviceKey
|
|
6732
7177
|
}, {
|
|
6733
|
-
F:
|
|
6734
|
-
L:
|
|
7178
|
+
F: __dxlog_file25,
|
|
7179
|
+
L: 322,
|
|
6735
7180
|
S: this,
|
|
6736
7181
|
C: (f, a) => f(...a)
|
|
6737
7182
|
});
|
|
6738
|
-
|
|
7183
|
+
log22.trace("dxos.client-services.host.open", trace10.end({
|
|
6739
7184
|
id: traceId
|
|
6740
7185
|
}), {
|
|
6741
|
-
F:
|
|
6742
|
-
L:
|
|
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
|
-
|
|
7197
|
+
log22("closing...", {
|
|
6753
7198
|
deviceKey
|
|
6754
7199
|
}, {
|
|
6755
|
-
F:
|
|
6756
|
-
L:
|
|
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
|
-
|
|
7215
|
+
log22("closed", {
|
|
6771
7216
|
deviceKey
|
|
6772
7217
|
}, {
|
|
6773
|
-
F:
|
|
6774
|
-
L:
|
|
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 =
|
|
6781
|
-
|
|
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:
|
|
6785
|
-
L:
|
|
7229
|
+
F: __dxlog_file25,
|
|
7230
|
+
L: 348,
|
|
6786
7231
|
S: this,
|
|
6787
7232
|
C: (f, a) => f(...a)
|
|
6788
7233
|
});
|
|
6789
|
-
|
|
6790
|
-
F:
|
|
6791
|
-
L:
|
|
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
|
-
|
|
6798
|
-
F:
|
|
6799
|
-
L:
|
|
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
|
-
|
|
7248
|
+
log22.trace("dxos.sdk.client-services-host.reset", trace10.end({
|
|
6804
7249
|
id: traceId
|
|
6805
7250
|
}), {
|
|
6806
|
-
F:
|
|
6807
|
-
L:
|
|
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-
|
|
7326
|
+
//# sourceMappingURL=chunk-PLEBKZ2Q.mjs.map
|