@ledgerhq/revault-sdk 0.25.0 → 0.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/lib/bake.cjs +1214 -1359
  2. package/lib/bake.cjs.map +1 -1
  3. package/lib/bake.d.cts +564 -562
  4. package/lib/bake.d.ts +564 -562
  5. package/lib/bake.js +1204 -1359
  6. package/lib/bake.js.map +1 -1
  7. package/lib/chunk-CKQMccvm.cjs +28 -0
  8. package/lib/crypto-BDBF_rfw.cjs +268 -0
  9. package/lib/crypto-BDBF_rfw.cjs.map +1 -0
  10. package/lib/crypto-CPCBrCSZ.js +245 -0
  11. package/lib/crypto-CPCBrCSZ.js.map +1 -0
  12. package/lib/crypto.cjs +5 -11
  13. package/lib/crypto.d.cts +10 -7
  14. package/lib/crypto.d.ts +10 -7
  15. package/lib/crypto.js +2 -11
  16. package/lib/device-0lcfYGHr.cjs +793 -0
  17. package/lib/device-0lcfYGHr.cjs.map +1 -0
  18. package/lib/device-B8Fww8_6.js +719 -0
  19. package/lib/device-B8Fww8_6.js.map +1 -0
  20. package/lib/device.cjs +6 -13
  21. package/lib/device.d.cts +2 -50
  22. package/lib/device.d.ts +2 -50
  23. package/lib/device.js +2 -13
  24. package/lib/engine.cjs +835 -886
  25. package/lib/engine.cjs.map +1 -1
  26. package/lib/engine.d.cts +3 -25
  27. package/lib/engine.d.ts +3 -25
  28. package/lib/engine.js +828 -885
  29. package/lib/engine.js.map +1 -1
  30. package/lib/index--fscLDTT.d.ts +237 -0
  31. package/lib/index-BE7oUpCb.d.cts +237 -0
  32. package/lib/index-C4Xjiv0k.d.cts +23 -0
  33. package/lib/index-CVjhPoZh.d.ts +23 -0
  34. package/lib/index.cjs +0 -1
  35. package/lib/index.d.cts +10 -5
  36. package/lib/index.d.ts +10 -5
  37. package/lib/index.js +1 -1
  38. package/lib/logger-Cme0iL1f.d.cts +10 -0
  39. package/lib/logger-DWLViq7U.d.ts +10 -0
  40. package/lib/onboarding.cjs +179 -181
  41. package/lib/onboarding.cjs.map +1 -1
  42. package/lib/onboarding.d.cts +1751 -1722
  43. package/lib/onboarding.d.ts +1751 -1722
  44. package/lib/onboarding.js +175 -181
  45. package/lib/onboarding.js.map +1 -1
  46. package/lib/trpc-CWGPr8Ox.d.ts +20 -0
  47. package/lib/trpc-C_dUOB1u.d.cts +20 -0
  48. package/lib/types-4CfR5--z.d.ts +203 -0
  49. package/lib/types-Byf9V35t.d.cts +203 -0
  50. package/lib/types-CQROu0nu.d.cts +6 -0
  51. package/lib/types-_QeBv1U4.d.ts +6 -0
  52. package/lib/types.cjs +0 -1
  53. package/lib/types.d.cts +3 -4
  54. package/lib/types.d.ts +3 -4
  55. package/lib/types.js +1 -1
  56. package/lib/utils-BGbdjOP9.js +61 -0
  57. package/lib/utils-BGbdjOP9.js.map +1 -0
  58. package/lib/utils-DbSFXp4c.cjs +86 -0
  59. package/lib/utils-DbSFXp4c.cjs.map +1 -0
  60. package/package.json +6 -6
  61. package/lib/chunk-2WGM7EWA.cjs +0 -282
  62. package/lib/chunk-2WGM7EWA.cjs.map +0 -1
  63. package/lib/chunk-AXI72NFY.js +0 -50
  64. package/lib/chunk-AXI72NFY.js.map +0 -1
  65. package/lib/chunk-DRMYBKL3.cjs +0 -820
  66. package/lib/chunk-DRMYBKL3.cjs.map +0 -1
  67. package/lib/chunk-KV5FO7N5.js +0 -282
  68. package/lib/chunk-KV5FO7N5.js.map +0 -1
  69. package/lib/chunk-LH4QQXUH.cjs +0 -50
  70. package/lib/chunk-LH4QQXUH.cjs.map +0 -1
  71. package/lib/chunk-PFZIW6UP.js +0 -820
  72. package/lib/chunk-PFZIW6UP.js.map +0 -1
  73. package/lib/crypto.cjs.map +0 -1
  74. package/lib/crypto.js.map +0 -1
  75. package/lib/device.cjs.map +0 -1
  76. package/lib/device.js.map +0 -1
  77. package/lib/index.cjs.map +0 -1
  78. package/lib/index.js.map +0 -1
  79. package/lib/logger-C-TPbnjv.d.cts +0 -9
  80. package/lib/logger-C-TPbnjv.d.ts +0 -9
  81. package/lib/types-C-ngtI5m.d.ts +0 -202
  82. package/lib/types-CpGEbAxh.d.cts +0 -19
  83. package/lib/types-CpGEbAxh.d.ts +0 -19
  84. package/lib/types-CryvY9pW.d.cts +0 -202
  85. package/lib/types-DJfbanPz.d.cts +0 -167
  86. package/lib/types-DJfbanPz.d.ts +0 -167
  87. package/lib/types.cjs.map +0 -1
  88. package/lib/types.js.map +0 -1
