{"version":3,"sources":["../src/shutdown.ts","../src/flatten-attributes.ts","../src/structured-error.ts","../src/request-logger.ts"],"names":["getEventQueue","getSdk","getLogger","_closeEmbeddedDevtools","resetEvents","resetMetrics","resetEventQueue","ctx","SpanStatusCode","AsyncLocalStorage","span","otelTrace","createTraceContext","attrs"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Graceful shutdown with flush and cleanup\n */\n\nimport { getSdk, getLogger, _closeEmbeddedDevtools } from './init';\nimport { getEventQueue, resetEventQueue } from './track';\nimport { resetEvents } from './event';\nimport { resetMetrics } from './metric';\n\n/**\n * Flush all pending telemetry\n *\n * Flushes both events events and OpenTelemetry spans to their destinations.\n * Includes timeout protection to prevent hanging in serverless environments.\n *\n * Safe to call multiple times.\n *\n * @param options - Optional configuration\n * @param options.timeout - Timeout in milliseconds (default: 2000ms)\n * @param options.forShutdown - If true, permanently disables the events queue after flush (used internally by shutdown())\n *\n * @example Manual flush in serverless\n * ```typescript\n * import { flush } from 'autotel';\n *\n * export const handler = async (event) => {\n *   // ... process event\n *   await flush(); // Flush before function returns\n *   return result;\n * };\n * ```\n *\n * @example With custom timeout\n * ```typescript\n * await flush({ timeout: 5000 }); // 5 second timeout\n * ```\n */\nexport async function flush(options?: {\n  timeout?: number;\n  forShutdown?: boolean;\n}): Promise<void> {\n  const timeout = options?.timeout ?? 2000;\n  const forShutdown = options?.forShutdown ?? false;\n\n  const doFlush = async () => {\n    // Flush events queue (or shutdown queue when tearing down)\n    const eventsQueue = getEventQueue();\n    if (eventsQueue) {\n      if (forShutdown) {\n        await eventsQueue.shutdown();\n      } else {\n        await eventsQueue.flush();\n      }\n    }\n\n    // Flush OpenTelemetry spans\n    // This ensures spans are exported immediately, critical for serverless\n    const sdk = getSdk();\n    if (sdk) {\n      try {\n        // Type assertion needed as getTracerProvider is not in the public NodeSDK interface\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const sdkAny = sdk as any;\n        if (typeof sdkAny.getTracerProvider === 'function') {\n          const tracerProvider = sdkAny.getTracerProvider();\n          if (\n            tracerProvider &&\n            typeof tracerProvider.forceFlush === 'function'\n          ) {\n            await tracerProvider.forceFlush();\n          }\n        }\n      } catch {\n        // Ignore errors when accessing tracer provider (may not be available in test mocks)\n      }\n    }\n  };\n\n  // Add timeout protection to prevent hanging\n  let timeoutHandle: NodeJS.Timeout | undefined;\n  try {\n    await Promise.race([\n      doFlush().finally(() => {\n        // Clear timeout as soon as flush completes\n        if (timeoutHandle) {\n          clearTimeout(timeoutHandle);\n        }\n      }),\n      new Promise<void>((_, reject) => {\n        timeoutHandle = setTimeout(\n          () => reject(new Error('Flush timeout')),\n          timeout,\n        );\n        // Use unref() to allow Node to exit if flush completes first\n        // This prevents the 2s delay in serverless when flush succeeds immediately\n        timeoutHandle.unref();\n      }),\n    ]);\n  } catch (error) {\n    // Clear timeout on error too\n    if (timeoutHandle) {\n      clearTimeout(timeoutHandle);\n    }\n    const logger = getLogger();\n    logger.error(\n      {\n        err: error instanceof Error ? error : new Error(String(error)),\n      },\n      '[autotel] Flush error',\n    );\n    throw error;\n  }\n}\n\n/**\n * Shutdown telemetry and cleanup resources\n *\n * - Flushes all pending data\n * - Shuts down OpenTelemetry SDK\n * - Cleans up resources\n *\n * Call this before process exit.\n *\n * Always performs cleanup even if flush fails, preventing resource leaks\n * in serverless handlers or tests.\n *\n * @example Express server\n * ```typescript\n * const server = app.listen(3000)\n *\n * process.on('SIGTERM', async () => {\n *   await server.close()\n *   await shutdown()\n *   process.exit(0)\n * })\n * ```\n */\nexport async function shutdown(): Promise<void> {\n  const logger = getLogger();\n  let shutdownError: Error | null = null;\n\n  // Attempt to flush (with queue shutdown so new events are rejected), but continue with cleanup even if it fails\n  try {\n    await flush({ forShutdown: true });\n  } catch (error) {\n    const err = error instanceof Error ? error : new Error(String(error));\n    shutdownError = err;\n    logger.error(\n      {\n        err,\n      },\n      '[autotel] Flush failed during shutdown, continuing cleanup',\n    );\n  }\n\n  // Always shutdown SDK and clean up resources\n  try {\n    // Shutdown OpenTelemetry SDK\n    const sdk = getSdk();\n    if (sdk) {\n      await sdk.shutdown();\n    }\n  } catch (error) {\n    const err = error instanceof Error ? error : new Error(String(error));\n\n    // Ignore ECONNREFUSED errors - this happens when no OTLP endpoint was configured\n    // The SDK tries to flush exporters that don't exist, which is harmless\n    const isConnectionRefused =\n      typeof error === 'object' &&\n      error !== null &&\n      'code' in error &&\n      error.code === 'ECONNREFUSED';\n\n    if (!isConnectionRefused) {\n      // Only store/log non-connection errors\n      if (!shutdownError) {\n        shutdownError = err;\n      }\n      logger.error({ err }, '[autotel] SDK shutdown failed');\n    }\n  } finally {\n    await _closeEmbeddedDevtools();\n\n    // Clean up singleton Maps and queues to prevent memory leaks\n    // This runs even if SDK shutdown fails\n    const eventsQueue = getEventQueue();\n    if (eventsQueue && typeof eventsQueue.cleanup === 'function') {\n      eventsQueue.cleanup();\n    }\n    resetEvents();\n    resetMetrics();\n    resetEventQueue();\n  }\n\n  // Rethrow first error after cleanup completes\n  // This allows tests and CI to detect failures while still ensuring cleanup\n  if (shutdownError) {\n    throw shutdownError;\n  }\n}\n\n/**\n * Register automatic shutdown hooks for common signals\n *\n * Handles:\n * - SIGTERM (Docker/K8s graceful shutdown)\n * - SIGINT (Ctrl+C)\n *\n * @internal Called automatically on module load\n */\nfunction registerShutdownHooks(): void {\n  if (typeof process === 'undefined') return; // Not in Node.js\n\n  const signals: NodeJS.Signals[] = ['SIGTERM', 'SIGINT'];\n  let shuttingDown = false;\n\n  for (const signal of signals) {\n    process.on(signal, async () => {\n      if (shuttingDown) return; // Prevent double shutdown\n      shuttingDown = true;\n\n      if (process.env.NODE_ENV !== 'test') {\n        getLogger().info(\n          {},\n          `[autotel] Received ${signal}, flushing telemetry...`,\n        );\n      }\n\n      try {\n        await shutdown();\n      } catch (error) {\n        getLogger().error(\n          {\n            err: error instanceof Error ? error : undefined,\n          },\n          '[autotel] Error during shutdown',\n        );\n      } finally {\n        process.exit(0);\n      }\n    });\n  }\n}\n\n// Auto-register shutdown hooks\nregisterShutdownHooks();\n","import type { AttributeValue } from './trace-context';\n\n/**\n * Convert an unknown value to an OTel-compatible AttributeValue.\n * Returns undefined when the value cannot be represented.\n */\nexport function toAttributeValue(value: unknown): AttributeValue | undefined {\n  if (\n    typeof value === 'string' ||\n    typeof value === 'number' ||\n    typeof value === 'boolean'\n  ) {\n    return value;\n  }\n  if (Array.isArray(value)) {\n    if (\n      value.every((v) => typeof v === 'string') ||\n      value.every((v) => typeof v === 'number') ||\n      value.every((v) => typeof v === 'boolean')\n    ) {\n      return value as AttributeValue;\n    }\n    try {\n      return JSON.stringify(value);\n    } catch {\n      return '<serialization-failed>';\n    }\n  }\n  if (value instanceof Date) {\n    return value.toISOString();\n  }\n  if (value instanceof Error) {\n    return value.message;\n  }\n  return undefined;\n}\n\n/**\n * Recursively flatten a nested object into dot-notation OTel attributes.\n * Includes circular reference protection via WeakSet.\n */\nexport function flattenToAttributes(\n  fields: Record<string, unknown>,\n  prefix = '',\n): Record<string, AttributeValue> {\n  const out: Record<string, AttributeValue> = {};\n  const seen = new WeakSet<object>();\n\n  function flatten(obj: Record<string, unknown>, currentPrefix: string): void {\n    for (const [key, value] of Object.entries(obj)) {\n      if (value == null) continue;\n      const nextKey = currentPrefix ? `${currentPrefix}.${key}` : key;\n\n      const attr = toAttributeValue(value);\n      if (attr !== undefined) {\n        out[nextKey] = attr;\n        continue;\n      }\n\n      if (typeof value === 'object' && value.constructor === Object) {\n        if (seen.has(value)) {\n          out[nextKey] = '<circular-reference>';\n          continue;\n        }\n        seen.add(value);\n        flatten(value as Record<string, unknown>, nextKey);\n        continue;\n      }\n\n      try {\n        out[nextKey] = JSON.stringify(value);\n      } catch {\n        out[nextKey] = '<serialization-failed>';\n      }\n    }\n  }\n\n  flatten(fields, prefix);\n  return out;\n}\n","import { SpanStatusCode } from '@opentelemetry/api';\nimport type { AttributeValue, TraceContext } from './trace-context';\nimport { flattenToAttributes } from './flatten-attributes';\n\nexport interface StructuredErrorInput {\n  message: string;\n  why?: string;\n  fix?: string;\n  link?: string;\n  code?: string | number;\n  status?: number;\n  cause?: unknown;\n  details?: Record<string, unknown>;\n  name?: string;\n}\n\nexport interface StructuredError extends Error {\n  why?: string;\n  fix?: string;\n  link?: string;\n  code?: string | number;\n  status?: number;\n  details?: Record<string, unknown>;\n}\n\nexport function createStructuredError(\n  input: StructuredErrorInput,\n): StructuredError {\n  const error = new Error(input.message, {\n    cause: input.cause,\n  }) as StructuredError;\n\n  error.name = input.name ?? 'StructuredError';\n  if (input.why !== undefined) error.why = input.why;\n  if (input.fix !== undefined) error.fix = input.fix;\n  if (input.link !== undefined) error.link = input.link;\n  if (input.code !== undefined) error.code = input.code;\n  if (input.status !== undefined) error.status = input.status;\n  if (input.details !== undefined) error.details = input.details;\n\n  error.toString = () => {\n    const lines = [`${error.name}: ${error.message}`];\n    if (error.why) lines.push(`  Why: ${error.why}`);\n    if (error.fix) lines.push(`  Fix: ${error.fix}`);\n    if (error.link) lines.push(`  Link: ${error.link}`);\n    if (error.code !== undefined) lines.push(`  Code: ${error.code}`);\n    if (error.status !== undefined) lines.push(`  Status: ${error.status}`);\n    if (error.cause) lines.push(`  Caused by: ${error.cause}`);\n    return lines.join('\\n');\n  };\n\n  return error;\n}\n\nexport function getStructuredErrorAttributes(\n  error: Error,\n): Record<string, AttributeValue> {\n  const structured = error as StructuredError;\n  const attributes: Record<string, AttributeValue> = {\n    'error.type': error.name || 'Error',\n    'error.message': error.message,\n  };\n\n  if (error.stack) attributes['error.stack'] = error.stack;\n  if (structured.why) attributes['error.why'] = structured.why;\n  if (structured.fix) attributes['error.fix'] = structured.fix;\n  if (structured.link) attributes['error.link'] = structured.link;\n  if (structured.code !== undefined) {\n    attributes['error.code'] =\n      typeof structured.code === 'string'\n        ? structured.code\n        : String(structured.code);\n  }\n  if (structured.status !== undefined) {\n    attributes['error.status'] = structured.status;\n  }\n  if (structured.details) {\n    Object.assign(\n      attributes,\n      flattenToAttributes(structured.details, 'error.details'),\n    );\n  }\n\n  return attributes;\n}\n\nexport function recordStructuredError(\n  ctx: Pick<TraceContext, 'recordException' | 'setAttributes' | 'setStatus'>,\n  error: Error,\n): void {\n  ctx.recordException(error);\n  ctx.setStatus({\n    code: SpanStatusCode.ERROR,\n    message: error.message,\n  });\n  ctx.setAttributes(getStructuredErrorAttributes(error));\n}\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { trace as otelTrace } from '@opentelemetry/api';\nimport type { TraceContext } from './trace-context';\nimport { createTraceContext } from './trace-context';\nimport { recordStructuredError } from './structured-error';\nimport { flattenToAttributes } from './flatten-attributes';\n\nconst requestContextStore = new AsyncLocalStorage<TraceContext>();\n\nexport function runWithRequestContext<T>(ctx: TraceContext, fn: () => T): T {\n  return requestContextStore.run(ctx, fn);\n}\n\nexport interface RequestLogger {\n  set(fields: Record<string, unknown>): void;\n  info(message: string, fields?: Record<string, unknown>): void;\n  warn(message: string, fields?: Record<string, unknown>): void;\n  error(error: Error | string, fields?: Record<string, unknown>): void;\n  getContext(): Record<string, unknown>;\n  emitNow(overrides?: Record<string, unknown>): RequestLogSnapshot;\n}\n\nexport interface RequestLogSnapshot {\n  timestamp: string;\n  traceId: string;\n  spanId: string;\n  correlationId: string;\n  context: Record<string, unknown>;\n}\n\nexport interface RequestLoggerOptions {\n  /** Callback invoked by emitNow() for manual fan-out. */\n  onEmit?: (snapshot: RequestLogSnapshot) => void | Promise<void>;\n}\n\nfunction resolveContext(ctx?: TraceContext): TraceContext {\n  if (ctx) return ctx;\n\n  const stored = requestContextStore.getStore();\n  if (stored) return stored;\n\n  const span = otelTrace.getActiveSpan();\n  if (!span) {\n    throw new Error(\n      '[autotel] getRequestLogger() requires an active span or runWithRequestContext(). Wrap your handler with trace() or use runWithRequestContext().',\n    );\n  }\n  return createTraceContext(span);\n}\n\nexport function getRequestLogger(\n  ctx?: TraceContext,\n  options?: RequestLoggerOptions,\n): RequestLogger {\n  const activeContext = resolveContext(ctx);\n  let contextState: Record<string, unknown> = {};\n\n  const addLogEvent = (\n    level: 'info' | 'warn' | 'error',\n    message: string,\n    fields?: Record<string, unknown>,\n  ) => {\n    const attrs = fields ? flattenToAttributes(fields) : undefined;\n    activeContext.addEvent(`log.${level}`, {\n      message,\n      ...attrs,\n    });\n  };\n\n  return {\n    set(fields: Record<string, unknown>) {\n      contextState = {\n        ...contextState,\n        ...fields,\n      };\n      activeContext.setAttributes(flattenToAttributes(fields));\n    },\n\n    info(message: string, fields?: Record<string, unknown>) {\n      addLogEvent('info', message, fields);\n      if (fields) {\n        contextState = {\n          ...contextState,\n          ...fields,\n        };\n        activeContext.setAttributes(flattenToAttributes(fields));\n      }\n    },\n\n    warn(message: string, fields?: Record<string, unknown>) {\n      addLogEvent('warn', message, fields);\n      activeContext.setAttribute('autotel.log.level', 'warn');\n      if (fields) {\n        contextState = {\n          ...contextState,\n          ...fields,\n        };\n        activeContext.setAttributes(flattenToAttributes(fields));\n      }\n    },\n\n    error(error: Error | string, fields?: Record<string, unknown>) {\n      const err = typeof error === 'string' ? new Error(error) : error;\n      recordStructuredError(activeContext, err);\n      addLogEvent('error', err.message, fields);\n\n      if (fields) {\n        contextState = {\n          ...contextState,\n          ...fields,\n        };\n        activeContext.setAttributes(flattenToAttributes(fields));\n      }\n      activeContext.setAttribute('autotel.log.level', 'error');\n    },\n\n    getContext() {\n      return { ...contextState };\n    },\n\n    emitNow(overrides?: Record<string, unknown>): RequestLogSnapshot {\n      const mergedContext = {\n        ...contextState,\n        ...(overrides ?? {}),\n      };\n      const flattened = flattenToAttributes(mergedContext);\n      activeContext.setAttributes(flattened);\n\n      const snapshot: RequestLogSnapshot = {\n        timestamp: new Date().toISOString(),\n        traceId: activeContext.traceId,\n        spanId: activeContext.spanId,\n        correlationId: activeContext.correlationId,\n        context: mergedContext,\n      };\n\n      activeContext.addEvent('log.emit.manual', {\n        ...flattened,\n      });\n\n      if (options?.onEmit) {\n        Promise.resolve(options.onEmit(snapshot)).catch((error) => {\n          console.warn('[autotel] request logger onEmit failed:', error);\n        });\n      }\n\n      return snapshot;\n    },\n  };\n}\n"]}