@ledgerhq/live-common 34.54.0 → 34.55.0-nightly.20251210100832

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 (617) hide show
  1. package/lib/__tests__/test-helpers/bridge.js +1 -1
  2. package/lib/__tests__/test-helpers/bridge.js.map +1 -1
  3. package/lib/__tests__/test-helpers/environment.js +3 -0
  4. package/lib/__tests__/test-helpers/environment.js.map +1 -1
  5. package/lib/account/index.d.ts +1 -0
  6. package/lib/account/index.d.ts.map +1 -1
  7. package/lib/account/index.js +4 -1
  8. package/lib/account/index.js.map +1 -1
  9. package/lib/account/recentAddresses.d.ts +10 -0
  10. package/lib/account/recentAddresses.d.ts.map +1 -0
  11. package/lib/account/recentAddresses.js +60 -0
  12. package/lib/account/recentAddresses.js.map +1 -0
  13. package/lib/account/serialization.js +1 -1
  14. package/lib/account/serialization.js.map +1 -1
  15. package/lib/account/support.js +1 -1
  16. package/lib/account/support.js.map +1 -1
  17. package/lib/bridge/generic-alpaca/accountBridge.d.ts +1 -1
  18. package/lib/bridge/generic-alpaca/accountBridge.d.ts.map +1 -1
  19. package/lib/bridge/generic-alpaca/accountBridge.js +2 -1
  20. package/lib/bridge/generic-alpaca/accountBridge.js.map +1 -1
  21. package/lib/bridge/generic-alpaca/broadcast.d.ts.map +1 -1
  22. package/lib/bridge/generic-alpaca/broadcast.js +3 -3
  23. package/lib/bridge/generic-alpaca/broadcast.js.map +1 -1
  24. package/lib/bridge/generic-alpaca/currencyBridge.d.ts.map +1 -1
  25. package/lib/bridge/generic-alpaca/currencyBridge.js +3 -3
  26. package/lib/bridge/generic-alpaca/currencyBridge.js.map +1 -1
  27. package/lib/bridge/generic-alpaca/estimateMaxSpendable.d.ts.map +1 -1
  28. package/lib/bridge/generic-alpaca/estimateMaxSpendable.js +2 -1
  29. package/lib/bridge/generic-alpaca/estimateMaxSpendable.js.map +1 -1
  30. package/lib/bridge/generic-alpaca/getAccountShape.d.ts.map +1 -1
  31. package/lib/bridge/generic-alpaca/getAccountShape.js +24 -8
  32. package/lib/bridge/generic-alpaca/getAccountShape.js.map +1 -1
  33. package/lib/bridge/generic-alpaca/getTransactionStatus.d.ts.map +1 -1
  34. package/lib/bridge/generic-alpaca/getTransactionStatus.js +16 -1
  35. package/lib/bridge/generic-alpaca/getTransactionStatus.js.map +1 -1
  36. package/lib/bridge/generic-alpaca/postSync.d.ts +16 -0
  37. package/lib/bridge/generic-alpaca/postSync.d.ts.map +1 -0
  38. package/lib/bridge/generic-alpaca/postSync.js +44 -0
  39. package/lib/bridge/generic-alpaca/postSync.js.map +1 -0
  40. package/lib/bridge/generic-alpaca/prepareTransaction.d.ts.map +1 -1
  41. package/lib/bridge/generic-alpaca/prepareTransaction.js +45 -4
  42. package/lib/bridge/generic-alpaca/prepareTransaction.js.map +1 -1
  43. package/lib/bridge/generic-alpaca/signOperation.d.ts.map +1 -1
  44. package/lib/bridge/generic-alpaca/signOperation.js +18 -2
  45. package/lib/bridge/generic-alpaca/signOperation.js.map +1 -1
  46. package/lib/bridge/generic-alpaca/signer/Eth.d.ts +2 -0
  47. package/lib/bridge/generic-alpaca/signer/Eth.d.ts.map +1 -1
  48. package/lib/bridge/generic-alpaca/signer/Eth.js +8 -1
  49. package/lib/bridge/generic-alpaca/signer/Eth.js.map +1 -1
  50. package/lib/bridge/generic-alpaca/signer/index.d.ts.map +1 -1
  51. package/lib/bridge/generic-alpaca/signer/index.js +7 -0
  52. package/lib/bridge/generic-alpaca/signer/index.js.map +1 -1
  53. package/lib/bridge/generic-alpaca/types.d.ts +4 -0
  54. package/lib/bridge/generic-alpaca/types.d.ts.map +1 -1
  55. package/lib/bridge/generic-alpaca/utils.d.ts.map +1 -1
  56. package/lib/bridge/generic-alpaca/utils.js +12 -3
  57. package/lib/bridge/generic-alpaca/utils.js.map +1 -1
  58. package/lib/bridge/impl.d.ts.map +1 -1
  59. package/lib/bridge/impl.js +14 -3
  60. package/lib/bridge/impl.js.map +1 -1
  61. package/lib/currencies/helpers.d.ts +1 -0
  62. package/lib/currencies/helpers.d.ts.map +1 -1
  63. package/lib/currencies/helpers.js +7 -1
  64. package/lib/currencies/helpers.js.map +1 -1
  65. package/lib/domain/getTokensWithFunds.d.ts +7 -1
  66. package/lib/domain/getTokensWithFunds.d.ts.map +1 -1
  67. package/lib/domain/getTokensWithFunds.js +15 -4
  68. package/lib/domain/getTokensWithFunds.js.map +1 -1
  69. package/lib/domain/getTotalStakeableAssets.d.ts +10 -0
  70. package/lib/domain/getTotalStakeableAssets.d.ts.map +1 -0
  71. package/lib/domain/getTotalStakeableAssets.js +35 -0
  72. package/lib/domain/getTotalStakeableAssets.js.map +1 -0
  73. package/lib/e2e/data/deviceLabelsData.d.ts.map +1 -1
  74. package/lib/e2e/data/deviceLabelsData.js +1 -0
  75. package/lib/e2e/data/deviceLabelsData.js.map +1 -1
  76. package/lib/e2e/data/regexes.d.ts +2 -0
  77. package/lib/e2e/data/regexes.d.ts.map +1 -0
  78. package/lib/e2e/data/regexes.js +5 -0
  79. package/lib/e2e/data/regexes.js.map +1 -0
  80. package/lib/e2e/enum/Device.d.ts +1 -0
  81. package/lib/e2e/enum/Device.d.ts.map +1 -1
  82. package/lib/e2e/enum/Device.js +1 -0
  83. package/lib/e2e/enum/Device.js.map +1 -1
  84. package/lib/e2e/families/cardano.d.ts.map +1 -1
  85. package/lib/e2e/families/cardano.js +29 -14
  86. package/lib/e2e/families/cardano.js.map +1 -1
  87. package/lib/e2e/index.d.ts +35 -3
  88. package/lib/e2e/index.d.ts.map +1 -1
  89. package/lib/e2e/index.js +21 -1
  90. package/lib/e2e/index.js.map +1 -1
  91. package/lib/e2e/speculos.d.ts.map +1 -1
  92. package/lib/e2e/speculos.js +31 -4
  93. package/lib/e2e/speculos.js.map +1 -1
  94. package/lib/e2e/speculosAppVersion.d.ts.map +1 -1
  95. package/lib/e2e/speculosAppVersion.js +6 -2
  96. package/lib/e2e/speculosAppVersion.js.map +1 -1
  97. package/lib/e2e/swap.d.ts.map +1 -1
  98. package/lib/e2e/swap.js +7 -6
  99. package/lib/e2e/swap.js.map +1 -1
  100. package/lib/env.react.d.ts +1 -1
  101. package/lib/env.react.d.ts.map +1 -1
  102. package/lib/exchange/swap/api/v5/fetchCurrencyFrom.js +1 -1
  103. package/lib/exchange/swap/api/v5/fetchCurrencyFrom.js.map +1 -1
  104. package/lib/exchange/swap/getIncompatibleCurrencyKeys.d.ts.map +1 -1
  105. package/lib/exchange/swap/getIncompatibleCurrencyKeys.js +4 -0
  106. package/lib/exchange/swap/getIncompatibleCurrencyKeys.js.map +1 -1
  107. package/lib/exchange/swap/postSwapState.d.ts.map +1 -1
  108. package/lib/exchange/swap/postSwapState.js +10 -6
  109. package/lib/exchange/swap/postSwapState.js.map +1 -1
  110. package/lib/exchange/swap/transactionStrategies.d.ts +3 -2
  111. package/lib/exchange/swap/transactionStrategies.d.ts.map +1 -1
  112. package/lib/exchange/swap/transactionStrategies.js +26 -7
  113. package/lib/exchange/swap/transactionStrategies.js.map +1 -1
  114. package/lib/exchange/swap/types.d.ts +3 -1
  115. package/lib/exchange/swap/types.d.ts.map +1 -1
  116. package/lib/families/bitcoin/walletApiAdapter.d.ts.map +1 -1
  117. package/lib/families/bitcoin/walletApiAdapter.js +3 -0
  118. package/lib/families/bitcoin/walletApiAdapter.js.map +1 -1
  119. package/lib/families/canton/config.d.ts.map +1 -1
  120. package/lib/families/canton/config.js +4 -4
  121. package/lib/families/canton/config.js.map +1 -1
  122. package/lib/families/canton/react.d.ts +2 -0
  123. package/lib/families/canton/react.d.ts.map +1 -1
  124. package/lib/families/canton/react.js +40 -1
  125. package/lib/families/canton/react.js.map +1 -1
  126. package/lib/families/celo/setup.d.ts.map +1 -1
  127. package/lib/families/celo/setup.js +11 -0
  128. package/lib/families/celo/setup.js.map +1 -1
  129. package/lib/families/evm/bridge/mock.d.ts +1 -0
  130. package/lib/families/evm/bridge/mock.d.ts.map +1 -1
  131. package/lib/families/evm/bridge/mock.js +12 -0
  132. package/lib/families/evm/bridge/mock.js.map +1 -1
  133. package/lib/families/evm/setup.d.ts +1 -4
  134. package/lib/families/evm/setup.d.ts.map +1 -1
  135. package/lib/families/evm/setup.js +1 -8
  136. package/lib/families/evm/setup.js.map +1 -1
  137. package/lib/families/evm/walletApiAdapter.d.ts +7 -0
  138. package/lib/families/evm/walletApiAdapter.d.ts.map +1 -1
  139. package/lib/families/evm/walletApiAdapter.js +36 -2
  140. package/lib/families/evm/walletApiAdapter.js.map +1 -1
  141. package/lib/families/hedera/react.d.ts +6 -0
  142. package/lib/families/hedera/react.d.ts.map +1 -0
  143. package/lib/families/hedera/react.js +50 -0
  144. package/lib/families/hedera/react.js.map +1 -0
  145. package/lib/families/polkadot/config.js +1 -1
  146. package/lib/families/polkadot/config.js.map +1 -1
  147. package/lib/families/stacks/constants.d.ts +1 -1
  148. package/lib/families/stacks/constants.d.ts.map +1 -1
  149. package/lib/families/stacks/constants.js +1 -1
  150. package/lib/families/stacks/constants.js.map +1 -1
  151. package/lib/featureFlags/defaultFeatures.d.ts +2 -0
  152. package/lib/featureFlags/defaultFeatures.d.ts.map +1 -1
  153. package/lib/featureFlags/defaultFeatures.js +22 -1
  154. package/lib/featureFlags/defaultFeatures.js.map +1 -1
  155. package/lib/featureFlags/firebaseFeatureFlags.js +1 -1
  156. package/lib/featureFlags/firebaseFeatureFlags.js.map +1 -1
  157. package/lib/featureFlags/stakePrograms/index.js +4 -4
  158. package/lib/featureFlags/stakePrograms/index.js.map +1 -1
  159. package/lib/featureFlags/useFeature.d.ts +1 -1
  160. package/lib/featureFlags/useFeature.d.ts.map +1 -1
  161. package/lib/featureFlags/useHasOverriddenFeatureFlags.js +1 -1
  162. package/lib/featureFlags/useHasOverriddenFeatureFlags.js.map +1 -1
  163. package/lib/generated/bridge/js.d.ts +0 -1
  164. package/lib/generated/bridge/js.d.ts.map +1 -1
  165. package/lib/generated/bridge/js.js +30 -32
  166. package/lib/generated/bridge/js.js.map +1 -1
  167. package/lib/generated/bridge/mock.d.ts +1 -0
  168. package/lib/generated/bridge/mock.d.ts.map +1 -1
  169. package/lib/helpers/cryptoIconSize.d.ts +3 -0
  170. package/lib/helpers/cryptoIconSize.d.ts.map +1 -0
  171. package/lib/helpers/cryptoIconSize.js +40 -0
  172. package/lib/helpers/cryptoIconSize.js.map +1 -0
  173. package/lib/helpers.d.ts +1 -0
  174. package/lib/helpers.d.ts.map +1 -1
  175. package/lib/helpers.js +15 -0
  176. package/lib/helpers.js.map +1 -1
  177. package/lib/hooks/useHtmlLinkSegments.d.ts +19 -0
  178. package/lib/hooks/useHtmlLinkSegments.d.ts.map +1 -0
  179. package/lib/hooks/useHtmlLinkSegments.js +128 -0
  180. package/lib/hooks/useHtmlLinkSegments.js.map +1 -0
  181. package/lib/hw/getAppAndVersion.d.ts +3 -1
  182. package/lib/hw/getAppAndVersion.d.ts.map +1 -1
  183. package/lib/hw/getAppAndVersion.js +2 -2
  184. package/lib/hw/getAppAndVersion.js.map +1 -1
  185. package/lib/hw/getBitcoinLikeInfo.js +1 -1
  186. package/lib/hw/getBitcoinLikeInfo.js.map +1 -1
  187. package/lib/load/speculos.d.ts.map +1 -1
  188. package/lib/load/speculos.js +1 -0
  189. package/lib/load/speculos.js.map +1 -1
  190. package/lib/mock/account.js +1 -1
  191. package/lib/mock/account.js.map +1 -1
  192. package/lib/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.d.ts.map +1 -1
  193. package/lib/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.js +6 -0
  194. package/lib/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.js.map +1 -1
  195. package/lib/operation.d.ts.map +1 -1
  196. package/lib/operation.js +7 -2
  197. package/lib/operation.js.map +1 -1
  198. package/lib/postOnboarding/reducer.d.ts +2 -0
  199. package/lib/postOnboarding/reducer.d.ts.map +1 -1
  200. package/lib/wallet-api/Exchange/SwapError.d.ts +93 -0
  201. package/lib/wallet-api/Exchange/SwapError.d.ts.map +1 -0
  202. package/lib/wallet-api/Exchange/SwapError.js +142 -0
  203. package/lib/wallet-api/Exchange/SwapError.js.map +1 -0
  204. package/lib/wallet-api/Exchange/handleSwapErrors.d.ts +40 -0
  205. package/lib/wallet-api/Exchange/handleSwapErrors.d.ts.map +1 -0
  206. package/lib/wallet-api/Exchange/handleSwapErrors.js +112 -0
  207. package/lib/wallet-api/Exchange/handleSwapErrors.js.map +1 -0
  208. package/lib/wallet-api/Exchange/index.d.ts +4 -0
  209. package/lib/wallet-api/Exchange/index.d.ts.map +1 -0
  210. package/lib/wallet-api/Exchange/index.js +27 -0
  211. package/lib/wallet-api/Exchange/index.js.map +1 -0
  212. package/lib/wallet-api/Exchange/parser.d.ts +46 -0
  213. package/lib/wallet-api/Exchange/parser.d.ts.map +1 -0
  214. package/lib/wallet-api/Exchange/parser.js +97 -0
  215. package/lib/wallet-api/Exchange/parser.js.map +1 -0
  216. package/lib/wallet-api/Exchange/server.d.ts.map +1 -1
  217. package/lib/wallet-api/Exchange/server.js +227 -174
  218. package/lib/wallet-api/Exchange/server.js.map +1 -1
  219. package/lib/wallet-api/Exchange/tracking.d.ts +7 -6
  220. package/lib/wallet-api/Exchange/tracking.d.ts.map +1 -1
  221. package/lib/wallet-api/Exchange/tracking.js +52 -13
  222. package/lib/wallet-api/Exchange/tracking.js.map +1 -1
  223. package/lib/wallet-api/constants.d.ts +1 -1
  224. package/lib/wallet-api/logic.d.ts +1 -1
  225. package/lib/wallet-api/logic.d.ts.map +1 -1
  226. package/lib/wallet-api/logic.js +5 -5
  227. package/lib/wallet-api/logic.js.map +1 -1
  228. package/lib/wallet-api/react.d.ts.map +1 -1
  229. package/lib/wallet-api/react.js +9 -6
  230. package/lib/wallet-api/react.js.map +1 -1
  231. package/lib/wallet-api/tracking.d.ts +5 -5
  232. package/lib/wallet-api/tracking.d.ts.map +1 -1
  233. package/lib/wallet-api/tracking.js +30 -10
  234. package/lib/wallet-api/tracking.js.map +1 -1
  235. package/lib/wallet-api/useDappLogic.d.ts.map +1 -1
  236. package/lib/wallet-api/useDappLogic.js +31 -20
  237. package/lib/wallet-api/useDappLogic.js.map +1 -1
  238. package/lib/wallet-api/utils/extractDappURLFromManifest.js +3 -3
  239. package/lib/wallet-api/utils/extractDappURLFromManifest.js.map +1 -1
  240. package/lib/wallet-api/utils/extractURLFromManifest.js +1 -1
  241. package/lib/wallet-api/utils/extractURLFromManifest.js.map +1 -1
  242. package/lib/walletSync/getEnvironmentParams.js +6 -6
  243. package/lib/walletSync/getEnvironmentParams.js.map +1 -1
  244. package/lib-es/__tests__/test-helpers/bridge.js +1 -1
  245. package/lib-es/__tests__/test-helpers/bridge.js.map +1 -1
  246. package/lib-es/__tests__/test-helpers/environment.js +3 -0
  247. package/lib-es/__tests__/test-helpers/environment.js.map +1 -1
  248. package/lib-es/account/index.d.ts +1 -0
  249. package/lib-es/account/index.d.ts.map +1 -1
  250. package/lib-es/account/index.js +1 -0
  251. package/lib-es/account/index.js.map +1 -1
  252. package/lib-es/account/recentAddresses.d.ts +10 -0
  253. package/lib-es/account/recentAddresses.d.ts.map +1 -0
  254. package/lib-es/account/recentAddresses.js +55 -0
  255. package/lib-es/account/recentAddresses.js.map +1 -0
  256. package/lib-es/account/serialization.js +1 -1
  257. package/lib-es/account/serialization.js.map +1 -1
  258. package/lib-es/account/support.js +1 -1
  259. package/lib-es/account/support.js.map +1 -1
  260. package/lib-es/bridge/generic-alpaca/accountBridge.d.ts +1 -1
  261. package/lib-es/bridge/generic-alpaca/accountBridge.d.ts.map +1 -1
  262. package/lib-es/bridge/generic-alpaca/accountBridge.js +2 -1
  263. package/lib-es/bridge/generic-alpaca/accountBridge.js.map +1 -1
  264. package/lib-es/bridge/generic-alpaca/broadcast.d.ts.map +1 -1
  265. package/lib-es/bridge/generic-alpaca/broadcast.js +3 -3
  266. package/lib-es/bridge/generic-alpaca/broadcast.js.map +1 -1
  267. package/lib-es/bridge/generic-alpaca/currencyBridge.d.ts.map +1 -1
  268. package/lib-es/bridge/generic-alpaca/currencyBridge.js +3 -3
  269. package/lib-es/bridge/generic-alpaca/currencyBridge.js.map +1 -1
  270. package/lib-es/bridge/generic-alpaca/estimateMaxSpendable.d.ts.map +1 -1
  271. package/lib-es/bridge/generic-alpaca/estimateMaxSpendable.js +2 -1
  272. package/lib-es/bridge/generic-alpaca/estimateMaxSpendable.js.map +1 -1
  273. package/lib-es/bridge/generic-alpaca/getAccountShape.d.ts.map +1 -1
  274. package/lib-es/bridge/generic-alpaca/getAccountShape.js +24 -8
  275. package/lib-es/bridge/generic-alpaca/getAccountShape.js.map +1 -1
  276. package/lib-es/bridge/generic-alpaca/getTransactionStatus.d.ts.map +1 -1
  277. package/lib-es/bridge/generic-alpaca/getTransactionStatus.js +16 -1
  278. package/lib-es/bridge/generic-alpaca/getTransactionStatus.js.map +1 -1
  279. package/lib-es/bridge/generic-alpaca/postSync.d.ts +16 -0
  280. package/lib-es/bridge/generic-alpaca/postSync.d.ts.map +1 -0
  281. package/lib-es/bridge/generic-alpaca/postSync.js +37 -0
  282. package/lib-es/bridge/generic-alpaca/postSync.js.map +1 -0
  283. package/lib-es/bridge/generic-alpaca/prepareTransaction.d.ts.map +1 -1
  284. package/lib-es/bridge/generic-alpaca/prepareTransaction.js +45 -4
  285. package/lib-es/bridge/generic-alpaca/prepareTransaction.js.map +1 -1
  286. package/lib-es/bridge/generic-alpaca/signOperation.d.ts.map +1 -1
  287. package/lib-es/bridge/generic-alpaca/signOperation.js +18 -2
  288. package/lib-es/bridge/generic-alpaca/signOperation.js.map +1 -1
  289. package/lib-es/bridge/generic-alpaca/signer/Eth.d.ts +2 -0
  290. package/lib-es/bridge/generic-alpaca/signer/Eth.d.ts.map +1 -1
  291. package/lib-es/bridge/generic-alpaca/signer/Eth.js +4 -0
  292. package/lib-es/bridge/generic-alpaca/signer/Eth.js.map +1 -1
  293. package/lib-es/bridge/generic-alpaca/signer/index.d.ts.map +1 -1
  294. package/lib-es/bridge/generic-alpaca/signer/index.js +7 -0
  295. package/lib-es/bridge/generic-alpaca/signer/index.js.map +1 -1
  296. package/lib-es/bridge/generic-alpaca/types.d.ts +4 -0
  297. package/lib-es/bridge/generic-alpaca/types.d.ts.map +1 -1
  298. package/lib-es/bridge/generic-alpaca/utils.d.ts.map +1 -1
  299. package/lib-es/bridge/generic-alpaca/utils.js +12 -3
  300. package/lib-es/bridge/generic-alpaca/utils.js.map +1 -1
  301. package/lib-es/bridge/impl.d.ts.map +1 -1
  302. package/lib-es/bridge/impl.js +14 -3
  303. package/lib-es/bridge/impl.js.map +1 -1
  304. package/lib-es/currencies/helpers.d.ts +1 -0
  305. package/lib-es/currencies/helpers.d.ts.map +1 -1
  306. package/lib-es/currencies/helpers.js +5 -0
  307. package/lib-es/currencies/helpers.js.map +1 -1
  308. package/lib-es/domain/getTokensWithFunds.d.ts +7 -1
  309. package/lib-es/domain/getTokensWithFunds.d.ts.map +1 -1
  310. package/lib-es/domain/getTokensWithFunds.js +13 -3
  311. package/lib-es/domain/getTokensWithFunds.js.map +1 -1
  312. package/lib-es/domain/getTotalStakeableAssets.d.ts +10 -0
  313. package/lib-es/domain/getTotalStakeableAssets.d.ts.map +1 -0
  314. package/lib-es/domain/getTotalStakeableAssets.js +31 -0
  315. package/lib-es/domain/getTotalStakeableAssets.js.map +1 -0
  316. package/lib-es/e2e/data/deviceLabelsData.d.ts.map +1 -1
  317. package/lib-es/e2e/data/deviceLabelsData.js +1 -0
  318. package/lib-es/e2e/data/deviceLabelsData.js.map +1 -1
  319. package/lib-es/e2e/data/regexes.d.ts +2 -0
  320. package/lib-es/e2e/data/regexes.d.ts.map +1 -0
  321. package/lib-es/e2e/data/regexes.js +2 -0
  322. package/lib-es/e2e/data/regexes.js.map +1 -0
  323. package/lib-es/e2e/enum/Device.d.ts +1 -0
  324. package/lib-es/e2e/enum/Device.d.ts.map +1 -1
  325. package/lib-es/e2e/enum/Device.js +1 -0
  326. package/lib-es/e2e/enum/Device.js.map +1 -1
  327. package/lib-es/e2e/families/cardano.d.ts.map +1 -1
  328. package/lib-es/e2e/families/cardano.js +29 -14
  329. package/lib-es/e2e/families/cardano.js.map +1 -1
  330. package/lib-es/e2e/index.d.ts +35 -3
  331. package/lib-es/e2e/index.d.ts.map +1 -1
  332. package/lib-es/e2e/index.js +16 -0
  333. package/lib-es/e2e/index.js.map +1 -1
  334. package/lib-es/e2e/speculos.d.ts.map +1 -1
  335. package/lib-es/e2e/speculos.js +31 -4
  336. package/lib-es/e2e/speculos.js.map +1 -1
  337. package/lib-es/e2e/speculosAppVersion.d.ts.map +1 -1
  338. package/lib-es/e2e/speculosAppVersion.js +6 -2
  339. package/lib-es/e2e/speculosAppVersion.js.map +1 -1
  340. package/lib-es/e2e/swap.d.ts.map +1 -1
  341. package/lib-es/e2e/swap.js +7 -6
  342. package/lib-es/e2e/swap.js.map +1 -1
  343. package/lib-es/env.react.d.ts +1 -1
  344. package/lib-es/env.react.d.ts.map +1 -1
  345. package/lib-es/exchange/swap/api/v5/fetchCurrencyFrom.js +1 -1
  346. package/lib-es/exchange/swap/api/v5/fetchCurrencyFrom.js.map +1 -1
  347. package/lib-es/exchange/swap/getIncompatibleCurrencyKeys.d.ts.map +1 -1
  348. package/lib-es/exchange/swap/getIncompatibleCurrencyKeys.js +4 -0
  349. package/lib-es/exchange/swap/getIncompatibleCurrencyKeys.js.map +1 -1
  350. package/lib-es/exchange/swap/postSwapState.d.ts.map +1 -1
  351. package/lib-es/exchange/swap/postSwapState.js +10 -6
  352. package/lib-es/exchange/swap/postSwapState.js.map +1 -1
  353. package/lib-es/exchange/swap/transactionStrategies.d.ts +3 -2
  354. package/lib-es/exchange/swap/transactionStrategies.d.ts.map +1 -1
  355. package/lib-es/exchange/swap/transactionStrategies.js +26 -7
  356. package/lib-es/exchange/swap/transactionStrategies.js.map +1 -1
  357. package/lib-es/exchange/swap/types.d.ts +3 -1
  358. package/lib-es/exchange/swap/types.d.ts.map +1 -1
  359. package/lib-es/families/bitcoin/walletApiAdapter.d.ts.map +1 -1
  360. package/lib-es/families/bitcoin/walletApiAdapter.js +3 -0
  361. package/lib-es/families/bitcoin/walletApiAdapter.js.map +1 -1
  362. package/lib-es/families/canton/config.d.ts.map +1 -1
  363. package/lib-es/families/canton/config.js +4 -4
  364. package/lib-es/families/canton/config.js.map +1 -1
  365. package/lib-es/families/canton/react.d.ts +2 -0
  366. package/lib-es/families/canton/react.d.ts.map +1 -1
  367. package/lib-es/families/canton/react.js +38 -1
  368. package/lib-es/families/canton/react.js.map +1 -1
  369. package/lib-es/families/celo/setup.d.ts.map +1 -1
  370. package/lib-es/families/celo/setup.js +11 -0
  371. package/lib-es/families/celo/setup.js.map +1 -1
  372. package/lib-es/families/evm/bridge/mock.d.ts +1 -0
  373. package/lib-es/families/evm/bridge/mock.d.ts.map +1 -1
  374. package/lib-es/families/evm/bridge/mock.js +12 -0
  375. package/lib-es/families/evm/bridge/mock.js.map +1 -1
  376. package/lib-es/families/evm/setup.d.ts +1 -4
  377. package/lib-es/families/evm/setup.d.ts.map +1 -1
  378. package/lib-es/families/evm/setup.js +2 -8
  379. package/lib-es/families/evm/setup.js.map +1 -1
  380. package/lib-es/families/evm/walletApiAdapter.d.ts +7 -0
  381. package/lib-es/families/evm/walletApiAdapter.d.ts.map +1 -1
  382. package/lib-es/families/evm/walletApiAdapter.js +30 -1
  383. package/lib-es/families/evm/walletApiAdapter.js.map +1 -1
  384. package/lib-es/families/hedera/react.d.ts +6 -0
  385. package/lib-es/families/hedera/react.d.ts.map +1 -0
  386. package/lib-es/families/hedera/react.js +41 -0
  387. package/lib-es/families/hedera/react.js.map +1 -0
  388. package/lib-es/families/polkadot/config.js +1 -1
  389. package/lib-es/families/polkadot/config.js.map +1 -1
  390. package/lib-es/families/stacks/constants.d.ts +1 -1
  391. package/lib-es/families/stacks/constants.d.ts.map +1 -1
  392. package/lib-es/families/stacks/constants.js +1 -1
  393. package/lib-es/families/stacks/constants.js.map +1 -1
  394. package/lib-es/featureFlags/defaultFeatures.d.ts +2 -0
  395. package/lib-es/featureFlags/defaultFeatures.d.ts.map +1 -1
  396. package/lib-es/featureFlags/defaultFeatures.js +22 -1
  397. package/lib-es/featureFlags/defaultFeatures.js.map +1 -1
  398. package/lib-es/featureFlags/firebaseFeatureFlags.js +1 -1
  399. package/lib-es/featureFlags/firebaseFeatureFlags.js.map +1 -1
  400. package/lib-es/featureFlags/stakePrograms/index.js +4 -4
  401. package/lib-es/featureFlags/stakePrograms/index.js.map +1 -1
  402. package/lib-es/featureFlags/useFeature.d.ts +1 -1
  403. package/lib-es/featureFlags/useFeature.d.ts.map +1 -1
  404. package/lib-es/featureFlags/useHasOverriddenFeatureFlags.js +1 -1
  405. package/lib-es/featureFlags/useHasOverriddenFeatureFlags.js.map +1 -1
  406. package/lib-es/generated/bridge/js.d.ts +0 -1
  407. package/lib-es/generated/bridge/js.d.ts.map +1 -1
  408. package/lib-es/generated/bridge/js.js +0 -2
  409. package/lib-es/generated/bridge/js.js.map +1 -1
  410. package/lib-es/generated/bridge/mock.d.ts +1 -0
  411. package/lib-es/generated/bridge/mock.d.ts.map +1 -1
  412. package/lib-es/helpers/cryptoIconSize.d.ts +3 -0
  413. package/lib-es/helpers/cryptoIconSize.d.ts.map +1 -0
  414. package/lib-es/helpers/cryptoIconSize.js +35 -0
  415. package/lib-es/helpers/cryptoIconSize.js.map +1 -0
  416. package/lib-es/helpers.d.ts +1 -0
  417. package/lib-es/helpers.d.ts.map +1 -1
  418. package/lib-es/helpers.js +1 -0
  419. package/lib-es/helpers.js.map +1 -1
  420. package/lib-es/hooks/useHtmlLinkSegments.d.ts +19 -0
  421. package/lib-es/hooks/useHtmlLinkSegments.d.ts.map +1 -0
  422. package/lib-es/hooks/useHtmlLinkSegments.js +121 -0
  423. package/lib-es/hooks/useHtmlLinkSegments.js.map +1 -0
  424. package/lib-es/hw/getAppAndVersion.d.ts +3 -1
  425. package/lib-es/hw/getAppAndVersion.d.ts.map +1 -1
  426. package/lib-es/hw/getAppAndVersion.js +2 -2
  427. package/lib-es/hw/getAppAndVersion.js.map +1 -1
  428. package/lib-es/hw/getBitcoinLikeInfo.js +1 -1
  429. package/lib-es/hw/getBitcoinLikeInfo.js.map +1 -1
  430. package/lib-es/load/speculos.d.ts.map +1 -1
  431. package/lib-es/load/speculos.js +1 -0
  432. package/lib-es/load/speculos.js.map +1 -1
  433. package/lib-es/mock/account.js +1 -1
  434. package/lib-es/mock/account.js.map +1 -1
  435. package/lib-es/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.d.ts.map +1 -1
  436. package/lib-es/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.js +6 -0
  437. package/lib-es/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.js.map +1 -1
  438. package/lib-es/operation.d.ts.map +1 -1
  439. package/lib-es/operation.js +7 -2
  440. package/lib-es/operation.js.map +1 -1
  441. package/lib-es/postOnboarding/reducer.d.ts +2 -0
  442. package/lib-es/postOnboarding/reducer.d.ts.map +1 -1
  443. package/lib-es/wallet-api/Exchange/SwapError.d.ts +93 -0
  444. package/lib-es/wallet-api/Exchange/SwapError.d.ts.map +1 -0
  445. package/lib-es/wallet-api/Exchange/SwapError.js +128 -0
  446. package/lib-es/wallet-api/Exchange/SwapError.js.map +1 -0
  447. package/lib-es/wallet-api/Exchange/handleSwapErrors.d.ts +40 -0
  448. package/lib-es/wallet-api/Exchange/handleSwapErrors.d.ts.map +1 -0
  449. package/lib-es/wallet-api/Exchange/handleSwapErrors.js +106 -0
  450. package/lib-es/wallet-api/Exchange/handleSwapErrors.js.map +1 -0
  451. package/lib-es/wallet-api/Exchange/index.d.ts +4 -0
  452. package/lib-es/wallet-api/Exchange/index.d.ts.map +1 -0
  453. package/lib-es/wallet-api/Exchange/index.js +7 -0
  454. package/lib-es/wallet-api/Exchange/index.js.map +1 -0
  455. package/lib-es/wallet-api/Exchange/parser.d.ts +46 -0
  456. package/lib-es/wallet-api/Exchange/parser.d.ts.map +1 -0
  457. package/lib-es/wallet-api/Exchange/parser.js +90 -0
  458. package/lib-es/wallet-api/Exchange/parser.js.map +1 -0
  459. package/lib-es/wallet-api/Exchange/server.d.ts.map +1 -1
  460. package/lib-es/wallet-api/Exchange/server.js +224 -174
  461. package/lib-es/wallet-api/Exchange/server.js.map +1 -1
  462. package/lib-es/wallet-api/Exchange/tracking.d.ts +7 -6
  463. package/lib-es/wallet-api/Exchange/tracking.d.ts.map +1 -1
  464. package/lib-es/wallet-api/Exchange/tracking.js +52 -13
  465. package/lib-es/wallet-api/Exchange/tracking.js.map +1 -1
  466. package/lib-es/wallet-api/constants.d.ts +1 -1
  467. package/lib-es/wallet-api/logic.d.ts +1 -1
  468. package/lib-es/wallet-api/logic.d.ts.map +1 -1
  469. package/lib-es/wallet-api/logic.js +5 -5
  470. package/lib-es/wallet-api/logic.js.map +1 -1
  471. package/lib-es/wallet-api/react.d.ts.map +1 -1
  472. package/lib-es/wallet-api/react.js +9 -6
  473. package/lib-es/wallet-api/react.js.map +1 -1
  474. package/lib-es/wallet-api/tracking.d.ts +5 -5
  475. package/lib-es/wallet-api/tracking.d.ts.map +1 -1
  476. package/lib-es/wallet-api/tracking.js +30 -10
  477. package/lib-es/wallet-api/tracking.js.map +1 -1
  478. package/lib-es/wallet-api/useDappLogic.d.ts.map +1 -1
  479. package/lib-es/wallet-api/useDappLogic.js +31 -20
  480. package/lib-es/wallet-api/useDappLogic.js.map +1 -1
  481. package/lib-es/wallet-api/utils/extractDappURLFromManifest.js +3 -3
  482. package/lib-es/wallet-api/utils/extractDappURLFromManifest.js.map +1 -1
  483. package/lib-es/wallet-api/utils/extractURLFromManifest.js +1 -1
  484. package/lib-es/wallet-api/utils/extractURLFromManifest.js.map +1 -1
  485. package/lib-es/walletSync/getEnvironmentParams.js +6 -6
  486. package/lib-es/walletSync/getEnvironmentParams.js.map +1 -1
  487. package/package.json +82 -90
  488. package/src/__tests__/test-helpers/bridge.ts +1 -1
  489. package/src/__tests__/test-helpers/environment.ts +3 -0
  490. package/src/account/index.ts +6 -0
  491. package/src/account/recentAddresses.test.ts +104 -0
  492. package/src/account/recentAddresses.ts +84 -0
  493. package/src/account/serialization.ts +1 -1
  494. package/src/account/support.ts +1 -1
  495. package/src/bridge/generic-alpaca/accountBridge.ts +3 -2
  496. package/src/bridge/generic-alpaca/broadcast.ts +6 -3
  497. package/src/bridge/generic-alpaca/currencyBridge.ts +3 -3
  498. package/src/bridge/generic-alpaca/estimateMaxSpendable.ts +2 -1
  499. package/src/bridge/generic-alpaca/getAccountShape.ts +36 -13
  500. package/src/bridge/generic-alpaca/getTransactionStatus.ts +16 -1
  501. package/src/bridge/generic-alpaca/postSync.test.ts +97 -0
  502. package/src/bridge/generic-alpaca/postSync.ts +42 -0
  503. package/src/bridge/generic-alpaca/prepareTransaction.ts +51 -10
  504. package/src/bridge/generic-alpaca/signOperation.ts +18 -2
  505. package/src/bridge/generic-alpaca/signer/Eth.ts +5 -1
  506. package/src/bridge/generic-alpaca/signer/index.ts +7 -0
  507. package/src/bridge/generic-alpaca/tests/getAccountShape.test.ts +43 -10
  508. package/src/bridge/generic-alpaca/tests/prepareTransaction.test.ts +74 -0
  509. package/src/bridge/generic-alpaca/types.ts +4 -0
  510. package/src/bridge/generic-alpaca/utils.test.ts +4 -0
  511. package/src/bridge/generic-alpaca/utils.ts +15 -3
  512. package/src/bridge/impl.ts +16 -3
  513. package/src/currencies/helpers.test.ts +10 -1
  514. package/src/currencies/helpers.ts +6 -0
  515. package/src/domain/getTokensWithFunds.ts +18 -5
  516. package/src/domain/getTotalStakeableAssets.test.ts +267 -0
  517. package/src/domain/getTotalStakeableAssets.ts +47 -0
  518. package/src/e2e/data/deviceLabelsData.ts +1 -0
  519. package/src/e2e/data/regexes.ts +1 -0
  520. package/src/e2e/enum/Device.ts +1 -0
  521. package/src/e2e/families/cardano.ts +32 -14
  522. package/src/e2e/index.ts +20 -0
  523. package/src/e2e/speculos.ts +35 -4
  524. package/src/e2e/speculosAppVersion.ts +8 -2
  525. package/src/e2e/swap.ts +8 -7
  526. package/src/exchange/swap/api/v5/fetchCurrencyFrom.ts +1 -1
  527. package/src/exchange/swap/getIncompatibleCurrencyKeys.ts +4 -0
  528. package/src/exchange/swap/postSwapState.ts +10 -5
  529. package/src/exchange/swap/transactionStrategies.ts +30 -7
  530. package/src/exchange/swap/types.ts +3 -1
  531. package/src/families/bitcoin/walletApiAdapter.test.ts +36 -0
  532. package/src/families/bitcoin/walletApiAdapter.ts +4 -0
  533. package/src/families/canton/config.ts +5 -4
  534. package/src/families/canton/react.test.ts +147 -0
  535. package/src/families/canton/react.ts +45 -1
  536. package/src/families/celo/setup.ts +12 -0
  537. package/src/families/cosmos/datasets/__snapshots__/cosmos.integration.test.ts.snap +73 -4
  538. package/src/families/cosmos/datasets/__snapshots__/cryptoOrg.integration.test.ts.snap +2 -2
  539. package/src/families/cosmos/datasets/__snapshots__/injective.integration.test.ts.snap +2 -2
  540. package/src/families/cosmos/datasets/__snapshots__/mantra.integration.test.ts.snap +2 -2
  541. package/src/families/cosmos/datasets/__snapshots__/osmosis.integration.test.ts.snap +2 -2
  542. package/src/families/cosmos/datasets/__snapshots__/persistence.integration.test.ts.snap +4 -4
  543. package/src/families/cosmos/datasets/__snapshots__/stargaze.integration.test.ts.snap +2 -2
  544. package/src/families/evm/bridge/mock.ts +14 -0
  545. package/src/families/evm/setup.ts +3 -22
  546. package/src/families/evm/walletApiAdapter.ts +33 -1
  547. package/src/families/hedera/__snapshots__/bridge.integration.test.ts.snap +278 -17
  548. package/src/families/hedera/react.test.ts +272 -0
  549. package/src/families/hedera/react.ts +63 -0
  550. package/src/families/polkadot/__snapshots__/bridge.integration.test.ts.snap +6 -3653
  551. package/src/families/polkadot/config.ts +1 -1
  552. package/src/families/stacks/__snapshots__/bridge.integration.test.ts.snap +1537 -18
  553. package/src/families/stacks/__tests__/sync.integration.test.ts +2 -2
  554. package/src/families/stacks/constants.ts +1 -1
  555. package/src/families/stellar/__snapshots__/bridge.integration.test.ts.snap +9 -9
  556. package/src/featureFlags/defaultFeatures.ts +22 -1
  557. package/src/featureFlags/firebaseFeatureFlags.ts +1 -1
  558. package/src/featureFlags/stakePrograms/index.ts +4 -4
  559. package/src/featureFlags/useHasOverriddenFeatureFlags.ts +1 -1
  560. package/src/generated/bridge/js.ts +0 -2
  561. package/src/helpers/cryptoIconSize.ts +25 -0
  562. package/src/helpers.ts +2 -0
  563. package/src/hooks/__tests__/useHtmlLinkSegments.test.ts +105 -0
  564. package/src/hooks/useHtmlLinkSegments.ts +158 -0
  565. package/src/hw/getAppAndVersion.ts +2 -1
  566. package/src/hw/getBitcoinLikeInfo.ts +1 -1
  567. package/src/load/speculos.ts +1 -0
  568. package/src/mock/account.ts +1 -1
  569. package/src/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.ts +6 -0
  570. package/src/operation.ts +10 -2
  571. package/src/wallet-api/Exchange/SwapError.test.ts +126 -0
  572. package/src/wallet-api/Exchange/SwapError.ts +159 -0
  573. package/src/wallet-api/Exchange/handleSwapErrors.test.ts +46 -0
  574. package/src/wallet-api/Exchange/handleSwapErrors.ts +161 -0
  575. package/src/wallet-api/Exchange/index.ts +26 -0
  576. package/src/wallet-api/Exchange/parser.test.ts +86 -0
  577. package/src/wallet-api/Exchange/parser.ts +119 -0
  578. package/src/wallet-api/Exchange/server.ts +289 -232
  579. package/src/wallet-api/Exchange/tracking.ts +56 -13
  580. package/src/wallet-api/logic.ts +5 -4
  581. package/src/wallet-api/react.ts +10 -5
  582. package/src/wallet-api/tracking.ts +30 -10
  583. package/src/wallet-api/useDappLogic.ts +32 -20
  584. package/src/wallet-api/utils/extractDappURLFromManifest.ts +3 -3
  585. package/src/wallet-api/utils/extractURLFromManifest.ts +1 -1
  586. package/src/walletSync/getEnvironmentParams.ts +6 -6
  587. package/lib/currencies/cryptoIcons.d.ts +0 -3
  588. package/lib/currencies/cryptoIcons.d.ts.map +0 -1
  589. package/lib/currencies/cryptoIcons.js +0 -24
  590. package/lib/currencies/cryptoIcons.js.map +0 -1
  591. package/lib/react.d.ts +0 -16
  592. package/lib/react.d.ts.map +0 -1
  593. package/lib/react.js +0 -64
  594. package/lib/react.js.map +0 -1
  595. package/lib/reactNative.d.ts +0 -16
  596. package/lib/reactNative.d.ts.map +0 -1
  597. package/lib/reactNative.js +0 -43
  598. package/lib/reactNative.js.map +0 -1
  599. package/lib-es/currencies/cryptoIcons.d.ts +0 -3
  600. package/lib-es/currencies/cryptoIcons.d.ts.map +0 -1
  601. package/lib-es/currencies/cryptoIcons.js +0 -20
  602. package/lib-es/currencies/cryptoIcons.js.map +0 -1
  603. package/lib-es/react.d.ts +0 -16
  604. package/lib-es/react.d.ts.map +0 -1
  605. package/lib-es/react.js +0 -33
  606. package/lib-es/react.js.map +0 -1
  607. package/lib-es/reactNative.d.ts +0 -16
  608. package/lib-es/reactNative.d.ts.map +0 -1
  609. package/lib-es/reactNative.js +0 -15
  610. package/lib-es/reactNative.js.map +0 -1
  611. package/react.js +0 -1
  612. package/reactNative.js +0 -1
  613. package/src/currencies/cryptoIcons.test.ts +0 -54
  614. package/src/currencies/cryptoIcons.ts +0 -21
  615. package/src/react.tsx +0 -43
  616. package/src/reactNative.ts +0 -23
  617. package/src/reactNativeSvg.d.ts +0 -19
