@ledgerhq/coin-stellar 6.26.0 → 6.26.2

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 (281) hide show
  1. package/.oxlintrc.json +7 -0
  2. package/CHANGELOG.md +12 -0
  3. package/LICENSE +194 -0
  4. package/knip.json +12 -0
  5. package/lib/api/index.d.ts +5 -5
  6. package/lib/api/index.d.ts.map +1 -1
  7. package/lib/api/index.js +12 -10
  8. package/lib/api/index.js.map +1 -1
  9. package/lib/config.d.ts +1 -1
  10. package/lib/config.d.ts.map +1 -1
  11. package/lib/config.js +2 -0
  12. package/lib/config.js.map +1 -1
  13. package/lib/constants.d.ts.map +1 -1
  14. package/lib/constants.js +3 -1
  15. package/lib/constants.js.map +1 -1
  16. package/lib/logic/broadcast.d.ts.map +1 -1
  17. package/lib/logic/broadcast.js +2 -0
  18. package/lib/logic/broadcast.js.map +1 -1
  19. package/lib/logic/combine.d.ts +1 -1
  20. package/lib/logic/combine.d.ts.map +1 -1
  21. package/lib/logic/combine.js +2 -0
  22. package/lib/logic/combine.js.map +1 -1
  23. package/lib/logic/common.d.ts +1 -1
  24. package/lib/logic/common.d.ts.map +1 -1
  25. package/lib/logic/common.js +4 -2
  26. package/lib/logic/common.js.map +1 -1
  27. package/lib/logic/craftTransaction.d.ts +1 -1
  28. package/lib/logic/craftTransaction.d.ts.map +1 -1
  29. package/lib/logic/craftTransaction.js +10 -8
  30. package/lib/logic/craftTransaction.js.map +1 -1
  31. package/lib/logic/estimateFees.d.ts.map +1 -1
  32. package/lib/logic/estimateFees.js +2 -0
  33. package/lib/logic/estimateFees.js.map +1 -1
  34. package/lib/logic/getBalance.d.ts +1 -1
  35. package/lib/logic/getBalance.d.ts.map +1 -1
  36. package/lib/logic/getBalance.js +4 -2
  37. package/lib/logic/getBalance.js.map +1 -1
  38. package/lib/logic/getBlock.d.ts +1 -1
  39. package/lib/logic/getBlock.d.ts.map +1 -1
  40. package/lib/logic/getBlock.js +39 -34
  41. package/lib/logic/getBlock.js.map +1 -1
  42. package/lib/logic/getBlockInfo.d.ts +1 -1
  43. package/lib/logic/getBlockInfo.d.ts.map +1 -1
  44. package/lib/logic/getBlockInfo.js +2 -0
  45. package/lib/logic/getBlockInfo.js.map +1 -1
  46. package/lib/logic/index.d.ts +12 -12
  47. package/lib/logic/index.d.ts.map +1 -1
  48. package/lib/logic/index.js +2 -0
  49. package/lib/logic/index.js.map +1 -1
  50. package/lib/logic/lastBlock.d.ts +1 -1
  51. package/lib/logic/lastBlock.d.ts.map +1 -1
  52. package/lib/logic/lastBlock.js +2 -0
  53. package/lib/logic/lastBlock.js.map +1 -1
  54. package/lib/logic/listOperations.d.ts +1 -1
  55. package/lib/logic/listOperations.d.ts.map +1 -1
  56. package/lib/logic/listOperations.js +6 -4
  57. package/lib/logic/listOperations.js.map +1 -1
  58. package/lib/logic/sdkWrapper.d.ts +1 -1
  59. package/lib/logic/sdkWrapper.d.ts.map +1 -1
  60. package/lib/logic/sdkWrapper.js +2 -0
  61. package/lib/logic/sdkWrapper.js.map +1 -1
  62. package/lib/logic/utils.d.ts.map +1 -1
  63. package/lib/logic/utils.js +4 -2
  64. package/lib/logic/utils.js.map +1 -1
  65. package/lib/logic/validateAddress.d.ts +1 -1
  66. package/lib/logic/validateAddress.d.ts.map +1 -1
  67. package/lib/logic/validateAddress.js +2 -0
  68. package/lib/logic/validateAddress.js.map +1 -1
  69. package/lib/logic/validateIntent.d.ts +2 -2
  70. package/lib/logic/validateIntent.d.ts.map +1 -1
  71. package/lib/logic/validateIntent.js +21 -19
  72. package/lib/logic/validateIntent.js.map +1 -1
  73. package/lib/logic/validateMemo.d.ts +1 -1
  74. package/lib/logic/validateMemo.d.ts.map +1 -1
  75. package/lib/logic/validateMemo.js +7 -5
  76. package/lib/logic/validateMemo.js.map +1 -1
  77. package/lib/network/horizon.d.ts +6 -7
  78. package/lib/network/horizon.d.ts.map +1 -1
  79. package/lib/network/horizon.js +48 -95
  80. package/lib/network/horizon.js.map +1 -1
  81. package/lib/network/horizonErrorBody.d.ts +29 -0
  82. package/lib/network/horizonErrorBody.d.ts.map +1 -0
  83. package/lib/network/horizonErrorBody.js +139 -0
  84. package/lib/network/horizonErrorBody.js.map +1 -0
  85. package/lib/network/horizonLedgerErrors.d.ts.map +1 -1
  86. package/lib/network/horizonLedgerErrors.js +28 -4
  87. package/lib/network/horizonLedgerErrors.js.map +1 -1
  88. package/lib/network/index.d.ts +1 -1
  89. package/lib/network/index.d.ts.map +1 -1
  90. package/lib/network/index.js +2 -0
  91. package/lib/network/index.js.map +1 -1
  92. package/lib/network/serialization.d.ts +6 -4
  93. package/lib/network/serialization.d.ts.map +1 -1
  94. package/lib/network/serialization.js +95 -91
  95. package/lib/network/serialization.js.map +1 -1
  96. package/lib/polyfill.d.ts.map +1 -1
  97. package/lib/polyfill.js +6 -4
  98. package/lib/polyfill.js.map +1 -1
  99. package/lib/supportedFeatures.d.ts +1 -1
  100. package/lib/supportedFeatures.d.ts.map +1 -1
  101. package/lib/supportedFeatures.js +3 -1
  102. package/lib/supportedFeatures.js.map +1 -1
  103. package/lib/types/errors.d.ts.map +1 -1
  104. package/lib/types/errors.js +14 -12
  105. package/lib/types/errors.js.map +1 -1
  106. package/lib/types/index.d.ts +2 -2
  107. package/lib/types/index.d.ts.map +1 -1
  108. package/lib/types/index.js +2 -0
  109. package/lib/types/index.js.map +1 -1
  110. package/lib/types/model.d.ts +6 -6
  111. package/lib/types/model.d.ts.map +1 -1
  112. package/lib/types/model.js +7 -5
  113. package/lib/types/model.js.map +1 -1
  114. package/lib-es/api/index.d.ts +5 -5
  115. package/lib-es/api/index.d.ts.map +1 -1
  116. package/lib-es/api/index.js +20 -18
  117. package/lib-es/api/index.js.map +1 -1
  118. package/lib-es/config.d.ts +1 -1
  119. package/lib-es/config.d.ts.map +1 -1
  120. package/lib-es/config.js +3 -1
  121. package/lib-es/config.js.map +1 -1
  122. package/lib-es/constants.d.ts.map +1 -1
  123. package/lib-es/constants.js +3 -1
  124. package/lib-es/constants.js.map +1 -1
  125. package/lib-es/logic/broadcast.d.ts.map +1 -1
  126. package/lib-es/logic/broadcast.js +3 -1
  127. package/lib-es/logic/broadcast.js.map +1 -1
  128. package/lib-es/logic/combine.d.ts +1 -1
  129. package/lib-es/logic/combine.d.ts.map +1 -1
  130. package/lib-es/logic/combine.js +3 -1
  131. package/lib-es/logic/combine.js.map +1 -1
  132. package/lib-es/logic/common.d.ts +1 -1
  133. package/lib-es/logic/common.d.ts.map +1 -1
  134. package/lib-es/logic/common.js +5 -3
  135. package/lib-es/logic/common.js.map +1 -1
  136. package/lib-es/logic/craftTransaction.d.ts +1 -1
  137. package/lib-es/logic/craftTransaction.d.ts.map +1 -1
  138. package/lib-es/logic/craftTransaction.js +15 -13
  139. package/lib-es/logic/craftTransaction.js.map +1 -1
  140. package/lib-es/logic/estimateFees.d.ts.map +1 -1
  141. package/lib-es/logic/estimateFees.js +3 -1
  142. package/lib-es/logic/estimateFees.js.map +1 -1
  143. package/lib-es/logic/getBalance.d.ts +1 -1
  144. package/lib-es/logic/getBalance.d.ts.map +1 -1
  145. package/lib-es/logic/getBalance.js +5 -3
  146. package/lib-es/logic/getBalance.js.map +1 -1
  147. package/lib-es/logic/getBlock.d.ts +1 -1
  148. package/lib-es/logic/getBlock.d.ts.map +1 -1
  149. package/lib-es/logic/getBlock.js +42 -37
  150. package/lib-es/logic/getBlock.js.map +1 -1
  151. package/lib-es/logic/getBlockInfo.d.ts +1 -1
  152. package/lib-es/logic/getBlockInfo.d.ts.map +1 -1
  153. package/lib-es/logic/getBlockInfo.js +3 -1
  154. package/lib-es/logic/getBlockInfo.js.map +1 -1
  155. package/lib-es/logic/index.d.ts +12 -12
  156. package/lib-es/logic/index.d.ts.map +1 -1
  157. package/lib-es/logic/index.js +14 -12
  158. package/lib-es/logic/index.js.map +1 -1
  159. package/lib-es/logic/lastBlock.d.ts +1 -1
  160. package/lib-es/logic/lastBlock.d.ts.map +1 -1
  161. package/lib-es/logic/lastBlock.js +3 -1
  162. package/lib-es/logic/lastBlock.js.map +1 -1
  163. package/lib-es/logic/listOperations.d.ts +1 -1
  164. package/lib-es/logic/listOperations.d.ts.map +1 -1
  165. package/lib-es/logic/listOperations.js +7 -5
  166. package/lib-es/logic/listOperations.js.map +1 -1
  167. package/lib-es/logic/sdkWrapper.d.ts +1 -1
  168. package/lib-es/logic/sdkWrapper.d.ts.map +1 -1
  169. package/lib-es/logic/sdkWrapper.js +4 -2
  170. package/lib-es/logic/sdkWrapper.js.map +1 -1
  171. package/lib-es/logic/utils.d.ts.map +1 -1
  172. package/lib-es/logic/utils.js +6 -4
  173. package/lib-es/logic/utils.js.map +1 -1
  174. package/lib-es/logic/validateAddress.d.ts +1 -1
  175. package/lib-es/logic/validateAddress.d.ts.map +1 -1
  176. package/lib-es/logic/validateAddress.js +3 -1
  177. package/lib-es/logic/validateAddress.js.map +1 -1
  178. package/lib-es/logic/validateIntent.d.ts +2 -2
  179. package/lib-es/logic/validateIntent.d.ts.map +1 -1
  180. package/lib-es/logic/validateIntent.js +30 -28
  181. package/lib-es/logic/validateIntent.js.map +1 -1
  182. package/lib-es/logic/validateMemo.d.ts +1 -1
  183. package/lib-es/logic/validateMemo.d.ts.map +1 -1
  184. package/lib-es/logic/validateMemo.js +8 -6
  185. package/lib-es/logic/validateMemo.js.map +1 -1
  186. package/lib-es/network/horizon.d.ts +6 -7
  187. package/lib-es/network/horizon.d.ts.map +1 -1
  188. package/lib-es/network/horizon.js +57 -104
  189. package/lib-es/network/horizon.js.map +1 -1
  190. package/lib-es/network/horizonErrorBody.d.ts +29 -0
  191. package/lib-es/network/horizonErrorBody.d.ts.map +1 -0
  192. package/lib-es/network/horizonErrorBody.js +134 -0
  193. package/lib-es/network/horizonErrorBody.js.map +1 -0
  194. package/lib-es/network/horizonLedgerErrors.d.ts.map +1 -1
  195. package/lib-es/network/horizonLedgerErrors.js +30 -6
  196. package/lib-es/network/horizonLedgerErrors.js.map +1 -1
  197. package/lib-es/network/index.d.ts +1 -1
  198. package/lib-es/network/index.d.ts.map +1 -1
  199. package/lib-es/network/index.js +3 -1
  200. package/lib-es/network/index.js.map +1 -1
  201. package/lib-es/network/serialization.d.ts +6 -4
  202. package/lib-es/network/serialization.d.ts.map +1 -1
  203. package/lib-es/network/serialization.js +97 -95
  204. package/lib-es/network/serialization.js.map +1 -1
  205. package/lib-es/polyfill.d.ts.map +1 -1
  206. package/lib-es/polyfill.js +7 -5
  207. package/lib-es/polyfill.js.map +1 -1
  208. package/lib-es/supportedFeatures.d.ts +1 -1
  209. package/lib-es/supportedFeatures.d.ts.map +1 -1
  210. package/lib-es/supportedFeatures.js +3 -1
  211. package/lib-es/supportedFeatures.js.map +1 -1
  212. package/lib-es/types/errors.d.ts.map +1 -1
  213. package/lib-es/types/errors.js +15 -13
  214. package/lib-es/types/errors.js.map +1 -1
  215. package/lib-es/types/index.d.ts +2 -2
  216. package/lib-es/types/index.d.ts.map +1 -1
  217. package/lib-es/types/index.js +4 -2
  218. package/lib-es/types/index.js.map +1 -1
  219. package/lib-es/types/model.d.ts +6 -6
  220. package/lib-es/types/model.d.ts.map +1 -1
  221. package/lib-es/types/model.js +7 -5
  222. package/lib-es/types/model.js.map +1 -1
  223. package/package.json +13 -16
  224. package/src/api/index.integ.test.ts +168 -163
  225. package/src/api/index.test.ts +106 -103
  226. package/src/api/index.ts +49 -46
  227. package/src/api/index_error.test.ts +48 -25
  228. package/src/config.ts +15 -12
  229. package/src/constants.ts +4 -1
  230. package/src/globals.d.ts +7 -5
  231. package/src/logic/broadcast.integ.test.ts +22 -19
  232. package/src/logic/broadcast.ts +5 -2
  233. package/src/logic/combine.test.ts +18 -15
  234. package/src/logic/combine.ts +8 -5
  235. package/src/logic/common.ts +9 -6
  236. package/src/logic/craftTransaction.test.ts +76 -75
  237. package/src/logic/craftTransaction.ts +46 -43
  238. package/src/logic/estimateFees.ts +6 -3
  239. package/src/logic/getBalance.test.ts +31 -28
  240. package/src/logic/getBalance.ts +13 -10
  241. package/src/logic/getBlock.integ.test.ts +40 -39
  242. package/src/logic/getBlock.test.ts +462 -415
  243. package/src/logic/getBlock.ts +142 -127
  244. package/src/logic/getBlockInfo.test.ts +72 -69
  245. package/src/logic/getBlockInfo.ts +15 -12
  246. package/src/logic/index.ts +15 -12
  247. package/src/logic/lastBlock.ts +6 -3
  248. package/src/logic/listOperations.ts +14 -11
  249. package/src/logic/listOperations.unit.test.ts +212 -209
  250. package/src/logic/networkWrappers.test.ts +32 -29
  251. package/src/logic/sdkWrapper.ts +19 -16
  252. package/src/logic/utils.ts +13 -10
  253. package/src/logic/validateAddress.test.ts +21 -18
  254. package/src/logic/validateAddress.ts +7 -4
  255. package/src/logic/validateIntent.test.ts +62 -59
  256. package/src/logic/validateIntent.ts +87 -84
  257. package/src/logic/validateMemo.test.ts +50 -47
  258. package/src/logic/validateMemo.ts +16 -13
  259. package/src/network/broadcastTransaction.test.ts +83 -63
  260. package/src/network/fetchLedgerOperations.unit.test.ts +155 -0
  261. package/src/network/horizon.integ.test.ts +45 -42
  262. package/src/network/horizon.test.ts +17 -14
  263. package/src/network/horizon.ts +244 -314
  264. package/src/network/horizon.unit.test.ts +238 -237
  265. package/src/network/horizonErrorBody.test.ts +133 -0
  266. package/src/network/horizonErrorBody.ts +178 -0
  267. package/src/network/horizonLedgerErrors.test.ts +150 -78
  268. package/src/network/horizonLedgerErrors.ts +47 -20
  269. package/src/network/index.ts +4 -1
  270. package/src/network/registerHorizonInterceptors.test.ts +163 -160
  271. package/src/network/serialization.ts +232 -227
  272. package/src/network/serialization.unit.test.ts +801 -798
  273. package/src/polyfill.ts +18 -15
  274. package/src/supportedFeatures.ts +6 -3
  275. package/src/types/errors.ts +33 -32
  276. package/src/types/index.ts +5 -2
  277. package/src/types/model.ts +55 -52
  278. package/tsconfig.json +1 -1
  279. package/.unimportedrc.json +0 -17
  280. package/LICENSE.txt +0 -21
  281. package/src/network/fetchLedgerOperations.nock.unit.test.ts +0 -156
