import { SpanProcessor, Span, ReadableSpan } from '@opentelemetry/sdk-trace-base';

type SpanData = {
    spanId: string;
    parentSpanId: string | null;
    name: string;
    kind: string;
    startTime: string;
    endTime: string;
    status?: string;
    attributes?: Record<string, unknown>;
};
type SpanHandle = {
    traceId?: string;
    setName: (name: string) => void;
    runInContext: <T>(fn: () => T) => T;
    enterContext: () => void;
    end: () => SpanData[] | undefined;
};
declare class SpanCollector implements SpanProcessor {
    enabled: boolean;
    private includedSpanIds;
    private collectedSpans;
    private traceStartTimes;
    private maintainIntervalId?;
    private tracer?;
    constructor(enabled: boolean);
    startSpan(): SpanHandle;
    private getAndClearSpans;
    onStart(span: Span): void;
    onEnd(span: ReadableSpan): void;
    private serializeSpan;
    private maintain;
    shutdown(): Promise<void>;
    forceFlush(): Promise<void>;
}
declare class ApitallySpanProcessor implements SpanProcessor {
    private getCollector;
    onStart(span: Span): void;
    onEnd(span: ReadableSpan): void;
    shutdown(): Promise<void>;
    forceFlush(): Promise<void>;
}

export { ApitallySpanProcessor, type SpanData, type SpanHandle, SpanCollector as default };
