@ledgerhq/coin-xrp 6.1.3 → 6.2.0-nightly.3

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 (191) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.unimportedrc.json +3 -1
  3. package/CHANGELOG.md +20 -23
  4. package/jest.config.js +2 -5
  5. package/lib/api/index.d.ts +2 -11
  6. package/lib/api/index.d.ts.map +1 -1
  7. package/lib/api/index.integ.test.js +24 -7
  8. package/lib/api/index.integ.test.js.map +1 -1
  9. package/lib/api/index.js +15 -5
  10. package/lib/api/index.js.map +1 -1
  11. package/lib/api/index.test.js +18 -9
  12. package/lib/api/index.test.js.map +1 -1
  13. package/lib/index.d.ts +0 -1
  14. package/lib/index.d.ts.map +1 -1
  15. package/lib/index.js +0 -3
  16. package/lib/index.js.map +1 -1
  17. package/lib/logic/combine.d.ts.map +1 -1
  18. package/lib/logic/combine.js +8 -3
  19. package/lib/logic/combine.js.map +1 -1
  20. package/lib/logic/getBalance.d.ts.map +1 -1
  21. package/lib/logic/getBalance.js +13 -1
  22. package/lib/logic/getBalance.js.map +1 -1
  23. package/lib/logic/getBalance.test.js +14 -1
  24. package/lib/logic/getBalance.test.js.map +1 -1
  25. package/lib/logic/getTransactionStatus.d.ts +3 -0
  26. package/lib/logic/getTransactionStatus.d.ts.map +1 -0
  27. package/lib/{bridge → logic}/getTransactionStatus.js +15 -19
  28. package/lib/logic/getTransactionStatus.js.map +1 -0
  29. package/lib/logic/getTransactionStatus.test.d.ts +2 -0
  30. package/lib/logic/getTransactionStatus.test.d.ts.map +1 -0
  31. package/lib/logic/getTransactionStatus.test.js +184 -0
  32. package/lib/logic/getTransactionStatus.test.js.map +1 -0
  33. package/lib/logic/index.d.ts +2 -1
  34. package/lib/logic/index.d.ts.map +1 -1
  35. package/lib/logic/index.js +3 -2
  36. package/lib/logic/index.js.map +1 -1
  37. package/lib/logic/utils.d.ts +0 -1
  38. package/lib/logic/utils.d.ts.map +1 -1
  39. package/lib/logic/utils.js +14 -10
  40. package/lib/logic/utils.js.map +1 -1
  41. package/lib/test/bridgeDatasetTest.d.ts.map +1 -1
  42. package/lib/test/bridgeDatasetTest.js +7 -7
  43. package/lib/test/bridgeDatasetTest.js.map +1 -1
  44. package/lib/{bridge/transaction.d.ts → transaction.d.ts} +1 -1
  45. package/lib/transaction.d.ts.map +1 -0
  46. package/lib/transaction.js.map +1 -0
  47. package/lib/types/model.d.ts +7 -0
  48. package/lib/types/model.d.ts.map +1 -1
  49. package/lib-es/api/index.d.ts +2 -11
  50. package/lib-es/api/index.d.ts.map +1 -1
  51. package/lib-es/api/index.integ.test.js +24 -7
  52. package/lib-es/api/index.integ.test.js.map +1 -1
  53. package/lib-es/api/index.js +16 -6
  54. package/lib-es/api/index.js.map +1 -1
  55. package/lib-es/api/index.test.js +18 -9
  56. package/lib-es/api/index.test.js.map +1 -1
  57. package/lib-es/index.d.ts +0 -1
  58. package/lib-es/index.d.ts.map +1 -1
  59. package/lib-es/index.js +0 -1
  60. package/lib-es/index.js.map +1 -1
  61. package/lib-es/logic/combine.d.ts.map +1 -1
  62. package/lib-es/logic/combine.js +8 -3
  63. package/lib-es/logic/combine.js.map +1 -1
  64. package/lib-es/logic/getBalance.d.ts.map +1 -1
  65. package/lib-es/logic/getBalance.js +14 -2
  66. package/lib-es/logic/getBalance.js.map +1 -1
  67. package/lib-es/logic/getBalance.test.js +14 -1
  68. package/lib-es/logic/getBalance.test.js.map +1 -1
  69. package/lib-es/logic/getTransactionStatus.d.ts +3 -0
  70. package/lib-es/logic/getTransactionStatus.d.ts.map +1 -0
  71. package/lib-es/{bridge → logic}/getTransactionStatus.js +13 -14
  72. package/lib-es/logic/getTransactionStatus.js.map +1 -0
  73. package/lib-es/logic/getTransactionStatus.test.d.ts +2 -0
  74. package/lib-es/logic/getTransactionStatus.test.d.ts.map +1 -0
  75. package/lib-es/logic/getTransactionStatus.test.js +159 -0
  76. package/lib-es/logic/getTransactionStatus.test.js.map +1 -0
  77. package/lib-es/logic/index.d.ts +2 -1
  78. package/lib-es/logic/index.d.ts.map +1 -1
  79. package/lib-es/logic/index.js +2 -1
  80. package/lib-es/logic/index.js.map +1 -1
  81. package/lib-es/logic/utils.d.ts +0 -1
  82. package/lib-es/logic/utils.d.ts.map +1 -1
  83. package/lib-es/logic/utils.js +13 -8
  84. package/lib-es/logic/utils.js.map +1 -1
  85. package/lib-es/test/bridgeDatasetTest.d.ts.map +1 -1
  86. package/lib-es/test/bridgeDatasetTest.js +7 -7
  87. package/lib-es/test/bridgeDatasetTest.js.map +1 -1
  88. package/lib-es/{bridge/transaction.d.ts → transaction.d.ts} +1 -1
  89. package/lib-es/transaction.d.ts.map +1 -0
  90. package/lib-es/transaction.js.map +1 -0
  91. package/lib-es/types/model.d.ts +7 -0
  92. package/lib-es/types/model.d.ts.map +1 -1
  93. package/package.json +12 -13
  94. package/src/api/index.integ.test.ts +24 -8
  95. package/src/api/index.test.ts +23 -22
  96. package/src/api/index.ts +28 -19
  97. package/src/index.ts +0 -1
  98. package/src/logic/combine.ts +10 -3
  99. package/src/logic/getBalance.test.ts +14 -1
  100. package/src/logic/getBalance.ts +18 -2
  101. package/src/logic/getTransactionStatus.test.ts +215 -0
  102. package/src/{bridge → logic}/getTransactionStatus.ts +18 -21
  103. package/src/logic/index.ts +2 -6
  104. package/src/logic/utils.ts +24 -8
  105. package/src/test/bridgeDatasetTest.ts +8 -7
  106. package/src/{bridge/transaction.ts → transaction.ts} +1 -1
  107. package/src/types/model.ts +11 -0
  108. package/lib/bridge/broadcast.d.ts +0 -4
  109. package/lib/bridge/broadcast.d.ts.map +0 -1
  110. package/lib/bridge/broadcast.js +0 -11
  111. package/lib/bridge/broadcast.js.map +0 -1
  112. package/lib/bridge/createTransaction.d.ts +0 -4
  113. package/lib/bridge/createTransaction.d.ts.map +0 -1
  114. package/lib/bridge/createTransaction.js +0 -18
  115. package/lib/bridge/createTransaction.js.map +0 -1
  116. package/lib/bridge/estimateMaxSpendable.d.ts +0 -4
  117. package/lib/bridge/estimateMaxSpendable.d.ts.map +0 -1
  118. package/lib/bridge/estimateMaxSpendable.js +0 -26
  119. package/lib/bridge/estimateMaxSpendable.js.map +0 -1
  120. package/lib/bridge/getTransactionStatus.d.ts +0 -4
  121. package/lib/bridge/getTransactionStatus.d.ts.map +0 -1
  122. package/lib/bridge/getTransactionStatus.js.map +0 -1
  123. package/lib/bridge/index.d.ts +0 -11
  124. package/lib/bridge/index.d.ts.map +0 -1
  125. package/lib/bridge/index.js +0 -47
  126. package/lib/bridge/index.js.map +0 -1
  127. package/lib/bridge/prepareTransaction.d.ts +0 -4
  128. package/lib/bridge/prepareTransaction.d.ts.map +0 -1
  129. package/lib/bridge/prepareTransaction.js +0 -14
  130. package/lib/bridge/prepareTransaction.js.map +0 -1
  131. package/lib/bridge/signOperation.d.ts +0 -5
  132. package/lib/bridge/signOperation.d.ts.map +0 -1
  133. package/lib/bridge/signOperation.js +0 -76
  134. package/lib/bridge/signOperation.js.map +0 -1
  135. package/lib/bridge/synchronization.d.ts +0 -3
  136. package/lib/bridge/synchronization.d.ts.map +0 -1
  137. package/lib/bridge/synchronization.js +0 -85
  138. package/lib/bridge/synchronization.js.map +0 -1
  139. package/lib/bridge/synchronization.test.d.ts +0 -2
  140. package/lib/bridge/synchronization.test.d.ts.map +0 -1
  141. package/lib/bridge/synchronization.test.js +0 -140
  142. package/lib/bridge/synchronization.test.js.map +0 -1
  143. package/lib/bridge/transaction.d.ts.map +0 -1
  144. package/lib/bridge/transaction.js.map +0 -1
  145. package/lib-es/bridge/broadcast.d.ts +0 -4
  146. package/lib-es/bridge/broadcast.d.ts.map +0 -1
  147. package/lib-es/bridge/broadcast.js +0 -7
  148. package/lib-es/bridge/broadcast.js.map +0 -1
  149. package/lib-es/bridge/createTransaction.d.ts +0 -4
  150. package/lib-es/bridge/createTransaction.d.ts.map +0 -1
  151. package/lib-es/bridge/createTransaction.js +0 -11
  152. package/lib-es/bridge/createTransaction.js.map +0 -1
  153. package/lib-es/bridge/estimateMaxSpendable.d.ts +0 -4
  154. package/lib-es/bridge/estimateMaxSpendable.d.ts.map +0 -1
  155. package/lib-es/bridge/estimateMaxSpendable.js +0 -19
  156. package/lib-es/bridge/estimateMaxSpendable.js.map +0 -1
  157. package/lib-es/bridge/getTransactionStatus.d.ts +0 -4
  158. package/lib-es/bridge/getTransactionStatus.d.ts.map +0 -1
  159. package/lib-es/bridge/getTransactionStatus.js.map +0 -1
  160. package/lib-es/bridge/index.d.ts +0 -11
  161. package/lib-es/bridge/index.d.ts.map +0 -1
  162. package/lib-es/bridge/index.js +0 -41
  163. package/lib-es/bridge/index.js.map +0 -1
  164. package/lib-es/bridge/prepareTransaction.d.ts +0 -4
  165. package/lib-es/bridge/prepareTransaction.d.ts.map +0 -1
  166. package/lib-es/bridge/prepareTransaction.js +0 -10
  167. package/lib-es/bridge/prepareTransaction.js.map +0 -1
  168. package/lib-es/bridge/signOperation.d.ts +0 -5
  169. package/lib-es/bridge/signOperation.d.ts.map +0 -1
  170. package/lib-es/bridge/signOperation.js +0 -72
  171. package/lib-es/bridge/signOperation.js.map +0 -1
  172. package/lib-es/bridge/synchronization.d.ts +0 -3
  173. package/lib-es/bridge/synchronization.d.ts.map +0 -1
  174. package/lib-es/bridge/synchronization.js +0 -78
  175. package/lib-es/bridge/synchronization.js.map +0 -1
  176. package/lib-es/bridge/synchronization.test.d.ts +0 -2
  177. package/lib-es/bridge/synchronization.test.d.ts.map +0 -1
  178. package/lib-es/bridge/synchronization.test.js +0 -135
  179. package/lib-es/bridge/synchronization.test.js.map +0 -1
  180. package/lib-es/bridge/transaction.d.ts.map +0 -1
  181. package/lib-es/bridge/transaction.js.map +0 -1
  182. package/src/bridge/broadcast.ts +0 -11
  183. package/src/bridge/createTransaction.ts +0 -13
  184. package/src/bridge/estimateMaxSpendable.ts +0 -25
  185. package/src/bridge/index.ts +0 -59
  186. package/src/bridge/prepareTransaction.ts +0 -18
  187. package/src/bridge/signOperation.ts +0 -100
  188. package/src/bridge/synchronization.test.ts +0 -153
  189. package/src/bridge/synchronization.ts +0 -108
  190. /package/lib/{bridge/transaction.js → transaction.js} +0 -0
  191. /package/lib-es/{bridge/transaction.js → transaction.js} +0 -0
