import type { ChannelAudience } from "#shared/channel-audience.js";
export interface SpanExportContext {
    readonly attributes: Readonly<Record<string, unknown>>;
    readonly audience: ChannelAudience;
    readonly name: string;
    readonly spanId: string;
    readonly traceId: string;
}
export type SpanExportPredicate = (span: SpanExportContext) => boolean;
export type SpanExportAttributeValue = string | number | boolean | readonly string[] | readonly number[] | readonly boolean[];
export type SpanAttributeDecision = {
    readonly action: "keep";
} | {
    readonly action: "drop";
} | {
    readonly action: "replace";
    readonly value: SpanExportAttributeValue;
};
export interface SpanExportPolicy {
    /** Return false to block one span without blocking its trace. */
    readonly span?: SpanExportPredicate;
    /** Drop or replace individual span attributes after content filtering. */
    readonly attribute?: (input: {
        readonly key: string;
        readonly span: SpanExportContext;
        readonly value: unknown;
    }) => SpanAttributeDecision;
}
/** Redact input content from every matching span. */
export declare function redactSpanInputs(when?: SpanExportPredicate): SpanExportPolicy;
/** Redact output content, exception details, and status messages from every matching span. */
export declare function redactSpanOutputs(when?: SpanExportPredicate): SpanExportPolicy;
/** Compose policies in declaration order. A drop or redaction from any policy is final. */
export declare function composeSpanExportPolicies(...policies: readonly SpanExportPolicy[]): SpanExportPolicy;
/** @internal */
export declare function spanExportPolicyStages(policy: SpanExportPolicy): readonly SpanExportPolicy[];
/** @internal */
export declare function contentRedactionForSpan(policy: SpanExportPolicy | undefined, span: SpanExportContext): {
    readonly redactInputs: boolean;
    readonly redactOutputs: boolean;
};
