import type { BasicLogger, ITelemetryService, OpenTelemetryClientConfig, TelemetryMetadata } from "@clinebot/shared";
import { LoggerProvider } from "@opentelemetry/sdk-logs";
import { MeterProvider } from "@opentelemetry/sdk-metrics";
import { OpenTelemetryAdapter, type OpenTelemetryAdapterOptions } from "./OpenTelemetryAdapter";
type OpenTelemetryExporterKind = "console" | "otlp";
export interface OpenTelemetryProviderOptions extends Omit<OpenTelemetryClientConfig, "enabled" | "logsExporter" | "metricsExporter"> {
    serviceName?: string;
    serviceVersion?: string;
    enabled?: boolean;
    logsExporter?: string | OpenTelemetryExporterKind[];
    metricsExporter?: string | OpenTelemetryExporterKind[];
    metricExportIntervalMs?: number;
    logMaxQueueSize?: number;
    logBatchSize?: number;
    logBatchTimeoutMs?: number;
}
export interface CreateOpenTelemetryTelemetryServiceOptions extends OpenTelemetryProviderOptions, Pick<OpenTelemetryAdapterOptions, "name" | "distinctId" | "commonProperties"> {
    metadata: TelemetryMetadata;
    logger?: BasicLogger;
}
export declare class OpenTelemetryProvider {
    readonly meterProvider: MeterProvider | null;
    readonly loggerProvider: LoggerProvider | null;
    private readonly options;
    constructor(options?: OpenTelemetryProviderOptions);
    createAdapter(options: Omit<OpenTelemetryAdapterOptions, "meterProvider" | "loggerProvider">): OpenTelemetryAdapter;
    createTelemetryService(options: Omit<CreateOpenTelemetryTelemetryServiceOptions, keyof OpenTelemetryProviderOptions>): ITelemetryService;
    forceFlush(): Promise<void>;
    dispose(): Promise<void>;
    private createMeterProvider;
    private createLoggerProvider;
}
export declare function createOpenTelemetryTelemetryService(options: CreateOpenTelemetryTelemetryServiceOptions): {
    provider: OpenTelemetryProvider;
    telemetry: ITelemetryService;
};
export declare function createConfiguredTelemetryService(options: CreateOpenTelemetryTelemetryServiceOptions): {
    provider?: OpenTelemetryProvider;
    telemetry: ITelemetryService;
};
export {};