@@ -0,0 +1,159 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTransactionStatus.test.js","sourceRoot":"","sources":["../../src/logic/getTransactionStatus.test.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export { estimateFees } from "./estimateFees";
6
6
  export { getBalance } from "./getBalance";
7
7
  export { lastBlock } from "./lastBlock";
8
8
  export { listOperations } from "./listOperations";
9
- export { RIPPLE_EPOCH, cachedRecipientIsNew, getNextValidSequence, removeCachedRecipientIsNew, } from "./utils";
9
+ export { getTransactionStatus } from "./getTransactionStatus";
10
+ export { RIPPLE_EPOCH, cachedRecipientIsNew, getNextValidSequence } from "./utils";
10
11
  export { parseAPIValue } from "./common";
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logic/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logic/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEnF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
@@ -5,6 +5,7 @@ export { estimateFees } from "./estimateFees";
5
5
  export { getBalance } from "./getBalance";
6
6
  export { lastBlock } from "./lastBlock";
7
7
  export { listOperations } from "./listOperations";
8
- export { RIPPLE_EPOCH, cachedRecipientIsNew, getNextValidSequence, removeCachedRecipientIsNew, } from "./utils";
8
+ export { getTransactionStatus } from "./getTransactionStatus";
9
+ export { RIPPLE_EPOCH, cachedRecipientIsNew, getNextValidSequence } from "./utils";
9
10
  export { parseAPIValue } from "./common";
