diff --git a/lib/shared/timeouts.js b/lib/shared/timeouts.js --- a/lib/shared/timeouts.js +++ b/lib/shared/timeouts.js @@ -63,3 +63,5 @@ export const callIdentityServiceTimeout = 5000; export const logoutTimeout = 2000; // in milliseconds + +export const farcasterSignerTimeout = 60000; diff --git a/native/farcaster-auth/farcaster-auth-context-provider.react.js b/native/farcaster-auth/farcaster-auth-context-provider.react.js --- a/native/farcaster-auth/farcaster-auth-context-provider.react.js +++ b/native/farcaster-auth/farcaster-auth-context-provider.react.js @@ -8,7 +8,9 @@ FarcasterAuthContext, type SignedMessage, } from 'lib/components/farcaster-auth-context.js'; +import { farcasterSignerTimeout } from 'lib/shared/timeouts.js'; import { createFarcasterDCsAuthMessage } from 'lib/utils/farcaster-utils.js'; +import sleep from 'lib/utils/sleep.js'; import bundledScript from './dist/farcaster-signer.bundle.js.raw'; import type { WebViewMessageEvent } from '../types/web-view-types.js'; @@ -85,11 +87,18 @@ reject, }); }); + + const timeoutPromise = (async () => { + await sleep(farcasterSignerTimeout); + throw new Error('Signing timed out'); + })(); + setAuthParams({ message: authMessage, mnemonic: input.walletMnemonic, }); - return promise; + + return Promise.race([promise, timeoutPromise]); }, [promiseHandlers], );