17 lines
595 B
TypeScript
17 lines
595 B
TypeScript
|
|
// A really basic fetch wrapper which throws on non-ok response codes
|
||
|
|
export default async function safeFetch(input: RequestInfo | URL, options?: RequestInit, timeout = 10000) {
|
||
|
|
const req = await fetch(input, {
|
||
|
|
signal: timeoutSignal(timeout),
|
||
|
|
...options
|
||
|
|
});
|
||
|
|
|
||
|
|
if (!req.ok) throw new Error(`Request returned non-ok: ${req.status} ${req.statusText}`);
|
||
|
|
return req;
|
||
|
|
}
|
||
|
|
|
||
|
|
function timeoutSignal(ms: number): AbortSignal {
|
||
|
|
const controller = new AbortController();
|
||
|
|
setTimeout(() => controller.abort(`Timed out after ${ms}ms`), ms);
|
||
|
|
return controller.signal;
|
||
|
|
}
|