@ledgerhq/coin-xrp 7.6.0-nightly.7 → 7.6.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 (91) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +20 -61
  3. package/lib/api/index.integ.test.d.ts +2 -0
  4. package/lib/api/index.integ.test.d.ts.map +1 -0
  5. package/lib/api/index.integ.test.js +332 -0
  6. package/lib/api/index.integ.test.js.map +1 -0
  7. package/lib/api/index.test.d.ts +2 -0
  8. package/lib/api/index.test.d.ts.map +1 -0
  9. package/lib/api/index.test.js +347 -0
  10. package/lib/api/index.test.js.map +1 -0
  11. package/lib/logic/broadcast.test.d.ts +2 -0
  12. package/lib/logic/broadcast.test.d.ts.map +1 -0
  13. package/lib/logic/broadcast.test.js +46 -0
  14. package/lib/logic/broadcast.test.js.map +1 -0
  15. package/lib/logic/craftRawTransaction.test.d.ts +2 -0
  16. package/lib/logic/craftRawTransaction.test.d.ts.map +1 -0
  17. package/lib/logic/craftRawTransaction.test.js +304 -0
  18. package/lib/logic/craftRawTransaction.test.js.map +1 -0
  19. package/lib/logic/craftTransaction.test.d.ts +2 -0
  20. package/lib/logic/craftTransaction.test.d.ts.map +1 -0
  21. package/lib/logic/craftTransaction.test.js +75 -0
  22. package/lib/logic/craftTransaction.test.js.map +1 -0
  23. package/lib/logic/estimateFees.test.d.ts +2 -0
  24. package/lib/logic/estimateFees.test.d.ts.map +1 -0
  25. package/lib/logic/estimateFees.test.js +51 -0
  26. package/lib/logic/estimateFees.test.js.map +1 -0
  27. package/lib/logic/getBalance.test.d.ts +2 -0
  28. package/lib/logic/getBalance.test.d.ts.map +1 -0
  29. package/lib/logic/getBalance.test.js +63 -0
  30. package/lib/logic/getBalance.test.js.map +1 -0
  31. package/lib/logic/listOperations.test.d.ts +2 -0
  32. package/lib/logic/listOperations.test.d.ts.map +1 -0
  33. package/lib/logic/listOperations.test.js +275 -0
  34. package/lib/logic/listOperations.test.js.map +1 -0
  35. package/lib/logic/utils.test.d.ts +2 -0
  36. package/lib/logic/utils.test.d.ts.map +1 -0
  37. package/lib/logic/utils.test.js +115 -0
  38. package/lib/logic/utils.test.js.map +1 -0
  39. package/lib/logic/validateIntent.test.d.ts +2 -0
  40. package/lib/logic/validateIntent.test.d.ts.map +1 -0
  41. package/lib/logic/validateIntent.test.js +266 -0
  42. package/lib/logic/validateIntent.test.js.map +1 -0
  43. package/lib/network/index.test.d.ts +2 -0
  44. package/lib/network/index.test.d.ts.map +1 -0
  45. package/lib/network/index.test.js +105 -0
  46. package/lib/network/index.test.js.map +1 -0
  47. package/lib-es/api/index.integ.test.d.ts +2 -0
  48. package/lib-es/api/index.integ.test.d.ts.map +1 -0
  49. package/lib-es/api/index.integ.test.js +330 -0
  50. package/lib-es/api/index.integ.test.js.map +1 -0
  51. package/lib-es/api/index.test.d.ts +2 -0
  52. package/lib-es/api/index.test.d.ts.map +1 -0
  53. package/lib-es/api/index.test.js +322 -0
  54. package/lib-es/api/index.test.js.map +1 -0
  55. package/lib-es/logic/broadcast.test.d.ts +2 -0
  56. package/lib-es/logic/broadcast.test.d.ts.map +1 -0
  57. package/lib-es/logic/broadcast.test.js +44 -0
  58. package/lib-es/logic/broadcast.test.js.map +1 -0
  59. package/lib-es/logic/craftRawTransaction.test.d.ts +2 -0
  60. package/lib-es/logic/craftRawTransaction.test.d.ts.map +1 -0
  61. package/lib-es/logic/craftRawTransaction.test.js +302 -0
  62. package/lib-es/logic/craftRawTransaction.test.js.map +1 -0
  63. package/lib-es/logic/craftTransaction.test.d.ts +2 -0
  64. package/lib-es/logic/craftTransaction.test.d.ts.map +1 -0
  65. package/lib-es/logic/craftTransaction.test.js +73 -0
  66. package/lib-es/logic/craftTransaction.test.js.map +1 -0
  67. package/lib-es/logic/estimateFees.test.d.ts +2 -0
  68. package/lib-es/logic/estimateFees.test.d.ts.map +1 -0
  69. package/lib-es/logic/estimateFees.test.js +46 -0
  70. package/lib-es/logic/estimateFees.test.js.map +1 -0
  71. package/lib-es/logic/getBalance.test.d.ts +2 -0
  72. package/lib-es/logic/getBalance.test.d.ts.map +1 -0
  73. package/lib-es/logic/getBalance.test.js +61 -0
  74. package/lib-es/logic/getBalance.test.js.map +1 -0
  75. package/lib-es/logic/listOperations.test.d.ts +2 -0
  76. package/lib-es/logic/listOperations.test.d.ts.map +1 -0
  77. package/lib-es/logic/listOperations.test.js +273 -0
  78. package/lib-es/logic/listOperations.test.js.map +1 -0
  79. package/lib-es/logic/utils.test.d.ts +2 -0
  80. package/lib-es/logic/utils.test.d.ts.map +1 -0
  81. package/lib-es/logic/utils.test.js +113 -0
  82. package/lib-es/logic/utils.test.js.map +1 -0
  83. package/lib-es/logic/validateIntent.test.d.ts +2 -0
  84. package/lib-es/logic/validateIntent.test.d.ts.map +1 -0
  85. package/lib-es/logic/validateIntent.test.js +241 -0
  86. package/lib-es/logic/validateIntent.test.js.map +1 -0
  87. package/lib-es/network/index.test.d.ts +2 -0
  88. package/lib-es/network/index.test.d.ts.map +1 -0
  89. package/lib-es/network/index.test.js +100 -0
  90. package/lib-es/network/index.test.js.map +1 -0
  91. package/package.json +8 -8
