@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
@@ -17,6 +17,7 @@ import { getMainAccount } from "@ledgerhq/coin-framework/account/index";
17
17
  import { getSerializedAddressParameters } from "@ledgerhq/coin-framework/bridge/jsHelpers";
18
18
  import { assignToAccountRaw, assignFromAccountRaw } from "@ledgerhq/coin-polkadot/serialization";
19
19
  import { hydrate } from "@ledgerhq/coin-polkadot/preload";
20
+ import { validateAddress } from "../../../bridge/validateAddress";
20
21
 
21
22
  const receive = makeAccountBridgeReceive();
22
23
 
@@ -102,6 +103,7 @@ const accountBridge: AccountBridge<Transaction> = {
102
103
  signRawOperation,
103
104
  broadcast,
104
105
  getSerializedAddressParameters,
106
+ validateAddress,
105
107
  };
106
108
 
107
109
  const preload = () => {
@@ -25,6 +25,7 @@ import {
25
25
  isInvalidRecipient,
26
26
  makeAccountBridgeReceive,
27
27
  } from "../../../bridge/mockHelpers";
28
+ import { validateAddress } from "../../../bridge/validateAddress";
28
29
 
29
30
  const receive = makeAccountBridgeReceive();
30
31
 
@@ -222,6 +223,7 @@ const accountBridge: AccountBridge<Transaction> = {
222
223
  broadcast,
223
224
  estimateMaxSpendable,
224
225
  getSerializedAddressParameters,
226
+ validateAddress,
225
227
  };
226
228
  export default {
227
229
  currencyBridge,
@@ -29,6 +29,7 @@ import {
29
29
  updateTransaction,
30
30
  } from "@ledgerhq/coin-framework/bridge/jsHelpers";
31
31
  import { isAccountDelegating } from "../staking";
32
+ import { validateAddress } from "../../../bridge/validateAddress";
32
33
 
33
34
  const isAccountBalanceSignificant = (a: AccountLike): boolean => a.balance.gt(100);
34
35
 
@@ -209,6 +210,7 @@ const accountBridge: AccountBridge<Transaction> = {
209
210
  signRawOperation,
210
211
  broadcast,
211
212
  getSerializedAddressParameters,
213
+ validateAddress,
212
214
  };
213
215
  const currencyBridge: CurrencyBridge = {
214
216
  preload: () => Promise.resolve({}),
@@ -12,6 +12,7 @@ import {
12
12
  isInvalidRecipient,
13
13
  } from "../../../bridge/mockHelpers";
14
14
  import { makeAccountBridgeReceive } from "../../../bridge/mockHelpers";
15
+ import { validateAddress } from "../../../bridge/validateAddress";
15
16
 
16
17
  const receive = makeAccountBridgeReceive();
17
18
 
@@ -118,6 +119,7 @@ const accountBridge: AccountBridge<Transaction> = {
118
119
  signRawOperation,
119
120
  broadcast,
120
121
  getSerializedAddressParameters,
122
+ validateAddress,
121
123
  };
122
124
 
123
125
  const currencyBridge: CurrencyBridge = {
@@ -26,6 +26,7 @@ import {
26
26
  isInvalidRecipient,
27
27
  makeAccountBridgeReceive,
28
28
  } from "../../../bridge/mockHelpers";
29
+ import { validateAddress } from "../../../bridge/validateAddress";
29
30
 
30
31
  const receive = makeAccountBridgeReceive();
31
32
  const notCreatedAddresses: string[] = [];
@@ -147,6 +148,7 @@ const accountBridge: AccountBridge<Transaction> = {
147
148
  signRawOperation,
148
149
  broadcast,
149
150
  getSerializedAddressParameters,
151
+ validateAddress,
150
152
  };
151
153
  const currencyBridge: CurrencyBridge = {
152
154
  preload: () => Promise.resolve({}),
@@ -11,11 +11,10 @@ import type {
11
11
  } from "@ledgerhq/device-management-kit";
12
12
  import {
13
13
  DeviceActionStatus,
14
- DeviceDisconnectedWhileSendingError,
15
14
  DeviceSessionStateType,
16
15
  UserInteractionRequired,
17
16
  OutOfMemoryDAError,
18
- UnsupportedFirmwareDAError,
17
+ DeviceModelId,
19
18
  } from "@ledgerhq/device-management-kit";
20
19
  import type {
21
20
  ConnectAppDAOutput,
@@ -27,12 +26,14 @@ import {
27
26
  UserRefusedAllowManager,
28
27
  UserRefusedOnDevice,
29
28
  LatestFirmwareVersionRequired,
29
+ UnsupportedFeatureError,
30
30
  } from "@ledgerhq/errors";
31
31
 
32
32
  import type { SkippedAppOp } from "../apps/types";
33
33
  import { SkipReason } from "../apps/types";
34
34
  import { parseDeviceInfo } from "../deviceSDK/tasks/getDeviceInfo";
35
35
  import { ConnectAppEvent } from "./connectApp";
36
+ import { NoSuchAppOnProvider } from "../errors";
36
37
 
37
38
  export class ConnectAppEventMapper {
38
39
  private openAppRequested: boolean = false;
@@ -241,7 +242,8 @@ export class ConnectAppEventMapper {
241
242
  });
242
243
  this.eventSubject.complete();
243
244
  } else if (
244
- error instanceof UnsupportedFirmwareDAError &&
245
+ "_tag" in error &&
246
+ error._tag === "UnsupportedFirmwareDAError" &&
245
247
  deviceState.sessionStateType !== DeviceSessionStateType.Connected
246
248
  ) {
247
249
  this.eventSubject.error(
@@ -252,12 +254,34 @@ export class ConnectAppEventMapper {
252
254
  deviceState.firmwareUpdateContext!.currentFirmware.version,
253
255
  }),
254
256
  );
257
+ } else if (
258
+ "_tag" in error &&
259
+ error._tag === "UnsupportedApplicationDAError" &&
260
+ deviceState.sessionStateType !== DeviceSessionStateType.Connected
261
+ ) {
262
+ if (deviceState.deviceModelId === DeviceModelId.NANO_S) {
263
+ // This will show an error modal with upsell link
264
+ this.eventSubject.error(
265
+ new NoSuchAppOnProvider(`Ledger Nano S does not support this feature`, {
266
+ appName: this.appName,
267
+ }),
268
+ );
269
+ return;
270
+ }
271
+ // This will show an error modal with contact support link
272
+ this.eventSubject.error(
273
+ new UnsupportedFeatureError(`App ${this.appName} not supported on this device`, {
274
+ appName: this.appName,
275
+ deviceModelId: deviceState.deviceModelId,
276
+ deviceVersion: deviceState.firmwareVersion?.os,
277
+ }),
278
+ );
255
279
  } else if ("_tag" in error && error._tag === "DeviceLockedError") {
256
280
  this.eventSubject.next({ type: "lockedDevice" });
257
281
  this.eventSubject.complete();
258
282
  } else if ("_tag" in error && error._tag === "RefusedByUserDAError") {
259
283
  this.eventSubject.error(new UserRefusedAllowManager());
260
- } else if (error instanceof DeviceDisconnectedWhileSendingError) {
284
+ } else if ("_tag" in error && error._tag === "DeviceDisconnectedWhileSendingError") {
261
285
  this.eventSubject.next({ type: "disconnected", expected: false });
262
286
  } else if ("_tag" in error && error._tag === "WebHidSendReportError") {
263
287
  this.eventSubject.next({ type: "disconnected", expected: false });