UNPKG

autotel

Version:
1 lines 5.71 kB
{"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"}