@sidhujag/sysweb3-keyring 1.0.491

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 (104) hide show
  1. package/README.md +201 -0
  2. package/cjs/errorUtils.js +75 -0
  3. package/cjs/errorUtils.js.map +1 -0
  4. package/cjs/hardware-wallet-manager.js +462 -0
  5. package/cjs/hardware-wallet-manager.js.map +1 -0
  6. package/cjs/index.js +31 -0
  7. package/cjs/index.js.map +1 -0
  8. package/cjs/initial-state.js +105 -0
  9. package/cjs/initial-state.js.map +1 -0
  10. package/cjs/keyring-manager.js +1687 -0
  11. package/cjs/keyring-manager.js.map +1 -0
  12. package/cjs/ledger/bitcoin_client/index.js +47 -0
  13. package/cjs/ledger/bitcoin_client/index.js.map +1 -0
  14. package/cjs/ledger/bitcoin_client/lib/appClient.js +408 -0
  15. package/cjs/ledger/bitcoin_client/lib/appClient.js.map +1 -0
  16. package/cjs/ledger/bitcoin_client/lib/bip32.js +61 -0
  17. package/cjs/ledger/bitcoin_client/lib/bip32.js.map +1 -0
  18. package/cjs/ledger/bitcoin_client/lib/buffertools.js +126 -0
  19. package/cjs/ledger/bitcoin_client/lib/buffertools.js.map +1 -0
  20. package/cjs/ledger/bitcoin_client/lib/clientCommands.js +270 -0
  21. package/cjs/ledger/bitcoin_client/lib/clientCommands.js.map +1 -0
  22. package/cjs/ledger/bitcoin_client/lib/constants.js +16 -0
  23. package/cjs/ledger/bitcoin_client/lib/constants.js.map +1 -0
  24. package/cjs/ledger/bitcoin_client/lib/merkelizedPsbt.js +54 -0
  25. package/cjs/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +1 -0
  26. package/cjs/ledger/bitcoin_client/lib/merkle.js +109 -0
  27. package/cjs/ledger/bitcoin_client/lib/merkle.js.map +1 -0
  28. package/cjs/ledger/bitcoin_client/lib/merkleMap.js +46 -0
  29. package/cjs/ledger/bitcoin_client/lib/merkleMap.js.map +1 -0
  30. package/cjs/ledger/bitcoin_client/lib/policy.js +66 -0
  31. package/cjs/ledger/bitcoin_client/lib/policy.js.map +1 -0
  32. package/cjs/ledger/bitcoin_client/lib/psbtv2.js +640 -0
  33. package/cjs/ledger/bitcoin_client/lib/psbtv2.js.map +1 -0
  34. package/cjs/ledger/bitcoin_client/lib/varint.js +113 -0
  35. package/cjs/ledger/bitcoin_client/lib/varint.js.map +1 -0
  36. package/cjs/ledger/consts.js +7 -0
  37. package/cjs/ledger/consts.js.map +1 -0
  38. package/cjs/ledger/index.js +319 -0
  39. package/cjs/ledger/index.js.map +1 -0
  40. package/cjs/ledger/types.js +3 -0
  41. package/cjs/ledger/types.js.map +1 -0
  42. package/cjs/network-utils.js +76 -0
  43. package/cjs/network-utils.js.map +1 -0
  44. package/cjs/providers.js +270 -0
  45. package/cjs/providers.js.map +1 -0
  46. package/cjs/signers.js +64 -0
  47. package/cjs/signers.js.map +1 -0
  48. package/cjs/storage.js +30 -0
  49. package/cjs/storage.js.map +1 -0
  50. package/cjs/transactions/__tests__/integration.test.js +237 -0
  51. package/cjs/transactions/__tests__/integration.test.js.map +1 -0
  52. package/cjs/transactions/__tests__/syscoin.test.js +361 -0
  53. package/cjs/transactions/__tests__/syscoin.test.js.map +1 -0
  54. package/cjs/transactions/ethereum.js +1577 -0
  55. package/cjs/transactions/ethereum.js.map +1 -0
  56. package/cjs/transactions/index.js +19 -0
  57. package/cjs/transactions/index.js.map +1 -0
  58. package/cjs/transactions/syscoin.js +328 -0
  59. package/cjs/transactions/syscoin.js.map +1 -0
  60. package/cjs/trezor/index.js +718 -0
  61. package/cjs/trezor/index.js.map +1 -0
  62. package/cjs/types.js +12 -0
  63. package/cjs/types.js.map +1 -0
  64. package/cjs/utils/derivation-paths.js +99 -0
  65. package/cjs/utils/derivation-paths.js.map +1 -0
  66. package/cjs/utils/psbt.js +60 -0
  67. package/cjs/utils/psbt.js.map +1 -0
  68. package/cjs/utils.js +130 -0
  69. package/cjs/utils.js.map +1 -0
  70. package/package.json +46 -0
  71. package/types/errorUtils.d.ts +1 -0
  72. package/types/hardware-wallet-manager.d.ts +110 -0
  73. package/types/index.d.ts +12 -0
  74. package/types/initial-state.d.ts +79 -0
  75. package/types/keyring-manager.d.ts +184 -0
  76. package/types/ledger/bitcoin_client/index.d.ts +5 -0
  77. package/types/ledger/bitcoin_client/lib/appClient.d.ts +106 -0
  78. package/types/ledger/bitcoin_client/lib/bip32.d.ts +11 -0
  79. package/types/ledger/bitcoin_client/lib/buffertools.d.ts +28 -0
  80. package/types/ledger/bitcoin_client/lib/clientCommands.d.ts +77 -0
  81. package/types/ledger/bitcoin_client/lib/constants.d.ts +12 -0
  82. package/types/ledger/bitcoin_client/lib/merkelizedPsbt.d.ts +24 -0
  83. package/types/ledger/bitcoin_client/lib/merkle.d.ts +32 -0
  84. package/types/ledger/bitcoin_client/lib/merkleMap.d.ts +23 -0
  85. package/types/ledger/bitcoin_client/lib/policy.d.ts +36 -0
  86. package/types/ledger/bitcoin_client/lib/psbtv2.d.ts +167 -0
  87. package/types/ledger/bitcoin_client/lib/varint.d.ts +23 -0
  88. package/types/ledger/consts.d.ts +3 -0
  89. package/types/ledger/index.d.ts +51 -0
  90. package/types/ledger/types.d.ts +48 -0
  91. package/types/network-utils.d.ts +14 -0
  92. package/types/providers.d.ts +47 -0
  93. package/types/signers.d.ts +95 -0
  94. package/types/storage.d.ts +2 -0
  95. package/types/transactions/__tests__/integration.test.d.ts +1 -0
  96. package/types/transactions/__tests__/syscoin.test.d.ts +1 -0
  97. package/types/transactions/ethereum.d.ts +80 -0
  98. package/types/transactions/index.d.ts +2 -0
  99. package/types/transactions/syscoin.d.ts +61 -0
  100. package/types/trezor/index.d.ts +170 -0
  101. package/types/types.d.ts +294 -0
  102. package/types/utils/derivation-paths.d.ts +35 -0
  103. package/types/utils/psbt.d.ts +17 -0
  104. package/types/utils.d.ts +4 -0
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sanitizeBigintToNumber = sanitizeBigintToNumber;
4
+ exports.parseVarint = parseVarint;
5
+ exports.createVarint = createVarint;
6
+ function bigintToSmallEndian(value, length, buffer, offset) {
7
+ for (let i = 0; i < length; i++) {
8
+ if (buffer[i + offset] == undefined) {
9
+ throw Error('Buffer too small');
10
+ }
11
+ buffer[i + offset] = Number(value % BigInt(256));
12
+ value = value >> BigInt(8);
13
+ }
14
+ }
15
+ function smallEndianToBigint(buffer, offset, length) {
16
+ let result = BigInt(0);
17
+ for (let i = 0; i < length; i++) {
18
+ if (buffer[i + offset] == undefined) {
19
+ throw Error('Buffer too small');
20
+ }
21
+ result += BigInt(buffer[i + offset]) << BigInt(i * 8);
22
+ }
23
+ return result;
24
+ }
25
+ /**
26
+ * Converts a `bigint` to a `number` if it non-negative and at most MAX_SAFE_INTEGER; throws `RangeError` otherwise.
27
+ * Used when converting a Bitcoin-style varint to a `number`, since varints could be larger than what the `Number`
28
+ * class can represent without loss of precision.
29
+ *
30
+ * @param n the number to convert
31
+ * @returns `n` as a `number`
32
+ */
33
+ function sanitizeBigintToNumber(n) {
34
+ if (n < 0)
35
+ throw RangeError('Negative bigint is not a valid varint');
36
+ if (n > Number.MAX_SAFE_INTEGER)
37
+ throw RangeError('Too large for a Number');
38
+ return Number(n);
39
+ }
40
+ function getVarintSize(value) {
41
+ if (typeof value === 'number') {
42
+ value = sanitizeBigintToNumber(value);
43
+ }
44
+ if (value < BigInt(0)) {
45
+ throw new RangeError('Negative numbers are not supported');
46
+ }
47
+ if (value >= BigInt(1) << BigInt(64)) {
48
+ throw new RangeError('Too large for a Bitcoin-style varint');
49
+ }
50
+ if (value < BigInt(0xfd))
51
+ return 1;
52
+ else if (value <= BigInt(0xffff))
53
+ return 3;
54
+ else if (value <= BigInt(0xffffffff))
55
+ return 5;
56
+ else
57
+ return 9;
58
+ }
59
+ /**
60
+ * Parses a Bitcoin-style variable length integer from a buffer, starting at the given `offset`. Returns a pair
61
+ * containing the parsed `BigInt`, and its length in bytes from the buffer.
62
+ *
63
+ * @param data the `Buffer` from which the variable-length integer is read
64
+ * @param offset a non-negative offset to read from
65
+ * @returns a pair where the first element is the parsed BigInt, and the second element is the length in bytes parsed
66
+ * from the buffer.
67
+ *
68
+ * @throws `RangeError` if offset is negative.
69
+ * @throws `Error` if the buffer's end is reached withut parsing being completed.
70
+ */
71
+ function parseVarint(data, offset) {
72
+ if (offset < 0) {
73
+ throw RangeError('Negative offset is invalid');
74
+ }
75
+ if (data[offset] == undefined) {
76
+ throw Error('Buffer too small');
77
+ }
78
+ if (data[offset] < 0xfd) {
79
+ return [BigInt(data[offset]), 1];
80
+ }
81
+ else {
82
+ let size;
83
+ if (data[offset] === 0xfd)
84
+ size = 2;
85
+ else if (data[offset] === 0xfe)
86
+ size = 4;
87
+ else
88
+ size = 8;
89
+ return [smallEndianToBigint(data, offset + 1, size), size + 1];
90
+ }
91
+ }
92
+ function createVarint(value) {
93
+ if (typeof value === 'number') {
94
+ value = sanitizeBigintToNumber(value);
95
+ }
96
+ const size = getVarintSize(value);
97
+ value = BigInt(value);
98
+ const buffer = Buffer.alloc(size);
99
+ if (size == 1) {
100
+ buffer[0] = Number(value);
101
+ }
102
+ else {
103
+ if (size == 3)
104
+ buffer[0] = 0xfd;
105
+ else if (size === 5)
106
+ buffer[0] = 0xfe;
107
+ else
108
+ buffer[0] = 0xff;
109
+ bigintToSmallEndian(value, size - 1, buffer, 1);
110
+ }
111
+ return buffer;
112
+ }
113
+ //# sourceMappingURL=varint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"varint.js","sourceRoot":"","sources":["../../../../../src/ledger/bitcoin_client/lib/varint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WILL_NOT_DISPLAY = exports.RECEIVING_ADDRESS_INDEX = exports.DESCRIPTOR = void 0;
4
+ exports.DESCRIPTOR = 'wpkh(@0/**)';
5
+ exports.RECEIVING_ADDRESS_INDEX = 0;
6
+ exports.WILL_NOT_DISPLAY = false;
7
+ //# sourceMappingURL=consts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consts.js","sourceRoot":"","sources":["../../../src/ledger/consts.ts"],"names":[],"mappings":";;;AAAa,QAAA,UAAU,GAAG,aAAa,CAAC;AAC3B,QAAA,uBAAuB,GAAG,CAAC,CAAC;AAC5B,QAAA,gBAAgB,GAAG,KAAK,CAAC"}
@@ -0,0 +1,319 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.LedgerKeyring = void 0;
37
+ const bitcoin_client_1 = __importStar(require("./bitcoin_client"));
38
+ const consts_1 = require("./consts");
39
+ const bip32_1 = require("@trezor/utxo-lib/lib/bip32");
40
+ const hw_app_eth_1 = __importStar(require("@ledgerhq/hw-app-eth"));
41
+ const eth_sig_util_1 = require("eth-sig-util");
42
+ const derivation_paths_1 = require("../utils/derivation-paths");
43
+ const syscoinjs_lib_1 = require("syscoinjs-lib");
44
+ const hardware_wallet_manager_1 = require("../hardware-wallet-manager");
45
+ class LedgerKeyring {
46
+ constructor() {
47
+ this.hdPath = "m/44'/57'/0'/0/0";
48
+ this.transport = null;
49
+ this.getUtxoAddress = async ({ coin, index, // account index
50
+ slip44, showInLedger, }) => {
51
+ return this.executeWithRetry(async () => {
52
+ const fingerprint = await this.ledgerUtxoClient.getMasterFingerprint();
53
+ const xpub = await this.getXpub({ index, coin, slip44 });
54
+ this.setHdPath(coin, index, slip44);
55
+ const xpubWithDescriptor = `[${this.hdPath}]${xpub}`.replace('m', fingerprint);
56
+ const walletPolicy = new bitcoin_client_1.DefaultWalletPolicy(consts_1.DESCRIPTOR, xpubWithDescriptor);
57
+ const address = await this.ledgerUtxoClient.getWalletAddress(walletPolicy, null, consts_1.RECEIVING_ADDRESS_INDEX, index, showInLedger ? showInLedger : consts_1.WILL_NOT_DISPLAY);
58
+ return address;
59
+ }, 'getUtxoAddress');
60
+ };
61
+ this.verifyUtxoAddress = async (accountIndex, currency, slip44) => await this.getUtxoAddress({
62
+ coin: currency,
63
+ index: accountIndex,
64
+ slip44: slip44,
65
+ showInLedger: true,
66
+ });
67
+ this.getXpub = async ({ index, coin, slip44, }) => {
68
+ return this.executeWithRetry(async () => {
69
+ this.setHdPath(coin, index, slip44);
70
+ const xpub = await this.ledgerUtxoClient.getExtendedPubkey(this.hdPath, consts_1.WILL_NOT_DISPLAY);
71
+ // Always return raw xpub - descriptor format is built inline where needed
72
+ return xpub;
73
+ }, 'getXpub');
74
+ };
75
+ /**
76
+ * Sign a UTXO message - public method used by transaction classes
77
+ */
78
+ this.signUtxoMessage = async (path, message) => {
79
+ return this.executeWithRetry(async () => {
80
+ const bufferMessage = Buffer.from(message);
81
+ const signature = await this.ledgerUtxoClient.signMessage(bufferMessage, path);
82
+ return signature;
83
+ }, 'signUtxoMessage');
84
+ };
85
+ this.signEVMTransaction = async ({ rawTx, accountIndex, }) => {
86
+ return this.executeWithRetry(async () => {
87
+ this.setHdPath('eth', accountIndex, 60);
88
+ const resolution = await hw_app_eth_1.ledgerService.resolveTransaction(rawTx, {}, {});
89
+ const signature = await this.ledgerEVMClient.signTransaction(this.hdPath.replace(/^m\//, ''), // Remove 'm/' prefix for EVM
90
+ rawTx, resolution);
91
+ return signature;
92
+ }, 'signEVMTransaction');
93
+ };
94
+ this.signPersonalMessage = async ({ message, accountIndex, }) => {
95
+ return this.executeWithRetry(async () => {
96
+ this.setHdPath('eth', accountIndex, 60);
97
+ const signature = await this.ledgerEVMClient.signPersonalMessage(this.hdPath.replace(/^m\//, ''), // Remove 'm/' prefix for EVM
98
+ message);
99
+ return `0x${signature.r}${signature.s}${signature.v.toString(16)}`;
100
+ }, 'signPersonalMessage');
101
+ };
102
+ this.transformTypedData = (data, metamaskV4Compat) => {
103
+ if (!metamaskV4Compat) {
104
+ throw new Error('Ledger: Only version 4 of typed data signing is supported');
105
+ }
106
+ const { types, primaryType, domain, message } = this.sanitizeData(data);
107
+ const domainSeparatorHash = eth_sig_util_1.TypedDataUtils.hashStruct('EIP712Domain', this.sanitizeData(domain), types, true).toString('hex');
108
+ let messageHash = null;
109
+ if (primaryType !== 'EIP712Domain') {
110
+ messageHash = eth_sig_util_1.TypedDataUtils.hashStruct(primaryType, this.sanitizeData(message), types, true).toString('hex');
111
+ }
112
+ return {
113
+ domain_separator_hash: domainSeparatorHash,
114
+ message_hash: messageHash,
115
+ ...data,
116
+ };
117
+ };
118
+ this.getEvmAddressAndPubKey = async ({ accountIndex, }) => {
119
+ return this.executeWithRetry(async () => {
120
+ this.setHdPath('eth', accountIndex, 60);
121
+ const { address, publicKey } = await this.ledgerEVMClient.getAddress(this.hdPath.replace(/^m\//, '') // Remove 'm/' prefix for EVM
122
+ );
123
+ return { address, publicKey };
124
+ }, 'getEvmAddressAndPubKey');
125
+ };
126
+ this.signTypedData = async ({ version, data, accountIndex, }) => {
127
+ return this.executeWithRetry(async () => {
128
+ this.setHdPath('eth', accountIndex, 60);
129
+ const dataWithHashes = this.transformTypedData(data, version === 'V4');
130
+ const { domain_separator_hash, message_hash } = dataWithHashes;
131
+ const signature = await this.ledgerEVMClient.signEIP712HashedMessage(this.hdPath.replace(/^m\//, ''), // Remove 'm/' prefix for EVM
132
+ domain_separator_hash, message_hash ? message_hash : '');
133
+ return `0x${signature.r}${signature.s}${signature.v.toString(16)}`;
134
+ }, 'signTypedData');
135
+ };
136
+ this.getMasterFingerprint = async () => {
137
+ try {
138
+ const masterFingerprint = await this.ledgerUtxoClient.getMasterFingerprint();
139
+ return masterFingerprint;
140
+ }
141
+ catch (error) {
142
+ console.log('Fingerprint error: ', error);
143
+ throw error;
144
+ }
145
+ };
146
+ this.hardwareWalletManager = new hardware_wallet_manager_1.HardwareWalletManager();
147
+ // Set up event listeners
148
+ this.hardwareWalletManager.on('connected', ({ type }) => {
149
+ if (type === hardware_wallet_manager_1.HardwareWalletType.LEDGER) {
150
+ console.log('Ledger connected');
151
+ }
152
+ });
153
+ this.hardwareWalletManager.on('disconnected', ({ type }) => {
154
+ if (type === hardware_wallet_manager_1.HardwareWalletType.LEDGER) {
155
+ console.log('Ledger disconnected');
156
+ this.transport = null;
157
+ // Clear clients on disconnect
158
+ this.ledgerEVMClient = null;
159
+ this.ledgerUtxoClient = null;
160
+ }
161
+ });
162
+ this.hardwareWalletManager.on('connectionFailed', ({ type, error }) => {
163
+ if (type === hardware_wallet_manager_1.HardwareWalletType.LEDGER) {
164
+ console.error('Ledger connection failed:', error);
165
+ }
166
+ });
167
+ this.evm = {
168
+ getEvmAddressAndPubKey: this.getEvmAddressAndPubKey,
169
+ signEVMTransaction: this.signEVMTransaction,
170
+ signPersonalMessage: this.signPersonalMessage,
171
+ signTypedData: this.signTypedData,
172
+ };
173
+ this.utxo = {
174
+ getUtxoAddress: this.getUtxoAddress,
175
+ getXpub: this.getXpub,
176
+ verifyUtxoAddress: this.verifyUtxoAddress,
177
+ };
178
+ }
179
+ /**
180
+ * Ensure Ledger is connected with automatic retry
181
+ * Note: This is automatically called by all operations through executeWithRetry
182
+ * External callers don't need to call this directly
183
+ */
184
+ async ensureConnection() {
185
+ await this.hardwareWalletManager.ensureConnection(hardware_wallet_manager_1.HardwareWalletType.LEDGER);
186
+ this.transport = await this.hardwareWalletManager.getLedgerConnection();
187
+ // Create clients if transport is available
188
+ if (this.transport && (!this.ledgerEVMClient || !this.ledgerUtxoClient)) {
189
+ this.ledgerEVMClient = new hw_app_eth_1.default(this.transport);
190
+ this.ledgerUtxoClient = new bitcoin_client_1.default(this.transport);
191
+ }
192
+ }
193
+ sanitizeData(data) {
194
+ switch (Object.prototype.toString.call(data)) {
195
+ case '[object Object]': {
196
+ const entries = Object.keys(data).map((k) => [
197
+ k,
198
+ this.sanitizeData(data[k]),
199
+ ]);
200
+ return Object.fromEntries(entries);
201
+ }
202
+ case '[object Array]':
203
+ return data.map((v) => this.sanitizeData(v));
204
+ case '[object BigInt]':
205
+ return data.toString();
206
+ default:
207
+ return data;
208
+ }
209
+ }
210
+ setHdPath(coin, accountIndex, slip44) {
211
+ if ((0, derivation_paths_1.isEvmCoin)(coin, slip44)) {
212
+ // For EVM, the "accountIndex" parameter is actually used as the address index
213
+ // EVM typically uses account 0, and different addresses are at different address indices
214
+ this.hdPath = (0, derivation_paths_1.getAddressDerivationPath)(coin, slip44, 0, // account is always 0 for EVM
215
+ false, // not a change address
216
+ accountIndex // this is actually the address index for EVM
217
+ );
218
+ }
219
+ else {
220
+ // For UTXO, use account-level derivation path
221
+ this.hdPath = (0, derivation_paths_1.getAccountDerivationPath)(coin, slip44, accountIndex);
222
+ }
223
+ }
224
+ /**
225
+ * Convert PSBT to Ledger format with retry logic
226
+ */
227
+ async convertToLedgerFormat(psbt, accountXpub, accountId, currency, slip44) {
228
+ return this.executeWithRetry(async () => {
229
+ // Ensure Ledger is connected before attempting operations
230
+ // This is now handled by executeWithRetry
231
+ // Create BIP32 node from account xpub
232
+ const accountNode = (0, bip32_1.fromBase58)(accountXpub);
233
+ // Get master fingerprint
234
+ const fingerprint = await this.getMasterFingerprint();
235
+ // Enhance each input with bip32Derivation
236
+ for (let i = 0; i < psbt.inputCount; i++) {
237
+ const dataInput = psbt.data.inputs[i];
238
+ // Skip if already has bip32Derivation
239
+ if (dataInput.bip32Derivation && dataInput.bip32Derivation.length > 0) {
240
+ continue;
241
+ }
242
+ // Ensure witnessUtxo is present if nonWitnessUtxo exists
243
+ if (!dataInput.witnessUtxo && dataInput.nonWitnessUtxo) {
244
+ const txBuffer = dataInput.nonWitnessUtxo;
245
+ const tx = syscoinjs_lib_1.Transaction.fromBuffer(txBuffer);
246
+ const vout = psbt.txInputs[i].index;
247
+ if (tx.outs[vout]) {
248
+ dataInput.witnessUtxo = {
249
+ script: tx.outs[vout].script,
250
+ value: tx.outs[vout].value,
251
+ };
252
+ }
253
+ }
254
+ // Extract path from unknownKeyVals
255
+ if (dataInput.unknownKeyVals &&
256
+ dataInput.unknownKeyVals.length > 1 &&
257
+ dataInput.unknownKeyVals[1].key.equals(Buffer.from('path'))) {
258
+ const fullPath = dataInput.unknownKeyVals[1].value.toString();
259
+ const accountPath = (0, derivation_paths_1.getAccountDerivationPath)(currency, slip44, accountId);
260
+ const relativePath = fullPath
261
+ .replace(accountPath, '')
262
+ .replace(/^\//, '');
263
+ const derivationTokens = relativePath.split('/').filter((t) => t);
264
+ const derivedAccount = derivationTokens.reduce((acc, token) => {
265
+ const index = parseInt(token);
266
+ if (isNaN(index)) {
267
+ return acc;
268
+ }
269
+ return acc.derive(index);
270
+ }, accountNode);
271
+ const pubkey = derivedAccount.publicKey;
272
+ if (pubkey && Buffer.isBuffer(pubkey)) {
273
+ // Add the bip32Derivation that Ledger needs
274
+ const bip32Derivation = {
275
+ masterFingerprint: Buffer.from(fingerprint, 'hex'),
276
+ path: fullPath,
277
+ pubkey: pubkey,
278
+ };
279
+ psbt.updateInput(i, {
280
+ bip32Derivation: [bip32Derivation],
281
+ });
282
+ }
283
+ }
284
+ }
285
+ return psbt;
286
+ }, 'convertToLedgerFormat');
287
+ }
288
+ /**
289
+ * Execute operation with automatic retry
290
+ */
291
+ async executeWithRetry(operation, operationName) {
292
+ // Ensure connection first
293
+ await this.ensureConnection();
294
+ // Use hardware wallet manager's retry mechanism
295
+ return this.hardwareWalletManager.retryOperation(operation, operationName, {
296
+ maxRetries: 3,
297
+ baseDelay: 1000,
298
+ maxDelay: 5000,
299
+ backoffMultiplier: 2,
300
+ });
301
+ }
302
+ /**
303
+ * Get hardware wallet status
304
+ */
305
+ getStatus() {
306
+ return this.hardwareWalletManager
307
+ .getStatus()
308
+ .find((s) => s.type === hardware_wallet_manager_1.HardwareWalletType.LEDGER);
309
+ }
310
+ /**
311
+ * Clean up resources
312
+ */
313
+ async destroy() {
314
+ await this.hardwareWalletManager.destroy();
315
+ this.transport = null;
316
+ }
317
+ }
318
+ exports.LedgerKeyring = LedgerKeyring;
319
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ledger/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ledger/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDefaultUTXONetworks = getDefaultUTXONetworks;
4
+ exports.getSyscoinUTXOMainnetNetwork = getSyscoinUTXOMainnetNetwork;
5
+ exports.getSyscoinUTXOTestnetNetwork = getSyscoinUTXOTestnetNetwork;
6
+ exports.getBitcoinMainnetNetwork = getBitcoinMainnetNetwork;
7
+ const sysweb3_network_1 = require("@sidhujag/sysweb3-network");
8
+ /**
9
+ * Generate default UTXO networks from coins.ts data
10
+ * This ensures consistency and avoids hardcoded duplicates
11
+ */
12
+ function getDefaultUTXONetworks() {
13
+ const defaultNetworks = {};
14
+ // Filter coins that should be default networks
15
+ const defaultCoins = sysweb3_network_1.coins.filter((coin) => {
16
+ // Include Syscoin mainnet and testnet as defaults
17
+ return ((coin.coinShortcut === 'SYS' && coin.slip44 === 57) || // Syscoin Mainnet
18
+ (coin.coinShortcut === 'tSYS' && coin.slip44 === 1) || // Syscoin Testnet
19
+ (coin.coinShortcut === 'BTC' && coin.slip44 === 0) // Bitcoin Mainnet only
20
+ );
21
+ });
22
+ defaultCoins.forEach((coin) => {
23
+ if (!coin.blockchainLink ||
24
+ !coin.blockchainLink.url ||
25
+ coin.blockchainLink.url.length === 0) {
26
+ return; // Skip coins without valid blockbook URLs
27
+ }
28
+ // Use primary blockbook URL
29
+ const primaryUrl = Array.isArray(coin.blockchainLink.url)
30
+ ? coin.blockchainLink.url[0]
31
+ : coin.blockchainLink.url;
32
+ const chainId = coin.chainId || coin.slip44;
33
+ const network = {
34
+ chainId,
35
+ url: primaryUrl,
36
+ label: coin.name || coin.coinLabel || `${coin.coinShortcut} Network`,
37
+ default: coin.coinShortcut === 'SYS',
38
+ currency: coin.coinShortcut?.toLowerCase() || 'unknown',
39
+ slip44: coin.slip44,
40
+ kind: sysweb3_network_1.INetworkType.Syscoin,
41
+ };
42
+ defaultNetworks[chainId] = network;
43
+ });
44
+ return defaultNetworks;
45
+ }
46
+ /**
47
+ * Get specific default UTXO networks for backwards compatibility
48
+ */
49
+ function getSyscoinUTXOMainnetNetwork() {
50
+ const networks = getDefaultUTXONetworks();
51
+ // Find Syscoin mainnet (slip44: 57)
52
+ const syscoinMainnet = Object.values(networks).find((network) => network.slip44 === 57 && network.currency === 'sys');
53
+ if (!syscoinMainnet) {
54
+ throw new Error('Syscoin UTXO Mainnet network not found in coins.ts');
55
+ }
56
+ return syscoinMainnet;
57
+ }
58
+ function getSyscoinUTXOTestnetNetwork() {
59
+ const networks = getDefaultUTXONetworks();
60
+ // Find Syscoin testnet (slip44: 1, currency: tsys)
61
+ const syscoinTestnet = Object.values(networks).find((network) => network.slip44 === 1 && network.currency === 'tsys');
62
+ if (!syscoinTestnet) {
63
+ throw new Error('Syscoin UTXO Testnet network not found in coins.ts');
64
+ }
65
+ return syscoinTestnet;
66
+ }
67
+ function getBitcoinMainnetNetwork() {
68
+ const networks = getDefaultUTXONetworks();
69
+ // Find Bitcoin mainnet (slip44: 0, currency: btc)
70
+ const bitcoinMainnet = Object.values(networks).find((network) => network.slip44 === 0 && network.currency === 'btc');
71
+ if (!bitcoinMainnet) {
72
+ throw new Error('Bitcoin Mainnet network not found in coins.ts');
73
+ }
74
+ return bitcoinMainnet;
75
+ }
76
+ //# sourceMappingURL=network-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-utils.js","sourceRoot":"","sources":["../../src/network-utils.ts"],"names":[],"mappings":"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"}