import type { ConsumerOptsBuilder, Views } from "./types";
import { ConsumerAPI, ConsumerInfo, ConsumerInfoable, ConsumerOpts, Destroyable, JetStreamClient, JetStreamOptions, JetStreamPublishOptions, JetStreamPullSubscription, JetStreamSubscription, JetStreamSubscriptionOptions, JsMsg, Msg, NatsConnection, PubAck, PullOptions } from "./types";
import { BaseApiClient } from "./jsbaseclient_api";
import { TypedSubscription, TypedSubscriptionOptions } from "./typedsub";
import { IngestionFilterFn, QueuedIterator } from "./queued_iterator";
import { IdleHeartbeat } from "./idleheartbeat";
export interface JetStreamSubscriptionInfoable {
    info: JetStreamSubscriptionInfo | null;
}
export declare class JetStreamClientImpl extends BaseApiClient implements JetStreamClient {
    api: ConsumerAPI;
    constructor(nc: NatsConnection, opts?: JetStreamOptions);
    get apiPrefix(): string;
    get views(): Views;
    publish(subj: string, data?: Uint8Array, opts?: Partial<JetStreamPublishOptions>): Promise<PubAck>;
    pull(stream: string, durable: string, expires?: number): Promise<JsMsg>;
    fetch(stream: string, durable: string, opts?: Partial<PullOptions>): QueuedIterator<JsMsg>;
    pullSubscribe(subject: string, opts?: ConsumerOptsBuilder | Partial<ConsumerOpts>): Promise<JetStreamPullSubscription>;
    subscribe(subject: string, opts?: ConsumerOptsBuilder | Partial<ConsumerOpts>): Promise<JetStreamSubscription>;
    _processOptions(subject: string, opts?: ConsumerOptsBuilder | Partial<ConsumerOpts>): Promise<JetStreamSubscriptionInfo>;
    _buildTypedSubscriptionOpts(jsi: JetStreamSubscriptionInfo): TypedSubscriptionOptions<JsMsg>;
    _maybeCreateConsumer(jsi: JetStreamSubscriptionInfo): Promise<void>;
    static ingestionFn(ordered: boolean): IngestionFilterFn<JsMsg>;
}
export declare class JetStreamSubscriptionImpl extends TypedSubscription<JsMsg> implements JetStreamSubscriptionInfoable, Destroyable, ConsumerInfoable {
    js: BaseApiClient;
    monitor: IdleHeartbeat | null;
    constructor(js: BaseApiClient, subject: string, opts: JetStreamSubscriptionOptions);
    set info(info: JetStreamSubscriptionInfo | null);
    get info(): JetStreamSubscriptionInfo | null;
    _resetOrderedConsumer(sseq: number): void;
    _maybeSetupHbMonitoring(): void;
    _setupHbMonitoring(millis: number, cancelAfter?: number): void;
    _checkHbOrderConsumer(msg: Msg): boolean;
    _checkOrderedConsumer(jm: JsMsg): boolean;
    destroy(): Promise<void>;
    consumerInfo(): Promise<ConsumerInfo>;
}
interface JetStreamSubscriptionInfo extends ConsumerOpts {
    api: BaseApiClient;
    last: ConsumerInfo;
    attached: boolean;
    deliver: string;
    bind: boolean;
    "ordered_consumer_sequence": {
        "delivery_seq": number;
        "stream_seq": number;
    };
    "flow_control": {
        "heartbeat_count": number;
        "fc_count": number;
        "consumer_restarts": number;
    };
}
export {};
