@push.rocks/webrequest
Version:
Modern, fetch-compatible web request library with intelligent HTTP caching, retry strategies, and fault tolerance.
113 lines • 5.68 kB
JavaScript
/**
* Main webrequest function - fetch-compatible API
*/
import { WebrequestClient } from './webrequest.client.js';
// Global default client
const defaultClient = new WebrequestClient();
/**
* Fetch-compatible webrequest function
* Drop-in replacement for fetch() with caching, retry, and fault tolerance
*
* @param input - URL or Request object
* @param init - Request options (standard RequestInit + webrequest extensions)
* @returns Promise<Response>
*
* @example
* ```typescript
* // Simple GET request
* const response = await webrequest('https://api.example.com/data');
* const data = await response.json();
*
* // With caching
* const response = await webrequest('https://api.example.com/data', {
* cacheStrategy: 'cache-first',
* cacheMaxAge: 60000
* });
*
* // With retry
* const response = await webrequest('https://api.example.com/data', {
* retry: {
* maxAttempts: 3,
* backoff: 'exponential'
* }
* });
*
* // With fallback URLs
* const response = await webrequest('https://api.example.com/data', {
* fallbackUrls: ['https://backup.example.com/data'],
* retry: true
* });
* ```
*/
export async function webrequest(input, init) {
const url = input instanceof Request ? input.url : String(input);
const request = input instanceof Request ? input : new Request(url, init);
return await defaultClient.request(request, init);
}
/**
* Convenience method: GET request returning JSON
*/
webrequest.getJson = async function (url, options) {
return await defaultClient.getJson(url, options);
};
/**
* Convenience method: POST request with JSON body
*/
webrequest.postJson = async function (url, data, options) {
return await defaultClient.postJson(url, data, options);
};
/**
* Convenience method: PUT request with JSON body
*/
webrequest.putJson = async function (url, data, options) {
return await defaultClient.putJson(url, data, options);
};
/**
* Convenience method: DELETE request
*/
webrequest.deleteJson = async function (url, options) {
return await defaultClient.deleteJson(url, options);
};
/**
* Add a global request interceptor
*/
webrequest.addRequestInterceptor = function (interceptor) {
defaultClient.addRequestInterceptor(interceptor);
};
/**
* Add a global response interceptor
*/
webrequest.addResponseInterceptor = function (interceptor) {
defaultClient.addResponseInterceptor(interceptor);
};
/**
* Add a global error interceptor
*/
webrequest.addErrorInterceptor = function (interceptor) {
defaultClient.addErrorInterceptor(interceptor);
};
/**
* Clear all global interceptors
*/
webrequest.clearInterceptors = function () {
defaultClient.clearInterceptors();
};
/**
* Clear the cache
*/
webrequest.clearCache = async function () {
await defaultClient.clearCache();
};
/**
* Create a new WebrequestClient with custom configuration
*/
webrequest.createClient = function (options) {
return new WebrequestClient(options);
};
/**
* Get the default client
*/
webrequest.getDefaultClient = function () {
return defaultClient;
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2VicmVxdWVzdC5mdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3dlYnJlcXVlc3QuZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFHSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRCx3QkFBd0I7QUFDeEIsTUFBTSxhQUFhLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0FBRTdDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVLENBQzlCLEtBQTZCLEVBQzdCLElBQXlCO0lBRXpCLE1BQU0sR0FBRyxHQUFHLEtBQUssWUFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLE9BQU8sR0FBRyxLQUFLLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUUxRSxPQUFPLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsVUFBVSxDQUFDLE9BQU8sR0FBRyxLQUFLLFdBQ3hCLEdBQVcsRUFDWCxPQUE0QjtJQUU1QixPQUFPLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBSSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEQsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxVQUFVLENBQUMsUUFBUSxHQUFHLEtBQUssV0FDekIsR0FBVyxFQUNYLElBQVMsRUFDVCxPQUE0QjtJQUU1QixPQUFPLE1BQU0sYUFBYSxDQUFDLFFBQVEsQ0FBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsVUFBVSxDQUFDLE9BQU8sR0FBRyxLQUFLLFdBQ3hCLEdBQVcsRUFDWCxJQUFTLEVBQ1QsT0FBNEI7SUFFNUIsT0FBTyxNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUksR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM1RCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILFVBQVUsQ0FBQyxVQUFVLEdBQUcsS0FBSyxXQUMzQixHQUFXLEVBQ1gsT0FBNEI7SUFFNUIsT0FBTyxNQUFNLGFBQWEsQ0FBQyxVQUFVLENBQUksR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pELENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsVUFBVSxDQUFDLHFCQUFxQixHQUFHLFVBQVUsV0FBVztJQUN0RCxhQUFhLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbkQsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxVQUFVLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxXQUFXO0lBQ3ZELGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILFVBQVUsQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLFdBQVc7SUFDcEQsYUFBYSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pELENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsVUFBVSxDQUFDLGlCQUFpQixHQUFHO0lBQzdCLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3BDLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsVUFBVSxDQUFDLFVBQVUsR0FBRyxLQUFLO0lBQzNCLE1BQU0sYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ25DLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsVUFBVSxDQUFDLFlBQVksR0FBRyxVQUN4QixPQUFxQztJQUVyQyxPQUFPLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxVQUFVLENBQUMsZ0JBQWdCLEdBQUc7SUFDNUIsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQyxDQUFDIn0=