type ParserType = | 'REQUEST' | 'RESPONSE' type RequestMethod = | 'DELETE' | 'GET' | 'HEAD' | 'POST' | 'PUT' | 'CONNECT' | 'OPTIONS' | 'TRACE' | 'COPY' | 'LOCK' | 'MKCOL' | 'MOVE' | 'PROPFIND' | 'PROPPATCH' | 'SEARCH' | 'UNLOCK' | 'BIND' | 'REBIND' | 'UNBIND' | 'ACL' | 'REPORT' | 'MKACTIVITY' | 'CHECKOUT' | 'MERGE' | 'M-SEARCH' | 'NOTIFY' | 'SUBSCRIBE' | 'UNSUBSCRIBE' | 'PATCH' | 'PURGE' | 'MKCALENDAR' | 'LINK' | 'UNLINK' | string type StateHeaderKey = | 'REQUEST_LINE' | 'RESPONSE_LINE' | 'HEADER' type StateFinishAllowedKey = | 'REQUEST_LINE' | 'RESPONSE_LINE' | 'BODY_RAW' type HeaderObject = Record type noop = ()=> T type HeaderInfo
= { versionMajor: number versionMinor: number headers: HEADER method: RequestMethod url: string statusCode: number statusMessage: string upgrade: boolean shouldKeepAlive: boolean } export type OnHeadersCompleteParser
= Mode_0_12 extends true ? (info: HeaderInfo
)=> number | void : ( versionMajor: number, versionMinor: number, headers: HEADER, method: RequestMethod, url: string, statusCode: number, statusMessage: string, upgrade: boolean, shouldKeepAlive: boolean, )=> number | void export type OnBodyParser = (chunk: Buffer, offset: number, length: number)=> void // Only called in the slow case where slow means // that the request headers were either fragmented // across multiple TCP packets or too large to be // processed in a single run. This method is also // called to process trailing HTTP headers. export type OnHeadersParser = (headers: string[], url: string)=> void declare class HTTPParserJS { initialize(type: ParserType, async_resource?: unknown): void // Some handler stubs, needed for compatibility [HTTPParser.kOnHeaders]: OnHeadersParser [HTTPParser.kOnHeadersComplete]: OnHeadersCompleteParser [HTTPParser.kOnBody]: OnBodyParser [HTTPParser.kOnMessageComplete]: noop reinitialize: HTTPParserConstructor close: noop pause: noop resume: noop free: noop private _compatMode0_11: false | boolean getAsyncId: noop<0> execute(chunk: Buffer, start?: number, length?: number): number | Error finish(): void | Error // These three methods are used for an internal speed optimization, and it also // works if theses are noops. Basically consume() asks us to read the bytes // ourselves, but if we don't do it we get them through execute(). consume: noop unconsume: noop getCurrentBuffer: noop /** * For correct error handling - see HTTPParser#execute * @example this.userCall()(userFunction('arg')); */ userCall(): (ret?: T)=> T private nextRequest: noop private consumeLine: noop parseHeader(line: string, headers: string[]): void private REQUEST_LINE: noop private RESPONSE_LINE: noop shouldKeepAlive(): boolean /** * For older versions of node (v6.x and older?), that return `skipBody=1` or `skipBody=true`, need this `return true;` if it's an upgrade request. */ private HEADER(): void | boolean private BODY_CHUNKHEAD(): void private BODY_CHUNK(): void private BODY_CHUNKEMPTYLINE(): void private BODY_CHUNKTRAILERS(): void private BODY_RAW(): void private BODY_SIZED(): void get onHeaders(): OnHeadersParser set onHeaders(to: OnHeadersParser) get onHeadersComplete(): OnHeadersCompleteParser set onHeadersComplete(to: OnHeadersCompleteParser) get onBody(): OnBodyParser set onBody(to: OnBodyParser) get onMessageComplete(): noop set onMessageComplete(to: noop) } interface HTTPParserConstructor extends Function { new(type?: ParserType): HTTPParserJS (type?: ParserType): void readonly prototype: HTTPParserJS readonly REQUEST: 'REQUEST' readonly RESPONSE: 'RESPONSE' readonly methods: RequestMethod[] encoding: 'ascii'|string /** * maxHeaderSize (in bytes) is configurable, but 80kb by default; * @default 80 * 1024 = 80kb */ maxHeaderSize: 81920|number // Note: *not* starting with kOnHeaders=0 line the Node parser, because any // newly added constants (kOnTimeout in Node v12.19.0) will overwrite 0! readonly kOnHeaders: 1 readonly kOnHeadersComplete: 2 readonly kOnBody: 3 readonly kOnMessageComplete: 4 kOnExecute(): void } export const HTTPParser: HTTPParserConstructor export const methods: RequestMethod[]