diff --git a/src/ageAssurance/components/NoAccessScreen.tsx b/src/ageAssurance/components/NoAccessScreen.tsx index 79926b46ae..688db28bd8 100644 --- a/src/ageAssurance/components/NoAccessScreen.tsx +++ b/src/ageAssurance/components/NoAccessScreen.tsx @@ -419,6 +419,11 @@ function AccessSection() { }, [control, ax, hasInitiated]) const onPressVerify = useCallback(async () => { + const did = currentAccount?.did + + // Just for typescript, this screen won't be shown without a logged in user + if (!did) return + /* * In regions that permit on-device verification, try the native age API * first. We tag the result with the current region (device assurance is @@ -434,7 +439,6 @@ function AccessSection() { * a session DID. */ if (allowsDeviceVerification) { - const did = currentAccount?.did // Show a loading state while the OS age prompt is up. setIsVerifyingDevice(true) let signals: AgeRange.AgeRangeResponse | undefined @@ -443,7 +447,7 @@ function AccessSection() { } finally { setIsVerifyingDevice(false) } - if (signals && did) { + if (signals) { const {assuredAge} = getAgeAssuranceDataFromDeviceSignals( region, signals, diff --git a/src/ageAssurance/data.tsx b/src/ageAssurance/data.tsx index e1d793f387..c7610569d1 100644 --- a/src/ageAssurance/data.tsx +++ b/src/ageAssurance/data.tsx @@ -501,6 +501,10 @@ export function createDeviceSignalsQueryKey({did}: {did: string}) { * * Native-only: on web `expo-age-range` returns a misleading default (e.g. * `{lowerBound: 18}`), so we never call it there — web users fall back to KWS. + * + * If this method throws for whatever reason, we catch and log the error and + * return undefined. The caller should treat undefined as "no device signals + * available" and fall back to KWS. */ export async function getDeviceSignals(): Promise< AgeRange.AgeRangeResponse | undefined