diff --git a/.changeset/lemon-students-cheat.md b/.changeset/lemon-students-cheat.md new file mode 100644 index 000000000000..4ac759497775 --- /dev/null +++ b/.changeset/lemon-students-cheat.md @@ -0,0 +1,5 @@ +--- +"@ledgerhq/live-common": patch +--- + +Catch and return error in useAvailableLanguagesForDevice diff --git a/.changeset/twelve-nails-dance.md b/.changeset/twelve-nails-dance.md new file mode 100644 index 000000000000..d38f86678353 --- /dev/null +++ b/.changeset/twelve-nails-dance.md @@ -0,0 +1,6 @@ +--- +"ledger-live-desktop": patch +"live-mobile": patch +--- + +Add "FirmwareNotRecognized" to errors ignored by Sentry diff --git a/apps/ledger-live-desktop/src/sentry/install.ts b/apps/ledger-live-desktop/src/sentry/install.ts index dff1e45a4762..52c03b13e411 100644 --- a/apps/ledger-live-desktop/src/sentry/install.ts +++ b/apps/ledger-live-desktop/src/sentry/install.ts @@ -86,6 +86,8 @@ const ignoreErrors = [ "UnresponsiveDeviceError", "PairingFailed", "Ledger device: UNKNOWN_ERROR", + // wrong My Ledger provider selected for the firmware of the connected device + "FirmwareNotRecognized", // errors coming from the usage of a Transport implementation "HwTransportError", // other diff --git a/apps/ledger-live-mobile/index.js b/apps/ledger-live-mobile/index.js index af8ae70c20cc..b41c0960c8d8 100644 --- a/apps/ledger-live-mobile/index.js +++ b/apps/ledger-live-mobile/index.js @@ -62,6 +62,8 @@ const excludedErrorName = [ "ManagerDeviceLocked", "LockedDeviceError", "UnresponsiveDeviceError", + // wrong My Ledger provider selected for the firmware of the connected device + "FirmwareNotRecognized", // errors coming from the usage of a Transport implementation "HwTransportError", // other diff --git a/libs/ledger-live-common/src/manager/hooks.ts b/libs/ledger-live-common/src/manager/hooks.ts index 05c55094987c..a8502f6a5f6e 100644 --- a/libs/ledger-live-common/src/manager/hooks.ts +++ b/libs/ledger-live-common/src/manager/hooks.ts @@ -63,18 +63,33 @@ export function useManagerBlueDot(dmi: DeviceModelInfo | null | undefined): bool export const useAvailableLanguagesForDevice = ( deviceInfo?: DeviceInfo | null, -): { availableLanguages: Language[]; loaded: boolean } => { +): { availableLanguages: Language[]; loaded: boolean; error: Error | null } => { const [availableLanguages, setAvailableLanguages] = useState([]); const [loaded, setLoaded] = useState(false); + const [error, setError] = useState(null); useEffect(() => { + let dead = false; if (deviceInfo) { - manager - .getAvailableLanguagesDevice(deviceInfo) - .then(setAvailableLanguages) - .finally(() => setLoaded(true)); + manager.getAvailableLanguagesDevice(deviceInfo).then( + languages => { + if (dead) return; + setAvailableLanguages(languages); + setError(null); + setLoaded(true); + }, + error => { + if (dead) return; + setAvailableLanguages([]); + setError(error); + setLoaded(true); + }, + ); } + return () => { + dead = true; + }; }, [deviceInfo]); - return { availableLanguages, loaded }; + return { availableLanguages, loaded, error }; };