@ledgerhq/live-common 34.55.0-nightly.20251211024123 → 34.55.0-nightly.20251212024049

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 (183) hide show
  1. package/lib/bridge/generic-alpaca/accountBridge.d.ts.map +1 -1
  2. package/lib/bridge/generic-alpaca/accountBridge.js +2 -1
  3. package/lib/bridge/generic-alpaca/accountBridge.js.map +1 -1
  4. package/lib/bridge/generic-alpaca/signer/index.d.ts +4 -0
  5. package/lib/bridge/generic-alpaca/signer/index.d.ts.map +1 -1
  6. package/lib/bridge/generic-alpaca/signer/index.js +22 -1
  7. package/lib/bridge/generic-alpaca/signer/index.js.map +1 -1
  8. package/lib/bridge/mockHelpers.d.ts +1 -1
  9. package/lib/bridge/mockHelpers.d.ts.map +1 -1
  10. package/lib/bridge/mockHelpers.js +2 -6
  11. package/lib/bridge/mockHelpers.js.map +1 -1
  12. package/lib/bridge/validateAddress.d.ts +4 -0
  13. package/lib/bridge/validateAddress.d.ts.map +1 -0
  14. package/lib/bridge/validateAddress.js +14 -0
  15. package/lib/bridge/validateAddress.js.map +1 -0
  16. package/lib/e2e/speculos.d.ts.map +1 -1
  17. package/lib/e2e/speculos.js +0 -1
  18. package/lib/e2e/speculos.js.map +1 -1
  19. package/lib/e2e/speculosAppVersion.d.ts +1 -0
  20. package/lib/e2e/speculosAppVersion.d.ts.map +1 -1
  21. package/lib/e2e/speculosAppVersion.js +38 -14
  22. package/lib/e2e/speculosAppVersion.js.map +1 -1
  23. package/lib/e2e/speculosCI.d.ts.map +1 -1
  24. package/lib/e2e/speculosCI.js +1 -6
  25. package/lib/e2e/speculosCI.js.map +1 -1
  26. package/lib/families/algorand/bridge/mock.d.ts.map +1 -1
  27. package/lib/families/algorand/bridge/mock.js +2 -0
  28. package/lib/families/algorand/bridge/mock.js.map +1 -1
  29. package/lib/families/bitcoin/bridge/mock.d.ts.map +1 -1
  30. package/lib/families/bitcoin/bridge/mock.js +2 -0
  31. package/lib/families/bitcoin/bridge/mock.js.map +1 -1
  32. package/lib/families/canton/bridge/mock.d.ts.map +1 -1
  33. package/lib/families/canton/bridge/mock.js +2 -0
  34. package/lib/families/canton/bridge/mock.js.map +1 -1
  35. package/lib/families/canton/react.d.ts +7 -1
  36. package/lib/families/canton/react.d.ts.map +1 -1
  37. package/lib/families/canton/react.js +38 -1
  38. package/lib/families/canton/react.js.map +1 -1
  39. package/lib/families/cardano/bridge/mock.d.ts.map +1 -1
  40. package/lib/families/cardano/bridge/mock.js +2 -0
  41. package/lib/families/cardano/bridge/mock.js.map +1 -1
  42. package/lib/families/casper/bridge/mock.d.ts.map +1 -1
  43. package/lib/families/casper/bridge/mock.js +2 -0
  44. package/lib/families/casper/bridge/mock.js.map +1 -1
  45. package/lib/families/cosmos/bridge/mock.d.ts.map +1 -1
  46. package/lib/families/cosmos/bridge/mock.js +2 -0
  47. package/lib/families/cosmos/bridge/mock.js.map +1 -1
  48. package/lib/families/evm/bridge/mock.d.ts.map +1 -1
  49. package/lib/families/evm/bridge/mock.js +2 -0
  50. package/lib/families/evm/bridge/mock.js.map +1 -1
  51. package/lib/families/icon/bridge/mock.d.ts.map +1 -1
  52. package/lib/families/icon/bridge/mock.js +2 -0
  53. package/lib/families/icon/bridge/mock.js.map +1 -1
  54. package/lib/families/multiversx/bridge/mock.d.ts.map +1 -1
  55. package/lib/families/multiversx/bridge/mock.js +2 -0
  56. package/lib/families/multiversx/bridge/mock.js.map +1 -1
  57. package/lib/families/polkadot/bridge/mock.d.ts.map +1 -1
  58. package/lib/families/polkadot/bridge/mock.js +2 -0
  59. package/lib/families/polkadot/bridge/mock.js.map +1 -1
  60. package/lib/families/solana/bridge/mock.d.ts +1 -0
  61. package/lib/families/solana/bridge/mock.d.ts.map +1 -1
  62. package/lib/families/stellar/bridge/mock.d.ts.map +1 -1
  63. package/lib/families/stellar/bridge/mock.js +2 -0
  64. package/lib/families/stellar/bridge/mock.js.map +1 -1
  65. package/lib/families/tezos/bridge/mock.d.ts.map +1 -1
  66. package/lib/families/tezos/bridge/mock.js +2 -0
  67. package/lib/families/tezos/bridge/mock.js.map +1 -1
  68. package/lib/families/tron/bridge/mock.d.ts.map +1 -1
  69. package/lib/families/tron/bridge/mock.js +2 -0
  70. package/lib/families/tron/bridge/mock.js.map +1 -1
  71. package/lib/families/xrp/bridge/mock.d.ts.map +1 -1
  72. package/lib/families/xrp/bridge/mock.js +2 -0
  73. package/lib/families/xrp/bridge/mock.js.map +1 -1
  74. package/lib/generated/bridge/mock.d.ts +1 -0
  75. package/lib/generated/bridge/mock.d.ts.map +1 -1
  76. package/lib/generated/mock.d.ts +3 -3
  77. package/lib/hw/connectAppEventMapper.d.ts.map +1 -1
  78. package/lib/hw/connectAppEventMapper.js +21 -2
  79. package/lib/hw/connectAppEventMapper.js.map +1 -1
  80. package/lib-es/bridge/generic-alpaca/accountBridge.d.ts.map +1 -1
  81. package/lib-es/bridge/generic-alpaca/accountBridge.js +3 -2
  82. package/lib-es/bridge/generic-alpaca/accountBridge.js.map +1 -1
  83. package/lib-es/bridge/generic-alpaca/signer/index.d.ts +4 -0
  84. package/lib-es/bridge/generic-alpaca/signer/index.d.ts.map +1 -1
  85. package/lib-es/bridge/generic-alpaca/signer/index.js +20 -0
  86. package/lib-es/bridge/generic-alpaca/signer/index.js.map +1 -1
  87. package/lib-es/bridge/mockHelpers.d.ts +1 -1
  88. package/lib-es/bridge/mockHelpers.d.ts.map +1 -1
  89. package/lib-es/bridge/mockHelpers.js +1 -5
  90. package/lib-es/bridge/mockHelpers.js.map +1 -1
  91. package/lib-es/bridge/validateAddress.d.ts +4 -0
  92. package/lib-es/bridge/validateAddress.d.ts.map +1 -0
  93. package/lib-es/bridge/validateAddress.js +9 -0
  94. package/lib-es/bridge/validateAddress.js.map +1 -0
  95. package/lib-es/e2e/speculos.d.ts.map +1 -1
  96. package/lib-es/e2e/speculos.js +0 -1
  97. package/lib-es/e2e/speculos.js.map +1 -1
  98. package/lib-es/e2e/speculosAppVersion.d.ts +1 -0
  99. package/lib-es/e2e/speculosAppVersion.d.ts.map +1 -1
  100. package/lib-es/e2e/speculosAppVersion.js +36 -13
  101. package/lib-es/e2e/speculosAppVersion.js.map +1 -1
  102. package/lib-es/e2e/speculosCI.d.ts.map +1 -1
  103. package/lib-es/e2e/speculosCI.js +1 -6
  104. package/lib-es/e2e/speculosCI.js.map +1 -1
  105. package/lib-es/families/algorand/bridge/mock.d.ts.map +1 -1
  106. package/lib-es/families/algorand/bridge/mock.js +2 -0
  107. package/lib-es/families/algorand/bridge/mock.js.map +1 -1
  108. package/lib-es/families/bitcoin/bridge/mock.d.ts.map +1 -1
  109. package/lib-es/families/bitcoin/bridge/mock.js +2 -0
  110. package/lib-es/families/bitcoin/bridge/mock.js.map +1 -1
  111. package/lib-es/families/canton/bridge/mock.d.ts.map +1 -1
  112. package/lib-es/families/canton/bridge/mock.js +2 -0
  113. package/lib-es/families/canton/bridge/mock.js.map +1 -1
  114. package/lib-es/families/canton/react.d.ts +7 -1
  115. package/lib-es/families/canton/react.d.ts.map +1 -1
  116. package/lib-es/families/canton/react.js +34 -1
  117. package/lib-es/families/canton/react.js.map +1 -1
  118. package/lib-es/families/cardano/bridge/mock.d.ts.map +1 -1
  119. package/lib-es/families/cardano/bridge/mock.js +2 -0
  120. package/lib-es/families/cardano/bridge/mock.js.map +1 -1
  121. package/lib-es/families/casper/bridge/mock.d.ts.map +1 -1
  122. package/lib-es/families/casper/bridge/mock.js +2 -0
  123. package/lib-es/families/casper/bridge/mock.js.map +1 -1
  124. package/lib-es/families/cosmos/bridge/mock.d.ts.map +1 -1
  125. package/lib-es/families/cosmos/bridge/mock.js +2 -0
  126. package/lib-es/families/cosmos/bridge/mock.js.map +1 -1
  127. package/lib-es/families/evm/bridge/mock.d.ts.map +1 -1
  128. package/lib-es/families/evm/bridge/mock.js +2 -0
  129. package/lib-es/families/evm/bridge/mock.js.map +1 -1
  130. package/lib-es/families/icon/bridge/mock.d.ts.map +1 -1
  131. package/lib-es/families/icon/bridge/mock.js +2 -0
  132. package/lib-es/families/icon/bridge/mock.js.map +1 -1
  133. package/lib-es/families/multiversx/bridge/mock.d.ts.map +1 -1
  134. package/lib-es/families/multiversx/bridge/mock.js +2 -0
  135. package/lib-es/families/multiversx/bridge/mock.js.map +1 -1
  136. package/lib-es/families/polkadot/bridge/mock.d.ts.map +1 -1
  137. package/lib-es/families/polkadot/bridge/mock.js +2 -0
  138. package/lib-es/families/polkadot/bridge/mock.js.map +1 -1
  139. package/lib-es/families/solana/bridge/mock.d.ts +1 -0
  140. package/lib-es/families/solana/bridge/mock.d.ts.map +1 -1
  141. package/lib-es/families/stellar/bridge/mock.d.ts.map +1 -1
  142. package/lib-es/families/stellar/bridge/mock.js +2 -0
  143. package/lib-es/families/stellar/bridge/mock.js.map +1 -1
  144. package/lib-es/families/tezos/bridge/mock.d.ts.map +1 -1
  145. package/lib-es/families/tezos/bridge/mock.js +2 -0
  146. package/lib-es/families/tezos/bridge/mock.js.map +1 -1
  147. package/lib-es/families/tron/bridge/mock.d.ts.map +1 -1
  148. package/lib-es/families/tron/bridge/mock.js +2 -0
  149. package/lib-es/families/tron/bridge/mock.js.map +1 -1
  150. package/lib-es/families/xrp/bridge/mock.d.ts.map +1 -1
  151. package/lib-es/families/xrp/bridge/mock.js +2 -0
  152. package/lib-es/families/xrp/bridge/mock.js.map +1 -1
  153. package/lib-es/generated/bridge/mock.d.ts +1 -0
  154. package/lib-es/generated/bridge/mock.d.ts.map +1 -1
  155. package/lib-es/generated/mock.d.ts +3 -3
  156. package/lib-es/hw/connectAppEventMapper.d.ts.map +1 -1
  157. package/lib-es/hw/connectAppEventMapper.js +23 -4
  158. package/lib-es/hw/connectAppEventMapper.js.map +1 -1
  159. package/package.json +74 -74
  160. package/src/bridge/generic-alpaca/accountBridge.ts +2 -1
  161. package/src/bridge/generic-alpaca/signer/index.ts +29 -0
  162. package/src/bridge/mockHelpers.ts +2 -4
  163. package/src/bridge/validateAddress.test.ts +24 -0
  164. package/src/bridge/validateAddress.ts +13 -0
  165. package/src/e2e/speculos.ts +0 -1
  166. package/src/e2e/speculosAppVersion.ts +58 -13
  167. package/src/e2e/speculosCI.ts +1 -6
  168. package/src/families/algorand/bridge/mock.ts +2 -0
  169. package/src/families/bitcoin/bridge/mock.ts +2 -0
  170. package/src/families/canton/bridge/mock.ts +2 -0
  171. package/src/families/canton/react.ts +53 -3
  172. package/src/families/cardano/bridge/mock.ts +2 -0
  173. package/src/families/casper/bridge/mock.ts +2 -0
  174. package/src/families/cosmos/bridge/mock.ts +2 -0
  175. package/src/families/evm/bridge/mock.ts +3 -0
  176. package/src/families/icon/bridge/mock.ts +2 -0
  177. package/src/families/multiversx/bridge/mock.ts +2 -0
  178. package/src/families/polkadot/bridge/mock.ts +2 -0
  179. package/src/families/stellar/bridge/mock.ts +2 -0
  180. package/src/families/tezos/bridge/mock.ts +2 -0
  181. package/src/families/tron/bridge/mock.ts +2 -0
  182. package/src/families/xrp/bridge/mock.ts +2 -0
  183. package/src/hw/connectAppEventMapper.ts +28 -4
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.55.0-nightly.20251211024123",
4
+ "version": "34.55.0-nightly.20251212024049",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/LedgerHQ/ledger-live.git"
@@ -114,7 +114,7 @@
114
114
  "dependencies": {
115
115
  "@blooo/hw-app-acre": "^1.1.1",
116
116
  "@cardano-foundation/ledgerjs-hw-app-cardano": "^7.1.2",
117
- "@ledgerhq/device-management-kit": "0.11.2",
117
+ "@ledgerhq/device-management-kit": "0.12.0",
118
118
  "@ledgerhq/speculos-device-controller": "0.2.0",
119
119
  "@ledgerhq/live-app-sdk": "^0.8.1",
120
120
  "@ledgerhq/wallet-api-client": "^1.12.6",
@@ -176,78 +176,78 @@
176
176
  "xstate": "^5.19.2",
177
177
  "yargs": "^17.0.0",
178
178
  "zod": "^3.22.4",
179
- "@ledgerhq/coin-algorand": "^0.15.0-nightly.20251211024123",
180
- "@ledgerhq/coin-aptos": "^3.8.0-nightly.20251211024123",
181
- "@ledgerhq/coin-canton": "^0.12.0-nightly.20251211024123",
182
- "@ledgerhq/coin-bitcoin": "^0.27.0-nightly.20251211024123",
183
- "@ledgerhq/coin-cardano": "^0.16.0-nightly.20251211024123",
184
- "@ledgerhq/coin-casper": "^2.5.0-nightly.20251211024123",
185
- "@ledgerhq/coin-celo": "^1.8.0-nightly.20251211024123",
186
- "@ledgerhq/coin-cosmos": "^0.21.0-nightly.20251211024123",
187
- "@ledgerhq/coin-evm": "^2.37.0-nightly.20251211024123",
188
- "@ledgerhq/coin-filecoin": "^1.16.0-nightly.20251211024123",
189
- "@ledgerhq/coin-framework": "^6.11.0-nightly.20251211024123",
190
- "@ledgerhq/coin-hedera": "^1.16.0-nightly.20251211024123",
191
- "@ledgerhq/coin-icon": "^0.16.0-nightly.20251211024123",
192
- "@ledgerhq/coin-internet_computer": "^1.12.0-nightly.20251211024123",
193
- "@ledgerhq/coin-kaspa": "^1.6.0-nightly.20251211024123",
194
- "@ledgerhq/coin-mina": "^1.5.0-nightly.20251211024123",
195
- "@ledgerhq/coin-multiversx": "^0.9.0-nightly.20251211024123",
196
- "@ledgerhq/coin-near": "^0.17.0-nightly.20251211024123",
197
- "@ledgerhq/coin-polkadot": "^6.14.0-nightly.20251211024123",
198
- "@ledgerhq/coin-solana": "^0.39.0-nightly.20251211024123",
199
- "@ledgerhq/coin-stacks": "^0.13.0-nightly.20251211024123",
200
- "@ledgerhq/coin-stellar": "^6.9.0-nightly.20251211024123",
201
- "@ledgerhq/coin-sui": "^0.19.0-nightly.20251211024123",
202
- "@ledgerhq/coin-tezos": "^6.11.0-nightly.20251211024123",
203
- "@ledgerhq/coin-ton": "^0.18.0-nightly.20251211024123",
204
- "@ledgerhq/coin-tron": "^5.8.0-nightly.20251211024123",
205
- "@ledgerhq/coin-vechain": "^2.14.0-nightly.20251211024123",
206
- "@ledgerhq/coin-xrp": "^7.10.0-nightly.20251211024123",
207
- "@ledgerhq/cryptoassets": "^13.35.0-nightly.20251211024123",
208
- "@ledgerhq/device-core": "^0.6.10-nightly.20251211024123",
209
- "@ledgerhq/devices": "8.8.0-nightly.20251211024123",
210
- "@ledgerhq/errors": "^6.28.0-nightly.20251211024123",
211
- "@ledgerhq/hw-app-algorand": "^6.31.10-nightly.20251211024123",
212
- "@ledgerhq/hw-app-btc": "^10.14.0-nightly.20251211024123",
213
- "@ledgerhq/hw-app-aptos": "^6.34.10-nightly.20251211024123",
214
- "@ledgerhq/hw-app-celo": "^6.35.5-nightly.20251211024123",
215
- "@ledgerhq/hw-app-cosmos": "^6.32.10-nightly.20251211024123",
216
- "@ledgerhq/hw-app-eth": "^7.1.0-nightly.20251211024123",
217
- "@ledgerhq/hw-app-exchange": "^0.18.1-nightly.20251211024123",
218
- "@ledgerhq/hw-app-hedera": "^1.2.10-nightly.20251211024123",
219
- "@ledgerhq/hw-app-icon": "^1.3.10-nightly.20251211024123",
220
- "@ledgerhq/hw-app-kaspa": "^1.3.3-nightly.20251211024123",
221
- "@ledgerhq/hw-app-multiversx": "^6.26.1-nightly.20251211024123",
222
- "@ledgerhq/hw-app-near": "^6.31.10-nightly.20251211024123",
223
- "@ledgerhq/hw-app-polkadot": "^6.34.10-nightly.20251211024123",
224
- "@ledgerhq/hw-app-str": "^7.3.0-nightly.20251211024123",
179
+ "@ledgerhq/coin-algorand": "^0.15.0-nightly.20251212024049",
180
+ "@ledgerhq/coin-aptos": "^3.8.0-nightly.20251212024049",
181
+ "@ledgerhq/coin-bitcoin": "^0.27.0-nightly.20251212024049",
182
+ "@ledgerhq/coin-canton": "^0.12.0-nightly.20251212024049",
183
+ "@ledgerhq/coin-cardano": "^0.16.0-nightly.20251212024049",
184
+ "@ledgerhq/coin-casper": "^2.5.0-nightly.20251212024049",
185
+ "@ledgerhq/coin-celo": "^1.8.0-nightly.20251212024049",
186
+ "@ledgerhq/coin-cosmos": "^0.21.0-nightly.20251212024049",
187
+ "@ledgerhq/coin-evm": "^2.37.0-nightly.20251212024049",
188
+ "@ledgerhq/coin-filecoin": "^1.16.0-nightly.20251212024049",
189
+ "@ledgerhq/coin-framework": "^6.11.0-nightly.20251212024049",
190
+ "@ledgerhq/coin-hedera": "^1.16.0-nightly.20251212024049",
191
+ "@ledgerhq/coin-icon": "^0.16.0-nightly.20251212024049",
192
+ "@ledgerhq/coin-internet_computer": "^1.12.0-nightly.20251212024049",
193
+ "@ledgerhq/coin-kaspa": "^1.6.0-nightly.20251212024049",
194
+ "@ledgerhq/coin-mina": "^1.5.0-nightly.20251212024049",
195
+ "@ledgerhq/coin-multiversx": "^0.9.0-nightly.20251212024049",
196
+ "@ledgerhq/coin-near": "^0.17.0-nightly.20251212024049",
197
+ "@ledgerhq/coin-polkadot": "^6.14.0-nightly.20251212024049",
198
+ "@ledgerhq/coin-solana": "^0.39.0-nightly.20251212024049",
199
+ "@ledgerhq/coin-stacks": "^0.13.0-nightly.20251212024049",
200
+ "@ledgerhq/coin-stellar": "^6.9.0-nightly.20251212024049",
201
+ "@ledgerhq/coin-sui": "^0.19.0-nightly.20251212024049",
202
+ "@ledgerhq/coin-tezos": "^6.11.0-nightly.20251212024049",
203
+ "@ledgerhq/coin-ton": "^0.18.0-nightly.20251212024049",
204
+ "@ledgerhq/coin-tron": "^5.8.0-nightly.20251212024049",
205
+ "@ledgerhq/coin-vechain": "^2.14.0-nightly.20251212024049",
206
+ "@ledgerhq/coin-xrp": "^7.10.0-nightly.20251212024049",
207
+ "@ledgerhq/cryptoassets": "^13.35.0-nightly.20251212024049",
208
+ "@ledgerhq/device-core": "^0.6.10-nightly.20251212024049",
209
+ "@ledgerhq/devices": "8.8.0-nightly.20251212024049",
210
+ "@ledgerhq/errors": "^6.28.0-nightly.20251212024049",
211
+ "@ledgerhq/hw-app-algorand": "^6.31.10-nightly.20251212024049",
212
+ "@ledgerhq/hw-app-aptos": "^6.34.10-nightly.20251212024049",
213
+ "@ledgerhq/hw-app-btc": "^10.14.0-nightly.20251212024049",
214
+ "@ledgerhq/hw-app-celo": "^6.35.5-nightly.20251212024049",
215
+ "@ledgerhq/hw-app-cosmos": "^6.32.10-nightly.20251212024049",
216
+ "@ledgerhq/hw-app-eth": "^7.1.0-nightly.20251212024049",
217
+ "@ledgerhq/hw-app-exchange": "^0.18.1-nightly.20251212024049",
218
+ "@ledgerhq/hw-app-hedera": "^1.2.10-nightly.20251212024049",
219
+ "@ledgerhq/hw-app-icon": "^1.3.10-nightly.20251212024049",
220
+ "@ledgerhq/hw-app-kaspa": "^1.3.3-nightly.20251212024049",
221
+ "@ledgerhq/hw-app-multiversx": "^6.26.1-nightly.20251212024049",
222
+ "@ledgerhq/hw-app-near": "^6.31.10-nightly.20251212024049",
223
+ "@ledgerhq/hw-app-polkadot": "^6.34.10-nightly.20251212024049",
224
+ "@ledgerhq/hw-app-str": "^7.3.0-nightly.20251212024049",
225
225
  "@ledgerhq/hw-app-sui": "^1.4.0",
226
- "@ledgerhq/hw-app-tezos": "^6.31.10-nightly.20251211024123",
227
- "@ledgerhq/hw-app-trx": "^6.31.10-nightly.20251211024123",
228
- "@ledgerhq/hw-app-vet": "^0.8.1-nightly.20251211024123",
229
- "@ledgerhq/hw-app-xrp": "^6.32.8-nightly.20251211024123",
230
- "@ledgerhq/hw-bolos": "^6.32.10-nightly.20251211024123",
231
- "@ledgerhq/hw-transport": "6.31.14-nightly.20251211024123",
232
- "@ledgerhq/hw-transport-mocker": "^6.30.0-nightly.20251211024123",
233
- "@ledgerhq/ledger-cal-service": "^1.9.2-nightly.20251211024123",
234
- "@ledgerhq/ledger-trust-service": "^0.4.4-nightly.20251211024123",
235
- "@ledgerhq/live-config": "^3.3.0-nightly.20251211024123",
236
- "@ledgerhq/live-countervalues": "^0.10.2-nightly.20251211024123",
237
- "@ledgerhq/live-countervalues-react": "^0.7.4-nightly.20251211024123",
238
- "@ledgerhq/live-dmk-shared": "^0.16.0-nightly.20251211024123",
239
- "@ledgerhq/live-env": "^2.23.0-nightly.20251211024123",
240
- "@ledgerhq/live-hooks": "0.3.0-nightly.20251211024123",
241
- "@ledgerhq/live-network": "^2.1.3-nightly.20251211024123",
226
+ "@ledgerhq/hw-app-tezos": "^6.31.10-nightly.20251212024049",
227
+ "@ledgerhq/hw-app-trx": "^6.31.10-nightly.20251212024049",
228
+ "@ledgerhq/hw-app-vet": "^0.8.1-nightly.20251212024049",
229
+ "@ledgerhq/hw-app-xrp": "^6.32.8-nightly.20251212024049",
230
+ "@ledgerhq/hw-bolos": "^6.32.10-nightly.20251212024049",
231
+ "@ledgerhq/hw-transport": "6.31.14-nightly.20251212024049",
232
+ "@ledgerhq/hw-transport-mocker": "^6.30.0-nightly.20251212024049",
233
+ "@ledgerhq/ledger-cal-service": "^1.9.2-nightly.20251212024049",
234
+ "@ledgerhq/ledger-trust-service": "^0.4.4-nightly.20251212024049",
235
+ "@ledgerhq/live-config": "^3.3.0-nightly.20251212024049",
236
+ "@ledgerhq/live-countervalues": "^0.10.2-nightly.20251212024049",
237
+ "@ledgerhq/live-countervalues-react": "^0.7.4-nightly.20251212024049",
238
+ "@ledgerhq/live-dmk-shared": "^0.16.0-nightly.20251212024049",
239
+ "@ledgerhq/live-env": "^2.23.0-nightly.20251212024049",
240
+ "@ledgerhq/live-hooks": "0.3.0-nightly.20251212024049",
241
+ "@ledgerhq/live-network": "^2.1.3-nightly.20251212024049",
242
242
  "@ledgerhq/live-promise": "^0.1.1",
243
- "@ledgerhq/live-signer-canton": "^0.5.3-nightly.20251211024123",
244
- "@ledgerhq/live-signer-evm": "^0.11.0-nightly.20251211024123",
245
- "@ledgerhq/live-signer-solana": "^0.8.0-nightly.20251211024123",
246
- "@ledgerhq/live-wallet": "^0.17.0-nightly.20251211024123",
243
+ "@ledgerhq/live-signer-canton": "^0.5.3-nightly.20251212024049",
244
+ "@ledgerhq/live-signer-evm": "^0.11.0-nightly.20251212024049",
245
+ "@ledgerhq/live-signer-solana": "^0.8.0-nightly.20251212024049",
246
+ "@ledgerhq/live-wallet": "^0.17.0-nightly.20251212024049",
247
247
  "@ledgerhq/logs": "^6.13.0",
248
- "@ledgerhq/speculos-transport": "^0.4.0-nightly.20251211024123",
249
- "@ledgerhq/wallet-api-acre-module": "^0.11.0-nightly.20251211024123",
250
- "@ledgerhq/wallet-api-exchange-module": "^0.20.0-nightly.20251211024123"
248
+ "@ledgerhq/speculos-transport": "^0.4.0-nightly.20251212024049",
249
+ "@ledgerhq/wallet-api-acre-module": "^0.11.0-nightly.20251212024049",
250
+ "@ledgerhq/wallet-api-exchange-module": "^0.20.0-nightly.20251212024049"
251
251
  },
