import type { AMQPProperties } from "./amqp-properties.js";
import type { ResolveBody } from "./amqp-publisher.js";
import type { ParserMap, CoderMap } from "./amqp-codec-registry.js";
/** Options for {@link AMQPExchange#publish}. */
export type ExchangePublishOptions<O extends string = string> = Omit<AMQPProperties, "contentType"> & {
    /** Routing key. Defaults to `""`. */
    routingKey?: string;
    /** Wait for broker confirmation. Defaults to `true`. */
    confirm?: boolean;
    /**
     * Ask the broker to return the message if it can't be routed to a queue.
     * Returned messages are delivered to the session-level `onreturn` handler
     * when one is configured; otherwise the default channel handler just
     * logs them. Defaults to `false`.
     */
    mandatory?: boolean;
    contentType?: O;
};
/**
 * Session-level exchange handle returned by {@link AMQPSession#exchange} and its
 * convenience variants ({@link AMQPSession#directExchange}, etc.).
 *
 * All operations are reconnect-safe: they acquire a session channel on each
 * call. `publish` waits for a broker confirm; pass `{ confirm: false }` to skip the wait.
 */
export declare class AMQPExchange<P extends ParserMap = {}, C extends CoderMap = {}, KP extends keyof P & string = never, KC extends keyof C & string = never> {
    /** Exchange name. */
    readonly name: string;
    private readonly session;
    /**
     * Publish a message to this exchange.
     *
     * When the session has parsers configured, `body` can be any value accepted
     * by the matching parser's `serialize` method. Without parsers, `body` must
     * be a string, Buffer, Uint8Array, or null.
     *
     * Defaults: `confirm: true`, `deliveryMode: 2` (persistent). Pass
     * `deliveryMode: 1` to send a transient message.
     *
     * @param options - routing key, publish properties; set `confirm: false` to skip broker confirmation
     * @returns `this` for chaining
     */
    publish<O extends keyof P & string = KP>(body: ResolveBody<P, O>, options?: ExchangePublishOptions<O>): Promise<AMQPExchange<P, C, KP, KC>>;
    /**
     * Bind this exchange to a source exchange.
     * @param source - name or {@link AMQPExchange} to bind from
     * @returns `this` for chaining
     */
    bind(source: string | AMQPExchange<P, C, KP, KC>, routingKey?: string, args?: Record<string, unknown>): Promise<AMQPExchange<P, C, KP, KC>>;
    /**
     * Remove a binding between this exchange and a source exchange.
     * @param source - name or {@link AMQPExchange} to unbind from
     * @returns `this` for chaining
     */
    unbind(source: string | AMQPExchange<P, C, KP, KC>, routingKey?: string, args?: Record<string, unknown>): Promise<AMQPExchange<P, C, KP, KC>>;
    /**
     * Delete this exchange.
     * @param [params.ifUnused=false] - only delete if the exchange has no bindings
     */
    delete(params?: {
        ifUnused?: boolean;
    }): Promise<void>;
}
//# sourceMappingURL=amqp-exchange.d.ts.map