/// /// interface NginxHTTPArgs { readonly [prop: string]: string; } interface NginxHeadersIn { // common request headers readonly 'Accept'?: string; readonly 'Accept-Charset'?: string; readonly 'Accept-Encoding'?: string; readonly 'Accept-Language'?: string; readonly 'Authorization'?: string; readonly 'Cache-Control'?: string; readonly 'Connection'?: string; readonly 'Content-Length'?: string; readonly 'Content-Type'?: string; readonly 'Cookie'?: string; readonly 'Date'?: string; readonly 'Expect'?: string; readonly 'Forwarded'?: string; readonly 'From'?: string; readonly 'Host'?: string; readonly 'If-Match'?: string; readonly 'If-Modified-Since'?: string; readonly 'If-None-Match'?: string; readonly 'If-Range'?: string; readonly 'If-Unmodified-Since'?: string; readonly 'Max-Forwards'?: string; readonly 'Origin'?: string; readonly 'Pragma'?: string; readonly 'Proxy-Authorization'?: string; readonly 'Range'?: string; readonly 'Referer'?: string; readonly 'TE'?: string; readonly 'User-Agent'?: string; readonly 'Upgrade'?: string; readonly 'Via'?: string; readonly 'Warning'?: string; readonly 'X-Forwarded-For'?: string; readonly [prop: string]: string | undefined; } interface NginxHeadersOut { // common response headers 'Age'?: string; 'Allow'?: string; 'Alt-Svc'?: string; 'Cache-Control'?: string; 'Connection'?: string; 'Content-Disposition'?: string; 'Content-Encoding'?: string; 'Content-Language'?: string; 'Content-Length'?: string; 'Content-Location'?: string; 'Content-Range'?: string; 'Content-Type'?: string; 'Date'?: string; 'ETag'?: string; 'Expires'?: string; 'Last-Modified'?: string; 'Link'?: string; 'Location'?: string; 'Pragma'?: string; 'Proxy-Authenticate'?: string; 'Retry-After'?: string; 'Server'?: string; 'Trailer'?: string; 'Transfer-Encoding'?: string; 'Upgrade'?: string; 'Vary'?: string; 'Via'?: string; 'Warning'?: string; 'WWW-Authenticate'?: string; 'Set-Cookie'?: string[]; [prop: string]: string | string[] | undefined; } interface NginxVariables { readonly 'ancient_browser'?: string; readonly 'arg_'?: string; readonly 'args'?: string; readonly 'binary_remote_addr'?: string; readonly 'body_bytes_sent'?: string; readonly 'bytes_received'?: string; readonly 'bytes_sent'?: string; readonly 'connection'?: string; readonly 'connection_requests'?: string; readonly 'connections_active'?: string; readonly 'connections_reading'?: string; readonly 'connections_waiting'?: string; readonly 'connections_writing'?: string; readonly 'content_length'?: string; readonly 'content_type'?: string; readonly 'cookie_'?: string; readonly 'date_gmt'?: string; readonly 'date_local'?: string; readonly 'document_root'?: string; readonly 'document_uri'?: string; readonly 'fastcgi_path_info'?: string; readonly 'fastcgi_script_name'?: string; readonly 'geoip_area_code'?: string; readonly 'geoip_city'?: string; readonly 'geoip_city_continent_code'?: string; readonly 'geoip_city_country_code'?: string; readonly 'geoip_city_country_code3'?: string; readonly 'geoip_city_country_name'?: string; readonly 'geoip_country_code'?: string; readonly 'geoip_country_code3'?: string; readonly 'geoip_country_name'?: string; readonly 'geoip_dma_code'?: string; readonly 'geoip_latitude'?: string; readonly 'geoip_longitude'?: string; readonly 'geoip_org'?: string; readonly 'geoip_postal_code'?: string; readonly 'geoip_region'?: string; readonly 'geoip_region_name'?: string; readonly 'gzip_ratio'?: string; readonly 'host'?: string; readonly 'hostname'?: string; readonly 'http2'?: string; readonly 'http_'?: string; readonly 'https'?: string; readonly 'invalid_referer'?: string; readonly 'is_args'?: string; readonly 'jwt_claim_'?: string; readonly 'jwt_header_'?: string; readonly 'limit_conn_status'?: string; readonly 'limit_rate'?: string; readonly 'limit_req_status'?: string; readonly 'memcached_key'?: string; readonly 'modern_browser'?: string; readonly 'msec'?: string; readonly 'msie'?: string; readonly 'nginx_version'?: string; readonly 'pid'?: string; readonly 'pipe'?: string; readonly 'protocol'?: string; readonly 'proxy_add_x_forwarded_for'?: string; readonly 'proxy_host'?: string; readonly 'proxy_port'?: string; readonly 'proxy_protocol_addr'?: string; readonly 'proxy_protocol_port'?: string; readonly 'proxy_protocol_server_addr'?: string; readonly 'proxy_protocol_server_port'?: string; readonly 'query_string'?: string; readonly 'realip_remote_addr'?: string; readonly 'realip_remote_port'?: string; readonly 'realpath_root'?: string; readonly 'remote_addr'?: string; readonly 'remote_port'?: string; readonly 'remote_user'?: string; readonly 'request'?: string; readonly 'request_body'?: string; readonly 'request_body_file'?: string; readonly 'request_completion'?: string; readonly 'request_filename'?: string; readonly 'request_id'?: string; readonly 'request_length'?: string; readonly 'request_method'?: string; readonly 'request_time'?: string; readonly 'request_uri'?: string; readonly 'scheme'?: string; readonly 'secure_link'?: string; readonly 'secure_link_expires'?: string; readonly 'sent_http_'?: string; readonly 'sent_trailer_'?: string; readonly 'server_addr'?: string; readonly 'server_name'?: string; readonly 'server_port'?: string; readonly 'server_protocol'?: string; readonly 'session_log_binary_id'?: string; readonly 'session_log_id'?: string; readonly 'session_time'?: string; readonly 'slice_range'?: string; readonly 'spdy'?: string; readonly 'spdy_request_priority'?: string; readonly 'ssl_cipher'?: string; readonly 'ssl_ciphers'?: string; readonly 'ssl_client_cert'?: string; readonly 'ssl_client_escaped_cert'?: string; readonly 'ssl_client_fingerprint'?: string; readonly 'ssl_client_i_dn'?: string; readonly 'ssl_client_i_dn_legacy'?: string; readonly 'ssl_client_raw_cert'?: string; readonly 'ssl_client_s_dn'?: string; readonly 'ssl_client_s_dn_legacy'?: string; readonly 'ssl_client_serial'?: string; readonly 'ssl_client_v_end'?: string; readonly 'ssl_client_v_remain'?: string; readonly 'ssl_client_v_start'?: string; readonly 'ssl_client_verify'?: string; readonly 'ssl_curves'?: string; readonly 'ssl_early_data'?: string; readonly 'ssl_preread_alpn_protocols'?: string; readonly 'ssl_preread_protocol'?: string; readonly 'ssl_preread_server_name'?: string; readonly 'ssl_protocol'?: string; readonly 'ssl_server_name'?: string; readonly 'ssl_session_id'?: string; readonly 'ssl_session_reused'?: string; readonly 'status'?: string; readonly 'tcpinfo_rtt'?: string; readonly 'tcpinfo_rttvar'?: string; readonly 'tcpinfo_snd_cwnd'?: string; readonly 'tcpinfo_rcv_space'?: string; readonly 'time_iso8601'?: string; readonly 'time_local'?: string; readonly 'uid_got'?: string; readonly 'uid_reset'?: string; readonly 'uid_set'?: string; readonly 'upstream_addr'?: string; readonly 'upstream_bytes_received'?: string; readonly 'upstream_bytes_sent'?: string; readonly 'upstream_cache_status'?: string; readonly 'upstream_connect_time'?: string; readonly 'upstream_cookie_'?: string; readonly 'upstream_first_byte_time'?: string; readonly 'upstream_header_time'?: string; readonly 'upstream_http_'?: string; readonly 'upstream_queue_time'?: string; readonly 'upstream_response_length'?: string; readonly 'upstream_response_time'?: string; readonly 'upstream_session_time'?: string; readonly 'upstream_status'?: string; readonly 'upstream_trailer_'?: string; readonly 'uri'?: string; [prop: string]: string | undefined; } /** * @since 0.5.0 */ type NginxRawVariables = { [K in keyof NginxVariables]: Buffer | undefined; }; interface NginxSubrequestOptions { /** * Arguments string, by default an empty string is used. */ args?: string, /** * Request body, by default the request body of the parent request object is used. */ body?: string, /** * HTTP method, by default the GET method is used. */ method?: "GET" | "POST" | "OPTIONS" | "HEAD" | "PROPFIND" | "PUT" | "MKCOL" | "DELETE" | "COPY" | "MOVE" | "PROPPATCH" | "LOCK" | "PATCH" | "TRACE", /** * if true, the created subrequest is a detached subrequest. * Responses to detached subrequests are ignored. */ detached?: boolean } interface NginxHTTPSendBufferOptions { /** * True if data is a last buffer. */ last?: boolean /** * True if the buffer should have the flush flag. */ flush?: boolean } interface NginxHTTPRequest { /** * Request arguments object. * * Since 0.7.6, duplicate keys are returned as an array, keys are * case-sensitive, both keys and values are percent-decoded. * For example, the query string * * 'a=1&b=%32&A=3&b=4&B=two%20words' * is converted to r.args as: * * {a: "1", b: ["2", "4"], A: "3", B: "two words"} */ readonly args: NginxHTTPArgs; /** * After calling this function, next data chunks will be passed to * the client without calling js_body_filter. * * **Warning:** May be called only from the js_body_filter function. * * @since 0.5.2 */ done(): void; /** * Writes a string to the error log on the error level of logging. * @param message Message to log. */ error(message: NjsStringOrBuffer): void; /** * Finishes sending a response to the client. */ finish(): void; /** * Incoming headers object. */ readonly headersIn: NginxHeadersIn; /** * Outgoing headers object. */ readonly headersOut: NginxHeadersOut; /** * HTTP protocol version. */ readonly httpVersion: string; /** * Performs an internal redirect to the specified uri. * If the uri starts with the “@” prefix, it is considered a named location. * The actual redirect happens after the handler execution is completed. * Since 0.7.4, the method accepts escaped URIs. * @param uri Location to redirect to. */ internalRedirect(uri: NjsStringOrBuffer): void; /** * Writes a string to the error log on the info level of logging. * @param message Message to log. */ log(message: NjsStringOrBuffer): void; /** * HTTP method. */ readonly method: string; /** * Parent for subrequest object. */ readonly parent?: NginxHTTPRequest; /** * An array of key-value pairs exactly as they were received from the client. * @since 0.4.1 */ readonly rawHeadersIn: [NjsFixedSizeArray<2, string>]; /** * An array of key-value pairs of response headers. * Header field names are not converted to lower case, duplicate field values are not merged. * @since 0.4.1 */ readonly rawHeadersOut: [NjsFixedSizeArray<2, string>]; /** * Client address. */ readonly remoteAddress: string; /** * Client request body if it has not been written to a temporary file. * To ensure that the client request body is in memory, its size should be * limited by client_max_body_size, and a sufficient buffer size should be set * using client_body_buffer_size. The property is available only in the js_content directive. * * @since 0.5.0 */ readonly requestBuffer?: Buffer; /** * The same as `requestBuffer`, but returns a string. * * **Warning:** It may convert bytes invalid in UTF-8 encoding into the replacement character. * * @see requestBuffer * @since 0.5.0 */ readonly requestText?: string; /** * The same as `requestBuffer`, but returns a string. * * **Warning:** It may convert bytes invalid in UTF-8 encoding into the replacement character. * * @see requestBuffer * @see requestText * @deprecated Use `requestText` or `requestBuffer` instead. */ readonly requestBody?: string; /** * Subrequest response body. The size of response body is limited by * the subrequest_output_buffer_size directive. * * @since 0.5.0 */ readonly responseBuffer?: Buffer; /** * The same as `responseBuffer`, but returns a string. * * **Warning:** It may convert bytes invalid in UTF-8 encoding into the replacement character. * * @see responseBuffer */ readonly responseText?: string; /** * The same as `responseBuffer`, but returns a string. * * **Warning:** It may convert bytes invalid in UTF-8 encoding into the replacement character. * * @see responseBuffer * @see responseText * @deprecated Use `responseText` or `responseBuffer` instead. */ readonly responseBody?: string; /** * Sends the entire response with the specified status to the client. * It is possible to specify either a redirect URL (for codes 301, 302, 303, 307, and 308) * or the response body text (for other codes) as the second argument. * @param status Respose status code. * @param body Respose body. */ return(status: number, body?: NjsStringOrBuffer): void; /** * Sends a part of the response body to the client. */ send(part: NjsStringOrBuffer): void; /** * Adds data to the chain of data chunks to be forwarded to the next body filter. * The actual forwarding happens later, when the all the data chunks of the current * chain are processed. * * **Warning:** May be called only from the js_body_filter function. * * @since 0.5.2 * @param data Data to send. * @param options Object used to override nginx buffer flags derived from * an incoming data chunk buffer. */ sendBuffer(data: NjsStringOrBuffer, options?: NginxHTTPSendBufferOptions): void; /** * Sends the HTTP headers to the client. */ sendHeader(): void; /** * Respose status code. */ status: number; /** * Creates a subrequest with the given uri and options. * A subrequest shares its input headers with the client request. * To send headers different from original headers to a proxied server, * the proxy_set_header directive can be used. To send a completely new * set of headers to a proxied server, the proxy_pass_request_headers directive can be used. * @param uri Subrequest location. * @param options Subrequest options. * @param callback Completion callback. */ subrequest(uri: NjsStringOrBuffer, options: NginxSubrequestOptions & { detached: true }): void; subrequest(uri: NjsStringOrBuffer, options?: NginxSubrequestOptions | string): Promise; subrequest(uri: NjsStringOrBuffer, options: NginxSubrequestOptions & { detached?: false } | string, callback:(reply:NginxHTTPRequest) => void): void; subrequest(uri: NjsStringOrBuffer, callback:(reply:NginxHTTPRequest) => void): void; /** * Current URI in request, normalized. */ readonly uri: string; /** * nginx variables as Buffers. * * @since 0.5.0 * @see variables */ readonly rawVariables: NginxRawVariables; /** * nginx variables as strings. * * After 0.8.5 bytes invalid in UTF-8 encoding are converted into the replacement characters. * * @see rawVariables */ readonly variables: NginxVariables; /** * Writes a string to the error log on the warn level of logging. * @param message Message to log. */ warn(message: NjsStringOrBuffer): void; } /** * NginxPeriodicSession object is available as the first argument in the js_periodic handler. * @since 0.8.1 */ interface NginxPeriodicSession { /** * nginx variables as Buffers. * * @see variables */ readonly rawVariables: NginxRawVariables; /** * nginx variables as strings. * * **Warning:** Bytes invalid in UTF-8 encoding may be converted into the replacement character. * * @see rawVariables */ readonly variables: NginxVariables; }