@ledgerhq/coin-xrp 7.2.0 → 7.3.0-nightly.1

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 (75) hide show
  1. package/.eslintrc.js +1 -0
  2. package/.turbo/turbo-build.log +1 -1
  3. package/CHANGELOG.md +21 -0
  4. package/lib/api/index.d.ts.map +1 -1
  5. package/lib/api/index.integ.test.js +12 -2
  6. package/lib/api/index.integ.test.js.map +1 -1
  7. package/lib/api/index.js +6 -6
  8. package/lib/api/index.js.map +1 -1
  9. package/lib/api/index.test.js +5 -5
  10. package/lib/api/index.test.js.map +1 -1
  11. package/lib/logic/index.d.ts +1 -1
  12. package/lib/logic/index.d.ts.map +1 -1
  13. package/lib/logic/index.js +3 -3
  14. package/lib/logic/index.js.map +1 -1
  15. package/lib/logic/listOperations.js +1 -1
  16. package/lib/logic/listOperations.js.map +1 -1
  17. package/lib/logic/listOperations.test.js +1 -1
  18. package/lib/logic/listOperations.test.js.map +1 -1
  19. package/lib/logic/validateIntent.d.ts +4 -0
  20. package/lib/logic/validateIntent.d.ts.map +1 -0
  21. package/lib/logic/{getTransactionStatus.js → validateIntent.js} +7 -10
  22. package/lib/logic/validateIntent.js.map +1 -0
  23. package/lib/logic/validateIntent.test.d.ts +2 -0
  24. package/lib/logic/validateIntent.test.d.ts.map +1 -0
  25. package/lib/logic/{getTransactionStatus.test.js → validateIntent.test.js} +20 -23
  26. package/lib/logic/validateIntent.test.js.map +1 -0
  27. package/lib/types/model.d.ts +1 -2
  28. package/lib/types/model.d.ts.map +1 -1
  29. package/lib-es/api/index.d.ts.map +1 -1
  30. package/lib-es/api/index.integ.test.js +12 -2
  31. package/lib-es/api/index.integ.test.js.map +1 -1
  32. package/lib-es/api/index.js +7 -7
  33. package/lib-es/api/index.js.map +1 -1
  34. package/lib-es/api/index.test.js +5 -5
  35. package/lib-es/api/index.test.js.map +1 -1
  36. package/lib-es/logic/index.d.ts +1 -1
  37. package/lib-es/logic/index.d.ts.map +1 -1
  38. package/lib-es/logic/index.js +1 -1
  39. package/lib-es/logic/index.js.map +1 -1
  40. package/lib-es/logic/listOperations.js +1 -1
  41. package/lib-es/logic/listOperations.js.map +1 -1
  42. package/lib-es/logic/listOperations.test.js +1 -1
  43. package/lib-es/logic/listOperations.test.js.map +1 -1
  44. package/lib-es/logic/validateIntent.d.ts +4 -0
  45. package/lib-es/logic/validateIntent.d.ts.map +1 -0
  46. package/lib-es/logic/{getTransactionStatus.js → validateIntent.js} +6 -9
  47. package/lib-es/logic/validateIntent.js.map +1 -0
  48. package/lib-es/logic/validateIntent.test.d.ts +2 -0
  49. package/lib-es/logic/validateIntent.test.d.ts.map +1 -0
  50. package/lib-es/logic/{getTransactionStatus.test.js → validateIntent.test.js} +20 -23
  51. package/lib-es/logic/validateIntent.test.js.map +1 -0
  52. package/lib-es/types/model.d.ts +1 -2
  53. package/lib-es/types/model.d.ts.map +1 -1
  54. package/package.json +10 -10
  55. package/src/api/index.integ.test.ts +16 -2
  56. package/src/api/index.test.ts +5 -5
  57. package/src/api/index.ts +8 -6
  58. package/src/logic/index.ts +1 -1
  59. package/src/logic/listOperations.test.ts +1 -1
  60. package/src/logic/listOperations.ts +1 -1
  61. package/src/logic/{getTransactionStatus.test.ts → validateIntent.test.ts} +21 -17
  62. package/src/logic/{getTransactionStatus.ts → validateIntent.ts} +10 -8
  63. package/src/types/model.ts +1 -1
  64. package/lib/logic/getTransactionStatus.d.ts +0 -4
  65. package/lib/logic/getTransactionStatus.d.ts.map +0 -1
  66. package/lib/logic/getTransactionStatus.js.map +0 -1
  67. package/lib/logic/getTransactionStatus.test.d.ts +0 -2
  68. package/lib/logic/getTransactionStatus.test.d.ts.map +0 -1
  69. package/lib/logic/getTransactionStatus.test.js.map +0 -1
  70. package/lib-es/logic/getTransactionStatus.d.ts +0 -4
  71. package/lib-es/logic/getTransactionStatus.d.ts.map +0 -1
  72. package/lib-es/logic/getTransactionStatus.js.map +0 -1
  73. package/lib-es/logic/getTransactionStatus.test.d.ts +0 -2
  74. package/lib-es/logic/getTransactionStatus.test.d.ts.map +0 -1
  75. package/lib-es/logic/getTransactionStatus.test.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateIntent.test.d.ts","sourceRoot":"","sources":["../../src/logic/validateIntent.test.ts"],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import { getTransactionStatus } from "./getTransactionStatus";