252
252
  "devDependencies": {
253
253
  "@solana/web3.js": "1.95.4",
@@ -294,10 +294,10 @@
294
294
  "undici": "6.19.2",
295
295
  "uuid": "^8.3.2",
296
296
  "ws": "8.18.3",
297
- "@ledgerhq/device-react": "^0.3.4-nightly.20251211024123",
298
- "@ledgerhq/types-cryptoassets": "^7.31.0-nightly.20251211024123",
297
+ "@ledgerhq/device-react": "^0.3.4-nightly.20251212024049",
298
+ "@ledgerhq/types-cryptoassets": "^7.31.0-nightly.20251212024049",
299
299
  "@ledgerhq/types-devices": "^6.27.0",
300
- "@ledgerhq/types-live": "^6.91.0-nightly.20251211024123"
300
+ "@ledgerhq/types-live": "^6.91.0-nightly.20251212024049"
301
301
  },
302
302
  "scripts": {
303
303
  "build": "zx ./scripts/build-ts.mjs",
@@ -7,7 +7,7 @@ import {
7
7
  updateTransaction,
8
8
  } from "@ledgerhq/coin-framework/bridge/jsHelpers";
9
9
  import getAddressWrapper from "@ledgerhq/coin-framework/bridge/getAddressWrapper";
10
- import { getSigner } from "./signer";
10
+ import { getSigner, getValidateAddress } from "./signer";
11
11
  import { genericPrepareTransaction } from "./prepareTransaction";
12
12
  import { genericGetTransactionStatus } from "./getTransactionStatus";
13
13
  import { genericEstimateMaxSpendable } from "./estimateMaxSpendable";
@@ -36,5 +36,6 @@ export function getAlpacaAccountBridge(
36
36
  signOperation: genericSignOperation(network, kind)(signer.context),
37
37
  signRawOperation: genericSignRawOperation(network, kind)(signer.context),
38
38
  getSerializedAddressParameters, // NOTE: check wether it should be exposed by coin-module's api instead?
39
+ validateAddress: getValidateAddress(network),
39
40
  } satisfies Partial<AccountBridge<any>>;
40
41
  }
