/** * A narrower version of TypeScript 4.5's Awaited type which Recursively * unwraps the "awaited type", emulating the behavior of `await`. */ export type Resolved = T extends { then(onfulfilled: infer F): any; } ? F extends (value: infer V) => any ? Resolved : never : T; /** * Represents a client that can integrate with the currently configured {@link Instrumenter}. * * Create an instance using {@link createTracingClient}. */ export interface TracingClient { /** * Wraps a callback in a tracing span, calls the callback, and closes the span. * * This is the primary interface for using Tracing and will handle error recording as well as setting the status on the span. * * Both synchronous and asynchronous functions will be awaited in order to reflect the result of the callback on the span. * * Example: * * ```ts snippet:ReadmeSampleWithSpanExample * import { createTracingClient } from "@azure/core-tracing"; * * const tracingClient = createTracingClient({ * namespace: "test.namespace", * packageName: "test-package", * packageVersion: "1.0.0", * }); * * const options = {}; * * const myOperationResult = await tracingClient.withSpan( * "myClassName.myOperationName", * options, * (updatedOptions) => { * // Do something with the updated options. * return "myOperationResult"; * }, * ); * ``` * @param name - The name of the span. By convention this should be `${className}.${methodName}`. * @param operationOptions - The original options passed to the method. The callback will receive these options with the newly created {@link TracingContext}. * @param callback - The callback to be invoked with the updated options and newly created {@link TracingSpan}. */ withSpan) => ReturnType>(name: string, operationOptions: Options, callback: Callback, spanOptions?: TracingSpanOptions): Promise>>; /** * Starts a given span but does not set it as the active span. * * You must end the span using {@link TracingSpan.end}. * * Most of the time you will want to use {@link withSpan} instead. * * @param name - The name of the span. By convention this should be `${className}.${methodName}`. * @param operationOptions - The original operation options. * @param spanOptions - The options to use when creating the span. * * @returns A {@link TracingSpan} and the updated operation options. */ startSpan(name: string, operationOptions?: Options, spanOptions?: TracingSpanOptions): { span: TracingSpan; updatedOptions: OptionsWithTracingContext; }; /** * Wraps a callback with an active context and calls the callback. * Depending on the implementation, this may set the globally available active context. * * Useful when you want to leave the boundaries of the SDK (make a request or callback to user code) and are unable to use the {@link withSpan} API. * * @param context - The {@link TracingContext} to use as the active context in the scope of the callback. * @param callback - The callback to be invoked with the given context set as the globally active context. * @param callbackArgs - The callback arguments. */ withContext ReturnType>(context: TracingContext, callback: Callback, ...callbackArgs: CallbackArgs): ReturnType; /** * Parses a traceparent header value into a {@link TracingSpanContext}. * * @param traceparentHeader - The traceparent header to parse. * @returns An implementation-specific identifier for the span. */ parseTraceparentHeader(traceparentHeader: string): TracingContext | undefined; /** * Creates a set of request headers to propagate tracing information to a backend. * * @param tracingContext - The context containing the span to propagate. * @returns The set of headers to add to a request. */ createRequestHeaders(tracingContext?: TracingContext): Record; } /** * Options that can be passed to {@link createTracingClient} */ export interface TracingClientOptions { /** The value of the az.namespace tracing attribute on newly created spans. */ namespace: string; /** The name of the package invoking this trace. */ packageName: string; /** An optional version of the package invoking this trace. */ packageVersion?: string; } /** The kind of span. */ export type TracingSpanKind = "client" | "server" | "producer" | "consumer" | "internal"; /** Options used to configure the newly created span. */ export interface TracingSpanOptions { /** The kind of span. Implementations should default this to "client". */ spanKind?: TracingSpanKind; /** A collection of {@link TracingSpanLink} to link to this span. */ spanLinks?: TracingSpanLink[]; /** Initial set of attributes to set on a span. */ spanAttributes?: { [key: string]: unknown; }; } /** A pointer from the current {@link TracingSpan} to another span in the same or a different trace. */ export interface TracingSpanLink { /** The {@link TracingContext} containing the span context to link to. */ tracingContext: TracingContext; /** A set of attributes on the link. */ attributes?: { [key: string]: unknown; }; } /** * Represents an implementation agnostic instrumenter. */ export interface Instrumenter { /** * Creates a new {@link TracingSpan} with the given name and options and sets it on a new context. * @param name - The name of the span. By convention this should be `${className}.${methodName}`. * @param spanOptions - The options to use when creating the span. * * @returns A {@link TracingSpan} that can be used to end the span, and the context this span has been set on. */ startSpan(name: string, spanOptions: InstrumenterSpanOptions): { span: TracingSpan; tracingContext: TracingContext; }; /** * Wraps a callback with an active context and calls the callback. * Depending on the implementation, this may set the globally available active context. * * @param context - The {@link TracingContext} to use as the active context in the scope of the callback. * @param callback - The callback to be invoked with the given context set as the globally active context. * @param callbackArgs - The callback arguments. */ withContext ReturnType>(context: TracingContext, callback: Callback, ...callbackArgs: CallbackArgs): ReturnType; /** * Provides an implementation-specific method to parse a {@link https://www.w3.org/TR/trace-context/#traceparent-header} * into a {@link TracingSpanContext} which can be used to link non-parented spans together. */ parseTraceparentHeader(traceparentHeader: string): TracingContext | undefined; /** * Provides an implementation-specific method to serialize a {@link TracingSpan} to a set of headers. * @param tracingContext - The context containing the span to serialize. */ createRequestHeaders(tracingContext?: TracingContext): Record; } /** * Options passed to {@link Instrumenter.startSpan} as a superset of {@link TracingSpanOptions}. */ export interface InstrumenterSpanOptions extends TracingSpanOptions { /** The name of the package invoking this trace. */ packageName: string; /** The version of the package invoking this trace. */ packageVersion?: string; /** The current tracing context. Defaults to an implementation-specific "active" context. */ tracingContext?: TracingContext; } /** * Status representing a successful operation that can be sent to {@link TracingSpan.setStatus} */ export type SpanStatusSuccess = { status: "success"; }; /** * Status representing an error that can be sent to {@link TracingSpan.setStatus} */ export type SpanStatusError = { status: "error"; error?: Error | string; }; /** * Represents the statuses that can be passed to {@link TracingSpan.setStatus}. * * By default, all spans will be created with status "unset". */ export type SpanStatus = SpanStatusSuccess | SpanStatusError; /** * Represents options you can pass to {@link TracingSpan.addEvent}. */ export interface AddEventOptions { /** * A set of attributes to attach to the event. */ attributes?: Record; /** * The start time of the event. */ startTime?: Date; } /** * Represents an implementation agnostic tracing span. */ export interface TracingSpan { /** * Sets the status of the span. When an error is provided, it will be recorded on the span as well. * * @param status - The {@link SpanStatus} to set on the span. */ setStatus(status: SpanStatus): void; /** * Sets a given attribute on a span. * * @param name - The attribute's name. * @param value - The attribute's value to set. May be any non-nullish value. */ setAttribute(name: string, value: unknown): void; /** * Ends the span. */ end(): void; /** * Records an exception on a {@link TracingSpan} without modifying its status. * * When recording an unhandled exception that should fail the span, please use {@link TracingSpan.setStatus} instead. * * @param exception - The exception to record on the span. * */ recordException(exception: Error | string): void; /** * Returns true if this {@link TracingSpan} is recording information. * * Depending on the span implementation, this may return false if the span is not being sampled. */ isRecording(): boolean; /** * Adds an event to the span. */ addEvent?(name: string, options?: AddEventOptions): void; } /** An immutable context bag of tracing values for the current operation. */ export interface TracingContext { /** * Sets a given object on a context. * @param key - The key of the given context value. * @param value - The value to set on the context. * * @returns - A new context with the given value set. */ setValue(key: symbol, value: unknown): TracingContext; /** * Gets an object from the context if it exists. * @param key - The key of the given context value. * * @returns - The value of the given context value if it exists, otherwise `undefined`. */ getValue(key: symbol): unknown; /** * Deletes an object from the context if it exists. * @param key - The key of the given context value to delete. */ deleteValue(key: symbol): TracingContext; } /** * Tracing options to set on an operation. */ export interface OperationTracingOptions { /** The context to use for created Tracing Spans. */ tracingContext?: TracingContext; } /** * A utility type for when we know a TracingContext has been set * as part of an operation's options. */ export type OptionsWithTracingContext = Options & { tracingOptions: { tracingContext: TracingContext; }; }; //# sourceMappingURL=interfaces.d.ts.map