@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.
- package/lib/bridge/generic-alpaca/accountBridge.d.ts.map +1 -1
- package/lib/bridge/generic-alpaca/accountBridge.js +2 -1
- package/lib/bridge/generic-alpaca/accountBridge.js.map +1 -1
- package/lib/bridge/generic-alpaca/signer/index.d.ts +4 -0
- package/lib/bridge/generic-alpaca/signer/index.d.ts.map +1 -1
- package/lib/bridge/generic-alpaca/signer/index.js +22 -1
- package/lib/bridge/generic-alpaca/signer/index.js.map +1 -1
- package/lib/bridge/mockHelpers.d.ts +1 -1
- package/lib/bridge/mockHelpers.d.ts.map +1 -1
- package/lib/bridge/mockHelpers.js +2 -6
- package/lib/bridge/mockHelpers.js.map +1 -1
- package/lib/bridge/validateAddress.d.ts +4 -0
- package/lib/bridge/validateAddress.d.ts.map +1 -0
- package/lib/bridge/validateAddress.js +14 -0
- package/lib/bridge/validateAddress.js.map +1 -0
- package/lib/e2e/speculos.d.ts.map +1 -1
- package/lib/e2e/speculos.js +0 -1
- package/lib/e2e/speculos.js.map +1 -1
- package/lib/e2e/speculosAppVersion.d.ts +1 -0
- package/lib/e2e/speculosAppVersion.d.ts.map +1 -1
- package/lib/e2e/speculosAppVersion.js +38 -14
- package/lib/e2e/speculosAppVersion.js.map +1 -1
- package/lib/e2e/speculosCI.d.ts.map +1 -1
- package/lib/e2e/speculosCI.js +1 -6
- package/lib/e2e/speculosCI.js.map +1 -1
- package/lib/families/algorand/bridge/mock.d.ts.map +1 -1
- package/lib/families/algorand/bridge/mock.js +2 -0
- package/lib/families/algorand/bridge/mock.js.map +1 -1
- package/lib/families/bitcoin/bridge/mock.d.ts.map +1 -1
- package/lib/families/bitcoin/bridge/mock.js +2 -0
- package/lib/families/bitcoin/bridge/mock.js.map +1 -1
- package/lib/families/canton/bridge/mock.d.ts.map +1 -1
- package/lib/families/canton/bridge/mock.js +2 -0
- package/lib/families/canton/bridge/mock.js.map +1 -1
- package/lib/families/canton/react.d.ts +7 -1
- package/lib/families/canton/react.d.ts.map +1 -1
- package/lib/families/canton/react.js +38 -1
- package/lib/families/canton/react.js.map +1 -1
- package/lib/families/cardano/bridge/mock.d.ts.map +1 -1
- package/lib/families/cardano/bridge/mock.js +2 -0
- package/lib/families/cardano/bridge/mock.js.map +1 -1
- package/lib/families/casper/bridge/mock.d.ts.map +1 -1
- package/lib/families/casper/bridge/mock.js +2 -0
- package/lib/families/casper/bridge/mock.js.map +1 -1
- package/lib/families/cosmos/bridge/mock.d.ts.map +1 -1
- package/lib/families/cosmos/bridge/mock.js +2 -0
- package/lib/families/cosmos/bridge/mock.js.map +1 -1
- package/lib/families/evm/bridge/mock.d.ts.map +1 -1
- package/lib/families/evm/bridge/mock.js +2 -0
- package/lib/families/evm/bridge/mock.js.map +1 -1
- package/lib/families/icon/bridge/mock.d.ts.map +1 -1
- package/lib/families/icon/bridge/mock.js +2 -0
- package/lib/families/icon/bridge/mock.js.map +1 -1
- package/lib/families/multiversx/bridge/mock.d.ts.map +1 -1
- package/lib/families/multiversx/bridge/mock.js +2 -0
- package/lib/families/multiversx/bridge/mock.js.map +1 -1
- package/lib/families/polkadot/bridge/mock.d.ts.map +1 -1
- package/lib/families/polkadot/bridge/mock.js +2 -0
- package/lib/families/polkadot/bridge/mock.js.map +1 -1
- package/lib/families/solana/bridge/mock.d.ts +1 -0
- package/lib/families/solana/bridge/mock.d.ts.map +1 -1
- package/lib/families/stellar/bridge/mock.d.ts.map +1 -1
- package/lib/families/stellar/bridge/mock.js +2 -0
- package/lib/families/stellar/bridge/mock.js.map +1 -1
- package/lib/families/tezos/bridge/mock.d.ts.map +1 -1
- package/lib/families/tezos/bridge/mock.js +2 -0
- package/lib/families/tezos/bridge/mock.js.map +1 -1
- package/lib/families/tron/bridge/mock.d.ts.map +1 -1
- package/lib/families/tron/bridge/mock.js +2 -0
- package/lib/families/tron/bridge/mock.js.map +1 -1
- package/lib/families/xrp/bridge/mock.d.ts.map +1 -1
- package/lib/families/xrp/bridge/mock.js +2 -0
- package/lib/families/xrp/bridge/mock.js.map +1 -1
- package/lib/generated/bridge/mock.d.ts +1 -0
- package/lib/generated/bridge/mock.d.ts.map +1 -1
- package/lib/generated/mock.d.ts +3 -3
- package/lib/hw/connectAppEventMapper.d.ts.map +1 -1
- package/lib/hw/connectAppEventMapper.js +21 -2
- package/lib/hw/connectAppEventMapper.js.map +1 -1
- package/lib-es/bridge/generic-alpaca/accountBridge.d.ts.map +1 -1
- package/lib-es/bridge/generic-alpaca/accountBridge.js +3 -2
- package/lib-es/bridge/generic-alpaca/accountBridge.js.map +1 -1
- package/lib-es/bridge/generic-alpaca/signer/index.d.ts +4 -0
- package/lib-es/bridge/generic-alpaca/signer/index.d.ts.map +1 -1
- package/lib-es/bridge/generic-alpaca/signer/index.js +20 -0
- package/lib-es/bridge/generic-alpaca/signer/index.js.map +1 -1
- package/lib-es/bridge/mockHelpers.d.ts +1 -1
- package/lib-es/bridge/mockHelpers.d.ts.map +1 -1
- package/lib-es/bridge/mockHelpers.js +1 -5
- package/lib-es/bridge/mockHelpers.js.map +1 -1
- package/lib-es/bridge/validateAddress.d.ts +4 -0
- package/lib-es/bridge/validateAddress.d.ts.map +1 -0
- package/lib-es/bridge/validateAddress.js +9 -0
- package/lib-es/bridge/validateAddress.js.map +1 -0
- package/lib-es/e2e/speculos.d.ts.map +1 -1
- package/lib-es/e2e/speculos.js +0 -1
- package/lib-es/e2e/speculos.js.map +1 -1
- package/lib-es/e2e/speculosAppVersion.d.ts +1 -0
- package/lib-es/e2e/speculosAppVersion.d.ts.map +1 -1
- package/lib-es/e2e/speculosAppVersion.js +36 -13
- package/lib-es/e2e/speculosAppVersion.js.map +1 -1
- package/lib-es/e2e/speculosCI.d.ts.map +1 -1
- package/lib-es/e2e/speculosCI.js +1 -6
- package/lib-es/e2e/speculosCI.js.map +1 -1
- package/lib-es/families/algorand/bridge/mock.d.ts.map +1 -1
- package/lib-es/families/algorand/bridge/mock.js +2 -0
- package/lib-es/families/algorand/bridge/mock.js.map +1 -1
- package/lib-es/families/bitcoin/bridge/mock.d.ts.map +1 -1
- package/lib-es/families/bitcoin/bridge/mock.js +2 -0
- package/lib-es/families/bitcoin/bridge/mock.js.map +1 -1
- package/lib-es/families/canton/bridge/mock.d.ts.map +1 -1
- package/lib-es/families/canton/bridge/mock.js +2 -0
- package/lib-es/families/canton/bridge/mock.js.map +1 -1
- package/lib-es/families/canton/react.d.ts +7 -1
- package/lib-es/families/canton/react.d.ts.map +1 -1
- package/lib-es/families/canton/react.js +34 -1
- package/lib-es/families/canton/react.js.map +1 -1
- package/lib-es/families/cardano/bridge/mock.d.ts.map +1 -1
- package/lib-es/families/cardano/bridge/mock.js +2 -0
- package/lib-es/families/cardano/bridge/mock.js.map +1 -1
- package/lib-es/families/casper/bridge/mock.d.ts.map +1 -1
- package/lib-es/families/casper/bridge/mock.js +2 -0
- package/lib-es/families/casper/bridge/mock.js.map +1 -1
- package/lib-es/families/cosmos/bridge/mock.d.ts.map +1 -1
- package/lib-es/families/cosmos/bridge/mock.js +2 -0
- package/lib-es/families/cosmos/bridge/mock.js.map +1 -1
- package/lib-es/families/evm/bridge/mock.d.ts.map +1 -1
- package/lib-es/families/evm/bridge/mock.js +2 -0
- package/lib-es/families/evm/bridge/mock.js.map +1 -1
- package/lib-es/families/icon/bridge/mock.d.ts.map +1 -1
- package/lib-es/families/icon/bridge/mock.js +2 -0
- package/lib-es/families/icon/bridge/mock.js.map +1 -1
- package/lib-es/families/multiversx/bridge/mock.d.ts.map +1 -1
- package/lib-es/families/multiversx/bridge/mock.js +2 -0
- package/lib-es/families/multiversx/bridge/mock.js.map +1 -1
- package/lib-es/families/polkadot/bridge/mock.d.ts.map +1 -1
- package/lib-es/families/polkadot/bridge/mock.js +2 -0
- package/lib-es/families/polkadot/bridge/mock.js.map +1 -1
- package/lib-es/families/solana/bridge/mock.d.ts +1 -0
- package/lib-es/families/solana/bridge/mock.d.ts.map +1 -1
- package/lib-es/families/stellar/bridge/mock.d.ts.map +1 -1
- package/lib-es/families/stellar/bridge/mock.js +2 -0
- package/lib-es/families/stellar/bridge/mock.js.map +1 -1
- package/lib-es/families/tezos/bridge/mock.d.ts.map +1 -1
- package/lib-es/families/tezos/bridge/mock.js +2 -0
- package/lib-es/families/tezos/bridge/mock.js.map +1 -1
- package/lib-es/families/tron/bridge/mock.d.ts.map +1 -1
- package/lib-es/families/tron/bridge/mock.js +2 -0
- package/lib-es/families/tron/bridge/mock.js.map +1 -1
- package/lib-es/families/xrp/bridge/mock.d.ts.map +1 -1
- package/lib-es/families/xrp/bridge/mock.js +2 -0
- package/lib-es/families/xrp/bridge/mock.js.map +1 -1
- package/lib-es/generated/bridge/mock.d.ts +1 -0
- package/lib-es/generated/bridge/mock.d.ts.map +1 -1
- package/lib-es/generated/mock.d.ts +3 -3
- package/lib-es/hw/connectAppEventMapper.d.ts.map +1 -1
- package/lib-es/hw/connectAppEventMapper.js +23 -4
- package/lib-es/hw/connectAppEventMapper.js.map +1 -1
- package/package.json +74 -74
- package/src/bridge/generic-alpaca/accountBridge.ts +2 -1
- package/src/bridge/generic-alpaca/signer/index.ts +29 -0
- package/src/bridge/mockHelpers.ts +2 -4
- package/src/bridge/validateAddress.test.ts +24 -0
- package/src/bridge/validateAddress.ts +13 -0
- package/src/e2e/speculos.ts +0 -1
- package/src/e2e/speculosAppVersion.ts +58 -13
- package/src/e2e/speculosCI.ts +1 -6
- package/src/families/algorand/bridge/mock.ts +2 -0
- package/src/families/bitcoin/bridge/mock.ts +2 -0
- package/src/families/canton/bridge/mock.ts +2 -0
- package/src/families/canton/react.ts +53 -3
- package/src/families/cardano/bridge/mock.ts +2 -0
- package/src/families/casper/bridge/mock.ts +2 -0
- package/src/families/cosmos/bridge/mock.ts +2 -0
- package/src/families/evm/bridge/mock.ts +3 -0
- package/src/families/icon/bridge/mock.ts +2 -0
- package/src/families/multiversx/bridge/mock.ts +2 -0
- package/src/families/polkadot/bridge/mock.ts +2 -0
- package/src/families/stellar/bridge/mock.ts +2 -0
- package/src/families/tezos/bridge/mock.ts +2 -0
- package/src/families/tron/bridge/mock.ts +2 -0
- package/src/families/xrp/bridge/mock.ts +2 -0
- 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
|
-
|
|
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
|
-
|
|
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
|
|
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 });
|