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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.unimportedrc.json +1 -3
  3. package/CHANGELOG.md +60 -16
  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 +12 -12
  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
@@ -1,39 +1,26 @@
1
1
  import { faker } from "@faker-js/faker";
2
2
  import { getBalance } from "./getBalance";
3
3
  const mockGetAccountInfo = jest.fn();
4
- const mockGetServerInfos = jest.fn();
5
4
  jest.mock("../network", () => ({
6
5
  getAccountInfo: (address) => mockGetAccountInfo(address),
7
- getServerInfos: () => mockGetServerInfos(),
8
6
  }));
9
7
  describe("getBalance", () => {
10
8
  afterEach(() => {
11
9
  mockGetAccountInfo.mockClear();
12
- mockGetServerInfos.mockClear();
13
10
  });
14
11
  it("returns the balance from Explorer", async () => {
15
- mockGetServerInfos.mockResolvedValue({
16
- info: {
17
- validated_ledger: {
18
- reserve_base_xrp: 23,
19
- reserve_inc_xrp: 5,
20
- },
21
- },
22
- });
23
12
  // Given
24
13
  const balance = faker.number.bigInt(100_000_000);
25
14
  const address = "ACCOUNT_ADDRESS";
26
15
  mockGetAccountInfo.mockResolvedValue({
27
16
  balance,
28
- ownerCount: 0,
29
17
  });
30
18
  // When
31
19
  const result = await getBalance(address);
32
20
  // Then
33
21
  expect(mockGetAccountInfo).toHaveBeenCalledTimes(1);
34
- expect(mockGetServerInfos).toHaveBeenCalledTimes(1);
35
22
  expect(mockGetAccountInfo.mock.lastCall[0]).toEqual(address);
36
- expect(result).toEqual([{ value: balance, asset: { type: "native" }, locked: 23000000n }]);
23
+ expect(result).toEqual([{ value: balance, asset: { type: "native" } }]);
37
24
  });
38
25
  });
39
26
  //# sourceMappingURL=getBalance.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getBalance.test.js","sourceRoot":"","sources":["../../src/logic/getBalance.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACrC,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACrC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7B,cAAc,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC;IAChE,cAAc,EAAE,GAAG,EAAE,CAAC,kBAAkB,EAAE;CAC3C,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,SAAS,CAAC,GAAG,EAAE;QACb,kBAAkB,CAAC,SAAS,EAAE,CAAC;QAC/B,kBAAkB,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,kBAAkB,CAAC,iBAAiB,CAAC;YACnC,IAAI,EAAE;gBACJ,gBAAgB,EAAE;oBAChB,gBAAgB,EAAE,EAAE;oBACpB,eAAe,EAAE,CAAC;iBACnB;aACF;SACF,CAAC,CAAC;QACH,QAAQ;QACR,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,iBAAiB,CAAC;QAClC,kBAAkB,CAAC,iBAAiB,CAAC;YACnC,OAAO;YACP,UAAU,EAAE,CAAC;SACd,CAAC,CAAC;QAEH,OAAO;QACP,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;QAEzC,OAAO;QACP,MAAM,CAAC,kBAAkB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,kBAAkB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"getBalance.test.js","sourceRoot":"","sources":["../../src/logic/getBalance.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACrC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7B,cAAc,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC;CACjE,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,SAAS,CAAC,GAAG,EAAE;QACb,kBAAkB,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,QAAQ;QACR,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,iBAAiB,CAAC;QAClC,kBAAkB,CAAC,iBAAiB,CAAC;YACnC,OAAO;SACR,CAAC,CAAC;QAEH,OAAO;QACP,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;QAEzC,OAAO;QACP,MAAM,CAAC,kBAAkB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -6,7 +6,6 @@ export { estimateFees } from "./estimateFees";
6
6
  export { getBalance } from "./getBalance";
7
7
  export { lastBlock } from "./lastBlock";
8
8
  export { listOperations } from "./listOperations";