@@ -1,17 +1,19 @@
1
- import { formatCurrencyUnit } from "@ledgerhq/coin-module-framework/currencies/index";
2
- import { AmountRequired, InvalidAddress, InvalidAddressBecauseDestinationIsAlsoSource, NotEnoughBalance, NotEnoughBalanceBecauseDestinationNotCreated, NotEnoughSpendableBalance, RecipientRequired, } from "@ledgerhq/errors";
3
- import BigNumber from "bignumber.js";
4
- import { fetchAccountNetworkInfo, getRecipientAccount } from "../network";
5
- import { fetchAccount } from "../network/horizon";
6
- import { BASE_RESERVE, MIN_BALANCE } from "../network/serialization";
7
- import { StellarAssetNotAccepted, StellarAssetNotFound, StellarAssetRequired, StellarFeeSmallerThanBase, StellarFeeSmallerThanRecommended, StellarMuxedAccountNotExist, StellarNotEnoughNativeBalance, StellarNotEnoughNativeBalanceToAddTrustline, StellarSourceHasMultiSign, StellarWrongMemoFormat, } from "../types";
8
- import { isAccountMultiSign, isAddressValid } from "./utils";
9
- import { validateMemo } from "./validateMemo";
1
+ // SPDX-FileCopyrightText: © 2026 LEDGER SAS
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { formatCurrencyUnit } from '@ledgerhq/coin-module-framework/currencies/index';
4
+ import { AmountRequired, InvalidAddress, InvalidAddressBecauseDestinationIsAlsoSource, NotEnoughBalance, NotEnoughBalanceBecauseDestinationNotCreated, NotEnoughSpendableBalance, RecipientRequired, } from '@ledgerhq/errors';
5
+ import BigNumber from 'bignumber.js';
6
+ import { fetchAccountNetworkInfo, getRecipientAccount } from '../network';
7
+ import { fetchAccount } from '../network/horizon';
8
+ import { BASE_RESERVE, MIN_BALANCE } from '../network/serialization';
9
+ import { StellarAssetNotAccepted, StellarAssetNotFound, StellarAssetRequired, StellarFeeSmallerThanBase, StellarFeeSmallerThanRecommended, StellarMuxedAccountNotExist, StellarNotEnoughNativeBalance, StellarNotEnoughNativeBalanceToAddTrustline, StellarSourceHasMultiSign, StellarWrongMemoFormat, } from '../types';
10
+ import { isAccountMultiSign, isAddressValid } from './utils';
11
+ import { validateMemo } from './validateMemo';
10
12
  export const validateIntent = async (transactionIntent, balances, customFees) => {
11
13
  const errors = {};
12
14
  const warnings = {};
13
15
  const useAllAmount = !!transactionIntent.useAllAmount;
14
- const destinationNotExistMessage = new NotEnoughBalanceBecauseDestinationNotCreated("", {
16
+ const destinationNotExistMessage = new NotEnoughBalanceBecauseDestinationNotCreated('', {
15
17
  minimalAmount: `${MIN_BALANCE} XLM`,
16
18
  });
17
19
  const { spendableBalance, balance } = await fetchAccount(transactionIntent.sender);
@@ -20,7 +22,7 @@ export const validateIntent = async (transactionIntent, balances, customFees) =>
20
22
  const baseReserve = networkInfo.baseReserve
21
23
  ? BigInt(Math.round(networkInfo.baseReserve.toNumber() * 10)) / 10n
22
24
  : 0n;
23
- const isAssetPayment = transactionIntent.asset.type !== "native";
25
+ const isAssetPayment = transactionIntent.asset.type !== 'native';
24
26
  const nativeBalance = BigInt(balance.toString());
25
27
  const nativeAmountAvailable = BigInt(spendableBalance.toString()) - estimatedFees;
26
28
  let amount = 0n;
@@ -30,8 +32,8 @@ export const validateIntent = async (transactionIntent, balances, customFees) =>
30
32
  if (!errors.amount && nativeAmountAvailable < 0) {
31
33
  errors.amount = new StellarNotEnoughNativeBalance();
32
34
  }
33
- const networkInfoBaseFee = BigInt(networkInfo.baseFee.toString() || "0");
34
- const networkFees = BigInt(networkInfo.fees.toString() || "0");
35
+ const networkInfoBaseFee = BigInt(networkInfo.baseFee.toString() || '0');
36
+ const networkFees = BigInt(networkInfo.fees.toString() || '0');
35
37
  // Entered fee is smaller than base fee
36
38
  if (estimatedFees < networkInfoBaseFee) {
37
39
  errors.transaction = new StellarFeeSmallerThanBase();
@@ -41,13 +43,13 @@ export const validateIntent = async (transactionIntent, balances, customFees) =>
41
43
  warnings.transaction = new StellarFeeSmallerThanRecommended();
42
44
  }
43
45
  // Operation specific checks
44
- if (transactionIntent.type === "changeTrust") {
46
+ if (transactionIntent.type === 'changeTrust') {
45
47
  // Check asset provided
46
- if (transactionIntent.asset.type !== "native" &&
47
- (("assetReference" in transactionIntent.asset && !transactionIntent.asset.assetReference) ||
48
- ("assetOwner" in transactionIntent.asset && !transactionIntent.asset.assetOwner))) {
48
+ if (transactionIntent.asset.type !== 'native' &&
49
+ (('assetReference' in transactionIntent.asset && !transactionIntent.asset.assetReference) ||
50
+ ('assetOwner' in transactionIntent.asset && !transactionIntent.asset.assetOwner))) {
49
51
  // This is unlikely
50
- errors.transaction = new StellarAssetRequired("");
52
+ errors.transaction = new StellarAssetRequired('');
51
53
  }
52
54
  // Has enough native balance to add new trustline
53
55
  // NOTE: need to do this as BASE_RESERVE is 0.5
@@ -62,11 +64,11 @@ export const validateIntent = async (transactionIntent, balances, customFees) =>
62
64
  // Payment
63
65
  // Check recipient address
64
66
  if (!transactionIntent.recipient) {
65
- errors.recipient = new RecipientRequired("");
67
+ errors.recipient = new RecipientRequired('');
66
68
  }
67
69
  else if (!isAddressValid(transactionIntent.recipient)) {
68
- errors.recipient = new InvalidAddress("", {
69
- currencyName: transactionIntent.asset.name ?? "", // NOTE: before account.currencyName,
70
+ errors.recipient = new InvalidAddress('', {
71
+ currencyName: transactionIntent.asset.name ?? '', // NOTE: before account.currencyName,
70
72
  });
71
73
  }
72
74
  else if (transactionIntent.sender === transactionIntent.recipient) {
@@ -92,7 +94,7 @@ export const validateIntent = async (transactionIntent, balances, customFees) =>
92
94
  // Asset payment
93
95
  if (isAssetPayment) {
94
96
  const asset = transactionIntent.asset;
95
- if (asset.type === "native" || (!("assetReference" in asset) && !("assetOwner" in asset))) {
97
+ if (asset.type === 'native' || (!('assetReference' in asset) && !('assetOwner' in asset))) {
96
98
  throw new StellarAssetNotFound();
97
99
  }
98
100
  // Check recipient account accepts asset
@@ -100,14 +102,14 @@ export const validateIntent = async (transactionIntent, balances, customFees) =>
100
102
  !errors.recipient &&
101
103
  !warnings.recipient &&
102
104
  !recipientAccount.assetIds.includes(`${asset.assetReference}:${asset.assetOwner}`)) {
103
- errors.recipient = new StellarAssetNotAccepted("", {
105
+ errors.recipient = new StellarAssetNotAccepted('', {
104
106
  assetCode: asset.assetReference,
105
107
  });
106
108
  }
107
- const assetBalance = balances.find(b => b.asset.type !== "native" &&
108
- "assetReference" in b.asset &&
109
+ const assetBalance = balances.find((b) => b.asset.type !== 'native' &&
110
+ 'assetReference' in b.asset &&
109
111
  b.asset.assetReference === asset.assetReference &&
110
- "assetOwner" in b.asset &&
112
+ 'assetOwner' in b.asset &&
111
113
  b.asset.assetOwner === asset.assetOwner);
112
114
  if (!assetBalance) {
113
115
  // This is unlikely
@@ -140,7 +142,7 @@ export const validateIntent = async (transactionIntent, balances, customFees) =>
140
142
  disableRounding: true,
141
143
  showCode: true,
142
144
  })
143
- : "Unknown unit",
145
+ : 'Unknown unit',
144
146
  });
145
147
  }
146
148
  if (!errors.recipient && !errors.amount && (amount < 0n || totalSpent > nativeBalance)) {
@@ -156,7 +158,7 @@ export const validateIntent = async (transactionIntent, balances, customFees) =>
156
158
  if (await isAccountMultiSign(transactionIntent.sender)) {
157
159
  errors.recipient = new StellarSourceHasMultiSign();
158
160
  }
159
- if (transactionIntent?.memo?.type !== "NO_MEMO" &&
161
+ if (transactionIntent?.memo?.type !== 'NO_MEMO' &&
160
162
  !validateMemo(transactionIntent?.memo?.value, transactionIntent?.memo?.type)) {
161
163
  errors.transaction = new StellarWrongMemoFormat();
162
164
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validateIntent.js","sourceRoot":"","sources":["../../src/logic/validateIntent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validateIntent.js","sourceRoot":"","sources":["../../src/logic/validateIntent.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { StellarMemoKind } from "../types/model";
1
+ import { StellarMemoKind } from '../types/model';
2
2
  export declare const MEMO_TEXT_MAXIMUM_SIZE = 28;
3
3
  export declare const MEMO_HASH_FIXED_SIZE = 64;
4
4
  export declare function validateMemo(memo: string, type: StellarMemoKind): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"validateMemo.d.ts","sourceRoot":"","sources":["../../src/logic/validateMemo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAYzE"}
1
+ {"version":3,"file":"validateMemo.d.ts","sourceRoot":"","sources":["../../src/logic/validateMemo.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEhD,eAAO,MAAM,sBAAsB,KAAK,CAAA;AACxC,eAAO,MAAM,oBAAoB,KAAK,CAAA;AAEtC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAYzE"}
@@ -1,16 +1,18 @@
1
- import BigNumber from "bignumber.js";
1
+ // SPDX-FileCopyrightText: © 2026 LEDGER SAS
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import BigNumber from 'bignumber.js';
2
4
  export const MEMO_TEXT_MAXIMUM_SIZE = 28;
3
5
  export const MEMO_HASH_FIXED_SIZE = 64;
4
6
  export function validateMemo(memo, type) {
5
7
  switch (type) {
6
- case "NO_MEMO":
8
+ case 'NO_MEMO':
7
9
  return !memo || memo.length === 0;
8
- case "MEMO_TEXT":
10
+ case 'MEMO_TEXT':
9
11
  return memo.length <= MEMO_TEXT_MAXIMUM_SIZE;
10
- case "MEMO_ID":
12
+ case 'MEMO_ID':
11
13
  return !new BigNumber(memo.toString()).isNaN();
12
- case "MEMO_HASH":
13
- case "MEMO_RETURN":
14
+ case 'MEMO_HASH':
15
+ case 'MEMO_RETURN':
14
16
  return memo.length === 64;
15
17
  }
16
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validateMemo.js","sourceRoot":"","sources":["../../src/logic/validateMemo.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAGrC,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AACzC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEvC,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,IAAqB;IAC9D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;QACpC,KAAK,WAAW;YACd,OAAO,IAAI,CAAC,MAAM,IAAI,sBAAsB,CAAC;QAC/C,KAAK,SAAS;YACZ,OAAO,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACjD,KAAK,WAAW,CAAC;QACjB,KAAK,aAAa;YAChB,OAAO,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"validateMemo.js","sourceRoot":"","sources":["../../src/logic/validateMemo.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,sCAAsC;AAEtC,OAAO,SAAS,MAAM,cAAc,CAAA;AAGpC,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAA;AACxC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAA;AAEtC,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,IAAqB;IAC9D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAA;QACnC,KAAK,WAAW;YACd,OAAO,IAAI,CAAC,MAAM,IAAI,sBAAsB,CAAA;QAC9C,KAAK,SAAS;YACZ,OAAO,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;QAChD,KAAK,WAAW,CAAC;QACjB,KAAK,aAAa;YAChB,OAAO,IAAI,CAAC,MAAM,KAAK,EAAE,CAAA;IAC7B,CAAC;AACH,CAAC"}
@@ -1,8 +1,7 @@
1
- import type { Operation, Page } from "@ledgerhq/coin-module-framework/api/types";
2
- import type { CacheRes } from "@ledgerhq/live-network/cache";
3
- import { Horizon } from "@stellar/stellar-sdk";
4
- import { BigNumber } from "bignumber.js";
5
- import { type BalanceAsset, type NetworkInfo, type RawOperation, type Signer, NetworkCongestionLevel } from "../types";
1
+ import type { Operation, Page } from '@ledgerhq/coin-module-framework/api/types';
2
+ import type { CacheRes } from '@ledgerhq/live-network/cache';
3
+ import { Horizon } from '@stellar/stellar-sdk';
4
+ import { type BalanceAsset, type NetworkInfo, type RawOperation, type Signer, NetworkCongestionLevel } from '../types';
6
5
  /**
7
6
  * Register logging and URL-fix interceptors on Horizon.AxiosClient.
8
7
  * Must be called once after coinConfig is initialised (i.e. inside createApi).
@@ -42,12 +41,12 @@ export declare function fetchAccount(addr: string): Promise<{
42
41
  *
43
42
  * @return {Operation[]}
44
43
  */
45
- export declare function fetchAllOperations(accountId: string, addr: string, order: "asc" | "desc", cursor?: string, maxOperations?: number): Promise<Operation[]>;
44
+ export declare function fetchAllOperations(accountId: string, addr: string, order: 'asc' | 'desc', cursor?: string, maxOperations?: number): Promise<Operation[]>;
46
45
  export declare function fetchOperations({ accountId, addr, minHeight, order, cursor, limit, }: {
47
46
  accountId: string;
48
47
  addr: string;
49
48
  minHeight: number;
50
- order: "asc" | "desc";
49
+ order: 'asc' | 'desc';
51
50
  cursor: string | undefined;
52
51
  limit?: number | undefined;
53
52
  }): Promise<Page<Operation>>;
@@ -1 +1 @@
1
- {"version":3,"file":"horizon.d.ts","sourceRoot":"","sources":["../../src/network/horizon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"horizon.d.ts","sourceRoot":"","sources":["../../src/network/horizon.ts"],"names":[],"mappings":"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"}
@@ -1,75 +1,29 @@
1
- import { LedgerAPI4xx, LedgerAPI5xx, NetworkDown } from "@ledgerhq/errors";
2
- import { makeLRUCache } from "@ledgerhq/live-network/cache";
3
- import { log } from "@ledgerhq/logs";
4
- import { BadResponseError, BASE_FEE, Horizon, MuxedAccount, NetworkError, Networks, NotFoundError, Transaction as StellarSdkTransaction, StrKey, xdr, } from "@stellar/stellar-sdk";
5
- import { BigNumber } from "bignumber.js";
6
- import coinConfig from "../config";
7
- import { patchHermesTypedArraysIfNeeded, unpatchHermesTypedArrays } from "../polyfill";
8
- import { StellarBroadcastFailedError } from "../types/errors";
9
- import { NetworkCongestionLevel, } from "../types";
10
- import { getReservedBalance, rawOperationsToOperations } from "./serialization";
11
- import { throwHorizonLedgerOrOperationsError } from "./horizonLedgerErrors";
12
- import { parseAPIValue } from "../logic/common";
1
+ // SPDX-FileCopyrightText: © 2026 LEDGER SAS
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { LedgerAPI4xx, LedgerAPI5xx, NetworkDown } from '@ledgerhq/errors';
4
+ import { makeLRUCache } from '@ledgerhq/live-network/cache';
5
+ import { log } from '@ledgerhq/logs';
6
+ import { BASE_FEE, Horizon, MuxedAccount, NetworkError, Networks, NotFoundError, Transaction as StellarSdkTransaction, StrKey, xdr, } from '@stellar/stellar-sdk';
7
+ import { BigNumber } from 'bignumber.js';
8
+ import coinConfig from '../config';
9
+ import { parseAPIValue } from '../logic/common';
10
+ import { patchHermesTypedArraysIfNeeded, unpatchHermesTypedArrays } from '../polyfill';
11
+ import { NetworkCongestionLevel, } from '../types';
12
+ import { StellarBroadcastFailedError } from '../types/errors';
13
+ import { documentationSummaryFromHorizonBody, getHorizonErrorBody, } from './horizonErrorBody';
14
+ import { throwHorizonLedgerOrOperationsError } from './horizonLedgerErrors';
15
+ import { getReservedBalance, rawOperationsToOperations } from './serialization';
13
16
  const FALLBACK_BASE_FEE = 100;
14
17
  const TRESHOLD_LOW = 0.5;
15
18
  const TRESHOLD_MEDIUM = 0.75;
16
19
  const FETCH_LIMIT = 100;
17
- const STELLAR_TX_RESULT_CODES_DOC_URL = "https://developers.stellar.org/docs/data/apis/horizon/api-reference/errors/result-codes/transactions";
18
- /** Horizon `extras.result_codes.transaction` → one-line description (Stellar docs). */
19
- const HORIZON_TRANSACTION_RESULT_CODE_DOCUMENTATION = {
20
- tx_success: "The transaction succeeded.",
21
- tx_failed: "One of the operations failed (none were applied).",
22
- tx_too_early: "The ledger closeTime was before the minTime.",
23
- tx_too_late: "The ledger closeTime was after the maxTime.",
24
- tx_missing_operation: "No operation was specified.",
25
- tx_bad_seq: "Sequence number does not match source account.",
26
- tx_bad_auth: "Too few valid signatures / wrong network.",
27
- tx_insufficient_balance: "Fee would bring account below reserve.",
28
- tx_no_source_account: "Source account not found.",
29
- tx_insufficient_fee: "Fee is too small.",
30
- tx_bad_auth_extra: "Unused signatures attached to transaction.",
31
- tx_internal_error: "An unknown error occurred.",
32
- tx_fee_bump_inner_success: "Fee bump inner transaction succeeded.",
33
- tx_fee_bump_inner_failed: "Fee bump inner transaction failed.",
34
- tx_not_supported: "Transaction type not supported.",
35
- tx_bad_sponsorship: "Sponsorship is invalid.",
36
- tx_bad_min_seq_age_or_gap: "Minimum sequence age or gap precondition failed.",
37
- tx_malformed: "Transaction is malformed.",
38
- tx_soroban_invalid: "Soroban transaction is invalid.",
39
- };
40
- function isHorizonSubmitErrorBody(data) {
41
- return !!(data &&
42
- typeof data === "object" &&
43
- "extras" in data &&
44
- typeof data.extras === "object" &&
45
- data.extras !== null &&
46
- "result_codes" in data.extras &&
47
- data.extras.result_codes !== undefined &&
48
- typeof data.extras.result_codes === "object");
49
- }
50
- /**
51
- * Horizon submit failures are usually {@link BadResponseError} with `response` = problem+json body.
52
- * In practice axios rejects with `AxiosError` first; the SDK's `.catch` forwards it unchanged (see js-stellar-sdk horizon/server.js),
53
- * so the Horizon body lives on `error.response.data`.
54
- */
55
- function getHorizonBodyFromSubmitFailure(error) {
56
- if (error instanceof BadResponseError && isHorizonSubmitErrorBody(error.response)) {
57
- return error.response;
58
- }
59
- if (error && typeof error === "object" && "response" in error) {
60
- const data = error.response?.data;
61
- if (isHorizonSubmitErrorBody(data)) {
62
- return data;
63
- }
64
- }
65
- return null;
66
- }
20
+ const STELLAR_TX_RESULT_CODES_DOC_URL = 'https://developers.stellar.org/docs/data/apis/horizon/api-reference/errors/result-codes/transactions';
67
21
  function decodeTransactionResultFields(resultXdrBase64) {
68
22
  if (!resultXdrBase64) {
69
23
  return undefined;
70
24
  }
71
25
  try {
72
- const tr = xdr.TransactionResult.fromXDR(resultXdrBase64, "base64");
26
+ const tr = xdr.TransactionResult.fromXDR(resultXdrBase64, 'base64');
73
27
  const feeChargedStroops = tr.feeCharged().toString();
74
28
  const resultXdrSwitchName = tr.result().switch().name;
75
29
  const decodedResultXdr = {
@@ -86,17 +40,15 @@ function decodeTransactionResultFields(resultXdrBase64) {
86
40
  }
87
41
  function makeBroadcastFailedError(body, cause) {
88
42
  const extras = body.extras;
89
- const horizonTransactionCode = extras?.result_codes?.transaction ?? "";
43
+ const horizonTransactionCode = extras?.result_codes?.transaction ?? '';
90
44
  const horizonOperationCodes = extras?.result_codes?.operations;
91
- const documentationSummary = (horizonTransactionCode &&
92
- HORIZON_TRANSACTION_RESULT_CODE_DOCUMENTATION[horizonTransactionCode]) ||
93
- "Unknown transaction result code.";
45
+ const documentationSummary = documentationSummaryFromHorizonBody(body);
94
46
  const decodedResult = decodeTransactionResultFields(extras?.result_xdr);
95
47
  const feeChargedStroops = decodedResult?.feeChargedStroops;
96
48
  const resultXdrSwitchName = decodedResult?.resultXdrSwitchName;
97
49
  const decodedResultXdr = decodedResult?.decodedResultXdr;
98
- const envelopeXdr = extras?.envelope_xdr ?? "";
99
- const message = body.detail || body.title || `Transaction submission failed (${body.status ?? "unknown"}).`;
50
+ const envelopeXdr = extras?.envelope_xdr ?? '';
51
+ const message = body.detail || body.title || `Transaction submission failed (${body.status ?? 'unknown'}).`;
100
52
  return new StellarBroadcastFailedError(message, {
101
53
  documentationSummary,
102
54
  horizonTransactionCode,
@@ -136,7 +88,7 @@ export function registerHorizonInterceptors() {
136
88
  if (interceptorsRegistered)
137
89
  return;
138
90
  interceptorsRegistered = true;
139
- Horizon.AxiosClient.interceptors.request.use(config => {
91
+ Horizon.AxiosClient.interceptors.request.use((config) => {
140
92
  let enableNetworkLogs = false;
141
93
  try {
142
94
  enableNetworkLogs = !!coinConfig.getCoinConfig().enableNetworkLogs;
@@ -145,13 +97,13 @@ export function registerHorizonInterceptors() {
145
97
  return config;
146
98
  }
147
99
  if (enableNetworkLogs) {
148
- const { baseURL, url, method = "", data } = config;
149
- log("network", `${method} ${baseURL ?? ""}${url}`, { data });
100
+ const { baseURL, url, method = '', data } = config;
101
+ log('network', `${method} ${baseURL ?? ''}${url}`, { data });
150
102
  requestStartTimes.set(config, Date.now());
151
103
  }
152
104
  return config;
153
105
  });
154
- Horizon.AxiosClient.interceptors.response.use(response => {
106
+ Horizon.AxiosClient.interceptors.response.use((response) => {
155
107
  let enableNetworkLogs = false;
156
108
  try {
157
109
  enableNetworkLogs = !!coinConfig.getCoinConfig().enableNetworkLogs;
@@ -163,7 +115,7 @@ export function registerHorizonInterceptors() {
163
115
  // response.config is typed as `any` in stellar-sdk's HttpClientResponse
164
116
  const startTime = requestStartTimes.get(response.config) ?? 0;
165
117
  requestStartTimes.delete(response.config);
166
- log("network-success", `${response.status} ${response.config?.method ?? ""} ${response.config?.baseURL ?? ""}${response.config?.url ?? ""} (${(Date.now() - startTime).toFixed(0)}ms)`, { data: response.data });
118
+ log('network-success', `${response.status} ${response.config?.method ?? ''} ${response.config?.baseURL ?? ''}${response.config?.url ?? ''} (${(Date.now() - startTime).toFixed(0)}ms)`, { data: response.data });
167
119
  }
168
120
  // FIXME: workaround for the Stellar SDK not using the correct URL: the "next" URL
169
121
  // included in server responses points to the node itself instead of our reverse proxy...
@@ -240,20 +192,20 @@ export async function fetchBaseFee() {
240
192
  export async function fetchAccount(addr) {
241
193
  let account = {};
242
194
  let assets = [];
243
- let balance = "0";
195
+ let balance = '0';
244
196
  try {
245
197
  account = await getServer().accounts().accountId(addr).call();
246
198
  balance =
247
- account.balances?.find(balance => {
248
- return balance.asset_type === "native";
249
- })?.balance || "0";
199
+ account.balances?.find((balance) => {
200
+ return balance.asset_type === 'native';
201
+ })?.balance || '0';
250
202
  // Getting all non-native (XLM) assets on the account
251
- assets = account.balances?.filter(balance => {
252
- return balance.asset_type !== "native";
203
+ assets = account.balances?.filter((balance) => {
204
+ return balance.asset_type !== 'native';
253
205
  });
254
206
  }
255
207
  catch {
256
- balance = "0";
208
+ balance = '0';
257
209
  }
258
210
  const formattedBalance = parseAPIValue(balance);
259
211
  const spendableBalance = await getAccountSpendableBalance(formattedBalance, account);
@@ -275,7 +227,7 @@ export async function fetchAccount(addr) {
275
227
  *
276
228
  * @return {Operation[]}
277
229
  */
278
- export async function fetchAllOperations(accountId, addr, order, cursor = "", maxOperations) {
230
+ export async function fetchAllOperations(accountId, addr, order, cursor = '', maxOperations) {
279
231
  if (!addr) {
280
232
  return [];
281
233
  }
@@ -290,7 +242,7 @@ export async function fetchAllOperations(accountId, addr, order, cursor = "", ma
290
242
  .order(order)
291
243
  .cursor(cursor)
292
244
  .includeFailed(true)
293
- .join("transactions")
245
+ .join('transactions')
294
246
  .call();
295
247
  if (!rawOperations || !rawOperations.records.length) {
296
248
  return [];
@@ -309,7 +261,7 @@ export async function fetchAllOperations(accountId, addr, order, cursor = "", ma
309
261
  catch (e) {
310
262
  // FIXME: terrible hacks, because Stellar SDK fails to cast network failures to typed errors in react-native...
311
263
  // (https://github.com/stellar/js-stellar-sdk/issues/638)
312
- const errorMsg = e ? String(e) : "";
264
+ const errorMsg = e ? String(e) : '';
313
265
  if (e instanceof NotFoundError || errorMsg.match(/status code 404/)) {
314
266
  return [];
315
267
  }
@@ -329,7 +281,7 @@ export async function fetchAllOperations(accountId, addr, order, cursor = "", ma
329
281
  }
330
282
  // https://developers.stellar.org/docs/data/horizon/api-reference/get-operations-by-account-id
331
283
  export async function fetchOperations({ accountId, addr, minHeight, order, cursor, limit, }) {
332
- const noResult = { items: [], next: "" };
284
+ const noResult = { items: [], next: '' };
333
285
  if (!addr) {
334
286
  return noResult;
335
287
  }
@@ -340,9 +292,9 @@ export async function fetchOperations({ accountId, addr, minHeight, order, curso
340
292
  .forAccount(addr)
341
293
  .limit(requestedLimit)
342
294
  .order(order)
343
- .cursor(cursor ?? "")
295
+ .cursor(cursor ?? '')
344
296
  .includeFailed(true)
345
- .join("transactions")
297
+ .join('transactions')
346
298
  .call();
347
299
  if (!rawOperations || !rawOperations.records.length) {
348
300
  return noResult;
@@ -351,7 +303,7 @@ export async function fetchOperations({ accountId, addr, minHeight, order, curso
351
303
  const filteredOps = await rawOperationsToOperations(rawOps, addr, accountId, minHeight);
352
304
  // Always return the cursor so the caller can continue pagination,
353
305
  // even when filteredOps is empty (e.g. page of unsupported types).
354
- const nextCursor = rawOps.length < requestedLimit ? "" : rawOps[rawOps.length - 1].paging_token;
306
+ const nextCursor = rawOps.length < requestedLimit ? '' : rawOps[rawOps.length - 1].paging_token;
355
307
  return { items: filteredOps, next: nextCursor };
356
308
  }
357
309
  catch (e) {
@@ -359,12 +311,12 @@ export async function fetchOperations({ accountId, addr, minHeight, order, curso
359
311
  // (https://github.com/stellar/js-stellar-sdk/issues/638)
360
312
  // update 2025-04-01: in case of NetworkError, the error.response fields are undefined. Hence we cannot rely on status code
361
313
  // the only way to check is the errror message, which may break at some point
362
- const errorMsg = e ? String(e) : "";
314
+ const errorMsg = e ? String(e) : '';
363
315
  if (e instanceof NotFoundError || errorMsg.match(/status code 404/)) {
364
316
  return noResult;
365
317
  }
366
318
  if (errorMsg.match(/too many requests/i)) {
367
- throw new LedgerAPI4xx("status code 4xx", { status: 429, url: undefined, method: "GET" });
319
+ throw new LedgerAPI4xx('status code 4xx', { status: 429, url: undefined, method: 'GET' });
368
320
  }
369
321
  if (errorMsg.match(/status code 4[0-9]{2}/)) {
370
322
  throw new LedgerAPI4xx();
@@ -386,7 +338,7 @@ export async function fetchAccountNetworkInfo(account) {
386
338
  const baseReserve = getReservedBalance(extendedAccount);
387
339
  const { recommendedFee, networkCongestionLevel, baseFee } = await fetchBaseFee();
388
340
  return {
389
- family: "stellar",
341
+ family: 'stellar',
390
342
  fees: new BigNumber(recommendedFee.toString()),
391
343
  baseFee: new BigNumber(baseFee.toString()),
392
344
  baseReserve,
@@ -395,7 +347,7 @@ export async function fetchAccountNetworkInfo(account) {
395
347
  }
396
348
  catch {
397
349
  return {
398
- family: "stellar",
350
+ family: 'stellar',
399
351
  fees: new BigNumber(0),
400
352
  baseFee: new BigNumber(100),
401
353
  baseReserve: new BigNumber(0),
@@ -416,7 +368,7 @@ export async function fetchSigners(account) {
416
368
  }
417
369
  }
418
370
  function interpretedError(error) {
419
- const body = getHorizonBodyFromSubmitFailure(error);
371
+ const body = getHorizonErrorBody(error);
420
372
  if (body) {
421
373
  const cause = error instanceof Error ? error : new Error(String(error));
422
374
  return makeBroadcastFailedError(body, cause);
@@ -454,7 +406,7 @@ export async function loadAccount(addr) {
454
406
  }
455
407
  }
456
408
  export async function getLastBlock() {
457
- const ledger = await getServer().ledgers().order("desc").limit(1).call();
409
+ const ledger = await getServer().ledgers().order('desc').limit(1).call();
458
410
  return {
459
411
  height: ledger.records[0].sequence,
460
412
  hash: ledger.records[0].hash,
@@ -492,8 +444,8 @@ export async function fetchAllLedgerOperations(ledgerSequence) {
492
444
  .operations()
493
445
  .forLedger(ledgerSequence)
494
446
  .includeFailed(true)
495
- .join("transactions")
496
- .order("asc")
447
+ .join('transactions')
448
+ .order('asc')
497
449
  .limit(limit)
498
450
  .call();
499
451
  const records = [...response.records];
@@ -510,10 +462,11 @@ export async function fetchAllLedgerOperations(ledgerSequence) {
510
462
  throwHorizonLedgerOrOperationsError(e, `Stellar ledger ${ledgerSequence} not found`);
511
463
  }
512
464
  }
513
- export const getRecipientAccount = makeLRUCache(async ({ recipient }) => await recipientAccount(recipient), extract => extract.recipient, {
465
+ export const getRecipientAccount = makeLRUCache(async ({ recipient }) => await recipientAccount(recipient), (extract) => extract.recipient, {
514
466
  max: 300,
515
467
  ttl: 5 * 60,
516
- });
468
+ } // 5 minutes
469
+ );
517
470
  async function recipientAccount(address) {
518
471
  if (!address) {
519
472
  return null;
@@ -521,7 +474,7 @@ async function recipientAccount(address) {
521
474
  let accountAddress = address;
522
475
  const isMuxedAccount = StrKey.isValidMed25519PublicKey(address);
523
476
  if (isMuxedAccount) {
524
- const muxedAccount = MuxedAccount.fromAddress(address, "0");
477
+ const muxedAccount = MuxedAccount.fromAddress(address, '0');
525
478
  accountAddress = muxedAccount.baseAccount().accountId();
526
479
  }
527
480
  const account = await loadAccount(accountAddress);
@@ -538,12 +491,12 @@ async function recipientAccount(address) {
538
491
  }
539
492
  function getBalanceId(balance) {
540
493
  switch (balance.asset_type) {
541
- case "native":
542
- return "native";
543
- case "liquidity_pool_shares":
494
+ case 'native':
495
+ return 'native';
496
+ case 'liquidity_pool_shares':
544
497
  return balance.liquidity_pool_id || null;
545
- case "credit_alphanum4":
546
- case "credit_alphanum12":
498
+ case 'credit_alphanum4':
499
+ case 'credit_alphanum12':
547
500
  return `${balance.asset_code}:${balance.asset_issuer}`;
548
501
  default:
549
502
  return null;