@ledgerhq/live-common 34.52.0-nightly.2 → 34.52.0-nightly.20251031023756

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 (318) hide show
  1. package/lib/__tests__/test-helpers/environment.js +2 -0
  2. package/lib/__tests__/test-helpers/environment.js.map +1 -1
  3. package/lib/apps/config.js +1 -1
  4. package/lib/bridge/generic-alpaca/getAccountShape.d.ts.map +1 -1
  5. package/lib/bridge/generic-alpaca/getAccountShape.js +7 -1
  6. package/lib/bridge/generic-alpaca/getAccountShape.js.map +1 -1
  7. package/lib/bridge/generic-alpaca/utils.d.ts.map +1 -1
  8. package/lib/bridge/generic-alpaca/utils.js +5 -4
  9. package/lib/bridge/generic-alpaca/utils.js.map +1 -1
  10. package/lib/dada-client/hooks/useAssetsData.d.ts +4 -10
  11. package/lib/dada-client/hooks/useAssetsData.d.ts.map +1 -1
  12. package/lib/dada-client/hooks/useAssetsData.js +2 -1
  13. package/lib/dada-client/hooks/useAssetsData.js.map +1 -1
  14. package/lib/dada-client/hooks/useInterestRatesByCurrencies.d.ts +5 -1
  15. package/lib/dada-client/hooks/useInterestRatesByCurrencies.d.ts.map +1 -1
  16. package/lib/dada-client/hooks/useMarketByCurrencies.d.ts +4 -1
  17. package/lib/dada-client/hooks/useMarketByCurrencies.d.ts.map +1 -1
  18. package/lib/dada-client/state-manager/api.d.ts.map +1 -1
  19. package/lib/dada-client/state-manager/api.js +3 -0
  20. package/lib/dada-client/state-manager/api.js.map +1 -1
  21. package/lib/dada-client/state-manager/types.d.ts +1 -0
  22. package/lib/dada-client/state-manager/types.d.ts.map +1 -1
  23. package/lib/deposit/helper.d.ts.map +1 -1
  24. package/lib/deposit/helper.js +54 -1
  25. package/lib/deposit/helper.js.map +1 -1
  26. package/lib/e2e/data/deviceLabelsData.d.ts.map +1 -1
  27. package/lib/e2e/data/deviceLabelsData.js +38 -33
  28. package/lib/e2e/data/deviceLabelsData.js.map +1 -1
  29. package/lib/e2e/deviceInteraction/TouchDeviceSimulator.d.ts.map +1 -1
  30. package/lib/e2e/deviceInteraction/TouchDeviceSimulator.js +13 -5
  31. package/lib/e2e/deviceInteraction/TouchDeviceSimulator.js.map +1 -1
  32. package/lib/e2e/enum/Account.d.ts +0 -1
  33. package/lib/e2e/enum/Account.d.ts.map +1 -1
  34. package/lib/e2e/enum/Account.js +0 -1
  35. package/lib/e2e/enum/Account.js.map +1 -1
  36. package/lib/e2e/enum/Currency.d.ts +0 -1
  37. package/lib/e2e/enum/Currency.d.ts.map +1 -1
  38. package/lib/e2e/enum/Currency.js +0 -1
  39. package/lib/e2e/enum/Currency.js.map +1 -1
  40. package/lib/e2e/enum/Device.d.ts +1 -0
  41. package/lib/e2e/enum/Device.d.ts.map +1 -1
  42. package/lib/e2e/enum/Device.js +1 -0
  43. package/lib/e2e/enum/Device.js.map +1 -1
  44. package/lib/e2e/enum/DeviceLabels.d.ts +2 -0
  45. package/lib/e2e/enum/DeviceLabels.d.ts.map +1 -1
  46. package/lib/e2e/enum/DeviceLabels.js +2 -0
  47. package/lib/e2e/enum/DeviceLabels.js.map +1 -1
  48. package/lib/e2e/families/bitcoin.js +1 -1
  49. package/lib/e2e/families/bitcoin.js.map +1 -1
  50. package/lib/e2e/families/cardano.d.ts.map +1 -1
  51. package/lib/e2e/families/cardano.js +12 -11
  52. package/lib/e2e/families/cardano.js.map +1 -1
  53. package/lib/e2e/families/evm.d.ts.map +1 -1
  54. package/lib/e2e/families/evm.js +4 -3
  55. package/lib/e2e/families/evm.js.map +1 -1
  56. package/lib/e2e/families/solana.d.ts.map +1 -1
  57. package/lib/e2e/families/solana.js +1 -1
  58. package/lib/e2e/families/solana.js.map +1 -1
  59. package/lib/e2e/index.d.ts +8 -2
  60. package/lib/e2e/index.d.ts.map +1 -1
  61. package/lib/e2e/speculos.d.ts +2 -0
  62. package/lib/e2e/speculos.d.ts.map +1 -1
  63. package/lib/e2e/speculos.js +10 -3
  64. package/lib/e2e/speculos.js.map +1 -1
  65. package/lib/e2e/speculosAppVersion.d.ts.map +1 -1
  66. package/lib/e2e/speculosAppVersion.js +5 -2
  67. package/lib/e2e/speculosAppVersion.js.map +1 -1
  68. package/lib/e2e/speculosCI.d.ts.map +1 -1
  69. package/lib/e2e/speculosCI.js +4 -0
  70. package/lib/e2e/speculosCI.js.map +1 -1
  71. package/lib/env.react.d.ts +1 -1
  72. package/lib/env.react.d.ts.map +1 -1
  73. package/lib/exchange/swap/getIncompatibleCurrencyKeys.d.ts.map +1 -1
  74. package/lib/exchange/swap/getIncompatibleCurrencyKeys.js +4 -0
  75. package/lib/exchange/swap/getIncompatibleCurrencyKeys.js.map +1 -1
  76. package/lib/exchange/swap/transactionStrategies.d.ts +3 -0
  77. package/lib/exchange/swap/transactionStrategies.d.ts.map +1 -1
  78. package/lib/exchange/swap/transactionStrategies.js +12 -2
  79. package/lib/exchange/swap/transactionStrategies.js.map +1 -1
  80. package/lib/families/canton/bridge/mock.d.ts +2 -2
  81. package/lib/families/canton/bridge/mock.d.ts.map +1 -1
  82. package/lib/families/canton/bridge/mock.js +3 -0
  83. package/lib/families/canton/bridge/mock.js.map +1 -1
  84. package/lib/families/canton/config.d.ts.map +1 -1
  85. package/lib/families/canton/config.js +3 -0
  86. package/lib/families/canton/config.js.map +1 -1
  87. package/lib/families/canton/setup.d.ts +3 -3
  88. package/lib/families/canton/setup.d.ts.map +1 -1
  89. package/lib/families/canton/setup.js.map +1 -1
  90. package/lib/families/evm/config.d.ts.map +1 -1
  91. package/lib/families/evm/config.js +18 -1
  92. package/lib/families/evm/config.js.map +1 -1
  93. package/lib/families/hedera/utils.d.ts +2 -0
  94. package/lib/families/hedera/utils.d.ts.map +1 -0
  95. package/lib/families/hedera/{logic.js → utils.js} +2 -2
  96. package/lib/families/hedera/utils.js.map +1 -0
  97. package/lib/families/sui/react.d.ts.map +1 -1
  98. package/lib/families/sui/react.js +1 -0
  99. package/lib/families/sui/react.js.map +1 -1
  100. package/lib/featureFlags/defaultFeatures.d.ts +3 -0
  101. package/lib/featureFlags/defaultFeatures.d.ts.map +1 -1
  102. package/lib/featureFlags/defaultFeatures.js +3 -1
  103. package/lib/featureFlags/defaultFeatures.js.map +1 -1
  104. package/lib/featureFlags/useFeature.d.ts +1 -1
  105. package/lib/featureFlags/useFeature.d.ts.map +1 -1
  106. package/lib/generated/bridge/js.d.ts +1 -1
  107. package/lib/generated/bridge/mock.d.ts +1 -1
  108. package/lib/generated/deviceTransactionConfig.d.ts +1 -1
  109. package/lib/generated/specs.d.ts +1 -0
  110. package/lib/generated/specs.d.ts.map +1 -1
  111. package/lib/hooks/useDeviceTransactionConfig.d.ts +19 -0
  112. package/lib/hooks/useDeviceTransactionConfig.d.ts.map +1 -0
  113. package/lib/hooks/useDeviceTransactionConfig.js +45 -0
  114. package/lib/hooks/useDeviceTransactionConfig.js.map +1 -0
  115. package/lib/hw/connectAppEventMapper.d.ts.map +1 -1
  116. package/lib/hw/connectAppEventMapper.js +2 -2
  117. package/lib/hw/connectAppEventMapper.js.map +1 -1
  118. package/lib/load/speculos.d.ts.map +1 -1
  119. package/lib/load/speculos.js +1 -0
  120. package/lib/load/speculos.js.map +1 -1
  121. package/lib/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.d.ts.map +1 -1
  122. package/lib/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.js +7 -0
  123. package/lib/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.js.map +1 -1
  124. package/lib/postOnboarding/hooks/useAutoDismissPostOnboardingEntryPoint.js.map +1 -1
  125. package/lib/postOnboarding/hooks/usePostOnboardingHubState.d.ts.map +1 -1
  126. package/lib/postOnboarding/hooks/usePostOnboardingHubState.js +7 -6
  127. package/lib/postOnboarding/hooks/usePostOnboardingHubState.js.map +1 -1
  128. package/lib/transaction/deviceTransactionConfig.d.ts +1 -1
  129. package/lib/transaction/deviceTransactionConfig.d.ts.map +1 -1
  130. package/lib/transaction/deviceTransactionConfig.js +2 -2
  131. package/lib/transaction/deviceTransactionConfig.js.map +1 -1
  132. package/lib-es/__tests__/test-helpers/environment.js +2 -0
  133. package/lib-es/__tests__/test-helpers/environment.js.map +1 -1
  134. package/lib-es/apps/config.js +1 -1
  135. package/lib-es/bridge/generic-alpaca/getAccountShape.d.ts.map +1 -1
  136. package/lib-es/bridge/generic-alpaca/getAccountShape.js +7 -1
  137. package/lib-es/bridge/generic-alpaca/getAccountShape.js.map +1 -1
  138. package/lib-es/bridge/generic-alpaca/utils.d.ts.map +1 -1
  139. package/lib-es/bridge/generic-alpaca/utils.js +5 -4
  140. package/lib-es/bridge/generic-alpaca/utils.js.map +1 -1
  141. package/lib-es/dada-client/hooks/useAssetsData.d.ts +4 -10
  142. package/lib-es/dada-client/hooks/useAssetsData.d.ts.map +1 -1
  143. package/lib-es/dada-client/hooks/useAssetsData.js +2 -1
  144. package/lib-es/dada-client/hooks/useAssetsData.js.map +1 -1
  145. package/lib-es/dada-client/hooks/useInterestRatesByCurrencies.d.ts +5 -1
  146. package/lib-es/dada-client/hooks/useInterestRatesByCurrencies.d.ts.map +1 -1
  147. package/lib-es/dada-client/hooks/useMarketByCurrencies.d.ts +4 -1
  148. package/lib-es/dada-client/hooks/useMarketByCurrencies.d.ts.map +1 -1
  149. package/lib-es/dada-client/state-manager/api.d.ts.map +1 -1
  150. package/lib-es/dada-client/state-manager/api.js +3 -0
  151. package/lib-es/dada-client/state-manager/api.js.map +1 -1
  152. package/lib-es/dada-client/state-manager/types.d.ts +1 -0
  153. package/lib-es/dada-client/state-manager/types.d.ts.map +1 -1
  154. package/lib-es/deposit/helper.d.ts.map +1 -1
  155. package/lib-es/deposit/helper.js +54 -1
  156. package/lib-es/deposit/helper.js.map +1 -1
  157. package/lib-es/e2e/data/deviceLabelsData.d.ts.map +1 -1
  158. package/lib-es/e2e/data/deviceLabelsData.js +38 -33
  159. package/lib-es/e2e/data/deviceLabelsData.js.map +1 -1
  160. package/lib-es/e2e/deviceInteraction/TouchDeviceSimulator.d.ts.map +1 -1
  161. package/lib-es/e2e/deviceInteraction/TouchDeviceSimulator.js +13 -5
  162. package/lib-es/e2e/deviceInteraction/TouchDeviceSimulator.js.map +1 -1
  163. package/lib-es/e2e/enum/Account.d.ts +0 -1
  164. package/lib-es/e2e/enum/Account.d.ts.map +1 -1
  165. package/lib-es/e2e/enum/Account.js +0 -1
  166. package/lib-es/e2e/enum/Account.js.map +1 -1
  167. package/lib-es/e2e/enum/Currency.d.ts +0 -1
  168. package/lib-es/e2e/enum/Currency.d.ts.map +1 -1
  169. package/lib-es/e2e/enum/Currency.js +0 -1
  170. package/lib-es/e2e/enum/Currency.js.map +1 -1
  171. package/lib-es/e2e/enum/Device.d.ts +1 -0
  172. package/lib-es/e2e/enum/Device.d.ts.map +1 -1
  173. package/lib-es/e2e/enum/Device.js +1 -0
  174. package/lib-es/e2e/enum/Device.js.map +1 -1
  175. package/lib-es/e2e/enum/DeviceLabels.d.ts +2 -0
  176. package/lib-es/e2e/enum/DeviceLabels.d.ts.map +1 -1
  177. package/lib-es/e2e/enum/DeviceLabels.js +2 -0
  178. package/lib-es/e2e/enum/DeviceLabels.js.map +1 -1
  179. package/lib-es/e2e/families/bitcoin.js +1 -1
  180. package/lib-es/e2e/families/bitcoin.js.map +1 -1
  181. package/lib-es/e2e/families/cardano.d.ts.map +1 -1
  182. package/lib-es/e2e/families/cardano.js +12 -11
  183. package/lib-es/e2e/families/cardano.js.map +1 -1
  184. package/lib-es/e2e/families/evm.d.ts.map +1 -1
  185. package/lib-es/e2e/families/evm.js +4 -3
  186. package/lib-es/e2e/families/evm.js.map +1 -1
  187. package/lib-es/e2e/families/solana.d.ts.map +1 -1
  188. package/lib-es/e2e/families/solana.js +1 -1
  189. package/lib-es/e2e/families/solana.js.map +1 -1
  190. package/lib-es/e2e/index.d.ts +8 -2
  191. package/lib-es/e2e/index.d.ts.map +1 -1
  192. package/lib-es/e2e/speculos.d.ts +2 -0
  193. package/lib-es/e2e/speculos.d.ts.map +1 -1
  194. package/lib-es/e2e/speculos.js +10 -3
  195. package/lib-es/e2e/speculos.js.map +1 -1
  196. package/lib-es/e2e/speculosAppVersion.d.ts.map +1 -1
  197. package/lib-es/e2e/speculosAppVersion.js +5 -2
  198. package/lib-es/e2e/speculosAppVersion.js.map +1 -1
  199. package/lib-es/e2e/speculosCI.d.ts.map +1 -1
  200. package/lib-es/e2e/speculosCI.js +4 -0
  201. package/lib-es/e2e/speculosCI.js.map +1 -1
  202. package/lib-es/env.react.d.ts +1 -1
  203. package/lib-es/env.react.d.ts.map +1 -1
  204. package/lib-es/exchange/swap/getIncompatibleCurrencyKeys.d.ts.map +1 -1
  205. package/lib-es/exchange/swap/getIncompatibleCurrencyKeys.js +4 -0
  206. package/lib-es/exchange/swap/getIncompatibleCurrencyKeys.js.map +1 -1
  207. package/lib-es/exchange/swap/transactionStrategies.d.ts +3 -0
  208. package/lib-es/exchange/swap/transactionStrategies.d.ts.map +1 -1
  209. package/lib-es/exchange/swap/transactionStrategies.js +10 -1
  210. package/lib-es/exchange/swap/transactionStrategies.js.map +1 -1
  211. package/lib-es/families/canton/bridge/mock.d.ts +2 -2
  212. package/lib-es/families/canton/bridge/mock.d.ts.map +1 -1
  213. package/lib-es/families/canton/bridge/mock.js +3 -0
  214. package/lib-es/families/canton/bridge/mock.js.map +1 -1
  215. package/lib-es/families/canton/config.d.ts.map +1 -1
  216. package/lib-es/families/canton/config.js +3 -0
  217. package/lib-es/families/canton/config.js.map +1 -1
  218. package/lib-es/families/canton/setup.d.ts +3 -3
  219. package/lib-es/families/canton/setup.d.ts.map +1 -1
  220. package/lib-es/families/canton/setup.js.map +1 -1
  221. package/lib-es/families/evm/config.d.ts.map +1 -1
  222. package/lib-es/families/evm/config.js +18 -1
  223. package/lib-es/families/evm/config.js.map +1 -1
  224. package/lib-es/families/hedera/utils.d.ts +2 -0
  225. package/lib-es/families/hedera/utils.d.ts.map +1 -0
  226. package/lib-es/families/hedera/utils.js +3 -0
  227. package/lib-es/families/hedera/utils.js.map +1 -0
  228. package/lib-es/families/sui/react.d.ts.map +1 -1
  229. package/lib-es/families/sui/react.js +1 -0
  230. package/lib-es/families/sui/react.js.map +1 -1
  231. package/lib-es/featureFlags/defaultFeatures.d.ts +3 -0
  232. package/lib-es/featureFlags/defaultFeatures.d.ts.map +1 -1
  233. package/lib-es/featureFlags/defaultFeatures.js +3 -1
  234. package/lib-es/featureFlags/defaultFeatures.js.map +1 -1
  235. package/lib-es/featureFlags/useFeature.d.ts +1 -1
  236. package/lib-es/featureFlags/useFeature.d.ts.map +1 -1
  237. package/lib-es/generated/bridge/js.d.ts +1 -1
  238. package/lib-es/generated/bridge/mock.d.ts +1 -1
  239. package/lib-es/generated/deviceTransactionConfig.d.ts +1 -1
  240. package/lib-es/generated/specs.d.ts +1 -0
  241. package/lib-es/generated/specs.d.ts.map +1 -1
  242. package/lib-es/hooks/useDeviceTransactionConfig.d.ts +19 -0
  243. package/lib-es/hooks/useDeviceTransactionConfig.d.ts.map +1 -0
  244. package/lib-es/hooks/useDeviceTransactionConfig.js +41 -0
  245. package/lib-es/hooks/useDeviceTransactionConfig.js.map +1 -0
  246. package/lib-es/hw/connectAppEventMapper.d.ts.map +1 -1
  247. package/lib-es/hw/connectAppEventMapper.js +3 -3
  248. package/lib-es/hw/connectAppEventMapper.js.map +1 -1
  249. package/lib-es/load/speculos.d.ts.map +1 -1
  250. package/lib-es/load/speculos.js +1 -0
  251. package/lib-es/load/speculos.js.map +1 -1
  252. package/lib-es/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.d.ts.map +1 -1
  253. package/lib-es/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.js +7 -0
  254. package/lib-es/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.js.map +1 -1
  255. package/lib-es/postOnboarding/hooks/useAutoDismissPostOnboardingEntryPoint.js.map +1 -1
  256. package/lib-es/postOnboarding/hooks/usePostOnboardingHubState.d.ts.map +1 -1
  257. package/lib-es/postOnboarding/hooks/usePostOnboardingHubState.js +7 -6
  258. package/lib-es/postOnboarding/hooks/usePostOnboardingHubState.js.map +1 -1
  259. package/lib-es/transaction/deviceTransactionConfig.d.ts +1 -1
  260. package/lib-es/transaction/deviceTransactionConfig.d.ts.map +1 -1
  261. package/lib-es/transaction/deviceTransactionConfig.js +2 -2
  262. package/lib-es/transaction/deviceTransactionConfig.js.map +1 -1
  263. package/package.json +76 -75
  264. package/src/__tests__/environment.test.ts +8 -5
  265. package/src/__tests__/migration/account-migration.ts +1 -0
  266. package/src/__tests__/test-helpers/environment.ts +2 -0
  267. package/src/account/serialization.test.ts +1 -0
  268. package/src/apps/config.ts +1 -1
  269. package/src/bridge/generic-alpaca/getAccountShape.ts +8 -1
  270. package/src/bridge/generic-alpaca/tests/getAccountShape.test.ts +25 -2
  271. package/src/bridge/generic-alpaca/utils.test.ts +165 -0
  272. package/src/bridge/generic-alpaca/utils.ts +5 -4
  273. package/src/dada-client/hooks/useAssetsData.ts +4 -8
  274. package/src/dada-client/state-manager/api.ts +3 -0
  275. package/src/dada-client/state-manager/types.ts +1 -0
  276. package/src/deposit/helper.ts +65 -1
  277. package/src/e2e/data/deviceLabelsData.ts +39 -33
  278. package/src/e2e/deviceInteraction/TouchDeviceSimulator.ts +13 -5
  279. package/src/e2e/enum/Account.ts +0 -6
  280. package/src/e2e/enum/Currency.ts +0 -7
  281. package/src/e2e/enum/Device.ts +1 -0
  282. package/src/e2e/enum/DeviceLabels.ts +2 -0
  283. package/src/e2e/families/bitcoin.ts +1 -1
  284. package/src/e2e/families/cardano.ts +12 -15
  285. package/src/e2e/families/evm.ts +4 -3
  286. package/src/e2e/families/solana.ts +1 -4
  287. package/src/e2e/speculos.ts +20 -3
  288. package/src/e2e/speculosAppVersion.ts +5 -2
  289. package/src/e2e/speculosCI.ts +4 -0
  290. package/src/exchange/swap/getIncompatibleCurrencyKeys.ts +4 -0
  291. package/src/exchange/swap/transactionStrategies.ts +16 -1
  292. package/src/families/bitcoin/satstack.test.ts +1 -0
  293. package/src/families/canton/bridge/mock.ts +10 -7
  294. package/src/families/canton/config.ts +3 -0
  295. package/src/families/canton/setup.ts +3 -3
  296. package/src/families/evm/config.ts +18 -1
  297. package/src/families/hedera/__snapshots__/bridge.integration.test.ts.snap +222 -86
  298. package/src/families/hedera/utils.ts +2 -0
  299. package/src/families/sui/react.ts +5 -0
  300. package/src/featureFlags/defaultFeatures.ts +3 -1
  301. package/src/hooks/useDeviceTransactionConfig.test.tsx +200 -0
  302. package/src/hooks/useDeviceTransactionConfig.ts +65 -0
  303. package/src/hw/connectAppEventMapper.ts +2 -4
  304. package/src/load/speculos.ts +1 -0
  305. package/src/modularDrawer/hooks/useCurrenciesUnderFeatureFlag.ts +7 -0
  306. package/src/postOnboarding/hooks/useAutoDismissPostOnboardingEntryPoint.ts +1 -1
  307. package/src/postOnboarding/hooks/usePostOnboardingHubState.ts +7 -9
  308. package/src/transaction/deviceTransactionConfig.ts +3 -3
  309. package/lib/families/hedera/logic.d.ts +0 -2
  310. package/lib/families/hedera/logic.d.ts.map +0 -1
  311. package/lib/families/hedera/logic.js.map +0 -1
  312. package/lib-es/families/hedera/logic.d.ts +0 -2
  313. package/lib-es/families/hedera/logic.d.ts.map +0 -1
  314. package/lib-es/families/hedera/logic.js +0 -3
  315. package/lib-es/families/hedera/logic.js.map +0 -1
  316. package/src/dada-client/MIGRATION_GUIDE.md +0 -187
  317. package/src/families/hedera/logic.ts +0 -2
  318. package/src/families/sui/__snapshots__/bridge.integration.test.ts.snap +0 -428
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  adaptCoreOperationToLiveOperation,
3
+ buildOptimisticOperation,
3
4
  cleanedOperation,
