R10: Fix TimeoutError handling — use DOMException.TimeoutError check
- AbortSignal.timeout() throws DOMException with name='TimeoutError', not TypeError - Check for DOMException.TimeoutError, TypeError(fetch), or Error(abort) - Apply same fix to report.ts and report-screenshot.ts - Timeout redirects to 'timeout' state, other errors to 'create_error'
This commit is contained in:
@@ -14,5 +14,10 @@ export const POST: APIRoute = async ({ request, redirect, cookies }) => {
|
|||||||
const response = await fetch(`${base}/api/v1/catch-reports/${reportId}/screenshot`, { method: "POST", headers:{"X-Upload-Token":uploadToken}, body: upload, signal: AbortSignal.timeout(60_000) });
|
const response = await fetch(`${base}/api/v1/catch-reports/${reportId}/screenshot`, { method: "POST", headers:{"X-Upload-Token":uploadToken}, body: upload, signal: AbortSignal.timeout(60_000) });
|
||||||
if (response.ok) cookies.delete(cookieName, {path:"/"});
|
if (response.ok) cookies.delete(cookieName, {path:"/"});
|
||||||
return redirect(response.ok ? "/report?state=screenshot_sent" : `/report?state=screenshot_error&report_id=${encodeURIComponent(reportId)}`, 303);
|
return redirect(response.ok ? "/report?state=screenshot_sent" : `/report?state=screenshot_error&report_id=${encodeURIComponent(reportId)}`, 303);
|
||||||
} catch { return redirect(`/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);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -35,7 +35,10 @@ export const POST: APIRoute = async ({ request, redirect, cookies }) => {
|
|||||||
return redirect("/report?state=sent", 303);
|
return redirect("/report?state=sent", 303);
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
if (err instanceof TypeError && err.message.includes("abort")) {
|
const isTimeout = err instanceof DOMException && err.name === "TimeoutError" ||
|
||||||
|
err instanceof TypeError && err.message.toLowerCase().includes("fetch") ||
|
||||||
|
err instanceof Error && err.message.toLowerCase().includes("abort");
|
||||||
|
if (isTimeout) {
|
||||||
if (createdId && uploadToken) cookies.set(`rf4-upload-${createdId}`, uploadToken, {httpOnly:true, sameSite:"strict", secure:import.meta.env.PROD, path:"/", maxAge:3600});
|
if (createdId && uploadToken) cookies.set(`rf4-upload-${createdId}`, uploadToken, {httpOnly:true, sameSite:"strict", secure:import.meta.env.PROD, path:"/", maxAge:3600});
|
||||||
return redirect(createdId ? `/report?state=screenshot_error&report_id=${encodeURIComponent(createdId)}` : "/report?state=timeout", 303);
|
return redirect(createdId ? `/report?state=screenshot_error&report_id=${encodeURIComponent(createdId)}` : "/report?state=timeout", 303);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user