@ledgerhq/coin-vechain 2.11.0-nightly.6 → 2.11.0-nightly.7

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 (179) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +10 -0
  3. package/package.json +6 -6
  4. package/lib/bridge/broadcast.test.d.ts +0 -2
  5. package/lib/bridge/broadcast.test.d.ts.map +0 -1
  6. package/lib/bridge/broadcast.test.js +0 -188
  7. package/lib/bridge/broadcast.test.js.map +0 -1
  8. package/lib/bridge/buildOptimisticOperatioin.test.d.ts +0 -2
  9. package/lib/bridge/buildOptimisticOperatioin.test.d.ts.map +0 -1
  10. package/lib/bridge/buildOptimisticOperatioin.test.js +0 -286
  11. package/lib/bridge/buildOptimisticOperatioin.test.js.map +0 -1
  12. package/lib/bridge/createTransaction.test.d.ts +0 -2
  13. package/lib/bridge/createTransaction.test.d.ts.map +0 -1
  14. package/lib/bridge/createTransaction.test.js +0 -167
  15. package/lib/bridge/createTransaction.test.js.map +0 -1
  16. package/lib/bridge/estimateMaxSpendable.test.d.ts +0 -2
  17. package/lib/bridge/estimateMaxSpendable.test.d.ts.map +0 -1
  18. package/lib/bridge/estimateMaxSpendable.test.js +0 -269
  19. package/lib/bridge/estimateMaxSpendable.test.js.map +0 -1
  20. package/lib/bridge/getTransactionStatus.test.d.ts +0 -2
  21. package/lib/bridge/getTransactionStatus.test.d.ts.map +0 -1
  22. package/lib/bridge/getTransactionStatus.test.js +0 -282
  23. package/lib/bridge/getTransactionStatus.test.js.map +0 -1
  24. package/lib/bridge/helpers.test.d.ts +0 -2
  25. package/lib/bridge/helpers.test.d.ts.map +0 -1
  26. package/lib/bridge/helpers.test.js +0 -298
  27. package/lib/bridge/helpers.test.js.map +0 -1
  28. package/lib/bridge/prepareTransaction.test.d.ts +0 -2
  29. package/lib/bridge/prepareTransaction.test.d.ts.map +0 -1
  30. package/lib/bridge/prepareTransaction.test.js +0 -277
  31. package/lib/bridge/prepareTransaction.test.js.map +0 -1
  32. package/lib/bridge/signOperation.test.d.ts +0 -2
  33. package/lib/bridge/signOperation.test.d.ts.map +0 -1
  34. package/lib/bridge/signOperation.test.js +0 -295
  35. package/lib/bridge/signOperation.test.js.map +0 -1
  36. package/lib/bridge/synchronisation.test.d.ts +0 -2
  37. package/lib/bridge/synchronisation.test.d.ts.map +0 -1
  38. package/lib/bridge/synchronisation.test.js +0 -201
  39. package/lib/bridge/synchronisation.test.js.map +0 -1
  40. package/lib/bridge/transaction.test.d.ts +0 -2
  41. package/lib/bridge/transaction.test.d.ts.map +0 -1
  42. package/lib/bridge/transaction.test.js +0 -353
  43. package/lib/bridge/transaction.test.js.map +0 -1
  44. package/lib/common-logic/calculateClauses.test.d.ts +0 -2
  45. package/lib/common-logic/calculateClauses.test.d.ts.map +0 -1
  46. package/lib/common-logic/calculateClauses.test.js +0 -156
  47. package/lib/common-logic/calculateClauses.test.js.map +0 -1
  48. package/lib/common-logic/calculateGasFees.test.d.ts +0 -2
  49. package/lib/common-logic/calculateGasFees.test.d.ts.map +0 -1
  50. package/lib/common-logic/calculateGasFees.test.js +0 -279
  51. package/lib/common-logic/calculateGasFees.test.js.map +0 -1
  52. package/lib/common-logic/calculateTransactionInfo.test.d.ts +0 -2
  53. package/lib/common-logic/calculateTransactionInfo.test.d.ts.map +0 -1
  54. package/lib/common-logic/calculateTransactionInfo.test.js +0 -314
  55. package/lib/common-logic/calculateTransactionInfo.test.js.map +0 -1
  56. package/lib/common-logic/estimateGas.test.d.ts +0 -2
  57. package/lib/common-logic/estimateGas.test.d.ts.map +0 -1
  58. package/lib/common-logic/estimateGas.test.js +0 -129
  59. package/lib/common-logic/estimateGas.test.js.map +0 -1
  60. package/lib/common-logic/fixPrefixCase.test.d.ts +0 -2
  61. package/lib/common-logic/fixPrefixCase.test.d.ts.map +0 -1
  62. package/lib/common-logic/fixPrefixCase.test.js +0 -46
  63. package/lib/common-logic/fixPrefixCase.test.js.map +0 -1
  64. package/lib/common-logic/generateNonce.test.d.ts +0 -2
  65. package/lib/common-logic/generateNonce.test.d.ts.map +0 -1
  66. package/lib/common-logic/generateNonce.test.js +0 -59
  67. package/lib/common-logic/generateNonce.test.js.map +0 -1
  68. package/lib/common-logic/getThorClient.test.d.ts +0 -2
  69. package/lib/common-logic/getThorClient.test.d.ts.map +0 -1
  70. package/lib/common-logic/getThorClient.test.js +0 -53
  71. package/lib/common-logic/getThorClient.test.js.map +0 -1
  72. package/lib/common-logic/mapTransfersToOperations.test.d.ts +0 -2
  73. package/lib/common-logic/mapTransfersToOperations.test.d.ts.map +0 -1
  74. package/lib/common-logic/mapTransfersToOperations.test.js +0 -274
  75. package/lib/common-logic/mapTransfersToOperations.test.js.map +0 -1
  76. package/lib/common-logic/padAddress.test.d.ts +0 -2
  77. package/lib/common-logic/padAddress.test.d.ts.map +0 -1
  78. package/lib/common-logic/padAddress.test.js +0 -59
  79. package/lib/common-logic/padAddress.test.js.map +0 -1
  80. package/lib/common-logic/parseAddress.test.d.ts +0 -2
  81. package/lib/common-logic/parseAddress.test.d.ts.map +0 -1
  82. package/lib/common-logic/parseAddress.test.js +0 -97
  83. package/lib/common-logic/parseAddress.test.js.map +0 -1
  84. package/lib/signer/getAddress.test.d.ts +0 -2
  85. package/lib/signer/getAddress.test.d.ts.map +0 -1
  86. package/lib/signer/getAddress.test.js +0 -357
  87. package/lib/signer/getAddress.test.js.map +0 -1
  88. package/lib/signer/signMessage.test.d.ts +0 -2
  89. package/lib/signer/signMessage.test.d.ts.map +0 -1
  90. package/lib/signer/signMessage.test.js +0 -242
  91. package/lib/signer/signMessage.test.js.map +0 -1
  92. package/lib-es/bridge/broadcast.test.d.ts +0 -2
  93. package/lib-es/bridge/broadcast.test.d.ts.map +0 -1
  94. package/lib-es/bridge/broadcast.test.js +0 -183
  95. package/lib-es/bridge/broadcast.test.js.map +0 -1
  96. package/lib-es/bridge/buildOptimisticOperatioin.test.d.ts +0 -2
  97. package/lib-es/bridge/buildOptimisticOperatioin.test.d.ts.map +0 -1
  98. package/lib-es/bridge/buildOptimisticOperatioin.test.js +0 -281
  99. package/lib-es/bridge/buildOptimisticOperatioin.test.js.map +0 -1
  100. package/lib-es/bridge/createTransaction.test.d.ts +0 -2
  101. package/lib-es/bridge/createTransaction.test.d.ts.map +0 -1
  102. package/lib-es/bridge/createTransaction.test.js +0 -162
  103. package/lib-es/bridge/createTransaction.test.js.map +0 -1
  104. package/lib-es/bridge/estimateMaxSpendable.test.d.ts +0 -2
  105. package/lib-es/bridge/estimateMaxSpendable.test.d.ts.map +0 -1
  106. package/lib-es/bridge/estimateMaxSpendable.test.js +0 -264
  107. package/lib-es/bridge/estimateMaxSpendable.test.js.map +0 -1
  108. package/lib-es/bridge/getTransactionStatus.test.d.ts +0 -2
  109. package/lib-es/bridge/getTransactionStatus.test.d.ts.map +0 -1
  110. package/lib-es/bridge/getTransactionStatus.test.js +0 -277
  111. package/lib-es/bridge/getTransactionStatus.test.js.map +0 -1
  112. package/lib-es/bridge/helpers.test.d.ts +0 -2
  113. package/lib-es/bridge/helpers.test.d.ts.map +0 -1
  114. package/lib-es/bridge/helpers.test.js +0 -293
  115. package/lib-es/bridge/helpers.test.js.map +0 -1
  116. package/lib-es/bridge/prepareTransaction.test.d.ts +0 -2
  117. package/lib-es/bridge/prepareTransaction.test.d.ts.map +0 -1
  118. package/lib-es/bridge/prepareTransaction.test.js +0 -272
  119. package/lib-es/bridge/prepareTransaction.test.js.map +0 -1
  120. package/lib-es/bridge/signOperation.test.d.ts +0 -2
  121. package/lib-es/bridge/signOperation.test.d.ts.map +0 -1
  122. package/lib-es/bridge/signOperation.test.js +0 -290
  123. package/lib-es/bridge/signOperation.test.js.map +0 -1
  124. package/lib-es/bridge/synchronisation.test.d.ts +0 -2
  125. package/lib-es/bridge/synchronisation.test.d.ts.map +0 -1
  126. package/lib-es/bridge/synchronisation.test.js +0 -196
  127. package/lib-es/bridge/synchronisation.test.js.map +0 -1
  128. package/lib-es/bridge/transaction.test.d.ts +0 -2
  129. package/lib-es/bridge/transaction.test.d.ts.map +0 -1
  130. package/lib-es/bridge/transaction.test.js +0 -347
  131. package/lib-es/bridge/transaction.test.js.map +0 -1
  132. package/lib-es/common-logic/calculateClauses.test.d.ts +0 -2
  133. package/lib-es/common-logic/calculateClauses.test.d.ts.map +0 -1
  134. package/lib-es/common-logic/calculateClauses.test.js +0 -151
  135. package/lib-es/common-logic/calculateClauses.test.js.map +0 -1
  136. package/lib-es/common-logic/calculateGasFees.test.d.ts +0 -2
  137. package/lib-es/common-logic/calculateGasFees.test.d.ts.map +0 -1
  138. package/lib-es/common-logic/calculateGasFees.test.js +0 -274
  139. package/lib-es/common-logic/calculateGasFees.test.js.map +0 -1
  140. package/lib-es/common-logic/calculateTransactionInfo.test.d.ts +0 -2
  141. package/lib-es/common-logic/calculateTransactionInfo.test.d.ts.map +0 -1
  142. package/lib-es/common-logic/calculateTransactionInfo.test.js +0 -309
  143. package/lib-es/common-logic/calculateTransactionInfo.test.js.map +0 -1
  144. package/lib-es/common-logic/estimateGas.test.d.ts +0 -2
  145. package/lib-es/common-logic/estimateGas.test.d.ts.map +0 -1
  146. package/lib-es/common-logic/estimateGas.test.js +0 -127
  147. package/lib-es/common-logic/estimateGas.test.js.map +0 -1
  148. package/lib-es/common-logic/fixPrefixCase.test.d.ts +0 -2
  149. package/lib-es/common-logic/fixPrefixCase.test.d.ts.map +0 -1
  150. package/lib-es/common-logic/fixPrefixCase.test.js +0 -44
  151. package/lib-es/common-logic/fixPrefixCase.test.js.map +0 -1
  152. package/lib-es/common-logic/generateNonce.test.d.ts +0 -2
  153. package/lib-es/common-logic/generateNonce.test.d.ts.map +0 -1
  154. package/lib-es/common-logic/generateNonce.test.js +0 -57
  155. package/lib-es/common-logic/generateNonce.test.js.map +0 -1
  156. package/lib-es/common-logic/getThorClient.test.d.ts +0 -2
  157. package/lib-es/common-logic/getThorClient.test.d.ts.map +0 -1
  158. package/lib-es/common-logic/getThorClient.test.js +0 -51
  159. package/lib-es/common-logic/getThorClient.test.js.map +0 -1
  160. package/lib-es/common-logic/mapTransfersToOperations.test.d.ts +0 -2
  161. package/lib-es/common-logic/mapTransfersToOperations.test.d.ts.map +0 -1
  162. package/lib-es/common-logic/mapTransfersToOperations.test.js +0 -269
  163. package/lib-es/common-logic/mapTransfersToOperations.test.js.map +0 -1
  164. package/lib-es/common-logic/padAddress.test.d.ts +0 -2
  165. package/lib-es/common-logic/padAddress.test.d.ts.map +0 -1
  166. package/lib-es/common-logic/padAddress.test.js +0 -57
  167. package/lib-es/common-logic/padAddress.test.js.map +0 -1
  168. package/lib-es/common-logic/parseAddress.test.d.ts +0 -2
  169. package/lib-es/common-logic/parseAddress.test.d.ts.map +0 -1
  170. package/lib-es/common-logic/parseAddress.test.js +0 -95
  171. package/lib-es/common-logic/parseAddress.test.js.map +0 -1
  172. package/lib-es/signer/getAddress.test.d.ts +0 -2
  173. package/lib-es/signer/getAddress.test.d.ts.map +0 -1
  174. package/lib-es/signer/getAddress.test.js +0 -352
  175. package/lib-es/signer/getAddress.test.js.map +0 -1
  176. package/lib-es/signer/signMessage.test.d.ts +0 -2
  177. package/lib-es/signer/signMessage.test.d.ts.map +0 -1
  178. package/lib-es/signer/signMessage.test.js +0 -240
  179. package/lib-es/signer/signMessage.test.js.map +0 -1