1
+ import { validateIntent } from "./validateIntent";
2
2
  import * as utils from "./utils";
3
3
  const mockGetBalance = jest.fn();
4
4
  const mockGetServerInfos = jest.fn();
@@ -18,7 +18,7 @@ const reserveBase = 10000000n; // 10 XRP (drops)
18
18
  const SENDER = "rPSCfmnX3t9jQJG5RNcZtSaP5UhExZDue4";
19
19
  const RECIPIENT = "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe";
20
20
  const RECIPIENT_NEW = "rDKsbvy9uaNpPtvVFraJyNGfjvTw8xivgK";
21
- describe("getTransactionStatus", () => {
21
+ describe("validateIntent", () => {
22
22
  afterEach(() => {
23
23
  jest.clearAllMocks();
24
24
  });
@@ -37,14 +37,15 @@ describe("getTransactionStatus", () => {
37
37
  locked: 0n,
38
38
  },
39
39
  ]);
40
- const result = await getTransactionStatus(
40
+ const result = await validateIntent(
41
41
  // account as any,
42
42
  {
43
43
  sender: SENDER,
44
44
  amount: 20000000n,
45
- fees: 10000n,
46
45
  recipient: RECIPIENT,
47
46
  asset: { unit: { code: "XRP", magnitude: 6 } },
47
+ }, {
48
+ value: 10000n, // fees
48
49
  });
49
50
  expect(result.errors).toEqual({});
50
51
  expect(result.warnings).toEqual({});
@@ -65,14 +66,15 @@ describe("getTransactionStatus", () => {
65
66
  locked: 0n,
66
67
  },
67
68
  ]);
68
- const result = await getTransactionStatus(
69
+ const result = await validateIntent(
69
70
  // account as any,
70
71
  {
71
72
  sender: SENDER,
72
73
  amount: 1000000n,
73
- fees: 200000n, // 20%
74
74
  recipient: RECIPIENT,
75
75
  asset: { unit: { code: "XRP", magnitude: 6 } },
76
+ }, {
77
+ value: 200000n, // fees
76
78
  });
77
79
  expect(result.warnings.feeTooHigh).toBeInstanceOf(Error);
78
80
  expect(result.errors).toEqual({});
@@ -92,7 +94,7 @@ describe("getTransactionStatus", () => {
92
94
  locked: 0n,
93
95
  },
94
96
  ]);
95
- const result = await getTransactionStatus(
97
+ const result = await validateIntent(
96
98
  // account as any,
97
99
  {
98
100
  sender: SENDER,
@@ -117,15 +119,14 @@ describe("getTransactionStatus", () => {
117
119
  locked: 0n,
118
120
  },
119
121
  ]);
120
- const result = await getTransactionStatus(
122
+ const result = await validateIntent(
121
123
  // account as any,
122
124
  {
123
125
  sender: SENDER,
124
126
  amount: 10000000n,
125
- fees: 10000n,
126
127
  recipient: SENDER,
127
128
  asset: { unit: { code: "XRP", magnitude: 6 } },
128
- });
129
+ }, { value: 10000n });
129
130
  expect(result.errors.recipient?.name).toBe("InvalidAddressBecauseDestinationIsAlsoSource");
130
131
  });
131
132
  it("errors if recipient is new and amount is too low", async () => {
@@ -143,15 +144,14 @@ describe("getTransactionStatus", () => {
143
144
  locked: 0n,
144
145
  },
145
146
  ]);
146
- const result = await getTransactionStatus(
147
+ const result = await validateIntent(
147
148
  // account as any,
148
149
  {
149
150
  sender: SENDER,
150
151
  amount: 5000000n,
151
- fees: 10000n,
152
152
  recipient: RECIPIENT_NEW,
153
153
  asset: { unit: { code: "XRP", magnitude: 6 } },
154
- });
154
+ }, { value: 10000n });
155
155
  expect(result.errors.amount?.name).toBe("NotEnoughBalanceBecauseDestinationNotCreated");
156
156
  });
