import { MaybePromise } from '@opentelemetry/resources';
import { Span } from '@opentelemetry/api';
export { Span } from '@opentelemetry/api';
import { Observable } from 'rxjs';

declare class AppOTelSDK {
    private sdk;
    private logProcessor;
    private spanProcessor;
    private logger;
    private isStarted;
    private static CUSTOM_FORMAT_REGEX;
    static emptySpan: Span;
    start(): void;
    /**
     * [框架专用 API] 开启一个根 Span (Root Span)
     * 该方法专供 Middleware/Interceptor 使用
     * wrapper 形式
     */
    startContext(headers: Record<string, string>, name: string, fn: (span: Span) => void): void;
    /**
     * [框架专用 API] 开启一个根 Span (Root Span)
     * 该方法专供 Middleware/Interceptor 使用
     * wrapper 形式
     */
    startRootTrace(headers: Record<string, string>, name: string): Span;
    /**
     * [用户专用 API] 手动打点 (Child Span)
     * 用户在 Service 中调用此方法，会自动挂载到 Middleware 创建的 Root Span 下
     */
    trace<T>(name: string, fn: (span: Span) => MaybePromise<T> | Observable<T>): MaybePromise<T> | Observable<T>;
    /**
     * [Log API] 自动关联 TraceContext
     */
    log(level: string, message: string, extra?: Record<string, unknown>, spanAttr?: {
        traceId: string;
        spanId: string;
    }): void;
    /**
   * 启动 Span 的工厂函数
   * @param {string} name - Span 名称
   * @param {Object} [parentSpan] - (可选) 父 Span 对象
   */
    startTrace(name: string, parentSpan?: Span): Span;
    /**
    * 丢弃 Span 的工厂函数
    * @param {Span} span - 要被丢弃的 Span 对象
    */
    static dropTraceSpan(span: Span): void;
    /**
     * [框架专用] 强制刷新
     */
    flush(): Promise<void>;
}
declare const appSdk: AppOTelSDK;

export { AppOTelSDK, appSdk };
