@ledgerhq/live-common 34.48.0-nightly.2 → 34.48.0-nightly.3

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 (329) hide show
  1. package/lib/__tests__/test-helpers/environment.js +1 -0
  2. package/lib/__tests__/test-helpers/environment.js.map +1 -1
  3. package/lib/apps/inlineAppInstall.d.ts +1 -3
  4. package/lib/apps/inlineAppInstall.d.ts.map +1 -1
  5. package/lib/apps/inlineAppInstall.js +2 -2
  6. package/lib/apps/inlineAppInstall.js.map +1 -1
  7. package/lib/apps/react.d.ts +1 -2
  8. package/lib/apps/react.d.ts.map +1 -1
  9. package/lib/apps/react.js +2 -2
  10. package/lib/apps/react.js.map +1 -1
  11. package/lib/apps/runner.d.ts +2 -4
  12. package/lib/apps/runner.d.ts.map +1 -1
  13. package/lib/apps/runner.js +3 -4
  14. package/lib/apps/runner.js.map +1 -1
  15. package/lib/bridge/generic-alpaca/accountBridge.d.ts +2 -1
  16. package/lib/bridge/generic-alpaca/accountBridge.d.ts.map +1 -1
  17. package/lib/bridge/generic-alpaca/accountBridge.js +2 -2
  18. package/lib/bridge/generic-alpaca/accountBridge.js.map +1 -1
  19. package/lib/bridge/generic-alpaca/alpaca/index.d.ts +1 -1
  20. package/lib/bridge/generic-alpaca/alpaca/index.d.ts.map +1 -1
  21. package/lib/bridge/generic-alpaca/alpaca/index.js +10 -6
  22. package/lib/bridge/generic-alpaca/alpaca/index.js.map +1 -1
  23. package/lib/bridge/generic-alpaca/alpaca/index.unit.test.js +37 -9
  24. package/lib/bridge/generic-alpaca/alpaca/index.unit.test.js.map +1 -1
  25. package/lib/bridge/generic-alpaca/createTransaction.d.ts +1 -1
  26. package/lib/bridge/generic-alpaca/createTransaction.d.ts.map +1 -1
  27. package/lib/bridge/generic-alpaca/createTransaction.js +8 -0
  28. package/lib/bridge/generic-alpaca/createTransaction.js.map +1 -1
  29. package/lib/bridge/generic-alpaca/currencyBridge.d.ts +2 -1
  30. package/lib/bridge/generic-alpaca/currencyBridge.d.ts.map +1 -1
  31. package/lib/bridge/generic-alpaca/currencyBridge.js +3 -2
  32. package/lib/bridge/generic-alpaca/currencyBridge.js.map +1 -1
  33. package/lib/bridge/generic-alpaca/getAccountShape.d.ts.map +1 -1
  34. package/lib/bridge/generic-alpaca/getAccountShape.js +4 -4
  35. package/lib/bridge/generic-alpaca/getAccountShape.js.map +1 -1
  36. package/lib/bridge/generic-alpaca/signer/Eth.d.ts +8 -0
  37. package/lib/bridge/generic-alpaca/signer/Eth.d.ts.map +1 -0
  38. package/lib/bridge/generic-alpaca/signer/Eth.js +51 -0
  39. package/lib/bridge/generic-alpaca/signer/Eth.js.map +1 -0
  40. package/lib/bridge/generic-alpaca/signer/index.d.ts +2 -10
  41. package/lib/bridge/generic-alpaca/signer/index.d.ts.map +1 -1
  42. package/lib/bridge/generic-alpaca/signer/index.js +2 -2
  43. package/lib/bridge/generic-alpaca/signer/index.js.map +1 -1
  44. package/lib/bridge/generic-alpaca/signer/signTransaction.d.ts +2 -3
  45. package/lib/bridge/generic-alpaca/signer/signTransaction.d.ts.map +1 -1
  46. package/lib/bridge/generic-alpaca/signer/signTransaction.js.map +1 -1
  47. package/lib/bridge/generic-alpaca/signer/types.d.ts +11 -0
  48. package/lib/bridge/generic-alpaca/signer/types.d.ts.map +1 -1
  49. package/lib/bridge/generic-alpaca/utils.d.ts +2 -0
  50. package/lib/bridge/generic-alpaca/utils.d.ts.map +1 -1
  51. package/lib/bridge/generic-alpaca/utils.js +15 -1
  52. package/lib/bridge/generic-alpaca/utils.js.map +1 -1
  53. package/lib/bridge/generic-alpaca/utils.test.js +21 -0
  54. package/lib/bridge/generic-alpaca/utils.test.js.map +1 -1
  55. package/lib/config/sharedConfig.d.ts.map +1 -1
  56. package/lib/config/sharedConfig.js +30 -28
  57. package/lib/config/sharedConfig.js.map +1 -1
  58. package/lib/e2e/enum/Account.d.ts +2 -0
  59. package/lib/e2e/enum/Account.d.ts.map +1 -1
  60. package/lib/e2e/enum/Account.js +2 -0
  61. package/lib/e2e/enum/Account.js.map +1 -1
  62. package/lib/e2e/enum/AppInfos.d.ts +1 -0
  63. package/lib/e2e/enum/AppInfos.d.ts.map +1 -1
  64. package/lib/e2e/enum/AppInfos.js +1 -0
  65. package/lib/e2e/enum/AppInfos.js.map +1 -1
  66. package/lib/e2e/enum/Currency.d.ts +1 -0
  67. package/lib/e2e/enum/Currency.d.ts.map +1 -1
  68. package/lib/e2e/enum/Currency.js +1 -0
  69. package/lib/e2e/enum/Currency.js.map +1 -1
  70. package/lib/e2e/enum/Network.d.ts +2 -1
  71. package/lib/e2e/enum/Network.d.ts.map +1 -1
  72. package/lib/e2e/enum/Network.js +1 -0
  73. package/lib/e2e/enum/Network.js.map +1 -1
  74. package/lib/e2e/families/kaspa.d.ts +4 -0
  75. package/lib/e2e/families/kaspa.d.ts.map +1 -0
  76. package/lib/e2e/families/kaspa.js +23 -0
  77. package/lib/e2e/families/kaspa.js.map +1 -0
  78. package/lib/e2e/index.d.ts +0 -2
  79. package/lib/e2e/index.d.ts.map +1 -1
  80. package/lib/e2e/speculos.d.ts.map +1 -1
  81. package/lib/e2e/speculos.js +12 -0
  82. package/lib/e2e/speculos.js.map +1 -1
  83. package/lib/families/evm/config.js +2 -2
  84. package/lib/families/evm/config.js.map +1 -1
  85. package/lib/families/kaspa/bridge.integration.test.d.ts +2 -0
  86. package/lib/families/kaspa/bridge.integration.test.d.ts.map +1 -0
  87. package/lib/families/kaspa/bridge.integration.test.js +7 -0
  88. package/lib/families/kaspa/bridge.integration.test.js.map +1 -0
  89. package/lib/families/kaspa/config.d.ts +3 -0
  90. package/lib/families/kaspa/config.d.ts.map +1 -0
  91. package/lib/families/kaspa/config.js +14 -0
  92. package/lib/families/kaspa/config.js.map +1 -0
  93. package/lib/families/kaspa/react.d.ts +4 -0
  94. package/lib/families/kaspa/react.d.ts.map +1 -0
  95. package/lib/families/kaspa/react.js +18 -0
  96. package/lib/families/kaspa/react.js.map +1 -0
  97. package/lib/families/kaspa/setup.d.ts +18 -0
  98. package/lib/families/kaspa/setup.d.ts.map +1 -0
  99. package/lib/families/kaspa/setup.js +24 -0
  100. package/lib/families/kaspa/setup.js.map +1 -0
  101. package/lib/families/kaspa/types.d.ts +2 -0
  102. package/lib/families/kaspa/types.d.ts.map +1 -0
  103. package/lib/families/kaspa/types.js +18 -0
  104. package/lib/families/kaspa/types.js.map +1 -0
  105. package/lib/families/xrp/setup.d.ts +2 -2
  106. package/lib/featureFlags/defaultFeatures.d.ts.map +1 -1
  107. package/lib/featureFlags/defaultFeatures.js +0 -1
  108. package/lib/featureFlags/defaultFeatures.js.map +1 -1
  109. package/lib/featureFlags/useFeature.d.ts +1 -1
  110. package/lib/featureFlags/useFeature.d.ts.map +1 -1
  111. package/lib/generated/bridge/js.d.ts +1 -0
  112. package/lib/generated/bridge/js.d.ts.map +1 -1
  113. package/lib/generated/bridge/js.js +24 -22
  114. package/lib/generated/bridge/js.js.map +1 -1
  115. package/lib/generated/bridge/mock.d.ts +1 -1
  116. package/lib/generated/cli-transaction.d.ts +13 -2
  117. package/lib/generated/cli-transaction.d.ts.map +1 -1
  118. package/lib/generated/cli-transaction.js +28 -26
  119. package/lib/generated/cli-transaction.js.map +1 -1
  120. package/lib/generated/deviceTransactionConfig.d.ts +2 -0
  121. package/lib/generated/deviceTransactionConfig.d.ts.map +1 -1
  122. package/lib/generated/deviceTransactionConfig.js +24 -22
  123. package/lib/generated/deviceTransactionConfig.js.map +1 -1
  124. package/lib/generated/hw-getAddress.d.ts +1 -0
  125. package/lib/generated/hw-getAddress.d.ts.map +1 -1
  126. package/lib/generated/hw-getAddress.js +28 -26
  127. package/lib/generated/hw-getAddress.js.map +1 -1
  128. package/lib/generated/platformAdapter.d.ts +1 -1
  129. package/lib/generated/specs.d.ts +1 -1
  130. package/lib/generated/transaction.d.ts +11 -3
  131. package/lib/generated/transaction.d.ts.map +1 -1
  132. package/lib/generated/transaction.js +28 -26
  133. package/lib/generated/transaction.js.map +1 -1
  134. package/lib/generated/types.d.ts +5 -4
  135. package/lib/generated/types.d.ts.map +1 -1
  136. package/lib/generated/walletApiAdapter.d.ts +1 -1
  137. package/lib/hw/actions/app.d.ts.map +1 -1
  138. package/lib/hw/actions/app.js +11 -8
  139. package/lib/hw/actions/app.js.map +1 -1
  140. package/lib/hw/getDeviceNameMaxLength.d.ts.map +1 -1
  141. package/lib/hw/getDeviceNameMaxLength.js +2 -0
  142. package/lib/hw/getDeviceNameMaxLength.js.map +1 -1
  143. package/lib/hw/getDeviceNameMaxLength.test.js +12 -0
  144. package/lib/hw/getDeviceNameMaxLength.test.js.map +1 -1
  145. package/lib-es/__tests__/test-helpers/environment.js +1 -0
  146. package/lib-es/__tests__/test-helpers/environment.js.map +1 -1
  147. package/lib-es/apps/inlineAppInstall.d.ts +1 -3
  148. package/lib-es/apps/inlineAppInstall.d.ts.map +1 -1
  149. package/lib-es/apps/inlineAppInstall.js +2 -2
  150. package/lib-es/apps/inlineAppInstall.js.map +1 -1
  151. package/lib-es/apps/react.d.ts +1 -2
  152. package/lib-es/apps/react.d.ts.map +1 -1
  153. package/lib-es/apps/react.js +2 -2
  154. package/lib-es/apps/react.js.map +1 -1
  155. package/lib-es/apps/runner.d.ts +2 -4
  156. package/lib-es/apps/runner.d.ts.map +1 -1
  157. package/lib-es/apps/runner.js +3 -4
  158. package/lib-es/apps/runner.js.map +1 -1
  159. package/lib-es/bridge/generic-alpaca/accountBridge.d.ts +2 -1
  160. package/lib-es/bridge/generic-alpaca/accountBridge.d.ts.map +1 -1
  161. package/lib-es/bridge/generic-alpaca/accountBridge.js +2 -2
  162. package/lib-es/bridge/generic-alpaca/accountBridge.js.map +1 -1
  163. package/lib-es/bridge/generic-alpaca/alpaca/index.d.ts +1 -1
  164. package/lib-es/bridge/generic-alpaca/alpaca/index.d.ts.map +1 -1
  165. package/lib-es/bridge/generic-alpaca/alpaca/index.js +10 -6
  166. package/lib-es/bridge/generic-alpaca/alpaca/index.js.map +1 -1
  167. package/lib-es/bridge/generic-alpaca/alpaca/index.unit.test.js +37 -9
  168. package/lib-es/bridge/generic-alpaca/alpaca/index.unit.test.js.map +1 -1
  169. package/lib-es/bridge/generic-alpaca/createTransaction.d.ts +1 -1
  170. package/lib-es/bridge/generic-alpaca/createTransaction.d.ts.map +1 -1
  171. package/lib-es/bridge/generic-alpaca/createTransaction.js +8 -0
  172. package/lib-es/bridge/generic-alpaca/createTransaction.js.map +1 -1
  173. package/lib-es/bridge/generic-alpaca/currencyBridge.d.ts +2 -1
  174. package/lib-es/bridge/generic-alpaca/currencyBridge.d.ts.map +1 -1
  175. package/lib-es/bridge/generic-alpaca/currencyBridge.js +3 -2
  176. package/lib-es/bridge/generic-alpaca/currencyBridge.js.map +1 -1
  177. package/lib-es/bridge/generic-alpaca/getAccountShape.d.ts.map +1 -1
  178. package/lib-es/bridge/generic-alpaca/getAccountShape.js +4 -4
  179. package/lib-es/bridge/generic-alpaca/getAccountShape.js.map +1 -1
  180. package/lib-es/bridge/generic-alpaca/signer/Eth.d.ts +8 -0
  181. package/lib-es/bridge/generic-alpaca/signer/Eth.d.ts.map +1 -0
  182. package/lib-es/bridge/generic-alpaca/signer/Eth.js +47 -0
  183. package/lib-es/bridge/generic-alpaca/signer/Eth.js.map +1 -0
  184. package/lib-es/bridge/generic-alpaca/signer/index.d.ts +2 -10
  185. package/lib-es/bridge/generic-alpaca/signer/index.d.ts.map +1 -1
  186. package/lib-es/bridge/generic-alpaca/signer/index.js +2 -2
  187. package/lib-es/bridge/generic-alpaca/signer/index.js.map +1 -1
  188. package/lib-es/bridge/generic-alpaca/signer/signTransaction.d.ts +2 -3
  189. package/lib-es/bridge/generic-alpaca/signer/signTransaction.d.ts.map +1 -1
  190. package/lib-es/bridge/generic-alpaca/signer/signTransaction.js.map +1 -1
  191. package/lib-es/bridge/generic-alpaca/signer/types.d.ts +11 -0
  192. package/lib-es/bridge/generic-alpaca/signer/types.d.ts.map +1 -1
  193. package/lib-es/bridge/generic-alpaca/utils.d.ts +2 -0
  194. package/lib-es/bridge/generic-alpaca/utils.d.ts.map +1 -1
  195. package/lib-es/bridge/generic-alpaca/utils.js +13 -0
  196. package/lib-es/bridge/generic-alpaca/utils.js.map +1 -1
  197. package/lib-es/bridge/generic-alpaca/utils.test.js +22 -1
  198. package/lib-es/bridge/generic-alpaca/utils.test.js.map +1 -1
  199. package/lib-es/config/sharedConfig.d.ts.map +1 -1
  200. package/lib-es/config/sharedConfig.js +2 -0
  201. package/lib-es/config/sharedConfig.js.map +1 -1
  202. package/lib-es/e2e/enum/Account.d.ts +2 -0
  203. package/lib-es/e2e/enum/Account.d.ts.map +1 -1
  204. package/lib-es/e2e/enum/Account.js +2 -0
  205. package/lib-es/e2e/enum/Account.js.map +1 -1
  206. package/lib-es/e2e/enum/AppInfos.d.ts +1 -0
  207. package/lib-es/e2e/enum/AppInfos.d.ts.map +1 -1
  208. package/lib-es/e2e/enum/AppInfos.js +1 -0
  209. package/lib-es/e2e/enum/AppInfos.js.map +1 -1
  210. package/lib-es/e2e/enum/Currency.d.ts +1 -0
  211. package/lib-es/e2e/enum/Currency.d.ts.map +1 -1
  212. package/lib-es/e2e/enum/Currency.js +1 -0
  213. package/lib-es/e2e/enum/Currency.js.map +1 -1
  214. package/lib-es/e2e/enum/Network.d.ts +2 -1
  215. package/lib-es/e2e/enum/Network.d.ts.map +1 -1
  216. package/lib-es/e2e/enum/Network.js +1 -0
  217. package/lib-es/e2e/enum/Network.js.map +1 -1
  218. package/lib-es/e2e/families/kaspa.d.ts +4 -0
  219. package/lib-es/e2e/families/kaspa.d.ts.map +1 -0
  220. package/lib-es/e2e/families/kaspa.js +15 -0
  221. package/lib-es/e2e/families/kaspa.js.map +1 -0
  222. package/lib-es/e2e/index.d.ts +0 -2
  223. package/lib-es/e2e/index.d.ts.map +1 -1
  224. package/lib-es/e2e/speculos.d.ts.map +1 -1
  225. package/lib-es/e2e/speculos.js +12 -0
  226. package/lib-es/e2e/speculos.js.map +1 -1
  227. package/lib-es/families/evm/config.js +2 -2
  228. package/lib-es/families/evm/config.js.map +1 -1
  229. package/lib-es/families/kaspa/bridge.integration.test.d.ts +2 -0
  230. package/lib-es/families/kaspa/bridge.integration.test.d.ts.map +1 -0
  231. package/lib-es/families/kaspa/bridge.integration.test.js +5 -0
  232. package/lib-es/families/kaspa/bridge.integration.test.js.map +1 -0
  233. package/lib-es/families/kaspa/config.d.ts +3 -0
  234. package/lib-es/families/kaspa/config.d.ts.map +1 -0
  235. package/lib-es/families/kaspa/config.js +11 -0
  236. package/lib-es/families/kaspa/config.js.map +1 -0
  237. package/lib-es/families/kaspa/react.d.ts +4 -0
  238. package/lib-es/families/kaspa/react.d.ts.map +1 -0
  239. package/lib-es/families/kaspa/react.js +14 -0
  240. package/lib-es/families/kaspa/react.js.map +1 -0
  241. package/lib-es/families/kaspa/setup.d.ts +18 -0
  242. package/lib-es/families/kaspa/setup.d.ts.map +1 -0
  243. package/lib-es/families/kaspa/setup.js +16 -0
  244. package/lib-es/families/kaspa/setup.js.map +1 -0
  245. package/lib-es/families/kaspa/types.d.ts +2 -0
  246. package/lib-es/families/kaspa/types.d.ts.map +1 -0
  247. package/lib-es/families/kaspa/types.js +2 -0
  248. package/lib-es/families/kaspa/types.js.map +1 -0
  249. package/lib-es/families/xrp/setup.d.ts +2 -2
  250. package/lib-es/featureFlags/defaultFeatures.d.ts.map +1 -1
  251. package/lib-es/featureFlags/defaultFeatures.js +0 -1
  252. package/lib-es/featureFlags/defaultFeatures.js.map +1 -1
  253. package/lib-es/featureFlags/useFeature.d.ts +1 -1
  254. package/lib-es/featureFlags/useFeature.d.ts.map +1 -1
  255. package/lib-es/generated/bridge/js.d.ts +1 -0
  256. package/lib-es/generated/bridge/js.d.ts.map +1 -1
  257. package/lib-es/generated/bridge/js.js +2 -0
  258. package/lib-es/generated/bridge/js.js.map +1 -1
  259. package/lib-es/generated/bridge/mock.d.ts +1 -1
  260. package/lib-es/generated/cli-transaction.d.ts +13 -2
  261. package/lib-es/generated/cli-transaction.d.ts.map +1 -1
  262. package/lib-es/generated/cli-transaction.js +2 -0
  263. package/lib-es/generated/cli-transaction.js.map +1 -1
  264. package/lib-es/generated/deviceTransactionConfig.d.ts +2 -0
  265. package/lib-es/generated/deviceTransactionConfig.d.ts.map +1 -1
  266. package/lib-es/generated/deviceTransactionConfig.js +2 -0
  267. package/lib-es/generated/deviceTransactionConfig.js.map +1 -1
  268. package/lib-es/generated/hw-getAddress.d.ts +1 -0
  269. package/lib-es/generated/hw-getAddress.d.ts.map +1 -1
  270. package/lib-es/generated/hw-getAddress.js +2 -0
  271. package/lib-es/generated/hw-getAddress.js.map +1 -1
  272. package/lib-es/generated/platformAdapter.d.ts +1 -1
  273. package/lib-es/generated/specs.d.ts +1 -1
  274. package/lib-es/generated/transaction.d.ts +11 -3
  275. package/lib-es/generated/transaction.d.ts.map +1 -1
  276. package/lib-es/generated/transaction.js +2 -0
  277. package/lib-es/generated/transaction.js.map +1 -1
  278. package/lib-es/generated/types.d.ts +5 -4
  279. package/lib-es/generated/types.d.ts.map +1 -1
  280. package/lib-es/generated/walletApiAdapter.d.ts +1 -1
  281. package/lib-es/hw/actions/app.d.ts.map +1 -1
  282. package/lib-es/hw/actions/app.js +11 -8
  283. package/lib-es/hw/actions/app.js.map +1 -1
  284. package/lib-es/hw/getDeviceNameMaxLength.d.ts.map +1 -1
  285. package/lib-es/hw/getDeviceNameMaxLength.js +2 -0
  286. package/lib-es/hw/getDeviceNameMaxLength.js.map +1 -1
  287. package/lib-es/hw/getDeviceNameMaxLength.test.js +12 -0
  288. package/lib-es/hw/getDeviceNameMaxLength.test.js.map +1 -1
  289. package/package.json +42 -39
  290. package/src/__tests__/test-helpers/environment.ts +1 -0
  291. package/src/apps/inlineAppInstall.ts +1 -4
  292. package/src/apps/react.ts +1 -3
  293. package/src/apps/runner.ts +1 -8
  294. package/src/bridge/generic-alpaca/accountBridge.ts +8 -3
  295. package/src/bridge/generic-alpaca/alpaca/index.ts +13 -18
  296. package/src/bridge/generic-alpaca/alpaca/index.unit.test.ts +38 -10
  297. package/src/bridge/generic-alpaca/createTransaction.ts +9 -1
  298. package/src/bridge/generic-alpaca/currencyBridge.ts +8 -2
  299. package/src/bridge/generic-alpaca/getAccountShape.ts +4 -5
  300. package/src/bridge/generic-alpaca/signer/Eth.ts +70 -0
  301. package/src/bridge/generic-alpaca/signer/index.ts +5 -15
  302. package/src/bridge/generic-alpaca/signer/signTransaction.ts +4 -3
  303. package/src/bridge/generic-alpaca/signer/types.ts +14 -0
  304. package/src/bridge/generic-alpaca/utils.test.ts +29 -1
  305. package/src/bridge/generic-alpaca/utils.ts +15 -0
  306. package/src/config/sharedConfig.ts +2 -0
  307. package/src/e2e/enum/Account.ts +14 -0
  308. package/src/e2e/enum/AppInfos.ts +2 -0
  309. package/src/e2e/enum/Currency.ts +2 -0
  310. package/src/e2e/enum/Network.ts +1 -0
  311. package/src/e2e/families/kaspa.ts +17 -0
  312. package/src/e2e/speculos.ts +12 -0
  313. package/src/families/evm/config.ts +2 -2
  314. package/src/families/kaspa/__snapshots__/bridge.integration.test.ts.snap +66 -0
  315. package/src/families/kaspa/bridge.integration.test.ts +5 -0
  316. package/src/families/kaspa/config.ts +12 -0
  317. package/src/families/kaspa/react.ts +19 -0
  318. package/src/families/kaspa/setup.ts +27 -0
  319. package/src/families/kaspa/types.ts +1 -0
  320. package/src/featureFlags/defaultFeatures.ts +0 -1
  321. package/src/generated/bridge/js.ts +2 -0
  322. package/src/generated/cli-transaction.ts +2 -0
  323. package/src/generated/deviceTransactionConfig.ts +2 -0
  324. package/src/generated/hw-getAddress.ts +2 -0
  325. package/src/generated/transaction.ts +2 -0
  326. package/src/generated/types.ts +10 -0
  327. package/src/hw/actions/app.ts +12 -10
  328. package/src/hw/getDeviceNameMaxLength.test.ts +16 -0
  329. package/src/hw/getDeviceNameMaxLength.ts +2 -0
