import type { SpanMatch } from './matchSpan';
import type { DraftTraceConfig, StartTraceConfig } from './spanTypes';
import { type CompleteTraceDefinition, type ComputedSpanDefinitionInput, type ComputedValueDefinitionInput, type DraftTraceContext, type RelationSchemasBase, type TraceDefinitionModifications, type TraceManagerUtilities, type TraceModifications, type TransitionDraftOptions } from './types';
/**
 * Tracer can create draft traces and start traces
 */
export declare class Tracer<const SelectedRelationNameT extends keyof RelationSchemasT, const RelationSchemasT extends RelationSchemasBase<RelationSchemasT>, const VariantsT extends string> {
    private definition;
    private traceUtilities;
    constructor(definition: CompleteTraceDefinition<SelectedRelationNameT, RelationSchemasT, VariantsT>, traceUtilities: TraceManagerUtilities<RelationSchemasT>);
    /**
     * @returns The ID of the trace.
     */
    start: (input: StartTraceConfig<RelationSchemasT[SelectedRelationNameT], VariantsT>, definitionModifications?: TraceDefinitionModifications<SelectedRelationNameT, RelationSchemasT, VariantsT>) => string | undefined;
    createDraft: (input: Omit<DraftTraceConfig<RelationSchemasT[SelectedRelationNameT], VariantsT>, "relatedTo">, definitionModifications?: TraceDefinitionModifications<SelectedRelationNameT, RelationSchemasT, VariantsT>) => string | undefined;
    interrupt: ({ error }?: {
        error?: Error;
    }) => void;
    /**
     * Adds additional required spans or debounce spans to the current trace *only*.
     * Note: This recreates the Trace instance with the modified definition and replays all the spans.
     */
    addRequirementsToCurrentTraceOnly: (definitionModifications: TraceDefinitionModifications<SelectedRelationNameT, RelationSchemasT, VariantsT>) => void;
    transitionDraftToActive: (inputAndDefinitionModifications: TraceModifications<SelectedRelationNameT, RelationSchemasT, VariantsT>, opts?: TransitionDraftOptions) => void;
    getCurrentTrace: () => DraftTraceContext<SelectedRelationNameT, RelationSchemasT, VariantsT> | undefined;
    private getCurrentTraceOrWarn;
    defineComputedSpan: (definition: ComputedSpanDefinitionInput<SelectedRelationNameT, RelationSchemasT, VariantsT> & {
        name: string;
    }) => void;
    defineComputedValue: <const MatchersT extends SpanMatch<SelectedRelationNameT, RelationSchemasT, VariantsT>[]>(definition: ComputedValueDefinitionInput<SelectedRelationNameT, RelationSchemasT, VariantsT, MatchersT> & {
        name: string;
    }) => void;
}
