UNPKG

rekwest

Version:

The robust request library that humanity deserves 🌐

94 lines (89 loc) 2.18 kB
import http2 from 'node:http2'; import zlib from 'node:zlib'; import { requestCredentials, requestRedirect, } from './constants.mjs'; import { APPLICATION_JSON, TEXT_PLAIN, WILDCARD, } from './mediatypes.mjs'; import { maxRetryAfter } from './utils.mjs'; const { HTTP2_HEADER_ACCEPT, HTTP2_HEADER_ACCEPT_ENCODING, HTTP2_METHOD_GET, HTTP_STATUS_BAD_GATEWAY, HTTP_STATUS_GATEWAY_TIMEOUT, HTTP_STATUS_INTERNAL_SERVER_ERROR, HTTP_STATUS_SERVICE_UNAVAILABLE, HTTP_STATUS_TOO_MANY_REQUESTS, } = http2.constants; export const isZstdSupported = !!zlib.constants.ZSTD_CLEVEL_DEFAULT; const defaults = { compression: { brotliOptions: { params: { [zlib.constants.BROTLI_PARAM_QUALITY]: 4, }, }, zstdOptions: { params: { [zlib.constants.ZSTD_c_compressionLevel]: 6, }, }, }, cookiesTTL: false, credentials: requestCredentials.sameOrigin, decompression: {}, digest: true, follow: 20, h2: false, headers: { [HTTP2_HEADER_ACCEPT]: `${ APPLICATION_JSON }, ${ TEXT_PLAIN }, ${ WILDCARD }`, [HTTP2_HEADER_ACCEPT_ENCODING]: `br,${ isZstdSupported ? ' zstd, ' : ' ' }gzip, deflate, deflate-raw`, }, get maxRetryAfter() { return this[maxRetryAfter] ?? this.timeout; }, set maxRetryAfter(value) { this[maxRetryAfter] = value; }, method: HTTP2_METHOD_GET, parse: true, redirect: requestRedirect.follow, redirected: false, retry: { attempts: 0, backoffStrategy: 'interval * Math.log(Math.random() * (Math.E * Math.E - Math.E) + Math.E)', errorCodes: [ 'EAI_AGAIN', 'ECONNREFUSED', 'ECONNRESET', 'EHOSTDOWN', 'EHOSTUNREACH', 'ENETDOWN', 'ENETUNREACH', 'ENOTFOUND', 'EPIPE', 'ERR_HTTP2_STREAM_ERROR', ], interval: 1e3, retryAfter: true, statusCodes: [ HTTP_STATUS_TOO_MANY_REQUESTS, HTTP_STATUS_INTERNAL_SERVER_ERROR, HTTP_STATUS_BAD_GATEWAY, HTTP_STATUS_SERVICE_UNAVAILABLE, HTTP_STATUS_GATEWAY_TIMEOUT, ], }, stripTrailingSlash: false, thenable: false, timeout: 3e5, trimTrailingSlashes: false, }; export default { defaults, };