@ledgerhq/hw-app-exchange 0.16.0 → 0.17.0-nightly.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/package.json +6 -6
  3. package/lib/Exchange.integ.test.d.ts +0 -2
  4. package/lib/Exchange.integ.test.d.ts.map +0 -1
  5. package/lib/Exchange.integ.test.js +0 -458
  6. package/lib/Exchange.integ.test.js.map +0 -1
  7. package/lib/Exchange.test.d.ts +0 -2
  8. package/lib/Exchange.test.d.ts.map +0 -1
  9. package/lib/Exchange.test.js +0 -341
  10. package/lib/Exchange.test.js.map +0 -1
  11. package/lib/ReturnCode.test.d.ts +0 -2
  12. package/lib/ReturnCode.test.d.ts.map +0 -1
  13. package/lib/ReturnCode.test.js +0 -21
  14. package/lib/ReturnCode.test.js.map +0 -1
  15. package/lib/SellUtils.test.d.ts +0 -2
  16. package/lib/SellUtils.test.d.ts.map +0 -1
  17. package/lib/SellUtils.test.js +0 -32
  18. package/lib/SellUtils.test.js.map +0 -1
  19. package/lib/SwapUtils.test.d.ts +0 -2
  20. package/lib/SwapUtils.test.d.ts.map +0 -1
  21. package/lib/SwapUtils.test.js +0 -34
  22. package/lib/SwapUtils.test.js.map +0 -1
  23. package/lib-es/Exchange.integ.test.d.ts +0 -2
  24. package/lib-es/Exchange.integ.test.d.ts.map +0 -1
  25. package/lib-es/Exchange.integ.test.js +0 -453
  26. package/lib-es/Exchange.integ.test.js.map +0 -1
  27. package/lib-es/Exchange.test.d.ts +0 -2
  28. package/lib-es/Exchange.test.d.ts.map +0 -1
  29. package/lib-es/Exchange.test.js +0 -313
  30. package/lib-es/Exchange.test.js.map +0 -1
  31. package/lib-es/ReturnCode.test.d.ts +0 -2
  32. package/lib-es/ReturnCode.test.d.ts.map +0 -1
  33. package/lib-es/ReturnCode.test.js +0 -19
  34. package/lib-es/ReturnCode.test.js.map +0 -1
  35. package/lib-es/SellUtils.test.d.ts +0 -2
  36. package/lib-es/SellUtils.test.d.ts.map +0 -1
  37. package/lib-es/SellUtils.test.js +0 -30
  38. package/lib-es/SellUtils.test.js.map +0 -1
  39. package/lib-es/SwapUtils.test.d.ts +0 -2
  40. package/lib-es/SwapUtils.test.d.ts.map +0 -1
  41. package/lib-es/SwapUtils.test.js +0 -32
  42. package/lib-es/SwapUtils.test.js.map +0 -1
