import { MessageEvent } from '@nestjs/common/interfaces';
import { IncomingMessage, OutgoingHttpHeaders } from 'http';
import { Transform } from 'stream';
export type AdditionalHeaders = Record<string, string[] | string | number | undefined>;
interface ReadHeaders {
    getHeaders?(): AdditionalHeaders;
}
interface WriteHeaders {
    writableEnded?: boolean;
    writeHead?(statusCode: number, reasonPhrase?: string, headers?: OutgoingHttpHeaders): void;
    writeHead?(statusCode: number, headers?: OutgoingHttpHeaders): void;
    flushHeaders?(): void;
}
export type WritableHeaderStream = NodeJS.WritableStream & WriteHeaders;
export type HeaderStream = WritableHeaderStream & ReadHeaders;
/**
 * Adapted from https://raw.githubusercontent.com/EventSource/node-ssestream
 * Transforms "messages" to W3C event stream content.
 * See https://html.spec.whatwg.org/multipage/server-sent-events.html
 * A message is an object with one or more of the following properties:
 * - data (String or object, which gets turned into JSON)
 * - type
 * - id
 * - retry
 *
 * If constructed with a HTTP Request, it will optimise the socket for streaming.
 * If this stream is piped to an HTTP Response, it will set appropriate headers.
 */
export declare class SseStream extends Transform {
    private lastEventId;
    private _headersCommitted;
    private _destination;
    private _statusCode;
    private _additionalHeaders;
    constructor(req?: IncomingMessage);
    get headersCommitted(): boolean;
    pipe<T extends WritableHeaderStream>(destination: T, options?: {
        additionalHeaders?: AdditionalHeaders;
        statusCode?: number;
        end?: boolean;
    }): T;
    /**
     * Writes SSE headers to the destination if they have not been sent yet.
     * Headers are deferred until the first message so that, if the observable
     * errors before any data is emitted, the HTTP status code can still be
     * changed by an exception filter.
     */
    commitHeaders(): void;
    _transform(message: MessageEvent, encoding: string, callback: (error?: Error | null, data?: any) => void): void;
    /**
     * Calls `.write` but handles the drain if needed
     */
    writeMessage(message: MessageEvent, cb: (error: Error | null | undefined) => void): void;
}
export {};