package/lib/onboarding.js CHANGED
@@ -1,188 +1,182 @@
1
- // src/onboarding.ts
2
1
  import invariant from "invariant";
3
- var roleLabels = {
4
- WRAPPING_KEY_OWNER: "Wrapping Key",
5
- MASTER_ADMIN: "Admin",
6
- SHARED_OWNER: "Shared Owner"
2
+ //#region src/onboarding.ts
3
+ const roleLabels = {
4
+ WRAPPING_KEY_OWNER: "Wrapping Key",
5
+ MASTER_ADMIN: "Admin",
6
+ SHARED_OWNER: "Shared Owner"
7
7
  };
8
- var devices = [
9
- { index: 1, role: "WRAPPING_KEY_OWNER", name: `${roleLabels.WRAPPING_KEY_OWNER} 1` },
10
- { index: 2, role: "WRAPPING_KEY_OWNER", name: `${roleLabels.WRAPPING_KEY_OWNER} 2` },
11
- { index: 3, role: "WRAPPING_KEY_OWNER", name: `${roleLabels.WRAPPING_KEY_OWNER} 3` },
12
- { index: 4, role: "MASTER_ADMIN", name: `${roleLabels.MASTER_ADMIN} 1` },
13
- { index: 5, role: "MASTER_ADMIN", name: `${roleLabels.MASTER_ADMIN} 2` },
14
- { index: 6, role: "MASTER_ADMIN", name: `${roleLabels.MASTER_ADMIN} 3` },
15
- { index: 7, role: "SHARED_OWNER", name: `${roleLabels.SHARED_OWNER} 1` },
16
- { index: 8, role: "SHARED_OWNER", name: `${roleLabels.SHARED_OWNER} 2` },
17
- { index: 9, role: "SHARED_OWNER", name: `${roleLabels.SHARED_OWNER} 3` }
8
+ const devices = [
9
+ {
10
+ index: 1,
11
+ role: "WRAPPING_KEY_OWNER",
12
+ name: `${roleLabels.WRAPPING_KEY_OWNER} 1`
13
+ },
14
+ {
15
+ index: 2,
16
+ role: "WRAPPING_KEY_OWNER",
17
+ name: `${roleLabels.WRAPPING_KEY_OWNER} 2`
18
+ },
19
+ {
20
+ index: 3,
21
+ role: "WRAPPING_KEY_OWNER",
22
+ name: `${roleLabels.WRAPPING_KEY_OWNER} 3`
23
+ },
24
+ {
25
+ index: 4,
26
+ role: "MASTER_ADMIN",
27
+ name: `${roleLabels.MASTER_ADMIN} 1`
28
+ },
29
+ {
30
+ index: 5,
31
+ role: "MASTER_ADMIN",
32
+ name: `${roleLabels.MASTER_ADMIN} 2`
33
+ },
34
+ {
35
+ index: 6,
36
+ role: "MASTER_ADMIN",
37
+ name: `${roleLabels.MASTER_ADMIN} 3`
38
+ },
39
+ {
40
+ index: 7,
41
+ role: "SHARED_OWNER",
42
+ name: `${roleLabels.SHARED_OWNER} 1`
43
+ },
44
+ {
45
+ index: 8,
46
+ role: "SHARED_OWNER",
47
+ name: `${roleLabels.SHARED_OWNER} 2`
48
+ },
49
+ {
50
+ index: 9,
51
+ role: "SHARED_OWNER",
52
+ name: `${roleLabels.SHARED_OWNER} 3`
53
+ }
18
54
  ];
19
- var deviceNameToIndex = (name) => {
20
- const index = devices.find((d) => d.name === name)?.index;
21
- invariant(index !== void 0, `Unknown device ${name}`);
22
- return index;
55
+ const deviceNameToIndex = (name) => {
56
+ const index = devices.find((d) => d.name === name)?.index;
57
+ invariant(index !== void 0, `Unknown device ${name}`);
58
+ return index;
23
59
  };
24
- var STEPS = {
25
- /**
26
- * Devices claiming
27
- */
28
- PENDING_DEVICE_CLAIMS: async ({ state, engine }, logger) => {
29
- const promises = [];
30
- for (const device of devices) {
31
- if (state.claimedDevices.find(
32
- /* v8 ignore next -- @preserve */
33
- (c) => c.deviceName === device.name
34
- ) === void 0) {
35
- const promise = engine.withDeviceIndex(device.index).claimDevice({ role: device.role, deviceName: device.name }).then(() => logger.info(`Claimed ${device.name}`));
36
- promises.push(promise);
37
- }
38
- }
39
- await Promise.all(promises);
40
- return engine.client.onboarding.commitDeviceClaims.mutate({ onboardingId: state.id });
41
- },
42
- /**
43
- * Wrapping Key provisioning
44
- */
45
- PENDING_WRAPPING_KEY_PROVISIONING: async ({ state, engine }, logger) => {
46
- const { id: onboardingId } = state;
47
- state = await engine.client.onboarding.startWrappingKeyProvisioning.mutate({ onboardingId });
48
- const wrappingKey = state.wrappingKey;
49
- const toCollect = state.claimedDevices.filter((claimed) => {
50
- if (claimed.role !== "WRAPPING_KEY_OWNER") return false;
51
- const inFragment = !!state.wrappingKey?.fragments.find(
52
- /* v8 ignore next -- @preserve */
53
- (f) => f.pubKey === claimed.pubKey
54
- );
55
- return !inFragment;
56
- }).map((c) => {
57
- const index = deviceNameToIndex(c.deviceName);
58
- return index;
59
- });
60
- await Promise.all(
61
- toCollect.map(
62
- (index) => engine.withDeviceIndex(index).collectWrappingKeyFragment(wrappingKey).then(() => logger.info(`Collected Wrapping Key ${index}`))
63
- )
64
- );
65
- return engine.client.onboarding.commitWrappingKey.mutate({ onboardingId });
66
- },
67
- /**
68
- * Init Master Admins registration
69
- */
70
- PENDING_MASTER_ADMINS_REGISTRATION_INIT: async ({ engine, state }) => engine.client.onboarding.startMasterAdminsRegistration.mutate({ onboardingId: state.id }),
71
- /**
72
- * Master Admins registration
73
- */
74
- PENDING_MASTER_ADMINS_REGISTRATION: async ({ state, engine }, logger) => {
75
- const { id: onboardingId } = state;
76
- const toRegister = state.claimedDevices.filter((claimed) => {
77
- if (claimed.role !== "MASTER_ADMIN") return false;
78
- const hasRegistered = !!state.masterAdmins.find(
79
- /* v8 ignore next -- @preserve */
80
- (a) => a.pubKey === claimed.pubKey
81
- );
82
- return !hasRegistered;
83
- });
84
- await Promise.all(
85
- toRegister.map(async ({ deviceName: name }) => {
86
- const index = deviceNameToIndex(name);
87
- await engine.withDeviceIndex(index).registerDevice({ role: "ADMIN", name });
88
- logger.info(`Registered ${name}`);
89
- })
90
- );
91
- return engine.client.onboarding.createMasterAdminGroup.mutate({ onboardingId });
92
- },
93
- /**
94
- * Init Shared Owners registration
95
- */
96
- PENDING_SHARED_OWNERS_REGISTRATION_INIT: async ({ engine, state }) => engine.client.onboarding.startSharedOwnersRegistration.mutate({ onboardingId: state.id }),
97
- /**
98
- * Shared Owners registration
99
- */
100
- PENDING_SHARED_OWNERS_REGISTRATION: async ({ state, engine }, logger) => {
101
- const { id: onboardingId } = state;
102
- const toRegister = state.claimedDevices.filter((claimed) => {
103
- if (claimed.role !== "SHARED_OWNER") return false;
104
- const hasRegistered = !!state.sharedOwners.find(
105
- /* v8 ignore next -- @preserve */
106
- (a) => a.pubKey === claimed.pubKey
107
- );
108
- return !hasRegistered;
109
- });
110
- await Promise.all(
111
- toRegister.map(async ({ deviceName: name }) => {
112
- const index = deviceNameToIndex(name);
113
- await engine.withDeviceIndex(index).registerDevice({ role: "SHARED_OWNER", name });
114
- logger.info(`Registered ${name}`);
115
- })
116
- );
117
- return engine.client.onboarding.commitSharedOwnersRegistration.mutate({ onboardingId });
118
- },
119
- /**
120
- * Review by master admins
121
- */
122
- PENDING_REVIEW_BY_MASTER_ADMINS: async ({ state, engine }, logger) => {
123
- const { id: onboardingId } = state;
124
- state = await engine.client.onboarding.startReviewByMasterAdmins.mutate({ onboardingId });
125
- const toCollect = state.masterAdmins.filter((admin) => !admin.review?.signature);
126
- await Promise.all(
127
- toCollect.map(async (admin) => {
128
- const index = deviceNameToIndex(admin.name);
129
- const challenge = admin.review?.challenge;
130
- await engine.withDeviceIndex(index).reviewSharedOwner(challenge);
131
- logger.info(`Approved with ${admin.name}`);
132
- })
133
- );
134
- return engine.client.onboarding.commitReviewByMasterAdmins.mutate({ onboardingId });
135
- },
136
- /**
137
- * Seed provisioning
138
- */
139
- PENDING_SEED_PROVISIONING: async ({ state, engine }, logger) => {
140
- const { id: onboardingId } = state;
141
- state = await engine.client.onboarding.startSeedProvisioning.mutate({ onboardingId });
142
- const toCollect = state.sharedOwners.filter((so) => !so.review?.seedFragment);
143
- await Promise.all(
144
- toCollect.map(async (so) => {
145
- const index = deviceNameToIndex(so.name);
146
- const challenge = so.review?.seedChallenge;
147
- await engine.withDeviceIndex(index).collectSeedFragment(challenge);
148
- logger.info(`Collected fragment for ${so.name}`);
149
- })
150
- );
151
- return engine.client.onboarding.commitSeedProvisioning.mutate({ onboardingId });
152
- },
153
- /**
154
- * Workspace initialization
155
- */
156
- PENDING_WORKSPACE_INITIALIZATION: async ({ state, engine }) => engine.client.onboarding.initializeWorkspace.mutate({ onboardingId: state.id }),
157
- /**
158
- * Onboarding completed
159
- */
160
- COMPLETED: async ({ state }) => state
60
+ const STEPS = {
61
+ PENDING_DEVICE_CLAIMS: async ({ state, engine }, logger) => {
62
+ const promises = [];
63
+ for (const device of devices)
64
+ /* v8 ignore else -- @preserve */
65
+ if (state.claimedDevices.find(
66
+ /* v8 ignore next -- @preserve */
67
+ (c) => c.deviceName === device.name
68
+ ) === void 0) {
69
+ const promise = engine.withDeviceIndex(device.index).claimDevice({
70
+ role: device.role,
71
+ deviceName: device.name
72
+ }).then(() => logger.info(`Claimed ${device.name}`));
73
+ promises.push(promise);
74
+ }
75
+ await Promise.all(promises);
76
+ return engine.client.onboarding.commitDeviceClaims.mutate({ onboardingId: state.id });
77
+ },
78
+ PENDING_WRAPPING_KEY_PROVISIONING: async ({ state, engine }, logger) => {
79
+ const { id: onboardingId } = state;
80
+ state = await engine.client.onboarding.startWrappingKeyProvisioning.mutate({ onboardingId });
81
+ const wrappingKey = state.wrappingKey;
82
+ const toCollect = state.claimedDevices.filter((claimed) => {
83
+ if (claimed.role !== "WRAPPING_KEY_OWNER") return false;
84
+ return !!!state.wrappingKey?.fragments.find(
85
+ /* v8 ignore next -- @preserve */
86
+ (f) => f.pubKey === claimed.pubKey
87
+ );
88
+ }).map((c) => {
89
+ return deviceNameToIndex(c.deviceName);
90
+ });
91
+ await Promise.all(toCollect.map((index) => engine.withDeviceIndex(index).collectWrappingKeyFragment(wrappingKey).then(() => logger.info(`Collected Wrapping Key ${index}`))));
92
+ return engine.client.onboarding.commitWrappingKey.mutate({ onboardingId });
93
+ },
94
+ PENDING_MASTER_ADMINS_REGISTRATION_INIT: async ({ engine, state }) => engine.client.onboarding.startMasterAdminsRegistration.mutate({ onboardingId: state.id }),
95
+ PENDING_MASTER_ADMINS_REGISTRATION: async ({ state, engine }, logger) => {
96
+ const { id: onboardingId } = state;
97
+ const toRegister = state.claimedDevices.filter((claimed) => {
98
+ if (claimed.role !== "MASTER_ADMIN") return false;
99
+ return !!!state.masterAdmins.find(
100
+ /* v8 ignore next -- @preserve */
101
+ (a) => a.pubKey === claimed.pubKey
102
+ );
103
+ });
104
+ await Promise.all(toRegister.map(async ({ deviceName: name }) => {
105
+ const index = deviceNameToIndex(name);
106
+ await engine.withDeviceIndex(index).registerDevice({
107
+ role: "ADMIN",
108
+ name
109
+ });
110
+ logger.info(`Registered ${name}`);
111
+ }));
112
+ return engine.client.onboarding.createMasterAdminGroup.mutate({ onboardingId });
113
+ },
114
+ PENDING_SHARED_OWNERS_REGISTRATION_INIT: async ({ engine, state }) => engine.client.onboarding.startSharedOwnersRegistration.mutate({ onboardingId: state.id }),
115
+ PENDING_SHARED_OWNERS_REGISTRATION: async ({ state, engine }, logger) => {
116
+ const { id: onboardingId } = state;
117
+ const toRegister = state.claimedDevices.filter((claimed) => {
118
+ if (claimed.role !== "SHARED_OWNER") return false;
119
+ return !!!state.sharedOwners.find(
120
+ /* v8 ignore next -- @preserve */
121
+ (a) => a.pubKey === claimed.pubKey
122
+ );
123
+ });
124
+ await Promise.all(toRegister.map(async ({ deviceName: name }) => {
125
+ const index = deviceNameToIndex(name);
126
+ await engine.withDeviceIndex(index).registerDevice({
127
+ role: "SHARED_OWNER",
128
+ name
129
+ });
130
+ logger.info(`Registered ${name}`);
131
+ }));
132
+ return engine.client.onboarding.commitSharedOwnersRegistration.mutate({ onboardingId });
133
+ },
134
+ PENDING_REVIEW_BY_MASTER_ADMINS: async ({ state, engine }, logger) => {
135
+ const { id: onboardingId } = state;
136
+ state = await engine.client.onboarding.startReviewByMasterAdmins.mutate({ onboardingId });
137
+ const toCollect = state.masterAdmins.filter((admin) => !admin.review?.signature);
138
+ await Promise.all(toCollect.map(async (admin) => {
139
+ const index = deviceNameToIndex(admin.name);
140
+ const challenge = admin.review?.challenge;
141
+ await engine.withDeviceIndex(index).reviewSharedOwner(challenge);
142
+ logger.info(`Approved with ${admin.name}`);
143
+ }));
144
+ return engine.client.onboarding.commitReviewByMasterAdmins.mutate({ onboardingId });
145
+ },
146
+ PENDING_SEED_PROVISIONING: async ({ state, engine }, logger) => {
147
+ const { id: onboardingId } = state;
148
+ state = await engine.client.onboarding.startSeedProvisioning.mutate({ onboardingId });
149
+ const toCollect = state.sharedOwners.filter((so) => !so.review?.seedFragment);
150
+ await Promise.all(toCollect.map(async (so) => {
151
+ const index = deviceNameToIndex(so.name);
152
+ const challenge = so.review?.seedChallenge;
153
+ await engine.withDeviceIndex(index).collectSeedFragment(challenge);
154
+ logger.info(`Collected fragment for ${so.name}`);
155
+ }));
156
+ return engine.client.onboarding.commitSeedProvisioning.mutate({ onboardingId });
157
+ },
158
+ PENDING_WORKSPACE_INITIALIZATION: async ({ state, engine }) => engine.client.onboarding.initializeWorkspace.mutate({ onboardingId: state.id }),
159
+ COMPLETED: async ({ state }) => state
161
160
  };
162
- var STEPS_LIST = Object.values(STEPS);
163
- async function onboard({
164
- engine,
165
- untilStep
166
- }, logger) {
167
- const { __onboardingId } = engine;
168
- logger.info(`Joining onboarding ${__onboardingId}`);
169
- let state = await engine.client.onboarding.getOnboarding.query({
170
- onboardingId: __onboardingId
171
- });
172
- for (const step of STEPS_LIST.slice(STEPS_LIST.indexOf(STEPS[state.step]))) {
173
- if (untilStep && state.step === untilStep) {
174
- logger.info("Skipping the rest of the onboarding");
175
- break;
176
- }
177
- const index = STEPS_LIST.indexOf(step);
178
- const stepProgress = `${(index + 1).toString().padStart(2, "0")}/${STEPS_LIST.length}`;
179
- logger.info(`(${stepProgress}) ${step.name}`);
180
- state = await step({ engine, state }, logger);
181
- }
161
+ const STEPS_LIST = Object.values(STEPS);
162
+ async function onboard({ engine, untilStep }, logger) {
163
+ const { __onboardingId } = engine;
164
+ logger.info(`Joining onboarding ${__onboardingId}`);
165
+ let state = await engine.client.onboarding.getOnboarding.query({ onboardingId: __onboardingId });
166
+ for (const step of STEPS_LIST.slice(STEPS_LIST.indexOf(STEPS[state.step]))) {
167
+ if (untilStep && state.step === untilStep) {
168
+ logger.info("Skipping the rest of the onboarding");
169
+ break;
170
+ }
171
+ const stepProgress = `${(STEPS_LIST.indexOf(step) + 1).toString().padStart(2, "0")}/${STEPS_LIST.length}`;
172
+ logger.info(`(${stepProgress}) ${step.name}`);
173
+ state = await step({
174
+ engine,
175
+ state
176
+ }, logger);
177
+ }
182
178
  }
183
- export {
184
- STEPS,
185
- onboard
186
- };
187
- /* v8 ignore else -- @preserve */
179
+ //#endregion
180
+ export { STEPS, onboard };
181
+
188
182
  //# sourceMappingURL=onboarding.js.map
@@ -1 +1 @@
1
- {"version":3,"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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","names":[]}
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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"}
@@ -0,0 +1,20 @@
1
+ import { AppRouter } from "@ledgerhq/revault-api";
2
+ import { TRPCClient } from "@trpc/client";
3
+ import { inferRouterInputs, inferRouterOutputs } from "@trpc/server";
4
+
5
+ //#region src/trpc.d.ts
6
+ type TRPCClientOptions = {
7
+ baseUrl: string;
8
+ debugAuthToken?: string;
9
+ rootAuthToken?: string;
10
+ apiAccessToken?: string;
11
+ psdAuth?: string;
12
+ };
13
+ type RevaultApiTRPCClient = TRPCClient<AppRouter>;
14
+ type RouterInputs = inferRouterInputs<AppRouter>;
15
+ type RouterOutputs = inferRouterOutputs<AppRouter>;
16
+ type TRPCContext = {
17
+ context: Record<string, unknown>;
18
+ } | undefined;
19
+ //#endregion
20
+ export { TRPCContext as a, TRPCClientOptions as i, RouterInputs as n, RouterOutputs as r, RevaultApiTRPCClient as t };
@@ -0,0 +1,20 @@
1
+ import { AppRouter } from "@ledgerhq/revault-api";
2
+ import { TRPCClient } from "@trpc/client";
3
+ import { inferRouterInputs, inferRouterOutputs } from "@trpc/server";
4
+
5
+ //#region src/trpc.d.ts
6
+ type TRPCClientOptions = {
7
+ baseUrl: string;
8
+ debugAuthToken?: string;
9
+ rootAuthToken?: string;
10
+ apiAccessToken?: string;
11
+ psdAuth?: string;
12
+ };
13
+ type RevaultApiTRPCClient = TRPCClient<AppRouter>;
14
+ type RouterInputs = inferRouterInputs<AppRouter>;
15
+ type RouterOutputs = inferRouterOutputs<AppRouter>;
16
+ type TRPCContext = {
17
+ context: Record<string, unknown>;
18
+ } | undefined;
19
+ //#endregion
20
+ export { TRPCContext as a, TRPCClientOptions as i, RouterInputs as n, RouterOutputs as r, RevaultApiTRPCClient as t };