@@ -0,0 +1,304 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const craftRawTransaction_1 = require("./craftRawTransaction");
4
+ const ripple_binary_codec_1 = require("ripple-binary-codec");
5
+ // --- Mocks ---
6
+ const mockEstimateFees = jest.fn();
7
+ const mockGetLedgerIndex = jest.fn();
8
+ jest.mock("./estimateFees", () => ({
9
+ estimateFees: () => mockEstimateFees(),
10
+ }));
11
+ jest.mock("../network", () => ({
12
+ getLedgerIndex: () => mockGetLedgerIndex(),
13
+ }));
14
+ // Mock ripple-address-codec globally so ordering logic in sortSignersByNumericAddress uses deterministic data.
15
+ const decodeAccountIDMock = jest.fn((account) => {
16
+ const bytes = new Uint8Array(20).fill(0);
17
+ const ordering = { alpha: 1, beta: 2, gamma: 3, delta: 4 };
18
+ if (ordering[account])
19
+ bytes[19] = ordering[account];
20
+ return bytes;
21
+ });
22
+ jest.mock("ripple-address-codec", () => ({
23
+ decodeAccountID: (addr) => decodeAccountIDMock(addr),
24
+ isValidClassicAddress: () => true,
25
+ }));
26
+ describe("craftRawTransaction", () => {
27
+ const sender = "rPDf6SQStnNmw1knCu1ei7h6BcDAEUUqn5";
28
+ const destination = "rJe1St1G6BWMFmdrrcT7NdD3XT1NxTMEWN";
29
+ // XRPL Ed25519 public keys must be 33 bytes: 0xED prefix + 32 bytes payload (66 hex chars total)
30
+ // Using a deterministic dummy key so ripple-binary-codec encode/decode roundtrips without alteration.
31
+ const publicKey = "ED0123456789ABCDEFFEDCBA98765432100123456789ABCDEFFEDCBA9876543211"; // 66 hex chars
32
+ // Pre-set key used in the test that ensures existing SigningPubKey is preserved.
33
+ const alreadySetPublicKey = "EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"; // 66 hex chars
34
+ beforeEach(() => {
35
+ mockEstimateFees.mockReset();
36
+ mockGetLedgerIndex.mockReset();
37
+ });
38
+ // Helper to safely extract Signers array without relying on type assertions elsewhere
39
+ function getSigners(obj) {
40
+ if (!obj || typeof obj !== "object")
41
+ return undefined;
42
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
43
+ const potential = obj.Signers;
44
+ if (Array.isArray(potential)) {
45
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
46
+ return potential;
47
+ }
48
+ return undefined;
49
+ }
50
+ it("fills missing Fee, Sequence, LastLedgerSequence & SigningPubKey for a standard payment", async () => {
51
+ // Given: base transaction missing common autofill fields
52
+ const baseTx = {
53
+ TransactionType: "Payment",
54
+ Account: sender,
55
+ Amount: "1000",
56
+ Destination: destination,
57
+ };
58
+ const serialized = (0, ripple_binary_codec_1.encode)(baseTx);
59
+ mockEstimateFees.mockResolvedValue({ fees: BigInt(123) });
60
+ mockGetLedgerIndex.mockResolvedValue(1000);
61
+ // When
62
+ const result = await (0, craftRawTransaction_1.craftRawTransaction)(serialized, sender, publicKey, 10);
63
+ // Then
64
+ const decoded = (0, ripple_binary_codec_1.decode)(result.transaction);
65
+ expect(decoded).toMatchObject({
66
+ TransactionType: "Payment",
67
+ Account: sender,
68
+ Amount: "1000",
69
+ Destination: destination,
70
+ Fee: "123",
71
+ Sequence: 10,
72
+ LastLedgerSequence: 1020, // 1000 + 20 offset
73
+ SigningPubKey: publicKey,
74
+ });
75
+ expect(mockEstimateFees).toHaveBeenCalledTimes(1);
76
+ expect(mockGetLedgerIndex).toHaveBeenCalledTimes(1);
77
+ });
78
+ it("autofills only missing Fee & LastLedgerSequence when Sequence provided", async () => {
79
+ // Given: Sequence present; Fee, LastLedgerSequence & SigningPubKey missing
80
+ const baseTx = {
81
+ TransactionType: "Payment",
82
+ Account: sender,
83
+ Amount: "1234",
84
+ Destination: destination,
85
+ Sequence: 77,
86
+ };
87
+ const serialized = (0, ripple_binary_codec_1.encode)(baseTx);
88
+ mockEstimateFees.mockResolvedValue({ fees: BigInt(456) });
89
+ mockGetLedgerIndex.mockResolvedValue(2000);
90
+ // When: pass a different sequence param to ensure existing Sequence is not overwritten
91
+ const result = await (0, craftRawTransaction_1.craftRawTransaction)(serialized, sender, publicKey, 999);
92
+ // Then
93
+ const decoded = (0, ripple_binary_codec_1.decode)(result.transaction);
94
+ expect(decoded.Sequence).toBe(77); // preserved
95
+ expect(decoded.Fee).toBe("456"); // autofilled
96
+ expect(decoded.LastLedgerSequence).toBe(2020); // 2000 + 20
97
+ expect(decoded.SigningPubKey).toBe(publicKey); // autofilled
98
+ expect(mockEstimateFees).toHaveBeenCalledTimes(1);
99
+ expect(mockGetLedgerIndex).toHaveBeenCalledTimes(1);
100
+ });
101
+ it("does not overwrite provided Fee / Sequence / LastLedgerSequence / SigningPubKey", async () => {
102
+ // Given
103
+ const baseTx = {
104
+ TransactionType: "Payment",
105
+ Account: sender,
106
+ Amount: "2500",
107
+ Destination: destination,
108
+ Fee: "999",
109
+ Sequence: 42,
110
+ LastLedgerSequence: 5000,
111
+ SigningPubKey: alreadySetPublicKey,
112
+ };
113
+ const serialized = (0, ripple_binary_codec_1.encode)(baseTx);
114
+ // Mocks would be used if fields missing; ensure they are ignored
115
+ mockEstimateFees.mockResolvedValue({ fees: BigInt(1) });
116
+ mockGetLedgerIndex.mockResolvedValue(1);
117
+ // When
118
+ const result = await (0, craftRawTransaction_1.craftRawTransaction)(serialized, sender, publicKey, 999);
119
+ // Then
120
+ const decoded = (0, ripple_binary_codec_1.decode)(result.transaction);
121
+ expect(decoded.Fee).toBe("999");
122
+ expect(decoded.Sequence).toBe(42);
123
+ expect(decoded.LastLedgerSequence).toBe(5000);
124
+ expect(decoded.SigningPubKey).toBe(alreadySetPublicKey);
125
+ expect(mockEstimateFees).not.toHaveBeenCalled();
126
+ expect(mockGetLedgerIndex).not.toHaveBeenCalled();
127
+ });
128
+ it("sets Sequence to 0 when TicketSequence is provided and Sequence missing", async () => {
129
+ // Given
130
+ const baseTx = {
131
+ TransactionType: "Payment",
132
+ Account: sender,
133
+ Amount: "1",
134
+ Destination: destination,
135
+ TicketSequence: 555,
136
+ Fee: "10",
137
+ // Sequence intentionally omitted
138
+ };
139
+ const serialized = (0, ripple_binary_codec_1.encode)(baseTx);
140
+ mockGetLedgerIndex.mockResolvedValue(10);
141
+ // When
142
+ const result = await (0, craftRawTransaction_1.craftRawTransaction)(serialized, sender, publicKey, 77);
143
+ // Then
144
+ const decoded = (0, ripple_binary_codec_1.decode)(result.transaction);
145
+ expect(decoded.TicketSequence).toBe(555);
146
+ expect(decoded.Sequence).toBe(0);
147
+ expect(decoded.LastLedgerSequence).toBe(30); // 10 + 20
148
+ });
149
+ it("forces Sequence to 0 when TicketSequence present even if non-zero Sequence provided", async () => {
150
+ // Given: TicketSequence provided AND a non-zero Sequence already set (we enforce spec by overriding)
151
+ const baseTx = {
152
+ TransactionType: "Payment",
153
+ Account: sender,
154
+ Amount: "123",
155
+ Destination: destination,
156
+ TicketSequence: 777,
157
+ Sequence: 55, // non-zero pre-set
158
+ Fee: "10",
159
+ };
160
+ const serialized = (0, ripple_binary_codec_1.encode)(baseTx);
161
+ mockGetLedgerIndex.mockResolvedValue(111);
162
+ // When
163
+ const result = await (0, craftRawTransaction_1.craftRawTransaction)(serialized, sender, publicKey, 9999);
164
+ // Then
165
+ const decoded = (0, ripple_binary_codec_1.decode)(result.transaction);
166
+ expect(decoded.Sequence).toBe(0); // overridden to comply with spec
167
+ expect(decoded.TicketSequence).toBe(777);
168
+ expect(decoded.LastLedgerSequence).toBe(131); // 111 + 20
169
+ });
170
+ it("throws when sender does not match Account for standard transaction", async () => {
171
+ // Given
172
+ const baseTx = {
173
+ TransactionType: "Payment",
174
+ Account: sender,
175
+ Amount: "10",
176
+ Destination: destination,
177
+ };
178
+ const serialized = (0, ripple_binary_codec_1.encode)(baseTx);
179
+ // When & Then
180
+ await expect((0, craftRawTransaction_1.craftRawTransaction)(serialized, "rOTHERADDRESS", publicKey, 1)).rejects.toThrow("Sender address does not match the transaction account");
181
+ });
182
+ describe("multi-sign", () => {
183
+ it("adds a Signers array when absent (single existing signer)", async () => {
184
+ // Given: multi-sign transaction (SigningPubKey empty) with required Fee & Sequence
185
+ const multi = {
186
+ TransactionType: "Payment",
187
+ Account: sender, // Account can differ from signer in multi-sign, we keep same for simplicity
188
+ Amount: "100",
189
+ Destination: destination,
190
+ SigningPubKey: "", // signals multi-sign
191
+ Fee: "500",
192
+ Sequence: 9,
193
+ };
194
+ const serialized = (0, ripple_binary_codec_1.encode)(multi);
195
+ // When
196
+ const result = await (0, craftRawTransaction_1.craftRawTransaction)(serialized, sender, publicKey, 9);
197
+ // Then
198
+ const decoded = (0, ripple_binary_codec_1.decode)(result.transaction);
199
+ const signers = getSigners(decoded);
200
+ expect(signers?.length).toBe(1);
201
+ if (signers && signers[0]) {
202
+ expect(signers[0]).toMatchObject({
203
+ Signer: { Account: sender, SigningPubKey: publicKey, TxnSignature: "" },
204
+ });
205
+ }
206
+ // No autofill of LastLedgerSequence in multi-sign path (not required for this assertion)
207
+ });
208
+ it("does not add LastLedgerSequence for multi-sign when absent", async () => {
209
+ // Given: multi-sign tx w/o LastLedgerSequence
210
+ const multi = {
211
+ TransactionType: "Payment",
212
+ Account: sender,
213
+ Amount: "50",
214
+ Destination: destination,
215
+ SigningPubKey: "", // multi-sign
216
+ Fee: "12",
217
+ Sequence: 2,
218
+ };
219
+ const serialized = (0, ripple_binary_codec_1.encode)(multi);
220
+ mockGetLedgerIndex.mockResolvedValue(500); // should NOT be used
221
+ // When
222
+ const result = await (0, craftRawTransaction_1.craftRawTransaction)(serialized, sender, publicKey, 2);
223
+ // Then
224
+ const decoded = (0, ripple_binary_codec_1.decode)(result.transaction);
225
+ expect(decoded.LastLedgerSequence).toBeUndefined();
226
+ });
227
+ it("appends signer and sorts existing Signers numerically", async () => {
228
+ // Given existing unsorted signers
229
+ const existing = [
230
+ {
231
+ Signer: {
232
+ Account: "rPDf6SQStnNmw1knCu1ei7h6BcDAEUUqn5",
233
+ SigningPubKey: "K3",
234
+ TxnSignature: "",
235
+ },
236
+ },
237
+ {
238
+ Signer: {
239
+ Account: "rJe1St1G6BWMFmdrrcT7NdD3XT1NxTMEWN",
240
+ SigningPubKey: "K1",
241
+ TxnSignature: "",
242
+ },
243
+ },
244
+ {
245
+ Signer: {
246
+ Account: "rDKsbvy9uaNpPtvVFraJyNGfjvTw8xivgK",
247
+ SigningPubKey: "K4",
248
+ TxnSignature: "",
249
+ },
250
+ },
251
+ ];
252
+ const multi = {
253
+ TransactionType: "Payment",
254
+ Account: sender,
255
+ Amount: "200",
256
+ Destination: destination,
257
+ SigningPubKey: "",
258
+ Fee: "700",
259
+ Sequence: 3,
260
+ Signers: existing,
261
+ };
262
+ const serialized = (0, ripple_binary_codec_1.encode)(multi);
263
+ // When
264
+ const result = await (0, craftRawTransaction_1.craftRawTransaction)(serialized, "r94uo44ukDHWVjYDJLZJYwDdZjo1F2QYgq", publicKey, 3);
265
+ // Then
266
+ const decoded = (0, ripple_binary_codec_1.decode)(result.transaction);
267
+ const signers = getSigners(decoded) ?? [];
268
+ const accounts = signers.map(s => s.Signer.Account);
269
+ expect(accounts).toEqual([
270
+ "rPDf6SQStnNmw1knCu1ei7h6BcDAEUUqn5",
271
+ "rJe1St1G6BWMFmdrrcT7NdD3XT1NxTMEWN",
272
+ "rDKsbvy9uaNpPtvVFraJyNGfjvTw8xivgK",
273
+ "r94uo44ukDHWVjYDJLZJYwDdZjo1F2QYgq",
274
+ ]);
275
+ const betaEntry = signers.find(s => s.Signer.Account === "r94uo44ukDHWVjYDJLZJYwDdZjo1F2QYgq");
276
+ expect(betaEntry?.Signer.SigningPubKey).toBe(publicKey);
277
+ });
278
+ it("throws when Fee missing for multi-sign", async () => {
279
+ const multi = {
280
+ TransactionType: "Payment",
281
+ Account: sender,
282
+ Amount: "10",
283
+ Destination: destination,
284
+ SigningPubKey: "",
285
+ Sequence: 1,
286
+ };
287
+ const serialized = (0, ripple_binary_codec_1.encode)(multi);
288
+ await expect((0, craftRawTransaction_1.craftRawTransaction)(serialized, sender, publicKey, 1)).rejects.toThrow("Fee is required for multi sign transactions");
289
+ });
290
+ it("throws when Sequence missing for multi-sign", async () => {
291
+ const multi = {
292
+ TransactionType: "Payment",
293
+ Account: sender,
294
+ Amount: "10",
295
+ Destination: destination,
296
+ SigningPubKey: "",
297
+ Fee: "1",
298
+ };
299
+ const serialized = (0, ripple_binary_codec_1.encode)(multi);
300
+ await expect((0, craftRawTransaction_1.craftRawTransaction)(serialized, sender, publicKey, 1)).rejects.toThrow("Sequence is required for multi sign transactions");
301
+ });
302
+ });
303
+ });
304
+ //# sourceMappingURL=craftRawTransaction.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craftRawTransaction.test.js","sourceRoot":"","sources":["../../src/logic/craftRawTransaction.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=craftTransaction.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craftTransaction.test.d.ts","sourceRoot":"","sources":["../../src/logic/craftTransaction.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const craftTransaction_1 = require("./craftTransaction");
4
+ const ripple_binary_codec_1 = require("ripple-binary-codec");
5
+ jest.mock("../network", () => ({
6
+ getLedgerIndex: () => 1,
7
+ }));
8
+ describe("craftTransaction", () => {
9
+ it("returns a valid transaction object when no pubkey is provided", async () => {
10
+ // Given
11
+ const account = {
12
+ address: "rPDf6SQStnNmw1knCu1ei7h6BcDAEUUqn5",
13
+ nextSequenceNumber: 2,
14
+ };
15
+ const transaction = {
16
+ recipient: "rJe1St1G6BWMFmdrrcT7NdD3XT1NxTMEWN",
17
+ amount: BigInt(100_000_000),
18
+ fees: BigInt(100),
19
+ };
20
+ // When
21
+ const result = await (0, craftTransaction_1.craftTransaction)(account, transaction);
22
+ // Then
23
+ expect(result).toBeDefined();
24
+ expect(result.xrplTransaction).toEqual({
25
+ TransactionType: "Payment",
26
+ Account: "rPDf6SQStnNmw1knCu1ei7h6BcDAEUUqn5",
27
+ Amount: "100000000",
28
+ Destination: "rJe1St1G6BWMFmdrrcT7NdD3XT1NxTMEWN",
29
+ DestinationTag: undefined,
30
+ Fee: "100",
31
+ Flags: 2147483648,
32
+ Sequence: 2,
33
+ LastLedgerSequence: 21,
34
+ });
35
+ expect(result.serializedTransaction).toBeDefined();
36
+ });
37
+ it("returns a valid transaction object when pubky is provided", async () => {
38
+ // Given
39
+ const account = {
40
+ address: "rPDf6SQStnNmw1knCu1ei7h6BcDAEUUqn5",
41
+ nextSequenceNumber: 2,
42
+ };
43
+ const transaction = {
44
+ recipient: "rJe1St1G6BWMFmdrrcT7NdD3XT1NxTMEWN",
45
+ amount: BigInt(100_000_000),
46
+ fees: BigInt(100),
47
+ memos: [{ data: "01", format: "02", type: "03" }],
48
+ destinationTag: 123,
49
+ };
50
+ const pubKey = "public_key";
51
+ // When
52
+ const result = await (0, craftTransaction_1.craftTransaction)(account, transaction, pubKey);
53
+ // Then
54
+ expect(result).toBeDefined();
55
+ expect(result.xrplTransaction).toEqual({
56
+ TransactionType: "Payment",
57
+ Account: "rPDf6SQStnNmw1knCu1ei7h6BcDAEUUqn5",
58
+ Amount: "100000000",
59
+ Destination: "rJe1St1G6BWMFmdrrcT7NdD3XT1NxTMEWN",
60
+ DestinationTag: 123,
61
+ Fee: "100",
62
+ Flags: 2147483648,
63
+ Sequence: 2,
64
+ LastLedgerSequence: 21,
65
+ Memos: [{ Memo: { MemoData: "01", MemoFormat: "02", MemoType: "03" } }],
66
+ });
67
+ expect(result.serializedTransaction).toBeDefined();
68
+ const binDecodedTx = (0, ripple_binary_codec_1.decode)(result.serializedTransaction);
69
+ expect(binDecodedTx.Memos).toEqual([
70
+ { Memo: { MemoData: "01", MemoFormat: "02", MemoType: "03" } },
71
+ ]);
72
+ expect(binDecodedTx.DestinationTag).toEqual(123);
73
+ });
74
+ });
75
+ //# sourceMappingURL=craftTransaction.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craftTransaction.test.js","sourceRoot":"","sources":["../../src/logic/craftTransaction.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=estimateFees.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimateFees.test.d.ts","sourceRoot":"","sources":["../../src/logic/estimateFees.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
7
+ const estimateFees_1 = require("./estimateFees");
8
+ const mockGetServerInfos = jest.fn();
9
+ jest.mock("../network", () => ({
10
+ getServerInfos: () => mockGetServerInfos(),
11
+ }));
12
+ describe("estimateFees", () => {
13
+ afterEach(() => {
14
+ mockGetServerInfos.mockClear();
15
+ });
16
+ it("returns the default Fees", async () => {
17
+ // Given
18
+ mockGetServerInfos.mockResolvedValue({
19
+ info: {
20
+ validated_ledger: {
21
+ base_fee_xrp: 23,
22
+ },
23
+ },
24
+ });
25
+ // When
26
+ const result = await (0, estimateFees_1.estimateFees)();
27
+ // Then
28
+ expect(mockGetServerInfos).toHaveBeenCalledTimes(1);
29
+ expect(result.networkInfo).toEqual({
30
+ baseReserve: (0, bignumber_js_1.default)(0),
31
+ family: "xrp",
32
+ serverFee: (0, bignumber_js_1.default)(23_000_000),
33
+ });
34
+ expect(result.fees).toEqual(BigInt(23_000_000));
35
+ });
36
+ it("returns the fees from the NetworkInfo provided", async () => {
37
+ // Given
38
+ const networkInfo = {
39
+ family: "xrp",
40
+ serverFee: (0, bignumber_js_1.default)(78_000_000),
41
+ baseReserve: (0, bignumber_js_1.default)("45"),
42
+ };
43
+ // When
44
+ const result = await (0, estimateFees_1.estimateFees)(networkInfo);
45
+ // Then
46
+ expect(mockGetServerInfos).toHaveBeenCalledTimes(0);
47
+ expect(result.networkInfo).toEqual(networkInfo);
48
+ expect(result.fees).toEqual(BigInt(78_000_000));
49
+ });
50
+ });
51
+ //# sourceMappingURL=estimateFees.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimateFees.test.js","sourceRoot":"","sources":["../../src/logic/estimateFees.test.ts"],"names":[],"mappings":";;;;;AAAA,gEAAqC;AAErC,iDAA8C;AAE9C,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACrC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7B,cAAc,EAAE,GAAG,EAAE,CAAC,kBAAkB,EAAE;CAC3C,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,SAAS,CAAC,GAAG,EAAE;QACb,kBAAkB,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,QAAQ;QACR,kBAAkB,CAAC,iBAAiB,CAAC;YACnC,IAAI,EAAE;gBACJ,gBAAgB,EAAE;oBAChB,YAAY,EAAE,EAAE;iBACjB;aACF;SACF,CAAC,CAAC;QAEH,OAAO;QACP,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAY,GAAE,CAAC;QAEpC,OAAO;QACP,MAAM,CAAC,kBAAkB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;YACjC,WAAW,EAAE,IAAA,sBAAS,EAAC,CAAC,CAAC;YACzB,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,IAAA,sBAAS,EAAC,UAAU,CAAC;SACjC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,QAAQ;QACR,MAAM,WAAW,GAAG;YAClB,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,IAAA,sBAAS,EAAC,UAAU,CAAC;YAChC,WAAW,EAAE,IAAA,sBAAS,EAAC,IAAI,CAAC;SACP,CAAC;QAExB,OAAO;QACP,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAY,EAAC,WAAW,CAAC,CAAC;QAE/C,OAAO;QACP,MAAM,CAAC,kBAAkB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getBalance.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getBalance.test.d.ts","sourceRoot":"","sources":["../../src/logic/getBalance.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const faker_1 = require("@faker-js/faker");
4
+ const getBalance_1 = require("./getBalance");
5
+ const address = "ACCOUNT_ADDRESS";
6
+ const mockGetAccountInfo = jest.fn();
7
+ const mockGetServerInfos = jest.fn();
8
+ jest.mock("../network", () => ({
9
+ getAccountInfo: (address) => mockGetAccountInfo(address),
10
+ getServerInfos: () => mockGetServerInfos(),
11
+ }));
12
+ describe("getBalance", () => {
13
+ afterEach(() => {
14
+ mockGetAccountInfo.mockClear();
15
+ mockGetServerInfos.mockClear();
16
+ });
17
+ it("returns the balance from Explorer", async () => {
18
+ mockGetServerInfos.mockResolvedValue({
19
+ info: {
20
+ validated_ledger: {
21
+ reserve_base_xrp: 23,
22
+ reserve_inc_xrp: 5,
23
+ },
24
+ },
25
+ });
26
+ // Given
27
+ const balance = faker_1.faker.number.bigInt(100_000_000);
28
+ mockGetAccountInfo.mockResolvedValue({
29
+ balance: balance.toString(),
30
+ ownerCount: 0,
31
+ });
32
+ // When
33
+ const result = await (0, getBalance_1.getBalance)(address);
34
+ // Then
35
+ expect(mockGetAccountInfo).toHaveBeenCalledTimes(1);
36
+ expect(mockGetServerInfos).toHaveBeenCalledTimes(1);
37
+ expect(mockGetAccountInfo.mock.lastCall[0]).toEqual(address);
38
+ expect(result).toEqual([{ value: balance, asset: { type: "native" }, locked: 23000000n }]);
39
+ });
40
+ it("returns from account with empty balance", async () => {
41
+ mockGetServerInfos.mockResolvedValue({
42
+ info: {
43
+ validated_ledger: {
44
+ reserve_base_xrp: 23,
45
+ reserve_inc_xrp: 5,
46
+ },
47
+ },
48
+ });
49
+ // Given
50
+ mockGetAccountInfo.mockResolvedValue({
51
+ balance: "0",
52
+ ownerCount: 0,
53
+ });
54
+ // When
55
+ const result = await (0, getBalance_1.getBalance)(address);
56
+ // Then
57
+ expect(mockGetAccountInfo).toHaveBeenCalledTimes(1);
58
+ expect(mockGetServerInfos).toHaveBeenCalledTimes(1);
59
+ expect(mockGetAccountInfo.mock.lastCall[0]).toEqual(address);
60
+ expect(result).toEqual([{ value: 0n, asset: { type: "native" }, locked: 0n }]);
61
+ });
62
+ });
63
+ //# sourceMappingURL=getBalance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getBalance.test.js","sourceRoot":"","sources":["../../src/logic/getBalance.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=listOperations.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listOperations.test.d.ts","sourceRoot":"","sources":["../../src/logic/listOperations.test.ts"],"names":[],"mappings":""}