UNPKG

@push.rocks/webrequest

Version:

Modern, fetch-compatible web request library with intelligent HTTP caching, retry strategies, and fault tolerance.

51 lines 3.07 kB
/** * 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