@ledgerhq/coin-xrp 6.2.0-next.0 → 6.2.0-next.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 (190) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.unimportedrc.json +1 -3
  3. package/CHANGELOG.md +11 -0
  4. package/lib/api/index.d.ts +11 -2
  5. package/lib/api/index.d.ts.map +1 -1
  6. package/lib/api/index.integ.test.js +7 -24
  7. package/lib/api/index.integ.test.js.map +1 -1
  8. package/lib/api/index.js +5 -15
  9. package/lib/api/index.js.map +1 -1
  10. package/lib/api/index.test.js +9 -18
  11. package/lib/api/index.test.js.map +1 -1
  12. package/lib/bridge/broadcast.d.ts +4 -0
  13. package/lib/bridge/broadcast.d.ts.map +1 -0
  14. package/lib/bridge/broadcast.js +11 -0
  15. package/lib/bridge/broadcast.js.map +1 -0
  16. package/lib/bridge/createTransaction.d.ts +4 -0
  17. package/lib/bridge/createTransaction.d.ts.map +1 -0
  18. package/lib/bridge/createTransaction.js +18 -0
  19. package/lib/bridge/createTransaction.js.map +1 -0
  20. package/lib/bridge/estimateMaxSpendable.d.ts +4 -0
  21. package/lib/bridge/estimateMaxSpendable.d.ts.map +1 -0
  22. package/lib/bridge/estimateMaxSpendable.js +26 -0
  23. package/lib/bridge/estimateMaxSpendable.js.map +1 -0
  24. package/lib/bridge/getTransactionStatus.d.ts +4 -0
  25. package/lib/bridge/getTransactionStatus.d.ts.map +1 -0
  26. package/lib/{logic → bridge}/getTransactionStatus.js +19 -15
  27. package/lib/bridge/getTransactionStatus.js.map +1 -0
  28. package/lib/bridge/index.d.ts +11 -0
  29. package/lib/bridge/index.d.ts.map +1 -0
  30. package/lib/bridge/index.js +47 -0
  31. package/lib/bridge/index.js.map +1 -0
  32. package/lib/bridge/prepareTransaction.d.ts +4 -0
  33. package/lib/bridge/prepareTransaction.d.ts.map +1 -0
  34. package/lib/bridge/prepareTransaction.js +14 -0
  35. package/lib/bridge/prepareTransaction.js.map +1 -0
  36. package/lib/bridge/signOperation.d.ts +5 -0
  37. package/lib/bridge/signOperation.d.ts.map +1 -0
  38. package/lib/bridge/signOperation.js +76 -0
  39. package/lib/bridge/signOperation.js.map +1 -0
  40. package/lib/bridge/synchronization.d.ts +3 -0
  41. package/lib/bridge/synchronization.d.ts.map +1 -0
  42. package/lib/bridge/synchronization.js +85 -0
  43. package/lib/bridge/synchronization.js.map +1 -0
  44. package/lib/bridge/synchronization.test.d.ts +2 -0
  45. package/lib/bridge/synchronization.test.d.ts.map +1 -0
  46. package/lib/bridge/synchronization.test.js +140 -0
  47. package/lib/bridge/synchronization.test.js.map +1 -0
  48. package/lib/{transaction.d.ts → bridge/transaction.d.ts} +1 -1
  49. package/lib/bridge/transaction.d.ts.map +1 -0
  50. package/lib/bridge/transaction.js.map +1 -0
  51. package/lib/index.d.ts +1 -0
  52. package/lib/index.d.ts.map +1 -1
  53. package/lib/index.js +3 -0
  54. package/lib/index.js.map +1 -1
  55. package/lib/logic/combine.d.ts.map +1 -1
  56. package/lib/logic/combine.js +3 -8
  57. package/lib/logic/combine.js.map +1 -1
  58. package/lib/logic/getBalance.d.ts.map +1 -1
  59. package/lib/logic/getBalance.js +1 -13
  60. package/lib/logic/getBalance.js.map +1 -1
  61. package/lib/logic/getBalance.test.js +1 -14
  62. package/lib/logic/getBalance.test.js.map +1 -1
  63. package/lib/logic/index.d.ts +1 -2
  64. package/lib/logic/index.d.ts.map +1 -1
  65. package/lib/logic/index.js +2 -3
  66. package/lib/logic/index.js.map +1 -1
  67. package/lib/logic/utils.d.ts +1 -0
  68. package/lib/logic/utils.d.ts.map +1 -1
  69. package/lib/logic/utils.js +10 -14
  70. package/lib/logic/utils.js.map +1 -1
  71. package/lib/test/bridgeDatasetTest.d.ts.map +1 -1
  72. package/lib/test/bridgeDatasetTest.js +7 -7
  73. package/lib/test/bridgeDatasetTest.js.map +1 -1
  74. package/lib/types/model.d.ts +0 -7
  75. package/lib/types/model.d.ts.map +1 -1
  76. package/lib-es/api/index.d.ts +11 -2
  77. package/lib-es/api/index.d.ts.map +1 -1
  78. package/lib-es/api/index.integ.test.js +7 -24
  79. package/lib-es/api/index.integ.test.js.map +1 -1
  80. package/lib-es/api/index.js +6 -16
  81. package/lib-es/api/index.js.map +1 -1
  82. package/lib-es/api/index.test.js +9 -18
  83. package/lib-es/api/index.test.js.map +1 -1
  84. package/lib-es/bridge/broadcast.d.ts +4 -0
  85. package/lib-es/bridge/broadcast.d.ts.map +1 -0
  86. package/lib-es/bridge/broadcast.js +7 -0
  87. package/lib-es/bridge/broadcast.js.map +1 -0
  88. package/lib-es/bridge/createTransaction.d.ts +4 -0
  89. package/lib-es/bridge/createTransaction.d.ts.map +1 -0
  90. package/lib-es/bridge/createTransaction.js +11 -0
  91. package/lib-es/bridge/createTransaction.js.map +1 -0
  92. package/lib-es/bridge/estimateMaxSpendable.d.ts +4 -0
  93. package/lib-es/bridge/estimateMaxSpendable.d.ts.map +1 -0
  94. package/lib-es/bridge/estimateMaxSpendable.js +19 -0
  95. package/lib-es/bridge/estimateMaxSpendable.js.map +1 -0
  96. package/lib-es/bridge/getTransactionStatus.d.ts +4 -0
  97. package/lib-es/bridge/getTransactionStatus.d.ts.map +1 -0
  98. package/lib-es/{logic → bridge}/getTransactionStatus.js +14 -13
  99. package/lib-es/bridge/getTransactionStatus.js.map +1 -0
  100. package/lib-es/bridge/index.d.ts +11 -0
  101. package/lib-es/bridge/index.d.ts.map +1 -0
  102. package/lib-es/bridge/index.js +41 -0
  103. package/lib-es/bridge/index.js.map +1 -0
  104. package/lib-es/bridge/prepareTransaction.d.ts +4 -0
  105. package/lib-es/bridge/prepareTransaction.d.ts.map +1 -0
  106. package/lib-es/bridge/prepareTransaction.js +10 -0
  107. package/lib-es/bridge/prepareTransaction.js.map +1 -0
  108. package/lib-es/bridge/signOperation.d.ts +5 -0
  109. package/lib-es/bridge/signOperation.d.ts.map +1 -0
  110. package/lib-es/bridge/signOperation.js +72 -0
  111. package/lib-es/bridge/signOperation.js.map +1 -0
  112. package/lib-es/bridge/synchronization.d.ts +3 -0
  113. package/lib-es/bridge/synchronization.d.ts.map +1 -0
  114. package/lib-es/bridge/synchronization.js +78 -0
  115. package/lib-es/bridge/synchronization.js.map +1 -0
  116. package/lib-es/bridge/synchronization.test.d.ts +2 -0
  117. package/lib-es/bridge/synchronization.test.d.ts.map +1 -0
  118. package/lib-es/bridge/synchronization.test.js +135 -0
  119. package/lib-es/bridge/synchronization.test.js.map +1 -0
  120. package/lib-es/{transaction.d.ts → bridge/transaction.d.ts} +1 -1
  121. package/lib-es/bridge/transaction.d.ts.map +1 -0
  122. package/lib-es/bridge/transaction.js.map +1 -0
  123. package/lib-es/index.d.ts +1 -0
  124. package/lib-es/index.d.ts.map +1 -1
  125. package/lib-es/index.js +1 -0
  126. package/lib-es/index.js.map +1 -1
  127. package/lib-es/logic/combine.d.ts.map +1 -1
  128. package/lib-es/logic/combine.js +3 -8
  129. package/lib-es/logic/combine.js.map +1 -1
  130. package/lib-es/logic/getBalance.d.ts.map +1 -1
  131. package/lib-es/logic/getBalance.js +2 -14
  132. package/lib-es/logic/getBalance.js.map +1 -1
  133. package/lib-es/logic/getBalance.test.js +1 -14
  134. package/lib-es/logic/getBalance.test.js.map +1 -1
  135. package/lib-es/logic/index.d.ts +1 -2
  136. package/lib-es/logic/index.d.ts.map +1 -1
  137. package/lib-es/logic/index.js +1 -2
  138. package/lib-es/logic/index.js.map +1 -1
  139. package/lib-es/logic/utils.d.ts +1 -0
  140. package/lib-es/logic/utils.d.ts.map +1 -1
  141. package/lib-es/logic/utils.js +8 -13
  142. package/lib-es/logic/utils.js.map +1 -1
  143. package/lib-es/test/bridgeDatasetTest.d.ts.map +1 -1
  144. package/lib-es/test/bridgeDatasetTest.js +7 -7
  145. package/lib-es/test/bridgeDatasetTest.js.map +1 -1
  146. package/lib-es/types/model.d.ts +0 -7
  147. package/lib-es/types/model.d.ts.map +1 -1
  148. package/package.json +5 -5
  149. package/src/api/index.integ.test.ts +8 -24
  150. package/src/api/index.test.ts +22 -23
  151. package/src/api/index.ts +19 -28
  152. package/src/bridge/broadcast.ts +11 -0
  153. package/src/bridge/createTransaction.ts +13 -0
  154. package/src/bridge/estimateMaxSpendable.ts +25 -0
  155. package/src/{logic → bridge}/getTransactionStatus.ts +21 -18
  156. package/src/bridge/index.ts +59 -0
  157. package/src/bridge/prepareTransaction.ts +18 -0
  158. package/src/bridge/signOperation.ts +100 -0
  159. package/src/bridge/synchronization.test.ts +153 -0
  160. package/src/bridge/synchronization.ts +108 -0
  161. package/src/{transaction.ts → bridge/transaction.ts} +1 -1
  162. package/src/index.ts +1 -0
  163. package/src/logic/combine.ts +3 -10
  164. package/src/logic/getBalance.test.ts +1 -14
  165. package/src/logic/getBalance.ts +2 -18
  166. package/src/logic/index.ts +6 -2
  167. package/src/logic/utils.ts +8 -24
  168. package/src/test/bridgeDatasetTest.ts +7 -8
  169. package/src/types/model.ts +0 -11
  170. package/lib/logic/getTransactionStatus.d.ts +0 -3
  171. package/lib/logic/getTransactionStatus.d.ts.map +0 -1
  172. package/lib/logic/getTransactionStatus.js.map +0 -1
  173. package/lib/logic/getTransactionStatus.test.d.ts +0 -2
  174. package/lib/logic/getTransactionStatus.test.d.ts.map +0 -1
  175. package/lib/logic/getTransactionStatus.test.js +0 -184
  176. package/lib/logic/getTransactionStatus.test.js.map +0 -1
  177. package/lib/transaction.d.ts.map +0 -1
  178. package/lib/transaction.js.map +0 -1
  179. package/lib-es/logic/getTransactionStatus.d.ts +0 -3
  180. package/lib-es/logic/getTransactionStatus.d.ts.map +0 -1
  181. package/lib-es/logic/getTransactionStatus.js.map +0 -1
  182. package/lib-es/logic/getTransactionStatus.test.d.ts +0 -2
  183. package/lib-es/logic/getTransactionStatus.test.d.ts.map +0 -1
  184. package/lib-es/logic/getTransactionStatus.test.js +0 -159
  185. package/lib-es/logic/getTransactionStatus.test.js.map +0 -1
  186. package/lib-es/transaction.d.ts.map +0 -1
  187. package/lib-es/transaction.js.map +0 -1
  188. package/src/logic/getTransactionStatus.test.ts +0 -215
  189. /package/lib/{transaction.js → bridge/transaction.js} +0 -0
  190. /package/lib-es/{transaction.js → bridge/transaction.js} +0 -0
