///
///
import { Logger } from 'ilp-logger';
import Long from 'long';
import { Duplex } from 'stream';
import { DataQueue } from './util/data-queue';
import { OffsetSorter } from './util/data-offset-sorter';
import { LongValue } from './util/long';
import { IlpPrepare } from 'ilp-packet';
export interface StreamOpts {
id: number;
isServer: boolean;
connectionId: string;
}
export interface SendOpts {
timeout?: number;
}
export interface ReceiveOpts {
timeout?: number;
}
export declare class DataAndMoneyStream extends Duplex {
readonly id: number;
_errorMessage?: string;
_remoteClosed: boolean;
_remoteReceiveMax: Long;
_remoteReceived: Long;
_remoteMaxOffset: number;
_sentEnd: boolean;
_remoteSentEnd: boolean;
protected log: Logger;
protected isServer: boolean;
protected _totalSent: Long;
protected _totalReceived: Long;
protected _sendMax: Long;
protected _receiveMax: Long;
protected _outgoingHeldAmount: Long;
protected _closed: boolean;
protected holds: {
[id: string]: Long;
};
protected _incomingData: OffsetSorter;
protected _outgoingData: DataQueue;
protected _outgoingDataToRetry: {
data: Buffer;
offset: number;
}[];
protected outgoingOffset: number;
protected _receipt?: Buffer;
protected emittedEnd: boolean;
protected emittedClose: boolean;
constructor(opts: StreamOpts);
get totalSent(): string;
get totalReceived(): string;
get sendMax(): string;
get receiveMax(): string;
get receipt(): Buffer | undefined;
isOpen(): boolean;
setSendMax(limit: LongValue): void;
setReceiveMax(limit: LongValue): void;
sendTotal(_limit: LongValue, opts?: SendOpts): Promise;
receiveTotal(_limit: LongValue, opts?: ReceiveOpts): Promise;
_getAmountStreamCanReceive(): Long;
_addToIncoming(amount: Long, prepare: IlpPrepare): void;
_getAmountAvailableToSend(): Long;
_holdOutgoing(holdId: string, maxAmount?: Long): Long;
_executeHold(holdId: string): void;
_cancelHold(holdId: string): void;
_final(callback: (error: Error | null | undefined) => void): void;
_destroy(error: Error | null, callback: (error: Error | null) => void): void;
_write(chunk: Buffer, encoding: string, callback: () => void): void;
_writev(chunks: {
chunk: Buffer;
encoding: string;
}[], callback: () => void): void;
_read(size: number): void;
_hasDataToSend(): boolean;
_getAvailableDataToSend(size: number): {
data: Buffer | undefined;
offset: number;
};
_resendOutgoingData(data: Buffer, offset: number): void;
_isDataBlocked(): number | undefined;
_getOutgoingOffsets(): {
current: number;
max: number;
};
_getIncomingOffsets(): {
max: number;
current: number;
maxAcceptable: number;
};
_pushIncomingData(data: Buffer, offset: number): void;
_remoteEnded(err?: Error): void;
_setReceipt(receipt: Buffer): void;
protected safeEmit(...args: Parameters): void;
}