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

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 (713) 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/bridge/react/BridgeSync.d.ts +1 -1
  62. package/lib/bridge/react/BridgeSync.d.ts.map +1 -1
  63. package/lib/bridge/react/BridgeSync.js.map +1 -1
  64. package/lib/currencies/helpers.d.ts +1 -0
  65. package/lib/currencies/helpers.d.ts.map +1 -1
  66. package/lib/currencies/helpers.js +7 -1
  67. package/lib/currencies/helpers.js.map +1 -1
  68. package/lib/deposit/api.js +2 -2
  69. package/lib/deposit/api.js.map +1 -1
  70. package/lib/domain/getTokensWithFunds.d.ts +7 -1
  71. package/lib/domain/getTokensWithFunds.d.ts.map +1 -1
  72. package/lib/domain/getTokensWithFunds.js +15 -4
  73. package/lib/domain/getTokensWithFunds.js.map +1 -1
  74. package/lib/domain/getTotalStakeableAssets.d.ts +10 -0
  75. package/lib/domain/getTotalStakeableAssets.d.ts.map +1 -0
  76. package/lib/domain/getTotalStakeableAssets.js +35 -0
  77. package/lib/domain/getTotalStakeableAssets.js.map +1 -0
  78. package/lib/e2e/data/deviceLabelsData.d.ts.map +1 -1
  79. package/lib/e2e/data/deviceLabelsData.js +1 -0
  80. package/lib/e2e/data/deviceLabelsData.js.map +1 -1
  81. package/lib/e2e/data/regexes.d.ts +2 -0
  82. package/lib/e2e/data/regexes.d.ts.map +1 -0
  83. package/lib/e2e/data/regexes.js +5 -0
  84. package/lib/e2e/data/regexes.js.map +1 -0
  85. package/lib/e2e/enum/Device.d.ts +1 -0
  86. package/lib/e2e/enum/Device.d.ts.map +1 -1
  87. package/lib/e2e/enum/Device.js +1 -0
  88. package/lib/e2e/enum/Device.js.map +1 -1
  89. package/lib/e2e/families/cardano.d.ts.map +1 -1
  90. package/lib/e2e/families/cardano.js +29 -14
  91. package/lib/e2e/families/cardano.js.map +1 -1
  92. package/lib/e2e/index.d.ts +35 -3
  93. package/lib/e2e/index.d.ts.map +1 -1
  94. package/lib/e2e/index.js +21 -1
  95. package/lib/e2e/index.js.map +1 -1
  96. package/lib/e2e/speculos.d.ts.map +1 -1
  97. package/lib/e2e/speculos.js +31 -4
  98. package/lib/e2e/speculos.js.map +1 -1
  99. package/lib/e2e/speculosAppVersion.d.ts.map +1 -1
  100. package/lib/e2e/speculosAppVersion.js +6 -2
  101. package/lib/e2e/speculosAppVersion.js.map +1 -1
  102. package/lib/e2e/swap.d.ts.map +1 -1
  103. package/lib/e2e/swap.js +7 -6
  104. package/lib/e2e/swap.js.map +1 -1
  105. package/lib/env.react.d.ts +1 -1
  106. package/lib/env.react.d.ts.map +1 -1
  107. package/lib/exchange/swap/api/v5/fetchCurrencyAll.js +2 -2
  108. package/lib/exchange/swap/api/v5/fetchCurrencyAll.js.map +1 -1
  109. package/lib/exchange/swap/api/v5/fetchCurrencyFrom.js +3 -3
  110. package/lib/exchange/swap/api/v5/fetchCurrencyFrom.js.map +1 -1
  111. package/lib/exchange/swap/api/v5/fetchCurrencyTo.js +2 -2
  112. package/lib/exchange/swap/api/v5/fetchCurrencyTo.js.map +1 -1
  113. package/lib/exchange/swap/api/v5/fetchRates.js +2 -2
  114. package/lib/exchange/swap/api/v5/fetchRates.js.map +1 -1
  115. package/lib/exchange/swap/getIncompatibleCurrencyKeys.d.ts.map +1 -1
  116. package/lib/exchange/swap/getIncompatibleCurrencyKeys.js +4 -0
  117. package/lib/exchange/swap/getIncompatibleCurrencyKeys.js.map +1 -1
  118. package/lib/exchange/swap/postSwapState.d.ts.map +1 -1
  119. package/lib/exchange/swap/postSwapState.js +10 -6
  120. package/lib/exchange/swap/postSwapState.js.map +1 -1
  121. package/lib/exchange/swap/transactionStrategies.d.ts +3 -2
  122. package/lib/exchange/swap/transactionStrategies.d.ts.map +1 -1
  123. package/lib/exchange/swap/transactionStrategies.js +26 -7
  124. package/lib/exchange/swap/transactionStrategies.js.map +1 -1
  125. package/lib/exchange/swap/types.d.ts +3 -1
  126. package/lib/exchange/swap/types.d.ts.map +1 -1
  127. package/lib/families/bitcoin/bridge/api.js +2 -2
  128. package/lib/families/bitcoin/bridge/api.js.map +1 -1
  129. package/lib/families/bitcoin/walletApiAdapter.d.ts.map +1 -1
  130. package/lib/families/bitcoin/walletApiAdapter.js +3 -0
  131. package/lib/families/bitcoin/walletApiAdapter.js.map +1 -1
  132. package/lib/families/canton/config.d.ts.map +1 -1
  133. package/lib/families/canton/config.js +4 -4
  134. package/lib/families/canton/config.js.map +1 -1
  135. package/lib/families/canton/react.d.ts +2 -0
  136. package/lib/families/canton/react.d.ts.map +1 -1
  137. package/lib/families/canton/react.js +40 -1
  138. package/lib/families/canton/react.js.map +1 -1
  139. package/lib/families/celo/setup.d.ts.map +1 -1
  140. package/lib/families/celo/setup.js +11 -0
  141. package/lib/families/celo/setup.js.map +1 -1
  142. package/lib/families/evm/bridge/mock.d.ts +1 -0
  143. package/lib/families/evm/bridge/mock.d.ts.map +1 -1
  144. package/lib/families/evm/bridge/mock.js +12 -0
  145. package/lib/families/evm/bridge/mock.js.map +1 -1
  146. package/lib/families/evm/setup.d.ts +1 -4
  147. package/lib/families/evm/setup.d.ts.map +1 -1
  148. package/lib/families/evm/setup.js +1 -8
  149. package/lib/families/evm/setup.js.map +1 -1
  150. package/lib/families/evm/walletApiAdapter.d.ts +7 -0
  151. package/lib/families/evm/walletApiAdapter.d.ts.map +1 -1
  152. package/lib/families/evm/walletApiAdapter.js +36 -2
  153. package/lib/families/evm/walletApiAdapter.js.map +1 -1
  154. package/lib/families/hedera/react.d.ts +6 -0
  155. package/lib/families/hedera/react.d.ts.map +1 -0
  156. package/lib/families/hedera/react.js +50 -0
  157. package/lib/families/hedera/react.js.map +1 -0
  158. package/lib/families/polkadot/config.js +1 -1
  159. package/lib/families/polkadot/config.js.map +1 -1
  160. package/lib/families/stacks/constants.d.ts +1 -1
  161. package/lib/families/stacks/constants.d.ts.map +1 -1
  162. package/lib/families/stacks/constants.js +1 -1
  163. package/lib/families/stacks/constants.js.map +1 -1
  164. package/lib/featureFlags/FeatureToggle.d.ts +2 -2
  165. package/lib/featureFlags/FeatureToggle.d.ts.map +1 -1
  166. package/lib/featureFlags/FeatureToggle.js.map +1 -1
  167. package/lib/featureFlags/defaultFeatures.d.ts +2 -0
  168. package/lib/featureFlags/defaultFeatures.d.ts.map +1 -1
  169. package/lib/featureFlags/defaultFeatures.js +22 -1
  170. package/lib/featureFlags/defaultFeatures.js.map +1 -1
  171. package/lib/featureFlags/firebaseFeatureFlags.js +1 -1
  172. package/lib/featureFlags/firebaseFeatureFlags.js.map +1 -1
  173. package/lib/featureFlags/stakePrograms/index.js +4 -4
  174. package/lib/featureFlags/stakePrograms/index.js.map +1 -1
  175. package/lib/featureFlags/useFeature.d.ts +1 -1
  176. package/lib/featureFlags/useFeature.d.ts.map +1 -1
  177. package/lib/featureFlags/useHasOverriddenFeatureFlags.js +1 -1
  178. package/lib/featureFlags/useHasOverriddenFeatureFlags.js.map +1 -1
  179. package/lib/generated/bridge/js.d.ts +0 -1
  180. package/lib/generated/bridge/js.d.ts.map +1 -1
  181. package/lib/generated/bridge/js.js +30 -32
  182. package/lib/generated/bridge/js.js.map +1 -1
  183. package/lib/generated/bridge/mock.d.ts +1 -0
  184. package/lib/generated/bridge/mock.d.ts.map +1 -1
  185. package/lib/helpers/cryptoIconSize.d.ts +3 -0
  186. package/lib/helpers/cryptoIconSize.d.ts.map +1 -0
  187. package/lib/helpers/cryptoIconSize.js +40 -0
  188. package/lib/helpers/cryptoIconSize.js.map +1 -0
  189. package/lib/helpers.d.ts +1 -0
  190. package/lib/helpers.d.ts.map +1 -1
  191. package/lib/helpers.js +15 -0
  192. package/lib/helpers.js.map +1 -1
  193. package/lib/hooks/useHtmlLinkSegments.d.ts +19 -0
  194. package/lib/hooks/useHtmlLinkSegments.d.ts.map +1 -0
  195. package/lib/hooks/useHtmlLinkSegments.js +128 -0
  196. package/lib/hooks/useHtmlLinkSegments.js.map +1 -0
  197. package/lib/hw/getAppAndVersion.d.ts +3 -1
  198. package/lib/hw/getAppAndVersion.d.ts.map +1 -1
  199. package/lib/hw/getAppAndVersion.js +2 -2
  200. package/lib/hw/getAppAndVersion.js.map +1 -1
  201. package/lib/hw/getBitcoinLikeInfo.js +1 -1
  202. package/lib/hw/getBitcoinLikeInfo.js.map +1 -1
  203. package/lib/hw/isFirmwareUpdateVersionSupported.d.ts +2 -2
  204. package/lib/hw/isFirmwareUpdateVersionSupported.d.ts.map +1 -1
  205. package/lib/hw/isFirmwareUpdateVersionSupported.js +20 -7
  206. package/lib/hw/isFirmwareUpdateVersionSupported.js.map +1 -1
  207. package/lib/load/speculos.d.ts.map +1 -1
  208. package/lib/load/speculos.js +1 -0
  209. package/lib/load/speculos.js.map +1 -1
  210. package/lib/market/api/index.d.ts.map +1 -1
  211. package/lib/market/api/index.js +7 -7
  212. package/lib/market/api/index.js.map +1 -1
  213. package/lib/market/utils/types.d.ts +5 -0
  214. package/lib/market/utils/types.d.ts.map +1 -1
  215. package/lib/market/utils/types.js.map +1 -1
  216. package/lib/mock/account.js +1 -1
  217. package/lib/mock/account.js.map +1 -1
  218. package/lib/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.d.ts.map +1 -1
  219. package/lib/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.js +6 -0
  220. package/lib/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.js.map +1 -1
  221. package/lib/notifications/AnnouncementProvider/api/api.js +2 -2
  222. package/lib/notifications/AnnouncementProvider/api/api.js.map +1 -1
  223. package/lib/notifications/ServiceStatusProvider/api/api.js +2 -2
  224. package/lib/notifications/ServiceStatusProvider/api/api.js.map +1 -1
  225. package/lib/operation.d.ts.map +1 -1
  226. package/lib/operation.js +7 -2
  227. package/lib/operation.js.map +1 -1
  228. package/lib/platform/providers/RampCatalogProvider/api/index.js +2 -2
  229. package/lib/platform/providers/RampCatalogProvider/api/index.js.map +1 -1
  230. package/lib/platform/providers/RampCatalogProvider/index.d.ts +1 -1
  231. package/lib/platform/providers/RampCatalogProvider/index.d.ts.map +1 -1
  232. package/lib/platform/providers/RemoteLiveAppProvider/index.d.ts +1 -1
  233. package/lib/platform/providers/RemoteLiveAppProvider/index.d.ts.map +1 -1
  234. package/lib/postOnboarding/reducer.d.ts +2 -0
  235. package/lib/postOnboarding/reducer.d.ts.map +1 -1
  236. package/lib/wallet-api/Exchange/SwapError.d.ts +93 -0
  237. package/lib/wallet-api/Exchange/SwapError.d.ts.map +1 -0
  238. package/lib/wallet-api/Exchange/SwapError.js +142 -0
  239. package/lib/wallet-api/Exchange/SwapError.js.map +1 -0
  240. package/lib/wallet-api/Exchange/handleSwapErrors.d.ts +40 -0
  241. package/lib/wallet-api/Exchange/handleSwapErrors.d.ts.map +1 -0
  242. package/lib/wallet-api/Exchange/handleSwapErrors.js +112 -0
  243. package/lib/wallet-api/Exchange/handleSwapErrors.js.map +1 -0
  244. package/lib/wallet-api/Exchange/index.d.ts +4 -0
  245. package/lib/wallet-api/Exchange/index.d.ts.map +1 -0
  246. package/lib/wallet-api/Exchange/index.js +27 -0
  247. package/lib/wallet-api/Exchange/index.js.map +1 -0
  248. package/lib/wallet-api/Exchange/parser.d.ts +46 -0
  249. package/lib/wallet-api/Exchange/parser.d.ts.map +1 -0
  250. package/lib/wallet-api/Exchange/parser.js +97 -0
  251. package/lib/wallet-api/Exchange/parser.js.map +1 -0
  252. package/lib/wallet-api/Exchange/server.d.ts.map +1 -1
  253. package/lib/wallet-api/Exchange/server.js +227 -174
  254. package/lib/wallet-api/Exchange/server.js.map +1 -1
  255. package/lib/wallet-api/Exchange/tracking.d.ts +7 -6
  256. package/lib/wallet-api/Exchange/tracking.d.ts.map +1 -1
  257. package/lib/wallet-api/Exchange/tracking.js +52 -13
  258. package/lib/wallet-api/Exchange/tracking.js.map +1 -1
  259. package/lib/wallet-api/LocalLiveAppProvider/index.d.ts +1 -1
  260. package/lib/wallet-api/LocalLiveAppProvider/index.d.ts.map +1 -1
  261. package/lib/wallet-api/constants.d.ts +1 -1
  262. package/lib/wallet-api/logic.d.ts +1 -1
  263. package/lib/wallet-api/logic.d.ts.map +1 -1
  264. package/lib/wallet-api/logic.js +5 -5
  265. package/lib/wallet-api/logic.js.map +1 -1
  266. package/lib/wallet-api/react.d.ts.map +1 -1
  267. package/lib/wallet-api/react.js +9 -6
  268. package/lib/wallet-api/react.js.map +1 -1
  269. package/lib/wallet-api/tracking.d.ts +5 -5
  270. package/lib/wallet-api/tracking.d.ts.map +1 -1
  271. package/lib/wallet-api/tracking.js +30 -10
  272. package/lib/wallet-api/tracking.js.map +1 -1
  273. package/lib/wallet-api/useDappLogic.d.ts.map +1 -1
  274. package/lib/wallet-api/useDappLogic.js +31 -20
  275. package/lib/wallet-api/useDappLogic.js.map +1 -1
  276. package/lib/wallet-api/utils/extractDappURLFromManifest.js +3 -3
  277. package/lib/wallet-api/utils/extractDappURLFromManifest.js.map +1 -1
  278. package/lib/wallet-api/utils/extractURLFromManifest.js +1 -1
  279. package/lib/wallet-api/utils/extractURLFromManifest.js.map +1 -1
  280. package/lib/walletSync/getEnvironmentParams.js +6 -6
  281. package/lib/walletSync/getEnvironmentParams.js.map +1 -1
  282. package/lib-es/__tests__/test-helpers/bridge.js +1 -1
  283. package/lib-es/__tests__/test-helpers/bridge.js.map +1 -1
  284. package/lib-es/__tests__/test-helpers/environment.js +3 -0
  285. package/lib-es/__tests__/test-helpers/environment.js.map +1 -1
  286. package/lib-es/account/index.d.ts +1 -0
  287. package/lib-es/account/index.d.ts.map +1 -1
  288. package/lib-es/account/index.js +1 -0
  289. package/lib-es/account/index.js.map +1 -1
  290. package/lib-es/account/recentAddresses.d.ts +10 -0
  291. package/lib-es/account/recentAddresses.d.ts.map +1 -0
  292. package/lib-es/account/recentAddresses.js +55 -0
  293. package/lib-es/account/recentAddresses.js.map +1 -0
  294. package/lib-es/account/serialization.js +1 -1
  295. package/lib-es/account/serialization.js.map +1 -1
  296. package/lib-es/account/support.js +1 -1
  297. package/lib-es/account/support.js.map +1 -1
  298. package/lib-es/bridge/generic-alpaca/accountBridge.d.ts +1 -1
  299. package/lib-es/bridge/generic-alpaca/accountBridge.d.ts.map +1 -1
  300. package/lib-es/bridge/generic-alpaca/accountBridge.js +2 -1
  301. package/lib-es/bridge/generic-alpaca/accountBridge.js.map +1 -1
  302. package/lib-es/bridge/generic-alpaca/broadcast.d.ts.map +1 -1
  303. package/lib-es/bridge/generic-alpaca/broadcast.js +3 -3
  304. package/lib-es/bridge/generic-alpaca/broadcast.js.map +1 -1
  305. package/lib-es/bridge/generic-alpaca/currencyBridge.d.ts.map +1 -1
  306. package/lib-es/bridge/generic-alpaca/currencyBridge.js +3 -3
  307. package/lib-es/bridge/generic-alpaca/currencyBridge.js.map +1 -1
  308. package/lib-es/bridge/generic-alpaca/estimateMaxSpendable.d.ts.map +1 -1
  309. package/lib-es/bridge/generic-alpaca/estimateMaxSpendable.js +2 -1
  310. package/lib-es/bridge/generic-alpaca/estimateMaxSpendable.js.map +1 -1
  311. package/lib-es/bridge/generic-alpaca/getAccountShape.d.ts.map +1 -1
  312. package/lib-es/bridge/generic-alpaca/getAccountShape.js +24 -8
  313. package/lib-es/bridge/generic-alpaca/getAccountShape.js.map +1 -1
  314. package/lib-es/bridge/generic-alpaca/getTransactionStatus.d.ts.map +1 -1
  315. package/lib-es/bridge/generic-alpaca/getTransactionStatus.js +16 -1
  316. package/lib-es/bridge/generic-alpaca/getTransactionStatus.js.map +1 -1
  317. package/lib-es/bridge/generic-alpaca/postSync.d.ts +16 -0
  318. package/lib-es/bridge/generic-alpaca/postSync.d.ts.map +1 -0
  319. package/lib-es/bridge/generic-alpaca/postSync.js +37 -0
  320. package/lib-es/bridge/generic-alpaca/postSync.js.map +1 -0
  321. package/lib-es/bridge/generic-alpaca/prepareTransaction.d.ts.map +1 -1
  322. package/lib-es/bridge/generic-alpaca/prepareTransaction.js +45 -4
  323. package/lib-es/bridge/generic-alpaca/prepareTransaction.js.map +1 -1
  324. package/lib-es/bridge/generic-alpaca/signOperation.d.ts.map +1 -1
  325. package/lib-es/bridge/generic-alpaca/signOperation.js +18 -2
  326. package/lib-es/bridge/generic-alpaca/signOperation.js.map +1 -1
  327. package/lib-es/bridge/generic-alpaca/signer/Eth.d.ts +2 -0
  328. package/lib-es/bridge/generic-alpaca/signer/Eth.d.ts.map +1 -1
  329. package/lib-es/bridge/generic-alpaca/signer/Eth.js +4 -0
  330. package/lib-es/bridge/generic-alpaca/signer/Eth.js.map +1 -1
  331. package/lib-es/bridge/generic-alpaca/signer/index.d.ts.map +1 -1
  332. package/lib-es/bridge/generic-alpaca/signer/index.js +7 -0
  333. package/lib-es/bridge/generic-alpaca/signer/index.js.map +1 -1
  334. package/lib-es/bridge/generic-alpaca/types.d.ts +4 -0
  335. package/lib-es/bridge/generic-alpaca/types.d.ts.map +1 -1
  336. package/lib-es/bridge/generic-alpaca/utils.d.ts.map +1 -1
  337. package/lib-es/bridge/generic-alpaca/utils.js +12 -3
  338. package/lib-es/bridge/generic-alpaca/utils.js.map +1 -1
  339. package/lib-es/bridge/impl.d.ts.map +1 -1
  340. package/lib-es/bridge/impl.js +14 -3
  341. package/lib-es/bridge/impl.js.map +1 -1
  342. package/lib-es/bridge/react/BridgeSync.d.ts +1 -1
  343. package/lib-es/bridge/react/BridgeSync.d.ts.map +1 -1
  344. package/lib-es/bridge/react/BridgeSync.js.map +1 -1
  345. package/lib-es/currencies/helpers.d.ts +1 -0
  346. package/lib-es/currencies/helpers.d.ts.map +1 -1
  347. package/lib-es/currencies/helpers.js +5 -0
  348. package/lib-es/currencies/helpers.js.map +1 -1
  349. package/lib-es/deposit/api.js +1 -1
  350. package/lib-es/deposit/api.js.map +1 -1
  351. package/lib-es/domain/getTokensWithFunds.d.ts +7 -1
  352. package/lib-es/domain/getTokensWithFunds.d.ts.map +1 -1
  353. package/lib-es/domain/getTokensWithFunds.js +13 -3
  354. package/lib-es/domain/getTokensWithFunds.js.map +1 -1
  355. package/lib-es/domain/getTotalStakeableAssets.d.ts +10 -0
  356. package/lib-es/domain/getTotalStakeableAssets.d.ts.map +1 -0
  357. package/lib-es/domain/getTotalStakeableAssets.js +31 -0
  358. package/lib-es/domain/getTotalStakeableAssets.js.map +1 -0
  359. package/lib-es/e2e/data/deviceLabelsData.d.ts.map +1 -1
  360. package/lib-es/e2e/data/deviceLabelsData.js +1 -0
  361. package/lib-es/e2e/data/deviceLabelsData.js.map +1 -1
  362. package/lib-es/e2e/data/regexes.d.ts +2 -0
  363. package/lib-es/e2e/data/regexes.d.ts.map +1 -0
  364. package/lib-es/e2e/data/regexes.js +2 -0
  365. package/lib-es/e2e/data/regexes.js.map +1 -0
  366. package/lib-es/e2e/enum/Device.d.ts +1 -0
  367. package/lib-es/e2e/enum/Device.d.ts.map +1 -1
  368. package/lib-es/e2e/enum/Device.js +1 -0
  369. package/lib-es/e2e/enum/Device.js.map +1 -1
  370. package/lib-es/e2e/families/cardano.d.ts.map +1 -1
  371. package/lib-es/e2e/families/cardano.js +29 -14
  372. package/lib-es/e2e/families/cardano.js.map +1 -1
  373. package/lib-es/e2e/index.d.ts +35 -3
  374. package/lib-es/e2e/index.d.ts.map +1 -1
  375. package/lib-es/e2e/index.js +16 -0
  376. package/lib-es/e2e/index.js.map +1 -1
  377. package/lib-es/e2e/speculos.d.ts.map +1 -1
  378. package/lib-es/e2e/speculos.js +31 -4
  379. package/lib-es/e2e/speculos.js.map +1 -1
  380. package/lib-es/e2e/speculosAppVersion.d.ts.map +1 -1
  381. package/lib-es/e2e/speculosAppVersion.js +6 -2
  382. package/lib-es/e2e/speculosAppVersion.js.map +1 -1
  383. package/lib-es/e2e/swap.d.ts.map +1 -1
  384. package/lib-es/e2e/swap.js +7 -6
  385. package/lib-es/e2e/swap.js.map +1 -1
  386. package/lib-es/env.react.d.ts +1 -1
  387. package/lib-es/env.react.d.ts.map +1 -1
  388. package/lib-es/exchange/swap/api/v5/fetchCurrencyAll.js +1 -1
  389. package/lib-es/exchange/swap/api/v5/fetchCurrencyAll.js.map +1 -1
  390. package/lib-es/exchange/swap/api/v5/fetchCurrencyFrom.js +2 -2
  391. package/lib-es/exchange/swap/api/v5/fetchCurrencyFrom.js.map +1 -1
  392. package/lib-es/exchange/swap/api/v5/fetchCurrencyTo.js +1 -1
  393. package/lib-es/exchange/swap/api/v5/fetchCurrencyTo.js.map +1 -1
  394. package/lib-es/exchange/swap/api/v5/fetchRates.js +1 -1
  395. package/lib-es/exchange/swap/api/v5/fetchRates.js.map +1 -1
  396. package/lib-es/exchange/swap/getIncompatibleCurrencyKeys.d.ts.map +1 -1
  397. package/lib-es/exchange/swap/getIncompatibleCurrencyKeys.js +4 -0
  398. package/lib-es/exchange/swap/getIncompatibleCurrencyKeys.js.map +1 -1
  399. package/lib-es/exchange/swap/postSwapState.d.ts.map +1 -1
  400. package/lib-es/exchange/swap/postSwapState.js +10 -6
  401. package/lib-es/exchange/swap/postSwapState.js.map +1 -1
  402. package/lib-es/exchange/swap/transactionStrategies.d.ts +3 -2
  403. package/lib-es/exchange/swap/transactionStrategies.d.ts.map +1 -1
  404. package/lib-es/exchange/swap/transactionStrategies.js +26 -7
  405. package/lib-es/exchange/swap/transactionStrategies.js.map +1 -1
  406. package/lib-es/exchange/swap/types.d.ts +3 -1
  407. package/lib-es/exchange/swap/types.d.ts.map +1 -1
  408. package/lib-es/families/bitcoin/bridge/api.js +1 -1
  409. package/lib-es/families/bitcoin/bridge/api.js.map +1 -1
  410. package/lib-es/families/bitcoin/walletApiAdapter.d.ts.map +1 -1
  411. package/lib-es/families/bitcoin/walletApiAdapter.js +3 -0
  412. package/lib-es/families/bitcoin/walletApiAdapter.js.map +1 -1
  413. package/lib-es/families/canton/config.d.ts.map +1 -1
  414. package/lib-es/families/canton/config.js +4 -4
  415. package/lib-es/families/canton/config.js.map +1 -1
  416. package/lib-es/families/canton/react.d.ts +2 -0
  417. package/lib-es/families/canton/react.d.ts.map +1 -1
  418. package/lib-es/families/canton/react.js +38 -1
  419. package/lib-es/families/canton/react.js.map +1 -1
  420. package/lib-es/families/celo/setup.d.ts.map +1 -1
  421. package/lib-es/families/celo/setup.js +11 -0
  422. package/lib-es/families/celo/setup.js.map +1 -1
  423. package/lib-es/families/evm/bridge/mock.d.ts +1 -0
  424. package/lib-es/families/evm/bridge/mock.d.ts.map +1 -1
  425. package/lib-es/families/evm/bridge/mock.js +12 -0
  426. package/lib-es/families/evm/bridge/mock.js.map +1 -1
  427. package/lib-es/families/evm/setup.d.ts +1 -4
  428. package/lib-es/families/evm/setup.d.ts.map +1 -1
  429. package/lib-es/families/evm/setup.js +2 -8
  430. package/lib-es/families/evm/setup.js.map +1 -1
  431. package/lib-es/families/evm/walletApiAdapter.d.ts +7 -0
  432. package/lib-es/families/evm/walletApiAdapter.d.ts.map +1 -1
  433. package/lib-es/families/evm/walletApiAdapter.js +30 -1
  434. package/lib-es/families/evm/walletApiAdapter.js.map +1 -1
  435. package/lib-es/families/hedera/react.d.ts +6 -0
  436. package/lib-es/families/hedera/react.d.ts.map +1 -0
  437. package/lib-es/families/hedera/react.js +41 -0
  438. package/lib-es/families/hedera/react.js.map +1 -0
  439. package/lib-es/families/polkadot/config.js +1 -1
  440. package/lib-es/families/polkadot/config.js.map +1 -1
  441. package/lib-es/families/stacks/constants.d.ts +1 -1
  442. package/lib-es/families/stacks/constants.d.ts.map +1 -1
  443. package/lib-es/families/stacks/constants.js +1 -1
  444. package/lib-es/families/stacks/constants.js.map +1 -1
  445. package/lib-es/featureFlags/FeatureToggle.d.ts +2 -2
  446. package/lib-es/featureFlags/FeatureToggle.d.ts.map +1 -1
  447. package/lib-es/featureFlags/FeatureToggle.js.map +1 -1
  448. package/lib-es/featureFlags/defaultFeatures.d.ts +2 -0
  449. package/lib-es/featureFlags/defaultFeatures.d.ts.map +1 -1
  450. package/lib-es/featureFlags/defaultFeatures.js +22 -1
  451. package/lib-es/featureFlags/defaultFeatures.js.map +1 -1
  452. package/lib-es/featureFlags/firebaseFeatureFlags.js +1 -1
  453. package/lib-es/featureFlags/firebaseFeatureFlags.js.map +1 -1
  454. package/lib-es/featureFlags/stakePrograms/index.js +4 -4
  455. package/lib-es/featureFlags/stakePrograms/index.js.map +1 -1
  456. package/lib-es/featureFlags/useFeature.d.ts +1 -1
  457. package/lib-es/featureFlags/useFeature.d.ts.map +1 -1
  458. package/lib-es/featureFlags/useHasOverriddenFeatureFlags.js +1 -1
  459. package/lib-es/featureFlags/useHasOverriddenFeatureFlags.js.map +1 -1
  460. package/lib-es/generated/bridge/js.d.ts +0 -1
  461. package/lib-es/generated/bridge/js.d.ts.map +1 -1
  462. package/lib-es/generated/bridge/js.js +0 -2
  463. package/lib-es/generated/bridge/js.js.map +1 -1
  464. package/lib-es/generated/bridge/mock.d.ts +1 -0
  465. package/lib-es/generated/bridge/mock.d.ts.map +1 -1
  466. package/lib-es/helpers/cryptoIconSize.d.ts +3 -0
  467. package/lib-es/helpers/cryptoIconSize.d.ts.map +1 -0
  468. package/lib-es/helpers/cryptoIconSize.js +35 -0
  469. package/lib-es/helpers/cryptoIconSize.js.map +1 -0
  470. package/lib-es/helpers.d.ts +1 -0
  471. package/lib-es/helpers.d.ts.map +1 -1
  472. package/lib-es/helpers.js +1 -0
  473. package/lib-es/helpers.js.map +1 -1
  474. package/lib-es/hooks/useHtmlLinkSegments.d.ts +19 -0
  475. package/lib-es/hooks/useHtmlLinkSegments.d.ts.map +1 -0
  476. package/lib-es/hooks/useHtmlLinkSegments.js +121 -0
  477. package/lib-es/hooks/useHtmlLinkSegments.js.map +1 -0
  478. package/lib-es/hw/getAppAndVersion.d.ts +3 -1
  479. package/lib-es/hw/getAppAndVersion.d.ts.map +1 -1
  480. package/lib-es/hw/getAppAndVersion.js +2 -2
  481. package/lib-es/hw/getAppAndVersion.js.map +1 -1
  482. package/lib-es/hw/getBitcoinLikeInfo.js +1 -1
  483. package/lib-es/hw/getBitcoinLikeInfo.js.map +1 -1
  484. package/lib-es/hw/isFirmwareUpdateVersionSupported.d.ts +2 -2
  485. package/lib-es/hw/isFirmwareUpdateVersionSupported.d.ts.map +1 -1
  486. package/lib-es/hw/isFirmwareUpdateVersionSupported.js +17 -7
  487. package/lib-es/hw/isFirmwareUpdateVersionSupported.js.map +1 -1
  488. package/lib-es/load/speculos.d.ts.map +1 -1
  489. package/lib-es/load/speculos.js +1 -0
  490. package/lib-es/load/speculos.js.map +1 -1
  491. package/lib-es/market/api/index.d.ts.map +1 -1
  492. package/lib-es/market/api/index.js +1 -1
  493. package/lib-es/market/api/index.js.map +1 -1
  494. package/lib-es/market/utils/types.d.ts +5 -0
  495. package/lib-es/market/utils/types.d.ts.map +1 -1
  496. package/lib-es/market/utils/types.js.map +1 -1
  497. package/lib-es/mock/account.js +1 -1
  498. package/lib-es/mock/account.js.map +1 -1
  499. package/lib-es/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.d.ts.map +1 -1
  500. package/lib-es/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.js +6 -0
  501. package/lib-es/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.js.map +1 -1
  502. package/lib-es/notifications/AnnouncementProvider/api/api.js +1 -1
  503. package/lib-es/notifications/AnnouncementProvider/api/api.js.map +1 -1
  504. package/lib-es/notifications/ServiceStatusProvider/api/api.js +1 -1
  505. package/lib-es/notifications/ServiceStatusProvider/api/api.js.map +1 -1
  506. package/lib-es/operation.d.ts.map +1 -1
  507. package/lib-es/operation.js +7 -2
  508. package/lib-es/operation.js.map +1 -1
  509. package/lib-es/platform/providers/RampCatalogProvider/api/index.js +1 -1
  510. package/lib-es/platform/providers/RampCatalogProvider/api/index.js.map +1 -1
  511. package/lib-es/platform/providers/RampCatalogProvider/index.d.ts +1 -1
  512. package/lib-es/platform/providers/RampCatalogProvider/index.d.ts.map +1 -1
  513. package/lib-es/platform/providers/RemoteLiveAppProvider/index.d.ts +1 -1
  514. package/lib-es/platform/providers/RemoteLiveAppProvider/index.d.ts.map +1 -1
  515. package/lib-es/postOnboarding/reducer.d.ts +2 -0
  516. package/lib-es/postOnboarding/reducer.d.ts.map +1 -1
  517. package/lib-es/wallet-api/Exchange/SwapError.d.ts +93 -0
  518. package/lib-es/wallet-api/Exchange/SwapError.d.ts.map +1 -0
  519. package/lib-es/wallet-api/Exchange/SwapError.js +128 -0
  520. package/lib-es/wallet-api/Exchange/SwapError.js.map +1 -0
  521. package/lib-es/wallet-api/Exchange/handleSwapErrors.d.ts +40 -0
  522. package/lib-es/wallet-api/Exchange/handleSwapErrors.d.ts.map +1 -0
  523. package/lib-es/wallet-api/Exchange/handleSwapErrors.js +106 -0
  524. package/lib-es/wallet-api/Exchange/handleSwapErrors.js.map +1 -0
  525. package/lib-es/wallet-api/Exchange/index.d.ts +4 -0
  526. package/lib-es/wallet-api/Exchange/index.d.ts.map +1 -0
  527. package/lib-es/wallet-api/Exchange/index.js +7 -0
  528. package/lib-es/wallet-api/Exchange/index.js.map +1 -0
  529. package/lib-es/wallet-api/Exchange/parser.d.ts +46 -0
  530. package/lib-es/wallet-api/Exchange/parser.d.ts.map +1 -0
  531. package/lib-es/wallet-api/Exchange/parser.js +90 -0
  532. package/lib-es/wallet-api/Exchange/parser.js.map +1 -0
  533. package/lib-es/wallet-api/Exchange/server.d.ts.map +1 -1
  534. package/lib-es/wallet-api/Exchange/server.js +224 -174
  535. package/lib-es/wallet-api/Exchange/server.js.map +1 -1
  536. package/lib-es/wallet-api/Exchange/tracking.d.ts +7 -6
  537. package/lib-es/wallet-api/Exchange/tracking.d.ts.map +1 -1
  538. package/lib-es/wallet-api/Exchange/tracking.js +52 -13
  539. package/lib-es/wallet-api/Exchange/tracking.js.map +1 -1
  540. package/lib-es/wallet-api/LocalLiveAppProvider/index.d.ts +1 -1
  541. package/lib-es/wallet-api/LocalLiveAppProvider/index.d.ts.map +1 -1
  542. package/lib-es/wallet-api/constants.d.ts +1 -1
  543. package/lib-es/wallet-api/logic.d.ts +1 -1
  544. package/lib-es/wallet-api/logic.d.ts.map +1 -1
  545. package/lib-es/wallet-api/logic.js +5 -5
  546. package/lib-es/wallet-api/logic.js.map +1 -1
  547. package/lib-es/wallet-api/react.d.ts.map +1 -1
  548. package/lib-es/wallet-api/react.js +9 -6
  549. package/lib-es/wallet-api/react.js.map +1 -1
  550. package/lib-es/wallet-api/tracking.d.ts +5 -5
  551. package/lib-es/wallet-api/tracking.d.ts.map +1 -1
  552. package/lib-es/wallet-api/tracking.js +30 -10
  553. package/lib-es/wallet-api/tracking.js.map +1 -1
  554. package/lib-es/wallet-api/useDappLogic.d.ts.map +1 -1
  555. package/lib-es/wallet-api/useDappLogic.js +31 -20
  556. package/lib-es/wallet-api/useDappLogic.js.map +1 -1
  557. package/lib-es/wallet-api/utils/extractDappURLFromManifest.js +3 -3
  558. package/lib-es/wallet-api/utils/extractDappURLFromManifest.js.map +1 -1
  559. package/lib-es/wallet-api/utils/extractURLFromManifest.js +1 -1
  560. package/lib-es/wallet-api/utils/extractURLFromManifest.js.map +1 -1
  561. package/lib-es/walletSync/getEnvironmentParams.js +6 -6
  562. package/lib-es/walletSync/getEnvironmentParams.js.map +1 -1
  563. package/package.json +82 -90
  564. package/src/__tests__/test-helpers/bridge.ts +1 -1
  565. package/src/__tests__/test-helpers/environment.ts +3 -0
  566. package/src/account/index.ts +6 -0
  567. package/src/account/recentAddresses.test.ts +104 -0
  568. package/src/account/recentAddresses.ts +84 -0
  569. package/src/account/serialization.ts +1 -1
  570. package/src/account/support.ts +1 -1
  571. package/src/bridge/generic-alpaca/accountBridge.ts +3 -2
  572. package/src/bridge/generic-alpaca/broadcast.ts +6 -3
  573. package/src/bridge/generic-alpaca/currencyBridge.ts +3 -3
  574. package/src/bridge/generic-alpaca/estimateMaxSpendable.ts +2 -1
  575. package/src/bridge/generic-alpaca/getAccountShape.ts +36 -13
  576. package/src/bridge/generic-alpaca/getTransactionStatus.ts +16 -1
  577. package/src/bridge/generic-alpaca/postSync.test.ts +97 -0
  578. package/src/bridge/generic-alpaca/postSync.ts +42 -0
  579. package/src/bridge/generic-alpaca/prepareTransaction.ts +51 -10
  580. package/src/bridge/generic-alpaca/signOperation.ts +18 -2
  581. package/src/bridge/generic-alpaca/signer/Eth.ts +5 -1
  582. package/src/bridge/generic-alpaca/signer/index.ts +7 -0
  583. package/src/bridge/generic-alpaca/tests/getAccountShape.test.ts +43 -10
  584. package/src/bridge/generic-alpaca/tests/prepareTransaction.test.ts +74 -0
  585. package/src/bridge/generic-alpaca/types.ts +4 -0
  586. package/src/bridge/generic-alpaca/utils.test.ts +4 -0
  587. package/src/bridge/generic-alpaca/utils.ts +15 -3
  588. package/src/bridge/impl.ts +16 -3
  589. package/src/bridge/react/BridgeSync.tsx +1 -1
  590. package/src/currencies/helpers.test.ts +10 -1
  591. package/src/currencies/helpers.ts +6 -0
  592. package/src/deposit/api.ts +2 -2
  593. package/src/domain/getTokensWithFunds.ts +18 -5
  594. package/src/domain/getTotalStakeableAssets.test.ts +267 -0
  595. package/src/domain/getTotalStakeableAssets.ts +47 -0
  596. package/src/e2e/data/deviceLabelsData.ts +1 -0
  597. package/src/e2e/data/regexes.ts +1 -0
  598. package/src/e2e/enum/Device.ts +1 -0
  599. package/src/e2e/families/cardano.ts +32 -14
  600. package/src/e2e/index.ts +20 -0
  601. package/src/e2e/speculos.ts +35 -4
  602. package/src/e2e/speculosAppVersion.ts +8 -2
  603. package/src/e2e/swap.ts +8 -7
  604. package/src/exchange/swap/api/v5/__tests__/fetchCurrencyAll.spec.ts +1 -1
  605. package/src/exchange/swap/api/v5/__tests__/fetchCurrencyFrom.spec.ts +1 -1
  606. package/src/exchange/swap/api/v5/__tests__/fetchCurrencyTo.spec.ts +1 -1
  607. package/src/exchange/swap/api/v5/fetchCurrencyAll.ts +1 -1
  608. package/src/exchange/swap/api/v5/fetchCurrencyFrom.ts +2 -2
  609. package/src/exchange/swap/api/v5/fetchCurrencyTo.ts +1 -1
  610. package/src/exchange/swap/api/v5/fetchRates.ts +1 -1
  611. package/src/exchange/swap/getIncompatibleCurrencyKeys.ts +4 -0
  612. package/src/exchange/swap/postSwapState.ts +10 -5
  613. package/src/exchange/swap/transactionStrategies.ts +30 -7
  614. package/src/exchange/swap/types.ts +3 -1
  615. package/src/families/bitcoin/bridge/api.ts +2 -2
  616. package/src/families/bitcoin/walletApiAdapter.test.ts +36 -0
  617. package/src/families/bitcoin/walletApiAdapter.ts +4 -0
  618. package/src/families/canton/config.ts +5 -4
  619. package/src/families/canton/react.test.ts +147 -0
  620. package/src/families/canton/react.ts +45 -1
  621. package/src/families/celo/setup.ts +12 -0
  622. package/src/families/cosmos/datasets/__snapshots__/cosmos.integration.test.ts.snap +73 -4
  623. package/src/families/cosmos/datasets/__snapshots__/cryptoOrg.integration.test.ts.snap +2 -2
  624. package/src/families/cosmos/datasets/__snapshots__/injective.integration.test.ts.snap +2 -2
  625. package/src/families/cosmos/datasets/__snapshots__/mantra.integration.test.ts.snap +2 -2
  626. package/src/families/cosmos/datasets/__snapshots__/osmosis.integration.test.ts.snap +2 -2
  627. package/src/families/cosmos/datasets/__snapshots__/persistence.integration.test.ts.snap +4 -4
  628. package/src/families/cosmos/datasets/__snapshots__/stargaze.integration.test.ts.snap +2 -2
  629. package/src/families/evm/bridge/mock.ts +14 -0
  630. package/src/families/evm/setup.ts +3 -22
  631. package/src/families/evm/walletApiAdapter.ts +33 -1
  632. package/src/families/hedera/__snapshots__/bridge.integration.test.ts.snap +278 -17
  633. package/src/families/hedera/react.test.ts +272 -0
  634. package/src/families/hedera/react.ts +63 -0
  635. package/src/families/polkadot/__snapshots__/bridge.integration.test.ts.snap +6 -3653
  636. package/src/families/polkadot/config.ts +1 -1
  637. package/src/families/stacks/__snapshots__/bridge.integration.test.ts.snap +1537 -18
  638. package/src/families/stacks/__tests__/sync.integration.test.ts +2 -2
  639. package/src/families/stacks/constants.ts +1 -1
  640. package/src/families/stellar/__snapshots__/bridge.integration.test.ts.snap +9 -9
  641. package/src/featureFlags/FeatureToggle.tsx +1 -1
  642. package/src/featureFlags/defaultFeatures.ts +22 -1
  643. package/src/featureFlags/firebaseFeatureFlags.ts +1 -1
  644. package/src/featureFlags/stakePrograms/index.ts +4 -4
  645. package/src/featureFlags/useHasOverriddenFeatureFlags.ts +1 -1
  646. package/src/generated/bridge/js.ts +0 -2
  647. package/src/helpers/cryptoIconSize.ts +25 -0
  648. package/src/helpers.ts +2 -0
  649. package/src/hooks/__tests__/useHtmlLinkSegments.test.ts +105 -0
  650. package/src/hooks/useHtmlLinkSegments.ts +158 -0
  651. package/src/hw/getAppAndVersion.ts +2 -1
  652. package/src/hw/getBitcoinLikeInfo.ts +1 -1
  653. package/src/hw/isFirmwareUpdateVersionSupported.test.ts +36 -32
  654. package/src/hw/isFirmwareUpdateVersionSupported.ts +23 -8
  655. package/src/load/speculos.ts +1 -0
  656. package/src/market/api/index.ts +8 -7
  657. package/src/market/utils/types.ts +6 -0
  658. package/src/mock/account.ts +1 -1
  659. package/src/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.ts +6 -0
  660. package/src/notifications/AnnouncementProvider/api/api.ts +2 -2
  661. package/src/notifications/ServiceStatusProvider/api/api.ts +2 -2
  662. package/src/operation.ts +10 -2
  663. package/src/platform/providers/RampCatalogProvider/api/index.ts +3 -3
  664. package/src/platform/providers/RampCatalogProvider/index.tsx +1 -1
  665. package/src/platform/providers/RemoteLiveAppProvider/index.tsx +1 -1
  666. package/src/wallet-api/Exchange/SwapError.test.ts +126 -0
  667. package/src/wallet-api/Exchange/SwapError.ts +159 -0
  668. package/src/wallet-api/Exchange/handleSwapErrors.test.ts +46 -0
  669. package/src/wallet-api/Exchange/handleSwapErrors.ts +161 -0
  670. package/src/wallet-api/Exchange/index.ts +26 -0
  671. package/src/wallet-api/Exchange/parser.test.ts +86 -0
  672. package/src/wallet-api/Exchange/parser.ts +119 -0
  673. package/src/wallet-api/Exchange/server.ts +289 -232
  674. package/src/wallet-api/Exchange/tracking.ts +56 -13
  675. package/src/wallet-api/LocalLiveAppProvider/index.tsx +1 -1
  676. package/src/wallet-api/logic.ts +5 -4
  677. package/src/wallet-api/react.ts +10 -5
  678. package/src/wallet-api/tracking.ts +30 -10
  679. package/src/wallet-api/useDappLogic.ts +32 -20
  680. package/src/wallet-api/utils/extractDappURLFromManifest.ts +3 -3
  681. package/src/wallet-api/utils/extractURLFromManifest.ts +1 -1
  682. package/src/walletSync/getEnvironmentParams.ts +6 -6
  683. package/lib/currencies/cryptoIcons.d.ts +0 -3
  684. package/lib/currencies/cryptoIcons.d.ts.map +0 -1
  685. package/lib/currencies/cryptoIcons.js +0 -24
  686. package/lib/currencies/cryptoIcons.js.map +0 -1
  687. package/lib/react.d.ts +0 -16
  688. package/lib/react.d.ts.map +0 -1
  689. package/lib/react.js +0 -64
  690. package/lib/react.js.map +0 -1
  691. package/lib/reactNative.d.ts +0 -16
  692. package/lib/reactNative.d.ts.map +0 -1
  693. package/lib/reactNative.js +0 -43
  694. package/lib/reactNative.js.map +0 -1
  695. package/lib-es/currencies/cryptoIcons.d.ts +0 -3
  696. package/lib-es/currencies/cryptoIcons.d.ts.map +0 -1
  697. package/lib-es/currencies/cryptoIcons.js +0 -20
  698. package/lib-es/currencies/cryptoIcons.js.map +0 -1
  699. package/lib-es/react.d.ts +0 -16
  700. package/lib-es/react.d.ts.map +0 -1
  701. package/lib-es/react.js +0 -33
  702. package/lib-es/react.js.map +0 -1
  703. package/lib-es/reactNative.d.ts +0 -16
  704. package/lib-es/reactNative.d.ts.map +0 -1
  705. package/lib-es/reactNative.js +0 -15
  706. package/lib-es/reactNative.js.map +0 -1
  707. package/react.js +0 -1
  708. package/reactNative.js +0 -1
  709. package/src/currencies/cryptoIcons.test.ts +0 -54
  710. package/src/currencies/cryptoIcons.ts +0 -21
  711. package/src/react.tsx +0 -43
  712. package/src/reactNative.ts +0 -23
  713. package/src/reactNativeSvg.d.ts +0 -19
