{"version":3,"file":"config.cjs","names":["getAutotelTracer","metrics","trace"],"sources":["../src/config.ts"],"sourcesContent":["/**\n * Global configuration for OpenTelemetry decorators\n *\n * Allows users to inject custom loggers, tracers, and meters\n * while maintaining sensible defaults.\n */\n\nimport { trace, metrics, type Tracer, type Meter } from '@opentelemetry/api';\nimport { getAutotelTracer } from './tracer-provider';\n\nexport type { ILogger } from './logger';\n\n/**\n * Environment-based feature flags for performance optimization\n *\n * Disables expensive features in development while maintaining\n * full observability in production.\n */\nconst IS_PRODUCTION = process.env.NODE_ENV === 'production';\nconst IS_DEV = process.env.NODE_ENV === 'development';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst IS_TEST = process.env.NODE_ENV === 'test';\n\nexport const FEATURE_FLAGS = {\n  /** Enable full auto-instrumentation (expensive, production only) */\n  ENABLE_AUTO_INSTRUMENTATION:\n    IS_PRODUCTION && process.env.autotel_AUTO_INSTRUMENT !== 'false',\n\n  /** Enable verbose logging (development only) */\n  ENABLE_VERBOSE_LOGGING: IS_DEV || process.env.autotel_VERBOSE === 'true',\n\n  /** Enable metrics collection (production only) */\n  ENABLE_METRICS_BY_DEFAULT:\n    IS_PRODUCTION && process.env.autotel_METRICS !== 'false',\n\n  /** Enable async resource detection (production only) */\n  ENABLE_RESOURCE_DETECTION:\n    IS_PRODUCTION && process.env.autotel_RESOURCE_DETECTION === 'true',\n\n  /** Enable tracing in all environments (can be disabled via autotel_TRACING=false) */\n  ENABLE_TRACING: process.env.autotel_TRACING !== 'false',\n\n  /** Enable log redaction for sensitive fields (can be disabled via autotel_REDACTION=false) */\n  ENABLE_REDACTION: process.env.autotel_REDACTION !== 'false',\n} as const;\n\n/**\n * Runtime configuration for OpenTelemetry instrumentation\n *\n * This configures the tracer and meter used by autotel's functional API.\n * Use `configure()` to set custom tracer/meter instances.\n */\nexport interface RuntimeConfig {\n  /**\n   * Tracer name for OpenTelemetry\n   * @default 'app'\n   */\n  tracerName?: string;\n\n  /**\n   * Meter name for OpenTelemetry metrics\n   * @default 'app'\n   */\n  meterName?: string;\n\n  /**\n   * Custom tracer instance (for advanced use cases like Datadog direct)\n   * @default trace.getTracer(tracerName)\n   */\n  tracer?: Tracer;\n\n  /**\n   * Custom meter instance\n   * @default metrics.getMeter(meterName)\n   */\n  meter?: Meter;\n}\n\n/**\n * Internal configuration state\n */\nclass Config {\n  private config: Required<RuntimeConfig> = {\n    tracerName: 'app',\n    meterName: 'app',\n    tracer: getAutotelTracer('app'),\n    meter: metrics.getMeter('app'),\n  };\n\n  /**\n   * Get feature flags\n   */\n  get featureFlags() {\n    return FEATURE_FLAGS;\n  }\n\n  /**\n   * Update global configuration\n   */\n  configure(options: RuntimeConfig): void {\n    if (options.tracerName) {\n      this.config.tracerName = options.tracerName;\n      this.config.tracer = getAutotelTracer(options.tracerName);\n    }\n    if (options.meterName) {\n      this.config.meterName = options.meterName;\n      this.config.meter = metrics.getMeter(options.meterName);\n    }\n    if (options.tracer) {\n      this.config.tracer = options.tracer;\n    }\n    if (options.meter) {\n      this.config.meter = options.meter;\n    }\n  }\n\n  /**\n   * Get current configuration\n   */\n  get(): Required<RuntimeConfig> {\n    return this.config;\n  }\n\n  /**\n   * Reset to defaults (mainly for testing)\n   */\n  reset(): void {\n    this.config = {\n      tracerName: 'app',\n      meterName: 'app',\n      tracer: trace.getTracer('app'),\n      meter: metrics.getMeter('app'),\n    };\n  }\n}\n\nconst globalConfig = new Config();\n\n/**\n * Configure global instrumentation behavior\n *\n * @example\n * ```typescript\n * import { configure } from 'autotel/config'\n *\n * configure({\n *   tracerName: 'my-app'\n * })\n * ```\n */\nexport function configure(options: RuntimeConfig): void {\n  globalConfig.configure(options);\n}\n\n/**\n * Get current configuration (internal use)\n */\nexport function getConfig(): Required<RuntimeConfig> & {\n  featureFlags: typeof FEATURE_FLAGS;\n} {\n  return {\n    ...globalConfig.get(),\n    featureFlags: FEATURE_FLAGS,\n  };\n}\n\n/**\n * Reset configuration to defaults (internal use - mainly for testing)\n */\nexport function resetConfig(): void {\n  globalConfig.reset();\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAkBA,MAAM,gBAAgB,QAAQ,IAAI,aAAa;AAC/C,MAAM,SAAS,QAAQ,IAAI,aAAa;AAExB,QAAQ,IAAI;AAE5B,MAAa,gBAAgB;;CAE3B,6BACE,iBAAiB,QAAQ,IAAI,4BAA4B;;CAG3D,wBAAwB,UAAU,QAAQ,IAAI,oBAAoB;;CAGlE,2BACE,iBAAiB,QAAQ,IAAI,oBAAoB;;CAGnD,2BACE,iBAAiB,QAAQ,IAAI,+BAA+B;;CAG9D,gBAAgB,QAAQ,IAAI,oBAAoB;;CAGhD,kBAAkB,QAAQ,IAAI,sBAAsB;AACtD;;;;AAqCA,IAAM,SAAN,MAAa;CACX,AAAQ,SAAkC;EACxC,YAAY;EACZ,WAAW;EACX,QAAQA,yCAAiB,KAAK;EAC9B,OAAOC,2BAAQ,SAAS,KAAK;CAC/B;;;;CAKA,IAAI,eAAe;EACjB,OAAO;CACT;;;;CAKA,UAAU,SAA8B;EACtC,IAAI,QAAQ,YAAY;GACtB,KAAK,OAAO,aAAa,QAAQ;GACjC,KAAK,OAAO,SAASD,yCAAiB,QAAQ,UAAU;EAC1D;EACA,IAAI,QAAQ,WAAW;GACrB,KAAK,OAAO,YAAY,QAAQ;GAChC,KAAK,OAAO,QAAQC,2BAAQ,SAAS,QAAQ,SAAS;EACxD;EACA,IAAI,QAAQ,QACV,KAAK,OAAO,SAAS,QAAQ;EAE/B,IAAI,QAAQ,OACV,KAAK,OAAO,QAAQ,QAAQ;CAEhC;;;;CAKA,MAA+B;EAC7B,OAAO,KAAK;CACd;;;;CAKA,QAAc;EACZ,KAAK,SAAS;GACZ,YAAY;GACZ,WAAW;GACX,QAAQC,yBAAM,UAAU,KAAK;GAC7B,OAAOD,2BAAQ,SAAS,KAAK;EAC/B;CACF;AACF;AAEA,MAAM,eAAe,IAAI,OAAO;;;;;;;;;;;;;AAchC,SAAgB,UAAU,SAA8B;CACtD,aAAa,UAAU,OAAO;AAChC;;;;AAKA,SAAgB,YAEd;CACA,OAAO;EACL,GAAG,aAAa,IAAI;EACpB,cAAc;CAChB;AACF;;;;AAKA,SAAgB,cAAoB;CAClC,aAAa,MAAM;AACrB"}