@ledgerhq/revault-sdk 0.25.1 → 0.26.0
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/lib/bake.cjs +1 -3
- package/lib/bake.d.cts +1 -1
- package/lib/bake.d.ts +1 -1
- package/lib/bake.js +1 -1
- package/lib/crypto-BDBF_rfw.cjs +0 -2
- package/lib/device-0lcfYGHr.cjs +0 -2
- package/lib/engine.cjs +16 -2
- package/lib/engine.cjs.map +1 -1
- package/lib/engine.d.cts +2 -2
- package/lib/engine.d.ts +2 -2
- package/lib/engine.js +16 -0
- package/lib/engine.js.map +1 -1
- package/lib/{index-C4Xjiv0k.d.cts → index-DOn7RPPt.d.cts} +1 -1
- package/lib/{index-CVjhPoZh.d.ts → index-U0iFMp3g.d.ts} +1 -1
- package/lib/onboarding.cjs +56 -22
- package/lib/onboarding.cjs.map +1 -1
- package/lib/onboarding.d.cts +193 -26
- package/lib/onboarding.d.ts +193 -26
- package/lib/onboarding.js +56 -20
- package/lib/onboarding.js.map +1 -1
- package/lib/{types-4CfR5--z.d.ts → types-BXkDuD6i.d.ts} +4 -0
- package/lib/{types-Byf9V35t.d.cts → types-Ngwgtu_U.d.cts} +4 -0
- package/lib/utils-DbSFXp4c.cjs +0 -2
- package/package.json +2 -2
package/lib/onboarding.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as Logger } from "./logger-DWLViq7U.js";
|
|
2
|
-
import { d as Engine, y as WithOnboarding } from "./types-
|
|
2
|
+
import { d as Engine, y as WithOnboarding } from "./types-BXkDuD6i.js";
|
|
3
3
|
import { OnboardingFullStateResponse, OnboardingStep } from "@ledgerhq/revault-api";
|
|
4
4
|
|
|
5
5
|
//#region src/onboarding.d.ts
|
|
@@ -13,10 +13,12 @@ declare const STEPS: {
|
|
|
13
13
|
}: {
|
|
14
14
|
engine: Engine<WithOnboarding>;
|
|
15
15
|
state: OnboardingFullStateResponse;
|
|
16
|
+
externalSigners?: string[];
|
|
16
17
|
}, logger: Logger) => Promise<{
|
|
17
18
|
id: string;
|
|
18
19
|
workspaceName: string;
|
|
19
|
-
|
|
20
|
+
hsmHostingMode: "HOSTED" | "ON_PREM";
|
|
21
|
+
step: "COMPLETED" | "PENDING_DEVICE_CLAIMS" | "PENDING_EXTERNAL_SIGNERS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION_INIT" | "PENDING_REVIEW_BY_MASTER_ADMINS" | "PENDING_SEED_PROVISIONING" | "PENDING_SHARED_OWNERS_REGISTRATION" | "PENDING_SHARED_OWNERS_REGISTRATION_INIT" | "PENDING_WORKSPACE_INITIALIZATION" | "PENDING_WRAPPING_KEY_PROVISIONING";
|
|
20
22
|
claimedDevices: {
|
|
21
23
|
pubKey: string;
|
|
22
24
|
deviceUserId: string;
|
|
@@ -96,6 +98,21 @@ declare const STEPS: {
|
|
|
96
98
|
};
|
|
97
99
|
signature: string | null;
|
|
98
100
|
} | null;
|
|
101
|
+
reviewOfExternalSigners: {
|
|
102
|
+
challenge: {
|
|
103
|
+
challengeType: "PSD";
|
|
104
|
+
wActions: string[];
|
|
105
|
+
handshake: string;
|
|
106
|
+
handshakeAttestation: {
|
|
107
|
+
codeHash: string;
|
|
108
|
+
attestationPub: string;
|
|
109
|
+
certificate: string;
|
|
110
|
+
signature: string;
|
|
111
|
+
};
|
|
112
|
+
partitionId: string;
|
|
113
|
+
};
|
|
114
|
+
signature: string | null;
|
|
115
|
+
} | null;
|
|
99
116
|
}[];
|
|
100
117
|
sharedOwners: {
|
|
101
118
|
name: string;
|
|
@@ -188,10 +205,12 @@ declare const STEPS: {
|
|
|
188
205
|
}: {
|
|
189
206
|
engine: Engine<WithOnboarding>;
|
|
190
207
|
state: OnboardingFullStateResponse;
|
|
208
|
+
externalSigners?: string[];
|
|
191
209
|
}, logger: Logger) => Promise<{
|
|
192
210
|
id: string;
|
|
193
211
|
workspaceName: string;
|
|
194
|
-
|
|
212
|
+
hsmHostingMode: "HOSTED" | "ON_PREM";
|
|
213
|
+
step: "COMPLETED" | "PENDING_DEVICE_CLAIMS" | "PENDING_EXTERNAL_SIGNERS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION_INIT" | "PENDING_REVIEW_BY_MASTER_ADMINS" | "PENDING_SEED_PROVISIONING" | "PENDING_SHARED_OWNERS_REGISTRATION" | "PENDING_SHARED_OWNERS_REGISTRATION_INIT" | "PENDING_WORKSPACE_INITIALIZATION" | "PENDING_WRAPPING_KEY_PROVISIONING";
|
|
195
214
|
claimedDevices: {
|
|
196
215
|
pubKey: string;
|
|
197
216
|
deviceUserId: string;
|
|
@@ -271,6 +290,21 @@ declare const STEPS: {
|
|
|
271
290
|
};
|
|
272
291
|
signature: string | null;
|
|
273
292
|
} | null;
|
|
293
|
+
reviewOfExternalSigners: {
|
|
294
|
+
challenge: {
|
|
295
|
+
challengeType: "PSD";
|
|
296
|
+
wActions: string[];
|
|
297
|
+
handshake: string;
|
|
298
|
+
handshakeAttestation: {
|
|
299
|
+
codeHash: string;
|
|
300
|
+
attestationPub: string;
|
|
301
|
+
certificate: string;
|
|
302
|
+
signature: string;
|
|
303
|
+
};
|
|
304
|
+
partitionId: string;
|
|
305
|
+
};
|
|
306
|
+
signature: string | null;
|
|
307
|
+
} | null;
|
|
274
308
|
}[];
|
|
275
309
|
sharedOwners: {
|
|
276
310
|
name: string;
|
|
@@ -363,10 +397,12 @@ declare const STEPS: {
|
|
|
363
397
|
}: {
|
|
364
398
|
engine: Engine<WithOnboarding>;
|
|
365
399
|
state: OnboardingFullStateResponse;
|
|
400
|
+
externalSigners?: string[];
|
|
366
401
|
}) => Promise<{
|
|
367
402
|
id: string;
|
|
368
403
|
workspaceName: string;
|
|
369
|
-
|
|
404
|
+
hsmHostingMode: "HOSTED" | "ON_PREM";
|
|
405
|
+
step: "COMPLETED" | "PENDING_DEVICE_CLAIMS" | "PENDING_EXTERNAL_SIGNERS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION_INIT" | "PENDING_REVIEW_BY_MASTER_ADMINS" | "PENDING_SEED_PROVISIONING" | "PENDING_SHARED_OWNERS_REGISTRATION" | "PENDING_SHARED_OWNERS_REGISTRATION_INIT" | "PENDING_WORKSPACE_INITIALIZATION" | "PENDING_WRAPPING_KEY_PROVISIONING";
|
|
370
406
|
claimedDevices: {
|
|
371
407
|
pubKey: string;
|
|
372
408
|
deviceUserId: string;
|
|
@@ -446,6 +482,21 @@ declare const STEPS: {
|
|
|
446
482
|
};
|
|
447
483
|
signature: string | null;
|
|
448
484
|
} | null;
|
|
485
|
+
reviewOfExternalSigners: {
|
|
486
|
+
challenge: {
|
|
487
|
+
challengeType: "PSD";
|
|
488
|
+
wActions: string[];
|
|
489
|
+
handshake: string;
|
|
490
|
+
handshakeAttestation: {
|
|
491
|
+
codeHash: string;
|
|
492
|
+
attestationPub: string;
|
|
493
|
+
certificate: string;
|
|
494
|
+
signature: string;
|
|
495
|
+
};
|
|
496
|
+
partitionId: string;
|
|
497
|
+
};
|
|
498
|
+
signature: string | null;
|
|
499
|
+
} | null;
|
|
449
500
|
}[];
|
|
450
501
|
sharedOwners: {
|
|
451
502
|
name: string;
|
|
@@ -538,10 +589,12 @@ declare const STEPS: {
|
|
|
538
589
|
}: {
|
|
539
590
|
engine: Engine<WithOnboarding>;
|
|
540
591
|
state: OnboardingFullStateResponse;
|
|
592
|
+
externalSigners?: string[];
|
|
541
593
|
}, logger: Logger) => Promise<{
|
|
542
594
|
id: string;
|
|
543
595
|
workspaceName: string;
|
|
544
|
-
|
|
596
|
+
hsmHostingMode: "HOSTED" | "ON_PREM";
|
|
597
|
+
step: "COMPLETED" | "PENDING_DEVICE_CLAIMS" | "PENDING_EXTERNAL_SIGNERS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION_INIT" | "PENDING_REVIEW_BY_MASTER_ADMINS" | "PENDING_SEED_PROVISIONING" | "PENDING_SHARED_OWNERS_REGISTRATION" | "PENDING_SHARED_OWNERS_REGISTRATION_INIT" | "PENDING_WORKSPACE_INITIALIZATION" | "PENDING_WRAPPING_KEY_PROVISIONING";
|
|
545
598
|
claimedDevices: {
|
|
546
599
|
pubKey: string;
|
|
547
600
|
deviceUserId: string;
|
|
@@ -621,6 +674,21 @@ declare const STEPS: {
|
|
|
621
674
|
};
|
|
622
675
|
signature: string | null;
|
|
623
676
|
} | null;
|
|
677
|
+
reviewOfExternalSigners: {
|
|
678
|
+
challenge: {
|
|
679
|
+
challengeType: "PSD";
|
|
680
|
+
wActions: string[];
|
|
681
|
+
handshake: string;
|
|
682
|
+
handshakeAttestation: {
|
|
683
|
+
codeHash: string;
|
|
684
|
+
attestationPub: string;
|
|
685
|
+
certificate: string;
|
|
686
|
+
signature: string;
|
|
687
|
+
};
|
|
688
|
+
partitionId: string;
|
|
689
|
+
};
|
|
690
|
+
signature: string | null;
|
|
691
|
+
} | null;
|
|
624
692
|
}[];
|
|
625
693
|
sharedOwners: {
|
|
626
694
|
name: string;
|
|
@@ -713,10 +781,12 @@ declare const STEPS: {
|
|
|
713
781
|
}: {
|
|
714
782
|
engine: Engine<WithOnboarding>;
|
|
715
783
|
state: OnboardingFullStateResponse;
|
|
784
|
+
externalSigners?: string[];
|
|
716
785
|
}) => Promise<{
|
|
717
786
|
id: string;
|
|
718
787
|
workspaceName: string;
|
|
719
|
-
|
|
788
|
+
hsmHostingMode: "HOSTED" | "ON_PREM";
|
|
789
|
+
step: "COMPLETED" | "PENDING_DEVICE_CLAIMS" | "PENDING_EXTERNAL_SIGNERS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION_INIT" | "PENDING_REVIEW_BY_MASTER_ADMINS" | "PENDING_SEED_PROVISIONING" | "PENDING_SHARED_OWNERS_REGISTRATION" | "PENDING_SHARED_OWNERS_REGISTRATION_INIT" | "PENDING_WORKSPACE_INITIALIZATION" | "PENDING_WRAPPING_KEY_PROVISIONING";
|
|
720
790
|
claimedDevices: {
|
|
721
791
|
pubKey: string;
|
|
722
792
|
deviceUserId: string;
|
|
@@ -796,6 +866,21 @@ declare const STEPS: {
|
|
|
796
866
|
};
|
|
797
867
|
signature: string | null;
|
|
798
868
|
} | null;
|
|
869
|
+
reviewOfExternalSigners: {
|
|
870
|
+
challenge: {
|
|
871
|
+
challengeType: "PSD";
|
|
872
|
+
wActions: string[];
|
|
873
|
+
handshake: string;
|
|
874
|
+
handshakeAttestation: {
|
|
875
|
+
codeHash: string;
|
|
876
|
+
attestationPub: string;
|
|
877
|
+
certificate: string;
|
|
878
|
+
signature: string;
|
|
879
|
+
};
|
|
880
|
+
partitionId: string;
|
|
881
|
+
};
|
|
882
|
+
signature: string | null;
|
|
883
|
+
} | null;
|
|
799
884
|
}[];
|
|
800
885
|
sharedOwners: {
|
|
801
886
|
name: string;
|
|
@@ -888,10 +973,12 @@ declare const STEPS: {
|
|
|
888
973
|
}: {
|
|
889
974
|
engine: Engine<WithOnboarding>;
|
|
890
975
|
state: OnboardingFullStateResponse;
|
|
976
|
+
externalSigners?: string[];
|
|
891
977
|
}, logger: Logger) => Promise<{
|
|
892
978
|
id: string;
|
|
893
979
|
workspaceName: string;
|
|
894
|
-
|
|
980
|
+
hsmHostingMode: "HOSTED" | "ON_PREM";
|
|
981
|
+
step: "COMPLETED" | "PENDING_DEVICE_CLAIMS" | "PENDING_EXTERNAL_SIGNERS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION_INIT" | "PENDING_REVIEW_BY_MASTER_ADMINS" | "PENDING_SEED_PROVISIONING" | "PENDING_SHARED_OWNERS_REGISTRATION" | "PENDING_SHARED_OWNERS_REGISTRATION_INIT" | "PENDING_WORKSPACE_INITIALIZATION" | "PENDING_WRAPPING_KEY_PROVISIONING";
|
|
895
982
|
claimedDevices: {
|
|
896
983
|
pubKey: string;
|
|
897
984
|
deviceUserId: string;
|
|
@@ -971,6 +1058,21 @@ declare const STEPS: {
|
|
|
971
1058
|
};
|
|
972
1059
|
signature: string | null;
|
|
973
1060
|
} | null;
|
|
1061
|
+
reviewOfExternalSigners: {
|
|
1062
|
+
challenge: {
|
|
1063
|
+
challengeType: "PSD";
|
|
1064
|
+
wActions: string[];
|
|
1065
|
+
handshake: string;
|
|
1066
|
+
handshakeAttestation: {
|
|
1067
|
+
codeHash: string;
|
|
1068
|
+
attestationPub: string;
|
|
1069
|
+
certificate: string;
|
|
1070
|
+
signature: string;
|
|
1071
|
+
};
|
|
1072
|
+
partitionId: string;
|
|
1073
|
+
};
|
|
1074
|
+
signature: string | null;
|
|
1075
|
+
} | null;
|
|
974
1076
|
}[];
|
|
975
1077
|
sharedOwners: {
|
|
976
1078
|
name: string;
|
|
@@ -1063,10 +1165,12 @@ declare const STEPS: {
|
|
|
1063
1165
|
}: {
|
|
1064
1166
|
engine: Engine<WithOnboarding>;
|
|
1065
1167
|
state: OnboardingFullStateResponse;
|
|
1168
|
+
externalSigners?: string[];
|
|
1066
1169
|
}, logger: Logger) => Promise<{
|
|
1067
1170
|
id: string;
|
|
1068
1171
|
workspaceName: string;
|
|
1069
|
-
|
|
1172
|
+
hsmHostingMode: "HOSTED" | "ON_PREM";
|
|
1173
|
+
step: "COMPLETED" | "PENDING_DEVICE_CLAIMS" | "PENDING_EXTERNAL_SIGNERS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION_INIT" | "PENDING_REVIEW_BY_MASTER_ADMINS" | "PENDING_SEED_PROVISIONING" | "PENDING_SHARED_OWNERS_REGISTRATION" | "PENDING_SHARED_OWNERS_REGISTRATION_INIT" | "PENDING_WORKSPACE_INITIALIZATION" | "PENDING_WRAPPING_KEY_PROVISIONING";
|
|
1070
1174
|
claimedDevices: {
|
|
1071
1175
|
pubKey: string;
|
|
1072
1176
|
deviceUserId: string;
|
|
@@ -1146,6 +1250,21 @@ declare const STEPS: {
|
|
|
1146
1250
|
};
|
|
1147
1251
|
signature: string | null;
|
|
1148
1252
|
} | null;
|
|
1253
|
+
reviewOfExternalSigners: {
|
|
1254
|
+
challenge: {
|
|
1255
|
+
challengeType: "PSD";
|
|
1256
|
+
wActions: string[];
|
|
1257
|
+
handshake: string;
|
|
1258
|
+
handshakeAttestation: {
|
|
1259
|
+
codeHash: string;
|
|
1260
|
+
attestationPub: string;
|
|
1261
|
+
certificate: string;
|
|
1262
|
+
signature: string;
|
|
1263
|
+
};
|
|
1264
|
+
partitionId: string;
|
|
1265
|
+
};
|
|
1266
|
+
signature: string | null;
|
|
1267
|
+
} | null;
|
|
1149
1268
|
}[];
|
|
1150
1269
|
sharedOwners: {
|
|
1151
1270
|
name: string;
|
|
@@ -1229,19 +1348,19 @@ declare const STEPS: {
|
|
|
1229
1348
|
createdAt: Date;
|
|
1230
1349
|
completedAt: Date | null;
|
|
1231
1350
|
}>;
|
|
1232
|
-
|
|
1233
|
-
* Seed provisioning
|
|
1234
|
-
*/
|
|
1235
|
-
readonly PENDING_SEED_PROVISIONING: ({
|
|
1351
|
+
readonly PENDING_EXTERNAL_SIGNERS_REGISTRATION: ({
|
|
1236
1352
|
state,
|
|
1237
|
-
engine
|
|
1353
|
+
engine,
|
|
1354
|
+
externalSigners
|
|
1238
1355
|
}: {
|
|
1239
1356
|
engine: Engine<WithOnboarding>;
|
|
1240
1357
|
state: OnboardingFullStateResponse;
|
|
1358
|
+
externalSigners?: string[];
|
|
1241
1359
|
}, logger: Logger) => Promise<{
|
|
1242
1360
|
id: string;
|
|
1243
1361
|
workspaceName: string;
|
|
1244
|
-
|
|
1362
|
+
hsmHostingMode: "HOSTED" | "ON_PREM";
|
|
1363
|
+
step: "COMPLETED" | "PENDING_DEVICE_CLAIMS" | "PENDING_EXTERNAL_SIGNERS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION_INIT" | "PENDING_REVIEW_BY_MASTER_ADMINS" | "PENDING_SEED_PROVISIONING" | "PENDING_SHARED_OWNERS_REGISTRATION" | "PENDING_SHARED_OWNERS_REGISTRATION_INIT" | "PENDING_WORKSPACE_INITIALIZATION" | "PENDING_WRAPPING_KEY_PROVISIONING";
|
|
1245
1364
|
claimedDevices: {
|
|
1246
1365
|
pubKey: string;
|
|
1247
1366
|
deviceUserId: string;
|
|
@@ -1321,6 +1440,21 @@ declare const STEPS: {
|
|
|
1321
1440
|
};
|
|
1322
1441
|
signature: string | null;
|
|
1323
1442
|
} | null;
|
|
1443
|
+
reviewOfExternalSigners: {
|
|
1444
|
+
challenge: {
|
|
1445
|
+
challengeType: "PSD";
|
|
1446
|
+
wActions: string[];
|
|
1447
|
+
handshake: string;
|
|
1448
|
+
handshakeAttestation: {
|
|
1449
|
+
codeHash: string;
|
|
1450
|
+
attestationPub: string;
|
|
1451
|
+
certificate: string;
|
|
1452
|
+
signature: string;
|
|
1453
|
+
};
|
|
1454
|
+
partitionId: string;
|
|
1455
|
+
};
|
|
1456
|
+
signature: string | null;
|
|
1457
|
+
} | null;
|
|
1324
1458
|
}[];
|
|
1325
1459
|
sharedOwners: {
|
|
1326
1460
|
name: string;
|
|
@@ -1405,18 +1539,20 @@ declare const STEPS: {
|
|
|
1405
1539
|
completedAt: Date | null;
|
|
1406
1540
|
}>;
|
|
1407
1541
|
/**
|
|
1408
|
-
*
|
|
1542
|
+
* Seed provisioning
|
|
1409
1543
|
*/
|
|
1410
|
-
readonly
|
|
1544
|
+
readonly PENDING_SEED_PROVISIONING: ({
|
|
1411
1545
|
state,
|
|
1412
1546
|
engine
|
|
1413
1547
|
}: {
|
|
1414
1548
|
engine: Engine<WithOnboarding>;
|
|
1415
1549
|
state: OnboardingFullStateResponse;
|
|
1416
|
-
|
|
1550
|
+
externalSigners?: string[];
|
|
1551
|
+
}, logger: Logger) => Promise<{
|
|
1417
1552
|
id: string;
|
|
1418
1553
|
workspaceName: string;
|
|
1419
|
-
|
|
1554
|
+
hsmHostingMode: "HOSTED" | "ON_PREM";
|
|
1555
|
+
step: "COMPLETED" | "PENDING_DEVICE_CLAIMS" | "PENDING_EXTERNAL_SIGNERS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION_INIT" | "PENDING_REVIEW_BY_MASTER_ADMINS" | "PENDING_SEED_PROVISIONING" | "PENDING_SHARED_OWNERS_REGISTRATION" | "PENDING_SHARED_OWNERS_REGISTRATION_INIT" | "PENDING_WORKSPACE_INITIALIZATION" | "PENDING_WRAPPING_KEY_PROVISIONING";
|
|
1420
1556
|
claimedDevices: {
|
|
1421
1557
|
pubKey: string;
|
|
1422
1558
|
deviceUserId: string;
|
|
@@ -1496,6 +1632,21 @@ declare const STEPS: {
|
|
|
1496
1632
|
};
|
|
1497
1633
|
signature: string | null;
|
|
1498
1634
|
} | null;
|
|
1635
|
+
reviewOfExternalSigners: {
|
|
1636
|
+
challenge: {
|
|
1637
|
+
challengeType: "PSD";
|
|
1638
|
+
wActions: string[];
|
|
1639
|
+
handshake: string;
|
|
1640
|
+
handshakeAttestation: {
|
|
1641
|
+
codeHash: string;
|
|
1642
|
+
attestationPub: string;
|
|
1643
|
+
certificate: string;
|
|
1644
|
+
signature: string;
|
|
1645
|
+
};
|
|
1646
|
+
partitionId: string;
|
|
1647
|
+
};
|
|
1648
|
+
signature: string | null;
|
|
1649
|
+
} | null;
|
|
1499
1650
|
}[];
|
|
1500
1651
|
sharedOwners: {
|
|
1501
1652
|
name: string;
|
|
@@ -1580,17 +1731,20 @@ declare const STEPS: {
|
|
|
1580
1731
|
completedAt: Date | null;
|
|
1581
1732
|
}>;
|
|
1582
1733
|
/**
|
|
1583
|
-
*
|
|
1734
|
+
* Workspace initialization
|
|
1584
1735
|
*/
|
|
1585
|
-
readonly
|
|
1586
|
-
state
|
|
1736
|
+
readonly PENDING_WORKSPACE_INITIALIZATION: ({
|
|
1737
|
+
state,
|
|
1738
|
+
engine
|
|
1587
1739
|
}: {
|
|
1588
1740
|
engine: Engine<WithOnboarding>;
|
|
1589
1741
|
state: OnboardingFullStateResponse;
|
|
1742
|
+
externalSigners?: string[];
|
|
1590
1743
|
}) => Promise<{
|
|
1591
1744
|
id: string;
|
|
1592
1745
|
workspaceName: string;
|
|
1593
|
-
|
|
1746
|
+
hsmHostingMode: "HOSTED" | "ON_PREM";
|
|
1747
|
+
step: "COMPLETED" | "PENDING_DEVICE_CLAIMS" | "PENDING_EXTERNAL_SIGNERS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION" | "PENDING_MASTER_ADMINS_REGISTRATION_INIT" | "PENDING_REVIEW_BY_MASTER_ADMINS" | "PENDING_SEED_PROVISIONING" | "PENDING_SHARED_OWNERS_REGISTRATION" | "PENDING_SHARED_OWNERS_REGISTRATION_INIT" | "PENDING_WORKSPACE_INITIALIZATION" | "PENDING_WRAPPING_KEY_PROVISIONING";
|
|
1594
1748
|
claimedDevices: {
|
|
1595
1749
|
pubKey: string;
|
|
1596
1750
|
deviceUserId: string;
|
|
@@ -1670,6 +1824,21 @@ declare const STEPS: {
|
|
|
1670
1824
|
};
|
|
1671
1825
|
signature: string | null;
|
|
1672
1826
|
} | null;
|
|
1827
|
+
reviewOfExternalSigners: {
|
|
1828
|
+
challenge: {
|
|
1829
|
+
challengeType: "PSD";
|
|
1830
|
+
wActions: string[];
|
|
1831
|
+
handshake: string;
|
|
1832
|
+
handshakeAttestation: {
|
|
1833
|
+
codeHash: string;
|
|
1834
|
+
attestationPub: string;
|
|
1835
|
+
certificate: string;
|
|
1836
|
+
signature: string;
|
|
1837
|
+
};
|
|
1838
|
+
partitionId: string;
|
|
1839
|
+
};
|
|
1840
|
+
signature: string | null;
|
|
1841
|
+
} | null;
|
|
1673
1842
|
}[];
|
|
1674
1843
|
sharedOwners: {
|
|
1675
1844
|
name: string;
|
|
@@ -1754,11 +1923,9 @@ declare const STEPS: {
|
|
|
1754
1923
|
completedAt: Date | null;
|
|
1755
1924
|
}>;
|
|
1756
1925
|
};
|
|
1757
|
-
declare function onboard({
|
|
1758
|
-
engine,
|
|
1759
|
-
untilStep
|
|
1760
|
-
}: {
|
|
1926
|
+
declare function onboard(opts: {
|
|
1761
1927
|
engine: Engine<WithOnboarding>;
|
|
1928
|
+
externalSigners?: string[];
|
|
1762
1929
|
untilStep?: OnboardingStep;
|
|
1763
1930
|
}, logger: Logger): Promise<void>;
|
|
1764
1931
|
//#endregion
|
package/lib/onboarding.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import invariant from "invariant";
|
|
2
|
+
import { match } from "ts-pattern";
|
|
2
3
|
//#region src/onboarding.ts
|
|
3
4
|
const roleLabels = {
|
|
4
5
|
WRAPPING_KEY_OWNER: "Wrapping Key",
|
|
@@ -57,20 +58,32 @@ const deviceNameToIndex = (name) => {
|
|
|
57
58
|
invariant(index !== void 0, `Unknown device ${name}`);
|
|
58
59
|
return index;
|
|
59
60
|
};
|
|
61
|
+
const checkHsmHostingMode = (state, expectedMode) => {
|
|
62
|
+
/* v8 ignore next -- @preserve */
|
|
63
|
+
if (state.hsmHostingMode !== expectedMode) throw new Error(`HSM hosting mode should be ${expectedMode} but is ${state.hsmHostingMode}`);
|
|
64
|
+
};
|
|
65
|
+
/* v8 ignore next -- @preserve */
|
|
66
|
+
const checkExternalSigners = (state, externalSigners) => {
|
|
67
|
+
const hasExternalSigners = externalSigners && externalSigners.length > 0;
|
|
68
|
+
const errorMessage = match(state.hsmHostingMode).with("HOSTED", () => !hasExternalSigners ? null : "Hosted HSM does not support external signers").with("ON_PREM", () => hasExternalSigners ? null : "On-premises HSM requires at least 1 external signer").exhaustive();
|
|
69
|
+
if (errorMessage !== null) throw new Error(errorMessage);
|
|
70
|
+
};
|
|
60
71
|
const STEPS = {
|
|
61
72
|
PENDING_DEVICE_CLAIMS: async ({ state, engine }, logger) => {
|
|
62
73
|
const promises = [];
|
|
63
|
-
for (const device of devices)
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
+
for (const device of devices) {
|
|
75
|
+
if (state.hsmHostingMode === "ON_PREM" && device.role === "SHARED_OWNER") continue;
|
|
76
|
+
/* v8 ignore else -- @preserve */
|
|
77
|
+
if (state.claimedDevices.find(
|
|
78
|
+
/* v8 ignore next -- @preserve */
|
|
79
|
+
(c) => c.deviceName === device.name
|
|
80
|
+
) === void 0) {
|
|
81
|
+
const promise = engine.withDeviceIndex(device.index).claimDevice({
|
|
82
|
+
role: device.role,
|
|
83
|
+
deviceName: device.name
|
|
84
|
+
}).then(() => logger.info(`Claimed ${device.name}`));
|
|
85
|
+
promises.push(promise);
|
|
86
|
+
}
|
|
74
87
|
}
|
|
75
88
|
await Promise.all(promises);
|
|
76
89
|
return engine.client.onboarding.commitDeviceClaims.mutate({ onboardingId: state.id });
|
|
@@ -111,8 +124,12 @@ const STEPS = {
|
|
|
111
124
|
}));
|
|
112
125
|
return engine.client.onboarding.createMasterAdminGroup.mutate({ onboardingId });
|
|
113
126
|
},
|
|
114
|
-
PENDING_SHARED_OWNERS_REGISTRATION_INIT: async ({ engine, state }) =>
|
|
127
|
+
PENDING_SHARED_OWNERS_REGISTRATION_INIT: async ({ engine, state }) => {
|
|
128
|
+
checkHsmHostingMode(state, "HOSTED");
|
|
129
|
+
return engine.client.onboarding.startSharedOwnersRegistration.mutate({ onboardingId: state.id });
|
|
130
|
+
},
|
|
115
131
|
PENDING_SHARED_OWNERS_REGISTRATION: async ({ state, engine }, logger) => {
|
|
132
|
+
checkHsmHostingMode(state, "HOSTED");
|
|
116
133
|
const { id: onboardingId } = state;
|
|
117
134
|
const toRegister = state.claimedDevices.filter((claimed) => {
|
|
118
135
|
if (claimed.role !== "SHARED_OWNER") return false;
|
|
@@ -143,7 +160,25 @@ const STEPS = {
|
|
|
143
160
|
}));
|
|
144
161
|
return engine.client.onboarding.commitReviewByMasterAdmins.mutate({ onboardingId });
|
|
145
162
|
},
|
|
163
|
+
PENDING_EXTERNAL_SIGNERS_REGISTRATION: async ({ state, engine, externalSigners }, logger) => {
|
|
164
|
+
checkHsmHostingMode(state, "ON_PREM");
|
|
165
|
+
invariant(externalSigners && externalSigners.length > 0, "External signers must exist");
|
|
166
|
+
const { id: onboardingId } = state;
|
|
167
|
+
state = await engine.client.onboarding.startExternalSignersRegistration.mutate({
|
|
168
|
+
onboardingId,
|
|
169
|
+
externalSigners
|
|
170
|
+
});
|
|
171
|
+
const toCollect = state.masterAdmins.filter((admin) => !admin.reviewOfExternalSigners?.signature);
|
|
172
|
+
await Promise.all(toCollect.map(async (admin) => {
|
|
173
|
+
const index = deviceNameToIndex(admin.name);
|
|
174
|
+
const challenge = admin.reviewOfExternalSigners?.challenge;
|
|
175
|
+
await engine.withDeviceIndex(index).reviewExternalSigners(challenge);
|
|
176
|
+
logger.info(`Approved with ${admin.name}`);
|
|
177
|
+
}));
|
|
178
|
+
return engine.client.onboarding.commitExternalSignersRegistration.mutate({ onboardingId });
|
|
179
|
+
},
|
|
146
180
|
PENDING_SEED_PROVISIONING: async ({ state, engine }, logger) => {
|
|
181
|
+
checkHsmHostingMode(state, "HOSTED");
|
|
147
182
|
const { id: onboardingId } = state;
|
|
148
183
|
state = await engine.client.onboarding.startSeedProvisioning.mutate({ onboardingId });
|
|
149
184
|
const toCollect = state.sharedOwners.filter((so) => !so.review?.seedFragment);
|
|
@@ -155,24 +190,25 @@ const STEPS = {
|
|
|
155
190
|
}));
|
|
156
191
|
return engine.client.onboarding.commitSeedProvisioning.mutate({ onboardingId });
|
|
157
192
|
},
|
|
158
|
-
PENDING_WORKSPACE_INITIALIZATION: async ({ state, engine }) => engine.client.onboarding.initializeWorkspace.mutate({ onboardingId: state.id })
|
|
159
|
-
COMPLETED: async ({ state }) => state
|
|
193
|
+
PENDING_WORKSPACE_INITIALIZATION: async ({ state, engine }) => engine.client.onboarding.initializeWorkspace.mutate({ onboardingId: state.id })
|
|
160
194
|
};
|
|
161
|
-
|
|
162
|
-
|
|
195
|
+
async function onboard(opts, logger) {
|
|
196
|
+
const { engine, externalSigners, untilStep } = opts;
|
|
163
197
|
const { __onboardingId } = engine;
|
|
164
198
|
logger.info(`Joining onboarding ${__onboardingId}`);
|
|
165
199
|
let state = await engine.client.onboarding.getOnboarding.query({ onboardingId: __onboardingId });
|
|
166
|
-
|
|
200
|
+
checkExternalSigners(state, externalSigners);
|
|
201
|
+
while (state.step !== "COMPLETED") {
|
|
167
202
|
if (untilStep && state.step === untilStep) {
|
|
168
203
|
logger.info("Skipping the rest of the onboarding");
|
|
169
204
|
break;
|
|
170
205
|
}
|
|
171
|
-
const
|
|
172
|
-
logger.info(
|
|
206
|
+
const step = STEPS[state.step];
|
|
207
|
+
logger.info(step.name);
|
|
173
208
|
state = await step({
|
|
174
209
|
engine,
|
|
175
|
-
state
|
|
210
|
+
state,
|
|
211
|
+
externalSigners
|
|
176
212
|
}, logger);
|
|
177
213
|
}
|
|
178
214
|
}
|
package/lib/onboarding.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboarding.js","names":[],"sources":["../src/onboarding.ts"],"sourcesContent":["import type {\n ClaimedRole,\n OnboardingFullStateResponse,\n OnboardingStep,\n} from \"@ledgerhq/revault-api\";\nimport invariant from \"invariant\";\n\nimport type { Logger } from \"@/logger\";\n\nimport type { Engine, WithOnboarding } from \"./engine/types\";\n\ntype StepAction = (\n options: {\n engine: Engine<WithOnboarding>;\n state: OnboardingFullStateResponse;\n },\n logger: Logger,\n) => Promise<OnboardingFullStateResponse>;\n\nconst roleLabels: Record<ClaimedRole, string> = {\n WRAPPING_KEY_OWNER: \"Wrapping Key\",\n MASTER_ADMIN: \"Admin\",\n SHARED_OWNER: \"Shared Owner\",\n};\n\nconst devices: { index: number; role: ClaimedRole; name: string }[] = [\n { index: 1, role: \"WRAPPING_KEY_OWNER\", name: `${roleLabels.WRAPPING_KEY_OWNER} 1` },\n { index: 2, role: \"WRAPPING_KEY_OWNER\", name: `${roleLabels.WRAPPING_KEY_OWNER} 2` },\n { index: 3, role: \"WRAPPING_KEY_OWNER\", name: `${roleLabels.WRAPPING_KEY_OWNER} 3` },\n { index: 4, role: \"MASTER_ADMIN\", name: `${roleLabels.MASTER_ADMIN} 1` },\n { index: 5, role: \"MASTER_ADMIN\", name: `${roleLabels.MASTER_ADMIN} 2` },\n { index: 6, role: \"MASTER_ADMIN\", name: `${roleLabels.MASTER_ADMIN} 3` },\n { index: 7, role: \"SHARED_OWNER\", name: `${roleLabels.SHARED_OWNER} 1` },\n { index: 8, role: \"SHARED_OWNER\", name: `${roleLabels.SHARED_OWNER} 2` },\n { index: 9, role: \"SHARED_OWNER\", name: `${roleLabels.SHARED_OWNER} 3` },\n];\n\nconst deviceNameToIndex = (name: string): number => {\n const index = devices.find((d) => d.name === name)?.index;\n invariant(index !== undefined, `Unknown device ${name}`);\n return index;\n};\n\nexport const STEPS = {\n /**\n * Devices claiming\n */\n PENDING_DEVICE_CLAIMS: async ({ state, engine }, logger) => {\n const promises: Promise<void>[] = [];\n for (const device of devices) {\n /* v8 ignore else -- @preserve */\n if (\n state.claimedDevices.find(\n /* v8 ignore next -- @preserve */\n (c) => c.deviceName === device.name,\n ) === undefined\n ) {\n const promise = engine\n .withDeviceIndex(device.index)\n .claimDevice({ role: device.role, deviceName: device.name })\n .then(() => logger.info(`Claimed ${device.name}`));\n promises.push(promise);\n }\n }\n await Promise.all(promises);\n return engine.client.onboarding.commitDeviceClaims.mutate({ onboardingId: state.id });\n },\n\n /**\n * Wrapping Key provisioning\n */\n PENDING_WRAPPING_KEY_PROVISIONING: async ({ state, engine }, logger) => {\n const { id: onboardingId } = state;\n state = await engine.client.onboarding.startWrappingKeyProvisioning.mutate({ onboardingId });\n const wrappingKey = state.wrappingKey!;\n const toCollect = state.claimedDevices\n .filter((claimed) => {\n if (claimed.role !== \"WRAPPING_KEY_OWNER\") return false;\n const inFragment = !!state.wrappingKey?.fragments.find(\n /* v8 ignore next -- @preserve */\n (f) => f.pubKey === claimed.pubKey,\n );\n return !inFragment;\n })\n .map((c) => {\n const index = deviceNameToIndex(c.deviceName);\n return index;\n });\n await Promise.all(\n toCollect.map((index) =>\n engine\n .withDeviceIndex(index)\n .collectWrappingKeyFragment(wrappingKey)\n .then(() => logger.info(`Collected Wrapping Key ${index}`)),\n ),\n );\n return engine.client.onboarding.commitWrappingKey.mutate({ onboardingId });\n },\n\n /**\n * Init Master Admins registration\n */\n PENDING_MASTER_ADMINS_REGISTRATION_INIT: async ({ engine, state }) =>\n engine.client.onboarding.startMasterAdminsRegistration.mutate({ onboardingId: state.id }),\n\n /**\n * Master Admins registration\n */\n PENDING_MASTER_ADMINS_REGISTRATION: async ({ state, engine }, logger) => {\n const { id: onboardingId } = state;\n const toRegister = state.claimedDevices.filter((claimed) => {\n if (claimed.role !== \"MASTER_ADMIN\") return false;\n const hasRegistered = !!state.masterAdmins.find(\n /* v8 ignore next -- @preserve */\n (a) => a.pubKey === claimed.pubKey,\n );\n return !hasRegistered;\n });\n await Promise.all(\n toRegister.map(async ({ deviceName: name }) => {\n const index = deviceNameToIndex(name);\n await engine.withDeviceIndex(index).registerDevice({ role: \"ADMIN\", name });\n logger.info(`Registered ${name}`);\n }),\n );\n return engine.client.onboarding.createMasterAdminGroup.mutate({ onboardingId });\n },\n\n /**\n * Init Shared Owners registration\n */\n PENDING_SHARED_OWNERS_REGISTRATION_INIT: async ({ engine, state }) =>\n engine.client.onboarding.startSharedOwnersRegistration.mutate({ onboardingId: state.id }),\n\n /**\n * Shared Owners registration\n */\n PENDING_SHARED_OWNERS_REGISTRATION: async ({ state, engine }, logger) => {\n const { id: onboardingId } = state;\n const toRegister = state.claimedDevices.filter((claimed) => {\n if (claimed.role !== \"SHARED_OWNER\") return false;\n const hasRegistered = !!state.sharedOwners.find(\n /* v8 ignore next -- @preserve */ (a) => a.pubKey === claimed.pubKey,\n );\n return !hasRegistered;\n });\n await Promise.all(\n toRegister.map(async ({ deviceName: name }) => {\n const index = deviceNameToIndex(name);\n await engine.withDeviceIndex(index).registerDevice({ role: \"SHARED_OWNER\", name });\n logger.info(`Registered ${name}`);\n }),\n );\n return engine.client.onboarding.commitSharedOwnersRegistration.mutate({ onboardingId });\n },\n\n /**\n * Review by master admins\n */\n PENDING_REVIEW_BY_MASTER_ADMINS: async ({ state, engine }, logger) => {\n const { id: onboardingId } = state;\n state = await engine.client.onboarding.startReviewByMasterAdmins.mutate({ onboardingId });\n const toCollect = state.masterAdmins.filter((admin) => !admin.review?.signature);\n await Promise.all(\n toCollect.map(async (admin) => {\n const index = deviceNameToIndex(admin.name);\n const challenge = admin.review?.challenge;\n await engine.withDeviceIndex(index).reviewSharedOwner(challenge!);\n logger.info(`Approved with ${admin.name}`);\n }),\n );\n return engine.client.onboarding.commitReviewByMasterAdmins.mutate({ onboardingId });\n },\n\n /**\n * Seed provisioning\n */\n PENDING_SEED_PROVISIONING: async ({ state, engine }, logger) => {\n const { id: onboardingId } = state;\n state = await engine.client.onboarding.startSeedProvisioning.mutate({ onboardingId });\n const toCollect = state.sharedOwners.filter((so) => !so.review?.seedFragment);\n await Promise.all(\n toCollect.map(async (so) => {\n const index = deviceNameToIndex(so.name);\n const challenge = so.review?.seedChallenge;\n await engine.withDeviceIndex(index).collectSeedFragment(challenge!);\n logger.info(`Collected fragment for ${so.name}`);\n }),\n );\n return engine.client.onboarding.commitSeedProvisioning.mutate({ onboardingId });\n },\n\n /**\n * Workspace initialization\n */\n PENDING_WORKSPACE_INITIALIZATION: async ({ state, engine }) =>\n engine.client.onboarding.initializeWorkspace.mutate({ onboardingId: state.id }),\n\n /**\n * Onboarding completed\n */\n COMPLETED: async ({ state }) => state,\n} as const satisfies Record<OnboardingStep, StepAction>;\n\nconst STEPS_LIST = Object.values(STEPS);\n\nexport async function onboard(\n {\n engine,\n untilStep,\n }: {\n engine: Engine<WithOnboarding>;\n untilStep?: OnboardingStep;\n },\n logger: Logger,\n): Promise<void> {\n const { __onboardingId } = engine;\n logger.info(`Joining onboarding ${__onboardingId}`);\n let state = await engine.client.onboarding.getOnboarding.query({\n onboardingId: __onboardingId,\n });\n\n for (const step of STEPS_LIST.slice(STEPS_LIST.indexOf(STEPS[state.step]))) {\n if (untilStep && state.step === untilStep) {\n logger.info(\"Skipping the rest of the onboarding\");\n break;\n }\n const index = STEPS_LIST.indexOf(step);\n const stepProgress = `${(index + 1).toString().padStart(2, \"0\")}/${STEPS_LIST.length}`;\n logger.info(`(${stepProgress}) ${step.name}`);\n state = await step({ engine, state }, logger);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"onboarding.js","names":[],"sources":["../src/onboarding.ts"],"sourcesContent":["import type {\n ClaimedRole,\n HsmHostingMode,\n OnboardingFullStateResponse,\n OnboardingStep,\n} from \"@ledgerhq/revault-api\";\nimport invariant from \"invariant\";\nimport { match } from \"ts-pattern\";\n\nimport type { Logger } from \"@/logger\";\n\nimport type { Engine, WithOnboarding } from \"./engine/types\";\n\ntype StepAction = (\n options: {\n engine: Engine<WithOnboarding>;\n state: OnboardingFullStateResponse;\n externalSigners?: string[];\n },\n logger: Logger,\n) => Promise<OnboardingFullStateResponse>;\n\nconst roleLabels: Record<ClaimedRole, string> = {\n WRAPPING_KEY_OWNER: \"Wrapping Key\",\n MASTER_ADMIN: \"Admin\",\n SHARED_OWNER: \"Shared Owner\",\n};\n\nconst devices: { index: number; role: ClaimedRole; name: string }[] = [\n { index: 1, role: \"WRAPPING_KEY_OWNER\", name: `${roleLabels.WRAPPING_KEY_OWNER} 1` },\n { index: 2, role: \"WRAPPING_KEY_OWNER\", name: `${roleLabels.WRAPPING_KEY_OWNER} 2` },\n { index: 3, role: \"WRAPPING_KEY_OWNER\", name: `${roleLabels.WRAPPING_KEY_OWNER} 3` },\n { index: 4, role: \"MASTER_ADMIN\", name: `${roleLabels.MASTER_ADMIN} 1` },\n { index: 5, role: \"MASTER_ADMIN\", name: `${roleLabels.MASTER_ADMIN} 2` },\n { index: 6, role: \"MASTER_ADMIN\", name: `${roleLabels.MASTER_ADMIN} 3` },\n { index: 7, role: \"SHARED_OWNER\", name: `${roleLabels.SHARED_OWNER} 1` },\n { index: 8, role: \"SHARED_OWNER\", name: `${roleLabels.SHARED_OWNER} 2` },\n { index: 9, role: \"SHARED_OWNER\", name: `${roleLabels.SHARED_OWNER} 3` },\n];\n\nconst deviceNameToIndex = (name: string): number => {\n const index = devices.find((d) => d.name === name)?.index;\n invariant(index !== undefined, `Unknown device ${name}`);\n return index;\n};\n\nconst checkHsmHostingMode = (\n state: OnboardingFullStateResponse,\n expectedMode: HsmHostingMode,\n): void => {\n /* v8 ignore next -- @preserve */\n if (state.hsmHostingMode !== expectedMode) {\n throw new Error(`HSM hosting mode should be ${expectedMode} but is ${state.hsmHostingMode}`);\n }\n};\n\n/* v8 ignore next -- @preserve */\nconst checkExternalSigners = (\n state: OnboardingFullStateResponse,\n externalSigners: string[] | undefined,\n): void => {\n const hasExternalSigners = externalSigners && externalSigners.length > 0;\n const errorMessage = match(state.hsmHostingMode)\n .with(\"HOSTED\", () =>\n !hasExternalSigners ? null : \"Hosted HSM does not support external signers\",\n )\n .with(\"ON_PREM\", () =>\n hasExternalSigners ? null : \"On-premises HSM requires at least 1 external signer\",\n )\n .exhaustive();\n if (errorMessage !== null) {\n throw new Error(errorMessage);\n }\n};\n\nexport const STEPS = {\n /**\n * Devices claiming\n */\n PENDING_DEVICE_CLAIMS: async ({ state, engine }, logger) => {\n const promises: Promise<void>[] = [];\n for (const device of devices) {\n if (state.hsmHostingMode === \"ON_PREM\" && device.role === \"SHARED_OWNER\") {\n continue;\n }\n /* v8 ignore else -- @preserve */\n if (\n state.claimedDevices.find(\n /* v8 ignore next -- @preserve */\n (c) => c.deviceName === device.name,\n ) === undefined\n ) {\n const promise = engine\n .withDeviceIndex(device.index)\n .claimDevice({ role: device.role, deviceName: device.name })\n .then(() => logger.info(`Claimed ${device.name}`));\n promises.push(promise);\n }\n }\n await Promise.all(promises);\n return engine.client.onboarding.commitDeviceClaims.mutate({ onboardingId: state.id });\n },\n\n /**\n * Wrapping Key provisioning\n */\n PENDING_WRAPPING_KEY_PROVISIONING: async ({ state, engine }, logger) => {\n const { id: onboardingId } = state;\n state = await engine.client.onboarding.startWrappingKeyProvisioning.mutate({ onboardingId });\n const wrappingKey = state.wrappingKey!;\n const toCollect = state.claimedDevices\n .filter((claimed) => {\n if (claimed.role !== \"WRAPPING_KEY_OWNER\") return false;\n const inFragment = !!state.wrappingKey?.fragments.find(\n /* v8 ignore next -- @preserve */\n (f) => f.pubKey === claimed.pubKey,\n );\n return !inFragment;\n })\n .map((c) => {\n const index = deviceNameToIndex(c.deviceName);\n return index;\n });\n await Promise.all(\n toCollect.map((index) =>\n engine\n .withDeviceIndex(index)\n .collectWrappingKeyFragment(wrappingKey)\n .then(() => logger.info(`Collected Wrapping Key ${index}`)),\n ),\n );\n return engine.client.onboarding.commitWrappingKey.mutate({ onboardingId });\n },\n\n /**\n * Init Master Admins registration\n */\n PENDING_MASTER_ADMINS_REGISTRATION_INIT: async ({ engine, state }) =>\n engine.client.onboarding.startMasterAdminsRegistration.mutate({ onboardingId: state.id }),\n\n /**\n * Master Admins registration\n */\n PENDING_MASTER_ADMINS_REGISTRATION: async ({ state, engine }, logger) => {\n const { id: onboardingId } = state;\n const toRegister = state.claimedDevices.filter((claimed) => {\n if (claimed.role !== \"MASTER_ADMIN\") return false;\n const hasRegistered = !!state.masterAdmins.find(\n /* v8 ignore next -- @preserve */\n (a) => a.pubKey === claimed.pubKey,\n );\n return !hasRegistered;\n });\n await Promise.all(\n toRegister.map(async ({ deviceName: name }) => {\n const index = deviceNameToIndex(name);\n await engine.withDeviceIndex(index).registerDevice({ role: \"ADMIN\", name });\n logger.info(`Registered ${name}`);\n }),\n );\n return engine.client.onboarding.createMasterAdminGroup.mutate({ onboardingId });\n },\n\n /**\n * Init Shared Owners registration\n */\n PENDING_SHARED_OWNERS_REGISTRATION_INIT: async ({ engine, state }) => {\n checkHsmHostingMode(state, \"HOSTED\");\n return engine.client.onboarding.startSharedOwnersRegistration.mutate({\n onboardingId: state.id,\n });\n },\n\n /**\n * Shared Owners registration\n */\n PENDING_SHARED_OWNERS_REGISTRATION: async ({ state, engine }, logger) => {\n checkHsmHostingMode(state, \"HOSTED\");\n const { id: onboardingId } = state;\n const toRegister = state.claimedDevices.filter((claimed) => {\n if (claimed.role !== \"SHARED_OWNER\") return false;\n const hasRegistered = !!state.sharedOwners.find(\n /* v8 ignore next -- @preserve */ (a) => a.pubKey === claimed.pubKey,\n );\n return !hasRegistered;\n });\n await Promise.all(\n toRegister.map(async ({ deviceName: name }) => {\n const index = deviceNameToIndex(name);\n await engine.withDeviceIndex(index).registerDevice({ role: \"SHARED_OWNER\", name });\n logger.info(`Registered ${name}`);\n }),\n );\n return engine.client.onboarding.commitSharedOwnersRegistration.mutate({ onboardingId });\n },\n\n /**\n * Review by master admins\n */\n PENDING_REVIEW_BY_MASTER_ADMINS: async ({ state, engine }, logger) => {\n const { id: onboardingId } = state;\n state = await engine.client.onboarding.startReviewByMasterAdmins.mutate({ onboardingId });\n const toCollect = state.masterAdmins.filter((admin) => !admin.review?.signature);\n await Promise.all(\n toCollect.map(async (admin) => {\n const index = deviceNameToIndex(admin.name);\n const challenge = admin.review?.challenge;\n await engine.withDeviceIndex(index).reviewSharedOwner(challenge!);\n logger.info(`Approved with ${admin.name}`);\n }),\n );\n return engine.client.onboarding.commitReviewByMasterAdmins.mutate({ onboardingId });\n },\n\n PENDING_EXTERNAL_SIGNERS_REGISTRATION: async ({ state, engine, externalSigners }, logger) => {\n checkHsmHostingMode(state, \"ON_PREM\");\n invariant(externalSigners && externalSigners.length > 0, \"External signers must exist\");\n const { id: onboardingId } = state;\n state = await engine.client.onboarding.startExternalSignersRegistration.mutate({\n onboardingId,\n externalSigners,\n });\n const toCollect = state.masterAdmins.filter(\n (admin) => !admin.reviewOfExternalSigners?.signature,\n );\n await Promise.all(\n toCollect.map(async (admin) => {\n const index = deviceNameToIndex(admin.name);\n const challenge = admin.reviewOfExternalSigners?.challenge;\n await engine.withDeviceIndex(index).reviewExternalSigners(challenge!); // same as review for shared owner, but with different challenge\n logger.info(`Approved with ${admin.name}`);\n }),\n );\n return engine.client.onboarding.commitExternalSignersRegistration.mutate({ onboardingId });\n },\n\n /**\n * Seed provisioning\n */\n PENDING_SEED_PROVISIONING: async ({ state, engine }, logger) => {\n checkHsmHostingMode(state, \"HOSTED\");\n const { id: onboardingId } = state;\n state = await engine.client.onboarding.startSeedProvisioning.mutate({ onboardingId });\n const toCollect = state.sharedOwners.filter((so) => !so.review?.seedFragment);\n await Promise.all(\n toCollect.map(async (so) => {\n const index = deviceNameToIndex(so.name);\n const challenge = so.review?.seedChallenge;\n await engine.withDeviceIndex(index).collectSeedFragment(challenge!);\n logger.info(`Collected fragment for ${so.name}`);\n }),\n );\n return engine.client.onboarding.commitSeedProvisioning.mutate({ onboardingId });\n },\n\n /**\n * Workspace initialization\n */\n PENDING_WORKSPACE_INITIALIZATION: async ({ state, engine }) =>\n engine.client.onboarding.initializeWorkspace.mutate({ onboardingId: state.id }),\n} as const satisfies Record<Exclude<OnboardingStep, \"COMPLETED\">, StepAction>;\n\nexport async function onboard(\n opts: {\n engine: Engine<WithOnboarding>;\n externalSigners?: string[];\n untilStep?: OnboardingStep;\n },\n logger: Logger,\n): Promise<void> {\n const { engine, externalSigners, untilStep } = opts;\n\n const { __onboardingId } = engine;\n logger.info(`Joining onboarding ${__onboardingId}`);\n let state = await engine.client.onboarding.getOnboarding.query({\n onboardingId: __onboardingId,\n });\n\n checkExternalSigners(state, externalSigners);\n\n while (state.step !== \"COMPLETED\") {\n if (untilStep && state.step === untilStep) {\n logger.info(\"Skipping the rest of the onboarding\");\n break;\n }\n const step = STEPS[state.step];\n logger.info(step.name);\n state = await step({ engine, state, externalSigners }, logger);\n }\n}\n"],"mappings":"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"}
|
|
@@ -114,6 +114,10 @@ type DecorateWithDeviceAndOnboarding = {
|
|
|
114
114
|
* Review Shared-Owner with Admin
|
|
115
115
|
*/
|
|
116
116
|
reviewSharedOwner: (challenge: PsdChallenge, params?: OnboardingOperationParams) => Promise<void>;
|
|
117
|
+
/**
|
|
118
|
+
* Review external signer with Admin
|
|
119
|
+
*/
|
|
120
|
+
reviewExternalSigners: (challenge: PsdChallenge, params?: OnboardingOperationParams) => Promise<void>;
|
|
117
121
|
/**
|
|
118
122
|
* Collect master seed fragment
|
|
119
123
|
*/
|
|
@@ -114,6 +114,10 @@ type DecorateWithDeviceAndOnboarding = {
|
|
|
114
114
|
* Review Shared-Owner with Admin
|
|
115
115
|
*/
|
|
116
116
|
reviewSharedOwner: (challenge: PsdChallenge, params?: OnboardingOperationParams) => Promise<void>;
|
|
117
|
+
/**
|
|
118
|
+
* Review external signer with Admin
|
|
119
|
+
*/
|
|
120
|
+
reviewExternalSigners: (challenge: PsdChallenge, params?: OnboardingOperationParams) => Promise<void>;
|
|
117
121
|
/**
|
|
118
122
|
* Collect master seed fragment
|
|
119
123
|
*/
|
package/lib/utils-DbSFXp4c.cjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/revault-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"ts-pattern": "^5.9.0",
|
|
64
64
|
"uuid": "^13.0.0",
|
|
65
65
|
"zod": "^4.3.6",
|
|
66
|
-
"@ledgerhq/revault-api": "1.
|
|
66
|
+
"@ledgerhq/revault-api": "1.57.0"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
69
|
"@eslint/js": "^9.39.4",
|