diff options
Diffstat (limited to 'node_modules/got/dist/source')
46 files changed, 0 insertions, 4480 deletions
diff --git a/node_modules/got/dist/source/as-promise/create-rejection.d.ts b/node_modules/got/dist/source/as-promise/create-rejection.d.ts deleted file mode 100644 index f125a77..0000000 --- a/node_modules/got/dist/source/as-promise/create-rejection.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { CancelableRequest, BeforeErrorHook } from './types'; -export default function createRejection(error: Error, ...beforeErrorGroups: Array<BeforeErrorHook[] | undefined>): CancelableRequest<never>; diff --git a/node_modules/got/dist/source/as-promise/create-rejection.js b/node_modules/got/dist/source/as-promise/create-rejection.js deleted file mode 100644 index ce62604..0000000 --- a/node_modules/got/dist/source/as-promise/create-rejection.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const types_1 = require("./types"); -function createRejection(error, ...beforeErrorGroups) { - const promise = (async () => { - if (error instanceof types_1.RequestError) { - try { - for (const hooks of beforeErrorGroups) { - if (hooks) { - for (const hook of hooks) { - // eslint-disable-next-line no-await-in-loop - error = await hook(error); - } - } - } - } - catch (error_) { - error = error_; - } - } - throw error; - })(); - const returnPromise = () => promise; - promise.json = returnPromise; - promise.text = returnPromise; - promise.buffer = returnPromise; - promise.on = returnPromise; - return promise; -} -exports.default = createRejection; diff --git a/node_modules/got/dist/source/as-promise/index.d.ts b/node_modules/got/dist/source/as-promise/index.d.ts deleted file mode 100644 index f06720e..0000000 --- a/node_modules/got/dist/source/as-promise/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { NormalizedOptions, CancelableRequest } from './types'; -export default function asPromise<T>(normalizedOptions: NormalizedOptions): CancelableRequest<T>; -export * from './types'; diff --git a/node_modules/got/dist/source/as-promise/index.js b/node_modules/got/dist/source/as-promise/index.js deleted file mode 100644 index b4026d3..0000000 --- a/node_modules/got/dist/source/as-promise/index.js +++ /dev/null @@ -1,175 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const events_1 = require("events"); -const is_1 = require("@sindresorhus/is"); -const PCancelable = require("p-cancelable"); -const types_1 = require("./types"); -const parse_body_1 = require("./parse-body"); -const core_1 = require("../core"); -const proxy_events_1 = require("../core/utils/proxy-events"); -const get_buffer_1 = require("../core/utils/get-buffer"); -const is_response_ok_1 = require("../core/utils/is-response-ok"); -const proxiedRequestEvents = [ - 'request', - 'response', - 'redirect', - 'uploadProgress', - 'downloadProgress' -]; -function asPromise(normalizedOptions) { - let globalRequest; - let globalResponse; - const emitter = new events_1.EventEmitter(); - const promise = new PCancelable((resolve, reject, onCancel) => { - const makeRequest = (retryCount) => { - const request = new core_1.default(undefined, normalizedOptions); - request.retryCount = retryCount; - request._noPipe = true; - onCancel(() => request.destroy()); - onCancel.shouldReject = false; - onCancel(() => reject(new types_1.CancelError(request))); - globalRequest = request; - request.once('response', async (response) => { - var _a; - response.retryCount = retryCount; - if (response.request.aborted) { - // Canceled while downloading - will throw a `CancelError` or `TimeoutError` error - return; - } - // Download body - let rawBody; - try { - rawBody = await get_buffer_1.default(request); - response.rawBody = rawBody; - } - catch (_b) { - // The same error is caught below. - // See request.once('error') - return; - } - if (request._isAboutToError) { - return; - } - // Parse body - const contentEncoding = ((_a = response.headers['content-encoding']) !== null && _a !== void 0 ? _a : '').toLowerCase(); - const isCompressed = ['gzip', 'deflate', 'br'].includes(contentEncoding); - const { options } = request; - if (isCompressed && !options.decompress) { - response.body = rawBody; - } - else { - try { - response.body = parse_body_1.default(response, options.responseType, options.parseJson, options.encoding); - } - catch (error) { - // Fallback to `utf8` - response.body = rawBody.toString(); - if (is_response_ok_1.isResponseOk(response)) { - request._beforeError(error); - return; - } - } - } - try { - for (const [index, hook] of options.hooks.afterResponse.entries()) { - // @ts-expect-error TS doesn't notice that CancelableRequest is a Promise - // eslint-disable-next-line no-await-in-loop - response = await hook(response, async (updatedOptions) => { - const typedOptions = core_1.default.normalizeArguments(undefined, { - ...updatedOptions, - retry: { - calculateDelay: () => 0 - }, - throwHttpErrors: false, - resolveBodyOnly: false - }, options); - // Remove any further hooks for that request, because we'll call them anyway. - // The loop continues. We don't want duplicates (asPromise recursion). - typedOptions.hooks.afterResponse = typedOptions.hooks.afterResponse.slice(0, index); - for (const hook of typedOptions.hooks.beforeRetry) { - // eslint-disable-next-line no-await-in-loop - await hook(typedOptions); - } - const promise = asPromise(typedOptions); - onCancel(() => { - promise.catch(() => { }); - promise.cancel(); - }); - return promise; - }); - } - } - catch (error) { - request._beforeError(new types_1.RequestError(error.message, error, request)); - return; - } - globalResponse = response; - if (!is_response_ok_1.isResponseOk(response)) { - request._beforeError(new types_1.HTTPError(response)); - return; - } - resolve(request.options.resolveBodyOnly ? response.body : response); - }); - const onError = (error) => { - if (promise.isCanceled) { - return; - } - const { options } = request; - if (error instanceof types_1.HTTPError && !options.throwHttpErrors) { - const { response } = error; - resolve(request.options.resolveBodyOnly ? response.body : response); - return; - } - reject(error); - }; - request.once('error', onError); - const previousBody = request.options.body; - request.once('retry', (newRetryCount, error) => { - var _a, _b; - if (previousBody === ((_a = error.request) === null || _a === void 0 ? void 0 : _a.options.body) && is_1.default.nodeStream((_b = error.request) === null || _b === void 0 ? void 0 : _b.options.body)) { - onError(error); - return; - } - makeRequest(newRetryCount); - }); - proxy_events_1.default(request, emitter, proxiedRequestEvents); - }; - makeRequest(0); - }); - promise.on = (event, fn) => { - emitter.on(event, fn); - return promise; - }; - const shortcut = (responseType) => { - const newPromise = (async () => { - // Wait until downloading has ended - await promise; - const { options } = globalResponse.request; - return parse_body_1.default(globalResponse, responseType, options.parseJson, options.encoding); - })(); - Object.defineProperties(newPromise, Object.getOwnPropertyDescriptors(promise)); - return newPromise; - }; - promise.json = () => { - const { headers } = globalRequest.options; - if (!globalRequest.writableFinished && headers.accept === undefined) { - headers.accept = 'application/json'; - } - return shortcut('json'); - }; - promise.buffer = () => shortcut('buffer'); - promise.text = () => shortcut('text'); - return promise; -} -exports.default = asPromise; -__exportStar(require("./types"), exports); diff --git a/node_modules/got/dist/source/as-promise/normalize-arguments.d.ts b/node_modules/got/dist/source/as-promise/normalize-arguments.d.ts deleted file mode 100644 index 0b1e95f..0000000 --- a/node_modules/got/dist/source/as-promise/normalize-arguments.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { NormalizedOptions, Defaults } from './types'; -declare const normalizeArguments: (options: NormalizedOptions, defaults?: Defaults | undefined) => NormalizedOptions; -export default normalizeArguments; diff --git a/node_modules/got/dist/source/as-promise/normalize-arguments.js b/node_modules/got/dist/source/as-promise/normalize-arguments.js deleted file mode 100644 index 859feb9..0000000 --- a/node_modules/got/dist/source/as-promise/normalize-arguments.js +++ /dev/null @@ -1,78 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const is_1 = require("@sindresorhus/is"); -const normalizeArguments = (options, defaults) => { - if (is_1.default.null_(options.encoding)) { - throw new TypeError('To get a Buffer, set `options.responseType` to `buffer` instead'); - } - is_1.assert.any([is_1.default.string, is_1.default.undefined], options.encoding); - is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.resolveBodyOnly); - is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.methodRewriting); - is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.isStream); - is_1.assert.any([is_1.default.string, is_1.default.undefined], options.responseType); - // `options.responseType` - if (options.responseType === undefined) { - options.responseType = 'text'; - } - // `options.retry` - const { retry } = options; - if (defaults) { - options.retry = { ...defaults.retry }; - } - else { - options.retry = { - calculateDelay: retryObject => retryObject.computedValue, - limit: 0, - methods: [], - statusCodes: [], - errorCodes: [], - maxRetryAfter: undefined - }; - } - if (is_1.default.object(retry)) { - options.retry = { - ...options.retry, - ...retry - }; - options.retry.methods = [...new Set(options.retry.methods.map(method => method.toUpperCase()))]; - options.retry.statusCodes = [...new Set(options.retry.statusCodes)]; - options.retry.errorCodes = [...new Set(options.retry.errorCodes)]; - } - else if (is_1.default.number(retry)) { - options.retry.limit = retry; - } - if (is_1.default.undefined(options.retry.maxRetryAfter)) { - options.retry.maxRetryAfter = Math.min( - // TypeScript is not smart enough to handle `.filter(x => is.number(x))`. - // eslint-disable-next-line unicorn/no-fn-reference-in-iterator - ...[options.timeout.request, options.timeout.connect].filter(is_1.default.number)); - } - // `options.pagination` - if (is_1.default.object(options.pagination)) { - if (defaults) { - options.pagination = { - ...defaults.pagination, - ...options.pagination - }; - } - const { pagination } = options; - if (!is_1.default.function_(pagination.transform)) { - throw new Error('`options.pagination.transform` must be implemented'); - } - if (!is_1.default.function_(pagination.shouldContinue)) { - throw new Error('`options.pagination.shouldContinue` must be implemented'); - } - if (!is_1.default.function_(pagination.filter)) { - throw new TypeError('`options.pagination.filter` must be implemented'); - } - if (!is_1.default.function_(pagination.paginate)) { - throw new Error('`options.pagination.paginate` must be implemented'); - } - } - // JSON mode - if (options.responseType === 'json' && options.headers.accept === undefined) { - options.headers.accept = 'application/json'; - } - return options; -}; -exports.default = normalizeArguments; diff --git a/node_modules/got/dist/source/as-promise/parse-body.d.ts b/node_modules/got/dist/source/as-promise/parse-body.d.ts deleted file mode 100644 index 39d0b41..0000000 --- a/node_modules/got/dist/source/as-promise/parse-body.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { ResponseType, Response, ParseJsonFunction } from './types'; -declare const parseBody: (response: Response, responseType: ResponseType, parseJson: ParseJsonFunction, encoding?: "ascii" | "utf8" | "utf-8" | "utf16le" | "ucs2" | "ucs-2" | "base64" | "base64url" | "latin1" | "binary" | "hex" | undefined) => unknown; -export default parseBody; diff --git a/node_modules/got/dist/source/as-promise/parse-body.js b/node_modules/got/dist/source/as-promise/parse-body.js deleted file mode 100644 index cc2b806..0000000 --- a/node_modules/got/dist/source/as-promise/parse-body.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const types_1 = require("./types"); -const parseBody = (response, responseType, parseJson, encoding) => { - const { rawBody } = response; - try { - if (responseType === 'text') { - return rawBody.toString(encoding); - } - if (responseType === 'json') { - return rawBody.length === 0 ? '' : parseJson(rawBody.toString()); - } - if (responseType === 'buffer') { - return rawBody; - } - throw new types_1.ParseError({ - message: `Unknown body type '${responseType}'`, - name: 'Error' - }, response); - } - catch (error) { - throw new types_1.ParseError(error, response); - } -}; -exports.default = parseBody; diff --git a/node_modules/got/dist/source/as-promise/types.d.ts b/node_modules/got/dist/source/as-promise/types.d.ts deleted file mode 100644 index 16bb4cb..0000000 --- a/node_modules/got/dist/source/as-promise/types.d.ts +++ /dev/null @@ -1,256 +0,0 @@ -/// <reference types="node" /> -import PCancelable = require('p-cancelable'); -import Request, { Options, Response, RequestError, RequestEvents } from '../core'; -/** -All parsing methods supported by Got. -*/ -export declare type ResponseType = 'json' | 'buffer' | 'text'; -export interface PaginationOptions<T, R> { - /** - All options accepted by `got.paginate()`. - */ - pagination?: { - /** - A function that transform [`Response`](#response) into an array of items. - This is where you should do the parsing. - - @default response => JSON.parse(response.body) - */ - transform?: (response: Response<R>) => Promise<T[]> | T[]; - /** - Checks whether the item should be emitted or not. - - @default (item, allItems, currentItems) => true - */ - filter?: (item: T, allItems: T[], currentItems: T[]) => boolean; - /** - The function takes three arguments: - - `response` - The current response object. - - `allItems` - An array of the emitted items. - - `currentItems` - Items from the current response. - - It should return an object representing Got options pointing to the next page. - The options are merged automatically with the previous request, therefore the options returned `pagination.paginate(...)` must reflect changes only. - If there are no more pages, `false` should be returned. - - @example - ``` - const got = require('got'); - - (async () => { - const limit = 10; - - const items = got.paginate('https://example.com/items', { - searchParams: { - limit, - offset: 0 - }, - pagination: { - paginate: (response, allItems, currentItems) => { - const previousSearchParams = response.request.options.searchParams; - const previousOffset = previousSearchParams.get('offset'); - - if (currentItems.length < limit) { - return false; - } - - return { - searchParams: { - ...previousSearchParams, - offset: Number(previousOffset) + limit, - } - }; - } - } - }); - - console.log('Items from all pages:', items); - })(); - ``` - */ - paginate?: (response: Response<R>, allItems: T[], currentItems: T[]) => Options | false; - /** - Checks whether the pagination should continue. - - For example, if you need to stop **before** emitting an entry with some flag, you should use `(item, allItems, currentItems) => !item.flag`. - If you want to stop **after** emitting the entry, you should use `(item, allItems, currentItems) => allItems.some(entry => entry.flag)` instead. - - @default (item, allItems, currentItems) => true - */ - shouldContinue?: (item: T, allItems: T[], currentItems: T[]) => boolean; - /** - The maximum amount of items that should be emitted. - - @default Infinity - */ - countLimit?: number; - /** - Milliseconds to wait before the next request is triggered. - - @default 0 - */ - backoff?: number; - /** - The maximum amount of request that should be triggered. - Retries on failure are not counted towards this limit. - - For example, it can be helpful during development to avoid an infinite number of requests. - - @default 10000 - */ - requestLimit?: number; - /** - Defines how the parameter `allItems` in pagination.paginate, pagination.filter and pagination.shouldContinue is managed. - When set to `false`, the parameter `allItems` is always an empty array. - - This option can be helpful to save on memory usage when working with a large dataset. - */ - stackAllItems?: boolean; - }; -} -export declare type AfterResponseHook = (response: Response, retryWithMergedOptions: (options: Options) => CancelableRequest<Response>) => Response | CancelableRequest<Response> | Promise<Response | CancelableRequest<Response>>; -export declare namespace PromiseOnly { - interface Hooks { - /** - Called with [response object](#response) and a retry function. - Calling the retry function will trigger `beforeRetry` hooks. - - Each function should return the response. - This is especially useful when you want to refresh an access token. - - __Note__: When using streams, this hook is ignored. - - @example - ``` - const got = require('got'); - - const instance = got.extend({ - hooks: { - afterResponse: [ - (response, retryWithMergedOptions) => { - if (response.statusCode === 401) { // Unauthorized - const updatedOptions = { - headers: { - token: getNewToken() // Refresh the access token - } - }; - - // Save for further requests - instance.defaults.options = got.mergeOptions(instance.defaults.options, updatedOptions); - - // Make a new retry - return retryWithMergedOptions(updatedOptions); - } - - // No changes otherwise - return response; - } - ], - beforeRetry: [ - (options, error, retryCount) => { - // This will be called on `retryWithMergedOptions(...)` - } - ] - }, - mutableDefaults: true - }); - ``` - */ - afterResponse?: AfterResponseHook[]; - } - interface Options extends PaginationOptions<unknown, unknown> { - /** - The parsing method. - - The promise also has `.text()`, `.json()` and `.buffer()` methods which return another Got promise for the parsed body. - - It's like setting the options to `{responseType: 'json', resolveBodyOnly: true}` but without affecting the main Got promise. - - __Note__: When using streams, this option is ignored. - - @example - ``` - (async () => { - const responsePromise = got(url); - const bufferPromise = responsePromise.buffer(); - const jsonPromise = responsePromise.json(); - - const [response, buffer, json] = Promise.all([responsePromise, bufferPromise, jsonPromise]); - // `response` is an instance of Got Response - // `buffer` is an instance of Buffer - // `json` is an object - })(); - ``` - - @example - ``` - // This - const body = await got(url).json(); - - // is semantically the same as this - const body = await got(url, {responseType: 'json', resolveBodyOnly: true}); - ``` - */ - responseType?: ResponseType; - /** - When set to `true` the promise will return the Response body instead of the Response object. - - @default false - */ - resolveBodyOnly?: boolean; - /** - Returns a `Stream` instead of a `Promise`. - This is equivalent to calling `got.stream(url, options?)`. - - @default false - */ - isStream?: boolean; - /** - [Encoding](https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings) to be used on `setEncoding` of the response data. - - To get a [`Buffer`](https://nodejs.org/api/buffer.html), you need to set `responseType` to `buffer` instead. - Don't set this option to `null`. - - __Note__: This doesn't affect streams! Instead, you need to do `got.stream(...).setEncoding(encoding)`. - - @default 'utf-8' - */ - encoding?: BufferEncoding; - } - interface NormalizedOptions { - responseType: ResponseType; - resolveBodyOnly: boolean; - isStream: boolean; - encoding?: BufferEncoding; - pagination?: Required<PaginationOptions<unknown, unknown>['pagination']>; - } - interface Defaults { - responseType: ResponseType; - resolveBodyOnly: boolean; - isStream: boolean; - pagination?: Required<PaginationOptions<unknown, unknown>['pagination']>; - } - type HookEvent = 'afterResponse'; -} -/** -An error to be thrown when server response code is 2xx, and parsing body fails. -Includes a `response` property. -*/ -export declare class ParseError extends RequestError { - readonly response: Response; - constructor(error: Error, response: Response); -} -/** -An error to be thrown when the request is aborted with `.cancel()`. -*/ -export declare class CancelError extends RequestError { - readonly response: Response; - constructor(request: Request); - get isCanceled(): boolean; -} -export interface CancelableRequest<T extends Response | Response['body'] = Response['body']> extends PCancelable<T>, RequestEvents<CancelableRequest<T>> { - json: <ReturnType>() => CancelableRequest<ReturnType>; - buffer: () => CancelableRequest<Buffer>; - text: () => CancelableRequest<string>; -} -export * from '../core'; diff --git a/node_modules/got/dist/source/as-promise/types.js b/node_modules/got/dist/source/as-promise/types.js deleted file mode 100644 index b73110a..0000000 --- a/node_modules/got/dist/source/as-promise/types.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CancelError = exports.ParseError = void 0; -const core_1 = require("../core"); -/** -An error to be thrown when server response code is 2xx, and parsing body fails. -Includes a `response` property. -*/ -class ParseError extends core_1.RequestError { - constructor(error, response) { - const { options } = response.request; - super(`${error.message} in "${options.url.toString()}"`, error, response.request); - this.name = 'ParseError'; - this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_BODY_PARSE_FAILURE' : this.code; - } -} -exports.ParseError = ParseError; -/** -An error to be thrown when the request is aborted with `.cancel()`. -*/ -class CancelError extends core_1.RequestError { - constructor(request) { - super('Promise was canceled', {}, request); - this.name = 'CancelError'; - this.code = 'ERR_CANCELED'; - } - get isCanceled() { - return true; - } -} -exports.CancelError = CancelError; -__exportStar(require("../core"), exports); diff --git a/node_modules/got/dist/source/core/calculate-retry-delay.d.ts b/node_modules/got/dist/source/core/calculate-retry-delay.d.ts deleted file mode 100644 index 86eca8f..0000000 --- a/node_modules/got/dist/source/core/calculate-retry-delay.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { RetryFunction } from '.'; -declare type Returns<T extends (...args: any) => unknown, V> = (...args: Parameters<T>) => V; -export declare const retryAfterStatusCodes: ReadonlySet<number>; -declare const calculateRetryDelay: Returns<RetryFunction, number>; -export default calculateRetryDelay; diff --git a/node_modules/got/dist/source/core/calculate-retry-delay.js b/node_modules/got/dist/source/core/calculate-retry-delay.js deleted file mode 100644 index 99f604a..0000000 --- a/node_modules/got/dist/source/core/calculate-retry-delay.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.retryAfterStatusCodes = void 0; -exports.retryAfterStatusCodes = new Set([413, 429, 503]); -const calculateRetryDelay = ({ attemptCount, retryOptions, error, retryAfter }) => { - if (attemptCount > retryOptions.limit) { - return 0; - } - const hasMethod = retryOptions.methods.includes(error.options.method); - const hasErrorCode = retryOptions.errorCodes.includes(error.code); - const hasStatusCode = error.response && retryOptions.statusCodes.includes(error.response.statusCode); - if (!hasMethod || (!hasErrorCode && !hasStatusCode)) { - return 0; - } - if (error.response) { - if (retryAfter) { - if (retryOptions.maxRetryAfter === undefined || retryAfter > retryOptions.maxRetryAfter) { - return 0; - } - return retryAfter; - } - if (error.response.statusCode === 413) { - return 0; - } - } - const noise = Math.random() * 100; - return ((2 ** (attemptCount - 1)) * 1000) + noise; -}; -exports.default = calculateRetryDelay; diff --git a/node_modules/got/dist/source/core/index.d.ts b/node_modules/got/dist/source/core/index.d.ts deleted file mode 100644 index 803806e..0000000 --- a/node_modules/got/dist/source/core/index.d.ts +++ /dev/null @@ -1,1124 +0,0 @@ -/// <reference types="node" /> -import { Duplex, Readable } from 'stream'; -import { URL, URLSearchParams } from 'url'; -import { Socket } from 'net'; -import { SecureContextOptions, DetailedPeerCertificate } from 'tls'; -import http = require('http'); -import { ClientRequest, RequestOptions, ServerResponse, request as httpRequest } from 'http'; -import https = require('https'); -import { Timings, IncomingMessageWithTimings } from '@szmarczak/http-timer'; -import CacheableLookup from 'cacheable-lookup'; -import CacheableRequest = require('cacheable-request'); -import ResponseLike = require('responselike'); -import { Delays, TimeoutError as TimedOutTimeoutError } from './utils/timed-out'; -import { URLOptions } from './utils/options-to-url'; -import { DnsLookupIpVersion } from './utils/dns-ip-version'; -import { PromiseOnly } from '../as-promise/types'; -declare type HttpRequestFunction = typeof httpRequest; -declare type Error = NodeJS.ErrnoException; -declare const kRequest: unique symbol; -declare const kResponse: unique symbol; -declare const kResponseSize: unique symbol; -declare const kDownloadedSize: unique symbol; -declare const kBodySize: unique symbol; -declare const kUploadedSize: unique symbol; -declare const kServerResponsesPiped: unique symbol; -declare const kUnproxyEvents: unique symbol; -declare const kIsFromCache: unique symbol; -declare const kCancelTimeouts: unique symbol; -declare const kStartedReading: unique symbol; -declare const kStopReading: unique symbol; -declare const kTriggerRead: unique symbol; -declare const kBody: unique symbol; -declare const kJobs: unique symbol; -declare const kOriginalResponse: unique symbol; -declare const kRetryTimeout: unique symbol; -export declare const kIsNormalizedAlready: unique symbol; -export interface Agents { - http?: http.Agent; - https?: https.Agent; - http2?: unknown; -} -export declare const withoutBody: ReadonlySet<string>; -export interface ToughCookieJar { - getCookieString: ((currentUrl: string, options: Record<string, unknown>, cb: (err: Error | null, cookies: string) => void) => void) & ((url: string, callback: (error: Error | null, cookieHeader: string) => void) => void); - setCookie: ((cookieOrString: unknown, currentUrl: string, options: Record<string, unknown>, cb: (err: Error | null, cookie: unknown) => void) => void) & ((rawCookie: string, url: string, callback: (error: Error | null, result: unknown) => void) => void); -} -export interface PromiseCookieJar { - getCookieString: (url: string) => Promise<string>; - setCookie: (rawCookie: string, url: string) => Promise<unknown>; -} -/** -All available HTTP request methods provided by Got. -*/ -export declare type Method = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'HEAD' | 'DELETE' | 'OPTIONS' | 'TRACE' | 'get' | 'post' | 'put' | 'patch' | 'head' | 'delete' | 'options' | 'trace'; -declare type Promisable<T> = T | Promise<T>; -export declare type InitHook = (options: Options) => void; -export declare type BeforeRequestHook = (options: NormalizedOptions) => Promisable<void | Response | ResponseLike>; -export declare type BeforeRedirectHook = (options: NormalizedOptions, response: Response) => Promisable<void>; -export declare type BeforeErrorHook = (error: RequestError) => Promisable<RequestError>; -export declare type BeforeRetryHook = (options: NormalizedOptions, error?: RequestError, retryCount?: number) => void | Promise<void>; -interface PlainHooks { - /** - Called with plain request options, right before their normalization. - This is especially useful in conjunction with `got.extend()` when the input needs custom handling. - - __Note #1__: This hook must be synchronous! - - __Note #2__: Errors in this hook will be converted into an instances of `RequestError`. - - __Note #3__: The options object may not have a `url` property. - To modify it, use a `beforeRequest` hook instead. - - @default [] - */ - init?: InitHook[]; - /** - Called with normalized request options. - Got will make no further changes to the request before it is sent. - This is especially useful in conjunction with `got.extend()` when you want to create an API client that, for example, uses HMAC-signing. - - @default [] - */ - beforeRequest?: BeforeRequestHook[]; - /** - Called with normalized request options and the redirect response. - Got will make no further changes to the request. - This is especially useful when you want to avoid dead sites. - - @default [] - - @example - ``` - const got = require('got'); - - got('https://example.com', { - hooks: { - beforeRedirect: [ - (options, response) => { - if (options.hostname === 'deadSite') { - options.hostname = 'fallbackSite'; - } - } - ] - } - }); - ``` - */ - beforeRedirect?: BeforeRedirectHook[]; - /** - Called with an `Error` instance. - The error is passed to the hook right before it's thrown. - This is especially useful when you want to have more detailed errors. - - __Note__: Errors thrown while normalizing input options are thrown directly and not part of this hook. - - @default [] - - @example - ``` - const got = require('got'); - - got('https://api.github.com/some-endpoint', { - hooks: { - beforeError: [ - error => { - const {response} = error; - if (response && response.body) { - error.name = 'GitHubError'; - error.message = `${response.body.message} (${response.statusCode})`; - } - - return error; - } - ] - } - }); - ``` - */ - beforeError?: BeforeErrorHook[]; - /** - Called with normalized request options, the error and the retry count. - Got will make no further changes to the request. - This is especially useful when some extra work is required before the next try. - - __Note__: When using streams, this hook is ignored. - __Note__: When retrying in a `afterResponse` hook, all remaining `beforeRetry` hooks will be called without the `error` and `retryCount` arguments. - - @default [] - - @example - ``` - const got = require('got'); - - got.post('https://example.com', { - hooks: { - beforeRetry: [ - (options, error, retryCount) => { - if (error.response.statusCode === 413) { // Payload too large - options.body = getNewBody(); - } - } - ] - } - }); - ``` - */ - beforeRetry?: BeforeRetryHook[]; -} -/** -All available hook of Got. -*/ -export interface Hooks extends PromiseOnly.Hooks, PlainHooks { -} -declare type PlainHookEvent = 'init' | 'beforeRequest' | 'beforeRedirect' | 'beforeError' | 'beforeRetry'; -/** -All hook events acceptable by Got. -*/ -export declare type HookEvent = PromiseOnly.HookEvent | PlainHookEvent; -export declare const knownHookEvents: HookEvent[]; -declare type AcceptableResponse = IncomingMessageWithTimings | ResponseLike; -declare type AcceptableRequestResult = AcceptableResponse | ClientRequest | Promise<AcceptableResponse | ClientRequest> | undefined; -export declare type RequestFunction = (url: URL, options: RequestOptions, callback?: (response: AcceptableResponse) => void) => AcceptableRequestResult; -export declare type Headers = Record<string, string | string[] | undefined>; -declare type CheckServerIdentityFunction = (hostname: string, certificate: DetailedPeerCertificate) => Error | void; -export declare type ParseJsonFunction = (text: string) => unknown; -export declare type StringifyJsonFunction = (object: unknown) => string; -export interface RetryObject { - attemptCount: number; - retryOptions: RequiredRetryOptions; - error: TimeoutError | RequestError; - computedValue: number; - retryAfter?: number; -} -export declare type RetryFunction = (retryObject: RetryObject) => number | Promise<number>; -/** -An object representing `limit`, `calculateDelay`, `methods`, `statusCodes`, `maxRetryAfter` and `errorCodes` fields for maximum retry count, retry handler, allowed methods, allowed status codes, maximum [`Retry-After`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After) time and allowed error codes. - -Delays between retries counts with function `1000 * Math.pow(2, retry) + Math.random() * 100`, where `retry` is attempt number (starts from 1). - -The `calculateDelay` property is a `function` that receives an object with `attemptCount`, `retryOptions`, `error` and `computedValue` properties for current retry count, the retry options, error and default computed value. -The function must return a delay in milliseconds (or a Promise resolving with it) (`0` return value cancels retry). - -By default, it retries *only* on the specified methods, status codes, and on these network errors: -- `ETIMEDOUT`: One of the [timeout](#timeout) limits were reached. -- `ECONNRESET`: Connection was forcibly closed by a peer. -- `EADDRINUSE`: Could not bind to any free port. -- `ECONNREFUSED`: Connection was refused by the server. -- `EPIPE`: The remote side of the stream being written has been closed. -- `ENOTFOUND`: Couldn't resolve the hostname to an IP address. -- `ENETUNREACH`: No internet connection. -- `EAI_AGAIN`: DNS lookup timed out. - -__Note__: If `maxRetryAfter` is set to `undefined`, it will use `options.timeout`. -__Note__: If [`Retry-After`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After) header is greater than `maxRetryAfter`, it will cancel the request. -*/ -export interface RequiredRetryOptions { - limit: number; - methods: Method[]; - statusCodes: number[]; - errorCodes: string[]; - calculateDelay: RetryFunction; - maxRetryAfter?: number; -} -export interface CacheOptions { - shared?: boolean; - cacheHeuristic?: number; - immutableMinTimeToLive?: number; - ignoreCargoCult?: boolean; -} -interface PlainOptions extends URLOptions { - /** - Custom request function. - The main purpose of this is to [support HTTP2 using a wrapper](https://github.com/szmarczak/http2-wrapper). - - @default http.request | https.request - */ - request?: RequestFunction; - /** - An object representing `http`, `https` and `http2` keys for [`http.Agent`](https://nodejs.org/api/http.html#http_class_http_agent), [`https.Agent`](https://nodejs.org/api/https.html#https_class_https_agent) and [`http2wrapper.Agent`](https://github.com/szmarczak/http2-wrapper#new-http2agentoptions) instance. - This is necessary because a request to one protocol might redirect to another. - In such a scenario, Got will switch over to the right protocol agent for you. - - If a key is not present, it will default to a global agent. - - @example - ``` - const got = require('got'); - const HttpAgent = require('agentkeepalive'); - const {HttpsAgent} = HttpAgent; - - got('https://sindresorhus.com', { - agent: { - http: new HttpAgent(), - https: new HttpsAgent() - } - }); - ``` - */ - agent?: Agents | false; - /** - Decompress the response automatically. - This will set the `accept-encoding` header to `gzip, deflate, br` on Node.js 11.7.0+ or `gzip, deflate` for older Node.js versions, unless you set it yourself. - - Brotli (`br`) support requires Node.js 11.7.0 or later. - - If this is disabled, a compressed response is returned as a `Buffer`. - This may be useful if you want to handle decompression yourself or stream the raw compressed data. - - @default true - */ - decompress?: boolean; - /** - Milliseconds to wait for the server to end the response before aborting the request with `got.TimeoutError` error (a.k.a. `request` property). - By default, there's no timeout. - - This also accepts an `object` with the following fields to constrain the duration of each phase of the request lifecycle: - - - `lookup` starts when a socket is assigned and ends when the hostname has been resolved. - Does not apply when using a Unix domain socket. - - `connect` starts when `lookup` completes (or when the socket is assigned if lookup does not apply to the request) and ends when the socket is connected. - - `secureConnect` starts when `connect` completes and ends when the handshaking process completes (HTTPS only). - - `socket` starts when the socket is connected. See [request.setTimeout](https://nodejs.org/api/http.html#http_request_settimeout_timeout_callback). - - `response` starts when the request has been written to the socket and ends when the response headers are received. - - `send` starts when the socket is connected and ends with the request has been written to the socket. - - `request` starts when the request is initiated and ends when the response's end event fires. - */ - timeout?: Delays | number; - /** - When specified, `prefixUrl` will be prepended to `url`. - The prefix can be any valid URL, either relative or absolute. - A trailing slash `/` is optional - one will be added automatically. - - __Note__: `prefixUrl` will be ignored if the `url` argument is a URL instance. - - __Note__: Leading slashes in `input` are disallowed when using this option to enforce consistency and avoid confusion. - For example, when the prefix URL is `https://example.com/foo` and the input is `/bar`, there's ambiguity whether the resulting URL would become `https://example.com/foo/bar` or `https://example.com/bar`. - The latter is used by browsers. - - __Tip__: Useful when used with `got.extend()` to create niche-specific Got instances. - - __Tip__: You can change `prefixUrl` using hooks as long as the URL still includes the `prefixUrl`. - If the URL doesn't include it anymore, it will throw. - - @example - ``` - const got = require('got'); - - (async () => { - await got('unicorn', {prefixUrl: 'https://cats.com'}); - //=> 'https://cats.com/unicorn' - - const instance = got.extend({ - prefixUrl: 'https://google.com' - }); - - await instance('unicorn', { - hooks: { - beforeRequest: [ - options => { - options.prefixUrl = 'https://cats.com'; - } - ] - } - }); - //=> 'https://cats.com/unicorn' - })(); - ``` - */ - prefixUrl?: string | URL; - /** - __Note #1__: The `body` option cannot be used with the `json` or `form` option. - - __Note #2__: If you provide this option, `got.stream()` will be read-only. - - __Note #3__: If you provide a payload with the `GET` or `HEAD` method, it will throw a `TypeError` unless the method is `GET` and the `allowGetBody` option is set to `true`. - - __Note #4__: This option is not enumerable and will not be merged with the instance defaults. - - The `content-length` header will be automatically set if `body` is a `string` / `Buffer` / `fs.createReadStream` instance / [`form-data` instance](https://github.com/form-data/form-data), and `content-length` and `transfer-encoding` are not manually set in `options.headers`. - */ - body?: string | Buffer | Readable; - /** - The form body is converted to a query string using [`(new URLSearchParams(object)).toString()`](https://nodejs.org/api/url.html#url_constructor_new_urlsearchparams_obj). - - If the `Content-Type` header is not present, it will be set to `application/x-www-form-urlencoded`. - - __Note #1__: If you provide this option, `got.stream()` will be read-only. - - __Note #2__: This option is not enumerable and will not be merged with the instance defaults. - */ - form?: Record<string, any>; - /** - JSON body. If the `Content-Type` header is not set, it will be set to `application/json`. - - __Note #1__: If you provide this option, `got.stream()` will be read-only. - - __Note #2__: This option is not enumerable and will not be merged with the instance defaults. - */ - json?: Record<string, any>; - /** - The URL to request, as a string, a [`https.request` options object](https://nodejs.org/api/https.html#https_https_request_options_callback), or a [WHATWG `URL`](https://nodejs.org/api/url.html#url_class_url). - - Properties from `options` will override properties in the parsed `url`. - - If no protocol is specified, it will throw a `TypeError`. - - __Note__: The query string is **not** parsed as search params. - - @example - ``` - got('https://example.com/?query=a b'); //=> https://example.com/?query=a%20b - got('https://example.com/', {searchParams: {query: 'a b'}}); //=> https://example.com/?query=a+b - - // The query string is overridden by `searchParams` - got('https://example.com/?query=a b', {searchParams: {query: 'a b'}}); //=> https://example.com/?query=a+b - ``` - */ - url?: string | URL; - /** - Cookie support. You don't have to care about parsing or how to store them. - - __Note__: If you provide this option, `options.headers.cookie` will be overridden. - */ - cookieJar?: PromiseCookieJar | ToughCookieJar; - /** - Ignore invalid cookies instead of throwing an error. - Only useful when the `cookieJar` option has been set. Not recommended. - - @default false - */ - ignoreInvalidCookies?: boolean; - /** - Query string that will be added to the request URL. - This will override the query string in `url`. - - If you need to pass in an array, you can do it using a `URLSearchParams` instance. - - @example - ``` - const got = require('got'); - - const searchParams = new URLSearchParams([['key', 'a'], ['key', 'b']]); - - got('https://example.com', {searchParams}); - - console.log(searchParams.toString()); - //=> 'key=a&key=b' - ``` - */ - searchParams?: string | Record<string, string | number | boolean | null | undefined> | URLSearchParams; - /** - An instance of [`CacheableLookup`](https://github.com/szmarczak/cacheable-lookup) used for making DNS lookups. - Useful when making lots of requests to different *public* hostnames. - - `CacheableLookup` uses `dns.resolver4(..)` and `dns.resolver6(...)` under the hood and fall backs to `dns.lookup(...)` when the first two fail, which may lead to additional delay. - - __Note__: This should stay disabled when making requests to internal hostnames such as `localhost`, `database.local` etc. - - @default false - */ - dnsCache?: CacheableLookup | boolean; - /** - User data. In contrast to other options, `context` is not enumerable. - - __Note__: The object is never merged, it's just passed through. - Got will not modify the object in any way. - - @example - ``` - const got = require('got'); - - const instance = got.extend({ - hooks: { - beforeRequest: [ - options => { - if (!options.context || !options.context.token) { - throw new Error('Token required'); - } - - options.headers.token = options.context.token; - } - ] - } - }); - - (async () => { - const context = { - token: 'secret' - }; - - const response = await instance('https://httpbin.org/headers', {context}); - - // Let's see the headers - console.log(response.body); - })(); - ``` - */ - context?: Record<string, unknown>; - /** - Hooks allow modifications during the request lifecycle. - Hook functions may be async and are run serially. - */ - hooks?: Hooks; - /** - Defines if redirect responses should be followed automatically. - - Note that if a `303` is sent by the server in response to any request type (`POST`, `DELETE`, etc.), Got will automatically request the resource pointed to in the location header via `GET`. - This is in accordance with [the spec](https://tools.ietf.org/html/rfc7231#section-6.4.4). - - @default true - */ - followRedirect?: boolean; - /** - If exceeded, the request will be aborted and a `MaxRedirectsError` will be thrown. - - @default 10 - */ - maxRedirects?: number; - /** - A cache adapter instance for storing cached response data. - - @default false - */ - cache?: string | CacheableRequest.StorageAdapter | false; - /** - Determines if a `got.HTTPError` is thrown for unsuccessful responses. - - If this is disabled, requests that encounter an error status code will be resolved with the `response` instead of throwing. - This may be useful if you are checking for resource availability and are expecting error responses. - - @default true - */ - throwHttpErrors?: boolean; - username?: string; - password?: string; - /** - If set to `true`, Got will additionally accept HTTP2 requests. - - It will choose either HTTP/1.1 or HTTP/2 depending on the ALPN protocol. - - __Note__: Overriding `options.request` will disable HTTP2 support. - - __Note__: This option will default to `true` in the next upcoming major release. - - @default false - - @example - ``` - const got = require('got'); - - (async () => { - const {headers} = await got('https://nghttp2.org/httpbin/anything', {http2: true}); - console.log(headers.via); - //=> '2 nghttpx' - })(); - ``` - */ - http2?: boolean; - /** - Set this to `true` to allow sending body for the `GET` method. - However, the [HTTP/2 specification](https://tools.ietf.org/html/rfc7540#section-8.1.3) says that `An HTTP GET request includes request header fields and no payload body`, therefore when using the HTTP/2 protocol this option will have no effect. - This option is only meant to interact with non-compliant servers when you have no other choice. - - __Note__: The [RFC 7321](https://tools.ietf.org/html/rfc7231#section-4.3.1) doesn't specify any particular behavior for the GET method having a payload, therefore __it's considered an [anti-pattern](https://en.wikipedia.org/wiki/Anti-pattern)__. - - @default false - */ - allowGetBody?: boolean; - lookup?: CacheableLookup['lookup']; - /** - Request headers. - - Existing headers will be overwritten. Headers set to `undefined` will be omitted. - - @default {} - */ - headers?: Headers; - /** - By default, redirects will use [method rewriting](https://tools.ietf.org/html/rfc7231#section-6.4). - For example, when sending a POST request and receiving a `302`, it will resend the body to the new location using the same HTTP method (`POST` in this case). - - @default true - */ - methodRewriting?: boolean; - /** - Indicates which DNS record family to use. - - Values: - - `auto`: IPv4 (if present) or IPv6 - - `ipv4`: Only IPv4 - - `ipv6`: Only IPv6 - - __Note__: If you are using the undocumented option `family`, `dnsLookupIpVersion` will override it. - - @default 'auto' - */ - dnsLookupIpVersion?: DnsLookupIpVersion; - /** - A function used to parse JSON responses. - - @example - ``` - const got = require('got'); - const Bourne = require('@hapi/bourne'); - - (async () => { - const parsed = await got('https://example.com', { - parseJson: text => Bourne.parse(text) - }).json(); - - console.log(parsed); - })(); - ``` - */ - parseJson?: ParseJsonFunction; - /** - A function used to stringify the body of JSON requests. - - @example - ``` - const got = require('got'); - - (async () => { - await got.post('https://example.com', { - stringifyJson: object => JSON.stringify(object, (key, value) => { - if (key.startsWith('_')) { - return; - } - - return value; - }), - json: { - some: 'payload', - _ignoreMe: 1234 - } - }); - })(); - ``` - - @example - ``` - const got = require('got'); - - (async () => { - await got.post('https://example.com', { - stringifyJson: object => JSON.stringify(object, (key, value) => { - if (typeof value === 'number') { - return value.toString(); - } - - return value; - }), - json: { - some: 'payload', - number: 1 - } - }); - })(); - ``` - */ - stringifyJson?: StringifyJsonFunction; - /** - An object representing `limit`, `calculateDelay`, `methods`, `statusCodes`, `maxRetryAfter` and `errorCodes` fields for maximum retry count, retry handler, allowed methods, allowed status codes, maximum [`Retry-After`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After) time and allowed error codes. - - Delays between retries counts with function `1000 * Math.pow(2, retry) + Math.random() * 100`, where `retry` is attempt number (starts from 1). - - The `calculateDelay` property is a `function` that receives an object with `attemptCount`, `retryOptions`, `error` and `computedValue` properties for current retry count, the retry options, error and default computed value. - The function must return a delay in milliseconds (or a Promise resolving with it) (`0` return value cancels retry). - - By default, it retries *only* on the specified methods, status codes, and on these network errors: - - - `ETIMEDOUT`: One of the [timeout](#timeout) limits were reached. - - `ECONNRESET`: Connection was forcibly closed by a peer. - - `EADDRINUSE`: Could not bind to any free port. - - `ECONNREFUSED`: Connection was refused by the server. - - `EPIPE`: The remote side of the stream being written has been closed. - - `ENOTFOUND`: Couldn't resolve the hostname to an IP address. - - `ENETUNREACH`: No internet connection. - - `EAI_AGAIN`: DNS lookup timed out. - - __Note__: If `maxRetryAfter` is set to `undefined`, it will use `options.timeout`. - __Note__: If [`Retry-After`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After) header is greater than `maxRetryAfter`, it will cancel the request. - */ - retry?: Partial<RequiredRetryOptions> | number; - /** - The IP address used to send the request from. - */ - localAddress?: string; - socketPath?: string; - /** - The HTTP method used to make the request. - - @default 'GET' - */ - method?: Method; - createConnection?: (options: http.RequestOptions, oncreate: (error: Error, socket: Socket) => void) => Socket; - cacheOptions?: CacheOptions; - /** - If set to `false`, all invalid SSL certificates will be ignored and no error will be thrown. - - If set to `true`, it will throw an error whenever an invalid SSL certificate is detected. - - We strongly recommend to have this set to `true` for security reasons. - - @default true - - @example - ``` - const got = require('got'); - - (async () => { - // Correct: - await got('https://example.com', {rejectUnauthorized: true}); - - // You can disable it when developing an HTTPS app: - await got('https://localhost', {rejectUnauthorized: false}); - - // Never do this: - await got('https://example.com', {rejectUnauthorized: false}); - })(); - ``` - */ - rejectUnauthorized?: boolean; - /** - Options for the advanced HTTPS API. - */ - https?: HTTPSOptions; -} -export interface Options extends PromiseOnly.Options, PlainOptions { -} -export interface HTTPSOptions { - rejectUnauthorized?: https.RequestOptions['rejectUnauthorized']; - checkServerIdentity?: CheckServerIdentityFunction; - /** - Override the default Certificate Authorities ([from Mozilla](https://ccadb-public.secure.force.com/mozilla/IncludedCACertificateReport)). - - @example - ``` - // Single Certificate Authority - got('https://example.com', { - https: { - certificateAuthority: fs.readFileSync('./my_ca.pem') - } - }); - ``` - */ - certificateAuthority?: SecureContextOptions['ca']; - /** - Private keys in [PEM](https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail) format. - - [PEM](https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail) allows the option of private keys being encrypted. - Encrypted keys will be decrypted with `options.https.passphrase`. - - Multiple keys with different passphrases can be provided as an array of `{pem: <string | Buffer>, passphrase: <string>}` - */ - key?: SecureContextOptions['key']; - /** - [Certificate chains](https://en.wikipedia.org/wiki/X.509#Certificate_chains_and_cross-certification) in [PEM](https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail) format. - - One cert chain should be provided per private key (`options.https.key`). - - When providing multiple cert chains, they do not have to be in the same order as their private keys in `options.https.key`. - - If the intermediate certificates are not provided, the peer will not be able to validate the certificate, and the handshake will fail. - */ - certificate?: SecureContextOptions['cert']; - /** - The passphrase to decrypt the `options.https.key` (if different keys have different passphrases refer to `options.https.key` documentation). - */ - passphrase?: SecureContextOptions['passphrase']; - pfx?: SecureContextOptions['pfx']; -} -interface NormalizedPlainOptions extends PlainOptions { - method: Method; - url: URL; - timeout: Delays; - prefixUrl: string; - ignoreInvalidCookies: boolean; - decompress: boolean; - searchParams?: URLSearchParams; - cookieJar?: PromiseCookieJar; - headers: Headers; - context: Record<string, unknown>; - hooks: Required<Hooks>; - followRedirect: boolean; - maxRedirects: number; - cache?: string | CacheableRequest.StorageAdapter; - throwHttpErrors: boolean; - dnsCache?: CacheableLookup; - http2: boolean; - allowGetBody: boolean; - rejectUnauthorized: boolean; - lookup?: CacheableLookup['lookup']; - methodRewriting: boolean; - username: string; - password: string; - parseJson: ParseJsonFunction; - stringifyJson: StringifyJsonFunction; - retry: RequiredRetryOptions; - cacheOptions: CacheOptions; - [kRequest]: HttpRequestFunction; - [kIsNormalizedAlready]?: boolean; -} -export interface NormalizedOptions extends PromiseOnly.NormalizedOptions, NormalizedPlainOptions { -} -interface PlainDefaults { - timeout: Delays; - prefixUrl: string; - method: Method; - ignoreInvalidCookies: boolean; - decompress: boolean; - context: Record<string, unknown>; - cookieJar?: PromiseCookieJar | ToughCookieJar; - dnsCache?: CacheableLookup; - headers: Headers; - hooks: Required<Hooks>; - followRedirect: boolean; - maxRedirects: number; - cache?: string | CacheableRequest.StorageAdapter; - throwHttpErrors: boolean; - http2: boolean; - allowGetBody: boolean; - https?: HTTPSOptions; - methodRewriting: boolean; - parseJson: ParseJsonFunction; - stringifyJson: StringifyJsonFunction; - retry: RequiredRetryOptions; - agent?: Agents | false; - request?: RequestFunction; - searchParams?: URLSearchParams; - lookup?: CacheableLookup['lookup']; - localAddress?: string; - createConnection?: Options['createConnection']; - cacheOptions: CacheOptions; -} -export interface Defaults extends PromiseOnly.Defaults, PlainDefaults { -} -export interface Progress { - percent: number; - transferred: number; - total?: number; -} -export interface PlainResponse extends IncomingMessageWithTimings { - /** - The original request URL. - */ - requestUrl: string; - /** - The redirect URLs. - */ - redirectUrls: string[]; - /** - - `options` - The Got options that were set on this request. - - __Note__: This is not a [http.ClientRequest](https://nodejs.org/api/http.html#http_class_http_clientrequest). - */ - request: Request; - /** - The remote IP address. - - This is hopefully a temporary limitation, see [lukechilds/cacheable-request#86](https://github.com/lukechilds/cacheable-request/issues/86). - - __Note__: Not available when the response is cached. - */ - ip?: string; - /** - Whether the response was retrieved from the cache. - */ - isFromCache: boolean; - /** - The status code of the response. - */ - statusCode: number; - /** - The request URL or the final URL after redirects. - */ - url: string; - /** - The object contains the following properties: - - - `start` - Time when the request started. - - `socket` - Time when a socket was assigned to the request. - - `lookup` - Time when the DNS lookup finished. - - `connect` - Time when the socket successfully connected. - - `secureConnect` - Time when the socket securely connected. - - `upload` - Time when the request finished uploading. - - `response` - Time when the request fired `response` event. - - `end` - Time when the response fired `end` event. - - `error` - Time when the request fired `error` event. - - `abort` - Time when the request fired `abort` event. - - `phases` - - `wait` - `timings.socket - timings.start` - - `dns` - `timings.lookup - timings.socket` - - `tcp` - `timings.connect - timings.lookup` - - `tls` - `timings.secureConnect - timings.connect` - - `request` - `timings.upload - (timings.secureConnect || timings.connect)` - - `firstByte` - `timings.response - timings.upload` - - `download` - `timings.end - timings.response` - - `total` - `(timings.end || timings.error || timings.abort) - timings.start` - - If something has not been measured yet, it will be `undefined`. - - __Note__: The time is a `number` representing the milliseconds elapsed since the UNIX epoch. - */ - timings: Timings; - /** - The number of times the request was retried. - */ - retryCount: number; - /** - The raw result of the request. - */ - rawBody?: Buffer; - /** - The result of the request. - */ - body?: unknown; -} -export interface Response<T = unknown> extends PlainResponse { - /** - The result of the request. - */ - body: T; - /** - The raw result of the request. - */ - rawBody: Buffer; -} -export interface RequestEvents<T> { - /** - `request` event to get the request object of the request. - - __Tip__: You can use `request` event to abort requests. - - @example - ``` - got.stream('https://github.com') - .on('request', request => setTimeout(() => request.destroy(), 50)); - ``` - */ - on: ((name: 'request', listener: (request: http.ClientRequest) => void) => T) - /** - The `response` event to get the response object of the final request. - */ - & (<R extends Response>(name: 'response', listener: (response: R) => void) => T) - /** - The `redirect` event to get the response object of a redirect. The second argument is options for the next request to the redirect location. - */ - & (<R extends Response, N extends NormalizedOptions>(name: 'redirect', listener: (response: R, nextOptions: N) => void) => T) - /** - Progress events for uploading (sending a request) and downloading (receiving a response). - The `progress` argument is an object like: - - ```js - { - percent: 0.1, - transferred: 1024, - total: 10240 - } - ``` - - If the `content-length` header is missing, `total` will be `undefined`. - - @example - ```js - (async () => { - const response = await got('https://sindresorhus.com') - .on('downloadProgress', progress => { - // Report download progress - }) - .on('uploadProgress', progress => { - // Report upload progress - }); - - console.log(response); - })(); - ``` - */ - & ((name: 'uploadProgress' | 'downloadProgress', listener: (progress: Progress) => void) => T) - /** - To enable retrying on a Got stream, it is required to have a `retry` handler attached. - - When this event is emitted, you should reset the stream you were writing to and prepare the body again. - - See `got.options.retry` for more information. - */ - & ((name: 'retry', listener: (retryCount: number, error: RequestError) => void) => T); -} -export declare const setNonEnumerableProperties: (sources: Array<Options | Defaults | undefined>, to: Options) => void; -/** -An error to be thrown when a request fails. -Contains a `code` property with error class code, like `ECONNREFUSED`. -*/ -export declare class RequestError extends Error { - code: string; - stack: string; - readonly options: NormalizedOptions; - readonly response?: Response; - readonly request?: Request; - readonly timings?: Timings; - constructor(message: string, error: Partial<Error & { - code?: string; - }>, self: Request | NormalizedOptions); -} -/** -An error to be thrown when the server redirects you more than ten times. -Includes a `response` property. -*/ -export declare class MaxRedirectsError extends RequestError { - readonly response: Response; - readonly request: Request; - readonly timings: Timings; - constructor(request: Request); -} -/** -An error to be thrown when the server response code is not 2xx nor 3xx if `options.followRedirect` is `true`, but always except for 304. -Includes a `response` property. -*/ -export declare class HTTPError extends RequestError { - readonly response: Response; - readonly request: Request; - readonly timings: Timings; - constructor(response: Response); -} -/** -An error to be thrown when a cache method fails. -For example, if the database goes down or there's a filesystem error. -*/ -export declare class CacheError extends RequestError { - readonly request: Request; - constructor(error: Error, request: Request); -} -/** -An error to be thrown when the request body is a stream and an error occurs while reading from that stream. -*/ -export declare class UploadError extends RequestError { - readonly request: Request; - constructor(error: Error, request: Request); -} -/** -An error to be thrown when the request is aborted due to a timeout. -Includes an `event` and `timings` property. -*/ -export declare class TimeoutError extends RequestError { - readonly request: Request; - readonly timings: Timings; - readonly event: string; - constructor(error: TimedOutTimeoutError, timings: Timings, request: Request); -} -/** -An error to be thrown when reading from response stream fails. -*/ -export declare class ReadError extends RequestError { - readonly request: Request; - readonly response: Response; - readonly timings: Timings; - constructor(error: Error, request: Request); -} -/** -An error to be thrown when given an unsupported protocol. -*/ -export declare class UnsupportedProtocolError extends RequestError { - constructor(options: NormalizedOptions); -} -export default class Request extends Duplex implements RequestEvents<Request> { - ['constructor']: typeof Request; - [kUnproxyEvents]: () => void; - _cannotHaveBody: boolean; - [kDownloadedSize]: number; - [kUploadedSize]: number; - [kStopReading]: boolean; - [kTriggerRead]: boolean; - [kBody]: Options['body']; - [kJobs]: Array<() => void>; - [kRetryTimeout]?: NodeJS.Timeout; - [kBodySize]?: number; - [kServerResponsesPiped]: Set<ServerResponse>; - [kIsFromCache]?: boolean; - [kStartedReading]?: boolean; - [kCancelTimeouts]?: () => void; - [kResponseSize]?: number; - [kResponse]?: IncomingMessageWithTimings; - [kOriginalResponse]?: IncomingMessageWithTimings; - [kRequest]?: ClientRequest; - _noPipe?: boolean; - _progressCallbacks: Array<() => void>; - options: NormalizedOptions; - requestUrl: string; - requestInitialized: boolean; - redirects: string[]; - retryCount: number; - constructor(url: string | URL | undefined, options?: Options, defaults?: Defaults); - static normalizeArguments(url?: string | URL, options?: Options, defaults?: Defaults): NormalizedOptions; - _lockWrite(): void; - _unlockWrite(): void; - _finalizeBody(): Promise<void>; - _onResponseBase(response: IncomingMessageWithTimings): Promise<void>; - _onResponse(response: IncomingMessageWithTimings): Promise<void>; - _onRequest(request: ClientRequest): void; - _createCacheableRequest(url: URL, options: RequestOptions): Promise<ClientRequest | ResponseLike>; - _makeRequest(): Promise<void>; - _error(error: RequestError): Promise<void>; - _beforeError(error: Error): void; - _read(): void; - _write(chunk: any, encoding: string | undefined, callback: (error?: Error | null) => void): void; - _writeRequest(chunk: any, encoding: BufferEncoding | undefined, callback: (error?: Error | null) => void): void; - _final(callback: (error?: Error | null) => void): void; - _destroy(error: Error | null, callback: (error: Error | null) => void): void; - get _isAboutToError(): boolean; - /** - The remote IP address. - */ - get ip(): string | undefined; - /** - Indicates whether the request has been aborted or not. - */ - get aborted(): boolean; - get socket(): Socket | undefined; - /** - Progress event for downloading (receiving a response). - */ - get downloadProgress(): Progress; - /** - Progress event for uploading (sending a request). - */ - get uploadProgress(): Progress; - /** - The object contains the following properties: - - - `start` - Time when the request started. - - `socket` - Time when a socket was assigned to the request. - - `lookup` - Time when the DNS lookup finished. - - `connect` - Time when the socket successfully connected. - - `secureConnect` - Time when the socket securely connected. - - `upload` - Time when the request finished uploading. - - `response` - Time when the request fired `response` event. - - `end` - Time when the response fired `end` event. - - `error` - Time when the request fired `error` event. - - `abort` - Time when the request fired `abort` event. - - `phases` - - `wait` - `timings.socket - timings.start` - - `dns` - `timings.lookup - timings.socket` - - `tcp` - `timings.connect - timings.lookup` - - `tls` - `timings.secureConnect - timings.connect` - - `request` - `timings.upload - (timings.secureConnect || timings.connect)` - - `firstByte` - `timings.response - timings.upload` - - `download` - `timings.end - timings.response` - - `total` - `(timings.end || timings.error || timings.abort) - timings.start` - - If something has not been measured yet, it will be `undefined`. - - __Note__: The time is a `number` representing the milliseconds elapsed since the UNIX epoch. - */ - get timings(): Timings | undefined; - /** - Whether the response was retrieved from the cache. - */ - get isFromCache(): boolean | undefined; - pipe<T extends NodeJS.WritableStream>(destination: T, options?: { - end?: boolean; - }): T; - unpipe<T extends NodeJS.WritableStream>(destination: T): this; -} -export {}; diff --git a/node_modules/got/dist/source/core/index.js b/node_modules/got/dist/source/core/index.js deleted file mode 100644 index c6cebd5..0000000 --- a/node_modules/got/dist/source/core/index.js +++ /dev/null @@ -1,1505 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UnsupportedProtocolError = exports.ReadError = exports.TimeoutError = exports.UploadError = exports.CacheError = exports.HTTPError = exports.MaxRedirectsError = exports.RequestError = exports.setNonEnumerableProperties = exports.knownHookEvents = exports.withoutBody = exports.kIsNormalizedAlready = void 0; -const util_1 = require("util"); -const stream_1 = require("stream"); -const fs_1 = require("fs"); -const url_1 = require("url"); -const http = require("http"); -const http_1 = require("http"); -const https = require("https"); -const http_timer_1 = require("@szmarczak/http-timer"); -const cacheable_lookup_1 = require("cacheable-lookup"); -const CacheableRequest = require("cacheable-request"); -const decompressResponse = require("decompress-response"); -// @ts-expect-error Missing types -const http2wrapper = require("http2-wrapper"); -const lowercaseKeys = require("lowercase-keys"); -const is_1 = require("@sindresorhus/is"); -const get_body_size_1 = require("./utils/get-body-size"); -const is_form_data_1 = require("./utils/is-form-data"); -const proxy_events_1 = require("./utils/proxy-events"); -const timed_out_1 = require("./utils/timed-out"); -const url_to_options_1 = require("./utils/url-to-options"); -const options_to_url_1 = require("./utils/options-to-url"); -const weakable_map_1 = require("./utils/weakable-map"); -const get_buffer_1 = require("./utils/get-buffer"); -const dns_ip_version_1 = require("./utils/dns-ip-version"); -const is_response_ok_1 = require("./utils/is-response-ok"); -const deprecation_warning_1 = require("../utils/deprecation-warning"); -const normalize_arguments_1 = require("../as-promise/normalize-arguments"); -const calculate_retry_delay_1 = require("./calculate-retry-delay"); -let globalDnsCache; -const kRequest = Symbol('request'); -const kResponse = Symbol('response'); -const kResponseSize = Symbol('responseSize'); -const kDownloadedSize = Symbol('downloadedSize'); -const kBodySize = Symbol('bodySize'); -const kUploadedSize = Symbol('uploadedSize'); -const kServerResponsesPiped = Symbol('serverResponsesPiped'); -const kUnproxyEvents = Symbol('unproxyEvents'); -const kIsFromCache = Symbol('isFromCache'); -const kCancelTimeouts = Symbol('cancelTimeouts'); -const kStartedReading = Symbol('startedReading'); -const kStopReading = Symbol('stopReading'); -const kTriggerRead = Symbol('triggerRead'); -const kBody = Symbol('body'); -const kJobs = Symbol('jobs'); -const kOriginalResponse = Symbol('originalResponse'); -const kRetryTimeout = Symbol('retryTimeout'); -exports.kIsNormalizedAlready = Symbol('isNormalizedAlready'); -const supportsBrotli = is_1.default.string(process.versions.brotli); -exports.withoutBody = new Set(['GET', 'HEAD']); -exports.knownHookEvents = [ - 'init', - 'beforeRequest', - 'beforeRedirect', - 'beforeError', - 'beforeRetry', - // Promise-Only - 'afterResponse' -]; -function validateSearchParameters(searchParameters) { - // eslint-disable-next-line guard-for-in - for (const key in searchParameters) { - const value = searchParameters[key]; - if (!is_1.default.string(value) && !is_1.default.number(value) && !is_1.default.boolean(value) && !is_1.default.null_(value) && !is_1.default.undefined(value)) { - throw new TypeError(`The \`searchParams\` value '${String(value)}' must be a string, number, boolean or null`); - } - } -} -function isClientRequest(clientRequest) { - return is_1.default.object(clientRequest) && !('statusCode' in clientRequest); -} -const cacheableStore = new weakable_map_1.default(); -const waitForOpenFile = async (file) => new Promise((resolve, reject) => { - const onError = (error) => { - reject(error); - }; - // Node.js 12 has incomplete types - if (!file.pending) { - resolve(); - } - file.once('error', onError); - file.once('ready', () => { - file.off('error', onError); - resolve(); - }); -}); -const redirectCodes = new Set([300, 301, 302, 303, 304, 307, 308]); -const nonEnumerableProperties = [ - 'context', - 'body', - 'json', - 'form' -]; -exports.setNonEnumerableProperties = (sources, to) => { - // Non enumerable properties shall not be merged - const properties = {}; - for (const source of sources) { - if (!source) { - continue; - } - for (const name of nonEnumerableProperties) { - if (!(name in source)) { - continue; - } - properties[name] = { - writable: true, - configurable: true, - enumerable: false, - // @ts-expect-error TS doesn't see the check above - value: source[name] - }; - } - } - Object.defineProperties(to, properties); -}; -/** -An error to be thrown when a request fails. -Contains a `code` property with error class code, like `ECONNREFUSED`. -*/ -class RequestError extends Error { - constructor(message, error, self) { - var _a, _b; - super(message); - Error.captureStackTrace(this, this.constructor); - this.name = 'RequestError'; - this.code = (_a = error.code) !== null && _a !== void 0 ? _a : 'ERR_GOT_REQUEST_ERROR'; - if (self instanceof Request) { - Object.defineProperty(this, 'request', { - enumerable: false, - value: self - }); - Object.defineProperty(this, 'response', { - enumerable: false, - value: self[kResponse] - }); - Object.defineProperty(this, 'options', { - // This fails because of TS 3.7.2 useDefineForClassFields - // Ref: https://github.com/microsoft/TypeScript/issues/34972 - enumerable: false, - value: self.options - }); - } - else { - Object.defineProperty(this, 'options', { - // This fails because of TS 3.7.2 useDefineForClassFields - // Ref: https://github.com/microsoft/TypeScript/issues/34972 - enumerable: false, - value: self - }); - } - this.timings = (_b = this.request) === null || _b === void 0 ? void 0 : _b.timings; - // Recover the original stacktrace - if (is_1.default.string(error.stack) && is_1.default.string(this.stack)) { - const indexOfMessage = this.stack.indexOf(this.message) + this.message.length; - const thisStackTrace = this.stack.slice(indexOfMessage).split('\n').reverse(); - const errorStackTrace = error.stack.slice(error.stack.indexOf(error.message) + error.message.length).split('\n').reverse(); - // Remove duplicated traces - while (errorStackTrace.length !== 0 && errorStackTrace[0] === thisStackTrace[0]) { - thisStackTrace.shift(); - } - this.stack = `${this.stack.slice(0, indexOfMessage)}${thisStackTrace.reverse().join('\n')}${errorStackTrace.reverse().join('\n')}`; - } - } -} -exports.RequestError = RequestError; -/** -An error to be thrown when the server redirects you more than ten times. -Includes a `response` property. -*/ -class MaxRedirectsError extends RequestError { - constructor(request) { - super(`Redirected ${request.options.maxRedirects} times. Aborting.`, {}, request); - this.name = 'MaxRedirectsError'; - this.code = 'ERR_TOO_MANY_REDIRECTS'; - } -} -exports.MaxRedirectsError = MaxRedirectsError; -/** -An error to be thrown when the server response code is not 2xx nor 3xx if `options.followRedirect` is `true`, but always except for 304. -Includes a `response` property. -*/ -class HTTPError extends RequestError { - constructor(response) { - super(`Response code ${response.statusCode} (${response.statusMessage})`, {}, response.request); - this.name = 'HTTPError'; - this.code = 'ERR_NON_2XX_3XX_RESPONSE'; - } -} -exports.HTTPError = HTTPError; -/** -An error to be thrown when a cache method fails. -For example, if the database goes down or there's a filesystem error. -*/ -class CacheError extends RequestError { - constructor(error, request) { - super(error.message, error, request); - this.name = 'CacheError'; - this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_CACHE_ACCESS' : this.code; - } -} -exports.CacheError = CacheError; -/** -An error to be thrown when the request body is a stream and an error occurs while reading from that stream. -*/ -class UploadError extends RequestError { - constructor(error, request) { - super(error.message, error, request); - this.name = 'UploadError'; - this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_UPLOAD' : this.code; - } -} -exports.UploadError = UploadError; -/** -An error to be thrown when the request is aborted due to a timeout. -Includes an `event` and `timings` property. -*/ -class TimeoutError extends RequestError { - constructor(error, timings, request) { - super(error.message, error, request); - this.name = 'TimeoutError'; - this.event = error.event; - this.timings = timings; - } -} -exports.TimeoutError = TimeoutError; -/** -An error to be thrown when reading from response stream fails. -*/ -class ReadError extends RequestError { - constructor(error, request) { - super(error.message, error, request); - this.name = 'ReadError'; - this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_READING_RESPONSE_STREAM' : this.code; - } -} -exports.ReadError = ReadError; -/** -An error to be thrown when given an unsupported protocol. -*/ -class UnsupportedProtocolError extends RequestError { - constructor(options) { - super(`Unsupported protocol "${options.url.protocol}"`, {}, options); - this.name = 'UnsupportedProtocolError'; - this.code = 'ERR_UNSUPPORTED_PROTOCOL'; - } -} -exports.UnsupportedProtocolError = UnsupportedProtocolError; -const proxiedRequestEvents = [ - 'socket', - 'connect', - 'continue', - 'information', - 'upgrade', - 'timeout' -]; -class Request extends stream_1.Duplex { - constructor(url, options = {}, defaults) { - super({ - // This must be false, to enable throwing after destroy - // It is used for retry logic in Promise API - autoDestroy: false, - // It needs to be zero because we're just proxying the data to another stream - highWaterMark: 0 - }); - this[kDownloadedSize] = 0; - this[kUploadedSize] = 0; - this.requestInitialized = false; - this[kServerResponsesPiped] = new Set(); - this.redirects = []; - this[kStopReading] = false; - this[kTriggerRead] = false; - this[kJobs] = []; - this.retryCount = 0; - // TODO: Remove this when targeting Node.js >= 12 - this._progressCallbacks = []; - const unlockWrite = () => this._unlockWrite(); - const lockWrite = () => this._lockWrite(); - this.on('pipe', (source) => { - source.prependListener('data', unlockWrite); - source.on('data', lockWrite); - source.prependListener('end', unlockWrite); - source.on('end', lockWrite); - }); - this.on('unpipe', (source) => { - source.off('data', unlockWrite); - source.off('data', lockWrite); - source.off('end', unlockWrite); - source.off('end', lockWrite); - }); - this.on('pipe', source => { - if (source instanceof http_1.IncomingMessage) { - this.options.headers = { - ...source.headers, - ...this.options.headers - }; - } - }); - const { json, body, form } = options; - if (json || body || form) { - this._lockWrite(); - } - if (exports.kIsNormalizedAlready in options) { - this.options = options; - } - else { - try { - // @ts-expect-error Common TypeScript bug saying that `this.constructor` is not accessible - this.options = this.constructor.normalizeArguments(url, options, defaults); - } - catch (error) { - // TODO: Move this to `_destroy()` - if (is_1.default.nodeStream(options.body)) { - options.body.destroy(); - } - this.destroy(error); - return; - } - } - (async () => { - var _a; - try { - if (this.options.body instanceof fs_1.ReadStream) { - await waitForOpenFile(this.options.body); - } - const { url: normalizedURL } = this.options; - if (!normalizedURL) { - throw new TypeError('Missing `url` property'); - } - this.requestUrl = normalizedURL.toString(); - decodeURI(this.requestUrl); - await this._finalizeBody(); - await this._makeRequest(); - if (this.destroyed) { - (_a = this[kRequest]) === null || _a === void 0 ? void 0 : _a.destroy(); - return; - } - // Queued writes etc. - for (const job of this[kJobs]) { - job(); - } - // Prevent memory leak - this[kJobs].length = 0; - this.requestInitialized = true; - } - catch (error) { - if (error instanceof RequestError) { - this._beforeError(error); - return; - } - // This is a workaround for https://github.com/nodejs/node/issues/33335 - if (!this.destroyed) { - this.destroy(error); - } - } - })(); - } - static normalizeArguments(url, options, defaults) { - var _a, _b, _c, _d, _e; - const rawOptions = options; - if (is_1.default.object(url) && !is_1.default.urlInstance(url)) { - options = { ...defaults, ...url, ...options }; - } - else { - if (url && options && options.url !== undefined) { - throw new TypeError('The `url` option is mutually exclusive with the `input` argument'); - } - options = { ...defaults, ...options }; - if (url !== undefined) { - options.url = url; - } - if (is_1.default.urlInstance(options.url)) { - options.url = new url_1.URL(options.url.toString()); - } - } - // TODO: Deprecate URL options in Got 12. - // Support extend-specific options - if (options.cache === false) { - options.cache = undefined; - } - if (options.dnsCache === false) { - options.dnsCache = undefined; - } - // Nice type assertions - is_1.assert.any([is_1.default.string, is_1.default.undefined], options.method); - is_1.assert.any([is_1.default.object, is_1.default.undefined], options.headers); - is_1.assert.any([is_1.default.string, is_1.default.urlInstance, is_1.default.undefined], options.prefixUrl); - is_1.assert.any([is_1.default.object, is_1.default.undefined], options.cookieJar); - is_1.assert.any([is_1.default.object, is_1.default.string, is_1.default.undefined], options.searchParams); - is_1.assert.any([is_1.default.object, is_1.default.string, is_1.default.undefined], options.cache); - is_1.assert.any([is_1.default.object, is_1.default.number, is_1.default.undefined], options.timeout); - is_1.assert.any([is_1.default.object, is_1.default.undefined], options.context); - is_1.assert.any([is_1.default.object, is_1.default.undefined], options.hooks); - is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.decompress); - is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.ignoreInvalidCookies); - is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.followRedirect); - is_1.assert.any([is_1.default.number, is_1.default.undefined], options.maxRedirects); - is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.throwHttpErrors); - is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.http2); - is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.allowGetBody); - is_1.assert.any([is_1.default.string, is_1.default.undefined], options.localAddress); - is_1.assert.any([dns_ip_version_1.isDnsLookupIpVersion, is_1.default.undefined], options.dnsLookupIpVersion); - is_1.assert.any([is_1.default.object, is_1.default.undefined], options.https); - is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.rejectUnauthorized); - if (options.https) { - is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.https.rejectUnauthorized); - is_1.assert.any([is_1.default.function_, is_1.default.undefined], options.https.checkServerIdentity); - is_1.assert.any([is_1.default.string, is_1.default.object, is_1.default.array, is_1.default.undefined], options.https.certificateAuthority); - is_1.assert.any([is_1.default.string, is_1.default.object, is_1.default.array, is_1.default.undefined], options.https.key); - is_1.assert.any([is_1.default.string, is_1.default.object, is_1.default.array, is_1.default.undefined], options.https.certificate); - is_1.assert.any([is_1.default.string, is_1.default.undefined], options.https.passphrase); - is_1.assert.any([is_1.default.string, is_1.default.buffer, is_1.default.array, is_1.default.undefined], options.https.pfx); - } - is_1.assert.any([is_1.default.object, is_1.default.undefined], options.cacheOptions); - // `options.method` - if (is_1.default.string(options.method)) { - options.method = options.method.toUpperCase(); - } - else { - options.method = 'GET'; - } - // `options.headers` - if (options.headers === (defaults === null || defaults === void 0 ? void 0 : defaults.headers)) { - options.headers = { ...options.headers }; - } - else { - options.headers = lowercaseKeys({ ...(defaults === null || defaults === void 0 ? void 0 : defaults.headers), ...options.headers }); - } - // Disallow legacy `url.Url` - if ('slashes' in options) { - throw new TypeError('The legacy `url.Url` has been deprecated. Use `URL` instead.'); - } - // `options.auth` - if ('auth' in options) { - throw new TypeError('Parameter `auth` is deprecated. Use `username` / `password` instead.'); - } - // `options.searchParams` - if ('searchParams' in options) { - if (options.searchParams && options.searchParams !== (defaults === null || defaults === void 0 ? void 0 : defaults.searchParams)) { - let searchParameters; - if (is_1.default.string(options.searchParams) || (options.searchParams instanceof url_1.URLSearchParams)) { - searchParameters = new url_1.URLSearchParams(options.searchParams); - } - else { - validateSearchParameters(options.searchParams); - searchParameters = new url_1.URLSearchParams(); - // eslint-disable-next-line guard-for-in - for (const key in options.searchParams) { - const value = options.searchParams[key]; - if (value === null) { - searchParameters.append(key, ''); - } - else if (value !== undefined) { - searchParameters.append(key, value); - } - } - } - // `normalizeArguments()` is also used to merge options - (_a = defaults === null || defaults === void 0 ? void 0 : defaults.searchParams) === null || _a === void 0 ? void 0 : _a.forEach((value, key) => { - // Only use default if one isn't already defined - if (!searchParameters.has(key)) { - searchParameters.append(key, value); - } - }); - options.searchParams = searchParameters; - } - } - // `options.username` & `options.password` - options.username = (_b = options.username) !== null && _b !== void 0 ? _b : ''; - options.password = (_c = options.password) !== null && _c !== void 0 ? _c : ''; - // `options.prefixUrl` & `options.url` - if (is_1.default.undefined(options.prefixUrl)) { - options.prefixUrl = (_d = defaults === null || defaults === void 0 ? void 0 : defaults.prefixUrl) !== null && _d !== void 0 ? _d : ''; - } - else { - options.prefixUrl = options.prefixUrl.toString(); - if (options.prefixUrl !== '' && !options.prefixUrl.endsWith('/')) { - options.prefixUrl += '/'; - } - } - if (is_1.default.string(options.url)) { - if (options.url.startsWith('/')) { - throw new Error('`input` must not start with a slash when using `prefixUrl`'); - } - options.url = options_to_url_1.default(options.prefixUrl + options.url, options); - } - else if ((is_1.default.undefined(options.url) && options.prefixUrl !== '') || options.protocol) { - options.url = options_to_url_1.default(options.prefixUrl, options); - } - if (options.url) { - if ('port' in options) { - delete options.port; - } - // Make it possible to change `options.prefixUrl` - let { prefixUrl } = options; - Object.defineProperty(options, 'prefixUrl', { - set: (value) => { - const url = options.url; - if (!url.href.startsWith(value)) { - throw new Error(`Cannot change \`prefixUrl\` from ${prefixUrl} to ${value}: ${url.href}`); - } - options.url = new url_1.URL(value + url.href.slice(prefixUrl.length)); - prefixUrl = value; - }, - get: () => prefixUrl - }); - // Support UNIX sockets - let { protocol } = options.url; - if (protocol === 'unix:') { - protocol = 'http:'; - options.url = new url_1.URL(`http://unix${options.url.pathname}${options.url.search}`); - } - // Set search params - if (options.searchParams) { - // eslint-disable-next-line @typescript-eslint/no-base-to-string - options.url.search = options.searchParams.toString(); - } - // Protocol check - if (protocol !== 'http:' && protocol !== 'https:') { - throw new UnsupportedProtocolError(options); - } - // Update `username` - if (options.username === '') { - options.username = options.url.username; - } - else { - options.url.username = options.username; - } - // Update `password` - if (options.password === '') { - options.password = options.url.password; - } - else { - options.url.password = options.password; - } - } - // `options.cookieJar` - const { cookieJar } = options; - if (cookieJar) { - let { setCookie, getCookieString } = cookieJar; - is_1.assert.function_(setCookie); - is_1.assert.function_(getCookieString); - /* istanbul ignore next: Horrible `tough-cookie` v3 check */ - if (setCookie.length === 4 && getCookieString.length === 0) { - setCookie = util_1.promisify(setCookie.bind(options.cookieJar)); - getCookieString = util_1.promisify(getCookieString.bind(options.cookieJar)); - options.cookieJar = { - setCookie, - getCookieString: getCookieString - }; - } - } - // `options.cache` - const { cache } = options; - if (cache) { - if (!cacheableStore.has(cache)) { - cacheableStore.set(cache, new CacheableRequest(((requestOptions, handler) => { - const result = requestOptions[kRequest](requestOptions, handler); - // TODO: remove this when `cacheable-request` supports async request functions. - if (is_1.default.promise(result)) { - // @ts-expect-error - // We only need to implement the error handler in order to support HTTP2 caching. - // The result will be a promise anyway. - result.once = (event, handler) => { - if (event === 'error') { - result.catch(handler); - } - else if (event === 'abort') { - // The empty catch is needed here in case when - // it rejects before it's `await`ed in `_makeRequest`. - (async () => { - try { - const request = (await result); - request.once('abort', handler); - } - catch (_a) { } - })(); - } - else { - /* istanbul ignore next: safety check */ - throw new Error(`Unknown HTTP2 promise event: ${event}`); - } - return result; - }; - } - return result; - }), cache)); - } - } - // `options.cacheOptions` - options.cacheOptions = { ...options.cacheOptions }; - // `options.dnsCache` - if (options.dnsCache === true) { - if (!globalDnsCache) { - globalDnsCache = new cacheable_lookup_1.default(); - } - options.dnsCache = globalDnsCache; - } - else if (!is_1.default.undefined(options.dnsCache) && !options.dnsCache.lookup) { - throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${is_1.default(options.dnsCache)}`); - } - // `options.timeout` - if (is_1.default.number(options.timeout)) { - options.timeout = { request: options.timeout }; - } - else if (defaults && options.timeout !== defaults.timeout) { - options.timeout = { - ...defaults.timeout, - ...options.timeout - }; - } - else { - options.timeout = { ...options.timeout }; - } - // `options.context` - if (!options.context) { - options.context = {}; - } - // `options.hooks` - const areHooksDefault = options.hooks === (defaults === null || defaults === void 0 ? void 0 : defaults.hooks); - options.hooks = { ...options.hooks }; - for (const event of exports.knownHookEvents) { - if (event in options.hooks) { - if (is_1.default.array(options.hooks[event])) { - // See https://github.com/microsoft/TypeScript/issues/31445#issuecomment-576929044 - options.hooks[event] = [...options.hooks[event]]; - } - else { - throw new TypeError(`Parameter \`${event}\` must be an Array, got ${is_1.default(options.hooks[event])}`); - } - } - else { - options.hooks[event] = []; - } - } - if (defaults && !areHooksDefault) { - for (const event of exports.knownHookEvents) { - const defaultHooks = defaults.hooks[event]; - if (defaultHooks.length > 0) { - // See https://github.com/microsoft/TypeScript/issues/31445#issuecomment-576929044 - options.hooks[event] = [ - ...defaults.hooks[event], - ...options.hooks[event] - ]; - } - } - } - // DNS options - if ('family' in options) { - deprecation_warning_1.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'); - } - // HTTPS options - if (defaults === null || defaults === void 0 ? void 0 : defaults.https) { - options.https = { ...defaults.https, ...options.https }; - } - if ('rejectUnauthorized' in options) { - deprecation_warning_1.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'); - } - if ('checkServerIdentity' in options) { - deprecation_warning_1.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'); - } - if ('ca' in options) { - deprecation_warning_1.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'); - } - if ('key' in options) { - deprecation_warning_1.default('"options.key" was never documented, please use "options.https.key"'); - } - if ('cert' in options) { - deprecation_warning_1.default('"options.cert" was never documented, please use "options.https.certificate"'); - } - if ('passphrase' in options) { - deprecation_warning_1.default('"options.passphrase" was never documented, please use "options.https.passphrase"'); - } - if ('pfx' in options) { - deprecation_warning_1.default('"options.pfx" was never documented, please use "options.https.pfx"'); - } - // Other options - if ('followRedirects' in options) { - throw new TypeError('The `followRedirects` option does not exist. Use `followRedirect` instead.'); - } - if (options.agent) { - for (const key in options.agent) { - if (key !== 'http' && key !== 'https' && key !== 'http2') { - throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${key}\``); - } - } - } - options.maxRedirects = (_e = options.maxRedirects) !== null && _e !== void 0 ? _e : 0; - // Set non-enumerable properties - exports.setNonEnumerableProperties([defaults, rawOptions], options); - return normalize_arguments_1.default(options, defaults); - } - _lockWrite() { - const onLockedWrite = () => { - throw new TypeError('The payload has been already provided'); - }; - this.write = onLockedWrite; - this.end = onLockedWrite; - } - _unlockWrite() { - this.write = super.write; - this.end = super.end; - } - async _finalizeBody() { - const { options } = this; - const { headers } = options; - const isForm = !is_1.default.undefined(options.form); - const isJSON = !is_1.default.undefined(options.json); - const isBody = !is_1.default.undefined(options.body); - const hasPayload = isForm || isJSON || isBody; - const cannotHaveBody = exports.withoutBody.has(options.method) && !(options.method === 'GET' && options.allowGetBody); - this._cannotHaveBody = cannotHaveBody; - if (hasPayload) { - if (cannotHaveBody) { - throw new TypeError(`The \`${options.method}\` method cannot be used with a body`); - } - if ([isBody, isForm, isJSON].filter(isTrue => isTrue).length > 1) { - throw new TypeError('The `body`, `json` and `form` options are mutually exclusive'); - } - if (isBody && - !(options.body instanceof stream_1.Readable) && - !is_1.default.string(options.body) && - !is_1.default.buffer(options.body) && - !is_form_data_1.default(options.body)) { - throw new TypeError('The `body` option must be a stream.Readable, string or Buffer'); - } - if (isForm && !is_1.default.object(options.form)) { - throw new TypeError('The `form` option must be an Object'); - } - { - // Serialize body - const noContentType = !is_1.default.string(headers['content-type']); - if (isBody) { - // Special case for https://github.com/form-data/form-data - if (is_form_data_1.default(options.body) && noContentType) { - headers['content-type'] = `multipart/form-data; boundary=${options.body.getBoundary()}`; - } - this[kBody] = options.body; - } - else if (isForm) { - if (noContentType) { - headers['content-type'] = 'application/x-www-form-urlencoded'; - } - this[kBody] = (new url_1.URLSearchParams(options.form)).toString(); - } - else { - if (noContentType) { - headers['content-type'] = 'application/json'; - } - this[kBody] = options.stringifyJson(options.json); - } - const uploadBodySize = await get_body_size_1.default(this[kBody], options.headers); - // See https://tools.ietf.org/html/rfc7230#section-3.3.2 - // A user agent SHOULD send a Content-Length in a request message when - // no Transfer-Encoding is sent and the request method defines a meaning - // for an enclosed payload body. For example, a Content-Length header - // field is normally sent in a POST request even when the value is 0 - // (indicating an empty payload body). A user agent SHOULD NOT send a - // Content-Length header field when the request message does not contain - // a payload body and the method semantics do not anticipate such a - // body. - if (is_1.default.undefined(headers['content-length']) && is_1.default.undefined(headers['transfer-encoding'])) { - if (!cannotHaveBody && !is_1.default.undefined(uploadBodySize)) { - headers['content-length'] = String(uploadBodySize); - } - } - } - } - else if (cannotHaveBody) { - this._lockWrite(); - } - else { - this._unlockWrite(); - } - this[kBodySize] = Number(headers['content-length']) || undefined; - } - async _onResponseBase(response) { - const { options } = this; - const { url } = options; - this[kOriginalResponse] = response; - if (options.decompress) { - response = decompressResponse(response); - } - const statusCode = response.statusCode; - const typedResponse = response; - typedResponse.statusMessage = typedResponse.statusMessage ? typedResponse.statusMessage : http.STATUS_CODES[statusCode]; - typedResponse.url = options.url.toString(); - typedResponse.requestUrl = this.requestUrl; - typedResponse.redirectUrls = this.redirects; - typedResponse.request = this; - typedResponse.isFromCache = response.fromCache || false; - typedResponse.ip = this.ip; - typedResponse.retryCount = this.retryCount; - this[kIsFromCache] = typedResponse.isFromCache; - this[kResponseSize] = Number(response.headers['content-length']) || undefined; - this[kResponse] = response; - response.once('end', () => { - this[kResponseSize] = this[kDownloadedSize]; - this.emit('downloadProgress', this.downloadProgress); - }); - response.once('error', (error) => { - // Force clean-up, because some packages don't do this. - // TODO: Fix decompress-response - response.destroy(); - this._beforeError(new ReadError(error, this)); - }); - response.once('aborted', () => { - this._beforeError(new ReadError({ - name: 'Error', - message: 'The server aborted pending request', - code: 'ECONNRESET' - }, this)); - }); - this.emit('downloadProgress', this.downloadProgress); - const rawCookies = response.headers['set-cookie']; - if (is_1.default.object(options.cookieJar) && rawCookies) { - let promises = rawCookies.map(async (rawCookie) => options.cookieJar.setCookie(rawCookie, url.toString())); - if (options.ignoreInvalidCookies) { - promises = promises.map(async (p) => p.catch(() => { })); - } - try { - await Promise.all(promises); - } - catch (error) { - this._beforeError(error); - return; - } - } - if (options.followRedirect && response.headers.location && redirectCodes.has(statusCode)) { - // We're being redirected, we don't care about the response. - // It'd be best to abort the request, but we can't because - // we would have to sacrifice the TCP connection. We don't want that. - response.resume(); - if (this[kRequest]) { - this[kCancelTimeouts](); - // eslint-disable-next-line @typescript-eslint/no-dynamic-delete - delete this[kRequest]; - this[kUnproxyEvents](); - } - const shouldBeGet = statusCode === 303 && options.method !== 'GET' && options.method !== 'HEAD'; - if (shouldBeGet || !options.methodRewriting) { - // Server responded with "see other", indicating that the resource exists at another location, - // and the client should request it from that location via GET or HEAD. - options.method = 'GET'; - if ('body' in options) { - delete options.body; - } - if ('json' in options) { - delete options.json; - } - if ('form' in options) { - delete options.form; - } - this[kBody] = undefined; - delete options.headers['content-length']; - } - if (this.redirects.length >= options.maxRedirects) { - this._beforeError(new MaxRedirectsError(this)); - return; - } - try { - // Do not remove. See https://github.com/sindresorhus/got/pull/214 - const redirectBuffer = Buffer.from(response.headers.location, 'binary').toString(); - // Handles invalid URLs. See https://github.com/sindresorhus/got/issues/604 - const redirectUrl = new url_1.URL(redirectBuffer, url); - const redirectString = redirectUrl.toString(); - decodeURI(redirectString); - // eslint-disable-next-line no-inner-declarations - function isUnixSocketURL(url) { - return url.protocol === 'unix:' || url.hostname === 'unix'; - } - if (!isUnixSocketURL(url) && isUnixSocketURL(redirectUrl)) { - this._beforeError(new RequestError('Cannot redirect to UNIX socket', {}, this)); - return; - } - // Redirecting to a different site, clear sensitive data. - if (redirectUrl.hostname !== url.hostname || redirectUrl.port !== url.port) { - if ('host' in options.headers) { - delete options.headers.host; - } - if ('cookie' in options.headers) { - delete options.headers.cookie; - } - if ('authorization' in options.headers) { - delete options.headers.authorization; - } - if (options.username || options.password) { - options.username = ''; - options.password = ''; - } - } - else { - redirectUrl.username = options.username; - redirectUrl.password = options.password; - } - this.redirects.push(redirectString); - options.url = redirectUrl; - for (const hook of options.hooks.beforeRedirect) { - // eslint-disable-next-line no-await-in-loop - await hook(options, typedResponse); - } - this.emit('redirect', typedResponse, options); - await this._makeRequest(); - } - catch (error) { - this._beforeError(error); - return; - } - return; - } - if (options.isStream && options.throwHttpErrors && !is_response_ok_1.isResponseOk(typedResponse)) { - this._beforeError(new HTTPError(typedResponse)); - return; - } - response.on('readable', () => { - if (this[kTriggerRead]) { - this._read(); - } - }); - this.on('resume', () => { - response.resume(); - }); - this.on('pause', () => { - response.pause(); - }); - response.once('end', () => { - this.push(null); - }); - this.emit('response', response); - for (const destination of this[kServerResponsesPiped]) { - if (destination.headersSent) { - continue; - } - // eslint-disable-next-line guard-for-in - for (const key in response.headers) { - const isAllowed = options.decompress ? key !== 'content-encoding' : true; - const value = response.headers[key]; - if (isAllowed) { - destination.setHeader(key, value); - } - } - destination.statusCode = statusCode; - } - } - async _onResponse(response) { - try { - await this._onResponseBase(response); - } - catch (error) { - /* istanbul ignore next: better safe than sorry */ - this._beforeError(error); - } - } - _onRequest(request) { - const { options } = this; - const { timeout, url } = options; - http_timer_1.default(request); - this[kCancelTimeouts] = timed_out_1.default(request, timeout, url); - const responseEventName = options.cache ? 'cacheableResponse' : 'response'; - request.once(responseEventName, (response) => { - void this._onResponse(response); - }); - request.once('error', (error) => { - var _a; - // Force clean-up, because some packages (e.g. nock) don't do this. - request.destroy(); - // Node.js <= 12.18.2 mistakenly emits the response `end` first. - (_a = request.res) === null || _a === void 0 ? void 0 : _a.removeAllListeners('end'); - error = error instanceof timed_out_1.TimeoutError ? new TimeoutError(error, this.timings, this) : new RequestError(error.message, error, this); - this._beforeError(error); - }); - this[kUnproxyEvents] = proxy_events_1.default(request, this, proxiedRequestEvents); - this[kRequest] = request; - this.emit('uploadProgress', this.uploadProgress); - // Send body - const body = this[kBody]; - const currentRequest = this.redirects.length === 0 ? this : request; - if (is_1.default.nodeStream(body)) { - body.pipe(currentRequest); - body.once('error', (error) => { - this._beforeError(new UploadError(error, this)); - }); - } - else { - this._unlockWrite(); - if (!is_1.default.undefined(body)) { - this._writeRequest(body, undefined, () => { }); - currentRequest.end(); - this._lockWrite(); - } - else if (this._cannotHaveBody || this._noPipe) { - currentRequest.end(); - this._lockWrite(); - } - } - this.emit('request', request); - } - async _createCacheableRequest(url, options) { - return new Promise((resolve, reject) => { - // TODO: Remove `utils/url-to-options.ts` when `cacheable-request` is fixed - Object.assign(options, url_to_options_1.default(url)); - // `http-cache-semantics` checks this - // TODO: Fix this ignore. - // @ts-expect-error - delete options.url; - let request; - // This is ugly - const cacheRequest = cacheableStore.get(options.cache)(options, async (response) => { - // TODO: Fix `cacheable-response` - response._readableState.autoDestroy = false; - if (request) { - (await request).emit('cacheableResponse', response); - } - resolve(response); - }); - // Restore options - options.url = url; - cacheRequest.once('error', reject); - cacheRequest.once('request', async (requestOrPromise) => { - request = requestOrPromise; - resolve(request); - }); - }); - } - async _makeRequest() { - var _a, _b, _c, _d, _e; - const { options } = this; - const { headers } = options; - for (const key in headers) { - if (is_1.default.undefined(headers[key])) { - // eslint-disable-next-line @typescript-eslint/no-dynamic-delete - delete headers[key]; - } - else if (is_1.default.null_(headers[key])) { - throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${key}\` header`); - } - } - if (options.decompress && is_1.default.undefined(headers['accept-encoding'])) { - headers['accept-encoding'] = supportsBrotli ? 'gzip, deflate, br' : 'gzip, deflate'; - } - // Set cookies - if (options.cookieJar) { - const cookieString = await options.cookieJar.getCookieString(options.url.toString()); - if (is_1.default.nonEmptyString(cookieString)) { - options.headers.cookie = cookieString; - } - } - for (const hook of options.hooks.beforeRequest) { - // eslint-disable-next-line no-await-in-loop - const result = await hook(options); - if (!is_1.default.undefined(result)) { - // @ts-expect-error Skip the type mismatch to support abstract responses - options.request = () => result; - break; - } - } - if (options.body && this[kBody] !== options.body) { - this[kBody] = options.body; - } - const { agent, request, timeout, url } = options; - if (options.dnsCache && !('lookup' in options)) { - options.lookup = options.dnsCache.lookup; - } - // UNIX sockets - if (url.hostname === 'unix') { - const matches = /(?<socketPath>.+?):(?<path>.+)/.exec(`${url.pathname}${url.search}`); - if (matches === null || matches === void 0 ? void 0 : matches.groups) { - const { socketPath, path } = matches.groups; - Object.assign(options, { - socketPath, - path, - host: '' - }); - } - } - const isHttps = url.protocol === 'https:'; - // Fallback function - let fallbackFn; - if (options.http2) { - fallbackFn = http2wrapper.auto; - } - else { - fallbackFn = isHttps ? https.request : http.request; - } - const realFn = (_a = options.request) !== null && _a !== void 0 ? _a : fallbackFn; - // Cache support - const fn = options.cache ? this._createCacheableRequest : realFn; - // Pass an agent directly when HTTP2 is disabled - if (agent && !options.http2) { - options.agent = agent[isHttps ? 'https' : 'http']; - } - // Prepare plain HTTP request options - options[kRequest] = realFn; - delete options.request; - // TODO: Fix this ignore. - // @ts-expect-error - delete options.timeout; - const requestOptions = options; - requestOptions.shared = (_b = options.cacheOptions) === null || _b === void 0 ? void 0 : _b.shared; - requestOptions.cacheHeuristic = (_c = options.cacheOptions) === null || _c === void 0 ? void 0 : _c.cacheHeuristic; - requestOptions.immutableMinTimeToLive = (_d = options.cacheOptions) === null || _d === void 0 ? void 0 : _d.immutableMinTimeToLive; - requestOptions.ignoreCargoCult = (_e = options.cacheOptions) === null || _e === void 0 ? void 0 : _e.ignoreCargoCult; - // If `dnsLookupIpVersion` is not present do not override `family` - if (options.dnsLookupIpVersion !== undefined) { - try { - requestOptions.family = dns_ip_version_1.dnsLookupIpVersionToFamily(options.dnsLookupIpVersion); - } - catch (_f) { - throw new Error('Invalid `dnsLookupIpVersion` option value'); - } - } - // HTTPS options remapping - if (options.https) { - if ('rejectUnauthorized' in options.https) { - requestOptions.rejectUnauthorized = options.https.rejectUnauthorized; - } - if (options.https.checkServerIdentity) { - requestOptions.checkServerIdentity = options.https.checkServerIdentity; - } - if (options.https.certificateAuthority) { - requestOptions.ca = options.https.certificateAuthority; - } - if (options.https.certificate) { - requestOptions.cert = options.https.certificate; - } - if (options.https.key) { - requestOptions.key = options.https.key; - } - if (options.https.passphrase) { - requestOptions.passphrase = options.https.passphrase; - } - if (options.https.pfx) { - requestOptions.pfx = options.https.pfx; - } - } - try { - let requestOrResponse = await fn(url, requestOptions); - if (is_1.default.undefined(requestOrResponse)) { - requestOrResponse = fallbackFn(url, requestOptions); - } - // Restore options - options.request = request; - options.timeout = timeout; - options.agent = agent; - // HTTPS options restore - if (options.https) { - if ('rejectUnauthorized' in options.https) { - delete requestOptions.rejectUnauthorized; - } - if (options.https.checkServerIdentity) { - // @ts-expect-error - This one will be removed when we remove the alias. - delete requestOptions.checkServerIdentity; - } - if (options.https.certificateAuthority) { - delete requestOptions.ca; - } - if (options.https.certificate) { - delete requestOptions.cert; - } - if (options.https.key) { - delete requestOptions.key; - } - if (options.https.passphrase) { - delete requestOptions.passphrase; - } - if (options.https.pfx) { - delete requestOptions.pfx; - } - } - if (isClientRequest(requestOrResponse)) { - this._onRequest(requestOrResponse); - // Emit the response after the stream has been ended - } - else if (this.writable) { - this.once('finish', () => { - void this._onResponse(requestOrResponse); - }); - this._unlockWrite(); - this.end(); - this._lockWrite(); - } - else { - void this._onResponse(requestOrResponse); - } - } - catch (error) { - if (error instanceof CacheableRequest.CacheError) { - throw new CacheError(error, this); - } - throw new RequestError(error.message, error, this); - } - } - async _error(error) { - try { - for (const hook of this.options.hooks.beforeError) { - // eslint-disable-next-line no-await-in-loop - error = await hook(error); - } - } - catch (error_) { - error = new RequestError(error_.message, error_, this); - } - this.destroy(error); - } - _beforeError(error) { - if (this[kStopReading]) { - return; - } - const { options } = this; - const retryCount = this.retryCount + 1; - this[kStopReading] = true; - if (!(error instanceof RequestError)) { - error = new RequestError(error.message, error, this); - } - const typedError = error; - const { response } = typedError; - void (async () => { - if (response && !response.body) { - response.setEncoding(this._readableState.encoding); - try { - response.rawBody = await get_buffer_1.default(response); - response.body = response.rawBody.toString(); - } - catch (_a) { } - } - if (this.listenerCount('retry') !== 0) { - let backoff; - try { - let retryAfter; - if (response && 'retry-after' in response.headers) { - retryAfter = Number(response.headers['retry-after']); - if (Number.isNaN(retryAfter)) { - retryAfter = Date.parse(response.headers['retry-after']) - Date.now(); - if (retryAfter <= 0) { - retryAfter = 1; - } - } - else { - retryAfter *= 1000; - } - } - backoff = await options.retry.calculateDelay({ - attemptCount: retryCount, - retryOptions: options.retry, - error: typedError, - retryAfter, - computedValue: calculate_retry_delay_1.default({ - attemptCount: retryCount, - retryOptions: options.retry, - error: typedError, - retryAfter, - computedValue: 0 - }) - }); - } - catch (error_) { - void this._error(new RequestError(error_.message, error_, this)); - return; - } - if (backoff) { - const retry = async () => { - try { - for (const hook of this.options.hooks.beforeRetry) { - // eslint-disable-next-line no-await-in-loop - await hook(this.options, typedError, retryCount); - } - } - catch (error_) { - void this._error(new RequestError(error_.message, error, this)); - return; - } - // Something forced us to abort the retry - if (this.destroyed) { - return; - } - this.destroy(); - this.emit('retry', retryCount, error); - }; - this[kRetryTimeout] = setTimeout(retry, backoff); - return; - } - } - void this._error(typedError); - })(); - } - _read() { - this[kTriggerRead] = true; - const response = this[kResponse]; - if (response && !this[kStopReading]) { - // We cannot put this in the `if` above - // because `.read()` also triggers the `end` event - if (response.readableLength) { - this[kTriggerRead] = false; - } - let data; - while ((data = response.read()) !== null) { - this[kDownloadedSize] += data.length; - this[kStartedReading] = true; - const progress = this.downloadProgress; - if (progress.percent < 1) { - this.emit('downloadProgress', progress); - } - this.push(data); - } - } - } - // Node.js 12 has incorrect types, so the encoding must be a string - _write(chunk, encoding, callback) { - const write = () => { - this._writeRequest(chunk, encoding, callback); - }; - if (this.requestInitialized) { - write(); - } - else { - this[kJobs].push(write); - } - } - _writeRequest(chunk, encoding, callback) { - if (this[kRequest].destroyed) { - // Probably the `ClientRequest` instance will throw - return; - } - this._progressCallbacks.push(() => { - this[kUploadedSize] += Buffer.byteLength(chunk, encoding); - const progress = this.uploadProgress; - if (progress.percent < 1) { - this.emit('uploadProgress', progress); - } - }); - // TODO: What happens if it's from cache? Then this[kRequest] won't be defined. - this[kRequest].write(chunk, encoding, (error) => { - if (!error && this._progressCallbacks.length > 0) { - this._progressCallbacks.shift()(); - } - callback(error); - }); - } - _final(callback) { - const endRequest = () => { - // FIX: Node.js 10 calls the write callback AFTER the end callback! - while (this._progressCallbacks.length !== 0) { - this._progressCallbacks.shift()(); - } - // We need to check if `this[kRequest]` is present, - // because it isn't when we use cache. - if (!(kRequest in this)) { - callback(); - return; - } - if (this[kRequest].destroyed) { - callback(); - return; - } - this[kRequest].end((error) => { - if (!error) { - this[kBodySize] = this[kUploadedSize]; - this.emit('uploadProgress', this.uploadProgress); - this[kRequest].emit('upload-complete'); - } - callback(error); - }); - }; - if (this.requestInitialized) { - endRequest(); - } - else { - this[kJobs].push(endRequest); - } - } - _destroy(error, callback) { - var _a; - this[kStopReading] = true; - // Prevent further retries - clearTimeout(this[kRetryTimeout]); - if (kRequest in this) { - this[kCancelTimeouts](); - // TODO: Remove the next `if` when these get fixed: - // - https://github.com/nodejs/node/issues/32851 - if (!((_a = this[kResponse]) === null || _a === void 0 ? void 0 : _a.complete)) { - this[kRequest].destroy(); - } - } - if (error !== null && !is_1.default.undefined(error) && !(error instanceof RequestError)) { - error = new RequestError(error.message, error, this); - } - callback(error); - } - get _isAboutToError() { - return this[kStopReading]; - } - /** - The remote IP address. - */ - get ip() { - var _a; - return (_a = this.socket) === null || _a === void 0 ? void 0 : _a.remoteAddress; - } - /** - Indicates whether the request has been aborted or not. - */ - get aborted() { - var _a, _b, _c; - return ((_b = (_a = this[kRequest]) === null || _a === void 0 ? void 0 : _a.destroyed) !== null && _b !== void 0 ? _b : this.destroyed) && !((_c = this[kOriginalResponse]) === null || _c === void 0 ? void 0 : _c.complete); - } - get socket() { - var _a, _b; - return (_b = (_a = this[kRequest]) === null || _a === void 0 ? void 0 : _a.socket) !== null && _b !== void 0 ? _b : undefined; - } - /** - Progress event for downloading (receiving a response). - */ - get downloadProgress() { - let percent; - if (this[kResponseSize]) { - percent = this[kDownloadedSize] / this[kResponseSize]; - } - else if (this[kResponseSize] === this[kDownloadedSize]) { - percent = 1; - } - else { - percent = 0; - } - return { - percent, - transferred: this[kDownloadedSize], - total: this[kResponseSize] - }; - } - /** - Progress event for uploading (sending a request). - */ - get uploadProgress() { - let percent; - if (this[kBodySize]) { - percent = this[kUploadedSize] / this[kBodySize]; - } - else if (this[kBodySize] === this[kUploadedSize]) { - percent = 1; - } - else { - percent = 0; - } - return { - percent, - transferred: this[kUploadedSize], - total: this[kBodySize] - }; - } - /** - The object contains the following properties: - - - `start` - Time when the request started. - - `socket` - Time when a socket was assigned to the request. - - `lookup` - Time when the DNS lookup finished. - - `connect` - Time when the socket successfully connected. - - `secureConnect` - Time when the socket securely connected. - - `upload` - Time when the request finished uploading. - - `response` - Time when the request fired `response` event. - - `end` - Time when the response fired `end` event. - - `error` - Time when the request fired `error` event. - - `abort` - Time when the request fired `abort` event. - - `phases` - - `wait` - `timings.socket - timings.start` - - `dns` - `timings.lookup - timings.socket` - - `tcp` - `timings.connect - timings.lookup` - - `tls` - `timings.secureConnect - timings.connect` - - `request` - `timings.upload - (timings.secureConnect || timings.connect)` - - `firstByte` - `timings.response - timings.upload` - - `download` - `timings.end - timings.response` - - `total` - `(timings.end || timings.error || timings.abort) - timings.start` - - If something has not been measured yet, it will be `undefined`. - - __Note__: The time is a `number` representing the milliseconds elapsed since the UNIX epoch. - */ - get timings() { - var _a; - return (_a = this[kRequest]) === null || _a === void 0 ? void 0 : _a.timings; - } - /** - Whether the response was retrieved from the cache. - */ - get isFromCache() { - return this[kIsFromCache]; - } - pipe(destination, options) { - if (this[kStartedReading]) { - throw new Error('Failed to pipe. The response has been emitted already.'); - } - if (destination instanceof http_1.ServerResponse) { - this[kServerResponsesPiped].add(destination); - } - return super.pipe(destination, options); - } - unpipe(destination) { - if (destination instanceof http_1.ServerResponse) { - this[kServerResponsesPiped].delete(destination); - } - super.unpipe(destination); - return this; - } -} -exports.default = Request; diff --git a/node_modules/got/dist/source/core/utils/dns-ip-version.d.ts b/node_modules/got/dist/source/core/utils/dns-ip-version.d.ts deleted file mode 100644 index ea547cd..0000000 --- a/node_modules/got/dist/source/core/utils/dns-ip-version.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare type DnsLookupIpVersion = 'auto' | 'ipv4' | 'ipv6'; -declare type DnsIpFamily = 0 | 4 | 6; -export declare const isDnsLookupIpVersion: (value: any) => boolean; -export declare const dnsLookupIpVersionToFamily: (dnsLookupIpVersion: DnsLookupIpVersion) => DnsIpFamily; -export {}; diff --git a/node_modules/got/dist/source/core/utils/dns-ip-version.js b/node_modules/got/dist/source/core/utils/dns-ip-version.js deleted file mode 100644 index 6f599c2..0000000 --- a/node_modules/got/dist/source/core/utils/dns-ip-version.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.dnsLookupIpVersionToFamily = exports.isDnsLookupIpVersion = void 0; -const conversionTable = { - auto: 0, - ipv4: 4, - ipv6: 6 -}; -exports.isDnsLookupIpVersion = (value) => { - return value in conversionTable; -}; -exports.dnsLookupIpVersionToFamily = (dnsLookupIpVersion) => { - if (exports.isDnsLookupIpVersion(dnsLookupIpVersion)) { - return conversionTable[dnsLookupIpVersion]; - } - throw new Error('Invalid DNS lookup IP version'); -}; diff --git a/node_modules/got/dist/source/core/utils/get-body-size.d.ts b/node_modules/got/dist/source/core/utils/get-body-size.d.ts deleted file mode 100644 index 9745f69..0000000 --- a/node_modules/got/dist/source/core/utils/get-body-size.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { ClientRequestArgs } from 'http'; -declare const _default: (body: unknown, headers: ClientRequestArgs['headers']) => Promise<number | undefined>; -export default _default; diff --git a/node_modules/got/dist/source/core/utils/get-body-size.js b/node_modules/got/dist/source/core/utils/get-body-size.js deleted file mode 100644 index 0202342..0000000 --- a/node_modules/got/dist/source/core/utils/get-body-size.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const fs_1 = require("fs"); -const util_1 = require("util"); -const is_1 = require("@sindresorhus/is"); -const is_form_data_1 = require("./is-form-data"); -const statAsync = util_1.promisify(fs_1.stat); -exports.default = async (body, headers) => { - if (headers && 'content-length' in headers) { - return Number(headers['content-length']); - } - if (!body) { - return 0; - } - if (is_1.default.string(body)) { - return Buffer.byteLength(body); - } - if (is_1.default.buffer(body)) { - return body.length; - } - if (is_form_data_1.default(body)) { - return util_1.promisify(body.getLength.bind(body))(); - } - if (body instanceof fs_1.ReadStream) { - const { size } = await statAsync(body.path); - if (size === 0) { - return undefined; - } - return size; - } - return undefined; -}; diff --git a/node_modules/got/dist/source/core/utils/get-buffer.d.ts b/node_modules/got/dist/source/core/utils/get-buffer.d.ts deleted file mode 100644 index 66eaada..0000000 --- a/node_modules/got/dist/source/core/utils/get-buffer.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// <reference types="node" /> -import { Readable } from 'stream'; -declare const getBuffer: (stream: Readable) => Promise<Buffer>; -export default getBuffer; diff --git a/node_modules/got/dist/source/core/utils/get-buffer.js b/node_modules/got/dist/source/core/utils/get-buffer.js deleted file mode 100644 index 0155f08..0000000 --- a/node_modules/got/dist/source/core/utils/get-buffer.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -// TODO: Update https://github.com/sindresorhus/get-stream -const getBuffer = async (stream) => { - const chunks = []; - let length = 0; - for await (const chunk of stream) { - chunks.push(chunk); - length += Buffer.byteLength(chunk); - } - if (Buffer.isBuffer(chunks[0])) { - return Buffer.concat(chunks, length); - } - return Buffer.from(chunks.join('')); -}; -exports.default = getBuffer; diff --git a/node_modules/got/dist/source/core/utils/is-form-data.d.ts b/node_modules/got/dist/source/core/utils/is-form-data.d.ts deleted file mode 100644 index 02087b5..0000000 --- a/node_modules/got/dist/source/core/utils/is-form-data.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/// <reference types="node" /> -import { Readable } from 'stream'; -interface FormData extends Readable { - getBoundary: () => string; - getLength: (callback: (error: Error | null, length: number) => void) => void; -} -declare const _default: (body: unknown) => body is FormData; -export default _default; diff --git a/node_modules/got/dist/source/core/utils/is-form-data.js b/node_modules/got/dist/source/core/utils/is-form-data.js deleted file mode 100644 index 32c16cc..0000000 --- a/node_modules/got/dist/source/core/utils/is-form-data.js +++ /dev/null @@ -1,4 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const is_1 = require("@sindresorhus/is"); -exports.default = (body) => is_1.default.nodeStream(body) && is_1.default.function_(body.getBoundary); diff --git a/node_modules/got/dist/source/core/utils/is-response-ok.d.ts b/node_modules/got/dist/source/core/utils/is-response-ok.d.ts deleted file mode 100644 index 7e1d49a..0000000 --- a/node_modules/got/dist/source/core/utils/is-response-ok.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Response } from '..'; -export declare const isResponseOk: (response: Response) => boolean; diff --git a/node_modules/got/dist/source/core/utils/is-response-ok.js b/node_modules/got/dist/source/core/utils/is-response-ok.js deleted file mode 100644 index 84c9331..0000000 --- a/node_modules/got/dist/source/core/utils/is-response-ok.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isResponseOk = void 0; -exports.isResponseOk = (response) => { - const { statusCode } = response; - const limitStatusCode = response.request.options.followRedirect ? 299 : 399; - return (statusCode >= 200 && statusCode <= limitStatusCode) || statusCode === 304; -}; diff --git a/node_modules/got/dist/source/core/utils/options-to-url.d.ts b/node_modules/got/dist/source/core/utils/options-to-url.d.ts deleted file mode 100644 index c696a83..0000000 --- a/node_modules/got/dist/source/core/utils/options-to-url.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { URL } from 'url'; -export interface URLOptions { - href?: string; - protocol?: string; - host?: string; - hostname?: string; - port?: string | number; - pathname?: string; - search?: string; - searchParams?: unknown; - path?: string; -} -declare const _default: (origin: string, options: URLOptions) => URL; -export default _default; diff --git a/node_modules/got/dist/source/core/utils/options-to-url.js b/node_modules/got/dist/source/core/utils/options-to-url.js deleted file mode 100644 index 65be02f..0000000 --- a/node_modules/got/dist/source/core/utils/options-to-url.js +++ /dev/null @@ -1,53 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/* istanbul ignore file: deprecated */ -const url_1 = require("url"); -const keys = [ - 'protocol', - 'host', - 'hostname', - 'port', - 'pathname', - 'search' -]; -exports.default = (origin, options) => { - var _a, _b; - if (options.path) { - if (options.pathname) { - throw new TypeError('Parameters `path` and `pathname` are mutually exclusive.'); - } - if (options.search) { - throw new TypeError('Parameters `path` and `search` are mutually exclusive.'); - } - if (options.searchParams) { - throw new TypeError('Parameters `path` and `searchParams` are mutually exclusive.'); - } - } - if (options.search && options.searchParams) { - throw new TypeError('Parameters `search` and `searchParams` are mutually exclusive.'); - } - if (!origin) { - if (!options.protocol) { - throw new TypeError('No URL protocol specified'); - } - origin = `${options.protocol}//${(_b = (_a = options.hostname) !== null && _a !== void 0 ? _a : options.host) !== null && _b !== void 0 ? _b : ''}`; - } - const url = new url_1.URL(origin); - if (options.path) { - const searchIndex = options.path.indexOf('?'); - if (searchIndex === -1) { - options.pathname = options.path; - } - else { - options.pathname = options.path.slice(0, searchIndex); - options.search = options.path.slice(searchIndex + 1); - } - delete options.path; - } - for (const key of keys) { - if (options[key]) { - url[key] = options[key].toString(); - } - } - return url; -}; diff --git a/node_modules/got/dist/source/core/utils/proxy-events.d.ts b/node_modules/got/dist/source/core/utils/proxy-events.d.ts deleted file mode 100644 index b244d82..0000000 --- a/node_modules/got/dist/source/core/utils/proxy-events.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// <reference types="node" /> -import { EventEmitter } from 'events'; -export default function (from: EventEmitter, to: EventEmitter, events: string[]): () => void; diff --git a/node_modules/got/dist/source/core/utils/proxy-events.js b/node_modules/got/dist/source/core/utils/proxy-events.js deleted file mode 100644 index 4d47c53..0000000 --- a/node_modules/got/dist/source/core/utils/proxy-events.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function default_1(from, to, events) { - const fns = {}; - for (const event of events) { - fns[event] = (...args) => { - to.emit(event, ...args); - }; - from.on(event, fns[event]); - } - return () => { - for (const event of events) { - from.off(event, fns[event]); - } - }; -} -exports.default = default_1; diff --git a/node_modules/got/dist/source/core/utils/timed-out.d.ts b/node_modules/got/dist/source/core/utils/timed-out.d.ts deleted file mode 100644 index 5b495d4..0000000 --- a/node_modules/got/dist/source/core/utils/timed-out.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { ClientRequest } from 'http'; -declare const reentry: unique symbol; -interface TimedOutOptions { - host?: string; - hostname?: string; - protocol?: string; -} -export interface Delays { - lookup?: number; - connect?: number; - secureConnect?: number; - socket?: number; - response?: number; - send?: number; - request?: number; -} -export declare type ErrorCode = 'ETIMEDOUT' | 'ECONNRESET' | 'EADDRINUSE' | 'ECONNREFUSED' | 'EPIPE' | 'ENOTFOUND' | 'ENETUNREACH' | 'EAI_AGAIN'; -export declare class TimeoutError extends Error { - event: string; - code: ErrorCode; - constructor(threshold: number, event: string); -} -declare const _default: (request: ClientRequest, delays: Delays, options: TimedOutOptions) => () => void; -export default _default; -declare module 'http' { - interface ClientRequest { - [reentry]: boolean; - } -} diff --git a/node_modules/got/dist/source/core/utils/timed-out.js b/node_modules/got/dist/source/core/utils/timed-out.js deleted file mode 100644 index 8877016..0000000 --- a/node_modules/got/dist/source/core/utils/timed-out.js +++ /dev/null @@ -1,121 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TimeoutError = void 0; -const net = require("net"); -const unhandle_1 = require("./unhandle"); -const reentry = Symbol('reentry'); -const noop = () => { }; -class TimeoutError extends Error { - constructor(threshold, event) { - super(`Timeout awaiting '${event}' for ${threshold}ms`); - this.event = event; - this.name = 'TimeoutError'; - this.code = 'ETIMEDOUT'; - } -} -exports.TimeoutError = TimeoutError; -exports.default = (request, delays, options) => { - if (reentry in request) { - return noop; - } - request[reentry] = true; - const cancelers = []; - const { once, unhandleAll } = unhandle_1.default(); - const addTimeout = (delay, callback, event) => { - var _a; - const timeout = setTimeout(callback, delay, delay, event); - (_a = timeout.unref) === null || _a === void 0 ? void 0 : _a.call(timeout); - const cancel = () => { - clearTimeout(timeout); - }; - cancelers.push(cancel); - return cancel; - }; - const { host, hostname } = options; - const timeoutHandler = (delay, event) => { - request.destroy(new TimeoutError(delay, event)); - }; - const cancelTimeouts = () => { - for (const cancel of cancelers) { - cancel(); - } - unhandleAll(); - }; - request.once('error', error => { - cancelTimeouts(); - // Save original behavior - /* istanbul ignore next */ - if (request.listenerCount('error') === 0) { - throw error; - } - }); - request.once('close', cancelTimeouts); - once(request, 'response', (response) => { - once(response, 'end', cancelTimeouts); - }); - if (typeof delays.request !== 'undefined') { - addTimeout(delays.request, timeoutHandler, 'request'); - } - if (typeof delays.socket !== 'undefined') { - const socketTimeoutHandler = () => { - timeoutHandler(delays.socket, 'socket'); - }; - request.setTimeout(delays.socket, socketTimeoutHandler); - // `request.setTimeout(0)` causes a memory leak. - // We can just remove the listener and forget about the timer - it's unreffed. - // See https://github.com/sindresorhus/got/issues/690 - cancelers.push(() => { - request.removeListener('timeout', socketTimeoutHandler); - }); - } - once(request, 'socket', (socket) => { - var _a; - const { socketPath } = request; - /* istanbul ignore next: hard to test */ - if (socket.connecting) { - const hasPath = Boolean(socketPath !== null && socketPath !== void 0 ? socketPath : net.isIP((_a = hostname !== null && hostname !== void 0 ? hostname : host) !== null && _a !== void 0 ? _a : '') !== 0); - if (typeof delays.lookup !== 'undefined' && !hasPath && typeof socket.address().address === 'undefined') { - const cancelTimeout = addTimeout(delays.lookup, timeoutHandler, 'lookup'); - once(socket, 'lookup', cancelTimeout); - } - if (typeof delays.connect !== 'undefined') { - const timeConnect = () => addTimeout(delays.connect, timeoutHandler, 'connect'); - if (hasPath) { - once(socket, 'connect', timeConnect()); - } - else { - once(socket, 'lookup', (error) => { - if (error === null) { - once(socket, 'connect', timeConnect()); - } - }); - } - } - if (typeof delays.secureConnect !== 'undefined' && options.protocol === 'https:') { - once(socket, 'connect', () => { - const cancelTimeout = addTimeout(delays.secureConnect, timeoutHandler, 'secureConnect'); - once(socket, 'secureConnect', cancelTimeout); - }); - } - } - if (typeof delays.send !== 'undefined') { - const timeRequest = () => addTimeout(delays.send, timeoutHandler, 'send'); - /* istanbul ignore next: hard to test */ - if (socket.connecting) { - once(socket, 'connect', () => { - once(request, 'upload-complete', timeRequest()); - }); - } - else { - once(request, 'upload-complete', timeRequest()); - } - } - }); - if (typeof delays.response !== 'undefined') { - once(request, 'upload-complete', () => { - const cancelTimeout = addTimeout(delays.response, timeoutHandler, 'response'); - once(request, 'response', cancelTimeout); - }); - } - return cancelTimeouts; -}; diff --git a/node_modules/got/dist/source/core/utils/unhandle.d.ts b/node_modules/got/dist/source/core/utils/unhandle.d.ts deleted file mode 100644 index f49b792..0000000 --- a/node_modules/got/dist/source/core/utils/unhandle.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -/// <reference types="node" /> -import { EventEmitter } from 'events'; -declare type Origin = EventEmitter; -declare type Event = string | symbol; -declare type Fn = (...args: any[]) => void; -interface Unhandler { - once: (origin: Origin, event: Event, fn: Fn) => void; - unhandleAll: () => void; -} -declare const _default: () => Unhandler; -export default _default; diff --git a/node_modules/got/dist/source/core/utils/unhandle.js b/node_modules/got/dist/source/core/utils/unhandle.js deleted file mode 100644 index e749697..0000000 --- a/node_modules/got/dist/source/core/utils/unhandle.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -// When attaching listeners, it's very easy to forget about them. -// Especially if you do error handling and set timeouts. -// So instead of checking if it's proper to throw an error on every timeout ever, -// use this simple tool which will remove all listeners you have attached. -exports.default = () => { - const handlers = []; - return { - once(origin, event, fn) { - origin.once(event, fn); - handlers.push({ origin, event, fn }); - }, - unhandleAll() { - for (const handler of handlers) { - const { origin, event, fn } = handler; - origin.removeListener(event, fn); - } - handlers.length = 0; - } - }; -}; diff --git a/node_modules/got/dist/source/core/utils/url-to-options.d.ts b/node_modules/got/dist/source/core/utils/url-to-options.d.ts deleted file mode 100644 index c977a0f..0000000 --- a/node_modules/got/dist/source/core/utils/url-to-options.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { URL, UrlWithStringQuery } from 'url'; -export interface LegacyUrlOptions { - protocol: string; - hostname: string; - host: string; - hash: string | null; - search: string | null; - pathname: string; - href: string; - path: string; - port?: number; - auth?: string; -} -declare const _default: (url: URL | UrlWithStringQuery) => LegacyUrlOptions; -export default _default; diff --git a/node_modules/got/dist/source/core/utils/url-to-options.js b/node_modules/got/dist/source/core/utils/url-to-options.js deleted file mode 100644 index 19cc487..0000000 --- a/node_modules/got/dist/source/core/utils/url-to-options.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const is_1 = require("@sindresorhus/is"); -exports.default = (url) => { - // Cast to URL - url = url; - const options = { - protocol: url.protocol, - hostname: is_1.default.string(url.hostname) && url.hostname.startsWith('[') ? url.hostname.slice(1, -1) : url.hostname, - host: url.host, - hash: url.hash, - search: url.search, - pathname: url.pathname, - href: url.href, - path: `${url.pathname || ''}${url.search || ''}` - }; - if (is_1.default.string(url.port) && url.port.length > 0) { - options.port = Number(url.port); - } - if (url.username || url.password) { - options.auth = `${url.username || ''}:${url.password || ''}`; - } - return options; -}; diff --git a/node_modules/got/dist/source/core/utils/weakable-map.d.ts b/node_modules/got/dist/source/core/utils/weakable-map.d.ts deleted file mode 100644 index 9e3466c..0000000 --- a/node_modules/got/dist/source/core/utils/weakable-map.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export default class WeakableMap<K, V> { - weakMap: WeakMap<Record<string, unknown>, V>; - map: Map<K, V>; - constructor(); - set(key: K, value: V): void; - get(key: K): V | undefined; - has(key: K): boolean; -} diff --git a/node_modules/got/dist/source/core/utils/weakable-map.js b/node_modules/got/dist/source/core/utils/weakable-map.js deleted file mode 100644 index 5c5da7f..0000000 --- a/node_modules/got/dist/source/core/utils/weakable-map.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -class WeakableMap { - constructor() { - this.weakMap = new WeakMap(); - this.map = new Map(); - } - set(key, value) { - if (typeof key === 'object') { - this.weakMap.set(key, value); - } - else { - this.map.set(key, value); - } - } - get(key) { - if (typeof key === 'object') { - return this.weakMap.get(key); - } - return this.map.get(key); - } - has(key) { - if (typeof key === 'object') { - return this.weakMap.has(key); - } - return this.map.has(key); - } -} -exports.default = WeakableMap; diff --git a/node_modules/got/dist/source/create.d.ts b/node_modules/got/dist/source/create.d.ts deleted file mode 100644 index c8fd7ae..0000000 --- a/node_modules/got/dist/source/create.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Got, HandlerFunction, InstanceDefaults } from './types'; -export declare const defaultHandler: HandlerFunction; -declare const create: (defaults: InstanceDefaults) => Got; -export default create; -export * from './types'; diff --git a/node_modules/got/dist/source/create.js b/node_modules/got/dist/source/create.js deleted file mode 100644 index bf56db4..0000000 --- a/node_modules/got/dist/source/create.js +++ /dev/null @@ -1,240 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.defaultHandler = void 0; -const is_1 = require("@sindresorhus/is"); -const as_promise_1 = require("./as-promise"); -const create_rejection_1 = require("./as-promise/create-rejection"); -const core_1 = require("./core"); -const deep_freeze_1 = require("./utils/deep-freeze"); -const errors = { - RequestError: as_promise_1.RequestError, - CacheError: as_promise_1.CacheError, - ReadError: as_promise_1.ReadError, - HTTPError: as_promise_1.HTTPError, - MaxRedirectsError: as_promise_1.MaxRedirectsError, - TimeoutError: as_promise_1.TimeoutError, - ParseError: as_promise_1.ParseError, - CancelError: as_promise_1.CancelError, - UnsupportedProtocolError: as_promise_1.UnsupportedProtocolError, - UploadError: as_promise_1.UploadError -}; -// The `delay` package weighs 10KB (!) -const delay = async (ms) => new Promise(resolve => { - setTimeout(resolve, ms); -}); -const { normalizeArguments } = core_1.default; -const mergeOptions = (...sources) => { - let mergedOptions; - for (const source of sources) { - mergedOptions = normalizeArguments(undefined, source, mergedOptions); - } - return mergedOptions; -}; -const getPromiseOrStream = (options) => options.isStream ? new core_1.default(undefined, options) : as_promise_1.default(options); -const isGotInstance = (value) => ('defaults' in value && 'options' in value.defaults); -const aliases = [ - 'get', - 'post', - 'put', - 'patch', - 'head', - 'delete' -]; -exports.defaultHandler = (options, next) => next(options); -const callInitHooks = (hooks, options) => { - if (hooks) { - for (const hook of hooks) { - hook(options); - } - } -}; -const create = (defaults) => { - // Proxy properties from next handlers - defaults._rawHandlers = defaults.handlers; - defaults.handlers = defaults.handlers.map(fn => ((options, next) => { - // This will be assigned by assigning result - let root; - const result = fn(options, newOptions => { - root = next(newOptions); - return root; - }); - if (result !== root && !options.isStream && root) { - const typedResult = result; - const { then: promiseThen, catch: promiseCatch, finally: promiseFianlly } = typedResult; - Object.setPrototypeOf(typedResult, Object.getPrototypeOf(root)); - Object.defineProperties(typedResult, Object.getOwnPropertyDescriptors(root)); - // These should point to the new promise - // eslint-disable-next-line promise/prefer-await-to-then - typedResult.then = promiseThen; - typedResult.catch = promiseCatch; - typedResult.finally = promiseFianlly; - } - return result; - })); - // Got interface - const got = ((url, options = {}, _defaults) => { - var _a, _b; - let iteration = 0; - const iterateHandlers = (newOptions) => { - return defaults.handlers[iteration++](newOptions, iteration === defaults.handlers.length ? getPromiseOrStream : iterateHandlers); - }; - // TODO: Remove this in Got 12. - if (is_1.default.plainObject(url)) { - const mergedOptions = { - ...url, - ...options - }; - core_1.setNonEnumerableProperties([url, options], mergedOptions); - options = mergedOptions; - url = undefined; - } - try { - // Call `init` hooks - let initHookError; - try { - callInitHooks(defaults.options.hooks.init, options); - callInitHooks((_a = options.hooks) === null || _a === void 0 ? void 0 : _a.init, options); - } - catch (error) { - initHookError = error; - } - // Normalize options & call handlers - const normalizedOptions = normalizeArguments(url, options, _defaults !== null && _defaults !== void 0 ? _defaults : defaults.options); - normalizedOptions[core_1.kIsNormalizedAlready] = true; - if (initHookError) { - throw new as_promise_1.RequestError(initHookError.message, initHookError, normalizedOptions); - } - return iterateHandlers(normalizedOptions); - } - catch (error) { - if (options.isStream) { - throw error; - } - else { - return create_rejection_1.default(error, defaults.options.hooks.beforeError, (_b = options.hooks) === null || _b === void 0 ? void 0 : _b.beforeError); - } - } - }); - got.extend = (...instancesOrOptions) => { - const optionsArray = [defaults.options]; - let handlers = [...defaults._rawHandlers]; - let isMutableDefaults; - for (const value of instancesOrOptions) { - if (isGotInstance(value)) { - optionsArray.push(value.defaults.options); - handlers.push(...value.defaults._rawHandlers); - isMutableDefaults = value.defaults.mutableDefaults; - } - else { - optionsArray.push(value); - if ('handlers' in value) { - handlers.push(...value.handlers); - } - isMutableDefaults = value.mutableDefaults; - } - } - handlers = handlers.filter(handler => handler !== exports.defaultHandler); - if (handlers.length === 0) { - handlers.push(exports.defaultHandler); - } - return create({ - options: mergeOptions(...optionsArray), - handlers, - mutableDefaults: Boolean(isMutableDefaults) - }); - }; - // Pagination - const paginateEach = (async function* (url, options) { - // TODO: Remove this `@ts-expect-error` when upgrading to TypeScript 4. - // Error: Argument of type 'Merge<Options, PaginationOptions<T, R>> | undefined' is not assignable to parameter of type 'Options | undefined'. - // @ts-expect-error - let normalizedOptions = normalizeArguments(url, options, defaults.options); - normalizedOptions.resolveBodyOnly = false; - const pagination = normalizedOptions.pagination; - if (!is_1.default.object(pagination)) { - throw new TypeError('`options.pagination` must be implemented'); - } - const all = []; - let { countLimit } = pagination; - let numberOfRequests = 0; - while (numberOfRequests < pagination.requestLimit) { - if (numberOfRequests !== 0) { - // eslint-disable-next-line no-await-in-loop - await delay(pagination.backoff); - } - // @ts-expect-error FIXME! - // TODO: Throw when result is not an instance of Response - // eslint-disable-next-line no-await-in-loop - const result = (await got(undefined, undefined, normalizedOptions)); - // eslint-disable-next-line no-await-in-loop - const parsed = await pagination.transform(result); - const current = []; - for (const item of parsed) { - if (pagination.filter(item, all, current)) { - if (!pagination.shouldContinue(item, all, current)) { - return; - } - yield item; - if (pagination.stackAllItems) { - all.push(item); - } - current.push(item); - if (--countLimit <= 0) { - return; - } - } - } - const optionsToMerge = pagination.paginate(result, all, current); - if (optionsToMerge === false) { - return; - } - if (optionsToMerge === result.request.options) { - normalizedOptions = result.request.options; - } - else if (optionsToMerge !== undefined) { - normalizedOptions = normalizeArguments(undefined, optionsToMerge, normalizedOptions); - } - numberOfRequests++; - } - }); - got.paginate = paginateEach; - got.paginate.all = (async (url, options) => { - const results = []; - for await (const item of paginateEach(url, options)) { - results.push(item); - } - return results; - }); - // For those who like very descriptive names - got.paginate.each = paginateEach; - // Stream API - got.stream = ((url, options) => got(url, { ...options, isStream: true })); - // Shortcuts - for (const method of aliases) { - got[method] = ((url, options) => got(url, { ...options, method })); - got.stream[method] = ((url, options) => { - return got(url, { ...options, method, isStream: true }); - }); - } - Object.assign(got, errors); - Object.defineProperty(got, 'defaults', { - value: defaults.mutableDefaults ? defaults : deep_freeze_1.default(defaults), - writable: defaults.mutableDefaults, - configurable: defaults.mutableDefaults, - enumerable: true - }); - got.mergeOptions = mergeOptions; - return got; -}; -exports.default = create; -__exportStar(require("./types"), exports); diff --git a/node_modules/got/dist/source/index.d.ts b/node_modules/got/dist/source/index.d.ts deleted file mode 100644 index e653895..0000000 --- a/node_modules/got/dist/source/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare const got: import("./types").Got; -export default got; -export * from './create'; -export * from './as-promise'; diff --git a/node_modules/got/dist/source/index.js b/node_modules/got/dist/source/index.js deleted file mode 100644 index 106b1f2..0000000 --- a/node_modules/got/dist/source/index.js +++ /dev/null @@ -1,132 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const url_1 = require("url"); -const create_1 = require("./create"); -const defaults = { - options: { - method: 'GET', - retry: { - limit: 2, - methods: [ - 'GET', - 'PUT', - 'HEAD', - 'DELETE', - 'OPTIONS', - 'TRACE' - ], - statusCodes: [ - 408, - 413, - 429, - 500, - 502, - 503, - 504, - 521, - 522, - 524 - ], - errorCodes: [ - 'ETIMEDOUT', - 'ECONNRESET', - 'EADDRINUSE', - 'ECONNREFUSED', - 'EPIPE', - 'ENOTFOUND', - 'ENETUNREACH', - 'EAI_AGAIN' - ], - maxRetryAfter: undefined, - calculateDelay: ({ computedValue }) => computedValue - }, - timeout: {}, - headers: { - 'user-agent': 'got (https://github.com/sindresorhus/got)' - }, - hooks: { - init: [], - beforeRequest: [], - beforeRedirect: [], - beforeRetry: [], - beforeError: [], - afterResponse: [] - }, - cache: undefined, - dnsCache: undefined, - decompress: true, - throwHttpErrors: true, - followRedirect: true, - isStream: false, - responseType: 'text', - resolveBodyOnly: false, - maxRedirects: 10, - prefixUrl: '', - methodRewriting: true, - ignoreInvalidCookies: false, - context: {}, - // TODO: Set this to `true` when Got 12 gets released - http2: false, - allowGetBody: false, - https: undefined, - pagination: { - transform: (response) => { - if (response.request.options.responseType === 'json') { - return response.body; - } - return JSON.parse(response.body); - }, - paginate: response => { - if (!Reflect.has(response.headers, 'link')) { - return false; - } - const items = response.headers.link.split(','); - let next; - for (const item of items) { - const parsed = item.split(';'); - if (parsed[1].includes('next')) { - next = parsed[0].trimStart().trim(); - next = next.slice(1, -1); - break; - } - } - if (next) { - const options = { - url: new url_1.URL(next) - }; - return options; - } - return false; - }, - filter: () => true, - shouldContinue: () => true, - countLimit: Infinity, - backoff: 0, - requestLimit: 10000, - stackAllItems: true - }, - parseJson: (text) => JSON.parse(text), - stringifyJson: (object) => JSON.stringify(object), - cacheOptions: {} - }, - handlers: [create_1.defaultHandler], - mutableDefaults: false -}; -const got = create_1.default(defaults); -exports.default = got; -// For CommonJS default export support -module.exports = got; -module.exports.default = got; -module.exports.__esModule = true; // Workaround for TS issue: https://github.com/sindresorhus/got/pull/1267 -__exportStar(require("./create"), exports); -__exportStar(require("./as-promise"), exports); diff --git a/node_modules/got/dist/source/types.d.ts b/node_modules/got/dist/source/types.d.ts deleted file mode 100644 index 6c6b428..0000000 --- a/node_modules/got/dist/source/types.d.ts +++ /dev/null @@ -1,344 +0,0 @@ -/// <reference types="node" /> -import { URL } from 'url'; -import { CancelError } from 'p-cancelable'; -import { CancelableRequest, Response, Options, NormalizedOptions, Defaults as DefaultOptions, PaginationOptions, ParseError, RequestError, CacheError, ReadError, HTTPError, MaxRedirectsError, TimeoutError, UnsupportedProtocolError, UploadError } from './as-promise'; -import Request from './core'; -declare type Except<ObjectType, KeysType extends keyof ObjectType> = Pick<ObjectType, Exclude<keyof ObjectType, KeysType>>; -declare type Merge<FirstType, SecondType> = Except<FirstType, Extract<keyof FirstType, keyof SecondType>> & SecondType; -/** -Defaults for each Got instance. -*/ -export interface InstanceDefaults { - /** - An object containing the default options of Got. - */ - options: DefaultOptions; - /** - An array of functions. You execute them directly by calling `got()`. - They are some sort of "global hooks" - these functions are called first. - The last handler (*it's hidden*) is either `asPromise` or `asStream`, depending on the `options.isStream` property. - - @default [] - */ - handlers: HandlerFunction[]; - /** - A read-only boolean describing whether the defaults are mutable or not. - If set to `true`, you can update headers over time, for example, update an access token when it expires. - - @default false - */ - mutableDefaults: boolean; - _rawHandlers?: HandlerFunction[]; -} -/** -A Request object returned by calling Got, or any of the Got HTTP alias request functions. -*/ -export declare type GotReturn = Request | CancelableRequest; -/** -A function to handle options and returns a Request object. -It acts sort of like a "global hook", and will be called before any actual request is made. -*/ -export declare type HandlerFunction = <T extends GotReturn>(options: NormalizedOptions, next: (options: NormalizedOptions) => T) => T | Promise<T>; -/** -The options available for `got.extend()`. -*/ -export interface ExtendOptions extends Options { - /** - An array of functions. You execute them directly by calling `got()`. - They are some sort of "global hooks" - these functions are called first. - The last handler (*it's hidden*) is either `asPromise` or `asStream`, depending on the `options.isStream` property. - - @default [] - */ - handlers?: HandlerFunction[]; - /** - A read-only boolean describing whether the defaults are mutable or not. - If set to `true`, you can update headers over time, for example, update an access token when it expires. - - @default false - */ - mutableDefaults?: boolean; -} -export declare type OptionsOfTextResponseBody = Merge<Options, { - isStream?: false; - resolveBodyOnly?: false; - responseType?: 'text'; -}>; -export declare type OptionsOfJSONResponseBody = Merge<Options, { - isStream?: false; - resolveBodyOnly?: false; - responseType?: 'json'; -}>; -export declare type OptionsOfBufferResponseBody = Merge<Options, { - isStream?: false; - resolveBodyOnly?: false; - responseType: 'buffer'; -}>; -export declare type OptionsOfUnknownResponseBody = Merge<Options, { - isStream?: false; - resolveBodyOnly?: false; -}>; -export declare type StrictOptions = Except<Options, 'isStream' | 'responseType' | 'resolveBodyOnly'>; -export declare type StreamOptions = Merge<Options, { - isStream?: true; -}>; -declare type ResponseBodyOnly = { - resolveBodyOnly: true; -}; -export declare type OptionsWithPagination<T = unknown, R = unknown> = Merge<Options, PaginationOptions<T, R>>; -/** -An instance of `got.paginate`. -*/ -export interface GotPaginate { - /** - Same as `GotPaginate.each`. - */ - <T, R = unknown>(url: string | URL, options?: OptionsWithPagination<T, R>): AsyncIterableIterator<T>; - /** - Same as `GotPaginate.each`. - */ - <T, R = unknown>(options?: OptionsWithPagination<T, R>): AsyncIterableIterator<T>; - /** - Returns an async iterator. - - See pagination.options for more pagination options. - - @example - ``` - (async () => { - const countLimit = 10; - - const pagination = got.paginate('https://api.github.com/repos/sindresorhus/got/commits', { - pagination: {countLimit} - }); - - console.log(`Printing latest ${countLimit} Got commits (newest to oldest):`); - - for await (const commitData of pagination) { - console.log(commitData.commit.message); - } - })(); - ``` - */ - each: (<T, R = unknown>(url: string | URL, options?: OptionsWithPagination<T, R>) => AsyncIterableIterator<T>) & (<T, R = unknown>(options?: OptionsWithPagination<T, R>) => AsyncIterableIterator<T>); - /** - Returns a Promise for an array of all results. - - See pagination.options for more pagination options. - - @example - ``` - (async () => { - const countLimit = 10; - - const results = await got.paginate.all('https://api.github.com/repos/sindresorhus/got/commits', { - pagination: {countLimit} - }); - - console.log(`Printing latest ${countLimit} Got commits (newest to oldest):`); - console.log(results); - })(); - ``` - */ - all: (<T, R = unknown>(url: string | URL, options?: OptionsWithPagination<T, R>) => Promise<T[]>) & (<T, R = unknown>(options?: OptionsWithPagination<T, R>) => Promise<T[]>); -} -export interface GotRequestFunction { - (url: string | URL, options?: OptionsOfTextResponseBody): CancelableRequest<Response<string>>; - <T>(url: string | URL, options?: OptionsOfJSONResponseBody): CancelableRequest<Response<T>>; - (url: string | URL, options?: OptionsOfBufferResponseBody): CancelableRequest<Response<Buffer>>; - (url: string | URL, options?: OptionsOfUnknownResponseBody): CancelableRequest<Response>; - (options: OptionsOfTextResponseBody): CancelableRequest<Response<string>>; - <T>(options: OptionsOfJSONResponseBody): CancelableRequest<Response<T>>; - (options: OptionsOfBufferResponseBody): CancelableRequest<Response<Buffer>>; - (options: OptionsOfUnknownResponseBody): CancelableRequest<Response>; - (url: string | URL, options?: (Merge<OptionsOfTextResponseBody, ResponseBodyOnly>)): CancelableRequest<string>; - <T>(url: string | URL, options?: (Merge<OptionsOfJSONResponseBody, ResponseBodyOnly>)): CancelableRequest<T>; - (url: string | URL, options?: (Merge<OptionsOfBufferResponseBody, ResponseBodyOnly>)): CancelableRequest<Buffer>; - (options: (Merge<OptionsOfTextResponseBody, ResponseBodyOnly>)): CancelableRequest<string>; - <T>(options: (Merge<OptionsOfJSONResponseBody, ResponseBodyOnly>)): CancelableRequest<T>; - (options: (Merge<OptionsOfBufferResponseBody, ResponseBodyOnly>)): CancelableRequest<Buffer>; - (url: string | URL, options?: Merge<Options, { - isStream: true; - }>): Request; - (options: Merge<Options, { - isStream: true; - }>): Request; - (url: string | URL, options?: Options): CancelableRequest | Request; - (options: Options): CancelableRequest | Request; -} -/** -All available HTTP request methods provided by Got. -*/ -export declare type HTTPAlias = 'get' | 'post' | 'put' | 'patch' | 'head' | 'delete'; -interface GotStreamFunction { - (url: string | URL, options?: Merge<Options, { - isStream?: true; - }>): Request; - (options?: Merge<Options, { - isStream?: true; - }>): Request; -} -/** -An instance of `got.stream()`. -*/ -export declare type GotStream = GotStreamFunction & Record<HTTPAlias, GotStreamFunction>; -/** -An instance of `got`. -*/ -export interface Got extends Record<HTTPAlias, GotRequestFunction>, GotRequestFunction { - /** - Sets `options.isStream` to `true`. - - Returns a [duplex stream](https://nodejs.org/api/stream.html#stream_class_stream_duplex) with additional events: - - request - - response - - redirect - - uploadProgress - - downloadProgress - - error - */ - stream: GotStream; - /** - Returns an async iterator. - - See pagination.options for more pagination options. - - @example - ``` - (async () => { - const countLimit = 10; - - const pagination = got.paginate('https://api.github.com/repos/sindresorhus/got/commits', { - pagination: {countLimit} - }); - - console.log(`Printing latest ${countLimit} Got commits (newest to oldest):`); - - for await (const commitData of pagination) { - console.log(commitData.commit.message); - } - })(); - ``` - */ - paginate: GotPaginate; - /** - The Got defaults used in that instance. - */ - defaults: InstanceDefaults; - /** - An error to be thrown when a cache method fails. For example, if the database goes down or there's a filesystem error. - Contains a `code` property with `ERR_CACHE_ACCESS` or a more specific failure code. - */ - CacheError: typeof CacheError; - /** - An error to be thrown when a request fails. Contains a `code` property with error class code, like `ECONNREFUSED`. - If there is no specific code supplied, `code` defaults to `ERR_GOT_REQUEST_ERROR`. - */ - RequestError: typeof RequestError; - /** - An error to be thrown when reading from response stream fails. Contains a `code` property with - `ERR_READING_RESPONSE_STREAM` or a more specific failure code. - */ - ReadError: typeof ReadError; - /** - An error to be thrown when server response code is 2xx, and parsing body fails. Includes a - `response` property. Contains a `code` property with `ERR_BODY_PARSE_FAILURE` or a more specific failure code. - */ - ParseError: typeof ParseError; - /** - An error to be thrown when the server response code is not 2xx nor 3xx if `options.followRedirect` is `true`, but always except for 304. - Includes a `response` property. Contains a `code` property with `ERR_NON_2XX_3XX_RESPONSE` or a more specific failure code. - */ - HTTPError: typeof HTTPError; - /** - An error to be thrown when the server redirects you more than ten times. - Includes a `response` property. Contains a `code` property with `ERR_TOO_MANY_REDIRECTS`. - */ - MaxRedirectsError: typeof MaxRedirectsError; - /** - An error to be thrown when given an unsupported protocol. Contains a `code` property with `ERR_UNSUPPORTED_PROTOCOL`. - */ - UnsupportedProtocolError: typeof UnsupportedProtocolError; - /** - An error to be thrown when the request is aborted due to a timeout. - Includes an `event` and `timings` property. Contains a `code` property with `ETIMEDOUT`. - */ - TimeoutError: typeof TimeoutError; - /** - An error to be thrown when the request body is a stream and an error occurs while reading from that stream. - Contains a `code` property with `ERR_UPLOAD` or a more specific failure code. - */ - UploadError: typeof UploadError; - /** - An error to be thrown when the request is aborted with `.cancel()`. Contains a `code` property with `ERR_CANCELED`. - */ - CancelError: typeof CancelError; - /** - Configure a new `got` instance with default `options`. - The `options` are merged with the parent instance's `defaults.options` using `got.mergeOptions`. - You can access the resolved options with the `.defaults` property on the instance. - - Additionally, `got.extend()` accepts two properties from the `defaults` object: `mutableDefaults` and `handlers`. - - It is also possible to merges many instances into a single one: - - options are merged using `got.mergeOptions()` (including hooks), - - handlers are stored in an array (you can access them through `instance.defaults.handlers`). - - @example - ```js - const client = got.extend({ - prefixUrl: 'https://example.com', - headers: { - 'x-unicorn': 'rainbow' - } - }); - - client.get('demo'); - - // HTTP Request => - // GET /demo HTTP/1.1 - // Host: example.com - // x-unicorn: rainbow - ``` - */ - extend: (...instancesOrOptions: Array<Got | ExtendOptions>) => Got; - /** - Merges multiple `got` instances into the parent. - */ - mergeInstances: (parent: Got, ...instances: Got[]) => Got; - /** - Extends parent options. - Avoid using [object spread](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax#Spread_in_object_literals) as it doesn't work recursively. - - Options are deeply merged to a new object. The value of each key is determined as follows: - - - If the new property is not defined, the old value is used. - - If the new property is explicitly set to `undefined`: - - If the parent property is a plain `object`, the parent value is deeply cloned. - - Otherwise, `undefined` is used. - - If the parent value is an instance of `URLSearchParams`: - - If the new value is a `string`, an `object` or an instance of `URLSearchParams`, a new `URLSearchParams` instance is created. - The values are merged using [`urlSearchParams.append(key, value)`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/append). - The keys defined in the new value override the keys defined in the parent value. - - Otherwise, the only available value is `undefined`. - - If the new property is a plain `object`: - - If the parent property is a plain `object` too, both values are merged recursively into a new `object`. - - Otherwise, only the new value is deeply cloned. - - If the new property is an `Array`, it overwrites the old one with a deep clone of the new property. - - Properties that are not enumerable, such as `context`, `body`, `json`, and `form`, will not be merged. - - Otherwise, the new value is assigned to the key. - - **Note:** Only Got options are merged! Custom user options should be defined via [`options.context`](#context). - - @example - ``` - const a = {headers: {cat: 'meow', wolf: ['bark', 'wrrr']}}; - const b = {headers: {cow: 'moo', wolf: ['auuu']}}; - - {...a, ...b} // => {headers: {cow: 'moo', wolf: ['auuu']}} - got.mergeOptions(a, b) // => {headers: {cat: 'meow', cow: 'moo', wolf: ['auuu']}} - ``` - */ - mergeOptions: (...sources: Options[]) => NormalizedOptions; -} -export {}; diff --git a/node_modules/got/dist/source/types.js b/node_modules/got/dist/source/types.js deleted file mode 100644 index c8ad2e5..0000000 --- a/node_modules/got/dist/source/types.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/node_modules/got/dist/source/utils/deep-freeze.d.ts b/node_modules/got/dist/source/utils/deep-freeze.d.ts deleted file mode 100644 index 7c33e5c..0000000 --- a/node_modules/got/dist/source/utils/deep-freeze.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function deepFreeze<T extends Record<string, any>>(object: T): Readonly<T>; diff --git a/node_modules/got/dist/source/utils/deep-freeze.js b/node_modules/got/dist/source/utils/deep-freeze.js deleted file mode 100644 index a696d4e..0000000 --- a/node_modules/got/dist/source/utils/deep-freeze.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const is_1 = require("@sindresorhus/is"); -function deepFreeze(object) { - for (const value of Object.values(object)) { - if (is_1.default.plainObject(value) || is_1.default.array(value)) { - deepFreeze(value); - } - } - return Object.freeze(object); -} -exports.default = deepFreeze; diff --git a/node_modules/got/dist/source/utils/deprecation-warning.d.ts b/node_modules/got/dist/source/utils/deprecation-warning.d.ts deleted file mode 100644 index 1a08f96..0000000 --- a/node_modules/got/dist/source/utils/deprecation-warning.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _default: (message: string) => void; -export default _default; diff --git a/node_modules/got/dist/source/utils/deprecation-warning.js b/node_modules/got/dist/source/utils/deprecation-warning.js deleted file mode 100644 index 3cfb7b2..0000000 --- a/node_modules/got/dist/source/utils/deprecation-warning.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const alreadyWarned = new Set(); -exports.default = (message) => { - if (alreadyWarned.has(message)) { - return; - } - alreadyWarned.add(message); - // @ts-expect-error Missing types. - process.emitWarning(`Got: ${message}`, { - type: 'DeprecationWarning' - }); -}; |