@@ -1,313 +0,0 @@
1
- import { createTransportRecorder, MockTransport, openTransportReplayer, RecordStore, } from "@ledgerhq/hw-transport-mocker";
2
- import Exchange, { createExchange } from "./Exchange";
3
- import BigNumber from "bignumber.js";
4
- describe("Constructor", () => {
5
- [2 /* ExchangeTypes.Fund */, 1 /* ExchangeTypes.Sell */, 0 /* ExchangeTypes.Swap */].forEach(exchangeType => {
6
- it(`Exchange (value of ${exchangeType}) init with default rate types of fixed`, async () => {
7
- const transport = await openTransportReplayer(RecordStore.fromString(""));
8
- const exchange = new Exchange(transport, exchangeType);
9
- expect(exchange.transactionRate).toBe(0 /* RateTypes.Fixed */);
10
- });
11
- [0 /* RateTypes.Fixed */, 1 /* RateTypes.Floating */].forEach(rateType => {
12
- it(`Exchange (value of ${exchangeType}) init with rate types of value ${rateType}`, async () => {
13
- const transport = await openTransportReplayer(RecordStore.fromString(""));
14
- const exchange = new Exchange(transport, exchangeType, rateType);
15
- expect(exchange.transactionRate).toBe(rateType);
16
- });
17
- });
18
- });
19
- });
20
- describe("startNewTransaction", () => {
21
- const recordStore = new RecordStore();
22
- const mockTransport = new MockTransport(Buffer.from([0, 0x90, 0x00]));
23
- const transport = createTransportRecorder(mockTransport, recordStore);
24
- beforeEach(() => {
25
- recordStore.clearStore();
26
- });
27
- it("sends a correct sequence of APDU when Swap", async () => {
28
- // Given
29
- const mockNonceResponse = "2ac38f187c"; // Response of length 10
30
- mockTransport.setNewResponse(Buffer.concat([
31
- Buffer.from(mockNonceResponse),
32
- Buffer.from([0x90, 0x00]), // StatusCodes.OK
33
- ]));
34
- const exchange = new Exchange(new transport(mockTransport), 0 /* ExchangeTypes.Swap */);
35
- // When
36
- const result = await exchange.startNewTransaction();
37
- // Then
38
- const expectCommand = Buffer.from([
39
- 0xe0,
40
- 0x03, // Start Exchance
41
- 0 /* RateTypes.Fixed */,
42
- 0 /* ExchangeTypes.Swap */,
43
- 0x00, // Data
44
- ]).toString("hex");
45
- expect(recordStore.queue[0][0]).toBe(expectCommand);
46
- expect(result).toEqual(mockNonceResponse);
47
- });
48
- it.each([
49
- { name: "Sell", type: 1 /* ExchangeTypes.Sell */ },
50
- { name: "Fund", type: 2 /* ExchangeTypes.Fund */ },
51
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
52
- ])("returns a base64 nonce when $name", async ({ name, type }) => {
53
- // Given
54
- const mockNonceResponse = "2ac38f187c2ac38f187c2ac38f187c7c"; // Response of length 10
55
- mockTransport.setNewResponse(Buffer.concat([
56
- Buffer.from(mockNonceResponse),
57
- Buffer.from([0x90, 0x00]), // StatusCodes.OK
58
- ]));
59
- const exchange = new Exchange(new transport(mockTransport), type);
60
- // When
61
- const result = await exchange.startNewTransaction();
62
- // Then
63
- const expectCommand = Buffer.from([
64
- 0xe0,
65
- 0x03, // Start Exchance
66
- 0 /* RateTypes.Fixed */,
67
- type,
68
- 0x00, // Data
69
- ]).toString("hex");
70
- const expectedNonce = btoa(mockNonceResponse);
71
- expect(recordStore.queue[0][0]).toBe(expectCommand);
72
- expect(result).toEqual(expectedNonce);
73
- });
74
- it.each([
75
- { name: "Swap NG", type: 3 /* ExchangeTypes.SwapNg */ },
76
- { name: "Sell NG", type: 4 /* ExchangeTypes.SellNg */ },
77
- { name: "Fund NG", type: 5 /* ExchangeTypes.FundNg */ },
78
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
79
- ])("returns a 32 bytes nonce when $name", async ({ name, type }) => {
80
- // Given
81
- const mockNonceResponse = Buffer.from("2ac38f187c2ac38f187c2ac38f187c7c"); // Response of 32 bytes
82
- mockTransport.setNewResponse(Buffer.concat([
83
- mockNonceResponse,
84
- Buffer.from([0x90, 0x00]), // StatusCodes.OK
85
- ]));
86
- const exchange = new Exchange(new transport(mockTransport), 3 /* ExchangeTypes.SwapNg */);
87
- // When
88
- const result = await exchange.startNewTransaction();
89
- // Then
90
- const expectCommand = Buffer.from([
91
- 0xe0,
92
- 0x03, // Start Exchance
93
- 0 /* RateTypes.Fixed */,
94
- 3 /* ExchangeTypes.SwapNg */,
95
- 0x00, // Data
96
- ]).toString("hex");
97
- expect(recordStore.queue[0][0]).toBe(expectCommand);
98
- expect(result).toEqual(mockNonceResponse.toString("hex"));
99
- });
100
- it("throws an error if status is not ok", async () => {
101
- // Given
102
- const mockResponse = "2ac38f187c"; // Response of length 10
103
- mockTransport.setNewResponse(Buffer.concat([Buffer.from(mockResponse), Buffer.from([0x6a, 0x80])]));
104
- const exchange = new Exchange(new transport(mockTransport), 0 /* ExchangeTypes.Swap */);
105
- // When & Then
106
- await expect(exchange.startNewTransaction()).rejects.toThrowError();
107
- });
108
- });
109
- describe("setPartnerKey", () => {
110
- const recordStore = new RecordStore();
111
- const mockTransport = new MockTransport(Buffer.from([0, 0x90, 0x00]));
112
- const transport = createTransportRecorder(mockTransport, recordStore);
113
- beforeEach(() => {
114
- recordStore.clearStore();
115
- });
116
- it("sends legacy info", async () => {
117
- // Given
118
- const exchange = new Exchange(new transport(mockTransport), 0 /* ExchangeTypes.Swap */);
119
- const info = {
120
- name: "LTX",
121
- curve: "WHATEVER",
122
- publicKey: Buffer.from("1234567890abcdef", "hex"),
123
- };
124
- // <OVERALL_LENGTH><DATA_SIZE><DATA>
125
- // <DATA> = <NAME_SIZE><NAME><PUBKEY>
126
- const hexEncodedInfoExpected = "0c034c54581234567890abcdef";
127
- // When
128
- await exchange.setPartnerKey(info);
129
- // Then
130
- const expectCommand = Buffer.from([0xe0, 0x04, 0 /* RateTypes.Fixed */, 0 /* ExchangeTypes.Swap */]).toString("hex");
131
- expect(recordStore.queue[0][0]).toBe(expectCommand + hexEncodedInfoExpected);
132
- });
133
- it("sends NG info", async () => {
134
- // Given
135
- const exchange = createExchange(new transport(mockTransport), 3 /* ExchangeTypes.SwapNg */);
136
- const info = {
137
- name: "LTX",
138
- curve: "secp256k1",
139
- publicKey: Buffer.from("1234567890abcdef", "hex"),
140
- };
141
- // <OVERALL_LENGTH><DATA_SIZE><DATA>
142
- // <DATA> = <NAME_SIZE><NAME><CURVE><PUBKEY>
143
- const hexEncodedInfoExpected = "0d034c5458001234567890abcdef";
144
- // When
145
- await exchange.setPartnerKey(info);
146
- // Then
147
- const expectCommand = Buffer.from([0xe0, 0x04, 0 /* RateTypes.Fixed */, 3 /* ExchangeTypes.SwapNg */]).toString("hex");
148
- expect(recordStore.queue[0][0]).toBe(expectCommand + hexEncodedInfoExpected);
149
- });
150
- });
151
- describe("processTransaction", () => {
152
- const recordStore = new RecordStore();
153
- const mockTransport = new MockTransport(Buffer.from([0, 0x90, 0x00]));
154
- const transport = createTransportRecorder(mockTransport, recordStore);
155
- beforeEach(() => {
156
- recordStore.clearStore();
157
- });
158
- it("sends legacy info", async () => {
159
- // Given
160
- const exchange = new Exchange(new transport(mockTransport), 0 /* ExchangeTypes.Swap */);
161
- const tx = Buffer.from("1234567890abcdef", "hex");
162
- const fee = new BigNumber("10");
163
- // <OVERALL_LENGTH><TX_LENGTH><TX><FEE_LENGTH><FEE>
164
- const hexEncodedInfoExpected = "0b081234567890abcdef010a";
165
- // When
166
- await exchange.processTransaction(tx, fee);
167
- // Then
168
- const expectCommand = Buffer.from([0xe0, 0x06, 0 /* RateTypes.Fixed */, 0 /* ExchangeTypes.Swap */]).toString("hex");
169
- expect(recordStore.queue[0][0]).toBe(expectCommand + hexEncodedInfoExpected);
170
- });
171
- it("sends NG info", async () => {
172
- // Given
173
- const exchange = createExchange(new transport(mockTransport), 3 /* ExchangeTypes.SwapNg */);
174
- const tx = Buffer.from("1234567890abcdef", "hex");
175
- const fee = new BigNumber("10");
176
- // <OVERALL_LENGTH><ENC_TX_FORMAT><TX_LENGTH><TX><FEE_LENGTH><FEE>
177
- const hexEncodedInfoExpected = "0d" + "00" + "0008" + "1234567890abcdef" + "01" + "0a";
178
- // When
179
- await exchange.processTransaction(tx, fee, "raw");
180
- // Then
181
- const expectCommand = Buffer.from([0xe0, 0x06, 0 /* RateTypes.Fixed */, 3 /* ExchangeTypes.SwapNg */]).toString("hex");
182
- expect(recordStore.queue[0][0]).toBe(expectCommand + hexEncodedInfoExpected);
183
- });
184
- it("sends NG info of larger than 255 bytes", async () => {
185
- // Given
186
- const exchange = createExchange(new transport(mockTransport), 3 /* ExchangeTypes.SwapNg */);
187
- const value = Array(200).fill("abc").join("");
188
- const tx = Buffer.from(value, "hex");
189
- const fee = new BigNumber("10");
190
- // <ENC_TX_FORMAT><TX_LENGTH><TX><FEE_LENGTH><FEE>
191
- const hexEncodedInfoExpected = "00" + "012c" + value + "01" + "0a";
192
- // When
193
- await exchange.processTransaction(tx, fee, "raw");
194
- // Then
195
- let expectCommand = Buffer.from([
196
- 0xe0,
197
- 0x06,
198
- 0 /* RateTypes.Fixed */,
199
- 3 /* ExchangeTypes.SwapNg */ | (0x02 << 4),
200
- ]).toString("hex");
201
- const dataLength = "ff";
202
- expect(recordStore.queue[0][0]).toBe(expectCommand + dataLength + hexEncodedInfoExpected.substring(0, 255 * 2));
203
- expectCommand = Buffer.from([
204
- 0xe0,
205
- 0x06,
206
- 0 /* RateTypes.Fixed */,
207
- 3 /* ExchangeTypes.SwapNg */ | (0x01 << 4),
208
- ]).toString("hex");
209
- const remainingDataLength = (hexEncodedInfoExpected.length - 255 * 2) / 2;
210
- expect(recordStore.queue[1][0]).toBe(expectCommand +
211
- remainingDataLength.toString(16) +
212
- hexEncodedInfoExpected.substring(255 * 2, hexEncodedInfoExpected.length));
213
- });
214
- });
215
- describe("checkTransactionSignature", () => {
216
- const recordStore = new RecordStore();
217
- const mockTransport = new MockTransport(Buffer.from([0, 0x90, 0x00]));
218
- const transport = createTransportRecorder(mockTransport, recordStore);
219
- beforeEach(() => {
220
- recordStore.clearStore();
221
- });
222
- it("sends legacy info", async () => {
223
- // Given
224
- const exchange = new Exchange(new transport(mockTransport), 0 /* ExchangeTypes.Swap */);
225
- const txSig = Buffer.from("1234567890abcdef", "hex");
226
- const hexEncodedInfoExpected = "081234567890abcdef";
227
- // When
228
- await exchange.checkTransactionSignature(txSig);
229
- // Then
230
- const expectCommand = Buffer.from([0xe0, 0x07, 0 /* RateTypes.Fixed */, 0 /* ExchangeTypes.Swap */]).toString("hex");
231
- expect(recordStore.queue[0][0]).toBe(expectCommand + hexEncodedInfoExpected);
232
- });
233
- it("sends NG info", async () => {
234
- // Given
235
- const exchange = createExchange(new transport(mockTransport), 3 /* ExchangeTypes.SwapNg */);
236
- const txSig = Buffer.from("1234567890abcdef", "hex");
237
- const hexEncodedInfoExpected = "0a01011234567890abcdef";
238
- // When
239
- await exchange.checkTransactionSignature(txSig);
240
- // Then
241
- const expectCommand = Buffer.from([0xe0, 0x07, 0 /* RateTypes.Fixed */, 3 /* ExchangeTypes.SwapNg */]).toString("hex");
242
- expect(recordStore.queue[0][0]).toBe(expectCommand + hexEncodedInfoExpected);
243
- });
244
- });
245
- describe("sendPKICertificate", () => {
246
- const recordStore = new RecordStore();
247
- const mockTransport = new MockTransport(Buffer.from([0, 0x90, 0x00]));
248
- const transport = createTransportRecorder(mockTransport, recordStore);
249
- beforeEach(() => {
250
- recordStore.clearStore();
251
- });
252
- it("returns a new Challenge value", async () => {
253
- // Given
254
- const descriptor = "010203";
255
- const signature = "0a0b0c0d0e0f1a1b1c1d1e1f";
256
- const signatureLengthInHex = "0c";
257
- const exchange = createExchange(new transport(mockTransport), 3 /* ExchangeTypes.SwapNg */);
258
- // When
259
- await exchange.sendPKICertificate(Buffer.from(descriptor, "hex"), Buffer.from(signature, "hex"));
260
- // Then
261
- const expectCommand = Buffer.from([0xe0, 0x0e, 0 /* RateTypes.Fixed */, 3 /* ExchangeTypes.SwapNg */]).toString("hex");
262
- const certSeparator = "15";
263
- const data = descriptor + certSeparator + signatureLengthInHex + signature;
264
- const dataLengthInHex = "11";
265
- expect(recordStore.queue[0][0]).toBe(expectCommand + dataLengthInHex + data);
266
- });
267
- });
268
- describe("getChallenge", () => {
269
- const recordStore = new RecordStore();
270
- const mockTransport = new MockTransport(Buffer.from([0, 0x90, 0x00]));
271
- const transport = createTransportRecorder(mockTransport, recordStore);
272
- it("returns a new Challenge value", async () => {
273
- // Given
274
- const mockNonceResponse = Buffer.from([0xff, 0xff, 0xff, 0xff]); // Response of 32 bytes
275
- mockTransport.setNewResponse(Buffer.concat([
276
- mockNonceResponse,
277
- Buffer.from([0x90, 0x00]), // StatusCodes.OK
278
- ]));
279
- const exchange = createExchange(new transport(mockTransport), 3 /* ExchangeTypes.SwapNg */);
280
- // When
281
- const result = await exchange.getChallenge();
282
- // Then
283
- const expectCommand = Buffer.from([
284
- 0xe0,
285
- 0x10,
286
- 0 /* RateTypes.Fixed */,
287
- 3 /* ExchangeTypes.SwapNg */,
288
- 0x00, // Data
289
- ]).toString("hex");
290
- expect(recordStore.queue[0][0]).toBe(expectCommand);
291
- expect(result).toEqual(4_294_967_295);
292
- });
293
- });
294
- describe("sendTrustedDescriptor", () => {
295
- const recordStore = new RecordStore();
296
- const mockTransport = new MockTransport(Buffer.from([0, 0x90, 0x00]));
297
- const transport = createTransportRecorder(mockTransport, recordStore);
298
- beforeEach(() => {
299
- recordStore.clearStore();
300
- });
301
- it("sends the expected command", async () => {
302
- // Given
303
- const descriptor = Buffer.from([0x00, 0x0a, 0xff]);
304
- const descriptorLengthInHex = "03";
305
- const exchange = new Exchange(new transport(mockTransport), 0 /* ExchangeTypes.Swap */);
306
- // When
307
- await exchange.sendTrustedDescriptor(descriptor);
308
- // Then
309
- const expectCommand = Buffer.from([0xe0, 0x11, 0 /* RateTypes.Fixed */, 0 /* ExchangeTypes.Swap */]).toString("hex");
310
- expect(recordStore.queue[0][0]).toBe(expectCommand + descriptorLengthInHex + descriptor.toString("hex"));
311
- });
312
- });
313
- //# sourceMappingURL=Exchange.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Exchange.test.js","sourceRoot":"","sources":["../src/Exchange.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=ReturnCode.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReturnCode.test.d.ts","sourceRoot":"","sources":["../src/ReturnCode.test.ts"],"names":[],"mappings":""}
@@ -1,19 +0,0 @@
1
- import { getExchangeErrorMessage } from "./ReturnCode";
2
- describe("getExchageErrorMessage", () => {
3
- it("returns the related message", () => {
4
- // When
5
- const result = getExchangeErrorMessage(0x6a80);
6
- // Then
7
- expect(result).toStrictEqual({
8
- errorMessage: "Incorrect command data",
9
- errorName: "incorrectCommandData",
10
- });
11
- });
12
- it("returns undefined if the value is unknown", () => {
13
- // When
14
- const result = getExchangeErrorMessage(0x6a77);
15
- // Then
16
- expect(result).toStrictEqual({ errorMessage: undefined, errorName: undefined });
17
- });
18
- });
19
- //# sourceMappingURL=ReturnCode.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReturnCode.test.js","sourceRoot":"","sources":["../src/ReturnCode.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,OAAO;QACP,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAE/C,OAAO;QACP,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;YAC3B,YAAY,EAAE,wBAAwB;YACtC,SAAS,EAAE,sBAAsB;SAClC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,OAAO;QACP,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAE/C,OAAO;QACP,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=SellUtils.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SellUtils.test.d.ts","sourceRoot":"","sources":["../src/SellUtils.test.ts"],"names":[],"mappings":""}
@@ -1,30 +0,0 @@
1
- import { decodeSellPayload } from "./SellUtils"; // Ensure the correct path
2
- describe("decodeSellPayload function", () => {
3
- test("should decode NewSellResponse correctly with hex payload", async () => {
4
- const binaryPayload = "0a1467756d6d792e70776e6e407961686f6f2e636f6d12034254431a030789422223324d764a5050765265756e6d767031716b51576d466a345336697741555058323437472a0345555232060a025bc910023a204da2d85ce5e18b5329fc7b2d43590c224e9cea2d43590c224e9cea2d43590c2242083537393034303534";
5
- const decodedPayload = await decodeSellPayload(binaryPayload);
6
- expect(decodedPayload).toBeDefined();
7
- expect(decodedPayload).toHaveProperty("traderEmail", "gummy.pwnn@yahoo.com");
8
- expect(decodedPayload).toHaveProperty("inCurrency", "BTC");
9
- expect(decodedPayload).toHaveProperty("inAmount");
10
- expect(decodedPayload).toHaveProperty("inAddress", "2MvJPPvReunmvp1qkQWmFj4S6iwAUPX247G");
11
- expect(decodedPayload).toHaveProperty("outCurrency", "EUR");
12
- expect(decodedPayload).toHaveProperty("outAmount");
13
- expect(decodedPayload).toHaveProperty("deviceTransactionId");
14
- expect(decodedPayload).toHaveProperty("inExtraId", "57904054");
15
- });
16
- test("should decode NewSellResponse correctly with base64 payload", async () => {
17
- const binaryPayload = "0a1467756d6d792e70776e6e407961686f6f2e636f6d12034254431a030789422223324d764a5050765265756e6d767031716b51576d466a345336697741555058323437472a0345555232060a025bc910023a204da2d85ce5e18b5329fc7b2d43590c224e9cea2d43590c224e9cea2d43590c2242083537393034303534";
18
- const decodedPayload = await decodeSellPayload(binaryPayload);
19
- expect(decodedPayload).toBeDefined();
20
- expect(decodedPayload).toHaveProperty("traderEmail", "gummy.pwnn@yahoo.com");
21
- expect(decodedPayload).toHaveProperty("inCurrency", "BTC");
22
- expect(decodedPayload).toHaveProperty("inAmount");
23
- expect(decodedPayload).toHaveProperty("inAddress", "2MvJPPvReunmvp1qkQWmFj4S6iwAUPX247G");
24
- expect(decodedPayload).toHaveProperty("outCurrency", "EUR");
25
- expect(decodedPayload).toHaveProperty("outAmount");
26
- expect(decodedPayload).toHaveProperty("deviceTransactionId");
27
- expect(decodedPayload).toHaveProperty("inExtraId", "57904054");
28
- });
29
- });
30
- //# sourceMappingURL=SellUtils.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SellUtils.test.js","sourceRoot":"","sources":["../src/SellUtils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC,CAAC,0BAA0B;AAE3E,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,IAAI,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,aAAa,GACjB,8PAA8P,CAAC;QACjQ,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAC9D,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;QAC7E,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,qCAAqC,CAAC,CAAC;QAC1F,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAC5D,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACnD,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAC7D,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,aAAa,GACjB,8PAA8P,CAAC;QACjQ,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAC9D,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;QAC7E,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,qCAAqC,CAAC,CAAC;QAC1F,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAC5D,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACnD,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAC7D,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=SwapUtils.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SwapUtils.test.d.ts","sourceRoot":"","sources":["../src/SwapUtils.test.ts"],"names":[],"mappings":""}
@@ -1,32 +0,0 @@
1
- import { decodePayloadProtobuf } from "./SwapUtils"; // Asegúrate de proporcionar la ruta correcta
2
- describe("decodePayloadProtobuf function", () => {
3
- test("should decode NewTransactionResponse correctly with hex payload", async () => {
4
- const binaryPayload = "0a2a3078393736633339353463356462626633396135393135313064623332643266386363323235323830371a2a3078636361454263423338373661373561623945393639373530353861413735343633373733303239632a2a626331717164796b647738753336796864736c657477737976347865393573333735716a6a7934676b303a0345544842034254434a10000000000000000001118f178fb48000521000000000000000000000000000080e355a0a5552554f4b5149424f42";
5
- const decodedPayload = await decodePayloadProtobuf(binaryPayload);
6
- expect(decodedPayload).toBeDefined();
7
- expect(decodedPayload).toHaveProperty("payinAddress", "0x976c3954c5dbbf39a591510db32d2f8cc2252807");
8
- expect(decodedPayload).toHaveProperty("payoutAddress", "bc1qqdykdw8u36yhdsletwsyv4xe95s375qjjy4gk0");
9
- expect(decodedPayload).toHaveProperty("refundAddress", "0xccaEBcB3876a75ab9E96975058aA75463773029c");
10
- expect(decodedPayload).toHaveProperty("currencyFrom", "ETH");
11
- expect(decodedPayload).toHaveProperty("currencyTo", "BTC");
12
- expect(decodedPayload).toHaveProperty("deviceTransactionId", "URUOKQIBOB");
13
- expect(decodedPayload).toHaveProperty("deviceTransactionIdNg", undefined);
14
- expect(decodedPayload).toHaveProperty("amountToProvider", BigInt(77000000000000000));
15
- expect(decodedPayload).toHaveProperty("amountToWallet", BigInt(527925));
16
- });
17
- test("should decode NewTransactionResponse correctly with base64 payload", async () => {
18
- const binaryPayload = "CioweEZBRDhjMTA4MGNiQTUwRkRlQzY1RTk0ODUzNEE5YjM4ZGQyNTM2NmYaKjB4RkI0MjRBYUJjMmU0Q2EyZjQ0NzUwMDMwMkREOUVjNjRDRjBlMjZDZSoqYmMxcXo0a3EyOGt2cDM3cHU3cGNxZGQ0dGo1ZnNxODdwcGdlMngzcnE5OgNFVEhCA0JUQ0oQAAAAAAAAAAAA0fcjCjnAAFIQAAAAAAAAAAAAAAAAAARNkFoAYiAIHOswy_grHVflNJ6xgxHiVltXXWqEGSRbKgM1hpV3VQ";
19
- const decodedPayload = await decodePayloadProtobuf(binaryPayload);
20
- expect(decodedPayload).toBeDefined();
21
- expect(decodedPayload).toHaveProperty("payinAddress", "0xFAD8c1080cbA50FDeC65E948534A9b38dd25366f");
22
- expect(decodedPayload).toHaveProperty("payoutAddress", "bc1qz4kq28kvp37pu7pcqdd4tj5fsq87ppge2x3rq9");
23
- expect(decodedPayload).toHaveProperty("refundAddress", "0xFB424AaBc2e4Ca2f447500302DD9Ec64CF0e26Ce");
24
- expect(decodedPayload).toHaveProperty("currencyFrom", "ETH");
25
- expect(decodedPayload).toHaveProperty("currencyTo", "BTC");
26
- expect(decodedPayload).toHaveProperty("deviceTransactionId", "");
27
- expect(decodedPayload).toHaveProperty("deviceTransactionIdNg", "081ceb30cbf82b1d57e5349eb18311e2565b575d6a8419245b2a033586957755");
28
- expect(decodedPayload).toHaveProperty("amountToProvider", BigInt(5.91e16));
29
- expect(decodedPayload).toHaveProperty("amountToWallet", BigInt(2.82e5));
30
- });
31
- });
32
- //# sourceMappingURL=SwapUtils.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SwapUtils.test.js","sourceRoot":"","sources":["../src/SwapUtils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC,CAAC,6CAA6C;AAElG,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,IAAI,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,aAAa,GACjB,8XAA8X,CAAC;QACjY,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,aAAa,CAAC,CAAC;QAClE,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CACnC,cAAc,EACd,4CAA4C,CAC7C,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CACnC,eAAe,EACf,4CAA4C,CAC7C,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CACnC,eAAe,EACf,4CAA4C,CAC7C,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAC7D,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;QAC3E,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC;QAC1E,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,kBAAkB,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACrF,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,aAAa,GACjB,gSAAgS,CAAC;QACnS,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,aAAa,CAAC,CAAC;QAClE,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CACnC,cAAc,EACd,4CAA4C,CAC7C,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CACnC,eAAe,EACf,4CAA4C,CAC7C,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CACnC,eAAe,EACf,4CAA4C,CAC7C,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAC7D,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CACnC,uBAAuB,EACvB,kEAAkE,CACnE,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,kBAAkB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}