@sidhujag/sysweb3-keyring 1.0.544 → 1.0.547

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 (212) hide show
  1. package/coverage/clover.xml +2875 -0
  2. package/coverage/coverage-final.json +29468 -0
  3. package/coverage/lcov-report/base.css +354 -0
  4. package/coverage/lcov-report/block-navigation.js +85 -0
  5. package/coverage/lcov-report/favicon.png +0 -0
  6. package/coverage/lcov-report/index.html +320 -0
  7. package/coverage/lcov-report/prettify.css +101 -0
  8. package/coverage/lcov-report/prettify.js +1008 -0
  9. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  10. package/coverage/lcov-report/sorter.js +191 -0
  11. package/coverage/lcov-report/src/index.html +276 -0
  12. package/coverage/lcov-report/src/index.ts.html +114 -0
  13. package/coverage/lcov-report/src/initial-state.ts.html +558 -0
  14. package/coverage/lcov-report/src/keyring-manager.ts.html +6279 -0
  15. package/coverage/lcov-report/src/ledger/bitcoin_client/index.html +178 -0
  16. package/coverage/lcov-report/src/ledger/bitcoin_client/index.ts.html +144 -0
  17. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/appClient.ts.html +1560 -0
  18. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/bip32.ts.html +276 -0
  19. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/buffertools.ts.html +495 -0
  20. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/clientCommands.ts.html +1138 -0
  21. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/index.html +363 -0
  22. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkelizedPsbt.ts.html +289 -0
  23. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkle.ts.html +486 -0
  24. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkleMap.ts.html +240 -0
  25. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/policy.ts.html +342 -0
  26. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/psbtv2.ts.html +2388 -0
  27. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/varint.ts.html +453 -0
  28. package/coverage/lcov-report/src/ledger/consts.ts.html +177 -0
  29. package/coverage/lcov-report/src/ledger/index.html +216 -0
  30. package/coverage/lcov-report/src/ledger/index.ts.html +1371 -0
  31. package/coverage/lcov-report/src/ledger/utils.ts.html +102 -0
  32. package/coverage/lcov-report/src/signers.ts.html +591 -0
  33. package/coverage/lcov-report/src/storage.ts.html +198 -0
  34. package/coverage/lcov-report/src/transactions/ethereum.ts.html +5826 -0
  35. package/coverage/lcov-report/src/transactions/index.html +216 -0
  36. package/coverage/lcov-report/src/transactions/index.ts.html +93 -0
  37. package/coverage/lcov-report/src/transactions/syscoin.ts.html +1521 -0
  38. package/coverage/lcov-report/src/trezor/index.html +176 -0
  39. package/coverage/lcov-report/src/trezor/index.ts.html +2655 -0
  40. package/coverage/lcov-report/src/types.ts.html +1443 -0
  41. package/coverage/lcov-report/src/utils/derivation-paths.ts.html +486 -0
  42. package/coverage/lcov-report/src/utils/index.html +196 -0
  43. package/coverage/lcov-report/src/utils/psbt.ts.html +159 -0
  44. package/coverage/lcov-report/test/helpers/constants.ts.html +627 -0
  45. package/coverage/lcov-report/test/helpers/index.html +176 -0
  46. package/coverage/lcov.info +4832 -0
  47. package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/appClient.js +1 -124
  48. package/dist/cjs/ledger/bitcoin_client/lib/appClient.js.map +1 -0
  49. package/{cjs → dist/cjs}/transactions/ethereum.js +24 -11
  50. package/dist/cjs/transactions/ethereum.js.map +1 -0
  51. package/dist/package.json +50 -0
  52. package/{types → dist/types}/ledger/bitcoin_client/lib/appClient.d.ts +0 -6
  53. package/examples/basic-usage.js +140 -0
  54. package/jest.config.js +32 -0
  55. package/package.json +31 -13
  56. package/readme.md +201 -0
  57. package/src/declare.d.ts +7 -0
  58. package/src/errorUtils.ts +83 -0
  59. package/src/hardware-wallet-manager.ts +655 -0
  60. package/src/index.ts +12 -0
  61. package/src/initial-state.ts +108 -0
  62. package/src/keyring-manager.ts +2698 -0
  63. package/src/ledger/bitcoin_client/index.ts +19 -0
  64. package/src/ledger/bitcoin_client/lib/appClient.ts +405 -0
  65. package/src/ledger/bitcoin_client/lib/bip32.ts +61 -0
  66. package/src/ledger/bitcoin_client/lib/buffertools.ts +134 -0
  67. package/src/ledger/bitcoin_client/lib/clientCommands.ts +356 -0
  68. package/src/ledger/bitcoin_client/lib/constants.ts +12 -0
  69. package/src/ledger/bitcoin_client/lib/merkelizedPsbt.ts +65 -0
  70. package/src/ledger/bitcoin_client/lib/merkle.ts +136 -0
  71. package/src/ledger/bitcoin_client/lib/merkleMap.ts +49 -0
  72. package/src/ledger/bitcoin_client/lib/policy.ts +91 -0
  73. package/src/ledger/bitcoin_client/lib/psbtv2.ts +768 -0
  74. package/src/ledger/bitcoin_client/lib/varint.ts +120 -0
  75. package/src/ledger/consts.ts +3 -0
  76. package/src/ledger/index.ts +685 -0
  77. package/src/ledger/types.ts +74 -0
  78. package/src/network-utils.ts +99 -0
  79. package/src/providers.ts +345 -0
  80. package/src/signers.ts +158 -0
  81. package/src/storage.ts +63 -0
  82. package/src/transactions/__tests__/integration.test.ts +303 -0
  83. package/src/transactions/__tests__/syscoin.test.ts +409 -0
  84. package/src/transactions/ethereum.ts +2503 -0
  85. package/src/transactions/index.ts +2 -0
  86. package/src/transactions/syscoin.ts +542 -0
  87. package/src/trezor/index.ts +1050 -0
  88. package/src/types.ts +366 -0
  89. package/src/utils/derivation-paths.ts +133 -0
  90. package/src/utils/psbt.ts +24 -0
  91. package/src/utils.ts +191 -0
  92. package/test/README.md +158 -0
  93. package/test/__mocks__/ledger-mock.js +20 -0
  94. package/test/__mocks__/trezor-mock.js +75 -0
  95. package/test/cleanup-summary.md +167 -0
  96. package/test/helpers/README.md +78 -0
  97. package/test/helpers/constants.ts +79 -0
  98. package/test/helpers/setup.ts +714 -0
  99. package/test/integration/import-validation.spec.ts +588 -0
  100. package/test/unit/hardware/ledger.spec.ts +869 -0
  101. package/test/unit/hardware/trezor.spec.ts +828 -0
  102. package/test/unit/keyring-manager/account-management.spec.ts +970 -0
  103. package/test/unit/keyring-manager/import-watchonly.spec.ts +181 -0
  104. package/test/unit/keyring-manager/import-wif.spec.ts +126 -0
  105. package/test/unit/keyring-manager/initialization.spec.ts +782 -0
  106. package/test/unit/keyring-manager/key-derivation.spec.ts +996 -0
  107. package/test/unit/keyring-manager/security.spec.ts +505 -0
  108. package/test/unit/keyring-manager/state-management.spec.ts +375 -0
  109. package/test/unit/network/network-management.spec.ts +372 -0
  110. package/test/unit/transactions/ethereum-transactions.spec.ts +382 -0
  111. package/test/unit/transactions/syscoin-transactions.spec.ts +615 -0
  112. package/tsconfig.json +14 -0
  113. package/cjs/ledger/bitcoin_client/lib/appClient.js.map +0 -1
  114. package/cjs/transactions/ethereum.js.map +0 -1
  115. /package/{README.md → dist/README.md} +0 -0
  116. /package/{cjs → dist/cjs}/errorUtils.js +0 -0
  117. /package/{cjs → dist/cjs}/errorUtils.js.map +0 -0
  118. /package/{cjs → dist/cjs}/hardware-wallet-manager.js +0 -0
  119. /package/{cjs → dist/cjs}/hardware-wallet-manager.js.map +0 -0
  120. /package/{cjs → dist/cjs}/index.js +0 -0
  121. /package/{cjs → dist/cjs}/index.js.map +0 -0
  122. /package/{cjs → dist/cjs}/initial-state.js +0 -0
  123. /package/{cjs → dist/cjs}/initial-state.js.map +0 -0
  124. /package/{cjs → dist/cjs}/keyring-manager.js +0 -0
  125. /package/{cjs → dist/cjs}/keyring-manager.js.map +0 -0
  126. /package/{cjs → dist/cjs}/ledger/bitcoin_client/index.js +0 -0
  127. /package/{cjs → dist/cjs}/ledger/bitcoin_client/index.js.map +0 -0
  128. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/bip32.js +0 -0
  129. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/bip32.js.map +0 -0
  130. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/buffertools.js +0 -0
  131. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/buffertools.js.map +0 -0
  132. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/clientCommands.js +0 -0
  133. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/clientCommands.js.map +0 -0
  134. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/constants.js +0 -0
  135. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/constants.js.map +0 -0
  136. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkelizedPsbt.js +0 -0
  137. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +0 -0
  138. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkle.js +0 -0
  139. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkle.js.map +0 -0
  140. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkleMap.js +0 -0
  141. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkleMap.js.map +0 -0
  142. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/policy.js +0 -0
  143. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/policy.js.map +0 -0
  144. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/psbtv2.js +0 -0
  145. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/psbtv2.js.map +0 -0
  146. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/varint.js +0 -0
  147. /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/varint.js.map +0 -0
  148. /package/{cjs → dist/cjs}/ledger/consts.js +0 -0
  149. /package/{cjs → dist/cjs}/ledger/consts.js.map +0 -0
  150. /package/{cjs → dist/cjs}/ledger/index.js +0 -0
  151. /package/{cjs → dist/cjs}/ledger/index.js.map +0 -0
  152. /package/{cjs → dist/cjs}/ledger/types.js +0 -0
  153. /package/{cjs → dist/cjs}/ledger/types.js.map +0 -0
  154. /package/{cjs → dist/cjs}/network-utils.js +0 -0
  155. /package/{cjs → dist/cjs}/network-utils.js.map +0 -0
  156. /package/{cjs → dist/cjs}/providers.js +0 -0
  157. /package/{cjs → dist/cjs}/providers.js.map +0 -0
  158. /package/{cjs → dist/cjs}/signers.js +0 -0
  159. /package/{cjs → dist/cjs}/signers.js.map +0 -0
  160. /package/{cjs → dist/cjs}/storage.js +0 -0
  161. /package/{cjs → dist/cjs}/storage.js.map +0 -0
  162. /package/{cjs → dist/cjs}/transactions/__tests__/integration.test.js +0 -0
  163. /package/{cjs → dist/cjs}/transactions/__tests__/integration.test.js.map +0 -0
  164. /package/{cjs → dist/cjs}/transactions/__tests__/syscoin.test.js +0 -0
  165. /package/{cjs → dist/cjs}/transactions/__tests__/syscoin.test.js.map +0 -0
  166. /package/{cjs → dist/cjs}/transactions/index.js +0 -0
  167. /package/{cjs → dist/cjs}/transactions/index.js.map +0 -0
  168. /package/{cjs → dist/cjs}/transactions/syscoin.js +0 -0
  169. /package/{cjs → dist/cjs}/transactions/syscoin.js.map +0 -0
  170. /package/{cjs → dist/cjs}/trezor/index.js +0 -0
  171. /package/{cjs → dist/cjs}/trezor/index.js.map +0 -0
  172. /package/{cjs → dist/cjs}/types.js +0 -0
  173. /package/{cjs → dist/cjs}/types.js.map +0 -0
  174. /package/{cjs → dist/cjs}/utils/derivation-paths.js +0 -0
  175. /package/{cjs → dist/cjs}/utils/derivation-paths.js.map +0 -0
  176. /package/{cjs → dist/cjs}/utils/psbt.js +0 -0
  177. /package/{cjs → dist/cjs}/utils/psbt.js.map +0 -0
  178. /package/{cjs → dist/cjs}/utils.js +0 -0
  179. /package/{cjs → dist/cjs}/utils.js.map +0 -0
  180. /package/{types → dist/types}/errorUtils.d.ts +0 -0
  181. /package/{types → dist/types}/hardware-wallet-manager.d.ts +0 -0
  182. /package/{types → dist/types}/index.d.ts +0 -0
  183. /package/{types → dist/types}/initial-state.d.ts +0 -0
  184. /package/{types → dist/types}/keyring-manager.d.ts +0 -0
  185. /package/{types → dist/types}/ledger/bitcoin_client/index.d.ts +0 -0
  186. /package/{types → dist/types}/ledger/bitcoin_client/lib/bip32.d.ts +0 -0
  187. /package/{types → dist/types}/ledger/bitcoin_client/lib/buffertools.d.ts +0 -0
  188. /package/{types → dist/types}/ledger/bitcoin_client/lib/clientCommands.d.ts +0 -0
  189. /package/{types → dist/types}/ledger/bitcoin_client/lib/constants.d.ts +0 -0
  190. /package/{types → dist/types}/ledger/bitcoin_client/lib/merkelizedPsbt.d.ts +0 -0
  191. /package/{types → dist/types}/ledger/bitcoin_client/lib/merkle.d.ts +0 -0
  192. /package/{types → dist/types}/ledger/bitcoin_client/lib/merkleMap.d.ts +0 -0
  193. /package/{types → dist/types}/ledger/bitcoin_client/lib/policy.d.ts +0 -0
  194. /package/{types → dist/types}/ledger/bitcoin_client/lib/psbtv2.d.ts +0 -0
  195. /package/{types → dist/types}/ledger/bitcoin_client/lib/varint.d.ts +0 -0
  196. /package/{types → dist/types}/ledger/consts.d.ts +0 -0
  197. /package/{types → dist/types}/ledger/index.d.ts +0 -0
  198. /package/{types → dist/types}/ledger/types.d.ts +0 -0
  199. /package/{types → dist/types}/network-utils.d.ts +0 -0
  200. /package/{types → dist/types}/providers.d.ts +0 -0
  201. /package/{types → dist/types}/signers.d.ts +0 -0
  202. /package/{types → dist/types}/storage.d.ts +0 -0
  203. /package/{types → dist/types}/transactions/__tests__/integration.test.d.ts +0 -0
  204. /package/{types → dist/types}/transactions/__tests__/syscoin.test.d.ts +0 -0
  205. /package/{types → dist/types}/transactions/ethereum.d.ts +0 -0
  206. /package/{types → dist/types}/transactions/index.d.ts +0 -0
  207. /package/{types → dist/types}/transactions/syscoin.d.ts +0 -0
  208. /package/{types → dist/types}/trezor/index.d.ts +0 -0
  209. /package/{types → dist/types}/types.d.ts +0 -0
  210. /package/{types → dist/types}/utils/derivation-paths.d.ts +0 -0
  211. /package/{types → dist/types}/utils/psbt.d.ts +0 -0
  212. /package/{types → dist/types}/utils.d.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sidhujag/sysweb3-keyring",