@@ -0,0 +1,126 @@
1
+ /* eslint-env jest */
2
+ import {
3
+ IgnoredSignatureStepError,
4
+ ListAccountError,
5
+ ListCurrencyError,
6
+ NonceStepError,
7
+ NotEnoughFunds,
8
+ PayloadStepError,
9
+ PayinExtraIdError,
10
+ SignatureStepError,
11
+ SwapError,
12
+ UnknownAccountError,
13
+ } from "./SwapError";
14
+
15
+ describe("SwapError", () => {
16
+ it("captures nested error metadata", () => {
17
+ const nested = new Error("payload failed");
18
+ Object.assign(nested, { code: "E500" });
19
+
20
+ const error = new SwapError("swap999", nested);
21
+
22
+ expect(error).toBeInstanceOf(SwapError);
23
+ expect(error.cause.swapCode).toBe("swap999");
24
+ expect(error.cause.message).toBe(String(nested));
25
+ expect(error.cause.code).toBe("E500");
26
+ expect(error.message).toBe("payload failed");
27
+ });
28
+
29
+ it("defaults to swap000 when no code provided", () => {
30
+ const error = new SwapError();
31
+
32
+ expect(error.cause.swapCode).toBe("swap000");
33
+ expect(error.message).toBe("undefined");
34
+ });
35
+ });
36
+
37
+ type DerivedErrorCase = {
38
+ label: string;
39
+ create: (nested?: Error) => SwapError;
40
+ swapCode: string;
41
+ name: string;
42
+ propagatesMessage?: boolean;
43
+ };
44
+
45
+ const DERIVED_ERROR_CASES: DerivedErrorCase[] = [
46
+ {
47
+ label: "NonceStepError",
48
+ create: nested => new NonceStepError(nested),
49
+ swapCode: "swap001",
50
+ name: "NonceStepError",
51
+ propagatesMessage: true,
52
+ },
53
+ {
54
+ label: "PayloadStepError",
55
+ create: nested => new PayloadStepError(nested),
56
+ swapCode: "swap002",
57
+ name: "PayloadStepError",
58
+ propagatesMessage: true,
59
+ },
60
+ {
61
+ label: "SignatureStepError",
62
+ create: nested => new SignatureStepError(nested),
63
+ swapCode: "swap003",
64
+ name: "SignatureStepError",
65
+ propagatesMessage: true,
66
+ },
67
+ {
68
+ label: "IgnoredSignatureStepError",
69
+ create: nested => new IgnoredSignatureStepError(nested),
70
+ swapCode: "swap003Ignored",
71
+ name: "SignatureStepError",
72
+ propagatesMessage: true,
73
+ },
74
+ {
75
+ label: "NotEnoughFunds",
76
+ create: () => new NotEnoughFunds(),
77
+ swapCode: "swap004",
78
+ name: "NotEnoughFunds",
79
+ },
80
+ {
81
+ label: "ListAccountError",
82
+ create: nested => new ListAccountError(nested),
83
+ swapCode: "swap005",
84
+ name: "ListAccountError",
85
+ propagatesMessage: true,
86
+ },
87
+ {
88
+ label: "ListCurrencyError",
89
+ create: nested => new ListCurrencyError(nested),
90
+ swapCode: "swap006",
91
+ name: "ListCurrencyError",
92
+ propagatesMessage: true,
93
+ },
94
+ {
95
+ label: "UnknownAccountError",
96
+ create: nested => new UnknownAccountError(nested),
97
+ swapCode: "swap007",
98
+ name: "UnknownAccountError",
99
+ propagatesMessage: true,
100
+ },
101
+ {
102
+ label: "PayinExtraIdError",
103
+ create: nested => new PayinExtraIdError(nested),
104
+ swapCode: "swap010",
105
+ name: "PayinExtraIdError",
106
+ propagatesMessage: true,
107
+ },
108
+ ];
109
+
110
+ describe.each(DERIVED_ERROR_CASES)(
111
+ "Derived $label",
112
+ ({ create, swapCode, name, propagatesMessage }) => {
113
+ it("inherits SwapError defaults", () => {
114
+ const nested = new Error("step failure");
115
+ const error = create(propagatesMessage ? nested : undefined);
116
+
117
+ expect(error).toBeInstanceOf(SwapError);
118
+ expect(error.name).toBe(name);
119
+ expect(error.cause.swapCode).toBe(swapCode);
120
+
121
+ if (propagatesMessage) {
122
+ expect(error.message).toBe("step failure");
123
+ }
124
+ });
125
+ },
126
+ );
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Simplified Swap Error System
3
+ * Base error class and specific error types for swap transaction flows
4
+ */
5
+
6
+ /**
7
+ * Base error class for all swap-related errors
8
+ * Contains error code and nested error information
9
+ */
10
+ export class SwapError extends Error {
11
+ cause: {
12
+ swapCode: string;
13
+ [key: string]: string | Error | unknown | undefined;
14
+ };
15
+ message: string;
16
+
17
+ constructor(code = "swap000", nestedError?: Error) {
18
+ super();
19
+ this.name = "SwapError";
20
+
21
+ // Preserve nested error information
22
+ this.cause = {
23
+ swapCode: code,
24
+ ...(nestedError?.constructor !== Object && nestedError?.constructor !== Array
25
+ ? { message: `${nestedError}` }
26
+ : {}),
27
+ ...nestedError,
28
+ };
29
+
30
+ this.message = nestedError?.message ? nestedError.message : `${nestedError}`;
31
+ }
32
+ }
33
+
34
+ /**
35
+ * Error during nonce/deviceTransactionId generation step
36
+ * Typically occurs when calling startSwap()
37
+ */
38
+ export class NonceStepError extends SwapError {
39
+ constructor(nestedError?: Error) {
40
+ super("swap001", nestedError);
41
+ this.name = "NonceStepError";
42
+ }
43
+ }
44
+
45
+ /**
46
+ * Error during payload retrieval step
47
+ * Occurs when communicating with backend to get transaction payload
48
+ */
49
+ export class PayloadStepError extends SwapError {
50
+ constructor(nestedError?: Error) {
51
+ super("swap002", nestedError);
52
+ this.name = "PayloadStepError";
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Error during transaction signature step
58
+ * Occurs when user rejects or device fails during completeSwap()
59
+ */
60
+ export class SignatureStepError extends SwapError {
61
+ constructor(nestedError?: Error) {
62
+ super("swap003", nestedError);
63
+ this.name = "SignatureStepError";
64
+ }
65
+ }
66
+
67
+ /**
68
+ * Special case: signature error that should be ignored/handled silently
69
+ * Used for expected user cancellations
70
+ */
71
+ export class IgnoredSignatureStepError extends SwapError {
72
+ constructor(nestedError?: Error) {
73
+ super("swap003Ignored", nestedError);
74
+ this.name = "SignatureStepError";
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Error when user doesn't have sufficient funds
80
+ * Thrown during balance validation
81
+ */
82
+ export class NotEnoughFunds extends SwapError {
83
+ constructor() {
84
+ super("swap004");
85
+ this.name = "NotEnoughFunds";
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Error when unable to retrieve account list
91
+ * Occurs during account lookup phase
92
+ */
93
+ export class ListAccountError extends SwapError {
94
+ constructor(nestedError?: Error) {
95
+ super("swap005", nestedError);
96
+ this.name = "ListAccountError";
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Error when unable to retrieve currency information
102
+ * Occurs during currency lookup phase
103
+ */
104
+ export class ListCurrencyError extends SwapError {
105
+ constructor(nestedError?: Error) {
106
+ super("swap006", nestedError);
107
+ this.name = "ListCurrencyError";
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Error when specified account ID cannot be found
113
+ * Thrown when fromAccountId or toAccountId is invalid
114
+ */
115
+ export class UnknownAccountError extends SwapError {
116
+ constructor(nestedError?: Error) {
117
+ super("swap007", nestedError);
118
+ this.name = "UnknownAccountError";
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Error when extra identifier is required but missing
124
+ * Some chains require payinExtraId (e.g., XLM memo, XRP tag)
125
+ */
126
+ export class PayinExtraIdError extends SwapError {
127
+ constructor(nestedError?: Error) {
128
+ super("swap010", nestedError);
129
+ this.name = "PayinExtraIdError";
130
+ }
131
+ }
132
+
133
+ /**
134
+ * CompleteSwap/CompleteExchange step information
135
+ * Tracks which hardware wallet step failed
136
+ */
137
+ export type CompleteExchangeStep =
138
+ | "INIT"
139
+ | "SET_PARTNER_KEY"
140
+ | "CHECK_PARTNER"
141
+ | "PROCESS_TRANSACTION"
142
+ | "CHECK_TRANSACTION_SIGNATURE"
143
+ | "CHECK_PAYOUT_ADDRESS"
144
+ | "CHECK_REFUND_ADDRESS"
145
+ | "SIGN_COIN_TRANSACTION";
146
+
147
+ /**
148
+ * Error that occurs during completeSwap with step tracking
149
+ * Useful for debugging hardware wallet interactions
150
+ */
151
+ export class CompleteExchangeError extends Error {
152
+ step: CompleteExchangeStep;
153
+
154
+ constructor(step: CompleteExchangeStep, message?: string) {
155
+ super(message);
156
+ this.name = "CompleteExchangeError";
157
+ this.step = step;
158
+ }
159
+ }
@@ -0,0 +1,46 @@
1
+ /* eslint-env jest */
2
+ import { handleErrors, isHandledError } from "./handleSwapErrors";
3
+ import { IgnoredSignatureStepError, SignatureStepError } from "./SwapError";
4
+
5
+ describe("handleErrors", () => {
6
+ it("marks default ignored message errors as handled and rethrows", async () => {
7
+ const error = new Error("User refused");
8
+
9
+ expect(() => handleErrors(error)).toThrow(error);
10
+ expect(isHandledError(error)).toBe(true);
11
+ });
12
+
13
+ it("marks default ignored error names as handled and rethrows", async () => {
14
+ const nestedError = new Error("Device mismatch");
15
+ nestedError.name = "WrongDeviceForAccount";
16
+ const error = new SignatureStepError(nestedError);
17
+
18
+ expect(() => handleErrors(error)).toThrow(error);
19
+ expect(isHandledError(error)).toBe(true);
20
+ });
21
+
22
+ it("invokes onDisplayError for swap errors that should be surfaced", async () => {
23
+ const error = new SignatureStepError(new Error("Unexpected failure"));
24
+ const onDisplayError = jest.fn().mockResolvedValue(undefined);
25
+
26
+ await expect(handleErrors(error, { onDisplayError })).resolves.toBeUndefined();
27
+ expect(onDisplayError).toHaveBeenCalledWith(error);
28
+ });
29
+
30
+ it("skips onDisplayError for swap003Ignored errors and marks them handled", async () => {
31
+ const error = new IgnoredSignatureStepError(new Error("User rejected"));
32
+ const onDisplayError = jest.fn();
33
+
34
+ expect(() => handleErrors(error, { onDisplayError })).toThrow(error);
35
+ expect(onDisplayError).not.toHaveBeenCalled();
36
+ expect(isHandledError(error)).toBe(true);
37
+ });
38
+
39
+ it("respects custom ignored error names", async () => {
40
+ const error = new Error("Rate limited");
41
+ Object.assign(error, { cause: { name: "RateLimitedError" } });
42
+
43
+ expect(() => handleErrors(error, { ignoredErrorNames: ["RateLimitedError"] })).toThrow(error);
44
+ expect(isHandledError(error)).toBe(true);
45
+ });
46
+ });
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Error Handler
3
+ * Decides how to handle errors - display to user, mark as handled, or throw
4
+ */
5
+
6
+ import { SwapError } from "./SwapError";
7
+
8
+ /**
9
+ * Interface for error handler options
10
+ */
11
+ export interface ErrorHandlerOptions {
12
+ /**
13
+ * Callback to display error to user (optional)
14
+ * If not provided, errors are simply thrown
15
+ */
16
+ onDisplayError?: (error: SwapError) => Promise<void>;
17
+
18
+ /**
19
+ * Additional error names to ignore (won't be displayed)
20
+ */
21
+ ignoredErrorNames?: string[];
22
+
23
+ /**
24
+ * Additional error messages to ignore (won't be displayed)
25
+ */
26
+ ignoredMessages?: string[];
27
+ }
28
+
29
+ /**
30
+ * Default error names that should be marked as "handled"
31
+ * These are typically user input errors that can be retried
32
+ */
33
+ const DEFAULT_IGNORED_ERROR_NAMES = new Set([
34
+ "WrongDeviceForAccount",
35
+ "WrongDeviceForAccountPayout",
36
+ "WrongDeviceForAccountRefund",
37
+ "UserRefusedOnDevice",
38
+ ]);
39
+
40
+ /**
41
+ * Default error messages that should be marked as "handled"
42
+ */
43
+ const DEFAULT_IGNORED_MESSAGES = new Set(["User refused", "User rejected"]);
44
+
45
+ type SwapErrorCauseDetails = {
46
+ swapCode?: string;
47
+ name?: string;
48
+ message?: string;
49
+ };
50
+
51
+ type ErrorWithCause = Error & { cause?: unknown };
52
+ function isRecord(value: unknown): value is Record<string, unknown> {
53
+ return typeof value === "object" && value !== null;
54
+ }
55
+
56
+ function hasCause(value: Error): value is ErrorWithCause {
57
+ return "cause" in value;
58
+ }
59
+
60
+ function toCauseDetails(rawCause: unknown): SwapErrorCauseDetails | undefined {
61
+ if (!isRecord(rawCause)) {
62
+ return undefined;
63
+ }
64
+
65
+ const swapCode = typeof rawCause.swapCode === "string" ? rawCause.swapCode : undefined;
66
+ const name = typeof rawCause.name === "string" ? rawCause.name : undefined;
67
+ const message = typeof rawCause.message === "string" ? rawCause.message : undefined;
68
+
69
+ if (swapCode || name || message) {
70
+ return { swapCode, name, message };
71
+ }
72
+
73
+ return undefined;
74
+ }
75
+
76
+ function extractErrorDetails(value: unknown): {
77
+ message: string;
78
+ cause?: SwapErrorCauseDetails;
79
+ } {
80
+ if (value instanceof SwapError) {
81
+ return { message: value.message, cause: value.cause };
82
+ }
83
+
84
+ if (value instanceof Error) {
85
+ return {
86
+ message: value.message,
87
+ cause: hasCause(value) ? toCauseDetails(value.cause) : undefined,
88
+ };
89
+ }
90
+
91
+ if (isRecord(value) && typeof value.message === "string") {
92
+ const rawCause = "cause" in value ? value.cause : undefined;
93
+ const cause = toCauseDetails(rawCause);
94
+ return { message: value.message, cause };
95
+ }
96
+
97
+ return { message: typeof value === "string" ? value : JSON.stringify(value ?? "Unknown error") };
98
+ }
99
+
100
+ function markErrorAsHandled<T>(error: T): T {
101
+ if (isRecord(error)) {
102
+ Object.assign(error, { handled: true });
103
+ }
104
+
105
+ return error;
106
+ }
107
+
108
+ /**
109
+ * Handles errors by deciding whether to display them or mark as handled
110
+ *
111
+ * @param error - The error to handle
112
+ * @param options - Configuration options
113
+ * @throws Enhanced error with `handled` flag if applicable
114
+ */
115
+ export function handleErrors(error: unknown, options: ErrorHandlerOptions = {}): Promise<void> {
116
+ const { onDisplayError, ignoredErrorNames = [], ignoredMessages = [] } = options;
117
+
118
+ // Merge default and custom ignored values
119
+ const allIgnoredNames = new Set([...DEFAULT_IGNORED_ERROR_NAMES, ...ignoredErrorNames]);
120
+
121
+ const allIgnoredMessages = new Set([...DEFAULT_IGNORED_MESSAGES, ...ignoredMessages]);
122
+
123
+ const { message, cause } = extractErrorDetails(error);
124
+
125
+ // Check if error should be marked as handled (retry-ready)
126
+ const isIgnoredMessage = allIgnoredMessages.has(message);
127
+ const isIgnoredName = typeof cause?.name === "string" && allIgnoredNames.has(cause.name);
128
+ const isIgnoredSwapCode = cause?.swapCode === "swap003Ignored";
129
+
130
+ if (isIgnoredMessage || isIgnoredName || isIgnoredSwapCode) {
131
+ throw markErrorAsHandled(error);
132
+ }
133
+
134
+ // Display error to user if handler provided
135
+ if (error instanceof SwapError && onDisplayError) {
136
+ // Skip displaying "swap003Ignored" errors
137
+ if (cause?.swapCode !== "swap003Ignored") {
138
+ return onDisplayError(error);
139
+ }
140
+ }
141
+
142
+ // Always throw the error so caller can handle it
143
+ throw error;
144
+ }
145
+
146
+ /**
147
+ * Type guard to check if an error is marked as handled
148
+ */
149
+ export function isHandledError(error: unknown): boolean {
150
+ return isRecord(error) && error.handled === true;
151
+ }
152
+
153
+ /**
154
+ * Extracts swap code from error if available
155
+ */
156
+ export function getSwapCode(error: unknown): string | undefined {
157
+ if (error instanceof SwapError) {
158
+ return error.cause.swapCode;
159
+ }
160
+ return undefined;
161
+ }
@@ -0,0 +1,26 @@
1
+ // Export all error classes
2
+ export {
3
+ SwapError,
4
+ NonceStepError,
5
+ PayloadStepError,
6
+ SignatureStepError,
7
+ IgnoredSignatureStepError,
8
+ NotEnoughFunds,
9
+ ListAccountError,
10
+ ListCurrencyError,
11
+ UnknownAccountError,
12
+ PayinExtraIdError,
13
+ CompleteExchangeError,
14
+ type CompleteExchangeStep,
15
+ } from "./SwapError";
16
+
17
+ // Export parser utilities
18
+ export { createStepError, StepError, CustomErrorType, type ParseError } from "./parser";
19
+
20
+ // Export error handler
21
+ export {
22
+ handleErrors,
23
+ isHandledError,
24
+ getSwapCode,
25
+ type ErrorHandlerOptions,
26
+ } from "./handleSwapErrors";
@@ -0,0 +1,86 @@
1
+ import { createStepError, CustomErrorType, parseError, StepError } from "./parser";
2
+ import {
3
+ IgnoredSignatureStepError,
4
+ ListAccountError,
5
+ ListCurrencyError,
6
+ NonceStepError,
7
+ NotEnoughFunds,
8
+ PayloadStepError,
9
+ PayinExtraIdError,
10
+ SignatureStepError,
11
+ SwapError,
12
+ UnknownAccountError,
13
+ } from "./SwapError";
14
+
15
+ type StepExpectation = {
16
+ step: StepError;
17
+ ExpectedError: new (err?: Error) => SwapError;
18
+ swapCode: string;
19
+ };
20
+
21
+ const STEP_EXPECTATIONS: StepExpectation[] = [
22
+ { step: StepError.NONCE, ExpectedError: NonceStepError, swapCode: "swap001" },
23
+ { step: StepError.PAYLOAD, ExpectedError: PayloadStepError, swapCode: "swap002" },
24
+ { step: StepError.SIGNATURE, ExpectedError: SignatureStepError, swapCode: "swap003" },
25
+ {
26
+ step: StepError.IGNORED_SIGNATURE,
27
+ ExpectedError: IgnoredSignatureStepError,
28
+ swapCode: "swap003Ignored",
29
+ },
30
+ { step: StepError.CHECK_FUNDS, ExpectedError: NotEnoughFunds, swapCode: "swap004" },
31
+ { step: StepError.LIST_ACCOUNT, ExpectedError: ListAccountError, swapCode: "swap005" },
32
+ { step: StepError.LIST_CURRENCY, ExpectedError: ListCurrencyError, swapCode: "swap006" },
33
+ { step: StepError.UNKNOWN_ACCOUNT, ExpectedError: UnknownAccountError, swapCode: "swap007" },
34
+ { step: StepError.PAYIN_EXTRA_ID, ExpectedError: PayinExtraIdError, swapCode: "swap010" },
35
+ ];
36
+
37
+ const mockDownstreamError = new Error("error message");
38
+
39
+ describe("parseError", () => {
40
+ it.each(STEP_EXPECTATIONS)(
41
+ "$step - returns generic error when customErrorType is not passed in",
42
+ ({ step }) => {
43
+ const typedStep = step as StepError;
44
+
45
+ const error = parseError({
46
+ error: mockDownstreamError,
47
+ step: typedStep,
48
+ });
49
+
50
+ expect(error).toBe(mockDownstreamError);
51
+ },
52
+ );
53
+
54
+ it.each(STEP_EXPECTATIONS)(
55
+ "$step - returns specific swap error when customErrorType is 'swap'",
56
+ ({ step, ExpectedError, swapCode }) => {
57
+ const typedStep = step as StepError;
58
+
59
+ const error = parseError({
60
+ error: mockDownstreamError,
61
+ step: typedStep,
62
+ customErrorType: CustomErrorType.SWAP,
63
+ }) as SwapError;
64
+
65
+ expect(error).toBeInstanceOf(ExpectedError);
66
+ expect(error.cause.swapCode).toBe(swapCode);
67
+ },
68
+ );
69
+ });
70
+
71
+ describe("createStepError", () => {
72
+ it("returns downstream error when no step is supplied", () => {
73
+ expect(createStepError({ error: mockDownstreamError })).toBe(mockDownstreamError);
74
+ });
75
+
76
+ it.each(STEP_EXPECTATIONS)(
77
+ "$step - wraps downstream error with appropriate swap error",
78
+ ({ step, ExpectedError, swapCode }) => {
79
+ const typedStep = step as StepError;
80
+ const wrapped = createStepError({ error: mockDownstreamError, step: typedStep }) as SwapError;
81
+
82
+ expect(wrapped).toBeInstanceOf(ExpectedError);
83
+ expect(wrapped.cause.swapCode).toBe(swapCode);
84
+ },
85
+ );
86
+ });