@@ -22,15 +22,6 @@ function isRecipientValid(recipient: string): boolean {
22
22
  return isValidClassicAddress(recipient);
23
23
  }
24
24
 
25
- // --- 10-Seconds Cache Implementation ---
26
- type CacheEntry = {
27
- value: boolean;
28
- expiresAt: number;
29
- };
30
-
31
- const recipientCache = new Map<string, CacheEntry>();
32
- const TTL = 10 * 1000; // 10 seconds
33
-
34
25
  const recipientIsNew = async (recipient: string): Promise<boolean> => {
35
26
  if (!isRecipientValid(recipient)) return false;
36
27
 
@@ -38,19 +29,12 @@ const recipientIsNew = async (recipient: string): Promise<boolean> => {
38
29
  return info.isNewAccount;
39
30
  };
40
31
 
41
- export const cachedRecipientIsNew = async (recipient: string): Promise<boolean> => {
42
- const now = Date.now();
43
- const cached = recipientCache.get(recipient);
44
-
45
- if (cached && now < cached.expiresAt) {
46
- return cached.value;
47
- }
48
-
49
- const isNew = await recipientIsNew(recipient);
50
- recipientCache.set(recipient, {
51
- value: isNew,
52
- expiresAt: now + TTL,
53
- });
54
-
55
- return isNew;
32
+ const cacheRecipientsNew: Record<string, boolean> = {};
33
+ export const cachedRecipientIsNew = async (recipient: string) => {
34
+ if (recipient in cacheRecipientsNew) return cacheRecipientsNew[recipient];
35
+ cacheRecipientsNew[recipient] = await recipientIsNew(recipient);
36
+ return cacheRecipientsNew[recipient];
37
+ };
38
+ export const removeCachedRecipientIsNew = (recipient: string) => {
39
+ delete cacheRecipientsNew[recipient];
56
40
  };
@@ -1,7 +1,7 @@
1
1
  import BigNumber from "bignumber.js";
2
2
  import { DatasetTest } from "@ledgerhq/types-live";
3
3
  import { InvalidAddressBecauseDestinationIsAlsoSource } from "@ledgerhq/errors";
4
- import { fromTransactionRaw } from "../transaction";
4
+ import { fromTransactionRaw } from "../bridge/transaction";
5
5
  import { Transaction } from "../types";
6
6
 
7
7
  export const newAddress1 = "rZvBc5e2YR1A9otS3r9DyGh3NDP8XLLp4";
@@ -97,19 +97,18 @@ export const dataset: DatasetTest<Transaction> = {
97
97
  recipient: "rageXHB6Q4VbvvWdTzKANwjeCT4HXFCKX7",
98
98
  amount: "10000000",
99
99
  tag: null,
100
- fee: "10", // NOTE: fee is not customizable, this field is ignored
100
+ fee: "1",
101
101
  feeCustomUnit: null,
102
102
  networkInfo: null,
103
103
  }),
104
104
  expectedStatus: {
105
105
  amount: new BigNumber("10000000"),
106
- estimatedFees: new BigNumber("10"), // NOTE: hardcoded fee
107
-
106
+ estimatedFees: new BigNumber("1"),
108
107
  errors: {
109
108
  recipient: new InvalidAddressBecauseDestinationIsAlsoSource(),
110
109
  },
111
110
  warnings: {},
112
- totalSpent: new BigNumber("10000010"), // NOTE: amount + hardcoded fee
111
+ totalSpent: new BigNumber("10000001"),
113
112
  },
114
113
  },
