import { LogLevel, type SessionRecorderConfigs, type SessionRecorderOptions, } from '../types' import { BASE_CONFIG } from './defaults' import { getMaskingConfig } from './masking' import { isValidString, isValidNumber, isValidBoolean, isValidArray, } from './validators' import { getWidgetConfig } from './widget' const getLoggerConfig = (config: any) => { if (!config || typeof config !== 'object') { return BASE_CONFIG.logger } return { level: isValidNumber(config.level, LogLevel.INFO), enabled: isValidBoolean(config.enabled, false), } } export const getSessionRecorderConfig = ( c: SessionRecorderOptions, ): SessionRecorderConfigs => { if (!c) { return BASE_CONFIG } return { apiKey: isValidString(c.apiKey, BASE_CONFIG.apiKey), version: isValidString(c.version, BASE_CONFIG.version), application: isValidString(c.application, BASE_CONFIG.application), environment: isValidString(c.environment, BASE_CONFIG.environment), exporterEndpoint: isValidString( c.exporterEndpoint, BASE_CONFIG.exporterEndpoint, ), apiBaseUrl: isValidString(c.apiBaseUrl, BASE_CONFIG.apiBaseUrl), showContinuousRecording: isValidBoolean( c.showContinuousRecording, BASE_CONFIG.showContinuousRecording, ), ignoreUrls: isValidArray(c.ignoreUrls, BASE_CONFIG.ignoreUrls), sampleTraceRatio: isValidNumber( c.sampleTraceRatio, BASE_CONFIG.sampleTraceRatio, ), propagateTraceHeaderCorsUrls: c.propagateTraceHeaderCorsUrls || BASE_CONFIG.propagateTraceHeaderCorsUrls, schemifyDocSpanPayload: isValidBoolean( c.schemifyDocSpanPayload, BASE_CONFIG.schemifyDocSpanPayload, ), maxCapturingHttpPayloadSize: isValidNumber( c.maxCapturingHttpPayloadSize, BASE_CONFIG.maxCapturingHttpPayloadSize, ), captureBody: isValidBoolean(c.captureBody, BASE_CONFIG.captureBody), captureHeaders: isValidBoolean( c.captureHeaders, BASE_CONFIG.captureHeaders, ), recordScreen: isValidBoolean(c.recordScreen, BASE_CONFIG.recordScreen), recordGestures: isValidBoolean( c.recordGestures, BASE_CONFIG.recordGestures, ), recordNavigation: isValidBoolean( c.recordNavigation, BASE_CONFIG.recordNavigation, ), masking: getMaskingConfig(c.masking), widget: getWidgetConfig(c.widget), logger: getLoggerConfig(c.logger), useWebsocket: isValidBoolean(c.useWebsocket, BASE_CONFIG.useWebsocket), buffering: { enabled: isValidBoolean( c.buffering?.enabled, BASE_CONFIG.buffering.enabled, ), windowMinutes: isValidNumber( c.buffering?.windowMinutes, BASE_CONFIG.buffering.windowMinutes, ), snapshotIntervalMs: isValidNumber( c.buffering?.snapshotIntervalMs, BASE_CONFIG.buffering.snapshotIntervalMs, ), }, } }