middleware.browser.cjs.map 29 KB

1
  1. {"version":3,"file":"middleware.browser.cjs","sources":["../src/middleware/agent/browser-agent.ts","../src/middleware/base.ts","../src/middleware/debug.ts","../src/middleware/headers.ts","../src/middleware/httpErrors.ts","../src/middleware/injectResponse.ts","../src/util/isBuffer.ts","../src/middleware/jsonRequest.ts","../src/middleware/jsonResponse.ts","../src/util/isBrowserOptions.ts","../src/middleware/mtls.ts","../src/util/global.ts","../src/middleware/observable.ts","../src/middleware/progress/browser-progress.ts","../src/middleware/promise.ts","../src/middleware/proxy.ts","../src/util/browser-shouldRetry.ts","../src/middleware/retry/shared-retry.ts","../src/middleware/retry/browser-retry.ts","../src/middleware/urlEncoded.ts","../src/middleware/keepAlive.ts","../src/middleware.browser.ts"],"sourcesContent":["/**\n * This middleware only has an effect in Node.js.\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function agent(opts?: any): any {\n return {}\n}\n","import type {Middleware} from '../types'\n\nconst leadingSlash = /^\\//\nconst trailingSlash = /\\/$/\n\n/** @public */\nexport function base(baseUrl: string) {\n const baseUri = baseUrl.replace(trailingSlash, '')\n return {\n processOptions: (options) => {\n if (/^https?:\\/\\//i.test(options.url)) {\n return options // Already prefixed\n }\n\n const url = [baseUri, options.url.replace(leadingSlash, '')].join('/')\n return Object.assign({}, options, {url})\n },\n } satisfies Middleware\n}\n","import debugIt from 'debug'\n\nimport type {Middleware} from '../types'\n\nconst SENSITIVE_HEADERS = ['cookie', 'authorization']\n\nconst hasOwn = Object.prototype.hasOwnProperty\nconst redactKeys = (source: any, redacted: any) => {\n const target: any = {}\n for (const key in source) {\n if (hasOwn.call(source, key)) {\n target[key] = redacted.indexOf(key.toLowerCase()) > -1 ? '<redacted>' : source[key]\n }\n }\n return target\n}\n\n/** @public */\nexport function debug(opts: any = {}) {\n const verbose = opts.verbose\n const namespace = opts.namespace || 'get-it'\n const defaultLogger = debugIt(namespace)\n const log = opts.log || defaultLogger\n const shortCircuit = log === defaultLogger && !debugIt.enabled(namespace)\n let requestId = 0\n\n return {\n processOptions: (options) => {\n options.debug = log\n options.requestId = options.requestId || ++requestId\n return options\n },\n\n onRequest: (event) => {\n // Short-circuit if not enabled, to save some CPU cycles with formatting stuff\n if (shortCircuit || !event) {\n return event\n }\n\n const options = event.options\n\n log('[%s] HTTP %s %s', options.requestId, options.method, options.url)\n\n if (verbose && options.body && typeof options.body === 'string') {\n log('[%s] Request body: %s', options.requestId, options.body)\n }\n\n if (verbose && options.headers) {\n const headers =\n opts.redactSensitiveHeaders === false\n ? options.headers\n : redactKeys(options.headers, SENSITIVE_HEADERS)\n\n log('[%s] Request headers: %s', options.requestId, JSON.stringify(headers, null, 2))\n }\n\n return event\n },\n\n onResponse: (res, context) => {\n // Short-circuit if not enabled, to save some CPU cycles with formatting stuff\n if (shortCircuit || !res) {\n return res\n }\n\n const reqId = context.options.requestId\n\n log('[%s] Response code: %s %s', reqId, res.statusCode, res.statusMessage)\n\n if (verbose && res.body) {\n log('[%s] Response body: %s', reqId, stringifyBody(res))\n }\n\n return res\n },\n\n onError: (err, context) => {\n const reqId = context.options.requestId\n if (!err) {\n log('[%s] Error encountered, but handled by an earlier middleware', reqId)\n return err\n }\n\n log('[%s] ERROR: %s', reqId, err.message)\n return err\n },\n } satisfies Middleware\n}\n\nfunction stringifyBody(res: any) {\n const contentType = (res.headers['content-type'] || '').toLowerCase()\n const isJson = contentType.indexOf('application/json') !== -1\n return isJson ? tryFormat(res.body) : res.body\n}\n\n// Attempt pretty-formatting JSON\nfunction tryFormat(body: any) {\n try {\n const parsed = typeof body === 'string' ? JSON.parse(body) : body\n return JSON.stringify(parsed, null, 2)\n } catch (err) {\n return body\n }\n}\n","import type {Middleware} from '../types'\n\n/** @public */\nexport function headers(_headers: any, opts: any = {}) {\n return {\n processOptions: (options) => {\n const existing = options.headers || {}\n options.headers = opts.override\n ? Object.assign({}, existing, _headers)\n : Object.assign({}, _headers, existing)\n\n return options\n },\n } satisfies Middleware\n}\n","import type {Middleware} from '../types'\n\nclass HttpError extends Error {\n response: any\n request: any\n constructor(res: any, ctx: any) {\n super()\n const truncatedUrl = res.url.length > 400 ? `${res.url.slice(0, 399)}…` : res.url\n let msg = `${res.method}-request to ${truncatedUrl} resulted in `\n msg += `HTTP ${res.statusCode} ${res.statusMessage}`\n\n this.message = msg.trim()\n this.response = res\n this.request = ctx.options\n }\n}\n\n/** @public */\nexport function httpErrors() {\n return {\n onResponse: (res, ctx) => {\n const isHttpError = res.statusCode >= 400\n if (!isHttpError) {\n return res\n }\n\n throw new HttpError(res, ctx)\n },\n } satisfies Middleware\n}\n","import type {Middleware, MiddlewareHooks, MiddlewareResponse} from '../types'\n\n/** @public */\nexport function injectResponse(\n opts: {\n inject: (\n event: Parameters<MiddlewareHooks['interceptRequest']>[1],\n prevValue: Parameters<MiddlewareHooks['interceptRequest']>[0],\n ) => Partial<MiddlewareResponse | undefined | void>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } = {} as any,\n) {\n if (typeof opts.inject !== 'function') {\n throw new Error('`injectResponse` middleware requires a `inject` function')\n }\n\n const inject = function inject(prevValue, event) {\n const response = opts.inject(event, prevValue)\n if (!response) {\n return prevValue\n }\n\n // Merge defaults so we don't have to provide the most basic of details unless we want to\n const options = event.context.options\n return {\n body: '',\n url: options.url,\n method: options.method!,\n headers: {},\n statusCode: 200,\n statusMessage: 'OK',\n ...response,\n } satisfies MiddlewareResponse\n } satisfies Middleware['interceptRequest']\n\n return {interceptRequest: inject} satisfies Middleware\n}\n","export const isBuffer =\n typeof Buffer === 'undefined' ? () => false : (obj: unknown) => Buffer.isBuffer(obj)\n","import {isPlainObject} from 'is-plain-object'\n\nimport type {Middleware} from '../types'\nimport {isBuffer} from '../util/isBuffer'\n\nconst serializeTypes = ['boolean', 'string', 'number']\n\n/** @public */\nexport function jsonRequest() {\n return {\n processOptions: (options) => {\n const body = options.body\n if (!body) {\n return options\n }\n\n const isStream = typeof body.pipe === 'function'\n const shouldSerialize =\n !isStream &&\n !isBuffer(body) &&\n (serializeTypes.indexOf(typeof body) !== -1 || Array.isArray(body) || isPlainObject(body))\n\n if (!shouldSerialize) {\n return options\n }\n\n return Object.assign({}, options, {\n body: JSON.stringify(options.body),\n headers: Object.assign({}, options.headers, {\n 'Content-Type': 'application/json',\n }),\n })\n },\n } satisfies Middleware\n}\n","import type {Middleware} from '../types'\n\n/** @public */\nexport function jsonResponse(opts?: any) {\n return {\n onResponse: (response) => {\n const contentType = response.headers['content-type'] || ''\n const shouldDecode = (opts && opts.force) || contentType.indexOf('application/json') !== -1\n if (!response.body || !contentType || !shouldDecode) {\n return response\n }\n\n return Object.assign({}, response, {body: tryParse(response.body)})\n },\n\n processOptions: (options) =>\n Object.assign({}, options, {\n headers: Object.assign({Accept: 'application/json'}, options.headers),\n }),\n } satisfies Middleware\n\n function tryParse(body: any) {\n try {\n return JSON.parse(body)\n } catch (err: any) {\n err.message = `Failed to parsed response body as JSON: ${err.message}`\n throw err\n }\n }\n}\n","import type {RequestOptions} from '../types'\n\nexport function isBrowserOptions(options: unknown): options is RequestOptions {\n return typeof options === 'object' && options !== null && !('protocol' in options)\n}\n","import type {Middleware} from '../types'\nimport {isBrowserOptions} from '../util/isBrowserOptions'\n\n/** @public */\nexport function mtls(config: any = {}) {\n if (!config.ca) {\n throw new Error('Required mtls option \"ca\" is missing')\n }\n if (!config.cert) {\n throw new Error('Required mtls option \"cert\" is missing')\n }\n if (!config.key) {\n throw new Error('Required mtls option \"key\" is missing')\n }\n\n return {\n finalizeOptions: (options) => {\n if (isBrowserOptions(options)) {\n return options\n }\n\n const mtlsOpts = {\n cert: config.cert,\n key: config.key,\n ca: config.ca,\n }\n return Object.assign({}, options, mtlsOpts)\n },\n } satisfies Middleware\n}\n","let actualGlobal = {} as typeof globalThis\n\nif (typeof globalThis !== 'undefined') {\n actualGlobal = globalThis\n} else if (typeof window !== 'undefined') {\n actualGlobal = window\n} else if (typeof global !== 'undefined') {\n actualGlobal = global\n} else if (typeof self !== 'undefined') {\n actualGlobal = self\n}\n\nexport default actualGlobal\n","import type {Middleware} from '../types'\nimport global from '../util/global'\n\n/** @public */\nexport function observable(\n opts: {\n implementation?: any\n } = {},\n) {\n const Observable =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- @TODO consider dropping checking for a global Observable since it's not on a standards track\n opts.implementation || (global as any).Observable\n if (!Observable) {\n throw new Error(\n '`Observable` is not available in global scope, and no implementation was passed',\n )\n }\n\n return {\n onReturn: (channels, context) =>\n new Observable((observer: any) => {\n channels.error.subscribe((err) => observer.error(err))\n channels.progress.subscribe((event) =>\n observer.next(Object.assign({type: 'progress'}, event)),\n )\n channels.response.subscribe((response) => {\n observer.next(Object.assign({type: 'response'}, response))\n observer.complete()\n })\n\n channels.request.publish(context)\n return () => channels.abort.publish()\n }),\n } satisfies Middleware\n}\n","import type {Middleware} from '../../types'\n\nexport function progress() {\n return {\n onRequest: (evt) => {\n if (evt.adapter !== 'xhr') {\n return\n }\n\n const xhr = evt.request\n const context = evt.context\n\n if ('upload' in xhr && 'onprogress' in xhr.upload) {\n xhr.upload.onprogress = handleProgress('upload')\n }\n\n if ('onprogress' in xhr) {\n xhr.onprogress = handleProgress('download')\n }\n\n function handleProgress(stage: 'download' | 'upload') {\n return (event: any) => {\n const percent = event.lengthComputable ? (event.loaded / event.total) * 100 : -1\n context.channels.progress.publish({\n stage,\n percent,\n total: event.total,\n loaded: event.loaded,\n lengthComputable: event.lengthComputable,\n })\n }\n }\n },\n } satisfies Middleware\n}\n","import type {Middleware} from '../types'\n\n/** @public */\nexport const promise = (\n options: {onlyBody?: boolean; implementation?: PromiseConstructor} = {},\n) => {\n const PromiseImplementation = options.implementation || Promise\n if (!PromiseImplementation) {\n throw new Error('`Promise` is not available in global scope, and no implementation was passed')\n }\n\n return {\n onReturn: (channels, context) =>\n new PromiseImplementation((resolve, reject) => {\n const cancel = context.options.cancelToken\n if (cancel) {\n cancel.promise.then((reason: any) => {\n channels.abort.publish(reason)\n reject(reason)\n })\n }\n\n channels.error.subscribe(reject)\n channels.response.subscribe((response) => {\n resolve(options.onlyBody ? (response as any).body : response)\n })\n\n // Wait until next tick in case cancel has been performed\n setTimeout(() => {\n try {\n channels.request.publish(context)\n } catch (err) {\n reject(err)\n }\n }, 0)\n }),\n } satisfies Middleware\n}\n\n/**\n * The cancel token API is based on the [cancelable promises proposal](https://github.com/tc39/proposal-cancelable-promises), which is currently at Stage 1.\n *\n * Code shamelessly stolen/borrowed from MIT-licensed [axios](https://github.com/mzabriskie/axios). Thanks to [Nick Uraltsev](https://github.com/nickuraltsev), [Matt Zabriskie](https://github.com/mzabriskie) and the other contributors of that project!\n */\n/** @public */\nexport class Cancel {\n __CANCEL__ = true\n\n message: string | undefined\n\n constructor(message: string | undefined) {\n this.message = message\n }\n\n toString() {\n return `Cancel${this.message ? `: ${this.message}` : ''}`\n }\n}\n\n/** @public */\nexport class CancelToken {\n promise: Promise<any>\n reason?: Cancel\n\n constructor(executor: (cb: (message?: string) => void) => void) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.')\n }\n\n let resolvePromise: any = null\n\n this.promise = new Promise((resolve) => {\n resolvePromise = resolve\n })\n\n executor((message?: string) => {\n if (this.reason) {\n // Cancellation has already been requested\n return\n }\n\n this.reason = new Cancel(message)\n resolvePromise(this.reason)\n })\n }\n\n static source = () => {\n let cancel: (message?: string) => void\n const token = new CancelToken((can) => {\n cancel = can\n })\n\n return {\n token: token,\n cancel: cancel!,\n }\n }\n}\n\nconst isCancel = (value: any): value is Cancel => !!(value && value?.__CANCEL__)\n\npromise.Cancel = Cancel\npromise.CancelToken = CancelToken\npromise.isCancel = isCancel\n","import type {Middleware} from '../types'\n\n/** @public */\nexport function proxy(_proxy: any) {\n if (_proxy !== false && (!_proxy || !_proxy.host)) {\n throw new Error('Proxy middleware takes an object of host, port and auth properties')\n }\n\n return {\n processOptions: (options) => Object.assign({proxy: _proxy}, options),\n } satisfies Middleware\n}\n","export default (err: any, attempt: any, options: any) => {\n if (options.method !== 'GET' && options.method !== 'HEAD') {\n return false\n }\n\n return err.isNetworkError || false\n}\n","import type {Middleware, RetryOptions} from '../../types'\n\nconst isStream = (stream: any) =>\n stream !== null && typeof stream === 'object' && typeof stream.pipe === 'function'\n\n/** @public */\nexport default (opts: RetryOptions) => {\n const maxRetries = opts.maxRetries || 5\n const retryDelay = opts.retryDelay || getRetryDelay\n const allowRetry = opts.shouldRetry\n\n return {\n onError: (err, context) => {\n const options = context.options\n const max = options.maxRetries || maxRetries\n const shouldRetry = options.shouldRetry || allowRetry\n const attemptNumber = options.attemptNumber || 0\n\n // We can't retry if body is a stream, since it'll be drained\n if (isStream(options.body)) {\n return err\n }\n\n // Give up?\n if (!shouldRetry(err, attemptNumber, options) || attemptNumber >= max) {\n return err\n }\n\n // Create a new context with an increased attempt number, so we can exit if we reach a limit\n const newContext = Object.assign({}, context, {\n options: Object.assign({}, options, {attemptNumber: attemptNumber + 1}),\n })\n\n // Wait a given amount of time before doing the request again\n setTimeout(() => context.channels.request.publish(newContext), retryDelay(attemptNumber))\n\n // Signal that we've handled the error and that it should not propagate further\n return null\n },\n } satisfies Middleware\n}\n\nfunction getRetryDelay(attemptNum: number) {\n return 100 * Math.pow(2, attemptNum) + Math.random() * 100\n}\n","import type {RetryOptions} from '../../types'\nimport defaultShouldRetry from '../../util/browser-shouldRetry'\nimport sharedRetry from './shared-retry'\n\n/** @public */\nexport const retry = (opts: Partial<RetryOptions> = {}) =>\n sharedRetry({shouldRetry: defaultShouldRetry, ...opts})\n\nretry.shouldRetry = defaultShouldRetry\n","import {isPlainObject} from 'is-plain-object'\n\nimport type {Middleware} from '../types'\nimport {isBuffer} from '../util/isBuffer'\n\nfunction encode(data: Record<string, string | Set<number | string>>): string {\n const query = new URLSearchParams()\n\n const nest = (name: string, _value: unknown) => {\n const value = _value instanceof Set ? Array.from(_value) : _value\n if (Array.isArray(value)) {\n if (value.length) {\n for (const index in value) {\n nest(`${name}[${index}]`, value[index])\n }\n } else {\n query.append(`${name}[]`, '')\n }\n } else if (typeof value === 'object' && value !== null) {\n for (const [key, obj] of Object.entries(value)) {\n nest(`${name}[${key}]`, obj)\n }\n } else {\n query.append(name, value as string)\n }\n }\n\n for (const [key, value] of Object.entries(data)) {\n nest(key, value)\n }\n\n return query.toString()\n}\n\n/** @public */\nexport function urlEncoded() {\n return {\n processOptions: (options) => {\n const body = options.body\n if (!body) {\n return options\n }\n\n const isStream = typeof body.pipe === 'function'\n const shouldSerialize = !isStream && !isBuffer(body) && isPlainObject(body)\n\n if (!shouldSerialize) {\n return options\n }\n\n return {\n ...options,\n body: encode(options.body),\n headers: {\n ...options.headers,\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n }\n },\n } satisfies Middleware\n}\n","export function buildKeepAlive(agent: any) {\n return function keepAlive(config: any = {}): any {\n const ms = config.ms || 1000\n const maxFree = config.maxFree || 256\n const agentOptions = {\n keepAlive: true,\n keepAliveMsecs: ms,\n maxFreeSockets: maxFree,\n }\n\n return agent(agentOptions)\n }\n}\n","export * from './middleware/agent/browser-agent'\nexport * from './middleware/base'\nexport * from './middleware/debug'\nexport * from './middleware/defaultOptionsProcessor'\nexport * from './middleware/defaultOptionsValidator'\nexport * from './middleware/headers'\nexport * from './middleware/httpErrors'\nexport * from './middleware/injectResponse'\nexport * from './middleware/jsonRequest'\nexport * from './middleware/jsonResponse'\nexport * from './middleware/mtls'\nexport * from './middleware/observable'\nexport * from './middleware/progress/browser-progress'\nexport * from './middleware/promise'\nexport * from './middleware/proxy'\nexport * from './middleware/retry/browser-retry'\nexport * from './middleware/urlEncoded'\nexport type * from './types'\n\nimport {agent} from './middleware/agent/browser-agent'\nimport {buildKeepAlive} from './middleware/keepAlive'\n/** @public */\nexport const keepAlive = buildKeepAlive(agent)\n"],"names":["debugIt","headers","isPlainObject","global","agent"],"mappings":"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"}