{"version":3,"file":"initSDK.cjs","names":["DiagLogLevel","diag","registry","DiagConsoleLogger","OTelPerformanceManager","updateZeroTimeMillis","validateAppID","validateAppVersion","NamespacedStorage","getWebSDKOverridableResource","getWebSDKResource","EmbraceDynamicConfigManager","EmbraceSDKFeaturesManager","nsfConfigValidation","EmbraceLimitManager","DEFAULT_LIMITS","getDefaultAttributeScrubbers","EmbraceSessionPartBatchedSpanProcessor","EmbraceTraceExporter","BatchLogRecordProcessor","EmbraceLogExporter","SignalBuffer","EmbraceW3CTraceContextPropagator","setupDefaultInstrumentations","EmbraceUserManager","EmbraceUserSessionManager","BrowserSpanProcessor","EmbraceNetworkSpanProcessor","UserSpanProcessor","PageSpanProcessor","SpanScrubProcessor","SignalCorrelationSpanProcessor","BatchSpanProcessor","WebTracerProvider","EmbraceTraceManager","StackContextManager","UserSessionLogRecordProcessor","BrowserLogRecordProcessor","EmbraceLogRecordProcessor","UserLogRecordProcessor","LogRecordScrubProcessor","PageLogRecordProcessor","SignalCorrelationLogRecordProcessor","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';\nimport { BatchSpanProcessor } from '@opentelemetry/sdk-trace';\nimport {\n  StackContextManager,\n  WebTracerProvider,\n} from '@opentelemetry/sdk-trace-web';\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  EmbraceTraceManager,\n  EmbraceUserManager,\n  EmbraceUserSessionManager,\n} from '../managers/index.ts';\nimport {\n  BrowserLogRecordProcessor,\n  BrowserSpanProcessor,\n  EmbraceLogRecordProcessor,\n  EmbraceNetworkSpanProcessor,\n  EmbraceSessionPartBatchedSpanProcessor,\n  LogRecordScrubProcessor,\n  PageLogRecordProcessor,\n  PageSpanProcessor,\n  SignalBuffer,\n  SignalCorrelationLogRecordProcessor,\n  SignalCorrelationSpanProcessor,\n  SpanScrubProcessor,\n  UserLogRecordProcessor,\n  UserSessionLogRecordProcessor,\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  updateZeroTimeMillis,\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  SetupTracesArgs,\n  SetupUserArgs,\n  SetupUserSessionArgs,\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\n    window.addEventListener('pageshow', (event) =>\n      updateZeroTimeMillis(perf.epochMillisFromOrigin(event.timeStamp)),\n    );\n\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 namespace = appID ?? undefined;\n    const sdkLocalStorage = new NamespacedStorage({\n      namespace,\n      storage: window.localStorage,\n      diag: diagLogger,\n    });\n    const sdkTabStorage = new NamespacedStorage({\n      namespace,\n      storage: window.sessionStorage,\n      diag: diagLogger,\n    });\n\n    const resourceWithWebSDKAttributes = getWebSDKOverridableResource()\n      .merge(resource)\n      .merge(\n        getWebSDKResource({\n          diagLogger,\n          appVersion: validatedAppVersion,\n          tabStorage: sdkTabStorage,\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 userSessionManager = setupUserSession({\n      limitManager,\n      perf,\n      registerGlobally,\n      sdkLocalStorage,\n      visibilityDoc: window.document,\n      dynamicConfigManager,\n    });\n\n    let embraceSpanProcessor:\n      | EmbraceSessionPartBatchedSpanProcessor\n      | undefined;\n    let embraceLogProcessor: BatchLogRecordProcessor | undefined;\n    if (sendingToEmbrace) {\n      embraceSpanProcessor = new EmbraceSessionPartBatchedSpanProcessor({\n        exporter: new EmbraceTraceExporter({\n          appID: validatedAppID,\n          embraceDataURL,\n          userID: enduserPseudoID,\n        }),\n        limitManager,\n        userSessionManager,\n      });\n\n      embraceLogProcessor = new BatchLogRecordProcessor({\n        exporter: new EmbraceLogExporter({\n          appID: validatedAppID,\n          embraceDataURL,\n          userID: enduserPseudoID,\n        }),\n      });\n    }\n\n    const pageManager = setupPage({\n      useDocumentTitleAsPageLabel,\n      registerGlobally,\n      userSessionManager,\n      perf,\n    });\n\n    // The correlation buffer is only needed to back-fill soft-navigation\n    // spans, so skip creating it when that instrumentation is omitted.\n    const softNavigationEnabled = !defaultInstrumentationConfig?.omit?.has(\n      'soft-navigation-performance',\n    );\n    const signalBuffer = softNavigationEnabled ? new SignalBuffer() : undefined;\n\n    const { tracerProvider, embraceTraceManager } = setupTraces({\n      resource: resourceWithWebSDKAttributes,\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      signalBuffer,\n    });\n\n    userSessionManager.setTracerProvider(tracerProvider);\n    // No-op if the tab is hidden/unfocused at init; the first part starts\n    // on the next engagement via the manager's browser-activity listeners.\n    userSessionManager.startSessionPartInternal({ reason: 'init' });\n\n    const { loggerProvider, embraceLogManager } = setupLogs({\n      resource: resourceWithWebSDKAttributes,\n      userManager,\n      logExporters,\n      logProcessors,\n      userSessionManager,\n      limitManager,\n      attributeScrubbers: finalAttributeScrubbers,\n      perf,\n      registerGlobally,\n      embraceLogProcessor,\n      sdkLocalStorage,\n      pageManager,\n      visibilityDoc: window.document,\n      signalBuffer,\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            logManager: embraceLogManager,\n            userSessionManager,\n            pageManager,\n            limitManager,\n            signalBuffer,\n          }),\n          ...instrumentations,\n        ],\n      });\n    } else {\n      registerInstrumentations({\n        instrumentations: [\n          setupDefaultInstrumentations(defaultInstrumentationConfig, {\n            pageManager,\n            limitManager,\n            signalBuffer,\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: userSessionManager,\n      user: userManager,\n      page: pageManager,\n    };\n\n    if (registerGlobally) {\n      registry.register(sdkControl);\n    }\n\n    userSessionManager.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 setupUserSession = ({\n  limitManager,\n  perf,\n  registerGlobally,\n  sdkLocalStorage,\n  visibilityDoc,\n  dynamicConfigManager,\n}: SetupUserSessionArgs) => {\n  const embraceUserSessionManager = new EmbraceUserSessionManager({\n    limitManager,\n    perf,\n    storage: sdkLocalStorage,\n    visibilityDoc,\n    dynamicConfigManager,\n  });\n\n  if (registerGlobally) {\n    session.setGlobalUserSessionManager(embraceUserSessionManager);\n  }\n\n  return embraceUserSessionManager;\n};\n\nconst setupTraces = ({\n  resource,\n  userManager,\n  spanExporters,\n  spanProcessors = [],\n  propagator = null,\n  contextManager = null,\n  attributeScrubbers,\n  registerGlobally,\n  embraceSpanProcessor,\n  pageManager,\n  signalBuffer,\n}: SetupTracesArgs) => {\n  const finalSpanProcessors: SpanProcessor[] = [\n    ...spanProcessors,\n    new BrowserSpanProcessor(),\n    new EmbraceNetworkSpanProcessor(),\n    new UserSpanProcessor({ userManager }),\n    new PageSpanProcessor({ pageManager }),\n    new SpanScrubProcessor({ attributeScrubbers }),\n    // Placement in this chain does not affect the stamp: every\n    // processor's onEnding runs before any onEnd (the batcher exports at\n    // onEnd), so the soft-navigation span still sees the full window.\n    ...(signalBuffer\n      ? [\n          new SignalCorrelationSpanProcessor({\n            buffer: signalBuffer,\n          }),\n        ]\n      : []),\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 part span,\n      // add a 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 part 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  userSessionManager,\n  limitManager,\n  attributeScrubbers,\n  perf,\n  registerGlobally,\n  embraceLogProcessor,\n  sdkLocalStorage,\n  pageManager,\n  visibilityDoc,\n  signalBuffer,\n}: SetupLogsArgs) => {\n  const finalLogProcessors: LogRecordProcessor[] = [\n    ...logProcessors,\n    new UserSessionLogRecordProcessor({\n      userSessionManager,\n    }),\n    new BrowserLogRecordProcessor(),\n    new EmbraceLogRecordProcessor(),\n    new UserLogRecordProcessor({ userManager }),\n    new LogRecordScrubProcessor({ attributeScrubbers }),\n    new PageLogRecordProcessor({ pageManager }),\n    // Must run after UserSessionLogRecordProcessor, which stamps the\n    // synthetic log id this processor records into the shared buffer.\n    // Keeping it last to prevent any ordering issues.\n    ...(signalBuffer\n      ? [\n          new SignalCorrelationLogRecordProcessor({\n            buffer: signalBuffer,\n          }),\n        ]\n      : []),\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    userSessionManager,\n    limitManager,\n    loggerProvider: registerGlobally ? undefined : loggerProvider,\n    perf,\n    storage: sdkLocalStorage,\n    visibilityDoc,\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  userSessionManager,\n  perf,\n}: SetupPageArgs) => {\n  const embracePageManager = new EmbracePageManager({\n    useDocumentTitleAsPageLabel,\n    userSessionManager,\n    perf,\n  });\n\n  if (registerGlobally) {\n    page.setGlobalPageManager(embracePageManager);\n  }\n\n  return embracePageManager;\n};\n"],"mappings":"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"}