@@ -1,352 +0,0 @@
1
- import resolver from "./getAddress";
2
- import eip55 from "eip55";
3
- // Mock dependencies
4
- jest.mock("eip55");
5
- const mockedEip55 = jest.mocked(eip55);
6
- describe("getAddress resolver", () => {
7
- const mockDeviceId = "mock-device-id";
8
- const mockPath = "44'/818'/0'/0/0";
9
- const mockSigner = {
10
- getAddress: jest.fn(),
11
- signTransaction: jest.fn(),
12
- };
13
- const mockSignerContext = jest.fn();
14
- const mockSignerResponse = {
15
- address: "0x742d35cc6634c0532925a3b8d0b251d8c1743ec4",
16
- publicKey: Buffer.from("04abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890ab", "hex"),
17
- };
18
- beforeEach(() => {
19
- jest.clearAllMocks();
20
- mockSigner.getAddress.mockResolvedValue(mockSignerResponse);
21
- mockSignerContext.mockImplementation((deviceId, callback) => callback(mockSigner));
22
- mockedEip55.encode.mockReturnValue("0x742d35Cc6634C0532925a3b8D0B251d8c1743eC4");
23
- });
24
- describe("basic functionality", () => {
25
- it("should get address with verify false", async () => {
26
- const getAddressFn = resolver(mockSignerContext);
27
- const options = {
28
- path: mockPath,
29
- verify: false,
30
- currency: {},
31
- derivationMode: "",
32
- };
33
- const result = await getAddressFn(mockDeviceId, options);
34
- expect(result).toEqual({
35
- address: "0x742d35Cc6634C0532925a3b8D0B251d8c1743eC4",
36
- publicKey: mockSignerResponse.publicKey,
37
- path: mockPath,
38
- });
39
- expect(mockSigner.getAddress).toHaveBeenCalledWith(mockPath, false, false);
40
- expect(mockedEip55.encode).toHaveBeenCalledWith(mockSignerResponse.address);
41
- });
42
- it("should get address with verify true", async () => {
43
- const getAddressFn = resolver(mockSignerContext);
44
- const options = {
45
- path: mockPath,
46
- verify: true,
47
- currency: {},
48
- derivationMode: "",
49
- };
50
- const result = await getAddressFn(mockDeviceId, options);
51
- expect(result).toEqual({
52
- address: "0x742d35Cc6634C0532925a3b8D0B251d8c1743eC4",
53
- publicKey: mockSignerResponse.publicKey,
54
- path: mockPath,
55
- });
56
- expect(mockSigner.getAddress).toHaveBeenCalledWith(mockPath, true, false);
57
- });
58
- it("should always pass false as third parameter (askChainCode)", async () => {
59
- const getAddressFn = resolver(mockSignerContext);
60
- const options = {
61
- path: mockPath,
62
- verify: true,
63
- currency: {},
64
- derivationMode: "",
65
- };
66
- await getAddressFn(mockDeviceId, options);
67
- expect(mockSigner.getAddress).toHaveBeenCalledWith(mockPath, true, false);
68
- });
69
- });
70
- describe("address encoding", () => {
71
- it("should encode address using eip55", async () => {
72
- const getAddressFn = resolver(mockSignerContext);
73
- const options = {
74
- path: mockPath,
75
- verify: false,
76
- currency: {},
77
- derivationMode: "",
78
- };
79
- await getAddressFn(mockDeviceId, options);
80
- expect(mockedEip55.encode).toHaveBeenCalledWith(mockSignerResponse.address);
81
- });
82
- it("should handle different address formats from signer", async () => {
83
- const addresses = [
84
- "0x742d35cc6634c0532925a3b8d0b251d8c1743ec4",
85
- "0X742D35CC6634C0532925A3B8D0B251D8C1743EC4",
86
- "742d35cc6634c0532925a3b8d0b251d8c1743ec4",
87
- ];
88
- const getAddressFn = resolver(mockSignerContext);
89
- const options = {
90
- path: mockPath,
91
- verify: false,
92
- currency: {},
93
- derivationMode: "",
94
- };
95
- for (const address of addresses) {
96
- const customResponse = { ...mockSignerResponse, address };
97
- mockSigner.getAddress.mockResolvedValueOnce(customResponse);
98
- mockedEip55.encode.mockReturnValueOnce(`0x${address.replace(/^0x/i, "")}`);
99
- await getAddressFn(mockDeviceId, options);
100
- expect(mockedEip55.encode).toHaveBeenCalledWith(address);
101
- }
102
- });
103
- it("should return encoded address from eip55", async () => {
104
- const encodedAddress = "0x742d35Cc6634C0532925a3b8D0B251d8c1743eC4";
105
- mockedEip55.encode.mockReturnValue(encodedAddress);
106
- const getAddressFn = resolver(mockSignerContext);
107
- const options = {
108
- path: mockPath,
109
- verify: false,
110
- currency: {},
111
- derivationMode: "",
112
- };
113
- const result = await getAddressFn(mockDeviceId, options);
114
- expect(result.address).toBe(encodedAddress);
115
- });
116
- });
117
- describe("error handling", () => {
118
- it("should throw error when address is empty", async () => {
119
- const invalidResponse = { ...mockSignerResponse, address: "" };
120
- mockSigner.getAddress.mockResolvedValue(invalidResponse);
121
- const getAddressFn = resolver(mockSignerContext);
122
- const options = {
123
- path: mockPath,
124
- verify: false,
125
- currency: {},
126
- derivationMode: "",
127
- };
128
- await expect(getAddressFn(mockDeviceId, options)).rejects.toThrow("[vechain] Response is empty ");
129
- });
130
- it("should throw error when address is null", async () => {
131
- const invalidResponse = { ...mockSignerResponse, address: null };
132
- mockSigner.getAddress.mockResolvedValue(invalidResponse);
133
- const getAddressFn = resolver(mockSignerContext);
134
- const options = {
135
- path: mockPath,
136
- verify: false,
137
- currency: {},
138
- derivationMode: "",
139
- };
140
- await expect(getAddressFn(mockDeviceId, options)).rejects.toThrow("[vechain] Response is empty null ");
141
- });
142
- it("should throw error when address is undefined", async () => {
143
- const invalidResponse = { ...mockSignerResponse, address: undefined };
144
- mockSigner.getAddress.mockResolvedValue(invalidResponse);
145
- const getAddressFn = resolver(mockSignerContext);
146
- const options = {
147
- path: mockPath,
148
- verify: false,
149
- currency: {},
150
- derivationMode: "",
151
- };
152
- await expect(getAddressFn(mockDeviceId, options)).rejects.toThrow("[vechain] Response is empty undefined ");
153
- });
154
- it("should throw error when publicKey is empty", async () => {
155
- const invalidResponse = { ...mockSignerResponse, publicKey: Buffer.alloc(0) };
156
- mockSigner.getAddress.mockResolvedValue(invalidResponse);
157
- const getAddressFn = resolver(mockSignerContext);
158
- const options = {
159
- path: mockPath,
160
- verify: false,
161
- currency: {},
162
- derivationMode: "",
163
- };
164
- await expect(getAddressFn(mockDeviceId, options)).rejects.toThrow("[vechain] Response is empty");
165
- });
166
- it("should handle signer errors", async () => {
167
- const signerError = new Error("Hardware wallet error");
168
- mockSigner.getAddress.mockRejectedValue(signerError);
169
- const getAddressFn = resolver(mockSignerContext);
170
- const options = {
171
- path: mockPath,
172
- verify: false,
173
- currency: {},
174
- derivationMode: "",
175
- };
176
- await expect(getAddressFn(mockDeviceId, options)).rejects.toThrow("Hardware wallet error");
177
- });
178
- it("should handle signerContext errors", async () => {
179
- const contextError = new Error("Signer context failed");
180
- mockSignerContext.mockRejectedValue(contextError);
181
- const getAddressFn = resolver(mockSignerContext);
182
- const options = {
183
- path: mockPath,
184
- verify: false,
185
- currency: {},
186
- derivationMode: "",
187
- };
188
- await expect(getAddressFn(mockDeviceId, options)).rejects.toThrow("Signer context failed");
189
- });
190
- it("should handle eip55 encoding errors", async () => {
191
- // Reset the mock to not throw an error initially
192
- mockSigner.getAddress.mockResolvedValue(mockSignerResponse);
193
- const encodingError = new Error("Invalid address format");
194
- mockedEip55.encode.mockImplementation(() => {
195
- throw encodingError;
196
- });
197
- const getAddressFn = resolver(mockSignerContext);
198
- const options = {
199
- path: mockPath,
200
- verify: false,
201
- currency: {},
202
- derivationMode: "",
203
- };
204
- await expect(getAddressFn(mockDeviceId, options)).rejects.toThrow("Invalid address format");
205
- });
206
- });
207
- describe("different derivation paths", () => {
208
- it("should handle different derivation paths", async () => {
209
- const paths = ["44'/818'/0'/0/0", "44'/818'/1'/0/0", "44'/818'/0'/0/1", "44'/818'/2'/0/5"];
210
- const getAddressFn = resolver(mockSignerContext);
211
- for (const path of paths) {
212
- const options = {
213
- path,
214
- verify: false,
215
- currency: {},
216
- derivationMode: "",
217
- };
218
- const result = await getAddressFn(mockDeviceId, options);
219
- expect(mockSigner.getAddress).toHaveBeenCalledWith(path, false, false);
220
- expect(result.path).toBe(path);
221
- }
222
- });
223
- it("should handle empty path", async () => {
224
- const getAddressFn = resolver(mockSignerContext);
225
- const options = {
226
- path: "",
227
- verify: false,
228
- currency: {},
229
- derivationMode: "",
230
- };
231
- await getAddressFn(mockDeviceId, options);
232
- expect(mockSigner.getAddress).toHaveBeenCalledWith("", false, false);
233
- });
234
- });
235
- describe("different device IDs", () => {
236
- it("should handle different device IDs", async () => {
237
- const deviceIds = ["device1", "device2", "device3"];
238
- const getAddressFn = resolver(mockSignerContext);
239
- const options = {
240
- path: mockPath,
241
- verify: false,
242
- currency: {},
243
- derivationMode: "",
244
- };
245
- for (const deviceId of deviceIds) {
246
- await getAddressFn(deviceId, options);
247
- expect(mockSignerContext).toHaveBeenCalledWith(deviceId, expect.any(Function));
248
- }
249
- });
250
- });
251
- describe("publicKey handling", () => {
252
- it("should return publicKey from signer response", async () => {
253
- const customPublicKey = Buffer.from("abcdef1234567890", "hex"); // Valid hex with length > 0
254
- const customResponse = { ...mockSignerResponse, publicKey: customPublicKey };
255
- mockSigner.getAddress.mockResolvedValue(customResponse);
256
- const getAddressFn = resolver(mockSignerContext);
257
- const options = {
258
- path: mockPath,
259
- verify: false,
260
- currency: {},
261
- derivationMode: "",
262
- };
263
- const result = await getAddressFn(mockDeviceId, options);
264
- expect(result.publicKey).toBe(customPublicKey);
265
- });
266
- it("should handle different publicKey lengths", async () => {
267
- const publicKeys = [
268
- Buffer.from("12", "hex"),
269
- Buffer.from("1234567890abcdef", "hex"),
270
- Buffer.from("04" + "ab".repeat(32) + "cd".repeat(32), "hex"), // 65 bytes (uncompressed)
271
- ];
272
- const getAddressFn = resolver(mockSignerContext);
273
- const options = {
274
- path: mockPath,
275
- verify: false,
276
- currency: {},
277
- derivationMode: "",
278
- };
279
- for (const publicKey of publicKeys) {
280
- const customResponse = { ...mockSignerResponse, publicKey };
281
- mockSigner.getAddress.mockResolvedValueOnce(customResponse);
282
- const result = await getAddressFn(mockDeviceId, options);
283
- expect(result.publicKey).toBe(publicKey);
284
- }
285
- });
286
- });
287
- describe("verify parameter behavior", () => {
288
- it("should pass verify parameter correctly to signer", async () => {
289
- const getAddressFn = resolver(mockSignerContext);
290
- // Test verify: true
291
- await getAddressFn(mockDeviceId, {
292
- path: mockPath,
293
- verify: true,
294
- currency: {},
295
- derivationMode: "",
296
- });
297
- expect(mockSigner.getAddress).toHaveBeenLastCalledWith(mockPath, true, false);
298
- // Test verify: false
299
- await getAddressFn(mockDeviceId, {
300
- path: mockPath,
301
- verify: false,
302
- currency: {},
303
- derivationMode: "",
304
- });
305
- expect(mockSigner.getAddress).toHaveBeenLastCalledWith(mockPath, false, false);
306
- });
307
- it("should handle undefined verify parameter", async () => {
308
- const getAddressFn = resolver(mockSignerContext);
309
- const options = { path: mockPath };
310
- await getAddressFn(mockDeviceId, options);
311
- expect(mockSigner.getAddress).toHaveBeenCalledWith(mockPath, undefined, false);
312
- });
313
- });
314
- describe("integration scenarios", () => {
315
- it("should work with real-like addresses and public keys", async () => {
316
- const realAddress = "0x742d35cc6634c0532925a3b8d0b251d8c1743ec4";
317
- const realPublicKey = Buffer.from("04abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890ab", "hex");
318
- const realResponse = { address: realAddress, publicKey: realPublicKey };
319
- const encodedAddress = "0x742d35Cc6634C0532925a3b8D0B251d8c1743eC4";
320
- mockSigner.getAddress.mockResolvedValue(realResponse);
321
- mockedEip55.encode.mockReturnValue(encodedAddress);
322
- const getAddressFn = resolver(mockSignerContext);
323
- const options = {
324
- path: "44'/818'/0'/0/0",
325
- verify: true,
326
- currency: {},
327
- derivationMode: "",
328
- };
329
- const result = await getAddressFn("real-device", options);
330
- expect(result).toEqual({
331
- address: encodedAddress,
332
- publicKey: realPublicKey,
333
- path: "44'/818'/0'/0/0",
334
- });
335
- });
336
- it("should maintain result structure consistency", async () => {
337
- const getAddressFn = resolver(mockSignerContext);
338
- const options = {
339
- path: mockPath,
340
- verify: false,
341
- currency: {},
342
- derivationMode: "",
343
- };
344
- const result = await getAddressFn(mockDeviceId, options);
345
- expect(result).toHaveProperty("address");
346
- expect(result).toHaveProperty("publicKey");
347
- expect(result).toHaveProperty("path");
348
- expect(Object.keys(result)).toHaveLength(3);
349
- });
350
- });
351
- });
352
- //# sourceMappingURL=getAddress.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getAddress.test.js","sourceRoot":"","sources":["../../src/signer/getAddress.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=signMessage.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signMessage.test.d.ts","sourceRoot":"","sources":["../../src/signer/signMessage.test.ts"],"names":[],"mappings":""}
@@ -1,240 +0,0 @@
1
- import { signMessage } from "./signMessage";
2
- import { VechainSDKTransaction } from "../types";
3
- // Mock dependencies
4
- jest.mock("../types", () => ({
5
- ...jest.requireActual("../types"),
6
- VechainSDKTransaction: {
7
- of: jest.fn(),
8
- },
9
- }));
10
- const mockedVechainSDKTransaction = jest.mocked(VechainSDKTransaction);
11
- describe("signMessage", () => {
12
- const mockDeviceId = "mock-device-id";
13
- const mockPath = "44'/818'/0'/0/0";
14
- const mockSigner = {
15
- getAddress: jest.fn(),
16
- signTransaction: jest.fn(),
17
- };
18
- const mockSignerContext = jest.fn();
19
- const mockTransactionObject = {
20
- chainTag: 74,
21
- blockRef: "0x00000000000b2bce",
22
- expiration: 18,
23
- clauses: [
24
- {
25
- to: "0x456789012345678901234567890123456789abcd",
26
- value: "1000000000000000000",
27
- data: "0x",
28
- },
29
- ],
30
- maxFeePerGas: 10000000000000,
31
- maxPriorityFeePerGas: 1000000000000,
32
- gas: 21000,
33
- dependsOn: null,
34
- nonce: "0x12345678",
35
- };
36
- const mockUnsignedTransaction = {
37
- encoded: Buffer.from("mockencodedtransaction", "hex"),
38
- };
39
- beforeEach(() => {
40
- jest.clearAllMocks();
41
- mockedVechainSDKTransaction.of.mockReturnValue(mockUnsignedTransaction);
42
- mockSigner.signTransaction.mockResolvedValue(Buffer.from("signature123", "hex"));
43
- mockSignerContext.mockImplementation((deviceId, callback) => callback(mockSigner));
44
- });
45
- describe("message parsing", () => {
46
- it("should parse valid JSON message", async () => {
47
- const message = JSON.stringify(mockTransactionObject);
48
- const signMessageFn = signMessage(mockSignerContext);
49
- const result = await signMessageFn(mockDeviceId, mockPath, message, "");
50
- // JSON parsing is handled internally by the function
51
- expect(mockedVechainSDKTransaction.of).toHaveBeenCalledWith(mockTransactionObject);
52
- expect(result).toBe("");
53
- });
54
- it("should parse valid JSON rawMessage when message is empty", async () => {
55
- const rawMessage = JSON.stringify(mockTransactionObject);
56
- const signMessageFn = signMessage(mockSignerContext);
57
- const result = await signMessageFn(mockDeviceId, mockPath, "", rawMessage);
58
- expect(mockedVechainSDKTransaction.of).toHaveBeenCalledWith(mockTransactionObject);
59
- expect(result).toBe("");
60
- });
61
- it("should prefer message over rawMessage when both are provided", async () => {
62
- const message = JSON.stringify(mockTransactionObject);
63
- const differentRawMessage = JSON.stringify({ different: "object" });
64
- const signMessageFn = signMessage(mockSignerContext);
65
- await signMessageFn(mockDeviceId, mockPath, message, differentRawMessage);
66
- expect(mockedVechainSDKTransaction.of).toHaveBeenCalledWith(mockTransactionObject);
67
- });
68
- it("should throw error for invalid JSON message", async () => {
69
- const invalidMessage = "invalid json {";
70
- const signMessageFn = signMessage(mockSignerContext);
71
- await expect(signMessageFn(mockDeviceId, mockPath, invalidMessage, "")).rejects.toThrow("Message is not a valid JSON object");
72
- });
73
- it("should throw error for invalid JSON rawMessage", async () => {
74
- const invalidRawMessage = "invalid json {";
75
- const signMessageFn = signMessage(mockSignerContext);
76
- await expect(signMessageFn(mockDeviceId, mockPath, "", invalidRawMessage)).rejects.toThrow("Message is not a valid JSON object");
77
- });
78
- it("should throw error when both message and rawMessage are empty", async () => {
79
- const signMessageFn = signMessage(mockSignerContext);
80
- await expect(signMessageFn(mockDeviceId, mockPath, "", "")).rejects.toThrow("Message is not a valid JSON object");
81
- });
82
- });
83
- describe("transaction creation", () => {
84
- it("should create VechainSDKTransaction from parsed object", async () => {
85
- const message = JSON.stringify(mockTransactionObject);
86
- const signMessageFn = signMessage(mockSignerContext);
87
- await signMessageFn(mockDeviceId, mockPath, message, "");
88
- expect(mockedVechainSDKTransaction.of).toHaveBeenCalledWith(mockTransactionObject);
89
- });
90
- it("should handle VechainSDKTransaction creation errors", async () => {
91
- const message = JSON.stringify(mockTransactionObject);
92
- const signMessageFn = signMessage(mockSignerContext);
93
- mockedVechainSDKTransaction.of.mockImplementation(() => {
94
- throw new Error("Invalid transaction");
95
- });
96
- await expect(signMessageFn(mockDeviceId, mockPath, message, "")).rejects.toThrow("Message is not a valid JSON object");
97
- });
98
- it("should handle different transaction structures", async () => {
99
- const tokenTransaction = {
100
- ...mockTransactionObject,
101
- clauses: [
102
- {
103
- to: "0x0000000000000000000000000000456e65726779",
104
- value: "0",
105
- data: "0xa9059cbb000000000000000000000000456789012345678901234567890123456789abcd0000000000000000000000000000000000000000000000000de0b6b3a7640000",
106
- },
107
- ],
108
- };
109
- const message = JSON.stringify(tokenTransaction);
110
- const signMessageFn = signMessage(mockSignerContext);
111
- await signMessageFn(mockDeviceId, mockPath, message, "");
112
- expect(mockedVechainSDKTransaction.of).toHaveBeenCalledWith(tokenTransaction);
113
- });
114
- });
115
- describe("signing process", () => {
116
- it("should call signer with correct parameters", async () => {
117
- const message = JSON.stringify(mockTransactionObject);
118
- const signMessageFn = signMessage(mockSignerContext);
119
- await signMessageFn(mockDeviceId, mockPath, message, "");
120
- expect(mockSignerContext).toHaveBeenCalledWith(mockDeviceId, expect.any(Function));
121
- expect(mockSigner.signTransaction).toHaveBeenCalledWith(mockPath, mockUnsignedTransaction.encoded.toString("hex"));
122
- });
123
- it("should convert encoded transaction to hex string", async () => {
124
- const customEncoded = Buffer.from("customtransaction", "utf8");
125
- const customUnsigned = { encoded: customEncoded };
126
- mockedVechainSDKTransaction.of.mockReturnValue(customUnsigned);
127
- const message = JSON.stringify(mockTransactionObject);
128
- const signMessageFn = signMessage(mockSignerContext);
129
- await signMessageFn(mockDeviceId, mockPath, message, "");
130
- expect(mockSigner.signTransaction).toHaveBeenCalledWith(mockPath, customEncoded.toString("hex"));
131
- });
132
- it("should return signature as hex string", async () => {
133
- const signatureBuffer = Buffer.from([0x12, 0x34, 0x56, 0x78]);
134
- mockSigner.signTransaction.mockResolvedValue(signatureBuffer);
135
- const message = JSON.stringify(mockTransactionObject);
136
- const signMessageFn = signMessage(mockSignerContext);
137
- const result = await signMessageFn(mockDeviceId, mockPath, message, "");
138
- expect(result).toBe("12345678");
139
- });
140
- it("should handle signer errors", async () => {
141
- const signerError = new Error("Hardware wallet error");
142
- mockSigner.signTransaction.mockRejectedValue(signerError);
143
- const message = JSON.stringify(mockTransactionObject);
144
- const signMessageFn = signMessage(mockSignerContext);
145
- await expect(signMessageFn(mockDeviceId, mockPath, message, "")).rejects.toThrow("Hardware wallet error");
146
- });
147
- it("should handle signerContext errors", async () => {
148
- const contextError = new Error("Signer context failed");
149
- mockSignerContext.mockRejectedValue(contextError);
150
- const message = JSON.stringify(mockTransactionObject);
151
- const signMessageFn = signMessage(mockSignerContext);
152
- await expect(signMessageFn(mockDeviceId, mockPath, message, "")).rejects.toThrow("Signer context failed");
153
- });
154
- });
155
- describe("different input scenarios", () => {
156
- it("should handle different device IDs", async () => {
157
- const deviceIds = ["device1", "device2", "device3"];
158
- const message = JSON.stringify(mockTransactionObject);
159
- const signMessageFn = signMessage(mockSignerContext);
160
- for (const deviceId of deviceIds) {
161
- await signMessageFn(deviceId, mockPath, message, "");
162
- expect(mockSignerContext).toHaveBeenCalledWith(deviceId, expect.any(Function));
163
- }
164
- });
165
- it("should handle different derivation paths", async () => {
166
- const paths = ["44'/818'/0'/0/0", "44'/818'/1'/0/0", "44'/818'/0'/0/1"];
167
- const message = JSON.stringify(mockTransactionObject);
168
- const signMessageFn = signMessage(mockSignerContext);
169
- for (const path of paths) {
170
- await signMessageFn(mockDeviceId, path, message, "");
171
- expect(mockSigner.signTransaction).toHaveBeenCalledWith(path, expect.any(String));
172
- }
173
- });
174
- it("should handle complex transaction objects", async () => {
175
- const complexTransaction = {
176
- ...mockTransactionObject,
177
- clauses: [
178
- {
179
- to: "0x456789012345678901234567890123456789abcd",
180
- value: "1000000000000000000",
181
- data: "0x",
182
- },
183
- {
184
- to: "0x0000000000000000000000000000456e65726779",
185
- value: "0",
186
- data: "0xa9059cbb",
187
- },
188
- ],
189
- dependsOn: "0xprevious123",
190
- gas: 50000,
191
- };
192
- const message = JSON.stringify(complexTransaction);
193
- const signMessageFn = signMessage(mockSignerContext);
194
- await signMessageFn(mockDeviceId, mockPath, message, "");
195
- expect(mockedVechainSDKTransaction.of).toHaveBeenCalledWith(complexTransaction);
196
- });
197
- it("should handle minimal transaction objects", async () => {
198
- const minimalTransaction = {
199
- chainTag: 74,
200
- blockRef: "0x0000000000000000",
201
- expiration: 18,
202
- clauses: [],
203
- maxFeePerGas: 0,
204
- maxPriorityFeePerGas: 0,
205
- gas: 0,
206
- dependsOn: null,
207
- nonce: "0x00000000",
208
- };
209
- const message = JSON.stringify(minimalTransaction);
210
- const signMessageFn = signMessage(mockSignerContext);
211
- await signMessageFn(mockDeviceId, mockPath, message, "");
212
- expect(mockedVechainSDKTransaction.of).toHaveBeenCalledWith(minimalTransaction);
213
- });
214
- });
215
- describe("signature formatting", () => {
216
- it("should handle different signature lengths", async () => {
217
- const signatures = [
218
- Buffer.from("12", "hex"),
219
- Buffer.from("1234567890abcdef", "hex"),
220
- Buffer.from("ff".repeat(32), "hex"),
221
- ];
222
- const message = JSON.stringify(mockTransactionObject);
223
- const signMessageFn = signMessage(mockSignerContext);
224
- for (const signature of signatures) {
225
- mockSigner.signTransaction.mockResolvedValueOnce(signature);
226
- const result = await signMessageFn(mockDeviceId, mockPath, message, "");
227
- expect(result).toBe(signature.toString("hex"));
228
- }
229
- });
230
- it("should handle empty signature buffer", async () => {
231
- const emptySignature = Buffer.alloc(0);
232
- mockSigner.signTransaction.mockResolvedValue(emptySignature);
233
- const message = JSON.stringify(mockTransactionObject);
234
- const signMessageFn = signMessage(mockSignerContext);
235
- const result = await signMessageFn(mockDeviceId, mockPath, message, "");
236
- expect(result).toBe("");
237
- });
238
- });
239
- });
240
- //# sourceMappingURL=signMessage.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signMessage.test.js","sourceRoot":"","sources":["../../src/signer/signMessage.test.ts"],"names":[],"mappings":"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"}