// Friendly error messages for API failures, with first-class handling of // 429 (rate-limited) and 403 account-lockout responses. export function useErrMessage(e: any, fallback = 'Something went wrong'): string { const status: number | undefined = e?.response?.status ?? e?.statusCode const data = e?.data const serverMsg: string | undefined = data?.error if (status === 429) { const retry: number | undefined = data?.retry_after if (typeof retry === 'number' && retry > 0) { return `You're going too fast — try again in ${formatSeconds(retry)}.` } return "You're going too fast — please try again in a moment." } if (status === 403 && typeof serverMsg === 'string' && serverMsg.toLowerCase().includes('locked')) { return 'Your account is locked after too many failed sign-in attempts. Reset your password to unlock it.' } if (serverMsg) return serverMsg return e?.message || fallback } function formatSeconds(s: number): string { if (s < 60) return `${s} second${s === 1 ? '' : 's'}` const m = Math.ceil(s / 60) return `${m} minute${m === 1 ? '' : 's'}` }