4
5
  extractBalance,
5
6
  findCryptoCurrencyByNetwork,
@@ -11,6 +12,170 @@ import { Account } from "@ledgerhq/types-live";
11
12
  import { GenericTransaction, OperationCommon } from "./types";
12
13
 
13
14
  describe("Alpaca utils", () => {
15
+ describe("buildOptimisticOperation", () => {
16
+ it.each([
17
+ [
18
+ "coin",
19
+ "changeTrust",
20
+ {},
21
+ {
22
+ parentType: "OPT_IN",
23
+ subType: undefined,
24
+ parentValue: new BigNumber(50),
25
+ },
26
+ ],
27
+ [
28
+ "coin",
29
+ "delegate",
30
+ {},
31
+ {
32
+ parentType: "DELEGATE",
33
+ subType: undefined,
34
+ parentValue: new BigNumber(50),
35
+ },
36
+ ],
37
+ [
38
+ "coin",
39
+ "stake",
40
+ {},
41
+ {
42
+ parentType: "DELEGATE",
43
+ subType: undefined,
44
+ parentValue: new BigNumber(50),
45
+ },
46
+ ],
47
+ [
48
+ "coin",
49
+ "undelegate",
50
+ {},
51
+ {
52
+ parentType: "UNDELEGATE",
53
+ subType: undefined,
54
+ parentValue: new BigNumber(50),
55
+ },
56
+ ],
57
+ [
58
+ "coin",
59
+ "unstake",
60
+ {},
61
+ {
62
+ parentType: "UNDELEGATE",
63
+ subType: undefined,
64
+ parentValue: new BigNumber(50),
65
+ },
66
+ ],
67
+ [
68
+ "coin",
69
+ "send",
70
+ {},
71
+ {
72
+ parentType: "OUT",
73
+ subType: undefined,
74
+ parentValue: new BigNumber(50),
75
+ },
76
+ ],
77
+ [
78
+ "token",
79
+ "changeTrust",
80
+ { subAccountId: "sub-account-id" },
81
+ {
82
+ parentType: "FEES",
83
+ subType: "OPT_IN",
84
+ parentValue: new BigNumber(12),
85
+ },
86
+ ],
87
+ [
88
+ "token",
89
+ "delegate",
90
+ { subAccountId: "sub-account-id" },
91
+ {
92
+ parentType: "FEES",
93
+ subType: "DELEGATE",
94
+ parentValue: new BigNumber(12),
95
+ },
96
+ ],
97
+ [
98
+ "token",
99
+ "stake",
100
+ { subAccountId: "sub-account-id" },
101
+ {
102
+ parentType: "FEES",
103
+ subType: "DELEGATE",
104
+ parentValue: new BigNumber(12),
105
+ },
106
+ ],
107
+ [
108
+ "token",
109
+ "undelegate",
110
+ { subAccountId: "sub-account-id" },
111
+ {
112
+ parentType: "FEES",
113
+ subType: "UNDELEGATE",
114
+ parentValue: new BigNumber(12),
115
+ },
116
+ ],
117
+ [
118
+ "token",
119
+ "unstake",
120
+ { subAccountId: "sub-account-id" },
121
+ {
122
+ parentType: "FEES",
123
+ subType: "UNDELEGATE",
124
+ parentValue: new BigNumber(12),
125
+ },
126
+ ],
127
+ [
128
+ "token",
129
+ "send",
130
+ { subAccountId: "sub-account-id" },
131
+ { parentType: "FEES", subType: "OUT", parentValue: new BigNumber(12) },
132
+ ],
133
+ ])("builds an optimistic %s operation with %s mode ", (_s, mode, params, expected) => {
134
+ const operation = buildOptimisticOperation(
135
+ {
136
+ id: "parent-account-id",
137
+ freshAddress: "account-address",
138
+ subAccounts: [{ id: "sub-account-id" }],
139
+ } as Account,
140
+ {
141
+ mode,
142
+ amount: new BigNumber(50),
143
+ fees: new BigNumber(12),
144
+ recipient: "recipient-address",
145
+ ...params,
146
+ } as GenericTransaction,
147
+ );
148
+
149
+ expect(operation).toMatchObject({
150
+ id: `parent-account-id--${expected.parentType}`,
151
+ type: expected.parentType,
152
+ value: expected.parentValue,
153
+ accountId: "parent-account-id",
154
+ senders: ["account-address"],
155
+ recipients: ["recipient-address"],
156
+ fee: new BigNumber(12),
157
+ blockHash: null,
158
+ blockHeight: null,
159
+ ...(expected.subType
160
+ ? {
161
+ subOperations: [
162
+ {
163
+ id: `sub-account-id--${expected.subType}`,
164
+ accountId: "sub-account-id",
165
+ type: expected.subType,
166
+ senders: ["account-address"],
167
+ recipients: ["recipient-address"],
168
+ value: new BigNumber(50),
169
+ blockHash: null,
170
+ blockHeight: null,
171
+ },
172
+ ],
173
+ }
174
+ : {}),
175
+ });
176
+ });
177
+ });
178
+
14
179
  describe("cleanedOperation", () => {
15
180
  it("creates a cleaned version of an operation without mutating it", () => {
16
181
  const dirty = {
@@ -241,11 +241,12 @@ export const buildOptimisticOperation = (
241
241
  const fees = BigInt(transaction.fees?.toString() || "0");
242
242
  const { subAccountId } = transaction;
243
243
  const { subAccounts } = account;
244
+ const parentType = subAccountId ? "FEES" : type;
244
245
 
245
246
  const operation: Operation = {
246
- id: encodeOperationId(account.id, "", type),
247
+ id: encodeOperationId(account.id, "", parentType),
247
248
  hash: "",
248
- type: type,
249
+ type: parentType,
249
250
  value: subAccountId ? new BigNumber(fees.toString()) : transaction.amount, // match old behavior
250
251
  fee: new BigNumber(fees.toString()),
251
252
  blockHash: null,
@@ -266,9 +267,9 @@ export const buildOptimisticOperation = (
266
267
  if (tokenAccount && subAccountId) {
267
268
  operation.subOperations = [
268
269
  {
269
- id: `${subAccountId}--OUT`,
270
+ id: `${subAccountId}--${type}`,
270
271
  hash: "",
271
- type: "OUT",
272
+ type,
272
273
  value: transaction.useAllAmount ? tokenAccount.balance : transaction.amount,
273
274
  fee: new BigNumber(0),
274
275
  blockHash: null,
@@ -1,6 +1,6 @@
1
1
  import { useMemo } from "react";
2
2
  import { useGetAssetsDataInfiniteQuery } from "../state-manager/api";
3
- import { AssetsDataWithPagination } from "../state-manager/types";
3
+ import { AssetsDataWithPagination, GetAssetsDataParams } from "../state-manager/types";
4
4
 
5
5
  const emptyData = () => ({
6
6
  cryptoAssets: {},
@@ -25,14 +25,9 @@ export function useAssetsData({
25
25
  product,
26
26
  version,
27
27
  isStaging,
28
- }: {
29
- search?: string;
30
- currencyIds?: string[];
31
- useCase?: string;
28
+ includeTestNetworks,
29
+ }: GetAssetsDataParams & {
32
30
  areCurrenciesFiltered?: boolean;
33
- product: "llm" | "lld";
34
- version: string;
35
- isStaging?: boolean;
36
31
  }) {
37
32
  const {
38
33
  data,
@@ -51,6 +46,7 @@ export function useAssetsData({
51
46
  product,
52
47
  version,
53
48
  isStaging,
49
+ includeTestNetworks,
54
50
  });
55
51
 
56
52
  const joinedPages = useMemo(() => {
@@ -45,6 +45,9 @@ export const assetsDataApi = createApi({
45
45
  ...(queryArg?.search && { search: queryArg.search }),
46
46
  product: queryArg.product,
47
47
  minVersion: queryArg.version,
48
+ ...(queryArg?.includeTestNetworks && {
49
+ includeTestNetworks: queryArg.includeTestNetworks,
50
+ }),
48
51
  additionalData: queryArg.additionalData || [
49
52
  AssetsAdditionalData.Apy,
50
53
  AssetsAdditionalData.MarketTrend,
@@ -17,6 +17,7 @@ export interface GetAssetsDataParams {
17
17
  version: string;
18
18
  isStaging?: boolean;
19
19
  additionalData?: AssetsAdditionalData[];
20
+ includeTestNetworks?: boolean;
20
21
  }
21
22
 
22
23
  export interface PageParam {
@@ -7,6 +7,66 @@ import {
7
7
  hasCryptoCurrencyId,
8
8
  } from "../currencies";
9
9
  import { getMappedAssets } from "./api";
10
+
11
+ /**
12
+ * WORKAROUND: Fallback mappings for currencies not yet available in getMappedAssets()
13
+ * TODO: Remove these entries once they are properly supported by the mapping service
14
+ *
15
+ * Each entry maps a Ledger currency ID to its provider ID.
16
+ * The provider ID is used to group currencies by their external provider (e.g., CoinGecko).
17
+ */
18
+ const FALLBACK_CURRENCY_MAPPINGS: Record<string, string> = {
19
+ // Canton Network - using canton_network as both ledgerId and providerId
20
+ canton_network: "canton_network",
21
+ canton_network_devnet: "canton_network_devnet",
22
+ canton_network_testnet: "canton_network_testnet",
23
+
24
+ // Add more fallback mappings here as needed:
25
+ // "ledger_currency_id": "provider_id",
26
+ };
27
+
28
+ /**
29
+ * Creates synthetic MappedAsset entries for currencies that are not yet available
30
+ * in the mapping service API but need to be supported.
31
+ */
32
+ const createFallbackMappedAssets = (
33
+ currencies: CryptoOrTokenCurrency[],
34
+ existingAssets: MappedAsset[],
35
+ ): MappedAsset[] => {
36
+ const existingLedgerIds = new Set(existingAssets.map(asset => asset.ledgerId.toLowerCase()));
37
+ const fallbackAssets: MappedAsset[] = [];
38
+
39
+ for (const [currencyId, providerId] of Object.entries(FALLBACK_CURRENCY_MAPPINGS)) {
40
+ // Skip if currency already exists in mapped assets
41
+ if (existingLedgerIds.has(currencyId.toLowerCase())) {
42
+ continue;
43
+ }
44
+
45
+ // Find the currency in the list
46
+ const currency = currencies.find(c => c.id === currencyId);
47
+ if (currency) {
48
+ fallbackAssets.push({
49
+ $type: currency.type === "TokenCurrency" ? "Token" : "Coin",
50
+ ledgerId: currency.id,
51
+ providerId: providerId,
52
+ name: currency.name,
53
+ ticker: currency.ticker,
54
+ network: currency.type === "TokenCurrency" ? currency.parentCurrency?.id : undefined,
55
+ contract: currency.type === "TokenCurrency" ? currency.contractAddress : undefined,
56
+ status: "active",
57
+ reason: null,
58
+ data: {
59
+ img: "",
60
+ marketCapRank: null,
61
+ },
62
+ ledgerCurrency: currency,
63
+ });
64
+ }
65
+ }
66
+
67
+ return fallbackAssets;
68
+ };
69
+
10
70
  export const loadCurrenciesByProvider = async (
11
71
  coinsAndTokensSupported: CryptoOrTokenCurrency[],
12
72
  ): Promise<GroupedCurrencies> => {
@@ -15,7 +75,11 @@ export const loadCurrenciesByProvider = async (
15
75
  getMappedAssets(),
16
76
  ]);
17
77
 
18
- return groupCurrenciesByProvider(assets, sortedCurrenciesSupported);
78
+ // Merge API assets with fallback assets for currencies not yet in the API
79
+ const fallbackAssets = createFallbackMappedAssets(sortedCurrenciesSupported, assets);
80
+ const allAssets = [...assets, ...fallbackAssets];
81
+
82
+ return groupCurrenciesByProvider(allAssets, sortedCurrenciesSupported);
19
83
  };
20
84
  export const groupCurrenciesByProvider = (
21
85
  assets: MappedAsset[],
@@ -35,6 +35,35 @@ type DeviceLabelsConfig = {
35
35
  [key in DeviceModelId]?: LabelConfig;
36
36
  };
37
37
 
38
+ const TOUCHSCREEN_DEVICE_CONFIG: LabelConfig = {
39
+ receiveVerify: {
40
+ [AppInfos.BNB_CHAIN.name]: DeviceLabels.VERIFY_BSC,
41
+ [AppInfos.COSMOS.name]: DeviceLabels.VERIFY_COSMOS,
42
+ [AppInfos.ETHEREUM.name]: DeviceLabels.VERIFY_ETHEREUM,
43
+ [AppInfos.POLKADOT.name]: DeviceLabels.PLEASE_REVIEW,
44
+ [AppInfos.POLYGON.name]: DeviceLabels.VERIFY_POLYGON,
45
+ [AppInfos.SOLANA.name]: DeviceLabels.VERIFY_SOLANA_ADDRESS,
46
+ default: DeviceLabels.ADDRESS,
47
+ },
48
+ receiveConfirm: {
49
+ default: DeviceLabels.CONFIRM,
50
+ },
51
+ delegateVerify: {
52
+ [AppInfos.NEAR.name]: DeviceLabels.VIEW_HEADER,
53
+ default: DeviceLabels.REVIEW_OPERATION,
54
+ },
55
+ delegateConfirm: {
56
+ [AppInfos.NEAR.name]: DeviceLabels.CONTINUE_TO_ACTION,
57
+ default: DeviceLabels.HOLD_TO_SIGN,
58
+ },
59
+ sendVerify: {
60
+ default: DeviceLabels.REVIEW_OPERATION,
61
+ },
62
+ sendConfirm: {
63
+ default: DeviceLabels.HOLD_TO_SIGN,
64
+ },
65
+ };
66
+
38
67
  export const DEVICE_LABELS_CONFIG: DeviceLabelsConfig = {
39
68
  [DeviceModelId.nanoS]: {
40
69
  receiveVerify: {
@@ -66,10 +95,11 @@ export const DEVICE_LABELS_CONFIG: DeviceLabelsConfig = {
66
95
  default: DeviceLabels.CAPS_APPROVE,
67
96
  },
68
97
  sendVerify: {
98
+ [AppInfos.SOLANA.name]: DeviceLabels.TRANSFER,
69
99
  default: DeviceLabels.REVIEW_OPERATION,
70
100
  },
71
101
  sendConfirm: {
72
- [AppInfos.SOLANA.name]: DeviceLabels.SIGN_TRANSACTION,
102
+ [AppInfos.SOLANA.name]: DeviceLabels.APPROVE,
73
103
  [AppInfos.TRON.name]: DeviceLabels.SIGN,
74
104
  [AppInfos.STELLAR.name]: DeviceLabels.SIGN,
75
105
  [AppInfos.RIPPLE.name]: DeviceLabels.SIGN,
@@ -79,34 +109,8 @@ export const DEVICE_LABELS_CONFIG: DeviceLabelsConfig = {
79
109
  default: DeviceLabels.CAPS_APPROVE,
80
110
  },
81
111
  },
82
- [DeviceModelId.stax]: {
83
- receiveVerify: {
84
- [AppInfos.BNB_CHAIN.name]: DeviceLabels.VERIFY_BSC,
85
- [AppInfos.COSMOS.name]: DeviceLabels.PLEASE_REVIEW,
86
- [AppInfos.ETHEREUM.name]: DeviceLabels.VERIFY_ETHEREUM,
87
- [AppInfos.POLKADOT.name]: DeviceLabels.PLEASE_REVIEW,
88
- [AppInfos.POLYGON.name]: DeviceLabels.VERIFY_POLYGON,
89
- [AppInfos.SOLANA.name]: DeviceLabels.VERIFY_SOLANA_ADDRESS,
90
- default: DeviceLabels.ADDRESS,
91
- },
92
- receiveConfirm: {
93
- default: DeviceLabels.CONFIRM,
94
- },
95
- delegateVerify: {
96
- [AppInfos.NEAR.name]: DeviceLabels.VIEW_HEADER,
97
- default: DeviceLabels.REVIEW_OPERATION,
98
- },
99
- delegateConfirm: {
100
- [AppInfos.NEAR.name]: DeviceLabels.CONTINUE_TO_ACTION,
101
- default: DeviceLabels.HOLD_TO_SIGN,
102
- },
103
- sendVerify: {
104
- default: DeviceLabels.REVIEW_OPERATION,
105
- },
106
- sendConfirm: {
107
- default: DeviceLabels.HOLD_TO_SIGN,
108
- },
109
- },
112
+ [DeviceModelId.stax]: TOUCHSCREEN_DEVICE_CONFIG,
113
+ [DeviceModelId.europa]: TOUCHSCREEN_DEVICE_CONFIG,
110
114
  default: {
111
115
  receiveVerify: {
112
116
  [AppInfos.BNB_CHAIN.name]: DeviceLabels.VERIFY_BSC,
@@ -114,7 +118,7 @@ export const DEVICE_LABELS_CONFIG: DeviceLabelsConfig = {
114
118
  [AppInfos.ETHEREUM.name]: DeviceLabels.VERIFY_ETHEREUM,
115
119
  [AppInfos.POLKADOT.name]: DeviceLabels.PLEASE_REVIEW,
116
120
  [AppInfos.POLYGON.name]: DeviceLabels.VERIFY_POLYGON,
117
- [AppInfos.SOLANA.name]: DeviceLabels.PUBKEY,
121
+ [AppInfos.SOLANA.name]: DeviceLabels.VERIFY_SOLANA_ADDRESS,
118
122
  default: DeviceLabels.ADDRESS,
119
123
  },
120
124
  receiveConfirm: {
@@ -124,13 +128,14 @@ export const DEVICE_LABELS_CONFIG: DeviceLabelsConfig = {
124
128
  [AppInfos.ETHEREUM.name]: DeviceLabels.CONFIRM,
125
129
  [AppInfos.POLKADOT.name]: DeviceLabels.CAPS_APPROVE,
126
130
  [AppInfos.POLYGON.name]: DeviceLabels.CONFIRM,
131
+ [AppInfos.SOLANA.name]: DeviceLabels.CONFIRM,
127
132
  default: DeviceLabels.APPROVE,
128
133
  },
129
134
  delegateVerify: {
130
135
  [AppInfos.COSMOS.name]: DeviceLabels.PLEASE_REVIEW,
131
136
  [AppInfos.MULTIVERS_X.name]: DeviceLabels.RECEIVER,
132
137
  [AppInfos.NEAR.name]: DeviceLabels.VIEW_HEADER,
133
- [AppInfos.SOLANA.name]: DeviceLabels.DELEGATE_FROM,
138
+ [AppInfos.SOLANA.name]: DeviceLabels.REVIEW_TRANSACTION_TO,
134
139
  default: DeviceLabels.REVIEW_OPERATION,
135
140
  },
136
141
  delegateConfirm: {
@@ -141,15 +146,16 @@ export const DEVICE_LABELS_CONFIG: DeviceLabelsConfig = {
141
146
  [AppInfos.MULTIVERS_X.name]: DeviceLabels.SIGN,
142
147
  [AppInfos.NEAR.name]: DeviceLabels.CONTINUE_TO_ACTION,
143
148
  [AppInfos.OSMOSIS.name]: DeviceLabels.CAPS_APPROVE,
149
+ [AppInfos.SOLANA.name]: DeviceLabels.SIGN,
144
150
  default: DeviceLabels.APPROVE,
145
151
  },
146
152
  sendVerify: {
147
- [AppInfos.SOLANA.name]: DeviceLabels.TRANSFER,
153
+ [AppInfos.SOLANA.name]: DeviceLabels.REVIEW_TRANSACTION_TO,
148
154
  [AppInfos.RIPPLE.name]: DeviceLabels.TRANSACTION_TYPE,
149
155
  default: DeviceLabels.REVIEW_OPERATION,
150
156
  },
151
157
  sendConfirm: {
152
- [AppInfos.SOLANA.name]: DeviceLabels.APPROVE,
158
+ [AppInfos.SOLANA.name]: DeviceLabels.SIGN_TRANSACTION,
153
159
  [AppInfos.TRON.name]: DeviceLabels.SIGN,
154
160
  [AppInfos.STELLAR.name]: DeviceLabels.SIGN,
155
161
  [AppInfos.RIPPLE.name]: DeviceLabels.SIGN,
@@ -10,16 +10,24 @@ function getSpeculosInfo(): {
10
10
  const speculosAddress = getSpeculosAddress();
11
11
  return { speculosApiPort, speculosAddress };
12
12
  }
13
+
13
14
  export async function pressAndRelease(deviceLabel: string, x?: number, y?: number) {
14
15
  const { speculosApiPort, speculosAddress } = getSpeculosInfo();
15
- const { x: coordX, y: coordY } = await getDeviceLabelCoordinates(deviceLabel, speculosApiPort);
16
- x = x === undefined ? coordX : x;
17
- y = y === undefined ? coordY : y;
16
+ let xCoord: number;
17
+ let yCoord: number;
18
+ if (x && y) {
19
+ xCoord = x;
20
+ yCoord = y;
21
+ } else {
22
+ const coords = await getDeviceLabelCoordinates(deviceLabel, speculosApiPort);
23
+ xCoord = coords.x;
24
+ yCoord = coords.y;
25
+ }
18
26
  await retryAxiosRequest(() =>
19
27
  axios.post(`${speculosAddress}:${speculosApiPort}/finger`, {
20
28
  action: "press-and-release",
21
- x: x,
22
- y: y,
29
+ x: xCoord,
30
+ y: yCoord,
23
31
  }),
24
32
  );
25
33
  }
@@ -108,12 +108,6 @@ export class Account {
108
108
  "0xa1baa625c5E6A9304cB7AcD86d2fee6B710eC3eB",
109
109
  1,
110
110
  );
111
- static readonly BSC_POL = new Account(
112
- Currency.BSC_POL,
113
- "BNB Chain 1",
114
- "0x4BE2E2B8872AA298D6d123b9211B53E41f611566",
115
- 0,
116
- );
117
111
  static readonly BSC_SHIBA = new Account(
118
112
  Currency.BSC_SHIBA,
119
113
  "BNB Chain 1",
@@ -156,13 +156,6 @@ export class Currency {
156
156
  AppInfos.BNB_CHAIN,
157
157
  [Network.BNB_CHAIN, Network.POLYGON],
158
158
  );
159
- static readonly BSC_POL = new Currency(
160
- "Matic Token",
161
- "MATIC",
162
- "bsc/bep20/matic_token",
163
- AppInfos.BNB_CHAIN,
164
- [Network.BNB_CHAIN],
165
- );
166
159
  static readonly BSC_SHIBA = new Currency("Shiba Inu", "SHIB", "bsc", AppInfos.BNB_CHAIN, [
167
160
  Network.BNB_CHAIN,
168
161
  Network.ETHEREUM,
@@ -8,4 +8,5 @@ export class Device {
8
8
  static readonly LNX = new Device("nanoX", 855638020);
9
9
  static readonly LNSP = new Device("nanoSP", 856686596);
10
10
  static readonly STAX = new Device("stax", 857735172);
11
+ static readonly FLEX = new Device("flex", 858783748);
11
12
  }
@@ -39,6 +39,7 @@ export enum DeviceLabels {
39
39
  REVIEW_OPERATION = "Review",
40
40
  REMOVE_PHONE_OR_COMPUTER = "Remove phone or computer",
41
41
  REVIEW_TRANSACTION = "Review transaction",
42
+ REVIEW_TRANSACTION_TO = "Review transaction to",
42
43
  SEND = "Send",
43
44
  SEND_TO_ADDRESS = "Send to address",
44
45
  SEND_TO_ADDRESS_2 = "Send to address (2/2)",
@@ -59,6 +60,7 @@ export enum DeviceLabels {
59
60
  VERIFY_BSC = "Verify BSC",
60
61
  VERIFY_ETHEREUM = "Verify Ethereum",
61
62
  VERIFY_POLYGON = "Verify Polygon",
63
+ VERIFY_COSMOS = "Verify Cosmos",
62
64
  VERIFY_SOLANA_ADDRESS = "Verify Solana address",
63
65
  VIEW_ACTION = "View action",
64
66
  VIEW_HEADER = "View Header",
@@ -32,7 +32,7 @@ export async function sendBTC(tx: Transaction) {
32
32
  expect(isAmountCorrect).toBeTruthy();
33
33
  const isAddressCorrect = containsSubstringInEvent(tx.accountToCredit.address, events);
34
34
  expect(isAddressCorrect).toBeTruthy();
35
- if (speculosDevice === DeviceModelId.stax) {
35
+ if (isTouchDevice()) {
36
36
  await longPressAndRelease(DeviceLabels.HOLD_TO_SIGN, 3);
37
37
  } else {
38
38
  await pressBoth();
@@ -10,6 +10,7 @@ import {
10
10
  } from "../deviceInteraction/TouchDeviceSimulator";
11
11
  import { DeviceLabels } from "../enum/DeviceLabels";
12
12
  import { DeviceModelId } from "@ledgerhq/types-devices";
13
+ import { isTouchDevice } from "../speculosAppVersion";
13
14
 
14
15
  type ActionType = "both" | "right" | "tap" | "swipe" | "confirm" | "hold";
15
16
 
@@ -20,7 +21,7 @@ function validateTransactionData(tx: Transaction, events: string[]) {
20
21
  expect(isAmountCorrect).toBeTruthy();
21
22
  }
22
23
 
23
- async function sendCardanoStax(tx: Transaction) {
24
+ async function sendCardanoTouchDevices(tx: Transaction) {
24
25
  await waitFor(DeviceLabels.REVIEW_TRANSACTION);
25
26
  const events = await pressUntilTextFound(DeviceLabels.TO);
26
27
  validateTransactionData(tx, events);
@@ -60,8 +61,8 @@ async function sendCardanoButtonDevice(tx: Transaction) {
60
61
 
61
62
  export async function sendCardano(tx: Transaction) {
62
63
  const speculosModel = getSpeculosModel();
63
- if (speculosModel === DeviceModelId.stax) {
64
- return sendCardanoStax(tx);
64
+ if (isTouchDevice()) {
65
+ return sendCardanoTouchDevices(tx);
65
66
  }
66
67
  if (speculosModel === DeviceModelId.nanoS) {
67
68
  return sendCardanoNanoS(tx);
@@ -70,7 +71,7 @@ export async function sendCardano(tx: Transaction) {
70
71
  }
71
72
 
72
73
  const DELEGATE_STEPS_CONFIG = {
73
- [DeviceModelId.stax]: [
74
+ [DeviceModelId.stax || DeviceModelId.europa]: [
74
75
  [DeviceLabels.REVIEW_TRANSACTION, "swipe"],
75
76
  [DeviceLabels.TAP_TO_CONTINUE, "tap"],
76
77
  [DeviceLabels.REGISTER, "swipe"],
@@ -107,7 +108,7 @@ const DELEGATE_STEPS_CONFIG = {
107
108
  ] as const,
108
109
  };
109
110
 
110
- async function delegateStaxAction(label: DeviceLabels) {
111
+ async function delegateTouchDevicesAction(label: DeviceLabels) {
111
112
  const CONFIRM_BUTTON_COORDS = { x: 139, y: 532 };
112
113
  await waitFor(label);
113
114
  switch (label) {
@@ -135,14 +136,10 @@ async function delegateNanoAction(label: DeviceLabels, action: ActionType) {
135
136
  }
136
137
  }
137
138
 
138
- async function executeDelegateStep(
139
- label: DeviceLabels,
140
- action: ActionType,
141
- speculosModel: DeviceModelId,
142
- ) {
139
+ async function executeDelegateStep(label: DeviceLabels, action: ActionType) {
143
140
  try {
144
- if (speculosModel === DeviceModelId.stax) {
145
- await delegateStaxAction(label);
141
+ if (isTouchDevice()) {
142
+ await delegateTouchDevicesAction(label);
146
143
  } else {
147
144
  await delegateNanoAction(label, action);
148
145
  }
@@ -156,13 +153,13 @@ async function executeDelegateStep(
156
153
  export async function delegateCardano() {
157
154
  const speculosModel = getSpeculosModel();
158
155
  const steps =
159
- speculosModel === DeviceModelId.stax
160
- ? DELEGATE_STEPS_CONFIG[DeviceModelId.stax]
156
+ speculosModel === DeviceModelId.stax || speculosModel === DeviceModelId.europa
157
+ ? DELEGATE_STEPS_CONFIG[speculosModel]
161
158
  : speculosModel === DeviceModelId.nanoS
162
159
  ? DELEGATE_STEPS_CONFIG[DeviceModelId.nanoS]
163
160
  : DELEGATE_STEPS_CONFIG.default;
164
161
 
165
162
  for (const [label, action] of steps) {
166
- await executeDelegateStep(label, action, speculosModel);
163
+ await executeDelegateStep(label, action);
167
164
  }
168
165
  }
@@ -7,6 +7,7 @@ import { longPressAndRelease } from "../deviceInteraction/TouchDeviceSimulator";
7
7
  import { DeviceLabels } from "../enum/DeviceLabels";
8
8
  import { Device } from "../enum/Device";
9
9
  import { DeviceModelId } from "@ledgerhq/types-devices";
10
+ import { isTouchDevice } from "../speculosAppVersion";
10
11
 
11
12
  function validateTransactionData(tx: Transaction, events: string[]) {
12
13
  const isAmountCorrect = containsSubstringInEvent(tx.amount, events);
@@ -20,7 +21,7 @@ function validateTransactionData(tx: Transaction, events: string[]) {
20
21
  }
21
22
  }
22
23
 
23
- async function sendEvmStax(tx: Transaction) {
24
+ async function sendEvmTouchDevices(tx: Transaction) {
24
25
  const events = await pressUntilTextFound(DeviceLabels.HOLD_TO_SIGN);
25
26
  validateTransactionData(tx, events);
26
27
  await longPressAndRelease(DeviceLabels.HOLD_TO_SIGN, 3);
@@ -40,8 +41,8 @@ async function sendEvmNanoS(tx: Transaction) {
40
41
 
41
42
  export async function sendEVM(tx: Transaction) {
42
43
  const speculosModel = getSpeculosModel();
43
- if (speculosModel === DeviceModelId.stax) {
44
- return sendEvmStax(tx);
44
+ if (isTouchDevice()) {
45
+ return sendEvmTouchDevices(tx);
45
46
  }
46
47
  if (speculosModel === DeviceModelId.nanoS) {
47
48
  return sendEvmNanoS(tx);
@@ -22,10 +22,7 @@ export async function sendSolana(tx: Transaction) {
22
22
  const isAmountCorrect = containsSubstringInEvent(tx.amount, events);
23
23
  expect(isAmountCorrect).toBeTruthy();
24
24
  if (process.env.SPECULOS_DEVICE !== Device.LNS.name) {
25
- const isAddressCorrect = containsSubstringInEvent(
26
- tx.accountToCredit.parentAccount?.address ?? tx.accountToCredit.address,
27
- events,
28
- );
25
+ const isAddressCorrect = containsSubstringInEvent(tx.accountToCredit.address, events);
29
26
  expect(isAddressCorrect).toBeTruthy();
30
27
  }
31
28