@@ -17,6 +17,19 @@ function isNftCoreOp(operation: Operation): boolean {
17
17
  );
18
18
  }
19
19
 
20
+ function isIncomingCoreOp(operation: Operation): boolean {
21
+ const type =
22
+ typeof operation.details?.ledgerOpType === "string"
23
+ ? operation.details.ledgerOpType
24
+ : operation.type;
25
+
26
+ return type === "IN";
27
+ }
28
+
29
+ function isInternalLiveOp(operation: OperationCommon): boolean {
30
+ return !!operation.extra?.internal;
31
+ }
32
+
20
33
  export function genericGetAccountShape(network: string, kind: string): GetAccountShape {
21
34
  return async (info, syncConfig) => {
22
35
  const { address, initialAccount, currency, derivationMode } = info;
@@ -58,14 +71,14 @@ export function genericGetAccountShape(network: string, kind: string): GetAccoun
58
71
 
59
72
  // Calculate minHeight for pagination
60
73
  const minHeight = syncFromScratch ? 0 : (oldOps[0]?.blockHeight ?? 0) + 1;
61
- const paginationParams: Pagination = { minHeight, order: "asc" };
74
+ const paginationParams: Pagination = { minHeight, order: "desc" };
62
75
  if (lastPagingToken && !syncFromScratch) {
63
76
  paginationParams.lastPagingToken = lastPagingToken;
64
77
  }
65
78
 
66
79
  const [newCoreOps] = await alpacaApi.listOperations(address, paginationParams);
67
80
  const newOps = newCoreOps
68
- .filter(op => !isNftCoreOp(op))
81
+ .filter(op => !isNftCoreOp(op) && (!isIncomingCoreOp(op) || !op.tx.failed))
69
82
  .map(op => adaptCoreOperationToLiveOperation(accountId, op)) as OperationCommon[];
70
83
 
71
84
  const newAssetOperations = newOps.filter(
@@ -74,6 +87,7 @@ export function genericGetAccountShape(network: string, kind: string): GetAccoun
74
87
  operation?.extra?.assetOwner &&
75
88
  !["OPT_IN", "OPT_OUT"].includes(operation.type),
76
89
  );
90
+ const newInternalOperations = newOps.filter(isInternalLiveOp);
77
91
  const newSubAccounts = await buildSubAccounts({
78
92
  accountId,
79
93
  allTokenAssetsBalances,
@@ -85,22 +99,31 @@ export function genericGetAccountShape(network: string, kind: string): GetAccoun
85
99
  ? newSubAccounts
86
100
  : mergeSubAccounts(initialAccount?.subAccounts ?? [], newSubAccounts);
87
101
 
88
- const newOpsWithSubs = newOps.map(op => {
89
- const subOperations = inferSubOperations(op.hash, newSubAccounts);
102
+ const newOpsWithSubs = newOps
103
+ .filter(operation => !isInternalLiveOp(operation))
104
+ .map(op => {
105
+ const subOperations = inferSubOperations(op.hash, newSubAccounts);
106
+ const internalOperations = newInternalOperations.filter(it => it.hash === op.hash);
90
107
 
91
- return cleanedOperation({
92
- ...op,
93
- subOperations,
108
+ return cleanedOperation({
109
+ ...op,
110
+ subOperations,
111
+ internalOperations,
112
+ });
94
113
  });
95
- });
114
+ // Try to refresh known pending and broadcasted operations (if not already updated)
115
+ // Useful for integrations without explorers
116
+ const operationsToRefresh = initialAccount?.pendingOperations.filter(
117
+ pendingOp =>
118
+ pendingOp.hash && // operation has been broadcasted
119
+ !newOpsWithSubs.some(newOp => pendingOp.hash === newOp.hash), // operation is not confirmed yet
120
+ );
96
121
  const confirmedOperations =
97
- alpacaApi.refreshOperations && initialAccount?.pendingOperations.length
98
- ? await alpacaApi.refreshOperations(initialAccount.pendingOperations)
122
+ alpacaApi.refreshOperations && operationsToRefresh?.length
123
+ ? await alpacaApi.refreshOperations(operationsToRefresh)
99
124
  : [];
100
125
  const newOperations = [...confirmedOperations, ...newOpsWithSubs];
101
- const operations = syncFromScratch
102
- ? newOperations
103
- : (mergeOps(oldOps, newOperations) as OperationCommon[]);
126
+ const operations = mergeOps(syncFromScratch ? [] : oldOps, newOperations) as OperationCommon[];
104
127
 
105
128
  const res: Partial<Account> = {
106
129
  id: accountId,
@@ -26,6 +26,7 @@ export function genericGetTransactionStatus(
26
26
  feesStrategy: transaction.feesStrategy,
27
27
  data: transaction.data,
28
28
  type: transaction.type,
29
+ sponsored: transaction.sponsored,
29
30
  };
30
31
 
31
32
  if (alpacaApi.getChainSpecificRules) {
@@ -37,10 +38,24 @@ export function genericGetTransactionStatus(
37
38
  }
38
39
  }
39
40
 
41
+ const fees = BigInt(transaction.fees?.toString() || "0");
42
+ const feesParameters = {
43
+ ...(transaction.gasLimit ? { gasLimit: BigInt(transaction.gasLimit.toFixed()) } : {}),
44
+ ...(transaction.gasPrice ? { gasPrice: BigInt(transaction.gasPrice.toFixed()) } : {}),
45
+ ...(transaction.maxFeePerGas
46
+ ? { maxFeePerGas: BigInt(transaction.maxFeePerGas.toFixed()) }
47
+ : {}),
48
+ ...(transaction.maxPriorityFeePerGas
49
+ ? { maxPriorityFeePerGas: BigInt(transaction.maxPriorityFeePerGas.toFixed()) }
50
+ : {}),
51
+ ...(transaction.additionalFees
52
+ ? { additionalFees: BigInt(transaction.additionalFees.toFixed()) }
53
+ : {}),
54
+ };
40
55
  const { errors, warnings, estimatedFees, amount, totalSpent, totalFees } =
41
56
  await alpacaApi.validateIntent(
42
57
  transactionToIntent(account, draftTransaction, alpacaApi.computeIntentType),
43
- { value: transaction.fees ? BigInt(transaction.fees.toString()) : 0n },
58
+ { value: fees, parameters: feesParameters },
44
59
  );
45
60
 
46
61
  return {
@@ -0,0 +1,97 @@
1
+ import type { Account } from "@ledgerhq/types-live";
2
+ import { postSync } from "./postSync";
3
+ import BigNumber from "bignumber.js";
4
+
5
+ describe("postSync", () => {
6
+ it("removes confirmed and outdated native operations from the pending pool", () => {
7
+ const initialAccount = {
8
+ operations: [{ hash: "hash0", transactionSequenceNumber: new BigNumber(4), type: "OUT" }],
9
+ pendingOperations: [
10
+ { hash: "outdated", transactionSequenceNumber: new BigNumber(3), type: "IN" },
11
+ { hash: "hash1", transactionSequenceNumber: new BigNumber(5), type: "OUT" },
12
+ { hash: "hash2", transactionSequenceNumber: new BigNumber(6), type: "IN" },
13
+ ],
14
+ } as Account;
15
+ const synced = {
16
+ operations: [
17
+ { hash: "hash1", transactionSequenceNumber: new BigNumber(5), type: "OUT" },
18
+ { hash: "hash0", transactionSequenceNumber: new BigNumber(4), type: "OUT" },
19
+ ],
20
+ pendingOperations: [
21
+ { hash: "outdated", transactionSequenceNumber: new BigNumber(3), type: "IN" },
22
+ { hash: "hash1", transactionSequenceNumber: new BigNumber(5), type: "OUT" },
23
+ { hash: "hash2", transactionSequenceNumber: new BigNumber(6), type: "IN" },
24
+ ],
25
+ } as Account;
26
+
27
+ expect(postSync(initialAccount, synced)).toMatchObject({
28
+ operations: [
29
+ { hash: "hash1", transactionSequenceNumber: new BigNumber(5), type: "OUT" },
30
+ { hash: "hash0", transactionSequenceNumber: new BigNumber(4), type: "OUT" },
31
+ ],
32
+ pendingOperations: [
33
+ { hash: "hash2", transactionSequenceNumber: new BigNumber(6), type: "IN" },
34
+ ],
35
+ });
36
+ });
37
+
38
+ it("removes confirmed and outdated token operations from the pending pool", () => {
39
+ const initialAccount = {
40
+ operations: [{ hash: "hash0", transactionSequenceNumber: new BigNumber(4), type: "OUT" }],
41
+ pendingOperations: [
42
+ { hash: "outdated", transactionSequenceNumber: new BigNumber(3), type: "NONE" },
43
+ { hash: "hash1", transactionSequenceNumber: new BigNumber(5), type: "FEES" },
44
+ { hash: "hash2", transactionSequenceNumber: new BigNumber(6), type: "IN" },
45
+ ],
46
+ subAccounts: [
47
+ {
48
+ pendingOperations: [
49
+ { hash: "outdated", transactionSequenceNumber: new BigNumber(3), type: "IN" },
50
+ { hash: "hash1", transactionSequenceNumber: new BigNumber(5), type: "FEES" },
51
+ ],
52
+ },
53
+ ],
54
+ } as Account;
55
+ const synced = {
56
+ operations: [
57
+ { hash: "hash1", transactionSequenceNumber: new BigNumber(5), type: "FEES" },
58
+ { hash: "hash0", transactionSequenceNumber: new BigNumber(4), type: "OUT" },
59
+ ],
60
+ pendingOperations: [
61
+ { hash: "outdated", transactionSequenceNumber: new BigNumber(3), type: "NONE" },
62
+ { hash: "hash1", transactionSequenceNumber: new BigNumber(5), type: "FEES" },
63
+ { hash: "hash2", transactionSequenceNumber: new BigNumber(6), type: "IN" },
64
+ ],
65
+ subAccounts: [
66
+ {
67
+ operations: [{ hash: "hash1", transactionSequenceNumber: new BigNumber(5), type: "OUT" }],
68
+ pendingOperations: [
69
+ { hash: "outdated", transactionSequenceNumber: new BigNumber(3), type: "IN" },
70
+ ],
71
+ },
72
+ ],
73
+ } as Account;
74
+
75
+ expect(postSync(initialAccount, synced)).toMatchObject({
76
+ operations: [
77
+ { hash: "hash1", transactionSequenceNumber: new BigNumber(5), type: "FEES" },
78
+ { hash: "hash0", transactionSequenceNumber: new BigNumber(4), type: "OUT" },
79
+ ],
80
+ pendingOperations: [
81
+ { hash: "hash2", transactionSequenceNumber: new BigNumber(6), type: "IN" },
82
+ ],
83
+ subAccounts: [
84
+ {
85
+ operations: [
86
+ {
87
+ hash: "hash1",
88
+ transactionSequenceNumber: new BigNumber(5),
89
+ type: "OUT",
90
+ },
91
+ ],
92
+ pendingOperations: [],
93
+ },
94
+ ],
95
+ });
96
+ });
97
+ });
@@ -0,0 +1,42 @@
1
+ import type { Account, AccountLike, Operation } from "@ledgerhq/types-live";
2
+ import BigNumber from "bignumber.js";
3
+
4
+ /**
5
+ * After each sync or scan, remove operations from the pending pools if necessary
6
+ * Operations stay pending if and only if
7
+ * - they are confirmed, i.e. their hash appear in the operation list
8
+ * - they are not outdated, i.e. their sequence number is at least greater than the
9
+ * sequence number of the latest transaction
10
+ * NOTE Compared to the default behaviour
11
+ * - pending operations of token accounts are cleaned up, so we don't see both pending and completed
12
+ * sub operations in the operation details drawer
13
+ * - pending operations are cleaned if their hash already belong to the completed operations, preventing
14
+ * undesired replacement (ex: optimistic operation for self token sending on EVM is incomplete, since
15
+ * it only contains the OUT sub operation)
16
+ */
17
+ export function postSync(initial: Account, synced: Account): Account {
18
+ const lastOperation = synced.operations.find(op => ["OUT", "FEES"].includes(op.type));
19
+ const latestSequence = lastOperation?.transactionSequenceNumber || new BigNumber(-1);
20
+
21
+ function isPending(account: AccountLike, op: Operation): boolean {
22
+ return (
23
+ // Operation is not confirmed
24
+ !account.operations.some(o => o.hash === op.hash) &&
25
+ // Operation is not outdated
26
+ op.transactionSequenceNumber !== undefined &&
27
+ op.transactionSequenceNumber.gt(latestSequence)
28
+ );
29
+ }
30
+
31
+ const pendingOperations = initial.pendingOperations.length
32
+ ? initial.pendingOperations.filter(op => isPending(synced, op))
33
+ : [];
34
+ const subAccounts = synced.subAccounts?.length
35
+ ? synced.subAccounts.map(subAccount => ({
36
+ ...subAccount,
37
+ pendingOperations: subAccount.pendingOperations.filter(op => isPending(subAccount, op)),
38
+ }))
39
+ : [];
40
+
41
+ return { ...synced, pendingOperations, subAccounts };
42
+ }
@@ -31,6 +31,11 @@ function propagateField(estimation: FeeEstimation, field: string, dest: GenericT
31
31
  dest[field] = Number(value.toString());
32
32
  return;
33
33
  case "storageLimit":
34
+ case "gasLimit":
35
+ case "gasPrice":
36
+ case "maxFeePerGas":
37
+ case "maxPriorityFeePerGas":
38
+ case "additionalFees":
34
39
  dest[field] = new BigNumber(value.toString());
35
40
  return;
36
41
  default:
@@ -51,17 +56,42 @@ export function genericPrepareTransaction(
51
56
  ? await getAssetInfos(transaction, account.freshAddress, getAssetFromToken)
52
57
  : assetInfosFallback(transaction);
53
58
  const customParametersFees = transaction.customFees?.parameters?.fees;
59
+
60
+ /**
61
+ * Ticking `useAllAmount` constantly resets the amount to 0. This is problematic
62
+ * because some Blockchain need the actual transaction amount to compute the fees
63
+ * (Example with EVM and ERC20 transactions)
64
+ * In case of `useAllAmount` and token transaction, we read the token account spendable
65
+ * balance instead.
66
+ */
67
+ let amount = transaction.amount;
68
+ if (transaction.useAllAmount && transaction.subAccountId) {
69
+ const subAccount = account.subAccounts?.find(acc => acc.id === transaction.subAccountId);
70
+ amount = subAccount?.spendableBalance ?? amount;
71
+ }
72
+
73
+ // Pass any parameters that help estimating fees
74
+ // This includes `assetOwner` and `assetReference` that are not used by some apps that only rely on `subAccountId`
75
+ // TODO Remove `assetOwner` and `assetReference` in order to maintain one unique way of identifying the type of asset
76
+ // https://ledgerhq.atlassian.net/browse/LIVE-24044
77
+ const intent = transactionToIntent(
78
+ account,
79
+ {
80
+ ...transaction,
81
+ assetOwner,
82
+ assetReference,
83
+ amount,
84
+ },
85
+ computeIntentType,
86
+ );
54
87
  const estimation: FeeEstimation = customParametersFees
55
88
  ? { value: BigInt(customParametersFees.toFixed()) }
56
- : await estimateFees(
57
- transactionToIntent(
58
- account,
59
- {
60
- ...transaction,
61
- },
62
- computeIntentType,
63
- ),
64
- );
89
+ : await estimateFees(intent, {
90
+ gasPrice: transaction.gasPrice,
91
+ maxFeePerGas: transaction.maxFeePerGas,
92
+ maxPriorityFeePerGas: transaction.maxPriorityFeePerGas,
93
+ gasOptions: transaction.gasOptions,
94
+ });
65
95
  const fees = new BigNumber(estimation.value.toString());
66
96
 
67
97
  if (!bnEq(transaction.fees, fees)) {
@@ -78,7 +108,15 @@ export function genericPrepareTransaction(
78
108
  };
79
109
 
80
110
  // Propagate needed fields
81
- const fieldsToPropagate = ["type", "storageLimit"];
111
+ const fieldsToPropagate = [
112
+ "type",
113
+ "storageLimit",
114
+ "gasLimit",
115
+ "gasPrice",
116
+ "maxFeePerGas",
117
+ "maxPriorityFeePerGas",
118
+ "additionalFees",
119
+ ];
82
120
 
83
121
  for (const field of fieldsToPropagate) {
84
122
  propagateField(estimation, field, next);
@@ -86,11 +124,14 @@ export function genericPrepareTransaction(
86
124
 
87
125
  // align with stellar/xrp: when send max (or staking intents), reflect validated amount in UI
88
126
  if (transaction.useAllAmount || ["stake", "unstake"].includes(transaction.mode ?? "")) {
127
+ // TODO Remove the call to `validateIntent` https://ledgerhq.atlassian.net/browse/LIVE-22228
89
128
  const { amount } = await validateIntent(
90
129
  transactionToIntent(
91
130
  account,
92
131
  {
93
132
  ...transaction,
133
+ assetOwner,
134
+ assetReference,
94
135
  },
95
136
  computeIntentType,
96
137
  ),
@@ -86,6 +86,19 @@ export const genericSignOperation =
86
86
  const alpacaApi = getAlpacaApi(account.currency.id, kind);
87
87
  if (!transaction.fees) throw new FeeNotLoaded();
88
88
  const fees = BigInt(transaction.fees?.toString() || "0");
89
+ const feesParameters = {
90
+ ...(transaction.gasLimit ? { gasLimit: BigInt(transaction.gasLimit.toFixed()) } : {}),
91
+ ...(transaction.gasPrice ? { gasPrice: BigInt(transaction.gasPrice.toFixed()) } : {}),
92
+ ...(transaction.maxFeePerGas
93
+ ? { maxFeePerGas: BigInt(transaction.maxFeePerGas.toFixed()) }
94
+ : {}),
95
+ ...(transaction.maxPriorityFeePerGas
96
+ ? { maxPriorityFeePerGas: BigInt(transaction.maxPriorityFeePerGas.toFixed()) }
97
+ : {}),
98
+ ...(transaction.additionalFees
99
+ ? { additionalFees: BigInt(transaction.additionalFees.toFixed()) }
100
+ : {}),
101
+ };
89
102
  if (transaction.useAllAmount) {
90
103
  const draftTransaction = {
91
104
  mode: transaction.mode,
@@ -98,10 +111,12 @@ export const genericSignOperation =
98
111
  family: transaction.family,
99
112
  feesStrategy: transaction.feesStrategy,
100
113
  data: transaction.data,
114
+ type: transaction.type,
101
115
  };
116
+ // TODO Remove the call to `validateIntent` https://ledgerhq.atlassian.net/browse/LIVE-22227
102
117
  const { amount } = await alpacaApi.validateIntent(
103
118
  transactionToIntent(account, draftTransaction, alpacaApi.computeIntentType),
104
- { value: fees },
119
+ { value: fees, parameters: feesParameters },
105
120
  );
106
121
  transaction.amount = new BigNumber(amount.toString());
107
122
  }
@@ -119,7 +134,7 @@ export const genericSignOperation =
119
134
  // Enrich with memo and asset information
120
135
  transactionIntent = enrichTransactionIntent(transactionIntent, transaction, publicKey);
121
136
 
122
- if (typeof transactionIntent.sequence !== "bigint") {
137
+ if (typeof transactionIntent.sequence !== "bigint" || transactionIntent.sequence < 0n) {
123
138
  // TODO: should compute it and pass it down to craftTransaction (duplicate call right now)
124
139
  const sequenceNumber = await alpacaApi.getSequence(transactionIntent.sender);
125
140
  transactionIntent.sequence = sequenceNumber;
@@ -128,6 +143,7 @@ export const genericSignOperation =
128
143
  /* Craft unsigned blob via Alpaca */
129
144
  const { transaction: unsigned } = await alpacaApi.craftTransaction(transactionIntent, {
130
145
  value: fees,
146
+ parameters: feesParameters,
131
147
  });
132
148
 
133
149
  /* Notify UI that the device is now showing the tx */
@@ -1,6 +1,6 @@
1
1
  import { filter, firstValueFrom } from "rxjs";
2
2
  import { EvmAddress, EvmSignature, EvmSigner } from "@ledgerhq/coin-evm/types/signer";
3
- import { CreateSigner } from "../../setup";
3
+ import { CreateSigner, executeWithSigner } from "../../setup";
4
4
  import { DeviceManagementKit } from "@ledgerhq/device-management-kit";
5
5
  import { DmkSignerEth, LegacySignerEth } from "@ledgerhq/live-signer-evm";
6
6
  import Transport from "@ledgerhq/hw-transport";
@@ -8,6 +8,7 @@ import { getEnv } from "@ledgerhq/live-env";
8
8
  import { ResolutionConfig, LoadConfig } from "@ledgerhq/hw-app-eth/lib/services/types";
9
9
  import { Signature } from "ethers";
10
10
  import type { DomainServiceResolution } from "@ledgerhq/types-live";
11
+ import resolver from "@ledgerhq/coin-evm/hw-getAddress";
11
12
 
12
13
  export type Signer = {
13
14
  getAddress: (path: string) => Promise<EvmAddress>;
@@ -70,3 +71,6 @@ export const createSigner: CreateSigner<Signer> = (transport: Transport) => {
70
71
  },
71
72
  };
72
73
  };
74
+
75
+ export const context = executeWithSigner(createSigner);
76
+ export const getAddress = resolver(context);
@@ -10,6 +10,7 @@ import { AlpacaSigner } from "./types";
10
10
  import { DerivationType, LedgerSigner as TaquitoLedgerSigner } from "@taquito/ledger-signer";
11
11
  import tezosGetAddress from "@ledgerhq/coin-tezos/signer/getAddress";
12
12
  import Tezos from "@ledgerhq/hw-app-tezos";
13
+ import { context as evmContext, getAddress as evmGetAddress } from "./Eth";
13
14
 
14
15
  const createSignerXrp: CreateSigner<Xrp> = (transport: Transport) => {
15
16
  return new Xrp(transport);
@@ -97,6 +98,12 @@ export function getSigner(network: string): AlpacaSigner {
97
98
  context: signerContextTezos,
98
99
  };
99
100
  }
101
+ case "evm": {
102
+ return {
103
+ getAddress: evmGetAddress,
104
+ context: evmContext,
105
+ };
106
+ }
100
107
  }
101
108
  throw new Error(`signer for ${network} not implemented`);
102
109
  }
@@ -71,7 +71,7 @@ describe("genericGetAccountShape", () => {
71
71
  "sync-hash",
72
72
  {
73
73
  minHeight: 11,
74
- order: "asc",
74
+ order: "desc",
75
75
  lastPagingToken: "pt1",
76
76
  },
77
77
  [
@@ -82,11 +82,16 @@ describe("genericGetAccountShape", () => {
82
82
  },
83
83
  {
84
84
  hash: "h2",
85
- type: "IN",
85
+ type: "OUT",
86
86
  blockHeight: 12,
87
87
  subOperations: [{ id: `${currency.id}_subOp1` }],
88
88
  extra: { assetReference: "ar2", assetOwner: "ow2" },
89
89
  },
90
+ {
91
+ blockHeight: 16,
92
+ hash: "h4",
93
+ type: "IN",
94
+ },
90
95
  {
91
96
  hash: "h1",
92
97
  blockHeight: 10,
@@ -100,7 +105,7 @@ describe("genericGetAccountShape", () => {
100
105
  "outdated-sync-hash",
101
106
  {
102
107
  minHeight: 0,
103
- order: "asc",
108
+ order: "desc",
104
109
  },
105
110
  [
106
111
  {
@@ -110,11 +115,16 @@ describe("genericGetAccountShape", () => {
110
115
  },
111
116
  {
112
117
  hash: "h2",
113
- type: "IN",
118
+ type: "OUT",
114
119
  blockHeight: 12,
115
120
  subOperations: [{ id: `${currency.id}_subOp1` }],
116
121
  extra: { assetReference: "ar2", assetOwner: "ow2" },
117
122
  },
123
+ {
124
+ blockHeight: 16,
125
+ hash: "h4",
126
+ type: "IN",
127
+ },
118
128
  ],
119
129
  ],
120
130
  ])(
@@ -150,8 +160,13 @@ describe("genericGetAccountShape", () => {
150
160
  asset.symbol === "TOK1" ? { id: `${currency.id}_token1` } : null,
151
161
  );
152
162
 
153
- const coreOp = { hash: "h2", height: 12 };
154
- listOperationsMock.mockResolvedValue([[coreOp]]);
163
+ listOperationsMock.mockResolvedValue([
164
+ [
165
+ { hash: "h2", type: "OUT", height: 12 },
166
+ { hash: "h3", type: "IN", tx: { failed: true }, height: 14 }, // won't appear in final shape
167
+ { hash: "h4", type: "IN", tx: { failed: false }, height: 16 },
168
+ ],
169
+ ]);
155
170
  refreshOperationsMock.mockImplementation(ops => {
156
171
  const op = ops[0];
157
172
  if (op?.hash === "h0") {
@@ -162,8 +177,8 @@ describe("genericGetAccountShape", () => {
162
177
 
163
178
  adaptCoreOperationToLiveOperationMock.mockImplementation((_accId, op) => ({
164
179
  hash: op.hash,
165
- type: "IN",
166
- blockHeight: 12,
180
+ type: op.type,
181
+ blockHeight: op.height,
167
182
  extra: { assetReference: "ar2", assetOwner: "ow2" },
168
183
  }));
169
184
 
@@ -206,8 +221,26 @@ describe("genericGetAccountShape", () => {
206
221
  ]);
207
222
 
208
223
  const assetOpsPassed = buildSubAccountsMock.mock.calls[0][0].operations;
209
- expect(assetOpsPassed).toHaveLength(1);
210
- expect(assetOpsPassed[0].hash).toBe("h2");
224
+ expect(assetOpsPassed).toEqual([
225
+ {
226
+ blockHeight: 12,
227
+ extra: {
228
+ assetOwner: "ow2",
229
+ assetReference: "ar2",
230
+ },
231
+ hash: "h2",
232
+ type: "OUT",
233
+ },
234
+ {
235
+ blockHeight: 16,
236
+ extra: {
237
+ assetOwner: "ow2",
238
+ assetReference: "ar2",
239
+ },
240
+ hash: "h4",
241
+ type: "IN",
242
+ },
243
+ ]);
211
244
 
212
245
  expect(result).toMatchObject({
213
246
  balance: new BigNumber(1000),
@@ -2,6 +2,9 @@ import { genericPrepareTransaction } from "../prepareTransaction";
2
2
  import { getAlpacaApi } from "../alpaca";
3
3
  import { transactionToIntent } from "../utils";
4
4
  import BigNumber from "bignumber.js";
5
+ import { GenericTransaction } from "../types";
6
+ import { setupMockCryptoAssetsStore } from "@ledgerhq/cryptoassets/cal-client/test-helpers";
7
+ import { TokenCurrency } from "@ledgerhq/types-cryptoassets";
5
8
 
6
9
  jest.mock("../alpaca", () => ({
7
10
  getAlpacaApi: jest.fn(),
@@ -95,6 +98,11 @@ describe("genericPrepareTransaction", () => {
95
98
  it.each([
96
99
  ["type", 2, 2],
97
100
  ["storageLimit", 300n, new BigNumber(300)],
101
+ ["gasLimit", 300n, new BigNumber(300)],
102
+ ["gasPrice", 300n, new BigNumber(300)],
103
+ ["maxFeePerGas", 300n, new BigNumber(300)],
104
+ ["maxPriorityFeePerGas", 300n, new BigNumber(300)],
105
+ ["additionalFees", 300n, new BigNumber(300)],
98
106
  ])(
99
107
  "propagates %s from estimation parameters",
100
108
  async (parameterName, parameterValue, expectedValue) => {
@@ -122,4 +130,70 @@ describe("genericPrepareTransaction", () => {
122
130
  );
123
131
  },
124
132
  );
133
+
134
+ it("estimates using the token account spendable balance when sending all amount", async () => {
135
+ const estimateFees = jest.fn().mockResolvedValue({ value: new BigNumber(50) });
136
+ (transactionToIntent as jest.Mock).mockImplementation((_, transaction) => ({
137
+ amount: BigInt(transaction.amount.toFixed()),
138
+ }));
139
+ (getAlpacaApi as jest.Mock).mockReturnValue({
140
+ estimateFees,
141
+ validateIntent: intent => Promise.resolve({ amount: intent.amount }),
142
+ });
143
+ const prepareTransaction = genericPrepareTransaction(network, kind);
144
+
145
+ await prepareTransaction(
146
+ {
147
+ ...account,
148
+ subAccounts: [{ id: "test-sub-account", spendableBalance: new BigNumber(100) }],
149
+ },
150
+ {
151
+ subAccountId: "test-sub-account",
152
+ useAllAmount: true,
153
+ amount: new BigNumber(0),
154
+ } as GenericTransaction,
155
+ );
156
+
157
+ expect(estimateFees).toHaveBeenCalledWith(expect.objectContaining({ amount: 100n }), {});
158
+ });
159
+
160
+ it("fills 'assetOwner' and 'assetReference' from 'subAccountId' for retro compatibility", async () => {
161
+ setupMockCryptoAssetsStore({
162
+ findTokenById: tokenId =>
163
+ Promise.resolve(tokenId === "usdc" ? ({ id: tokenId } as TokenCurrency) : undefined),
164
+ });
165
+ (getAlpacaApi as jest.Mock).mockReturnValue({
166
+ estimateFees: () => Promise.resolve({ value: 0n }),
167
+ getAssetFromToken: (token, owner) =>
168
+ token.id === "usdc" ? { assetOwner: owner, assetReference: token.id } : undefined,
169
+ });
170
+ const prepareTransaction = genericPrepareTransaction(network, kind);
171
+
172
+ await prepareTransaction(
173
+ {
174
+ ...account,
175
+ freshAddress: "test-account-address",
176
+ subAccounts: [{ id: "test-sub-account+usdc" }],
177
+ },
178
+ {
179
+ subAccountId: "test-sub-account+usdc",
180
+ amount: new BigNumber(10),
181
+ } as GenericTransaction,
182
+ );
183
+
184
+ expect(transactionToIntent).toHaveBeenCalledWith(
185
+ {
186
+ ...account,
187
+ freshAddress: "test-account-address",
188
+ subAccounts: [{ id: "test-sub-account+usdc" }],
189
+ },
190
+ {
191
+ subAccountId: "test-sub-account+usdc",
192
+ amount: new BigNumber(10),
193
+ assetOwner: "test-account-address",
194
+ assetReference: "usdc",
195
+ },
196
+ undefined,
197
+ );
198
+ });
125
199
  });
@@ -70,7 +70,9 @@ export type GenericTransaction = TransactionCommon & {
70
70
  gasPrice?: BigNumber | null;
71
71
  maxFeePerGas?: BigNumber | null;
72
72
  maxPriorityFeePerGas?: BigNumber | null;
73
+ additionalFees?: BigNumber | null;
73
74
  gasOptions?: GasOptions;
75
+ sponsored?: boolean;
74
76
  };
75
77
 
76
78
  export type GenericTransactionRaw = TransactionCommonRaw & {
@@ -104,7 +106,9 @@ export type GenericTransactionRaw = TransactionCommonRaw & {
104
106
  gasPrice?: string | null;
105
107
  maxFeePerGas?: string | null;
106
108
  maxPriorityFeePerGas?: string | null;
109
+ additionalFees?: string | null;
107
110
  gasOptions?: GasOptionsRaw;
111
+ sponsored?: boolean;
108
112
  };
109
113
 
110
114
  export interface OperationCommon extends Operation {