diff --git a/apps/web/src/pages/api/report-screenshot.ts b/apps/web/src/pages/api/report-screenshot.ts index b31ef14..5f09196 100644 --- a/apps/web/src/pages/api/report-screenshot.ts +++ b/apps/web/src/pages/api/report-screenshot.ts @@ -17,10 +17,9 @@ export const POST: APIRoute = async ({ request, redirect, cookies }) => { cookies.delete("rf4-idempotency-key", {path:"/"}); } return redirect(response.ok ? "/report?state=screenshot_sent" : `/report?state=screenshot_error&report_id=${encodeURIComponent(reportId)}`, 303); - } catch (err) { - const isTimeout = err instanceof DOMException && err.name === "TimeoutError" || - err instanceof TypeError && err.message.toLowerCase().includes("fetch") || - err instanceof Error && err.message.toLowerCase().includes("abort"); - return redirect(isTimeout ? `/report?state=timeout&report_id=${encodeURIComponent(reportId)}` : `/report?state=screenshot_error&report_id=${encodeURIComponent(reportId)}`, 303); + } catch { + // The report already exists and the upload can have reached the API before + // the timeout. Keep the recovery form visible; the API makes a retry safe. + return redirect(`/report?state=screenshot_error&report_id=${encodeURIComponent(reportId)}`, 303); } }; diff --git a/apps/web/src/pages/report.astro b/apps/web/src/pages/report.astro index 460d416..89b8b2b 100644 --- a/apps/web/src/pages/report.astro +++ b/apps/web/src/pages/report.astro @@ -22,7 +22,8 @@ const reportId = Astro.url.searchParams.get("report_id"); {state === "timeout" &&