@api-client/core 0.19.28 → 0.19.29
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/build/src/modeling/DomainEntity.d.ts +12 -0
- package/build/src/modeling/DomainEntity.d.ts.map +1 -1
- package/build/src/modeling/DomainEntity.js +32 -0
- package/build/src/modeling/DomainEntity.js.map +1 -1
- package/build/src/modeling/validation/api_model_rules.d.ts +1 -1
- package/build/src/modeling/validation/api_model_rules.d.ts.map +1 -1
- package/build/src/modeling/validation/api_model_rules.js +44 -42
- package/build/src/modeling/validation/api_model_rules.js.map +1 -1
- package/build/src/modeling/validation/semantic_validation.d.ts +1 -1
- package/build/src/modeling/validation/semantic_validation.d.ts.map +1 -1
- package/build/src/modeling/validation/semantic_validation.js +66 -6
- package/build/src/modeling/validation/semantic_validation.js.map +1 -1
- package/build/src/runtime/http-engine/CoreEngine.d.ts.map +1 -1
- package/build/src/runtime/http-engine/CoreEngine.js +1 -1
- package/build/src/runtime/http-engine/CoreEngine.js.map +1 -1
- package/build/src/runtime/http-engine/connections/DirectConnection.d.ts.map +1 -1
- package/build/src/runtime/http-engine/connections/DirectConnection.js +8 -2
- package/build/src/runtime/http-engine/connections/DirectConnection.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/modeling/DomainEntity.ts +33 -0
- package/src/modeling/validation/api_model_rules.ts +45 -42
- package/src/modeling/validation/api_model_validation_rules.md +10 -3
- package/src/modeling/validation/semantic_validation.ts +65 -6
- package/src/runtime/http-engine/CoreEngine.ts +1 -2
- package/src/runtime/http-engine/connections/DirectConnection.ts +8 -4
- package/tests/unit/modeling/domain_validation.spec.ts +6 -0
- package/tests/unit/modeling/validation/semantic_validation.spec.ts +4 -1
- package/tests/unit/runtime/http-engine/core_engine.spec.ts +10 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoreEngine.js","sourceRoot":"","sources":["../../../../src/runtime/http-engine/CoreEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import net from 'net'\nimport { URL } from 'url'\nimport tls from 'tls'\nimport { EventEmitter } from 'events'\nimport { Logger, type ILogObj } from 'tslog'\nimport { IRequestLog } from '../../models/RequestLog.js'\nimport { IHttpRequest, HttpRequest } from '../../models/HttpRequest.js'\nimport { IRequestBaseConfig } from '../../models/RequestConfig.js'\nimport { IRequestAuthorization } from '../../models/RequestAuthorization.js'\n\nimport { HttpCertificate } from '../../models/ClientCertificate.js'\nimport { SentRequest } from '../../models/SentRequest.js'\nimport { Response } from '../../models/Response.js'\nimport { ErrorResponse } from '../../models/ErrorResponse.js'\nimport { RequestsSize } from '../../models/RequestsSize.js'\nimport { HttpResponse } from '../../models/HttpResponse.js'\nimport { ResponseRedirect } from '../../models/ResponseRedirect.js'\nimport { RequestLog } from '../../models/RequestLog.js'\nimport { RequestTime } from '../../models/RequestTime.js'\nimport { SerializableError } from '../../models/SerializableError.js'\nimport { ResponseAuthorization } from '../../models/ResponseAuthorization.js'\nimport { Headers } from '../../lib/headers/Headers.js'\nimport { getPort } from './RequestUtils.js'\n\nimport { HttpResponseParser, ParserCallbacks, RequestState } from './parsers/index.js'\nimport { ConnectionManager } from './connections/index.js'\nimport { AuthManager, type ProxyAuthCredentials } from './auth/index.js'\nimport { MessageBuilder } from './message/index.js'\nimport { HttpEngineErrorFactory } from './errors/index.js'\nimport { isMethodWithoutBody, HEADER_PROXY_AUTHORIZATION } from './constants.js'\nimport { decompress } from './compression/index.js'\nimport { checkServerIdentity } from './certificates/index.js'\nimport { readUrl, getHostHeader, getRedirectLocation, isRedirectLoop } from './url/index.js'\nimport { processRedirectCookies } from './cookies/index.js'\nimport { computeStats } from './statistics/index.js'\nimport { processResponse } from './response/index.js'\nimport { getCodeMessage } from './HttpErrorCodes.js'\nimport { createLogger } from '../../lib/logging/index.js'\nimport * as PayloadSupport from './PayloadSupport.js'\nimport { addContentLength } from './RequestUtils.js'\nimport { PayloadSerializer } from '../../lib/transformers/PayloadSerializer.js'\nimport { ProxyAuthenticationError } from './errors/HttpEngineErrors.js'\n\nexport interface HttpEngineOptions extends IRequestBaseConfig {\n /**\n * The authorization configuration to apply to the request.\n */\n authorization?: IRequestAuthorization[]\n /**\n * Logger object.\n */\n logger?: Logger<ILogObj>\n /**\n * A certificate to use with the request.\n */\n certificates?: HttpCertificate[]\n}\n\nexport interface RequestStats {\n firstReceiveTime?: number\n lastReceivedTime?: number\n messageStart?: number\n sentTime?: number\n connectionTime?: number\n lookupTime?: number\n connectedTime?: number\n secureStartTime?: number\n secureConnectedTime?: number\n startTime?: number\n responseTime?: number\n receivingTime?: number\n}\n\nexport interface ResponseErrorInit {\n code?: number | string\n message?: string\n}\n\nexport interface BeforeRedirectDetail {\n location: string\n returnValue: boolean\n}\n\nexport interface HeadersReceivedDetail {\n value: string\n returnValue: boolean\n}\n\nexport interface IRequestAuthState {\n method: 'ntlm'\n state: number\n headers?: string\n challengeHeader?: string\n}\n\nexport const mainPromiseSymbol = Symbol('mainPromise')\n\n/**\n * API Client's HTTP engine with refactored parsing and connection handling.\n * An HTTP 1.1 engine working directly on the socket. It communicates with the remote machine and\n * collects stats about the request and response.\n */\nexport class CoreEngine extends EventEmitter {\n request: HttpRequest\n opts: HttpEngineOptions\n logger: Logger<ILogObj>\n\n /**\n * The current sent request\n */\n sentRequest: SentRequest\n\n redirects: ResponseRedirect[] = []\n /**\n * When true the request has been aborted.\n */\n aborted = false\n /**\n * Parsed value of the request URL.\n */\n uri: URL\n\n socket?: net.Socket\n /**\n * Host header can be different than registered URL because of\n * `hosts` rules.\n * If a rule changes host value of the URL the original URL host value\n * is used when generating the request and not overwritten one.\n * This way virtual hosts can be tested using hosts.\n */\n hostHeader: string | undefined\n\n protected hostTestReg = /^\\s*host\\s*:/im\n /**\n * Set when the request is redirected.\n */\n redirecting = false\n\n /**\n * The response headers.\n * The object may be empty when the response is not set.\n */\n currentHeaders = new Headers()\n\n /**\n * The response object build during the execution.\n */\n currentResponse?: Response\n\n /**\n * Keeps the raw body in a temporary buffer while processing the response.\n */\n _rawBody?: Buffer\n\n stats: RequestStats = {}\n\n auth?: IRequestAuthState\n\n protected mainResolver?: (log: IRequestLog) => void\n protected mainRejecter?: (err: SerializableError) => void;\n [mainPromiseSymbol]?: Promise<IRequestLog>\n\n protected _signal?: AbortSignal\n\n // CoreEngine specific properties\n private parser: HttpResponseParser\n private connectionManager: ConnectionManager\n private authManager: AuthManager\n private messageBuilder: MessageBuilder\n\n hasProxy: boolean\n isProxyTunnel: boolean\n isProxySsl: boolean\n\n /**\n * @return True if following redirects is allowed.\n */\n get followRedirects(): boolean {\n const { opts } = this\n if (typeof opts.followRedirects === 'boolean') {\n return opts.followRedirects\n }\n return true\n }\n\n /**\n * The request timeout.\n */\n get timeout(): number {\n const { opts } = this\n if (typeof opts.timeout === 'number') {\n return opts.timeout\n }\n return 0\n }\n\n /**\n * The abort signal to set on this request.\n * Aborts the request when the signal fires.\n */\n get signal(): AbortSignal | undefined {\n return this._signal\n }\n\n set signal(value: AbortSignal | undefined) {\n const old = this._signal\n if (old === value) {\n return\n }\n this._signal = value\n if (old) {\n old.removeEventListener('abort', this._abortHandler)\n }\n if (value) {\n value.addEventListener('abort', this._abortHandler)\n }\n }\n\n constructor(request: IHttpRequest, opts: HttpEngineOptions = {}) {\n super()\n this.request = new HttpRequest({ ...request })\n this.opts = opts\n this.logger = this.setupLogger(opts)\n this.sentRequest = new SentRequest({ ...request, startTime: Date.now() })\n this.uri = this.readUrl(request.url)\n this.hostHeader = this.getHostHeader(request.url)\n\n // CoreEngine specific initialization\n this.hasProxy = !!this.opts.proxy\n this.isProxyTunnel = this.hasProxy && this.request.url.startsWith('https:')\n this.isProxySsl = !!this.opts.proxy && this.opts.proxy.startsWith('https:')\n\n // Initialize the HTTP response parser\n this.parser = new HttpResponseParser(this.logger, this.createParserCallbacks())\n\n // Initialize the connection manager\n this.connectionManager = new ConnectionManager(this.logger, this.stats)\n\n // Initialize the auth manager\n const proxyCredentials: ProxyAuthCredentials = {\n proxyUsername: this.opts.proxyUsername,\n proxyPassword: this.opts.proxyPassword,\n proxyAuthorization: this.opts.proxyAuthorization,\n }\n\n this.authManager = new AuthManager({\n logger: this.logger,\n proxyCredentials,\n })\n\n // Initialize the message builder\n this.messageBuilder = new MessageBuilder({\n logger: this.logger,\n request: this.request as IHttpRequest,\n hasProxy: this.hasProxy,\n isProxyTunnel: this.isProxyTunnel,\n hostHeader: this.hostHeader,\n })\n\n this._abortHandler = this._abortHandler.bind(this)\n if (opts.signal) {\n this.signal = opts.signal\n }\n }\n\n /**\n * Creates a logger object to log debug output.\n */\n setupLogger(opts: HttpEngineOptions = {}): Logger<ILogObj> {\n if (opts.logger) {\n return opts.logger\n }\n return createLogger()\n }\n\n /**\n * Updates the `uri` property from current request URL\n */\n readUrl(value: string): URL {\n return readUrl(value, { hosts: this.opts.hosts })\n }\n\n /**\n * Get host header for the request\n */\n getHostHeader(url: string): string | undefined {\n return getHostHeader(url, { hosts: this.opts.hosts })\n }\n\n /**\n * Aborts current request.\n * It emits `error` event\n */\n abort(): void {\n this.logger.debug('Aborting the request...')\n this.aborted = true\n if (!this.socket) {\n return\n }\n this.socket.removeAllListeners()\n if (this.socket.destroyed) {\n this.socket = undefined\n return\n }\n this.socket.pause()\n this.socket.destroy()\n this.socket = undefined\n }\n\n /**\n * Handler for the `abort` event on the `AbortSignal`.\n */\n protected _abortHandler(): void {\n const e = new SerializableError('Request aborted', 3)\n this._errorRequest(e)\n this.abort()\n }\n\n /**\n * Create parser callbacks to handle parsed data\n */\n private createParserCallbacks(): ParserCallbacks {\n return {\n onStatusParsed: (status: number, statusText: string) => {\n this.logger.debug('onStatusParsed called', status, statusText)\n const response = Response.fromValues(status, statusText)\n response.loadingTime = 0\n this.currentResponse = response\n },\n onHeadersParsed: (headers: Headers) => {\n this.logger.debug('onHeadersParsed called')\n this.currentHeaders = headers\n if (this.currentResponse) {\n this.currentResponse.headers = headers.toString()\n }\n },\n onBodyComplete: (body: Buffer) => {\n this.logger.debug('onBodyComplete called')\n this._rawBody = body\n this._reportResponse().catch((error) => {\n this.logger.error('Error in _reportResponse:', error)\n this._errorRequest({\n message: `Response processing failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n })\n })\n },\n onError: (error: Error) => {\n this.logger.debug('onError called', error)\n this._errorRequest({\n message: error.message || 'Unknown error occurred',\n })\n },\n onAbort: () => {\n this.logger.debug('onAbort called')\n this.abort()\n },\n emit: (event: string, detail?: unknown) => {\n this.logger.debug('emit called', event, detail)\n this.emit(event, detail)\n },\n }\n }\n\n /**\n * Sends the request\n */\n async send(): Promise<IRequestLog> {\n const promise = this.wrapExecution()\n this.sendRequest()\n return promise\n }\n\n private async sendRequest(): Promise<void> {\n try {\n // Use the connection manager to establish the connection\n const socket = await this.establishConnection()\n if (!socket || this.aborted) {\n return\n }\n\n const message = await this.prepareMessage()\n await this.writeMessage(message)\n } catch (cause) {\n if (cause instanceof ProxyAuthenticationError) {\n this.currentHeaders = new Headers(cause.response.headers)\n const currentResponse = Response.fromValues(\n cause.response.statusCode || 401,\n cause.response.statusMessage,\n this.currentHeaders.toString()\n )\n currentResponse.loadingTime = 0\n this.currentResponse = currentResponse\n if (cause.head.length) {\n this._rawBody = cause.head\n currentResponse.payload = PayloadSerializer.stringifyBuffer(cause.head)\n }\n this._publishResponse()\n return\n }\n const e = cause as SerializableError\n const err = new SerializableError(e.message, { cause: e })\n if (e.code || e.code === 0) {\n err.code = e.code as string\n }\n this.abort()\n this._errorRequest({\n message: err.message,\n code: err.code,\n })\n }\n }\n\n /**\n * Establish connection using the connection manager\n */\n private async establishConnection(): Promise<net.Socket> {\n const port = getPort(this.uri.port, this.uri.protocol)\n const host = this.uri.hostname\n const protocol = this.uri.protocol\n\n const socket = await this.connectionManager.createConnection(host, port, protocol, this.opts)\n const { timeout } = this\n if (timeout > 0) {\n socket.setTimeout(timeout)\n }\n this.socket = socket\n this._addSocketListeners(socket)\n socket.resume()\n return socket\n }\n\n /**\n * Decompresses received body if `content-encoding` header is set.\n */\n async decompress(body?: Buffer): Promise<Buffer | undefined> {\n return decompress(body, {\n aborted: this.aborted,\n headers: this.currentHeaders,\n })\n }\n\n /**\n * Prepares headers list to be send to the remote machine.\n * If `defaultHeaders` option is set then it adds `user-agent` and `accept`\n * headers.\n */\n prepareHeaders(headers: Headers, withPayload = false): void {\n if (this.opts.defaultHeaders) {\n if (!headers.has('user-agent')) {\n if (this.opts.defaultUserAgent) {\n headers.set('user-agent', this.opts.defaultUserAgent)\n } else {\n headers.set('user-agent', 'api client')\n }\n }\n if (!headers.has('accept')) {\n if (this.opts.defaultAccept) {\n headers.set('accept', this.opts.defaultAccept)\n } else {\n headers.set('accept', '*/*')\n }\n }\n }\n if (withPayload) {\n if (!headers.has('content-type') && this.request.payloadOptions) {\n if (this.request.payloadOptions.mime) {\n headers.set('content-type', this.request.payloadOptions.mime)\n }\n }\n }\n }\n\n /**\n * Cleans the state after finished.\n */\n _cleanUp(): void {\n this.redirects = []\n this.currentHeaders = new Headers()\n this.currentResponse = undefined\n this._rawBody = undefined\n this.redirecting = false\n this.stats = {}\n this.mainRejecter = undefined\n this.mainResolver = undefined\n this._clearSocketEventListeners()\n this.parser.reset()\n }\n\n /**\n * Cleans up the state for redirect.\n */\n _cleanUpRedirect(): void {\n this.currentHeaders = new Headers()\n this.currentResponse = undefined\n this._rawBody = undefined\n this.stats = {}\n this._clearSocketEventListeners()\n this.parser.reset()\n }\n\n /**\n * Reports response when redirected.\n */\n _reportRedirect(status: number): boolean {\n const { request, currentHeaders } = this\n if (!currentHeaders) {\n return false\n }\n const rerUrl = currentHeaders.get('location')\n // https://github.com/jarrodek/socket-fetch/issues/13\n const redirectOptions = this.getRedirectOptions(status, request.method, rerUrl)\n if (!redirectOptions.redirect) {\n return false\n }\n this.redirecting = true\n setTimeout(() => this._redirectRequest(redirectOptions))\n return true\n }\n\n /**\n * Get redirect options based on status and method\n */\n private getRedirectOptions(\n status: number,\n method?: string,\n location?: string\n ): { redirect: boolean; location?: string; forceGet?: boolean } {\n if (!location) {\n return { redirect: false }\n }\n\n // 301, 302, 303, 307, 308 are redirect status codes\n if (status >= 300 && status < 400) {\n const forceGet = status === 301 || status === 302 || status === 303\n return { redirect: true, location, forceGet }\n }\n\n return { redirect: false }\n }\n\n /**\n * Creates a response and adds it to the redirects list and redirects\n * the request to the new location.\n */\n async _redirectRequest(options: { redirect: boolean; location?: string; forceGet?: boolean }): Promise<void> {\n if (this.followRedirects === false) {\n this._publishResponse()\n return\n }\n const location = options.location && this.getRedirectLocation(options.location, this.request.url)\n if (!location) {\n this._errorRequest({ code: 302 })\n return\n }\n\n // check if this is infinite loop\n if (this.isRedirectLoop(location, this.redirects)) {\n this._errorRequest({ code: 310 })\n return\n }\n\n const detail: BeforeRedirectDetail = {\n location,\n returnValue: true,\n }\n this.emit('beforeredirect', detail)\n if (!detail.returnValue) {\n this._publishResponse()\n return\n }\n try {\n const responseCookies = this.currentHeaders.get('set-cookie')\n const response = await this._createRedirectResponse(location)\n this.redirects.push(response)\n this._cleanUpRedirect()\n if (responseCookies) {\n this._processRedirectCookies(responseCookies, location)\n }\n this.redirecting = false\n\n this.request.url = location\n this.sentRequest.url = location\n if (options.forceGet) {\n this.request.method = 'GET'\n }\n this.uri = this.readUrl(location)\n this.hostHeader = this.getHostHeader(location)\n // No idea why but without setTimeout the program loses it's\n // scope after calling the function.\n setTimeout(() => this.send())\n } catch (e) {\n const error = e as Error\n this._errorRequest({\n message: (error && error.message) || 'Unknown error occurred',\n })\n }\n }\n\n /**\n * Get redirect location\n */\n private getRedirectLocation(location: string, currentUrl: string): string {\n return getRedirectLocation(location, currentUrl)\n }\n\n /**\n * Check if redirect is a loop\n */\n private isRedirectLoop(location: string, redirects: ResponseRedirect[]): boolean {\n return isRedirectLoop(location, redirects)\n }\n\n /**\n * @param location The redirect location.\n * @return Redirect response object\n */\n async _createRedirectResponse(location: string): Promise<ResponseRedirect> {\n const { currentResponse = new Response() } = this\n\n const response = HttpResponse.fromValues(\n currentResponse.status,\n currentResponse.statusText,\n currentResponse.headers\n )\n if (currentResponse.payload) {\n response.payload = currentResponse.payload\n }\n\n const body = await this.decompress(this._rawBody)\n if (body) {\n await response.writePayload(body)\n currentResponse.payload = response.payload\n }\n\n const redirect = ResponseRedirect.fromValues(\n location,\n response.toJSON(),\n this.stats.startTime,\n this.stats.responseTime\n )\n redirect.timings = this._computeStats(this.stats)\n\n return redirect\n }\n\n /**\n * Creates a response object\n */\n async _createResponse(): Promise<Response> {\n if (this.aborted) {\n throw new Error(`Request aborted.`)\n }\n const { currentResponse } = this\n if (!currentResponse) {\n throw new Error(`Tried to create a response but no response data is set.`)\n }\n const { status } = currentResponse\n if (status === undefined) {\n throw new Error(`The response status is empty.\nIt means that the successful connection wasn't made.\nCheck your request parameters.`)\n }\n const body = await this.decompress(this._rawBody)\n const response = Response.fromValues(status, currentResponse.statusText, currentResponse.headers)\n response.timings = this._computeStats(this.stats)\n response.loadingTime = response.timings.total()\n if (body) {\n await response.writePayload(body)\n currentResponse.payload = response.payload\n }\n if (status === 401) {\n this.logger.silly('Setting auth on the response...')\n response.auth = this._getAuth()\n }\n return response\n }\n\n /**\n * Finishes the response with error message.\n */\n _errorRequest(opts: ResponseErrorInit): void {\n const { currentResponse } = this\n this.aborted = true\n let message\n if (opts.code && !opts.message) {\n message = getCodeMessage(opts.code)\n } else if (opts.message) {\n message = opts.message\n }\n message = message || 'Unknown error occurred'\n const error = new SerializableError(message, opts.code)\n const log = RequestLog.fromRequest(this.sentRequest.toJSON())\n const response = ErrorResponse.fromError(error)\n log.response = response\n if (currentResponse && currentResponse.status) {\n response.status = currentResponse.status\n response.statusText = currentResponse.statusText\n response.headers = currentResponse.headers\n response.payload = currentResponse.payload\n }\n this.finalizeRequest(log)\n this._cleanUp()\n }\n\n /**\n * Generates authorization info object from response.\n */\n _getAuth(): ResponseAuthorization {\n this.logger.debug('Getting auth from response headers')\n let auth = this.currentHeaders.get('www-authenticate')\n const result = new ResponseAuthorization()\n if (auth) {\n this.logger.silly('Auth header found', auth)\n auth = auth.toLowerCase()\n if (auth.indexOf('ntlm') !== -1) {\n this.logger.silly('Detected NTLM authorization')\n result.method = 'ntlm'\n } else if (auth.indexOf('basic') !== -1) {\n result.method = 'basic'\n this.logger.silly('Detected basic authorization')\n } else if (auth.indexOf('digest') !== -1) {\n result.method = 'digest'\n this.logger.silly('Detected digest authorization')\n }\n }\n return result\n }\n\n /**\n * Creates HAR 1.2 timings object from stats.\n */\n _computeStats(stats: RequestStats): RequestTime {\n return computeStats(stats)\n }\n\n /**\n * Handles cookie exchange when redirecting the request.\n */\n _processRedirectCookies(responseCookies: string, location: string): void {\n this.request.headers = processRedirectCookies(\n responseCookies,\n location,\n this.request.url,\n this.request.toHeadersString()\n )\n }\n\n /**\n * Checks certificate identity using TLS api.\n */\n _checkServerIdentity(host: string, cert: tls.PeerCertificate): Error | undefined {\n return checkServerIdentity(host, cert)\n }\n\n /**\n * Clears event listeners of the socket object,\n */\n _clearSocketEventListeners(): void {\n if (!this.socket) {\n return\n }\n this.socket.removeAllListeners('error')\n this.socket.removeAllListeners('timeout')\n this.socket.removeAllListeners('end')\n }\n\n /**\n * Called with the `send()` function to initialize the main promise returned by the send function.\n * The send function returns a promise that is resolved when the request finish.\n */\n protected wrapExecution(): Promise<IRequestLog> {\n let promise: Promise<IRequestLog>\n if (this[mainPromiseSymbol]) {\n promise = this[mainPromiseSymbol] as Promise<IRequestLog>\n } else {\n promise = new Promise((resolve, reject) => {\n this.mainResolver = resolve\n this.mainRejecter = reject\n })\n this[mainPromiseSymbol] = promise\n }\n return promise\n }\n\n /**\n * Called by the request finalizer or error finalized to report the response.\n */\n protected finalizeRequest(log: RequestLog | SerializableError): void {\n const { mainRejecter, mainResolver } = this\n if (!mainRejecter || !mainResolver) {\n return\n }\n\n if (log instanceof SerializableError) {\n mainRejecter(log)\n } else {\n mainResolver(log.toJSON())\n }\n this.mainRejecter = undefined\n this.mainResolver = undefined\n this[mainPromiseSymbol] = undefined\n }\n\n /**\n * Prepares an HTTP message from API Client's request object.\n */\n async prepareMessage(): Promise<Buffer> {\n let payload = this.request.payload\n if (isMethodWithoutBody(this.request.method)) {\n payload = undefined\n }\n const headers = new Headers(this.request.toHeadersString())\n this.prepareHeaders(headers, !!payload)\n const auth = this.hasProxy && !this.isProxyTunnel ? this._proxyAuthHeader() : undefined\n if (auth) {\n headers.set(HEADER_PROXY_AUTHORIZATION, auth)\n }\n const buffer = PayloadSupport.payloadToBuffer(headers, payload)\n if (buffer) {\n addContentLength(this.request.method || 'GET', buffer, headers)\n }\n\n this._handleAuthorization(headers)\n this.sentRequest.headers = headers.toString()\n\n // Update message builder with current host header\n this.messageBuilder.updateHostHeader(this.hostHeader || '')\n\n const message = this.messageBuilder.buildMessage(headers, buffer)\n if (this.auth) {\n // This restores altered by authorization original headers\n // so it can be safe to use when redirecting\n if (this.auth.headers) {\n this.request.headers = this.auth.headers\n delete this.auth.headers\n }\n }\n return message\n }\n\n /**\n * Sends a data to a socket.\n */\n writeMessage(buffer: Buffer): Promise<void> {\n this.logger.debug(`Writing the message to the socket...`)\n let msg = buffer.toString()\n const limit = this.opts.sentMessageLimit\n if (limit && limit > 0 && msg.length >= limit) {\n msg = msg.substring(0, limit)\n msg += ' ...'\n }\n this.sentRequest.httpMessage = msg\n const startTime = Date.now()\n this.stats.startTime = startTime\n this.sentRequest.startTime = startTime\n\n this.stats.messageStart = Date.now()\n return new Promise((resolve) => {\n this.socket?.write(buffer, () => {\n this.logger.debug(`The message has been sent.`)\n this.stats.sentTime = Date.now()\n try {\n this.emit('loadstart')\n } catch {\n //\n }\n resolve()\n })\n })\n }\n\n /**\n * Alters authorization header depending on the `auth` object\n */\n _handleAuthorization(headers: Headers): void {\n const { authorization } = this.opts\n this.authManager.handleRequestAuthorization(headers, authorization, this.uri.host)\n\n // Sync the auth state from AuthManager to parent class for compatibility\n const authState = this.authManager.getAuthState()\n if (authState) {\n this.auth = authState\n }\n }\n\n /**\n * Generate proxy authorization header\n */\n _proxyAuthHeader(): string | undefined {\n return this.authManager.generateProxyAuthHeader()\n }\n\n /**\n * Add event listeners to existing socket.\n */\n _addSocketListeners(socket: net.Socket): net.Socket {\n let received = false\n socket.on('data', (data) => {\n this.logger.debug(`Received server data from the socket...`)\n if (!received) {\n const now = Date.now()\n this.stats.firstReceiveTime = now\n this.emit('firstbyte')\n received = true\n }\n data = Buffer.from(data)\n try {\n // Use the new parser instead of the old parsing methods\n this.parser.processData(data)\n this.logger.debug('Parser state:', this.parser.getState())\n } catch (e) {\n this.logger.error('Error in _addSocketListeners:', e)\n const err = e as Error\n this._errorRequest({\n message: err.message || 'Unknown error occurred',\n })\n return\n }\n })\n socket.once('timeout', () => {\n this.logger.debug(`Socket timeout occurred after ${this.timeout}ms.`)\n this.parser.abort()\n this._errorRequest(HttpEngineErrorFactory.connectionTimeout(this.timeout))\n socket.destroy()\n })\n socket.on('end', () => {\n const endTime = Date.now()\n this.logger.debug(`Server connection ended.`)\n socket.removeAllListeners('timeout')\n socket.removeAllListeners('error')\n socket.removeAllListeners('data')\n this.stats.lastReceivedTime = endTime\n this.sentRequest.endTime = endTime\n // console.log(`Socket ended at ${endTime} in state`, this.parser.getState())\n if (this.parser.getState() !== RequestState.Done) {\n if (!this.currentResponse) {\n const message = `Connection closed without receiving any data.`\n this.logger.error(message)\n const e = HttpEngineErrorFactory.connectionError(message, 100)\n this._errorRequest(e)\n } else {\n this.emit('loadend')\n this._publishResponse()\n }\n }\n })\n socket.once('error', (err) => {\n this.logger.error(`Socket error occurred: ${err.message}`)\n socket.removeAllListeners('timeout')\n this._errorRequest(err)\n })\n return socket\n }\n\n /**\n * Reports response after processing it.\n */\n async _reportResponse(): Promise<void> {\n this._clearSocketEventListeners()\n const { aborted, currentResponse } = this\n if (aborted || !currentResponse) {\n return\n }\n const { status } = currentResponse\n\n const endTime = Date.now()\n this.stats.lastReceivedTime = endTime\n this.sentRequest.endTime = endTime\n\n const result = processResponse({\n status,\n currentResponse,\n currentHeaders: this.currentHeaders,\n followRedirects: this.followRedirects,\n auth: this.auth,\n aborted: this.aborted,\n })\n\n switch (result.action) {\n case 'redirect':\n if (this._reportRedirect(status)) {\n this.closeClient()\n return\n }\n break\n case 'auth':\n if (result.data?.method === 'ntlm') {\n await this.handleNtlmResponse()\n return\n }\n break\n case 'publish':\n this.closeClient()\n this.emit('loadend')\n this._publishResponse()\n break\n case 'abort':\n // Already aborted, do nothing\n break\n }\n }\n\n /**\n * Generate response object and publish it to the listeners.\n */\n async _publishResponse(): Promise<void> {\n if (this.aborted) {\n return\n }\n try {\n const response = await this._createResponse()\n const result = RequestLog.fromRequestResponse(this.sentRequest.toJSON(), response.toJSON())\n if (this.redirects.length) {\n result.redirects = this.redirects\n }\n result.size = new RequestsSize()\n if (this.sentRequest.httpMessage) {\n result.size.request = Buffer.from(this.sentRequest.httpMessage).length\n }\n if (response.payload) {\n if (typeof response.payload === 'string') {\n result.size.response = response.payload.length\n } else {\n result.size.response = response.payload.data.length\n }\n }\n this.finalizeRequest(result)\n } catch (e) {\n const error = e as Error\n this.logger.error('Error in _publishResponse:', error)\n this._errorRequest({\n message: (error && error.message) || 'Unknown error occurred',\n })\n }\n this.abort()\n this._cleanUp()\n }\n\n /**\n * closes the connection, if any\n */\n closeClient(): void {\n if (this.socket && !this.socket.destroyed) {\n this.logger.debug('Closing the socket connection...')\n this.socket.destroy()\n }\n }\n\n /**\n * Handles the response with NTLM authorization\n */\n async handleNtlmResponse(): Promise<void> {\n this.logger.debug('Handling NTLM response...')\n this.logger.debug('Current headers:', this.currentHeaders?.toString())\n this.logger.debug('Auth state:', this.authManager.getAuthState())\n\n const shouldRetry = this.authManager.handleNtlmResponse(this.currentHeaders)\n this.logger.debug('Should retry NTLM:', shouldRetry)\n\n if (shouldRetry) {\n // Update the parent auth state to match AuthManager state\n this.auth = this.authManager.getAuthState()\n this._cleanUpRedirect()\n\n try {\n const message = await this.prepareMessage()\n await this.writeMessage(message)\n // Don't return here - let the socket listeners handle the response\n } catch (error) {\n this.logger.error('Failed to retry NTLM authentication:', error)\n this._errorRequest({\n message: `NTLM retry failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n })\n }\n return\n }\n\n this.logger.debug('NTLM authentication completed')\n // Clear both auth states\n this.authManager.clearAuthState()\n delete this.auth\n this.emit('loadend')\n this._publishResponse()\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CoreEngine.js","sourceRoot":"","sources":["../../../../src/runtime/http-engine/CoreEngine.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAGrC,OAAO,EAAgB,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAKvE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAE3C,OAAO,EAAE,kBAAkB,EAAmB,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAA6B,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAA;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAA;AAsDvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;AAEtD;;;;GAIG;AACH,MAAM,OAAO,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAa;IACpB,IAAI,CAAmB;IACvB,MAAM,CAAiB;IAEvB;;OAEG;IACH,WAAW,CAAa;IAExB,SAAS,GAAuB,EAAE,CAAA;IAClC;;OAEG;IACH,OAAO,GAAG,KAAK,CAAA;IACf;;OAEG;IACH,GAAG,CAAK;IAER,MAAM,CAAa;IACnB;;;;;;OAMG;IACH,UAAU,CAAoB;IAEpB,WAAW,GAAG,gBAAgB,CAAA;IACxC;;OAEG;IACH,WAAW,GAAG,KAAK,CAAA;IAEnB;;;OAGG;IACH,cAAc,GAAG,IAAI,OAAO,EAAE,CAAA;IAE9B;;OAEG;IACH,eAAe,CAAW;IAE1B;;OAEG;IACH,QAAQ,CAAS;IAEjB,KAAK,GAAiB,EAAE,CAAA;IAExB,IAAI,CAAoB;IAEd,YAAY,CAA6B;IACzC,YAAY,CAAoC;IAC1D,CAAC,iBAAiB,CAAC,CAAuB;IAEhC,OAAO,CAAc;IAE/B,iCAAiC;IACzB,MAAM,CAAoB;IAC1B,iBAAiB,CAAmB;IACpC,WAAW,CAAa;IACxB,cAAc,CAAgB;IAEtC,QAAQ,CAAS;IACjB,aAAa,CAAS;IACtB,UAAU,CAAS;IAEnB;;OAEG;IACH,IAAI,eAAe;QACjB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;QACrB,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,eAAe,CAAA;QAC7B,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;QACrB,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,OAAO,CAAA;QACrB,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IAED;;;OAGG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,IAAI,MAAM,CAAC,KAA8B;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAA;QACxB,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAClB,OAAM;QACR,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACpB,IAAI,GAAG,EAAE,CAAC;YACR,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QACtD,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QACrD,CAAC;IACH,CAAC;IAED,YAAY,OAAqB,EAAE,OAA0B,EAAE;QAC7D,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACpC,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QACzE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAEjD,qCAAqC;QACrC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;QAC3E,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;QAE3E,sCAAsC;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAA;QAE/E,oCAAoC;QACpC,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QAEvE,8BAA8B;QAC9B,MAAM,gBAAgB,GAAyB;YAC7C,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa;YACtC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa;YACtC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB;SACjD,CAAA;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC;YACjC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,gBAAgB;SACjB,CAAC,CAAA;QAEF,iCAAiC;QACjC,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC;YACvC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAuB;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAA;QAEF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC3B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAA0B,EAAE;QACtC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,MAAM,CAAA;QACpB,CAAC;QACD,OAAO,YAAY,EAAE,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,KAAa;QACnB,OAAO,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;IACnD,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,GAAW;QACvB,OAAO,aAAa,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;IACvD,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAM;QACR,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAA;QAChC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;YACvB,OAAM;QACR,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;QACnB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;QACrB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;IACzB,CAAC;IAED;;OAEG;IACO,aAAa;QACrB,MAAM,CAAC,GAAG,IAAI,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;QACrD,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;QACrB,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,OAAO;YACL,cAAc,EAAE,CAAC,MAAc,EAAE,UAAkB,EAAE,EAAE;gBACrD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;gBAC9D,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;gBACxD,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAA;gBACxB,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAA;YACjC,CAAC;YACD,eAAe,EAAE,CAAC,OAAgB,EAAE,EAAE;gBACpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAA;gBAC3C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAA;gBAC7B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACzB,IAAI,CAAC,eAAe,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAA;gBACnD,CAAC;YACH,CAAC;YACD,cAAc,EAAE,CAAC,IAAY,EAAE,EAAE;gBAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;gBAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;gBACpB,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;oBACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAA;oBACrD,IAAI,CAAC,aAAa,CAAC;wBACjB,OAAO,EAAE,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;qBACnG,CAAC,CAAA;gBACJ,CAAC,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;gBACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;gBAC1C,IAAI,CAAC,aAAa,CAAC;oBACjB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,wBAAwB;iBACnD,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;gBACnC,IAAI,CAAC,KAAK,EAAE,CAAA;YACd,CAAC;YACD,IAAI,EAAE,CAAC,KAAa,EAAE,MAAgB,EAAE,EAAE;gBACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;gBAC/C,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;YAC1B,CAAC;SACF,CAAA;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACpC,IAAI,CAAC,WAAW,EAAE,CAAA;QAClB,OAAO,OAAO,CAAA;IAChB,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,IAAI,CAAC;YACH,yDAAyD;YACzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAA;YAC/C,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC5B,OAAM;YACR,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;YAC3C,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,wBAAwB,EAAE,CAAC;gBAC9C,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;gBACzD,MAAM,eAAe,GAAG,QAAQ,CAAC,UAAU,CACzC,KAAK,CAAC,QAAQ,CAAC,UAAU,IAAI,GAAG,EAChC,KAAK,CAAC,QAAQ,CAAC,aAAa,EAC5B,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAC/B,CAAA;gBACD,eAAe,CAAC,WAAW,GAAG,CAAC,CAAA;gBAC/B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;gBACtC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAA;oBAC1B,eAAe,CAAC,OAAO,GAAG,iBAAiB,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACzE,CAAC;gBACD,IAAI,CAAC,gBAAgB,EAAE,CAAA;gBACvB,OAAM;YACR,CAAC;YACD,MAAM,CAAC,GAAG,KAA0B,CAAA;YACpC,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;YAC1D,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC3B,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAc,CAAA;YAC7B,CAAC;YACD,IAAI,CAAC,KAAK,EAAE,CAAA;YACZ,IAAI,CAAC,aAAa,CAAC;gBACjB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,GAAG,CAAC,IAAI;aACf,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB;QAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAA;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAA;QAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7F,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;QACxB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QAC5B,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;QAChC,MAAM,CAAC,MAAM,EAAE,CAAA;QACf,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,IAAa;QAC5B,OAAO,UAAU,CAAC,IAAI,EAAE;YACtB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,cAAc;SAC7B,CAAC,CAAA;IACJ,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,OAAgB,EAAE,WAAW,GAAG,KAAK;QAClD,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC/B,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC/B,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;gBACvD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;gBACzC,CAAC;YACH,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;oBAC5B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;gBAChD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;gBAChE,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;oBACrC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;gBAC/D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;QACnB,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,EAAE,CAAA;QACnC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAA;QAChC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;QACzB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;QACxB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACf,IAAI,CAAC,YAAY,GAAG,SAAS,CAAA;QAC7B,IAAI,CAAC,YAAY,GAAG,SAAS,CAAA;QAC7B,IAAI,CAAC,0BAA0B,EAAE,CAAA;QACjC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,EAAE,CAAA;QACnC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAA;QAChC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;QACzB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACf,IAAI,CAAC,0BAA0B,EAAE,CAAA;QACjC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,MAAc;QAC5B,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAAA;QACxC,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAC7C,qDAAqD;QACrD,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC/E,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAA;QACd,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QACvB,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAA;QACxD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACK,kBAAkB,CACxB,MAAc,EACd,MAAe,EACf,QAAiB;QAEjB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;QAC5B,CAAC;QAED,oDAAoD;QACpD,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,CAAA;YACnE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;QAC/C,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;IAC5B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,gBAAgB,CAAC,OAAqE;QAC1F,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,gBAAgB,EAAE,CAAA;YACvB,OAAM;QACR,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACjG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;YACjC,OAAM;QACR,CAAC;QAED,iCAAiC;QACjC,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;YACjC,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAyB;YACnC,QAAQ;YACR,WAAW,EAAE,IAAI;SAClB,CAAA;QACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;QACnC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,EAAE,CAAA;YACvB,OAAM;QACR,CAAC;QACD,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;YAC7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAA;YAC7D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAA;YACvB,IAAI,eAAe,EAAE,CAAC;gBACpB,IAAI,CAAC,uBAAuB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;YACzD,CAAC;YACD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;YAExB,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAA;YAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,QAAQ,CAAA;YAC/B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAA;YAC7B,CAAC;YACD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;YAC9C,4DAA4D;YAC5D,oCAAoC;YACpC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QAC/B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,CAAU,CAAA;YACxB,IAAI,CAAC,aAAa,CAAC;gBACjB,OAAO,EAAE,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,wBAAwB;aAC9D,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,QAAgB,EAAE,UAAkB;QAC9D,OAAO,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IAClD,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,QAAgB,EAAE,SAA6B;QACpE,OAAO,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IAC5C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,uBAAuB,CAAC,QAAgB;QAC5C,MAAM,EAAE,eAAe,GAAG,IAAI,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAA;QAEjD,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CACtC,eAAe,CAAC,MAAM,EACtB,eAAe,CAAC,UAAU,EAC1B,eAAe,CAAC,OAAO,CACxB,CAAA;QACD,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;YAC5B,QAAQ,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAA;QAC5C,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACjD,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;YACjC,eAAe,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC5C,CAAC;QAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,CAC1C,QAAQ,EACR,QAAQ,CAAC,MAAM,EAAE,EACjB,IAAI,CAAC,KAAK,CAAC,SAAS,EACpB,IAAI,CAAC,KAAK,CAAC,YAAY,CACxB,CAAA;QACD,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAEjD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;QACrC,CAAC;QACD,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAA;QAChC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;QAC5E,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAA;QAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC;;+BAES,CAAC,CAAA;QAC5B,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,eAAe,CAAC,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;QACjG,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACjD,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QAC/C,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;YACjC,eAAe,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC5C,CAAC;QACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;YACpD,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QACjC,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,IAAuB;QACnC,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAA;QAChC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,IAAI,OAAO,CAAA;QACX,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrC,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QACxB,CAAC;QACD,OAAO,GAAG,OAAO,IAAI,wBAAwB,CAAA;QAC7C,MAAM,KAAK,GAAG,IAAI,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACvD,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;QAC7D,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAC/C,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACvB,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;YAC9C,QAAQ,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAA;YACxC,QAAQ,CAAC,UAAU,GAAG,eAAe,CAAC,UAAU,CAAA;YAChD,QAAQ,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAA;YAC1C,QAAQ,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAA;QAC5C,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;QACzB,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;QACvD,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;QACtD,MAAM,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAA;QAC1C,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAA;YAC5C,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;YACzB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;gBAChD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;YACxB,CAAC;iBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACxC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAA;gBACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;YACnD,CAAC;iBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACzC,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAA;gBACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;YACpD,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,KAAmB;QAC/B,OAAO,YAAY,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,eAAuB,EAAE,QAAgB;QAC/D,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,sBAAsB,CAC3C,eAAe,EACf,QAAQ,EACR,IAAI,CAAC,OAAO,CAAC,GAAG,EAChB,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAC/B,CAAA;IACH,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,IAAY,EAAE,IAAyB;QAC1D,OAAO,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACxC,CAAC;IAED;;OAEG;IACH,0BAA0B;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAM;QACR,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;QACvC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA;QACzC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACvC,CAAC;IAED;;;OAGG;IACO,aAAa;QACrB,IAAI,OAA6B,CAAA;QACjC,IAAI,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC5B,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAyB,CAAA;QAC3D,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACxC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAA;gBAC3B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAA;YAC5B,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAA;QACnC,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;OAEG;IACO,eAAe,CAAC,GAAmC;QAC3D,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,IAAI,CAAA;QAC3C,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC;YACnC,OAAM;QACR,CAAC;QAED,IAAI,GAAG,YAAY,iBAAiB,EAAE,CAAC;YACrC,YAAY,CAAC,GAAG,CAAC,CAAA;QACnB,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;QAC5B,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,SAAS,CAAA;QAC7B,IAAI,CAAC,YAAY,GAAG,SAAS,CAAA;QAC7B,IAAI,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAA;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA;QAClC,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7C,OAAO,GAAG,SAAS,CAAA;QACrB,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAA;QAC3D,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;QACvF,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAA;QAC/C,CAAC;QACD,MAAM,MAAM,GAAG,cAAc,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC/D,IAAI,MAAM,EAAE,CAAC;YACX,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QACjE,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAA;QAClC,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAA;QAE7C,kDAAkD;QAClD,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAA;QAE3D,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QACjE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,0DAA0D;YAC1D,4CAA4C;YAC5C,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACtB,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAA;gBACxC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAA;YAC1B,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAc;QACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACzD,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAA;QACxC,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;YAC9C,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YAC7B,GAAG,IAAI,MAAM,CAAA;QACf,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,GAAG,CAAA;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC5B,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAA;QAChC,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,SAAS,CAAA;QAEtC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE;gBAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAA;gBAC/C,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;gBAChC,IAAI,CAAC;oBACH,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBACxB,CAAC;gBAAC,MAAM,CAAC;oBACP,EAAE;gBACJ,CAAC;gBACD,OAAO,EAAE,CAAA;YACX,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,OAAgB;QACnC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA;QACnC,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAElF,yEAAyE;QACzE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAA;QACjD,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;QACvB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,uBAAuB,EAAE,CAAA;IACnD,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,MAAkB;QACpC,IAAI,QAAQ,GAAG,KAAK,CAAA;QACpB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAA;YAC5D,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;gBACtB,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,GAAG,CAAA;gBACjC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBACtB,QAAQ,GAAG,IAAI,CAAA;YACjB,CAAC;YACD,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACxB,IAAI,CAAC;gBACH,wDAAwD;gBACxD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;gBAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC5D,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAA;gBACrD,MAAM,GAAG,GAAG,CAAU,CAAA;gBACtB,IAAI,CAAC,aAAa,CAAC;oBACjB,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,wBAAwB;iBACjD,CAAC,CAAA;gBACF,OAAM;YACR,CAAC;QACH,CAAC,CAAC,CAAA;QACF,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;YAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,IAAI,CAAC,OAAO,KAAK,CAAC,CAAA;YACrE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;YACnB,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;YAC1E,MAAM,CAAC,OAAO,EAAE,CAAA;QAClB,CAAC,CAAC,CAAA;QACF,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;YAC7C,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA;YACpC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;YAClC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;YACjC,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,OAAO,CAAA;YACrC,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,OAAO,CAAA;YAClC,6EAA6E;YAC7E,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,YAAY,CAAC,IAAI,EAAE,CAAC;gBACjD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;oBAC1B,MAAM,OAAO,GAAG,+CAA+C,CAAA;oBAC/D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;oBAC1B,MAAM,CAAC,GAAG,sBAAsB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;oBAC9D,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;gBACvB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;oBACpB,IAAI,CAAC,gBAAgB,EAAE,CAAA;gBACzB,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;QACF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;YAC1D,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA;YACpC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,0BAA0B,EAAE,CAAA;QACjC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAA;QACzC,IAAI,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;YAChC,OAAM;QACR,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAA;QAElC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC1B,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,OAAO,CAAA;QACrC,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,OAAO,CAAA;QAElC,MAAM,MAAM,GAAG,eAAe,CAAC;YAC7B,MAAM;YACN,eAAe;YACf,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAA;QAEF,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,UAAU;gBACb,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;oBACjC,IAAI,CAAC,WAAW,EAAE,CAAA;oBAClB,OAAM;gBACR,CAAC;gBACD,MAAK;YACP,KAAK,MAAM;gBACT,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;oBACnC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA;oBAC/B,OAAM;gBACR,CAAC;gBACD,MAAK;YACP,KAAK,SAAS;gBACZ,IAAI,CAAC,WAAW,EAAE,CAAA;gBAClB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;gBACpB,IAAI,CAAC,gBAAgB,EAAE,CAAA;gBACvB,MAAK;YACP,KAAK,OAAO;gBACV,8BAA8B;gBAC9B,MAAK;QACT,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB;QACpB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAM;QACR,CAAC;QACD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAA;YAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;YAC3F,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;gBAC1B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;YACnC,CAAC;YACD,MAAM,CAAC,IAAI,GAAG,IAAI,YAAY,EAAE,CAAA;YAChC,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;gBACjC,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAAA;YACxE,CAAC;YACD,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACzC,MAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAA;gBAChD,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAA;gBACrD,CAAC;YACH,CAAC;YACD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;QAC9B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,CAAU,CAAA;YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAA;YACtD,IAAI,CAAC,aAAa,CAAC;gBACjB,OAAO,EAAE,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,wBAAwB;aAC9D,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAA;YACrD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;QACvB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;QAC9C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAA;QACtE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,CAAA;QAEjE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC5E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAA;QAEpD,IAAI,WAAW,EAAE,CAAC;YAChB,0DAA0D;YAC1D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAA;YAC3C,IAAI,CAAC,gBAAgB,EAAE,CAAA;YAEvB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;gBAC3C,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;gBAChC,mEAAmE;YACrE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAA;gBAChE,IAAI,CAAC,aAAa,CAAC;oBACjB,OAAO,EAAE,sBAAsB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;iBAC1F,CAAC,CAAA;YACJ,CAAC;YACD,OAAM;QACR,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAClD,yBAAyB;QACzB,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAA;QACjC,OAAO,IAAI,CAAC,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACpB,IAAI,CAAC,gBAAgB,EAAE,CAAA;IACzB,CAAC;CACF","sourcesContent":["import net from 'net'\nimport { URL } from 'url'\nimport tls from 'tls'\nimport { EventEmitter } from 'events'\nimport { Logger, type ILogObj } from 'tslog'\nimport { IRequestLog } from '../../models/RequestLog.js'\nimport { IHttpRequest, HttpRequest } from '../../models/HttpRequest.js'\nimport { IRequestBaseConfig } from '../../models/RequestConfig.js'\nimport { IRequestAuthorization } from '../../models/RequestAuthorization.js'\n\nimport { HttpCertificate } from '../../models/ClientCertificate.js'\nimport { SentRequest } from '../../models/SentRequest.js'\nimport { Response } from '../../models/Response.js'\nimport { ErrorResponse } from '../../models/ErrorResponse.js'\nimport { RequestsSize } from '../../models/RequestsSize.js'\nimport { HttpResponse } from '../../models/HttpResponse.js'\nimport { ResponseRedirect } from '../../models/ResponseRedirect.js'\nimport { RequestLog } from '../../models/RequestLog.js'\nimport { RequestTime } from '../../models/RequestTime.js'\nimport { SerializableError } from '../../models/SerializableError.js'\nimport { ResponseAuthorization } from '../../models/ResponseAuthorization.js'\nimport { Headers } from '../../lib/headers/Headers.js'\nimport { getPort } from './RequestUtils.js'\n\nimport { HttpResponseParser, ParserCallbacks, RequestState } from './parsers/index.js'\nimport { ConnectionManager } from './connections/index.js'\nimport { AuthManager, type ProxyAuthCredentials } from './auth/index.js'\nimport { MessageBuilder } from './message/index.js'\nimport { HttpEngineErrorFactory } from './errors/index.js'\nimport { isMethodWithoutBody, HEADER_PROXY_AUTHORIZATION } from './constants.js'\nimport { decompress } from './compression/index.js'\nimport { checkServerIdentity } from './certificates/index.js'\nimport { readUrl, getHostHeader, getRedirectLocation, isRedirectLoop } from './url/index.js'\nimport { processRedirectCookies } from './cookies/index.js'\nimport { computeStats } from './statistics/index.js'\nimport { processResponse } from './response/index.js'\nimport { getCodeMessage } from './HttpErrorCodes.js'\nimport { createLogger } from '../../lib/logging/index.js'\nimport * as PayloadSupport from './PayloadSupport.js'\nimport { addContentLength } from './RequestUtils.js'\nimport { PayloadSerializer } from '../../lib/transformers/PayloadSerializer.js'\nimport { ProxyAuthenticationError } from './errors/HttpEngineErrors.js'\n\nexport interface HttpEngineOptions extends IRequestBaseConfig {\n /**\n * The authorization configuration to apply to the request.\n */\n authorization?: IRequestAuthorization[]\n /**\n * Logger object.\n */\n logger?: Logger<ILogObj>\n /**\n * A certificate to use with the request.\n */\n certificates?: HttpCertificate[]\n}\n\nexport interface RequestStats {\n firstReceiveTime?: number\n lastReceivedTime?: number\n messageStart?: number\n sentTime?: number\n connectionTime?: number\n lookupTime?: number\n connectedTime?: number\n secureStartTime?: number\n secureConnectedTime?: number\n startTime?: number\n responseTime?: number\n receivingTime?: number\n}\n\nexport interface ResponseErrorInit {\n code?: number | string\n message?: string\n}\n\nexport interface BeforeRedirectDetail {\n location: string\n returnValue: boolean\n}\n\nexport interface HeadersReceivedDetail {\n value: string\n returnValue: boolean\n}\n\nexport interface IRequestAuthState {\n method: 'ntlm'\n state: number\n headers?: string\n challengeHeader?: string\n}\n\nexport const mainPromiseSymbol = Symbol('mainPromise')\n\n/**\n * API Client's HTTP engine with refactored parsing and connection handling.\n * An HTTP 1.1 engine working directly on the socket. It communicates with the remote machine and\n * collects stats about the request and response.\n */\nexport class CoreEngine extends EventEmitter {\n request: HttpRequest\n opts: HttpEngineOptions\n logger: Logger<ILogObj>\n\n /**\n * The current sent request\n */\n sentRequest: SentRequest\n\n redirects: ResponseRedirect[] = []\n /**\n * When true the request has been aborted.\n */\n aborted = false\n /**\n * Parsed value of the request URL.\n */\n uri: URL\n\n socket?: net.Socket\n /**\n * Host header can be different than registered URL because of\n * `hosts` rules.\n * If a rule changes host value of the URL the original URL host value\n * is used when generating the request and not overwritten one.\n * This way virtual hosts can be tested using hosts.\n */\n hostHeader: string | undefined\n\n protected hostTestReg = /^\\s*host\\s*:/im\n /**\n * Set when the request is redirected.\n */\n redirecting = false\n\n /**\n * The response headers.\n * The object may be empty when the response is not set.\n */\n currentHeaders = new Headers()\n\n /**\n * The response object build during the execution.\n */\n currentResponse?: Response\n\n /**\n * Keeps the raw body in a temporary buffer while processing the response.\n */\n _rawBody?: Buffer\n\n stats: RequestStats = {}\n\n auth?: IRequestAuthState\n\n protected mainResolver?: (log: IRequestLog) => void\n protected mainRejecter?: (err: SerializableError) => void;\n [mainPromiseSymbol]?: Promise<IRequestLog>\n\n protected _signal?: AbortSignal\n\n // CoreEngine specific properties\n private parser: HttpResponseParser\n private connectionManager: ConnectionManager\n private authManager: AuthManager\n private messageBuilder: MessageBuilder\n\n hasProxy: boolean\n isProxyTunnel: boolean\n isProxySsl: boolean\n\n /**\n * @return True if following redirects is allowed.\n */\n get followRedirects(): boolean {\n const { opts } = this\n if (typeof opts.followRedirects === 'boolean') {\n return opts.followRedirects\n }\n return true\n }\n\n /**\n * The request timeout.\n */\n get timeout(): number {\n const { opts } = this\n if (typeof opts.timeout === 'number') {\n return opts.timeout\n }\n return 0\n }\n\n /**\n * The abort signal to set on this request.\n * Aborts the request when the signal fires.\n */\n get signal(): AbortSignal | undefined {\n return this._signal\n }\n\n set signal(value: AbortSignal | undefined) {\n const old = this._signal\n if (old === value) {\n return\n }\n this._signal = value\n if (old) {\n old.removeEventListener('abort', this._abortHandler)\n }\n if (value) {\n value.addEventListener('abort', this._abortHandler)\n }\n }\n\n constructor(request: IHttpRequest, opts: HttpEngineOptions = {}) {\n super()\n this.request = new HttpRequest({ ...request })\n this.opts = opts\n this.logger = this.setupLogger(opts)\n this.sentRequest = new SentRequest({ ...request, startTime: Date.now() })\n this.uri = this.readUrl(request.url)\n this.hostHeader = this.getHostHeader(request.url)\n\n // CoreEngine specific initialization\n this.hasProxy = !!this.opts.proxy\n this.isProxyTunnel = this.hasProxy && this.request.url.startsWith('https:')\n this.isProxySsl = !!this.opts.proxy && this.opts.proxy.startsWith('https:')\n\n // Initialize the HTTP response parser\n this.parser = new HttpResponseParser(this.logger, this.createParserCallbacks())\n\n // Initialize the connection manager\n this.connectionManager = new ConnectionManager(this.logger, this.stats)\n\n // Initialize the auth manager\n const proxyCredentials: ProxyAuthCredentials = {\n proxyUsername: this.opts.proxyUsername,\n proxyPassword: this.opts.proxyPassword,\n proxyAuthorization: this.opts.proxyAuthorization,\n }\n\n this.authManager = new AuthManager({\n logger: this.logger,\n proxyCredentials,\n })\n\n // Initialize the message builder\n this.messageBuilder = new MessageBuilder({\n logger: this.logger,\n request: this.request as IHttpRequest,\n hasProxy: this.hasProxy,\n isProxyTunnel: this.isProxyTunnel,\n hostHeader: this.hostHeader,\n })\n\n this._abortHandler = this._abortHandler.bind(this)\n if (opts.signal) {\n this.signal = opts.signal\n }\n }\n\n /**\n * Creates a logger object to log debug output.\n */\n setupLogger(opts: HttpEngineOptions = {}): Logger<ILogObj> {\n if (opts.logger) {\n return opts.logger\n }\n return createLogger()\n }\n\n /**\n * Updates the `uri` property from current request URL\n */\n readUrl(value: string): URL {\n return readUrl(value, { hosts: this.opts.hosts })\n }\n\n /**\n * Get host header for the request\n */\n getHostHeader(url: string): string | undefined {\n return getHostHeader(url, { hosts: this.opts.hosts })\n }\n\n /**\n * Aborts current request.\n * It emits `error` event\n */\n abort(): void {\n this.logger.debug('Aborting the request...')\n this.aborted = true\n if (!this.socket) {\n return\n }\n this.socket.removeAllListeners()\n if (this.socket.destroyed) {\n this.socket = undefined\n return\n }\n this.socket.pause()\n this.socket.destroy()\n this.socket = undefined\n }\n\n /**\n * Handler for the `abort` event on the `AbortSignal`.\n */\n protected _abortHandler(): void {\n const e = new SerializableError('Request aborted', 3)\n this._errorRequest(e)\n this.abort()\n }\n\n /**\n * Create parser callbacks to handle parsed data\n */\n private createParserCallbacks(): ParserCallbacks {\n return {\n onStatusParsed: (status: number, statusText: string) => {\n this.logger.debug('onStatusParsed called', status, statusText)\n const response = Response.fromValues(status, statusText)\n response.loadingTime = 0\n this.currentResponse = response\n },\n onHeadersParsed: (headers: Headers) => {\n this.logger.debug('onHeadersParsed called')\n this.currentHeaders = headers\n if (this.currentResponse) {\n this.currentResponse.headers = headers.toString()\n }\n },\n onBodyComplete: (body: Buffer) => {\n this.logger.debug('onBodyComplete called')\n this._rawBody = body\n this._reportResponse().catch((error) => {\n this.logger.error('Error in _reportResponse:', error)\n this._errorRequest({\n message: `Response processing failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n })\n })\n },\n onError: (error: Error) => {\n this.logger.debug('onError called', error)\n this._errorRequest({\n message: error.message || 'Unknown error occurred',\n })\n },\n onAbort: () => {\n this.logger.debug('onAbort called')\n this.abort()\n },\n emit: (event: string, detail?: unknown) => {\n this.logger.debug('emit called', event, detail)\n this.emit(event, detail)\n },\n }\n }\n\n /**\n * Sends the request\n */\n async send(): Promise<IRequestLog> {\n const promise = this.wrapExecution()\n this.sendRequest()\n return promise\n }\n\n private async sendRequest(): Promise<void> {\n try {\n // Use the connection manager to establish the connection\n const socket = await this.establishConnection()\n if (!socket || this.aborted) {\n return\n }\n\n const message = await this.prepareMessage()\n await this.writeMessage(message)\n } catch (cause) {\n if (cause instanceof ProxyAuthenticationError) {\n this.currentHeaders = new Headers(cause.response.headers)\n const currentResponse = Response.fromValues(\n cause.response.statusCode || 401,\n cause.response.statusMessage,\n this.currentHeaders.toString()\n )\n currentResponse.loadingTime = 0\n this.currentResponse = currentResponse\n if (cause.head.length) {\n this._rawBody = cause.head\n currentResponse.payload = PayloadSerializer.stringifyBuffer(cause.head)\n }\n this._publishResponse()\n return\n }\n const e = cause as SerializableError\n const err = new SerializableError(e.message, { cause: e })\n if (e.code || e.code === 0) {\n err.code = e.code as string\n }\n this.abort()\n this._errorRequest({\n message: err.message,\n code: err.code,\n })\n }\n }\n\n /**\n * Establish connection using the connection manager\n */\n private async establishConnection(): Promise<net.Socket> {\n const port = getPort(this.uri.port, this.uri.protocol)\n const host = this.uri.hostname\n const protocol = this.uri.protocol\n const socket = await this.connectionManager.createConnection(host, port, protocol, this.opts)\n const { timeout } = this\n if (typeof timeout === 'number' && timeout > 0) {\n socket.setTimeout(timeout)\n }\n this.socket = socket\n this._addSocketListeners(socket)\n socket.resume()\n return socket\n }\n\n /**\n * Decompresses received body if `content-encoding` header is set.\n */\n async decompress(body?: Buffer): Promise<Buffer | undefined> {\n return decompress(body, {\n aborted: this.aborted,\n headers: this.currentHeaders,\n })\n }\n\n /**\n * Prepares headers list to be send to the remote machine.\n * If `defaultHeaders` option is set then it adds `user-agent` and `accept`\n * headers.\n */\n prepareHeaders(headers: Headers, withPayload = false): void {\n if (this.opts.defaultHeaders) {\n if (!headers.has('user-agent')) {\n if (this.opts.defaultUserAgent) {\n headers.set('user-agent', this.opts.defaultUserAgent)\n } else {\n headers.set('user-agent', 'api client')\n }\n }\n if (!headers.has('accept')) {\n if (this.opts.defaultAccept) {\n headers.set('accept', this.opts.defaultAccept)\n } else {\n headers.set('accept', '*/*')\n }\n }\n }\n if (withPayload) {\n if (!headers.has('content-type') && this.request.payloadOptions) {\n if (this.request.payloadOptions.mime) {\n headers.set('content-type', this.request.payloadOptions.mime)\n }\n }\n }\n }\n\n /**\n * Cleans the state after finished.\n */\n _cleanUp(): void {\n this.redirects = []\n this.currentHeaders = new Headers()\n this.currentResponse = undefined\n this._rawBody = undefined\n this.redirecting = false\n this.stats = {}\n this.mainRejecter = undefined\n this.mainResolver = undefined\n this._clearSocketEventListeners()\n this.parser.reset()\n }\n\n /**\n * Cleans up the state for redirect.\n */\n _cleanUpRedirect(): void {\n this.currentHeaders = new Headers()\n this.currentResponse = undefined\n this._rawBody = undefined\n this.stats = {}\n this._clearSocketEventListeners()\n this.parser.reset()\n }\n\n /**\n * Reports response when redirected.\n */\n _reportRedirect(status: number): boolean {\n const { request, currentHeaders } = this\n if (!currentHeaders) {\n return false\n }\n const rerUrl = currentHeaders.get('location')\n // https://github.com/jarrodek/socket-fetch/issues/13\n const redirectOptions = this.getRedirectOptions(status, request.method, rerUrl)\n if (!redirectOptions.redirect) {\n return false\n }\n this.redirecting = true\n setTimeout(() => this._redirectRequest(redirectOptions))\n return true\n }\n\n /**\n * Get redirect options based on status and method\n */\n private getRedirectOptions(\n status: number,\n method?: string,\n location?: string\n ): { redirect: boolean; location?: string; forceGet?: boolean } {\n if (!location) {\n return { redirect: false }\n }\n\n // 301, 302, 303, 307, 308 are redirect status codes\n if (status >= 300 && status < 400) {\n const forceGet = status === 301 || status === 302 || status === 303\n return { redirect: true, location, forceGet }\n }\n\n return { redirect: false }\n }\n\n /**\n * Creates a response and adds it to the redirects list and redirects\n * the request to the new location.\n */\n async _redirectRequest(options: { redirect: boolean; location?: string; forceGet?: boolean }): Promise<void> {\n if (this.followRedirects === false) {\n this._publishResponse()\n return\n }\n const location = options.location && this.getRedirectLocation(options.location, this.request.url)\n if (!location) {\n this._errorRequest({ code: 302 })\n return\n }\n\n // check if this is infinite loop\n if (this.isRedirectLoop(location, this.redirects)) {\n this._errorRequest({ code: 310 })\n return\n }\n\n const detail: BeforeRedirectDetail = {\n location,\n returnValue: true,\n }\n this.emit('beforeredirect', detail)\n if (!detail.returnValue) {\n this._publishResponse()\n return\n }\n try {\n const responseCookies = this.currentHeaders.get('set-cookie')\n const response = await this._createRedirectResponse(location)\n this.redirects.push(response)\n this._cleanUpRedirect()\n if (responseCookies) {\n this._processRedirectCookies(responseCookies, location)\n }\n this.redirecting = false\n\n this.request.url = location\n this.sentRequest.url = location\n if (options.forceGet) {\n this.request.method = 'GET'\n }\n this.uri = this.readUrl(location)\n this.hostHeader = this.getHostHeader(location)\n // No idea why but without setTimeout the program loses it's\n // scope after calling the function.\n setTimeout(() => this.send())\n } catch (e) {\n const error = e as Error\n this._errorRequest({\n message: (error && error.message) || 'Unknown error occurred',\n })\n }\n }\n\n /**\n * Get redirect location\n */\n private getRedirectLocation(location: string, currentUrl: string): string {\n return getRedirectLocation(location, currentUrl)\n }\n\n /**\n * Check if redirect is a loop\n */\n private isRedirectLoop(location: string, redirects: ResponseRedirect[]): boolean {\n return isRedirectLoop(location, redirects)\n }\n\n /**\n * @param location The redirect location.\n * @return Redirect response object\n */\n async _createRedirectResponse(location: string): Promise<ResponseRedirect> {\n const { currentResponse = new Response() } = this\n\n const response = HttpResponse.fromValues(\n currentResponse.status,\n currentResponse.statusText,\n currentResponse.headers\n )\n if (currentResponse.payload) {\n response.payload = currentResponse.payload\n }\n\n const body = await this.decompress(this._rawBody)\n if (body) {\n await response.writePayload(body)\n currentResponse.payload = response.payload\n }\n\n const redirect = ResponseRedirect.fromValues(\n location,\n response.toJSON(),\n this.stats.startTime,\n this.stats.responseTime\n )\n redirect.timings = this._computeStats(this.stats)\n\n return redirect\n }\n\n /**\n * Creates a response object\n */\n async _createResponse(): Promise<Response> {\n if (this.aborted) {\n throw new Error(`Request aborted.`)\n }\n const { currentResponse } = this\n if (!currentResponse) {\n throw new Error(`Tried to create a response but no response data is set.`)\n }\n const { status } = currentResponse\n if (status === undefined) {\n throw new Error(`The response status is empty.\nIt means that the successful connection wasn't made.\nCheck your request parameters.`)\n }\n const body = await this.decompress(this._rawBody)\n const response = Response.fromValues(status, currentResponse.statusText, currentResponse.headers)\n response.timings = this._computeStats(this.stats)\n response.loadingTime = response.timings.total()\n if (body) {\n await response.writePayload(body)\n currentResponse.payload = response.payload\n }\n if (status === 401) {\n this.logger.silly('Setting auth on the response...')\n response.auth = this._getAuth()\n }\n return response\n }\n\n /**\n * Finishes the response with error message.\n */\n _errorRequest(opts: ResponseErrorInit): void {\n const { currentResponse } = this\n this.aborted = true\n let message\n if (opts.code && !opts.message) {\n message = getCodeMessage(opts.code)\n } else if (opts.message) {\n message = opts.message\n }\n message = message || 'Unknown error occurred'\n const error = new SerializableError(message, opts.code)\n const log = RequestLog.fromRequest(this.sentRequest.toJSON())\n const response = ErrorResponse.fromError(error)\n log.response = response\n if (currentResponse && currentResponse.status) {\n response.status = currentResponse.status\n response.statusText = currentResponse.statusText\n response.headers = currentResponse.headers\n response.payload = currentResponse.payload\n }\n this.finalizeRequest(log)\n this._cleanUp()\n }\n\n /**\n * Generates authorization info object from response.\n */\n _getAuth(): ResponseAuthorization {\n this.logger.debug('Getting auth from response headers')\n let auth = this.currentHeaders.get('www-authenticate')\n const result = new ResponseAuthorization()\n if (auth) {\n this.logger.silly('Auth header found', auth)\n auth = auth.toLowerCase()\n if (auth.indexOf('ntlm') !== -1) {\n this.logger.silly('Detected NTLM authorization')\n result.method = 'ntlm'\n } else if (auth.indexOf('basic') !== -1) {\n result.method = 'basic'\n this.logger.silly('Detected basic authorization')\n } else if (auth.indexOf('digest') !== -1) {\n result.method = 'digest'\n this.logger.silly('Detected digest authorization')\n }\n }\n return result\n }\n\n /**\n * Creates HAR 1.2 timings object from stats.\n */\n _computeStats(stats: RequestStats): RequestTime {\n return computeStats(stats)\n }\n\n /**\n * Handles cookie exchange when redirecting the request.\n */\n _processRedirectCookies(responseCookies: string, location: string): void {\n this.request.headers = processRedirectCookies(\n responseCookies,\n location,\n this.request.url,\n this.request.toHeadersString()\n )\n }\n\n /**\n * Checks certificate identity using TLS api.\n */\n _checkServerIdentity(host: string, cert: tls.PeerCertificate): Error | undefined {\n return checkServerIdentity(host, cert)\n }\n\n /**\n * Clears event listeners of the socket object,\n */\n _clearSocketEventListeners(): void {\n if (!this.socket) {\n return\n }\n this.socket.removeAllListeners('error')\n this.socket.removeAllListeners('timeout')\n this.socket.removeAllListeners('end')\n }\n\n /**\n * Called with the `send()` function to initialize the main promise returned by the send function.\n * The send function returns a promise that is resolved when the request finish.\n */\n protected wrapExecution(): Promise<IRequestLog> {\n let promise: Promise<IRequestLog>\n if (this[mainPromiseSymbol]) {\n promise = this[mainPromiseSymbol] as Promise<IRequestLog>\n } else {\n promise = new Promise((resolve, reject) => {\n this.mainResolver = resolve\n this.mainRejecter = reject\n })\n this[mainPromiseSymbol] = promise\n }\n return promise\n }\n\n /**\n * Called by the request finalizer or error finalized to report the response.\n */\n protected finalizeRequest(log: RequestLog | SerializableError): void {\n const { mainRejecter, mainResolver } = this\n if (!mainRejecter || !mainResolver) {\n return\n }\n\n if (log instanceof SerializableError) {\n mainRejecter(log)\n } else {\n mainResolver(log.toJSON())\n }\n this.mainRejecter = undefined\n this.mainResolver = undefined\n this[mainPromiseSymbol] = undefined\n }\n\n /**\n * Prepares an HTTP message from API Client's request object.\n */\n async prepareMessage(): Promise<Buffer> {\n let payload = this.request.payload\n if (isMethodWithoutBody(this.request.method)) {\n payload = undefined\n }\n const headers = new Headers(this.request.toHeadersString())\n this.prepareHeaders(headers, !!payload)\n const auth = this.hasProxy && !this.isProxyTunnel ? this._proxyAuthHeader() : undefined\n if (auth) {\n headers.set(HEADER_PROXY_AUTHORIZATION, auth)\n }\n const buffer = PayloadSupport.payloadToBuffer(headers, payload)\n if (buffer) {\n addContentLength(this.request.method || 'GET', buffer, headers)\n }\n\n this._handleAuthorization(headers)\n this.sentRequest.headers = headers.toString()\n\n // Update message builder with current host header\n this.messageBuilder.updateHostHeader(this.hostHeader || '')\n\n const message = this.messageBuilder.buildMessage(headers, buffer)\n if (this.auth) {\n // This restores altered by authorization original headers\n // so it can be safe to use when redirecting\n if (this.auth.headers) {\n this.request.headers = this.auth.headers\n delete this.auth.headers\n }\n }\n return message\n }\n\n /**\n * Sends a data to a socket.\n */\n writeMessage(buffer: Buffer): Promise<void> {\n this.logger.debug(`Writing the message to the socket...`)\n let msg = buffer.toString()\n const limit = this.opts.sentMessageLimit\n if (limit && limit > 0 && msg.length >= limit) {\n msg = msg.substring(0, limit)\n msg += ' ...'\n }\n this.sentRequest.httpMessage = msg\n const startTime = Date.now()\n this.stats.startTime = startTime\n this.sentRequest.startTime = startTime\n\n this.stats.messageStart = Date.now()\n return new Promise((resolve) => {\n this.socket?.write(buffer, () => {\n this.logger.debug(`The message has been sent.`)\n this.stats.sentTime = Date.now()\n try {\n this.emit('loadstart')\n } catch {\n //\n }\n resolve()\n })\n })\n }\n\n /**\n * Alters authorization header depending on the `auth` object\n */\n _handleAuthorization(headers: Headers): void {\n const { authorization } = this.opts\n this.authManager.handleRequestAuthorization(headers, authorization, this.uri.host)\n\n // Sync the auth state from AuthManager to parent class for compatibility\n const authState = this.authManager.getAuthState()\n if (authState) {\n this.auth = authState\n }\n }\n\n /**\n * Generate proxy authorization header\n */\n _proxyAuthHeader(): string | undefined {\n return this.authManager.generateProxyAuthHeader()\n }\n\n /**\n * Add event listeners to existing socket.\n */\n _addSocketListeners(socket: net.Socket): net.Socket {\n let received = false\n socket.on('data', (data) => {\n this.logger.debug(`Received server data from the socket...`)\n if (!received) {\n const now = Date.now()\n this.stats.firstReceiveTime = now\n this.emit('firstbyte')\n received = true\n }\n data = Buffer.from(data)\n try {\n // Use the new parser instead of the old parsing methods\n this.parser.processData(data)\n this.logger.debug('Parser state:', this.parser.getState())\n } catch (e) {\n this.logger.error('Error in _addSocketListeners:', e)\n const err = e as Error\n this._errorRequest({\n message: err.message || 'Unknown error occurred',\n })\n return\n }\n })\n socket.once('timeout', () => {\n this.logger.debug(`Socket timeout occurred after ${this.timeout}ms.`)\n this.parser.abort()\n this._errorRequest(HttpEngineErrorFactory.connectionTimeout(this.timeout))\n socket.destroy()\n })\n socket.on('end', () => {\n const endTime = Date.now()\n this.logger.debug(`Server connection ended.`)\n socket.removeAllListeners('timeout')\n socket.removeAllListeners('error')\n socket.removeAllListeners('data')\n this.stats.lastReceivedTime = endTime\n this.sentRequest.endTime = endTime\n // console.log(`Socket ended at ${endTime} in state`, this.parser.getState())\n if (this.parser.getState() !== RequestState.Done) {\n if (!this.currentResponse) {\n const message = `Connection closed without receiving any data.`\n this.logger.error(message)\n const e = HttpEngineErrorFactory.connectionError(message, 100)\n this._errorRequest(e)\n } else {\n this.emit('loadend')\n this._publishResponse()\n }\n }\n })\n socket.once('error', (err) => {\n this.logger.error(`Socket error occurred: ${err.message}`)\n socket.removeAllListeners('timeout')\n this._errorRequest(err)\n })\n return socket\n }\n\n /**\n * Reports response after processing it.\n */\n async _reportResponse(): Promise<void> {\n this._clearSocketEventListeners()\n const { aborted, currentResponse } = this\n if (aborted || !currentResponse) {\n return\n }\n const { status } = currentResponse\n\n const endTime = Date.now()\n this.stats.lastReceivedTime = endTime\n this.sentRequest.endTime = endTime\n\n const result = processResponse({\n status,\n currentResponse,\n currentHeaders: this.currentHeaders,\n followRedirects: this.followRedirects,\n auth: this.auth,\n aborted: this.aborted,\n })\n\n switch (result.action) {\n case 'redirect':\n if (this._reportRedirect(status)) {\n this.closeClient()\n return\n }\n break\n case 'auth':\n if (result.data?.method === 'ntlm') {\n await this.handleNtlmResponse()\n return\n }\n break\n case 'publish':\n this.closeClient()\n this.emit('loadend')\n this._publishResponse()\n break\n case 'abort':\n // Already aborted, do nothing\n break\n }\n }\n\n /**\n * Generate response object and publish it to the listeners.\n */\n async _publishResponse(): Promise<void> {\n if (this.aborted) {\n return\n }\n try {\n const response = await this._createResponse()\n const result = RequestLog.fromRequestResponse(this.sentRequest.toJSON(), response.toJSON())\n if (this.redirects.length) {\n result.redirects = this.redirects\n }\n result.size = new RequestsSize()\n if (this.sentRequest.httpMessage) {\n result.size.request = Buffer.from(this.sentRequest.httpMessage).length\n }\n if (response.payload) {\n if (typeof response.payload === 'string') {\n result.size.response = response.payload.length\n } else {\n result.size.response = response.payload.data.length\n }\n }\n this.finalizeRequest(result)\n } catch (e) {\n const error = e as Error\n this.logger.error('Error in _publishResponse:', error)\n this._errorRequest({\n message: (error && error.message) || 'Unknown error occurred',\n })\n }\n this.abort()\n this._cleanUp()\n }\n\n /**\n * closes the connection, if any\n */\n closeClient(): void {\n if (this.socket && !this.socket.destroyed) {\n this.logger.debug('Closing the socket connection...')\n this.socket.destroy()\n }\n }\n\n /**\n * Handles the response with NTLM authorization\n */\n async handleNtlmResponse(): Promise<void> {\n this.logger.debug('Handling NTLM response...')\n this.logger.debug('Current headers:', this.currentHeaders?.toString())\n this.logger.debug('Auth state:', this.authManager.getAuthState())\n\n const shouldRetry = this.authManager.handleNtlmResponse(this.currentHeaders)\n this.logger.debug('Should retry NTLM:', shouldRetry)\n\n if (shouldRetry) {\n // Update the parent auth state to match AuthManager state\n this.auth = this.authManager.getAuthState()\n this._cleanUpRedirect()\n\n try {\n const message = await this.prepareMessage()\n await this.writeMessage(message)\n // Don't return here - let the socket listeners handle the response\n } catch (error) {\n this.logger.error('Failed to retry NTLM authentication:', error)\n this._errorRequest({\n message: `NTLM retry failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n })\n }\n return\n }\n\n this.logger.debug('NTLM authentication completed')\n // Clear both auth states\n this.authManager.clearAuthState()\n delete this.auth\n this.emit('loadend')\n this._publishResponse()\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DirectConnection.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/connections/DirectConnection.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAM1D;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,EAAE,iBAAiB;IAItC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"DirectConnection.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/connections/DirectConnection.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAM1D;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,EAAE,iBAAiB;IAItC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;IAkBpC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmC3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAyD5B"}
|
|
@@ -23,7 +23,7 @@ export class DirectConnection {
|
|
|
23
23
|
else {
|
|
24
24
|
socket = await this.createTcpConnection(host, port, logger, stats);
|
|
25
25
|
}
|
|
26
|
-
if (timeout && timeout > 0) {
|
|
26
|
+
if (typeof timeout === 'number' && timeout > 0) {
|
|
27
27
|
socket.setTimeout(timeout);
|
|
28
28
|
}
|
|
29
29
|
return socket;
|
|
@@ -39,7 +39,12 @@ export class DirectConnection {
|
|
|
39
39
|
if (isIp) {
|
|
40
40
|
stats.lookupTime = Date.now();
|
|
41
41
|
}
|
|
42
|
-
const
|
|
42
|
+
const { timeout } = this.options;
|
|
43
|
+
const opts = { host, port };
|
|
44
|
+
if (typeof timeout === 'number' && timeout > 0) {
|
|
45
|
+
opts.timeout = timeout;
|
|
46
|
+
}
|
|
47
|
+
const client = net.createConnection(opts, () => {
|
|
43
48
|
stats.connectedTime = Date.now();
|
|
44
49
|
logger.debug('HTTP connection established.');
|
|
45
50
|
resolve(client);
|
|
@@ -51,6 +56,7 @@ export class DirectConnection {
|
|
|
51
56
|
});
|
|
52
57
|
}
|
|
53
58
|
client.once('error', (err) => reject(err));
|
|
59
|
+
client.once('', (err) => reject(err));
|
|
54
60
|
});
|
|
55
61
|
}
|
|
56
62
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DirectConnection.js","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/connections/DirectConnection.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,GAAG,MAAM,KAAK,CAAA;AAGrB,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAIpF;;GAEG;AACH,MAAM,OAAO,gBAAgB;IACnB,OAAO,CAAmB;IAElC,YAAY,OAA0B;QACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAE/F,IAAI,MAAkB,CAAA;QACtB,iEAAiE;QACjE,MAAM,OAAO,GAAG,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAA;QACnF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;QACxG,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;QACpE,CAAC;
|
|
1
|
+
{"version":3,"file":"DirectConnection.js","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/connections/DirectConnection.ts"],"names":[],"mappings":"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","sourcesContent":["import net from 'net'\nimport tls from 'tls'\nimport { ConnectionOptions } from './ConnectionManager.js'\nimport type { HttpCertificate } from '../../../models/ClientCertificate.js'\nimport { addClientCertificate, checkServerIdentity } from '../certificates/index.js'\nimport { type Logger, type ILogObj } from '../../../lib/logging/index.js'\nimport type { RequestStats } from '../CoreEngine.js'\n\n/**\n * Handles direct HTTP and HTTPS connections\n */\nexport class DirectConnection {\n private options: ConnectionOptions\n\n constructor(options: ConnectionOptions) {\n this.options = options\n }\n\n /**\n * Establish a connection to the target host\n */\n async connect(): Promise<net.Socket> {\n const { host, port, timeout, validateCertificates, certificates, logger, stats } = this.options\n\n let socket: net.Socket\n // Check if this is an HTTPS connection based on port or protocol\n const isHttps = port === 443 || port === 8443 || this.options.protocol === 'https:'\n if (isHttps) {\n socket = await this.createTlsConnection(host, port, validateCertificates, certificates, logger, stats)\n } else {\n socket = await this.createTcpConnection(host, port, logger, stats)\n }\n if (typeof timeout === 'number' && timeout > 0) {\n socket.setTimeout(timeout)\n }\n\n return socket\n }\n\n /**\n * Create a TCP connection for HTTP\n */\n private createTcpConnection(\n host: string,\n port: number,\n logger: Logger<ILogObj>,\n stats: RequestStats\n ): Promise<net.Socket> {\n logger.debug(`Opening HTTP connection to ${host} on port ${port}`)\n return new Promise((resolve, reject) => {\n stats.connectionTime = Date.now()\n const isIp = net.isIP(host)\n if (isIp) {\n stats.lookupTime = Date.now()\n }\n const { timeout } = this.options\n const opts: net.NetConnectOpts = { host, port }\n if (typeof timeout === 'number' && timeout > 0) {\n opts.timeout = timeout\n }\n const client = net.createConnection(opts, () => {\n stats.connectedTime = Date.now()\n logger.debug('HTTP connection established.')\n resolve(client)\n })\n\n client.pause()\n if (!isIp) {\n client.once('lookup', () => {\n stats.lookupTime = Date.now()\n })\n }\n client.once('error', (err: Error) => reject(err))\n client.once('', (err: Error) => reject(err))\n })\n }\n\n /**\n * Create a TLS connection for HTTPS\n */\n private createTlsConnection(\n host: string,\n port: number,\n validateCertificates: boolean | undefined,\n certificates: HttpCertificate[] | undefined,\n logger: Logger<ILogObj>,\n stats: RequestStats\n ): Promise<tls.TLSSocket> {\n logger.debug('Opening an SSL connection...')\n const options: tls.ConnectionOptions = {}\n const isIp = net.isIP(host)\n\n if (!isIp) {\n options.servername = host\n }\n\n if (validateCertificates) {\n options.checkServerIdentity = (hostname: string, cert: tls.PeerCertificate) => checkServerIdentity(hostname, cert)\n } else {\n options.rejectUnauthorized = false\n options.checkServerIdentity = (): Error | undefined => {\n return undefined\n }\n }\n\n // Add client certificates if provided\n if (Array.isArray(certificates)) {\n certificates.forEach((cert) => addClientCertificate(cert, options))\n }\n\n return new Promise((resolve, reject) => {\n const time = Date.now()\n stats.connectionTime = time\n if (isIp) {\n stats.lookupTime = time\n }\n\n const client = tls.connect(port, host, options, () => {\n logger.debug('SSL connection established.')\n const connectTime = Date.now()\n stats.connectedTime = connectTime\n stats.secureStartTime = connectTime\n resolve(client)\n })\n\n client.pause()\n client.once('error', (e: Error) => reject(e))\n if (!isIp) {\n client.once('lookup', () => {\n stats.lookupTime = Date.now()\n })\n }\n client.once('secureConnect', () => {\n stats.secureConnectedTime = Date.now()\n })\n })\n }\n}\n"]}
|