aws-crt
Version:
NodeJS bindings to the aws-c-* libraries
254 lines (228 loc) • 9.39 kB
TypeScript
/*
* Copyright 2010-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
import { InputStream } from "./io";
import { AwsSigningAlgorithm } from "./auth";
import { HttpHeader, HttpHeaders as CommonHttpHeaders } from "../common/http";
type NativeHandle = any;
type StringLike = string | ArrayBuffer | DataView;
/* common */
export function native_memory(): number;
export function native_memory_dump(): void;
export function error_code_to_string(error_code: number): string;
export function error_code_to_name(error_code: number): string;
/* IO */
export function io_logging_enable(log_level: number): void;
export function is_alpn_available(): boolean;
/* wraps aws_client_bootstrap #TODO: Wrap with ClassBinder */
export function io_client_bootstrap_new(): NativeHandle;
/* wraps aws_tls_context #TODO: Wrap with ClassBinder */
export function io_tls_ctx_new(
min_tls_version: number,
ca_filepath?: StringLike,
ca_dirpath?: StringLike,
certificate_authority?: StringLike,
alpn_list?: StringLike,
certificate_filepath?: StringLike,
certificate?: StringLike,
private_key_filepath?: StringLike,
private_key?: StringLike,
pkcs12_filepath?: StringLike,
pkcs12_password?: StringLike,
verify_peer?: boolean,
): NativeHandle;
/* wraps aws_tls_connection_options #TODO: Wrap with ClassBinder */
export function io_tls_connection_options_new(
tls_ctx: NativeHandle,
server_name?: StringLike,
alpn_list?: StringLike
): NativeHandle;
/* wraps aws_socket_options #TODO: Wrap with ClassBinder */
export function io_socket_options_new(
type: number,
domain: number,
connect_timeout_ms: number,
keep_alive_interval_sec: number,
keep_alive_timeout_sec: number,
keep_alive_max_failed_probes: number,
keepalive: boolean
): NativeHandle;
/* wraps aws_input_stream #TODO: Wrap with ClassBinder */
export function io_input_stream_new(capacity: number): NativeHandle;
export function io_input_stream_append(stream: NativeHandle, data?: Buffer): void;
/* Crypto */
/* wraps aws_hash structures #TODO: Wrap with ClassBinder */
export function hash_md5_new(): void;
export function hash_sha256_new(): void;
export function hash_update(handle: NativeHandle, data: StringLike): void;
export function hash_digest(handle: NativeHandle, truncate_to?: number): DataView;
export function hash_md5_compute(data: StringLike, truncate_to?: number): DataView;
export function hash_sha256_compute(data: StringLike, truncate_to?: number): DataView;
export function hmac_md5_new(secret: StringLike): void;
export function hmac_sha256_new(secret: StringLike): void;
export function hmac_update(handle: NativeHandle, data: StringLike): void;
export function hmac_digest(handle: NativeHandle, truncate_to?: number): DataView;
export function hmac_md5_compute(secret: StringLike, data: StringLike, truncate_to?: number): DataView;
export function hmac_sha256_compute(secret: StringLike, data: StringLike, truncate_to?: number): DataView;
/* MQTT Client */
export function mqtt_client_new(client_bootstrap: NativeHandle): NativeHandle;
/* MQTT Client Connection #TODO: Wrap with ClassBinder */
export type mqtt_on_connect = (error_code: number, return_code: number, session_present: boolean) => void;
export function mqtt_client_connection_new(
client: NativeHandle,
on_interrupted?: (error_code: number) => void,
on_resumed?: (return_code: number, session_present: boolean) => void,
): NativeHandle;
export function mqtt_client_connection_connect(
connection: NativeHandle,
client_id: StringLike,
server_name: StringLike,
port: number,
tls_ctx?: NativeHandle,
socket_options?: NativeHandle,
keep_alive_time?: number,
timeout?: number,
will?: { topic: StringLike, payload: String | Object | DataView, qos: number, retain: boolean },
username?: StringLike,
password?: StringLike,
use_websocket?: boolean,
proxy_options?: NativeHandle,
clean_session?: boolean,
on_connect?: mqtt_on_connect,
websocket_handshake_transform?: (request: any, done: (error_code?: number) => void) => void,
): void;
export function mqtt_client_connection_reconnect(connection: NativeHandle, on_connect: mqtt_on_connect): void;
export function mqtt_client_connection_publish(
connection: NativeHandle,
topic: StringLike,
payload: StringLike,
qos: number,
retain: boolean,
on_publish?: (packet_id: number, error_code: number) => void,
): void;
export function mqtt_client_connection_subscribe(
connection: NativeHandle,
topic: StringLike,
qos: number,
on_publish?: (topic: string, payload: ArrayBuffer) => void,
on_suback?: (packet_id: number, topic: string, qos: any, error_code: number) => void,
): void;
export function mqtt_client_connection_on_message(
connection: NativeHandle,
on_publish?: (topic: string, payload: Buffer) => void
): void;
export function mqtt_client_connection_unsubscribe(
connection: NativeHandle,
topic: StringLike,
on_unsuback?: (packet_id: number, error_code: number) => void,
): void;
export function mqtt_client_connection_disconnect(connection: NativeHandle, on_disconnect?: () => void): void;
export function mqtt_client_connection_close(connection: NativeHandle): void;
/* HTTP */
/* wraps aws_http_proxy_options #TODO: Wrap with ClassBinder */
export function http_proxy_options_new(
host_name: StringLike,
port: number,
auth_method?: number,
username?: StringLike,
password?: StringLike,
tls_options?: NativeHandle,
): NativeHandle;
/* wraps aws_http_connection #TODO: Wrap with ClassBinder */
export function http_connection_new(
bootstrap: NativeHandle,
on_setup: (handle: any, error_code: number) => void,
on_shutdown: (handle: any, error_code: number) => void,
host_name: StringLike,
port: number,
socket_options?: NativeHandle,
tls_options?: NativeHandle,
proxy_options?: NativeHandle,
): NativeHandle;
export function http_connection_close(connection: NativeHandle): void;
/* wraps aws_http_stream #TODO: Wrap with ClassBinder */
export function http_stream_new(
stream: NativeHandle,
request: HttpRequest,
on_complete: (error_code: Number) => void,
on_response: (status_code: Number, headers: HttpHeader[]) => void,
on_body: (data: ArrayBuffer) => void,
): NativeHandle;
export function http_stream_close(stream: NativeHandle): void;
/* wraps aws_http_connection_manager #TODO: Wrap with ClassBinder */
export function http_connection_manager_new(
bootstrap: NativeHandle,
host: StringLike,
port: number,
max_connections: number,
window_size: number,
socket_options?: NativeHandle,
tls_options?: NativeHandle,
proxy_options?: NativeHandle,
on_shutdown?: () => void,
): NativeHandle;
export function http_connection_manager_close(manager: NativeHandle): void;
export function http_connection_manager_acquire(
manager: NativeHandle,
on_acquired: (handle: any, error_code: number) => void,
): void;
export function http_connection_manager_release(manager: NativeHandle, connection: NativeHandle): void;
export class HttpHeaders implements CommonHttpHeaders {
constructor(headers?: HttpHeader[]);
public readonly length: number;
public get(key: string): string;
public get_values(key: string): string[];
public get_index(index: number): HttpHeader;
public [Symbol.iterator](): Iterator<HttpHeader>;
public add(key: string, value: string): void;
public set(key: string, value: string): void;
public remove(key: string): void;
public remove_value(key: string, value: string): void;
public clear(): void;
public _flatten(): HttpHeader[];
}
export class HttpRequest {
constructor(method: string, path: string, headers?: HttpHeaders, body?: InputStream);
public method: string;
public path: string;
public readonly headers: HttpHeaders;
public body: InputStream;
}
/* Auth */
export class AwsCredentialsProvider {
protected constructor();
static newDefault(bootstrap: NativeHandle): AwsCredentialsProvider;
static newStatic(access_key: StringLike, secret_key: StringLike, session_token?: StringLike): AwsCredentialsProvider;
}
export enum AwsBodySigningConfigType {
AWS_BODY_SIGNING_OFF = 0,
AWS_BODY_SIGNING_ON = 1,
AWS_BODY_SIGNING_UNSIGNED_PAYLOAD = 2,
}
export interface AwsSigningConfig {
algorithm: AwsSigningAlgorithm;
provider: AwsCredentialsProvider;
region: string;
service?: string;
date?: Date;
param_blacklist?: string[];
use_double_uri_encode?: boolean;
should_normalize_uri_path?: boolean;
body_signing_type?: AwsBodySigningConfigType;
}
export function aws_sign_request(
request: HttpRequest,
config: AwsSigningConfig,
on_complete: (error_code: number) => void
): void;