import { RSocketConfig } from '../config/rsocket-config';
import { ErrorCode, Frame, FrameType } from "./frame";
import { Payload } from "./payload";
export declare class FrameBuilder {
    protected buffer: ArrayBuffer;
    protected view: DataView;
    protected writerIndex: number;
    protected constructor(initialBufferSize?: number);
    streamId(streamId: number): this;
    static setup(): SetupFrameBuilder;
    static keepalive(): KeepaliveFrameBuilder;
    static cancel(): CancelFrameBuilder;
    static requestResponse(): RequestResponseFrameBuilder;
    static requestStream(): RequestStreamFrameBuilder;
    static requestFNF(): RequestFNFFrameBuilder;
    static payload(): PayloadFrameBuilder;
    static error(): ErrorFrameBuilder;
    static requestN(): RequestNFrameBuilder;
    build(): Frame[];
    protected setFrameType(type: FrameType): void;
    protected requireMinFreeBytes(bytes: number): void;
    protected flagMetadataPresent(): FrameBuilder;
    protected setRequests(requests: number): void;
}
export declare class SetupFrameBuilder extends FrameBuilder {
    constructor();
    buildFromConfig(config: RSocketConfig): Frame;
    flagMetadataPresent(): FrameBuilder;
    flagResumeEnable(): FrameBuilder;
    flagHonorsLease(): FrameBuilder;
    majorVersion(version: number): FrameBuilder;
    minorVersion(version: number): FrameBuilder;
    keepaliveTime(time: number): this;
    maxLifetime(time: number): this;
    resumeToken(token: Uint8Array): this;
    mimeType(mimeType: Uint8Array): void;
    payload(payload: Payload): void;
}
export declare class RequestOrPayloadBuilder extends FrameBuilder {
    protected _streamId: number;
    protected _complete: boolean;
    protected _fragments: RequestOrPayloadBuilder[];
    constructor(initialSize?: number);
    streamId(streamId: number): this;
    payload(data: Payload, fragmentationSize: any): this;
    build(): Frame[];
    directMetadataWrite(requiredSize: number, writeCall: (buffer: Uint8Array) => number): this;
    directDataWrite(requiredSize: number, writeCall: (buffer: Uint8Array) => number): this;
    flagFollows(): this;
}
export declare class KeepaliveFrameBuilder extends FrameBuilder {
    constructor();
    lastReceivedPosition(position: number): this;
    flagRespond(): this;
    data(data: Uint8Array): this;
}
export declare class CancelFrameBuilder extends FrameBuilder {
    constructor();
}
export declare class RequestResponseFrameBuilder extends RequestOrPayloadBuilder {
    constructor();
}
export declare class RequestStreamFrameBuilder extends RequestOrPayloadBuilder {
    constructor();
    requests(requests: number): this;
}
export declare class RequestFNFFrameBuilder extends RequestOrPayloadBuilder {
    constructor();
}
export declare class PayloadFrameBuilder extends RequestOrPayloadBuilder {
    constructor();
    flagComplete(): this;
    flagNext(): this;
}
export declare class ErrorFrameBuilder extends FrameBuilder {
    constructor();
    message(msg: string): this;
    errorCode(code: ErrorCode): this;
}
export declare class RequestNFrameBuilder extends FrameBuilder {
    constructor();
    requests(n: number): this;
}