@@ -11,6 +11,11 @@ import { DerivationType, LedgerSigner as TaquitoLedgerSigner } from "@taquito/le
11
11
  import tezosGetAddress from "@ledgerhq/coin-tezos/signer/getAddress";
12
12
  import Tezos from "@ledgerhq/hw-app-tezos";
13
13
  import { context as evmContext, getAddress as evmGetAddress } from "./Eth";
14
+ import { AddressValidationCurrencyParameters } from "@ledgerhq/types-live";
15
+ import { validateAddress as tezosValidateAddress } from "@ledgerhq/coin-tezos/logic/validateAddress";
16
+ import { validateAddress as xrpValidateAddress } from "@ledgerhq/coin-xrp/logic/validateAddress";
17
+ import { validateAddress as stellarValidateAddress } from "@ledgerhq/coin-stellar/logic/validateAddress";
18
+ import { validateAddress as evmValidateAddress } from "@ledgerhq/coin-evm/logic/validateAddress";
14
19
 
15
20
  const createSignerXrp: CreateSigner<Xrp> = (transport: Transport) => {
16
21
  return new Xrp(transport);
@@ -107,3 +112,27 @@ export function getSigner(network: string): AlpacaSigner {
107
112
  }
108
113
  throw new Error(`signer for ${network} not implemented`);
109
114
  }
