@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,266 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const validateIntent_1 = require("./validateIntent");
27
+ const utils = __importStar(require("./utils"));
28
+ const mockGetBalance = jest.fn();
29
+ const mockGetServerInfos = jest.fn();
30
+ jest.mock("./getBalance", () => ({
31
+ getBalance: () => mockGetBalance(),
32
+ }));
33
+ jest.mock("../network", () => ({
34
+ getServerInfos: () => mockGetServerInfos(),
35
+ }));
36
+ jest.spyOn(utils, "cachedRecipientIsNew").mockImplementation(addr => {
37
+ if (addr === RECIPIENT_NEW) {
38
+ return Promise.resolve(true);
39
+ }
40
+ return Promise.resolve(false);
41
+ });
42
+ const reserveBase = 10000000n; // 10 XRP (drops)
43
+ const SENDER = "rPSCfmnX3t9jQJG5RNcZtSaP5UhExZDue4";
44
+ const RECIPIENT = "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe";
45
+ const RECIPIENT_NEW = "rDKsbvy9uaNpPtvVFraJyNGfjvTw8xivgK";
46
+ describe("validateIntent", () => {
47
+ afterEach(() => {
48
+ jest.clearAllMocks();
49
+ });
50
+ it("returns no errors on valid transaction", async () => {
51
+ mockGetServerInfos.mockResolvedValue({
52
+ info: {
53
+ validated_ledger: {
54
+ reserve_base_xrp: reserveBase / 1000000n, // XRP value, not drops
55
+ },
56
+ },
57
+ });
58
+ mockGetBalance.mockResolvedValue([
59
+ {
60
+ value: 50000000n,
61
+ asset: { type: "native" },
62
+ locked: 0n,
63
+ },
64
+ ]);
65
+ const result = await (0, validateIntent_1.validateIntent)(
66
+ // account as any,
67
+ {
68
+ intentType: "transaction",
69
+ sender: SENDER,
70
+ amount: 20000000n,
71
+ recipient: RECIPIENT,
72
+ asset: { unit: { code: "XRP", magnitude: 6 } },
73
+ }, {
74
+ value: 10000n, // fees
75
+ });
76
+ expect(result.errors).toEqual({});
77
+ expect(result.warnings).toEqual({});
78
+ expect(result.totalSpent).toBe(20010000n);
79
+ });
80
+ it("throws FeeTooHigh warning when fee is >10% of amount", async () => {
81
+ mockGetServerInfos.mockResolvedValue({
82
+ info: {
83
+ validated_ledger: {
84
+ reserve_base_xrp: reserveBase / 1000000n,
85
+ },
86
+ },
87
+ });
88
+ mockGetBalance.mockResolvedValue([
89
+ {
90
+ value: 50000000n,
91
+ asset: { type: "native" },
92
+ locked: 0n,
93
+ },
94
+ ]);
95
+ const result = await (0, validateIntent_1.validateIntent)(
96
+ // account as any,
97
+ {
98
+ intentType: "transaction",
99
+ sender: SENDER,
100
+ amount: 1000000n,
101
+ recipient: RECIPIENT,
102
+ asset: { unit: { code: "XRP", magnitude: 6 } },
103
+ }, {
104
+ value: 200000n, // fees
105
+ });
106
+ expect(result.warnings.feeTooHigh).toBeInstanceOf(Error);
107
+ expect(result.errors).toEqual({});
108
+ });
109
+ it("errors when fee is missing", async () => {
110
+ mockGetServerInfos.mockResolvedValue({
111
+ info: {
112
+ validated_ledger: {
113
+ reserve_base_xrp: reserveBase / 1000000n,
114
+ },
115
+ },
116
+ });
117
+ mockGetBalance.mockResolvedValue([
118
+ {
119
+ value: 30000000n,
120
+ asset: { type: "native" },
121
+ locked: 0n,
122
+ },
123
+ ]);
124
+ const result = await (0, validateIntent_1.validateIntent)(
125
+ // account as any,
126
+ {
127
+ intentType: "transaction",
128
+ sender: SENDER,
129
+ amount: 10000000n,
130
+ recipient: RECIPIENT,
131
+ asset: { unit: { code: "XRP", magnitude: 6 } },
132
+ });
133
+ expect(result.errors.fee?.name).toBe("FeeNotLoaded");
134
+ });
135
+ it("errors if recipient is same as sender", async () => {
136
+ mockGetServerInfos.mockResolvedValue({
137
+ info: {
138
+ validated_ledger: {
139
+ reserve_base_xrp: reserveBase / 1000000n,
140
+ },
141
+ },
142
+ });
143
+ mockGetBalance.mockResolvedValue([
144
+ {
145
+ value: 50000000n,
146
+ asset: { type: "native" },
147
+ locked: 0n,
148
+ },
149
+ ]);
150
+ const result = await (0, validateIntent_1.validateIntent)(
151
+ // account as any,
152
+ {
153
+ intentType: "transaction",
154
+ sender: SENDER,
155
+ amount: 10000000n,
156
+ recipient: SENDER,
157
+ asset: { unit: { code: "XRP", magnitude: 6 } },
158
+ }, { value: 10000n });
159
+ expect(result.errors.recipient?.name).toBe("InvalidAddressBecauseDestinationIsAlsoSource");
160
+ });
161
+ it("errors if recipient is new and amount is too low", async () => {
162
+ mockGetServerInfos.mockResolvedValue({
163
+ info: {
164
+ validated_ledger: {
165
+ reserve_base_xrp: reserveBase / 1000000n,
166
+ },
167
+ },
168
+ });
169
+ mockGetBalance.mockResolvedValue([
170
+ {
171
+ value: 50000000n,
172
+ asset: { type: "native" },
173
+ locked: 0n,
174
+ },
175
+ ]);
176
+ const result = await (0, validateIntent_1.validateIntent)(
177
+ // account as any,
178
+ {
179
+ intentType: "transaction",
180
+ sender: SENDER,
181
+ amount: 5000000n,
182
+ recipient: RECIPIENT_NEW,
183
+ asset: { unit: { code: "XRP", magnitude: 6 } },
184
+ }, { value: 10000n });
185
+ expect(result.errors.amount?.name).toBe("NotEnoughBalanceBecauseDestinationNotCreated");
186
+ });
187
+ it("errors if amount is zero", async () => {
188
+ mockGetServerInfos.mockResolvedValue({
189
+ info: {
190
+ validated_ledger: {
191
+ reserve_base_xrp: reserveBase / 1000000n,
192
+ },
193
+ },
194
+ });
195
+ mockGetBalance.mockResolvedValue([
196
+ {
197
+ value: 50000000n,
198
+ asset: { type: "native" },
199
+ locked: 0n,
200
+ },
201
+ ]);
202
+ const result = await (0, validateIntent_1.validateIntent)(
203
+ // account as any,
204
+ {
205
+ intentType: "transaction",
206
+ sender: SENDER,
207
+ amount: 0n,
208
+ recipient: RECIPIENT,
209
+ asset: { unit: { code: "XRP", magnitude: 6 } },
210
+ }, { value: 10000n });
211
+ expect(result.errors.amount?.name).toBe("AmountRequired");
212
+ });
213
+ it("errors if recipient is invalid", async () => {
214
+ mockGetServerInfos.mockResolvedValue({
215
+ info: {
216
+ validated_ledger: {
217
+ reserve_base_xrp: reserveBase / 1000000n,
218
+ },
219
+ },
220
+ });
221
+ mockGetBalance.mockResolvedValue([
222
+ {
223
+ value: 50000000n,
224
+ asset: { type: "native" },
225
+ locked: 0n,
226
+ },
227
+ ]);
228
+ const result = await (0, validateIntent_1.validateIntent)(
229
+ // account as any,
230
+ {
231
+ intentType: "transaction",
232
+ sender: SENDER,
233
+ asset: { unit: { code: "XRP", magnitude: 6 } },
234
+ amount: 1000000n,
235
+ recipient: "not-an-address",
236
+ }, { value: 10000n });
237
+ expect(result.errors.recipient?.name).toBe("InvalidAddress");
238
+ });
239
+ it("errors if recipient is missing", async () => {
240
+ mockGetServerInfos.mockResolvedValue({
241
+ info: {
242
+ validated_ledger: {
243
+ reserve_base_xrp: reserveBase / 1000000n,
244
+ },
245
+ },
246
+ });
247
+ mockGetBalance.mockResolvedValue([
248
+ {
249
+ value: 50000000n,
250
+ asset: { type: "native" },
251
+ locked: 0n,
252
+ },
253
+ ]);
254
+ const result = await (0, validateIntent_1.validateIntent)(
255
+ // account as any,
256
+ {
257
+ intentType: "transaction",
258
+ sender: SENDER,
259
+ asset: { unit: { code: "XRP", magnitude: 6 } },
260
+ amount: 1000000n,
261
+ recipient: "",
262
+ }, { value: 10000n });
263
+ expect(result.errors.recipient?.name).toBe("RecipientRequired");
264
+ });
265
+ });
266
+ //# sourceMappingURL=validateIntent.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateIntent.test.js","sourceRoot":"","sources":["../../src/logic/validateIntent.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/network/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,105 @@
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 live_network_1 = __importDefault(require("@ledgerhq/live-network"));
7
+ const _1 = require(".");
8
+ const config_1 = __importDefault(require("../config"));
9
+ jest.mock("@ledgerhq/live-network");
10
+ describe("getAccountInfo", () => {
11
+ beforeAll(() => {
12
+ config_1.default.setCoinConfig(() => ({
13
+ node: "",
14
+ }));
15
+ });
16
+ it("returns an empty AccountInfo when returns an error 'actNotFound'", async () => {
17
+ // Given
18
+ const emptyAddress = "rNCgVpHinUDjXP2vHDFDMjm7ssBwpveHya";
19
+ live_network_1.default.mockResolvedValue({
20
+ data: {
21
+ result: {
22
+ account: emptyAddress,
23
+ error: "actNotFound",
24
+ error_code: 19,
25
+ error_message: "Account not found.",
26
+ ledger_hash: "F2E6EFD279C3663B62D9DC9977106EC25BA8F89DA551C2D7AB3AE5D75B146258",
27
+ ledger_index: 91772714,
28
+ request: {
29
+ account: emptyAddress,
30
+ command: "account_info",
31
+ ledger_index: "validated",
32
+ },
33
+ status: "error",
34
+ validated: true,
35
+ },
36
+ },
37
+ });
38
+ // When
39
+ const result = await (0, _1.getAccountInfo)(emptyAddress);
40
+ // Then
41
+ expect(result).toEqual({
42
+ isNewAccount: true,
43
+ balance: "0",
44
+ ownerCount: 0,
45
+ sequence: 0,
46
+ });
47
+ });
48
+ it("returns a valid AccountInfo when return a correct AccountInfo", async () => {
49
+ // Given
50
+ const address = "rh1HPuRVsYYvThxG2Bs1MfjmrVC73S16Fb";
51
+ live_network_1.default.mockResolvedValue({
52
+ data: {
53
+ result: {
54
+ account_data: {
55
+ Account: address,
56
+ Balance: "999441667919804",
57
+ Flags: 0,
58
+ LedgerEntryType: "AccountRoot",
59
+ OwnerCount: 0,
60
+ PreviousTxnID: "947F03794C982FE4C7C9FECC4C33C543BB25B82938895EBA8F9B6021CC27A571",
61
+ PreviousTxnLgrSeq: 725208,
62
+ Sequence: 153743,
63
+ index: "BC0DAE09C0BFBC4A49AA94B849266588BFD6E1F554B184B5788AC55D6E07EB95",
64
+ },
65
+ ledger_hash: "93E952B2770233B0ABFBFBBFBC3E2E2159DCABD07FEB5F4C49174027935D9FBB",
66
+ ledger_index: 1908009,
67
+ status: "success",
68
+ validated: true,
69
+ },
70
+ },
71
+ });
72
+ // When
73
+ const result = await (0, _1.getAccountInfo)(address);
74
+ // Then
75
+ expect(result).toEqual({
76
+ isNewAccount: false,
77
+ balance: "999441667919804",
78
+ ownerCount: 0,
79
+ sequence: 153743,
80
+ });
81
+ });
82
+ it("throws an error when backend returns any other error", async () => {
83
+ // Given
84
+ const invalidAddress = "rNCgVpHinUDjXP2vHDFDMjm7ssBwpveHyaa";
85
+ live_network_1.default.mockResolvedValue({
86
+ result: {
87
+ error: "actMalformed",
88
+ error_code: 35,
89
+ error_message: "Account malformed.",
90
+ ledger_hash: "87DE2DD287BCAD6E81720BC6E6361EF01A66EE70A37B6BDF1EFF2E719D9410AE",
91
+ ledger_index: 91772741,
92
+ request: {
93
+ account: invalidAddress,
94
+ command: "account_info",
95
+ ledger_index: "validated",
96
+ },
97
+ status: "error",
98
+ validated: true,
99
+ },
100
+ });
101
+ // When & Then
102
+ await expect((0, _1.getAccountInfo)(invalidAddress)).rejects.toThrow("Cannot read properties of undefined (reading 'result')");
103
+ });
104
+ });
105
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/network/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.integ.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.integ.test.d.ts","sourceRoot":"","sources":["../../src/api/index.integ.test.ts"],"names":[],"mappings":""}