@ryanzeng/nest-observe 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +177 -0
- package/dist/index.d.mts +197 -0
- package/dist/index.d.ts +197 -0
- package/dist/index.js +1121 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1073 -0
- package/dist/index.mjs.map +1 -0
- package/dist/register.d.mts +2 -0
- package/dist/register.d.ts +2 -0
- package/dist/register.js +891 -0
- package/dist/register.js.map +1 -0
- package/dist/register.mjs +892 -0
- package/dist/register.mjs.map +1 -0
- package/package.json +96 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config.ts","../src/decorators/metadata.ts","../src/decorators/ignore-trace.decorator.ts","../src/decorators/trace.decorator.ts","../src/decorators/invoke.ts","../src/logs/nest-logger-instrumentation.ts","../src/security/redaction.ts","../src/logs/otel-log-emitter.ts","../src/instrumentation/nest-compatible-instrumentation.ts","../src/nest/method-instrumenter.ts","../src/metrics/http-request-metrics.ts","../src/metrics/runtime-metrics.ts","../src/nest/observe.module.ts","../src/sdk.ts","../src/exceptions/process-exception-capture.ts","../src/resource.ts","../src/security/span-redaction-processor.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { ObserveOptions, ResolvedObserveConfig } from './types';\n\ntype Environment = Record<string, string | undefined>;\n\nconst DEFAULT_ALLOWED_HEADERS = ['accept', 'content-type', 'user-agent', 'x-request-id', 'traceparent'];\n\nfunction booleanValue(value: boolean | string | undefined, fallback: boolean): boolean {\n if (typeof value === 'boolean') return value;\n if (value?.toLowerCase() === 'true') return true;\n if (value?.toLowerCase() === 'false') return false;\n return fallback;\n}\n\nfunction positiveInteger(value: number | string | undefined, fallback: number): number {\n const number = Number(value);\n return Number.isFinite(number) && number > 0 ? Math.floor(number) : fallback;\n}\n\nfunction samplingValue(value: number | string | undefined): number {\n const number = Number(value);\n if (!Number.isFinite(number)) return 1;\n return Math.min(1, Math.max(0, number));\n}\n\nfunction environmentSampling(env: Environment): number {\n const sampler = env.OTEL_TRACES_SAMPLER?.toLowerCase();\n if (sampler === 'always_off' || sampler === 'parentbased_always_off') return 0;\n if (sampler === 'always_on' || sampler === 'parentbased_always_on') return 1;\n return samplingValue(env.OTEL_TRACES_SAMPLER_ARG);\n}\n\nfunction decode(value: string): string {\n try {\n return decodeURIComponent(value.trim());\n } catch {\n return value.trim();\n }\n}\n\nexport function parseKeyValueList(value?: string): Record<string, string> {\n if (!value) return {};\n return Object.fromEntries(value.split(',').flatMap((entry) => {\n const separator = entry.indexOf('=');\n if (separator <= 0) return [];\n const key = decode(entry.slice(0, separator));\n const itemValue = decode(entry.slice(separator + 1));\n return key ? [[key, itemValue]] : [];\n }));\n}\n\nfunction appendSignalPath(endpoint: string | undefined, signal: 'traces' | 'metrics' | 'logs'): string | undefined {\n if (!endpoint) return undefined;\n return `${endpoint.replace(/\\/+$/, '')}/v1/${signal}`;\n}\n\nfunction optionalString(value: string | undefined): string | undefined {\n const result = value?.trim();\n return result ? result : undefined;\n}\n\nexport function resolveObserveConfig(\n options: ObserveOptions = {},\n env: Environment = process.env,\n): ResolvedObserveConfig {\n const otelResources = parseKeyValueList(env.OTEL_RESOURCE_ATTRIBUTES);\n const resourceAttributes = { ...otelResources, ...options.resourceAttributes };\n const genericEndpoint = optionalString(options.endpoint ?? env.OTEL_EXPORTER_OTLP_ENDPOINT);\n const sampling = options.sampling === undefined\n ? environmentSampling(env)\n : samplingValue(options.sampling);\n const allowedHeaders = Array.from(new Set([\n ...DEFAULT_ALLOWED_HEADERS,\n ...(options.allowedHeaders ?? []),\n ].map((header) => header.toLowerCase().trim()).filter(Boolean)));\n\n const result: ResolvedObserveConfig = {\n enabled: booleanValue(options.enabled ?? env.OBSERVE_ENABLED, true),\n serviceName: options.serviceName ?? env.OTEL_SERVICE_NAME ?? otelResources['service.name'] ?? 'nest-application',\n serviceVersion: options.serviceVersion ?? env.OTEL_SERVICE_VERSION ?? otelResources['service.version'] ?? 'unknown',\n environment: options.environment\n ?? env.OBSERVE_ENVIRONMENT\n ?? otelResources['deployment.environment.name']\n ?? env.NODE_ENV\n ?? 'development',\n instanceId: options.instanceId\n ?? otelResources['service.instance.id']\n ?? env.OTEL_SERVICE_INSTANCE_ID\n ?? env.HOSTNAME\n ?? randomUUID(),\n endpoints: {\n traces: optionalString(env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT) ?? appendSignalPath(genericEndpoint, 'traces'),\n metrics: optionalString(env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT) ?? appendSignalPath(genericEndpoint, 'metrics'),\n logs: optionalString(env.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT) ?? appendSignalPath(genericEndpoint, 'logs'),\n },\n headers: { ...parseKeyValueList(env.OTEL_EXPORTER_OTLP_HEADERS), ...options.headers },\n traces: booleanValue(options.traces, true),\n logs: booleanValue(options.logs, true),\n metrics: booleanValue(options.metrics, true),\n providerTracing: booleanValue(options.providerTracing, true),\n controllerTracing: booleanValue(options.controllerTracing, true),\n sampling,\n allowedHeaders,\n exportTimeoutMillis: positiveInteger(options.exportTimeoutMillis ?? env.OTEL_EXPORTER_OTLP_TIMEOUT, 10_000),\n metricExportIntervalMillis: positiveInteger(options.metricExportIntervalMillis ?? env.OTEL_METRIC_EXPORT_INTERVAL, 60_000),\n resourceAttributes,\n };\n if (options.exporters) result.exporters = options.exporters;\n return result;\n}\n","const ignoredTargets = new WeakSet<object>();\nconst tracedTargets = new WeakSet<object>();\n\nexport function markTraceIgnored(target: object): void {\n ignoredTargets.add(target);\n}\n\nexport function markTraceDecorated(target: object): void {\n tracedTargets.add(target);\n}\n\nexport function isTraceIgnored(method?: object, type?: object): boolean {\n return Boolean((method && ignoredTargets.has(method)) || (type && ignoredTargets.has(type)));\n}\n\nexport function isTraceDecorated(method?: object): boolean {\n return Boolean(method && tracedTargets.has(method));\n}\n","import { markTraceIgnored } from './metadata';\n\ntype IgnoreDecorator = MethodDecorator & ClassDecorator;\n\nexport function IgnoreTrace(): IgnoreDecorator {\n return ((target: object | Function, propertyKey?: string | symbol, descriptor?: PropertyDescriptor) => {\n if (propertyKey !== undefined && descriptor?.value && typeof descriptor.value === 'function') {\n markTraceIgnored(descriptor.value);\n return descriptor;\n }\n markTraceIgnored(target);\n return target;\n }) as IgnoreDecorator;\n}\n","import { trace } from '@opentelemetry/api';\nimport { invokeWithSpan } from './invoke';\nimport { isTraceIgnored, markTraceDecorated } from './metadata';\n\nexport interface TraceOptions {\n name?: string;\n attributes?: Record<string, string>;\n}\n\ntype TraceDecorator = MethodDecorator & ClassDecorator;\n\nfunction decorateMethod(\n target: object,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor,\n options: TraceOptions,\n): void {\n const original = descriptor.value as (...args: unknown[]) => unknown;\n if (typeof original !== 'function' || isTraceIgnored(original, target.constructor)) return;\n const className = target.constructor?.name || 'Anonymous';\n const methodName = String(propertyKey);\n const wrapped = function (this: unknown, ...args: unknown[]) {\n const tracer = trace.getTracer('@ryanzen9/nest-observe');\n return invokeWithSpan(tracer, options.name ?? `${className}.${methodName}`, {\n 'code.function.name': methodName,\n 'nestjs.class': className,\n 'nestjs.method': methodName,\n ...options.attributes,\n }, () => original.apply(this, args));\n };\n Object.defineProperty(wrapped, 'name', { value: original.name, configurable: true });\n markTraceDecorated(wrapped);\n descriptor.value = wrapped;\n}\n\nexport function Trace(nameOrOptions: string | TraceOptions = {}): TraceDecorator {\n const options = typeof nameOrOptions === 'string' ? { name: nameOrOptions } : nameOrOptions;\n return ((target: object | Function, propertyKey?: string | symbol, descriptor?: PropertyDescriptor) => {\n if (propertyKey !== undefined && descriptor) {\n decorateMethod(target as object, propertyKey, descriptor, options);\n return descriptor;\n }\n const prototype = (target as { prototype?: object }).prototype;\n if (!prototype) return target;\n for (const key of Object.getOwnPropertyNames(prototype)) {\n if (key === 'constructor') continue;\n const item = Object.getOwnPropertyDescriptor(prototype, key);\n if (!item || typeof item.value !== 'function') continue;\n decorateMethod(prototype, key, item, options);\n Object.defineProperty(prototype, key, item);\n }\n return target;\n }) as TraceDecorator;\n}\n","import { context, SpanStatusCode, type Span, type Tracer } from '@opentelemetry/api';\nimport { isObservable, Observable } from 'rxjs';\nimport { finalize, tap } from 'rxjs/operators';\n\nfunction fail(span: Span, error: unknown): void {\n span.recordException(error instanceof Error ? error : new Error(String(error)));\n span.setStatus({ code: SpanStatusCode.ERROR, message: error instanceof Error ? error.message : String(error) });\n}\n\nexport function invokeWithSpan<T>(\n tracer: Tracer,\n spanName: string,\n attributes: Record<string, string>,\n invoke: () => T,\n onFinish?: (durationSeconds: number, error?: unknown) => void,\n): T {\n return tracer.startActiveSpan(spanName, { attributes }, (span) => {\n const started = process.hrtime.bigint();\n const finish = (error?: unknown) => {\n if (error !== undefined) fail(span, error);\n else span.setStatus({ code: SpanStatusCode.OK });\n onFinish?.(Number(process.hrtime.bigint() - started) / 1e9, error);\n span.end();\n };\n try {\n const result = invoke();\n if (result instanceof Promise) {\n return result.then(\n (value) => { finish(); return value; },\n (error: unknown) => { finish(error); throw error; },\n ) as T;\n }\n if (isObservable(result)) {\n const spanContext = context.active();\n const source = result as Observable<unknown>;\n return new Observable((subscriber) => context.with(spanContext, () => {\n let streamError: unknown;\n return source.pipe(\n tap({ error: (error: unknown) => { streamError = error; } }),\n finalize(() => finish(streamError)),\n ).subscribe(subscriber);\n })) as T;\n }\n finish();\n return result;\n } catch (error) {\n finish(error);\n throw error;\n }\n });\n}\n","import { ConsoleLogger } from '@nestjs/common';\nimport { trace } from '@opentelemetry/api';\nimport { redact, redactText } from '../security/redaction';\nimport type { StructuredLogEmitter, StructuredLogRecord } from './types';\n\ntype LogMethod = 'verbose' | 'debug' | 'log' | 'warn' | 'error' | 'fatal';\ntype ConsoleLoggerWithContext = ConsoleLogger & { context?: string };\n\nconst SEVERITY: Record<LogMethod, StructuredLogRecord['severityText']> = {\n verbose: 'TRACE',\n debug: 'DEBUG',\n log: 'INFO',\n warn: 'WARN',\n error: 'ERROR',\n fatal: 'FATAL',\n};\n\nfunction bodyValue(message: unknown): unknown {\n if (message instanceof Error) return redactText(message.stack ?? `${message.name}: ${message.message}`);\n return redact(message);\n}\n\nexport class NestLoggerInstrumentation {\n private originals = new Map<LogMethod, (...args: unknown[]) => void>();\n private enabled = false;\n\n constructor(\n private readonly emitter: StructuredLogEmitter,\n private readonly resourceAttributes: Record<string, string> = {},\n ) {}\n\n enable(): void {\n if (this.enabled) return;\n this.enabled = true;\n const prototype = ConsoleLogger.prototype as unknown as Record<LogMethod, (...args: unknown[]) => void>;\n for (const method of Object.keys(SEVERITY) as LogMethod[]) {\n const original = prototype[method];\n if (typeof original !== 'function') continue;\n this.originals.set(method, original);\n const emitter = this.emitter;\n const resourceAttributes = this.resourceAttributes;\n prototype[method] = function (this: ConsoleLoggerWithContext, message: unknown, ...args: unknown[]) {\n try {\n const spanContext = trace.getActiveSpan()?.spanContext();\n const contextName = this.context\n ?? (typeof args.at(-1) === 'string' ? String(args.at(-1)) : undefined);\n const attributes: Record<string, string> = { ...resourceAttributes };\n if (contextName) attributes['nestjs.context'] = contextName;\n if (spanContext?.traceId) attributes.trace_id = spanContext.traceId;\n if (spanContext?.spanId) attributes.span_id = spanContext.spanId;\n emitter.emit({\n body: bodyValue(message),\n severityText: SEVERITY[method],\n attributes,\n timestamp: Date.now(),\n });\n } catch {\n // Telemetry is best-effort and may never alter business logging behavior.\n }\n return original.call(this, message, ...args);\n };\n }\n }\n\n disable(): void {\n if (!this.enabled) return;\n const prototype = ConsoleLogger.prototype as unknown as Record<LogMethod, (...args: unknown[]) => void>;\n for (const [method, original] of this.originals) prototype[method] = original;\n this.originals.clear();\n this.enabled = false;\n }\n}\n","export const REDACTED = '[REDACTED]';\n\nconst SENSITIVE_KEY = /(?:authorization|proxy-authorization|cookie|set-cookie|pass(?:word|wd)?|secret|token|api[-_]?key|phone|mobile)/i;\n\nexport function isSensitiveKey(name: string): boolean {\n return SENSITIVE_KEY.test(name);\n}\n\nexport function redactText(value: string): string {\n return value\n .replace(/(?<!\\d)1[3-9]\\d{9}(?!\\d)/g, REDACTED)\n .replace(/\\b(authorization|proxy-authorization)\\s*[:=]\\s*(?:bearer\\s+|basic\\s+)?[^\\s,;]+/gi, `$1=${REDACTED}`)\n .replace(/\\b(password|passwd|secret|token|access_token|api[-_]?key|cookie)\\s*[:=]\\s*[^\\s,;]+/gi, `$1=${REDACTED}`)\n .replace(/\\bbearer\\s+[A-Za-z0-9._~+/=-]+/gi, `Bearer ${REDACTED}`);\n}\n\nfunction errorValue(error: Error): Record<string, string> {\n return {\n name: error.name,\n message: redactText(error.message),\n ...(error.stack ? { stack: redactText(error.stack) } : {}),\n };\n}\n\nfunction visit(value: unknown, seen: WeakSet<object>): unknown {\n if (typeof value === 'string') return redactText(value);\n if (value === null || typeof value !== 'object') return value;\n if (value instanceof Error) return errorValue(value);\n if (seen.has(value)) return '[Circular]';\n seen.add(value);\n if (Array.isArray(value)) return value.map((item) => visit(item, seen));\n const output: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) {\n output[key] = SENSITIVE_KEY.test(key) ? REDACTED : visit(item, seen);\n }\n return output;\n}\n\nexport function redact<T>(value: T): T {\n return visit(value, new WeakSet()) as T;\n}\n\nexport function sanitizeHeaders(\n headers: Record<string, string | string[] | undefined>,\n allowedHeaders: readonly string[],\n): Record<string, string> {\n const allowed = new Set(allowedHeaders.map((header) => header.toLowerCase()));\n const output: Record<string, string> = {};\n for (const [originalName, value] of Object.entries(headers)) {\n const name = originalName.toLowerCase();\n if (!allowed.has(name) || value === undefined) continue;\n output[name] = SENSITIVE_KEY.test(name)\n ? REDACTED\n : Array.isArray(value) ? value.join(', ') : value;\n }\n return output;\n}\n","import { context, type Attributes } from '@opentelemetry/api';\nimport { logs, SeverityNumber, type Logger } from '@opentelemetry/api-logs';\nimport type { StructuredLogEmitter, StructuredLogRecord } from './types';\n\nconst SEVERITY_NUMBER: Record<StructuredLogRecord['severityText'], SeverityNumber> = {\n TRACE: SeverityNumber.TRACE,\n DEBUG: SeverityNumber.DEBUG,\n INFO: SeverityNumber.INFO,\n WARN: SeverityNumber.WARN,\n ERROR: SeverityNumber.ERROR,\n FATAL: SeverityNumber.FATAL,\n};\n\nexport class OpenTelemetryLogEmitter implements StructuredLogEmitter {\n private readonly logger: Logger;\n\n constructor(name = '@ryanzen9/nest-observe', version?: string, logger?: Logger) {\n this.logger = logger ?? logs.getLogger(name, version);\n }\n\n emit(record: StructuredLogRecord): void {\n this.logger.emit({\n body: record.body as never,\n severityText: record.severityText,\n severityNumber: SEVERITY_NUMBER[record.severityText],\n attributes: record.attributes as Attributes,\n ...(record.timestamp === undefined ? {} : { timestamp: record.timestamp }),\n context: context.active(),\n });\n }\n}\n","import {\n InstrumentationNodeModuleDefinition,\n InstrumentationNodeModuleFile,\n type InstrumentationConfig,\n} from '@opentelemetry/instrumentation';\nimport { NestInstrumentation } from '@opentelemetry/instrumentation-nestjs-core';\nimport { NestMethodInstrumenter } from '../nest/method-instrumenter';\n\nconst SUPPORTED_NEST_VERSIONS = ['>=4.0.0 <13'];\n\ntype NestWrapper = {\n instance?: object;\n metatype?: Function;\n name?: string;\n token?: unknown;\n host?: {\n name?: string;\n controllers?: Map<unknown, unknown>;\n };\n};\n\ntype InjectorExports = {\n Injector: {\n prototype: {\n instantiateClass: (...args: unknown[]) => Promise<unknown>;\n };\n };\n};\n\nexport interface CompatibleNestInstrumentationConfig extends InstrumentationConfig {\n providerTracing?: boolean;\n controllerTracing?: boolean;\n}\n\n/** Extends upstream Nest support to v12 and instruments DI-created providers. */\nexport class CompatibleNestInstrumentation extends NestInstrumentation {\n private methodInstrumenter?: NestMethodInstrumenter;\n\n constructor(private readonly observeConfig: CompatibleNestInstrumentationConfig = {}) {\n super(observeConfig);\n }\n\n override init(): InstrumentationNodeModuleDefinition {\n const definition = new InstrumentationNodeModuleDefinition('@nestjs/core', SUPPORTED_NEST_VERSIONS);\n definition.files.push(\n this.getNestFactoryFileInstrumentation(SUPPORTED_NEST_VERSIONS),\n this.getRouterExecutionContextFileInstrumentation(SUPPORTED_NEST_VERSIONS),\n new InstrumentationNodeModuleFile(\n '@nestjs/core/injector/injector.js',\n SUPPORTED_NEST_VERSIONS,\n (moduleExports: InjectorExports) => {\n const instrumentation = this;\n this._wrap(moduleExports.Injector.prototype, 'instantiateClass', (original) => {\n return async function (this: unknown, ...args: unknown[]) {\n const instance = await original.apply(this, args);\n try {\n const wrapper = args[1] as NestWrapper | undefined;\n if (!instance || typeof instance !== 'object' || !wrapper?.metatype) return instance;\n if (['InternalCoreModule', 'ObserveModule', 'DiscoveryModule'].includes(wrapper.host?.name ?? '')) {\n return instance;\n }\n const isController = wrapper.host?.controllers?.get(wrapper.token) === wrapper;\n if ((isController && instrumentation.observeConfig.controllerTracing === false)\n || (!isController && instrumentation.observeConfig.providerTracing === false)) {\n return instance;\n }\n instrumentation.getMethodInstrumenter().instrumentInstance(\n instance,\n isController ? 'controller' : 'provider',\n wrapper.name ?? wrapper.metatype.name,\n );\n } catch {\n // Framework internals vary by Nest version; instrumentation remains best-effort.\n }\n return instance;\n };\n });\n return moduleExports;\n },\n (moduleExports: InjectorExports) => {\n this._unwrap(moduleExports.Injector.prototype, 'instantiateClass');\n },\n ),\n );\n return definition;\n }\n\n private getMethodInstrumenter(): NestMethodInstrumenter {\n return this.methodInstrumenter ??= new NestMethodInstrumenter(this.tracer, this.meter);\n }\n}\n","import type { Meter, Tracer } from '@opentelemetry/api';\nimport { invokeWithSpan } from '../decorators/invoke';\nimport { isTraceDecorated, isTraceIgnored, markTraceDecorated } from '../decorators/metadata';\n\nexport type NestComponentKind = 'provider' | 'controller';\n\nexport class NestMethodInstrumenter {\n private readonly calls;\n private readonly duration;\n private readonly errors;\n private readonly instrumented = new WeakMap<object, Set<string>>();\n\n constructor(private readonly tracer: Tracer, meter: Meter) {\n this.calls = meter.createCounter('nestjs.method.calls', { unit: '{call}' });\n this.duration = meter.createHistogram('nestjs.method.duration', {\n unit: 's',\n advice: { explicitBucketBoundaries: [0.001, 0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5] },\n });\n this.errors = meter.createCounter('nestjs.method.errors', { unit: '{error}' });\n }\n\n instrumentInstance(instance: object, kind: NestComponentKind, componentName?: string): void {\n const type = instance.constructor as Function;\n const prototype = Object.getPrototypeOf(instance) as object | null;\n if (!prototype) return;\n this.instrumentTarget(instance, prototype, type, kind, componentName);\n }\n\n instrumentPrototype(type: Function, kind: NestComponentKind, componentName?: string): void {\n const prototype = (type as { prototype?: object }).prototype;\n if (!prototype) return;\n this.instrumentTarget(prototype, prototype, type, kind, componentName);\n }\n\n private instrumentTarget(\n target: object,\n prototype: object,\n type: Function,\n kind: NestComponentKind,\n componentName?: string,\n ): void {\n if (isTraceIgnored(type)) return;\n const completed = this.instrumented.get(target) ?? new Set<string>();\n this.instrumented.set(target, completed);\n for (const methodName of Object.getOwnPropertyNames(prototype)) {\n if (methodName === 'constructor' || completed.has(methodName) || methodName.startsWith('onModule')) continue;\n const descriptor = Object.getOwnPropertyDescriptor(prototype, methodName);\n const original = descriptor?.value as ((...args: unknown[]) => unknown) | undefined;\n if (!descriptor || typeof original !== 'function' || isTraceIgnored(original, type) || isTraceDecorated(original)) continue;\n const existing = Reflect.get(target, methodName) as unknown;\n if (typeof existing === 'function' && existing !== original && isTraceDecorated(existing)) continue;\n const name = componentName || type.name || 'Anonymous';\n const attributes: Record<string, string> = {\n [`nestjs.${kind}`]: name,\n 'nestjs.method': methodName,\n };\n const instrumenter = this;\n const wrapped = function (this: unknown, ...args: unknown[]) {\n instrumenter.calls.add(1, attributes);\n return invokeWithSpan(\n instrumenter.tracer,\n `${name}.${methodName}`,\n attributes,\n () => original.apply(this, args),\n (seconds, error) => {\n instrumenter.duration.record(seconds, attributes);\n if (error !== undefined) instrumenter.errors.add(1, attributes);\n },\n );\n };\n markTraceDecorated(wrapped);\n try {\n Object.defineProperty(target, methodName, { ...descriptor, value: wrapped });\n completed.add(methodName);\n } catch {\n // Frozen or proxy-managed framework instances are intentionally skipped.\n }\n }\n }\n}\n","import type { Meter } from '@opentelemetry/api';\nimport type { IncomingMessage, ServerResponse } from 'node:http';\n\ntype FrameworkRequest = IncomingMessage & {\n baseUrl?: string;\n route?: { path?: string };\n routerPath?: string;\n routeOptions?: { url?: string };\n};\n\nfunction routeFor(request: FrameworkRequest): string {\n const route = request.route?.path ?? request.routerPath ?? request.routeOptions?.url;\n if (!route) return '<unmatched>';\n return `${request.baseUrl ?? ''}${route}` || '<unmatched>';\n}\n\nexport class HttpRequestMetrics {\n private readonly requestCount;\n private readonly requestDuration;\n private readonly errorCount;\n private readonly startedAt = new WeakMap<IncomingMessage, bigint>();\n\n constructor(meter: Meter, private readonly serviceName: string) {\n this.requestCount = meter.createCounter('http.server.request.count', {\n description: 'Number of completed inbound HTTP requests',\n unit: '{request}',\n });\n this.requestDuration = meter.createHistogram('http.server.request.duration', {\n description: 'Inbound HTTP request duration',\n unit: 's',\n advice: { explicitBucketBoundaries: [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10] },\n });\n this.errorCount = meter.createCounter('http.server.error.count', {\n description: 'Number of failed inbound HTTP requests',\n unit: '{error}',\n });\n }\n\n start(request: IncomingMessage): void {\n this.startedAt.set(request, process.hrtime.bigint());\n }\n\n record(request: IncomingMessage, response: ServerResponse): void {\n const statusCode = Number.isFinite(response.statusCode) ? response.statusCode : 0;\n const attributes = {\n 'service.name': this.serviceName,\n 'http.route': routeFor(request as FrameworkRequest),\n 'http.request.method': request.method ?? 'UNKNOWN',\n 'http.response.status_code': statusCode,\n };\n this.requestCount.add(1, attributes);\n const started = this.startedAt.get(request);\n if (started !== undefined) {\n this.requestDuration.record(Number(process.hrtime.bigint() - started) / 1e9, attributes);\n this.startedAt.delete(request);\n }\n if (statusCode >= 500) this.errorCount.add(1, attributes);\n }\n}\n","import { cpus } from 'node:os';\nimport { monitorEventLoopDelay, PerformanceObserver, performance } from 'node:perf_hooks';\nimport type { Meter, ObservableCallback, ObservableResult } from '@opentelemetry/api';\n\ntype RemovableInstrument = {\n addCallback(callback: ObservableCallback): void;\n removeCallback(callback: ObservableCallback): void;\n};\n\nexport class RuntimeMetrics {\n private readonly callbacks: Array<{ instrument: RemovableInstrument; callback: ObservableCallback }> = [];\n private eventLoopDelay: ReturnType<typeof monitorEventLoopDelay> | undefined;\n private gcObserver: PerformanceObserver | undefined;\n private started = false;\n private previousElu = performance.eventLoopUtilization();\n\n constructor(private readonly meter: Meter) {}\n\n private observe(instrument: RemovableInstrument, callback: ObservableCallback): void {\n instrument.addCallback(callback);\n this.callbacks.push({ instrument, callback });\n }\n\n start(): void {\n if (this.started) return;\n this.started = true;\n const systemCpu = this.meter.createObservableGauge('system.cpu.utilization', { unit: '1' });\n this.observe(systemCpu, (result: ObservableResult) => {\n const cores = cpus();\n let idle = 0;\n let total = 0;\n for (const core of cores) {\n idle += core.times.idle;\n total += Object.values(core.times).reduce((sum, value) => sum + value, 0);\n }\n result.observe(total ? (total - idle) / total : 0);\n });\n\n const processCpu = this.meter.createObservableCounter('process.cpu.time', { unit: 's' });\n this.observe(processCpu, (result: ObservableResult) => {\n const cpu = process.cpuUsage();\n result.observe((cpu.user + cpu.system) / 1e6);\n });\n\n const rss = this.meter.createObservableGauge('process.memory.rss', { unit: 'By' });\n const heapUsed = this.meter.createObservableGauge('nodejs.memory.heap.used', { unit: 'By' });\n const heapTotal = this.meter.createObservableGauge('nodejs.memory.heap.total', { unit: 'By' });\n this.observe(rss, (result: ObservableResult) => result.observe(process.memoryUsage().rss));\n this.observe(heapUsed, (result: ObservableResult) => result.observe(process.memoryUsage().heapUsed));\n this.observe(heapTotal, (result: ObservableResult) => result.observe(process.memoryUsage().heapTotal));\n\n this.eventLoopDelay = monitorEventLoopDelay({ resolution: 20 });\n this.eventLoopDelay.enable();\n const delay = this.meter.createObservableGauge('nodejs.eventloop.delay', { unit: 's' });\n this.observe(delay, (result: ObservableResult) => {\n const mean = this.eventLoopDelay?.mean ?? 0;\n result.observe(Number.isFinite(mean) ? mean / 1e9 : 0);\n this.eventLoopDelay?.reset();\n });\n\n const utilization = this.meter.createObservableGauge('nodejs.eventloop.utilization', { unit: '1' });\n this.observe(utilization, (result: ObservableResult) => {\n const current = performance.eventLoopUtilization(this.previousElu);\n this.previousElu = performance.eventLoopUtilization();\n result.observe(current.utilization);\n });\n\n const gc = this.meter.createHistogram('nodejs.gc.duration', { unit: 's' });\n this.gcObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n const detail = (entry as unknown as { detail?: { kind?: number } }).detail;\n gc.record(entry.duration / 1_000, { 'nodejs.gc.type': String(detail?.kind ?? 'unknown') });\n }\n });\n try { this.gcObserver.observe({ entryTypes: ['gc'] }); } catch { /* unsupported runtime */ }\n\n const uptime = this.meter.createObservableGauge('process.uptime', { unit: 's' });\n this.observe(uptime, (result: ObservableResult) => result.observe(process.uptime()));\n }\n\n stop(): void {\n for (const { instrument, callback } of this.callbacks) instrument.removeCallback(callback);\n this.callbacks.length = 0;\n this.eventLoopDelay?.disable();\n this.eventLoopDelay = undefined;\n this.gcObserver?.disconnect();\n this.gcObserver = undefined;\n this.started = false;\n }\n}\n","import { DynamicModule, Global, Inject, Injectable, Module, OnApplicationShutdown, OnModuleInit } from '@nestjs/common';\nimport { DiscoveryModule, DiscoveryService } from '@nestjs/core';\nimport { metrics, trace } from '@opentelemetry/api';\nimport { getObserveRuntime, observe, type ObserveRuntime } from '../sdk';\nimport type { ObserveOptions } from '../types';\nimport { SDK_NAME, SDK_VERSION } from '../resource';\nimport { NestMethodInstrumenter } from './method-instrumenter';\n\nexport const OBSERVE_OPTIONS = Symbol('OBSERVE_OPTIONS');\nexport const OBSERVE_HANDLE = Symbol('OBSERVE_HANDLE');\n\ntype DiscoveredWrapper = {\n instance?: object;\n metatype?: Function;\n name?: string;\n host?: { name?: string };\n};\n\n@Injectable()\nclass NestObserveExplorer implements OnModuleInit, OnApplicationShutdown {\n constructor(\n @Inject(DiscoveryService) private readonly discovery: DiscoveryService,\n @Inject(OBSERVE_OPTIONS) private readonly options: ObserveOptions,\n @Inject(OBSERVE_HANDLE) private readonly handle: ObserveRuntime,\n ) {}\n\n onModuleInit(): void {\n if (!this.handle.started) return;\n const runtime = getObserveRuntime();\n const tracer = runtime?.tracerProvider?.getTracer(SDK_NAME, SDK_VERSION) ?? trace.getTracer(SDK_NAME, SDK_VERSION);\n const meter = runtime?.meterProvider?.getMeter(SDK_NAME, SDK_VERSION) ?? metrics.getMeter(SDK_NAME, SDK_VERSION);\n const instrumenter = new NestMethodInstrumenter(tracer, meter);\n if (this.options.providerTracing !== false) {\n this.instrument(this.discovery.getProviders() as DiscoveredWrapper[], instrumenter, 'provider');\n }\n if (this.options.controllerTracing !== false) {\n this.instrument(this.discovery.getControllers() as DiscoveredWrapper[], instrumenter, 'controller');\n }\n }\n\n private instrument(\n wrappers: DiscoveredWrapper[],\n instrumenter: NestMethodInstrumenter,\n kind: 'provider' | 'controller',\n ): void {\n for (const wrapper of wrappers) {\n if (!wrapper.metatype) continue;\n if (['ObserveModule', 'DiscoveryModule', 'InternalCoreModule'].includes(wrapper.host?.name ?? '')) continue;\n if ((wrapper.metatype as Function) === NestObserveExplorer) continue;\n if (wrapper.instance) {\n instrumenter.instrumentInstance(wrapper.instance, kind, wrapper.name ?? wrapper.metatype.name);\n } else {\n instrumenter.instrumentPrototype(wrapper.metatype, kind, wrapper.name ?? wrapper.metatype.name);\n }\n }\n }\n\n async onApplicationShutdown(): Promise<void> {\n await this.handle.shutdown();\n }\n}\n\n@Global()\n@Module({})\nexport class ObserveModule {\n static forRoot(options: ObserveOptions = {}): DynamicModule {\n return {\n module: ObserveModule,\n global: true,\n imports: [DiscoveryModule],\n providers: [\n { provide: OBSERVE_OPTIONS, useValue: options },\n { provide: OBSERVE_HANDLE, useFactory: () => observe(options) },\n NestObserveExplorer,\n ],\n exports: [OBSERVE_HANDLE],\n };\n }\n}\n","import { logs } from '@opentelemetry/api-logs';\nimport { metrics, trace } from '@opentelemetry/api';\nimport { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-proto';\nimport { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-proto';\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';\nimport { registerInstrumentations, type Instrumentation } from '@opentelemetry/instrumentation';\nimport { HttpInstrumentation } from '@opentelemetry/instrumentation-http';\nimport { PrismaInstrumentation } from '@prisma/instrumentation';\nimport { BatchLogRecordProcessor, LoggerProvider, type LogRecordExporter } from '@opentelemetry/sdk-logs';\nimport { AggregationType, MeterProvider, PeriodicExportingMetricReader, type MetricReader } from '@opentelemetry/sdk-metrics';\nimport { AlwaysOffSampler, BatchSpanProcessor, ParentBasedSampler, TraceIdRatioBasedSampler, type SpanExporter, type SpanProcessor } from '@opentelemetry/sdk-trace-base';\nimport { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';\nimport { resolveObserveConfig } from './config';\nimport { ProcessExceptionCapture } from './exceptions/process-exception-capture';\nimport { CompatibleNestInstrumentation } from './instrumentation';\nimport { NestLoggerInstrumentation, OpenTelemetryLogEmitter } from './logs';\nimport { HttpRequestMetrics, RuntimeMetrics } from './metrics';\nimport { createObserveResource, SDK_NAME, SDK_VERSION } from './resource';\nimport { isSensitiveKey } from './security/redaction';\nimport { SpanRedactionProcessor } from './security/span-redaction-processor';\nimport type { ObserveHandle, ObserveOptions, ResolvedObserveConfig } from './types';\n\nexport interface ObserveRuntime extends ObserveHandle {\n readonly tracerProvider: NodeTracerProvider | undefined;\n readonly meterProvider: MeterProvider | undefined;\n readonly loggerProvider: LoggerProvider | undefined;\n}\n\nclass InactiveObserveHandle implements ObserveRuntime {\n readonly started = false;\n readonly tracerProvider = undefined;\n readonly meterProvider = undefined;\n readonly loggerProvider = undefined;\n constructor(readonly config: Readonly<ResolvedObserveConfig>) {}\n forceFlush(): Promise<void> { return Promise.resolve(); }\n shutdown(): Promise<void> { return Promise.resolve(); }\n}\n\nclass ActiveObserveHandle implements ObserveRuntime {\n readonly started = true;\n private stopped = false;\n\n constructor(\n readonly config: Readonly<ResolvedObserveConfig>,\n readonly tracerProvider: NodeTracerProvider | undefined,\n readonly meterProvider: MeterProvider | undefined,\n readonly loggerProvider: LoggerProvider | undefined,\n private readonly runtimeMetrics: RuntimeMetrics | undefined,\n private readonly loggerInstrumentation: NestLoggerInstrumentation | undefined,\n private readonly exceptionCapture: ProcessExceptionCapture,\n private readonly instrumentations: Instrumentation[],\n ) {}\n\n async forceFlush(): Promise<void> {\n await Promise.allSettled([\n this.tracerProvider?.forceFlush(),\n this.meterProvider?.forceFlush(),\n this.loggerProvider?.forceFlush({ timeoutMillis: this.config.exportTimeoutMillis }),\n ].filter((item): item is Promise<void> => Boolean(item)));\n }\n\n async shutdown(): Promise<void> {\n if (this.stopped) return;\n this.stopped = true;\n this.loggerInstrumentation?.disable();\n this.runtimeMetrics?.stop();\n this.exceptionCapture.stop();\n for (const instrumentation of this.instrumentations) {\n try { instrumentation.disable(); } catch { /* best effort */ }\n }\n await this.forceFlush();\n await Promise.allSettled([\n this.tracerProvider?.shutdown(),\n this.meterProvider?.shutdown(),\n this.loggerProvider?.shutdown(),\n ].filter((item): item is Promise<void> => Boolean(item)));\n if (activeRuntime === this) activeRuntime = undefined;\n }\n}\n\nlet activeRuntime: ObserveRuntime | undefined;\n\nfunction exporterConfig(url: string | undefined, config: ResolvedObserveConfig) {\n return {\n ...(url ? { url } : {}),\n headers: config.headers,\n timeoutMillis: config.exportTimeoutMillis,\n };\n}\n\nfunction createTraceProvider(\n config: ResolvedObserveConfig,\n resource: ReturnType<typeof createObserveResource>,\n) {\n if (!config.traces && !config.metrics) return undefined;\n const spanProcessors: SpanProcessor[] = [new SpanRedactionProcessor()];\n if (config.traces) {\n const exporter: SpanExporter = config.exporters?.span\n ?? new OTLPTraceExporter(exporterConfig(config.endpoints.traces, config));\n spanProcessors.push(new BatchSpanProcessor(exporter, {\n exportTimeoutMillis: config.exportTimeoutMillis,\n maxQueueSize: 2_048,\n maxExportBatchSize: 512,\n }));\n }\n const provider = new NodeTracerProvider({\n resource,\n sampler: config.traces\n ? new ParentBasedSampler({ root: new TraceIdRatioBasedSampler(config.sampling) })\n : new AlwaysOffSampler(),\n spanProcessors,\n spanLimits: { attributeCountLimit: 64, eventCountLimit: 64, linkCountLimit: 16 },\n });\n provider.register();\n return provider;\n}\n\nfunction createMeterProvider(config: ResolvedObserveConfig, resource: ReturnType<typeof createObserveResource>) {\n if (!config.metrics) return undefined;\n let reader: MetricReader;\n if (config.exporters?.metricReader) {\n reader = config.exporters.metricReader;\n } else {\n reader = new PeriodicExportingMetricReader({\n exporter: new OTLPMetricExporter(exporterConfig(config.endpoints.metrics, config)),\n exportIntervalMillis: config.metricExportIntervalMillis,\n exportTimeoutMillis: Math.min(config.exportTimeoutMillis, config.metricExportIntervalMillis),\n cardinalityLimits: { default: 2_000, histogram: 2_000 },\n });\n }\n const provider = new MeterProvider({\n resource,\n readers: [reader],\n views: [{\n instrumentName: 'http.server.request.duration',\n meterName: '@opentelemetry/instrumentation-http',\n aggregation: { type: AggregationType.DROP },\n }],\n });\n metrics.setGlobalMeterProvider(provider);\n return provider;\n}\n\nfunction createLoggerProvider(config: ResolvedObserveConfig, resource: ReturnType<typeof createObserveResource>) {\n if (!config.logs) return undefined;\n const exporter: LogRecordExporter = config.exporters?.log\n ?? new OTLPLogExporter(exporterConfig(config.endpoints.logs, config));\n const provider = new LoggerProvider({\n resource,\n processors: [new BatchLogRecordProcessor({\n exporter,\n exportTimeoutMillis: config.exportTimeoutMillis,\n maxQueueSize: 2_048,\n maxExportBatchSize: 512,\n })],\n });\n logs.setGlobalLoggerProvider(provider);\n return provider;\n}\n\nexport function observe(options: ObserveOptions = {}): ObserveRuntime {\n if (activeRuntime?.started) return activeRuntime;\n const config = resolveObserveConfig(options);\n if (!config.enabled) return new InactiveObserveHandle(config);\n let tracerProvider: NodeTracerProvider | undefined;\n let meterProvider: MeterProvider | undefined;\n let loggerProvider: LoggerProvider | undefined;\n let runtimeMetrics: RuntimeMetrics | undefined;\n let loggerInstrumentation: NestLoggerInstrumentation | undefined;\n let exceptionCapture: ProcessExceptionCapture | undefined;\n const instrumentations: Instrumentation[] = [];\n try {\n const resource = createObserveResource(config);\n meterProvider = createMeterProvider(config, resource);\n const meter = meterProvider?.getMeter(SDK_NAME, SDK_VERSION);\n tracerProvider = createTraceProvider(config, resource);\n loggerProvider = createLoggerProvider(config, resource);\n runtimeMetrics = meter ? new RuntimeMetrics(meter) : undefined;\n runtimeMetrics?.start();\n\n const otelLogger = loggerProvider?.getLogger(SDK_NAME, SDK_VERSION);\n const logEmitter = config.logs\n ? new OpenTelemetryLogEmitter(SDK_NAME, SDK_VERSION, otelLogger)\n : undefined;\n loggerInstrumentation = logEmitter\n ? new NestLoggerInstrumentation(logEmitter, {\n 'service.name': config.serviceName,\n 'service.version': config.serviceVersion,\n 'deployment.environment.name': config.environment,\n })\n : undefined;\n loggerInstrumentation?.enable();\n exceptionCapture = new ProcessExceptionCapture(logEmitter);\n exceptionCapture.start();\n\n if (config.traces || config.metrics) {\n const safeHeaders = config.allowedHeaders.filter((header) => !isSensitiveKey(header));\n const httpRequestMetrics = meter ? new HttpRequestMetrics(meter, config.serviceName) : undefined;\n instrumentations.push(new HttpInstrumentation({\n requireParentforOutgoingSpans: false,\n headersToSpanAttributes: {\n client: { requestHeaders: safeHeaders, responseHeaders: safeHeaders },\n server: { requestHeaders: safeHeaders, responseHeaders: safeHeaders },\n },\n redactedQueryParams: [\n 'sig', 'Signature', 'AWSAccessKeyId', 'X-Goog-Signature',\n 'password', 'passwd', 'token', 'access_token', 'api_key', 'secret',\n ],\n ...(httpRequestMetrics ? {\n requestHook: (_span, request) => {\n if (!('getHeader' in request)) httpRequestMetrics.start(request as never);\n },\n applyCustomAttributesOnSpan: (_span, request, response) => {\n if ('setHeader' in response) httpRequestMetrics.record(request as never, response as never);\n },\n } : {}),\n }));\n instrumentations.push(new CompatibleNestInstrumentation({\n providerTracing: config.providerTracing,\n controllerTracing: config.controllerTracing,\n }));\n if (config.traces) instrumentations.push(new PrismaInstrumentation() as unknown as Instrumentation);\n registerInstrumentations({\n instrumentations,\n ...(tracerProvider ? { tracerProvider } : {}),\n ...(meterProvider ? { meterProvider } : {}),\n });\n }\n const runtime = new ActiveObserveHandle(\n config,\n tracerProvider,\n meterProvider,\n loggerProvider,\n runtimeMetrics,\n loggerInstrumentation,\n exceptionCapture,\n instrumentations,\n );\n activeRuntime = runtime;\n return runtime;\n } catch {\n loggerInstrumentation?.disable();\n runtimeMetrics?.stop();\n exceptionCapture?.stop();\n for (const instrumentation of instrumentations) {\n try { instrumentation.disable(); } catch { /* best effort */ }\n }\n void Promise.allSettled([\n tracerProvider?.shutdown(),\n meterProvider?.shutdown(),\n loggerProvider?.shutdown(),\n ].filter((item): item is Promise<void> => Boolean(item)));\n return new InactiveObserveHandle(config);\n }\n}\n\nexport function getObserveRuntime(): ObserveRuntime | undefined {\n return activeRuntime;\n}\n","import { trace, SpanStatusCode } from '@opentelemetry/api';\nimport type { StructuredLogEmitter } from '../logs/types';\nimport { redactText } from '../security/redaction';\n\nfunction asError(value: unknown): Error {\n return value instanceof Error ? value : new Error(String(value));\n}\n\nexport class ProcessExceptionCapture {\n private listening = false;\n private readonly onUncaughtException = (value: unknown) => this.capture(value, 'uncaughtException');\n\n constructor(private readonly emitter?: StructuredLogEmitter) {}\n\n start(): void {\n if (this.listening) return;\n this.listening = true;\n process.on('uncaughtExceptionMonitor', this.onUncaughtException);\n }\n\n stop(): void {\n if (!this.listening) return;\n process.off('uncaughtExceptionMonitor', this.onUncaughtException);\n this.listening = false;\n }\n\n capture(value: unknown, source = 'nestjs'): void {\n try {\n const error = asError(value);\n const span = trace.getActiveSpan();\n span?.recordException(error);\n span?.setStatus({ code: SpanStatusCode.ERROR, message: error.message });\n const spanContext = span?.spanContext();\n this.emitter?.emit({\n body: redactText(error.stack ?? error.message),\n severityText: 'ERROR',\n attributes: {\n 'exception.type': error.name,\n 'exception.message': redactText(error.message),\n 'exception.stacktrace': redactText(error.stack ?? ''),\n 'exception.source': source,\n ...(spanContext ? { trace_id: spanContext.traceId, span_id: spanContext.spanId } : {}),\n },\n timestamp: Date.now(),\n });\n } catch {\n // Exception reporting must not replace or swallow the original exception.\n }\n }\n}\n","import { hostname } from 'node:os';\nimport { defaultResource, resourceFromAttributes, type Resource } from '@opentelemetry/resources';\nimport type { ResolvedObserveConfig } from './types';\n\nexport const SDK_NAME = '@ryanzen9/nest-observe';\nexport const SDK_VERSION = '0.1.0';\n\nexport function createObserveResource(config: ResolvedObserveConfig): Resource {\n return defaultResource().merge(resourceFromAttributes({\n ...config.resourceAttributes,\n 'service.name': config.serviceName,\n 'service.version': config.serviceVersion,\n 'deployment.environment.name': config.environment,\n 'service.instance.id': config.instanceId,\n 'telemetry.sdk.name': SDK_NAME,\n 'telemetry.sdk.version': SDK_VERSION,\n 'host.name': config.resourceAttributes['host.name'] ?? hostname(),\n }));\n}\n","import type { Attributes, AttributeValue, Context, Span } from '@opentelemetry/api';\nimport type { ReadableSpan, SpanProcessor } from '@opentelemetry/sdk-trace-base';\nimport { isSensitiveKey, redactText, REDACTED } from './redaction';\n\nconst DROP_VALUE = /(?:request\\.body|db\\.(?:query\\.)?parameters?|db\\.statement\\.parameters?|redis\\.(?:args|value))/i;\n\nfunction cleanValue(value: AttributeValue): AttributeValue {\n if (typeof value === 'string') return redactText(value);\n if (Array.isArray(value)) {\n return value.map((item) => typeof item === 'string' ? redactText(item) : item) as AttributeValue;\n }\n return value;\n}\n\nfunction cleanAttributes(attributes: Attributes | undefined): void {\n if (!attributes) return;\n const mutable = attributes as Record<string, AttributeValue | undefined>;\n for (const [key, value] of Object.entries(mutable)) {\n if (value === undefined) continue;\n if (DROP_VALUE.test(key) || isSensitiveKey(key)) mutable[key] = REDACTED;\n else mutable[key] = cleanValue(value);\n }\n}\n\n/** Last-line protection for spans emitted by third-party instrumentation. */\nexport class SpanRedactionProcessor implements SpanProcessor {\n onStart(_span: Span, _parentContext: Context): void {}\n\n onEnd(span: ReadableSpan): void {\n const mutable = span as ReadableSpan & {\n name: string;\n status: { code: number; message?: string };\n events: Array<{ attributes?: Attributes }>;\n };\n try {\n mutable.name = redactText(mutable.name);\n cleanAttributes(mutable.attributes);\n if (mutable.status.message) mutable.status.message = redactText(mutable.status.message);\n for (const event of mutable.events) cleanAttributes(event.attributes);\n } catch {\n // A non-standard immutable span is left untouched rather than breaking export.\n }\n }\n\n forceFlush(): Promise<void> { return Promise.resolve(); }\n shutdown(): Promise<void> { return Promise.resolve(); }\n}\n"],"mappings":"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","names":["trace","trace","context","metrics","trace","logs","trace","SpanStatusCode","trace","SpanStatusCode","logs","trace","metrics"]}
|