@api-client/core 0.18.11 → 0.18.13
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/browser.d.ts +0 -3
- package/build/src/browser.d.ts.map +1 -1
- package/build/src/browser.js +0 -3
- package/build/src/browser.js.map +1 -1
- package/build/src/index.d.ts +2 -5
- package/build/src/index.d.ts.map +1 -1
- package/build/src/index.js +2 -5
- package/build/src/index.js.map +1 -1
- package/build/src/lib/logging/DefaultLogger.d.ts +14 -0
- package/build/src/lib/logging/DefaultLogger.d.ts.map +1 -1
- package/build/src/lib/logging/DefaultLogger.js +27 -0
- package/build/src/lib/logging/DefaultLogger.js.map +1 -1
- package/build/src/lib/logging/index.d.ts +4 -0
- package/build/src/lib/logging/index.d.ts.map +1 -0
- package/build/src/lib/logging/index.js +10 -0
- package/build/src/lib/logging/index.js.map +1 -0
- package/build/src/modeling/DomainModel.d.ts.map +1 -1
- package/build/src/modeling/DomainModel.js +11 -4
- package/build/src/modeling/DomainModel.js.map +1 -1
- package/build/src/models/ClientCertificate.d.ts +1 -1
- package/build/src/models/ClientCertificate.js.map +1 -1
- package/build/src/models/RequestConfig.d.ts +1 -1
- package/build/src/models/RequestConfig.js.map +1 -1
- package/build/src/models/SerializableError.d.ts +1 -1
- package/build/src/models/SerializableError.d.ts.map +1 -1
- package/build/src/models/SerializableError.js.map +1 -1
- package/build/src/proxy/RequestProxy.d.ts.map +1 -1
- package/build/src/proxy/RequestProxy.js +2 -2
- package/build/src/proxy/RequestProxy.js.map +1 -1
- package/build/src/runtime/http-engine/CoreEngine.d.ts +218 -139
- package/build/src/runtime/http-engine/CoreEngine.d.ts.map +1 -1
- package/build/src/runtime/http-engine/CoreEngine.js +716 -870
- package/build/src/runtime/http-engine/CoreEngine.js.map +1 -1
- package/build/src/runtime/http-engine/PayloadSupport.d.ts.map +1 -1
- package/build/src/runtime/http-engine/PayloadSupport.js +2 -1
- package/build/src/runtime/http-engine/PayloadSupport.js.map +1 -1
- package/build/src/runtime/http-engine/auth/AuthManager.d.ts +73 -0
- package/build/src/runtime/http-engine/auth/AuthManager.d.ts.map +1 -0
- package/build/src/runtime/http-engine/auth/AuthManager.js +186 -0
- package/build/src/runtime/http-engine/auth/AuthManager.js.map +1 -0
- package/build/src/runtime/http-engine/auth/index.d.ts +2 -0
- package/build/src/runtime/http-engine/auth/index.d.ts.map +1 -0
- package/build/src/runtime/http-engine/auth/index.js +2 -0
- package/build/src/runtime/http-engine/auth/index.js.map +1 -0
- package/build/src/runtime/http-engine/certificates/CertificateManager.d.ts +11 -0
- package/build/src/runtime/http-engine/certificates/CertificateManager.d.ts.map +1 -0
- package/build/src/runtime/http-engine/certificates/CertificateManager.js +76 -0
- package/build/src/runtime/http-engine/certificates/CertificateManager.js.map +1 -0
- package/build/src/runtime/http-engine/certificates/index.d.ts +2 -0
- package/build/src/runtime/http-engine/certificates/index.d.ts.map +1 -0
- package/build/src/runtime/http-engine/certificates/index.js +2 -0
- package/build/src/runtime/http-engine/certificates/index.js.map +1 -0
- package/build/src/runtime/http-engine/compression/CompressionManager.d.ts +25 -0
- package/build/src/runtime/http-engine/compression/CompressionManager.d.ts.map +1 -0
- package/build/src/runtime/http-engine/compression/CompressionManager.js +89 -0
- package/build/src/runtime/http-engine/compression/CompressionManager.js.map +1 -0
- package/build/src/runtime/http-engine/compression/index.d.ts +2 -0
- package/build/src/runtime/http-engine/compression/index.d.ts.map +1 -0
- package/build/src/runtime/http-engine/compression/index.js +2 -0
- package/build/src/runtime/http-engine/compression/index.js.map +1 -0
- package/build/src/runtime/http-engine/connections/ConnectionManager.d.ts +57 -0
- package/build/src/runtime/http-engine/connections/ConnectionManager.d.ts.map +1 -0
- package/build/src/runtime/http-engine/connections/ConnectionManager.js +78 -0
- package/build/src/runtime/http-engine/connections/ConnectionManager.js.map +1 -0
- package/build/src/runtime/http-engine/connections/DigestAuthHandler.d.ts +70 -0
- package/build/src/runtime/http-engine/connections/DigestAuthHandler.d.ts.map +1 -0
- package/build/src/runtime/http-engine/connections/DigestAuthHandler.js +184 -0
- package/build/src/runtime/http-engine/connections/DigestAuthHandler.js.map +1 -0
- package/build/src/runtime/http-engine/connections/DirectConnection.d.ts +22 -0
- package/build/src/runtime/http-engine/connections/DirectConnection.d.ts.map +1 -0
- package/build/src/runtime/http-engine/connections/DirectConnection.js +105 -0
- package/build/src/runtime/http-engine/connections/DirectConnection.js.map +1 -0
- package/build/src/runtime/http-engine/connections/ProxyAuthHandler.d.ts +60 -0
- package/build/src/runtime/http-engine/connections/ProxyAuthHandler.d.ts.map +1 -0
- package/build/src/runtime/http-engine/connections/ProxyAuthHandler.js +138 -0
- package/build/src/runtime/http-engine/connections/ProxyAuthHandler.js.map +1 -0
- package/build/src/runtime/http-engine/connections/ProxyConnection.d.ts +14 -0
- package/build/src/runtime/http-engine/connections/ProxyConnection.d.ts.map +1 -0
- package/build/src/runtime/http-engine/connections/ProxyConnection.js +47 -0
- package/build/src/runtime/http-engine/connections/ProxyConnection.js.map +1 -0
- package/build/src/runtime/http-engine/connections/TunnelConnection.d.ts +13 -0
- package/build/src/runtime/http-engine/connections/TunnelConnection.d.ts.map +1 -0
- package/build/src/runtime/http-engine/connections/TunnelConnection.js +175 -0
- package/build/src/runtime/http-engine/connections/TunnelConnection.js.map +1 -0
- package/build/src/runtime/http-engine/connections/index.d.ts +7 -0
- package/build/src/runtime/http-engine/connections/index.d.ts.map +1 -0
- package/build/src/runtime/http-engine/connections/index.js +7 -0
- package/build/src/runtime/http-engine/connections/index.js.map +1 -0
- package/build/src/runtime/http-engine/constants.d.ts +69 -0
- package/build/src/runtime/http-engine/constants.d.ts.map +1 -0
- package/build/src/runtime/http-engine/constants.js +90 -0
- package/build/src/runtime/http-engine/constants.js.map +1 -0
- package/build/src/runtime/http-engine/cookies/CookieProcessor.d.ts +5 -0
- package/build/src/runtime/http-engine/cookies/CookieProcessor.d.ts.map +1 -0
- package/build/src/runtime/http-engine/cookies/CookieProcessor.js +20 -0
- package/build/src/runtime/http-engine/cookies/CookieProcessor.js.map +1 -0
- package/build/src/runtime/http-engine/cookies/index.d.ts +2 -0
- package/build/src/runtime/http-engine/cookies/index.d.ts.map +1 -0
- package/build/src/runtime/http-engine/cookies/index.js +2 -0
- package/build/src/runtime/http-engine/cookies/index.js.map +1 -0
- package/build/src/runtime/http-engine/errors/HttpEngineErrors.d.ts +156 -0
- package/build/src/runtime/http-engine/errors/HttpEngineErrors.d.ts.map +1 -0
- package/build/src/runtime/http-engine/errors/HttpEngineErrors.js +227 -0
- package/build/src/runtime/http-engine/errors/HttpEngineErrors.js.map +1 -0
- package/build/src/runtime/http-engine/errors/index.d.ts +2 -0
- package/build/src/runtime/http-engine/errors/index.d.ts.map +1 -0
- package/build/src/runtime/http-engine/errors/index.js +2 -0
- package/build/src/runtime/http-engine/errors/index.js.map +1 -0
- package/build/src/runtime/http-engine/message/MessageBuilder.d.ts +66 -0
- package/build/src/runtime/http-engine/message/MessageBuilder.d.ts.map +1 -0
- package/build/src/runtime/http-engine/message/MessageBuilder.js +161 -0
- package/build/src/runtime/http-engine/message/MessageBuilder.js.map +1 -0
- package/build/src/runtime/http-engine/message/MessageProcessor.d.ts +27 -0
- package/build/src/runtime/http-engine/message/MessageProcessor.d.ts.map +1 -0
- package/build/src/runtime/http-engine/message/MessageProcessor.js +51 -0
- package/build/src/runtime/http-engine/message/MessageProcessor.js.map +1 -0
- package/build/src/runtime/http-engine/message/index.d.ts +3 -0
- package/build/src/runtime/http-engine/message/index.d.ts.map +1 -0
- package/build/src/runtime/http-engine/message/index.js +3 -0
- package/build/src/runtime/http-engine/message/index.js.map +1 -0
- package/build/src/runtime/http-engine/ntlm/NtlmAuth.d.ts +2 -8
- package/build/src/runtime/http-engine/ntlm/NtlmAuth.d.ts.map +1 -1
- package/build/src/runtime/http-engine/ntlm/NtlmAuth.js +11 -5
- package/build/src/runtime/http-engine/ntlm/NtlmAuth.js.map +1 -1
- package/build/src/runtime/http-engine/ntlm/NtlmMessage.js +6 -6
- package/build/src/runtime/http-engine/ntlm/NtlmMessage.js.map +1 -1
- package/build/src/runtime/http-engine/parsers/BodyParser.d.ts +39 -0
- package/build/src/runtime/http-engine/parsers/BodyParser.d.ts.map +1 -0
- package/build/src/runtime/http-engine/parsers/BodyParser.js +145 -0
- package/build/src/runtime/http-engine/parsers/BodyParser.js.map +1 -0
- package/build/src/runtime/http-engine/parsers/HeadersParser.d.ts +29 -0
- package/build/src/runtime/http-engine/parsers/HeadersParser.d.ts.map +1 -0
- package/build/src/runtime/http-engine/parsers/HeadersParser.js +88 -0
- package/build/src/runtime/http-engine/parsers/HeadersParser.js.map +1 -0
- package/build/src/runtime/http-engine/parsers/HttpResponseParser.d.ts +91 -0
- package/build/src/runtime/http-engine/parsers/HttpResponseParser.d.ts.map +1 -0
- package/build/src/runtime/http-engine/parsers/HttpResponseParser.js +236 -0
- package/build/src/runtime/http-engine/parsers/HttpResponseParser.js.map +1 -0
- package/build/src/runtime/http-engine/parsers/StatusParser.d.ts +20 -0
- package/build/src/runtime/http-engine/parsers/StatusParser.d.ts.map +1 -0
- package/build/src/runtime/http-engine/parsers/StatusParser.js +51 -0
- package/build/src/runtime/http-engine/parsers/StatusParser.js.map +1 -0
- package/build/src/runtime/http-engine/parsers/index.d.ts +5 -0
- package/build/src/runtime/http-engine/parsers/index.d.ts.map +1 -0
- package/build/src/runtime/http-engine/parsers/index.js +5 -0
- package/build/src/runtime/http-engine/parsers/index.js.map +1 -0
- package/build/src/runtime/http-engine/response/ResponseProcessor.d.ts +22 -0
- package/build/src/runtime/http-engine/response/ResponseProcessor.d.ts.map +1 -0
- package/build/src/runtime/http-engine/response/ResponseProcessor.js +25 -0
- package/build/src/runtime/http-engine/response/ResponseProcessor.js.map +1 -0
- package/build/src/runtime/http-engine/response/index.d.ts +2 -0
- package/build/src/runtime/http-engine/response/index.d.ts.map +1 -0
- package/build/src/runtime/http-engine/response/index.js +2 -0
- package/build/src/runtime/http-engine/response/index.js.map +1 -0
- package/build/src/runtime/http-engine/statistics/StatisticsProcessor.d.ts +7 -0
- package/build/src/runtime/http-engine/statistics/StatisticsProcessor.d.ts.map +1 -0
- package/build/src/runtime/http-engine/statistics/StatisticsProcessor.js +40 -0
- package/build/src/runtime/http-engine/statistics/StatisticsProcessor.js.map +1 -0
- package/build/src/runtime/http-engine/statistics/index.d.ts +2 -0
- package/build/src/runtime/http-engine/statistics/index.d.ts.map +1 -0
- package/build/src/runtime/http-engine/statistics/index.js +2 -0
- package/build/src/runtime/http-engine/statistics/index.js.map +1 -0
- package/build/src/runtime/http-engine/url/UrlProcessor.d.ts +24 -0
- package/build/src/runtime/http-engine/url/UrlProcessor.d.ts.map +1 -0
- package/build/src/runtime/http-engine/url/UrlProcessor.js +50 -0
- package/build/src/runtime/http-engine/url/UrlProcessor.js.map +1 -0
- package/build/src/runtime/http-engine/url/index.d.ts +2 -0
- package/build/src/runtime/http-engine/url/index.d.ts.map +1 -0
- package/build/src/runtime/http-engine/url/index.js +2 -0
- package/build/src/runtime/http-engine/url/index.js.map +1 -0
- package/build/src/runtime/http-runner/HttpRequestRunner.d.ts +3 -3
- package/build/src/runtime/http-runner/HttpRequestRunner.d.ts.map +1 -1
- package/build/src/runtime/http-runner/HttpRequestRunner.js.map +1 -1
- package/build/src/runtime/node/InteropInterfaces.d.ts +3 -3
- package/build/src/runtime/node/InteropInterfaces.d.ts.map +1 -1
- package/build/src/runtime/node/InteropInterfaces.js.map +1 -1
- package/build/src/runtime/node/ProjectRequestRunner.d.ts +2 -2
- package/build/src/runtime/node/ProjectRequestRunner.d.ts.map +1 -1
- package/build/src/runtime/node/ProjectRequestRunner.js.map +1 -1
- package/build/src/runtime/node/ProjectRunner.d.ts.map +1 -1
- package/build/src/runtime/node/ProjectRunner.js +2 -2
- package/build/src/runtime/node/ProjectRunner.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/data/models/example-generator-api.json +24 -24
- package/package.json +2 -2
- package/src/lib/logging/DefaultLogger.ts +32 -0
- package/src/modeling/DomainModel.ts +11 -4
- package/src/models/ClientCertificate.ts +1 -1
- package/src/models/RequestConfig.ts +1 -1
- package/src/models/SerializableError.ts +1 -1
- package/src/proxy/RequestProxy.ts +2 -2
- package/src/runtime/http-engine/CoreEngine.ts +858 -893
- package/src/runtime/http-engine/PayloadSupport.ts +2 -1
- package/src/runtime/http-engine/auth/AuthManager.ts +242 -0
- package/src/runtime/http-engine/certificates/CertificateManager.ts +74 -0
- package/src/runtime/http-engine/compression/CompressionManager.ts +99 -0
- package/src/runtime/http-engine/connections/ConnectionManager.ts +123 -0
- package/src/runtime/http-engine/connections/DigestAuthHandler.ts +238 -0
- package/src/runtime/http-engine/connections/DirectConnection.ts +134 -0
- package/src/runtime/http-engine/connections/ProxyAuthHandler.ts +179 -0
- package/src/runtime/http-engine/connections/ProxyConnection.ts +55 -0
- package/src/runtime/http-engine/connections/TunnelConnection.ts +192 -0
- package/src/runtime/http-engine/constants.ts +103 -0
- package/src/runtime/http-engine/cookies/CookieProcessor.ts +25 -0
- package/src/runtime/http-engine/errors/HttpEngineErrors.ts +319 -0
- package/src/runtime/http-engine/message/MessageBuilder.ts +201 -0
- package/src/runtime/http-engine/message/MessageProcessor.ts +73 -0
- package/src/runtime/http-engine/ntlm/NtlmAuth.ts +16 -13
- package/src/runtime/http-engine/ntlm/NtlmMessage.ts +6 -6
- package/src/runtime/http-engine/parsers/BodyParser.ts +171 -0
- package/src/runtime/http-engine/parsers/HeadersParser.ts +103 -0
- package/src/runtime/http-engine/parsers/HttpResponseParser.ts +280 -0
- package/src/runtime/http-engine/parsers/StatusParser.ts +69 -0
- package/src/runtime/http-engine/response/ResponseProcessor.ts +46 -0
- package/src/runtime/http-engine/statistics/StatisticsProcessor.ts +52 -0
- package/src/runtime/http-engine/url/UrlProcessor.ts +55 -0
- package/src/runtime/http-runner/HttpRequestRunner.ts +3 -3
- package/src/runtime/node/InteropInterfaces.ts +3 -3
- package/src/runtime/node/ProjectRequestRunner.ts +2 -2
- package/src/runtime/node/ProjectRunner.ts +2 -2
- package/tests/servers/ProxyServer.ts +32 -19
- package/tests/servers/express-routes/ApiEndpoint.ts +24 -0
- package/tests/servers/express-routes/BasicAuthRoute.ts +36 -0
- package/tests/servers/express-routes/BearerAuthRoute.ts +35 -0
- package/tests/servers/express-routes/NTLMRoute.ts +2 -3
- package/tests/servers/express-routes/PostApi.ts +15 -2
- package/tests/servers/express-routes/RedirectsApi.ts +12 -1
- package/tests/servers/express-routes/ResponsesApi.ts +1 -1
- package/tests/servers/express-routes/StreamApi.ts +19 -0
- package/tests/servers/oauth2mock/ServerMock.js +1 -1
- package/tests/unit/modeling/domain_model_entities.spec.ts +306 -1
- package/tests/unit/runtime/http-engine/HttpResponseParser.spec.ts +337 -0
- package/tests/unit/runtime/http-engine/abort.spec.ts +4 -5
- package/tests/unit/runtime/http-engine/auth.spec.ts +7 -58
- package/tests/unit/runtime/http-engine/certificates/CertificateManager.spec.ts +482 -0
- package/tests/unit/runtime/http-engine/certificates.spec.ts +2 -2
- package/tests/unit/runtime/http-engine/compression/CompressionManager.spec.ts +498 -0
- package/tests/unit/runtime/http-engine/compression.spec.ts +3 -72
- package/tests/unit/runtime/http-engine/connections/ConnectionManager.spec.ts +379 -0
- package/tests/unit/runtime/http-engine/connections/DigestAuthHandler.spec.ts +164 -0
- package/tests/unit/runtime/http-engine/core_engine.spec.ts +561 -0
- package/tests/unit/runtime/http-engine/engine_statuses.spec.ts +2 -2
- package/tests/unit/runtime/http-engine/events.spec.ts +2 -2
- package/tests/unit/runtime/http-engine/headers.spec.ts +2 -88
- package/tests/unit/runtime/http-engine/hosts.spec.ts +2 -2
- package/tests/unit/runtime/http-engine/http-get.spec.ts +2 -2
- package/tests/unit/runtime/http-engine/http-post.spec.ts +2 -2
- package/tests/unit/runtime/http-engine/logger.spec.ts +0 -8
- package/tests/unit/runtime/http-engine/message.spec.ts +2 -194
- package/tests/unit/runtime/http-engine/params.spec.ts +4 -4
- package/tests/unit/runtime/http-engine/proxy.spec.ts +15 -14
- package/tests/unit/runtime/http-engine/redirects.spec.ts +2 -2
- package/tests/unit/runtime/http-engine/responses.spec.ts +170 -277
- package/tests/unit/runtime/http-engine/timeout.spec.ts +3 -3
- package/tests/unit/runtime/http-engine/timings.spec.ts +2 -2
- package/tests/unit/runtime/proxy/HttpProjectProxy.spec.ts +25 -28
- package/tests/unit/runtime/runners/project_runner.spec.ts +2 -2
- package/tests/unit/runtime/runners/request_runner.spec.ts +2 -2
- package/build/src/runtime/http-engine/HttpEngine.d.ts +0 -311
- package/build/src/runtime/http-engine/HttpEngine.d.ts.map +0 -1
- package/build/src/runtime/http-engine/HttpEngine.js +0 -802
- package/build/src/runtime/http-engine/HttpEngine.js.map +0 -1
- package/src/runtime/http-engine/HttpEngine.ts +0 -952
- package/tests/unit/runtime/http-engine/connecting.spec.ts +0 -140
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageBuilder.js","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/message/MessageBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Headers } from '../../../lib/headers/Headers.js'\nimport { IHttpRequest } from '../../../models/HttpRequest.js'\nimport * as PayloadSupport from '../PayloadSupport.js'\nimport { HTTP_VERSION, CRLF_BUFFER } from '../constants.js'\nimport { type Logger, type ILogObj } from '../../../lib/logging/index.js'\n\nexport interface MessageBuilderOptions {\n logger: Logger<ILogObj>\n request: IHttpRequest\n hasProxy: boolean\n isProxyTunnel: boolean\n hostHeader?: string\n}\n\nexport interface MessageBuilderContext {\n headers: Headers\n buffer?: Buffer\n statusLine: string\n hostHeader?: string\n}\n\n/**\n * Builds HTTP messages for requests\n */\nexport class MessageBuilder {\n private logger: Logger<ILogObj>\n private request: IHttpRequest\n private hasProxy: boolean\n private isProxyTunnel: boolean\n private hostHeader?: string\n private hostTestReg = /^\\s*host\\s*:/im\n\n constructor(options: MessageBuilderOptions) {\n this.logger = options.logger\n this.request = options.request\n this.hasProxy = options.hasProxy\n this.isProxyTunnel = options.isProxyTunnel\n this.hostHeader = options.hostHeader\n }\n\n /**\n * Builds a complete HTTP message\n */\n buildMessage(headers: Headers, buffer?: Buffer): Buffer {\n this.logger.debug('Preparing HTTP message...')\n\n const context = this.createMessageContext(headers, buffer)\n const messageBuffer = this.assembleMessage(context)\n\n this.logger.debug('The message is ready.')\n return messageBuffer\n }\n\n /**\n * Creates the message context with all components\n */\n private createMessageContext(headers: Headers, buffer?: Buffer): MessageBuilderContext {\n const statusLine = this.createStatusLine()\n this.logger.debug(`Created message status: ${statusLine}`)\n\n const hostHeader = this.getHostHeader()\n if (hostHeader) {\n this.logger.debug(`Adding the \"host\" header: ${hostHeader}`)\n }\n\n return {\n headers,\n buffer,\n statusLine,\n hostHeader,\n }\n }\n\n /**\n * Assembles the complete HTTP message from components\n */\n private assembleMessage(context: MessageBuilderContext): Buffer {\n const { headers, buffer, statusLine, hostHeader } = context\n\n // Build the header lines\n const headerLines = [statusLine]\n\n if (hostHeader) {\n headerLines.push(`Host: ${hostHeader}`)\n }\n\n // Add custom headers\n const customHeaders = headers.toString()\n if (customHeaders) {\n this.logger.debug('Adding headers to the request...')\n this.logger.silly('Headers:', [...headers.keys()])\n headerLines.push(PayloadSupport.normalizeString(customHeaders))\n }\n\n // Join all header lines\n const headerString = headerLines.join('\\r\\n')\n\n // Create buffers\n const startBuffer = Buffer.from(headerString, 'utf8')\n const endBuffer = CRLF_BUFFER\n\n // Calculate total size\n let totalSize = startBuffer.length + endBuffer.length\n if (buffer) {\n totalSize += buffer.length\n }\n\n // Assemble the final message\n if (buffer) {\n return Buffer.concat([startBuffer, endBuffer, buffer], totalSize)\n } else {\n return Buffer.concat([startBuffer, endBuffer], totalSize)\n }\n }\n\n /**\n * Creates the HTTP status line\n */\n private createStatusLine(): string {\n const { request, hasProxy, isProxyTunnel } = this\n const parts = [request.method]\n\n if (hasProxy && !isProxyTunnel) {\n // For proxy requests, use the full URL\n parts.push(request.url)\n } else {\n // For direct requests, use the path\n const uri = new URL(request.url)\n let path = uri.pathname\n if (uri.search) {\n path += uri.search\n }\n parts.push(path)\n }\n\n parts.push(HTTP_VERSION)\n return parts.join(' ')\n }\n\n /**\n * Determines if a host header is required and returns it\n */\n private getHostHeader(): string | undefined {\n if (!this.hostRequired()) {\n return undefined\n }\n return this.hostHeader\n }\n\n /**\n * Tests if current connection is required to add `host` header.\n * It returns `false` only if `host` header has been already provided.\n */\n private hostRequired(): boolean {\n const headers = this.request.headers\n if (typeof headers !== 'string') {\n return true\n }\n return !this.hostTestReg.test(headers)\n }\n\n /**\n * Updates the host header for the message builder\n */\n updateHostHeader(hostHeader: string): void {\n this.hostHeader = hostHeader\n }\n\n /**\n * Creates a status line for a specific request\n */\n createStatusLineForRequest(request: IHttpRequest, hasProxy: boolean, isProxyTunnel: boolean): string {\n const parts = [request.method]\n\n if (hasProxy && !isProxyTunnel) {\n parts.push(request.url)\n } else {\n const uri = new URL(request.url)\n let path = uri.pathname\n if (uri.search) {\n path += uri.search\n }\n parts.push(path)\n }\n\n parts.push(HTTP_VERSION)\n return parts.join(' ')\n }\n\n /**\n * Validates if a request needs a host header\n */\n static hostRequiredForRequest(request: IHttpRequest): boolean {\n const hostTestReg = /^\\s*host\\s*:/im\n const headers = request.headers\n if (typeof headers !== 'string') {\n return true\n }\n return !hostTestReg.test(headers)\n }\n}\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Headers } from '../../../lib/headers/Headers.js';
|
|
2
|
+
import { HttpRequest } from '../../../models/HttpRequest.js';
|
|
3
|
+
import { IRequestAuthorization } from '../../../models/RequestAuthorization.js';
|
|
4
|
+
export interface MessagePreparationContext {
|
|
5
|
+
request: HttpRequest;
|
|
6
|
+
hasProxy: boolean;
|
|
7
|
+
isProxyTunnel: boolean;
|
|
8
|
+
hostHeader?: string;
|
|
9
|
+
defaultHeaders?: boolean;
|
|
10
|
+
defaultUserAgent?: string;
|
|
11
|
+
defaultAccept?: string;
|
|
12
|
+
proxyUsername?: string;
|
|
13
|
+
proxyPassword?: string;
|
|
14
|
+
proxyAuthorization?: string;
|
|
15
|
+
authorization?: IRequestAuthorization[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Prepares headers list to be sent to the remote machine.
|
|
19
|
+
* If `defaultHeaders` option is set then it adds `user-agent` and `accept`
|
|
20
|
+
* headers.
|
|
21
|
+
*/
|
|
22
|
+
export declare function prepareHeaders(headers: Headers, context: MessagePreparationContext, withPayload?: boolean): void;
|
|
23
|
+
/**
|
|
24
|
+
* Generate proxy authorization header
|
|
25
|
+
*/
|
|
26
|
+
export declare function generateProxyAuthHeader(context: MessagePreparationContext): string | undefined;
|
|
27
|
+
//# sourceMappingURL=MessageProcessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageProcessor.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/message/MessageProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAA;AAE/E,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,WAAW,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB,aAAa,EAAE,OAAO,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,aAAa,CAAC,EAAE,qBAAqB,EAAE,CAAA;CACxC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,WAAW,UAAQ,GAAG,IAAI,CA2B9G;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,yBAAyB,GAAG,MAAM,GAAG,SAAS,CAiB9F"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prepares headers list to be sent to the remote machine.
|
|
3
|
+
* If `defaultHeaders` option is set then it adds `user-agent` and `accept`
|
|
4
|
+
* headers.
|
|
5
|
+
*/
|
|
6
|
+
export function prepareHeaders(headers, context, withPayload = false) {
|
|
7
|
+
const { defaultHeaders, defaultUserAgent, defaultAccept, request } = context;
|
|
8
|
+
if (defaultHeaders) {
|
|
9
|
+
if (!headers.has('user-agent')) {
|
|
10
|
+
if (defaultUserAgent) {
|
|
11
|
+
headers.set('user-agent', defaultUserAgent);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
headers.set('user-agent', 'api client');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
if (!headers.has('accept')) {
|
|
18
|
+
if (defaultAccept) {
|
|
19
|
+
headers.set('accept', defaultAccept);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
headers.set('accept', '*/*');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (withPayload) {
|
|
27
|
+
if (!headers.has('content-type') && request.payloadOptions) {
|
|
28
|
+
if (request.payloadOptions.mime) {
|
|
29
|
+
headers.set('content-type', request.payloadOptions.mime);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Generate proxy authorization header
|
|
36
|
+
*/
|
|
37
|
+
export function generateProxyAuthHeader(context) {
|
|
38
|
+
const { hasProxy, isProxyTunnel, proxyUsername, proxyPassword, proxyAuthorization } = context;
|
|
39
|
+
if (!hasProxy || isProxyTunnel) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
if (proxyAuthorization) {
|
|
43
|
+
return proxyAuthorization;
|
|
44
|
+
}
|
|
45
|
+
if (proxyUsername && proxyPassword) {
|
|
46
|
+
const auth = `${proxyUsername}:${proxyPassword}`;
|
|
47
|
+
return `Basic ${Buffer.from(auth).toString('base64')}`;
|
|
48
|
+
}
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=MessageProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageProcessor.js","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/message/MessageProcessor.ts"],"names":[],"mappings":"AAkBA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB,EAAE,OAAkC,EAAE,WAAW,GAAG,KAAK;IACtG,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IAE5E,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/B,IAAI,gBAAgB,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAA;YAC7C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;YACzC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,IAAI,aAAa,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;YACtC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3D,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAkC;IACxE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAA;IAE7F,IAAI,CAAC,QAAQ,IAAI,aAAa,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO,kBAAkB,CAAA;IAC3B,CAAC;IAED,IAAI,aAAa,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,GAAG,aAAa,IAAI,aAAa,EAAE,CAAA;QAChD,OAAO,SAAS,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAA;IACxD,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC","sourcesContent":["import { Headers } from '../../../lib/headers/Headers.js'\nimport { HttpRequest } from '../../../models/HttpRequest.js'\nimport { IRequestAuthorization } from '../../../models/RequestAuthorization.js'\n\nexport interface MessagePreparationContext {\n request: HttpRequest\n hasProxy: boolean\n isProxyTunnel: boolean\n hostHeader?: string\n defaultHeaders?: boolean\n defaultUserAgent?: string\n defaultAccept?: string\n proxyUsername?: string\n proxyPassword?: string\n proxyAuthorization?: string\n authorization?: IRequestAuthorization[]\n}\n\n/**\n * Prepares headers list to be sent to the remote machine.\n * If `defaultHeaders` option is set then it adds `user-agent` and `accept`\n * headers.\n */\nexport function prepareHeaders(headers: Headers, context: MessagePreparationContext, withPayload = false): void {\n const { defaultHeaders, defaultUserAgent, defaultAccept, request } = context\n\n if (defaultHeaders) {\n if (!headers.has('user-agent')) {\n if (defaultUserAgent) {\n headers.set('user-agent', defaultUserAgent)\n } else {\n headers.set('user-agent', 'api client')\n }\n }\n if (!headers.has('accept')) {\n if (defaultAccept) {\n headers.set('accept', defaultAccept)\n } else {\n headers.set('accept', '*/*')\n }\n }\n }\n\n if (withPayload) {\n if (!headers.has('content-type') && request.payloadOptions) {\n if (request.payloadOptions.mime) {\n headers.set('content-type', request.payloadOptions.mime)\n }\n }\n }\n}\n\n/**\n * Generate proxy authorization header\n */\nexport function generateProxyAuthHeader(context: MessagePreparationContext): string | undefined {\n const { hasProxy, isProxyTunnel, proxyUsername, proxyPassword, proxyAuthorization } = context\n\n if (!hasProxy || isProxyTunnel) {\n return undefined\n }\n\n if (proxyAuthorization) {\n return proxyAuthorization\n }\n\n if (proxyUsername && proxyPassword) {\n const auth = `${proxyUsername}:${proxyPassword}`\n return `Basic ${Buffer.from(auth).toString('base64')}`\n }\n\n return undefined\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/message/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC5G,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,KAAK,yBAAyB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/message/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA0D,MAAM,qBAAqB,CAAA;AAC5G,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAkC,MAAM,uBAAuB,CAAA","sourcesContent":["export { MessageBuilder, type MessageBuilderOptions, type MessageBuilderContext } from './MessageBuilder.js'\nexport { prepareHeaders, generateProxyAuthHeader, type MessagePreparationContext } from './MessageProcessor.js'\n"]}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { NtlmMessage } from './NtlmMessage.js';
|
|
2
|
-
|
|
3
|
-
domain?: string;
|
|
4
|
-
username: string;
|
|
5
|
-
password: string;
|
|
6
|
-
url: string;
|
|
7
|
-
}
|
|
2
|
+
import type { INtlmAuthorization } from '../../../models/Authorization.js';
|
|
8
3
|
/**
|
|
9
4
|
* A base class for auth methods used in the library.
|
|
10
5
|
* On the base of https://github.com/erlandranvinge/ntlm.js/blob/master/ntlm.js
|
|
@@ -13,10 +8,9 @@ export declare class NtlmAuth {
|
|
|
13
8
|
domain: string;
|
|
14
9
|
uid: string;
|
|
15
10
|
passwd: string;
|
|
16
|
-
url: string;
|
|
17
11
|
lmHashedPassword?: string;
|
|
18
12
|
ntHashedPassword?: string;
|
|
19
|
-
constructor(opts:
|
|
13
|
+
constructor(opts: INtlmAuthorization);
|
|
20
14
|
createMessage1(hostname: string): NtlmMessage;
|
|
21
15
|
getChallenge(data: string): string;
|
|
22
16
|
createMessage3(challenge: string, hostname: string): NtlmMessage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NtlmAuth.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/ntlm/NtlmAuth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"NtlmAuth.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/ntlm/NtlmAuth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAE1E;;;GAGG;AACH,qBAAa,QAAQ;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;gBAEb,IAAI,EAAE,kBAAkB;IAQpC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;IAoB7C,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAuBlC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW;IAmDhE,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAmC9B,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAWhD,cAAc,IAAI,IAAI;CAsBvB"}
|
|
@@ -9,14 +9,12 @@ export class NtlmAuth {
|
|
|
9
9
|
domain;
|
|
10
10
|
uid;
|
|
11
11
|
passwd;
|
|
12
|
-
url;
|
|
13
12
|
lmHashedPassword;
|
|
14
13
|
ntHashedPassword;
|
|
15
14
|
constructor(opts) {
|
|
16
15
|
this.domain = opts.domain || '';
|
|
17
|
-
this.uid = opts.username;
|
|
18
|
-
this.passwd = opts.password;
|
|
19
|
-
this.url = opts.url;
|
|
16
|
+
this.uid = opts.username || '';
|
|
17
|
+
this.passwd = opts.password || '';
|
|
20
18
|
this.setCredentials();
|
|
21
19
|
}
|
|
22
20
|
createMessage1(hostname) {
|
|
@@ -39,7 +37,15 @@ export class NtlmAuth {
|
|
|
39
37
|
return msg1;
|
|
40
38
|
}
|
|
41
39
|
getChallenge(data) {
|
|
42
|
-
|
|
40
|
+
if (!data || typeof data !== 'string') {
|
|
41
|
+
throw new Error('Invalid NTLM challenge data: data is required and must be a string.');
|
|
42
|
+
}
|
|
43
|
+
// Remove "NTLM " prefix if present (for robustness)
|
|
44
|
+
const cleanData = data.replace(/^NTLM\s+/i, '');
|
|
45
|
+
if (!cleanData) {
|
|
46
|
+
throw new Error('Invalid NTLM challenge data: empty or invalid format.');
|
|
47
|
+
}
|
|
48
|
+
const msg2 = new NtlmMessage(cleanData);
|
|
43
49
|
if (msg2.getString(0, 8) !== 'NTLMSSP\0') {
|
|
44
50
|
throw new Error('Invalid NTLM response header.');
|
|
45
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NtlmAuth.js","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/ntlm/NtlmAuth.ts"],"names":[],"mappings":"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","sourcesContent":["import { Des } from './Des.js'\nimport { MD4 } from './MD4.js'\nimport { NtlmMessage } from './NtlmMessage.js'\n\nexport interface INtlmAuthConfig {\n domain?: string\n username: string\n password: string\n url: string\n}\n\n/**\n * A base class for auth methods used in the library.\n * On the base of https://github.com/erlandranvinge/ntlm.js/blob/master/ntlm.js\n */\nexport class NtlmAuth {\n domain: string\n uid: string\n passwd: string\n url: string\n lmHashedPassword?: string\n ntHashedPassword?: string\n\n constructor(opts: INtlmAuthConfig) {\n this.domain = opts.domain || ''\n this.uid = opts.username\n this.passwd = opts.password\n this.url = opts.url\n\n this.setCredentials()\n }\n\n createMessage1(hostname: string): NtlmMessage {\n const msg1 = new NtlmMessage()\n msg1.addString('NTLMSSP\\0')\n msg1.addByte(1)\n msg1.addString('\\0\\0\\0')\n msg1.addShort(0xb203)\n msg1.addString('\\0\\0')\n msg1.addShort(this.domain.length)\n msg1.addShort(this.domain.length)\n msg1.addShort(32 + hostname.length)\n msg1.addString('\\0\\0')\n msg1.addShort(hostname.length)\n msg1.addShort(hostname.length)\n msg1.addShort(32)\n msg1.addString('\\0\\0')\n msg1.addString(hostname.toUpperCase())\n msg1.addString(this.domain.toUpperCase())\n return msg1\n }\n\n getChallenge(data: string): string {\n const msg2 = new NtlmMessage(data)\n if (msg2.getString(0, 8) !== 'NTLMSSP\\0') {\n throw new Error('Invalid NTLM response header.')\n }\n if (msg2.getByte(8) !== 2) {\n throw new Error('Invalid NTLM response type.')\n }\n const challenge = msg2.getString(24, 8)\n return challenge\n }\n\n createMessage3(challenge: string, hostname: string): NtlmMessage {\n const lmResponse = this.buildResponse(this.lmHashedPassword as string, challenge)\n const ntResponse = this.buildResponse(this.ntHashedPassword as string, challenge)\n const username = this.uid\n const domain = this.domain\n const msg3 = new NtlmMessage()\n\n msg3.addString('NTLMSSP\\0')\n msg3.addByte(3)\n msg3.addString('\\0\\0\\0')\n\n msg3.addShort(24) // lmResponse\n msg3.addShort(24)\n msg3.addShort(64 + (domain.length + username.length + hostname.length) * 2)\n msg3.addString('\\0\\0')\n\n msg3.addShort(24) // ntResponse\n msg3.addShort(24)\n msg3.addShort(88 + (domain.length + username.length + hostname.length) * 2)\n msg3.addString('\\0\\0')\n\n msg3.addShort(domain.length * 2) // Domain.\n msg3.addShort(domain.length * 2)\n msg3.addShort(64)\n msg3.addString('\\0\\0')\n\n msg3.addShort(username.length * 2) // Username.\n msg3.addShort(username.length * 2)\n msg3.addShort(64 + domain.length * 2)\n msg3.addShort('\\0\\0')\n\n msg3.addShort(hostname.length * 2) // Hostname.\n msg3.addShort(hostname.length * 2)\n msg3.addShort(64 + (domain.length + username.length) * 2)\n msg3.addString('\\0\\0')\n\n msg3.addString('\\0\\0\\0\\0')\n msg3.addShort(112 + (domain.length + username.length + hostname.length) * 2)\n msg3.addString('\\0\\0')\n msg3.addShort(0x8201)\n msg3.addString('\\0\\0')\n\n msg3.addString(domain.toUpperCase(), true) // \"Some\" string are passed as UTF-16.\n msg3.addString(username, true)\n msg3.addString(hostname.toUpperCase(), true)\n msg3.addString(lmResponse)\n msg3.addString(ntResponse)\n\n return msg3\n }\n\n createKey(str: string): string {\n const key56: number[] = []\n while (str.length < 7) {\n str += '\\0'\n }\n str = str.substr(0, 7)\n str.split('').map((c) => {\n key56.push(c.charCodeAt(0))\n })\n const key = [0, 0, 0, 0, 0, 0, 0, 0]\n key[0] = key56[0] // Convert 56 bit key to 64 bit.\n key[1] = ((key56[0] << 7) & 0xff) | (key56[1] >> 1)\n key[2] = ((key56[1] << 6) & 0xff) | (key56[2] >> 2)\n key[3] = ((key56[2] << 5) & 0xff) | (key56[3] >> 3)\n key[4] = ((key56[3] << 4) & 0xff) | (key56[4] >> 4)\n key[5] = ((key56[4] << 3) & 0xff) | (key56[5] >> 5)\n key[6] = ((key56[5] << 2) & 0xff) | (key56[6] >> 6)\n key[7] = (key56[6] << 1) & 0xff\n for (let i = 0; i < key.length; i++) {\n // Fix DES key parity bits.\n let bit = 0\n for (let k = 0; k < 7; k++) {\n const t = key[i] >> k\n bit = (t ^ bit) & 0x1\n }\n key[i] = (key[i] & 0xfe) | bit\n }\n\n let result = ''\n key.forEach((i) => {\n result += String.fromCharCode(i)\n })\n return result\n }\n\n buildResponse(key: string, text: string): string {\n while (key.length < 21) {\n key += '\\0'\n }\n const key1 = this.createKey(key.substr(0, 7))\n const key2 = this.createKey(key.substr(7, 7))\n const key3 = this.createKey(key.substr(14, 7))\n return Des.des(key1, text, 1, 0) + Des.des(key2, text, 1, 0) + Des.des(key3, text, 1, 0)\n }\n\n // to be called by constructor\n setCredentials(): void {\n const domain = this.domain\n const password = this.passwd\n const magic = 'KGS!@#$%' // Create LM password hash.\n let lmPassword = password.toUpperCase().substr(0, 14)\n while (lmPassword.length < 14) {\n lmPassword += '\\0'\n }\n const key1 = this.createKey(lmPassword)\n const key2 = this.createKey(lmPassword.substr(7))\n const lmHashedPassword = Des.des(key1, magic, 1, 0) + Des.des(key2, magic, 1, 0)\n\n let ntPassword = '' // Create NT password hash.\n for (let i = 0; i < password.length; i++) {\n ntPassword += password.charAt(i) + '\\0'\n }\n const ntHashedPassword = MD4.str(ntPassword)\n\n this.domain = domain\n this.lmHashedPassword = lmHashedPassword\n this.ntHashedPassword = ntHashedPassword\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"NtlmAuth.js","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/ntlm/NtlmAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C;;;GAGG;AACH,MAAM,OAAO,QAAQ;IACnB,MAAM,CAAQ;IACd,GAAG,CAAQ;IACX,MAAM,CAAQ;IACd,gBAAgB,CAAS;IACzB,gBAAgB,CAAS;IAEzB,YAAY,IAAwB;QAClC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAA;QAC/B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAA;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAA;QAEjC,IAAI,CAAC,cAAc,EAAE,CAAA;IACvB,CAAC;IAED,cAAc,CAAC,QAAgB;QAC7B,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAA;QAC9B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QAC3B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACf,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACrB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACjC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;QACnC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QACtB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC9B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC9B,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACjB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;QACtC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;QACzC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,YAAY,CAAC,IAAY;QACvB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAA;QACxF,CAAC;QAED,oDAAoD;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QAE/C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;QAC1E,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,CAAA;QACvC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAClD,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAChD,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QACvC,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,cAAc,CAAC,SAAiB,EAAE,QAAgB;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAA0B,EAAE,SAAS,CAAC,CAAA;QACjF,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAA0B,EAAE,SAAS,CAAC,CAAA;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAA;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAA;QAE9B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QAC3B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACf,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAExB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA,CAAC,aAAa;QAC/B,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACjB,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QAC3E,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAEtB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA,CAAC,aAAa;QAC/B,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACjB,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QAC3E,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAEtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA,CAAC,UAAU;QAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAChC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACjB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAEtB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA,CAAC,YAAY;QAC/C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAClC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACrC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAErB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA,CAAC,YAAY;QAC/C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAClC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QACzD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAEtB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QAC5E,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACrB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAEtB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAA,CAAC,sCAAsC;QACjF,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC9B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAA;QAC5C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAC1B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAE1B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,SAAS,CAAC,GAAW;QACnB,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,GAAG,IAAI,IAAI,CAAA;QACb,CAAC;QACD,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACtB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACtB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;QACF,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACpC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,gCAAgC;QAClD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAA;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,2BAA2B;YAC3B,IAAI,GAAG,GAAG,CAAC,CAAA;YACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;gBACrB,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;YACvB,CAAC;YACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAA;QAChC,CAAC;QAED,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAChB,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACf,CAAC;IAED,aAAa,CAAC,GAAW,EAAE,IAAY;QACrC,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACvB,GAAG,IAAI,IAAI,CAAA;QACb,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9C,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1F,CAAC;IAED,8BAA8B;IAC9B,cAAc;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAA;QAC5B,MAAM,KAAK,GAAG,UAAU,CAAA,CAAC,2BAA2B;QACpD,IAAI,UAAU,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QACrD,OAAO,UAAU,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAC9B,UAAU,IAAI,IAAI,CAAA;QACpB,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACjD,MAAM,gBAAgB,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAEhF,IAAI,UAAU,GAAG,EAAE,CAAA,CAAC,2BAA2B;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,UAAU,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;QACzC,CAAC;QACD,MAAM,gBAAgB,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAE5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QACxC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;IAC1C,CAAC;CACF","sourcesContent":["import { Des } from './Des.js'\nimport { MD4 } from './MD4.js'\nimport { NtlmMessage } from './NtlmMessage.js'\nimport type { INtlmAuthorization } from '../../../models/Authorization.js'\n\n/**\n * A base class for auth methods used in the library.\n * On the base of https://github.com/erlandranvinge/ntlm.js/blob/master/ntlm.js\n */\nexport class NtlmAuth {\n domain: string\n uid: string\n passwd: string\n lmHashedPassword?: string\n ntHashedPassword?: string\n\n constructor(opts: INtlmAuthorization) {\n this.domain = opts.domain || ''\n this.uid = opts.username || ''\n this.passwd = opts.password || ''\n\n this.setCredentials()\n }\n\n createMessage1(hostname: string): NtlmMessage {\n const msg1 = new NtlmMessage()\n msg1.addString('NTLMSSP\\0')\n msg1.addByte(1)\n msg1.addString('\\0\\0\\0')\n msg1.addShort(0xb203)\n msg1.addString('\\0\\0')\n msg1.addShort(this.domain.length)\n msg1.addShort(this.domain.length)\n msg1.addShort(32 + hostname.length)\n msg1.addString('\\0\\0')\n msg1.addShort(hostname.length)\n msg1.addShort(hostname.length)\n msg1.addShort(32)\n msg1.addString('\\0\\0')\n msg1.addString(hostname.toUpperCase())\n msg1.addString(this.domain.toUpperCase())\n return msg1\n }\n\n getChallenge(data: string): string {\n if (!data || typeof data !== 'string') {\n throw new Error('Invalid NTLM challenge data: data is required and must be a string.')\n }\n\n // Remove \"NTLM \" prefix if present (for robustness)\n const cleanData = data.replace(/^NTLM\\s+/i, '')\n\n if (!cleanData) {\n throw new Error('Invalid NTLM challenge data: empty or invalid format.')\n }\n\n const msg2 = new NtlmMessage(cleanData)\n if (msg2.getString(0, 8) !== 'NTLMSSP\\0') {\n throw new Error('Invalid NTLM response header.')\n }\n if (msg2.getByte(8) !== 2) {\n throw new Error('Invalid NTLM response type.')\n }\n const challenge = msg2.getString(24, 8)\n return challenge\n }\n\n createMessage3(challenge: string, hostname: string): NtlmMessage {\n const lmResponse = this.buildResponse(this.lmHashedPassword as string, challenge)\n const ntResponse = this.buildResponse(this.ntHashedPassword as string, challenge)\n const username = this.uid\n const domain = this.domain\n const msg3 = new NtlmMessage()\n\n msg3.addString('NTLMSSP\\0')\n msg3.addByte(3)\n msg3.addString('\\0\\0\\0')\n\n msg3.addShort(24) // lmResponse\n msg3.addShort(24)\n msg3.addShort(64 + (domain.length + username.length + hostname.length) * 2)\n msg3.addString('\\0\\0')\n\n msg3.addShort(24) // ntResponse\n msg3.addShort(24)\n msg3.addShort(88 + (domain.length + username.length + hostname.length) * 2)\n msg3.addString('\\0\\0')\n\n msg3.addShort(domain.length * 2) // Domain.\n msg3.addShort(domain.length * 2)\n msg3.addShort(64)\n msg3.addString('\\0\\0')\n\n msg3.addShort(username.length * 2) // Username.\n msg3.addShort(username.length * 2)\n msg3.addShort(64 + domain.length * 2)\n msg3.addShort('\\0\\0')\n\n msg3.addShort(hostname.length * 2) // Hostname.\n msg3.addShort(hostname.length * 2)\n msg3.addShort(64 + (domain.length + username.length) * 2)\n msg3.addString('\\0\\0')\n\n msg3.addString('\\0\\0\\0\\0')\n msg3.addShort(112 + (domain.length + username.length + hostname.length) * 2)\n msg3.addString('\\0\\0')\n msg3.addShort(0x8201)\n msg3.addString('\\0\\0')\n\n msg3.addString(domain.toUpperCase(), true) // \"Some\" string are passed as UTF-16.\n msg3.addString(username, true)\n msg3.addString(hostname.toUpperCase(), true)\n msg3.addString(lmResponse)\n msg3.addString(ntResponse)\n\n return msg3\n }\n\n createKey(str: string): string {\n const key56: number[] = []\n while (str.length < 7) {\n str += '\\0'\n }\n str = str.substr(0, 7)\n str.split('').map((c) => {\n key56.push(c.charCodeAt(0))\n })\n const key = [0, 0, 0, 0, 0, 0, 0, 0]\n key[0] = key56[0] // Convert 56 bit key to 64 bit.\n key[1] = ((key56[0] << 7) & 0xff) | (key56[1] >> 1)\n key[2] = ((key56[1] << 6) & 0xff) | (key56[2] >> 2)\n key[3] = ((key56[2] << 5) & 0xff) | (key56[3] >> 3)\n key[4] = ((key56[3] << 4) & 0xff) | (key56[4] >> 4)\n key[5] = ((key56[4] << 3) & 0xff) | (key56[5] >> 5)\n key[6] = ((key56[5] << 2) & 0xff) | (key56[6] >> 6)\n key[7] = (key56[6] << 1) & 0xff\n for (let i = 0; i < key.length; i++) {\n // Fix DES key parity bits.\n let bit = 0\n for (let k = 0; k < 7; k++) {\n const t = key[i] >> k\n bit = (t ^ bit) & 0x1\n }\n key[i] = (key[i] & 0xfe) | bit\n }\n\n let result = ''\n key.forEach((i) => {\n result += String.fromCharCode(i)\n })\n return result\n }\n\n buildResponse(key: string, text: string): string {\n while (key.length < 21) {\n key += '\\0'\n }\n const key1 = this.createKey(key.substr(0, 7))\n const key2 = this.createKey(key.substr(7, 7))\n const key3 = this.createKey(key.substr(14, 7))\n return Des.des(key1, text, 1, 0) + Des.des(key2, text, 1, 0) + Des.des(key3, text, 1, 0)\n }\n\n // to be called by constructor\n setCredentials(): void {\n const domain = this.domain\n const password = this.passwd\n const magic = 'KGS!@#$%' // Create LM password hash.\n let lmPassword = password.toUpperCase().substr(0, 14)\n while (lmPassword.length < 14) {\n lmPassword += '\\0'\n }\n const key1 = this.createKey(lmPassword)\n const key2 = this.createKey(lmPassword.substr(7))\n const lmHashedPassword = Des.des(key1, magic, 1, 0) + Des.des(key2, magic, 1, 0)\n\n let ntPassword = '' // Create NT password hash.\n for (let i = 0; i < password.length; i++) {\n ntPassword += password.charAt(i) + '\\0'\n }\n const ntHashedPassword = MD4.str(ntPassword)\n\n this.domain = domain\n this.lmHashedPassword = lmHashedPassword\n this.ntHashedPassword = ntHashedPassword\n }\n}\n"]}
|
|
@@ -5,13 +5,13 @@ export class NtlmMessage {
|
|
|
5
5
|
return;
|
|
6
6
|
}
|
|
7
7
|
if (data.indexOf('NTLM ') === 0) {
|
|
8
|
-
data = data.
|
|
8
|
+
data = data.substring(5);
|
|
9
|
+
}
|
|
10
|
+
// Use Buffer instead of atob for Node.js compatibility
|
|
11
|
+
const buffer = Buffer.from(data, 'base64');
|
|
12
|
+
for (const byte of buffer) {
|
|
13
|
+
this.data.push(byte);
|
|
9
14
|
}
|
|
10
|
-
atob(data)
|
|
11
|
-
.split('')
|
|
12
|
-
.map((c) => {
|
|
13
|
-
this.data.push(c.charCodeAt(0));
|
|
14
|
-
});
|
|
15
15
|
}
|
|
16
16
|
addByte(b) {
|
|
17
17
|
this.data.push(b);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NtlmMessage.js","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/ntlm/NtlmMessage.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAW;IACtB,IAAI,GAAa,EAAE,CAAA;IAEnB,YAAY,IAAa;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAM;QACR,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"NtlmMessage.js","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/ntlm/NtlmMessage.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAW;IACtB,IAAI,GAAa,EAAE,CAAA;IAEnB,YAAY,IAAa;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAM;QACR,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC;QACD,uDAAuD;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC1C,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,CAAS;QACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IAED,QAAQ,CAAC,CAAkB;QACzB,MAAM,KAAK,GAAG,CAAW,CAAA;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IACrC,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,KAAe;QACpC,IAAI,KAAK,EAAE,CAAC;YACV,kDAAkD;YAClD,GAAG,GAAG,GAAG;iBACN,KAAK,CAAC,EAAE,CAAC;iBACT,GAAG,CAAC,UAAU,CAAC;gBACd,OAAO,CAAC,GAAG,IAAI,CAAA;YACjB,CAAC,CAAC;iBACD,IAAI,CAAC,EAAE,CAAC,CAAA;QACb,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;QACnC,CAAC;IACH,CAAC;IAED,SAAS,CAAC,MAAc,EAAE,MAAc;QACtC,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACnC,OAAO,EAAE,CAAA;YACX,CAAC;YACD,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;QACtD,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC1B,CAAC;IAED,QAAQ;QACN,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACtD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;aACpB,QAAQ,CAAC,QAAQ,CAAC;aAClB,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACjC,CAAC;CACF","sourcesContent":["export class NtlmMessage {\n data: number[] = []\n\n constructor(data?: string) {\n if (!data) {\n return\n }\n if (data.indexOf('NTLM ') === 0) {\n data = data.substring(5)\n }\n // Use Buffer instead of atob for Node.js compatibility\n const buffer = Buffer.from(data, 'base64')\n for (const byte of buffer) {\n this.data.push(byte)\n }\n }\n\n addByte(b: number): void {\n this.data.push(b)\n }\n\n addShort(s: number | string): void {\n const typed = s as number\n this.data.push(typed & 0xff)\n this.data.push((typed >> 8) & 0xff)\n }\n\n addString(str: string, utf16?: boolean): void {\n if (utf16) {\n // Fake UTF16 by padding each character in string.\n str = str\n .split('')\n .map(function (c) {\n return c + '\\0'\n })\n .join('')\n }\n for (let i = 0; i < str.length; i++) {\n this.data.push(str.charCodeAt(i))\n }\n }\n\n getString(offset: number, length: number): string {\n let result = ''\n for (let i = 0; i < length; i++) {\n if (offset + i >= this.data.length) {\n return ''\n }\n result += String.fromCharCode(this.data[offset + i])\n }\n return result\n }\n\n getByte(offset: number): number {\n return this.data[offset]\n }\n\n toBase64(): string {\n const str = String.fromCharCode.apply(null, this.data)\n return Buffer.from(str)\n .toString('base64')\n .replace(/.{76}(?=.)/g, '$&')\n }\n}\n"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type Logger, type ILogObj } from '../../../lib/logging/index.js';
|
|
2
|
+
import { ResponseInfo } from './HttpResponseParser.js';
|
|
3
|
+
export type BodyCompleteCallback = (body: Buffer) => void;
|
|
4
|
+
/**
|
|
5
|
+
* Parser for HTTP body data
|
|
6
|
+
*/
|
|
7
|
+
export declare class BodyParser {
|
|
8
|
+
private logger;
|
|
9
|
+
private responseInfo;
|
|
10
|
+
private rawBody?;
|
|
11
|
+
constructor(logger: Logger<ILogObj>, responseInfo: ResponseInfo);
|
|
12
|
+
/**
|
|
13
|
+
* Process body with content-length encoding
|
|
14
|
+
* @param data Buffer containing body data
|
|
15
|
+
* @param onComplete Callback when body is complete
|
|
16
|
+
*/
|
|
17
|
+
processContentLength(data: Buffer, onComplete: BodyCompleteCallback): void;
|
|
18
|
+
/**
|
|
19
|
+
* Process body with chunked transfer encoding
|
|
20
|
+
* @param data Buffer containing chunked body data
|
|
21
|
+
* @param onComplete Callback when body is complete
|
|
22
|
+
*/
|
|
23
|
+
processChunked(data: Buffer, onComplete: BodyCompleteCallback): void;
|
|
24
|
+
/**
|
|
25
|
+
* Read chunk size from chunked transfer encoding
|
|
26
|
+
* @param array Buffer containing chunk data
|
|
27
|
+
* @returns Remaining data after reading chunk size
|
|
28
|
+
*/
|
|
29
|
+
readChunkSize(array: Buffer): Buffer | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Get the raw body buffer
|
|
32
|
+
*/
|
|
33
|
+
getRawBody(): Buffer | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Reset the parser state
|
|
36
|
+
*/
|
|
37
|
+
reset(): void;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=BodyParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BodyParser.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/parsers/BodyParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,OAAO,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAKtD,MAAM,MAAM,oBAAoB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;AAEzD;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,OAAO,CAAC,CAAQ;gBAEZ,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,YAAY;IAK/D;;;;OAIG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,GAAG,IAAI;IA2B1E;;;;OAIG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,GAAG,IAAI;IA2DpE;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAgChD;;OAEG;IACH,UAAU,IAAI,MAAM,GAAG,SAAS;IAIhC;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
const nlNlBuffer = Buffer.from([13, 10, 13, 10]);
|
|
2
|
+
const nlBuffer = Buffer.from([13, 10]);
|
|
3
|
+
/**
|
|
4
|
+
* Parser for HTTP body data
|
|
5
|
+
*/
|
|
6
|
+
export class BodyParser {
|
|
7
|
+
logger;
|
|
8
|
+
responseInfo;
|
|
9
|
+
rawBody;
|
|
10
|
+
constructor(logger, responseInfo) {
|
|
11
|
+
this.logger = logger;
|
|
12
|
+
this.responseInfo = responseInfo;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Process body with content-length encoding
|
|
16
|
+
* @param data Buffer containing body data
|
|
17
|
+
* @param onComplete Callback when body is complete
|
|
18
|
+
*/
|
|
19
|
+
processContentLength(data, onComplete) {
|
|
20
|
+
if (typeof this.responseInfo.contentLength === 'undefined') {
|
|
21
|
+
throw new Error('The content-length header of the response is missing.');
|
|
22
|
+
}
|
|
23
|
+
if (!this.responseInfo.body) {
|
|
24
|
+
this.responseInfo.body = data;
|
|
25
|
+
if (data.length >= this.responseInfo.contentLength) {
|
|
26
|
+
const body = this.responseInfo.body.slice(0, this.responseInfo.contentLength);
|
|
27
|
+
this.rawBody = body;
|
|
28
|
+
onComplete(body);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const sum = this.responseInfo.body.length + data.length;
|
|
34
|
+
this.responseInfo.body = Buffer.concat([this.responseInfo.body, data], sum);
|
|
35
|
+
if (this.responseInfo.body.length >= this.responseInfo.contentLength) {
|
|
36
|
+
const body = this.responseInfo.body.slice(0, this.responseInfo.contentLength);
|
|
37
|
+
this.rawBody = body;
|
|
38
|
+
onComplete(body);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Process body with chunked transfer encoding
|
|
44
|
+
* @param data Buffer containing chunked body data
|
|
45
|
+
* @param onComplete Callback when body is complete
|
|
46
|
+
*/
|
|
47
|
+
processChunked(data, onComplete) {
|
|
48
|
+
if (!data) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (this.responseInfo.chunk) {
|
|
52
|
+
data = Buffer.concat([this.responseInfo.chunk, data], this.responseInfo.chunk.length + data.length);
|
|
53
|
+
this.responseInfo.chunk = undefined;
|
|
54
|
+
}
|
|
55
|
+
while (true) {
|
|
56
|
+
if (this.responseInfo.chunkSize === 0 && data.indexOf(nlNlBuffer) === 0) {
|
|
57
|
+
onComplete(this.rawBody || Buffer.alloc(0));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (!this.responseInfo.chunkSize) {
|
|
61
|
+
const tmp = this.readChunkSize(data);
|
|
62
|
+
if (!tmp) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
data = tmp;
|
|
66
|
+
if (!this.responseInfo.chunkSize && this.responseInfo.chunkSize !== 0) {
|
|
67
|
+
// It may happen that node's buffer cuts the data
|
|
68
|
+
// just before the chunk size.
|
|
69
|
+
// It should proceed it in next portion of the data.
|
|
70
|
+
this.responseInfo.chunk = data;
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (!this.responseInfo.chunkSize) {
|
|
74
|
+
onComplete(this.rawBody || Buffer.alloc(0));
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const size = Math.min(this.responseInfo.chunkSize, data.length);
|
|
79
|
+
const sliced = data.slice(0, size);
|
|
80
|
+
if (!this.rawBody) {
|
|
81
|
+
this.rawBody = sliced;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
const sum = size + this.rawBody.length;
|
|
85
|
+
this.rawBody = Buffer.concat([this.rawBody, sliced], sum);
|
|
86
|
+
}
|
|
87
|
+
this.responseInfo.chunkSize -= size;
|
|
88
|
+
if (data.length === 0) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
data = data.slice(size + 2); // + CR
|
|
92
|
+
if (data.length === 0) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Read chunk size from chunked transfer encoding
|
|
99
|
+
* @param array Buffer containing chunk data
|
|
100
|
+
* @returns Remaining data after reading chunk size
|
|
101
|
+
*/
|
|
102
|
+
readChunkSize(array) {
|
|
103
|
+
let index = array.indexOf(nlBuffer);
|
|
104
|
+
if (index === -1) {
|
|
105
|
+
// not found in this portion of data.
|
|
106
|
+
return array;
|
|
107
|
+
}
|
|
108
|
+
if (index === 0) {
|
|
109
|
+
// Node's buffer cuts CRLF after the end of chunk data, without last CLCR,
|
|
110
|
+
// here's to fix it.
|
|
111
|
+
// It can be either new line from the last chunk or end of
|
|
112
|
+
// the message where
|
|
113
|
+
// the rest of the array is [13, 10, 48, 13, 10, 13, 10]
|
|
114
|
+
if (array.indexOf(nlNlBuffer) === 0) {
|
|
115
|
+
this.responseInfo.chunkSize = 0;
|
|
116
|
+
return Buffer.alloc(0);
|
|
117
|
+
}
|
|
118
|
+
array = array.subarray(index + 2);
|
|
119
|
+
index = array.indexOf(nlBuffer);
|
|
120
|
+
}
|
|
121
|
+
const chunkSize = parseInt(array.slice(0, index).toString(), 16);
|
|
122
|
+
if (Number.isNaN(chunkSize)) {
|
|
123
|
+
this.responseInfo.chunkSize = undefined;
|
|
124
|
+
return array.slice(index + 2);
|
|
125
|
+
}
|
|
126
|
+
this.responseInfo.chunkSize = chunkSize;
|
|
127
|
+
return array.slice(index + 2);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get the raw body buffer
|
|
131
|
+
*/
|
|
132
|
+
getRawBody() {
|
|
133
|
+
return this.rawBody;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Reset the parser state
|
|
137
|
+
*/
|
|
138
|
+
reset() {
|
|
139
|
+
this.rawBody = undefined;
|
|
140
|
+
this.responseInfo.body = undefined;
|
|
141
|
+
this.responseInfo.chunk = undefined;
|
|
142
|
+
this.responseInfo.chunkSize = undefined;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=BodyParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BodyParser.js","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/parsers/BodyParser.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Logger, type ILogObj } from '../../../lib/logging/index.js'\nimport { ResponseInfo } from './HttpResponseParser.js'\n\nconst nlNlBuffer = Buffer.from([13, 10, 13, 10])\nconst nlBuffer = Buffer.from([13, 10])\n\nexport type BodyCompleteCallback = (body: Buffer) => void\n\n/**\n * Parser for HTTP body data\n */\nexport class BodyParser {\n private logger: Logger<ILogObj>\n private responseInfo: ResponseInfo\n private rawBody?: Buffer\n\n constructor(logger: Logger<ILogObj>, responseInfo: ResponseInfo) {\n this.logger = logger\n this.responseInfo = responseInfo\n }\n\n /**\n * Process body with content-length encoding\n * @param data Buffer containing body data\n * @param onComplete Callback when body is complete\n */\n processContentLength(data: Buffer, onComplete: BodyCompleteCallback): void {\n if (typeof this.responseInfo.contentLength === 'undefined') {\n throw new Error('The content-length header of the response is missing.')\n }\n\n if (!this.responseInfo.body) {\n this.responseInfo.body = data\n if (data.length >= this.responseInfo.contentLength) {\n const body = this.responseInfo.body.slice(0, this.responseInfo.contentLength)\n this.rawBody = body\n onComplete(body)\n return\n }\n return\n }\n\n const sum = this.responseInfo.body.length + data.length\n this.responseInfo.body = Buffer.concat([this.responseInfo.body, data], sum)\n\n if (this.responseInfo.body.length >= this.responseInfo.contentLength) {\n const body = this.responseInfo.body.slice(0, this.responseInfo.contentLength)\n this.rawBody = body\n onComplete(body)\n return\n }\n }\n\n /**\n * Process body with chunked transfer encoding\n * @param data Buffer containing chunked body data\n * @param onComplete Callback when body is complete\n */\n processChunked(data: Buffer, onComplete: BodyCompleteCallback): void {\n if (!data) {\n return\n }\n\n if (this.responseInfo.chunk) {\n data = Buffer.concat([this.responseInfo.chunk, data], this.responseInfo.chunk.length + data.length)\n this.responseInfo.chunk = undefined\n }\n\n while (true) {\n if (this.responseInfo.chunkSize === 0 && data.indexOf(nlNlBuffer) === 0) {\n onComplete(this.rawBody || Buffer.alloc(0))\n return\n }\n\n if (!this.responseInfo.chunkSize) {\n const tmp = this.readChunkSize(data)\n if (!tmp) {\n return\n }\n data = tmp\n if (!this.responseInfo.chunkSize && this.responseInfo.chunkSize !== 0) {\n // It may happen that node's buffer cuts the data\n // just before the chunk size.\n // It should proceed it in next portion of the data.\n this.responseInfo.chunk = data\n return\n }\n if (!this.responseInfo.chunkSize) {\n onComplete(this.rawBody || Buffer.alloc(0))\n return\n }\n }\n\n const size = Math.min(this.responseInfo.chunkSize, data.length)\n const sliced = data.slice(0, size)\n\n if (!this.rawBody) {\n this.rawBody = sliced\n } else {\n const sum = size + this.rawBody.length\n this.rawBody = Buffer.concat([this.rawBody, sliced], sum)\n }\n\n this.responseInfo.chunkSize -= size\n\n if (data.length === 0) {\n return\n }\n\n data = data.slice(size + 2) // + CR\n\n if (data.length === 0) {\n return\n }\n }\n }\n\n /**\n * Read chunk size from chunked transfer encoding\n * @param array Buffer containing chunk data\n * @returns Remaining data after reading chunk size\n */\n readChunkSize(array: Buffer): Buffer | undefined {\n let index = array.indexOf(nlBuffer)\n\n if (index === -1) {\n // not found in this portion of data.\n return array\n }\n\n if (index === 0) {\n // Node's buffer cuts CRLF after the end of chunk data, without last CLCR,\n // here's to fix it.\n // It can be either new line from the last chunk or end of\n // the message where\n // the rest of the array is [13, 10, 48, 13, 10, 13, 10]\n if (array.indexOf(nlNlBuffer) === 0) {\n this.responseInfo.chunkSize = 0\n return Buffer.alloc(0)\n }\n array = array.subarray(index + 2)\n index = array.indexOf(nlBuffer)\n }\n\n const chunkSize = parseInt(array.slice(0, index).toString(), 16)\n if (Number.isNaN(chunkSize)) {\n this.responseInfo.chunkSize = undefined\n return array.slice(index + 2)\n }\n\n this.responseInfo.chunkSize = chunkSize\n return array.slice(index + 2)\n }\n\n /**\n * Get the raw body buffer\n */\n getRawBody(): Buffer | undefined {\n return this.rawBody\n }\n\n /**\n * Reset the parser state\n */\n reset(): void {\n this.rawBody = undefined\n this.responseInfo.body = undefined\n this.responseInfo.chunk = undefined\n this.responseInfo.chunkSize = undefined\n }\n}\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type Logger, type ILogObj } from '../../../lib/logging/index.js';
|
|
2
|
+
export interface HeadersParseResult {
|
|
3
|
+
complete: boolean;
|
|
4
|
+
headers?: Buffer;
|
|
5
|
+
remaining?: Buffer;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Parser for HTTP headers
|
|
9
|
+
*/
|
|
10
|
+
export declare class HeadersParser {
|
|
11
|
+
private logger;
|
|
12
|
+
constructor(logger: Logger<ILogObj>);
|
|
13
|
+
/**
|
|
14
|
+
* Parse HTTP headers from buffer
|
|
15
|
+
* @param data Buffer containing header data
|
|
16
|
+
* @param existingHeaders Previously accumulated headers
|
|
17
|
+
* @returns Headers parse result
|
|
18
|
+
*/
|
|
19
|
+
parse(data: Buffer, existingHeaders?: Buffer): HeadersParseResult;
|
|
20
|
+
/**
|
|
21
|
+
* Extract remaining data after headers
|
|
22
|
+
* @param data Original data buffer
|
|
23
|
+
* @param index Index where headers end
|
|
24
|
+
* @param padding Padding to skip
|
|
25
|
+
* @returns Remaining data
|
|
26
|
+
*/
|
|
27
|
+
private extractRemaining;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=HeadersParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeadersParser.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/http-engine/parsers/HeadersParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,OAAO,EAAE,MAAM,+BAA+B,CAAA;AAKzE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC;IAInC;;;;;OAKG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,kBAAkB;IA8DjE;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;CAMzB"}
|