import { ResultCode } from './result-code';
import { DownstreamFilter, DataId, QoS, StreamChunk } from './common';
import { RequestMessage, StreamMessage } from './message';
import { BaseTime, UpstreamOpen, UpstreamAbnormalClose, UpstreamResume, UpstreamNormalClose, DownstreamOpen, DownstreamAbnormalClose, DownstreamResume, DownstreamNormalClose } from './metadata';
/**
 * メタデータを表す型です。
 * @category Metadata
 */
export type Metadata = BaseTime | UpstreamOpen | UpstreamAbnormalClose | UpstreamResume | UpstreamNormalClose | DownstreamOpen | DownstreamAbnormalClose | DownstreamResume | DownstreamNormalClose;
/**
 * アップストリームの情報です。
 * @category Downstream
 */
export declare class UpstreamInfo {
    /** セッションID。 */
    sessionId: string;
    /** ストリームID。 */
    streamId: string;
    /** 送信元ノードID。 */
    sourceNodeId: string;
    constructor(init: {
        sessionId: UpstreamInfo['sessionId'];
        streamId: UpstreamInfo['streamId'];
        sourceNodeId: UpstreamInfo['sourceNodeId'];
    });
    /** アップストリーム情報の文字列表現を取得します。 */
    toString(): string;
    /**
     * UpstreamInfoを再帰的に複製します。
     */
    deepCopy(): UpstreamInfo;
}
export declare class DownstreamOpenRequestExtensionFields {
}
export declare class DownstreamOpenResponseExtensionFields {
}
export declare class DownstreamResumeRequestExtensionFields {
}
export declare class DownstreamResumeResponseExtensionFields {
}
export declare class DownstreamCloseRequestExtensionFields {
}
export declare class DownstreamCloseResponseExtensionFields {
}
export declare class DownstreamChunkExtensionFields {
}
export declare class DownstreamChunkAckExtensionFields {
}
export declare class DownstreamChunkAckCompleteExtensionFields {
}
export declare class DownstreamMetadataExtensionFields {
}
export declare class DownstreamMetadataAckExtensionFields {
}
export declare class DownstreamChunkResultExtensionFields {
}
export declare class DownstreamChunkResult {
    streamIdOfUpstream: string;
    sequenceNumberInUpstream: number;
    resultCode: ResultCode;
    resultString: string;
    extensionFields?: DownstreamChunkResultExtensionFields;
    constructor(init: {
        streamIdOfUpstream: DownstreamChunkResult['streamIdOfUpstream'];
        sequenceNumberInUpstream: DownstreamChunkResult['sequenceNumberInUpstream'];
        resultCode: DownstreamChunkResult['resultCode'];
        resultString: DownstreamChunkResult['resultString'];
        extensionFields?: DownstreamChunkResult['extensionFields'];
    });
}
export declare class DownstreamOpenRequest extends RequestMessage {
    desiredStreamIdAlias: number;
    downstreamFilters: DownstreamFilter[];
    expiryInterval: number;
    dataIdAliases: Record<number, DataId>;
    qos: QoS;
    omitEmptyChunk: boolean;
    extensionFields?: DownstreamOpenRequestExtensionFields;
    constructor(init: {
        requestId: DownstreamOpenRequest['requestId'];
        desiredStreamIdAlias: DownstreamOpenRequest['desiredStreamIdAlias'];
        downstreamFilters: DownstreamOpenRequest['downstreamFilters'];
        expiryInterval: DownstreamOpenRequest['expiryInterval'];
        dataIdAliases: DownstreamOpenRequest['dataIdAliases'];
        qos: DownstreamOpenRequest['qos'];
        omitEmptyChunk: DownstreamOpenRequest['omitEmptyChunk'];
        extensionFields?: DownstreamOpenRequest['extensionFields'];
    });
}
export declare class DownstreamOpenResponse extends RequestMessage {
    assignedStreamId: string;
    serverTime: bigint;
    resultCode: ResultCode;
    resultString: string;
    extensionFields?: DownstreamOpenResponseExtensionFields;
    constructor(init: {
        requestId: DownstreamOpenResponse['requestId'];
        assignedStreamId: DownstreamOpenResponse['assignedStreamId'];
        serverTime: DownstreamOpenResponse['serverTime'];
        resultCode: DownstreamOpenResponse['resultCode'];
        resultString: DownstreamOpenResponse['resultString'];
        extensionFields?: DownstreamOpenResponse['extensionFields'];
    });
}
export declare class DownstreamResumeRequest extends RequestMessage {
    streamId: string;
    desiredStreamIdAlias: number;
    extensionFields?: DownstreamResumeRequestExtensionFields;
    constructor(init: {
        requestId: DownstreamResumeRequest['requestId'];
        streamId: DownstreamResumeRequest['streamId'];
        desiredStreamIdAlias: DownstreamResumeRequest['desiredStreamIdAlias'];
        extensionFields?: DownstreamResumeRequest['extensionFields'];
    });
}
export declare class DownstreamResumeResponse extends RequestMessage {
    resultCode: ResultCode;
    resultString: string;
    extensionFields?: DownstreamResumeResponseExtensionFields;
    constructor(init: {
        requestId: DownstreamResumeResponse['requestId'];
        resultCode: DownstreamResumeResponse['resultCode'];
        resultString: DownstreamResumeResponse['resultString'];
        extensionFields?: DownstreamResumeResponse['extensionFields'];
    });
}
export declare class DownstreamCloseRequest extends RequestMessage {
    streamId: string;
    extensionFields?: DownstreamCloseRequestExtensionFields;
    constructor(init: {
        requestId: DownstreamCloseRequest['requestId'];
        streamId: DownstreamCloseRequest['streamId'];
        extensionFields?: DownstreamCloseRequest['extensionFields'];
    });
}
export declare class DownstreamCloseResponse extends RequestMessage {
    resultCode: ResultCode;
    resultString: string;
    extensionFields?: DownstreamCloseResponseExtensionFields;
    constructor(init: {
        requestId: DownstreamCloseResponse['requestId'];
        resultCode: DownstreamCloseResponse['resultCode'];
        resultString: DownstreamCloseResponse['resultString'];
        extensionFields?: DownstreamCloseResponse['extensionFields'];
    });
}
export type UpstreamOrAlias = UpstreamInfo | number;
export declare class DownstreamChunk extends StreamMessage {
    upstreamOrAlias: UpstreamOrAlias;
    streamChunk: StreamChunk;
    extensionFields?: DownstreamChunkExtensionFields;
    constructor(init: {
        streamIdAlias: DownstreamChunk['streamIdAlias'];
        upstreamOrAlias: DownstreamChunk['upstreamOrAlias'];
        streamChunk: DownstreamChunk['streamChunk'];
        extensionFields?: DownstreamChunk['extensionFields'];
    });
}
export declare class DownstreamChunkAck extends StreamMessage {
    ackId: number;
    results: DownstreamChunkResult[];
    upstreamAliases: Record<number, UpstreamInfo>;
    dataIdAliases: Record<number, DataId>;
    extensionFields?: DownstreamChunkAckExtensionFields;
    constructor(init: {
        streamIdAlias: DownstreamChunkAck['streamIdAlias'];
        ackId: DownstreamChunkAck['ackId'];
        results: DownstreamChunkAck['results'];
        upstreamAliases: DownstreamChunkAck['upstreamAliases'];
        dataIdAliases: DownstreamChunkAck['dataIdAliases'];
        extensionFields?: DownstreamChunkAck['extensionFields'];
    });
}
export declare class DownstreamChunkAckComplete extends StreamMessage {
    ackId: number;
    resultCode: ResultCode;
    resultString: string;
    extensionFields?: DownstreamChunkAckCompleteExtensionFields;
    constructor(init: {
        streamIdAlias: DownstreamChunkAckComplete['streamIdAlias'];
        ackId: DownstreamChunkAckComplete['ackId'];
        resultCode: DownstreamChunkAckComplete['resultCode'];
        resultString: DownstreamChunkAckComplete['resultString'];
        extensionFields?: DownstreamChunkAckComplete['extensionFields'];
    });
}
export declare class DownstreamMetadata extends RequestMessage {
    metadata: Metadata;
    sourceNodeId: string;
    streamIdAlias: number;
    extensionFields?: DownstreamMetadataExtensionFields;
    constructor(init: {
        requestId: DownstreamMetadata['requestId'];
        metadata: DownstreamMetadata['metadata'];
        sourceNodeId: DownstreamMetadata['sourceNodeId'];
        streamIdAlias: DownstreamMetadata['streamIdAlias'];
        extensionFields?: DownstreamMetadata['extensionFields'];
    });
}
export declare class DownstreamMetadataAck extends RequestMessage {
    resultCode: ResultCode;
    resultString: string;
    extensionFields?: DownstreamMetadataAckExtensionFields;
    constructor(init: {
        requestId: DownstreamMetadataAck['requestId'];
        resultCode: DownstreamMetadataAck['resultCode'];
        resultString: DownstreamMetadataAck['resultString'];
        extensionFields?: DownstreamMetadataAck['extensionFields'];
    });
}