9
- export { getTransactionStatus } from "./getTransactionStatus";
10
- export { RIPPLE_EPOCH, cachedRecipientIsNew, getNextValidSequence } from "./utils";
9
+ export { RIPPLE_EPOCH, cachedRecipientIsNew, getNextValidSequence, removeCachedRecipientIsNew, } from "./utils";
11
10
  export { parseAPIValue } from "./common";
12
11
  //# 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,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"}
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"}
@@ -5,7 +5,6 @@ export { estimateFees } from "./estimateFees";
5
5
  export { getBalance } from "./getBalance";
6
6
  export { lastBlock } from "./lastBlock";
7
7
  export { listOperations } from "./listOperations";
8
- export { getTransactionStatus } from "./getTransactionStatus";
9
- export { RIPPLE_EPOCH, cachedRecipientIsNew, getNextValidSequence } from "./utils";
8
+ export { RIPPLE_EPOCH, cachedRecipientIsNew, getNextValidSequence, removeCachedRecipientIsNew, } from "./utils";
10
9
  export { parseAPIValue } from "./common";
11
10
  //# 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,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"}
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"}
@@ -5,4 +5,5 @@ 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;
8
9
  //# 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;AAsBF,eAAO,MAAM,oBAAoB,cAAqB,MAAM,KAAG,OAAO,CAAC,OAAO,CAe7E,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;AAcF,eAAO,MAAM,oBAAoB,cAAqB,MAAM,qBAI3D,CAAC;AACF,eAAO,MAAM,0BAA0B,cAAe,MAAM,SAE3D,CAAC"}
@@ -14,25 +14,20 @@ 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
19
17
  const recipientIsNew = async (recipient) => {
20
18
  if (!isRecipientValid(recipient))
21
19
  return false;
22
20
  const info = await getAccountInfo(recipient);
23
21
  return info.isNewAccount;
24
22
  };
23
+ const cacheRecipientsNew = {};
25
24
  export const cachedRecipientIsNew = async (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;
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];
37
32
  };
38
33
  //# 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;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
+ {"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 +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,CAiJ5C,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,CAgJ5C,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import BigNumber from "bignumber.js";
2
2
  import { InvalidAddressBecauseDestinationIsAlsoSource } from "@ledgerhq/errors";
3
- import { fromTransactionRaw } from "../transaction";
3
+ import { fromTransactionRaw } from "../bridge/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: "10", // NOTE: fee is not customizable, this field is ignored
94
+ fee: "1",
95
95
  feeCustomUnit: null,
96
96
  networkInfo: null,
97
97
  }),
98
98
  expectedStatus: {
99
99
  amount: new BigNumber("10000000"),
100
- estimatedFees: new BigNumber("10"), // NOTE: hardcoded fee
100
+ estimatedFees: new BigNumber("1"),
101
101
  errors: {
102
102
  recipient: new InvalidAddressBecauseDestinationIsAlsoSource(),
103
103
  },
104
104
  warnings: {},
105
- totalSpent: new BigNumber("10000010"), // NOTE: amount + hardcoded fee
105
+ totalSpent: new BigNumber("10000001"),
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: "10", // NOTE: fee is not customizable, this field is ignored
115
+ fee: "1",
116
116
  feeCustomUnit: null,
117
117
  networkInfo: null,
118
118
  }),
