@sidhujag/sysweb3-keyring 1.0.627 → 2.0.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.
Files changed (140) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +66 -0
  3. package/cjs/hardware-wallet-manager.js +302 -128
  4. package/cjs/hardware-wallet-manager.js.map +1 -1
  5. package/cjs/keyring-core.js +2605 -0
  6. package/cjs/keyring-core.js.map +1 -0
  7. package/cjs/keyring-manager.js +31 -2439
  8. package/cjs/keyring-manager.js.map +1 -1
  9. package/cjs/ledger/bitcoin_client/lib/appClient.js.map +1 -1
  10. package/cjs/ledger/host-types.js +10 -0
  11. package/cjs/ledger/host-types.js.map +1 -0
  12. package/cjs/ledger/index.js +243 -447
  13. package/cjs/ledger/index.js.map +1 -1
  14. package/cjs/ledger/prepare-psbt.js +177 -0
  15. package/cjs/ledger/prepare-psbt.js.map +1 -0
  16. package/cjs/software-hd-account.js +23 -0
  17. package/cjs/software-hd-account.js.map +1 -0
  18. package/cjs/software.js +74 -0
  19. package/cjs/software.js.map +1 -0
  20. package/cjs/storage-core.js +227 -0
  21. package/cjs/storage-core.js.map +1 -0
  22. package/cjs/storage.js +15 -210
  23. package/cjs/storage.js.map +1 -1
  24. package/cjs/transactions/ethereum.js +176 -39
  25. package/cjs/transactions/ethereum.js.map +1 -1
  26. package/cjs/transactions/evm-local-signer.js +11 -1
  27. package/cjs/transactions/evm-local-signer.js.map +1 -1
  28. package/cjs/transactions/hardware-psbt.js +159 -0
  29. package/cjs/transactions/hardware-psbt.js.map +1 -0
  30. package/cjs/transactions/prepared-evm.js +196 -0
  31. package/cjs/transactions/prepared-evm.js.map +1 -0
  32. package/cjs/transactions/syscoin-core.js +651 -0
  33. package/cjs/transactions/syscoin-core.js.map +1 -0
  34. package/cjs/transactions/syscoin.js +8 -768
  35. package/cjs/transactions/syscoin.js.map +1 -1
  36. package/cjs/trezor/connect.js +243 -0
  37. package/cjs/trezor/connect.js.map +1 -0
  38. package/cjs/trezor/index.js +96 -58
  39. package/cjs/trezor/index.js.map +1 -1
  40. package/cjs/trezor/witness.js +25 -0
  41. package/cjs/trezor/witness.js.map +1 -0
  42. package/cjs/types.js.map +1 -1
  43. package/cjs/utils/psbt-account-scope.js +5 -3
  44. package/cjs/utils/psbt-account-scope.js.map +1 -1
  45. package/esm/errorUtils.js +72 -0
  46. package/esm/errorUtils.js.map +1 -0
  47. package/esm/ethers-v6.js +207 -0
  48. package/esm/ethers-v6.js.map +1 -0
  49. package/esm/hardware-wallet-manager.js +643 -0
  50. package/esm/hardware-wallet-manager.js.map +1 -0
  51. package/esm/ledger/bitcoin_client/lib/appClient.js +279 -0
  52. package/esm/ledger/bitcoin_client/lib/appClient.js.map +1 -0
  53. package/esm/ledger/bitcoin_client/lib/bip32.js +49 -0
  54. package/esm/ledger/bitcoin_client/lib/bip32.js.map +1 -0
  55. package/esm/ledger/bitcoin_client/lib/buffertools.js +119 -0
  56. package/esm/ledger/bitcoin_client/lib/buffertools.js.map +1 -0
  57. package/esm/ledger/bitcoin_client/lib/clientCommands.js +269 -0
  58. package/esm/ledger/bitcoin_client/lib/clientCommands.js.map +1 -0
  59. package/esm/ledger/bitcoin_client/lib/merkelizedPsbt.js +50 -0
  60. package/esm/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +1 -0
  61. package/esm/ledger/bitcoin_client/lib/merkle.js +111 -0
  62. package/esm/ledger/bitcoin_client/lib/merkle.js.map +1 -0
  63. package/esm/ledger/bitcoin_client/lib/merkleMap.js +42 -0
  64. package/esm/ledger/bitcoin_client/lib/merkleMap.js.map +1 -0
  65. package/esm/ledger/bitcoin_client/lib/policy.js +68 -0
  66. package/esm/ledger/bitcoin_client/lib/policy.js.map +1 -0
  67. package/esm/ledger/bitcoin_client/lib/psbtv2.js +645 -0
  68. package/esm/ledger/bitcoin_client/lib/psbtv2.js.map +1 -0
  69. package/esm/ledger/bitcoin_client/lib/varint.js +108 -0
  70. package/esm/ledger/bitcoin_client/lib/varint.js.map +1 -0
  71. package/esm/ledger/consts.js +4 -0
  72. package/esm/ledger/consts.js.map +1 -0
  73. package/esm/ledger/dmk-evm.js +258 -0
  74. package/esm/ledger/dmk-evm.js.map +1 -0
  75. package/esm/ledger/dmk-session.js +264 -0
  76. package/esm/ledger/dmk-session.js.map +1 -0
  77. package/esm/ledger/dmk-utxo.js +279 -0
  78. package/esm/ledger/dmk-utxo.js.map +1 -0
  79. package/esm/ledger/host-types.js +5 -0
  80. package/esm/ledger/host-types.js.map +1 -0
  81. package/esm/ledger/index.js +268 -0
  82. package/esm/ledger/index.js.map +1 -0
  83. package/esm/ledger/prepare-psbt.js +141 -0
  84. package/esm/ledger/prepare-psbt.js.map +1 -0
  85. package/esm/ledger/types.js +2 -0
  86. package/esm/ledger/types.js.map +1 -0
  87. package/esm/ledger-host.js +36 -0
  88. package/esm/ledger-host.js.map +1 -0
  89. package/esm/private-records.js +153 -0
  90. package/esm/private-records.js.map +1 -0
  91. package/esm/providers.js +588 -0
  92. package/esm/providers.js.map +1 -0
  93. package/esm/signers.js +28 -0
  94. package/esm/signers.js.map +1 -0
  95. package/esm/trezor/connect.js +206 -0
  96. package/esm/trezor/connect.js.map +1 -0
  97. package/esm/trezor/index.js +876 -0
  98. package/esm/trezor/index.js.map +1 -0
  99. package/esm/trezor/witness.js +21 -0
  100. package/esm/trezor/witness.js.map +1 -0
  101. package/esm/types.js +17 -0
  102. package/esm/types.js.map +1 -0
  103. package/esm/utils/derivation-paths.js +109 -0
  104. package/esm/utils/derivation-paths.js.map +1 -0
  105. package/esm/utils/psbt-account-scope.js +310 -0
  106. package/esm/utils/psbt-account-scope.js.map +1 -0
  107. package/package.json +55 -8
  108. package/types/hardware-wallet-manager.d.ts +12 -19
  109. package/types/keyring-core.d.ts +263 -0
  110. package/types/keyring-manager.d.ts +7 -224
  111. package/types/ledger/bitcoin_client/lib/appClient.d.ts +6 -3
  112. package/types/ledger/dmk-evm.d.ts +8 -0
  113. package/types/ledger/dmk-session.d.ts +60 -0
  114. package/types/ledger/dmk-utxo.d.ts +26 -0
  115. package/types/ledger/host-types.d.ts +131 -0
  116. package/types/ledger/index.d.ts +21 -58
  117. package/types/ledger/prepare-psbt.d.ts +3 -0
  118. package/types/ledger/types.d.ts +3 -0
  119. package/types/ledger-host.d.ts +7 -0
  120. package/types/software-hd-account.d.ts +16 -0
  121. package/types/software.d.ts +39 -0
  122. package/types/storage-core.d.ts +22 -0
  123. package/types/storage.d.ts +1 -4
  124. package/types/transactions/ethereum.d.ts +17 -7
  125. package/types/transactions/evm-local-signer.d.ts +3 -1
  126. package/types/transactions/hardware-psbt.d.ts +7 -0
  127. package/types/transactions/prepared-evm.d.ts +53 -0
  128. package/types/transactions/syscoin-core.d.ts +92 -0
  129. package/types/transactions/syscoin.d.ts +8 -67
  130. package/types/trezor/connect.d.ts +42 -0
  131. package/types/trezor/index.d.ts +22 -4
  132. package/types/trezor/witness.d.ts +3 -0
  133. package/types/types.d.ts +10 -0
  134. package/types/utils/psbt-account-scope.d.ts +1 -0
  135. package/cjs/transactions/__tests__/integration.test.js +0 -237
  136. package/cjs/transactions/__tests__/integration.test.js.map +0 -1
  137. package/cjs/transactions/__tests__/syscoin.test.js +0 -361
  138. package/cjs/transactions/__tests__/syscoin.test.js.map +0 -1
  139. package/types/transactions/__tests__/integration.test.d.ts +0 -1
  140. package/types/transactions/__tests__/syscoin.test.d.ts +0 -1