3
- "version": "1.0.544",
3
+ "version": "1.0.547",
4
4
  "description": "Keyring Manager for UTXO and Web3 Wallets",
5
5
  "main": "cjs/index.js",
6
6
  "types": "types/index.d.ts",
@@ -11,13 +11,28 @@
11
11
  "author": "Pali Wallet",
12
12
  "license": "MIT",
13
13
  "private": false,
14
+ "engines": {
15
+ "yarn": ">= 1.0.0"
16
+ },
17
+ "scripts": {
18
+ "prebuild": "rimraf dist/",
19
+ "build": "tsc && tsc -p tsconfig.json",
20
+ "prerelease": "yarn build",
21
+ "copy": "node ../../scripts/package/copy",
22
+ "release:npm": "yarn publish ./dist --access=public --no-git-tag-version",
23
+ "release:preflight": "yarn pack ./dist --dry-run",
24
+ "publishCode": "yarn prebuild && yarn prerelease && yarn copy && yarn release:npm",
25
+ "type-check": "tsc --pretty --noEmit",
26
+ "localTest": "yarn prebuild && yarn build && yarn copy",
27
+ "test": "jest",
28
+ "test:watch": "jest --watch",
29
+ "test:coverage": "jest --coverage"
30
+ },
14
31
  "dependencies": {
15
- "@bitcoinerlab/descriptors": "^2.0.1",
16
- "@bitcoinerlab/secp256k1": "^1.0.5",
32
+ "@bitcoinerlab/secp256k1": "^1.2.0",
17
33
  "@ethersproject/abstract-provider": "^5.8.0",
18
34
  "@ethersproject/bignumber": "^5.8.0",
19
35
  "@ethersproject/bytes": "^5.8.0",
20
- "@ethersproject/constants": "^5.8.0",
21
36
  "@ethersproject/contracts": "^5.8.0",
22
37
  "@ethersproject/hdnode": "^5.8.0",
23
38
  "@ethersproject/logger": "^5.8.0",
@@ -27,14 +42,13 @@
27
42
  "@ethersproject/transactions": "^5.8.0",
28
43
  "@ethersproject/units": "^5.8.0",
29
44
  "@ethersproject/wallet": "^5.8.0",
30
- "@ethersproject/web": "^5.8.0",
31
45
  "@ledgerhq/hw-app-eth": "^6.45.12",
32
46
  "@ledgerhq/hw-transport-webhid": "^6.30.4",
33
47
  "@ledgerhq/logs": "^6.10.1",
34
48
  "@metamask/eth-sig-util": "^8.2.0",
35
49
  "@sidhujag/sysweb3-core": "^1.0.27",
36
50
  "@sidhujag/sysweb3-network": "^1.0.105",
37
- "@sidhujag/sysweb3-utils": "^1.0.267",
51
+ "@sidhujag/sysweb3-utils": "^1.1.270",
38
52
  "@trezor/connect-web": "^9.1.5",
39
53
  "@trezor/connect-webextension": "^9.6.2",
40
54
  "@trezor/utxo-lib": "^1.0.12",
@@ -42,16 +56,20 @@
42
56
  "bitcoin-ops": "^1.4.1",
43
57
  "bitcoinjs-lib": "^7.0.0-rc.0",
44
58
  "crypto-js": "^4.1.1",
45
- "dotenv": "^16.4.5",
46
- "eth-json-rpc-filters": "^4.2.2",
47
- "ethereumjs-util": "^7.1.5",
48
- "ledger-bitcoin": "^0.2.3",
49
- "satoshi-bitcoin": "^1.0.5"
59
+ "ethereumjs-util": "^7.1.5"
50
60
  },
