/**
 * The recorder registry: a {@link TelemetryHub}.
 *
 * Where a {@link Recorder} traces one service, an application usually wants a
 * handful — one per agent, subsystem, or tenant — addressable by name without
 * threading instances through every call site. The hub is that lookup: a small
 * named map of recorders with a designated default.
 *
 * This is the homegrown analogue of an OTel "tracer provider" registry, minus
 * the global ambient machinery: a hub is an ordinary object you can construct,
 * pass around, and replace. A module-level *process default* is offered for
 * convenience ({@link getDefaultHub}/{@link setDefaultHub}) but is strictly
 * opt-in — nothing here reads it implicitly.
 */
import { Recorder, type RecorderOptions } from "../recorder/recorder";
/**
 * A named registry of {@link Recorder}s.
 *
 * {@link register} adds (or replaces) a recorder under a name and returns it;
 * {@link recorder} looks one up (falling back to the default when called with no
 * name); {@link getDefault} returns the default recorder if one exists. The
 * *first* recorder registered becomes the default unless a later
 * {@link register} explicitly uses the reserved default name.
 */
export declare class TelemetryHub {
    private readonly recorders;
    /** Name of the recorder returned by {@link recorder} with no argument. */
    private defaultName;
    /**
     * Register a recorder under `name`, returning the constructed instance.
     *
     * Re-registering a name replaces the prior recorder. If no default has been
     * chosen yet, the first registration becomes the default; registering under
     * the reserved `"default"` name always (re)designates the default.
     */
    register(name: string, options: RecorderOptions): Recorder;
    /**
     * Look up a recorder by `name`, or the default when `name` is omitted.
     *
     * Throws if the requested (or default) recorder is not registered, so a
     * missing recorder fails loudly rather than silently dropping traces.
     */
    recorder(name?: string): Recorder;
    /** The default recorder, or `undefined` if none has been registered. */
    getDefault(): Recorder | undefined;
    /** Whether a recorder is registered under `name`. */
    has(name: string): boolean;
}
/**
 * The process-wide default {@link TelemetryHub}, created on first access.
 *
 * A convenience for code that has no hub to hand. Purely opt-in: nothing in this
 * subsystem consults it unless a caller does.
 */
export declare function getDefaultHub(): TelemetryHub;
/** Replace the process-wide default {@link TelemetryHub} (e.g. for tests). */
export declare function setDefaultHub(hub: TelemetryHub): void;