157
157
  it("errors if amount is zero", async () => {
@@ -169,15 +169,14 @@ describe("getTransactionStatus", () => {
169
169
  locked: 0n,
170
170
  },
171
171
  ]);
172
- const result = await getTransactionStatus(
172
+ const result = await validateIntent(
173
173
  // account as any,
174
174
  {
175
175
  sender: SENDER,
176
176
  amount: 0n,
177
- fees: 10000n,
178
177
  recipient: RECIPIENT,
179
178
  asset: { unit: { code: "XRP", magnitude: 6 } },
180
- });
179
+ }, { value: 10000n });
181
180
  expect(result.errors.amount?.name).toBe("AmountRequired");
182
181
  });
183
182
  it("errors if recipient is invalid", async () => {
@@ -195,15 +194,14 @@ describe("getTransactionStatus", () => {
195
194
  locked: 0n,
196
195
  },
197
196
  ]);
198
- const result = await getTransactionStatus(
197
+ const result = await validateIntent(
199
198
  // account as any,
200
199
  {
201
200
  sender: SENDER,
202
201
  asset: { unit: { code: "XRP", magnitude: 6 } },
203
202
  amount: 1000000n,
204
- fees: 10000n,
205
203
  recipient: "not-an-address",
206
- });
204
+ }, { value: 10000n });
207
205
  expect(result.errors.recipient?.name).toBe("InvalidAddress");
208
206
  });
209
207
  it("errors if recipient is missing", async () => {
@@ -221,16 +219,15 @@ describe("getTransactionStatus", () => {
221
219
  locked: 0n,
222
220
  },
223
221
  ]);
224
- const result = await getTransactionStatus(
222
+ const result = await validateIntent(
225
223
  // account as any,
226
224
  {
227
225
  sender: SENDER,
228
226
  asset: { unit: { code: "XRP", magnitude: 6 } },
229
227
  amount: 1000000n,
230
- fees: 10000n,
231
228
  recipient: "",
232
- });
229
+ }, { value: 10000n });
233
230
  expect(result.errors.recipient?.name).toBe("RecipientRequired");
234
231
  });
235
232
  });
236
- //# sourceMappingURL=getTransactionStatus.test.js.map
233
+ //# 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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"}
@@ -16,12 +16,11 @@ export type XrpMemoValueMap = {
16
16
  memos: string[];
17
17
  };
18
18
  export type XrpMapMemo = TypedMapMemo<XrpMemoValueMap>;
19
- type Order = "asc" | "desc";
19
+ export type Order = "asc" | "desc";
20
20
  export type ListOperationsOptions = {
21
21
  limit?: number;
22
22
  token?: string;
23
23
  order?: Order;
24
24
  minHeight?: number;
25
25
  };
26
- export {};
27
26
  //# sourceMappingURL=model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/types/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAElE,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,MAAM,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AACF,MAAM,MAAM,UAAU,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAEvD,KAAK,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAE5B,MAAM,MAAM,qBAAqB,GAAG;IAElC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/types/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAElE,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,MAAM,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AACF,MAAM,MAAM,UAAU,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAEvD,MAAM,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAEnC,MAAM,MAAM,qBAAqB,GAAG;IAElC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/coin-xrp",
3
- "version": "7.2.0",
3
+ "version": "7.3.0-nightly.1",
4
4
  "description": "Ledger XRP Coin integration",
