aws-crt
Version:
NodeJS/browser bindings to the aws-c-* libraries
312 lines (311 loc) • 11.8 kB
TypeScript
/**
*
* A module containing support for creating http connections and making requests on them.
*
* @packageDocumentation
* @module http
* @mergeTarget
*/
import crt_native from './binding';
import { NativeResource } from "./native_resource";
import { ResourceSafe } from '../common/resource_safety';
import { ClientBootstrap, SocketOptions, TlsConnectionOptions, InputStream } from './io';
import { CommonHttpProxyOptions, HttpProxyAuthenticationType, HttpClientConnectionConnected, HttpClientConnectionError, HttpClientConnectionClosed, HttpStreamComplete, HttpStreamData, HttpStreamError } from '../common/http';
/** @internal */
export { HttpHeader } from '../common/http';
/** @internal */
export { HttpProxyAuthenticationType } from '../common/http';
import { BufferedEventEmitter } from '../common/event';
/**
* @category HTTP
*/
export declare type HttpHeaders = crt_native.HttpHeaders;
/**
* @category HTTP
*/
export declare const HttpHeaders: typeof crt_native.HttpHeaders;
/** @internal */
declare type nativeHttpRequest = crt_native.HttpRequest;
/** @internal */
declare const nativeHttpRequest: typeof crt_native.HttpRequest;
/**
* @category HTTP
*/
export declare class HttpRequest extends nativeHttpRequest {
constructor(method: string, path: string, headers?: HttpHeaders, body?: InputStream);
}
declare const HttpConnection_base: {
new (...args: any[]): {
_handle: any;
_super(handle: any): void;
native_handle(): any;
};
} & typeof BufferedEventEmitter;
/**
* Base class for HTTP connections
*
* @category HTTP
*/
export declare class HttpConnection extends HttpConnection_base implements ResourceSafe {
protected constructor(native_handle: any);
/**
* Close the connection.
* Shutdown is asynchronous. This call has no effect if the connection is already
* closing.
*/
close(): void;
/**
* Emitted when the connection is connected and ready to start streams
*
* @event
*/
static CONNECT: string;
/**
* Emitted when an error occurs on the connection
*
* @event
*/
static ERROR: string;
/**
* Emitted when the connection has completed
*
* @event
*/
static CLOSE: string;
on(event: 'connect', listener: HttpClientConnectionConnected): this;
on(event: 'error', listener: HttpClientConnectionError): this;
on(event: 'close', listener: HttpClientConnectionClosed): this;
}
/**
* Proxy connection types.
*
* The original behavior was to make a tunneling connection if TLS was used, and a forwarding connection if it was not.
* There are legitimate use cases for plaintext tunneling connections, and so the implicit behavior has now
* been replaced by this setting, with a default that maps to the old behavior.
*
* @category HTTP
*/
export declare enum HttpProxyConnectionType {
/**
* (Default for backwards compatibility). If Tls options are supplied then the connection will be a tunneling
* one, otherwise it will be a forwarding one.
*/
Legacy = 0,
/**
* Establish a forwarding-based connection with the proxy. Tls is not allowed in this case.
*/
Forwarding = 1,
/**
* Establish a tunneling-based connection with the proxy.
*/
Tunneling = 2
}
/**
* Proxy options for HTTP clients.
*
* @category HTTP
*/
export declare class HttpProxyOptions extends CommonHttpProxyOptions {
tls_opts?: TlsConnectionOptions | undefined;
connection_type?: HttpProxyConnectionType | undefined;
/**
*
* @param host_name Name of the proxy server to connect through
* @param port Port number of the proxy server to connect through
* @param auth_method Type of proxy authentication to use. Default is {@link HttpProxyAuthenticationType.None}
* @param auth_username Username to use when `auth_type` is {@link HttpProxyAuthenticationType.Basic}
* @param auth_password Password to use when `auth_type` is {@link HttpProxyAuthenticationType.Basic}
* @param tls_opts Optional TLS connection options for the connection to the proxy host.
* Must be distinct from the {@link TlsConnectionOptions} provided to
* the HTTP connection
* @param connection_type Optional Type of connection to make. If not specified,
* {@link HttpProxyConnectionType.Legacy} will be used.
*/
constructor(host_name: string, port: number, auth_method?: HttpProxyAuthenticationType, auth_username?: string, auth_password?: string, tls_opts?: TlsConnectionOptions | undefined, connection_type?: HttpProxyConnectionType | undefined);
/** @internal */
create_native_handle(): any;
}
/**
* Represents an HTTP connection from a client to a server
*
* @category HTTP
*/
export declare class HttpClientConnection extends HttpConnection {
protected bootstrap: ClientBootstrap | undefined;
protected socket_options: SocketOptions;
protected tls_opts?: TlsConnectionOptions | undefined;
private _on_setup;
private _on_shutdown;
/** Asynchronously establish a new HttpClientConnection.
* @param bootstrap Client bootstrap to use when initiating socket connection. Leave undefined to use the
* default system-wide bootstrap (recommended).
* @param host_name Host to connect to
* @param port Port to connect to on host
* @param socket_options Socket options
* @param tls_opts Optional TLS connection options
* @param proxy_options Optional proxy options
*/
constructor(bootstrap: ClientBootstrap | undefined, host_name: string, port: number, socket_options: SocketOptions, tls_opts?: TlsConnectionOptions | undefined, proxy_options?: HttpProxyOptions, handle?: any);
/**
* Create {@link HttpClientStream} to carry out the request/response exchange.
*
* NOTE: The stream sends no data until :meth:`HttpClientStream.activate()`
* is called. Call {@link HttpStream.activate} when you're ready for
* callbacks and events to fire.
* @param request - The HttpRequest to attempt on this connection
* @returns A new stream that will deliver events for the request
*/
request(request: HttpRequest): HttpClientStream;
}
declare const HttpStream_base: {
new (...args: any[]): {
_handle: any;
_super(handle: any): void;
native_handle(): any;
};
} & typeof BufferedEventEmitter;
/**
* Represents a single http message exchange (request/response) in HTTP/1.1. In H2, it may
* also represent a PUSH_PROMISE followed by the accompanying response.
*
* NOTE: Binding either the ready or response event will uncork any buffered events and start
* event delivery
*
* @category HTTP
*/
export declare class HttpStream extends HttpStream_base implements ResourceSafe {
readonly connection: HttpConnection;
protected constructor(native_handle: any, connection: HttpConnection);
/**
* Begin sending the request.
*
* The stream does nothing until this is called. Call activate() when you
* are ready for its callbacks and events to fire.
*/
activate(): void;
/**
* Closes and ends all communication on this stream. Called automatically after the 'end'
* event is delivered. Calling this manually is only necessary if you wish to terminate
* communication mid-request/response.
*/
close(): void;
/** @internal */
_on_body(data: ArrayBuffer): void;
/** @internal */
_on_complete(error_code: Number): void;
}
/**
* Listener signature for event emitted from an {@link HttpClientStream} when inline headers are delivered while communicating over H2
*
* @param headers the set of headers
*
* @category HTTP
*/
export declare type HttpStreamHeaders = (headers: HttpHeaders) => void;
/**
* Listener signature for event emitted from an {@link HttpClientStream} when the http response headers have arrived.
*
* @param status_code http response status code
* @param headers the response's set of headers
*
* @category HTTP
*/
export declare type HttpStreamResponse = (status_code: number, headers: HttpHeaders) => void;
/**
* Stream that sends a request and receives a response.
*
* Create an HttpClientStream with {@link HttpClientConnection.request}.
*
* NOTE: The stream sends no data until {@link HttpStream.activate} is called.
* Call {@link HttpStream.activate} when you're ready for callbacks and events to fire.
*
* @category HTTP
*/
export declare class HttpClientStream extends HttpStream {
readonly request: HttpRequest;
private response_status_code?;
constructor(native_handle: any, connection: HttpClientConnection, request: HttpRequest);
/**
* HTTP status code returned from the server.
* @return Either the status code, or undefined if the server response has not arrived yet.
*/
status_code(): Number | undefined;
/**
* Emitted when the http response headers have arrived.
*
* @event
*/
static RESPONSE: string;
/**
* Emitted when http response data is available.
*
* @event
*/
static DATA: string;
/**
* Emitted when an error occurs in stream processing
*
* @event
*/
static ERROR: string;
/**
* Emitted when the stream has completed
*
* @event
*/
static END: string;
/**
* Emitted when inline headers are delivered while communicating over H2
*
* @event
*/
static HEADERS: string;
on(event: 'response', listener: HttpStreamResponse): this;
on(event: 'data', listener: HttpStreamData): this;
on(event: 'error', listener: HttpStreamError): this;
on(event: 'end', listener: HttpStreamComplete): this;
on(event: 'headers', listener: HttpStreamHeaders): this;
/** @internal */
_on_response(status_code: Number, header_array: [string, string][]): void;
}
/**
* Creates, manages, and vends connections to a given host/port endpoint
*
* @category HTTP
*/
export declare class HttpClientConnectionManager extends NativeResource {
readonly bootstrap: ClientBootstrap | undefined;
readonly host: string;
readonly port: number;
readonly max_connections: number;
readonly initial_window_size: number;
readonly socket_options: SocketOptions;
readonly tls_opts?: TlsConnectionOptions | undefined;
readonly proxy_options?: HttpProxyOptions | undefined;
private connections;
/**
* @param bootstrap Client bootstrap to use when initiating socket connections. Leave undefined to use the
* default system-wide bootstrap (recommended).
* @param host Host to connect to
* @param port Port to connect to on host
* @param max_connections Maximum number of connections to pool
* @param initial_window_size Optional initial window size
* @param socket_options Socket options to use when initiating socket connections
* @param tls_opts Optional TLS connection options
* @param proxy_options Optional proxy options
*/
constructor(bootstrap: ClientBootstrap | undefined, host: string, port: number, max_connections: number, initial_window_size: number, socket_options: SocketOptions, tls_opts?: TlsConnectionOptions | undefined, proxy_options?: HttpProxyOptions | undefined);
/**
* Vends a connection from the pool
* @returns A promise that results in an HttpClientConnection. When done with the connection, return
* it via {@link release}
*/
acquire(): Promise<HttpClientConnection>;
/**
* Returns an unused connection to the pool
* @param connection - The connection to return
*/
release(connection: HttpClientConnection): void;
/** Closes all connections and rejects all pending requests */
close(): void;
}