@@ -43,6 +43,18 @@ describe("getDeviceNameMaxLength", () => {
43
43
  version: "3.4.5",
44
44
  })).toBe(20);
45
45
  });
46
+ test("Europa of any version should max at 20", async () => {
47
+ expect(getDeviceNameMaxLength({
48
+ deviceModelId: DeviceModelId.europa,
49
+ version: "0.0.1",
50
+ })).toBe(20);
51
+ });
52
+ test("Apex of any version should max at 20", async () => {
53
+ expect(getDeviceNameMaxLength({
54
+ deviceModelId: DeviceModelId.apex,
55
+ version: "0.0.1",
56
+ })).toBe(20);
57
+ });
46
58
  test("Other models should just return 17 as a fallback", async () => {
47
59
  expect(getDeviceNameMaxLength({
48
60
  deviceModelId: DeviceModelId.blue,
@@ -1 +1 @@
1
- {"version":3,"file":"getDeviceNameMaxLength.test.js","sourceRoot":"","sources":["../../src/hw/getDeviceNameMaxLength.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,sBAAsB,MAAM,0BAA0B,CAAC;AAE9D,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,CACJ,sBAAsB,CAAC;YACrB,aAAa,EAAE,aAAa,CAAC,KAAK;YAClC,OAAO,EAAE,OAAO;SACjB,CAAC,CACH,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,MAAM,CACJ,sBAAsB,CAAC;YACrB,aAAa,EAAE,aAAa,CAAC,KAAK;YAClC,OAAO,EAAE,OAAO;SACjB,CAAC,CACH,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,MAAM,CACJ,sBAAsB,CAAC;YACrB,aAAa,EAAE,aAAa,CAAC,KAAK;YAClC,OAAO,EAAE,OAAO;SACjB,CAAC,CACH,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACb,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,CACJ,sBAAsB,CAAC;YACrB,aAAa,EAAE,aAAa,CAAC,KAAK;YAClC,OAAO,EAAE,OAAO;SACjB,CAAC,CACH,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,MAAM,CACJ,sBAAsB,CAAC;YACrB,aAAa,EAAE,aAAa,CAAC,KAAK;YAClC,OAAO,EAAE,OAAO;SACjB,CAAC,CACH,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,MAAM,CACJ,sBAAsB,CAAC;YACrB,aAAa,EAAE,aAAa,CAAC,KAAK;YAClC,OAAO,EAAE,OAAO;SACjB,CAAC,CACH,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACb,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,CACJ,sBAAsB,CAAC;YACrB,aAAa,EAAE,aAAa,CAAC,IAAI;YACjC,OAAO,EAAE,OAAO;SACjB,CAAC,CACH,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,MAAM,CACJ,sBAAsB,CAAC;YACrB,aAAa,EAAE,aAAa,CAAC,IAAI;YACjC,OAAO,EAAE,OAAO;SACjB,CAAC,CACH,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,MAAM,CACJ,sBAAsB,CAAC;YACrB,aAAa,EAAE,aAAa,CAAC,IAAI;YACjC,OAAO,EAAE,OAAO;SACjB,CAAC,CACH,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACb,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,CACJ,sBAAsB,CAAC;YACrB,aAAa,EAAE,aAAa,CAAC,IAAI;YACjC,OAAO,EAAE,OAAO;SACjB,CAAC,CACH,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,MAAM,CACJ,sBAAsB,CAAC;YACrB,aAAa,EAAE,aAAa,CAAC,MAAM;YACnC,OAAO,EAAE,OAAO;SACjB,CAAC,CACH,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,MAAM,CACJ,sBAAsB,CAAC;YACrB,aAAa,EAAE,aAAa,CAAC,KAAK;YAClC,OAAO,EAAE,OAAO;SACjB,CAAC,CACH,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"getDeviceNameMaxLength.test.js","sourceRoot":"","sources":["../../src/hw/getDeviceNameMaxLength.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ledgerhq/live-common",
3
3
  "description": "Common ground for the Ledger Live apps",
4
- "version": "34.48.0-nightly.2",
4
+ "version": "34.48.0-nightly.3",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/LedgerHQ/ledger-live.git"
@@ -138,6 +138,7 @@
138
138
  "bip39": "^3.0.4",
139
139
  "bs58": "^4.0.1",
140
140
  "date-fns": "^2.23.0",
141
+ "ethers": "6.15.0",
141
142
  "expect": "^27.4.6",
142
143
  "fuse.js": "^6.6.2",
143
144
  "i18next": "20.6.1",
@@ -165,35 +166,36 @@
165
166
  "xstate": "^5.19.2",
166
167
  "yargs": "^17.0.0",
167
168
  "zod": "^3.22.4",
168
- "@ledgerhq/coin-algorand": "^0.10.1-nightly.2",
169
- "@ledgerhq/coin-aptos": "^3.3.0-nightly.2",
170
- "@ledgerhq/coin-bitcoin": "^0.21.1-nightly.2",
171
- "@ledgerhq/coin-canton": "^0.5.0-nightly.2",
172
- "@ledgerhq/coin-cardano": "^0.12.1-nightly.2",
173
- "@ledgerhq/coin-casper": "^2.1.1-nightly.2",
174
- "@ledgerhq/coin-celo": "^1.4.0-nightly.2",
175
- "@ledgerhq/coin-cosmos": "^0.17.1-nightly.2",
176
- "@ledgerhq/coin-evm": "^2.30.0-nightly.2",
177
- "@ledgerhq/coin-filecoin": "^1.11.1-nightly.2",
178
- "@ledgerhq/coin-framework": "^6.4.0-nightly.2",
179
- "@ledgerhq/coin-hedera": "^1.11.1-nightly.2",
180
- "@ledgerhq/coin-icon": "^0.12.1-nightly.2",
181
- "@ledgerhq/coin-internet_computer": "^1.8.1-nightly.2",
182
- "@ledgerhq/coin-mina": "^1.2.1-nightly.2",
183
- "@ledgerhq/coin-multiversx": "^0.5.1-nightly.2",
184
- "@ledgerhq/coin-near": "^0.13.1-nightly.2",
185
- "@ledgerhq/coin-polkadot": "^6.10.0-nightly.2",
186
- "@ledgerhq/coin-solana": "^0.32.1-nightly.2",
187
- "@ledgerhq/coin-stacks": "^0.9.1-nightly.2",
188
- "@ledgerhq/coin-stellar": "^6.4.0-nightly.2",
189
- "@ledgerhq/coin-sui": "^0.13.0-nightly.2",
190
- "@ledgerhq/coin-tezos": "^6.4.0-nightly.2",
191
- "@ledgerhq/coin-ton": "^0.14.1-nightly.2",
192
- "@ledgerhq/coin-tron": "^5.4.0-nightly.2",
193
- "@ledgerhq/coin-vechain": "^2.10.0-nightly.2",
194
- "@ledgerhq/coin-xrp": "^7.4.0-nightly.2",
195
- "@ledgerhq/crypto-icons-ui": "^1.18.1-nightly.0",
196
- "@ledgerhq/cryptoassets": "^13.28.0-nightly.1",
169
+ "@ledgerhq/coin-algorand": "^0.10.1-nightly.3",
170
+ "@ledgerhq/coin-aptos": "^3.3.0-nightly.3",
171
+ "@ledgerhq/coin-bitcoin": "^0.21.1-nightly.3",
172
+ "@ledgerhq/coin-canton": "^0.5.0-nightly.3",
173
+ "@ledgerhq/coin-cardano": "^0.12.1-nightly.3",
174
+ "@ledgerhq/coin-casper": "^2.1.1-nightly.3",
175
+ "@ledgerhq/coin-celo": "^1.4.0-nightly.3",
176
+ "@ledgerhq/coin-cosmos": "^0.17.1-nightly.3",
177
+ "@ledgerhq/coin-evm": "^2.30.0-nightly.3",
178
+ "@ledgerhq/coin-filecoin": "^1.11.1-nightly.3",
179
+ "@ledgerhq/coin-framework": "^6.4.0-nightly.3",
180
+ "@ledgerhq/coin-hedera": "^1.11.1-nightly.3",
181
+ "@ledgerhq/coin-icon": "^0.12.1-nightly.3",
182
+ "@ledgerhq/coin-internet_computer": "^1.8.1-nightly.3",
183
+ "@ledgerhq/coin-kaspa": "^1.1.0-nightly.4",
184
+ "@ledgerhq/coin-mina": "^1.2.1-nightly.3",
185
+ "@ledgerhq/coin-multiversx": "^0.5.1-nightly.3",
186
+ "@ledgerhq/coin-near": "^0.13.1-nightly.3",
187
+ "@ledgerhq/coin-polkadot": "^6.10.0-nightly.3",
188
+ "@ledgerhq/coin-solana": "^0.32.1-nightly.3",
189
+ "@ledgerhq/coin-stacks": "^0.9.1-nightly.3",
190
+ "@ledgerhq/coin-stellar": "^6.4.0-nightly.3",
191
+ "@ledgerhq/coin-sui": "^0.13.0-nightly.3",
192
+ "@ledgerhq/coin-tezos": "^6.4.0-nightly.3",
193
+ "@ledgerhq/coin-ton": "^0.14.1-nightly.3",
194
+ "@ledgerhq/coin-tron": "^5.4.0-nightly.3",
195
+ "@ledgerhq/coin-vechain": "^2.10.0-nightly.3",
196
+ "@ledgerhq/coin-xrp": "^7.4.0-nightly.3",
197
+ "@ledgerhq/crypto-icons-ui": "^1.19.0-nightly.1",
198
+ "@ledgerhq/cryptoassets": "^13.28.0-nightly.2",
197
199
  "@ledgerhq/device-core": "^0.6.3-nightly.1",
198
200
  "@ledgerhq/devices": "8.5.1",
199
201
  "@ledgerhq/errors": "^6.25.0",
@@ -206,6 +208,7 @@
206
208
  "@ledgerhq/hw-app-exchange": "^0.13.2",
207
209
  "@ledgerhq/hw-app-hedera": "^1.2.6",
208
210
  "@ledgerhq/hw-app-icon": "^1.3.6",
211
+ "@ledgerhq/hw-app-kaspa": "^1.3.0-nightly.0",
209
212
  "@ledgerhq/hw-app-multiversx": "^6.25.1",
210
213
  "@ledgerhq/hw-app-near": "^6.31.6",
211
214
  "@ledgerhq/hw-app-polkadot": "^6.34.6",
@@ -213,24 +216,24 @@
213
216
  "@ledgerhq/hw-app-sui": "^1.4.0",
214
217
  "@ledgerhq/hw-app-tezos": "^6.31.6",
215
218
  "@ledgerhq/hw-app-trx": "^6.31.6",
216
- "@ledgerhq/hw-app-vet": "^0.6.0-nightly.1",
219
+ "@ledgerhq/hw-app-vet": "^0.6.0-nightly.2",
217
220
  "@ledgerhq/hw-app-xrp": "^6.32.4",
218
221
  "@ledgerhq/hw-transport": "^6.31.10",
219
222
  "@ledgerhq/hw-transport-mocker": "^6.29.10",
220
223
  "@ledgerhq/ledger-cal-service": "^1.3.2-nightly.1",
221
224
  "@ledgerhq/live-config": "^3.2.0",
222
- "@ledgerhq/live-countervalues": "^0.7.1-nightly.2",
223
- "@ledgerhq/live-countervalues-react": "^0.5.2-nightly.2",
225
+ "@ledgerhq/live-countervalues": "^0.7.1-nightly.3",
226
+ "@ledgerhq/live-countervalues-react": "^0.5.2-nightly.3",
224
227
  "@ledgerhq/live-dmk-shared": "^0.12.3",
225
228
  "@ledgerhq/live-env": "^2.16.0-nightly.1",
226
229
  "@ledgerhq/live-hooks": "0.1.0",
227
230
  "@ledgerhq/live-network": "^2.0.17-nightly.1",
228
- "@ledgerhq/live-nft": "^0.8.20-nightly.2",
231
+ "@ledgerhq/live-nft": "^0.8.20-nightly.3",
229
232
  "@ledgerhq/live-promise": "^0.1.1",
230
- "@ledgerhq/live-signer-canton": "^0.2.4-nightly.2",
231
- "@ledgerhq/live-signer-evm": "^0.7.5-nightly.2",
232
- "@ledgerhq/live-signer-solana": "^0.5.5-nightly.2",
233
- "@ledgerhq/live-wallet": "^0.13.1-nightly.2",
233
+ "@ledgerhq/live-signer-canton": "^0.2.4-nightly.3",
234
+ "@ledgerhq/live-signer-evm": "^0.7.5-nightly.3",
235
+ "@ledgerhq/live-signer-solana": "^0.5.5-nightly.3",
236
+ "@ledgerhq/live-wallet": "^0.13.1-nightly.3",
234
237
  "@ledgerhq/logs": "^6.13.0",
235
238
  "@ledgerhq/speculos-transport": "^0.2.10-nightly.1",
236
239
  "@ledgerhq/wallet-api-acre-module": "^0.7.0-nightly.0",
@@ -283,7 +286,7 @@
283
286
  "uuid": "^8.3.2",
284
287
  "ws": "7",
285
288
  "@ledgerhq/device-react": "^0.2.44-nightly.1",
286
- "@ledgerhq/types-cryptoassets": "^7.26.0",
289
+ "@ledgerhq/types-cryptoassets": "^7.27.0-nightly.0",
287
290
  "@ledgerhq/types-devices": "^6.27.0",
288
291
  "@ledgerhq/types-live": "^6.83.1-nightly.0"
289
292
  },
@@ -119,6 +119,7 @@ setSupportedCurrencies([
119
119
  "canton_network",
120
120
  "canton_network_devnet",
121
121
  "canton_network_localnet",
122
+ "kaspa",
122
123
  ]);
123
124
  LiveConfig.setConfig(liveConfig);
124
125
 
@@ -9,7 +9,6 @@ import { runAllWithProgress } from "./runner";
9
9
  import { InlineAppInstallEvent } from "./types";
10
10
  import { mergeMap, map, throttleTime } from "rxjs/operators";
11
11
  import { LocalTracer } from "@ledgerhq/logs";
12
- import { AppStorageType, StorageProvider } from "../device/use-cases/appDataBackup/types";
13
12
 
14
13
  /**
15
14
  * Tries to install a list of apps
@@ -26,13 +25,11 @@ const inlineAppInstall = ({
26
25
  appNames,
27
26
  onSuccessObs,
28
27
  allowPartialDependencies = false,
29
- storage,
30
28
  }: {
31
29
  transport: Transport;
32
30
  appNames: string[];
33
31
  onSuccessObs?: () => Observable<any>;
34
32
  allowPartialDependencies?: boolean;
35
- storage?: StorageProvider<AppStorageType>;
36
33
  }): Observable<InlineAppInstallEvent | ConnectAppEvent> => {
37
34
  const tracer = new LocalTracer("hw", {
38
35
  ...transport.getTraceContext(),
@@ -105,7 +102,7 @@ const inlineAppInstall = ({
105
102
  installQueue: state.installQueue,
106
103
  }),
107
104
  maybeSkippedEvent,
108
- runAllWithProgress(state, exec, storage).pipe(
105
+ runAllWithProgress(state, exec).pipe(
109
106
  throttleTime(100),
110
107
  map(({ globalProgress, itemProgress, installQueue, currentAppOp }) => ({
111
108
  type: "inline-install",
package/src/apps/react.ts CHANGED
@@ -12,14 +12,12 @@ import {
12
12
  import { runAppOp } from "./runner";
13
13
  import { App } from "@ledgerhq/types-live";
14
14
  import { useFeatureFlags } from "../featureFlags";
15
- import { AppStorageType, StorageProvider } from "../device/use-cases/appDataBackup/types";
16
15
 
17
16
  type UseAppsRunnerResult = [State, (arg0: Action) => void];
18
17
  // use for React apps. support dynamic change of the state.
19
18
  export const useAppsRunner = (
20
19
  listResult: ListAppsResult,
21
20
  exec: Exec,
22
- storage: StorageProvider<AppStorageType>,
23
21
  appsToRestore?: string[],
24
22
  ): UseAppsRunnerResult => {
25
23
  // $FlowFixMe for ledger-live-mobile older react/flow version
@@ -36,7 +34,7 @@ export const useAppsRunner = (
36
34
 
37
35
  useEffect(() => {
38
36
  if (appOp) {
39
- const sub = runAppOp({ state, appOp, exec, storage }).subscribe(event => {
37
+ const sub = runAppOp({ state, appOp, exec }).subscribe(event => {
40
38
  dispatch({
41
39
  type: "onRunnerEvent",
42
40
  event,
@@ -13,18 +13,15 @@ import type { Exec, State, AppOp, RunnerEvent, Action } from "./types";
13
13
  import { reducer, getActionPlan, getNextAppOp } from "./logic";
14
14
  import { delay } from "../promise";
15
15
  import { getEnv } from "@ledgerhq/live-env";
16
- import { AppStorageType, StorageProvider } from "../device/use-cases/appDataBackup/types";
17
16
 
18
17
  export const runAppOp = ({
19
18
  state,
20
19
  appOp,
21
20
  exec,
22
- storage,
23
21
  }: {
24
22
  state: State;
25
23
  appOp: AppOp;
26
24
  exec: Exec;
27
- storage?: StorageProvider<AppStorageType>;
28
25
  }): Observable<RunnerEvent> => {
29
26
  const { appByName, deviceInfo, deviceModel } = state;
30
27
  const app = appByName[appOp.name];
@@ -56,7 +53,6 @@ export const runAppOp = ({
56
53
  targetId: deviceInfo.targetId,
57
54
  app,
58
55
  modelId: deviceModel.id,
59
- ...(storage ? { storage } : {}),
60
56
  ...(state.skipAppDataBackup ? { skipAppDataBackup: true } : {}),
61
57
  }),
62
58
  ).pipe(
@@ -99,7 +95,6 @@ type InlineInstallProgress = {
99
95
  export const runAllWithProgress = (
100
96
  state: State,
101
97
  exec: Exec,
102
- storage?: StorageProvider<AppStorageType>,
103
98
  precision = 100,
104
99
  ): Observable<InlineInstallProgress> => {
105
100
  const total = state.uninstallQueue.length + state.installQueue.length;
@@ -110,9 +105,7 @@ export const runAllWithProgress = (
110
105
  return p;
111
106
  }
112
107
 
113
- return concat(
114
- ...getActionPlan(state).map(appOp => runAppOp({ state, appOp, exec, storage })),
115
- ).pipe(
108
+ return concat(...getActionPlan(state).map(appOp => runAppOp({ state, appOp, exec }))).pipe(
116
109
  map(event => {
117
110
  if (event.type === "runError") {
118
111
  throw event.error;
@@ -14,9 +14,14 @@ import { genericEstimateMaxSpendable } from "./estimateMaxSpendable";
14
14
  import { createTransaction } from "./createTransaction";
15
15
  import { genericBroadcast } from "./broadcast";
16
16
  import { genericSignOperation } from "./signOperation";
17
+ import type { AlpacaSigner } from "./signer/types";
17
18
 
18
- export function getAlpacaAccountBridge(network: string, kind: string): AccountBridge<any> {
19
- const signer = getSigner(network);
19
+ export function getAlpacaAccountBridge(
20
+ network: string,
21
+ kind: string,
22
+ customSigner?: AlpacaSigner,
23
+ ): AccountBridge<any> {
24
+ const signer = customSigner ?? getSigner(network);
20
25
  return {
21
26
  sync: makeSync({ getAccountShape: genericGetAccountShape(network, kind) }),
22
27
  receive: makeAccountBridgeReceive(getAddressWrapper(signer.getAddress)),
@@ -28,5 +33,5 @@ export function getAlpacaAccountBridge(network: string, kind: string): AccountBr
28
33
  broadcast: genericBroadcast(network, kind),
29
34
  signOperation: genericSignOperation(network, kind)(signer.context),
30
35
  getSerializedAddressParameters, // NOTE: check wether it should be exposed by coin-module's api instead?
31
- } satisfies Partial<AccountBridge<any>> as AccountBridge<any>;
36
+ } satisfies Partial<AccountBridge<any>>;
32
37
  }
@@ -2,37 +2,32 @@ import { createApi as createXrpApi } from "@ledgerhq/coin-xrp/api/index";
2
2
  import { createApi as createStellarApi } from "@ledgerhq/coin-stellar/api/index";
3
3
  import { createApi as createCantonApi } from "@ledgerhq/coin-canton/api/index";
4
4
  import { createApi as createTronApi } from "@ledgerhq/coin-tron/api/index";
5
+ import { createApi as createEvmApi } from "@ledgerhq/coin-evm/api/index";
5
6
  import { getCurrencyConfiguration } from "../../../config";
6
- import { getCryptoCurrencyById } from "@ledgerhq/cryptoassets/currencies";
7
7
  import { getNetworkAlpacaApi } from "./network/network-alpaca";
8
8
  import { Api } from "@ledgerhq/coin-framework/api/types";
9
9
  import { XrpCoinConfig } from "@ledgerhq/coin-xrp/config";
10
10
  import { StellarCoinConfig } from "@ledgerhq/coin-stellar/config";
11
11
  import { CantonCoinConfig } from "@ledgerhq/coin-canton/config";
12
12
  import { TronCoinConfig } from "@ledgerhq/coin-tron/config";
13
+ import { EvmConfigInfo } from "@ledgerhq/coin-evm/config";
14
+ import { findCryptoCurrencyByNetwork } from "../utils";
13
15
 
14
- export function getAlpacaApi(network, kind): Api<any> {
16
+ export function getAlpacaApi(network: string, kind: string): Api<any> {
15
17
  if (kind === "local") {
16
- switch (network) {
18
+ const currency = findCryptoCurrencyByNetwork(network);
19
+ switch (currency?.family) {
17
20
  case "xrp":
18
- return createXrpApi(
19
- getCurrencyConfiguration<XrpCoinConfig>(getCryptoCurrencyById("ripple")),
20
- ) as Api<any>; // FIXME: createXrpApi returns a strongly typed Api<XrpSender>, fix Api<any> to allow it
21
+ return createXrpApi(getCurrencyConfiguration<XrpCoinConfig>(currency)) as Api<any>; // FIXME: createXrpApi returns a strongly typed Api<XrpSender>, fix Api<any> to allow it
21
22
  case "stellar":
22
- return createStellarApi(
23
- getCurrencyConfiguration<StellarCoinConfig>(getCryptoCurrencyById("stellar")),
24
- ) as Api<any>;
23
+ return createStellarApi(getCurrencyConfiguration<StellarCoinConfig>(currency)) as Api<any>;
25
24
  case "canton":
26
- return createCantonApi(
27
- getCurrencyConfiguration<CantonCoinConfig>(
28
- getCryptoCurrencyById("canton_network_devnet"),
29
- ),
30
- ) as Api<any>;
25
+ return createCantonApi(getCurrencyConfiguration<CantonCoinConfig>(currency)) as Api<any>;
31
26
  case "tron":
32
- return createTronApi(
33
- getCurrencyConfiguration<TronCoinConfig>(getCryptoCurrencyById("tron")),
34
- ) as Api<any>;
27
+ return createTronApi(getCurrencyConfiguration<TronCoinConfig>(currency)) as Api<any>;
28
+ case "evm":
29
+ return createEvmApi(getCurrencyConfiguration<EvmConfigInfo>(currency), network) as Api<any>;
35
30
  }
36
31
  }
37
- return getNetworkAlpacaApi(network) satisfies Partial<Api<any>> as Api<any>;
32
+ return getNetworkAlpacaApi(network) satisfies Partial<Api<any>>;
38
33
  }
@@ -3,6 +3,7 @@ import * as xrpModule from "@ledgerhq/coin-xrp/api/index";
3
3
  import * as stellarModule from "@ledgerhq/coin-stellar/api/index";
4
4
  import * as cantonModule from "@ledgerhq/coin-canton/api/index";
5
5
  import * as tronModule from "@ledgerhq/coin-tron/api/index";
6
+ import * as evmModule from "@ledgerhq/coin-evm/api/index";
6
7
  import * as config from "../../../config";
7
8
  import * as networkApi from "./network/network-alpaca";
8
9
  import * as cryptoAssets from "@ledgerhq/cryptoassets/currencies";
@@ -10,7 +11,7 @@ import * as cryptoAssets from "@ledgerhq/cryptoassets/currencies";
10
11
  const mockApiInstance = { mock: "api" };
11
12
 
12
13
  jest.mock("@ledgerhq/cryptoassets/currencies", () => ({
13
- getCryptoCurrencyById: jest.fn(),
14
+ findCryptoCurrencyById: jest.fn(),
14
15
  }));
15
16
 
16
17
  jest.mock("../../../config", () => ({
@@ -33,18 +34,37 @@ jest.mock("@ledgerhq/coin-tron/api/index", () => ({
33
34
  createApi: jest.fn(),
34
35
  }));
35
36
 
37
+ jest.mock("@ledgerhq/coin-evm/api/index", () => ({
38
+ createApi: jest.fn(),
39
+ }));
40
+
36
41
  jest.mock("./network/network-alpaca", () => ({
37
42
  getNetworkAlpacaApi: jest.fn(),
38
43
  }));
39
44
 
40
45
  describe("getAlpacaApi", () => {
41
- const mockCurrency = { id: "mock-currency" };
42
-
43
46
  beforeEach(() => {
44
47
  jest.clearAllMocks();
45
48
 
46
49
  // Common mocks
47
- (cryptoAssets.getCryptoCurrencyById as jest.Mock).mockReturnValue(mockCurrency);
50
+ (cryptoAssets.findCryptoCurrencyById as jest.Mock).mockImplementation(id => {
51
+ switch (id) {
52
+ case "ripple":
53
+ return { family: "xrp" };
54
+ case "stellar":
55
+ return { family: "stellar" };
56
+ case "canton":
57
+ return { family: "canton" };
58
+ case "tron":
59
+ return { family: "tron" };
60
+ case "ethereum":
61
+ return { family: "evm" };
62
+ case "sonic":
63
+ return { family: "evm" };
64
+ default:
65
+ return undefined;
66
+ }
67
+ });
48
68
  (config.getCurrencyConfiguration as jest.Mock).mockReturnValue({ config: true });
49
69
 
50
70
  // API mocks
@@ -52,21 +72,29 @@ describe("getAlpacaApi", () => {
52
72
  jest.spyOn(stellarModule, "createApi").mockReturnValue(mockApiInstance as any);
53
73
  jest.spyOn(cantonModule, "createApi").mockReturnValue(mockApiInstance as any);
54
74
  jest.spyOn(tronModule, "createApi").mockReturnValue(mockApiInstance as any);
75
+ jest.spyOn(evmModule, "createApi").mockReturnValue(mockApiInstance as any);
55
76
  jest.spyOn(networkApi, "getNetworkAlpacaApi").mockReturnValue(mockApiInstance as any);
56
77
  });
57
78
 
58
79
  const testCases = [
59
- { network: "xrp", module: xrpModule, label: "XRP" },
60
- { network: "stellar", module: stellarModule, label: "Stellar" },
61
- { network: "tron", module: tronModule, label: "Tron" },
62
- { network: "canton", module: cantonModule, label: "Canton" },
80
+ { network: "xrp", module: xrpModule, label: "XRP", params: [{ config: true }] },
81
+ { network: "stellar", module: stellarModule, label: "Stellar", params: [{ config: true }] },
82
+ { network: "tron", module: tronModule, label: "Tron", params: [{ config: true }] },
83
+ { network: "canton", module: cantonModule, label: "Canton", params: [{ config: true }] },
84
+ {
85
+ network: "ethereum",
86
+ module: evmModule,
87
+ label: "Ethereum",
88
+ params: [{ config: true }, "ethereum"],
89
+ },
90
+ { network: "sonic", module: evmModule, label: "Sonic", params: [{ config: true }, "sonic"] },
63
91
  ];
64
92
 
65
- testCases.forEach(({ network, module, label }) => {
93
+ testCases.forEach(({ network, module, label, params }) => {
66
94
  it(`should return ${label} API for network "${network}" and kind "local"`, () => {
67
95
  const result = getAlpacaApi(network, "local");
68
96
  expect(result).toEqual(mockApiInstance);
69
- expect(module.createApi).toHaveBeenCalledWith({ config: true });
97
+ expect(module.createApi).toHaveBeenCalledWith(...params);
70
98
  });
71
99
  });
72
100
 
@@ -19,7 +19,7 @@ export function createTransaction(account: Account | TokenAccount): TransactionC
19
19
  feeCustomUnit?: Unit | null | undefined;
20
20
  memoType?: string | null;
21
21
  memoValue?: string | null;
22
- mode?: "send" | "changeTrust";
22
+ mode?: "send" | "changeTrust" | "send-legacy" | "send-eip1559";
23
23
  assetReference?: string;
24
24
  assetOwner?: string;
25
25
  networkInfo?: NetworkInfo | null;
@@ -51,6 +51,14 @@ export function createTransaction(account: Account | TokenAccount): TransactionC
51
51
  assetOwner: "",
52
52
  networkInfo: null,
53
53
  };
54
+ case "evm": {
55
+ return {
56
+ mode: "send-eip1559",
57
+ family: currency.family,
58
+ amount: new BigNumber(0),
59
+ recipient: "",
60
+ };
61
+ }
54
62
  default:
55
63
  throw new Error(`Unsupported currency family: ${currency.family}`);
56
64
  }
@@ -2,8 +2,14 @@ import { makeScanAccounts } from "@ledgerhq/coin-framework/bridge/jsHelpers";
2
2
  import { CurrencyBridge } from "@ledgerhq/types-live";
3
3
  import { genericGetAccountShape } from "./getAccountShape";
4
4
  import { getSigner } from "./signer";
5
+ import type { AlpacaSigner } from "./signer/types";
5
6
 
6
- export function getAlpacaCurrencyBridge(network: string, kind: string): CurrencyBridge {
7
+ export function getAlpacaCurrencyBridge(
8
+ network: string,
9
+ kind: string,
10
+ customSigner?: AlpacaSigner,
11
+ ): CurrencyBridge {
12
+ const signer = customSigner ?? getSigner(network);
7
13
  return {
8
14
  preload: () => Promise.resolve({}),
9
15
  hydrate: () => {
@@ -11,7 +17,7 @@ export function getAlpacaCurrencyBridge(network: string, kind: string): Currency
11
17
  },
12
18
  scanAccounts: makeScanAccounts({
13
19
  getAccountShape: genericGetAccountShape(network, kind),
14
- getAddressFn: getSigner(network).getAddress,
20
+ getAddressFn: signer.getAddress.bind(signer),
15
21
  }),
16
22
  };
17
23
  }
@@ -73,7 +73,7 @@ export function genericGetAccountShape(network: string, kind: string): GetAccoun
73
73
  getTokenFromAsset: alpacaApi.getTokenFromAsset,
74
74
  }) || [];
75
75
 
76
- const operationsWithSubs = mergedOps.map(op => {
76
+ const operations = mergedOps.map(op => {
77
77
  const subOperations = inferSubOperations(op.hash, subAccounts);
78
78
 
79
79
  return {
@@ -85,13 +85,12 @@ export function genericGetAccountShape(network: string, kind: string): GetAccoun
85
85
  const res = {
86
86
  id: accountId,
87
87
  xpub: address,
88
- blockHeight:
89
- operationsWithSubs.length === 0 ? 0 : blockInfo.height || initialAccount?.blockHeight,
88
+ blockHeight: operations.length === 0 ? 0 : blockInfo.height || initialAccount?.blockHeight,
90
89
  balance: new BigNumber(nativeBalance.toString()),
91
90
  spendableBalance: new BigNumber(spendableBalance.toString()),
92
- operations: operationsWithSubs,
91
+ operations,
93
92
  subAccounts,
94
- operationsCount: operationsWithSubs.length,
93
+ operationsCount: operations.length,
95
94
  };
96
95
  return res;
97
96
  };
@@ -0,0 +1,70 @@
1
+ import { filter, firstValueFrom } from "rxjs";
2
+ import { EvmAddress, EvmSignature, EvmSigner } from "@ledgerhq/coin-evm/types/signer";
3
+ import { CreateSigner } from "../../setup";
4
+ import { DeviceManagementKit } from "@ledgerhq/device-management-kit";
5
+ import { DmkSignerEth, LegacySignerEth } from "@ledgerhq/live-signer-evm";
6
+ import Transport from "@ledgerhq/hw-transport";
7
+ import { getEnv } from "@ledgerhq/live-env";
8
+ import { ResolutionConfig, LoadConfig } from "@ledgerhq/hw-app-eth/lib/services/types";
9
+ import { Signature } from "ethers";
10
+
11
+ export type Signer = {
12
+ getAddress: (path: string) => Promise<EvmAddress>;
13
+ signTransaction: (path: string, tx: string) => Promise<string>;
14
+ };
15
+
16
+ const isDmkTransport = (
17
+ transport: Transport,
18
+ ): transport is Transport & { dmk: DeviceManagementKit; sessionId: string } => {
19
+ return (
20
+ "dmk" in transport &&
21
+ transport.dmk !== undefined &&
22
+ "sessionId" in transport &&
23
+ transport.sessionId !== undefined
24
+ );
25
+ };
26
+
27
+ const createLiveSigner: CreateSigner<EvmSigner> = (transport: Transport) => {
28
+ if (isDmkTransport(transport)) {
29
+ return new DmkSignerEth(transport.dmk, transport.sessionId);
30
+ }
31
+
32
+ return new LegacySignerEth(transport);
33
+ };
34
+
35
+ export const createSigner: CreateSigner<Signer> = (transport: Transport) => {
36
+ const signer = createLiveSigner(transport);
37
+
38
+ return {
39
+ getAddress: signer.getAddress.bind(signer),
40
+ signTransaction: async (path, tx) => {
41
+ // Configure type of resolutions necessary for the clear signing
42
+ const resolutionConfig: ResolutionConfig = {
43
+ externalPlugins: true,
44
+ erc20: true,
45
+ nft: false,
46
+ uniswapV3: true,
47
+ };
48
+ const loadConfig: LoadConfig = {
49
+ cryptoassetsBaseURL: getEnv("DYNAMIC_CAL_BASE_URL"),
50
+ nftExplorerBaseURL: getEnv("NFT_METADATA_SERVICE") + "/v1/ethereum",
51
+ };
52
+
53
+ signer.setLoadConfig(loadConfig);
54
+
55
+ const observable = signer.clearSignTransaction(path, tx.substring(2), resolutionConfig, true);
56
+ const event = observable.pipe(
57
+ filter((event): event is { type: "signer.evm.signed"; value: EvmSignature } => {
58
+ return event.type === "signer.evm.signed";
59
+ }),
60
+ );
61
+ const { value } = await firstValueFrom(event);
62
+
63
+ return Signature.from({
64
+ r: "0x" + value.r,
65
+ s: "0x" + value.s,
66
+ v: typeof value.v === "number" ? value.v : parseInt(value.v, 16),
67
+ }).serialized;
68
+ },
69
+ };
70
+ };
@@ -1,22 +1,12 @@
1
- import { GetAddressFn } from "@ledgerhq/coin-framework/bridge/getAddressWrapper";
2
1
  import xrpGetAddress from "@ledgerhq/coin-xrp/signer/getAddress";
3
2
  import stellarGetAddress from "@ledgerhq/coin-stellar/signer/getAddress";
4
- import { CreateSigner, executeWithSigner } from "../../setup";
5
- import Xrp from "@ledgerhq/hw-app-xrp";
6
3
  import Stellar from "@ledgerhq/hw-app-str";
7
-
8
- import Transport from "@ledgerhq/hw-transport";
9
4
  import { signTransaction, stellarSignTransaction } from "./signTransaction";
10
- import { SignerContext } from "@ledgerhq/coin-framework/signer";
11
- import { SignTransactionOptions } from "./types";
12
5
  import { StrKey } from "@stellar/stellar-sdk";
13
-
14
- export type AlpacaSigner = {
15
- getAddress: GetAddressFn;
16
- signTransaction?: (deviceId: string, opts: SignTransactionOptions) => Promise<string>;
17
- signMessage?: (message: string) => Promise<string>;
18
- context: SignerContext<any>;
19
- };
6
+ import { CreateSigner, executeWithSigner } from "../../setup";
7
+ import Xrp from "@ledgerhq/hw-app-xrp";
8
+ import Transport from "@ledgerhq/hw-transport";
9
+ import { AlpacaSigner } from "./types";
20
10
 
21
11
  const createSignerXrp: CreateSigner<Xrp> = (transport: Transport) => {
22
12
  return new Xrp(transport);
@@ -47,7 +37,7 @@ const createSignerStellar: CreateSigner<Stellar> = (transport: Transport) => {
47
37
 
48
38
  const signerContextStellar = executeWithSigner(createSignerStellar);
49
39
 
50
- export function getSigner(network): AlpacaSigner {
40
+ export function getSigner(network: string): AlpacaSigner {
51
41
  switch (network) {
52
42
  case "ripple":
53
43
  case "xrp": {
@@ -1,9 +1,10 @@
1
1
  import { SignerContext } from "@ledgerhq/coin-framework/signer";
2
- import { XrpSigner } from "@ledgerhq/coin-xrp/index";
3
- import { SignTransactionOptions } from "./types";
4
2
  import { StellarSigner } from "@ledgerhq/coin-stellar/types/signer";
3
+ import { LegacySigner, SignTransactionOptions } from "./types";
5
4
 
6
- export const signTransaction = (signerContext: SignerContext<XrpSigner>) => {
5
+ export const signTransaction = <Signer extends LegacySigner>(
6
+ signerContext: SignerContext<Signer>,
7
+ ) => {
7
8
  return async (deviceId: string, { path, rawTxHex }: SignTransactionOptions) => {
8
9
  const signedTx = await signerContext(deviceId, signer =>
9
10
  signer.signTransaction(path, rawTxHex),