import { Message } from "./message.js";
export type SubscriptionOptions = {
    query: Record<string, string>;
    headers: Record<string, string>;
};
export interface Client {
    Id(): string;
    Channel(): Channel<Message>;
    Subscriptions(...prefixes: string[]): Record<string, SubscriptionOptions>;
    Subscribe(...subs: string[]): void;
    Unsubscribe(...subs: string[]): void;
    HasSubscription(sub: string): boolean;
    Set(key: string, value: unknown): void;
    Unset(key: string): void;
    Get(key: string): unknown;
    Discard(): void;
    IsDiscarded(): boolean;
    Send(m: Message): void;
}
export declare class DefaultClient implements Client {
    #private;
    Id(): string;
    Channel(): Channel<Message>;
    Subscriptions(...prefixes: string[]): Record<string, SubscriptionOptions>;
    Subscribe(...subs: string[]): void;
    Unsubscribe(...subs: string[]): void;
    HasSubscription(sub: string): boolean;
    Set(key: string, value: unknown): void;
    Unset(key: string): void;
    Get(key: string): unknown;
    Discard(): void;
    IsDiscarded(): boolean;
    Send(m: Message): void;
}
export declare class Channel<T> implements AsyncIterable<T> {
    #private;
    send(value: T): void;
    close(): void;
    [Symbol.asyncIterator](): AsyncIterator<T>;
}
