@safaricom-mxl/web-sdk 0.0.10 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.cjs +4 -0
- package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.cjs.map +1 -1
- package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.d.cts +4 -0
- package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.d.cts.map +1 -1
- package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.d.ts +4 -0
- package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.d.ts.map +1 -1
- package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.js +4 -0
- package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.js.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/mxl-web-sdk.js +38 -1
- package/dist/mxl-web-sdk.js.map +1 -1
- package/dist/packages/otlp-transformer/dist/index.cjs +215 -81
- package/dist/packages/otlp-transformer/dist/index.cjs.map +1 -1
- package/dist/packages/otlp-transformer/dist/index.d.cts.map +1 -1
- package/dist/packages/otlp-transformer/dist/index.d.ts.map +1 -1
- package/dist/packages/otlp-transformer/dist/index.js +215 -81
- package/dist/packages/otlp-transformer/dist/index.js.map +1 -1
- package/dist/resources/constants/index.cjs +1 -1
- package/dist/resources/constants/index.cjs.map +1 -1
- package/dist/resources/constants/index.d.cts +1 -1
- package/dist/resources/constants/index.d.ts +1 -1
- package/dist/resources/constants/index.js +1 -1
- package/dist/resources/constants/index.js.map +1 -1
- package/dist/sdk/index.d.cts +2 -2
- package/dist/sdk/index.d.ts +2 -2
- package/dist/sdk/initSDK.cjs +15 -2
- package/dist/sdk/initSDK.cjs.map +1 -1
- package/dist/sdk/initSDK.d.cts +3 -1
- package/dist/sdk/initSDK.d.cts.map +1 -1
- package/dist/sdk/initSDK.d.ts +3 -1
- package/dist/sdk/initSDK.d.ts.map +1 -1
- package/dist/sdk/initSDK.js +15 -2
- package/dist/sdk/initSDK.js.map +1 -1
- package/dist/sdk/setupSessionRecorder.cjs +46 -0
- package/dist/sdk/setupSessionRecorder.cjs.map +1 -0
- package/dist/sdk/setupSessionRecorder.d.cts +21 -0
- package/dist/sdk/setupSessionRecorder.d.cts.map +1 -0
- package/dist/sdk/setupSessionRecorder.d.ts +21 -0
- package/dist/sdk/setupSessionRecorder.d.ts.map +1 -0
- package/dist/sdk/setupSessionRecorder.js +43 -0
- package/dist/sdk/setupSessionRecorder.js.map +1 -0
- package/dist/sdk/types.d.cts +22 -1
- package/dist/sdk/types.d.cts.map +1 -1
- package/dist/sdk/types.d.ts +22 -1
- package/dist/sdk/types.d.ts.map +1 -1
- package/package.json +14 -13
package/dist/sdk/initSDK.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initSDK.cjs","names":["DiagLogLevel","diag","registry","DiagConsoleLogger","OTelPerformanceManager","validateAppID","validateAppVersion","NamespacedStorage","getWebSDKResource","MXLDynamicConfigManager","MXLSDKFeaturesManager","nsfConfigValidation","MXLLimitManager","DEFAULT_LIMITS","getDefaultAttributeScrubbers","MXLSessionBatchedSpanProcessor","MXLTraceExporter","BatchLogRecordProcessor","MXLLogExporter","MXLW3CTraceContextPropagator","setupDefaultInstrumentations","MXLUserManager","MXLSpanSessionManager","BrowserSpanProcessor","MXLNetworkSpanProcessor","UserSpanProcessor","PageSpanProcessor","SpanScrubProcessor","BatchSpanProcessor","WebTracerProvider","MXLTraceManager","StackContextManager","IdentifiableSessionLogRecordProcessor","BrowserLogRecordProcessor","MXLLogRecordProcessor","UserLogRecordProcessor","LogRecordScrubProcessor","PageLogRecordProcessor","LoggerProvider","MXLLogManager","MXLPageManager"],"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 MXLLogExporter,\n MXLTraceExporter,\n} from '../exporters/index.ts';\nimport {\n DEFAULT_LIMITS,\n MXLDynamicConfigManager,\n MXLLimitManager,\n MXLLogManager,\n MXLPageManager,\n MXLSDKFeaturesManager,\n MXLSpanSessionManager,\n MXLTraceManager,\n MXLUserManager,\n} from '../managers/index.ts';\nimport {\n BrowserLogRecordProcessor,\n BrowserSpanProcessor,\n MXLLogRecordProcessor,\n MXLNetworkSpanProcessor,\n MXLSessionBatchedSpanProcessor,\n IdentifiableSessionLogRecordProcessor,\n LogRecordScrubProcessor,\n PageLogRecordProcessor,\n PageSpanProcessor,\n SpanScrubProcessor,\n UserLogRecordProcessor,\n UserSpanProcessor,\n} from '../processors/index.ts';\nimport { MXLW3CTraceContextPropagator } from '../propagators/index.ts';\nimport { getWebSDKResource } 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 mxlDataURL,\n mxlConfigURL,\n diagLogger = diag.createComponentLogger({\n namespace: 'mxl-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 sendingToMXL = validatedAppID !== undefined;\n\n if (!sendingToMXL && !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 (sendingToMXL && 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 = resource.merge(\n getWebSDKResource({\n diagLogger,\n appVersion: validatedAppVersion,\n pageSessionStorage: sdkSessionStorage,\n }),\n );\n\n const userManager = setupUser({ registerGlobally, sdkLocalStorage });\n const enduserPseudoID = userManager.getMXLUserId();\n if (sendingToMXL && !enduserPseudoID) {\n throw new Error('userID is required when using MXL exporter');\n }\n\n const dynamicConfigManager =\n providedDynamicSDKConfigManager ??\n new MXLDynamicConfigManager({\n appID: validatedAppID,\n appVersion: validatedAppVersion,\n mxlConfigURL,\n defaultConfig: dynamicSDKConfig,\n deviceId: enduserPseudoID,\n storage: sdkLocalStorage,\n });\n void dynamicConfigManager.refreshRemoteConfig();\n\n const sdkFeaturesManager = new MXLSDKFeaturesManager({\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 MXLLimitManager(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 sdkSessionStorage,\n });\n\n let mxlSpanProcessor: MXLSessionBatchedSpanProcessor | undefined;\n let mxlLogProcessor: BatchLogRecordProcessor | undefined;\n if (sendingToMXL) {\n mxlSpanProcessor = new MXLSessionBatchedSpanProcessor({\n resource: resourceWithWebSDKAttributes,\n exporter: new MXLTraceExporter({\n appID: validatedAppID,\n mxlDataURL,\n userID: enduserPseudoID,\n }),\n limitManager,\n storedSpansExpireTimeoutMS:\n defaultInstrumentationConfig?.['session-visibility']\n ?.storedSpansExpireTimeoutMS,\n storage: sdkLocalStorage,\n spanSessionManager,\n });\n\n mxlLogProcessor = new BatchLogRecordProcessor(\n new MXLLogExporter({\n appID: validatedAppID,\n mxlDataURL,\n userID: enduserPseudoID,\n }),\n );\n }\n\n const pageManager = setupPage({\n useDocumentTitleAsPageLabel,\n registerGlobally,\n });\n\n const { tracerProvider, mxlTraceManager } = setupTraces({\n resource: resourceWithWebSDKAttributes,\n spanSessionManager,\n userManager,\n spanExporters,\n spanProcessors,\n propagator: nsfValid\n ? new MXLW3CTraceContextPropagator()\n : propagator,\n contextManager,\n attributeScrubbers: finalAttributeScrubbers,\n registerGlobally,\n mxlSpanProcessor,\n pageManager,\n });\n\n spanSessionManager.setTracerProvider(tracerProvider);\n\n const { loggerProvider, mxlLogManager } = setupLogs({\n resource: resourceWithWebSDKAttributes,\n userManager,\n logExporters,\n logProcessors,\n spanSessionManager,\n limitManager,\n attributeScrubbers: finalAttributeScrubbers,\n registerGlobally,\n mxlLogProcessor,\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: mxlLogManager,\n spanSessionManager,\n mxlSpanProcessor,\n pageManager,\n }),\n ...instrumentations,\n ],\n });\n } else {\n registerInstrumentations({\n instrumentations: [\n setupDefaultInstrumentations(defaultInstrumentationConfig, {\n featureManager: sdkFeaturesManager,\n mxlSpanProcessor,\n pageManager,\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: mxlLogManager,\n trace: mxlTraceManager,\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 mxlUserManager = new MXLUserManager({\n storage: sdkLocalStorage,\n });\n\n if (registerGlobally) {\n user.setGlobalUserManager(mxlUserManager);\n }\n\n return mxlUserManager;\n};\n\nconst setupSession = ({\n limitManager,\n registerGlobally,\n sdkLocalStorage,\n sdkSessionStorage,\n }: SetupSessionArgs) => {\n const mxlSpanSessionManager = new MXLSpanSessionManager({\n limitManager,\n storage: sdkLocalStorage,\n sessionStorage: sdkSessionStorage,\n });\n\n if (registerGlobally) {\n session.setGlobalSessionManager(mxlSpanSessionManager);\n }\n\n return mxlSpanSessionManager;\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 mxlSpanProcessor,\n pageManager,\n }: SetupTracesArgs) => {\n const finalSpanProcessors: SpanProcessor[] = [\n ...spanProcessors,\n createSessionSpanProcessor(spanSessionManager),\n new BrowserSpanProcessor(),\n new MXLNetworkSpanProcessor(),\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 (mxlSpanProcessor) {\n finalSpanProcessors.push(mxlSpanProcessor);\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 attributePerEventCountLimit: 20,\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 attributeValueLengthLimit: 1024,\n },\n });\n\n const mxlTraceManager = new MXLTraceManager({\n tracerProvider: registerGlobally ? undefined : tracerProvider,\n });\n\n if (registerGlobally) {\n trace.setGlobalTraceManager(mxlTraceManager);\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, mxlTraceManager };\n};\n\nconst setupLogs = ({\n resource,\n userManager,\n logExporters,\n logProcessors,\n spanSessionManager,\n limitManager,\n attributeScrubbers,\n registerGlobally,\n mxlLogProcessor,\n sdkLocalStorage,\n pageManager,\n }: SetupLogsArgs) => {\n const finalLogProcessors: LogRecordProcessor[] = [\n ...logProcessors,\n new IdentifiableSessionLogRecordProcessor({\n spanSessionManager,\n }),\n new BrowserLogRecordProcessor(),\n new MXLLogRecordProcessor(),\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 (mxlLogProcessor) {\n finalLogProcessors.push(mxlLogProcessor);\n }\n\n const loggerProvider = new LoggerProvider({\n resource,\n processors: finalLogProcessors,\n });\n\n const mxlLogManager = new MXLLogManager({\n spanSessionManager,\n limitManager,\n loggerProvider: registerGlobally ? undefined : loggerProvider,\n storage: sdkLocalStorage,\n });\n\n if (registerGlobally) {\n logs.setGlobalLoggerProvider(loggerProvider);\n log.setGlobalLogManager(mxlLogManager);\n }\n\n return { loggerProvider, mxlLogManager };\n};\n\nconst setupPage = ({\n useDocumentTitleAsPageLabel,\n registerGlobally,\n }: SetupPageArgs) => {\n const mxlPageManager = new MXLPageManager({\n useDocumentTitleAsPageLabel,\n });\n\n if (registerGlobally) {\n page.setGlobalPageManager(mxlPageManager);\n }\n\n return mxlPageManager;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"initSDK.cjs","names":["DiagLogLevel","diag","registry","DiagConsoleLogger","OTelPerformanceManager","validateAppID","validateAppVersion","NamespacedStorage","getWebSDKResource","MXLDynamicConfigManager","MXLSDKFeaturesManager","nsfConfigValidation","MXLLimitManager","DEFAULT_LIMITS","getDefaultAttributeScrubbers","MXLSessionBatchedSpanProcessor","MXLTraceExporter","BatchLogRecordProcessor","MXLLogExporter","MXLW3CTraceContextPropagator","setupDefaultInstrumentations","createSessionRecordingControl","noopSessionRecording","MXLUserManager","MXLSpanSessionManager","BrowserSpanProcessor","MXLNetworkSpanProcessor","UserSpanProcessor","PageSpanProcessor","SpanScrubProcessor","BatchSpanProcessor","WebTracerProvider","MXLTraceManager","StackContextManager","IdentifiableSessionLogRecordProcessor","BrowserLogRecordProcessor","MXLLogRecordProcessor","UserLogRecordProcessor","LogRecordScrubProcessor","PageLogRecordProcessor","LoggerProvider","MXLLogManager","MXLPageManager"],"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 { MXLLogExporter, MXLTraceExporter } from '../exporters/index.ts';\nimport {\n DEFAULT_LIMITS,\n MXLDynamicConfigManager,\n MXLLimitManager,\n MXLLogManager,\n MXLPageManager,\n MXLSDKFeaturesManager,\n MXLSpanSessionManager,\n MXLTraceManager,\n MXLUserManager,\n} from '../managers/index.ts';\nimport {\n BrowserLogRecordProcessor,\n BrowserSpanProcessor,\n IdentifiableSessionLogRecordProcessor,\n LogRecordScrubProcessor,\n MXLLogRecordProcessor,\n MXLNetworkSpanProcessor,\n MXLSessionBatchedSpanProcessor,\n PageLogRecordProcessor,\n PageSpanProcessor,\n SpanScrubProcessor,\n UserLogRecordProcessor,\n UserSpanProcessor,\n} from '../processors/index.ts';\nimport { MXLW3CTraceContextPropagator } from '../propagators/index.ts';\nimport { getWebSDKResource } 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 {\n createSessionRecordingControl,\n noopSessionRecording,\n} from './setupSessionRecorder.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 mxlDataURL,\n mxlConfigURL,\n diagLogger = diag.createComponentLogger({\n namespace: 'mxl-sdk',\n }),\n dynamicSDKConfigManager: providedDynamicSDKConfigManager,\n dynamicSDKConfig,\n registerGlobally = true,\n blockNetworkSpanForwarding = false,\n restrictedProtocols = new Set(['file:']),\n useDocumentTitleAsPageLabel = true,\n recordUserSessions = true,\n sessionRecorder,\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 sendingToMXL = validatedAppID !== undefined;\n\n if (!sendingToMXL && !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 (sendingToMXL && 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 = resource.merge(\n getWebSDKResource({\n diagLogger,\n appVersion: validatedAppVersion,\n pageSessionStorage: sdkSessionStorage,\n }),\n );\n\n const userManager = setupUser({ registerGlobally, sdkLocalStorage });\n const enduserPseudoID = userManager.getMXLUserId();\n if (sendingToMXL && !enduserPseudoID) {\n throw new Error('userID is required when using MXL exporter');\n }\n\n const dynamicConfigManager =\n providedDynamicSDKConfigManager ??\n new MXLDynamicConfigManager({\n appID: validatedAppID,\n appVersion: validatedAppVersion,\n mxlConfigURL,\n defaultConfig: dynamicSDKConfig,\n deviceId: enduserPseudoID,\n storage: sdkLocalStorage,\n });\n void dynamicConfigManager.refreshRemoteConfig();\n\n const sdkFeaturesManager = new MXLSDKFeaturesManager({\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 MXLLimitManager(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 sdkSessionStorage,\n });\n\n let mxlSpanProcessor: MXLSessionBatchedSpanProcessor | undefined;\n let mxlLogProcessor: BatchLogRecordProcessor | undefined;\n if (sendingToMXL) {\n mxlSpanProcessor = new MXLSessionBatchedSpanProcessor({\n resource: resourceWithWebSDKAttributes,\n exporter: new MXLTraceExporter({\n appID: validatedAppID,\n mxlDataURL,\n userID: enduserPseudoID,\n }),\n limitManager,\n storedSpansExpireTimeoutMS:\n defaultInstrumentationConfig?.['session-visibility']\n ?.storedSpansExpireTimeoutMS,\n storage: sdkLocalStorage,\n spanSessionManager,\n });\n\n mxlLogProcessor = new BatchLogRecordProcessor(\n new MXLLogExporter({\n appID: validatedAppID,\n mxlDataURL,\n userID: enduserPseudoID,\n }),\n );\n }\n\n const pageManager = setupPage({\n useDocumentTitleAsPageLabel,\n registerGlobally,\n });\n\n const { tracerProvider, mxlTraceManager } = setupTraces({\n resource: resourceWithWebSDKAttributes,\n spanSessionManager,\n userManager,\n spanExporters,\n spanProcessors,\n propagator: nsfValid ? new MXLW3CTraceContextPropagator() : propagator,\n contextManager,\n attributeScrubbers: finalAttributeScrubbers,\n registerGlobally,\n mxlSpanProcessor,\n pageManager,\n });\n\n spanSessionManager.setTracerProvider(tracerProvider);\n\n const { loggerProvider, mxlLogManager } = setupLogs({\n resource: resourceWithWebSDKAttributes,\n userManager,\n logExporters,\n logProcessors,\n spanSessionManager,\n limitManager,\n attributeScrubbers: finalAttributeScrubbers,\n registerGlobally,\n mxlLogProcessor,\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: mxlLogManager,\n spanSessionManager,\n mxlSpanProcessor,\n pageManager,\n }),\n ...instrumentations,\n ],\n });\n } else {\n registerInstrumentations({\n instrumentations: [\n setupDefaultInstrumentations(defaultInstrumentationConfig, {\n featureManager: sdkFeaturesManager,\n mxlSpanProcessor,\n pageManager,\n }),\n ...instrumentations,\n ],\n });\n }\n\n const windowDisableSessionRec =\n typeof window !== 'undefined' &&\n (window as unknown as { __MXL_DISABLE_SESSION_RECORDER?: boolean })\n .__MXL_DISABLE_SESSION_RECORDER === true;\n\n const sessionRecording =\n sendingToMXL &&\n validatedAppID &&\n enduserPseudoID &&\n !windowDisableSessionRec\n ? createSessionRecordingControl({\n resource: resourceWithWebSDKAttributes,\n spanSessionManager,\n tracerProvider,\n appID: validatedAppID,\n userID: enduserPseudoID,\n mxlDataURL,\n recordUserSessions,\n sessionRecorder,\n })\n : noopSessionRecording;\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: mxlLogManager,\n trace: mxlTraceManager,\n session: spanSessionManager,\n user: userManager,\n page: pageManager,\n sessionRecording,\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 mxlUserManager = new MXLUserManager({\n storage: sdkLocalStorage,\n });\n\n if (registerGlobally) {\n user.setGlobalUserManager(mxlUserManager);\n }\n\n return mxlUserManager;\n};\n\nconst setupSession = ({\n limitManager,\n registerGlobally,\n sdkLocalStorage,\n sdkSessionStorage,\n}: SetupSessionArgs) => {\n const mxlSpanSessionManager = new MXLSpanSessionManager({\n limitManager,\n storage: sdkLocalStorage,\n sessionStorage: sdkSessionStorage,\n });\n\n if (registerGlobally) {\n session.setGlobalSessionManager(mxlSpanSessionManager);\n }\n\n return mxlSpanSessionManager;\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 mxlSpanProcessor,\n pageManager,\n}: SetupTracesArgs) => {\n const finalSpanProcessors: SpanProcessor[] = [\n ...spanProcessors,\n createSessionSpanProcessor(spanSessionManager),\n new BrowserSpanProcessor(),\n new MXLNetworkSpanProcessor(),\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 (mxlSpanProcessor) {\n finalSpanProcessors.push(mxlSpanProcessor);\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 attributePerEventCountLimit: 20,\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 attributeValueLengthLimit: 1024,\n },\n });\n\n const mxlTraceManager = new MXLTraceManager({\n tracerProvider: registerGlobally ? undefined : tracerProvider,\n });\n\n if (registerGlobally) {\n trace.setGlobalTraceManager(mxlTraceManager);\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, mxlTraceManager };\n};\n\nconst setupLogs = ({\n resource,\n userManager,\n logExporters,\n logProcessors,\n spanSessionManager,\n limitManager,\n attributeScrubbers,\n registerGlobally,\n mxlLogProcessor,\n sdkLocalStorage,\n pageManager,\n}: SetupLogsArgs) => {\n const finalLogProcessors: LogRecordProcessor[] = [\n ...logProcessors,\n new IdentifiableSessionLogRecordProcessor({\n spanSessionManager,\n }),\n new BrowserLogRecordProcessor(),\n new MXLLogRecordProcessor(),\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 (mxlLogProcessor) {\n finalLogProcessors.push(mxlLogProcessor);\n }\n\n const loggerProvider = new LoggerProvider({\n resource,\n processors: finalLogProcessors,\n });\n\n const mxlLogManager = new MXLLogManager({\n spanSessionManager,\n limitManager,\n loggerProvider: registerGlobally ? undefined : loggerProvider,\n storage: sdkLocalStorage,\n });\n\n if (registerGlobally) {\n logs.setGlobalLoggerProvider(loggerProvider);\n log.setGlobalLogManager(mxlLogManager);\n }\n\n return { loggerProvider, mxlLogManager };\n};\n\nconst setupPage = ({\n useDocumentTitleAsPageLabel,\n registerGlobally,\n}: SetupPageArgs) => {\n const mxlPageManager = new MXLPageManager({\n useDocumentTitleAsPageLabel,\n });\n\n if (registerGlobally) {\n page.setGlobalPageManager(mxlPageManager);\n }\n\n return mxlPageManager;\n};\n"],"mappings":"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"}
|
package/dist/sdk/initSDK.d.cts
CHANGED
|
@@ -25,7 +25,9 @@ declare const initSDK: ({
|
|
|
25
25
|
registerGlobally,
|
|
26
26
|
blockNetworkSpanForwarding,
|
|
27
27
|
restrictedProtocols,
|
|
28
|
-
useDocumentTitleAsPageLabel
|
|
28
|
+
useDocumentTitleAsPageLabel,
|
|
29
|
+
recordUserSessions,
|
|
30
|
+
sessionRecorder
|
|
29
31
|
}?: SDKInitConfig) => SDKControl | false;
|
|
30
32
|
//#endregion
|
|
31
33
|
export { initSDK };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initSDK.d.cts","names":[],"sources":["../../src/sdk/initSDK.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"initSDK.d.cts","names":[],"sources":["../../src/sdk/initSDK.ts"],"mappings":";;;cA0Ea,OAAA;EACX,KAAA;EAAA,UAAA;EAAA,QAAA;EAAA,aAAA;EAAA,YAAA;EAAA,cAAA;EAAA,UAAA;EAAA,4BAAA;EAAA,gBAAA;EAAA,cAAA;EAAA,aAAA;EAAA,kBAAA;EAAA,+BAAA;EAAA,4BAAA;EAAA,QAAA;EAAA,UAAA;EAAA,YAAA;EAAA,UAAA;EAAA,uBAAA,EAAA,+BAAA;EAAA,gBAAA;EAAA,gBAAA;EAAA,0BAAA;EAAA,mBAAA;EAAA,2BAAA;EAAA,kBAAA;EAAA;AAAA,IA6BG,aAAA,KACF,UAAA"}
|
package/dist/sdk/initSDK.d.ts
CHANGED
|
@@ -25,7 +25,9 @@ declare const initSDK: ({
|
|
|
25
25
|
registerGlobally,
|
|
26
26
|
blockNetworkSpanForwarding,
|
|
27
27
|
restrictedProtocols,
|
|
28
|
-
useDocumentTitleAsPageLabel
|
|
28
|
+
useDocumentTitleAsPageLabel,
|
|
29
|
+
recordUserSessions,
|
|
30
|
+
sessionRecorder
|
|
29
31
|
}?: SDKInitConfig) => SDKControl | false;
|
|
30
32
|
//#endregion
|
|
31
33
|
export { initSDK };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initSDK.d.ts","names":[],"sources":["../../src/sdk/initSDK.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"initSDK.d.ts","names":[],"sources":["../../src/sdk/initSDK.ts"],"mappings":";;;cA0Ea,OAAA;EACX,KAAA;EAAA,UAAA;EAAA,QAAA;EAAA,aAAA;EAAA,YAAA;EAAA,cAAA;EAAA,UAAA;EAAA,4BAAA;EAAA,gBAAA;EAAA,cAAA;EAAA,aAAA;EAAA,kBAAA;EAAA,+BAAA;EAAA,4BAAA;EAAA,QAAA;EAAA,UAAA;EAAA,YAAA;EAAA,UAAA;EAAA,uBAAA,EAAA,+BAAA;EAAA,gBAAA;EAAA,gBAAA;EAAA,0BAAA;EAAA,mBAAA;EAAA,2BAAA;EAAA,kBAAA;EAAA;AAAA,IA6BG,aAAA,KACF,UAAA"}
|
package/dist/sdk/initSDK.js
CHANGED
|
@@ -34,6 +34,7 @@ import { MXLW3CTraceContextPropagator } from "../propagators/MXLW3CTraceContextP
|
|
|
34
34
|
import { getDefaultAttributeScrubbers } from "./defaultAttributeScrubbers.js";
|
|
35
35
|
import { registry } from "./registry.js";
|
|
36
36
|
import { setupDefaultInstrumentations } from "./setupDefaultInstrumentations.js";
|
|
37
|
+
import { createSessionRecordingControl, noopSessionRecording } from "./setupSessionRecorder.js";
|
|
37
38
|
import { validateAppID, validateAppVersion } from "./utils.js";
|
|
38
39
|
import { DiagConsoleLogger, DiagLogLevel, diag } from "@opentelemetry/api";
|
|
39
40
|
import { emptyResource } from "@opentelemetry/resources";
|
|
@@ -44,7 +45,7 @@ import { BatchLogRecordProcessor, LoggerProvider } from "@opentelemetry/sdk-logs
|
|
|
44
45
|
import { createSessionSpanProcessor } from "@opentelemetry/web-common";
|
|
45
46
|
|
|
46
47
|
//#region src/sdk/initSDK.ts
|
|
47
|
-
const initSDK = ({ appID, appVersion, resource = emptyResource(), spanExporters = [], logExporters = [], spanProcessors = [], propagator = null, defaultInstrumentationConfig, instrumentations = [], contextManager = null, logProcessors = [], attributeScrubbers = [], enableDefaultAttributeScrubbing = true, additionalQueryParamsToScrub = [], logLevel = DiagLogLevel.ERROR, mxlDataURL, mxlConfigURL, diagLogger = diag.createComponentLogger({ namespace: "mxl-sdk" }), dynamicSDKConfigManager: providedDynamicSDKConfigManager, dynamicSDKConfig, registerGlobally = true, blockNetworkSpanForwarding = false, restrictedProtocols = new Set(["file:"]), useDocumentTitleAsPageLabel = true } = {}) => {
|
|
48
|
+
const initSDK = ({ appID, appVersion, resource = emptyResource(), spanExporters = [], logExporters = [], spanProcessors = [], propagator = null, defaultInstrumentationConfig, instrumentations = [], contextManager = null, logProcessors = [], attributeScrubbers = [], enableDefaultAttributeScrubbing = true, additionalQueryParamsToScrub = [], logLevel = DiagLogLevel.ERROR, mxlDataURL, mxlConfigURL, diagLogger = diag.createComponentLogger({ namespace: "mxl-sdk" }), dynamicSDKConfigManager: providedDynamicSDKConfigManager, dynamicSDKConfig, registerGlobally = true, blockNetworkSpanForwarding = false, restrictedProtocols = new Set(["file:"]), useDocumentTitleAsPageLabel = true, recordUserSessions = true, sessionRecorder } = {}) => {
|
|
48
49
|
try {
|
|
49
50
|
if (registerGlobally) {
|
|
50
51
|
const existingSDK = registry.registered();
|
|
@@ -181,6 +182,17 @@ const initSDK = ({ appID, appVersion, resource = emptyResource(), spanExporters
|
|
|
181
182
|
mxlSpanProcessor,
|
|
182
183
|
pageManager
|
|
183
184
|
}), ...instrumentations] });
|
|
185
|
+
const windowDisableSessionRec = typeof window !== "undefined" && window.__MXL_DISABLE_SESSION_RECORDER === true;
|
|
186
|
+
const sessionRecording = sendingToMXL && validatedAppID && enduserPseudoID && !windowDisableSessionRec ? createSessionRecordingControl({
|
|
187
|
+
resource: resourceWithWebSDKAttributes,
|
|
188
|
+
spanSessionManager,
|
|
189
|
+
tracerProvider,
|
|
190
|
+
appID: validatedAppID,
|
|
191
|
+
userID: enduserPseudoID,
|
|
192
|
+
mxlDataURL,
|
|
193
|
+
recordUserSessions,
|
|
194
|
+
sessionRecorder
|
|
195
|
+
}) : noopSessionRecording;
|
|
184
196
|
diagLogger.info("successfully initialized the SDK");
|
|
185
197
|
const sdkControl = {
|
|
186
198
|
setDynamicConfig: (config) => {
|
|
@@ -194,7 +206,8 @@ const initSDK = ({ appID, appVersion, resource = emptyResource(), spanExporters
|
|
|
194
206
|
trace: mxlTraceManager,
|
|
195
207
|
session: spanSessionManager,
|
|
196
208
|
user: userManager,
|
|
197
|
-
page: pageManager
|
|
209
|
+
page: pageManager,
|
|
210
|
+
sessionRecording
|
|
198
211
|
};
|
|
199
212
|
if (registerGlobally) registry.register(sdkControl);
|
|
200
213
|
spanSessionManager.recordSDKStartupDuration(perf.getNowMillis() - initSDKStart);
|
package/dist/sdk/initSDK.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initSDK.js","names":[],"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 MXLLogExporter,\n MXLTraceExporter,\n} from '../exporters/index.ts';\nimport {\n DEFAULT_LIMITS,\n MXLDynamicConfigManager,\n MXLLimitManager,\n MXLLogManager,\n MXLPageManager,\n MXLSDKFeaturesManager,\n MXLSpanSessionManager,\n MXLTraceManager,\n MXLUserManager,\n} from '../managers/index.ts';\nimport {\n BrowserLogRecordProcessor,\n BrowserSpanProcessor,\n MXLLogRecordProcessor,\n MXLNetworkSpanProcessor,\n MXLSessionBatchedSpanProcessor,\n IdentifiableSessionLogRecordProcessor,\n LogRecordScrubProcessor,\n PageLogRecordProcessor,\n PageSpanProcessor,\n SpanScrubProcessor,\n UserLogRecordProcessor,\n UserSpanProcessor,\n} from '../processors/index.ts';\nimport { MXLW3CTraceContextPropagator } from '../propagators/index.ts';\nimport { getWebSDKResource } 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 mxlDataURL,\n mxlConfigURL,\n diagLogger = diag.createComponentLogger({\n namespace: 'mxl-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 sendingToMXL = validatedAppID !== undefined;\n\n if (!sendingToMXL && !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 (sendingToMXL && 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 = resource.merge(\n getWebSDKResource({\n diagLogger,\n appVersion: validatedAppVersion,\n pageSessionStorage: sdkSessionStorage,\n }),\n );\n\n const userManager = setupUser({ registerGlobally, sdkLocalStorage });\n const enduserPseudoID = userManager.getMXLUserId();\n if (sendingToMXL && !enduserPseudoID) {\n throw new Error('userID is required when using MXL exporter');\n }\n\n const dynamicConfigManager =\n providedDynamicSDKConfigManager ??\n new MXLDynamicConfigManager({\n appID: validatedAppID,\n appVersion: validatedAppVersion,\n mxlConfigURL,\n defaultConfig: dynamicSDKConfig,\n deviceId: enduserPseudoID,\n storage: sdkLocalStorage,\n });\n void dynamicConfigManager.refreshRemoteConfig();\n\n const sdkFeaturesManager = new MXLSDKFeaturesManager({\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 MXLLimitManager(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 sdkSessionStorage,\n });\n\n let mxlSpanProcessor: MXLSessionBatchedSpanProcessor | undefined;\n let mxlLogProcessor: BatchLogRecordProcessor | undefined;\n if (sendingToMXL) {\n mxlSpanProcessor = new MXLSessionBatchedSpanProcessor({\n resource: resourceWithWebSDKAttributes,\n exporter: new MXLTraceExporter({\n appID: validatedAppID,\n mxlDataURL,\n userID: enduserPseudoID,\n }),\n limitManager,\n storedSpansExpireTimeoutMS:\n defaultInstrumentationConfig?.['session-visibility']\n ?.storedSpansExpireTimeoutMS,\n storage: sdkLocalStorage,\n spanSessionManager,\n });\n\n mxlLogProcessor = new BatchLogRecordProcessor(\n new MXLLogExporter({\n appID: validatedAppID,\n mxlDataURL,\n userID: enduserPseudoID,\n }),\n );\n }\n\n const pageManager = setupPage({\n useDocumentTitleAsPageLabel,\n registerGlobally,\n });\n\n const { tracerProvider, mxlTraceManager } = setupTraces({\n resource: resourceWithWebSDKAttributes,\n spanSessionManager,\n userManager,\n spanExporters,\n spanProcessors,\n propagator: nsfValid\n ? new MXLW3CTraceContextPropagator()\n : propagator,\n contextManager,\n attributeScrubbers: finalAttributeScrubbers,\n registerGlobally,\n mxlSpanProcessor,\n pageManager,\n });\n\n spanSessionManager.setTracerProvider(tracerProvider);\n\n const { loggerProvider, mxlLogManager } = setupLogs({\n resource: resourceWithWebSDKAttributes,\n userManager,\n logExporters,\n logProcessors,\n spanSessionManager,\n limitManager,\n attributeScrubbers: finalAttributeScrubbers,\n registerGlobally,\n mxlLogProcessor,\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: mxlLogManager,\n spanSessionManager,\n mxlSpanProcessor,\n pageManager,\n }),\n ...instrumentations,\n ],\n });\n } else {\n registerInstrumentations({\n instrumentations: [\n setupDefaultInstrumentations(defaultInstrumentationConfig, {\n featureManager: sdkFeaturesManager,\n mxlSpanProcessor,\n pageManager,\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: mxlLogManager,\n trace: mxlTraceManager,\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 mxlUserManager = new MXLUserManager({\n storage: sdkLocalStorage,\n });\n\n if (registerGlobally) {\n user.setGlobalUserManager(mxlUserManager);\n }\n\n return mxlUserManager;\n};\n\nconst setupSession = ({\n limitManager,\n registerGlobally,\n sdkLocalStorage,\n sdkSessionStorage,\n }: SetupSessionArgs) => {\n const mxlSpanSessionManager = new MXLSpanSessionManager({\n limitManager,\n storage: sdkLocalStorage,\n sessionStorage: sdkSessionStorage,\n });\n\n if (registerGlobally) {\n session.setGlobalSessionManager(mxlSpanSessionManager);\n }\n\n return mxlSpanSessionManager;\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 mxlSpanProcessor,\n pageManager,\n }: SetupTracesArgs) => {\n const finalSpanProcessors: SpanProcessor[] = [\n ...spanProcessors,\n createSessionSpanProcessor(spanSessionManager),\n new BrowserSpanProcessor(),\n new MXLNetworkSpanProcessor(),\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 (mxlSpanProcessor) {\n finalSpanProcessors.push(mxlSpanProcessor);\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 attributePerEventCountLimit: 20,\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 attributeValueLengthLimit: 1024,\n },\n });\n\n const mxlTraceManager = new MXLTraceManager({\n tracerProvider: registerGlobally ? undefined : tracerProvider,\n });\n\n if (registerGlobally) {\n trace.setGlobalTraceManager(mxlTraceManager);\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, mxlTraceManager };\n};\n\nconst setupLogs = ({\n resource,\n userManager,\n logExporters,\n logProcessors,\n spanSessionManager,\n limitManager,\n attributeScrubbers,\n registerGlobally,\n mxlLogProcessor,\n sdkLocalStorage,\n pageManager,\n }: SetupLogsArgs) => {\n const finalLogProcessors: LogRecordProcessor[] = [\n ...logProcessors,\n new IdentifiableSessionLogRecordProcessor({\n spanSessionManager,\n }),\n new BrowserLogRecordProcessor(),\n new MXLLogRecordProcessor(),\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 (mxlLogProcessor) {\n finalLogProcessors.push(mxlLogProcessor);\n }\n\n const loggerProvider = new LoggerProvider({\n resource,\n processors: finalLogProcessors,\n });\n\n const mxlLogManager = new MXLLogManager({\n spanSessionManager,\n limitManager,\n loggerProvider: registerGlobally ? undefined : loggerProvider,\n storage: sdkLocalStorage,\n });\n\n if (registerGlobally) {\n logs.setGlobalLoggerProvider(loggerProvider);\n log.setGlobalLogManager(mxlLogManager);\n }\n\n return { loggerProvider, mxlLogManager };\n};\n\nconst setupPage = ({\n useDocumentTitleAsPageLabel,\n registerGlobally,\n }: SetupPageArgs) => {\n const mxlPageManager = new MXLPageManager({\n useDocumentTitleAsPageLabel,\n });\n\n if (registerGlobally) {\n page.setGlobalPageManager(mxlPageManager);\n }\n\n return mxlPageManager;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"initSDK.js","names":[],"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 { MXLLogExporter, MXLTraceExporter } from '../exporters/index.ts';\nimport {\n DEFAULT_LIMITS,\n MXLDynamicConfigManager,\n MXLLimitManager,\n MXLLogManager,\n MXLPageManager,\n MXLSDKFeaturesManager,\n MXLSpanSessionManager,\n MXLTraceManager,\n MXLUserManager,\n} from '../managers/index.ts';\nimport {\n BrowserLogRecordProcessor,\n BrowserSpanProcessor,\n IdentifiableSessionLogRecordProcessor,\n LogRecordScrubProcessor,\n MXLLogRecordProcessor,\n MXLNetworkSpanProcessor,\n MXLSessionBatchedSpanProcessor,\n PageLogRecordProcessor,\n PageSpanProcessor,\n SpanScrubProcessor,\n UserLogRecordProcessor,\n UserSpanProcessor,\n} from '../processors/index.ts';\nimport { MXLW3CTraceContextPropagator } from '../propagators/index.ts';\nimport { getWebSDKResource } 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 {\n createSessionRecordingControl,\n noopSessionRecording,\n} from './setupSessionRecorder.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 mxlDataURL,\n mxlConfigURL,\n diagLogger = diag.createComponentLogger({\n namespace: 'mxl-sdk',\n }),\n dynamicSDKConfigManager: providedDynamicSDKConfigManager,\n dynamicSDKConfig,\n registerGlobally = true,\n blockNetworkSpanForwarding = false,\n restrictedProtocols = new Set(['file:']),\n useDocumentTitleAsPageLabel = true,\n recordUserSessions = true,\n sessionRecorder,\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 sendingToMXL = validatedAppID !== undefined;\n\n if (!sendingToMXL && !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 (sendingToMXL && 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 = resource.merge(\n getWebSDKResource({\n diagLogger,\n appVersion: validatedAppVersion,\n pageSessionStorage: sdkSessionStorage,\n }),\n );\n\n const userManager = setupUser({ registerGlobally, sdkLocalStorage });\n const enduserPseudoID = userManager.getMXLUserId();\n if (sendingToMXL && !enduserPseudoID) {\n throw new Error('userID is required when using MXL exporter');\n }\n\n const dynamicConfigManager =\n providedDynamicSDKConfigManager ??\n new MXLDynamicConfigManager({\n appID: validatedAppID,\n appVersion: validatedAppVersion,\n mxlConfigURL,\n defaultConfig: dynamicSDKConfig,\n deviceId: enduserPseudoID,\n storage: sdkLocalStorage,\n });\n void dynamicConfigManager.refreshRemoteConfig();\n\n const sdkFeaturesManager = new MXLSDKFeaturesManager({\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 MXLLimitManager(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 sdkSessionStorage,\n });\n\n let mxlSpanProcessor: MXLSessionBatchedSpanProcessor | undefined;\n let mxlLogProcessor: BatchLogRecordProcessor | undefined;\n if (sendingToMXL) {\n mxlSpanProcessor = new MXLSessionBatchedSpanProcessor({\n resource: resourceWithWebSDKAttributes,\n exporter: new MXLTraceExporter({\n appID: validatedAppID,\n mxlDataURL,\n userID: enduserPseudoID,\n }),\n limitManager,\n storedSpansExpireTimeoutMS:\n defaultInstrumentationConfig?.['session-visibility']\n ?.storedSpansExpireTimeoutMS,\n storage: sdkLocalStorage,\n spanSessionManager,\n });\n\n mxlLogProcessor = new BatchLogRecordProcessor(\n new MXLLogExporter({\n appID: validatedAppID,\n mxlDataURL,\n userID: enduserPseudoID,\n }),\n );\n }\n\n const pageManager = setupPage({\n useDocumentTitleAsPageLabel,\n registerGlobally,\n });\n\n const { tracerProvider, mxlTraceManager } = setupTraces({\n resource: resourceWithWebSDKAttributes,\n spanSessionManager,\n userManager,\n spanExporters,\n spanProcessors,\n propagator: nsfValid ? new MXLW3CTraceContextPropagator() : propagator,\n contextManager,\n attributeScrubbers: finalAttributeScrubbers,\n registerGlobally,\n mxlSpanProcessor,\n pageManager,\n });\n\n spanSessionManager.setTracerProvider(tracerProvider);\n\n const { loggerProvider, mxlLogManager } = setupLogs({\n resource: resourceWithWebSDKAttributes,\n userManager,\n logExporters,\n logProcessors,\n spanSessionManager,\n limitManager,\n attributeScrubbers: finalAttributeScrubbers,\n registerGlobally,\n mxlLogProcessor,\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: mxlLogManager,\n spanSessionManager,\n mxlSpanProcessor,\n pageManager,\n }),\n ...instrumentations,\n ],\n });\n } else {\n registerInstrumentations({\n instrumentations: [\n setupDefaultInstrumentations(defaultInstrumentationConfig, {\n featureManager: sdkFeaturesManager,\n mxlSpanProcessor,\n pageManager,\n }),\n ...instrumentations,\n ],\n });\n }\n\n const windowDisableSessionRec =\n typeof window !== 'undefined' &&\n (window as unknown as { __MXL_DISABLE_SESSION_RECORDER?: boolean })\n .__MXL_DISABLE_SESSION_RECORDER === true;\n\n const sessionRecording =\n sendingToMXL &&\n validatedAppID &&\n enduserPseudoID &&\n !windowDisableSessionRec\n ? createSessionRecordingControl({\n resource: resourceWithWebSDKAttributes,\n spanSessionManager,\n tracerProvider,\n appID: validatedAppID,\n userID: enduserPseudoID,\n mxlDataURL,\n recordUserSessions,\n sessionRecorder,\n })\n : noopSessionRecording;\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: mxlLogManager,\n trace: mxlTraceManager,\n session: spanSessionManager,\n user: userManager,\n page: pageManager,\n sessionRecording,\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 mxlUserManager = new MXLUserManager({\n storage: sdkLocalStorage,\n });\n\n if (registerGlobally) {\n user.setGlobalUserManager(mxlUserManager);\n }\n\n return mxlUserManager;\n};\n\nconst setupSession = ({\n limitManager,\n registerGlobally,\n sdkLocalStorage,\n sdkSessionStorage,\n}: SetupSessionArgs) => {\n const mxlSpanSessionManager = new MXLSpanSessionManager({\n limitManager,\n storage: sdkLocalStorage,\n sessionStorage: sdkSessionStorage,\n });\n\n if (registerGlobally) {\n session.setGlobalSessionManager(mxlSpanSessionManager);\n }\n\n return mxlSpanSessionManager;\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 mxlSpanProcessor,\n pageManager,\n}: SetupTracesArgs) => {\n const finalSpanProcessors: SpanProcessor[] = [\n ...spanProcessors,\n createSessionSpanProcessor(spanSessionManager),\n new BrowserSpanProcessor(),\n new MXLNetworkSpanProcessor(),\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 (mxlSpanProcessor) {\n finalSpanProcessors.push(mxlSpanProcessor);\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 attributePerEventCountLimit: 20,\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 attributeValueLengthLimit: 1024,\n },\n });\n\n const mxlTraceManager = new MXLTraceManager({\n tracerProvider: registerGlobally ? undefined : tracerProvider,\n });\n\n if (registerGlobally) {\n trace.setGlobalTraceManager(mxlTraceManager);\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, mxlTraceManager };\n};\n\nconst setupLogs = ({\n resource,\n userManager,\n logExporters,\n logProcessors,\n spanSessionManager,\n limitManager,\n attributeScrubbers,\n registerGlobally,\n mxlLogProcessor,\n sdkLocalStorage,\n pageManager,\n}: SetupLogsArgs) => {\n const finalLogProcessors: LogRecordProcessor[] = [\n ...logProcessors,\n new IdentifiableSessionLogRecordProcessor({\n spanSessionManager,\n }),\n new BrowserLogRecordProcessor(),\n new MXLLogRecordProcessor(),\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 (mxlLogProcessor) {\n finalLogProcessors.push(mxlLogProcessor);\n }\n\n const loggerProvider = new LoggerProvider({\n resource,\n processors: finalLogProcessors,\n });\n\n const mxlLogManager = new MXLLogManager({\n spanSessionManager,\n limitManager,\n loggerProvider: registerGlobally ? undefined : loggerProvider,\n storage: sdkLocalStorage,\n });\n\n if (registerGlobally) {\n logs.setGlobalLoggerProvider(loggerProvider);\n log.setGlobalLogManager(mxlLogManager);\n }\n\n return { loggerProvider, mxlLogManager };\n};\n\nconst setupPage = ({\n useDocumentTitleAsPageLabel,\n registerGlobally,\n}: SetupPageArgs) => {\n const mxlPageManager = new MXLPageManager({\n useDocumentTitleAsPageLabel,\n });\n\n if (registerGlobally) {\n page.setGlobalPageManager(mxlPageManager);\n }\n\n return mxlPageManager;\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
const require_exporters_utils = require('../exporters/utils.cjs');
|
|
4
|
+
const require_exporters_MXLLogExporter_utils = require('../exporters/MXLLogExporter/utils.cjs');
|
|
5
|
+
let _safaricom_mxl_session_recorder = require("@safaricom-mxl/session-recorder");
|
|
6
|
+
|
|
7
|
+
//#region src/sdk/setupSessionRecorder.ts
|
|
8
|
+
const noopSessionRecording = {
|
|
9
|
+
isRecording: () => false,
|
|
10
|
+
setEnabled: () => {}
|
|
11
|
+
};
|
|
12
|
+
function buildInitConfig({ resource, spanSessionManager, tracerProvider, appID, userID, mxlDataURL, sessionRecorder: userOptions }) {
|
|
13
|
+
return {
|
|
14
|
+
resource,
|
|
15
|
+
getSessionId: () => spanSessionManager.getSessionId(),
|
|
16
|
+
tracer: tracerProvider.getTracer("mxl.session-recorder", _safaricom_mxl_session_recorder.VERSION),
|
|
17
|
+
url: require_exporters_MXLLogExporter_utils.getLogEndpoint(appID, mxlDataURL),
|
|
18
|
+
headers: require_exporters_utils.getMXLHeaders(appID, userID),
|
|
19
|
+
...userOptions
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function createSessionRecordingControl(args) {
|
|
23
|
+
const initConfig = () => buildInitConfig(args);
|
|
24
|
+
if (args.recordUserSessions) {
|
|
25
|
+
_safaricom_mxl_session_recorder.SessionRecorder.init(initConfig());
|
|
26
|
+
return {
|
|
27
|
+
isRecording: () => _safaricom_mxl_session_recorder.SessionRecorder.isRecording(),
|
|
28
|
+
setEnabled: (enabled) => {
|
|
29
|
+
_safaricom_mxl_session_recorder.SessionRecorder.setEnabled(enabled);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
isRecording: () => _safaricom_mxl_session_recorder.SessionRecorder.isRecording(),
|
|
35
|
+
setEnabled: (enabled) => {
|
|
36
|
+
if (enabled) if (!_safaricom_mxl_session_recorder.SessionRecorder.inited) _safaricom_mxl_session_recorder.SessionRecorder.init(initConfig());
|
|
37
|
+
else _safaricom_mxl_session_recorder.SessionRecorder.resume();
|
|
38
|
+
else if (_safaricom_mxl_session_recorder.SessionRecorder.inited) _safaricom_mxl_session_recorder.SessionRecorder.stop();
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
//#endregion
|
|
44
|
+
exports.createSessionRecordingControl = createSessionRecordingControl;
|
|
45
|
+
exports.noopSessionRecording = noopSessionRecording;
|
|
46
|
+
//# sourceMappingURL=setupSessionRecorder.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setupSessionRecorder.cjs","names":["SESSION_RECORDER_VERSION","getLogEndpoint","getMXLHeaders","SessionRecorder"],"sources":["../../src/sdk/setupSessionRecorder.ts"],"sourcesContent":["import type { Resource } from '@opentelemetry/resources';\nimport type { WebTracerProvider } from '@opentelemetry/sdk-trace-web';\nimport type { SessionRecorderConfig } from '@safaricom-mxl/session-recorder';\nimport {\n VERSION as SESSION_RECORDER_VERSION,\n SessionRecorder,\n} from '@safaricom-mxl/session-recorder';\nimport { getLogEndpoint } from '../exporters/MXLLogExporter/utils.ts';\nimport { getMXLHeaders } from '../exporters/utils.ts';\nimport type {\n SessionRecorderUserConfig,\n SessionRecordingControl,\n} from './types.ts';\n\nexport const noopSessionRecording: SessionRecordingControl = {\n isRecording: () => false,\n setEnabled: () => {\n // Session recording is only available when using MXL (appID + user ID).\n },\n};\n\nfunction buildInitConfig({\n resource,\n spanSessionManager,\n tracerProvider,\n appID,\n userID,\n mxlDataURL,\n sessionRecorder: userOptions,\n}: {\n resource: Resource;\n spanSessionManager: { getSessionId: () => string | null };\n tracerProvider: WebTracerProvider;\n appID: string;\n userID: string;\n mxlDataURL?: string;\n sessionRecorder?: SessionRecorderUserConfig;\n}): SessionRecorderConfig {\n const tracer = tracerProvider.getTracer(\n 'mxl.session-recorder',\n SESSION_RECORDER_VERSION,\n );\n return {\n resource,\n getSessionId: () => spanSessionManager.getSessionId(),\n tracer,\n url: getLogEndpoint(appID, mxlDataURL),\n headers: getMXLHeaders(appID, userID),\n ...userOptions,\n } as SessionRecorderConfig;\n}\n\nexport function createSessionRecordingControl(args: {\n resource: Resource;\n spanSessionManager: { getSessionId: () => string | null };\n tracerProvider: WebTracerProvider;\n appID: string;\n userID: string;\n mxlDataURL?: string;\n recordUserSessions: boolean;\n sessionRecorder?: SessionRecorderUserConfig;\n}): SessionRecordingControl {\n const initConfig = () => buildInitConfig(args);\n\n if (args.recordUserSessions) {\n SessionRecorder.init(initConfig());\n return {\n isRecording: () => SessionRecorder.isRecording(),\n setEnabled: (enabled: boolean) => {\n SessionRecorder.setEnabled(enabled);\n },\n };\n }\n\n // Defer rrweb + OTLP until the app calls setEnabled(true) (lazy start).\n return {\n isRecording: () => SessionRecorder.isRecording(),\n setEnabled: (enabled: boolean) => {\n if (enabled) {\n if (!SessionRecorder.inited) {\n SessionRecorder.init(initConfig());\n } else {\n SessionRecorder.resume();\n }\n } else if (SessionRecorder.inited) {\n SessionRecorder.stop();\n }\n },\n };\n}\n"],"mappings":";;;;;;;AAcA,MAAa,uBAAgD;CAC3D,mBAAmB;CACnB,kBAAkB;CAGnB;AAED,SAAS,gBAAgB,EACvB,UACA,oBACA,gBACA,OACA,QACA,YACA,iBAAiB,eASO;AAKxB,QAAO;EACL;EACA,oBAAoB,mBAAmB,cAAc;EACrD,QAPa,eAAe,UAC5B,wBACAA,wCACD;EAKC,KAAKC,sDAAe,OAAO,WAAW;EACtC,SAASC,sCAAc,OAAO,OAAO;EACrC,GAAG;EACJ;;AAGH,SAAgB,8BAA8B,MASlB;CAC1B,MAAM,mBAAmB,gBAAgB,KAAK;AAE9C,KAAI,KAAK,oBAAoB;AAC3B,kDAAgB,KAAK,YAAY,CAAC;AAClC,SAAO;GACL,mBAAmBC,gDAAgB,aAAa;GAChD,aAAa,YAAqB;AAChC,oDAAgB,WAAW,QAAQ;;GAEtC;;AAIH,QAAO;EACL,mBAAmBA,gDAAgB,aAAa;EAChD,aAAa,YAAqB;AAChC,OAAI,QACF,KAAI,CAACA,gDAAgB,OACnB,iDAAgB,KAAK,YAAY,CAAC;OAElC,iDAAgB,QAAQ;YAEjBA,gDAAgB,OACzB,iDAAgB,MAAM;;EAG3B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SessionRecorderUserConfig, SessionRecordingControl } from "./types.cjs";
|
|
2
|
+
import { WebTracerProvider } from "@opentelemetry/sdk-trace-web";
|
|
3
|
+
import { Resource } from "@opentelemetry/resources";
|
|
4
|
+
|
|
5
|
+
//#region src/sdk/setupSessionRecorder.d.ts
|
|
6
|
+
declare const noopSessionRecording: SessionRecordingControl;
|
|
7
|
+
declare function createSessionRecordingControl(args: {
|
|
8
|
+
resource: Resource;
|
|
9
|
+
spanSessionManager: {
|
|
10
|
+
getSessionId: () => string | null;
|
|
11
|
+
};
|
|
12
|
+
tracerProvider: WebTracerProvider;
|
|
13
|
+
appID: string;
|
|
14
|
+
userID: string;
|
|
15
|
+
mxlDataURL?: string;
|
|
16
|
+
recordUserSessions: boolean;
|
|
17
|
+
sessionRecorder?: SessionRecorderUserConfig;
|
|
18
|
+
}): SessionRecordingControl;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { createSessionRecordingControl, noopSessionRecording };
|
|
21
|
+
//# sourceMappingURL=setupSessionRecorder.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setupSessionRecorder.d.cts","names":[],"sources":["../../src/sdk/setupSessionRecorder.ts"],"mappings":";;;;;cAca,oBAAA,EAAsB,uBAAA;AAAA,iBAsCnB,6BAAA,CAA8B,IAAA;EAC5C,QAAA,EAAU,QAAA;EACV,kBAAA;IAAsB,YAAA;EAAA;EACtB,cAAA,EAAgB,iBAAA;EAChB,KAAA;EACA,MAAA;EACA,UAAA;EACA,kBAAA;EACA,eAAA,GAAkB,yBAAA;AAAA,IAChB,uBAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SessionRecorderUserConfig, SessionRecordingControl } from "./types.js";
|
|
2
|
+
import { Resource } from "@opentelemetry/resources";
|
|
3
|
+
import { WebTracerProvider } from "@opentelemetry/sdk-trace-web";
|
|
4
|
+
|
|
5
|
+
//#region src/sdk/setupSessionRecorder.d.ts
|
|
6
|
+
declare const noopSessionRecording: SessionRecordingControl;
|
|
7
|
+
declare function createSessionRecordingControl(args: {
|
|
8
|
+
resource: Resource;
|
|
9
|
+
spanSessionManager: {
|
|
10
|
+
getSessionId: () => string | null;
|
|
11
|
+
};
|
|
12
|
+
tracerProvider: WebTracerProvider;
|
|
13
|
+
appID: string;
|
|
14
|
+
userID: string;
|
|
15
|
+
mxlDataURL?: string;
|
|
16
|
+
recordUserSessions: boolean;
|
|
17
|
+
sessionRecorder?: SessionRecorderUserConfig;
|
|
18
|
+
}): SessionRecordingControl;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { createSessionRecordingControl, noopSessionRecording };
|
|
21
|
+
//# sourceMappingURL=setupSessionRecorder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setupSessionRecorder.d.ts","names":[],"sources":["../../src/sdk/setupSessionRecorder.ts"],"mappings":";;;;;cAca,oBAAA,EAAsB,uBAAA;AAAA,iBAsCnB,6BAAA,CAA8B,IAAA;EAC5C,QAAA,EAAU,QAAA;EACV,kBAAA;IAAsB,YAAA;EAAA;EACtB,cAAA,EAAgB,iBAAA;EAChB,KAAA;EACA,MAAA;EACA,UAAA;EACA,kBAAA;EACA,eAAA,GAAkB,yBAAA;AAAA,IAChB,uBAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { getMXLHeaders } from "../exporters/utils.js";
|
|
2
|
+
import { getLogEndpoint } from "../exporters/MXLLogExporter/utils.js";
|
|
3
|
+
import { SessionRecorder, VERSION } from "@safaricom-mxl/session-recorder";
|
|
4
|
+
|
|
5
|
+
//#region src/sdk/setupSessionRecorder.ts
|
|
6
|
+
const noopSessionRecording = {
|
|
7
|
+
isRecording: () => false,
|
|
8
|
+
setEnabled: () => {}
|
|
9
|
+
};
|
|
10
|
+
function buildInitConfig({ resource, spanSessionManager, tracerProvider, appID, userID, mxlDataURL, sessionRecorder: userOptions }) {
|
|
11
|
+
return {
|
|
12
|
+
resource,
|
|
13
|
+
getSessionId: () => spanSessionManager.getSessionId(),
|
|
14
|
+
tracer: tracerProvider.getTracer("mxl.session-recorder", VERSION),
|
|
15
|
+
url: getLogEndpoint(appID, mxlDataURL),
|
|
16
|
+
headers: getMXLHeaders(appID, userID),
|
|
17
|
+
...userOptions
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function createSessionRecordingControl(args) {
|
|
21
|
+
const initConfig = () => buildInitConfig(args);
|
|
22
|
+
if (args.recordUserSessions) {
|
|
23
|
+
SessionRecorder.init(initConfig());
|
|
24
|
+
return {
|
|
25
|
+
isRecording: () => SessionRecorder.isRecording(),
|
|
26
|
+
setEnabled: (enabled) => {
|
|
27
|
+
SessionRecorder.setEnabled(enabled);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
isRecording: () => SessionRecorder.isRecording(),
|
|
33
|
+
setEnabled: (enabled) => {
|
|
34
|
+
if (enabled) if (!SessionRecorder.inited) SessionRecorder.init(initConfig());
|
|
35
|
+
else SessionRecorder.resume();
|
|
36
|
+
else if (SessionRecorder.inited) SessionRecorder.stop();
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
//#endregion
|
|
42
|
+
export { createSessionRecordingControl, noopSessionRecording };
|
|
43
|
+
//# sourceMappingURL=setupSessionRecorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setupSessionRecorder.js","names":["SESSION_RECORDER_VERSION"],"sources":["../../src/sdk/setupSessionRecorder.ts"],"sourcesContent":["import type { Resource } from '@opentelemetry/resources';\nimport type { WebTracerProvider } from '@opentelemetry/sdk-trace-web';\nimport type { SessionRecorderConfig } from '@safaricom-mxl/session-recorder';\nimport {\n VERSION as SESSION_RECORDER_VERSION,\n SessionRecorder,\n} from '@safaricom-mxl/session-recorder';\nimport { getLogEndpoint } from '../exporters/MXLLogExporter/utils.ts';\nimport { getMXLHeaders } from '../exporters/utils.ts';\nimport type {\n SessionRecorderUserConfig,\n SessionRecordingControl,\n} from './types.ts';\n\nexport const noopSessionRecording: SessionRecordingControl = {\n isRecording: () => false,\n setEnabled: () => {\n // Session recording is only available when using MXL (appID + user ID).\n },\n};\n\nfunction buildInitConfig({\n resource,\n spanSessionManager,\n tracerProvider,\n appID,\n userID,\n mxlDataURL,\n sessionRecorder: userOptions,\n}: {\n resource: Resource;\n spanSessionManager: { getSessionId: () => string | null };\n tracerProvider: WebTracerProvider;\n appID: string;\n userID: string;\n mxlDataURL?: string;\n sessionRecorder?: SessionRecorderUserConfig;\n}): SessionRecorderConfig {\n const tracer = tracerProvider.getTracer(\n 'mxl.session-recorder',\n SESSION_RECORDER_VERSION,\n );\n return {\n resource,\n getSessionId: () => spanSessionManager.getSessionId(),\n tracer,\n url: getLogEndpoint(appID, mxlDataURL),\n headers: getMXLHeaders(appID, userID),\n ...userOptions,\n } as SessionRecorderConfig;\n}\n\nexport function createSessionRecordingControl(args: {\n resource: Resource;\n spanSessionManager: { getSessionId: () => string | null };\n tracerProvider: WebTracerProvider;\n appID: string;\n userID: string;\n mxlDataURL?: string;\n recordUserSessions: boolean;\n sessionRecorder?: SessionRecorderUserConfig;\n}): SessionRecordingControl {\n const initConfig = () => buildInitConfig(args);\n\n if (args.recordUserSessions) {\n SessionRecorder.init(initConfig());\n return {\n isRecording: () => SessionRecorder.isRecording(),\n setEnabled: (enabled: boolean) => {\n SessionRecorder.setEnabled(enabled);\n },\n };\n }\n\n // Defer rrweb + OTLP until the app calls setEnabled(true) (lazy start).\n return {\n isRecording: () => SessionRecorder.isRecording(),\n setEnabled: (enabled: boolean) => {\n if (enabled) {\n if (!SessionRecorder.inited) {\n SessionRecorder.init(initConfig());\n } else {\n SessionRecorder.resume();\n }\n } else if (SessionRecorder.inited) {\n SessionRecorder.stop();\n }\n },\n };\n}\n"],"mappings":";;;;;AAcA,MAAa,uBAAgD;CAC3D,mBAAmB;CACnB,kBAAkB;CAGnB;AAED,SAAS,gBAAgB,EACvB,UACA,oBACA,gBACA,OACA,QACA,YACA,iBAAiB,eASO;AAKxB,QAAO;EACL;EACA,oBAAoB,mBAAmB,cAAc;EACrD,QAPa,eAAe,UAC5B,wBACAA,QACD;EAKC,KAAK,eAAe,OAAO,WAAW;EACtC,SAAS,cAAc,OAAO,OAAO;EACrC,GAAG;EACJ;;AAGH,SAAgB,8BAA8B,MASlB;CAC1B,MAAM,mBAAmB,gBAAgB,KAAK;AAE9C,KAAI,KAAK,oBAAoB;AAC3B,kBAAgB,KAAK,YAAY,CAAC;AAClC,SAAO;GACL,mBAAmB,gBAAgB,aAAa;GAChD,aAAa,YAAqB;AAChC,oBAAgB,WAAW,QAAQ;;GAEtC;;AAIH,QAAO;EACL,mBAAmB,gBAAgB,aAAa;EAChD,aAAa,YAAqB;AAChC,OAAI,QACF,KAAI,CAAC,gBAAgB,OACnB,iBAAgB,KAAK,YAAY,CAAC;OAElC,iBAAgB,QAAQ;YAEjB,gBAAgB,OACzB,iBAAgB,MAAM;;EAG3B"}
|
package/dist/sdk/types.d.cts
CHANGED
|
@@ -24,8 +24,14 @@ import { SpanExporter, SpanProcessor } from "@opentelemetry/sdk-trace-web";
|
|
|
24
24
|
import { Instrumentation } from "@opentelemetry/instrumentation";
|
|
25
25
|
import { Resource } from "@opentelemetry/resources";
|
|
26
26
|
import { BatchLogRecordProcessor, LogRecordExporter, LogRecordProcessor } from "@opentelemetry/sdk-logs";
|
|
27
|
+
import { SessionRecorderConfig } from "@safaricom-mxl/session-recorder";
|
|
27
28
|
|
|
28
29
|
//#region src/sdk/types.d.ts
|
|
30
|
+
type SessionRecorderUserConfig = Omit<SessionRecorderConfig, 'resource' | 'getSessionId' | 'tracer' | 'url' | 'headers' | 'apiKey'>;
|
|
31
|
+
interface SessionRecordingControl {
|
|
32
|
+
isRecording: () => boolean;
|
|
33
|
+
setEnabled: (enabled: boolean) => void;
|
|
34
|
+
}
|
|
29
35
|
interface DynamicSDKConfig {
|
|
30
36
|
/**
|
|
31
37
|
* Pct of users that are sampled. 100% means all users are sampled.
|
|
@@ -194,6 +200,17 @@ type BaseSDKInitConfig = {
|
|
|
194
200
|
* **default**: true
|
|
195
201
|
*/
|
|
196
202
|
useDocumentTitleAsPageLabel?: boolean;
|
|
203
|
+
/**
|
|
204
|
+
* When `true` (default) and the SDK sends data to MXL, start rrweb session recording to the same OTLP log ingest URL.
|
|
205
|
+
* Set to `false` to begin with recording disabled; use `sessionRecording.setEnabled(true)` to enable after init.
|
|
206
|
+
*
|
|
207
|
+
* **default**: true
|
|
208
|
+
*/
|
|
209
|
+
recordUserSessions?: boolean;
|
|
210
|
+
/**
|
|
211
|
+
* Optional rrweb / recorder options (e.g. `debug: true` for extra logging). Ignored when not sending to MXL.
|
|
212
|
+
*/
|
|
213
|
+
sessionRecorder?: SessionRecorderUserConfig;
|
|
197
214
|
};
|
|
198
215
|
type MXLExportSDKInitConfig = {
|
|
199
216
|
/**
|
|
@@ -238,6 +255,10 @@ interface SDKControl {
|
|
|
238
255
|
session: SpanSessionManager;
|
|
239
256
|
user: UserManager;
|
|
240
257
|
page: PageManager;
|
|
258
|
+
/**
|
|
259
|
+
* rrweb session recording to MXL logs. When the SDK is not configured for MXL export, methods are no-ops.
|
|
260
|
+
*/
|
|
261
|
+
sessionRecording: SessionRecordingControl;
|
|
241
262
|
}
|
|
242
263
|
interface SetupUserArgs {
|
|
243
264
|
registerGlobally?: boolean;
|
|
@@ -312,5 +333,5 @@ interface SDKRegistryManager {
|
|
|
312
333
|
registered: () => SDKControl | null;
|
|
313
334
|
}
|
|
314
335
|
//#endregion
|
|
315
|
-
export { DefaultInstrumentationConfig, DynamicConfigManager, DynamicSDKConfig, SDKControl, SDKInitConfig, SDKRegistryManager, SetupDefaultInstrumentationsArgs, SetupLogsArgs, SetupPageArgs, SetupSessionArgs, SetupTracesArgs, SetupUserArgs };
|
|
336
|
+
export { DefaultInstrumentationConfig, DynamicConfigManager, DynamicSDKConfig, SDKControl, SDKInitConfig, SDKRegistryManager, SessionRecorderUserConfig, SessionRecordingControl, SetupDefaultInstrumentationsArgs, SetupLogsArgs, SetupPageArgs, SetupSessionArgs, SetupTracesArgs, SetupUserArgs };
|
|
316
337
|
//# sourceMappingURL=types.d.cts.map
|
package/dist/sdk/types.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.cts","names":[],"sources":["../../src/sdk/types.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.cts","names":[],"sources":["../../src/sdk/types.ts"],"mappings":"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"}
|
package/dist/sdk/types.d.ts
CHANGED
|
@@ -30,8 +30,14 @@ import { Resource } from "@opentelemetry/resources";
|
|
|
30
30
|
import { SpanExporter, SpanProcessor } from "@opentelemetry/sdk-trace-web";
|
|
31
31
|
import { Instrumentation } from "@opentelemetry/instrumentation";
|
|
32
32
|
import { BatchLogRecordProcessor, LogRecordExporter, LogRecordProcessor } from "@opentelemetry/sdk-logs";
|
|
33
|
+
import { SessionRecorderConfig } from "@safaricom-mxl/session-recorder";
|
|
33
34
|
|
|
34
35
|
//#region src/sdk/types.d.ts
|
|
36
|
+
type SessionRecorderUserConfig = Omit<SessionRecorderConfig, 'resource' | 'getSessionId' | 'tracer' | 'url' | 'headers' | 'apiKey'>;
|
|
37
|
+
interface SessionRecordingControl {
|
|
38
|
+
isRecording: () => boolean;
|
|
39
|
+
setEnabled: (enabled: boolean) => void;
|
|
40
|
+
}
|
|
35
41
|
interface DynamicSDKConfig {
|
|
36
42
|
/**
|
|
37
43
|
* Pct of users that are sampled. 100% means all users are sampled.
|
|
@@ -200,6 +206,17 @@ type BaseSDKInitConfig = {
|
|
|
200
206
|
* **default**: true
|
|
201
207
|
*/
|
|
202
208
|
useDocumentTitleAsPageLabel?: boolean;
|
|
209
|
+
/**
|
|
210
|
+
* When `true` (default) and the SDK sends data to MXL, start rrweb session recording to the same OTLP log ingest URL.
|
|
211
|
+
* Set to `false` to begin with recording disabled; use `sessionRecording.setEnabled(true)` to enable after init.
|
|
212
|
+
*
|
|
213
|
+
* **default**: true
|
|
214
|
+
*/
|
|
215
|
+
recordUserSessions?: boolean;
|
|
216
|
+
/**
|
|
217
|
+
* Optional rrweb / recorder options (e.g. `debug: true` for extra logging). Ignored when not sending to MXL.
|
|
218
|
+
*/
|
|
219
|
+
sessionRecorder?: SessionRecorderUserConfig;
|
|
203
220
|
};
|
|
204
221
|
type MXLExportSDKInitConfig = {
|
|
205
222
|
/**
|
|
@@ -244,6 +261,10 @@ interface SDKControl {
|
|
|
244
261
|
session: SpanSessionManager;
|
|
245
262
|
user: UserManager;
|
|
246
263
|
page: PageManager;
|
|
264
|
+
/**
|
|
265
|
+
* rrweb session recording to MXL logs. When the SDK is not configured for MXL export, methods are no-ops.
|
|
266
|
+
*/
|
|
267
|
+
sessionRecording: SessionRecordingControl;
|
|
247
268
|
}
|
|
248
269
|
interface SetupUserArgs {
|
|
249
270
|
registerGlobally?: boolean;
|
|
@@ -318,5 +339,5 @@ interface SDKRegistryManager {
|
|
|
318
339
|
registered: () => SDKControl | null;
|
|
319
340
|
}
|
|
320
341
|
//#endregion
|
|
321
|
-
export { DefaultInstrumentationConfig, DynamicConfigManager, DynamicSDKConfig, SDKControl, SDKInitConfig, SDKRegistryManager, SetupDefaultInstrumentationsArgs, SetupLogsArgs, SetupPageArgs, SetupSessionArgs, SetupTracesArgs, SetupUserArgs };
|
|
342
|
+
export { DefaultInstrumentationConfig, DynamicConfigManager, DynamicSDKConfig, SDKControl, SDKInitConfig, SDKRegistryManager, SessionRecorderUserConfig, SessionRecordingControl, SetupDefaultInstrumentationsArgs, SetupLogsArgs, SetupPageArgs, SetupSessionArgs, SetupTracesArgs, SetupUserArgs };
|
|
322
343
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/sdk/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../../src/sdk/types.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../src/sdk/types.ts"],"mappings":"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"}
|