5
5
  "keywords": [
6
6
  "Ledger",
@@ -103,13 +103,13 @@
103
103
  "invariant": "^2.2.4",
104
104
  "ripple-address-codec": "^5.0.0",
105
105
  "ripple-binary-codec": "^1.3.0",
106
- "@ledgerhq/coin-framework": "^6.2.0",
107
- "@ledgerhq/cryptoassets": "^13.26.0",
108
- "@ledgerhq/devices": "8.5.0",
109
- "@ledgerhq/live-network": "^2.0.15",
110
- "@ledgerhq/errors": "^6.24.0",
111
- "@ledgerhq/logs": "^6.13.0",
112
- "@ledgerhq/types-live": "^6.82.0"
106
+ "@ledgerhq/coin-framework": "^6.3.0-nightly.1",
107
+ "@ledgerhq/cryptoassets": "^13.27.0-nightly.0",
108
+ "@ledgerhq/devices": "8.5.1-nightly.0",
109
+ "@ledgerhq/errors": "^6.25.0-nightly.0",
110
+ "@ledgerhq/live-network": "^2.0.16-nightly.1",
111
+ "@ledgerhq/types-live": "^6.83.0-nightly.0",
112
+ "@ledgerhq/logs": "^6.13.0"
113
113
  },
114
114
  "devDependencies": {
115
115
  "@faker-js/faker": "^8.4.1",
@@ -122,12 +122,12 @@
122
122
  "ts-jest": "^29.1.1",
123
123
  "typescript": "^5.4.5",
124
124
  "@ledgerhq/disable-network-setup": "^0.0.0",
125
- "@ledgerhq/types-cryptoassets": "^7.25.0"
125
+ "@ledgerhq/types-cryptoassets": "^7.26.0-nightly.1"
126
126
  },
