export class FlowController {
    static kSessionFlowControlMultiplier: number;
    /**
     * @param {{tocontrol: FlowControlable
     * sendWindowOffset: number,
     * receiveWindowOffset: number,
     * shouldAutoTuneReceiveWindow: boolean
     * receiveWindowSizeLimit: number,
     * sessionFlowController?: FlowController}} arg
     */
    constructor({ tocontrol, sendWindowOffset, receiveWindowOffset, receiveWindowSizeLimit, shouldAutoTuneReceiveWindow, sessionFlowController }: {
        tocontrol: FlowControlable;
        sendWindowOffset: number;
        receiveWindowOffset: number;
        shouldAutoTuneReceiveWindow: boolean;
        receiveWindowSizeLimit: number;
        sessionFlowController?: FlowController;
    });
    tocontrol: import("../types").FlowControlable;
    bytesSent: bigint;
    sendWindowOffset: bigint;
    bytesConsumed: bigint;
    highestReceivedByteOffset: bigint;
    receiveWindowOffset: bigint;
    receiveWindowSize: bigint;
    receiveWindowSizeLimit: bigint;
    autoTuneReceiveWindow: boolean;
    sessionFlowController: FlowController | undefined;
    lastBlockedSendWindowOffset: bigint;
    prevWindowUpdateTime: number | undefined;
    /**
     * @param {Number} bytesConsumed
     */
    addBytesConsumed(bytesConsumed: number): void;
    /**
     * @param {Number} increaseOffset
     */
    updateHighestReceivedOffset(increaseOffset: number): boolean;
    /**
     * @param {Number} nbytesSent
     */
    addBytesSent(nbytesSent: number): void;
    flowControlViolation(): boolean;
    maybeIncreaseMaxWindowSize(): void;
    increaseWindowSize(): void;
    windowUpdateThreshold(): bigint;
    maybeSendWindowUpdate(): void;
    /**
     * @param {bigint} availableWindow
     */
    updateReceiveWindowOffsetAndSendWindowUpdate(availableWindow: bigint): void;
    maybeSendBlocked(): void;
    /**
     * @param {bigint} newSendWindowOffset
     */
    updateSendWindowOffset(newSendWindowOffset: bigint): boolean;
    /**
     * @param {bigint} windowSize
     */
    ensureWindowAtLeast(windowSize: bigint): void;
    isBlocked(): boolean;
    sendWindowSize(): bigint;
    /**
     * @param {bigint} size
     */
    updateReceiveWindowSize(size: bigint): void;
    sendWindowUpdate(): void;
}
export type FlowControlable = import('../types').FlowControlable;
//# sourceMappingURL=flowcontroller.d.ts.map