@sidhujag/sysweb3-keyring 1.0.547 → 1.0.549

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/{dist/cjs → cjs}/providers.js +1 -64
  2. package/cjs/providers.js.map +1 -0
  3. package/{dist/cjs → cjs}/transactions/ethereum.js +1 -16
  4. package/cjs/transactions/ethereum.js.map +1 -0
  5. package/package.json +2 -30
  6. package/{dist/types → types}/providers.d.ts +0 -8
  7. package/{dist/types → types}/transactions/ethereum.d.ts +2 -2
  8. package/{dist/types → types}/types.d.ts +2 -2
  9. package/coverage/clover.xml +0 -2875
  10. package/coverage/coverage-final.json +0 -29468
  11. package/coverage/lcov-report/base.css +0 -354
  12. package/coverage/lcov-report/block-navigation.js +0 -85
  13. package/coverage/lcov-report/favicon.png +0 -0
  14. package/coverage/lcov-report/index.html +0 -320
  15. package/coverage/lcov-report/prettify.css +0 -101
  16. package/coverage/lcov-report/prettify.js +0 -1008
  17. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  18. package/coverage/lcov-report/sorter.js +0 -191
  19. package/coverage/lcov-report/src/index.html +0 -276
  20. package/coverage/lcov-report/src/index.ts.html +0 -114
  21. package/coverage/lcov-report/src/initial-state.ts.html +0 -558
  22. package/coverage/lcov-report/src/keyring-manager.ts.html +0 -6279
  23. package/coverage/lcov-report/src/ledger/bitcoin_client/index.html +0 -178
  24. package/coverage/lcov-report/src/ledger/bitcoin_client/index.ts.html +0 -144
  25. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/appClient.ts.html +0 -1560
  26. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/bip32.ts.html +0 -276
  27. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/buffertools.ts.html +0 -495
  28. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/clientCommands.ts.html +0 -1138
  29. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/index.html +0 -363
  30. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkelizedPsbt.ts.html +0 -289
  31. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkle.ts.html +0 -486
  32. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkleMap.ts.html +0 -240
  33. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/policy.ts.html +0 -342
  34. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/psbtv2.ts.html +0 -2388
  35. package/coverage/lcov-report/src/ledger/bitcoin_client/lib/varint.ts.html +0 -453
  36. package/coverage/lcov-report/src/ledger/consts.ts.html +0 -177
  37. package/coverage/lcov-report/src/ledger/index.html +0 -216
  38. package/coverage/lcov-report/src/ledger/index.ts.html +0 -1371
  39. package/coverage/lcov-report/src/ledger/utils.ts.html +0 -102
  40. package/coverage/lcov-report/src/signers.ts.html +0 -591
  41. package/coverage/lcov-report/src/storage.ts.html +0 -198
  42. package/coverage/lcov-report/src/transactions/ethereum.ts.html +0 -5826
  43. package/coverage/lcov-report/src/transactions/index.html +0 -216
  44. package/coverage/lcov-report/src/transactions/index.ts.html +0 -93
  45. package/coverage/lcov-report/src/transactions/syscoin.ts.html +0 -1521
  46. package/coverage/lcov-report/src/trezor/index.html +0 -176
  47. package/coverage/lcov-report/src/trezor/index.ts.html +0 -2655
  48. package/coverage/lcov-report/src/types.ts.html +0 -1443
  49. package/coverage/lcov-report/src/utils/derivation-paths.ts.html +0 -486
  50. package/coverage/lcov-report/src/utils/index.html +0 -196
  51. package/coverage/lcov-report/src/utils/psbt.ts.html +0 -159
  52. package/coverage/lcov-report/test/helpers/constants.ts.html +0 -627
  53. package/coverage/lcov-report/test/helpers/index.html +0 -176
  54. package/coverage/lcov.info +0 -4832
  55. package/dist/cjs/providers.js.map +0 -1
  56. package/dist/cjs/transactions/ethereum.js.map +0 -1
  57. package/dist/package.json +0 -50
  58. package/examples/basic-usage.js +0 -140
  59. package/jest.config.js +0 -32
  60. package/readme.md +0 -201
  61. package/src/declare.d.ts +0 -7
  62. package/src/errorUtils.ts +0 -83
  63. package/src/hardware-wallet-manager.ts +0 -655
  64. package/src/index.ts +0 -12
  65. package/src/initial-state.ts +0 -108
  66. package/src/keyring-manager.ts +0 -2698
  67. package/src/ledger/bitcoin_client/index.ts +0 -19
  68. package/src/ledger/bitcoin_client/lib/appClient.ts +0 -405
  69. package/src/ledger/bitcoin_client/lib/bip32.ts +0 -61
  70. package/src/ledger/bitcoin_client/lib/buffertools.ts +0 -134
  71. package/src/ledger/bitcoin_client/lib/clientCommands.ts +0 -356
  72. package/src/ledger/bitcoin_client/lib/constants.ts +0 -12
  73. package/src/ledger/bitcoin_client/lib/merkelizedPsbt.ts +0 -65
  74. package/src/ledger/bitcoin_client/lib/merkle.ts +0 -136
  75. package/src/ledger/bitcoin_client/lib/merkleMap.ts +0 -49
  76. package/src/ledger/bitcoin_client/lib/policy.ts +0 -91
  77. package/src/ledger/bitcoin_client/lib/psbtv2.ts +0 -768
  78. package/src/ledger/bitcoin_client/lib/varint.ts +0 -120
  79. package/src/ledger/consts.ts +0 -3
  80. package/src/ledger/index.ts +0 -685
  81. package/src/ledger/types.ts +0 -74
  82. package/src/network-utils.ts +0 -99
  83. package/src/providers.ts +0 -345
  84. package/src/signers.ts +0 -158
  85. package/src/storage.ts +0 -63
  86. package/src/transactions/__tests__/integration.test.ts +0 -303
  87. package/src/transactions/__tests__/syscoin.test.ts +0 -409
  88. package/src/transactions/ethereum.ts +0 -2503
  89. package/src/transactions/index.ts +0 -2
  90. package/src/transactions/syscoin.ts +0 -542
  91. package/src/trezor/index.ts +0 -1050
  92. package/src/types.ts +0 -366
  93. package/src/utils/derivation-paths.ts +0 -133
  94. package/src/utils/psbt.ts +0 -24
  95. package/src/utils.ts +0 -191
  96. package/test/README.md +0 -158
  97. package/test/__mocks__/ledger-mock.js +0 -20
  98. package/test/__mocks__/trezor-mock.js +0 -75
  99. package/test/cleanup-summary.md +0 -167
  100. package/test/helpers/README.md +0 -78
  101. package/test/helpers/constants.ts +0 -79
  102. package/test/helpers/setup.ts +0 -714
  103. package/test/integration/import-validation.spec.ts +0 -588
  104. package/test/unit/hardware/ledger.spec.ts +0 -869
  105. package/test/unit/hardware/trezor.spec.ts +0 -828
  106. package/test/unit/keyring-manager/account-management.spec.ts +0 -970
  107. package/test/unit/keyring-manager/import-watchonly.spec.ts +0 -181
  108. package/test/unit/keyring-manager/import-wif.spec.ts +0 -126
  109. package/test/unit/keyring-manager/initialization.spec.ts +0 -782
  110. package/test/unit/keyring-manager/key-derivation.spec.ts +0 -996
  111. package/test/unit/keyring-manager/security.spec.ts +0 -505
  112. package/test/unit/keyring-manager/state-management.spec.ts +0 -375
  113. package/test/unit/network/network-management.spec.ts +0 -372
  114. package/test/unit/transactions/ethereum-transactions.spec.ts +0 -382
  115. package/test/unit/transactions/syscoin-transactions.spec.ts +0 -615
  116. package/tsconfig.json +0 -14
  117. /package/{dist/README.md → README.md} +0 -0
  118. /package/{dist/cjs → cjs}/errorUtils.js +0 -0
  119. /package/{dist/cjs → cjs}/errorUtils.js.map +0 -0
  120. /package/{dist/cjs → cjs}/hardware-wallet-manager.js +0 -0
  121. /package/{dist/cjs → cjs}/hardware-wallet-manager.js.map +0 -0
  122. /package/{dist/cjs → cjs}/index.js +0 -0
  123. /package/{dist/cjs → cjs}/index.js.map +0 -0
  124. /package/{dist/cjs → cjs}/initial-state.js +0 -0
  125. /package/{dist/cjs → cjs}/initial-state.js.map +0 -0
  126. /package/{dist/cjs → cjs}/keyring-manager.js +0 -0
  127. /package/{dist/cjs → cjs}/keyring-manager.js.map +0 -0
  128. /package/{dist/cjs → cjs}/ledger/bitcoin_client/index.js +0 -0
  129. /package/{dist/cjs → cjs}/ledger/bitcoin_client/index.js.map +0 -0
  130. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/appClient.js +0 -0
  131. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/appClient.js.map +0 -0
  132. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/bip32.js +0 -0
  133. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/bip32.js.map +0 -0
  134. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/buffertools.js +0 -0
  135. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/buffertools.js.map +0 -0
  136. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/clientCommands.js +0 -0
  137. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/clientCommands.js.map +0 -0
  138. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/constants.js +0 -0
  139. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/constants.js.map +0 -0
  140. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkelizedPsbt.js +0 -0
  141. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +0 -0
  142. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkle.js +0 -0
  143. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkle.js.map +0 -0
  144. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkleMap.js +0 -0
  145. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/merkleMap.js.map +0 -0
  146. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/policy.js +0 -0
  147. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/policy.js.map +0 -0
  148. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/psbtv2.js +0 -0
  149. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/psbtv2.js.map +0 -0
  150. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/varint.js +0 -0
  151. /package/{dist/cjs → cjs}/ledger/bitcoin_client/lib/varint.js.map +0 -0
  152. /package/{dist/cjs → cjs}/ledger/consts.js +0 -0
  153. /package/{dist/cjs → cjs}/ledger/consts.js.map +0 -0
  154. /package/{dist/cjs → cjs}/ledger/index.js +0 -0
  155. /package/{dist/cjs → cjs}/ledger/index.js.map +0 -0
  156. /package/{dist/cjs → cjs}/ledger/types.js +0 -0
  157. /package/{dist/cjs → cjs}/ledger/types.js.map +0 -0
  158. /package/{dist/cjs → cjs}/network-utils.js +0 -0
  159. /package/{dist/cjs → cjs}/network-utils.js.map +0 -0
  160. /package/{dist/cjs → cjs}/signers.js +0 -0
  161. /package/{dist/cjs → cjs}/signers.js.map +0 -0
  162. /package/{dist/cjs → cjs}/storage.js +0 -0
  163. /package/{dist/cjs → cjs}/storage.js.map +0 -0
  164. /package/{dist/cjs → cjs}/transactions/__tests__/integration.test.js +0 -0
  165. /package/{dist/cjs → cjs}/transactions/__tests__/integration.test.js.map +0 -0
  166. /package/{dist/cjs → cjs}/transactions/__tests__/syscoin.test.js +0 -0
  167. /package/{dist/cjs → cjs}/transactions/__tests__/syscoin.test.js.map +0 -0
  168. /package/{dist/cjs → cjs}/transactions/index.js +0 -0
  169. /package/{dist/cjs → cjs}/transactions/index.js.map +0 -0
  170. /package/{dist/cjs → cjs}/transactions/syscoin.js +0 -0
  171. /package/{dist/cjs → cjs}/transactions/syscoin.js.map +0 -0
  172. /package/{dist/cjs → cjs}/trezor/index.js +0 -0
  173. /package/{dist/cjs → cjs}/trezor/index.js.map +0 -0
  174. /package/{dist/cjs → cjs}/types.js +0 -0
  175. /package/{dist/cjs → cjs}/types.js.map +0 -0
  176. /package/{dist/cjs → cjs}/utils/derivation-paths.js +0 -0
  177. /package/{dist/cjs → cjs}/utils/derivation-paths.js.map +0 -0
  178. /package/{dist/cjs → cjs}/utils/psbt.js +0 -0
  179. /package/{dist/cjs → cjs}/utils/psbt.js.map +0 -0
  180. /package/{dist/cjs → cjs}/utils.js +0 -0
  181. /package/{dist/cjs → cjs}/utils.js.map +0 -0
  182. /package/{dist/types → types}/errorUtils.d.ts +0 -0
  183. /package/{dist/types → types}/hardware-wallet-manager.d.ts +0 -0
  184. /package/{dist/types → types}/index.d.ts +0 -0
  185. /package/{dist/types → types}/initial-state.d.ts +0 -0
  186. /package/{dist/types → types}/keyring-manager.d.ts +0 -0
  187. /package/{dist/types → types}/ledger/bitcoin_client/index.d.ts +0 -0
  188. /package/{dist/types → types}/ledger/bitcoin_client/lib/appClient.d.ts +0 -0
  189. /package/{dist/types → types}/ledger/bitcoin_client/lib/bip32.d.ts +0 -0
  190. /package/{dist/types → types}/ledger/bitcoin_client/lib/buffertools.d.ts +0 -0
  191. /package/{dist/types → types}/ledger/bitcoin_client/lib/clientCommands.d.ts +0 -0
  192. /package/{dist/types → types}/ledger/bitcoin_client/lib/constants.d.ts +0 -0
  193. /package/{dist/types → types}/ledger/bitcoin_client/lib/merkelizedPsbt.d.ts +0 -0
  194. /package/{dist/types → types}/ledger/bitcoin_client/lib/merkle.d.ts +0 -0
  195. /package/{dist/types → types}/ledger/bitcoin_client/lib/merkleMap.d.ts +0 -0
  196. /package/{dist/types → types}/ledger/bitcoin_client/lib/policy.d.ts +0 -0
  197. /package/{dist/types → types}/ledger/bitcoin_client/lib/psbtv2.d.ts +0 -0
  198. /package/{dist/types → types}/ledger/bitcoin_client/lib/varint.d.ts +0 -0
  199. /package/{dist/types → types}/ledger/consts.d.ts +0 -0
  200. /package/{dist/types → types}/ledger/index.d.ts +0 -0
  201. /package/{dist/types → types}/ledger/types.d.ts +0 -0
  202. /package/{dist/types → types}/network-utils.d.ts +0 -0
  203. /package/{dist/types → types}/signers.d.ts +0 -0
  204. /package/{dist/types → types}/storage.d.ts +0 -0
  205. /package/{dist/types → types}/transactions/__tests__/integration.test.d.ts +0 -0
  206. /package/{dist/types → types}/transactions/__tests__/syscoin.test.d.ts +0 -0
  207. /package/{dist/types → types}/transactions/index.d.ts +0 -0
  208. /package/{dist/types → types}/transactions/syscoin.d.ts +0 -0
  209. /package/{dist/types → types}/trezor/index.d.ts +0 -0
  210. /package/{dist/types → types}/utils/derivation-paths.d.ts +0 -0
  211. /package/{dist/types → types}/utils/psbt.d.ts +0 -0
  212. /package/{dist/types → types}/utils.d.ts +0 -0
