@push.rocks/webrequest
Version:
Modern, fetch-compatible web request library with intelligent HTTP caching, retry strategies, and fault tolerance.
51 lines • 3.07 kB
JavaScript
/**
* Timeout handling utilities
*/
import * as plugins from '../webrequest.plugins.js';
/**
* Create an AbortController with timeout
*/
export function createTimeoutController(timeoutMs) {
const controller = new AbortController();
let timeoutId;
// Set up timeout
plugins.smartdelay
.delayFor(timeoutMs)
.then(() => {
controller.abort();
})
.then((result) => {
timeoutId = result;
});
// Cleanup function to clear timeout
const cleanup = () => {
if (timeoutId !== undefined) {
// smartdelay doesn't expose a cancel method, so we just ensure
// the controller won't abort if already completed
}
};
return { controller, cleanup };
}
/**
* Execute a fetch with timeout
*/
export async function fetchWithTimeout(url, init, timeoutMs) {
const { controller, cleanup } = createTimeoutController(timeoutMs);
try {
const response = await fetch(url, {
...init,
signal: controller.signal,
});
cleanup();
return response;
}
catch (error) {
cleanup();
// Re-throw with more informative error if it's a timeout
if (error instanceof Error && error.name === 'AbortError') {
throw new Error(`Request timeout after ${timeoutMs}ms: ${url}`);
}
throw error;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZW91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3V0aWxzL3RpbWVvdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEtBQUssT0FBTyxNQUFNLDBCQUEwQixDQUFDO0FBRXBEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLFNBQWlCO0lBSXZELE1BQU0sVUFBVSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7SUFDekMsSUFBSSxTQUFjLENBQUM7SUFFbkIsaUJBQWlCO0lBQ2pCLE9BQU8sQ0FBQyxVQUFVO1NBQ2YsUUFBUSxDQUFDLFNBQVMsQ0FBQztTQUNuQixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1QsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JCLENBQUMsQ0FBQztTQUNELElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ2YsU0FBUyxHQUFHLE1BQU0sQ0FBQztJQUNyQixDQUFDLENBQUMsQ0FBQztJQUVMLG9DQUFvQztJQUNwQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7UUFDbkIsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDNUIsK0RBQStEO1lBQy9ELGtEQUFrRDtRQUNwRCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNqQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUNwQyxHQUFXLEVBQ1gsSUFBaUIsRUFDakIsU0FBaUI7SUFFakIsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVuRSxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDaEMsR0FBRyxJQUFJO1lBQ1AsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1NBQzFCLENBQUMsQ0FBQztRQUVILE9BQU8sRUFBRSxDQUFDO1FBQ1YsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLEVBQUUsQ0FBQztRQUVWLHlEQUF5RDtRQUN6RCxJQUFJLEtBQUssWUFBWSxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixTQUFTLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBRUQsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQyJ9