@gby/got-scraping 4.1.3 → 4.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +4 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -233,12 +233,12 @@ type GotScraping = {
|
|
|
233
233
|
*/
|
|
234
234
|
declare function createGotScrapingOptions(): {
|
|
235
235
|
handlers: got.HandlerFunction[];
|
|
236
|
-
mutableDefaults:
|
|
237
|
-
http2:
|
|
236
|
+
mutableDefaults: true;
|
|
237
|
+
http2: true;
|
|
238
238
|
https: {
|
|
239
|
-
rejectUnauthorized:
|
|
239
|
+
rejectUnauthorized: false;
|
|
240
240
|
};
|
|
241
|
-
throwHttpErrors:
|
|
241
|
+
throwHttpErrors: false;
|
|
242
242
|
timeout: {
|
|
243
243
|
request: number;
|
|
244
244
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/agent/transform-headers-agent.ts","../src/agent/wrapped-agent.ts","../src/hooks/browser-headers.ts","../src/resolve-protocol.ts","../src/hooks/proxy.ts","../src/agent/h1-proxy-agent.ts","../src/auth.ts","../src/hooks/custom-options.ts","../src/hooks/fix-decompress.ts","../src/hooks/http2.ts","../src/hooks/insecure-parser.ts","../src/hooks/options-validation.ts","../src/hooks/referer.ts","../src/hooks/storage.ts","../src/hooks/tls.ts"],"sourcesContent":["import http from 'node:http';\nimport https from 'node:https';\n\nimport { got as originalGot, Options } from 'got';\nimport { HeaderGenerator } from 'header-generator';\n\nimport { TransformHeadersAgent } from './agent/transform-headers-agent.js';\n\nimport { browserHeadersHook } from './hooks/browser-headers.js';\nimport { customOptionsHook } from './hooks/custom-options.js';\nimport { fixDecompress } from './hooks/fix-decompress.js';\nimport { http2Hook } from './hooks/http2.js';\nimport { insecureParserHook } from './hooks/insecure-parser.js';\nimport { optionsValidationHandler } from './hooks/options-validation.js';\nimport { proxyHook } from './hooks/proxy.js';\nimport { refererHook } from './hooks/referer.js';\nimport { sessionDataHook } from './hooks/storage.js';\nimport { tlsHook } from './hooks/tls.js';\nimport type { GotScraping } from './types.js';\n\nconst handlers = [\n fixDecompress,\n];\n\nconst beforeRequest = [\n insecureParserHook,\n sessionDataHook,\n http2Hook,\n proxyHook,\n browserHeadersHook,\n tlsHook,\n];\n\nconst init = [\n optionsValidationHandler,\n customOptionsHook,\n];\n\nconst beforeRedirect = [\n refererHook,\n];\n\n/**\n * Create the options for the Got Scraping instance.\n * @returns got 的扩展选项 ExtendOptions\n */\nexport function createGotScrapingOptions() {\n return {\n handlers,\n mutableDefaults: true,\n // Most of the new browsers use HTTP/2\n http2: true,\n https: {\n // In contrast to browsers, we don't usually do login operations.\n // We want the content.\n rejectUnauthorized: false,\n },\n // Don't fail on 404\n throwHttpErrors: false,\n timeout: { request: 60_000 },\n retry: { limit: 0 },\n headers: {\n 'user-agent': undefined,\n },\n context: {\n headerGenerator: new HeaderGenerator(),\n useHeaderGenerator: true,\n insecureHTTPParser: true,\n },\n agent: {\n http: new TransformHeadersAgent(http.globalAgent),\n https: new TransformHeadersAgent(https.globalAgent),\n },\n hooks: {\n init,\n beforeRequest,\n beforeRedirect,\n },\n };\n}\n\nconst gotScraping = originalGot.extend(createGotScrapingOptions()) as GotScraping;\n\n/**\n * Mock the `decodeURI` global for the time when Got is normalizing the URL.\n * @see https://github.com/apify/apify-js/issues/1205\n */\nconst setupDecodeURI = () => {\n const { set } = Object.getOwnPropertyDescriptor(Options.prototype, 'url')!;\n\n Object.defineProperty(Options.prototype, 'url', {\n set(value) {\n const originalDecodeURI = global.decodeURI;\n global.decodeURI = (str) => str;\n\n try {\n return set!.call(this, value);\n } finally {\n global.decodeURI = originalDecodeURI;\n }\n },\n });\n};\n\nsetupDecodeURI();\n\nexport * from 'got';\nexport { gotScraping, TransformHeadersAgent };\nexport { getAgents } from './hooks/proxy.js';\n\nexport const hooks = {\n init,\n beforeRequest,\n beforeRedirect,\n fixDecompress,\n insecureParserHook,\n sessionDataHook,\n http2Hook,\n proxyHook,\n browserHeadersHook,\n tlsHook,\n optionsValidationHandler,\n customOptionsHook,\n refererHook,\n};\n\nexport {\n type Context,\n type GotOptionsInit,\n type OptionsInit,\n} from './context.js';\n\nexport type * from './types.js';\n","/* eslint-disable no-underscore-dangle */\nimport { HeaderGenerator } from 'header-generator';\nimport { Agent, ClientRequest, OutgoingMessage, type ClientRequestArgs } from 'node:http';\nimport { WrappedAgent } from './wrapped-agent.js';\n\n// @ts-expect-error Private property\nconst { _storeHeader } = OutgoingMessage.prototype;\n\nconst generator = new HeaderGenerator();\n\n/**\n * Transforms the casing of the headers to Pascal-Case.\n */\nexport class TransformHeadersAgent<T extends Agent> extends WrappedAgent<T> {\n // Rewritten from https://github.com/nodejs/node/blob/533cafcf7e3ab72e98a2478bc69aedfdf06d3a5e/lib/_http_outgoing.js#L442-L479\n /**\n * Transforms the request via header normalization.\n */\n transformRequest(request: ClientRequest, { sortHeaders }: {sortHeaders: boolean}): void {\n const headers: Record<string, string | number | string[]> = {};\n const hasConnection = request.hasHeader('connection');\n const hasContentLength = request.hasHeader('content-length');\n const hasTransferEncoding = request.hasHeader('transfer-encoding');\n const hasTrailer = request.hasHeader('trailer');\n const keys = request.getHeaderNames();\n\n for (const key of keys) {\n if (key.toLowerCase().startsWith('x-')) {\n headers[key] = request.getHeader(key)!;\n } else {\n headers[this.toPascalCase(key)] = request.getHeader(key)!;\n }\n\n if (sortHeaders) {\n // Removal is required in order to change the order of the properties\n request.removeHeader(key);\n }\n }\n\n const typedRequest = request as ClientRequest & {\n _removedContLen: boolean;\n _contentLength: number;\n _removedTE: boolean;\n agent?: Agent;\n };\n\n if (!hasConnection) {\n const shouldSendKeepAlive = request.shouldKeepAlive && (hasContentLength || request.useChunkedEncodingByDefault || typedRequest.agent);\n if (shouldSendKeepAlive) {\n headers.Connection = 'keep-alive';\n } else {\n headers.Connection = 'close';\n }\n }\n\n if (!hasContentLength && !hasTransferEncoding) {\n // Note: This uses private `_removedContLen` property.\n // This property tells us whether the content-length was explicitly removed or not.\n //\n // Note: This uses private `_removedTE` property.\n // This property tells us whether the transfer-encoding was explicitly removed or not.\n if (!hasTrailer && !typedRequest._removedContLen && typeof typedRequest._contentLength === 'number') {\n headers['Content-Length'] = typedRequest._contentLength;\n } else if (!typedRequest._removedTE) {\n headers['Transfer-Encoding'] = 'chunked';\n }\n }\n\n const transformedHeaders: Record<string, string | number | string[]> = sortHeaders ? generator.orderHeaders(headers as any) : headers;\n\n for (const [key, value] of Object.entries(transformedHeaders)) {\n request.setHeader(key, value);\n }\n }\n\n override addRequest(request: ClientRequest, options: ClientRequestArgs): void {\n const typedRequest = request as ClientRequest & {\n _storeHeader: (firstLine: string, headers: Record<string, string>) => void;\n };\n\n // See https://github.com/nodejs/node/blob/533cafcf7e3ab72e98a2478bc69aedfdf06d3a5e/lib/_http_outgoing.js#L373\n // Note: This overrides the private `_storeHeader`.\n // This is required, because the function copies\n // the `connection`, `content-length` and `trasfer-encoding` headers\n // directly to the underlying buffer.\n typedRequest._storeHeader = (...args) => {\n this.transformRequest(request, { sortHeaders: true });\n\n return _storeHeader.call(request, ...args);\n };\n\n // `agent-base` isn't able to detect the protocol correctly\n (options as any).secureEndpoint = options.protocol === 'https:';\n\n return super.addRequest(request, options);\n }\n\n toPascalCase(header: string): string {\n return header.split('-').map((part) => {\n return part[0]!.toUpperCase() + part.slice(1).toLowerCase();\n }).join('-');\n }\n}\n","import type { NetConnectOpts } from 'node:net';\nimport { ClientRequest, Agent as HttpAgent, type AgentOptions, type ClientRequestArgs } from 'node:http';\nimport type { Duplex } from 'node:stream';\n\n/**\n * @see https://github.com/nodejs/node/blob/533cafcf7e3ab72e98a2478bc69aedfdf06d3a5e/lib/_http_client.js#L129-L162\n * @see https://github.com/nodejs/node/blob/533cafcf7e3ab72e98a2478bc69aedfdf06d3a5e/lib/_http_client.js#L234-L246\n * @see https://github.com/nodejs/node/blob/533cafcf7e3ab72e98a2478bc69aedfdf06d3a5e/lib/_http_client.js#L304-L305\n * Wraps an existing Agent instance,\n * so there's no need to replace `agent.addRequest`.\n */\nexport class WrappedAgent<T extends HttpAgent> implements HttpAgent {\n agent: T;\n\n constructor(agent: T) {\n this.agent = agent;\n }\n\n addRequest(request: ClientRequest, options: ClientRequestArgs): void {\n // @ts-expect-error @types/node has incorrect types\n this.agent.addRequest(request, options);\n }\n\n get keepAlive(): boolean {\n // @ts-expect-error @types/node has incorrect types\n return this.agent.keepAlive;\n }\n\n get maxSockets(): HttpAgent['maxSockets'] {\n return this.agent.maxSockets;\n }\n\n get options(): AgentOptions {\n // @ts-expect-error @types/node has incorrect types\n return this.agent.options;\n }\n\n get defaultPort(): number {\n // @ts-expect-error @types/node has incorrect types\n return this.agent.defaultPort;\n }\n\n get protocol(): string {\n // @ts-expect-error @types/node has incorrect types\n return this.agent.protocol;\n }\n\n destroy(): void {\n this.agent.destroy();\n }\n\n // Let's implement `HttpAgent` so we don't have to\n // type `WrappedAgent as unknown as HttpAgent`\n get maxFreeSockets(): HttpAgent['maxFreeSockets'] {\n return this.agent.maxFreeSockets;\n }\n\n get maxTotalSockets(): HttpAgent['maxTotalSockets'] {\n return this.agent.maxTotalSockets;\n }\n\n get freeSockets(): HttpAgent['freeSockets'] {\n return this.agent.freeSockets;\n }\n\n get sockets(): HttpAgent['sockets'] {\n return this.agent.sockets;\n }\n\n get requests(): HttpAgent['requests'] {\n return this.agent.requests;\n }\n\n on(eventName: string | symbol, listener: (...args: any[]) => void): this {\n this.agent.on(eventName, listener);\n return this;\n }\n\n once(eventName: string | symbol, listener: (...args: any[]) => void): this {\n this.agent.once(eventName, listener);\n return this;\n }\n\n off(eventName: string | symbol, listener: (...args: any[]) => void): this {\n this.agent.off(eventName, listener);\n return this;\n }\n\n addListener(eventName: string | symbol, listener: (...args: any[]) => void): this {\n this.agent.addListener(eventName, listener);\n return this;\n }\n\n removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this {\n this.agent.removeListener(eventName, listener);\n return this;\n }\n\n removeAllListeners(eventName?: string | symbol): this {\n this.agent.removeAllListeners(eventName);\n return this;\n }\n\n setMaxListeners(n: number): this {\n this.agent.setMaxListeners(n);\n return this;\n }\n\n getMaxListeners(): number {\n return this.agent.getMaxListeners();\n }\n\n listeners(eventName: Parameters<HttpAgent['listeners']>[0]): ReturnType<HttpAgent['listeners']> {\n return this.agent.listeners(eventName);\n }\n\n rawListeners(eventName: Parameters<HttpAgent['rawListeners']>[0]): ReturnType<HttpAgent['rawListeners']> {\n return this.agent.rawListeners(eventName);\n }\n\n emit(eventName: string | symbol, ...args: any[]): boolean {\n return this.agent.emit(eventName, ...args);\n }\n\n eventNames(): (string | symbol)[] {\n return this.agent.eventNames();\n }\n\n listenerCount(eventName: string | symbol): number {\n return this.agent.listenerCount(eventName);\n }\n\n prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this {\n this.agent.prependListener(eventName, listener);\n return this;\n }\n\n prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this {\n this.agent.prependOnceListener(eventName, listener);\n return this;\n }\n\n createConnection(options: NetConnectOpts, callback?: (err: Error | null, stream: Duplex) => void): Duplex {\n return this.agent.createConnection(options, callback);\n }\n\n keepSocketAlive(socket: Duplex): void {\n this.agent.keepSocketAlive(socket);\n }\n\n reuseSocket(socket: Duplex, request: ClientRequest): void {\n this.agent.reuseSocket(socket, request);\n }\n\n getName(options?: any): string {\n return this.agent.getName(options);\n }\n}\n","import { Options } from 'got';\nimport http2 from 'http2-wrapper';\nimport { URL } from 'node:url';\nimport type { Context } from '../context.js';\nimport { createResolveProtocol } from '../resolve-protocol.js';\n\n/**\n * Merges original generated headers and user provided overrides.\n * All header overrides will have the original header case, because of antiscraping.\n */\nexport function mergeHeaders(original: Record<string, string>, overrides: Record<string, string | undefined>): {[k: string]: string} {\n const fixedHeaders = new Map();\n\n for (const entry of Object.entries(original)) {\n fixedHeaders.set(entry[0].toLowerCase(), entry);\n }\n\n for (const entry of Object.entries(overrides)) {\n fixedHeaders.set(entry[0].toLowerCase(), entry);\n }\n\n return Object.fromEntries(fixedHeaders.values());\n}\n\ninterface StoredHeaders {\n 1: Record<string, string>;\n 2: Record<string, string>;\n}\n\ninterface HeadersData {\n headers?: StoredHeaders;\n}\n\nconst getResolveProtocolFunction = (options: Options, proxyUrl: string | undefined, sessionData: unknown) => {\n const { resolveProtocol } = options as any;\n\n if (resolveProtocol) {\n return resolveProtocol;\n }\n\n if (proxyUrl) {\n return createResolveProtocol(proxyUrl, sessionData as any, Math.min(options?.timeout?.connect ?? 60_000, options?.timeout?.request ?? 60_000));\n }\n\n return (...args: Parameters<typeof http2.auto.resolveProtocol>) => http2.auto.resolveProtocol({\n ...args[0],\n timeout: Math.min(options?.timeout?.connect ?? 60_000, options?.timeout?.request ?? 60_000),\n });\n};\n\nexport async function browserHeadersHook(options: Options): Promise<void> {\n const { context } = options;\n const {\n headerGeneratorOptions,\n useHeaderGenerator,\n headerGenerator,\n proxyUrl,\n } = context as Context;\n const sessionData = context.sessionData as HeadersData | undefined;\n\n if (!useHeaderGenerator || !headerGenerator) return;\n\n const createHeadersPair = () => ({\n 1: headerGenerator.getHeaders({\n httpVersion: '1',\n ...headerGeneratorOptions,\n }),\n 2: headerGenerator.getHeaders({\n httpVersion: '2',\n ...headerGeneratorOptions,\n }),\n });\n\n const url = options.url as URL;\n\n const resolveProtocol = getResolveProtocolFunction(options, proxyUrl, sessionData);\n\n let alpnProtocol;\n if (url.protocol === 'https:') {\n alpnProtocol = (await resolveProtocol({\n host: url.hostname,\n port: url.port || 443,\n rejectUnauthorized: false,\n ALPNProtocols: ['h2', 'http/1.1'],\n servername: url.hostname,\n })).alpnProtocol;\n }\n\n const httpVersion = alpnProtocol === 'h2' ? '2' : '1';\n\n let generatedHeaders: Record<string, string>;\n if (sessionData) {\n if (!sessionData.headers) {\n sessionData.headers = createHeadersPair();\n }\n\n generatedHeaders = sessionData.headers[httpVersion];\n } else {\n generatedHeaders = headerGenerator.getHeaders({\n httpVersion,\n ...headerGeneratorOptions,\n });\n }\n\n if (!options.decompress) {\n for (const key of Object.keys(generatedHeaders)) {\n if (key.toLowerCase() === 'accept-encoding') {\n delete generatedHeaders[key];\n }\n }\n }\n\n // TODO: Use `options.merge({headers: generatedHeaders})` instead\n options.headers = mergeHeaders(generatedHeaders, options.headers as Record<string, string>);\n}\n","import { isIPv6 } from 'node:net';\nimport tls, { TLSSocket } from 'node:tls';\nimport { URL } from 'node:url';\nimport { type Headers } from 'got';\nimport { auto, type ResolveProtocolConnectFunction, type ResolveProtocolFunction } from 'http2-wrapper';\nimport QuickLRU from 'quick-lru';\nimport { ProxyError } from './hooks/proxy.js';\nimport { buildBasicAuthHeader } from './auth.js';\n\nconst connect = async (proxyUrl: string, options: tls.ConnectionOptions, callback: () => void) => new Promise<TLSSocket>((resolve, reject) => {\n let host = `${options.host}:${options.port}`;\n\n if (isIPv6(options.host!)) {\n host = `[${options.host}]:${options.port}`;\n }\n\n void (async () => {\n try {\n const headers: Headers = {\n host,\n };\n\n const url = new URL(proxyUrl);\n const basic = buildBasicAuthHeader(url);\n\n if (basic) {\n headers.authorization = basic;\n headers['proxy-authorization'] = basic;\n }\n\n const request = await auto(url, {\n method: 'CONNECT',\n headers,\n path: host,\n // TODO: this property doesn't exist according to the types\n pathname: host,\n rejectUnauthorized: false,\n } as never);\n\n request.end();\n\n request.once('error', reject);\n\n request.once('connect', (response, socket, head) => {\n if (response.statusCode !== 200 || head.length > 0) {\n reject(new ProxyError(`Proxy responded with ${response.statusCode} ${response.statusMessage}: ${head.length} bytes.\n\nBelow is the first 100 bytes of the proxy response body:\n${head.toString('utf8', 0, 100)}`, { cause: head.toString('utf8') }));\n socket.destroy();\n return;\n }\n\n const tlsSocket = tls.connect({\n ...options,\n socket,\n }, callback);\n\n resolve(tlsSocket);\n });\n } catch (error) {\n reject(error);\n }\n })();\n});\n\nconst createCaches = () => ({\n protocolCache: new QuickLRU<string, string>({ maxSize: 1000 }),\n resolveAlpnQueue: new Map(),\n});\n\nconst defaults = createCaches();\n\nexport interface ProtocolCache {\n protocolCache?: typeof defaults.protocolCache;\n resolveAlpnQueue?: typeof defaults.resolveAlpnQueue;\n}\n\nexport const createResolveProtocol = (proxyUrl: string, sessionData?: ProtocolCache, timeout?: number): ResolveProtocolFunction => {\n let { protocolCache, resolveAlpnQueue } = defaults;\n\n if (sessionData) {\n if (!sessionData.protocolCache || !sessionData.resolveAlpnQueue) {\n Object.assign(sessionData, createCaches());\n }\n\n protocolCache = sessionData.protocolCache!;\n resolveAlpnQueue = sessionData.resolveAlpnQueue!;\n }\n\n const connectWithProxy: ResolveProtocolConnectFunction = async (pOptions, pCallback) => {\n return connect(proxyUrl, pOptions, pCallback);\n };\n\n const resolveProtocol: ResolveProtocolFunction = auto.createResolveProtocol(\n protocolCache as unknown as Map<string, string>,\n resolveAlpnQueue,\n connectWithProxy,\n );\n\n return async (...args: Parameters<ResolveProtocolFunction>) => resolveProtocol({\n ...args[0],\n timeout,\n });\n};\n","import { Options, type Agents } from 'got';\nimport http2, { auto } from 'http2-wrapper';\nimport { URL } from 'node:url';\nimport { HttpProxyAgent, HttpRegularProxyAgent, HttpsProxyAgent } from '../agent/h1-proxy-agent.js';\nimport { TransformHeadersAgent } from '../agent/transform-headers-agent.js';\nimport { buildBasicAuthHeader } from '../auth.js';\n\nconst {\n HttpOverHttp2,\n HttpsOverHttp2,\n Http2OverHttp2,\n Http2OverHttps,\n Http2OverHttp,\n} = http2.proxies;\n\nexport async function proxyHook(options: Options): Promise<void> {\n const { context: { proxyUrl } } = options;\n\n if (proxyUrl) {\n const parsedProxy = new URL(proxyUrl as string);\n\n validateProxyProtocol(parsedProxy.protocol);\n\n options.agent = await getAgents(parsedProxy, options.https.rejectUnauthorized!);\n }\n}\n\nexport class ProxyError extends Error {}\n\nfunction validateProxyProtocol(protocol: string) {\n const isSupported = protocol === 'http:' || protocol === 'https:';\n\n if (!isSupported) {\n throw new ProxyError(`Proxy URL protocol \"${protocol}\" is not supported. Please use HTTP or HTTPS.`);\n }\n}\n\nexport async function getAgents(parsedProxyUrl: URL, rejectUnauthorized: boolean) {\n // Sockets must not be reused, the proxy server may rotate upstream proxies as well.\n\n const headers: Record<string, string> = {};\n const basic = buildBasicAuthHeader(parsedProxyUrl);\n\n if (basic) {\n headers.authorization = basic;\n headers['proxy-authorization'] = basic;\n }\n\n // `http2-wrapper` Agent options\n const wrapperOptions = {\n proxyOptions: {\n url: parsedProxyUrl,\n headers,\n\n // Based on the got https.rejectUnauthorized option\n rejectUnauthorized,\n },\n\n // The sockets won't be reused, no need to keep them\n maxFreeSockets: 0,\n maxEmptySessions: 0,\n };\n\n // Native `http.Agent` options\n const nativeOptions = {\n proxy: parsedProxyUrl,\n\n // The sockets won't be reused, no need to keep them\n maxFreeSockets: 0,\n };\n\n let agent: Agents;\n\n if (parsedProxyUrl.protocol === 'https:') {\n let alpnProtocol = 'http/1.1';\n\n try {\n const result = await auto.resolveProtocol({\n host: parsedProxyUrl.hostname,\n port: parsedProxyUrl.port,\n rejectUnauthorized,\n ALPNProtocols: ['h2', 'http/1.1'],\n servername: parsedProxyUrl.hostname,\n });\n\n alpnProtocol = result.alpnProtocol;\n } catch {\n // Some proxies don't support CONNECT protocol, use http/1.1\n }\n\n const proxyIsHttp2 = alpnProtocol === 'h2';\n\n if (proxyIsHttp2) {\n agent = {\n http: new TransformHeadersAgent(new HttpOverHttp2(wrapperOptions)),\n https: new TransformHeadersAgent(new HttpsOverHttp2(wrapperOptions)),\n http2: new Http2OverHttp2(wrapperOptions),\n };\n } else {\n // Upstream proxies hang up connections on CONNECT + unsecure HTTP\n agent = {\n // @ts-expect-error New @types/node patch has narrower types than the originally exported got-scraping interface\n http: new TransformHeadersAgent(new HttpProxyAgent(nativeOptions)),\n // @ts-expect-error New @types/node patch has narrower types than the originally exported got-scraping interface\n https: new TransformHeadersAgent(new HttpsProxyAgent(nativeOptions)),\n http2: new Http2OverHttps(wrapperOptions),\n };\n }\n } else {\n // Upstream proxies hang up connections on CONNECT + unsecure HTTP\n agent = {\n http: new TransformHeadersAgent(new HttpRegularProxyAgent(nativeOptions)),\n // @ts-expect-error New @types/node patch has narrower types than the originally exported got-scraping interface\n https: new TransformHeadersAgent(new HttpsProxyAgent(nativeOptions)),\n http2: new Http2OverHttp(wrapperOptions),\n };\n }\n\n return agent;\n}\n","/* eslint-disable max-classes-per-file */\nimport http, { ClientRequest, type ClientRequestArgs } from 'node:http';\nimport https from 'node:https';\nimport { isIPv6 } from 'node:net';\nimport tls, { type ConnectionOptions } from 'node:tls';\nimport { URL } from 'node:url';\nimport { buildBasicAuthHeader } from '../auth.js';\n\ninterface AgentOptions extends http.AgentOptions {\n proxy: string | URL;\n disableConnect?: boolean;\n}\n\nconst initialize = (self: http.Agent & { proxy: URL }, options: AgentOptions) => {\n self.proxy = typeof options.proxy === 'string' ? new URL(options.proxy) : options.proxy;\n};\n\nconst getPort = (url: URL): number => {\n if (url.port !== '') {\n return Number(url.port);\n }\n\n if (url.protocol === 'http:') {\n return 80;\n }\n\n if (url.protocol === 'https:') {\n return 443;\n }\n\n throw new Error(`Unexpected protocol: ${url.protocol}`);\n};\n\nexport class HttpRegularProxyAgent extends http.Agent {\n proxy!: URL;\n\n constructor(options: AgentOptions) {\n super(options);\n\n initialize(this, options);\n }\n\n addRequest(request: ClientRequest, options: ClientRequestArgs): void {\n if (options.socketPath) {\n // @ts-expect-error @types/node is missing types\n super.addRequest(request, options);\n return;\n }\n\n let hostport = `${options.host}:${options.port}`;\n\n if (isIPv6(options.host!)) {\n hostport = `[${options.host}]:${options.port}`;\n }\n\n const url = new URL(`${request.protocol}//${hostport}${request.path}`);\n\n options = {\n ...options,\n host: this.proxy.hostname,\n port: getPort(this.proxy),\n };\n\n request.path = url.href;\n\n const basic = buildBasicAuthHeader(this.proxy);\n if (basic) {\n request.setHeader('proxy-authorization', basic);\n }\n\n // @ts-expect-error @types/node is missing types\n super.addRequest(request, options);\n }\n}\n\nexport class HttpProxyAgent extends http.Agent {\n proxy!: URL;\n\n constructor(options: AgentOptions) {\n super(options);\n\n // @ts-expect-error New @types/node patch has narrower types than the originally exported got-scraping interface\n initialize(this, options);\n }\n\n // @ts-expect-error New @types/node patch has narrower types than the originally exported got-scraping interface\n override createConnection(options: ConnectionOptions, callback: (error: Error | undefined, socket?: unknown) => void): void {\n if (options.path) {\n // @ts-expect-error @types/node is missing types\n super.createConnection(options, callback);\n return;\n }\n\n const fn = this.proxy.protocol === 'https:' ? https.request : http.request;\n\n let hostport = `${options.host}:${options.port}`;\n\n if (isIPv6(options.host!)) {\n hostport = `[${options.host}]:${options.port}`;\n }\n\n const headers: Record<string, string> = {\n host: hostport,\n };\n\n const basic = buildBasicAuthHeader(this.proxy);\n if (basic) {\n headers['proxy-authorization'] = basic;\n headers.authorization = basic;\n }\n\n const connectRequest = fn(this.proxy, {\n method: 'CONNECT',\n headers,\n path: hostport,\n agent: false,\n\n rejectUnauthorized: false,\n });\n\n connectRequest.once('connect', (response, socket, head) => {\n if (head.length > 0 || response.statusCode !== 200) {\n socket.destroy();\n\n const error = new Error(`The proxy responded with ${response.statusCode} ${response.statusMessage}: ${head.toString()}`);\n callback(error);\n return;\n }\n\n if ((options as any).protocol === 'https:') {\n callback(undefined, tls.connect({\n ...options,\n socket,\n }));\n return;\n }\n\n callback(undefined, socket);\n });\n\n connectRequest.once('error', (error) => {\n callback(error);\n });\n\n connectRequest.end();\n }\n}\n\nexport class HttpsProxyAgent extends https.Agent {\n proxy!: URL;\n\n constructor(options: AgentOptions) {\n super(options);\n\n // @ts-expect-error New @types/node patch has narrower types than the originally exported got-scraping interface\n initialize(this, options);\n }\n\n // @ts-expect-error New @types/node patch has narrower types than the originally exported got-scraping interface\n override createConnection(options: ConnectionOptions, callback: (error: Error | undefined, socket?: unknown) => void): void {\n HttpProxyAgent.prototype.createConnection.call(this, options, callback);\n }\n}\n","/**\n * Returns the Basic auth string based on the `username` and `password` parts of the given URL.\n * If the URL does not contain neither username nor password, returns `null`.\n * @param url URL object to process\n * @returns `Basic BASE64` string\n */\nexport function buildBasicAuthHeader(url: URL): string | null {\n if (!url.username && !url.password) {\n return null;\n }\n\n const username = decodeURIComponent(url.username ?? '');\n const password = decodeURIComponent(url.password ?? '');\n\n const basic = Buffer.from(`${username}:${password}`).toString('base64');\n\n return `Basic ${basic}`;\n}\n","import { type OptionsInit as GotOptionsInit, Options } from 'got';\nimport type { OptionsInit } from '../context.js';\n\nexport function customOptionsHook(raw: GotOptionsInit, options: Options): void {\n const typedRaw = raw as OptionsInit;\n\n const names = [\n 'proxyUrl',\n 'headerGeneratorOptions',\n 'useHeaderGenerator',\n 'insecureHTTPParser',\n 'sessionToken',\n ] as const;\n\n for (const name of names) {\n if (name in raw) {\n options.context[name] = typedRaw[name];\n delete typedRaw[name];\n }\n }\n}\n","import zlib from 'node:zlib';\nimport { ClientRequest, IncomingMessage } from 'node:http';\nimport type { HandlerFunction } from 'got';\nimport { PassThrough, Transform } from 'node:stream';\nimport mimicResponse from 'mimic-response';\n\nconst onResponse = (response: IncomingMessage, propagate: (fixedResponse: IncomingMessage) => void) => {\n const encoding = response.headers['content-encoding']?.toLowerCase();\n\n // Append empty chunk.\n const zlibOptions = {\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH,\n };\n\n const useDecompressor = (decompressor: Transform) => {\n delete response.headers['content-encoding'];\n\n const result = new PassThrough({\n autoDestroy: false,\n destroy(error, callback) {\n response.destroy();\n\n callback(error);\n },\n });\n\n decompressor.once('error', (error) => {\n result.destroy(error);\n });\n\n response.pipe(decompressor).pipe(result);\n\n propagate(mimicResponse(response, result));\n };\n\n if (encoding === 'gzip' || encoding === 'x-gzip') {\n useDecompressor(zlib.createGunzip(zlibOptions));\n } else if (encoding === 'deflate' || encoding === 'x-deflate') {\n let read = false;\n\n response.once('data', (chunk: Buffer) => {\n read = true;\n\n response.unshift(chunk);\n\n // See http://stackoverflow.com/questions/37519828\n // eslint-disable-next-line no-bitwise\n const decompressor = (chunk[0] & 0x0F) === 0x08 ? zlib.createInflate() : zlib.createInflateRaw();\n useDecompressor(decompressor);\n });\n\n response.once('end', () => {\n if (!read) {\n propagate(response);\n }\n });\n } else if (encoding === 'br') {\n let read = false;\n\n response.once('data', (chunk: Buffer) => {\n read = true;\n\n response.unshift(chunk);\n\n const decompressor = zlib.createBrotliDecompress();\n useDecompressor(decompressor);\n });\n\n response.once('end', () => {\n if (!read) {\n propagate(response);\n }\n });\n } else {\n propagate(response);\n }\n};\n\n// Some websites incorrectly compress the response.\n// Got is very strict so it would throw.\n// Browsers don't, so we need fix this.\nexport const fixDecompress: HandlerFunction = (options, next) => {\n const result = next(options);\n\n // @ts-expect-error Looks like a TypeScript bug\n result.on('request', (request: ClientRequest) => {\n const emit = request.emit.bind(request);\n\n request.emit = (event: string, ...args: unknown[]) => {\n // It won't double decompress, because Got checks the content-encoding header.\n // We delete it if the response is compressed.\n if (event === 'response' && options.decompress) {\n const response = args[0] as IncomingMessage;\n\n const emitted = request.listenerCount('response') !== 0;\n\n onResponse(response, (fixedResponse: IncomingMessage) => {\n emit('response', fixedResponse);\n });\n\n return emitted;\n }\n\n return emit(event, ...args);\n };\n });\n\n return result;\n};\n","import { URL } from 'node:url';\nimport { Options } from 'got';\nimport { auto, type AutoRequestOptions } from 'http2-wrapper';\nimport type { Context } from '../context.js';\nimport { createResolveProtocol } from '../resolve-protocol.js';\n\nexport function http2Hook(options: Options): void {\n const { proxyUrl, sessionData } = options.context as Context;\n\n if (options.http2 && (options.url as URL).protocol !== 'http:') {\n options.request = (url, requestOptions, callback) => {\n const typedRequestOptions = requestOptions as AutoRequestOptions;\n if (proxyUrl) {\n typedRequestOptions.resolveProtocol = createResolveProtocol(\n proxyUrl,\n sessionData as any,\n Math.min(options?.timeout?.connect ?? 60_000, options?.timeout?.request ?? 60_000),\n );\n }\n\n return auto(url, typedRequestOptions, callback);\n };\n } else {\n // Restore to default.\n // Otherwise it would use the `request` function above after redirects.\n options.request = undefined;\n }\n}\n","/* eslint-disable no-underscore-dangle */\n\nimport { Options } from 'got';\n\nexport function insecureParserHook(options: Options): void {\n if (options.context.insecureHTTPParser !== undefined) {\n // `insecureHTTPParser` is not an allowed HTTP option in Got,\n // so we must inject it directly into the Got internals for Node.js `http` module to use it.\n\n // @ts-expect-error Private use\n options._unixOptions = {\n // @ts-expect-error Private use\n ...options._unixOptions,\n insecureHTTPParser: options.context.insecureHTTPParser,\n };\n }\n}\n","import ow from 'ow';\n\nconst validationSchema = {\n proxyUrl: ow.optional.string.url,\n useHeaderGenerator: ow.optional.boolean,\n headerGeneratorOptions: ow.optional.object,\n insecureHTTPParser: ow.optional.boolean,\n sessionToken: ow.optional.object,\n};\n\nexport function optionsValidationHandler(options: unknown): void {\n ow(options, ow.object.partialShape(validationSchema));\n}\n","import type { BeforeRedirectHook } from 'got';\nimport { URL } from 'node:url';\n\nexport const refererHook: BeforeRedirectHook = (options, response) => {\n const url = options.url as URL;\n const resUrl = new URL(response.url);\n\n // Empty string means fall back to default.\n const policy = response.headers['referer-policy'] || 'strict-origin-when-cross-origin';\n\n if (policy === 'no-referrer') {\n delete options.headers.referer;\n } else if (policy === 'no-referrer-when-downgrade') {\n if (resUrl.protocol === 'https:' && url.protocol === 'http:') {\n delete options.headers.referer;\n } else {\n options.headers.referer = `${resUrl.origin}${resUrl.pathname}${resUrl.search}`;\n }\n } else if (policy === 'origin') {\n options.headers.referer = resUrl.origin;\n } else if (policy === 'origin-when-cross-origin') {\n if (url.origin === resUrl.origin) {\n options.headers.referer = `${resUrl.origin}${resUrl.pathname}${resUrl.search}`;\n } else {\n options.headers.referer = resUrl.origin;\n }\n } else if (policy === 'same-origin') {\n if (url.origin === resUrl.origin) {\n options.headers.referer = `${resUrl.origin}${resUrl.pathname}${resUrl.search}`;\n } else {\n delete options.headers.referer;\n }\n } else if (policy === 'strict-origin') {\n if (resUrl.protocol === 'https:' && url.protocol === 'http:') {\n delete options.headers.referer;\n } else {\n options.headers.referer = resUrl.origin;\n }\n } else if (policy === 'strict-origin-when-cross-origin') {\n if (url.origin === resUrl.origin) {\n options.headers.referer = `${resUrl.origin}${resUrl.pathname}${resUrl.search}`;\n } else if (resUrl.protocol === 'https:' && url.protocol === 'http:') {\n delete options.headers.referer;\n } else {\n options.headers.referer = resUrl.origin;\n }\n } else if (policy === 'unsafe-url') {\n options.headers.referer = `${resUrl.origin}${resUrl.pathname}${resUrl.search}`;\n }\n};\n","import { Options } from 'got';\n\nclass Storage {\n storage: WeakMap<object, unknown>;\n\n constructor() {\n this.storage = new WeakMap();\n }\n\n get<T extends object>(token: object | undefined): T | undefined {\n if (!token) {\n return;\n }\n\n if (!this.storage.has(token)) {\n this.storage.set(token, {});\n }\n\n return this.storage.get(token) as T | undefined;\n }\n}\n\nconst storage = new Storage();\n\nexport const sessionDataHook = (options: Options): void => {\n options.context.sessionData = storage.get(options.context.sessionToken as object | undefined);\n};\n","/* eslint-disable no-underscore-dangle */\n/* eslint-disable no-bitwise */\nimport { Options } from 'got';\n\nconst supportsFirefoxFully = Number(process.versions.node.split('.')[0]) >= 17;\n\nconst SSL_OP_TLSEXT_PADDING = 1 << 4;\nconst SSL_OP_NO_ENCRYPT_THEN_MAC = 1 << 19;\n\n// OpenSSL supports secp256r1. It's just reffered to as prime256v1.\nconst ecdhCurve = {\n firefox: (supportsFirefoxFully ? [\n 'X25519',\n 'prime256v1',\n 'secp384r1',\n 'secp521r1',\n 'ffdhe2048',\n 'ffdhe3072',\n ] : [\n 'X25519',\n 'prime256v1',\n 'secp384r1',\n 'secp521r1',\n ]).join(':'),\n chrome: [\n 'X25519',\n 'prime256v1',\n 'secp384r1',\n ].join(':'),\n safari: [\n 'X25519',\n 'prime256v1',\n 'secp384r1',\n 'secp521r1',\n ].join(':'),\n} as const;\n\nexport const sigalgs = {\n firefox: [\n 'ecdsa_secp256r1_sha256',\n 'ecdsa_secp384r1_sha384',\n 'ecdsa_secp521r1_sha512',\n 'rsa_pss_rsae_sha256',\n 'rsa_pss_rsae_sha384',\n 'rsa_pss_rsae_sha512',\n 'rsa_pkcs1_sha256',\n 'rsa_pkcs1_sha384',\n 'rsa_pkcs1_sha512',\n 'ECDSA+SHA1',\n 'rsa_pkcs1_sha1',\n ].join(':'),\n chrome: [\n 'ecdsa_secp256r1_sha256',\n 'rsa_pss_rsae_sha256',\n 'rsa_pkcs1_sha256',\n 'ecdsa_secp384r1_sha384',\n 'rsa_pss_rsae_sha384',\n 'rsa_pkcs1_sha384',\n 'rsa_pss_rsae_sha512',\n 'rsa_pkcs1_sha512',\n ].join(':'),\n safari: [\n 'ecdsa_secp256r1_sha256',\n 'rsa_pss_rsae_sha256',\n 'rsa_pkcs1_sha256',\n 'ecdsa_secp384r1_sha384',\n 'ECDSA+SHA1',\n 'rsa_pss_rsae_sha384',\n 'rsa_pkcs1_sha384',\n 'rsa_pss_rsae_sha512',\n 'rsa_pkcs1_sha512',\n 'RSA+SHA1',\n ].join(':'),\n} as const;\n\nexport const knownCiphers = {\n chrome: [\n // Chrome v92\n 'TLS_AES_128_GCM_SHA256',\n 'TLS_AES_256_GCM_SHA384',\n 'TLS_CHACHA20_POLY1305_SHA256',\n 'ECDHE-ECDSA-AES128-GCM-SHA256',\n 'ECDHE-RSA-AES128-GCM-SHA256',\n 'ECDHE-ECDSA-AES256-GCM-SHA384',\n 'ECDHE-RSA-AES256-GCM-SHA384',\n 'ECDHE-ECDSA-CHACHA20-POLY1305',\n 'ECDHE-RSA-CHACHA20-POLY1305',\n // Legacy:\n 'ECDHE-RSA-AES128-SHA',\n 'ECDHE-RSA-AES256-SHA',\n 'AES128-GCM-SHA256',\n 'AES256-GCM-SHA384',\n 'AES128-SHA',\n 'AES256-SHA',\n ].join(':'),\n firefox: [\n // Firefox v91\n 'TLS_AES_128_GCM_SHA256',\n 'TLS_CHACHA20_POLY1305_SHA256',\n 'TLS_AES_256_GCM_SHA384',\n 'ECDHE-ECDSA-AES128-GCM-SHA256',\n 'ECDHE-RSA-AES128-GCM-SHA256',\n 'ECDHE-ECDSA-CHACHA20-POLY1305',\n 'ECDHE-RSA-CHACHA20-POLY1305',\n 'ECDHE-ECDSA-AES256-GCM-SHA384',\n 'ECDHE-RSA-AES256-GCM-SHA384',\n // Legacy:\n 'ECDHE-ECDSA-AES256-SHA',\n 'ECDHE-ECDSA-AES128-SHA',\n 'ECDHE-RSA-AES128-SHA',\n 'ECDHE-RSA-AES256-SHA',\n 'AES128-GCM-SHA256',\n 'AES256-GCM-SHA384',\n 'AES128-SHA',\n 'AES256-SHA',\n 'DES-CBC3-SHA',\n ].join(':'),\n safari: [\n // Safari v14\n 'TLS_AES_128_GCM_SHA256',\n 'TLS_AES_256_GCM_SHA384',\n 'TLS_CHACHA20_POLY1305_SHA256',\n 'ECDHE-ECDSA-AES256-GCM-SHA384',\n 'ECDHE-ECDSA-AES128-GCM-SHA256',\n 'ECDHE-ECDSA-CHACHA20-POLY1305',\n 'ECDHE-RSA-AES256-GCM-SHA384',\n 'ECDHE-RSA-AES128-GCM-SHA256',\n 'ECDHE-RSA-CHACHA20-POLY1305',\n // Legacy:\n 'ECDHE-ECDSA-AES256-SHA384',\n 'ECDHE-ECDSA-AES128-SHA256',\n 'ECDHE-ECDSA-AES256-SHA',\n 'ECDHE-ECDSA-AES128-SHA',\n 'ECDHE-RSA-AES256-SHA384',\n 'ECDHE-RSA-AES128-SHA256',\n 'ECDHE-RSA-AES256-SHA',\n 'ECDHE-RSA-AES128-SHA',\n 'AES256-GCM-SHA384',\n 'AES128-GCM-SHA256',\n 'AES256-SHA256',\n 'AES128-SHA256',\n 'AES256-SHA',\n 'AES128-SHA',\n 'ECDHE-ECDSA-DES-CBC3-SHA',\n 'ECDHE-RSA-DES-CBC3-SHA',\n 'DES-CBC3-SHA',\n ].join(':'),\n} as const;\n\nexport const minVersion = {\n firefox: 'TLSv1.2',\n chrome: 'TLSv1',\n safari: 'TLSv1.2',\n} as const;\n\nexport const maxVersion = {\n firefox: 'TLSv1.3',\n chrome: 'TLSv1.3',\n safari: 'TLSv1.3',\n} as const;\n\nexport const secureOptions = {\n firefox: SSL_OP_TLSEXT_PADDING | SSL_OP_NO_ENCRYPT_THEN_MAC,\n chrome: SSL_OP_TLSEXT_PADDING | SSL_OP_NO_ENCRYPT_THEN_MAC,\n safari: SSL_OP_TLSEXT_PADDING | SSL_OP_NO_ENCRYPT_THEN_MAC,\n} as const;\n\nexport const requestOCSP = {\n firefox: true,\n chrome: true,\n safari: true,\n};\n\ntype BrowserName = 'chrome' | 'firefox' | 'safari' | undefined;\n\nconst getUserAgent = (headers: Record<string, string | string[] | undefined>): string | undefined => {\n for (const [header, value] of Object.entries(headers)) {\n if (header.toLowerCase() === 'user-agent') {\n return value as string;\n }\n }\n return undefined;\n};\n\nconst getBrowser = (userAgent?: string): BrowserName | undefined => {\n if (!userAgent) {\n return;\n }\n\n let browser;\n if (userAgent.includes('Firefox')) {\n browser = 'firefox';\n } else if (userAgent.includes('Chrome')) {\n browser = 'chrome';\n } else {\n browser = 'safari';\n }\n\n return browser as BrowserName;\n};\n\nexport function tlsHook(options: Options): void {\n const { https } = options;\n\n if (https.ciphers || https.signatureAlgorithms || https.minVersion || https.maxVersion) {\n return;\n }\n\n // Let's default to Firefox settings as it has low failure rates\n const browser = getBrowser(getUserAgent(options.headers)) ?? 'firefox';\n\n https.ciphers = knownCiphers[browser];\n https.signatureAlgorithms = sigalgs[browser];\n https.ecdhCurve = ecdhCurve[browser];\n https.minVersion = minVersion[browser];\n https.maxVersion = maxVersion[browser];\n\n // @ts-expect-error Private use\n options._unixOptions = {\n // @ts-expect-error Private use\n ...options._unixOptions,\n secureOptions: secureOptions[browser],\n requestOCSP: requestOCSP[browser],\n };\n}\n"],"mappings":"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","names":["http","https","Options","HeaderGenerator","http2","isIPv6","tls","URL","auto","URL","URL","isIPv6","URL","auto","tls","http2","auto","auto","URL","URL","https","HeaderGenerator","http","https","Options"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/agent/transform-headers-agent.ts","../src/agent/wrapped-agent.ts","../src/hooks/browser-headers.ts","../src/resolve-protocol.ts","../src/hooks/proxy.ts","../src/agent/h1-proxy-agent.ts","../src/auth.ts","../src/hooks/custom-options.ts","../src/hooks/fix-decompress.ts","../src/hooks/http2.ts","../src/hooks/insecure-parser.ts","../src/hooks/options-validation.ts","../src/hooks/referer.ts","../src/hooks/storage.ts","../src/hooks/tls.ts"],"sourcesContent":["import http from 'node:http';\nimport https from 'node:https';\n\nimport { got as originalGot, Options, type ExtendOptions } from 'got';\nimport { HeaderGenerator } from 'header-generator';\n\nimport { TransformHeadersAgent } from './agent/transform-headers-agent.js';\n\nimport { browserHeadersHook } from './hooks/browser-headers.js';\nimport { customOptionsHook } from './hooks/custom-options.js';\nimport { fixDecompress } from './hooks/fix-decompress.js';\nimport { http2Hook } from './hooks/http2.js';\nimport { insecureParserHook } from './hooks/insecure-parser.js';\nimport { optionsValidationHandler } from './hooks/options-validation.js';\nimport { proxyHook } from './hooks/proxy.js';\nimport { refererHook } from './hooks/referer.js';\nimport { sessionDataHook } from './hooks/storage.js';\nimport { tlsHook } from './hooks/tls.js';\nimport type { GotScraping } from './types.js';\n\nconst handlers = [\n fixDecompress,\n];\n\nconst beforeRequest = [\n insecureParserHook,\n sessionDataHook,\n http2Hook,\n proxyHook,\n browserHeadersHook,\n tlsHook,\n];\n\nconst init = [\n optionsValidationHandler,\n customOptionsHook,\n];\n\nconst beforeRedirect = [\n refererHook,\n];\n\n/**\n * Create the options for the Got Scraping instance.\n * @returns got 的扩展选项 ExtendOptions\n */\nexport function createGotScrapingOptions() {\n return {\n handlers,\n mutableDefaults: true,\n // Most of the new browsers use HTTP/2\n http2: true,\n https: {\n // In contrast to browsers, we don't usually do login operations.\n // We want the content.\n rejectUnauthorized: false,\n },\n // Don't fail on 404\n throwHttpErrors: false,\n timeout: { request: 60_000 },\n retry: { limit: 0 },\n headers: {\n 'user-agent': undefined,\n },\n context: {\n headerGenerator: new HeaderGenerator(),\n useHeaderGenerator: true,\n insecureHTTPParser: true,\n },\n agent: {\n http: new TransformHeadersAgent(http.globalAgent),\n https: new TransformHeadersAgent(https.globalAgent),\n },\n hooks: {\n init,\n beforeRequest,\n beforeRedirect,\n },\n } satisfies ExtendOptions;\n}\n\nconst gotScraping = originalGot.extend(createGotScrapingOptions()) as GotScraping;\n\n/**\n * Mock the `decodeURI` global for the time when Got is normalizing the URL.\n * @see https://github.com/apify/apify-js/issues/1205\n */\nconst setupDecodeURI = () => {\n const { set } = Object.getOwnPropertyDescriptor(Options.prototype, 'url')!;\n\n Object.defineProperty(Options.prototype, 'url', {\n set(value) {\n const originalDecodeURI = global.decodeURI;\n global.decodeURI = (str) => str;\n\n try {\n return set!.call(this, value);\n } finally {\n global.decodeURI = originalDecodeURI;\n }\n },\n });\n};\n\nsetupDecodeURI();\n\nexport * from 'got';\nexport { gotScraping, TransformHeadersAgent };\nexport { getAgents } from './hooks/proxy.js';\n\nexport const hooks = {\n init,\n beforeRequest,\n beforeRedirect,\n fixDecompress,\n insecureParserHook,\n sessionDataHook,\n http2Hook,\n proxyHook,\n browserHeadersHook,\n tlsHook,\n optionsValidationHandler,\n customOptionsHook,\n refererHook,\n};\n\nexport {\n type Context,\n type GotOptionsInit,\n type OptionsInit,\n} from './context.js';\n\nexport type * from './types.js';\n","/* eslint-disable no-underscore-dangle */\nimport { HeaderGenerator } from 'header-generator';\nimport { Agent, ClientRequest, OutgoingMessage, type ClientRequestArgs } from 'node:http';\nimport { WrappedAgent } from './wrapped-agent.js';\n\n// @ts-expect-error Private property\nconst { _storeHeader } = OutgoingMessage.prototype;\n\nconst generator = new HeaderGenerator();\n\n/**\n * Transforms the casing of the headers to Pascal-Case.\n */\nexport class TransformHeadersAgent<T extends Agent> extends WrappedAgent<T> {\n // Rewritten from https://github.com/nodejs/node/blob/533cafcf7e3ab72e98a2478bc69aedfdf06d3a5e/lib/_http_outgoing.js#L442-L479\n /**\n * Transforms the request via header normalization.\n */\n transformRequest(request: ClientRequest, { sortHeaders }: {sortHeaders: boolean}): void {\n const headers: Record<string, string | number | string[]> = {};\n const hasConnection = request.hasHeader('connection');\n const hasContentLength = request.hasHeader('content-length');\n const hasTransferEncoding = request.hasHeader('transfer-encoding');\n const hasTrailer = request.hasHeader('trailer');\n const keys = request.getHeaderNames();\n\n for (const key of keys) {\n if (key.toLowerCase().startsWith('x-')) {\n headers[key] = request.getHeader(key)!;\n } else {\n headers[this.toPascalCase(key)] = request.getHeader(key)!;\n }\n\n if (sortHeaders) {\n // Removal is required in order to change the order of the properties\n request.removeHeader(key);\n }\n }\n\n const typedRequest = request as ClientRequest & {\n _removedContLen: boolean;\n _contentLength: number;\n _removedTE: boolean;\n agent?: Agent;\n };\n\n if (!hasConnection) {\n const shouldSendKeepAlive = request.shouldKeepAlive && (hasContentLength || request.useChunkedEncodingByDefault || typedRequest.agent);\n if (shouldSendKeepAlive) {\n headers.Connection = 'keep-alive';\n } else {\n headers.Connection = 'close';\n }\n }\n\n if (!hasContentLength && !hasTransferEncoding) {\n // Note: This uses private `_removedContLen` property.\n // This property tells us whether the content-length was explicitly removed or not.\n //\n // Note: This uses private `_removedTE` property.\n // This property tells us whether the transfer-encoding was explicitly removed or not.\n if (!hasTrailer && !typedRequest._removedContLen && typeof typedRequest._contentLength === 'number') {\n headers['Content-Length'] = typedRequest._contentLength;\n } else if (!typedRequest._removedTE) {\n headers['Transfer-Encoding'] = 'chunked';\n }\n }\n\n const transformedHeaders: Record<string, string | number | string[]> = sortHeaders ? generator.orderHeaders(headers as any) : headers;\n\n for (const [key, value] of Object.entries(transformedHeaders)) {\n request.setHeader(key, value);\n }\n }\n\n override addRequest(request: ClientRequest, options: ClientRequestArgs): void {\n const typedRequest = request as ClientRequest & {\n _storeHeader: (firstLine: string, headers: Record<string, string>) => void;\n };\n\n // See https://github.com/nodejs/node/blob/533cafcf7e3ab72e98a2478bc69aedfdf06d3a5e/lib/_http_outgoing.js#L373\n // Note: This overrides the private `_storeHeader`.\n // This is required, because the function copies\n // the `connection`, `content-length` and `trasfer-encoding` headers\n // directly to the underlying buffer.\n typedRequest._storeHeader = (...args) => {\n this.transformRequest(request, { sortHeaders: true });\n\n return _storeHeader.call(request, ...args);\n };\n\n // `agent-base` isn't able to detect the protocol correctly\n (options as any).secureEndpoint = options.protocol === 'https:';\n\n return super.addRequest(request, options);\n }\n\n toPascalCase(header: string): string {\n return header.split('-').map((part) => {\n return part[0]!.toUpperCase() + part.slice(1).toLowerCase();\n }).join('-');\n }\n}\n","import type { NetConnectOpts } from 'node:net';\nimport { ClientRequest, Agent as HttpAgent, type AgentOptions, type ClientRequestArgs } from 'node:http';\nimport type { Duplex } from 'node:stream';\n\n/**\n * @see https://github.com/nodejs/node/blob/533cafcf7e3ab72e98a2478bc69aedfdf06d3a5e/lib/_http_client.js#L129-L162\n * @see https://github.com/nodejs/node/blob/533cafcf7e3ab72e98a2478bc69aedfdf06d3a5e/lib/_http_client.js#L234-L246\n * @see https://github.com/nodejs/node/blob/533cafcf7e3ab72e98a2478bc69aedfdf06d3a5e/lib/_http_client.js#L304-L305\n * Wraps an existing Agent instance,\n * so there's no need to replace `agent.addRequest`.\n */\nexport class WrappedAgent<T extends HttpAgent> implements HttpAgent {\n agent: T;\n\n constructor(agent: T) {\n this.agent = agent;\n }\n\n addRequest(request: ClientRequest, options: ClientRequestArgs): void {\n // @ts-expect-error @types/node has incorrect types\n this.agent.addRequest(request, options);\n }\n\n get keepAlive(): boolean {\n // @ts-expect-error @types/node has incorrect types\n return this.agent.keepAlive;\n }\n\n get maxSockets(): HttpAgent['maxSockets'] {\n return this.agent.maxSockets;\n }\n\n get options(): AgentOptions {\n // @ts-expect-error @types/node has incorrect types\n return this.agent.options;\n }\n\n get defaultPort(): number {\n // @ts-expect-error @types/node has incorrect types\n return this.agent.defaultPort;\n }\n\n get protocol(): string {\n // @ts-expect-error @types/node has incorrect types\n return this.agent.protocol;\n }\n\n destroy(): void {\n this.agent.destroy();\n }\n\n // Let's implement `HttpAgent` so we don't have to\n // type `WrappedAgent as unknown as HttpAgent`\n get maxFreeSockets(): HttpAgent['maxFreeSockets'] {\n return this.agent.maxFreeSockets;\n }\n\n get maxTotalSockets(): HttpAgent['maxTotalSockets'] {\n return this.agent.maxTotalSockets;\n }\n\n get freeSockets(): HttpAgent['freeSockets'] {\n return this.agent.freeSockets;\n }\n\n get sockets(): HttpAgent['sockets'] {\n return this.agent.sockets;\n }\n\n get requests(): HttpAgent['requests'] {\n return this.agent.requests;\n }\n\n on(eventName: string | symbol, listener: (...args: any[]) => void): this {\n this.agent.on(eventName, listener);\n return this;\n }\n\n once(eventName: string | symbol, listener: (...args: any[]) => void): this {\n this.agent.once(eventName, listener);\n return this;\n }\n\n off(eventName: string | symbol, listener: (...args: any[]) => void): this {\n this.agent.off(eventName, listener);\n return this;\n }\n\n addListener(eventName: string | symbol, listener: (...args: any[]) => void): this {\n this.agent.addListener(eventName, listener);\n return this;\n }\n\n removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this {\n this.agent.removeListener(eventName, listener);\n return this;\n }\n\n removeAllListeners(eventName?: string | symbol): this {\n this.agent.removeAllListeners(eventName);\n return this;\n }\n\n setMaxListeners(n: number): this {\n this.agent.setMaxListeners(n);\n return this;\n }\n\n getMaxListeners(): number {\n return this.agent.getMaxListeners();\n }\n\n listeners(eventName: Parameters<HttpAgent['listeners']>[0]): ReturnType<HttpAgent['listeners']> {\n return this.agent.listeners(eventName);\n }\n\n rawListeners(eventName: Parameters<HttpAgent['rawListeners']>[0]): ReturnType<HttpAgent['rawListeners']> {\n return this.agent.rawListeners(eventName);\n }\n\n emit(eventName: string | symbol, ...args: any[]): boolean {\n return this.agent.emit(eventName, ...args);\n }\n\n eventNames(): (string | symbol)[] {\n return this.agent.eventNames();\n }\n\n listenerCount(eventName: string | symbol): number {\n return this.agent.listenerCount(eventName);\n }\n\n prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this {\n this.agent.prependListener(eventName, listener);\n return this;\n }\n\n prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this {\n this.agent.prependOnceListener(eventName, listener);\n return this;\n }\n\n createConnection(options: NetConnectOpts, callback?: (err: Error | null, stream: Duplex) => void): Duplex {\n return this.agent.createConnection(options, callback);\n }\n\n keepSocketAlive(socket: Duplex): void {\n this.agent.keepSocketAlive(socket);\n }\n\n reuseSocket(socket: Duplex, request: ClientRequest): void {\n this.agent.reuseSocket(socket, request);\n }\n\n getName(options?: any): string {\n return this.agent.getName(options);\n }\n}\n","import { Options } from 'got';\nimport http2 from 'http2-wrapper';\nimport { URL } from 'node:url';\nimport type { Context } from '../context.js';\nimport { createResolveProtocol } from '../resolve-protocol.js';\n\n/**\n * Merges original generated headers and user provided overrides.\n * All header overrides will have the original header case, because of antiscraping.\n */\nexport function mergeHeaders(original: Record<string, string>, overrides: Record<string, string | undefined>): {[k: string]: string} {\n const fixedHeaders = new Map();\n\n for (const entry of Object.entries(original)) {\n fixedHeaders.set(entry[0].toLowerCase(), entry);\n }\n\n for (const entry of Object.entries(overrides)) {\n fixedHeaders.set(entry[0].toLowerCase(), entry);\n }\n\n return Object.fromEntries(fixedHeaders.values());\n}\n\ninterface StoredHeaders {\n 1: Record<string, string>;\n 2: Record<string, string>;\n}\n\ninterface HeadersData {\n headers?: StoredHeaders;\n}\n\nconst getResolveProtocolFunction = (options: Options, proxyUrl: string | undefined, sessionData: unknown) => {\n const { resolveProtocol } = options as any;\n\n if (resolveProtocol) {\n return resolveProtocol;\n }\n\n if (proxyUrl) {\n return createResolveProtocol(proxyUrl, sessionData as any, Math.min(options?.timeout?.connect ?? 60_000, options?.timeout?.request ?? 60_000));\n }\n\n return (...args: Parameters<typeof http2.auto.resolveProtocol>) => http2.auto.resolveProtocol({\n ...args[0],\n timeout: Math.min(options?.timeout?.connect ?? 60_000, options?.timeout?.request ?? 60_000),\n });\n};\n\nexport async function browserHeadersHook(options: Options): Promise<void> {\n const { context } = options;\n const {\n headerGeneratorOptions,\n useHeaderGenerator,\n headerGenerator,\n proxyUrl,\n } = context as Context;\n const sessionData = context.sessionData as HeadersData | undefined;\n\n if (!useHeaderGenerator || !headerGenerator) return;\n\n const createHeadersPair = () => ({\n 1: headerGenerator.getHeaders({\n httpVersion: '1',\n ...headerGeneratorOptions,\n }),\n 2: headerGenerator.getHeaders({\n httpVersion: '2',\n ...headerGeneratorOptions,\n }),\n });\n\n const url = options.url as URL;\n\n const resolveProtocol = getResolveProtocolFunction(options, proxyUrl, sessionData);\n\n let alpnProtocol;\n if (url.protocol === 'https:') {\n alpnProtocol = (await resolveProtocol({\n host: url.hostname,\n port: url.port || 443,\n rejectUnauthorized: false,\n ALPNProtocols: ['h2', 'http/1.1'],\n servername: url.hostname,\n })).alpnProtocol;\n }\n\n const httpVersion = alpnProtocol === 'h2' ? '2' : '1';\n\n let generatedHeaders: Record<string, string>;\n if (sessionData) {\n if (!sessionData.headers) {\n sessionData.headers = createHeadersPair();\n }\n\n generatedHeaders = sessionData.headers[httpVersion];\n } else {\n generatedHeaders = headerGenerator.getHeaders({\n httpVersion,\n ...headerGeneratorOptions,\n });\n }\n\n if (!options.decompress) {\n for (const key of Object.keys(generatedHeaders)) {\n if (key.toLowerCase() === 'accept-encoding') {\n delete generatedHeaders[key];\n }\n }\n }\n\n // TODO: Use `options.merge({headers: generatedHeaders})` instead\n options.headers = mergeHeaders(generatedHeaders, options.headers as Record<string, string>);\n}\n","import { isIPv6 } from 'node:net';\nimport tls, { TLSSocket } from 'node:tls';\nimport { URL } from 'node:url';\nimport { type Headers } from 'got';\nimport { auto, type ResolveProtocolConnectFunction, type ResolveProtocolFunction } from 'http2-wrapper';\nimport QuickLRU from 'quick-lru';\nimport { ProxyError } from './hooks/proxy.js';\nimport { buildBasicAuthHeader } from './auth.js';\n\nconst connect = async (proxyUrl: string, options: tls.ConnectionOptions, callback: () => void) => new Promise<TLSSocket>((resolve, reject) => {\n let host = `${options.host}:${options.port}`;\n\n if (isIPv6(options.host!)) {\n host = `[${options.host}]:${options.port}`;\n }\n\n void (async () => {\n try {\n const headers: Headers = {\n host,\n };\n\n const url = new URL(proxyUrl);\n const basic = buildBasicAuthHeader(url);\n\n if (basic) {\n headers.authorization = basic;\n headers['proxy-authorization'] = basic;\n }\n\n const request = await auto(url, {\n method: 'CONNECT',\n headers,\n path: host,\n // TODO: this property doesn't exist according to the types\n pathname: host,\n rejectUnauthorized: false,\n } as never);\n\n request.end();\n\n request.once('error', reject);\n\n request.once('connect', (response, socket, head) => {\n if (response.statusCode !== 200 || head.length > 0) {\n reject(new ProxyError(`Proxy responded with ${response.statusCode} ${response.statusMessage}: ${head.length} bytes.\n\nBelow is the first 100 bytes of the proxy response body:\n${head.toString('utf8', 0, 100)}`, { cause: head.toString('utf8') }));\n socket.destroy();\n return;\n }\n\n const tlsSocket = tls.connect({\n ...options,\n socket,\n }, callback);\n\n resolve(tlsSocket);\n });\n } catch (error) {\n reject(error);\n }\n })();\n});\n\nconst createCaches = () => ({\n protocolCache: new QuickLRU<string, string>({ maxSize: 1000 }),\n resolveAlpnQueue: new Map(),\n});\n\nconst defaults = createCaches();\n\nexport interface ProtocolCache {\n protocolCache?: typeof defaults.protocolCache;\n resolveAlpnQueue?: typeof defaults.resolveAlpnQueue;\n}\n\nexport const createResolveProtocol = (proxyUrl: string, sessionData?: ProtocolCache, timeout?: number): ResolveProtocolFunction => {\n let { protocolCache, resolveAlpnQueue } = defaults;\n\n if (sessionData) {\n if (!sessionData.protocolCache || !sessionData.resolveAlpnQueue) {\n Object.assign(sessionData, createCaches());\n }\n\n protocolCache = sessionData.protocolCache!;\n resolveAlpnQueue = sessionData.resolveAlpnQueue!;\n }\n\n const connectWithProxy: ResolveProtocolConnectFunction = async (pOptions, pCallback) => {\n return connect(proxyUrl, pOptions, pCallback);\n };\n\n const resolveProtocol: ResolveProtocolFunction = auto.createResolveProtocol(\n protocolCache as unknown as Map<string, string>,\n resolveAlpnQueue,\n connectWithProxy,\n );\n\n return async (...args: Parameters<ResolveProtocolFunction>) => resolveProtocol({\n ...args[0],\n timeout,\n });\n};\n","import { Options, type Agents } from 'got';\nimport http2, { auto } from 'http2-wrapper';\nimport { URL } from 'node:url';\nimport { HttpProxyAgent, HttpRegularProxyAgent, HttpsProxyAgent } from '../agent/h1-proxy-agent.js';\nimport { TransformHeadersAgent } from '../agent/transform-headers-agent.js';\nimport { buildBasicAuthHeader } from '../auth.js';\n\nconst {\n HttpOverHttp2,\n HttpsOverHttp2,\n Http2OverHttp2,\n Http2OverHttps,\n Http2OverHttp,\n} = http2.proxies;\n\nexport async function proxyHook(options: Options): Promise<void> {\n const { context: { proxyUrl } } = options;\n\n if (proxyUrl) {\n const parsedProxy = new URL(proxyUrl as string);\n\n validateProxyProtocol(parsedProxy.protocol);\n\n options.agent = await getAgents(parsedProxy, options.https.rejectUnauthorized!);\n }\n}\n\nexport class ProxyError extends Error {}\n\nfunction validateProxyProtocol(protocol: string) {\n const isSupported = protocol === 'http:' || protocol === 'https:';\n\n if (!isSupported) {\n throw new ProxyError(`Proxy URL protocol \"${protocol}\" is not supported. Please use HTTP or HTTPS.`);\n }\n}\n\nexport async function getAgents(parsedProxyUrl: URL, rejectUnauthorized: boolean) {\n // Sockets must not be reused, the proxy server may rotate upstream proxies as well.\n\n const headers: Record<string, string> = {};\n const basic = buildBasicAuthHeader(parsedProxyUrl);\n\n if (basic) {\n headers.authorization = basic;\n headers['proxy-authorization'] = basic;\n }\n\n // `http2-wrapper` Agent options\n const wrapperOptions = {\n proxyOptions: {\n url: parsedProxyUrl,\n headers,\n\n // Based on the got https.rejectUnauthorized option\n rejectUnauthorized,\n },\n\n // The sockets won't be reused, no need to keep them\n maxFreeSockets: 0,\n maxEmptySessions: 0,\n };\n\n // Native `http.Agent` options\n const nativeOptions = {\n proxy: parsedProxyUrl,\n\n // The sockets won't be reused, no need to keep them\n maxFreeSockets: 0,\n };\n\n let agent: Agents;\n\n if (parsedProxyUrl.protocol === 'https:') {\n let alpnProtocol = 'http/1.1';\n\n try {\n const result = await auto.resolveProtocol({\n host: parsedProxyUrl.hostname,\n port: parsedProxyUrl.port,\n rejectUnauthorized,\n ALPNProtocols: ['h2', 'http/1.1'],\n servername: parsedProxyUrl.hostname,\n });\n\n alpnProtocol = result.alpnProtocol;\n } catch {\n // Some proxies don't support CONNECT protocol, use http/1.1\n }\n\n const proxyIsHttp2 = alpnProtocol === 'h2';\n\n if (proxyIsHttp2) {\n agent = {\n http: new TransformHeadersAgent(new HttpOverHttp2(wrapperOptions)),\n https: new TransformHeadersAgent(new HttpsOverHttp2(wrapperOptions)),\n http2: new Http2OverHttp2(wrapperOptions),\n };\n } else {\n // Upstream proxies hang up connections on CONNECT + unsecure HTTP\n agent = {\n // @ts-expect-error New @types/node patch has narrower types than the originally exported got-scraping interface\n http: new TransformHeadersAgent(new HttpProxyAgent(nativeOptions)),\n // @ts-expect-error New @types/node patch has narrower types than the originally exported got-scraping interface\n https: new TransformHeadersAgent(new HttpsProxyAgent(nativeOptions)),\n http2: new Http2OverHttps(wrapperOptions),\n };\n }\n } else {\n // Upstream proxies hang up connections on CONNECT + unsecure HTTP\n agent = {\n http: new TransformHeadersAgent(new HttpRegularProxyAgent(nativeOptions)),\n // @ts-expect-error New @types/node patch has narrower types than the originally exported got-scraping interface\n https: new TransformHeadersAgent(new HttpsProxyAgent(nativeOptions)),\n http2: new Http2OverHttp(wrapperOptions),\n };\n }\n\n return agent;\n}\n","/* eslint-disable max-classes-per-file */\nimport http, { ClientRequest, type ClientRequestArgs } from 'node:http';\nimport https from 'node:https';\nimport { isIPv6 } from 'node:net';\nimport tls, { type ConnectionOptions } from 'node:tls';\nimport { URL } from 'node:url';\nimport { buildBasicAuthHeader } from '../auth.js';\n\ninterface AgentOptions extends http.AgentOptions {\n proxy: string | URL;\n disableConnect?: boolean;\n}\n\nconst initialize = (self: http.Agent & { proxy: URL }, options: AgentOptions) => {\n self.proxy = typeof options.proxy === 'string' ? new URL(options.proxy) : options.proxy;\n};\n\nconst getPort = (url: URL): number => {\n if (url.port !== '') {\n return Number(url.port);\n }\n\n if (url.protocol === 'http:') {\n return 80;\n }\n\n if (url.protocol === 'https:') {\n return 443;\n }\n\n throw new Error(`Unexpected protocol: ${url.protocol}`);\n};\n\nexport class HttpRegularProxyAgent extends http.Agent {\n proxy!: URL;\n\n constructor(options: AgentOptions) {\n super(options);\n\n initialize(this, options);\n }\n\n addRequest(request: ClientRequest, options: ClientRequestArgs): void {\n if (options.socketPath) {\n // @ts-expect-error @types/node is missing types\n super.addRequest(request, options);\n return;\n }\n\n let hostport = `${options.host}:${options.port}`;\n\n if (isIPv6(options.host!)) {\n hostport = `[${options.host}]:${options.port}`;\n }\n\n const url = new URL(`${request.protocol}//${hostport}${request.path}`);\n\n options = {\n ...options,\n host: this.proxy.hostname,\n port: getPort(this.proxy),\n };\n\n request.path = url.href;\n\n const basic = buildBasicAuthHeader(this.proxy);\n if (basic) {\n request.setHeader('proxy-authorization', basic);\n }\n\n // @ts-expect-error @types/node is missing types\n super.addRequest(request, options);\n }\n}\n\nexport class HttpProxyAgent extends http.Agent {\n proxy!: URL;\n\n constructor(options: AgentOptions) {\n super(options);\n\n // @ts-expect-error New @types/node patch has narrower types than the originally exported got-scraping interface\n initialize(this, options);\n }\n\n // @ts-expect-error New @types/node patch has narrower types than the originally exported got-scraping interface\n override createConnection(options: ConnectionOptions, callback: (error: Error | undefined, socket?: unknown) => void): void {\n if (options.path) {\n // @ts-expect-error @types/node is missing types\n super.createConnection(options, callback);\n return;\n }\n\n const fn = this.proxy.protocol === 'https:' ? https.request : http.request;\n\n let hostport = `${options.host}:${options.port}`;\n\n if (isIPv6(options.host!)) {\n hostport = `[${options.host}]:${options.port}`;\n }\n\n const headers: Record<string, string> = {\n host: hostport,\n };\n\n const basic = buildBasicAuthHeader(this.proxy);\n if (basic) {\n headers['proxy-authorization'] = basic;\n headers.authorization = basic;\n }\n\n const connectRequest = fn(this.proxy, {\n method: 'CONNECT',\n headers,\n path: hostport,\n agent: false,\n\n rejectUnauthorized: false,\n });\n\n connectRequest.once('connect', (response, socket, head) => {\n if (head.length > 0 || response.statusCode !== 200) {\n socket.destroy();\n\n const error = new Error(`The proxy responded with ${response.statusCode} ${response.statusMessage}: ${head.toString()}`);\n callback(error);\n return;\n }\n\n if ((options as any).protocol === 'https:') {\n callback(undefined, tls.connect({\n ...options,\n socket,\n }));\n return;\n }\n\n callback(undefined, socket);\n });\n\n connectRequest.once('error', (error) => {\n callback(error);\n });\n\n connectRequest.end();\n }\n}\n\nexport class HttpsProxyAgent extends https.Agent {\n proxy!: URL;\n\n constructor(options: AgentOptions) {\n super(options);\n\n // @ts-expect-error New @types/node patch has narrower types than the originally exported got-scraping interface\n initialize(this, options);\n }\n\n // @ts-expect-error New @types/node patch has narrower types than the originally exported got-scraping interface\n override createConnection(options: ConnectionOptions, callback: (error: Error | undefined, socket?: unknown) => void): void {\n HttpProxyAgent.prototype.createConnection.call(this, options, callback);\n }\n}\n","/**\n * Returns the Basic auth string based on the `username` and `password` parts of the given URL.\n * If the URL does not contain neither username nor password, returns `null`.\n * @param url URL object to process\n * @returns `Basic BASE64` string\n */\nexport function buildBasicAuthHeader(url: URL): string | null {\n if (!url.username && !url.password) {\n return null;\n }\n\n const username = decodeURIComponent(url.username ?? '');\n const password = decodeURIComponent(url.password ?? '');\n\n const basic = Buffer.from(`${username}:${password}`).toString('base64');\n\n return `Basic ${basic}`;\n}\n","import { type OptionsInit as GotOptionsInit, Options } from 'got';\nimport type { OptionsInit } from '../context.js';\n\nexport function customOptionsHook(raw: GotOptionsInit, options: Options): void {\n const typedRaw = raw as OptionsInit;\n\n const names = [\n 'proxyUrl',\n 'headerGeneratorOptions',\n 'useHeaderGenerator',\n 'insecureHTTPParser',\n 'sessionToken',\n ] as const;\n\n for (const name of names) {\n if (name in raw) {\n options.context[name] = typedRaw[name];\n delete typedRaw[name];\n }\n }\n}\n","import zlib from 'node:zlib';\nimport { ClientRequest, IncomingMessage } from 'node:http';\nimport type { HandlerFunction } from 'got';\nimport { PassThrough, Transform } from 'node:stream';\nimport mimicResponse from 'mimic-response';\n\nconst onResponse = (response: IncomingMessage, propagate: (fixedResponse: IncomingMessage) => void) => {\n const encoding = response.headers['content-encoding']?.toLowerCase();\n\n // Append empty chunk.\n const zlibOptions = {\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH,\n };\n\n const useDecompressor = (decompressor: Transform) => {\n delete response.headers['content-encoding'];\n\n const result = new PassThrough({\n autoDestroy: false,\n destroy(error, callback) {\n response.destroy();\n\n callback(error);\n },\n });\n\n decompressor.once('error', (error) => {\n result.destroy(error);\n });\n\n response.pipe(decompressor).pipe(result);\n\n propagate(mimicResponse(response, result));\n };\n\n if (encoding === 'gzip' || encoding === 'x-gzip') {\n useDecompressor(zlib.createGunzip(zlibOptions));\n } else if (encoding === 'deflate' || encoding === 'x-deflate') {\n let read = false;\n\n response.once('data', (chunk: Buffer) => {\n read = true;\n\n response.unshift(chunk);\n\n // See http://stackoverflow.com/questions/37519828\n // eslint-disable-next-line no-bitwise\n const decompressor = (chunk[0] & 0x0F) === 0x08 ? zlib.createInflate() : zlib.createInflateRaw();\n useDecompressor(decompressor);\n });\n\n response.once('end', () => {\n if (!read) {\n propagate(response);\n }\n });\n } else if (encoding === 'br') {\n let read = false;\n\n response.once('data', (chunk: Buffer) => {\n read = true;\n\n response.unshift(chunk);\n\n const decompressor = zlib.createBrotliDecompress();\n useDecompressor(decompressor);\n });\n\n response.once('end', () => {\n if (!read) {\n propagate(response);\n }\n });\n } else {\n propagate(response);\n }\n};\n\n// Some websites incorrectly compress the response.\n// Got is very strict so it would throw.\n// Browsers don't, so we need fix this.\nexport const fixDecompress: HandlerFunction = (options, next) => {\n const result = next(options);\n\n // @ts-expect-error Looks like a TypeScript bug\n result.on('request', (request: ClientRequest) => {\n const emit = request.emit.bind(request);\n\n request.emit = (event: string, ...args: unknown[]) => {\n // It won't double decompress, because Got checks the content-encoding header.\n // We delete it if the response is compressed.\n if (event === 'response' && options.decompress) {\n const response = args[0] as IncomingMessage;\n\n const emitted = request.listenerCount('response') !== 0;\n\n onResponse(response, (fixedResponse: IncomingMessage) => {\n emit('response', fixedResponse);\n });\n\n return emitted;\n }\n\n return emit(event, ...args);\n };\n });\n\n return result;\n};\n","import { URL } from 'node:url';\nimport { Options } from 'got';\nimport { auto, type AutoRequestOptions } from 'http2-wrapper';\nimport type { Context } from '../context.js';\nimport { createResolveProtocol } from '../resolve-protocol.js';\n\nexport function http2Hook(options: Options): void {\n const { proxyUrl, sessionData } = options.context as Context;\n\n if (options.http2 && (options.url as URL).protocol !== 'http:') {\n options.request = (url, requestOptions, callback) => {\n const typedRequestOptions = requestOptions as AutoRequestOptions;\n if (proxyUrl) {\n typedRequestOptions.resolveProtocol = createResolveProtocol(\n proxyUrl,\n sessionData as any,\n Math.min(options?.timeout?.connect ?? 60_000, options?.timeout?.request ?? 60_000),\n );\n }\n\n return auto(url, typedRequestOptions, callback);\n };\n } else {\n // Restore to default.\n // Otherwise it would use the `request` function above after redirects.\n options.request = undefined;\n }\n}\n","/* eslint-disable no-underscore-dangle */\n\nimport { Options } from 'got';\n\nexport function insecureParserHook(options: Options): void {\n if (options.context.insecureHTTPParser !== undefined) {\n // `insecureHTTPParser` is not an allowed HTTP option in Got,\n // so we must inject it directly into the Got internals for Node.js `http` module to use it.\n\n // @ts-expect-error Private use\n options._unixOptions = {\n // @ts-expect-error Private use\n ...options._unixOptions,\n insecureHTTPParser: options.context.insecureHTTPParser,\n };\n }\n}\n","import ow from 'ow';\n\nconst validationSchema = {\n proxyUrl: ow.optional.string.url,\n useHeaderGenerator: ow.optional.boolean,\n headerGeneratorOptions: ow.optional.object,\n insecureHTTPParser: ow.optional.boolean,\n sessionToken: ow.optional.object,\n};\n\nexport function optionsValidationHandler(options: unknown): void {\n ow(options, ow.object.partialShape(validationSchema));\n}\n","import type { BeforeRedirectHook } from 'got';\nimport { URL } from 'node:url';\n\nexport const refererHook: BeforeRedirectHook = (options, response) => {\n const url = options.url as URL;\n const resUrl = new URL(response.url);\n\n // Empty string means fall back to default.\n const policy = response.headers['referer-policy'] || 'strict-origin-when-cross-origin';\n\n if (policy === 'no-referrer') {\n delete options.headers.referer;\n } else if (policy === 'no-referrer-when-downgrade') {\n if (resUrl.protocol === 'https:' && url.protocol === 'http:') {\n delete options.headers.referer;\n } else {\n options.headers.referer = `${resUrl.origin}${resUrl.pathname}${resUrl.search}`;\n }\n } else if (policy === 'origin') {\n options.headers.referer = resUrl.origin;\n } else if (policy === 'origin-when-cross-origin') {\n if (url.origin === resUrl.origin) {\n options.headers.referer = `${resUrl.origin}${resUrl.pathname}${resUrl.search}`;\n } else {\n options.headers.referer = resUrl.origin;\n }\n } else if (policy === 'same-origin') {\n if (url.origin === resUrl.origin) {\n options.headers.referer = `${resUrl.origin}${resUrl.pathname}${resUrl.search}`;\n } else {\n delete options.headers.referer;\n }\n } else if (policy === 'strict-origin') {\n if (resUrl.protocol === 'https:' && url.protocol === 'http:') {\n delete options.headers.referer;\n } else {\n options.headers.referer = resUrl.origin;\n }\n } else if (policy === 'strict-origin-when-cross-origin') {\n if (url.origin === resUrl.origin) {\n options.headers.referer = `${resUrl.origin}${resUrl.pathname}${resUrl.search}`;\n } else if (resUrl.protocol === 'https:' && url.protocol === 'http:') {\n delete options.headers.referer;\n } else {\n options.headers.referer = resUrl.origin;\n }\n } else if (policy === 'unsafe-url') {\n options.headers.referer = `${resUrl.origin}${resUrl.pathname}${resUrl.search}`;\n }\n};\n","import { Options } from 'got';\n\nclass Storage {\n storage: WeakMap<object, unknown>;\n\n constructor() {\n this.storage = new WeakMap();\n }\n\n get<T extends object>(token: object | undefined): T | undefined {\n if (!token) {\n return;\n }\n\n if (!this.storage.has(token)) {\n this.storage.set(token, {});\n }\n\n return this.storage.get(token) as T | undefined;\n }\n}\n\nconst storage = new Storage();\n\nexport const sessionDataHook = (options: Options): void => {\n options.context.sessionData = storage.get(options.context.sessionToken as object | undefined);\n};\n","/* eslint-disable no-underscore-dangle */\n/* eslint-disable no-bitwise */\nimport { Options } from 'got';\n\nconst supportsFirefoxFully = Number(process.versions.node.split('.')[0]) >= 17;\n\nconst SSL_OP_TLSEXT_PADDING = 1 << 4;\nconst SSL_OP_NO_ENCRYPT_THEN_MAC = 1 << 19;\n\n// OpenSSL supports secp256r1. It's just reffered to as prime256v1.\nconst ecdhCurve = {\n firefox: (supportsFirefoxFully ? [\n 'X25519',\n 'prime256v1',\n 'secp384r1',\n 'secp521r1',\n 'ffdhe2048',\n 'ffdhe3072',\n ] : [\n 'X25519',\n 'prime256v1',\n 'secp384r1',\n 'secp521r1',\n ]).join(':'),\n chrome: [\n 'X25519',\n 'prime256v1',\n 'secp384r1',\n ].join(':'),\n safari: [\n 'X25519',\n 'prime256v1',\n 'secp384r1',\n 'secp521r1',\n ].join(':'),\n} as const;\n\nexport const sigalgs = {\n firefox: [\n 'ecdsa_secp256r1_sha256',\n 'ecdsa_secp384r1_sha384',\n 'ecdsa_secp521r1_sha512',\n 'rsa_pss_rsae_sha256',\n 'rsa_pss_rsae_sha384',\n 'rsa_pss_rsae_sha512',\n 'rsa_pkcs1_sha256',\n 'rsa_pkcs1_sha384',\n 'rsa_pkcs1_sha512',\n 'ECDSA+SHA1',\n 'rsa_pkcs1_sha1',\n ].join(':'),\n chrome: [\n 'ecdsa_secp256r1_sha256',\n 'rsa_pss_rsae_sha256',\n 'rsa_pkcs1_sha256',\n 'ecdsa_secp384r1_sha384',\n 'rsa_pss_rsae_sha384',\n 'rsa_pkcs1_sha384',\n 'rsa_pss_rsae_sha512',\n 'rsa_pkcs1_sha512',\n ].join(':'),\n safari: [\n 'ecdsa_secp256r1_sha256',\n 'rsa_pss_rsae_sha256',\n 'rsa_pkcs1_sha256',\n 'ecdsa_secp384r1_sha384',\n 'ECDSA+SHA1',\n 'rsa_pss_rsae_sha384',\n 'rsa_pkcs1_sha384',\n 'rsa_pss_rsae_sha512',\n 'rsa_pkcs1_sha512',\n 'RSA+SHA1',\n ].join(':'),\n} as const;\n\nexport const knownCiphers = {\n chrome: [\n // Chrome v92\n 'TLS_AES_128_GCM_SHA256',\n 'TLS_AES_256_GCM_SHA384',\n 'TLS_CHACHA20_POLY1305_SHA256',\n 'ECDHE-ECDSA-AES128-GCM-SHA256',\n 'ECDHE-RSA-AES128-GCM-SHA256',\n 'ECDHE-ECDSA-AES256-GCM-SHA384',\n 'ECDHE-RSA-AES256-GCM-SHA384',\n 'ECDHE-ECDSA-CHACHA20-POLY1305',\n 'ECDHE-RSA-CHACHA20-POLY1305',\n // Legacy:\n 'ECDHE-RSA-AES128-SHA',\n 'ECDHE-RSA-AES256-SHA',\n 'AES128-GCM-SHA256',\n 'AES256-GCM-SHA384',\n 'AES128-SHA',\n 'AES256-SHA',\n ].join(':'),\n firefox: [\n // Firefox v91\n 'TLS_AES_128_GCM_SHA256',\n 'TLS_CHACHA20_POLY1305_SHA256',\n 'TLS_AES_256_GCM_SHA384',\n 'ECDHE-ECDSA-AES128-GCM-SHA256',\n 'ECDHE-RSA-AES128-GCM-SHA256',\n 'ECDHE-ECDSA-CHACHA20-POLY1305',\n 'ECDHE-RSA-CHACHA20-POLY1305',\n 'ECDHE-ECDSA-AES256-GCM-SHA384',\n 'ECDHE-RSA-AES256-GCM-SHA384',\n // Legacy:\n 'ECDHE-ECDSA-AES256-SHA',\n 'ECDHE-ECDSA-AES128-SHA',\n 'ECDHE-RSA-AES128-SHA',\n 'ECDHE-RSA-AES256-SHA',\n 'AES128-GCM-SHA256',\n 'AES256-GCM-SHA384',\n 'AES128-SHA',\n 'AES256-SHA',\n 'DES-CBC3-SHA',\n ].join(':'),\n safari: [\n // Safari v14\n 'TLS_AES_128_GCM_SHA256',\n 'TLS_AES_256_GCM_SHA384',\n 'TLS_CHACHA20_POLY1305_SHA256',\n 'ECDHE-ECDSA-AES256-GCM-SHA384',\n 'ECDHE-ECDSA-AES128-GCM-SHA256',\n 'ECDHE-ECDSA-CHACHA20-POLY1305',\n 'ECDHE-RSA-AES256-GCM-SHA384',\n 'ECDHE-RSA-AES128-GCM-SHA256',\n 'ECDHE-RSA-CHACHA20-POLY1305',\n // Legacy:\n 'ECDHE-ECDSA-AES256-SHA384',\n 'ECDHE-ECDSA-AES128-SHA256',\n 'ECDHE-ECDSA-AES256-SHA',\n 'ECDHE-ECDSA-AES128-SHA',\n 'ECDHE-RSA-AES256-SHA384',\n 'ECDHE-RSA-AES128-SHA256',\n 'ECDHE-RSA-AES256-SHA',\n 'ECDHE-RSA-AES128-SHA',\n 'AES256-GCM-SHA384',\n 'AES128-GCM-SHA256',\n 'AES256-SHA256',\n 'AES128-SHA256',\n 'AES256-SHA',\n 'AES128-SHA',\n 'ECDHE-ECDSA-DES-CBC3-SHA',\n 'ECDHE-RSA-DES-CBC3-SHA',\n 'DES-CBC3-SHA',\n ].join(':'),\n} as const;\n\nexport const minVersion = {\n firefox: 'TLSv1.2',\n chrome: 'TLSv1',\n safari: 'TLSv1.2',\n} as const;\n\nexport const maxVersion = {\n firefox: 'TLSv1.3',\n chrome: 'TLSv1.3',\n safari: 'TLSv1.3',\n} as const;\n\nexport const secureOptions = {\n firefox: SSL_OP_TLSEXT_PADDING | SSL_OP_NO_ENCRYPT_THEN_MAC,\n chrome: SSL_OP_TLSEXT_PADDING | SSL_OP_NO_ENCRYPT_THEN_MAC,\n safari: SSL_OP_TLSEXT_PADDING | SSL_OP_NO_ENCRYPT_THEN_MAC,\n} as const;\n\nexport const requestOCSP = {\n firefox: true,\n chrome: true,\n safari: true,\n};\n\ntype BrowserName = 'chrome' | 'firefox' | 'safari' | undefined;\n\nconst getUserAgent = (headers: Record<string, string | string[] | undefined>): string | undefined => {\n for (const [header, value] of Object.entries(headers)) {\n if (header.toLowerCase() === 'user-agent') {\n return value as string;\n }\n }\n return undefined;\n};\n\nconst getBrowser = (userAgent?: string): BrowserName | undefined => {\n if (!userAgent) {\n return;\n }\n\n let browser;\n if (userAgent.includes('Firefox')) {\n browser = 'firefox';\n } else if (userAgent.includes('Chrome')) {\n browser = 'chrome';\n } else {\n browser = 'safari';\n }\n\n return browser as BrowserName;\n};\n\nexport function tlsHook(options: Options): void {\n const { https } = options;\n\n if (https.ciphers || https.signatureAlgorithms || https.minVersion || https.maxVersion) {\n return;\n }\n\n // Let's default to Firefox settings as it has low failure rates\n const browser = getBrowser(getUserAgent(options.headers)) ?? 'firefox';\n\n https.ciphers = knownCiphers[browser];\n https.signatureAlgorithms = sigalgs[browser];\n https.ecdhCurve = ecdhCurve[browser];\n https.minVersion = minVersion[browser];\n https.maxVersion = maxVersion[browser];\n\n // @ts-expect-error Private use\n options._unixOptions = {\n // @ts-expect-error Private use\n ...options._unixOptions,\n secureOptions: secureOptions[browser],\n requestOCSP: requestOCSP[browser],\n };\n}\n"],"mappings":";;;;;;;;;AAAA,OAAOA,WAAU;AACjB,OAAOC,YAAW;AAElB,SAAS,OAAO,aAAa,WAAAC,gBAAmC;AAChE,SAAS,mBAAAC,wBAAuB;;;ACHhC,SAAS,uBAAuB;AAChC,SAA+B,uBAA+C;;;ACD9E,OAA6F;AAUtF,IAAM,gBAAN,MAAM,cAAuD;AAAA,EAGhE,YAAY,OAAU;AAFtB;AAGI,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,WAAW,SAAwB,SAAkC;AAEjE,SAAK,MAAM,WAAW,SAAS,OAAO;AAAA,EAC1C;AAAA,EAEA,IAAI,YAAqB;AAErB,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,IAAI,aAAsC;AACtC,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,IAAI,UAAwB;AAExB,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,IAAI,cAAsB;AAEtB,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,IAAI,WAAmB;AAEnB,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,UAAgB;AACZ,SAAK,MAAM,QAAQ;AAAA,EACvB;AAAA;AAAA;AAAA,EAIA,IAAI,iBAA8C;AAC9C,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,IAAI,kBAAgD;AAChD,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,IAAI,cAAwC;AACxC,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,IAAI,UAAgC;AAChC,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,IAAI,WAAkC;AAClC,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,GAAG,WAA4B,UAA0C;AACrE,SAAK,MAAM,GAAG,WAAW,QAAQ;AACjC,WAAO;AAAA,EACX;AAAA,EAEA,KAAK,WAA4B,UAA0C;AACvE,SAAK,MAAM,KAAK,WAAW,QAAQ;AACnC,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,WAA4B,UAA0C;AACtE,SAAK,MAAM,IAAI,WAAW,QAAQ;AAClC,WAAO;AAAA,EACX;AAAA,EAEA,YAAY,WAA4B,UAA0C;AAC9E,SAAK,MAAM,YAAY,WAAW,QAAQ;AAC1C,WAAO;AAAA,EACX;AAAA,EAEA,eAAe,WAA4B,UAA0C;AACjF,SAAK,MAAM,eAAe,WAAW,QAAQ;AAC7C,WAAO;AAAA,EACX;AAAA,EAEA,mBAAmB,WAAmC;AAClD,SAAK,MAAM,mBAAmB,SAAS;AACvC,WAAO;AAAA,EACX;AAAA,EAEA,gBAAgB,GAAiB;AAC7B,SAAK,MAAM,gBAAgB,CAAC;AAC5B,WAAO;AAAA,EACX;AAAA,EAEA,kBAA0B;AACtB,WAAO,KAAK,MAAM,gBAAgB;AAAA,EACtC;AAAA,EAEA,UAAU,WAAsF;AAC5F,WAAO,KAAK,MAAM,UAAU,SAAS;AAAA,EACzC;AAAA,EAEA,aAAa,WAA4F;AACrG,WAAO,KAAK,MAAM,aAAa,SAAS;AAAA,EAC5C;AAAA,EAEA,KAAK,cAA+B,MAAsB;AACtD,WAAO,KAAK,MAAM,KAAK,WAAW,GAAG,IAAI;AAAA,EAC7C;AAAA,EAEA,aAAkC;AAC9B,WAAO,KAAK,MAAM,WAAW;AAAA,EACjC;AAAA,EAEA,cAAc,WAAoC;AAC9C,WAAO,KAAK,MAAM,cAAc,SAAS;AAAA,EAC7C;AAAA,EAEA,gBAAgB,WAA4B,UAA0C;AAClF,SAAK,MAAM,gBAAgB,WAAW,QAAQ;AAC9C,WAAO;AAAA,EACX;AAAA,EAEA,oBAAoB,WAA4B,UAA0C;AACtF,SAAK,MAAM,oBAAoB,WAAW,QAAQ;AAClD,WAAO;AAAA,EACX;AAAA,EAEA,iBAAiB,SAAyB,UAAgE;AACtG,WAAO,KAAK,MAAM,iBAAiB,SAAS,QAAQ;AAAA,EACxD;AAAA,EAEA,gBAAgB,QAAsB;AAClC,SAAK,MAAM,gBAAgB,MAAM;AAAA,EACrC;AAAA,EAEA,YAAY,QAAgB,SAA8B;AACtD,SAAK,MAAM,YAAY,QAAQ,OAAO;AAAA,EAC1C;AAAA,EAEA,QAAQ,SAAuB;AAC3B,WAAO,KAAK,MAAM,QAAQ,OAAO;AAAA,EACrC;AACJ;AAlJoE;AAA7D,IAAM,eAAN;;;ADLP,IAAM,EAAE,aAAa,IAAI,gBAAgB;AAEzC,IAAM,YAAY,IAAI,gBAAgB;AAK/B,IAAM,yBAAN,MAAM,+BAA+C,aAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxE,iBAAiB,SAAwB,EAAE,YAAY,GAAiC;AACpF,UAAM,UAAsD,CAAC;AAC7D,UAAM,gBAAgB,QAAQ,UAAU,YAAY;AACpD,UAAM,mBAAmB,QAAQ,UAAU,gBAAgB;AAC3D,UAAM,sBAAsB,QAAQ,UAAU,mBAAmB;AACjE,UAAM,aAAa,QAAQ,UAAU,SAAS;AAC9C,UAAM,OAAO,QAAQ,eAAe;AAEpC,eAAW,OAAO,MAAM;AACpB,UAAI,IAAI,YAAY,EAAE,WAAW,IAAI,GAAG;AACpC,gBAAQ,GAAG,IAAI,QAAQ,UAAU,GAAG;AAAA,MACxC,OAAO;AACH,gBAAQ,KAAK,aAAa,GAAG,CAAC,IAAI,QAAQ,UAAU,GAAG;AAAA,MAC3D;AAEA,UAAI,aAAa;AAEb,gBAAQ,aAAa,GAAG;AAAA,MAC5B;AAAA,IACJ;AAEA,UAAM,eAAe;AAOrB,QAAI,CAAC,eAAe;AAChB,YAAM,sBAAsB,QAAQ,oBAAoB,oBAAoB,QAAQ,+BAA+B,aAAa;AAChI,UAAI,qBAAqB;AACrB,gBAAQ,aAAa;AAAA,MACzB,OAAO;AACH,gBAAQ,aAAa;AAAA,MACzB;AAAA,IACJ;AAEA,QAAI,CAAC,oBAAoB,CAAC,qBAAqB;AAM3C,UAAI,CAAC,cAAc,CAAC,aAAa,mBAAmB,OAAO,aAAa,mBAAmB,UAAU;AACjG,gBAAQ,gBAAgB,IAAI,aAAa;AAAA,MAC7C,WAAW,CAAC,aAAa,YAAY;AACjC,gBAAQ,mBAAmB,IAAI;AAAA,MACnC;AAAA,IACJ;AAEA,UAAM,qBAAiE,cAAc,UAAU,aAAa,OAAc,IAAI;AAE9H,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,kBAAkB,GAAG;AAC3D,cAAQ,UAAU,KAAK,KAAK;AAAA,IAChC;AAAA,EACJ;AAAA,EAES,WAAW,SAAwB,SAAkC;AAC1E,UAAM,eAAe;AASrB,iBAAa,eAAe,IAAI,SAAS;AACrC,WAAK,iBAAiB,SAAS,EAAE,aAAa,KAAK,CAAC;AAEpD,aAAO,aAAa,KAAK,SAAS,GAAG,IAAI;AAAA,IAC7C;AAGA,IAAC,QAAgB,iBAAiB,QAAQ,aAAa;AAEvD,WAAO,MAAM,WAAW,SAAS,OAAO;AAAA,EAC5C;AAAA,EAEA,aAAa,QAAwB;AACjC,WAAO,OAAO,MAAM,GAAG,EAAE,IAAI,CAAC,SAAS;AACnC,aAAO,KAAK,CAAC,EAAG,YAAY,IAAI,KAAK,MAAM,CAAC,EAAE,YAAY;AAAA,IAC9D,CAAC,EAAE,KAAK,GAAG;AAAA,EACf;AACJ;AAzF4E;AAArE,IAAM,wBAAN;;;AEbP,OAAwB;AACxB,OAAOC,YAAW;AAClB,OAAoB;;;ACFpB,SAAS,UAAAC,eAAc;AACvB,OAAOC,UAAwB;AAC/B,SAAS,OAAAC,YAAW;AACpB,OAA6B;AAC7B,SAAS,QAAAC,aAA+E;AACxF,OAAO,cAAc;;;ACLrB,OAAqC;AACrC,OAAO,SAAS,YAAY;AAC5B,SAAS,OAAAC,YAAW;;;ACDpB,OAAO,UAAqD;AAC5D,OAAO,WAAW;AAClB,SAAS,cAAc;AACvB,OAAO,SAAqC;AAC5C,SAAS,WAAW;;;ACCb,SAAS,qBAAqB,KAAyB;AAC1D,MAAI,CAAC,IAAI,YAAY,CAAC,IAAI,UAAU;AAChC,WAAO;AAAA,EACX;AAEA,QAAM,WAAW,mBAAmB,IAAI,YAAY,EAAE;AACtD,QAAM,WAAW,mBAAmB,IAAI,YAAY,EAAE;AAEtD,QAAM,QAAQ,OAAO,KAAK,GAAG,QAAQ,IAAI,QAAQ,EAAE,EAAE,SAAS,QAAQ;AAEtE,SAAO,SAAS,KAAK;AACzB;AAXgB;;;ADOhB,IAAM,aAAa,wBAAC,MAAmC,YAA0B;AAC7E,OAAK,QAAQ,OAAO,QAAQ,UAAU,WAAW,IAAI,IAAI,QAAQ,KAAK,IAAI,QAAQ;AACtF,GAFmB;AAInB,IAAM,UAAU,wBAAC,QAAqB;AAClC,MAAI,IAAI,SAAS,IAAI;AACjB,WAAO,OAAO,IAAI,IAAI;AAAA,EAC1B;AAEA,MAAI,IAAI,aAAa,SAAS;AAC1B,WAAO;AAAA,EACX;AAEA,MAAI,IAAI,aAAa,UAAU;AAC3B,WAAO;AAAA,EACX;AAEA,QAAM,IAAI,MAAM,wBAAwB,IAAI,QAAQ,EAAE;AAC1D,GAdgB;AAgBT,IAAM,yBAAN,MAAM,+BAA8B,KAAK,MAAM;AAAA,EAGlD,YAAY,SAAuB;AAC/B,UAAM,OAAO;AAHjB;AAKI,eAAW,MAAM,OAAO;AAAA,EAC5B;AAAA,EAEA,WAAW,SAAwB,SAAkC;AACjE,QAAI,QAAQ,YAAY;AAEpB,YAAM,WAAW,SAAS,OAAO;AACjC;AAAA,IACJ;AAEA,QAAI,WAAW,GAAG,QAAQ,IAAI,IAAI,QAAQ,IAAI;AAE9C,QAAI,OAAO,QAAQ,IAAK,GAAG;AACvB,iBAAW,IAAI,QAAQ,IAAI,KAAK,QAAQ,IAAI;AAAA,IAChD;AAEA,UAAM,MAAM,IAAI,IAAI,GAAG,QAAQ,QAAQ,KAAK,QAAQ,GAAG,QAAQ,IAAI,EAAE;AAErE,cAAU;AAAA,MACN,GAAG;AAAA,MACH,MAAM,KAAK,MAAM;AAAA,MACjB,MAAM,QAAQ,KAAK,KAAK;AAAA,IAC5B;AAEA,YAAQ,OAAO,IAAI;AAEnB,UAAM,QAAQ,qBAAqB,KAAK,KAAK;AAC7C,QAAI,OAAO;AACP,cAAQ,UAAU,uBAAuB,KAAK;AAAA,IAClD;AAGA,UAAM,WAAW,SAAS,OAAO;AAAA,EACrC;AACJ;AAxCsD;AAA/C,IAAM,wBAAN;AA0CA,IAAM,kBAAN,MAAM,wBAAuB,KAAK,MAAM;AAAA,EAG3C,YAAY,SAAuB;AAC/B,UAAM,OAAO;AAHjB;AAMI,eAAW,MAAM,OAAO;AAAA,EAC5B;AAAA;AAAA,EAGS,iBAAiB,SAA4B,UAAsE;AACxH,QAAI,QAAQ,MAAM;AAEd,YAAM,iBAAiB,SAAS,QAAQ;AACxC;AAAA,IACJ;AAEA,UAAM,KAAK,KAAK,MAAM,aAAa,WAAW,MAAM,UAAU,KAAK;AAEnE,QAAI,WAAW,GAAG,QAAQ,IAAI,IAAI,QAAQ,IAAI;AAE9C,QAAI,OAAO,QAAQ,IAAK,GAAG;AACvB,iBAAW,IAAI,QAAQ,IAAI,KAAK,QAAQ,IAAI;AAAA,IAChD;AAEA,UAAM,UAAkC;AAAA,MACpC,MAAM;AAAA,IACV;AAEA,UAAM,QAAQ,qBAAqB,KAAK,KAAK;AAC7C,QAAI,OAAO;AACP,cAAQ,qBAAqB,IAAI;AACjC,cAAQ,gBAAgB;AAAA,IAC5B;AAEA,UAAM,iBAAiB,GAAG,KAAK,OAAO;AAAA,MAClC,QAAQ;AAAA,MACR;AAAA,MACA,MAAM;AAAA,MACN,OAAO;AAAA,MAEP,oBAAoB;AAAA,IACxB,CAAC;AAED,mBAAe,KAAK,WAAW,CAAC,UAAU,QAAQ,SAAS;AACvD,UAAI,KAAK,SAAS,KAAK,SAAS,eAAe,KAAK;AAChD,eAAO,QAAQ;AAEf,cAAM,QAAQ,IAAI,MAAM,4BAA4B,SAAS,UAAU,IAAI,SAAS,aAAa,KAAK,KAAK,SAAS,CAAC,EAAE;AACvH,iBAAS,KAAK;AACd;AAAA,MACJ;AAEA,UAAK,QAAgB,aAAa,UAAU;AACxC,iBAAS,QAAW,IAAI,QAAQ;AAAA,UAC5B,GAAG;AAAA,UACH;AAAA,QACJ,CAAC,CAAC;AACF;AAAA,MACJ;AAEA,eAAS,QAAW,MAAM;AAAA,IAC9B,CAAC;AAED,mBAAe,KAAK,SAAS,CAAC,UAAU;AACpC,eAAS,KAAK;AAAA,IAClB,CAAC;AAED,mBAAe,IAAI;AAAA,EACvB;AACJ;AAvE+C;AAAxC,IAAM,iBAAN;AAyEA,IAAM,mBAAN,MAAM,yBAAwB,MAAM,MAAM;AAAA,EAG7C,YAAY,SAAuB;AAC/B,UAAM,OAAO;AAHjB;AAMI,eAAW,MAAM,OAAO;AAAA,EAC5B;AAAA;AAAA,EAGS,iBAAiB,SAA4B,UAAsE;AACxH,mBAAe,UAAU,iBAAiB,KAAK,MAAM,SAAS,QAAQ;AAAA,EAC1E;AACJ;AAdiD;AAA1C,IAAM,kBAAN;;;AD7IP,IAAM;AAAA,EACF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,IAAI,MAAM;AAEV,eAAsB,UAAU,SAAiC;AAC7D,QAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI;AAElC,MAAI,UAAU;AACV,UAAM,cAAc,IAAIC,KAAI,QAAkB;AAE9C,0BAAsB,YAAY,QAAQ;AAE1C,YAAQ,QAAQ,MAAM,UAAU,aAAa,QAAQ,MAAM,kBAAmB;AAAA,EAClF;AACJ;AAVsB;AAYf,IAAM,cAAN,MAAM,oBAAmB,MAAM;AAAC;AAAD;AAA/B,IAAM,aAAN;AAEP,SAAS,sBAAsB,UAAkB;AAC7C,QAAM,cAAc,aAAa,WAAW,aAAa;AAEzD,MAAI,CAAC,aAAa;AACd,UAAM,IAAI,WAAW,uBAAuB,QAAQ,+CAA+C;AAAA,EACvG;AACJ;AANS;AAQT,eAAsB,UAAU,gBAAqB,oBAA6B;AAG9E,QAAM,UAAkC,CAAC;AACzC,QAAM,QAAQ,qBAAqB,cAAc;AAEjD,MAAI,OAAO;AACP,YAAQ,gBAAgB;AACxB,YAAQ,qBAAqB,IAAI;AAAA,EACrC;AAGA,QAAM,iBAAiB;AAAA,IACnB,cAAc;AAAA,MACV,KAAK;AAAA,MACL;AAAA;AAAA,MAGA;AAAA,IACJ;AAAA;AAAA,IAGA,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,EACtB;AAGA,QAAM,gBAAgB;AAAA,IAClB,OAAO;AAAA;AAAA,IAGP,gBAAgB;AAAA,EACpB;AAEA,MAAI;AAEJ,MAAI,eAAe,aAAa,UAAU;AACtC,QAAI,eAAe;AAEnB,QAAI;AACA,YAAM,SAAS,MAAM,KAAK,gBAAgB;AAAA,QACtC,MAAM,eAAe;AAAA,QACrB,MAAM,eAAe;AAAA,QACrB;AAAA,QACA,eAAe,CAAC,MAAM,UAAU;AAAA,QAChC,YAAY,eAAe;AAAA,MAC/B,CAAC;AAED,qBAAe,OAAO;AAAA,IAC1B,QAAQ;AAAA,IAER;AAEA,UAAM,eAAe,iBAAiB;AAEtC,QAAI,cAAc;AACd,cAAQ;AAAA,QACJ,MAAM,IAAI,sBAAsB,IAAI,cAAc,cAAc,CAAC;AAAA,QACjE,OAAO,IAAI,sBAAsB,IAAI,eAAe,cAAc,CAAC;AAAA,QACnE,OAAO,IAAI,eAAe,cAAc;AAAA,MAC5C;AAAA,IACJ,OAAO;AAEH,cAAQ;AAAA;AAAA,QAEJ,MAAM,IAAI,sBAAsB,IAAI,eAAe,aAAa,CAAC;AAAA;AAAA,QAEjE,OAAO,IAAI,sBAAsB,IAAI,gBAAgB,aAAa,CAAC;AAAA,QACnE,OAAO,IAAI,eAAe,cAAc;AAAA,MAC5C;AAAA,IACJ;AAAA,EACJ,OAAO;AAEH,YAAQ;AAAA,MACJ,MAAM,IAAI,sBAAsB,IAAI,sBAAsB,aAAa,CAAC;AAAA;AAAA,MAExE,OAAO,IAAI,sBAAsB,IAAI,gBAAgB,aAAa,CAAC;AAAA,MACnE,OAAO,IAAI,cAAc,cAAc;AAAA,IAC3C;AAAA,EACJ;AAEA,SAAO;AACX;AAlFsB;;;AD5BtB,IAAM,UAAU,8BAAO,UAAkB,SAAgC,aAAyB,IAAI,QAAmB,CAAC,SAAS,WAAW;AAC1I,MAAI,OAAO,GAAG,QAAQ,IAAI,IAAI,QAAQ,IAAI;AAE1C,MAAIC,QAAO,QAAQ,IAAK,GAAG;AACvB,WAAO,IAAI,QAAQ,IAAI,KAAK,QAAQ,IAAI;AAAA,EAC5C;AAEA,QAAM,YAAY;AACd,QAAI;AACA,YAAM,UAAmB;AAAA,QACrB;AAAA,MACJ;AAEA,YAAM,MAAM,IAAIC,KAAI,QAAQ;AAC5B,YAAM,QAAQ,qBAAqB,GAAG;AAEtC,UAAI,OAAO;AACP,gBAAQ,gBAAgB;AACxB,gBAAQ,qBAAqB,IAAI;AAAA,MACrC;AAEA,YAAM,UAAU,MAAMC,MAAK,KAAK;AAAA,QAC5B,QAAQ;AAAA,QACR;AAAA,QACA,MAAM;AAAA;AAAA,QAEN,UAAU;AAAA,QACV,oBAAoB;AAAA,MACxB,CAAU;AAEV,cAAQ,IAAI;AAEZ,cAAQ,KAAK,SAAS,MAAM;AAE5B,cAAQ,KAAK,WAAW,CAAC,UAAU,QAAQ,SAAS;AAChD,YAAI,SAAS,eAAe,OAAO,KAAK,SAAS,GAAG;AAChD,iBAAO,IAAI,WAAW,wBAAwB,SAAS,UAAU,IAAI,SAAS,aAAa,KAAK,KAAK,MAAM;AAAA;AAAA;AAAA,EAG7H,KAAK,SAAS,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,SAAS,MAAM,EAAE,CAAC,CAAC;AAChD,iBAAO,QAAQ;AACf;AAAA,QACJ;AAEA,cAAM,YAAYC,KAAI,QAAQ;AAAA,UAC1B,GAAG;AAAA,UACH;AAAA,QACJ,GAAG,QAAQ;AAEX,gBAAQ,SAAS;AAAA,MACrB,CAAC;AAAA,IACL,SAAS,OAAO;AACZ,aAAO,KAAK;AAAA,IAChB;AAAA,EACJ,GAAG;AACP,CAAC,GAvDe;AAyDhB,IAAM,eAAe,8BAAO;AAAA,EACxB,eAAe,IAAI,SAAyB,EAAE,SAAS,IAAK,CAAC;AAAA,EAC7D,kBAAkB,oBAAI,IAAI;AAC9B,IAHqB;AAKrB,IAAM,WAAW,aAAa;AAOvB,IAAM,wBAAwB,wBAAC,UAAkB,aAA6B,YAA8C;AAC/H,MAAI,EAAE,eAAe,iBAAiB,IAAI;AAE1C,MAAI,aAAa;AACb,QAAI,CAAC,YAAY,iBAAiB,CAAC,YAAY,kBAAkB;AAC7D,aAAO,OAAO,aAAa,aAAa,CAAC;AAAA,IAC7C;AAEA,oBAAgB,YAAY;AAC5B,uBAAmB,YAAY;AAAA,EACnC;AAEA,QAAM,mBAAmD,8BAAO,UAAU,cAAc;AACpF,WAAO,QAAQ,UAAU,UAAU,SAAS;AAAA,EAChD,GAFyD;AAIzD,QAAM,kBAA2CD,MAAK;AAAA,IAClD;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAEA,SAAO,UAAU,SAA8C,gBAAgB;AAAA,IAC3E,GAAG,KAAK,CAAC;AAAA,IACT;AAAA,EACJ,CAAC;AACL,GA1BqC;;;ADpE9B,SAAS,aAAa,UAAkC,WAAsE;AACjI,QAAM,eAAe,oBAAI,IAAI;AAE7B,aAAW,SAAS,OAAO,QAAQ,QAAQ,GAAG;AAC1C,iBAAa,IAAI,MAAM,CAAC,EAAE,YAAY,GAAG,KAAK;AAAA,EAClD;AAEA,aAAW,SAAS,OAAO,QAAQ,SAAS,GAAG;AAC3C,iBAAa,IAAI,MAAM,CAAC,EAAE,YAAY,GAAG,KAAK;AAAA,EAClD;AAEA,SAAO,OAAO,YAAY,aAAa,OAAO,CAAC;AACnD;AAZgB;AAuBhB,IAAM,6BAA6B,wBAAC,SAAkB,UAA8B,gBAAyB;AACzG,QAAM,EAAE,gBAAgB,IAAI;AAE5B,MAAI,iBAAiB;AACjB,WAAO;AAAA,EACX;AAEA,MAAI,UAAU;AACV,WAAO,sBAAsB,UAAU,aAAoB,KAAK,IAAI,SAAS,SAAS,WAAW,KAAQ,SAAS,SAAS,WAAW,GAAM,CAAC;AAAA,EACjJ;AAEA,SAAO,IAAI,SAAwDE,OAAM,KAAK,gBAAgB;AAAA,IAC1F,GAAG,KAAK,CAAC;AAAA,IACT,SAAS,KAAK,IAAI,SAAS,SAAS,WAAW,KAAQ,SAAS,SAAS,WAAW,GAAM;AAAA,EAC9F,CAAC;AACL,GAfmC;AAiBnC,eAAsB,mBAAmB,SAAiC;AACtE,QAAM,EAAE,QAAQ,IAAI;AACpB,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI;AACJ,QAAM,cAAc,QAAQ;AAE5B,MAAI,CAAC,sBAAsB,CAAC;AAAiB;AAE7C,QAAM,oBAAoB,8BAAO;AAAA,IAC7B,GAAG,gBAAgB,WAAW;AAAA,MAC1B,aAAa;AAAA,MACb,GAAG;AAAA,IACP,CAAC;AAAA,IACD,GAAG,gBAAgB,WAAW;AAAA,MAC1B,aAAa;AAAA,MACb,GAAG;AAAA,IACP,CAAC;AAAA,EACL,IAT0B;AAW1B,QAAM,MAAM,QAAQ;AAEpB,QAAM,kBAAkB,2BAA2B,SAAS,UAAU,WAAW;AAEjF,MAAI;AACJ,MAAI,IAAI,aAAa,UAAU;AAC3B,oBAAgB,MAAM,gBAAgB;AAAA,MAClC,MAAM,IAAI;AAAA,MACV,MAAM,IAAI,QAAQ;AAAA,MAClB,oBAAoB;AAAA,MACpB,eAAe,CAAC,MAAM,UAAU;AAAA,MAChC,YAAY,IAAI;AAAA,IACpB,CAAC,GAAG;AAAA,EACR;AAEA,QAAM,cAAc,iBAAiB,OAAO,MAAM;AAElD,MAAI;AACJ,MAAI,aAAa;AACb,QAAI,CAAC,YAAY,SAAS;AACtB,kBAAY,UAAU,kBAAkB;AAAA,IAC5C;AAEA,uBAAmB,YAAY,QAAQ,WAAW;AAAA,EACtD,OAAO;AACH,uBAAmB,gBAAgB,WAAW;AAAA,MAC1C;AAAA,MACA,GAAG;AAAA,IACP,CAAC;AAAA,EACL;AAEA,MAAI,CAAC,QAAQ,YAAY;AACrB,eAAW,OAAO,OAAO,KAAK,gBAAgB,GAAG;AAC7C,UAAI,IAAI,YAAY,MAAM,mBAAmB;AACzC,eAAO,iBAAiB,GAAG;AAAA,MAC/B;AAAA,IACJ;AAAA,EACJ;AAGA,UAAQ,UAAU,aAAa,kBAAkB,QAAQ,OAAiC;AAC9F;AAhEsB;;;AKlDtB,OAA4D;AAGrD,SAAS,kBAAkB,KAAqB,SAAwB;AAC3E,QAAM,WAAW;AAEjB,QAAM,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAEA,aAAW,QAAQ,OAAO;AACtB,QAAI,QAAQ,KAAK;AACb,cAAQ,QAAQ,IAAI,IAAI,SAAS,IAAI;AACrC,aAAO,SAAS,IAAI;AAAA,IACxB;AAAA,EACJ;AACJ;AAjBgB;;;ACHhB,OAAO,UAAU;AACjB,OAA+C;AAE/C,SAAS,mBAA8B;AACvC,OAAO,mBAAmB;AAE1B,IAAM,aAAa,wBAAC,UAA2B,cAAwD;AACnG,QAAM,WAAW,SAAS,QAAQ,kBAAkB,GAAG,YAAY;AAGnE,QAAM,cAAc;AAAA,IAChB,OAAO,KAAK,UAAU;AAAA,IACtB,aAAa,KAAK,UAAU;AAAA,EAChC;AAEA,QAAM,kBAAkB,wBAAC,iBAA4B;AACjD,WAAO,SAAS,QAAQ,kBAAkB;AAE1C,UAAM,SAAS,IAAI,YAAY;AAAA,MAC3B,aAAa;AAAA,MACb,QAAQ,OAAO,UAAU;AACrB,iBAAS,QAAQ;AAEjB,iBAAS,KAAK;AAAA,MAClB;AAAA,IACJ,CAAC;AAED,iBAAa,KAAK,SAAS,CAAC,UAAU;AAClC,aAAO,QAAQ,KAAK;AAAA,IACxB,CAAC;AAED,aAAS,KAAK,YAAY,EAAE,KAAK,MAAM;AAEvC,cAAU,cAAc,UAAU,MAAM,CAAC;AAAA,EAC7C,GAnBwB;AAqBxB,MAAI,aAAa,UAAU,aAAa,UAAU;AAC9C,oBAAgB,KAAK,aAAa,WAAW,CAAC;AAAA,EAClD,WAAW,aAAa,aAAa,aAAa,aAAa;AAC3D,QAAI,OAAO;AAEX,aAAS,KAAK,QAAQ,CAAC,UAAkB;AACrC,aAAO;AAEP,eAAS,QAAQ,KAAK;AAItB,YAAM,gBAAgB,MAAM,CAAC,IAAI,QAAU,IAAO,KAAK,cAAc,IAAI,KAAK,iBAAiB;AAC/F,sBAAgB,YAAY;AAAA,IAChC,CAAC;AAED,aAAS,KAAK,OAAO,MAAM;AACvB,UAAI,CAAC,MAAM;AACP,kBAAU,QAAQ;AAAA,MACtB;AAAA,IACJ,CAAC;AAAA,EACL,WAAW,aAAa,MAAM;AAC1B,QAAI,OAAO;AAEX,aAAS,KAAK,QAAQ,CAAC,UAAkB;AACrC,aAAO;AAEP,eAAS,QAAQ,KAAK;AAEtB,YAAM,eAAe,KAAK,uBAAuB;AACjD,sBAAgB,YAAY;AAAA,IAChC,CAAC;AAED,aAAS,KAAK,OAAO,MAAM;AACvB,UAAI,CAAC,MAAM;AACP,kBAAU,QAAQ;AAAA,MACtB;AAAA,IACJ,CAAC;AAAA,EACL,OAAO;AACH,cAAU,QAAQ;AAAA,EACtB;AACJ,GAvEmB;AA4EZ,IAAM,gBAAiC,wBAAC,SAAS,SAAS;AAC7D,QAAM,SAAS,KAAK,OAAO;AAG3B,SAAO,GAAG,WAAW,CAAC,YAA2B;AAC7C,UAAM,OAAO,QAAQ,KAAK,KAAK,OAAO;AAEtC,YAAQ,OAAO,CAAC,UAAkB,SAAoB;AAGlD,UAAI,UAAU,cAAc,QAAQ,YAAY;AAC5C,cAAM,WAAW,KAAK,CAAC;AAEvB,cAAM,UAAU,QAAQ,cAAc,UAAU,MAAM;AAEtD,mBAAW,UAAU,CAAC,kBAAmC;AACrD,eAAK,YAAY,aAAa;AAAA,QAClC,CAAC;AAED,eAAO;AAAA,MACX;AAEA,aAAO,KAAK,OAAO,GAAG,IAAI;AAAA,IAC9B;AAAA,EACJ,CAAC;AAED,SAAO;AACX,GA3B8C;;;AClF9C,OAAoB;AACpB,OAAwB;AACxB,SAAS,QAAAC,aAAqC;AAIvC,SAAS,UAAU,SAAwB;AAC9C,QAAM,EAAE,UAAU,YAAY,IAAI,QAAQ;AAE1C,MAAI,QAAQ,SAAU,QAAQ,IAAY,aAAa,SAAS;AAC5D,YAAQ,UAAU,CAAC,KAAK,gBAAgB,aAAa;AACjD,YAAM,sBAAsB;AAC5B,UAAI,UAAU;AACV,4BAAoB,kBAAkB;AAAA,UAClC;AAAA,UACA;AAAA,UACA,KAAK,IAAI,SAAS,SAAS,WAAW,KAAQ,SAAS,SAAS,WAAW,GAAM;AAAA,QACrF;AAAA,MACJ;AAEA,aAAOC,MAAK,KAAK,qBAAqB,QAAQ;AAAA,IAClD;AAAA,EACJ,OAAO;AAGH,YAAQ,UAAU;AAAA,EACtB;AACJ;AArBgB;;;ACJhB,OAAwB;AAEjB,SAAS,mBAAmB,SAAwB;AACvD,MAAI,QAAQ,QAAQ,uBAAuB,QAAW;AAKlD,YAAQ,eAAe;AAAA;AAAA,MAEnB,GAAG,QAAQ;AAAA,MACX,oBAAoB,QAAQ,QAAQ;AAAA,IACxC;AAAA,EACJ;AACJ;AAZgB;;;ACJhB,OAAO,QAAQ;AAEf,IAAM,mBAAmB;AAAA,EACrB,UAAU,GAAG,SAAS,OAAO;AAAA,EAC7B,oBAAoB,GAAG,SAAS;AAAA,EAChC,wBAAwB,GAAG,SAAS;AAAA,EACpC,oBAAoB,GAAG,SAAS;AAAA,EAChC,cAAc,GAAG,SAAS;AAC9B;AAEO,SAAS,yBAAyB,SAAwB;AAC7D,KAAG,SAAS,GAAG,OAAO,aAAa,gBAAgB,CAAC;AACxD;AAFgB;;;ACThB,SAAS,OAAAC,YAAW;AAEb,IAAM,cAAkC,wBAAC,SAAS,aAAa;AAClE,QAAM,MAAM,QAAQ;AACpB,QAAM,SAAS,IAAIC,KAAI,SAAS,GAAG;AAGnC,QAAM,SAAS,SAAS,QAAQ,gBAAgB,KAAK;AAErD,MAAI,WAAW,eAAe;AAC1B,WAAO,QAAQ,QAAQ;AAAA,EAC3B,WAAW,WAAW,8BAA8B;AAChD,QAAI,OAAO,aAAa,YAAY,IAAI,aAAa,SAAS;AAC1D,aAAO,QAAQ,QAAQ;AAAA,IAC3B,OAAO;AACH,cAAQ,QAAQ,UAAU,GAAG,OAAO,MAAM,GAAG,OAAO,QAAQ,GAAG,OAAO,MAAM;AAAA,IAChF;AAAA,EACJ,WAAW,WAAW,UAAU;AAC5B,YAAQ,QAAQ,UAAU,OAAO;AAAA,EACrC,WAAW,WAAW,4BAA4B;AAC9C,QAAI,IAAI,WAAW,OAAO,QAAQ;AAC9B,cAAQ,QAAQ,UAAU,GAAG,OAAO,MAAM,GAAG,OAAO,QAAQ,GAAG,OAAO,MAAM;AAAA,IAChF,OAAO;AACH,cAAQ,QAAQ,UAAU,OAAO;AAAA,IACrC;AAAA,EACJ,WAAW,WAAW,eAAe;AACjC,QAAI,IAAI,WAAW,OAAO,QAAQ;AAC9B,cAAQ,QAAQ,UAAU,GAAG,OAAO,MAAM,GAAG,OAAO,QAAQ,GAAG,OAAO,MAAM;AAAA,IAChF,OAAO;AACH,aAAO,QAAQ,QAAQ;AAAA,IAC3B;AAAA,EACJ,WAAW,WAAW,iBAAiB;AACnC,QAAI,OAAO,aAAa,YAAY,IAAI,aAAa,SAAS;AAC1D,aAAO,QAAQ,QAAQ;AAAA,IAC3B,OAAO;AACH,cAAQ,QAAQ,UAAU,OAAO;AAAA,IACrC;AAAA,EACJ,WAAW,WAAW,mCAAmC;AACrD,QAAI,IAAI,WAAW,OAAO,QAAQ;AAC9B,cAAQ,QAAQ,UAAU,GAAG,OAAO,MAAM,GAAG,OAAO,QAAQ,GAAG,OAAO,MAAM;AAAA,IAChF,WAAW,OAAO,aAAa,YAAY,IAAI,aAAa,SAAS;AACjE,aAAO,QAAQ,QAAQ;AAAA,IAC3B,OAAO;AACH,cAAQ,QAAQ,UAAU,OAAO;AAAA,IACrC;AAAA,EACJ,WAAW,WAAW,cAAc;AAChC,YAAQ,QAAQ,UAAU,GAAG,OAAO,MAAM,GAAG,OAAO,QAAQ,GAAG,OAAO,MAAM;AAAA,EAChF;AACJ,GA9C+C;;;ACH/C,OAAwB;AAExB,IAAM,WAAN,MAAM,SAAQ;AAAA,EAGV,cAAc;AAFd;AAGI,SAAK,UAAU,oBAAI,QAAQ;AAAA,EAC/B;AAAA,EAEA,IAAsB,OAA0C;AAC5D,QAAI,CAAC,OAAO;AACR;AAAA,IACJ;AAEA,QAAI,CAAC,KAAK,QAAQ,IAAI,KAAK,GAAG;AAC1B,WAAK,QAAQ,IAAI,OAAO,CAAC,CAAC;AAAA,IAC9B;AAEA,WAAO,KAAK,QAAQ,IAAI,KAAK;AAAA,EACjC;AACJ;AAlBc;AAAd,IAAM,UAAN;AAoBA,IAAM,UAAU,IAAI,QAAQ;AAErB,IAAM,kBAAkB,wBAAC,YAA2B;AACvD,UAAQ,QAAQ,cAAc,QAAQ,IAAI,QAAQ,QAAQ,YAAkC;AAChG,GAF+B;;;ACtB/B,OAAwB;AAExB,IAAM,uBAAuB,OAAO,QAAQ,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,KAAK;AAE5E,IAAM,wBAAwB,KAAK;AACnC,IAAM,6BAA6B,KAAK;AAGxC,IAAM,YAAY;AAAA,EACd,UAAU,uBAAuB;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GAAG,KAAK,GAAG;AAAA,EACX,QAAQ;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,EACJ,EAAE,KAAK,GAAG;AAAA,EACV,QAAQ;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,EAAE,KAAK,GAAG;AACd;AAEO,IAAM,UAAU;AAAA,EACnB,SAAS;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,EAAE,KAAK,GAAG;AAAA,EACV,QAAQ;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,EAAE,KAAK,GAAG;AAAA,EACV,QAAQ;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,EAAE,KAAK,GAAG;AACd;AAEO,IAAM,eAAe;AAAA,EACxB,QAAQ;AAAA;AAAA,IAEJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,EAAE,KAAK,GAAG;AAAA,EACV,SAAS;AAAA;AAAA,IAEL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,EAAE,KAAK,GAAG;AAAA,EACV,QAAQ;AAAA;AAAA,IAEJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,EAAE,KAAK,GAAG;AACd;AAEO,IAAM,aAAa;AAAA,EACtB,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AACZ;AAEO,IAAM,aAAa;AAAA,EACtB,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AACZ;AAEO,IAAM,gBAAgB;AAAA,EACzB,SAAS,wBAAwB;AAAA,EACjC,QAAQ,wBAAwB;AAAA,EAChC,QAAQ,wBAAwB;AACpC;AAEO,IAAM,cAAc;AAAA,EACvB,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AACZ;AAIA,IAAM,eAAe,wBAAC,YAA+E;AACjG,aAAW,CAAC,QAAQ,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AACnD,QAAI,OAAO,YAAY,MAAM,cAAc;AACvC,aAAO;AAAA,IACX;AAAA,EACJ;AACA,SAAO;AACX,GAPqB;AASrB,IAAM,aAAa,wBAAC,cAAgD;AAChE,MAAI,CAAC,WAAW;AACZ;AAAA,EACJ;AAEA,MAAI;AACJ,MAAI,UAAU,SAAS,SAAS,GAAG;AAC/B,cAAU;AAAA,EACd,WAAW,UAAU,SAAS,QAAQ,GAAG;AACrC,cAAU;AAAA,EACd,OAAO;AACH,cAAU;AAAA,EACd;AAEA,SAAO;AACX,GAfmB;AAiBZ,SAAS,QAAQ,SAAwB;AAC5C,QAAM,EAAE,OAAAC,OAAM,IAAI;AAElB,MAAIA,OAAM,WAAWA,OAAM,uBAAuBA,OAAM,cAAcA,OAAM,YAAY;AACpF;AAAA,EACJ;AAGA,QAAM,UAAU,WAAW,aAAa,QAAQ,OAAO,CAAC,KAAK;AAE7D,EAAAA,OAAM,UAAU,aAAa,OAAO;AACpC,EAAAA,OAAM,sBAAsB,QAAQ,OAAO;AAC3C,EAAAA,OAAM,YAAY,UAAU,OAAO;AACnC,EAAAA,OAAM,aAAa,WAAW,OAAO;AACrC,EAAAA,OAAM,aAAa,WAAW,OAAO;AAGrC,UAAQ,eAAe;AAAA;AAAA,IAEnB,GAAG,QAAQ;AAAA,IACX,eAAe,cAAc,OAAO;AAAA,IACpC,aAAa,YAAY,OAAO;AAAA,EACpC;AACJ;AAvBgB;;;Af/FhB,cAAc;AAtFd,IAAM,WAAW;AAAA,EACb;AACJ;AAEA,IAAM,gBAAgB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAEA,IAAM,OAAO;AAAA,EACT;AAAA,EACA;AACJ;AAEA,IAAM,iBAAiB;AAAA,EACnB;AACJ;AAMO,SAAS,2BAA2B;AACvC,SAAO;AAAA,IACH;AAAA,IACA,iBAAiB;AAAA;AAAA,IAEjB,OAAO;AAAA,IACP,OAAO;AAAA;AAAA;AAAA,MAGH,oBAAoB;AAAA,IACxB;AAAA;AAAA,IAEA,iBAAiB;AAAA,IACjB,SAAS,EAAE,SAAS,IAAO;AAAA,IAC3B,OAAO,EAAE,OAAO,EAAE;AAAA,IAClB,SAAS;AAAA,MACL,cAAc;AAAA,IAClB;AAAA,IACA,SAAS;AAAA,MACL,iBAAiB,IAAIC,iBAAgB;AAAA,MACrC,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,IACxB;AAAA,IACA,OAAO;AAAA,MACH,MAAM,IAAI,sBAAsBC,MAAK,WAAW;AAAA,MAChD,OAAO,IAAI,sBAAsBC,OAAM,WAAW;AAAA,IACtD;AAAA,IACA,OAAO;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AACJ;AAjCgB;AAmChB,IAAM,cAAc,YAAY,OAAO,yBAAyB,CAAC;AAMjE,IAAM,iBAAiB,6BAAM;AACzB,QAAM,EAAE,IAAI,IAAI,OAAO,yBAAyBC,SAAQ,WAAW,KAAK;AAExE,SAAO,eAAeA,SAAQ,WAAW,OAAO;AAAA,IAC5C,IAAI,OAAO;AACP,YAAM,oBAAoB,OAAO;AACjC,aAAO,YAAY,CAAC,QAAQ;AAE5B,UAAI;AACA,eAAO,IAAK,KAAK,MAAM,KAAK;AAAA,MAChC,UAAE;AACE,eAAO,YAAY;AAAA,MACvB;AAAA,IACJ;AAAA,EACJ,CAAC;AACL,GAfuB;AAiBvB,eAAe;AAMR,IAAM,QAAQ;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;","names":["http","https","Options","HeaderGenerator","http2","isIPv6","tls","URL","auto","URL","URL","isIPv6","URL","auto","tls","http2","auto","auto","URL","URL","https","HeaderGenerator","http","https","Options"]}
|