115
+
116
+ type ValidateAddressFunction = (
117
+ address: string,
118
+ parameters: Partial<AddressValidationCurrencyParameters>,
119
+ ) => Promise<boolean>;
120
+
121
+ const validateAddressByNetwork = new Map<string, ValidateAddressFunction>();
122
+ validateAddressByNetwork.set("stellar", stellarValidateAddress);
123
+ validateAddressByNetwork.set("xrp", xrpValidateAddress);
124
+ validateAddressByNetwork.set("tezos", tezosValidateAddress);
125
+ validateAddressByNetwork.set("evm", evmValidateAddress);
126
+ validateAddressByNetwork.set("ethereum", evmValidateAddress); // for the coin tester
127
+ validateAddressByNetwork.set("sonic", evmValidateAddress); // for the coin tester
128
+ validateAddressByNetwork.set("polygon", evmValidateAddress); // for the coin tester
129
+ validateAddressByNetwork.set("core", evmValidateAddress); // for the coin tester
130
+
131
+ export function getValidateAddress(network: string): ValidateAddressFunction {
132
+ const validateAddress = validateAddressByNetwork.get(network);
133
+ if (!validateAddress) {
134
+ throw new Error(`No validate address function for network ${network}`);
135
+ }
136
+
137
+ return validateAddress;
138
+ }
@@ -110,10 +110,8 @@ export const signOperation: AccountBridge<any>["signOperation"] = ({ account, tr
110
110
  cancelled = true;
111
111
  };
112
112
  });
