/// <reference types="node" />
/// <reference types="node" />
import { CppDocumentId, CppDurabilityLevel, CppWrapperSdkChildSpan, CppWrapperSdkSpan, HiResTime } from './binding';
import { ObservabilityInstruments } from './observabilitytypes';
import { AttributeValue, CppOpAttributeName, OpType, OpAttributeName, SpanStatus, ServiceName } from './observabilitytypes';
import { HttpOpAttributesOptions } from './observabilityutilities';
import { RequestSpan, RequestTracer } from './tracing';
/**
 * Returns true when both tracer and meter are NoOp, enabling the fast-path bypass in KV ops.
 * @internal
 */
export declare function isNoopObservabilityInstruments(instruments: ObservabilityInstruments): boolean;
/**
 * @internal
 */
export declare class ObservableRequestHandler {
    private _opType;
    private _requestHasEnded;
    private readonly _tracerImpl;
    private readonly _meterImpl;
    constructor(opType: OpType, observabilityInstruments: ObservabilityInstruments, parentSpan?: RequestSpan);
    /**
     * @internal
     */
    get opType(): OpType;
    /**
     * @internal
     */
    get requestHasEnded(): boolean;
    /**
     * @internal
     */
    get wrapperSpanName(): string;
    /**
     * @internal
     */
    get wrappedSpan(): WrappedSpan | undefined;
    /**
     * @internal
     */
    get clusterName(): string | undefined;
    /**
     * @internal
     */
    get clusterUUID(): string | undefined;
    /**
     * @internal
     */
    end(): void;
    /**
     * @internal
     */
    endWithError(error?: any): void;
    /**
     * @internal
     */
    maybeAddEncodingSpan(encodeFn: () => [Buffer, number]): [Buffer, number];
    /**
     * @internal
     */
    maybeCreateEncodingSpan(encodeFn: () => [Buffer, number]): [Buffer, number];
    /**
     * @internal
     */
    reset(opType: OpType, parentSpan?: RequestSpan, withError?: boolean): void;
    /**
     * @internal
     */
    processCoreSpan(coreSpan?: CppWrapperSdkSpan): void;
    /**
     * @internal
     */
    setRequestHttpAttributes(options?: HttpOpAttributesOptions): void;
    /**
     * @internal
     */
    setRequestKeyValueAttributes(cppDocId: CppDocumentId, durability?: CppDurabilityLevel): void;
}
/**
 * @internal
 */
export declare class WrappedSpan implements RequestSpan {
    private readonly _serviceName;
    private readonly _opType;
    private readonly _tracer;
    private readonly _hasMultipleEncodingSpans;
    readonly _requestSpan: RequestSpan;
    private readonly _isRecording;
    private _parentSpan;
    private _endedEncodingSpans;
    private _encodingSpan;
    private _encodingSpans;
    private _clusterName;
    private _clusterUUID;
    private _startTime;
    private _endTimeWatermark;
    constructor(serviceName: ServiceName, opType: OpType, tracer: RequestTracer, startTime: HiResTime, parentSpan?: RequestSpan | WrappedSpan);
    /**
     * @internal
     */
    get clusterName(): string | undefined;
    /**
     * @internal
     */
    get clusterUUID(): string | undefined;
    /**
     * @internal
     */
    get name(): string;
    /**
     * @internal
     */
    get requestSpan(): RequestSpan;
    /**
     * @internal
     */
    maybeAddEncodingSpan(encodeFn: () => [Buffer, number]): [Buffer, number];
    /**
     * @internal
     */
    maybeCreateEncodingSpan(encodeFn: () => [Buffer, number]): [Buffer, number];
    /**
     * @internal
     */
    maybeUpdateEndTimeWatermark(endTime: HiResTime): void;
    /**
     * @internal
     */
    _setAttributeOnAllSpans(attrName: OpAttributeName, attrValue: AttributeValue, skip_encoding_span?: boolean): void;
    /**
     * @internal
     */
    _maybeSetAttributeFromCoreSpan(coreSpan: CppWrapperSdkSpan, attrName: CppOpAttributeName | OpAttributeName, skip_encoding_span?: boolean): void;
    /**
     * @internal
     */
    _buildCoreSpans(coreSpans: CppWrapperSdkChildSpan[], parentSpan?: RequestSpan | WrappedSpan): void;
    /**
     * @internal
     */
    _buildDispatchCoreSpan(coreSpan: CppWrapperSdkChildSpan, parentSpan?: RequestSpan | WrappedSpan): void;
    /**
     * @internal
     */
    _buildNonDispatchCoreSpan(coreSpan: CppWrapperSdkChildSpan, parentSpan?: RequestSpan | WrappedSpan): void;
    /**
     * @internal
     */
    _endEncodingSpans(): void;
    /**
     * @internal
     */
    processCoreSpan(coreSpan: CppWrapperSdkSpan): void;
    /**
     * @internal
     */
    setClusterLabels(clusterLabels: Record<string, string | undefined>): void;
    /**
     * @internal
     */
    setRetryAttribute(retrCount?: number): void;
    /**
     * @internal
     */
    addEvent(): void;
    /**
     * @internal
     */
    end(endTime: HiResTime): void;
    /**
     * @internal
     */
    setAttribute(key: string, value: AttributeValue): void;
    /**
     * @internal
     */
    setStatus(status: SpanStatus): void;
    /**
     * @internal
     */
    _createRequestSpan(spanName: string, startTime: HiResTime, parentSpan?: RequestSpan): RequestSpan;
}
