{"version":3,"file":"initSDK.cjs","names":["DiagLogLevel","diag","registry","DiagConsoleLogger","OTelPerformanceManager","validateAppID","validateAppVersion","NamespacedStorage","getWebSDKOverridableResource","getWebSDKResource","EmbraceDynamicConfigManager","EmbraceSDKFeaturesManager","nsfConfigValidation","EmbraceLimitManager","DEFAULT_LIMITS","getDefaultAttributeScrubbers","EmbraceSessionBatchedSpanProcessor","EmbraceTraceExporter","BatchLogRecordProcessor","EmbraceLogExporter","EmbraceW3CTraceContextPropagator","setupDefaultInstrumentations","EmbraceUserManager","EmbraceSpanSessionManager","BrowserSpanProcessor","EmbraceNetworkSpanProcessor","UserSpanProcessor","PageSpanProcessor","SpanScrubProcessor","BatchSpanProcessor","WebTracerProvider","EmbraceTraceManager","StackContextManager","IdentifiableSessionLogRecordProcessor","BrowserLogRecordProcessor","EmbraceLogRecordProcessor","UserLogRecordProcessor","LogRecordScrubProcessor","PageLogRecordProcessor","LoggerProvider","EmbraceLogManager","EmbracePageManager"],"sources":["../../src/sdk/initSDK.ts"],"sourcesContent":["import { DiagConsoleLogger, DiagLogLevel, diag } from '@opentelemetry/api';\nimport { logs } from '@opentelemetry/api-logs';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport { emptyResource } from '@opentelemetry/resources';\nimport type { LogRecordProcessor } from '@opentelemetry/sdk-logs';\nimport {\n  BatchLogRecordProcessor,\n  LoggerProvider,\n} from '@opentelemetry/sdk-logs';\nimport type { SpanProcessor } from '@opentelemetry/sdk-trace-web';\nimport {\n  BatchSpanProcessor,\n  StackContextManager,\n  WebTracerProvider,\n} from '@opentelemetry/sdk-trace-web';\nimport { createSessionSpanProcessor } from '@opentelemetry/web-common';\nimport { log } from '../api-logs/index.ts';\nimport { page } from '../api-page/index.ts';\nimport { session } from '../api-sessions/index.ts';\nimport { trace } from '../api-traces/index.ts';\nimport { user } from '../api-users/index.ts';\nimport type { AttributeScrubber } from '../common/index.ts';\nimport {\n  EmbraceLogExporter,\n  EmbraceTraceExporter,\n} from '../exporters/index.ts';\nimport {\n  DEFAULT_LIMITS,\n  EmbraceDynamicConfigManager,\n  EmbraceLimitManager,\n  EmbraceLogManager,\n  EmbracePageManager,\n  EmbraceSDKFeaturesManager,\n  EmbraceSpanSessionManager,\n  EmbraceTraceManager,\n  EmbraceUserManager,\n} from '../managers/index.ts';\nimport {\n  BrowserLogRecordProcessor,\n  BrowserSpanProcessor,\n  EmbraceLogRecordProcessor,\n  EmbraceNetworkSpanProcessor,\n  EmbraceSessionBatchedSpanProcessor,\n  IdentifiableSessionLogRecordProcessor,\n  LogRecordScrubProcessor,\n  PageLogRecordProcessor,\n  PageSpanProcessor,\n  SpanScrubProcessor,\n  UserLogRecordProcessor,\n  UserSpanProcessor,\n} from '../processors/index.ts';\nimport { EmbraceW3CTraceContextPropagator } from '../propagators/index.ts';\nimport {\n  getWebSDKOverridableResource,\n  getWebSDKResource,\n} from '../resources/index.ts';\nimport {\n  NamespacedStorage,\n  nsfConfigValidation,\n  OTelPerformanceManager,\n} from '../utils/index.ts';\nimport { getDefaultAttributeScrubbers } from './defaultAttributeScrubbers.ts';\nimport { registry } from './registry.ts';\nimport { setupDefaultInstrumentations } from './setupDefaultInstrumentations.ts';\nimport type {\n  DynamicSDKConfig,\n  SDKControl,\n  SDKInitConfig,\n  SetupLogsArgs,\n  SetupPageArgs,\n  SetupSessionArgs,\n  SetupTracesArgs,\n  SetupUserArgs,\n} from './types.ts';\nimport { validateAppID, validateAppVersion } from './utils.ts';\n\nexport const initSDK = (\n  {\n    appID,\n    appVersion,\n    resource = emptyResource(),\n    spanExporters = [],\n    logExporters = [],\n    spanProcessors = [],\n    propagator = null,\n    defaultInstrumentationConfig,\n    instrumentations = [],\n    contextManager = null,\n    logProcessors = [],\n    attributeScrubbers = [],\n    enableDefaultAttributeScrubbing = true,\n    additionalQueryParamsToScrub = [],\n    logLevel = DiagLogLevel.ERROR,\n    embraceDataURL,\n    embraceConfigURL,\n    diagLogger = diag.createComponentLogger({\n      namespace: 'embrace-sdk',\n    }),\n    dynamicSDKConfigManager: providedDynamicSDKConfigManager,\n    dynamicSDKConfig,\n    registerGlobally = true,\n    blockNetworkSpanForwarding = false,\n    restrictedProtocols = new Set(['file:']),\n    useDocumentTitleAsPageLabel = true,\n  }: SDKInitConfig = {} as SDKInitConfig,\n): SDKControl | false => {\n  try {\n    if (registerGlobally) {\n      const existingSDK = registry.registered();\n      if (existingSDK !== null) {\n        diagLogger.warn(\n          'SDK has already been successfully initialized, skipping this invocation of initSDK',\n        );\n        return existingSDK;\n      }\n    }\n\n    diag.setLogger(new DiagConsoleLogger(), {\n      logLevel,\n    });\n\n    if (typeof window === 'undefined') {\n      diagLogger.warn('browser not detected, skipping initialization');\n      return false;\n    }\n\n    const perf = new OTelPerformanceManager();\n    const initSDKStart = perf.getNowMillis();\n    const validatedAppID = validateAppID(appID);\n    const validatedAppVersion = validateAppVersion(appVersion);\n\n    const sendingToEmbrace = validatedAppID !== undefined;\n\n    if (!sendingToEmbrace && !logExporters.length && !spanExporters.length) {\n      throw new Error(\n        'when appID is omitted, at least one logExporter or spanExporter must be set',\n      );\n    }\n\n    if (restrictedProtocols.has(window.location.protocol)) {\n      throw new Error(\n        `not initializing due to restricted protocol: ${window.location.protocol}`,\n      );\n    }\n\n    if (sendingToEmbrace && typeof CompressionStream === 'undefined') {\n      throw new Error(\n        'CompressionStream is not supported in this browser and required for data compression.',\n      );\n    }\n\n    const useNamespace = !registerGlobally && appID;\n    const sdkLocalStorage = useNamespace\n      ? new NamespacedStorage(appID, window.localStorage)\n      : window.localStorage;\n    const sdkSessionStorage = useNamespace\n      ? new NamespacedStorage(appID, window.sessionStorage)\n      : window.sessionStorage;\n\n    const resourceWithWebSDKAttributes = getWebSDKOverridableResource()\n      .merge(resource)\n      .merge(\n        getWebSDKResource({\n          diagLogger,\n          appVersion: validatedAppVersion,\n          pageSessionStorage: sdkSessionStorage,\n        }),\n      );\n\n    const userManager = setupUser({ registerGlobally, sdkLocalStorage });\n    const enduserPseudoID = userManager.getEmbraceUserId();\n    if (sendingToEmbrace && !enduserPseudoID) {\n      throw new Error('userID is required when using Embrace exporter');\n    }\n\n    const dynamicConfigManager =\n      providedDynamicSDKConfigManager ??\n      new EmbraceDynamicConfigManager({\n        appID: validatedAppID,\n        appVersion: validatedAppVersion,\n        embraceConfigURL,\n        defaultConfig: dynamicSDKConfig,\n        deviceId: enduserPseudoID,\n        storage: sdkLocalStorage,\n      });\n    void dynamicConfigManager.refreshRemoteConfig();\n\n    const sdkFeaturesManager = new EmbraceSDKFeaturesManager({\n      dynamicConfigManager,\n      deviceId: enduserPseudoID,\n      blockNetworkSpanForwarding,\n    });\n\n    if (!sdkFeaturesManager.isSDKEnabled()) {\n      diagLogger.debug('SDK is disabled, skipping initialization.');\n\n      return false;\n    }\n\n    const nsfValid = nsfConfigValidation({\n      featureManager: sdkFeaturesManager,\n      diag: diagLogger,\n      registerGlobally,\n      defaultInstrumentationConfig,\n      propagator,\n    });\n\n    const limitManager = new EmbraceLimitManager(DEFAULT_LIMITS);\n\n    const finalAttributeScrubbers: AttributeScrubber[] = [\n      ...(enableDefaultAttributeScrubbing\n        ? getDefaultAttributeScrubbers(additionalQueryParamsToScrub)\n        : []),\n      ...attributeScrubbers,\n    ];\n\n    const spanSessionManager = setupSession({\n      limitManager,\n      registerGlobally,\n      sdkLocalStorage,\n    });\n\n    let embraceSpanProcessor: EmbraceSessionBatchedSpanProcessor | undefined;\n    let embraceLogProcessor: BatchLogRecordProcessor | undefined;\n    if (sendingToEmbrace) {\n      embraceSpanProcessor = new EmbraceSessionBatchedSpanProcessor({\n        resource: resourceWithWebSDKAttributes,\n        exporter: new EmbraceTraceExporter({\n          appID: validatedAppID,\n          embraceDataURL,\n          userID: enduserPseudoID,\n        }),\n        limitManager,\n        storedSpansExpireTimeoutMS:\n          defaultInstrumentationConfig?.['session-visibility']\n            ?.storedSpansExpireTimeoutMS,\n        storage: sdkLocalStorage,\n        spanSessionManager,\n      });\n\n      embraceLogProcessor = new BatchLogRecordProcessor(\n        new EmbraceLogExporter({\n          appID: validatedAppID,\n          embraceDataURL,\n          userID: enduserPseudoID,\n        }),\n      );\n    }\n\n    const pageManager = setupPage({\n      useDocumentTitleAsPageLabel,\n      registerGlobally,\n    });\n\n    const { tracerProvider, embraceTraceManager } = setupTraces({\n      resource: resourceWithWebSDKAttributes,\n      spanSessionManager,\n      userManager,\n      spanExporters,\n      spanProcessors,\n      propagator: nsfValid\n        ? new EmbraceW3CTraceContextPropagator()\n        : propagator,\n      contextManager,\n      attributeScrubbers: finalAttributeScrubbers,\n      registerGlobally,\n      embraceSpanProcessor,\n      pageManager,\n    });\n\n    spanSessionManager.setTracerProvider(tracerProvider);\n\n    const { loggerProvider, embraceLogManager } = setupLogs({\n      resource: resourceWithWebSDKAttributes,\n      userManager,\n      logExporters,\n      logProcessors,\n      spanSessionManager,\n      limitManager,\n      attributeScrubbers: finalAttributeScrubbers,\n      registerGlobally,\n      embraceLogProcessor,\n      sdkLocalStorage,\n      pageManager,\n    });\n\n    // NOTE: we require setupInstrumentation to run the last, after setupLogs and setupTraces. This is how OTel works wrt\n    // the dependencies between instrumentations and global providers. We need the providers for tracers, and logs to be\n    // setup before we enable instrumentations.\n    if (!registerGlobally) {\n      registerInstrumentations({\n        tracerProvider,\n        loggerProvider,\n        instrumentations: [\n          setupDefaultInstrumentations(defaultInstrumentationConfig, {\n            featureManager: sdkFeaturesManager,\n            logManager: embraceLogManager,\n            spanSessionManager,\n            embraceSpanProcessor,\n            pageManager,\n            limitManager,\n          }),\n          ...instrumentations,\n        ],\n      });\n    } else {\n      registerInstrumentations({\n        instrumentations: [\n          setupDefaultInstrumentations(defaultInstrumentationConfig, {\n            featureManager: sdkFeaturesManager,\n            embraceSpanProcessor,\n            pageManager,\n            limitManager,\n          }),\n          ...instrumentations,\n        ],\n      });\n    }\n\n    diagLogger.info('successfully initialized the SDK');\n\n    const sdkControl: SDKControl = {\n      setDynamicConfig: (config: Partial<DynamicSDKConfig>) => {\n        dynamicConfigManager.setConfig(config);\n      },\n      flush: async () => {\n        await tracerProvider.forceFlush();\n        await loggerProvider.forceFlush();\n      },\n      log: embraceLogManager,\n      trace: embraceTraceManager,\n      session: spanSessionManager,\n      user: userManager,\n      page: pageManager,\n    };\n\n    if (registerGlobally) {\n      registry.register(sdkControl);\n    }\n\n    spanSessionManager.recordSDKStartupDuration(\n      perf.getNowMillis() - initSDKStart,\n    );\n\n    return sdkControl;\n  } catch (e) {\n    const message = e instanceof Error ? e.message : 'Unknown error.';\n    diagLogger.error(`failed to initialize the SDK: ${message}`);\n    return false;\n  }\n};\n\nconst setupUser = ({ registerGlobally, sdkLocalStorage }: SetupUserArgs) => {\n  const embraceUserManager = new EmbraceUserManager({\n    storage: sdkLocalStorage,\n  });\n\n  if (registerGlobally) {\n    user.setGlobalUserManager(embraceUserManager);\n  }\n\n  return embraceUserManager;\n};\n\nconst setupSession = ({\n  limitManager,\n  registerGlobally,\n  sdkLocalStorage,\n}: SetupSessionArgs) => {\n  const embraceSpanSessionManager = new EmbraceSpanSessionManager({\n    limitManager,\n    storage: sdkLocalStorage,\n  });\n\n  if (registerGlobally) {\n    session.setGlobalSessionManager(embraceSpanSessionManager);\n  }\n\n  return embraceSpanSessionManager;\n};\n\nconst setupTraces = ({\n  resource,\n  spanSessionManager,\n  userManager,\n  spanExporters,\n  spanProcessors = [],\n  propagator = null,\n  contextManager = null,\n  attributeScrubbers,\n  registerGlobally,\n  embraceSpanProcessor,\n  pageManager,\n}: SetupTracesArgs) => {\n  const finalSpanProcessors: SpanProcessor[] = [\n    ...spanProcessors,\n    createSessionSpanProcessor(spanSessionManager),\n    new BrowserSpanProcessor(),\n    new EmbraceNetworkSpanProcessor(),\n    new UserSpanProcessor({ userManager }),\n    new PageSpanProcessor({ pageManager }),\n    new SpanScrubProcessor({ attributeScrubbers }),\n  ];\n\n  spanExporters?.forEach((exporter) => {\n    finalSpanProcessors.push(new BatchSpanProcessor(exporter));\n  });\n\n  if (embraceSpanProcessor) {\n    finalSpanProcessors.push(embraceSpanProcessor);\n  }\n\n  const tracerProvider = new WebTracerProvider({\n    resource,\n    spanProcessors: finalSpanProcessors,\n    spanLimits: {\n      // Session properties are stored as attributes on the session span, add a\n      // buffer here so that there is room for our internal attributes\n      attributeCountLimit: DEFAULT_LIMITS.maxAllowed.session_property * 2,\n      // Breadcrumbs are stored as events on the session span, add a\n      // buffer here so that there is room for our internal events\n      eventCountLimit: DEFAULT_LIMITS.maxAllowed.breadcrumb * 2,\n    },\n  });\n\n  const embraceTraceManager = new EmbraceTraceManager({\n    tracerProvider: registerGlobally ? undefined : tracerProvider,\n  });\n\n  if (registerGlobally) {\n    trace.setGlobalTraceManager(embraceTraceManager);\n    tracerProvider.register({\n      // WebTracerProvider.register has different fallback behaviours depending on whether null or undefined is passed,\n      // be more explicit here and always supply a StackContextManager if the config did not specify one. If a user really\n      // wants to turn off context management they can pass a no-op manager explicitly:\n      // https://github.com/open-telemetry/opentelemetry-js/blob/4f0b6285af24b71a9fa022755aaa3b6a63ae5033/packages/opentelemetry-sdk-trace-web/src/WebTracerProvider.ts#L39\n      contextManager: contextManager || new StackContextManager(),\n      propagator,\n    });\n  }\n\n  return { tracerProvider, embraceTraceManager };\n};\n\nconst setupLogs = ({\n  resource,\n  userManager,\n  logExporters,\n  logProcessors,\n  spanSessionManager,\n  limitManager,\n  attributeScrubbers,\n  registerGlobally,\n  embraceLogProcessor,\n  sdkLocalStorage,\n  pageManager,\n}: SetupLogsArgs) => {\n  const finalLogProcessors: LogRecordProcessor[] = [\n    ...logProcessors,\n    new IdentifiableSessionLogRecordProcessor({\n      spanSessionManager,\n    }),\n    new BrowserLogRecordProcessor(),\n    new EmbraceLogRecordProcessor(),\n    new UserLogRecordProcessor({ userManager }),\n    new LogRecordScrubProcessor({ attributeScrubbers }),\n    new PageLogRecordProcessor({ pageManager }),\n  ];\n\n  logExporters?.forEach((exporter) => {\n    finalLogProcessors.push(new BatchLogRecordProcessor(exporter));\n  });\n\n  if (embraceLogProcessor) {\n    finalLogProcessors.push(embraceLogProcessor);\n  }\n\n  const loggerProvider = new LoggerProvider({\n    resource,\n    processors: finalLogProcessors,\n  });\n\n  const embraceLogManager = new EmbraceLogManager({\n    spanSessionManager,\n    limitManager,\n    loggerProvider: registerGlobally ? undefined : loggerProvider,\n    storage: sdkLocalStorage,\n  });\n\n  if (registerGlobally) {\n    logs.setGlobalLoggerProvider(loggerProvider);\n    log.setGlobalLogManager(embraceLogManager);\n  }\n\n  return { loggerProvider, embraceLogManager };\n};\n\nconst setupPage = ({\n  useDocumentTitleAsPageLabel,\n  registerGlobally,\n}: SetupPageArgs) => {\n  const embracePageManager = new EmbracePageManager({\n    useDocumentTitleAsPageLabel,\n  });\n\n  if (registerGlobally) {\n    page.setGlobalPageManager(embracePageManager);\n  }\n\n  return embracePageManager;\n};\n"],"mappings":"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"}