10
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logic/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logic/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEnF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
@@ -5,5 +5,4 @@ export declare const RIPPLE_EPOCH = 946684800;
5
5
  export declare const validateTag: (tag: BigNumber) => boolean;
6
6
  export declare const getNextValidSequence: (address: string) => Promise<number>;
7
7
  export declare const cachedRecipientIsNew: (recipient: string) => Promise<boolean>;
8
- export declare const removeCachedRecipientIsNew: (recipient: string) => void;
9
8
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/logic/utils.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAIrC,eAAO,MAAM,UAAU,WAAoC,CAAC;AAE5D,kEAAkE;AAClE,eAAO,MAAM,YAAY,YAAY,CAAC;AAEtC,eAAO,MAAM,WAAW,QAAS,SAAS,YAIzC,CAAC;AAEF,eAAO,MAAM,oBAAoB,YAAmB,MAAM,oBAGzD,CAAC;AAcF,eAAO,MAAM,oBAAoB,cAAqB,MAAM,qBAI3D,CAAC;AACF,eAAO,MAAM,0BAA0B,cAAe,MAAM,SAE3D,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/logic/utils.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAIrC,eAAO,MAAM,UAAU,WAAoC,CAAC;AAE5D,kEAAkE;AAClE,eAAO,MAAM,YAAY,YAAY,CAAC;AAEtC,eAAO,MAAM,WAAW,QAAS,SAAS,YAIzC,CAAC;AAEF,eAAO,MAAM,oBAAoB,YAAmB,MAAM,oBAGzD,CAAC;AAsBF,eAAO,MAAM,oBAAoB,cAAqB,MAAM,KAAG,OAAO,CAAC,OAAO,CAe7E,CAAC"}
@@ -14,20 +14,25 @@ export const getNextValidSequence = async (address) => {
14
14
  function isRecipientValid(recipient) {
15
15
  return isValidClassicAddress(recipient);
16
16
  }
17
+ const recipientCache = new Map();
18
+ const TTL = 10 * 1000; // 10 seconds
17
19
  const recipientIsNew = async (recipient) => {
18
20
  if (!isRecipientValid(recipient))
19
21
  return false;
20
22
  const info = await getAccountInfo(recipient);
21
23
  return info.isNewAccount;
22
24
  };
23
- const cacheRecipientsNew = {};
24
25
  export const cachedRecipientIsNew = async (recipient) => {
25
- if (recipient in cacheRecipientsNew)
26
- return cacheRecipientsNew[recipient];
27
- cacheRecipientsNew[recipient] = await recipientIsNew(recipient);
28
- return cacheRecipientsNew[recipient];
29
- };
30
- export const removeCachedRecipientIsNew = (recipient) => {
31
- delete cacheRecipientsNew[recipient];
26
+ const now = Date.now();
27
+ const cached = recipientCache.get(recipient);
28
+ if (cached && now < cached.expiresAt) {
29
+ return cached.value;
30
+ }
31
+ const isNew = await recipientIsNew(recipient);
32
+ recipientCache.set(recipient, {
33
+ value: isNew,
34
+ expiresAt: now + TTL,
35
+ });
36
+ return isNew;
32
37
  };
33
38
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/logic/utils.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE5D,kEAAkE;AAClE,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC;AAEtC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAc,EAAE,EAAE;IAC5C,OAAO,CACL,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAC7F,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,OAAe,EAAE,EAAE;IAC5D,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO,OAAO,CAAC,QAAQ,CAAC;AAC1B,CAAC,CAAC;AAEF,SAAS,gBAAgB,CAAC,SAAiB;IACzC,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,cAAc,GAAG,KAAK,EAAE,SAAiB,EAAoB,EAAE;IACnE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAE/C,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC,YAAY,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAA4B,EAAE,CAAC;AACvD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,SAAiB,EAAE,EAAE;IAC9D,IAAI,SAAS,IAAI,kBAAkB;QAAE,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC1E,kBAAkB,CAAC,SAAS,CAAC,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAChE,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,SAAiB,EAAE,EAAE;IAC9D,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/logic/utils.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE5D,kEAAkE;AAClE,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC;AAEtC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAc,EAAE,EAAE;IAC5C,OAAO,CACL,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAC7F,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,OAAe,EAAE,EAAE;IAC5D,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO,OAAO,CAAC,QAAQ,CAAC;AAC1B,CAAC,CAAC;AAEF,SAAS,gBAAgB,CAAC,SAAiB;IACzC,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAC;AAC1C,CAAC;AAQD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAsB,CAAC;AACrD,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAEpC,MAAM,cAAc,GAAG,KAAK,EAAE,SAAiB,EAAoB,EAAE;IACnE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAE/C,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC,YAAY,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,SAAiB,EAAoB,EAAE;IAChF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAE7C,IAAI,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAC9C,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE;QAC5B,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,GAAG,GAAG,GAAG;KACrB,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bridgeDatasetTest.d.ts","sourceRoot":"","sources":["../../src/test/bridgeDatasetTest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGnD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,eAAO,MAAM,WAAW,sCAAsC,CAAC;AAE/D,eAAO,MAAM,OAAO,EAAE,WAAW,CAAC,WAAW,CAgJ5C,CAAC"}
1
+ {"version":3,"file":"bridgeDatasetTest.d.ts","sourceRoot":"","sources":["../../src/test/bridgeDatasetTest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGnD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,eAAO,MAAM,WAAW,sCAAsC,CAAC;AAE/D,eAAO,MAAM,OAAO,EAAE,WAAW,CAAC,WAAW,CAiJ5C,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import BigNumber from "bignumber.js";
2
2
  import { InvalidAddressBecauseDestinationIsAlsoSource } from "@ledgerhq/errors";
3
- import { fromTransactionRaw } from "../bridge/transaction";
3
+ import { fromTransactionRaw } from "../transaction";
4
4
  export const newAddress1 = "rZvBc5e2YR1A9otS3r9DyGh3NDP8XLLp4";
5
5
  export const dataset = {
6
6
  implementations: ["mock", "ripplejs"],
@@ -91,18 +91,18 @@ export const dataset = {
91
91
  recipient: "rageXHB6Q4VbvvWdTzKANwjeCT4HXFCKX7",
92
92
  amount: "10000000",
93
93
  tag: null,
94
- fee: "1",
94
+ fee: "10", // NOTE: fee is not customizable, this field is ignored
95
95
  feeCustomUnit: null,
96
96
  networkInfo: null,
97
97
  }),
98
98
  expectedStatus: {
99
99
  amount: new BigNumber("10000000"),
100
- estimatedFees: new BigNumber("1"),
100
+ estimatedFees: new BigNumber("10"), // NOTE: hardcoded fee
101
101
  errors: {
102
102
  recipient: new InvalidAddressBecauseDestinationIsAlsoSource(),
103
103
  },
104
104
  warnings: {},
105
- totalSpent: new BigNumber("10000001"),
105
+ totalSpent: new BigNumber("10000010"), // NOTE: amount + hardcoded fee
106
106
  },
107
107
  },
108
108
  {
@@ -112,16 +112,16 @@ export const dataset = {
112
112
  recipient: "rB6pwovsyrFWhPYUsjj9V3CHck985QjiXi",
113
113
  amount: "10000000",
114
114
  tag: 12345,
115
- fee: "1",
115
+ fee: "10", // NOTE: fee is not customizable, this field is ignored
116
116
  feeCustomUnit: null,
117
117
  networkInfo: null,
118
118
  }),
119
119
  expectedStatus: {
120
120
  amount: new BigNumber("10000000"),
121
- estimatedFees: new BigNumber("1"),
121
+ estimatedFees: new BigNumber("10"), // NOTE: hardcoded fee
122
122
  errors: {},
123
123
  warnings: {},
124
- totalSpent: new BigNumber("10000001"),
124
+ totalSpent: new BigNumber("10000010"), // NOTE: amount + hardcoded fee
125
125
  },
126
126
  },
127
127
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"bridgeDatasetTest.js","sourceRoot":"","sources":["../../src/test/bridgeDatasetTest.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,4CAA4C,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,MAAM,CAAC,MAAM,WAAW,GAAG,mCAAmC,CAAC;AAE/D,MAAM,CAAC,MAAM,OAAO,GAA6B;IAC/C,eAAe,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;IACrC,UAAU,EAAE;QACV,MAAM,EAAE;YACN,YAAY,EAAE;gBACZ;oBACE,IAAI,EAAE,eAAe;oBACrB,gBAAgB,EAAE,IAAI;oBACtB,oCAAoC;oBACpC,KAAK,EAAE;;;;;;;;;WASN;iBACF;aACF;YACD,QAAQ,EAAE;gBACR;oBACE,YAAY,EAAE;wBACZ,QAAQ;wBAER;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAgCF;wBACE,QAAQ;wBAER;;;;;;;;;;;;;;;;;;;;;;sBAsBF;wBACE;4BACE,IAAI,EAAE,2CAA2C;4BACjD,WAAW,EAAE,kBAAkB,CAAC;gCAC9B,MAAM,EAAE,KAAK;gCACb,SAAS,EAAE,oCAAoC;gCAC/C,MAAM,EAAE,UAAU;gCAClB,GAAG,EAAE,IAAI;gCACT,GAAG,EAAE,GAAG;gCACR,aAAa,EAAE,IAAI;gCACnB,WAAW,EAAE,IAAI;6BAClB,CAAC;4BACF,cAAc,EAAE;gCACd,MAAM,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC;gCACjC,aAAa,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC;gCACjC,MAAM,EAAE;oCACN,SAAS,EAAE,IAAI,4CAA4C,EAAE;iCAC9D;gCACD,QAAQ,EAAE,EAAE;gCACZ,UAAU,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC;6BACtC;yBACF;wBACD;4BACE,IAAI,EAAE,4BAA4B;4BAClC,WAAW,EAAE,kBAAkB,CAAC;gCAC9B,MAAM,EAAE,KAAK;gCACb,SAAS,EAAE,oCAAoC;gCAC/C,MAAM,EAAE,UAAU;gCAClB,GAAG,EAAE,KAAK;gCACV,GAAG,EAAE,GAAG;gCACR,aAAa,EAAE,IAAI;gCACnB,WAAW,EAAE,IAAI;6BAClB,CAAC;4BACF,cAAc,EAAE;gCACd,MAAM,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC;gCACjC,aAAa,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC;gCACjC,MAAM,EAAE,EAAE;gCACV,QAAQ,EAAE,EAAE;gCACZ,UAAU,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC;6BACtC;yBACF;qBACF;oBACD,GAAG,EAAE;wBACH,EAAE,EAAE,uDAAuD;wBAC3D,cAAc,EAAE,oCAAoC;wBACpD,IAAI,EAAE,OAAO;wBACb,cAAc,EAAE,EAAE;wBAClB,KAAK,EAAE,CAAC;wBACR,YAAY,EAAE,oCAAoC;wBAClD,gBAAgB,EAAE,iBAAiB;wBACnC,WAAW,EAAE,CAAC;wBACd,UAAU,EAAE,EAAE;wBACd,iBAAiB,EAAE,EAAE;wBACrB,UAAU,EAAE,QAAQ;wBACpB,YAAY,EAAE,EAAE;wBAChB,OAAO,EAAE,UAAU;qBACpB;iBACF;aACF;SACF;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"bridgeDatasetTest.js","sourceRoot":"","sources":["../../src/test/bridgeDatasetTest.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,4CAA4C,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGpD,MAAM,CAAC,MAAM,WAAW,GAAG,mCAAmC,CAAC;AAE/D,MAAM,CAAC,MAAM,OAAO,GAA6B;IAC/C,eAAe,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;IACrC,UAAU,EAAE;QACV,MAAM,EAAE;YACN,YAAY,EAAE;gBACZ;oBACE,IAAI,EAAE,eAAe;oBACrB,gBAAgB,EAAE,IAAI;oBACtB,oCAAoC;oBACpC,KAAK,EAAE;;;;;;;;;WASN;iBACF;aACF;YACD,QAAQ,EAAE;gBACR;oBACE,YAAY,EAAE;wBACZ,QAAQ;wBAER;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAgCF;wBACE,QAAQ;wBAER;;;;;;;;;;;;;;;;;;;;;;sBAsBF;wBACE;4BACE,IAAI,EAAE,2CAA2C;4BACjD,WAAW,EAAE,kBAAkB,CAAC;gCAC9B,MAAM,EAAE,KAAK;gCACb,SAAS,EAAE,oCAAoC;gCAC/C,MAAM,EAAE,UAAU;gCAClB,GAAG,EAAE,IAAI;gCACT,GAAG,EAAE,IAAI,EAAE,uDAAuD;gCAClE,aAAa,EAAE,IAAI;gCACnB,WAAW,EAAE,IAAI;6BAClB,CAAC;4BACF,cAAc,EAAE;gCACd,MAAM,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC;gCACjC,aAAa,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,sBAAsB;gCAE1D,MAAM,EAAE;oCACN,SAAS,EAAE,IAAI,4CAA4C,EAAE;iCAC9D;gCACD,QAAQ,EAAE,EAAE;gCACZ,UAAU,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC,EAAE,+BAA+B;6BACvE;yBACF;wBACD;4BACE,IAAI,EAAE,4BAA4B;4BAClC,WAAW,EAAE,kBAAkB,CAAC;gCAC9B,MAAM,EAAE,KAAK;gCACb,SAAS,EAAE,oCAAoC;gCAC/C,MAAM,EAAE,UAAU;gCAClB,GAAG,EAAE,KAAK;gCACV,GAAG,EAAE,IAAI,EAAE,uDAAuD;gCAClE,aAAa,EAAE,IAAI;gCACnB,WAAW,EAAE,IAAI;6BAClB,CAAC;4BACF,cAAc,EAAE;gCACd,MAAM,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC;gCACjC,aAAa,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,sBAAsB;gCAC1D,MAAM,EAAE,EAAE;gCACV,QAAQ,EAAE,EAAE;gCACZ,UAAU,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC,EAAE,+BAA+B;6BACvE;yBACF;qBACF;oBACD,GAAG,EAAE;wBACH,EAAE,EAAE,uDAAuD;wBAC3D,cAAc,EAAE,oCAAoC;wBACpD,IAAI,EAAE,OAAO;wBACb,cAAc,EAAE,EAAE;wBAClB,KAAK,EAAE,CAAC;wBACR,YAAY,EAAE,oCAAoC;wBAClD,gBAAgB,EAAE,iBAAiB;wBACnC,WAAW,EAAE,CAAC;wBACd,UAAU,EAAE,EAAE;wBACd,iBAAiB,EAAE,EAAE;wBACrB,UAAU,EAAE,QAAQ;wBACpB,YAAY,EAAE,EAAE;wBAChB,OAAO,EAAE,UAAU;qBACpB;iBACF;aACF;SACF;KACF;CACF,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { Transaction, TransactionRaw } from "../types";
1
+ import type { Transaction, TransactionRaw } from "./types";
2
2
  import type { Account } from "@ledgerhq/types-live";
3
3
  export declare const formatTransaction: ({ amount, recipient, fee, tag, useAllAmount }: Transaction, account: Account) => string;
4
4
  export declare const fromTransactionRaw: (tr: TransactionRaw) => Transaction;
@@ -0,0 +1 @@
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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { TypedMapMemo } from "@ledgerhq/coin-framework/api/types";
1
2
  export type AccountInfo = {
2
3
  isNewAccount: boolean;
3
4
  balance: string;
@@ -9,6 +10,12 @@ export type XrpMemo = {
9
10
  format?: string;
10
11
  type?: string;
11
12
  };
13
+ export type XrpMemoKind = "destinationTag" | "memo";
14
+ export type XrpMemoValueMap = {
15
+ destinationTag: string;
16
+ memos: string[];
17
+ };
18
+ export type XrpMapMemo = TypedMapMemo<XrpMemoValueMap>;
12
19
  type Order = "asc" | "desc";
13
20
  export type ListOperationsOptions = {
14
21
  limit?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/types/model.ts"],"names":[],"mappings":"AAAA,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,KAAK,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAC5B,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,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/coin-xrp",
3
- "version": "6.1.3",
3
+ "version": "6.2.0-nightly.3",
4
4
  "description": "Ledger XRP Coin integration",
5
5
  "keywords": [
6
6
  "Ledger",
@@ -41,7 +41,7 @@
41
41
  "lib/test/bot-specs"
42
42
  ],
43
43
  "transaction": [
44
- "lib/bridge/transaction"
44
+ "lib/transaction"
45
45
  ],
46
46
  "types": [
47
47
  "lib/types/index"
@@ -80,8 +80,8 @@
80
80
  "default": "./lib-es/test/bot-specs.js"
81
81
  },
82
82
  "./transaction": {
83
- "require": "./lib/bridge/transaction.js",
84
- "default": "./lib-es/bridge/transaction.js"
83
+ "require": "./lib/transaction.js",
84
+ "default": "./lib-es/transaction.js"
85
85
  },
86
86
  "./types": {
87
87
  "require": "./lib/types/index.js",
@@ -104,13 +104,13 @@
104
104
  "ripple-address-codec": "^5.0.0",
105
105
  "ripple-binary-codec": "^1.3.0",
106
106
  "rxjs": "^7.8.1",
107
- "@ledgerhq/coin-framework": "^5.2.0",
108
- "@ledgerhq/cryptoassets": "^13.18.0",
109
- "@ledgerhq/devices": "8.4.6",
107
+ "@ledgerhq/coin-framework": "^5.2.0-nightly.3",
108
+ "@ledgerhq/cryptoassets": "^13.18.1-nightly.0",
109
+ "@ledgerhq/devices": "8.4.5",
110
110
  "@ledgerhq/errors": "^6.21.0",
111
- "@ledgerhq/live-network": "^2.0.9",
112
- "@ledgerhq/types-live": "^6.72.0",
113
- "@ledgerhq/logs": "^6.13.0"
111
+ "@ledgerhq/live-network": "^2.0.9-nightly.0",
112
+ "@ledgerhq/types-live": "^6.72.0-nightly.1",
113
+ "@ledgerhq/logs": "^6.12.0"
114
114
  },
115
115
  "devDependencies": {
116
116
  "@faker-js/faker": "^8.4.1",
@@ -121,10 +121,9 @@
121
121
  "jest": "^29.7.0",
122
122
  "ripple-keypairs": "^2.0.0",
123
123
  "ts-jest": "^29.1.1",
124
- "jest-sonar": "0.2.16",
125
124
  "typescript": "^5.4.5",
126
- "@ledgerhq/disable-network-setup": "^0.0.0",
127
- "@ledgerhq/types-cryptoassets": "^7.23.0"
125
+ "@ledgerhq/types-cryptoassets": "^7.23.0",
126
+ "@ledgerhq/disable-network-setup": "^0.0.0"
128
127
  },
129
128
  "scripts": {
130
129
  "clean": "rimraf lib lib-es",
@@ -4,7 +4,7 @@ import { createApi } from ".";
4
4
  //import { sign } from "ripple-keypairs";
5
5
 
6
6
  describe("Xrp Api", () => {
7
- const SENDER = { address: "rh1HPuRVsYYvThxG2Bs1MfjmrVC73S16Fb" };
7
+ const SENDER = "rh1HPuRVsYYvThxG2Bs1MfjmrVC73S16Fb";
8
8
  const api = createApi({ node: "https://s.altnet.rippletest.net:51234" });
9
9
 
10
10
  describe("estimateFees", () => {
@@ -19,6 +19,10 @@ describe("Xrp Api", () => {
19
19
  sender: SENDER,
20
20
  amount,
21
21
  recipient: "rKtXXTVno77jhu6tto1MAXjepyuaKaLcqB",
22
+ memo: {
23
+ type: "map",
24
+ memos: new Map(),
25
+ },
22
26
  });
23
27
 
24
28
  // Then
@@ -29,15 +33,14 @@ describe("Xrp Api", () => {
29
33
  describe("listOperations", () => {
30
34
  it.skip("returns a list regarding address parameter", async () => {
31
35
  // When
32
- const [tx, _] = await api.listOperations(SENDER.address, { minHeight: 200 });
36
+ const [tx, _] = await api.listOperations(SENDER, { minHeight: 200 });
33
37
 
34
38
  // https://blockexplorer.one/xrp/testnet/address/rh1HPuRVsYYvThxG2Bs1MfjmrVC73S16Fb
35
39
  // as of 2025-03-18, the address has 287 transactions
36
40
  expect(tx.length).toBeGreaterThanOrEqual(287);
37
41
  tx.forEach(operation => {
38
42
  const isSenderOrReceipt =
39
- operation.senders.includes(SENDER.address) ||
40
- operation.recipients.includes(SENDER.address);
43
+ operation.senders.includes(SENDER) || operation.recipients.includes(SENDER);
41
44
  expect(isSenderOrReceipt).toBeTruthy();
42
45
  });
43
46
  });
@@ -81,7 +84,7 @@ describe("Xrp Api", () => {
81
84
 
82
85
  it("returns an amount above 0 when address has transactions", async () => {
83
86
  // When
84
- const result = await api.getBalance(SENDER.address);
87
+ const result = await api.getBalance(SENDER);
85
88
 
86
89
  // Then
87
90
  expect(result[0].asset).toEqual({ type: "native" });
@@ -93,7 +96,9 @@ describe("Xrp Api", () => {
93
96
  const result = await api.getBalance(SENDER_WITH_NO_TRANSACTION);
94
97
 
95
98
  // Then
96
- expect(result).toEqual([{ value: BigInt(0), asset: { type: "native" } }]);
99
+ expect(result).toEqual([
100
+ { locked: BigInt(1000000n), value: BigInt(0), asset: { type: "native" } },
101
+ ]);
97
102
  });
98
103
  });
99
104
 
@@ -108,10 +113,13 @@ describe("Xrp Api", () => {
108
113
  sender: SENDER,
109
114
  recipient: RECIPIENT,
110
115
  amount: BigInt(10),
116
+ memo: {
117
+ type: "map",
118
+ memos: new Map([["memos", ["testdata"]]]),
119
+ },
111
120
  });
112
-
113
121
  // Then
114
- expect(result.length).toEqual(162);
122
+ expect(result.length).toEqual(178);
115
123
  });
116
124
 
117
125
  it("should use default fees when user does not provide them for crafting a transaction", async () => {
@@ -121,6 +129,10 @@ describe("Xrp Api", () => {
121
129
  sender: SENDER,
122
130
  recipient: RECIPIENT,
123
131
  amount: BigInt(10),
132
+ memo: {
133
+ type: "map",
134
+ memos: new Map(),
135
+ },
124
136
  });
125
137
 
126
138
  const decodedTransaction = decode(result) as { Fee: string };
@@ -136,6 +148,10 @@ describe("Xrp Api", () => {
136
148
  sender: SENDER,
137
149
  recipient: RECIPIENT,
138
150
  amount: BigInt(10),
151
+ memo: {
152
+ type: "map",
153
+ memos: new Map(),
154
+ },
139
155
  },
140
156
  customFees,
141
157
  );
@@ -1,8 +1,8 @@
1
1
  import { Operation, TransactionIntent } from "@ledgerhq/coin-framework/api/types";
2
2
  import * as LogicFunctions from "../logic";
3
3
  import { GetTransactionsOptions } from "../network";
4
- import { NetworkInfo, XrpAsset } from "../types";
5
- import { createApi, TransactionIntentExtra, XrpSender } from "./index";
4
+ import { NetworkInfo, XrpAsset, XrpMapMemo } from "../types";
5
+ import { createApi } from "./index";
6
6
 
7
7
  const mockGetServerInfos = jest.fn().mockResolvedValue({
8
8
  info: {
@@ -285,11 +285,7 @@ describe("Testing craftTransaction function", () => {
285
285
  it("should use custom user fees when user provides it for crafting a transaction", async () => {
286
286
  const customFees = 99n;
287
287
  await api.craftTransaction(
288
- { sender: { address: "foo" } } as TransactionIntent<
289
- XrpAsset,
290
- TransactionIntentExtra,
291
- XrpSender
292
- >,
288
+ { sender: "foo" } as TransactionIntent<XrpAsset, XrpMapMemo>,
293
289
  customFees,
294
290
  );
295
291
 
@@ -303,11 +299,7 @@ describe("Testing craftTransaction function", () => {
303
299
  });
304
300
 
305
301
  it("should use default fees when user does not provide them for crafting a transaction", async () => {
306
- await api.craftTransaction({ sender: { address: "foo" } } as TransactionIntent<
307
- XrpAsset,
308
- TransactionIntentExtra,
309
- XrpSender
310
- >);
302
+ await api.craftTransaction({ sender: "foo" } as TransactionIntent<XrpAsset, XrpMapMemo>);
311
303
 
312
304
  expect(logicCraftTransactionSpy).toHaveBeenCalledWith(
313
305
  expect.any(Object),
@@ -320,8 +312,9 @@ describe("Testing craftTransaction function", () => {
320
312
 
321
313
  it("should pass signing pub key when user provides it for crafting a transaction", async () => {
322
314
  await api.craftTransaction({
323
- sender: { address: "foo", publicKey: "bar" },
324
- } as TransactionIntent<XrpAsset, TransactionIntentExtra, XrpSender>);
315
+ sender: "foo",
316
+ senderPublicKey: "bar",
317
+ } as TransactionIntent<XrpAsset, XrpMapMemo>);
325
318
 
326
319
  expect(logicCraftTransactionSpy).toHaveBeenCalledWith(
327
320
  expect.any(Object),
@@ -332,14 +325,19 @@ describe("Testing craftTransaction function", () => {
332
325
 
333
326
  it("should pass memos when user provides it for crafting a transaction", async () => {
334
327
  await api.craftTransaction({
335
- sender: { address: "foo" },
336
- memos: [{ data: "testdata", format: "testformat", type: "testtype" }],
337
- } as TransactionIntent<XrpAsset, TransactionIntentExtra, XrpSender>);
328
+ sender: "foo",
329
+ memo: {
330
+ type: "map",
331
+ memos: new Map([["memos", ["testdata"]]]),
332
+ },
333
+ } as TransactionIntent<XrpAsset, XrpMapMemo>);
338
334
 
339
335
  expect(logicCraftTransactionSpy).toHaveBeenCalledWith(
340
336
  expect.any(Object),
341
337
  expect.objectContaining({
342
- memos: [{ data: "testdata", format: "testformat", type: "testtype" }],
338
+ // NOTE: before
339
+ // memos: [{ data: "testdata", format: "testformat", type: "testtype" }],
340
+ memos: [{ data: "testdata", type: "memo" }],
343
341
  }),
344
342
  undefined,
345
343
  );
@@ -347,14 +345,17 @@ describe("Testing craftTransaction function", () => {
347
345
 
348
346
  it("should pass destination tag when user provides it for crafting a transaction", async () => {
349
347
  await api.craftTransaction({
350
- sender: { address: "foo" },
351
- destinationTag: 1337,
352
- } as TransactionIntent<XrpAsset, TransactionIntentExtra, XrpSender>);
348
+ sender: "foo",
349
+ memo: {
350
+ type: "map",
351
+ memos: new Map([["destinationTag", "1337"]]),
352
+ },
353
+ } as TransactionIntent<XrpAsset, XrpMapMemo>);
353
354
 
354
355
  expect(logicCraftTransactionSpy).toHaveBeenCalledWith(
355
356
  expect.any(Object),
356
357
  expect.objectContaining({
357
- destinationTag: 1337,
358
+ destinationTag: 1337, // logic should convert `value: string` -> `number`
358
359
  }),
359
360
  undefined,
360
361
  );