You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
4.4 KiB
175 lines
4.4 KiB
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<string, string> |
|
type noop<T = void> = ()=> T |
|
|
|
type HeaderInfo<HEADER = HeaderObject> = { |
|
versionMajor: number |
|
versionMinor: number |
|
headers: HEADER |
|
method: RequestMethod |
|
url: string |
|
statusCode: number |
|
statusMessage: string |
|
upgrade: boolean |
|
shouldKeepAlive: boolean |
|
} |
|
export type OnHeadersCompleteParser<HEADER = HeaderObject, Mode_0_12 extends boolean = true> = Mode_0_12 extends true |
|
? (info: HeaderInfo<HEADER>)=> 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<T = unknown>(): (ret?: T)=> T |
|
private nextRequest: noop |
|
private consumeLine: noop<string|void> |
|
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[]
|
|
|