51
61
  "peerDependencies": {
52
- "syscoinjs-lib": "^1.0.265"
62
+ "syscoinjs-lib": "^1.0.267"
53
63
  },
54
64
  "optionalDependencies": {
55
65
  "zksync-ethers": "5"
66
+ },
67
+ "devDependencies": {
68
+ "@types/crypto-js": "^4.1.3",
69
+ "@types/node": "^20.8.10",
70
+ "rimraf": "^6.0.1",
71
+ "syscoinjs-lib": "^1.0.267",
72
+ "tslib": "^2.8.1",
73
+ "typescript": "^5.3.3"
56
74
  }
57
- }
75
+ }
package/readme.md ADDED
@@ -0,0 +1,201 @@
1
+ # Sysweb3-keyring
2
+
3
+ A stateless, multi-chain keyring manager for Syscoin and Ethereum-based networks.
4
+
5
+ ## Overview
6
+
7
+ The sysweb3-keyring provides a unified interface for managing accounts, transactions, and hardware wallets across Syscoin (UTXO) and Ethereum (EVM) networks. The KeyringManager operates statelessly, relying on external state providers (like Redux) for account and network data.
8
+
9
+ ## Key Features
10
+
11
+ - **Stateless Architecture**: No internal state storage - integrates with external state management
12
+ - **Multi-Chain Support**: Handles both UTXO (Syscoin) and EVM (Ethereum) networks
13
+ - **Hardware Wallet Support**: Trezor and Ledger integration
14
+ - **Secure Session Management**: Encrypted private key handling with session transfer
15
+ - **Transaction Management**: Full transaction lifecycle support for both network types
16
+
17
+ ## Installation
18
+
19
+ ```bash
20
+ npm install @sidhujag/sysweb3-keyring
21
+ # or
22
+ yarn add @sidhujag/sysweb3-keyring
23
+ ```
24
+
25
+ ## Usage
26
+
27
+ ### Basic Setup
28
+
29
+ ```javascript
30
+ import { KeyringManager } from '@sidhujag/sysweb3-keyring';
31
+
32
+ // Create a vault state getter function (e.g., from Redux store)
33
+ const vaultStateGetter = () => store.getState().vault;
34
+
35
+ // Initialize the keyring manager
36
+ const keyringManager = await KeyringManager.createInitialized(
37
+ seedPhrase,
38
+ password,
39
+ vaultStateGetter
40
+ );
41
+ ```
42
+
43
+ ### Account Management
44
+
45
+ ```javascript
46
+ // Get active account
47
+ const activeAccount = keyringManager.getActiveAccount();
48
+
49
+ // Create new account
50
+ const newAccount = await keyringManager.addNewAccount('My Account');
51
+
52
+ // Switch active account
53
+ await keyringManager.setActiveAccount(accountId, KeyringAccountType.HDAccount);
54
+
55
+ // Import account from private key
56
+ const importedAccount = await keyringManager.importAccount(
57
+ privateKey,
58
+ 'Imported Account'
59
+ );
60
+ ```
61
+
62
+ ### Network Management
63
+
64
+ ```javascript
65
+ // Set network (automatically switches between UTXO/EVM signers)
66
+ await keyringManager.setSignerNetwork(networkConfig);
67
+
68
+ // Get current network
69
+ const network = keyringManager.getNetwork();
70
+ ```
71
+
72
+ ### Transaction Operations
73
+
74
+ #### Syscoin (UTXO) Transactions
75
+
76
+ ```javascript
77
+ // Estimate transaction fee
78
+ const feeEstimate =
79
+ await keyringManager.syscoinTransaction.getEstimateSysTransactionFee({
80
+ txOptions: {},
81
+ amount: 1.0,
82
+ receivingAddress: 'sys1q...',
83
+ feeRate: 0.00001,
84
+ token: null,
85
+ });
86
+
87
+ // Sign PSBT
88
+ const signedPsbt = await keyringManager.syscoinTransaction.signPSBT({
89
+ psbt: psbtData,
90
+ isTrezor: false,
91
+ isLedger: false,
92
+ });
93
+
94
+ // Get addresses
95
+ const receivingAddress = await keyringManager.updateReceivingAddress();
96
+ const changeAddress = await keyringManager.getNewChangeAddress();
97
+ ```
98
+
99
+ #### Ethereum (EVM) Transactions
100
+
101
+ ```javascript
102
+ // Send transaction
103
+ const txHash = await keyringManager.ethereumTransaction.sendTransaction({
104
+ to: '0x...',
105
+ value: '1000000000000000000', // 1 ETH in wei
106
+ gasLimit: '21000',
107
+ gasPrice: '20000000000', // 20 gwei
108
+ });
109
+
110
+ // Sign message
111
+ const signature = await keyringManager.ethereumTransaction.signPersonalMessage([
112
+ '0x48656c6c6f', // "Hello" in hex
113
+ accountAddress,
114
+ ]);
115
+ ```
116
+
117
+ ### Hardware Wallet Support
118
+
119
+ ```javascript
120
+ // Import Trezor account
121
+ const trezorAccount = await keyringManager.importTrezorAccount(
122
+ 'Trezor Account'
123
+ );
124
+
125
+ // Import Ledger account
126
+ const ledgerAccount = await keyringManager.importLedgerAccount(
127
+ false,
128
+ 'Ledger Account'
129
+ );
130
+ ```
131
+
132
+ ### State Management Integration
133
+
134
+ The KeyringManager requires a `vaultStateGetter` function that returns the current vault state:
135
+
136
+ ```javascript
137
+ // Example with Redux
138
+ const vaultStateGetter = () => ({
139
+ accounts: {
140
+ [KeyringAccountType.HDAccount]: {
141
+ /* account data */
142
+ },
143
+ [KeyringAccountType.Imported]: {
144
+ /* imported accounts */
145
+ },
146
+ },
147
+ activeAccount: { id: 0, type: KeyringAccountType.HDAccount },
148
+ activeNetwork: {
149
+ /* network config */
150
+ },
151
+ // ... other vault state
152
+ });
153
+
154
+ // The keyring manager will call this function to get current state
155
+ const keyringManager = new KeyringManager();
156
+ keyringManager.setVaultStateGetter(vaultStateGetter);
157
+ ```
158
+
159
+ ## Architecture
160
+
161
+ The stateless design means:
162
+
163
+ - **No Internal State**: The KeyringManager doesn't store account or network data
164
+ - **External State Provider**: Relies on your application's state management (Redux, Context, etc.)
165
+ - **Session Management**: Private keys are encrypted and managed securely in memory
166
+ - **Multi-Instance Support**: Multiple KeyringManager instances can operate independently
167
+
168
+ ## API Reference
169
+
170
+ ### KeyringManager
171
+
172
+ Main class for keyring operations:
173
+
174
+ - `createInitialized(seedPhrase, password, vaultStateGetter)` - Create and initialize keyring
175
+ - `addNewAccount(label?)` - Create new HD account
176
+ - `setActiveAccount(id, type)` - Switch active account
177
+ - `importAccount(privateKey, label?)` - Import account from private key
178
+ - `setSignerNetwork(network)` - Set active network
179
+ - `unlock(password)` - Unlock keyring
180
+ - `lockWallet()` - Lock keyring
181
+
182
+ ### Transaction Managers
183
+
184
+ - `syscoinTransaction` - UTXO transaction operations
185
+ - `ethereumTransaction` - EVM transaction operations
186
+
187
+ ### Hardware Wallet Support
188
+
189
+ - `importTrezorAccount(label?)` - Import Trezor account
190
+ - `importLedgerAccount(isConnected, label?)` - Import Ledger account
191
+
192
+ ## Security
193
+
194
+ - Private keys are encrypted and stored in memory only
195
+ - Session data is cleared when the keyring is locked
196
+ - Hardware wallet integration follows device security models
197
+ - Secure memory management with explicit cleanup
198
+
199
+ ## License
200
+
201
+ MIT License
@@ -0,0 +1,7 @@
1
+ declare module 'syscoinjs-lib';
2
+ declare module '@sidhujag/sysweb3-core';
3
+ declare module 'bip32-path';
4
+ interface Window {
5
+ pali: Readonly<any>;
6
+ }
7
+ //TODO: remove window dependence
@@ -0,0 +1,83 @@
1
+ export function handleStatusCodeError(
2
+ statusCode: number,
3
+ errorMessage: string
4
+ ) {
5
+ switch (statusCode) {
6
+ case 400:
7
+ console.error({
8
+ errorMessage,
9
+ message:
10
+ 'Bad Request: The current provider(RPC) could not understand the request due to invalid syntax.',
11
+ });
12
+ break;
13
+ case 401:
14
+ console.error({
15
+ errorMessage,
16
+ message: 'Unauthorized: The request requires user authentication.',
17
+ });
18
+ break;
19
+ case 403:
20
+ console.error({
21
+ errorMessage,
22
+ message:
23
+ 'Forbidden: You do not have the necessary permissions for the resource.',
24
+ });
25
+ break;
26
+ case 404:
27
+ console.error({
28
+ errorMessage,
29
+ message: 'Not Found: The requested RPC method could not be found.',
30
+ });
31
+ break;
32
+ case 405:
33
+ console.error({
34
+ errorMessage,
35
+ message:
36
+ 'Method Not Allowed: The request method is known by the current provider but is not supported by the target resource.',
37
+ });
38
+ break;
39
+ case 408:
40
+ console.error({
41
+ errorMessage,
42
+ message:
43
+ 'Request Timeout: The current provider(RPC) would like to shut down the unused connection.',
44
+ });
45
+ break;
46
+ case 413:
47
+ console.error({
48
+ errorMessage,
49
+ message:
50
+ 'Payload Too Large: The request entity is larger than limits defined by the server.',
51
+ });
52
+ break;
53
+ case 429:
54
+ console.error({
55
+ errorMessage,
56
+ message:
57
+ 'The current RPC provider has a low rate-limit. We are applying a cooldown that will affect Pali performance. Modify the RPC URL in the network settings to resolve this issue.',
58
+ });
59
+ throw {
60
+ errorMessage,
61
+ message:
62
+ 'The current RPC provider has a low rate-limit. We are applying a cooldown that will affect Pali performance. Modify the RPC URL in the network settings to resolve this issue.',
63
+ };
64
+ case 500:
65
+ console.error({
66
+ errorMessage,
67
+ message:
68
+ 'Internal Server Error: The current provider(RPC) encountered an unexpected condition that prevented it from fulfilling the request.',
69
+ });
70
+ break;
71
+ case 503:
72
+ console.error({
73
+ errorMessage,
74
+ message:
75
+ 'Service Unavailable: The current provider(RPC) is not ready to handle the request, possibly due to being down for maintenance or overloaded.',
76
+ });
77
+ break;
78
+ default:
79
+ throw {
80
+ message: `Unexpected HTTP status code: ${statusCode}`,
81
+ };
82
+ }
83
+ }