import { Writable } from "stream";
import type { WritableOptions } from "stream";
interface IResponseStream {
    cork: Writable["cork"];
    /**
     * Do not use. This may lead to unexcepted result in AWS Lambda Runtime.
     * @deprecated
     */
    destroy: Writable["destroy"];
    end: Writable["end"];
    uncork: Writable["uncork"];
    write: Writable["write"];
    addListener: Writable["addListener"];
    emit: Writable["emit"];
    eventNames: Writable["eventNames"];
    getMaxListeners: Writable["getMaxListeners"];
    listenerCount: Writable["listenerCount"];
    listeners: Writable["listeners"];
    off: Writable["off"];
    on: Writable["on"];
    once: Writable["once"];
    prependListener: Writable["prependListener"];
    prependOnceListener: Writable["prependOnceListener"];
    rawListeners: Writable["rawListeners"];
    removeAllListeners: Writable["removeAllListeners"];
    removeListener: Writable["removeListener"];
    setMaxListeners: Writable["setMaxListeners"];
    /**
     * @param {any} contentType must be a string or implement toString()
     * @throws Error
     */
    setContentType: (contentType: any) => void;
    writable: boolean;
    readonly writableEnded: boolean;
    readonly writableFinished: boolean;
    readonly writableHighWaterMark: number;
    readonly writableLength: number;
    readonly writableObjectMode: boolean;
    readonly writableNeedDrain: boolean;
    readonly writableCorked: number;
    destroyed: boolean;
    /**
     * used by AWS inside HttpResponseStream.from function
     * @internal
     */
    _onBeforeFirstWrite?: (write: Writable["write"]) => any;
}
interface IStreamableHandlerContext {
    callbackwaitsforemptyeventloop: boolean;
    functionVersion: string;
    functionName: string;
    memoryLimitInMB: string;
    logGroupName: string;
    logStreamName: string;
    clientContext: any;
    identity: any;
    invokedFunctionArn: string;
    awsRequestId: string;
    getRemainingTimeInMillis: () => number;
}
export type StreamableHandler = (event: any, responseStream: IResponseStream, context?: IStreamableHandlerContext) => Promise<any | void>;
interface IMetadata {
    statusCode?: number;
    headers?: {
        [key: string]: string;
    };
    cookies?: string[];
    body?: string | Buffer;
    isBase64Encoded?: boolean;
}
export declare class ResponseStream extends Writable {
    #private;
    _onBeforeFirstWrite?: (write: Writable["write"]) => any;
    constructor(opts: Partial<WritableOptions>);
    setContentType: (contentType: any) => void;
}
export interface IHttpResponseStream {
    /**
     * @param {any} metadata http proxy integration response object.
     *
     * This could also be 'any' byte to be written before all write.() executions.
     *
     * Metadata will be wrapped into JSON.stringify().
     *
     *  `{statusCode: 404, cookies: ["hello=world"]}`
     *
     *
     * @throws Error
     */
    from: (responseStream: IResponseStream, metadata: IMetadata) => IResponseStream;
}
export declare class HttpResponseStream {
    static from: (responseStream: IResponseStream, metadata: IMetadata) => IResponseStream;
}
export {};