@@ -0,0 +1,264 @@
1
+ import { ledgerCancelledError, ledgerHostError, } from './host-types';
2
+ /** One owner and one semantic operation at a time, across EVM and UTXO apps. */
3
+ export class LedgerDmkSession {
4
+ constructor(dmk) {
5
+ this.dmk = dmk;
6
+ this.generation = 0;
7
+ this.queue = Promise.resolve();
8
+ this.closing = Promise.resolve();
9
+ this.invalidationListeners = new Set();
10
+ }
11
+ getStatus() {
12
+ return { connected: this.sessionId !== undefined };
13
+ }
14
+ onInvalidated(listener) {
15
+ this.invalidationListeners.add(listener);
16
+ return () => this.invalidationListeners.delete(listener);
17
+ }
18
+ invalidate() {
19
+ this.generation++;
20
+ for (const listener of this.invalidationListeners)
21
+ listener();
22
+ }
23
+ /** Device selection belongs to the visible host, never to a dapp request. */
24
+ connect(request = {}, options = {}) {
25
+ if (options.signal?.aborted)
26
+ return Promise.reject(ledgerCancelledError());
27
+ if (this.sessionId)
28
+ return Promise.resolve();
29
+ if (this.connectionAttempt)
30
+ return Promise.reject(ledgerHostError('HARDWARE_SIGNER_BUSY', 'Ledger connection is already pending'));
31
+ const controller = new AbortController();
32
+ this.connectionAbort = controller;
33
+ const abort = () => controller.abort();
34
+ options.signal?.addEventListener('abort', abort, { once: true });
35
+ const attempt = this.connectDevice(request, controller.signal);
36
+ this.connectionAttempt = attempt;
37
+ return attempt.finally(() => {
38
+ options.signal?.removeEventListener('abort', abort);
39
+ if (this.connectionAttempt === attempt)
40
+ this.connectionAttempt = undefined;
41
+ if (this.connectionAbort === controller)
42
+ this.connectionAbort = undefined;
43
+ });
44
+ }
45
+ async connectDevice(request, signal) {
46
+ const generation = this.generation;
47
+ let subscription;
48
+ const device = await new Promise((resolve, reject) => {
49
+ let settled = false;
50
+ const timer = request.useGrantedDevices
51
+ ? setTimeout(() => finish(ledgerHostError('HARDWARE_SIGNER_UNAVAILABLE', 'Select a Ledger device in the Ledger window')), 3000)
52
+ : undefined;
53
+ const finish = (error, selected) => {
54
+ if (settled)
55
+ return;
56
+ settled = true;
57
+ if (timer)
58
+ clearTimeout(timer);
59
+ subscription?.unsubscribe();
60
+ signal.removeEventListener('abort', onAbort);
61
+ if (error)
62
+ reject(error);
63
+ else
64
+ resolve(selected);
65
+ };
66
+ const onAbort = () => finish(ledgerCancelledError());
67
+ signal.addEventListener('abort', onAbort, { once: true });
68
+ // Calling startDiscovering synchronously preserves the click's activation.
69
+ const discovery = request.useGrantedDevices
70
+ ? this.dmk.listenToAvailableDevices({})
71
+ : this.dmk.startDiscovering({});
72
+ subscription = discovery.subscribe({
73
+ next: (value) => {
74
+ const devices = Array.isArray(value) ? value : [value];
75
+ if (!devices.length)
76
+ return;
77
+ if (devices.length !== 1) {
78
+ finish(ledgerHostError('HARDWARE_SIGNER_AMBIGUOUS', 'Select one Ledger device in the Ledger window'));
79
+ return;
80
+ }
81
+ finish(undefined, devices[0]);
82
+ },
83
+ error: (error) => finish(error),
84
+ complete: () => {
85
+ if (!settled)
86
+ finish(ledgerHostError('HARDWARE_SIGNER_UNAVAILABLE', 'No Ledger device selected'));
87
+ },
88
+ });
89
+ if (settled)
90
+ subscription?.unsubscribe();
91
+ });
92
+ if (generation !== this.generation || signal.aborted)
93
+ throw ledgerCancelledError();
94
+ await this.closing;
95
+ const sessionId = await this.dmk.connect({ device });
96
+ if (generation !== this.generation || signal.aborted) {
97
+ await this.dmk.disconnect({ sessionId }).catch(() => undefined);
98
+ throw ledgerCancelledError();
99
+ }
100
+ this.sessionId = sessionId;
101
+ this.stateSubscription = this.dmk
102
+ .getDeviceSessionState({ sessionId })
103
+ .subscribe({
104
+ complete: () => {
105
+ if (this.sessionId === sessionId) {
106
+ this.sessionId = undefined;
107
+ this.invalidate();
108
+ this.activeAbort?.abort();
109
+ this.activeCancel?.();
110
+ }
111
+ },
112
+ });
113
+ }
114
+ /** Cancel revokes the result and closes I/O; it cannot undo on-device approval. */
115
+ disconnect() {
116
+ this.invalidate();
117
+ this.connectionAbort?.abort();
118
+ const sessionId = this.sessionId;
119
+ this.sessionId = undefined;
120
+ this.activeAbort?.abort();
121
+ this.activeAbort = undefined;
122
+ this.activeCancel?.();
123
+ this.activeCancel = undefined;
124
+ this.stateSubscription?.unsubscribe();
125
+ this.stateSubscription = undefined;
126
+ this.closing = this.closing.then(async () => {
127
+ if (sessionId)
128
+ await this.dmk.disconnect({ sessionId }).catch(() => undefined);
129
+ });
130
+ return this.closing;
131
+ }
132
+ runExclusive(operation, options = {}) {
133
+ const generation = this.generation;
134
+ const run = async () => {
135
+ await this.closing;
136
+ const sessionId = this.sessionId;
137
+ const assertCurrent = () => {
138
+ if (generation !== this.generation || options.signal?.aborted)
139
+ throw ledgerCancelledError();
140
+ if (!sessionId || this.sessionId !== sessionId)
141
+ throw ledgerHostError('HARDWARE_SIGNER_UNAVAILABLE', 'Connect a Ledger device first');
142
+ };
143
+ assertCurrent();
144
+ const controller = new AbortController();
145
+ this.activeAbort = controller;
146
+ let rejectCancellation = () => undefined;
147
+ const cancelled = new Promise((_, reject) => {
148
+ rejectCancellation = reject;
149
+ });
150
+ controller.signal.addEventListener('abort', () => rejectCancellation(ledgerCancelledError()), { once: true });
151
+ const onAbort = () => {
152
+ rejectCancellation(ledgerCancelledError());
153
+ void this.disconnect();
154
+ };
155
+ options.signal?.addEventListener('abort', onAbort, { once: true });
156
+ try {
157
+ assertCurrent();
158
+ const context = {
159
+ dmk: this.dmk,
160
+ sessionId: sessionId,
161
+ generation,
162
+ signal: controller.signal,
163
+ assertCurrent,
164
+ runAction: (createAction) => {
165
+ assertCurrent();
166
+ return this.awaitAction(createAction(), assertCurrent, options);
167
+ },
168
+ };
169
+ const result = await Promise.race([operation(context), cancelled]);
170
+ assertCurrent();
171
+ return result;
172
+ }
173
+ finally {
174
+ options.signal?.removeEventListener('abort', onAbort);
175
+ if (this.activeAbort === controller)
176
+ this.activeAbort = undefined;
177
+ }
178
+ };
179
+ const result = this.queue.then(run, run);
180
+ this.queue = result.catch(() => undefined);
181
+ return result;
182
+ }
183
+ runAction(createAction, options) {
184
+ return this.runExclusive((session) => session.runAction(() => createAction(session)), options);
185
+ }
186
+ awaitAction(action, assertCurrent, options) {
187
+ return new Promise((resolve, reject) => {
188
+ let settled = false;
189
+ const subscription = {};
190
+ const finish = (error, output) => {
191
+ if (settled)
192
+ return;
193
+ settled = true;
194
+ subscription.current?.unsubscribe();
195
+ if (this.activeCancel === cancel)
196
+ this.activeCancel = undefined;
197
+ if (error)
198
+ reject(error);
199
+ else
200
+ resolve(output);
201
+ };
202
+ const cancel = () => {
203
+ // cancel() may synchronously emit Stopped. Revoke this callback first
204
+ // so that a stale-state observer cannot recursively cancel it.
205
+ if (this.activeCancel === cancel)
206
+ this.activeCancel = undefined;
207
+ try {
208
+ action.cancel();
209
+ }
210
+ catch {
211
+ // The generation is already revoked; cleanup cannot revive it.
212
+ }
213
+ finally {
214
+ finish(ledgerCancelledError());
215
+ }
216
+ };
217
+ this.activeCancel = cancel;
218
+ subscription.current = action.observable.subscribe({
219
+ next: (state) => {
220
+ try {
221
+ assertCurrent();
222
+ options.onProgress?.({
223
+ status: state.status,
224
+ ...(state.status === 'pending'
225
+ ? {
226
+ requiredUserInteraction: state.intermediateValue.requiredUserInteraction,
227
+ ...(typeof state.intermediateValue.step === 'string'
228
+ ? { step: state.intermediateValue.step }
229
+ : {}),
230
+ }
231
+ : {}),
232
+ });
233
+ switch (state.status) {
234
+ case 'completed':
235
+ finish(undefined, state.output);
236
+ break;
237
+ case 'error':
238
+ finish(state.error ??
239
+ ledgerHostError('LEDGER_ACTION_FAILED', 'Ledger action failed'));
240
+ break;
241
+ case 'stopped':
242
+ finish(ledgerCancelledError());
243
+ break;
244
+ }
245
+ }
246
+ catch (error) {
247
+ // A broken progress consumer must not release our queue while the
248
+ // device still has a signing operation in flight.
249
+ void this.disconnect();
250
+ finish(error);
251
+ }
252
+ },
253
+ error: (error) => finish(error),
254
+ complete: () => {
255
+ if (!settled)
256
+ finish(ledgerHostError('LEDGER_INCOMPLETE_ACTION', 'Ledger action ended without a result'));
257
+ },
258
+ });
259
+ if (settled)
260
+ subscription.current.unsubscribe();
261
+ });
262
+ }
263
+ }
264
+ //# sourceMappingURL=dmk-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dmk-session.js","sourceRoot":"","sources":["../../../src/ledger/dmk-session.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,eAAe,GAEhB,MAAM,cAAc,CAAC;AA8BtB,gFAAgF;AAChF,MAAM,OAAO,gBAAgB;IAY3B,YAAqB,GAAwB;QAAxB,QAAG,GAAH,GAAG,CAAqB;QAXrC,eAAU,GAAG,CAAC,CAAC;QAEf,UAAK,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;QAG5C,YAAO,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;QAIlC,0BAAqB,GAAG,IAAI,GAAG,EAAc,CAAC;IAEf,CAAC;IAEjD,SAAS;QACP,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;IACrD,CAAC;IAED,aAAa,CAAC,QAAoB;QAChC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,qBAAqB;YAAE,QAAQ,EAAE,CAAC;IAChE,CAAC;IAED,6EAA6E;IAC7E,OAAO,CACL,UAA2C,EAAE,EAC7C,UAAkC,EAAE;QAEpC,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAC3E,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7C,IAAI,IAAI,CAAC,iBAAiB;YACxB,OAAO,OAAO,CAAC,MAAM,CACnB,eAAe,CACb,sBAAsB,EACtB,sCAAsC,CACvC,CACF,CAAC;QACJ,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;QAClC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACvC,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;QACjC,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YAC1B,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACpD,IAAI,IAAI,CAAC,iBAAiB,KAAK,OAAO;gBACpC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACrC,IAAI,IAAI,CAAC,eAAe,KAAK,UAAU;gBAAE,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,OAAwC,EACxC,MAAmB;QAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,YAAsC,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrE,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,KAAK,GAAG,OAAO,CAAC,iBAAiB;gBACrC,CAAC,CAAC,UAAU,CACR,GAAG,EAAE,CACH,MAAM,CACJ,eAAe,CACb,6BAA6B,EAC7B,6CAA6C,CAC9C,CACF,EACH,IAAI,CACL;gBACH,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,MAAM,GAAG,CAAC,KAAe,EAAE,QAA2B,EAAE,EAAE;gBAC9D,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,IAAI,KAAK;oBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC/B,YAAY,EAAE,WAAW,EAAE,CAAC;gBAC5B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7C,IAAI,KAAK;oBAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;oBACpB,OAAO,CAAC,QAAS,CAAC,CAAC;YAC1B,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,2EAA2E;YAC3E,MAAM,SAAS,GACb,OAAO,CAAC,iBAAiB;gBACvB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,CAAC;gBACvC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACpC,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC;gBACjC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;oBACd,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBACvD,IAAI,CAAC,OAAO,CAAC,MAAM;wBAAE,OAAO;oBAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACzB,MAAM,CACJ,eAAe,CACb,2BAA2B,EAC3B,+CAA+C,CAChD,CACF,CAAC;wBACF,OAAO;oBACT,CAAC;oBACD,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChC,CAAC;gBACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC/B,QAAQ,EAAE,GAAG,EAAE;oBACb,IAAI,CAAC,OAAO;wBACV,MAAM,CACJ,eAAe,CACb,6BAA6B,EAC7B,2BAA2B,CAC5B,CACF,CAAC;gBACN,CAAC;aACF,CAAC,CAAC;YACH,IAAI,OAAO;gBAAE,YAAY,EAAE,WAAW,EAAE,CAAC;QAC3C,CAAC,CAAC,CAAC;QACH,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,OAAO;YAClD,MAAM,oBAAoB,EAAE,CAAC;QAC/B,MAAM,IAAI,CAAC,OAAO,CAAC;QACnB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACrD,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACrD,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAChE,MAAM,oBAAoB,EAAE,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG;aAC9B,qBAAqB,CAAC,EAAE,SAAS,EAAE,CAAC;aACpC,SAAS,CAAC;YACT,QAAQ,EAAE,GAAG,EAAE;gBACb,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;oBACjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;oBAC3B,IAAI,CAAC,UAAU,EAAE,CAAC;oBAClB,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC;oBAC1B,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;gBACxB,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACP,CAAC;IAED,mFAAmF;IACnF,UAAU;QACR,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE,CAAC;QACtC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC1C,IAAI,SAAS;gBACX,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,YAAY,CACV,SAA2D,EAC3D,UAAkC,EAAE;QAEpC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;YACrB,MAAM,IAAI,CAAC,OAAO,CAAC;YACnB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,MAAM,aAAa,GAAG,GAAG,EAAE;gBACzB,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;oBAC3D,MAAM,oBAAoB,EAAE,CAAC;gBAC/B,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;oBAC5C,MAAM,eAAe,CACnB,6BAA6B,EAC7B,+BAA+B,CAChC,CAAC;YACN,CAAC,CAAC;YACF,aAAa,EAAE,CAAC;YAChB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;YAC9B,IAAI,kBAAkB,GAA2B,GAAG,EAAE,CAAC,SAAS,CAAC;YACjE,MAAM,SAAS,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBACjD,kBAAkB,GAAG,MAAM,CAAC;YAC9B,CAAC,CAAC,CAAC;YACH,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAChC,OAAO,EACP,GAAG,EAAE,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,CAAC,EAChD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;YACF,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,kBAAkB,CAAC,oBAAoB,EAAE,CAAC,CAAC;gBAC3C,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YACzB,CAAC,CAAC;YACF,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACnE,IAAI,CAAC;gBACH,aAAa,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAuB;oBAClC,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,SAAS,EAAE,SAAU;oBACrB,UAAU;oBACV,MAAM,EAAE,UAAU,CAAC,MAAM;oBACzB,aAAa;oBACb,SAAS,EAAE,CAAI,YAA6B,EAAE,EAAE;wBAC9C,aAAa,EAAE,CAAC;wBAChB,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;oBAClE,CAAC;iBACF,CAAC;gBACF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;gBACnE,aAAa,EAAE,CAAC;gBAChB,OAAO,MAAM,CAAC;YAChB,CAAC;oBAAS,CAAC;gBACT,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACtD,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU;oBAAE,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YACpE,CAAC;QACH,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,CACP,YAA6D,EAC7D,OAAgC;QAEhC,OAAO,IAAI,CAAC,YAAY,CACtB,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EAC3D,OAAO,CACR,CAAC;IACJ,CAAC;IAEO,WAAW,CACjB,MAAsB,EACtB,aAAyB,EACzB,OAA+B;QAE/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,YAAY,GAA+B,EAAE,CAAC;YACpD,MAAM,MAAM,GAAG,CAAC,KAAe,EAAE,MAAe,EAAE,EAAE;gBAClD,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;gBACpC,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM;oBAAE,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;gBAChE,IAAI,KAAK;oBAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;oBACpB,OAAO,CAAC,MAAgB,CAAC,CAAC;YACjC,CAAC,CAAC;YACF,MAAM,MAAM,GAAG,GAAG,EAAE;gBAClB,sEAAsE;gBACtE,+DAA+D;gBAC/D,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM;oBAAE,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;gBAChE,IAAI,CAAC;oBACH,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,CAAC;gBAAC,MAAM,CAAC;oBACP,+DAA+D;gBACjE,CAAC;wBAAS,CAAC;oBACT,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC,CAAC;YACF,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;YAC3B,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;gBACjD,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;oBACd,IAAI,CAAC;wBACH,aAAa,EAAE,CAAC;wBAChB,OAAO,CAAC,UAAU,EAAE,CAAC;4BACnB,MAAM,EAAE,KAAK,CAAC,MAAM;4BACpB,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;gCAC5B,CAAC,CAAC;oCACE,uBAAuB,EACrB,KAAK,CAAC,iBAAiB,CAAC,uBAAuB;oCACjD,GAAG,CAAC,OAAO,KAAK,CAAC,iBAAiB,CAAC,IAAI,KAAK,QAAQ;wCAClD,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE;wCACxC,CAAC,CAAC,EAAE,CAAC;iCACR;gCACH,CAAC,CAAC,EAAE,CAAC;yBACR,CAAC,CAAC;wBACH,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;4BACrB,KAAK,WAAW;gCACd,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gCAChC,MAAM;4BACR,KAAK,OAAO;gCACV,MAAM,CACJ,KAAK,CAAC,KAAK;oCACT,eAAe,CACb,sBAAsB,EACtB,sBAAsB,CACvB,CACJ,CAAC;gCACF,MAAM;4BACR,KAAK,SAAS;gCACZ,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC;gCAC/B,MAAM;wBACV,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,kEAAkE;wBAClE,kDAAkD;wBAClD,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;wBACvB,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChB,CAAC;gBACH,CAAC;gBACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC/B,QAAQ,EAAE,GAAG,EAAE;oBACb,IAAI,CAAC,OAAO;wBACV,MAAM,CACJ,eAAe,CACb,0BAA0B,EAC1B,sCAAsC,CACvC,CACF,CAAC;gBACN,CAAC;aACF,CAAC,CAAC;YACH,IAAI,OAAO;gBAAE,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,279 @@
1
+ import { ApduBuilder, CallTaskInAppDeviceAction, CommandResultFactory, DeviceExchangeError, DmkResultFactory, InvalidResponseFormatError, UserInteractionRequired, isSuccessCommandResult, } from '@ledgerhq/device-management-kit';
2
+ import { getNetworkConfig } from '@sidhujag/sysweb3-network';
3
+ import { address, payments } from 'bitcoinjs-lib';
4
+ import bs58check from 'bs58check';
5
+ import * as syscoinjs from 'syscoinjs-lib';
6
+ import { AppClient, } from './bitcoin_client/lib/appClient';
7
+ import { WalletPolicy } from './bitcoin_client/lib/policy';
8
+ import { PsbtV2 } from './bitcoin_client/lib/psbtv2';
9
+ import { DESCRIPTOR } from './consts';
10
+ import { ledgerHostError, } from './host-types';
11
+ import { prepareLedgerPsbt } from './prepare-psbt';
12
+ import { getAccountDerivationPath, getAddressDerivationPath, } from '../utils/derivation-paths';
13
+ import { assertPsbtAccountScope, parsePsbtAccountXpub, } from '../utils/psbt-account-scope';
14
+ export class LedgerProtocolError extends DeviceExchangeError {
15
+ constructor(statusCode) {
16
+ super({
17
+ tag: 'LedgerProtocolError',
18
+ errorCode: statusCode,
19
+ message: `Ledger returned status 0x${statusCode
20
+ .toString(16)
21
+ .padStart(4, '0')}`,
22
+ });
23
+ this.statusCode = statusCode;
24
+ this.code =
25
+ statusCode === 0x6985
26
+ ? 'HARDWARE_REQUEST_REJECTED'
27
+ : 'LEDGER_DEVICE_ERROR';
28
+ }
29
+ }
30
+ /** Preserves the existing Bitcoin/Syscoin APDU contract, including 0xe000. */
31
+ export class LedgerBitcoinCommand {
32
+ constructor(cla, ins, p1, p2, data = new Uint8Array(), acceptedStatusCodes = [0x9000]) {
33
+ this.cla = cla;
34
+ this.ins = ins;
35
+ this.p1 = p1;
36
+ this.p2 = p2;
37
+ this.data = data;
38
+ this.acceptedStatusCodes = acceptedStatusCodes;
39
+ this.name = 'PaliBitcoinProtocol';
40
+ }
41
+ getApdu() {
42
+ const builder = new ApduBuilder({
43
+ cla: this.cla,
44
+ ins: this.ins,
45
+ p1: this.p1,
46
+ p2: this.p2,
47
+ });
48
+ builder.addBufferToData(this.data);
49
+ if (builder.getErrors().length)
50
+ throw new Error('Invalid Ledger APDU');
51
+ return builder.build();
52
+ }
53
+ parseResponse(response) {
54
+ if (response.statusCode.length !== 2)
55
+ return CommandResultFactory({
56
+ error: new InvalidResponseFormatError('Invalid Ledger status word'),
57
+ });
58
+ const status = (response.statusCode[0] << 8) | response.statusCode[1];
59
+ if (!this.acceptedStatusCodes.includes(status))
60
+ return CommandResultFactory({
61
+ error: new LedgerProtocolError(status),
62
+ });
63
+ return CommandResultFactory({
64
+ data: Buffer.concat([
65
+ Buffer.from(response.data),
66
+ Buffer.from(response.statusCode),
67
+ ]),
68
+ });
69
+ }
70
+ }
71
+ /** Must be used inside a single DeviceAction; public dmk.sendCommand would requeue. */
72
+ export function createBitcoinAppTransport(internalApi, assertCurrent) {
73
+ return {
74
+ async send(cla, ins, p1, p2, data, acceptedStatusCodes) {
75
+ assertCurrent();
76
+ const response = await internalApi.sendCommand(new LedgerBitcoinCommand(cla, ins, p1, p2, data, acceptedStatusCodes));
77
+ assertCurrent();
78
+ if (!isSuccessCommandResult(response))
79
+ throw response.error;
80
+ return response.data;
81
+ },
82
+ };
83
+ }
84
+ const childIndex = (value) => {
85
+ if (!Number.isSafeInteger(value) || value < 0 || value >= 0x80000000)
86
+ throw ledgerHostError('LEDGER_INVALID_REQUEST', 'Invalid Ledger account or address index');
87
+ };
88
+ export function ledgerUtxoApp(request) {
89
+ childIndex(request.accountIndex);
90
+ const currency = request.currency.toLowerCase();
91
+ if (['sys', 'tsys', 'syscoin'].includes(currency) &&
92
+ [1, 57].includes(request.slip44))
93
+ return 'Syscoin';
94
+ if (['btc', 'tbtc', 'bitcoin'].includes(currency) &&
95
+ [0, 1].includes(request.slip44))
96
+ return request.slip44 === 1 ? 'Bitcoin Test' : 'Bitcoin';
97
+ throw ledgerHostError('HARDWARE_SIGNER_UNAVAILABLE', 'This Ledger UTXO app is not supported');
98
+ }
99
+ const publicKeyPayload = (xpub) => {
100
+ const payload = Buffer.from(bs58check.decode(xpub));
101
+ if (payload.length !== 78 || ![2, 3].includes(payload[45]))
102
+ throw ledgerHostError('LEDGER_INVALID_REQUEST', 'Invalid Ledger account public key');
103
+ return payload.subarray(4); // Ignore only the public version (xpub/zpub/vpub).
104
+ };
105
+ const checkedReceivingAddress = (xpub, request, deviceAddress) => {
106
+ try {
107
+ const testnet = request.slip44 === 1;
108
+ // Resolve the selected app's network explicitly; a mainnet currency alias
109
+ // with slip44 1 must not select the network helper's name-only fallback.
110
+ const coin = ledgerUtxoApp(request) === 'Syscoin'
111
+ ? testnet
112
+ ? 'tSYS'
113
+ : 'SYS'
114
+ : testnet
115
+ ? 'tBTC'
116
+ : 'BTC';
117
+ const config = getNetworkConfig(request.slip44, coin);
118
+ const network = testnet ? config.networks.testnet : config.networks.mainnet;
119
+ const publicKey = parsePsbtAccountXpub(xpub).derive(0).derive(0).publicKey;
120
+ const expected = payments.p2wpkh({ pubkey: publicKey, network });
121
+ if (!expected.address ||
122
+ !expected.output ||
123
+ !Buffer.from(address.toOutputScript(deviceAddress, network)).equals(Buffer.from(expected.output)))
124
+ throw new Error('Address does not match the account');
125
+ return expected.address;
126
+ }
127
+ catch {
128
+ throw ledgerHostError('LEDGER_INVALID_RESPONSE', 'Ledger returned an address that does not match the account');
129
+ }
130
+ };
131
+ const asDmkError = (error) => {
132
+ if (error && typeof error === 'object' && '_tag' in error)
133
+ return error;
134
+ return Object.assign(error instanceof Error ? error : new Error(String(error)), { _tag: 'LedgerUtxoError' });
135
+ };
136
+ export function createLedgerUtxoAdapter(session) {
137
+ const hmacs = new Map();
138
+ session.onInvalidated(() => hmacs.clear());
139
+ let cacheGeneration = -1;
140
+ const run = async (request, interaction, task, options) => {
141
+ const approved = Object.freeze({ ...request });
142
+ const appName = ledgerUtxoApp(approved);
143
+ return session.runExclusive((operation) => operation.runAction(() => {
144
+ if (cacheGeneration !== operation.generation) {
145
+ hmacs.clear();
146
+ cacheGeneration = operation.generation;
147
+ }
148
+ return operation.dmk.executeDeviceAction({
149
+ sessionId: operation.sessionId,
150
+ deviceAction: new CallTaskInAppDeviceAction({
151
+ input: {
152
+ appName,
153
+ skipOpenApp: false,
154
+ requiredUserInteraction: interaction,
155
+ task: async (internalApi) => {
156
+ try {
157
+ const client = new AppClient(createBitcoinAppTransport(internalApi, operation.assertCurrent));
158
+ const value = await task(client, operation, approved);
159
+ operation.assertCurrent();
160
+ return DmkResultFactory({ data: value });
161
+ }
162
+ catch (error) {
163
+ return DmkResultFactory({
164
+ error: asDmkError(error),
165
+ });
166
+ }
167
+ },
168
+ },
169
+ }),
170
+ });
171
+ }), options);
172
+ };
173
+ const accountXpub = async (client, path) => {
174
+ try {
175
+ return await client.getExtendedPubkey(path, false);
176
+ }
177
+ catch (error) {
178
+ // GET_EXTENDED_PUBKEY returns SW_NOT_SUPPORTED for a path that
179
+ // requires on-device display. Never retry denial or transport errors.
180
+ if (error?.statusCode !== 0x6a82)
181
+ throw error;
182
+ return client.getExtendedPubkey(path, true);
183
+ }
184
+ };
185
+ const account = async (client, request, expectedXpub) => {
186
+ const path = getAccountDerivationPath(request.currency, request.slip44, request.accountIndex);
187
+ const fingerprint = await client.getMasterFingerprint();
188
+ if (!/^[0-9a-f]{8}$/i.test(fingerprint))
189
+ throw new Error('Invalid Ledger fingerprint');
190
+ const xpub = await accountXpub(client, path);
191
+ const payload = publicKeyPayload(xpub);
192
+ if (expectedXpub && !payload.equals(publicKeyPayload(expectedXpub)))
193
+ throw ledgerHostError('HARDWARE_ACCOUNT_MISMATCH', 'Connected Ledger does not match the approved account');
194
+ const policy = new WalletPolicy(request.currency.toLowerCase(), DESCRIPTOR, [`[${fingerprint}${path.slice(1)}]${xpub}`]);
195
+ return { fingerprint, xpub, policy };
196
+ };
197
+ const register = async (client, fingerprint, policy, options) => {
198
+ const key = `${fingerprint}|${policy.getId().toString('hex')}`;
199
+ const existing = hmacs.get(key);
200
+ if (existing)
201
+ return existing;
202
+ options?.onProgress?.({
203
+ status: 'pending',
204
+ requiredUserInteraction: 'register-wallet',
205
+ });
206
+ const [id, hmac] = await client.registerWallet(policy);
207
+ if (!id.equals(policy.getId()) || hmac.length !== 32)
208
+ throw new Error('Invalid Ledger wallet registration');
209
+ hmacs.set(key, hmac);
210
+ return hmac;
211
+ };
212
+ return {
213
+ getXpub: (request, options) => run(request, request.checkOnDevice
214
+ ? UserInteractionRequired.VerifyAddress
215
+ : UserInteractionRequired.None, (client, _operation, approved) => client.getExtendedPubkey(getAccountDerivationPath(approved.currency, approved.slip44, approved.accountIndex), !!approved.checkOnDevice), options),
216
+ getAddress: (request, options) => run(request, request.checkOnDevice
217
+ ? UserInteractionRequired.VerifyAddress
218
+ : UserInteractionRequired.None, async (client, _operation, approved) => {
219
+ const { fingerprint, xpub, policy } = await account(client, approved);
220
+ const hmac = await register(client, fingerprint, policy, options);
221
+ const deviceAddress = await client.getWalletAddress(policy, hmac, 0, 0, !!approved.checkOnDevice);
222
+ return checkedReceivingAddress(xpub, approved, deviceAddress);
223
+ }, options),
224
+ getAccount: (request, options) => run(request, request.checkOnDevice
225
+ ? UserInteractionRequired.VerifyAddress
226
+ : UserInteractionRequired.None, async (client, _operation, approved) => {
227
+ const { fingerprint, xpub, policy } = await account(client, approved);
228
+ const hmac = await register(client, fingerprint, policy, options);
229
+ const deviceAddress = await client.getWalletAddress(policy, hmac, 0, 0, !!approved.checkOnDevice);
230
+ const address = checkedReceivingAddress(xpub, approved, deviceAddress);
231
+ return { fingerprint, xpub, address };
232
+ }, options),
233
+ signMessage: (request, options) => run(request, UserInteractionRequired.SignPersonalMessage, async (client, _operation, approved) => {
234
+ publicKeyPayload(approved.accountXpub);
235
+ await account(client, approved, approved.accountXpub);
236
+ childIndex(approved.addressIndex ?? 0);
237
+ return client.signMessage(Buffer.from(approved.message), getAddressDerivationPath(approved.currency, approved.slip44, approved.accountIndex, !!approved.change, approved.addressIndex ?? 0));
238
+ }, options),
239
+ signPsbt: async (request, options) => {
240
+ if (!request.psbtBase64 || request.psbtBase64.length > 4 * 1024 * 1024)
241
+ return Promise.reject(ledgerHostError('LEDGER_INVALID_REQUEST', 'Invalid Ledger PSBT'));
242
+ const encoded = Buffer.from(request.psbtBase64, 'base64');
243
+ if (encoded.toString('base64') !== request.psbtBase64)
244
+ return Promise.reject(ledgerHostError('LEDGER_INVALID_REQUEST', 'Invalid Ledger PSBT encoding'));
245
+ // Preserve the Syscoin fork's transaction and asset serialization.
246
+ const psbt = syscoinjs.utils.bitcoinjs.Psbt.fromBase64(request.psbtBase64);
247
+ const scope = {
248
+ account: { address: '', xpub: request.accountXpub },
249
+ accountId: request.accountIndex,
250
+ accountType: 'Ledger',
251
+ network: { currency: request.currency, slip44: request.slip44 },
252
+ };
253
+ assertPsbtAccountScope(psbt, scope);
254
+ return run(request, UserInteractionRequired.SignTransaction, async (client, _operation, approved) => {
255
+ const { fingerprint, policy } = await account(client, approved, approved.accountXpub);
256
+ prepareLedgerPsbt(psbt, approved.accountXpub, approved.accountIndex, approved.currency, approved.slip44, fingerprint);
257
+ assertPsbtAccountScope(psbt, scope);
258
+ const hmac = await register(client, fingerprint, policy, options);
259
+ options?.onProgress?.({
260
+ status: 'pending',
261
+ requiredUserInteraction: 'sign-transaction',
262
+ });
263
+ const signatures = await client.signPsbt(new PsbtV2().fromBitcoinJS(psbt), policy, hmac);
264
+ return {
265
+ fingerprint,
266
+ signatures: signatures.map(([inputIndex, signature]) => ({
267
+ inputIndex,
268
+ pubkeyHex: signature.pubkey.toString('hex'),
269
+ signatureHex: signature.signature.toString('hex'),
270
+ ...(signature.tapleafHash
271
+ ? { tapleafHashHex: signature.tapleafHash.toString('hex') }
272
+ : {}),
273
+ })),
274
+ };
275
+ }, options);
276
+ },
277
+ };
278
+ }
279
+ //# sourceMappingURL=dmk-utxo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dmk-utxo.js","sourceRoot":"","sources":["../../../src/ledger/dmk-utxo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export function ledgerHostError(code, message) {
2
+ return Object.assign(new Error(message), { code });
3
+ }
4
+ export const ledgerCancelledError = () => ledgerHostError('HARDWARE_REQUEST_CANCELLED', 'Ledger request cancelled');
5
+ //# sourceMappingURL=host-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-types.js","sourceRoot":"","sources":["../../../src/ledger/host-types.ts"],"names":[],"mappings":"AAgJA,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,OAAe;IAIf,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CACvC,eAAe,CAAC,4BAA4B,EAAE,0BAA0B,CAAC,CAAC"}