119
119
  expectedStatus: {
120
120
  amount: new BigNumber("10000000"),
121
- estimatedFees: new BigNumber("10"), // NOTE: hardcoded fee
121
+ estimatedFees: new BigNumber("1"),
122
122
  errors: {},
123
123
  warnings: {},
124
- totalSpent: new BigNumber("10000010"), // NOTE: amount + hardcoded fee
124
+ totalSpent: new BigNumber("10000001"),
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,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
+ {"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,4 +1,3 @@
1
- import { TypedMapMemo } from "@ledgerhq/coin-framework/api/types";
2
1
  export type AccountInfo = {
3
2
  isNewAccount: boolean;
4
3
  balance: string;
@@ -10,12 +9,6 @@ export type XrpMemo = {
10
9
  format?: string;
11
10
  type?: string;
12
11
  };
13
- export type XrpMemoKind = "destinationTag" | "memo";
14
- export type XrpMemoValueMap = {
15
- destinationTag: string;
16
- memos: string[];
17
- };
18
- export type XrpMapMemo = TypedMapMemo<XrpMemoValueMap>;
19
12
  type Order = "asc" | "desc";
20
13
  export type ListOperationsOptions = {
21
14
  limit?: number;
@@ -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,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/coin-xrp",
3
- "version": "6.2.0-nightly.3",
3
+ "version": "6.2.0",
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/transaction"
44
+ "lib/bridge/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/transaction.js",
84
- "default": "./lib-es/transaction.js"
83
+ "require": "./lib/bridge/transaction.js",
84
+ "default": "./lib-es/bridge/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-nightly.3",
108
- "@ledgerhq/cryptoassets": "^13.18.1-nightly.0",
109
- "@ledgerhq/devices": "8.4.5",
107
+ "@ledgerhq/coin-framework": "^5.3.0",
108
+ "@ledgerhq/devices": "8.4.6",
110
109
  "@ledgerhq/errors": "^6.21.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"
110
+ "@ledgerhq/live-network": "^2.0.10",
111
+ "@ledgerhq/cryptoassets": "^13.18.1",
112
+ "@ledgerhq/types-live": "^6.73.0",
113
+ "@ledgerhq/logs": "^6.13.0"
114
114
  },
115
115
  "devDependencies": {
116
116
  "@faker-js/faker": "^8.4.1",
@@ -122,8 +122,8 @@
122
122
  "ripple-keypairs": "^2.0.0",
123
123
  "ts-jest": "^29.1.1",
124
124
  "typescript": "^5.4.5",
125
- "@ledgerhq/types-cryptoassets": "^7.23.0",
126
- "@ledgerhq/disable-network-setup": "^0.0.0"
125
+ "@ledgerhq/disable-network-setup": "^0.0.0",
126
+ "@ledgerhq/types-cryptoassets": "^7.23.0"
127
127
  },
128
128
  "scripts": {
129
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 = "rh1HPuRVsYYvThxG2Bs1MfjmrVC73S16Fb";
7
+ const SENDER = { address: "rh1HPuRVsYYvThxG2Bs1MfjmrVC73S16Fb" };
8
8
  const api = createApi({ node: "https://s.altnet.rippletest.net:51234" });
9
9
 
10
10
  describe("estimateFees", () => {
@@ -19,10 +19,6 @@ describe("Xrp Api", () => {
19
19
  sender: SENDER,
20
20
  amount,
21
21
  recipient: "rKtXXTVno77jhu6tto1MAXjepyuaKaLcqB",
22
- memo: {
23
- type: "map",
24
- memos: new Map(),
25
- },
26
22
  });
27
23
 
28
24
  // Then
@@ -33,14 +29,15 @@ describe("Xrp Api", () => {
33
29
  describe("listOperations", () => {
34
30
  it.skip("returns a list regarding address parameter", async () => {
35
31
  // When
36
- const [tx, _] = await api.listOperations(SENDER, { minHeight: 200 });
32
+ const [tx, _] = await api.listOperations(SENDER.address, { minHeight: 200 });
37
33
 
38
34
  // https://blockexplorer.one/xrp/testnet/address/rh1HPuRVsYYvThxG2Bs1MfjmrVC73S16Fb
39
35
  // as of 2025-03-18, the address has 287 transactions
40
36
  expect(tx.length).toBeGreaterThanOrEqual(287);
41
37
  tx.forEach(operation => {
42
38
  const isSenderOrReceipt =
43
- operation.senders.includes(SENDER) || operation.recipients.includes(SENDER);
39
+ operation.senders.includes(SENDER.address) ||
40
+ operation.recipients.includes(SENDER.address);
44
41
  expect(isSenderOrReceipt).toBeTruthy();
45
42
  });
46
43
  });
@@ -84,7 +81,7 @@ describe("Xrp Api", () => {
84
81
 
85
82
  it("returns an amount above 0 when address has transactions", async () => {
86
83
  // When
87
- const result = await api.getBalance(SENDER);
84
+ const result = await api.getBalance(SENDER.address);
88
85
 
89
86
  // Then
90
87
  expect(result[0].asset).toEqual({ type: "native" });
@@ -96,9 +93,7 @@ describe("Xrp Api", () => {
96
93
  const result = await api.getBalance(SENDER_WITH_NO_TRANSACTION);
97
94
 
98
95
  // Then
99
- expect(result).toEqual([
100
- { locked: BigInt(1000000n), value: BigInt(0), asset: { type: "native" } },
101
- ]);
96
+ expect(result).toEqual([{ value: BigInt(0), asset: { type: "native" } }]);
102
97
  });
103
98
  });
104
99
 
@@ -113,13 +108,10 @@ describe("Xrp Api", () => {
113
108
  sender: SENDER,
114
109
  recipient: RECIPIENT,
115
110
  amount: BigInt(10),
116
- memo: {
117
- type: "map",
118
- memos: new Map([["memos", ["testdata"]]]),
119
- },
120
111
  });
112
+
121
113
  // Then
122
- expect(result.length).toEqual(178);
114
+ expect(result.length).toEqual(162);
123
115
  });
124
116
 
125
117
  it("should use default fees when user does not provide them for crafting a transaction", async () => {
@@ -129,10 +121,6 @@ describe("Xrp Api", () => {
129
121
  sender: SENDER,
130
122
  recipient: RECIPIENT,
131
123
  amount: BigInt(10),
132
- memo: {
133
- type: "map",
134
- memos: new Map(),
135
- },
136
124
  });
137
125
 
138
126
  const decodedTransaction = decode(result) as { Fee: string };
@@ -148,10 +136,6 @@ describe("Xrp Api", () => {
148
136
  sender: SENDER,
149
137
  recipient: RECIPIENT,
150
138
  amount: BigInt(10),
151
- memo: {
152
- type: "map",
153
- memos: new Map(),
154
- },
155
139
  },
156
140
  customFees,
157
141
  );
@@ -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, XrpMapMemo } from "../types";
5
- import { createApi } from "./index";
4
+ import { NetworkInfo, XrpAsset } from "../types";
5
+ import { createApi, TransactionIntentExtra, XrpSender } from "./index";
6
6
 
7
7
  const mockGetServerInfos = jest.fn().mockResolvedValue({
8
8
  info: {
@@ -285,7 +285,11 @@ 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: "foo" } as TransactionIntent<XrpAsset, XrpMapMemo>,
288
+ { sender: { address: "foo" } } as TransactionIntent<
289
+ XrpAsset,
290
+ TransactionIntentExtra,
291
+ XrpSender
292
+ >,
289
293
  customFees,
290
294
  );
291
295
 
@@ -299,7 +303,11 @@ describe("Testing craftTransaction function", () => {
299
303
  });
300
304
 
301
305
  it("should use default fees when user does not provide them for crafting a transaction", async () => {
302
- await api.craftTransaction({ sender: "foo" } as TransactionIntent<XrpAsset, XrpMapMemo>);
306
+ await api.craftTransaction({ sender: { address: "foo" } } as TransactionIntent<
307
+ XrpAsset,
308
+ TransactionIntentExtra,
309
+ XrpSender
310
+ >);
303
311
 
304
312
  expect(logicCraftTransactionSpy).toHaveBeenCalledWith(
305
313
  expect.any(Object),
@@ -312,9 +320,8 @@ describe("Testing craftTransaction function", () => {
312
320
 
313
321
  it("should pass signing pub key when user provides it for crafting a transaction", async () => {
314
322
  await api.craftTransaction({
315
- sender: "foo",
316
- senderPublicKey: "bar",
317
- } as TransactionIntent<XrpAsset, XrpMapMemo>);
323
+ sender: { address: "foo", publicKey: "bar" },
324
+ } as TransactionIntent<XrpAsset, TransactionIntentExtra, XrpSender>);
318
325
 
319
326
  expect(logicCraftTransactionSpy).toHaveBeenCalledWith(
320
327
  expect.any(Object),
@@ -325,19 +332,14 @@ describe("Testing craftTransaction function", () => {
325
332
 
326
333
  it("should pass memos when user provides it for crafting a transaction", async () => {
327
334
  await api.craftTransaction({
328
- sender: "foo",
329
- memo: {
330
- type: "map",
331
- memos: new Map([["memos", ["testdata"]]]),
332
- },
333
- } as TransactionIntent<XrpAsset, XrpMapMemo>);
335
+ sender: { address: "foo" },
336
+ memos: [{ data: "testdata", format: "testformat", type: "testtype" }],
337
+ } as TransactionIntent<XrpAsset, TransactionIntentExtra, XrpSender>);
334
338
 
335
339
  expect(logicCraftTransactionSpy).toHaveBeenCalledWith(
336
340
  expect.any(Object),
337
341
  expect.objectContaining({
338
- // NOTE: before
339
- // memos: [{ data: "testdata", format: "testformat", type: "testtype" }],
340
- memos: [{ data: "testdata", type: "memo" }],
342
+ memos: [{ data: "testdata", format: "testformat", type: "testtype" }],
341
343
  }),
342
344
  undefined,
343
345
  );
@@ -345,17 +347,14 @@ describe("Testing craftTransaction function", () => {
345
347
 
346
348
  it("should pass destination tag when user provides it for crafting a transaction", async () => {
347
349
  await api.craftTransaction({
348
- sender: "foo",
349
- memo: {
350
- type: "map",
351
- memos: new Map([["destinationTag", "1337"]]),
352
- },
353
- } as TransactionIntent<XrpAsset, XrpMapMemo>);
350
+ sender: { address: "foo" },
351
+ destinationTag: 1337,
352
+ } as TransactionIntent<XrpAsset, TransactionIntentExtra, XrpSender>);
354
353
 
355
354
  expect(logicCraftTransactionSpy).toHaveBeenCalledWith(
356
355
  expect.any(Object),
357
356
  expect.objectContaining({
358
- destinationTag: 1337, // logic should convert `value: string` -> `number`
357
+ destinationTag: 1337,
359
358
  }),
360
359
  undefined,
361
360
  );
package/src/api/index.ts CHANGED
@@ -16,11 +16,11 @@ import {
16
16
  getNextValidSequence,
17
17
  lastBlock,
18
18
  listOperations,
19
- getTransactionStatus,
19
+ MemoInput,
20
20
  } from "../logic";
21
- import { ListOperationsOptions, XrpAsset, XrpMapMemo } from "../types";
21
+ import { ListOperationsOptions, XrpAsset } from "../types";
22
22
 
23
- export function createApi(config: XrpConfig): Api<XrpAsset, XrpMapMemo> {
23
+ export function createApi(config: XrpConfig): Api<XrpAsset, TransactionIntentExtra, XrpSender> {
24
24
  coinConfig.setCoinConfig(() => ({ ...config, status: { type: "active" } }));
25
25
 
26
26
  return {
@@ -31,45 +31,36 @@ export function createApi(config: XrpConfig): Api<XrpAsset, XrpMapMemo> {
31
31
  getBalance,
32
32
  lastBlock,
33
33
  listOperations: operations,
34
- validateIntent: getTransactionStatus,
35
34
  };
36
35
  }
37
36
 
37
+ export type TransactionIntentExtra = {
38
+ destinationTag?: number | null | undefined;
39
+ memos?: MemoInput[];
40
+ };
41
+
42
+ export type XrpSender = {
43
+ address: string;
44
+ publicKey?: string;
45
+ };
46
+
38
47
  async function craft(
39
- transactionIntent: TransactionIntent<XrpAsset, XrpMapMemo>,
48
+ transactionIntent: TransactionIntent<XrpAsset, TransactionIntentExtra, XrpSender>,
40
49
  customFees?: bigint,
41
50
  ): Promise<string> {
42
- const nextSequenceNumber = await getNextValidSequence(transactionIntent.sender);
51
+ const nextSequenceNumber = await getNextValidSequence(transactionIntent.sender.address);
43
52
  const estimatedFees = customFees !== undefined ? customFees : (await estimateFees()).fee;
44
-
45
- const memosMap =
46
- transactionIntent.memo?.type === "map" ? transactionIntent.memo.memos : new Map();
47
-
48
- const destinationTagValue = memosMap.get("destinationTag");
49
- const destinationTag =
50
- typeof destinationTagValue === "string" ? Number(destinationTagValue) : undefined;
51
-
52
- const memoStrings = memosMap.get("memos") as string[] | undefined;
53
-
54
- let memoEntries: { type: string; data: string }[] = [];
55
-
56
- if (Array.isArray(memoStrings) && memoStrings.length > 0) {
57
- memoEntries = memoStrings.map(value => ({ type: "memo", data: value }));
58
- }
59
-
60
53
  const tx = await craftTransaction(
61
- { address: transactionIntent.sender, nextSequenceNumber },
54
+ { address: transactionIntent.sender.address, nextSequenceNumber },
62
55
  {
63
56
  recipient: transactionIntent.recipient,
64
57
  amount: transactionIntent.amount,
65
58
  fee: estimatedFees,
66
- destinationTag,
67
- // NOTE: double check before/after here
68
- memos: memoEntries,
59
+ destinationTag: transactionIntent.destinationTag,
60
+ memos: transactionIntent.memos,
69
61
  },
70
- transactionIntent.senderPublicKey,
62
+ transactionIntent.sender.publicKey,
71
63
  );
72
-
73
64
  return tx.serializedTransaction;
74
65
  }
75
66
 
@@ -0,0 +1,11 @@
1
+ import { AccountBridge } from "@ledgerhq/types-live";
2
+ import { patchOperationWithHash } from "@ledgerhq/coin-framework/operation";
3
+ import { broadcast as broadcastLogic } from "../logic";
4
+ import { Transaction } from "../types";
5
+
6
+ export const broadcast: AccountBridge<Transaction>["broadcast"] = async ({
7
+ signedOperation: { signature, operation },
8
+ }) => {
9
+ const hash = await broadcastLogic(signature);
10
+ return patchOperationWithHash(operation, hash);
11
+ };
@@ -0,0 +1,13 @@
1
+ import BigNumber from "bignumber.js";
2
+ import { Transaction } from "../types";
3
+ import { AccountBridge } from "@ledgerhq/types-live";
4
+
5
+ export const createTransaction: AccountBridge<Transaction>["createTransaction"] = () => ({
6
+ family: "xrp",
7
+ amount: new BigNumber(0),
8
+ recipient: "",
9
+ fee: null,
10
+ tag: undefined,
11
+ networkInfo: null,
12
+ feeCustomUnit: null,
13
+ });
@@ -0,0 +1,25 @@
1
+ import BigNumber from "bignumber.js";
2
+ import { AccountBridge } from "@ledgerhq/types-live";
3
+ import { getMainAccount } from "@ledgerhq/coin-framework/account/index";
4
+ import { getAbandonSeedAddress } from "@ledgerhq/cryptoassets/abandonseed";
5
+ import { getTransactionStatus } from "./getTransactionStatus";
6
+ import { prepareTransaction } from "./prepareTransaction";
7
+ import { createTransaction } from "./createTransaction";
8
+ import { Transaction } from "../types";
9
+
10
+ export const estimateMaxSpendable: AccountBridge<Transaction>["estimateMaxSpendable"] = async ({
11
+ account,
12
+ parentAccount,
13
+ transaction,
14
+ }) => {
15
+ const mainAccount = getMainAccount(account, parentAccount);
16
+ const newTransaction = await prepareTransaction(mainAccount, {
17
+ ...createTransaction(account),
18
+ ...transaction,
19
+ recipient: transaction?.recipient || getAbandonSeedAddress("ripple"),
20
+ // public testing seed abandonx11,about
21
+ amount: new BigNumber(0),
22
+ });
23
+ const status = await getTransactionStatus(mainAccount, newTransaction);
24
+ return BigNumber.max(0, account.spendableBalance.minus(status.estimatedFees));
25
+ };