113
- export const isInvalidRecipient = (recipient: string) => {
114
- if (recipient.includes("criticalcrash")) throw new Error("isInvalidRecipient_mock_criticalcrash");
115
- return recipient.includes("invalid") || recipient.length <= 3;
116
- };
113
+
114
+ export { isInvalidRecipient } from "./validateAddress";
117
115
 
118
116
  const subtractOneYear = date =>
119
117
  new Date(new Date(date).setFullYear(new Date(date).getFullYear() - 1));
@@ -0,0 +1,24 @@
1
+ import * as validateAddress from "./validateAddress";
2
+
3
+ describe("validateAddress", () => {
4
+ const spiedIsInvalidRecipient = jest.spyOn(validateAddress, "isInvalidRecipient");
5
+
6
+ beforeEach(() => {
7
+ spiedIsInvalidRecipient.mockClear();
8
+ });
9
+
10
+ it.each([true, false])(
11
+ "should call isInvalidRecipient and return expected value (%s)",
12
+ async (expectedValue: boolean) => {
13
+ spiedIsInvalidRecipient.mockReturnValueOnce(expectedValue);
14
+
15
+ const address = "some random address";
16
+ const parameters = {};
17
+ const result = await validateAddress.validateAddress(address, parameters);
18
+ expect(result).toEqual(expectedValue);
19
+
20
+ expect(spiedIsInvalidRecipient).toHaveBeenCalledTimes(1);
21
+ expect(spiedIsInvalidRecipient).toHaveBeenCalledWith(address);
22
+ },
23
+ );
24
+ });
@@ -0,0 +1,13 @@
1
+ import { AddressValidationCurrencyParameters } from "@ledgerhq/types-live";
2
+
3
+ export const isInvalidRecipient = (recipient: string) => {
4
+ if (recipient.includes("criticalcrash")) throw new Error("isInvalidRecipient_mock_criticalcrash");
5
+ return recipient.includes("invalid") || recipient.length <= 3;
6
+ };
7
+
8
+ export async function validateAddress(
9
+ address: string,
10
+ _parameters: Partial<AddressValidationCurrencyParameters>,
11
+ ): Promise<boolean> {
12
+ return isInvalidRecipient(address);
13
+ }
@@ -395,7 +395,6 @@ export async function startSpeculos(
395
395
  if (!appCandidate) {
396
396
  console.warn("no app found for " + testName);
397
397
  console.warn(appQuery);
398
- console.warn(JSON.stringify(appCandidates, undefined, 2));
399
398
  }
400
399
  invariant(
401
400
  appCandidate,
@@ -59,24 +59,63 @@ export async function getNanoAppCatalog(
59
59
  });
60
60
  }