@@ -1,375 +0,0 @@
1
- import { INetworkType, INetwork } from '@sidhujag/sysweb3-network';
2
-
3
- import { KeyringManager, KeyringAccountType } from '../../../src';
4
- import { FAKE_PASSWORD, PEACE_SEED_PHRASE } from '../../helpers/constants';
5
- import { setupMocks } from '../../helpers/setup';
6
-
7
- describe('KeyringManager - State Management', () => {
8
- let keyringManager: KeyringManager;
9
- let mockVaultStateGetter: jest.Mock;
10
- let currentMockVaultState: any;
11
-
12
- beforeEach(async () => {
13
- setupMocks();
14
- // Set up vault-keys that would normally be created by Pali's MainController
15
- await setupTestVault(FAKE_PASSWORD);
16
-
17
- // Use global mockVaultState from setup.ts as starting point
18
- currentMockVaultState = { ...mockVaultState };
19
-
20
- // Mock vault state getter function (from Pali Redux store)
21
- mockVaultStateGetter = jest.fn(() => currentMockVaultState);
22
- });
23
-
24
- describe('Initial State', () => {
25
- it('should initialize with default state when no options provided', () => {
26
- keyringManager = new KeyringManager();
27
-
28
- // Set up vault state getter for stateless keyring
29
- keyringManager.setVaultStateGetter(mockVaultStateGetter);
30
-
31
- // activeChain is now derived from vault state, not stored locally
32
- expect(keyringManager.isUnlocked()).toBe(false);
33
-
34
- // Vault state should be accessible via getter, not internal wallet property
35
- expect(mockVaultStateGetter).not.toHaveBeenCalled(); // Not called yet
36
- });
37
-
38
- it('should access vault state through getter', () => {
39
- keyringManager = new KeyringManager();
40
- keyringManager.setVaultStateGetter(mockVaultStateGetter);
41
-
42
- // Access network through getNetwork (which calls vault getter)
43
- const network = keyringManager.getNetwork();
44
- expect(mockVaultStateGetter).toHaveBeenCalled();
45
- expect(network).toBeDefined();
46
- expect(network.chainId).toBe(currentMockVaultState.activeNetwork.chainId);
47
- });
48
-
49
- it('should derive active chain from vault state', () => {
50
- // Test with Syscoin network
51
- currentMockVaultState = {
52
- ...mockVaultState,
53
- activeNetwork: mockVaultState.networks.syscoin[57], // UTXO network
54
- };
55
-
56
- keyringManager = new KeyringManager();
57
- keyringManager.setVaultStateGetter(mockVaultStateGetter);
58
-
59
- const network = keyringManager.getNetwork();
60
- expect(network.kind).toBe(INetworkType.Syscoin);
61
-
62
- // Test with Ethereum network
63
- currentMockVaultState = {
64
- ...mockVaultState,
65
- activeNetwork: mockVaultState.networks.ethereum[1], // EVM network
66
- };
67
-
68
- const evmNetwork = keyringManager.getNetwork();
69
- expect(evmNetwork.kind).toBe(INetworkType.Ethereum);
70
- });
71
-
72
- it('should initialize UTXO keyring with syscoin as active network', async () => {
73
- currentMockVaultState = {
74
- ...mockVaultState,
75
- activeNetwork: mockVaultState.networks.syscoin[57],
76
- };
77
-
78
- keyringManager = await KeyringManager.createInitialized(
79
- PEACE_SEED_PHRASE,
80
- FAKE_PASSWORD,
81
- mockVaultStateGetter
82
- );
83
-
84
- const network = keyringManager.getNetwork();
85
- expect(network.kind).toBe(INetworkType.Syscoin);
86
- const xpub = keyringManager.getAccountXpub();
87
- expect(xpub).toBeDefined();
88
- // For UTXO networks, xpub should be defined (exact format may vary based on derivation)
89
- expect(xpub.length).toBeGreaterThan(50); // Reasonable length check
90
- });
91
-
92
- it('should initialize EVM keyring with ethereum as active network', async () => {
93
- currentMockVaultState = {
94
- ...mockVaultState,
95
- activeNetwork: mockVaultState.networks.ethereum[1],
96
- };
97
-
98
- keyringManager = await KeyringManager.createInitialized(
99
- PEACE_SEED_PHRASE,
100
- FAKE_PASSWORD,
101
- mockVaultStateGetter
102
- );
103
-
104
- const network = keyringManager.getNetwork();
105
- expect(network.kind).toBe(INetworkType.Ethereum);
106
- const xpub = keyringManager.getAccountXpub();
107
- expect(xpub).toBeDefined();
108
- expect(xpub.substring(0, 2)).toEqual('0x');
109
- });
110
-
111
- it('should require vault state getter to be set', () => {
112
- keyringManager = new KeyringManager();
113
-
114
- // Should throw error when trying to access vault without getter
115
- expect(() => keyringManager.getNetwork()).toThrow(
116
- 'Vault state getter not configured. Call setVaultStateGetter() first.'
117
- );
118
- });
119
- });
120
-
121
- describe('State Persistence', () => {
122
- beforeEach(async () => {
123
- currentMockVaultState = {
124
- ...mockVaultState,
125
- activeNetwork: mockVaultState.networks.ethereum[1],
126
- };
127
-
128
- keyringManager = await KeyringManager.createInitialized(
129
- PEACE_SEED_PHRASE,
130
- FAKE_PASSWORD,
131
- mockVaultStateGetter
132
- );
133
- });
134
-
135
- it('should create accounts and return data for Redux dispatch', async () => {
136
- const privateKey =
137
- '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318';
138
- const importedAccount = await keyringManager.importAccount(
139
- privateKey,
140
- 'My Import'
141
- );
142
-
143
- // Should return account data for Pali to dispatch to Redux
144
- expect(importedAccount).toBeDefined();
145
- expect(importedAccount.label).toBe('My Import');
146
- expect(importedAccount.address).toBeDefined();
147
-
148
- // NOTE: In stateless architecture, keyring returns data but doesn't store it
149
- // The actual storage would be handled by Pali dispatching to Redux
150
- });
151
-
152
- it('should maintain keyring functionality without internal state', async () => {
153
- // Add account via keyring (returns data for Redux)
154
- const newAccount = await keyringManager.addNewAccount('Account 2');
155
- expect(newAccount).toBeDefined();
156
- expect(newAccount.label).toBe('Account 2');
157
-
158
- // Import account via keyring (returns data for Redux)
159
- const privateKey =
160
- '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318';
161
- const importedAccount = await keyringManager.importAccount(privateKey);
162
- expect(importedAccount).toBeDefined();
163
-
164
- // Network switching should work
165
- const polygon = mockVaultState.networks.ethereum[137];
166
- const result = await keyringManager.setSignerNetwork(polygon);
167
- expect(result.success).toBe(true);
168
- });
169
- });
170
-
171
- describe('Multi-Keyring State Isolation', () => {
172
- it('should maintain separate session data for different keyring instances', async () => {
173
- // Create EVM keyring with EVM vault state
174
- const evmVaultState = {
175
- ...mockVaultState,
176
- activeNetwork: mockVaultState.networks.ethereum[1],
177
- };
178
- const evmVaultGetter = jest.fn(() => evmVaultState);
179
-
180
- const evmKeyring = await KeyringManager.createInitialized(
181
- PEACE_SEED_PHRASE,
182
- FAKE_PASSWORD,
183
- evmVaultGetter
184
- );
185
-
186
- // Create UTXO keyring with UTXO vault state
187
- const utxoVaultState = {
188
- ...mockVaultState,
189
- activeNetwork: mockVaultState.networks.syscoin[57],
190
- };
191
- const utxoVaultGetter = jest.fn(() => utxoVaultState);
192
-
193
- const utxoKeyring = await KeyringManager.createInitialized(
194
- PEACE_SEED_PHRASE,
195
- FAKE_PASSWORD,
196
- utxoVaultGetter
197
- );
198
-
199
- // Each keyring should access its own vault state
200
- const evmNetwork = evmKeyring.getNetwork();
201
- const utxoNetwork = utxoKeyring.getNetwork();
202
-
203
- expect(evmNetwork.kind).toBe(INetworkType.Ethereum);
204
- expect(utxoNetwork.kind).toBe(INetworkType.Syscoin);
205
-
206
- // Should have called their respective getters
207
- expect(evmVaultGetter).toHaveBeenCalled();
208
- expect(utxoVaultGetter).toHaveBeenCalled();
209
- });
210
-
211
- it('should share session data between keyrings', async () => {
212
- const keyring1 = await KeyringManager.createInitialized(
213
- PEACE_SEED_PHRASE,
214
- FAKE_PASSWORD,
215
- mockVaultStateGetter
216
- );
217
-
218
- // Create new keyring for Syscoin
219
- const utxoVaultState = {
220
- ...mockVaultState,
221
- activeNetwork: mockVaultState.networks.syscoin[57],
222
- };
223
- const utxoVaultGetter = jest.fn(() => utxoVaultState);
224
-
225
- const keyring2 = new KeyringManager();
226
- keyring2.setVaultStateGetter(utxoVaultGetter);
227
-
228
- // Transfer session from keyring1 to keyring2
229
- keyring1.transferSessionTo(keyring2);
230
-
231
- // After transfer: keyring1 should be locked, keyring2 should be unlocked
232
- expect(keyring1.isUnlocked()).toBe(false);
233
- expect(keyring2.isUnlocked()).toBe(true);
234
-
235
- // Should be able to perform operations with keyring2
236
- const seed2 = await keyring2.getSeed(FAKE_PASSWORD);
237
- expect(seed2).toBe(PEACE_SEED_PHRASE);
238
- });
239
- });
240
-
241
- describe('State Recovery', () => {
242
- it('should handle state recovery after errors', async () => {
243
- keyringManager = await KeyringManager.createInitialized(
244
- PEACE_SEED_PHRASE,
245
- FAKE_PASSWORD,
246
- mockVaultStateGetter
247
- );
248
-
249
- // Simulate error during account creation
250
- const originalAddNewAccount = keyringManager.addNewAccount;
251
- keyringManager.addNewAccount = jest
252
- .fn()
253
- .mockRejectedValue(new Error('Test error'));
254
-
255
- try {
256
- await keyringManager.addNewAccount('Failed Account');
257
- } catch (error) {
258
- // Expected error
259
- }
260
-
261
- // Restore original method
262
- keyringManager.addNewAccount = originalAddNewAccount;
263
-
264
- // Should be able to continue operations
265
- const newAccount = await keyringManager.addNewAccount('Success Account');
266
- expect(newAccount).toBeDefined();
267
- expect(newAccount.label).toBe('Success Account');
268
- });
269
-
270
- it('should handle network switching rollback on failure', async () => {
271
- keyringManager = await KeyringManager.createInitialized(
272
- PEACE_SEED_PHRASE,
273
- FAKE_PASSWORD,
274
- mockVaultStateGetter
275
- );
276
-
277
- const originalNetwork = keyringManager.getNetwork();
278
-
279
- // Try to switch to invalid network
280
- const invalidNetwork: INetwork = {
281
- chainId: 999,
282
- currency: 'INVALID',
283
- label: 'Invalid Network',
284
- url: 'http://invalid',
285
- kind: 'INVALID' as any,
286
- explorer: '',
287
- slip44: 60,
288
- };
289
-
290
- try {
291
- await keyringManager.setSignerNetwork(invalidNetwork);
292
- } catch (error) {
293
- // Expected error
294
- }
295
-
296
- // Network should remain unchanged in vault state
297
- const currentNetwork = keyringManager.getNetwork();
298
- expect(currentNetwork.chainId).toBe(originalNetwork.chainId);
299
- });
300
- });
301
-
302
- describe('State Validation', () => {
303
- it('should validate account access through vault state', async () => {
304
- keyringManager = await KeyringManager.createInitialized(
305
- PEACE_SEED_PHRASE,
306
- FAKE_PASSWORD,
307
- mockVaultStateGetter
308
- );
309
-
310
- // Should be able to get account via vault state
311
- const account = keyringManager.getAccountById(
312
- 0,
313
- KeyringAccountType.HDAccount
314
- );
315
- expect(account).toBeDefined();
316
- expect(account.id).toBe(0);
317
-
318
- // Should not allow accessing non-existent account
319
- expect(() =>
320
- keyringManager.getAccountById(999, KeyringAccountType.HDAccount)
321
- ).toThrow('Account not found');
322
- });
323
-
324
- it('should validate active account through vault state', async () => {
325
- keyringManager = await KeyringManager.createInitialized(
326
- PEACE_SEED_PHRASE,
327
- FAKE_PASSWORD,
328
- mockVaultStateGetter
329
- );
330
-
331
- // Should get active account from vault state
332
- const { activeAccount } = keyringManager.getActiveAccount();
333
- expect(activeAccount).toBeDefined();
334
- expect(activeAccount.id).toBe(currentMockVaultState.activeAccount.id);
335
- });
336
- });
337
-
338
- describe('Vault State Integration', () => {
339
- it('should read all state from vault getter, not internal storage', () => {
340
- keyringManager = new KeyringManager();
341
- keyringManager.setVaultStateGetter(mockVaultStateGetter);
342
-
343
- // Every state access should call the vault getter
344
- mockVaultStateGetter.mockClear();
345
-
346
- keyringManager.getNetwork();
347
- expect(mockVaultStateGetter).toHaveBeenCalledTimes(1);
348
-
349
- keyringManager.getAccountById(0, KeyringAccountType.HDAccount);
350
- expect(mockVaultStateGetter).toHaveBeenCalledTimes(2);
351
-
352
- keyringManager.getActiveAccount();
353
- expect(mockVaultStateGetter).toHaveBeenCalledTimes(3);
354
- });
355
-
356
- it('should work with dynamic vault state changes', () => {
357
- keyringManager = new KeyringManager();
358
- keyringManager.setVaultStateGetter(mockVaultStateGetter);
359
-
360
- // Initially get Ethereum network
361
- const ethNetwork = keyringManager.getNetwork();
362
- expect(ethNetwork.kind).toBe(INetworkType.Ethereum);
363
-
364
- // Change vault state to Syscoin
365
- currentMockVaultState = {
366
- ...mockVaultState,
367
- activeNetwork: mockVaultState.networks.syscoin[57],
368
- };
369
-
370
- // Should now get Syscoin network
371
- const sysNetwork = keyringManager.getNetwork();
372
- expect(sysNetwork.kind).toBe(INetworkType.Syscoin);
373
- });
374
- });
375
- });