115
114
  {
@@ -119,16 +118,16 @@ export const dataset: DatasetTest<Transaction> = {
119
118
  recipient: "rB6pwovsyrFWhPYUsjj9V3CHck985QjiXi",
120
119
  amount: "10000000",
121
120
  tag: 12345,
122
- fee: "10", // NOTE: fee is not customizable, this field is ignored
121
+ fee: "1",
123
122
  feeCustomUnit: null,
124
123
  networkInfo: null,
125
124
  }),
126
125
  expectedStatus: {
127
126
  amount: new BigNumber("10000000"),
128
- estimatedFees: new BigNumber("10"), // NOTE: hardcoded fee
127
+ estimatedFees: new BigNumber("1"),
129
128
  errors: {},
130
129
  warnings: {},
131
- totalSpent: new BigNumber("10000010"), // NOTE: amount + hardcoded fee
130
+ totalSpent: new BigNumber("10000001"),
132
131
  },
133
132
  },
134
133
  ],
@@ -1,5 +1,3 @@
1
- import { TypedMapMemo } from "@ledgerhq/coin-framework/api/types";
2
-
3
1
  export type AccountInfo = {
4
2
  isNewAccount: boolean;
5
3
  balance: string;
@@ -13,16 +11,7 @@ export type XrpMemo = {
13
11
  type?: string;
14
12
  };
15
13
 
16
- export type XrpMemoKind = "destinationTag" | "memo";
17
-
18
- export type XrpMemoValueMap = {
19
- destinationTag: string;
20
- memos: string[];
21
- };
22
- export type XrpMapMemo = TypedMapMemo<XrpMemoValueMap>;
23
-
24
14
  type Order = "asc" | "desc";
25
-
26
15
  export type ListOperationsOptions = {
27
16
  // pagination:
28
17
  limit?: number;
@@ -1,3 +0,0 @@
1
- import { Transaction, TransactionValidation, Account } from "@ledgerhq/coin-framework/api/types";
2
- export declare const getTransactionStatus: (account: Account, transaction: Transaction) => Promise<TransactionValidation>;
3
- //# sourceMappingURL=getTransactionStatus.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getTransactionStatus.d.ts","sourceRoot":"","sources":["../../src/logic/getTransactionStatus.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAEjG,eAAO,MAAM,oBAAoB,YACtB,OAAO,eACH,WAAW,KACvB,OAAO,CAAC,qBAAqB,CA8D/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":""}
@@ -1,184 +0,0 @@
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 getTransactionStatus_1 = require("./getTransactionStatus");
27
- const logic = __importStar(require("./index"));
28
- const mockGetServerInfos = jest.fn();
29
- const mockCachedRecipientIsNew = jest.fn();
30
- jest.mock("../network", () => ({
31
- getServerInfos: () => mockGetServerInfos(),
32
- }));
33
- jest.spyOn(logic, "cachedRecipientIsNew").mockImplementation(addr => {
34
- if (addr === RECIPIENT_NEW) {
35
- return Promise.resolve(true);
36
- }
37
- return Promise.resolve(false);
38
- });
39
- const reserveBase = 10000000n; // 10 XRP (drops)
40
- const SENDER = "rPSCfmnX3t9jQJG5RNcZtSaP5UhExZDue4";
41
- const RECIPIENT = "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe";
42
- const RECIPIENT_NEW = "rDKsbvy9uaNpPtvVFraJyNGfjvTw8xivgK";
43
- const account = {
44
- address: SENDER,
45
- balance: 50000000n,
46
- currencyUnit: {
47
- code: "XRP",
48
- magnitude: 6,
49
- name: "XRP",
50
- symbol: "XRP",
51
- },
52
- currencyName: "XRP",
53
- };
54
- describe("getTransactionStatus", () => {
55
- afterEach(() => {
56
- mockGetServerInfos.mockReset();
57
- mockCachedRecipientIsNew.mockReset();
58
- });
59
- it("returns no errors on valid transaction", async () => {
60
- mockGetServerInfos.mockResolvedValue({
61
- info: {
62
- validated_ledger: {
63
- reserve_base_xrp: reserveBase / 1000000n, // XRP value, not drops
64
- },
65
- },
66
- });
67
- mockCachedRecipientIsNew.mockResolvedValue(false);
68
- const result = await (0, getTransactionStatus_1.getTransactionStatus)(account, {
69
- amount: 20000000n,
70
- fee: 10000n,
71
- recipient: RECIPIENT,
72
- });
73
- expect(result.errors).toEqual({});
74
- expect(result.warnings).toEqual({});
75
- expect(result.totalSpent).toBe(20010000n);
76
- });
77
- it("throws FeeTooHigh warning when fee is >10% of amount", async () => {
78
- mockGetServerInfos.mockResolvedValue({
79
- info: {
80
- validated_ledger: {
81
- reserve_base_xrp: reserveBase / 1000000n,
82
- },
83
- },
84
- });
85
- const result = await (0, getTransactionStatus_1.getTransactionStatus)(account, {
86
- amount: 1000000n,
87
- fee: 200000n, // 20%
88
- recipient: RECIPIENT,
89
- });
90
- expect(result.warnings.feeTooHigh).toBeInstanceOf(Error);
91
- expect(result.errors).toEqual({});
92
- });
93
- it("errors when fee is missing", async () => {
94
- mockGetServerInfos.mockResolvedValue({
95
- info: {
96
- validated_ledger: {
97
- reserve_base_xrp: reserveBase / 1000000n,
98
- },
99
- },
100
- });
101
- const result = await (0, getTransactionStatus_1.getTransactionStatus)(account, {
102
- amount: 10000000n,
103
- recipient: RECIPIENT,
104
- });
105
- expect(result.errors.fee?.name).toBe("FeeNotLoaded");
106
- });
107
- it("errors if recipient is same as sender", async () => {
108
- mockGetServerInfos.mockResolvedValue({
109
- info: {
110
- validated_ledger: {
111
- reserve_base_xrp: reserveBase / 1000000n,
112
- },
113
- },
114
- });
115
- const result = await (0, getTransactionStatus_1.getTransactionStatus)(account, {
116
- amount: 10000000n,
117
- fee: 10000n,
118
- recipient: SENDER,
119
- });
120
- expect(result.errors.recipient?.name).toBe("InvalidAddressBecauseDestinationIsAlsoSource");
121
- });
122
- it("errors if recipient is new and amount is too low", async () => {
123
- mockGetServerInfos.mockResolvedValue({
124
- info: {
125
- validated_ledger: {
126
- reserve_base_xrp: reserveBase / 1000000n,
127
- },
128
- },
129
- });
130
- mockCachedRecipientIsNew.mockResolvedValue(true);
131
- const result = await (0, getTransactionStatus_1.getTransactionStatus)(account, {
132
- amount: 5000000n,
133
- fee: 10000n,
134
- recipient: RECIPIENT_NEW,
135
- });
136
- expect(result.errors.amount?.name).toBe("NotEnoughBalanceBecauseDestinationNotCreated");
137
- });
138
- it("errors if amount is zero", async () => {
139
- mockGetServerInfos.mockResolvedValue({
140
- info: {
141
- validated_ledger: {
142
- reserve_base_xrp: reserveBase / 1000000n,
143
- },
144
- },
145
- });
146
- const result = await (0, getTransactionStatus_1.getTransactionStatus)(account, {
147
- amount: 0n,
148
- fee: 10000n,
149
- recipient: RECIPIENT,
150
- });
151
- expect(result.errors.amount?.name).toBe("AmountRequired");
152
- });
153
- it("errors if recipient is invalid", async () => {
154
- mockGetServerInfos.mockResolvedValue({
155
- info: {
156
- validated_ledger: {
157
- reserve_base_xrp: reserveBase / 1000000n,
158
- },
159
- },
160
- });
161
- const result = await (0, getTransactionStatus_1.getTransactionStatus)(account, {
162
- amount: 1000000n,
163
- fee: 10000n,
164
- recipient: "not-an-address",
165
- });
166
- expect(result.errors.recipient?.name).toBe("InvalidAddress");
167
- });
168
- it("errors if recipient is missing", async () => {
169
- mockGetServerInfos.mockResolvedValue({
170
- info: {
171
- validated_ledger: {
172
- reserve_base_xrp: reserveBase / 1000000n,
173
- },
174
- },
175
- });
176
- const result = await (0, getTransactionStatus_1.getTransactionStatus)(account, {
177
- amount: 1000000n,
178
- fee: 10000n,
179
- recipient: "",
180
- });
181
- expect(result.errors.recipient?.name).toBe("RecipientRequired");
182
- });
183
- });
184
- //# sourceMappingURL=getTransactionStatus.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getTransactionStatus.test.js","sourceRoot":"","sources":["../../src/logic/getTransactionStatus.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAQ3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAIpD,eAAO,MAAM,iBAAiB,kDACmB,WAAW,WACjD,OAAO,KACf,MAiB6B,CAAC;AAEjC,eAAO,MAAM,kBAAkB,OAAQ,cAAc,KAAG,WAgBvD,CAAC;AAEF,eAAO,MAAM,gBAAgB,MAAO,WAAW,KAAG,cAgBjD,CAAC;;uEAvD+C,WAAW,WACjD,OAAO,KACf,MAAM;6BAmB8B,cAAc,KAAG,WAAW;0BAkB/B,WAAW,KAAG,cAAc;;;;;AAkBhE,wBAOE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":";;;AAAA,+CAAyC;AAEzC,oEAA8E;AAC9E,oFAK4D;AAE5D,kEAA4E;AAC5E,qEAA+E;AAExE,MAAM,iBAAiB,GAAG,CAC/B,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAe,EAC1D,OAAgB,EACR,EAAE,CAAC;OAEX,YAAY;IACV,CAAC,CAAC,KAAK;IACP,CAAC,CAAC,IAAA,0BAAkB,EAAC,IAAA,0BAAkB,EAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE;QAC/D,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,IAAI;KACtB,CACP;KACK,SAAS;WAEZ,CAAC,GAAG;IACF,CAAC,CAAC,GAAG;IACL,CAAC,CAAC,IAAA,0BAAkB,EAAC,IAAA,0BAAkB,EAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE;QAC5D,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,IAAI;KACtB,CACP,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AApBpB,QAAA,iBAAiB,qBAoBG;AAE1B,MAAM,kBAAkB,GAAG,CAAC,EAAkB,EAAe,EAAE;IACpE,MAAM,MAAM,GAAG,IAAA,sCAAwB,EAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;IAC3B,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,GAAG,EAAE,EAAE,CAAC,GAAG;QACX,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,wBAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;QAC1C,aAAa,EAAE,EAAE,CAAC,aAAa;QAC/B,6IAA6I;QAC7I,WAAW,EAAE,WAAW,IAAI;YAC1B,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,SAAS,EAAE,IAAI,wBAAS,CAAC,WAAW,CAAC,SAAS,CAAC;YAC/C,WAAW,EAAE,IAAI,wBAAS,CAAC,WAAW,CAAC,WAAW,CAAC;SACpD;KACF,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,kBAAkB,sBAgB7B;AAEK,MAAM,gBAAgB,GAAG,CAAC,CAAc,EAAkB,EAAE;IACjE,MAAM,MAAM,GAAG,IAAA,oCAAsB,EAAC,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;QACpC,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,6IAA6I;QAC7I,WAAW,EAAE,WAAW,IAAI;YAC1B,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC3C,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE;SAChD;KACF,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,gBAAgB,oBAgB3B;AAEF,kBAAe;IACb,iBAAiB,EAAjB,yBAAiB;IACjB,kBAAkB,EAAlB,0BAAkB;IAClB,gBAAgB,EAAhB,wBAAgB;IAChB,wBAAwB,EAAxB,4CAAwB;IACxB,sBAAsB,EAAtB,0CAAsB;IACtB,uBAAuB,EAAvB,oCAAuB;CACxB,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Transaction, TransactionValidation, Account } from "@ledgerhq/coin-framework/api/types";
2
- export declare const getTransactionStatus: (account: Account, transaction: Transaction) => Promise<TransactionValidation>;
3
- //# sourceMappingURL=getTransactionStatus.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getTransactionStatus.d.ts","sourceRoot":"","sources":["../../src/logic/getTransactionStatus.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAEjG,eAAO,MAAM,oBAAoB,YACtB,OAAO,eACH,WAAW,KACvB,OAAO,CAAC,qBAAqB,CA8D/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":""}
@@ -1,159 +0,0 @@
1
- import { getTransactionStatus } from "./getTransactionStatus";
2
- import * as logic from "./index";
3
- const mockGetServerInfos = jest.fn();
4
- const mockCachedRecipientIsNew = jest.fn();
5
- jest.mock("../network", () => ({
6
- getServerInfos: () => mockGetServerInfos(),
7
- }));
8
- jest.spyOn(logic, "cachedRecipientIsNew").mockImplementation(addr => {
9
- if (addr === RECIPIENT_NEW) {
10
- return Promise.resolve(true);
11
- }
12
- return Promise.resolve(false);
13
- });
14
- const reserveBase = 10000000n; // 10 XRP (drops)
15
- const SENDER = "rPSCfmnX3t9jQJG5RNcZtSaP5UhExZDue4";
16
- const RECIPIENT = "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe";
17
- const RECIPIENT_NEW = "rDKsbvy9uaNpPtvVFraJyNGfjvTw8xivgK";
18
- const account = {
19
- address: SENDER,
20
- balance: 50000000n,
21
- currencyUnit: {
22
- code: "XRP",
23
- magnitude: 6,
24
- name: "XRP",
25
- symbol: "XRP",
26
- },
27
- currencyName: "XRP",
28
- };
29
- describe("getTransactionStatus", () => {
30
- afterEach(() => {
31
- mockGetServerInfos.mockReset();
32
- mockCachedRecipientIsNew.mockReset();
33
- });
34
- it("returns no errors on valid transaction", async () => {
35
- mockGetServerInfos.mockResolvedValue({
36
- info: {
37
- validated_ledger: {
38
- reserve_base_xrp: reserveBase / 1000000n, // XRP value, not drops
39
- },
40
- },
41
- });
42
- mockCachedRecipientIsNew.mockResolvedValue(false);
43
- const result = await getTransactionStatus(account, {
44
- amount: 20000000n,
45
- fee: 10000n,
46
- recipient: RECIPIENT,
47
- });
48
- expect(result.errors).toEqual({});
49
- expect(result.warnings).toEqual({});
50
- expect(result.totalSpent).toBe(20010000n);
51
- });
52
- it("throws FeeTooHigh warning when fee is >10% of amount", async () => {
53
- mockGetServerInfos.mockResolvedValue({
54
- info: {
55
- validated_ledger: {
56
- reserve_base_xrp: reserveBase / 1000000n,
57
- },
58
- },
59
- });
60
- const result = await getTransactionStatus(account, {
61
- amount: 1000000n,
62
- fee: 200000n, // 20%
63
- recipient: RECIPIENT,
64
- });
65
- expect(result.warnings.feeTooHigh).toBeInstanceOf(Error);
66
- expect(result.errors).toEqual({});
67
- });
68
- it("errors when fee is missing", async () => {
69
- mockGetServerInfos.mockResolvedValue({
70
- info: {
71
- validated_ledger: {
72
- reserve_base_xrp: reserveBase / 1000000n,
73
- },
74
- },
75
- });
76
- const result = await getTransactionStatus(account, {
77
- amount: 10000000n,
78
- recipient: RECIPIENT,
79
- });
80
- expect(result.errors.fee?.name).toBe("FeeNotLoaded");
81
- });
82
- it("errors if recipient is same as sender", async () => {
83
- mockGetServerInfos.mockResolvedValue({
84
- info: {
85
- validated_ledger: {
86
- reserve_base_xrp: reserveBase / 1000000n,
87
- },
88
- },
89
- });
90
- const result = await getTransactionStatus(account, {
91
- amount: 10000000n,
92
- fee: 10000n,
93
- recipient: SENDER,
94
- });
95
- expect(result.errors.recipient?.name).toBe("InvalidAddressBecauseDestinationIsAlsoSource");
96
- });
97
- it("errors if recipient is new and amount is too low", async () => {
98
- mockGetServerInfos.mockResolvedValue({
99
- info: {
100
- validated_ledger: {
101
- reserve_base_xrp: reserveBase / 1000000n,
102
- },
103
- },
104
- });
105
- mockCachedRecipientIsNew.mockResolvedValue(true);
106
- const result = await getTransactionStatus(account, {
107
- amount: 5000000n,
108
- fee: 10000n,
109
- recipient: RECIPIENT_NEW,
110
- });
111
- expect(result.errors.amount?.name).toBe("NotEnoughBalanceBecauseDestinationNotCreated");
112
- });
113
- it("errors if amount is zero", async () => {
114
- mockGetServerInfos.mockResolvedValue({
115
- info: {
116
- validated_ledger: {
117
- reserve_base_xrp: reserveBase / 1000000n,
118
- },
119
- },
120
- });
121
- const result = await getTransactionStatus(account, {
122
- amount: 0n,
123
- fee: 10000n,
124
- recipient: RECIPIENT,
125
- });
126
- expect(result.errors.amount?.name).toBe("AmountRequired");
127
- });
128
- it("errors if recipient is invalid", async () => {
129
- mockGetServerInfos.mockResolvedValue({
130
- info: {
131
- validated_ledger: {
132
- reserve_base_xrp: reserveBase / 1000000n,
133
- },
134
- },
135
- });
136
- const result = await getTransactionStatus(account, {
137
- amount: 1000000n,
138
- fee: 10000n,
139
- recipient: "not-an-address",
140
- });
141
- expect(result.errors.recipient?.name).toBe("InvalidAddress");
142
- });
143
- it("errors if recipient is missing", async () => {
144
- mockGetServerInfos.mockResolvedValue({
145
- info: {
146
- validated_ledger: {
147
- reserve_base_xrp: reserveBase / 1000000n,
148
- },
149
- },
150
- });
151
- const result = await getTransactionStatus(account, {
152
- amount: 1000000n,
153
- fee: 10000n,
154
- recipient: "",
155
- });
156
- expect(result.errors.recipient?.name).toBe("RecipientRequired");
157
- });
158
- });
159
- //# sourceMappingURL=getTransactionStatus.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getTransactionStatus.test.js","sourceRoot":"","sources":["../../src/logic/getTransactionStatus.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAQ3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAIpD,eAAO,MAAM,iBAAiB,kDACmB,WAAW,WACjD,OAAO,KACf,MAiB6B,CAAC;AAEjC,eAAO,MAAM,kBAAkB,OAAQ,cAAc,KAAG,WAgBvD,CAAC;AAEF,eAAO,MAAM,gBAAgB,MAAO,WAAW,KAAG,cAgBjD,CAAC;;uEAvD+C,WAAW,WACjD,OAAO,KACf,MAAM;6BAmB8B,cAAc,KAAG,WAAW;0BAkB/B,WAAW,KAAG,cAAc;;;;;AAkBhE,wBAOE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"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"}