{"version":3,"sources":["../src/observability-sdk/setup/node/setup.ts","../src/observability-sdk/setup/utils.ts"],"sourcesContent":["import { NodeSDK } from \"@opentelemetry/sdk-node\";\nimport { SimpleLogRecordProcessor, BatchLogRecordProcessor, type LogRecordProcessor, ConsoleLogRecordExporter, LoggerProvider } from \"@opentelemetry/sdk-logs\";\nimport { createMergedResource, getConcreteProvider, isConcreteProvider } from \"../utils\";\nimport { type SetupObservabilityOptions, type ObservabilityHandle } from \"./types\";\nimport { trace } from \"@opentelemetry/api\";\nimport {\n  ConsoleSpanExporter,\n  SimpleSpanProcessor,\n  BatchSpanProcessor,\n  type SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { type Resource } from \"@opentelemetry/resources\";\nimport { LangWatchLogsExporter, LangWatchTraceExporter } from \"../../exporters\";\nimport { ConsoleLogger, type Logger } from \"../../../logger\";\nimport { initializeObservabilitySdkConfig } from \"../../config\";\nimport { setLangWatchLoggerProvider } from \"../../logger\";\nimport { DEFAULT_ENDPOINT } from \"@/internal/constants\";\nimport { registerInstrumentations } from \"@opentelemetry/instrumentation\";\n\n// Helper functions\nconst createNoOpHandle = (logger: Logger): ObservabilityHandle => ({\n  shutdown: async () => {\n    logger.debug(\"Shutdown called for LangWatch no-op. Nothing will be shutdown\");\n  },\n});\n\nconst getLangWatchConfig = (options: SetupObservabilityOptions) => {\n  const isDisabled = options.langwatch === 'disabled';\n  const config = typeof options.langwatch === 'object' ? options.langwatch : {};\n\n  return {\n    disabled: isDisabled,\n    apiKey: isDisabled ? void 0 : (config.apiKey ?? process.env.LANGWATCH_API_KEY),\n    endpoint: isDisabled ? void 0 : (config.endpoint ?? process.env.LANGWATCH_ENDPOINT ?? DEFAULT_ENDPOINT),\n    processorType: config.processorType ?? 'batch'\n  };\n};\n\nconst checkForEarlyExit = (options: SetupObservabilityOptions, logger: Logger): ObservabilityHandle | null => {\n  const globalProvider = trace.getTracerProvider();\n  const alreadySetup = isConcreteProvider(globalProvider);\n\n  if (alreadySetup && !options.advanced?.UNSAFE_forceOpenTelemetryReinitialization) {\n    if (options.advanced?.attachToExistingProvider) {\n      return null;\n    }\n\n    logger.error(\n      `OpenTelemetry is already set up in this process.\\n` +\n        `Spans will NOT be sent to LangWatch unless you add the LangWatch span processor or exporter to your existing OpenTelemetry setup.\\n` +\n        `You must either:\\n` +\n        `  1. Remove your existing OpenTelemetry setup and only use LangWatch,\\n` +\n        `  2. Add the LangWatch span processor to your existing setup, or replace the existing exporter with the LangWatch exporter.\\n` +\n        `  3. Use advanced.attachToExistingProvider to let LangWatch attach its processors to the existing provider.\\n` +\n        `\\nFor step-by-step instructions, see the LangWatch docs and check out the integration guide for your framework:\\n` +\n        `  https://docs.langwatch.ai/integration/typescript/guide\\n` +\n        `\\nSee also: https://github.com/open-telemetry/opentelemetry-js/issues/5299`,\n    );\n    return createNoOpHandle(logger);\n  }\n\n  if (alreadySetup) {\n    logger.warn(\n      \"OpenTelemetry is already set up, but UNSAFE_forceOpenTelemetryReinitialization=true. \" +\n      \"Proceeding with reinitialization. This may cause conflicts.\"\n    );\n  }\n\n  return null;\n};\n\nconst warnIfMisconfigured = (options: SetupObservabilityOptions, langwatch: ReturnType<typeof getLangWatchConfig>, logger: Logger) => {\n  // Check if LangWatch is disabled but no alternative export mechanisms are provided\n  // Note: If we reach this function, we know advanced.disabled and advanced.skipOpenTelemetrySetup are false\n  // because those are handled as early exits in setupObservability()\n  if (langwatch.disabled) {\n    const hasAlternativeExport =\n      options.spanProcessors?.length ??\n      options.logRecordProcessors?.length ??\n      options.debug?.consoleTracing ??\n      options.debug?.consoleLogging ??\n      options.traceExporter;\n\n    if (!hasAlternativeExport) {\n      const errorMessage =\n        \"LangWatch integration is disabled but no custom span processors, trace exporters, or console tracing is configured. \" +\n        \"OpenTelemetry will be set up but traces will not be exported anywhere. \" +\n        \"Either:\\n\" +\n        \"  1. Enable LangWatch integration (remove langwatch: 'disabled')\\n\" +\n        \"  2. Provide custom spanProcessors, logRecordProcessors, or traceExporter\\n\" +\n        \"  3. Enable debug.consoleTracing or debug.consoleLogging for development\\n\" +\n        \"  4. Use advanced.disabled to completely disable observability\\n\" +\n        \"  5. Use advanced.skipOpenTelemetrySetup to handle OpenTelemetry setup yourself\";\n\n      if (options.advanced?.throwOnSetupError) {\n        throw new Error(errorMessage);\n      } else {\n        logger.error(errorMessage);\n      }\n    }\n  }\n};\n\nexport function setupObservability(options: SetupObservabilityOptions = {}): ObservabilityHandle {\n  const logger = options.debug?.logger ?? new ConsoleLogger({\n    level: options.debug?.logLevel ?? 'warn',\n    prefix: \"LangWatch Observability SDK\",\n  });\n\n  initializeObservabilitySdkConfig({\n    logger,\n    dataCapture: options.dataCapture,\n  });\n\n  if (options.advanced?.disabled) {\n    logger.debug(\"Observability disabled via advanced.disabled\");\n    return createNoOpHandle(logger);\n  }\n\n  if (options.advanced?.skipOpenTelemetrySetup) {\n    logger.debug(\"Skipping OpenTelemetry setup\");\n    return createNoOpHandle(logger);\n  }\n\n  if (options.tracerProvider) {\n    try {\n      return setupDedicatedProvider(options.tracerProvider, options, logger);\n    } catch (err) {\n      const errorMessage = err instanceof Error ? err.message : String(err);\n      logger.error(`Failed to set up dedicated provider: ${errorMessage}`);\n      if (options.advanced?.throwOnSetupError) throw err;\n      return createNoOpHandle(logger);\n    }\n  }\n\n  const earlyExit = checkForEarlyExit(options, logger);\n  if (earlyExit) return earlyExit;\n\n  try {\n    const globalProvider = trace.getTracerProvider();\n    const existingProvider = getConcreteProvider(globalProvider);\n\n    if (options.advanced?.attachToExistingProvider && existingProvider) {\n      const handle = attachToExistingProvider(existingProvider, options, logger);\n      if (handle) return handle;\n\n      const errorMsg =\n        \"attachToExistingProvider is enabled but the existing provider does not support adding span processors. \" +\n        \"This may be due to an incompatible OpenTelemetry version. No spans will be exported to LangWatch.\";\n      if (options.advanced?.throwOnSetupError) throw new Error(errorMsg);\n      logger.error(errorMsg);\n      return createNoOpHandle(logger);\n    }\n\n    const sdk = createAndStartNodeSdk(options, logger, createMergedResource(\n      options.attributes,\n      options.serviceName,\n      options.resource,\n    ));\n\n    logger.info(\"LangWatch Observability SDK setup completed successfully\");\n\n    return {\n      shutdown: async () => {\n        logger.debug(\"Shutting down NodeSDK\");\n        await sdk?.shutdown();\n        logger.info(\"NodeSDK shutdown complete\");\n      },\n    };\n  } catch (err) {\n    const errorMessage = err instanceof Error ? err.message : String(err);\n    logger.error(`Failed to initialize NodeSDK: ${errorMessage}`);\n\n    if (err instanceof Error && err.stack) {\n      logger.debug(`Stack trace: ${err.stack}`);\n    }\n\n    if (options.advanced?.throwOnSetupError) throw err;\n    return createNoOpHandle(logger);\n  }\n}\n\nfunction setupDedicatedProvider(\n  provider: import(\"@opentelemetry/api\").TracerProvider,\n  options: SetupObservabilityOptions,\n  logger: Logger,\n): ObservabilityHandle {\n  const langwatch = getLangWatchConfig(options);\n  const addedProcessors: SpanProcessor[] = [];\n\n  const internalArray = (provider as any)?._activeSpanProcessor?._spanProcessors;\n  const hasPublicApi = typeof (provider as any)?.addSpanProcessor === 'function';\n\n  if (!Array.isArray(internalArray) && !hasPublicApi) {\n    const msg = \"Dedicated tracerProvider does not support adding span processors.\";\n    if (options.advanced?.throwOnSetupError) throw new Error(msg);\n    logger.error(msg);\n    return createNoOpHandle(logger);\n  }\n\n  const addProcessor = (processor: SpanProcessor) => {\n    if (hasPublicApi) {\n      (provider as any).addSpanProcessor(processor);\n    } else {\n      internalArray.push(processor);\n    }\n  };\n\n  if (!langwatch.disabled) {\n    const traceExporter = new LangWatchTraceExporter({\n      apiKey: langwatch.apiKey,\n      endpoint: langwatch.endpoint,\n    });\n\n    const processor = langwatch.processorType === 'batch'\n      ? new BatchSpanProcessor(traceExporter)\n      : new SimpleSpanProcessor(traceExporter);\n\n    addedProcessors.push(processor);\n    addProcessor(processor);\n    logger.info(\"Attached LangWatch span processor to dedicated provider\");\n  }\n\n  if (options.traceExporter) {\n    const p = new SimpleSpanProcessor(options.traceExporter);\n    addedProcessors.push(p);\n    addProcessor(p);\n  }\n\n  if (options.spanProcessors?.length) {\n    for (const p of options.spanProcessors) {\n      addedProcessors.push(p);\n      addProcessor(p);\n    }\n  }\n\n  let unregisterInstrumentations: (() => void) | undefined;\n  if (options.instrumentations?.length) {\n    unregisterInstrumentations = registerInstrumentations({\n      tracerProvider: provider,\n      instrumentations: options.instrumentations,\n    });\n    logger.info(`Registered ${options.instrumentations.length} instrumentations against dedicated provider`);\n  }\n\n  logger.info(\"LangWatch Observability SDK setup completed with dedicated provider (trace-only, global provider untouched)\");\n\n  return {\n    shutdown: async () => {\n      logger.debug(\"Shutting down dedicated LangWatch processors\");\n      try {\n        await Promise.all(addedProcessors.map((p) => p.shutdown()));\n      } finally {\n        const candidates = [\n          (provider as any)?._activeSpanProcessor?._spanProcessors,\n          (provider as any)?.activeSpanProcessor?._spanProcessors,\n          (provider as any)?._registeredSpanProcessors,\n        ];\n        for (const arr of candidates) {\n          if (!Array.isArray(arr)) continue;\n          for (const p of addedProcessors) {\n            const idx = arr.indexOf(p);\n            if (idx !== -1) arr.splice(idx, 1);\n          }\n        }\n        unregisterInstrumentations?.();\n      }\n      logger.info(\"LangWatch processor shutdown complete\");\n    },\n  };\n}\n\nfunction attachToExistingProvider(\n  provider: unknown,\n  options: SetupObservabilityOptions,\n  logger: Logger,\n): ObservabilityHandle | null {\n  const internalArray = (provider as any)?._activeSpanProcessor?._spanProcessors;\n  const hasPublicApi = typeof (provider as any)?.addSpanProcessor === 'function';\n\n  if (!Array.isArray(internalArray) && !hasPublicApi) {\n    return null;\n  }\n\n  const addProcessor = (processor: SpanProcessor) => {\n    if (hasPublicApi) {\n      (provider as any).addSpanProcessor(processor);\n    } else {\n      internalArray.push(processor);\n    }\n  };\n\n  const langwatch = getLangWatchConfig(options);\n  const addedProcessors: SpanProcessor[] = [];\n\n  if (!langwatch.disabled) {\n    const traceExporter = new LangWatchTraceExporter({\n      apiKey: langwatch.apiKey,\n      endpoint: langwatch.endpoint,\n    });\n\n    const processor = langwatch.processorType === 'batch'\n      ? new BatchSpanProcessor(traceExporter)\n      : new SimpleSpanProcessor(traceExporter);\n\n    addedProcessors.push(processor);\n    addProcessor(processor);\n    logger.info(\"Attached LangWatch span processor to existing global provider\");\n  }\n\n  if (options.traceExporter) {\n    const traceExporterProcessor = new SimpleSpanProcessor(options.traceExporter);\n    addedProcessors.push(traceExporterProcessor);\n    addProcessor(traceExporterProcessor);\n    logger.debug(\"Attached user-provided traceExporter to existing provider\");\n  }\n\n  if (options.spanProcessors?.length) {\n    for (const processor of options.spanProcessors) {\n      addedProcessors.push(processor);\n      addProcessor(processor);\n    }\n    logger.debug(`Attached ${options.spanProcessors.length} user-provided span processors to existing provider`);\n  }\n\n  return {\n    shutdown: async () => {\n      logger.debug(\"Shutting down attached LangWatch processors\");\n      try {\n        await Promise.all(addedProcessors.map((p) => p.shutdown()));\n      } finally {\n        const candidates = [\n          (provider as any)?._activeSpanProcessor?._spanProcessors,\n          (provider as any)?.activeSpanProcessor?._spanProcessors,\n          (provider as any)?._registeredSpanProcessors,\n        ];\n        for (const arr of candidates) {\n          if (!Array.isArray(arr)) continue;\n          for (const p of addedProcessors) {\n            const idx = arr.indexOf(p);\n            if (idx !== -1) arr.splice(idx, 1);\n          }\n        }\n      }\n      logger.info(\"LangWatch processor shutdown complete\");\n    },\n  };\n}\n\nexport function createAndStartNodeSdk(\n  options: SetupObservabilityOptions,\n  logger: Logger,\n  resource: Resource,\n): NodeSDK {\n  const langwatch = getLangWatchConfig(options);\n\n  if (langwatch.disabled) {\n    logger.warn(\"LangWatch integration disabled, using user-provided SpanProcessors and LogRecordProcessors\");\n  } else {\n    logger.info(`Using LangWatch ${langwatch.processorType} processors for tracing and logging`);\n  }\n\n  const spanProcessors: SpanProcessor[] = [];\n  const logProcessors: LogRecordProcessor[] = [];\n\n  // Console processors\n  if (options.debug?.consoleTracing) {\n    spanProcessors.push(new SimpleSpanProcessor(new ConsoleSpanExporter()));\n    logger.debug(\"Console tracing enabled; adding console span exporter\");\n  }\n  if (options.debug?.consoleLogging) {\n    logProcessors.push(new SimpleLogRecordProcessor(new ConsoleLogRecordExporter()));\n    logger.debug(\"Console recording of logs enabled; adding console log record processor\");\n  }\n\n  if (!langwatch.disabled) {\n    const traceExporter = new LangWatchTraceExporter({\n      apiKey: langwatch.apiKey,\n      endpoint: langwatch.endpoint,\n    });\n    const logExporter = new LangWatchLogsExporter({\n      apiKey: langwatch.apiKey,\n      endpoint: langwatch.endpoint,\n    });\n\n    if (langwatch.processorType === 'batch') {\n      spanProcessors.push(new BatchSpanProcessor(traceExporter));\n      logProcessors.push(new BatchLogRecordProcessor(logExporter));\n      logger.debug(`Added LangWatch ${langwatch.processorType} SpanProcessor and LogRecordProcessor to SDK`);\n    } else {\n      spanProcessors.push(new SimpleSpanProcessor(traceExporter));\n      logProcessors.push(new SimpleLogRecordProcessor(logExporter));\n      logger.debug(`Added LangWatch ${langwatch.processorType} SpanProcessor and LogRecordProcessor to SDK`);\n    }\n  }\n\n  if (options.traceExporter) {\n    spanProcessors.push(new SimpleSpanProcessor(options.traceExporter));\n    logger.debug(`Added user-provided SpanProcessor to SDK`);\n  }\n\n  if (options.spanProcessors?.length) {\n    spanProcessors.push(...options.spanProcessors);\n    logger.debug(`Added user-provided ${options.spanProcessors.length} SpanProcessors to SDK`);\n  }\n  if (options.logRecordProcessors?.length) {\n    logProcessors.push(...options.logRecordProcessors);\n    logger.debug(`Added user-provided ${options.logRecordProcessors.length} LogRecordProcessors to SDK`);\n  }\n\n  warnIfMisconfigured(options, langwatch, logger);\n\n  // Create logger provider\n  const loggerProvider = logProcessors.length ? new LoggerProvider({\n    resource,\n    processors: logProcessors,\n  }) : void 0;\n\n  if (loggerProvider) {\n    logger.debug(\"Created LangWatch logger provider\");\n  }\n\n  const sdk = new NodeSDK({\n    resource,\n    serviceName: options.serviceName,\n    autoDetectResources: options.autoDetectResources,\n    contextManager: options.contextManager,\n    textMapPropagator: options.textMapPropagator,\n    metricReader: options.metricReader,\n    views: options.views,\n    resourceDetectors: options.resourceDetectors,\n    sampler: options.sampler,\n    spanProcessors,\n    logRecordProcessors: logProcessors,\n    spanLimits: options.spanLimits,\n    idGenerator: options.idGenerator,\n    instrumentations: options.instrumentations,\n  });\n\n  sdk.start();\n  logger.info(\"NodeSDK started successfully\");\n\n  // Fix for Next.js 15: Explicitly verify and register provider if still proxy\n  // See: https://github.com/langwatch/langwatch/issues/753\n  if (process.env.NEXT_RUNTIME === 'nodejs') {\n    // Wait a tick to ensure SDK initialization completes\n    setImmediate(() => {\n      const globalProvider = trace.getTracerProvider();\n\n      // Check if provider is still a proxy (Next.js 15 issue)\n      if (globalProvider.constructor.name === 'ProxyTracerProvider') {\n        logger.warn('Global provider is still ProxyTracerProvider after SDK start - applying Next.js 15 workaround');\n\n        // Access the real provider from the delegate\n        const realProvider = (globalProvider as any)._delegate;\n\n        if (realProvider?.constructor.name === 'NodeTracerProvider') {\n          // Explicitly register the real provider globally\n          trace.setGlobalTracerProvider(realProvider);\n          logger.info('Successfully registered NodeTracerProvider globally for Next.js 15');\n        } else {\n          logger.error('Could not find NodeTracerProvider in proxy delegate - spans may not be exported');\n        }\n      } else {\n        logger.debug(`Provider registered correctly: ${globalProvider.constructor.name}`);\n      }\n    });\n  }\n\n  if (loggerProvider) {\n    setLangWatchLoggerProvider(loggerProvider);\n    logger.debug(\"Set LangWatch logger provider\");\n  }\n\n  if (!options.advanced?.disableAutoShutdown) {\n    let isShuttingDown = false;\n\n    const gracefulShutdown = async ({ signal, exitAfter }: { signal: string; exitAfter: boolean }) => {\n      if (isShuttingDown) return;\n      isShuttingDown = true;\n\n      logger.debug(`${signal}: shutting down OpenTelemetry...`);\n      try {\n        await sdk.shutdown();\n        logger.debug('OpenTelemetry shutdown complete');\n      } catch (err) {\n        logger.error('Error shutting down OpenTelemetry', err);\n      } finally {\n        if (exitAfter) {\n          process.exit(0);\n        }\n      }\n    };\n\n    // Normal process exit when event loop drains (e.g. CLI scripts, one-shot programs)\n    process.on('beforeExit', () => {\n      void gracefulShutdown({ signal: 'beforeExit', exitAfter: false });\n    });\n\n    // Ctrl+C\n    process.on('SIGINT', () => {\n      void gracefulShutdown({ signal: 'SIGINT', exitAfter: true });\n    });\n\n    // External kill / Docker stop / k8s pod termination\n    process.on('SIGTERM', () => {\n      void gracefulShutdown({ signal: 'SIGTERM', exitAfter: true });\n    });\n  }\n\n  return sdk;\n}\n\n/**\n * Ensure observability is set up, but only if not already configured.\n * \n * This is an idempotent function that:\n * - Does nothing if OpenTelemetry is already configured (by you or another library)\n * - Sets up LangWatch observability if no tracer provider exists\n * - Does nothing if LANGWATCH_API_KEY is not set\n * \n * This is useful for libraries/SDKs that want to ensure tracing is available\n * without conflicting with user's existing observability setup.\n * \n * @example\n * ```typescript\n * import { ensureSetup } from \"langwatch/observability/node\";\n * \n * // Safe to call - won't conflict with existing setup\n * ensureSetup();\n * \n * // Now you can use tracing\n * const tracer = trace.getTracer(\"my-app\");\n * ```\n */\nexport const ensureSetup = (): ObservabilityHandle => {\n  const globalProvider = trace.getTracerProvider();\n  const alreadySetup = isConcreteProvider(globalProvider);\n  \n  // If already set up, return no-op handle (don't log error, just silently skip)\n  if (alreadySetup) {\n    return {\n      shutdown: async () => {\n        // No-op - we didn't set up anything\n      },\n    };\n  }\n  \n  // If no API key, return no-op handle (can't set up without it)\n  if (!process.env.LANGWATCH_API_KEY) {\n    return {\n      shutdown: async () => {\n        // No-op - no API key available\n      },\n    };\n  }\n  \n  // Set up observability with defaults\n  return setupObservability();\n};\n","import {\n  defaultResource,\n  type Resource,\n  resourceFromAttributes,\n} from \"@opentelemetry/resources\";\nimport { type Attributes } from \"@opentelemetry/api\";\nimport * as semconv from \"@opentelemetry/semantic-conventions/incubating\";\nimport {\n  LANGWATCH_SDK_LANGUAGE,\n  LANGWATCH_SDK_VERSION,\n  DEFAULT_SERVICE_NAME,\n  LANGWATCH_SDK_NAME_OBSERVABILITY,\n} from \"../../internal/constants\";\nimport {\n  ATTR_LANGWATCH_SDK_NAME,\n  ATTR_LANGWATCH_SDK_VERSION,\n  ATTR_LANGWATCH_SDK_LANGUAGE,\n} from \"../semconv/attributes\";\n\n/**\n * Creates a merged resource from the given attributes, service name, and given resource.\n */\nexport function createMergedResource(\n  attributes: Attributes | undefined,\n  serviceName: string | undefined,\n  givenResource: Resource | undefined,\n): Resource {\n  const langwatchResource = resourceFromAttributes({\n    [ATTR_LANGWATCH_SDK_NAME]: LANGWATCH_SDK_NAME_OBSERVABILITY,\n    [ATTR_LANGWATCH_SDK_LANGUAGE]: LANGWATCH_SDK_LANGUAGE,\n    [ATTR_LANGWATCH_SDK_VERSION]: LANGWATCH_SDK_VERSION,\n  });\n\n  const userResource = resourceFromAttributes({\n    [semconv.ATTR_SERVICE_NAME]: serviceName ?? DEFAULT_SERVICE_NAME,\n    ...(attributes ?? {}),\n  });\n\n  return (givenResource ?? defaultResource())\n    .merge(langwatchResource)\n    .merge(userResource);\n}\n\nfunction hasAttachableProcessorRegistry(obj: unknown): boolean {\n  if (!obj || typeof obj !== \"object\") return false;\n  const candidates = [\n    (obj as any)?._activeSpanProcessor?._spanProcessors,\n    (obj as any)?.activeSpanProcessor?._spanProcessors,\n    (obj as any)?._registeredSpanProcessors,\n  ];\n  return candidates.some(Array.isArray);\n}\n\n/**\n * Returns the concrete OpenTelemetry provider (NodeTracerProvider or BasicTracerProvider),\n * either from the given provider or its delegate, or undefined if not found.\n */\nexport function getConcreteProvider(provider: unknown): unknown {\n  if (!provider || typeof provider !== \"object\") return undefined;\n\n  // Check provider itself\n  const constructorName = (provider as any).constructor?.name;\n  if ([\"NodeTracerProvider\", \"BasicTracerProvider\"].includes(constructorName)) {\n    return provider;\n  }\n  if (typeof (provider as any).addSpanProcessor === \"function\") {\n    return provider;\n  }\n  if (hasAttachableProcessorRegistry(provider)) {\n    return provider;\n  }\n\n  // Check one level of delegate (ProxyTracerProvider pattern)\n  let delegate;\n  if (typeof (provider as any).getDelegate === \"function\") {\n    delegate = (provider as any).getDelegate();\n  } else if ((provider as any).delegate) {\n    delegate = (provider as any).delegate;\n  } else if ((provider as any)._delegate) {\n    // Also check for _delegate (OpenTelemetry's actual property name)\n    // See: https://github.com/langwatch/langwatch/issues/753\n    delegate = (provider as any)._delegate;\n  }\n\n  if (delegate && typeof delegate === \"object\") {\n    const delegateConstructorName = delegate.constructor?.name;\n    if ([\"NodeTracerProvider\", \"BasicTracerProvider\"].includes(delegateConstructorName)) {\n      return delegate;\n    }\n    if (typeof delegate.addSpanProcessor === \"function\") {\n      return delegate;\n    }\n    if (hasAttachableProcessorRegistry(delegate)) {\n      return delegate;\n    }\n  }\n\n  return void 0;\n}\n\n/**\n * Returns true if the given provider (or its delegate) is a concrete OpenTelemetry provider.\n */\nexport function isConcreteProvider(provider: unknown): boolean {\n  return !!getConcreteProvider(provider);\n}\n\n"],"mappings":"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","names":["_a","_b"]}