61
61
 
62
- function getDeviceFirmwareVersion(): string {
63
- const firmwareVersion = process.env.SPECULOS_FIRMWARE_VERSION;
64
- if (!firmwareVersion) {
65
- throw new Error("SPECULOS_FIRMWARE_VERSION environment variable is not set");
62
+ const firmwareVersionCache: Map<DeviceModelId, string> = new Map();
63
+
64
+ export async function getDeviceFirmwareVersion(device: DeviceModelId): Promise<string> {
65
+ const cached = firmwareVersionCache.get(device);
66
+ if (cached) return cached;
67
+
68
+ const providerId = 1;
69
+ const repository = new HttpManagerApiRepository(getEnv("MANAGER_API_BASE"), version);
70
+
71
+ const deviceVersion = await repository.getDeviceVersion({
72
+ targetId: getDeviceTargetId(device),
73
+ providerId,
74
+ });
75
+
76
+ const firmwareIds = deviceVersion.se_firmware_final_versions;
77
+ if (!Array.isArray(firmwareIds) || firmwareIds.length === 0) {
78
+ throw new Error(`No firmware versions found for device ${device}`);
66
79
  }
67
- return firmwareVersion;
80
+
81
+ const firmwares = await Promise.all(firmwareIds.map(id => repository.getFinalFirmwareById(id)));
82
+
83
+ // Only firmwares matching providerId
84
+ const providerFirmwares = firmwares.filter(
85
+ fw => Array.isArray(fw.providers) && fw.providers.includes(providerId),
86
+ );
87
+
88
+ if (providerFirmwares.length === 0) {
89
+ throw new Error(
90
+ `No firmware versions found for device version ${deviceVersion.id} for device ${device}`,
91
+ );
92
+ }
93
+
94
+ // Latest is chosen by highest numeric ID
95
+ const latestFirmware = providerFirmwares.reduce((latest, current) =>
96
+ current.id > latest.id ? current : latest,
97
+ );
98
+
99
+ firmwareVersionCache.set(device, latestFirmware.version);
100
+ process.env.SPECULOS_FIRMWARE_VERSION = latestFirmware.version;
101
+
102
+ return latestFirmware.version;
68
103
  }
69
104
 
70
105
  export async function createNanoAppJsonFile(nanoAppFilePath: string): Promise<void> {
106
+ const jsonFilePath = path.resolve(process.cwd(), nanoAppFilePath);
107
+
71
108
  try {
109
+ if (fs.existsSync(jsonFilePath)) {
110
+ return; // File already exists
111
+ }
112
+
113
+ fs.mkdirSync(path.dirname(jsonFilePath), { recursive: true });
114
+
72
115
  const device = getSpeculosModel();
73
- const firmware = getDeviceFirmwareVersion();
116
+ const firmware = await getDeviceFirmwareVersion(device);
74
117
  const appCatalog = await getNanoAppCatalog(device, firmware);
75
- const jsonFilePath = path.join(process.cwd(), nanoAppFilePath);
76
- const dirPath = path.dirname(jsonFilePath);
77
- if (!fs.existsSync(dirPath)) {
78
- fs.mkdirSync(dirPath, { recursive: true });
79
- }
118
+
80
119
  fs.writeFileSync(jsonFilePath, JSON.stringify(appCatalog, null, 2), "utf8");
81
120
  } catch (error) {
82
121
  console.error("Unable to create app version file:", sanitizeError(error));
@@ -87,10 +126,16 @@ export async function getAppVersionFromCatalog(
87
126
  currency: string,
88
127
  nanoAppFilePath: string,
89
128
  ): Promise<string | undefined> {
129
+ const jsonFilePath = path.resolve(process.cwd(), nanoAppFilePath);
130
+
90
131
  try {
91
132
  await createNanoAppJsonFile(nanoAppFilePath);
92
- const rootDir = process.cwd();
93
- const jsonFilePath = path.join(rootDir, nanoAppFilePath);
133
+
134
+ if (!fs.existsSync(jsonFilePath)) {
135
+ console.error(`Catalog file not found: ${jsonFilePath}`);
136
+ return;
137
+ }
138
+
94
139
  type CatalogApp = { versionDisplayName: string; version: string };
95
140
  const raw = fs.readFileSync(jsonFilePath, "utf8");
96
141
  const catalog: CatalogApp[] = JSON.parse(raw);
@@ -7,7 +7,7 @@ import {
7
7
  import { SpeculosDevice } from "./speculos";
8
8
  import https from "https";
9
9
 
10
- const { SEED, GITHUB_TOKEN, AWS_ROLE, CLUSTER, SPECULOS_IMAGE_TAG } = process.env;
10
+ const { GITHUB_TOKEN, SPECULOS_IMAGE_TAG } = process.env;
11
11
  const GIT_API_URL = "https://api.github.com/repos/LedgerHQ/actions/actions/";
12
12
  const START_WORKFLOW_ID = "workflows/161487603/dispatches";
13
13
  const STOP_WORKFLOW_ID = "workflows/161487604/dispatches";
@@ -152,9 +152,6 @@ function createStartPayload(deviceParams: DeviceParams, runId: string) {
152
152
  coin_app_version: appVersion,
153
153
  device: reverseModelMap[model],
154
154
  device_os_version: firmware,
155
- aws_role: AWS_ROLE,
156
- cluster: CLUSTER,
157
- seed: SEED,
158
155
  run_id: runId,
159
156
  additional_args,
160
157
  },
@@ -192,8 +189,6 @@ export async function releaseSpeculosDeviceCI(runId: string) {
192
189
  ref: GITHUB_REF,
193
190
  inputs: {
194
191
  run_id: runId.toString(),
195
- aws_role: AWS_ROLE,
196
- cluster: CLUSTER,
197
192
  },
198
193
  };
199
194
  await githubApiRequest({ urlSuffix: STOP_WORKFLOW_ID, data });
@@ -24,6 +24,7 @@ import {
24
24
  import { getMainAccount } from "@ledgerhq/coin-framework/account/index";
25
25
  import { assignToAccountRaw, assignFromAccountRaw } from "@ledgerhq/coin-algorand/serialization";
26
26
  import { initAccount } from "@ledgerhq/coin-algorand/initAccount";
27
+ import { validateAddress } from "../../../bridge/validateAddress";
27
28
 
28
29
  const receive = makeAccountBridgeReceive();
29
30
 
@@ -110,6 +111,7 @@ const accountBridge: AccountBridge<AlgorandTransaction, any> = {
110
111
  signRawOperation,
111
112
  broadcast,
112
113
  getSerializedAddressParameters,
114
+ validateAddress,
113
115
  };
114
116
  const currencyBridge: CurrencyBridge = {
115
117
  scanAccounts,
@@ -27,6 +27,7 @@ import cryptoFactory from "@ledgerhq/coin-bitcoin/wallet-btc/crypto/factory";
27
27
  import { Currency } from "@ledgerhq/coin-bitcoin/wallet-btc/index";
28
28
  import { computeDustAmount } from "@ledgerhq/coin-bitcoin/wallet-btc/utils";
29
29
  import { getFeeItems } from "./api";
30
+ import { validateAddress } from "../../../bridge/validateAddress";
30
31
 
31
32
  const receive = makeAccountBridgeReceive();
32
33
 
@@ -133,6 +134,7 @@ const accountBridge: AccountBridge<Transaction> = {
133
134
  signRawOperation,
134
135
  broadcast,
135
136
  getSerializedAddressParameters,
137
+ validateAddress,
136
138
  };
137
139
  const currencyBridge: CurrencyBridge = {
138
140
  scanAccounts,
@@ -3,6 +3,7 @@ import { createApi } from "@ledgerhq/coin-canton/api/index";
3
3
  import { Transaction as CantonTransaction, CantonAccount } from "@ledgerhq/coin-canton/types";
4
4
  import type { AccountBridge } from "@ledgerhq/types-live";
5
5
  import { BigNumber } from "bignumber.js";
6
+ import { validateAddress } from "../../../bridge/validateAddress";
6
7
 
7
8
  // The calls data can be copied to mock-data.ts from the file.
8
9
  // This function creates a live API with logging for generating mock data
@@ -174,6 +175,7 @@ const accountBridge: AccountBridge<CantonTransaction, CantonAccount> = {
174
175
  },
175
176
  broadcast,
176
177
  getSerializedAddressParameters,
178
+ validateAddress,
177
179
  };
178
180
 
179
181
  const currencyBridge = {
@@ -1,8 +1,11 @@
1
- import { useCallback, useState, useEffect } from "react";
1
+ import { useCallback, useState, useEffect, useMemo } from "react";
2
2
  import { getCurrencyBridge } from "../../bridge";
3
- import { CantonCurrencyBridge } from "@ledgerhq/coin-canton/types";
3
+ import { CantonCurrencyBridge, CantonAccount } from "@ledgerhq/coin-canton/types";
4
+ import { isCantonAccount } from "@ledgerhq/coin-canton";
4
5
  import { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
5
- import { Account } from "@ledgerhq/types-live";
6
+ import { Account, AccountLike } from "@ledgerhq/types-live";
7
+ import { getParentAccount } from "@ledgerhq/coin-framework/account/helpers";
8
+ import BigNumber from "bignumber.js";
6
9
 
7
10
  export type UseCantonAcceptOrRejectOfferOptions = {
8
11
  currency: CryptoCurrency;
@@ -92,3 +95,50 @@ export const useTimeRemaining = (expiresAtMicros = 0, isExpired = false): string
92
95
 
93
96
  return timeRemaining;
94
97
  };
98
+
99
+ type TransferProposal = {
100
+ sender: string;
101
+ amount: string;
102
+ expires_at_micros: number;
103
+ };
104
+
105
+ type CantonTokenAccountLike = AccountLike & {
106
+ cantonResources?: { pendingTransferProposals?: TransferProposal[] };
107
+ };
108
+
109
+ const hasCantonResources = (
110
+ account: AccountLike,
111
+ ): account is CantonAccount | CantonTokenAccountLike => {
112
+ if (account.type === "Account") {
113
+ return isCantonAccount(account);
114
+ }
115
+
116
+ return "cantonResources" in account && !!account.cantonResources;
117
+ };
118
+
119
+ /**
120
+ * Hook to calculate withdrawable balance from expired outgoing offers.
121
+ * Withdrawable balance is the sum of amounts from offers the user sent that have expired.
122
+ */
123
+ export const useWithdrawableBalance = (account: AccountLike, accounts: Account[]): BigNumber => {
124
+ return useMemo(() => {
125
+ if (!hasCantonResources(account)) return new BigNumber(0);
126
+
127
+ const proposals = account.cantonResources?.pendingTransferProposals ?? [];
128
+
129
+ // For token accounts, use parent account's xpub; for main accounts, use account's xpub
130
+ const parentAccount = getParentAccount(account, accounts);
131
+ const mainAccount = parentAccount ?? account;
132
+ const accountXpub = "xpub" in mainAccount ? (mainAccount.xpub as string) ?? "" : "";
133
+ const currentTime = Date.now();
134
+
135
+ return proposals.reduce((sum, proposal) => {
136
+ const isOutgoing = proposal.sender === accountXpub;
137
+ const isExpired = currentTime > proposal.expires_at_micros / 1000;
138
+ if (isOutgoing && isExpired) {
139
+ return sum.plus(new BigNumber(proposal.amount));
140
+ }
141
+ return sum;
142
+ }, new BigNumber(0));
143
+ }, [account, accounts]);
144
+ };
@@ -30,6 +30,7 @@ import {
30
30
  sync,
31
31
  makeAccountBridgeReceive,
32
32
  } from "../../../bridge/mockHelpers";
33
+ import { validateAddress } from "../../../bridge/validateAddress";
33
34
 
34
35
  const receive = makeAccountBridgeReceive();
35
36
 
@@ -172,6 +173,7 @@ const accountBridge: AccountBridge<CardanoTransaction> = {
172
173
  signRawOperation,
173
174
  broadcast,
174
175
  getSerializedAddressParameters,
176
+ validateAddress,
175
177
  };
176
178
 
177
179
  const currencyBridge: CurrencyBridge = {
@@ -35,6 +35,7 @@ import {
35
35
  CASPER_MINIMUM_VALID_AMOUNT_MOTES,
36
36
  } from "../consts";
37
37
  import { getMainAccount } from "../../../account";
38
+ import { validateAddress } from "../../../bridge/validateAddress";
38
39
 
39
40
  const receive = makeAccountBridgeReceive();
40
41
 
@@ -172,6 +173,7 @@ const accountBridge: AccountBridge<Transaction> = {
172
173
  broadcast,
173
174
  estimateMaxSpendable,
174
175
  getSerializedAddressParameters,
176
+ validateAddress,
175
177
  };
176
178
  export default {
177
179
  currencyBridge,
@@ -36,6 +36,7 @@ import {
36
36
  sync,
37
37
  } from "../../../bridge/mockHelpers";
38
38
  import { getCurrencyConfiguration } from "../../../config";
39
+ import { validateAddress } from "../../../bridge/validateAddress";
39
40
 
40
41
  const receive = makeAccountBridgeReceive();
41
42
 
@@ -132,6 +133,7 @@ const accountBridge: AccountBridge<Transaction> = {
132
133
  assignFromAccountRaw,
133
134
  assignToAccountRaw,
134
135
  getSerializedAddressParameters,
136
+ validateAddress,
135
137
  };
136
138
  const currencyBridge: CurrencyBridge = {
137
139
  scanAccounts,
@@ -20,6 +20,8 @@ import { getTypedTransaction } from "@ledgerhq/coin-evm/transaction";
20
20
  import { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
21
21
  import { getCurrencyConfiguration } from "../../../config";
22
22
  import { EvmConfigInfo, setCoinConfig } from "@ledgerhq/coin-evm/config";
23
+ import { validateAddress } from "../../../bridge/validateAddress";
24
+
23
25
  const receive = makeAccountBridgeReceive();
24
26
  const defaultGetFees = (_a, t: any) => (t.gasPrice || new BigNumber(0)).times(getGasLimit(t));
25
27
 
@@ -135,6 +137,7 @@ const accountBridge: AccountBridge<Transaction> = {
135
137
  signRawOperation,
136
138
  broadcast,
137
139
  getSerializedAddressParameters,
140
+ validateAddress,
138
141
  };
139
142
  const currencyBridge: CurrencyBridge = {
140
143
  preload: () => Promise.resolve({}),
@@ -17,6 +17,7 @@ import {
17
17
  import { getMainAccount } from "../../../account";
18
18
 
19
19
  import { makeAccountBridgeReceive } from "../../../bridge/mockHelpers";
20
+ import { validateAddress } from "../../../bridge/validateAddress";
20
21
 
21
22
  const receive = makeAccountBridgeReceive();
22
23
 
@@ -83,6 +84,7 @@ const accountBridge: AccountBridge<Transaction> = {
83
84
  signRawOperation,
84
85
  broadcast,
85
86
  getSerializedAddressParameters,
87
+ validateAddress,
86
88
  };
87
89
 
88
90
  const currencyBridge: CurrencyBridge = {
@@ -19,6 +19,7 @@ import {
19
19
  } from "@ledgerhq/coin-framework/bridge/jsHelpers";
20
20
  import { getMainAccount } from "@ledgerhq/coin-framework/account/index";
21
21
  import { assignToAccountRaw, assignFromAccountRaw } from "@ledgerhq/coin-multiversx/serialization";
22
+ import { validateAddress } from "../../../bridge/validateAddress";
22
23
 
23
24
  const receive = makeAccountBridgeReceive();
24
25
 
@@ -103,6 +104,7 @@ const accountBridge: AccountBridge<Transaction, any> = {
103
104
  signRawOperation,
104
105
  broadcast,
105
106
  getSerializedAddressParameters,
107
+ validateAddress,
106
108
  };
107
109
  const currencyBridge: CurrencyBridge = {
108
110
  scanAccounts,