{"version":3,"file":"logSinkTelemetry-Cn1v96cG.cjs","names":["isSpanContextValid","trace","context","_opentelemetry_api","SESSION_ID_HEADERS","PARENT_SESSION_ID_HEADERS","TRANSPORT_SESSION_HEADERS","TRUE_VALUES","TRACEPARENT_PATTERN","SENSITIVE_ATTRIBUTE_PARTS","SAFE_RESULT_KEYS","SAFE_METADATA_KEY_PARTS","SAFE_INPUT_KEYS","SAFE_IDENTIFIER_KEY_PARTS","SAFE_STRING_KEY_PARTS","recordObservers","subscribeTelemetryRecords","observer","isTruthy","value","normalizeToken","fallback","hashIdentifier","hash","index","isSafeMetadataKey","normalized","key","part","isSensitiveKey","hasSafeStringMeaning","hasSafeIdentifierMeaning","isScalar","sanitizeValue","sanitizeTelemetryAttributes","sanitized","attributes","safeValue","safeErrorToken","errorType","error","describeError","depth","entry","rawCode","code","aggregate","cause","warningDetail","errorCode","errorAttributes","firstEnvironmentValue","keys","env","createTelemetryHeaders","headers","serviceName","sessionId","parentSessionId","createTransportEnvironment","transportEnv","defaultStatus","options","createSafeCallbackError","parentContext","parent","match","traceId","spanId","traceFlags","spanContext","childTraceContext","span","createDoomTelemetryService","telemetryFactory","endpointResolver","warn","message","reportWarning","retryDelayMs","allowFileFallback","defaultTelemetryStatus","currentStatus","handle","initialization","retryAfter","shutdownPromise","shutdownRequested","reportedFailures","disabledByEnvironment","publish","record","initialize","defaults","runtimeLoader","resolveEndpoints","createTelemetry","resolvedEndpoints","endpoints","nextHandle","getHandle","emit","safeEvent","event","safeAttributes","failureKey","level","errorOptions","failure","flush","pendingInitialization","callbackPromise","callbackFailure","invokeCallback","callback","child","startedAt","nextParentContext","name","result","safeError","currentHandle","nodeTelemetryModule","loadNodeTelemetryRuntime","module","createDoomTelemetry"],"sources":["../src/services/telemetry/index.ts","../src/services/logSinkTelemetry/index.ts"],"sourcesContent":["import { context, isSpanContextValid, trace, type Context, type Span } from '@opentelemetry/api';\n\nimport type {\n  DoomTelemetry,\n  DoomTelemetryAttributes,\n  DoomTelemetryErrorOptions,\n  DoomTelemetryEventLevel,\n  DoomTelemetryHandle,\n  DoomTelemetryOptions,\n  DoomTelemetryRecord,\n  DoomTelemetryRuntimeLoader,\n  DoomTelemetryStatus,\n  DoomTraceContext,\n} from '../../types/telemetry';\n\nconst DEFAULT_RETRY_DELAY_MS = 1_000;\nconst MAX_WARNING_DETAIL_LENGTH = 512;\nconst MAX_WARNING_DETAIL_DEPTH = 3;\nconst MAX_ATTRIBUTE_STRING_LENGTH = 128;\nconst MAX_REPORTED_FAILURES = 500;\nconst MAX_EVENT_NAME_LENGTH = 128;\nconst SESSION_ID_HEADERS = ['AGENT_SESSION_ID', 'PI_SESSION_ID'] as const;\nconst PARENT_SESSION_ID_HEADERS = ['AGENT_PARENT_SESSION_ID', 'PARENT_AGENT_SESSION_ID'] as const;\nconst TRANSPORT_SESSION_HEADERS = ['PI_SESSION_ID', 'AGENT_PARENT_SESSION_ID'] as const;\nconst TRUE_VALUES = new Set(['1', 'true', 'yes']);\nconst SPAN_STATUS_ERROR = 2;\nconst TRACEPARENT_PATTERN = /^00-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/u;\nconst SENSITIVE_ATTRIBUTE_PARTS = [\n  'prompt',\n  'message',\n  'content',\n  'payload',\n  'command',\n  'cwd',\n  'path',\n  'file',\n  'stack',\n  'traceback',\n  'transcript',\n  'diff',\n  'secret',\n  'authorization',\n  'header',\n  'environment',\n  'env',\n  'details',\n  'args',\n] as const;\nconst SAFE_RESULT_KEYS = new Set([\n  'tool.result.error',\n  'tool.result.count',\n  'tool.result.bytes',\n  'tool.result.duration_ms',\n]);\nconst SAFE_METADATA_KEY_PARTS = new Set([\n  'count',\n  'length',\n  'bytes',\n  'duration',\n  'duration_ms',\n  'size',\n  'index',\n  'number',\n  'active',\n  'enabled',\n  'previous',\n  'empty',\n  'silent',\n  'fallback',\n  'bypass',\n  'success',\n  'is_error',\n  'has_ui',\n  'requires_confirmation',\n  'exit_code',\n  'status_code',\n  'interval_seconds',\n  'concurrency',\n  'budget',\n]);\nconst SAFE_INPUT_KEYS = new Set([\n  'gen_ai.usage.input_tokens',\n  'gen_ai.usage.output_tokens',\n  'gen_ai.usage.total_tokens',\n  'gen_ai.usage.cache_read_tokens',\n  'gen_ai.usage.cache_write_tokens',\n  'gen_ai.usage.reasoning_tokens',\n]);\nconst SAFE_IDENTIFIER_KEY_PARTS = [\n  'id',\n  'correlation',\n  'session',\n  'trace',\n  'span',\n  'call',\n  'run',\n  'job',\n  'step',\n] as const;\nconst SAFE_STRING_KEY_PARTS = [\n  'name',\n  'operation',\n  'outcome',\n  'reason',\n  'status',\n  'mode',\n  'source',\n  'phase',\n  'engine',\n  'provider',\n  'model',\n  'level',\n  'type',\n  'code',\n  'signal',\n  'finish_reasons',\n  'trigger',\n  'action',\n  'kind',\n  'version',\n  'scope',\n  'layer',\n  'profile',\n  'domain',\n  'theme',\n  'leader',\n  'pass',\n  'role',\n  'stage',\n  'state',\n  'language',\n  'transport',\n  'adapter',\n  'runtime',\n  'backend',\n  'launcher',\n  'event',\n  'component',\n  'package',\n  'command_name',\n  'tool_name',\n  'token_attribution',\n] as const;\n\nconst recordObservers = new Set<(record: DoomTelemetryRecord) => void>();\n\nexport function subscribeTelemetryRecords(observer: (record: DoomTelemetryRecord) => void): () => void {\n  recordObservers.add(observer);\n  return () => recordObservers.delete(observer);\n}\n\nfunction isTruthy(value: string | undefined): boolean {\n  return value !== undefined && TRUE_VALUES.has(value.toLowerCase());\n}\n\nfunction normalizeToken(value: string, fallback: string): string {\n  const normalized = value.replace(/[^a-zA-Z0-9._:-]/g, '_').slice(0, MAX_ATTRIBUTE_STRING_LENGTH);\n  return normalized || fallback;\n}\n\nfunction hashIdentifier(value: string): string {\n  let hash = 2166136261;\n  for (let index = 0; index < value.length; index += 1) {\n    hash ^= value.charCodeAt(index);\n    hash = Math.imul(hash, 16777619);\n  }\n  return `id_${(hash >>> 0).toString(16).padStart(8, '0')}`;\n}\n\nfunction isSafeMetadataKey(key: string): boolean {\n  const normalized = key.toLowerCase();\n  return [...SAFE_METADATA_KEY_PARTS].some(\n    (part) => normalized === part || normalized.endsWith(`.${part}`) || normalized.endsWith(`_${part}`),\n  );\n}\n\nfunction isSensitiveKey(key: string): boolean {\n  const normalized = key.toLowerCase();\n  if (SAFE_RESULT_KEYS.has(normalized) || SAFE_INPUT_KEYS.has(normalized) || isSafeMetadataKey(normalized))\n    return false;\n  return SENSITIVE_ATTRIBUTE_PARTS.some((part) => normalized.split(/[._-]/u).includes(part));\n}\n\nfunction hasSafeStringMeaning(key: string): boolean {\n  const normalized = key.toLowerCase();\n  return SAFE_STRING_KEY_PARTS.some(\n    (part) => normalized === part || normalized.endsWith(`.${part}`) || normalized.endsWith(`_${part}`),\n  );\n}\n\nfunction hasSafeIdentifierMeaning(key: string): boolean {\n  const normalized = key.toLowerCase();\n  return SAFE_IDENTIFIER_KEY_PARTS.some(\n    (part) => normalized === part || normalized.endsWith(`.${part}`) || normalized.endsWith(`_${part}`),\n  );\n}\n\nfunction isScalar(value: unknown): value is string | number | boolean {\n  return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';\n}\n\nfunction sanitizeValue(key: string, value: string | number | boolean): string | number | boolean | undefined {\n  if (typeof value === 'number') return Number.isFinite(value) ? value : undefined;\n  if (typeof value === 'boolean') return value;\n  if (value.length === 0 || value.length > MAX_ATTRIBUTE_STRING_LENGTH) return undefined;\n  if (hasSafeIdentifierMeaning(key)) return hashIdentifier(value);\n  if (!hasSafeStringMeaning(key)) return undefined;\n  if (key === 'telemetry.package' || key.endsWith('.package')) {\n    if (value.startsWith('/') || value.includes('\\\\')) return undefined;\n    return value.replace(/[^a-zA-Z0-9@/._:-]/g, '_');\n  }\n  return normalizeToken(value, 'unknown');\n}\n\nexport function sanitizeTelemetryAttributes(attributes: Record<string, unknown> = {}): DoomTelemetryAttributes {\n  const sanitized: DoomTelemetryAttributes = {};\n  for (const [key, value] of Object.entries(attributes)) {\n    if (isSensitiveKey(key) || !isScalar(value)) continue;\n    const safeValue = sanitizeValue(key, value);\n    if (safeValue !== undefined) sanitized[key] = safeValue;\n  }\n  return sanitized;\n}\n\nfunction safeErrorToken(value: string, fallback: string): string {\n  if (!/^[a-zA-Z][a-zA-Z0-9._:-]{0,63}$/u.test(value)) return fallback;\n  return normalizeToken(value, fallback);\n}\n\nfunction errorType(error: unknown): string {\n  if (error instanceof Error) return safeErrorToken(error.name, 'Error');\n  if (typeof error === 'string') return 'StringError';\n  if (error && typeof error === 'object') return 'ObjectError';\n  return 'UnknownError';\n}\n\n/**\n * Format an error for a local diagnostic warning.\n *\n * Deliberately separate from errorType: that produces a redacted token for the\n * exported `error.type` attribute and must stay metadata-only, whereas warnings\n * go to the local operator and are useless without the actual cause. Arrays are\n * unwrapped because OpenTelemetry's forceFlush rejects with one.\n */\nfunction describeError(error: unknown, depth = 0): string {\n  if (depth > MAX_WARNING_DETAIL_DEPTH) return '...';\n  if (Array.isArray(error)) return error.map((entry) => describeError(entry, depth + 1)).join('; ');\n  if (error instanceof Error) {\n    const rawCode = 'code' in error ? (error as { code?: unknown }).code : undefined;\n    const code = typeof rawCode === 'string' || typeof rawCode === 'number' ? ` (code ${rawCode})` : '';\n    const aggregate = error instanceof AggregateError ? `: ${describeError(error.errors, depth + 1)}` : '';\n    const cause = error.cause === undefined ? '' : ` <- caused by ${describeError(error.cause, depth + 1)}`;\n    return `${error.name}: ${error.message}${code}${aggregate}${cause}`;\n  }\n  if (typeof error === 'string') return error;\n  if (error && typeof error === 'object') {\n    try {\n      return JSON.stringify(error);\n    } catch {\n      return 'ObjectError';\n    }\n  }\n  return String(error);\n}\n\nfunction warningDetail(error: unknown): string {\n  return describeError(error).slice(0, MAX_WARNING_DETAIL_LENGTH);\n}\n\nfunction errorCode(error: unknown): string | undefined {\n  if (!error || typeof error !== 'object' || !('code' in error)) return undefined;\n  const code = (error as { code?: unknown }).code;\n  if (typeof code !== 'string' && typeof code !== 'number') return undefined;\n  const normalized = String(code);\n  return /^[a-zA-Z0-9][a-zA-Z0-9._:-]{0,63}$/u.test(normalized) ? normalizeToken(normalized, 'unknown') : undefined;\n}\n\nfunction errorAttributes(error: unknown): DoomTelemetryAttributes {\n  const attributes: DoomTelemetryAttributes = {\n    'error.type': errorType(error),\n    outcome: 'error',\n  };\n  const code = errorCode(error);\n  if (code) attributes['error.code'] = code;\n  return attributes;\n}\n\nfunction firstEnvironmentValue(env: NodeJS.ProcessEnv, keys: readonly string[]): string | undefined {\n  for (const key of keys) {\n    const value = env[key]?.trim();\n    if (value) return value;\n  }\n  return undefined;\n}\n\nexport function createTelemetryHeaders(serviceName: string, env: NodeJS.ProcessEnv): Record<string, string> {\n  const headers: Record<string, string> = { 'x-agent': normalizeToken(serviceName, 'doom') };\n  const sessionId = firstEnvironmentValue(env, SESSION_ID_HEADERS);\n  const parentSessionId = firstEnvironmentValue(env, PARENT_SESSION_ID_HEADERS);\n  if (sessionId) headers['x-agent-session-id'] = hashIdentifier(sessionId);\n  if (parentSessionId) headers['x-agent-parent-session-id'] = hashIdentifier(parentSessionId);\n  return headers;\n}\n\nfunction createTransportEnvironment(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv {\n  const transportEnv = { ...env };\n  const sessionId = firstEnvironmentValue(env, SESSION_ID_HEADERS);\n  const parentSessionId = firstEnvironmentValue(env, PARENT_SESSION_ID_HEADERS);\n  if (sessionId) transportEnv.AGENT_SESSION_ID = hashIdentifier(sessionId);\n  else delete transportEnv.AGENT_SESSION_ID;\n  if (parentSessionId) transportEnv.PARENT_AGENT_SESSION_ID = hashIdentifier(parentSessionId);\n  else delete transportEnv.PARENT_AGENT_SESSION_ID;\n  for (const key of TRANSPORT_SESSION_HEADERS) delete transportEnv[key];\n  for (const key of Object.keys(transportEnv)) {\n    if (key.startsWith('WORKFLOW_')) delete transportEnv[key];\n  }\n  return transportEnv;\n}\n\nfunction defaultStatus(options: DoomTelemetryOptions): DoomTelemetryStatus {\n  return {\n    serviceName: options.serviceName,\n    packageName: options.packageName,\n    backend: 'disabled',\n    enabled: false,\n    endpointSource: 'none',\n    traces: false,\n    fileFallback: false,\n  };\n}\n\nfunction createSafeCallbackError(error: unknown): Error {\n  return new Error(`Doom telemetry callback failed: ${errorType(error)}`);\n}\n\nfunction parentContext(parent: DoomTraceContext | undefined): Context | undefined {\n  if (!parent) return undefined;\n  const match = TRACEPARENT_PATTERN.exec(parent.traceparent);\n  if (!match) return undefined;\n  const [, traceId, spanId, traceFlags] = match;\n  if (!traceId || !spanId || !traceFlags) return undefined;\n  const spanContext = { traceId, spanId, traceFlags: Number.parseInt(traceFlags, 16), isRemote: true };\n  return isSpanContextValid(spanContext) ? trace.setSpanContext(context.active(), spanContext) : undefined;\n}\n\nfunction childTraceContext(span: Span | undefined): DoomTraceContext | undefined {\n  if (!span) return undefined;\n  const spanContext = span.spanContext();\n  if (!isSpanContextValid(spanContext)) return undefined;\n  const traceFlags = spanContext.traceFlags.toString(16).padStart(2, '0');\n  return { traceparent: `00-${spanContext.traceId}-${spanContext.spanId}-${traceFlags}` };\n}\nexport function createDoomTelemetryService(\n  options: DoomTelemetryOptions,\n  runtimeLoader?: DoomTelemetryRuntimeLoader,\n): DoomTelemetry {\n  const env = options.env ?? process.env;\n  const telemetryFactory = options.telemetryFactory;\n  const endpointResolver = options.endpointResolver;\n  const transportEnv = createTransportEnvironment(env);\n  const warn = options.warn ?? ((message: string) => process.emitWarning(message));\n  const reportWarning = (message: string): void => {\n    try {\n      warn(message);\n    } catch (error) {\n      process.emitWarning(`Doom telemetry warning callback failed: ${warningDetail(error)}`);\n    }\n  };\n  const retryDelayMs = options.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS;\n  const allowFileFallback = options.allowFileFallback ?? isTruthy(env.LOG_SINK_PI_FILE_FALLBACK);\n  const defaultTelemetryStatus = defaultStatus(options);\n  let currentStatus = defaultTelemetryStatus;\n  let handle: DoomTelemetryHandle | undefined;\n  let initialization: Promise<DoomTelemetryHandle | undefined> | undefined;\n  let retryAfter = 0;\n  let shutdownPromise: Promise<void> | undefined;\n  let shutdownRequested = false;\n  const reportedFailures = new Set<string>();\n\n  const disabledByEnvironment = (): boolean =>\n    isTruthy(env.AGENT_TELEMETRY_DISABLED) || isTruthy(env.OTEL_SDK_DISABLED);\n\n  const publish = (record: DoomTelemetryRecord): void => {\n    for (const observer of [...recordObservers, ...(options.onRecord ? [options.onRecord] : [])]) {\n      try {\n        observer(record);\n      } catch (error) {\n        reportWarning(`Doom telemetry observer failed: ${warningDetail(error)}`);\n      }\n    }\n  };\n\n  const initialize = async (): Promise<DoomTelemetryHandle | undefined> => {\n    if (disabledByEnvironment() || shutdownRequested) return undefined;\n    const defaults = telemetryFactory && endpointResolver ? undefined : await runtimeLoader?.();\n    const resolveEndpoints = endpointResolver ?? defaults?.resolveNodeTelemetryEndpoints;\n    const createTelemetry = telemetryFactory ?? defaults?.createNodeTelemetry;\n    if (!resolveEndpoints || !createTelemetry) throw new Error('Node telemetry runtime is unavailable.');\n    const resolvedEndpoints =\n      options.telemetryFactory && !options.endpointResolver\n        ? undefined\n        : await resolveEndpoints({\n            cwd: options.cwd,\n            env,\n            packageName: options.packageName,\n            serviceName: options.serviceName,\n            workspaceRoot: options.workspaceRoot,\n            discoverEndpoint: true,\n            healthCheck: true,\n          });\n    const endpoints = resolvedEndpoints ?? { endpointSource: 'env' as const, endpoint: 'injected' };\n    if (!endpoints.endpoint && !endpoints.tracesEndpoint && !endpoints.logsEndpoint && !allowFileFallback) {\n      retryAfter = Date.now() + retryDelayMs;\n      currentStatus = { ...defaultTelemetryStatus };\n      return undefined;\n    }\n    const nextHandle = await createTelemetry({\n      serviceName: options.serviceName,\n      packageName: options.packageName,\n      cwd: options.cwd,\n      workspaceRoot: options.workspaceRoot,\n      env: transportEnv,\n      discoverEndpoint: resolvedEndpoints === undefined,\n      resolvedEndpoints,\n      enableLogs: options.enableLogs ?? true,\n      enableTraces: options.enableTraces ?? true,\n      headers: createTelemetryHeaders(options.serviceName, env),\n    });\n    if (shutdownRequested) {\n      await nextHandle.shutdown().catch((error: unknown) => {\n        reportWarning(`Doom telemetry late initialization shutdown failed: ${warningDetail(error)}`);\n      });\n      return undefined;\n    }\n    if (nextHandle.backend === 'file' && !allowFileFallback) {\n      await nextHandle\n        .shutdown()\n        .catch((error: unknown) => reportWarning(`Doom telemetry fallback shutdown failed: ${warningDetail(error)}`));\n      currentStatus = { ...defaultTelemetryStatus };\n      return undefined;\n    }\n    handle = nextHandle;\n    currentStatus = {\n      serviceName: options.serviceName,\n      packageName: options.packageName,\n      backend: nextHandle.backend,\n      enabled: nextHandle.enabled,\n      endpoint: nextHandle.endpoint,\n      endpointSource: nextHandle.endpointSource,\n      traces: Boolean(options.enableTraces ?? true),\n      fileFallback: nextHandle.backend === 'file',\n    };\n    try {\n      options.onStatus?.({ ...currentStatus });\n    } catch (error) {\n      reportWarning(`Doom telemetry status observer failed: ${warningDetail(error)}`);\n    }\n    return nextHandle;\n  };\n\n  const getHandle = async (): Promise<DoomTelemetryHandle | undefined> => {\n    if (disabledByEnvironment() || shutdownRequested) return undefined;\n    if (handle) return handle;\n    if (Date.now() < retryAfter) return undefined;\n    initialization ??= initialize()\n      .catch((error: unknown) => {\n        retryAfter = Date.now() + retryDelayMs;\n        reportWarning(`Doom telemetry initialization failed: ${warningDetail(error)}`);\n        return undefined;\n      })\n      .finally(() => {\n        initialization = undefined;\n      });\n    return initialization;\n  };\n\n  const emit = async (\n    level: DoomTelemetryEventLevel,\n    event: string,\n    error: unknown,\n    attributes: Record<string, unknown> | undefined,\n    errorOptions?: DoomTelemetryErrorOptions,\n  ): Promise<void> => {\n    const safeEvent = normalizeToken(event, 'doom.telemetry.event').slice(0, MAX_EVENT_NAME_LENGTH);\n    const safeAttributes = sanitizeTelemetryAttributes({\n      'telemetry.package': options.packageName,\n      ...attributes,\n      ...(error === undefined ? {} : errorAttributes(error)),\n    });\n    if (error !== undefined) {\n      const failureKey = `${safeEvent}:${level}:${JSON.stringify(safeAttributes)}`;\n      if (reportedFailures.has(failureKey)) return;\n      if (reportedFailures.size >= MAX_REPORTED_FAILURES) reportedFailures.clear();\n      reportedFailures.add(failureKey);\n    }\n    const record: DoomTelemetryRecord = { event: safeEvent, level, attributes: safeAttributes };\n    publish(record);\n    try {\n      const nextHandle = await getHandle();\n      nextHandle?.logger[level](safeEvent, {\n        attributes: safeAttributes,\n        ...(errorOptions?.includeException === true && error !== undefined ? { exception: error } : {}),\n      });\n    } catch (failure) {\n      reportWarning(`Doom telemetry record failed: ${warningDetail(failure)}`);\n    }\n  };\n\n  const flush = async (): Promise<void> => {\n    try {\n      const pendingInitialization = initialization;\n      if (pendingInitialization) await pendingInitialization;\n      await handle?.flush();\n    } catch (error) {\n      reportWarning(`Doom telemetry flush failed: ${warningDetail(error)}`);\n    }\n  };\n\n  return {\n    recordDebug(event, attributes) {\n      return emit('debug', event, undefined, attributes);\n    },\n    recordEvent(event, attributes) {\n      return emit('info', event, undefined, attributes);\n    },\n    recordWarning(event, error, attributes) {\n      return emit('warn', event, error, attributes);\n    },\n    recordError(event, error, attributes, errorOptions) {\n      return emit('error', event, error, attributes, errorOptions);\n    },\n    async runInSpan<T>(\n      name: string,\n      attributes: Record<string, unknown>,\n      callback: (context?: DoomTraceContext) => Promise<T> | T,\n      parent?: DoomTraceContext,\n    ) {\n      let callbackPromise: Promise<T> | undefined;\n      let callbackFailure: { value: unknown } | undefined;\n      const invokeCallback = (child?: DoomTraceContext): Promise<T> => {\n        callbackPromise ??= Promise.resolve().then(() => callback(child));\n        return callbackPromise;\n      };\n      const nextHandle = await getHandle();\n      if (!nextHandle) return invokeCallback();\n      const startedAt = Date.now();\n      try {\n        const nextParentContext = parentContext(parent);\n        return await nextHandle.runInSpan(\n          normalizeToken(name, 'doom.telemetry.span'),\n          {\n            attributes: sanitizeTelemetryAttributes(attributes),\n            ...(nextParentContext ? { context: nextParentContext } : {}),\n          },\n          async (span) => {\n            const child = childTraceContext(span);\n            try {\n              const result = await invokeCallback(child);\n              span?.setAttribute('duration_ms', Date.now() - startedAt);\n              span?.setAttribute('outcome', 'success');\n              return result;\n            } catch (error) {\n              callbackFailure = { value: error };\n              const safeError = errorAttributes(error);\n              for (const [key, value] of Object.entries(safeError)) span?.setAttribute(key, value);\n              span?.setAttribute('duration_ms', Date.now() - startedAt);\n              span?.setStatus({ code: SPAN_STATUS_ERROR });\n              throw createSafeCallbackError(error);\n            }\n          },\n        );\n      } catch (error) {\n        if (callbackFailure) return Promise.reject(callbackFailure.value);\n        if (callbackPromise) return callbackPromise;\n        reportWarning(`Doom telemetry span failed: ${warningDetail(error)}`);\n        return invokeCallback();\n      }\n    },\n    flush,\n    async shutdown() {\n      if (shutdownPromise) return shutdownPromise;\n      shutdownRequested = true;\n      shutdownPromise = (async () => {\n        await flush();\n        const currentHandle = handle;\n        handle = undefined;\n        if (!currentHandle) return;\n        try {\n          await currentHandle.shutdown();\n        } catch (error) {\n          reportWarning(`Doom telemetry shutdown failed: ${warningDetail(error)}`);\n        }\n      })();\n      return shutdownPromise;\n    },\n    status() {\n      return { ...currentStatus };\n    },\n  };\n}\n","import type { DoomTelemetry, DoomTelemetryOptions, DoomTelemetryRuntime } from '../../types/telemetry';\nimport {\n  createDoomTelemetryService,\n  createTelemetryHeaders,\n  sanitizeTelemetryAttributes,\n  subscribeTelemetryRecords,\n} from '../telemetry';\n\nexport type {\n  DoomTelemetry,\n  DoomTelemetryAttributes,\n  DoomTelemetryErrorOptions,\n  DoomTelemetryEventLevel,\n  DoomTelemetryOptions,\n  DoomTelemetryRecord,\n  DoomTelemetryStatus,\n  DoomTraceContext,\n} from '../../types/telemetry';\n\nlet nodeTelemetryModule: Promise<typeof import('@agimon-ai/log-sink-mcp/telemetry/node')> | undefined;\n\nasync function loadNodeTelemetryRuntime(): Promise<DoomTelemetryRuntime> {\n  nodeTelemetryModule ??= import('@agimon-ai/log-sink-mcp/telemetry/node');\n  const module = await nodeTelemetryModule;\n  return {\n    createNodeTelemetry: module.createNodeTelemetry,\n    resolveNodeTelemetryEndpoints: module.resolveNodeTelemetryEndpoints,\n  };\n}\n\nexport function createDoomTelemetry(options: DoomTelemetryOptions): DoomTelemetry {\n  return createDoomTelemetryService(options, loadNodeTelemetryRuntime);\n}\n\nexport { createTelemetryHeaders, sanitizeTelemetryAttributes, subscribeTelemetryRecords };\n"],"mappings":"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"}