{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ContextManager, TextMapPropagator } from '@opentelemetry/api';\nimport { context, diag, propagation } from '@opentelemetry/api';\nimport {\n  CompositePropagator,\n  getNumberFromEnv,\n  getStringFromEnv,\n  getStringListFromEnv,\n  W3CBaggagePropagator,\n  W3CTraceContextPropagator,\n} from '@opentelemetry/core';\nimport { OTLPTraceExporter as OTLPProtoTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';\nimport { OTLPTraceExporter as OTLPHttpTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport { OTLPTraceExporter as OTLPGrpcTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc';\nimport { ZipkinExporter } from '@opentelemetry/exporter-zipkin';\nimport type {\n  DetectedResourceAttributes,\n  Resource,\n  ResourceDetector,\n} from '@opentelemetry/resources';\nimport {\n  envDetector,\n  hostDetector,\n  osDetector,\n  processDetector,\n  resourceFromAttributes,\n  serviceInstanceIdDetector,\n} from '@opentelemetry/resources';\nimport type {\n  Sampler,\n  SpanExporter,\n  SpanLimits,\n  SpanProcessor,\n} from '@opentelemetry/sdk-trace-base';\nimport {\n  AlwaysOffSampler,\n  AlwaysOnSampler,\n  BatchSpanProcessor,\n  ConsoleSpanExporter,\n  ParentBasedSampler,\n  SimpleSpanProcessor,\n  TraceIdRatioBasedSampler,\n} from '@opentelemetry/sdk-trace-base';\nimport { B3InjectEncoding, B3Propagator } from '@opentelemetry/propagator-b3';\nimport { JaegerPropagator } from '@opentelemetry/propagator-jaeger';\nimport { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';\nimport { OTLPLogExporter as OTLPHttpLogExporter } from '@opentelemetry/exporter-logs-otlp-http';\nimport { OTLPLogExporter as OTLPGrpcLogExporter } from '@opentelemetry/exporter-logs-otlp-grpc';\nimport { OTLPLogExporter as OTLPProtoLogExporter } from '@opentelemetry/exporter-logs-otlp-proto';\nimport { CompressionAlgorithm } from '@opentelemetry/otlp-exporter-base';\nimport type {\n  ConfigurationModel,\n  LogRecordExporterConfigModel,\n  InstrumentTypeConfigModel,\n  AggregationConfigModel,\n  PeriodicMetricReaderConfigModel,\n  SpanExporterConfigModel,\n  SamplerConfigModel,\n  NameStringValuePairConfigModel,\n  HttpTlsConfigModel,\n} from '@opentelemetry/configuration';\nimport type {\n  AggregationOption,\n  IAttributesProcessor,\n  IMetricReader,\n  PushMetricExporter,\n  ViewOptions,\n} from '@opentelemetry/sdk-metrics';\nimport {\n  AggregationType,\n  ConsoleMetricExporter,\n  createAllowListAttributesProcessor,\n  createDenyListAttributesProcessor,\n  InstrumentType,\n  PeriodicExportingMetricReader,\n} from '@opentelemetry/sdk-metrics';\nimport { OTLPMetricExporter as OTLPGrpcMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc';\nimport { OTLPMetricExporter as OTLPHttpMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';\nimport { OTLPMetricExporter as OTLPProtoMetricExporter } from '@opentelemetry/exporter-metrics-otlp-proto';\nimport type {\n  BufferConfig,\n  LogRecordExporter,\n  LoggerProviderConfig,\n  LogRecordProcessor,\n} from '@opentelemetry/sdk-logs';\nimport {\n  BatchLogRecordProcessor,\n  ConsoleLogRecordExporter,\n  SimpleLogRecordProcessor,\n} from '@opentelemetry/sdk-logs';\nimport * as fs from 'fs';\n\nconst RESOURCE_DETECTOR_ENVIRONMENT = 'env';\nconst RESOURCE_DETECTOR_HOST = 'host';\nconst RESOURCE_DETECTOR_OS = 'os';\nconst RESOURCE_DETECTOR_PROCESS = 'process';\nconst RESOURCE_DETECTOR_SERVICE_INSTANCE_ID = 'serviceinstance';\n\nexport function getResourceFromConfiguration(\n  config: ConfigurationModel\n): Resource | undefined {\n  if (config.resource && config.resource.attributes) {\n    const attr: DetectedResourceAttributes = {};\n    for (let i = 0; i < config.resource.attributes.length; i++) {\n      const a = config.resource.attributes[i];\n      attr[a.name] = a.value;\n    }\n    return resourceFromAttributes(attr, {\n      schemaUrl: config.resource.schema_url,\n    });\n  }\n  return undefined;\n}\n\nexport function getResourceDetectorsFromEnv(): Array<ResourceDetector> {\n  // When updating this list, make sure to also update the section `resourceDetectors` on README.\n  const resourceDetectors = new Map<string, ResourceDetector>([\n    [RESOURCE_DETECTOR_HOST, hostDetector],\n    [RESOURCE_DETECTOR_OS, osDetector],\n    [RESOURCE_DETECTOR_SERVICE_INSTANCE_ID, serviceInstanceIdDetector],\n    [RESOURCE_DETECTOR_PROCESS, processDetector],\n    [RESOURCE_DETECTOR_ENVIRONMENT, envDetector],\n  ]);\n\n  const resourceDetectorsFromEnv = getStringListFromEnv(\n    'OTEL_NODE_RESOURCE_DETECTORS'\n  ) ?? ['all'];\n\n  if (resourceDetectorsFromEnv.includes('all')) {\n    return [...resourceDetectors.values()].flat();\n  }\n\n  if (resourceDetectorsFromEnv.includes('none')) {\n    return [];\n  }\n\n  return resourceDetectorsFromEnv.flatMap(detector => {\n    const resourceDetector = resourceDetectors.get(detector);\n    if (!resourceDetector) {\n      diag.warn(\n        `Invalid resource detector \"${detector}\" specified in the environment variable OTEL_NODE_RESOURCE_DETECTORS`\n      );\n    }\n    return resourceDetector || [];\n  });\n}\n\nexport function getResourceDetectorsFromConfiguration(\n  config: ConfigurationModel\n): Array<ResourceDetector> {\n  const detectors = config.resource?.['detection/development']?.detectors ?? [];\n\n  return detectors.flatMap(detector => {\n    const result: ResourceDetector[] = [];\n    if (detector.host != null) result.push(hostDetector);\n    if (detector.os != null) result.push(osDetector);\n    if (detector.process != null) result.push(processDetector);\n    if (detector.service != null) result.push(serviceInstanceIdDetector);\n    if (detector.env != null) result.push(envDetector);\n    return result;\n  });\n}\n\nexport function getOtlpProtocolFromEnv(): string {\n  return (\n    getStringFromEnv('OTEL_EXPORTER_OTLP_TRACES_PROTOCOL') ??\n    getStringFromEnv('OTEL_EXPORTER_OTLP_PROTOCOL') ??\n    'http/protobuf'\n  );\n}\n\nfunction getOtlpExporterFromEnv(): SpanExporter {\n  const protocol = getOtlpProtocolFromEnv();\n\n  switch (protocol) {\n    case 'grpc':\n      return new OTLPGrpcTraceExporter();\n    case 'http/json':\n      return new OTLPHttpTraceExporter();\n    case 'http/protobuf':\n      return new OTLPProtoTraceExporter();\n    default:\n      diag.warn(\n        `Unsupported OTLP traces protocol: ${protocol}. Using http/protobuf.`\n      );\n      return new OTLPProtoTraceExporter();\n  }\n}\n\nexport function getSpanProcessorsFromEnv(): SpanProcessor[] {\n  const exportersMap = new Map<string, () => SpanExporter>([\n    ['otlp', () => getOtlpExporterFromEnv()],\n    ['zipkin', () => new ZipkinExporter()],\n    ['console', () => new ConsoleSpanExporter()],\n  ]);\n  const exporters: SpanExporter[] = [];\n  const processors: SpanProcessor[] = [];\n  let traceExportersList = Array.from(\n    new Set(getStringListFromEnv('OTEL_TRACES_EXPORTER'))\n  ).filter(s => s !== 'null');\n\n  if (traceExportersList[0] === 'none') {\n    diag.warn(\n      'OTEL_TRACES_EXPORTER contains \"none\". SDK will not be initialized.'\n    );\n    return [];\n  }\n\n  if (traceExportersList.length === 0) {\n    diag.debug('OTEL_TRACES_EXPORTER is empty. Using default otlp exporter.');\n    traceExportersList = ['otlp'];\n  } else if (\n    traceExportersList.length > 1 &&\n    traceExportersList.includes('none')\n  ) {\n    diag.warn(\n      'OTEL_TRACES_EXPORTER contains \"none\" along with other exporters. Using default otlp exporter.'\n    );\n    traceExportersList = ['otlp'];\n  }\n\n  for (const name of traceExportersList) {\n    const exporter = exportersMap.get(name)?.();\n    if (exporter) {\n      exporters.push(exporter);\n    } else {\n      diag.warn(`Unrecognized OTEL_TRACES_EXPORTER value: ${name}.`);\n    }\n  }\n\n  for (const exp of exporters) {\n    if (exp instanceof ConsoleSpanExporter) {\n      processors.push(new SimpleSpanProcessor(exp));\n    } else {\n      processors.push(new BatchSpanProcessor(exp));\n    }\n  }\n\n  if (exporters.length === 0) {\n    diag.warn(\n      'Unable to set up trace exporter(s) due to invalid exporter and/or protocol values.'\n    );\n  }\n\n  return processors;\n}\n\n/**\n * Get a propagator as defined by environment variables\n */\nexport function getPropagatorFromEnv(): TextMapPropagator | null | undefined {\n  // Empty and undefined MUST be treated equal.\n  const propagatorsEnvVarValue = getStringListFromEnv('OTEL_PROPAGATORS');\n  if (propagatorsEnvVarValue == null) {\n    // return undefined to fall back to default\n    return undefined;\n  }\n\n  if (propagatorsEnvVarValue.includes('none')) {\n    return null;\n  }\n\n  // Implementation note: this only contains specification required propagators that are actually hosted in this repo.\n  // Any other propagators (like aws, aws-lambda, should go into `@opentelemetry/auto-configuration-propagators` instead).\n  const propagatorsFactory = new Map<string, () => TextMapPropagator>([\n    ['tracecontext', () => new W3CTraceContextPropagator()],\n    ['baggage', () => new W3CBaggagePropagator()],\n    ['b3', () => new B3Propagator()],\n    [\n      'b3multi',\n      () => new B3Propagator({ injectEncoding: B3InjectEncoding.MULTI_HEADER }),\n    ],\n    ['jaeger', () => new JaegerPropagator()],\n  ]);\n\n  // Values MUST be deduplicated in order to register a Propagator only once.\n  const uniquePropagatorNames = Array.from(new Set(propagatorsEnvVarValue));\n  const validPropagators: TextMapPropagator[] = [];\n\n  uniquePropagatorNames.forEach(name => {\n    const propagator = propagatorsFactory.get(name)?.();\n    if (!propagator) {\n      diag.warn(\n        `Propagator \"${name}\" requested through environment variable is unavailable.`\n      );\n      return;\n    }\n\n    validPropagators.push(propagator);\n  });\n\n  if (validPropagators.length === 0) {\n    // null to signal that the default should **not** be used in its place.\n    return null;\n  } else if (uniquePropagatorNames.length === 1) {\n    return validPropagators[0];\n  } else {\n    return new CompositePropagator({\n      propagators: validPropagators,\n    });\n  }\n}\n\n/**\n * Get a propagator as defined by configuration model from configuration\n */\nexport function getPropagatorFromConfiguration(\n  config: ConfigurationModel\n): TextMapPropagator | null | undefined {\n  const propagatorsValue = getKeyListFromObjectArray(\n    config.propagator?.composite\n  );\n  if (propagatorsValue == null) {\n    // return undefined to fall back to default\n    return undefined;\n  }\n\n  if (propagatorsValue.includes('none')) {\n    return null;\n  }\n\n  // Implementation note: this only contains specification required propagators that are actually hosted in this repo.\n  // Any other propagators (like aws, aws-lambda, should go into `@opentelemetry/auto-configuration-propagators` instead).\n  const propagatorsFactory = new Map<string, () => TextMapPropagator>([\n    ['tracecontext', () => new W3CTraceContextPropagator()],\n    ['baggage', () => new W3CBaggagePropagator()],\n    ['b3', () => new B3Propagator()],\n    [\n      'b3multi',\n      () => new B3Propagator({ injectEncoding: B3InjectEncoding.MULTI_HEADER }),\n    ],\n    ['jaeger', () => new JaegerPropagator()],\n  ]);\n\n  // Values MUST be deduplicated in order to register a Propagator only once.\n  const uniquePropagatorNames = Array.from(new Set(propagatorsValue));\n  const validPropagators: TextMapPropagator[] = [];\n\n  uniquePropagatorNames.forEach(name => {\n    const propagator = propagatorsFactory.get(name)?.();\n    if (!propagator) {\n      diag.warn(\n        `Propagator \"${name}\" requested through configuration is unavailable.`\n      );\n      return;\n    }\n\n    validPropagators.push(propagator);\n  });\n\n  if (validPropagators.length === 0) {\n    // null to signal that the default should **not** be used in its place.\n    return null;\n  } else if (uniquePropagatorNames.length === 1) {\n    return validPropagators[0];\n  } else {\n    return new CompositePropagator({\n      propagators: validPropagators,\n    });\n  }\n}\n\nexport function setupContextManager(\n  contextManager: ContextManager | null | undefined\n) {\n  // null means 'do not register'\n  if (contextManager === null) {\n    return;\n  }\n\n  // undefined means 'register default'\n  if (contextManager === undefined) {\n    const defaultContextManager = new AsyncLocalStorageContextManager();\n    defaultContextManager.enable();\n    context.setGlobalContextManager(defaultContextManager);\n    return;\n  }\n\n  contextManager.enable();\n  context.setGlobalContextManager(contextManager);\n}\n\nexport function setupPropagator(\n  propagator: TextMapPropagator | null | undefined\n) {\n  // null means 'do not register'\n  if (propagator === null) {\n    return;\n  }\n\n  // undefined means 'register default'\n  if (propagator === undefined) {\n    propagation.setGlobalPropagator(\n      new CompositePropagator({\n        propagators: [\n          new W3CTraceContextPropagator(),\n          new W3CBaggagePropagator(),\n        ],\n      })\n    );\n    return;\n  }\n\n  propagation.setGlobalPropagator(propagator);\n}\n\nexport function getKeyListFromObjectArray(\n  obj: object[] | undefined\n): string[] | undefined {\n  if (!obj || obj.length === 0) {\n    return undefined;\n  }\n\n  const keys: string[] = [];\n  for (const item of obj) {\n    for (const key of Object.keys(item)) {\n      keys.push(key);\n    }\n  }\n  return keys;\n}\n\nexport function getNonNegativeNumberFromEnv(\n  envVarName: string\n): number | undefined {\n  const value = getNumberFromEnv(envVarName);\n  if (value != null && value <= 0) {\n    diag.warn(\n      `${envVarName} (${value}) is invalid, expected number greater than 0, using default.`\n    );\n    return undefined;\n  }\n  return value;\n}\n\nexport function getPeriodicExportingMetricReaderFromEnv(\n  exporter: PushMetricExporter\n): IMetricReader {\n  const defaultTimeoutMillis = 30_000;\n  const defaultIntervalMillis = 60_000;\n\n  const rawExportIntervalMillis = getNonNegativeNumberFromEnv(\n    'OTEL_METRIC_EXPORT_INTERVAL'\n  );\n  const rawExportTimeoutMillis = getNonNegativeNumberFromEnv(\n    'OTEL_METRIC_EXPORT_TIMEOUT'\n  );\n\n  // Apply defaults\n  const exportIntervalMillis = rawExportIntervalMillis ?? defaultIntervalMillis;\n  let exportTimeoutMillis = rawExportTimeoutMillis ?? defaultTimeoutMillis;\n\n  // Ensure timeout doesn't exceed interval\n  if (exportTimeoutMillis > exportIntervalMillis) {\n    // determine which env vars were set and which ones defaulted for logging purposes\n    const timeoutSource =\n      rawExportTimeoutMillis != null\n        ? rawExportTimeoutMillis.toString()\n        : `${defaultTimeoutMillis}, default`;\n    const intervalSource =\n      rawExportIntervalMillis != null\n        ? rawExportIntervalMillis.toString()\n        : `${defaultIntervalMillis}, default`;\n\n    const bothSetByUser =\n      rawExportTimeoutMillis != null && rawExportIntervalMillis != null;\n    const logMessage = `OTEL_METRIC_EXPORT_TIMEOUT (${timeoutSource}) is greater than OTEL_METRIC_EXPORT_INTERVAL (${intervalSource}). Clamping timeout to interval value.`;\n\n    // only bother users if they explicitly set both values.\n    if (bothSetByUser) {\n      diag.warn(logMessage);\n    } else {\n      diag.info(logMessage);\n    }\n\n    exportTimeoutMillis = exportIntervalMillis;\n  }\n\n  return new PeriodicExportingMetricReader({\n    exportTimeoutMillis,\n    exportIntervalMillis,\n    exporter,\n  });\n}\n\nexport function getOtlpMetricExporterFromEnv(): PushMetricExporter {\n  const protocol =\n    (\n      getStringFromEnv('OTEL_EXPORTER_OTLP_METRICS_PROTOCOL') ??\n      getStringFromEnv('OTEL_EXPORTER_OTLP_PROTOCOL')\n    )?.trim() || 'http/protobuf'; // Using || to also fall back on empty string\n\n  switch (protocol) {\n    case 'grpc':\n      return new OTLPGrpcMetricExporter();\n    case 'http/json':\n      return new OTLPHttpMetricExporter();\n    case 'http/protobuf':\n      return new OTLPProtoMetricExporter();\n  }\n\n  diag.warn(\n    `Unsupported OTLP metrics protocol: \"${protocol}\". Using http/protobuf.`\n  );\n  return new OTLPProtoMetricExporter();\n}\n\nexport function getPeriodicMetricReaderFromConfiguration(\n  periodic: PeriodicMetricReaderConfigModel\n): IMetricReader | undefined {\n  if (periodic.exporter) {\n    let exporter;\n    if (periodic.exporter.otlp_http) {\n      const encoding = periodic.exporter.otlp_http.encoding;\n      if (encoding === 'json') {\n        exporter = new OTLPHttpMetricExporter({\n          compression:\n            periodic.exporter.otlp_http.compression === 'gzip'\n              ? CompressionAlgorithm.GZIP\n              : CompressionAlgorithm.NONE,\n        });\n      } else if (encoding === 'protobuf') {\n        exporter = new OTLPProtoMetricExporter({\n          compression:\n            periodic.exporter.otlp_http.compression === 'gzip'\n              ? CompressionAlgorithm.GZIP\n              : CompressionAlgorithm.NONE,\n        });\n      } else {\n        diag.warn(`Unsupported OTLP metrics encoding: ${encoding}.`);\n      }\n    }\n    if (periodic.exporter.otlp_grpc) {\n      exporter = new OTLPGrpcMetricExporter({\n        compression:\n          periodic.exporter.otlp_grpc.compression === 'gzip'\n            ? CompressionAlgorithm.GZIP\n            : CompressionAlgorithm.NONE,\n      });\n    }\n\n    if (exporter) {\n      // TODO(6425): add cardinality_limits\n      return new PeriodicExportingMetricReader({\n        exportIntervalMillis: periodic.interval ?? 60_000,\n        exportTimeoutMillis: periodic.timeout ?? 30_000,\n        exporter,\n      });\n    }\n    if (periodic.exporter.console) {\n      return new PeriodicExportingMetricReader({\n        exporter: new ConsoleMetricExporter(),\n      });\n    }\n  }\n  diag.warn(`Unsupported Metric Exporter.`);\n  return undefined;\n}\n\n/**\n * Get LoggerProviderConfig from environment variables.\n */\nexport function getLoggerProviderConfigFromEnv(): LoggerProviderConfig {\n  return {\n    logRecordLimits: {\n      attributeCountLimit:\n        getNonNegativeNumberFromEnv('OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT') ??\n        getNonNegativeNumberFromEnv('OTEL_ATTRIBUTE_COUNT_LIMIT'),\n      attributeValueLengthLimit:\n        getNonNegativeNumberFromEnv(\n          'OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT'\n        ) ?? getNonNegativeNumberFromEnv('OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT'),\n    },\n  };\n}\n\n/**\n * Get configuration for BatchLogRecordProcessor from environment variables.\n */\nexport function getBatchLogRecordProcessorConfigFromEnv(): BufferConfig {\n  return {\n    maxQueueSize: getNonNegativeNumberFromEnv('OTEL_BLRP_MAX_QUEUE_SIZE'),\n    scheduledDelayMillis: getNonNegativeNumberFromEnv(\n      'OTEL_BLRP_SCHEDULE_DELAY'\n    ),\n    exportTimeoutMillis: getNonNegativeNumberFromEnv(\n      'OTEL_BLRP_EXPORT_TIMEOUT'\n    ),\n    maxExportBatchSize: getNonNegativeNumberFromEnv(\n      'OTEL_BLRP_MAX_EXPORT_BATCH_SIZE'\n    ),\n  };\n}\n\nexport function getBatchLogRecordProcessorFromEnv(\n  exporter: LogRecordExporter\n): BatchLogRecordProcessor {\n  return new BatchLogRecordProcessor(\n    exporter,\n    getBatchLogRecordProcessorConfigFromEnv()\n  );\n}\n\nexport function getLogRecordExporter(\n  exporter: LogRecordExporterConfigModel\n): LogRecordExporter | undefined {\n  if (exporter.otlp_http) {\n    const encoding = exporter.otlp_http.encoding;\n    if (encoding === 'json') {\n      return new OTLPHttpLogExporter({\n        compression:\n          exporter.otlp_http.compression === 'gzip'\n            ? CompressionAlgorithm.GZIP\n            : CompressionAlgorithm.NONE,\n      });\n    }\n    if (encoding === 'protobuf') {\n      return new OTLPProtoLogExporter({\n        compression:\n          exporter.otlp_http.compression === 'gzip'\n            ? CompressionAlgorithm.GZIP\n            : CompressionAlgorithm.NONE,\n      });\n    }\n    diag.warn(\n      `Unsupported OTLP logs encoding: ${encoding}. Using http/protobuf.`\n    );\n    return new OTLPProtoLogExporter({\n      compression:\n        exporter.otlp_http.compression === 'gzip'\n          ? CompressionAlgorithm.GZIP\n          : CompressionAlgorithm.NONE,\n    });\n  } else if (exporter.otlp_grpc) {\n    return new OTLPGrpcLogExporter({\n      compression:\n        exporter.otlp_grpc.compression === 'gzip'\n          ? CompressionAlgorithm.GZIP\n          : CompressionAlgorithm.NONE,\n    });\n  } else if (exporter.console) {\n    return new ConsoleLogRecordExporter();\n  }\n  diag.warn(`Unsupported Exporter value. No Log Record Exporter registered`);\n  return undefined;\n}\n\nexport function getLogRecordProcessorsFromConfiguration(\n  config: ConfigurationModel\n): LogRecordProcessor[] | undefined {\n  const logRecordProcessors: LogRecordProcessor[] = [];\n  config.logger_provider?.processors?.forEach(processor => {\n    if (processor.batch) {\n      const exporter = getLogRecordExporter(processor.batch.exporter);\n      if (exporter) {\n        logRecordProcessors.push(\n          new BatchLogRecordProcessor(exporter, {\n            maxQueueSize: processor.batch.max_queue_size,\n            maxExportBatchSize: processor.batch.max_export_batch_size,\n            scheduledDelayMillis: processor.batch.schedule_delay,\n            exportTimeoutMillis: processor.batch.export_timeout,\n          })\n        );\n      }\n    }\n    if (processor.simple) {\n      const exporter = getLogRecordExporter(processor.simple.exporter);\n      if (exporter) {\n        logRecordProcessors.push(new SimpleLogRecordProcessor(exporter));\n      }\n    }\n  });\n  if (logRecordProcessors.length > 0) {\n    return logRecordProcessors;\n  }\n  return undefined;\n}\n\nexport function getHeadersFromConfiguration(\n  headers: NameStringValuePairConfigModel[] | undefined\n): Record<string, string> | undefined {\n  if (!headers) {\n    return undefined;\n  }\n  const result: Record<string, string> = {};\n  headers.forEach(header => {\n    result[header.name] = header.value;\n  });\n  return result;\n}\n\nexport function getHttpAgentOptionsFromTls(\n  tls: HttpTlsConfigModel | undefined\n): { ca?: Buffer; cert?: Buffer; key?: Buffer } | undefined {\n  if (tls && (tls.ca_file || tls.cert_file || tls.key_file)) {\n    const httpsAgentOptions: { ca?: Buffer; cert?: Buffer; key?: Buffer } = {};\n    if (tls.ca_file) {\n      try {\n        httpsAgentOptions.ca = fs.readFileSync(tls.ca_file);\n      } catch (e) {\n        diag.warn(`Failed to read TLS CA file at ${tls.ca_file}: ${e}`);\n      }\n    }\n    if (tls.cert_file) {\n      try {\n        httpsAgentOptions.cert = fs.readFileSync(tls.cert_file);\n      } catch (e) {\n        diag.warn(`Failed to read TLS cert file at ${tls.cert_file}: ${e}`);\n      }\n    }\n    if (tls.key_file) {\n      try {\n        httpsAgentOptions.key = fs.readFileSync(tls.key_file);\n      } catch (e) {\n        diag.warn(`Failed to read TLS key file at ${tls.key_file}: ${e}`);\n      }\n    }\n    return httpsAgentOptions;\n  }\n  return undefined;\n}\n\nexport function getSpanExporter(\n  exporter: SpanExporterConfigModel\n): SpanExporter | undefined {\n  if (exporter.otlp_http) {\n    const encoding = exporter.otlp_http.encoding;\n    if (encoding === 'json') {\n      return new OTLPHttpTraceExporter({\n        compression:\n          exporter.otlp_http.compression === 'gzip'\n            ? CompressionAlgorithm.GZIP\n            : CompressionAlgorithm.NONE,\n        url: exporter.otlp_http.endpoint,\n        headers: getHeadersFromConfiguration(exporter.otlp_http.headers),\n        timeoutMillis: exporter.otlp_http.timeout,\n        httpAgentOptions: getHttpAgentOptionsFromTls(exporter.otlp_http.tls),\n      });\n    } else {\n      return new OTLPProtoTraceExporter({\n        compression:\n          exporter.otlp_http.compression === 'gzip'\n            ? CompressionAlgorithm.GZIP\n            : CompressionAlgorithm.NONE,\n        url: exporter.otlp_http.endpoint,\n        headers: getHeadersFromConfiguration(exporter.otlp_http.headers),\n        timeoutMillis: exporter.otlp_http.timeout,\n        httpAgentOptions: getHttpAgentOptionsFromTls(exporter.otlp_http.tls),\n      });\n    }\n  } else if (exporter.otlp_grpc) {\n    return new OTLPGrpcTraceExporter({\n      compression:\n        exporter.otlp_grpc.compression === 'gzip'\n          ? CompressionAlgorithm.GZIP\n          : CompressionAlgorithm.NONE,\n      url: exporter.otlp_grpc.endpoint,\n      timeoutMillis: exporter.otlp_grpc.timeout,\n      // TODO (6614): add support for credentials\n      // TODO (6615): add metadata (headers) support\n    });\n  } else if (exporter.console) {\n    return new ConsoleSpanExporter();\n  }\n  diag.warn(`Unsupported Exporter value. No Span Exporter registered`);\n  return undefined;\n}\n\nexport function getSpanProcessorsFromConfiguration(\n  config: ConfigurationModel\n): SpanProcessor[] | undefined {\n  const spanProcessors: SpanProcessor[] = [];\n  config.tracer_provider?.processors?.forEach(processor => {\n    if (processor.batch) {\n      const exporter = getSpanExporter(processor.batch.exporter);\n      if (exporter) {\n        spanProcessors.push(\n          new BatchSpanProcessor(exporter, {\n            maxQueueSize: processor.batch.max_queue_size,\n            maxExportBatchSize: processor.batch.max_export_batch_size,\n            scheduledDelayMillis: processor.batch.schedule_delay,\n            exportTimeoutMillis: processor.batch.export_timeout,\n          })\n        );\n      }\n    }\n    if (processor.simple) {\n      const exporter = getSpanExporter(processor.simple.exporter);\n      if (exporter) {\n        spanProcessors.push(new SimpleSpanProcessor(exporter));\n      }\n    }\n  });\n  if (spanProcessors.length > 0) {\n    return spanProcessors;\n  }\n  return undefined;\n}\n\nexport function getSpanLimitsFromConfiguration(\n  config: ConfigurationModel\n): SpanLimits | undefined {\n  if (config.tracer_provider?.limits) {\n    const limitsConfig = config.tracer_provider.limits;\n    const spanLimits: SpanLimits = {};\n    spanLimits.attributeCountLimit = limitsConfig.attribute_count_limit ?? 128;\n    spanLimits.eventCountLimit = limitsConfig.event_count_limit ?? 128;\n    spanLimits.linkCountLimit = limitsConfig.link_count_limit ?? 128;\n    spanLimits.attributePerLinkCountLimit =\n      limitsConfig.link_attribute_count_limit ?? 128;\n    spanLimits.attributePerEventCountLimit =\n      limitsConfig.event_attribute_count_limit ?? 128;\n\n    if (limitsConfig.attribute_value_length_limit != null) {\n      spanLimits.attributeValueLengthLimit =\n        limitsConfig.attribute_value_length_limit;\n    }\n\n    return spanLimits;\n  }\n  return undefined;\n}\n\nexport function getMeterReadersFromConfiguration(\n  config: ConfigurationModel\n): IMetricReader[] | undefined {\n  const metricReaders: IMetricReader[] = [];\n  config.meter_provider?.readers?.forEach(reader => {\n    if (reader.periodic) {\n      const periodicReader = getPeriodicMetricReaderFromConfiguration(\n        reader.periodic\n      );\n      if (periodicReader) {\n        metricReaders.push(periodicReader);\n      }\n    }\n  });\n  if (metricReaders.length > 0) {\n    return metricReaders;\n  }\n  return undefined;\n}\n\nexport function getInstrumentType(\n  instrument: InstrumentTypeConfigModel\n): InstrumentType | undefined {\n  switch (instrument) {\n    case 'counter':\n      return InstrumentType.COUNTER;\n    case 'gauge':\n      return InstrumentType.GAUGE;\n    case 'histogram':\n      return InstrumentType.HISTOGRAM;\n    case 'observable_counter':\n      return InstrumentType.OBSERVABLE_COUNTER;\n    case 'observable_gauge':\n      return InstrumentType.OBSERVABLE_GAUGE;\n    case 'observable_up_down_counter':\n      return InstrumentType.OBSERVABLE_UP_DOWN_COUNTER;\n    case 'up_down_counter':\n      return InstrumentType.UP_DOWN_COUNTER;\n    default:\n      diag.warn(`Unsupported instrument type: ${instrument}`);\n      return undefined;\n  }\n}\n\nexport function getAggregationType(\n  aggregation: AggregationConfigModel\n): AggregationOption | undefined {\n  if (aggregation.default) {\n    return {\n      type: AggregationType.DEFAULT,\n    };\n  }\n  if (aggregation.drop) {\n    return {\n      type: AggregationType.DROP,\n    };\n  }\n  if (aggregation.explicit_bucket_histogram) {\n    return {\n      type: AggregationType.EXPLICIT_BUCKET_HISTOGRAM,\n      options: {\n        recordMinMax:\n          aggregation.explicit_bucket_histogram.record_min_max ?? true,\n        boundaries: aggregation.explicit_bucket_histogram.boundaries ?? [\n          0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500,\n          10000,\n        ],\n      },\n    };\n  }\n\n  if (aggregation.base2_exponential_bucket_histogram) {\n    return {\n      type: AggregationType.EXPONENTIAL_HISTOGRAM,\n      options: {\n        recordMinMax:\n          aggregation.base2_exponential_bucket_histogram.record_min_max ?? true,\n        maxSize: aggregation.base2_exponential_bucket_histogram.max_size,\n      },\n    };\n  }\n  if (aggregation.last_value) {\n    return {\n      type: AggregationType.LAST_VALUE,\n    };\n  }\n  if (aggregation.sum) {\n    return {\n      type: AggregationType.SUM,\n    };\n  }\n\n  diag.warn(`Unsupported aggregation type`);\n  return undefined;\n}\n\nexport function getMeterViewsFromConfiguration(\n  config: ConfigurationModel\n): ViewOptions[] | undefined {\n  const metricViews: ViewOptions[] = [];\n  config.meter_provider?.views?.forEach(view => {\n    const viewOption: ViewOptions = {};\n    if (view.selector) {\n      if (view.selector.instrument_name) {\n        viewOption.instrumentName = view.selector.instrument_name;\n      }\n      if (view.selector.instrument_type) {\n        const instrumentType = getInstrumentType(view.selector.instrument_type);\n        if (instrumentType) {\n          viewOption.instrumentType = instrumentType;\n        }\n      }\n      if (view.selector.unit) {\n        viewOption.instrumentUnit = view.selector.unit;\n      }\n      if (view.selector.meter_name) {\n        viewOption.meterName = view.selector.meter_name;\n      }\n      if (view.selector.meter_version) {\n        viewOption.meterVersion = view.selector.meter_version;\n      }\n      if (view.selector.meter_schema_url) {\n        viewOption.meterSchemaUrl = view.selector.meter_schema_url;\n      }\n    }\n    if (view.stream) {\n      if (view.stream.name) {\n        viewOption.name = view.stream.name;\n      }\n      viewOption.aggregationCardinalityLimit =\n        view.stream.aggregation_cardinality_limit ?? 2_000;\n      if (view.stream.description) {\n        viewOption.description = view.stream.description;\n      }\n      if (view.stream.aggregation) {\n        const aggregationType = getAggregationType(view.stream.aggregation);\n        if (aggregationType) {\n          viewOption.aggregation = aggregationType;\n        }\n      }\n      if (view.stream.attribute_keys) {\n        const processors: IAttributesProcessor[] = [];\n        if (\n          view.stream.attribute_keys.included &&\n          view.stream.attribute_keys.included.length > 0\n        ) {\n          processors.push(\n            createAllowListAttributesProcessor(\n              view.stream.attribute_keys.included\n            )\n          );\n        }\n        if (\n          view.stream.attribute_keys.excluded &&\n          view.stream.attribute_keys.excluded.length > 0\n        ) {\n          processors.push(\n            createDenyListAttributesProcessor(\n              view.stream.attribute_keys.excluded\n            )\n          );\n        }\n        if (processors.length > 0) {\n          viewOption.attributesProcessors = processors;\n        }\n      }\n    }\n\n    if (Object.keys(viewOption).length > 0) {\n      metricViews.push(viewOption);\n    }\n  });\n  if (metricViews.length > 0) {\n    return metricViews;\n  }\n  return undefined;\n}\n\nexport function getInstanceID(config: ConfigurationModel): string | undefined {\n  if (config.resource?.attributes) {\n    for (let i = 0; i < config.resource.attributes.length; i++) {\n      const element = config.resource.attributes[i];\n      if (element.name === 'service.instance.id') {\n        return element.value?.toString();\n      }\n    }\n  }\n  return undefined;\n}\n\nconst DEFAULT_RATIO = 1;\n\n/**\n * Builds a {@link Sampler} from a {@link SamplerConfigModel} data model.\n * This allows sampler construction from declarative configuration.\n */\nexport function buildSamplerFromConfig(config: SamplerConfigModel): Sampler {\n  if (config.always_on !== undefined) {\n    return new AlwaysOnSampler();\n  }\n  if (config.always_off !== undefined) {\n    return new AlwaysOffSampler();\n  }\n  if (config.trace_id_ratio_based !== undefined) {\n    return new TraceIdRatioBasedSampler(\n      config.trace_id_ratio_based.ratio ?? DEFAULT_RATIO\n    );\n  }\n  if (config.parent_based !== undefined) {\n    const pb = config.parent_based;\n    return new ParentBasedSampler({\n      root: pb.root ? buildSamplerFromConfig(pb.root) : new AlwaysOnSampler(),\n      remoteParentSampled: pb.remote_parent_sampled\n        ? buildSamplerFromConfig(pb.remote_parent_sampled)\n        : undefined,\n      remoteParentNotSampled: pb.remote_parent_not_sampled\n        ? buildSamplerFromConfig(pb.remote_parent_not_sampled)\n        : undefined,\n      localParentSampled: pb.local_parent_sampled\n        ? buildSamplerFromConfig(pb.local_parent_sampled)\n        : undefined,\n      localParentNotSampled: pb.local_parent_not_sampled\n        ? buildSamplerFromConfig(pb.local_parent_not_sampled)\n        : undefined,\n    });\n  }\n  diag.error('Unknown sampler config, defaulting to ParentBased(AlwaysOn).');\n  return new ParentBasedSampler({ root: new AlwaysOnSampler() });\n}\n"]}