127
127
  "scripts": {
128
128
  "clean": "rimraf lib lib-es",
129
129
  "build": "tsc && tsc -m esnext --moduleResolution bundler --outDir lib-es",
130
- "coverage": "jest --coverage || true",
130
+ "coverage": "jest --coverage",
131
131
  "prewatch": "pnpm build",
132
132
  "watch": "tsc --watch",
133
133
  "watch:es": "tsc --watch -m esnext --moduleResolution bundler --outDir lib-es",
@@ -33,7 +33,7 @@ describe("Xrp Api", () => {
33
33
  describe("listOperations", () => {
34
34
  it.skip("returns a list regarding address parameter", async () => {
35
35
  // When
36
- const [tx, _] = await api.listOperations(SENDER, { minHeight: 200 });
36
+ const [tx, _] = await api.listOperations(SENDER, { minHeight: 200, order: "asc" });
37
37
 
38
38
  // https://blockexplorer.one/xrp/testnet/address/rh1HPuRVsYYvThxG2Bs1MfjmrVC73S16Fb
39
39
  // as of 2025-03-18, the address has 287 transactions
@@ -51,7 +51,10 @@ describe("Xrp Api", () => {
51
51
  const SENDER_WITH_TRANSACTIONS = "rUxSkt6hQpWxXQwTNRUCYYRQ7BC2yRA3F8";
52
52
 
53
53
  // When
54
- const [ops, _] = await api.listOperations(SENDER_WITH_TRANSACTIONS, { minHeight: 0 });
54
+ const [ops, _] = await api.listOperations(SENDER_WITH_TRANSACTIONS, {
55
+ minHeight: 0,
56
+ order: "asc",
57
+ });
55
58
  // Then
56
59
  const checkSet = new Set(ops.map(elt => elt.tx.hash));
57
60
  expect(checkSet.size).toEqual(ops.length);
@@ -64,6 +67,17 @@ describe("Xrp Api", () => {
64
67
  // so here we are checking that this limit is bypassed
65
68
  expect(ops.length).toBeGreaterThan(200);
66
69
  });
70
+
71
+ it("returns operations from latest, but in asc order", async () => {
72
+ // When
73
+ const [txDesc] = await api.listOperations(SENDER, { minHeight: 0, order: "desc" });
74
+
75
+ // Then
76
+ // Check if the result is sorted in ascending order
77
+ expect(txDesc[0].tx.block.height).toBeGreaterThanOrEqual(
78
+ txDesc[txDesc.length - 1].tx.block.height,
79
+ );
80
+ });
67
81
  });
68
82
 
69
83
  describe("lastBlock", () => {
@@ -106,7 +106,7 @@ describe("listOperations", () => {
106
106
  const txs = givenTxs(BigInt(10), BigInt(10), "src", "dest");
107
107
  // each time it's called it returns a marker, so in theory it would loop forever
108
108
  mockGetTransactions.mockResolvedValue(mockNetworkTxs(txs, defaultMarker));
109
- const [results, _] = await api.listOperations("src", { minHeight: 0 });
109
+ const [results, _] = await api.listOperations("src", { minHeight: 0, order: "asc" });
110
110
 
111
111
  // called 10 times because there is a hard limit of 10 iterations in case something goes wrong
112
112
  // with interpretation of the token (bug / explorer api changed ...)
@@ -122,7 +122,7 @@ describe("listOperations", () => {
122
122
  .mockReturnValueOnce(mockNetworkTxs(txs, defaultMarker))
123
123
  .mockReturnValueOnce(mockNetworkTxs(txs, undefined));
124
124
 
125
- const [results, _] = await api.listOperations("src", { minHeight: 0 });
125
+ const [results, _] = await api.listOperations("src", { minHeight: 0, order: "asc" });
126
126
 
127
127
  // called 2 times because the second time there is no marker
128
128
  expect(mockGetServerInfos).toHaveBeenCalledTimes(2);
@@ -171,7 +171,7 @@ describe("listOperations", () => {
171
171
  mockGetTransactions.mockResolvedValue(mockNetworkTxs([], undefined));
172
172
 
173
173
  // When
174
- const [results, _] = await api.listOperations(address, { minHeight: 0 });
174
+ const [results, _] = await api.listOperations(address, { minHeight: 0, order: "asc" });
175
175
 
176
176
  // Then
177
177
  // called twice because the marker is set the first time
@@ -291,7 +291,7 @@ describe("Testing craftTransaction function", () => {
291
291
  expect(logicCraftTransactionSpy).toHaveBeenCalledWith(
292
292
  expect.any(Object),
293
293
  expect.objectContaining({
294
- fee: customFees,
294
+ fees: customFees,
295
295
  }),
296
296
  undefined,
297
297
  );
@@ -303,7 +303,7 @@ describe("Testing craftTransaction function", () => {
303
303
  expect(logicCraftTransactionSpy).toHaveBeenCalledWith(
304
304
  expect.any(Object),
305
305
  expect.objectContaining({
306
- fee: DEFAULT_ESTIMATED_FEES,
306
+ fees: DEFAULT_ESTIMATED_FEES,
307
307
  }),
308
308
  undefined,
309
309
  );
package/src/api/index.ts CHANGED
@@ -23,10 +23,11 @@ import {
23
23
  getNextValidSequence,
24
24
  lastBlock,
25
25
  listOperations,
26
- getTransactionStatus,
26
+ validateIntent,
27
27
  MemoInput,
28
28
  } from "../logic";
29
29
  import { ListOperationsOptions, XrpMapMemo } from "../types";
30
+ import { Order } from "../types/model";
30
31
 
31
32
  export function createApi(config: XrpConfig): Api<XrpMapMemo> {
32
33
  coinConfig.setCoinConfig(() => ({ ...config, status: { type: "active" } }));
@@ -39,7 +40,7 @@ export function createApi(config: XrpConfig): Api<XrpMapMemo> {
39
40
  getBalance,
40
41
  lastBlock,
41
42
  listOperations: operations,
42
- validateIntent: getTransactionStatus,
43
+ validateIntent,
43
44
  getBlock(_height): Promise<Block> {
44
45
  throw new Error("getBlock is not supported");
45
46
  },
@@ -115,12 +116,13 @@ type PaginationState = {
115
116
  async function operationsFromHeight(
116
117
  address: string,
117
118
  minHeight: number,
119
+ order: Order = "asc",
118
120
  ): Promise<[Operation[], string]> {
119
121
  async function fetchNextPage(state: PaginationState): Promise<PaginationState> {
120
122
  const options: ListOperationsOptions = {
121
123
  limit: state.pageSize,
122
124
  minHeight: state.minHeight,
123
- order: "asc",
125
+ order: order,
124
126
  };
125
127
  if (state.apiNextCursor) {
126
128
  options.token = state.apiNextCursor;
@@ -162,9 +164,9 @@ async function operationsFromHeight(
162
164
 
163
165
  // NOTE: double check
164
166
  async function operations(address: string, pagination: Pagination): Promise<[Operation[], string]> {
165
- const { minHeight, lastPagingToken } = pagination;
167
+ const { minHeight, lastPagingToken, order } = pagination;
166
168
  if (minHeight) {
167
- return await operationsFromHeight(address, minHeight);
169
+ return await operationsFromHeight(address, minHeight, order);
168
170
  }
169
171
  const isInitSync = lastPagingToken === "";
170
172
 
@@ -172,5 +174,5 @@ async function operations(address: string, pagination: Pagination): Promise<[Ope
172
174
  minHeight: isInitSync ? 0 : parseInt(lastPagingToken || "0", 10),
173
175
  };
174
176
  // TODO token must be implemented properly (waiting ack from the design document)
175
- return await operationsFromHeight(address, newPagination.minHeight);
177
+ return await operationsFromHeight(address, newPagination.minHeight, order);
176
178
  }
@@ -7,7 +7,7 @@ export { getBalance } from "./getBalance";
7
7
  export { getAccountInfo } from "./getAccountInfo";
8
8
  export { lastBlock } from "./lastBlock";
9
9
  export { listOperations } from "./listOperations";
10
- export { getTransactionStatus } from "./getTransactionStatus";
10
+ export { validateIntent } from "./validateIntent";
11
11
  export { RIPPLE_EPOCH, cachedRecipientIsNew, getNextValidSequence } from "./utils";
12
12
 
13
13
  export { parseAPIValue } from "./common";
@@ -41,7 +41,7 @@ describe("listOperations", () => {
41
41
  // Given
42
42
  mockNetworkGetTransactions.mockResolvedValue(mockNetworkTxs([]));
43
43
  // When
44
- const [results, token] = await listOperations("any address", { minHeight: 0 });
44
+ const [results, token] = await listOperations("any address", { minHeight: 0, order: "asc" });
45
45
  // Then
46
46
  expect(mockGetServerInfos).toHaveBeenCalledTimes(1);
47
47
  expect(mockNetworkGetTransactions).toHaveBeenCalledTimes(1);
@@ -184,7 +184,7 @@ const convertToCoreOperation =
184
184
  recipients: [Destination],
185
185
  };
186
186
 
187
- if (Object.keys(details).length != 0) {
187
+ if (Object.keys(details).length !== 0) {
188
188
  op = {
189
189
  ...op,
190
190
  details,
@@ -1,4 +1,4 @@
1
- import { getTransactionStatus } from "./getTransactionStatus";
1
+ import { validateIntent } from "./validateIntent";
2
2
  import * as utils from "./utils";
3
3
 
4
4
  const mockGetBalance = jest.fn();
@@ -26,7 +26,7 @@ const SENDER = "rPSCfmnX3t9jQJG5RNcZtSaP5UhExZDue4";
26
26
  const RECIPIENT = "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe";
27
27
  const RECIPIENT_NEW = "rDKsbvy9uaNpPtvVFraJyNGfjvTw8xivgK";
28
28
 
29
- describe("getTransactionStatus", () => {
29
+ describe("validateIntent", () => {
30
30
  afterEach(() => {
31
31
  jest.clearAllMocks();
32
32
  });
@@ -47,15 +47,17 @@ describe("getTransactionStatus", () => {
47
47
  },
48
48
  ]);
49
49
 
50
- const result = await getTransactionStatus(
50
+ const result = await validateIntent(
51
51
  // account as any,
52
52
  {
53
53
  sender: SENDER,
54
54
  amount: 20_000_000n,
55
- fees: 10_000n,
56
55
  recipient: RECIPIENT,
57
56
  asset: { unit: { code: "XRP", magnitude: 6 } },
58
57
  } as any,
58
+ {
59
+ value: 10_000n, // fees
60
+ },
59
61
  );
60
62
 
61
63
  expect(result.errors).toEqual({});
@@ -79,15 +81,17 @@ describe("getTransactionStatus", () => {
79
81
  },
80
82
  ]);
81
83
 
82
- const result = await getTransactionStatus(
84
+ const result = await validateIntent(
83
85
  // account as any,
84
86
  {
85
87
  sender: SENDER,
86
88
  amount: 1_000_000n,
87
- fees: 200_000n, // 20%
88
89
  recipient: RECIPIENT,
89
90
  asset: { unit: { code: "XRP", magnitude: 6 } },
90
91
  } as any,
92
+ {
93
+ value: 200_000n, // fees
94
+ },
91
95
  );
92
96
 
93
97
  expect(result.warnings.feeTooHigh).toBeInstanceOf(Error);
@@ -110,7 +114,7 @@ describe("getTransactionStatus", () => {
110
114
  },
111
115
  ]);
112
116
 
113
- const result = await getTransactionStatus(
117
+ const result = await validateIntent(
114
118
  // account as any,
115
119
  {
116
120
  sender: SENDER,
@@ -139,15 +143,15 @@ describe("getTransactionStatus", () => {
139
143
  },
140
144
  ]);
141
145
 
142
- const result = await getTransactionStatus(
146
+ const result = await validateIntent(
143
147
  // account as any,
144
148
  {
145
149
  sender: SENDER,
146
150
  amount: 10_000_000n,
147
- fees: 10_000n,
148
151
  recipient: SENDER,
149
152
  asset: { unit: { code: "XRP", magnitude: 6 } },
150
153
  } as any,
154
+ { value: 10_000n }, // fees
151
155
  );
152
156
 
153
157
  expect(result.errors.recipient?.name).toBe("InvalidAddressBecauseDestinationIsAlsoSource");
@@ -169,15 +173,15 @@ describe("getTransactionStatus", () => {
169
173
  },
170
174
  ]);
171
175
 
172
- const result = await getTransactionStatus(
176
+ const result = await validateIntent(
173
177
  // account as any,
174
178
  {
175
179
  sender: SENDER,
176
180
  amount: 5_000_000n,
177
- fees: 10_000n,
178
181
  recipient: RECIPIENT_NEW,
179
182
  asset: { unit: { code: "XRP", magnitude: 6 } },
180
183
  } as any,
184
+ { value: 10_000n }, // fees
181
185
  );
182
186
 
183
187
  expect(result.errors.amount?.name).toBe("NotEnoughBalanceBecauseDestinationNotCreated");
@@ -199,15 +203,15 @@ describe("getTransactionStatus", () => {
199
203
  },
200
204
  ]);
201
205
 
202
- const result = await getTransactionStatus(
206
+ const result = await validateIntent(
203
207
  // account as any,
204
208
  {
205
209
  sender: SENDER,
206
210
  amount: 0n,
207
- fees: 10_000n,
208
211
  recipient: RECIPIENT,
209
212
  asset: { unit: { code: "XRP", magnitude: 6 } },
210
213
  } as any,
214
+ { value: 10_000n }, // fees
211
215
  );
212
216
 
213
217
  expect(result.errors.amount?.name).toBe("AmountRequired");
@@ -229,15 +233,15 @@ describe("getTransactionStatus", () => {
229
233
  },
230
234
  ]);
231
235
 
232
- const result = await getTransactionStatus(
236
+ const result = await validateIntent(
233
237
  // account as any,
234
238
  {
235
239
  sender: SENDER,
236
240
  asset: { unit: { code: "XRP", magnitude: 6 } },
237
241
  amount: 1_000_000n,
238
- fees: 10_000n,
239
242
  recipient: "not-an-address",
240
243
  } as any,
244
+ { value: 10_000n }, // fees
241
245
  );
242
246
 
243
247
  expect(result.errors.recipient?.name).toBe("InvalidAddress");
@@ -259,15 +263,15 @@ describe("getTransactionStatus", () => {
259
263
  },
260
264
  ]);
261
265
 
262
- const result = await getTransactionStatus(
266
+ const result = await validateIntent(
263
267
  // account as any,
264
268
  {
265
269
  sender: SENDER,
266
270
  asset: { unit: { code: "XRP", magnitude: 6 } },
267
271
  amount: 1_000_000n,
268
- fees: 10_000n,
269
272
  recipient: "",
270
273
  } as any,
274
+ { value: 10_000n }, // fees
271
275
  );
272
276
 
273
277
  expect(result.errors.recipient?.name).toBe("RecipientRequired");
@@ -1,7 +1,6 @@
1
1
  import {
2
2
  AmountRequired,
3
3
  FeeNotLoaded,
4
- FeeRequired,
5
4
  FeeTooHigh,
6
5
  InvalidAddress,
7
6
  InvalidAddressBecauseDestinationIsAlsoSource,
@@ -14,12 +13,17 @@ import { formatCurrencyUnit } from "@ledgerhq/coin-framework/currencies/index";
14
13
  import { getServerInfos } from "../network";
15
14
  import { cachedRecipientIsNew } from "./utils";
16
15
  import { parseAPIValue } from "./common";
17
- import { TransactionValidation, TransactionIntent } from "@ledgerhq/coin-framework/api/types";
16
+ import {
17
+ TransactionValidation,
18
+ TransactionIntent,
19
+ FeeEstimation,
20
+ } from "@ledgerhq/coin-framework/api/types";
18
21
  import { XrpMapMemo } from "../types";
19
22
  import { getBalance } from "./getBalance";
20
23
 
21
- export const getTransactionStatus = async (
24
+ export const validateIntent = async (
22
25
  transactionIntent: TransactionIntent<XrpMapMemo>,
26
+ customFees?: FeeEstimation,
23
27
  ): Promise<TransactionValidation> => {
24
28
  const errors: Record<string, Error> = {};
25
29
  const warnings: Record<string, Error> = {};
@@ -27,7 +31,7 @@ export const getTransactionStatus = async (
27
31
  const reserveBaseXRP = parseAPIValue(
28
32
  serverInfos.info.validated_ledger.reserve_base_xrp.toString(),
29
33
  );
30
- const estimatedFees = transactionIntent.fees || 0n;
34
+ const estimatedFees = customFees?.value || 0n;
31
35
  const totalSpent = transactionIntent.amount + estimatedFees;
32
36
  const amount = transactionIntent.amount;
33
37
 
@@ -41,10 +45,8 @@ export const getTransactionStatus = async (
41
45
  throw Error("Shouldn't happen");
42
46
  }
43
47
 
44
- if (!transactionIntent.fees) {
48
+ if (!estimatedFees) {
45
49
  errors.fee = new FeeNotLoaded();
46
- } else if (transactionIntent.fees == 0n) {
47
- errors.fee = new FeeRequired();
48
50
  } else if (totalSpent > nativeBalance.value - BigInt(reserveBaseXRP.toString())) {
49
51
  errors.amount = new NotEnoughSpendableBalance("", {
50
52
  minimumAmount: transactionIntent.asset.unit
@@ -81,7 +83,7 @@ export const getTransactionStatus = async (
81
83
  });
82
84
  }
83
85
 
84
- if (!errors.amount && amount == 0n) {
86
+ if (!errors.amount && amount === 0n) {
85
87
  errors.amount = new AmountRequired();
86
88
  }
87
89
 
@@ -21,7 +21,7 @@ export type XrpMemoValueMap = {
21
21
  };
22
22
  export type XrpMapMemo = TypedMapMemo<XrpMemoValueMap>;
23
23
 
24
- type Order = "asc" | "desc";
24
+ export type Order = "asc" | "desc";
25
25
 
26
26
  export type ListOperationsOptions = {
27
27
  // pagination:
@@ -1,4 +0,0 @@
1
- import { TransactionValidation, TransactionIntent } from "@ledgerhq/coin-framework/api/types";
2
- import { XrpMapMemo } from "../types";
3
- export declare const getTransactionStatus: (transactionIntent: TransactionIntent<XrpMapMemo>) => Promise<TransactionValidation>;
4
- //# sourceMappingURL=getTransactionStatus.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getTransactionStatus.d.ts","sourceRoot":"","sources":["../../src/logic/getTransactionStatus.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,eAAO,MAAM,oBAAoB,sBACZ,iBAAiB,CAAC,UAAU,CAAC,KAC/C,OAAO,CAAC,qBAAqB,CAwE/B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"getTransactionStatus.js","sourceRoot":"","sources":["../../src/logic/getTransactionStatus.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=getTransactionStatus.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getTransactionStatus.test.d.ts","sourceRoot":"","sources":["../../src/logic/getTransactionStatus.test.ts"],"names":[],"mappings":""}