@amplitude/session-replay-browser 1.22.7-prereleasenetworkcapture.0 → 1.22.11
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/lib/cjs/config/joined-config.d.ts +2 -2
- package/lib/cjs/config/joined-config.d.ts.map +1 -1
- package/lib/cjs/config/joined-config.js +10 -2
- package/lib/cjs/config/joined-config.js.map +1 -1
- package/lib/cjs/config/types.d.ts +22 -1
- package/lib/cjs/config/types.d.ts.map +1 -1
- package/lib/cjs/config/types.js.map +1 -1
- package/lib/cjs/constants.d.ts +2 -1
- package/lib/cjs/constants.d.ts.map +1 -1
- package/lib/cjs/constants.js +1 -0
- package/lib/cjs/constants.js.map +1 -1
- package/lib/cjs/helpers.d.ts +7 -1
- package/lib/cjs/helpers.d.ts.map +1 -1
- package/lib/cjs/helpers.js +2 -2
- package/lib/cjs/helpers.js.map +1 -1
- package/lib/cjs/session-replay.d.ts +4 -1
- package/lib/cjs/session-replay.d.ts.map +1 -1
- package/lib/cjs/session-replay.js +59 -30
- package/lib/cjs/session-replay.js.map +1 -1
- package/lib/cjs/utils/get-input-type.d.ts +9 -0
- package/lib/cjs/utils/get-input-type.d.ts.map +1 -0
- package/lib/cjs/utils/get-input-type.js +25 -0
- package/lib/cjs/utils/get-input-type.js.map +1 -0
- package/lib/cjs/version.d.ts +1 -1
- package/lib/cjs/version.d.ts.map +1 -1
- package/lib/cjs/version.js +1 -1
- package/lib/cjs/version.js.map +1 -1
- package/lib/esm/config/types.d.ts +1 -1
- package/lib/esm/config/types.d.ts.map +1 -1
- package/lib/esm/config/types.js.map +1 -1
- package/lib/esm/helpers.d.ts +7 -1
- package/lib/esm/helpers.d.ts.map +1 -1
- package/lib/esm/helpers.js +1 -1
- package/lib/esm/helpers.js.map +1 -1
- package/lib/esm/session-replay.d.ts +1 -0
- package/lib/esm/session-replay.d.ts.map +1 -1
- package/lib/esm/session-replay.js +32 -23
- package/lib/esm/session-replay.js.map +1 -1
- package/lib/esm/utils/get-input-type.d.ts +9 -0
- package/lib/esm/utils/get-input-type.d.ts.map +1 -0
- package/lib/esm/utils/get-input-type.js +20 -0
- package/lib/esm/utils/get-input-type.js.map +1 -0
- package/lib/esm/version.d.ts +1 -1
- package/lib/esm/version.d.ts.map +1 -1
- package/lib/esm/version.js +1 -1
- package/lib/esm/version.js.map +1 -1
- package/lib/scripts/console-plugin-min.js.gz +0 -0
- package/lib/scripts/session-replay-browser-esm.js +1 -1
- package/lib/scripts/session-replay-browser-esm.js.gz +0 -0
- package/lib/scripts/session-replay-browser-esm.js.map +1 -1
- package/lib/scripts/session-replay-browser-min.js +1 -1
- package/lib/scripts/session-replay-browser-min.js.gz +0 -0
- package/lib/scripts/session-replay-browser-min.js.map +1 -1
- package/package.json +3 -4
- package/lib/scripts/amplitude-min.js +0 -2
- package/lib/scripts/amplitude-min.js.gz +0 -0
- package/lib/scripts/amplitude-min.js.map +0 -1
- package/lib/scripts/amplitude-min.umd.js +0 -1
- package/lib/scripts/amplitude-min.umd.js.gz +0 -0
- package/lib/scripts/beacon-transport.d.ts +0 -28
- package/lib/scripts/beacon-transport.d.ts.map +0 -1
- package/lib/scripts/config/joined-config.d.ts +0 -13
- package/lib/scripts/config/joined-config.d.ts.map +0 -1
- package/lib/scripts/config/local-config.d.ts +0 -27
- package/lib/scripts/config/local-config.d.ts.map +0 -1
- package/lib/scripts/config/types.d.ts +0 -147
- package/lib/scripts/config/types.d.ts.map +0 -1
- package/lib/scripts/constants.d.ts +0 -29
- package/lib/scripts/constants.d.ts.map +0 -1
- package/lib/scripts/events/base-events-store.d.ts +0 -31
- package/lib/scripts/events/base-events-store.d.ts.map +0 -1
- package/lib/scripts/events/event-compressor.d.ts +0 -27
- package/lib/scripts/events/event-compressor.d.ts.map +0 -1
- package/lib/scripts/events/events-idb-store.d.ts +0 -52
- package/lib/scripts/events/events-idb-store.d.ts.map +0 -1
- package/lib/scripts/events/events-manager.d.ts +0 -13
- package/lib/scripts/events/events-manager.d.ts.map +0 -1
- package/lib/scripts/events/events-memory-store.d.ts +0 -15
- package/lib/scripts/events/events-memory-store.d.ts.map +0 -1
- package/lib/scripts/events/legacy-idb-types.d.ts +0 -26
- package/lib/scripts/events/legacy-idb-types.d.ts.map +0 -1
- package/lib/scripts/events/multi-manager.d.ts +0 -26
- package/lib/scripts/events/multi-manager.d.ts.map +0 -1
- package/lib/scripts/helpers.d.ts +0 -46
- package/lib/scripts/helpers.d.ts.map +0 -1
- package/lib/scripts/hooks/click.d.ts +0 -27
- package/lib/scripts/hooks/click.d.ts.map +0 -1
- package/lib/scripts/hooks/scroll.d.ts +0 -44
- package/lib/scripts/hooks/scroll.d.ts.map +0 -1
- package/lib/scripts/identifiers.d.ts +0 -11
- package/lib/scripts/identifiers.d.ts.map +0 -1
- package/lib/scripts/index.d.ts +0 -7
- package/lib/scripts/index.d.ts.map +0 -1
- package/lib/scripts/libs/finder.d.ts +0 -14
- package/lib/scripts/libs/finder.d.ts.map +0 -1
- package/lib/scripts/logger.d.ts +0 -13
- package/lib/scripts/logger.d.ts.map +0 -1
- package/lib/scripts/messages.d.ts +0 -7
- package/lib/scripts/messages.d.ts.map +0 -1
- package/lib/scripts/observers.d.ts +0 -24
- package/lib/scripts/observers.d.ts.map +0 -1
- package/lib/scripts/session-replay-factory.d.ts +0 -7
- package/lib/scripts/session-replay-factory.d.ts.map +0 -1
- package/lib/scripts/session-replay.d.ts +0 -56
- package/lib/scripts/session-replay.d.ts.map +0 -1
- package/lib/scripts/track-destination.d.ts +0 -37
- package/lib/scripts/track-destination.d.ts.map +0 -1
- package/lib/scripts/typings/session-replay.d.ts +0 -129
- package/lib/scripts/typings/session-replay.d.ts.map +0 -1
- package/lib/scripts/version.d.ts +0 -2
- package/lib/scripts/version.d.ts.map +0 -1
- package/lib/scripts/worker/compression.d.ts +0 -2
- package/lib/scripts/worker/compression.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-replay.js","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Logger,\n returnWrapper,\n getAnalyticsConnector,\n getGlobalScope,\n ILogger,\n LogLevel,\n} from '@amplitude/analytics-core';\nimport { record } from '@amplitude/rrweb';\nimport { scrollCallback } from '@amplitude/rrweb-types';\nimport { createSessionReplayJoinedConfigGenerator } from './config/joined-config';\nimport {\n LoggingConfig,\n SessionReplayJoinedConfig,\n SessionReplayJoinedConfigGenerator,\n SessionReplayMetadata,\n SessionReplayLocalConfig,\n SessionReplayRemoteConfig,\n} from './config/types';\nimport {\n BLOCK_CLASS,\n CustomRRwebEvent,\n DEFAULT_SESSION_REPLAY_PROPERTY,\n INTERACTION_MAX_INTERVAL,\n INTERACTION_MIN_INTERVAL,\n MASK_TEXT_CLASS,\n SESSION_REPLAY_DEBUG_PROPERTY,\n} from './constants';\nimport { createEventsManager } from './events/events-manager';\nimport { MultiEventManager } from './events/multi-manager';\nimport { generateHashCode, getDebugConfig, getStorageSize, isSessionInSample, maskFn } from './helpers';\nimport { clickBatcher, clickHook, clickNonBatcher } from './hooks/click';\nimport { ScrollWatcher } from './hooks/scroll';\nimport { SessionIdentifiers } from './identifiers';\nimport {\n AmplitudeSessionReplay,\n SessionReplayEventsManager as AmplitudeSessionReplayEventsManager,\n DebugInfo,\n EventType,\n EventsManagerWithType,\n SessionIdentifiers as ISessionIdentifiers,\n SessionReplayOptions,\n} from './typings/session-replay';\nimport { VERSION } from './version';\nimport { EventCompressor } from './events/event-compressor';\nimport { SafeLoggerProvider } from './logger';\nimport { NetworkObservers, NetworkRequestEvent } from './observers';\n\ntype PageLeaveFn = (e: PageTransitionEvent | Event) => void;\n\nexport class SessionReplay implements AmplitudeSessionReplay {\n name = '@amplitude/session-replay-browser';\n config: SessionReplayJoinedConfig | undefined;\n joinedConfigGenerator: SessionReplayJoinedConfigGenerator | undefined;\n identifiers: ISessionIdentifiers | undefined;\n eventsManager?: AmplitudeSessionReplayEventsManager<'replay' | 'interaction', string>;\n loggerProvider: ILogger;\n recordCancelCallback: ReturnType<typeof record> | null = null;\n eventCount = 0;\n eventCompressor: EventCompressor | undefined;\n\n // Visible for testing\n pageLeaveFns: PageLeaveFn[] = [];\n private scrollHook?: scrollCallback;\n private networkObservers?: NetworkObservers;\n private metadata: SessionReplayMetadata | undefined;\n\n constructor() {\n this.loggerProvider = new SafeLoggerProvider(new Logger());\n }\n\n init(apiKey: string, options: SessionReplayOptions) {\n return returnWrapper(this._init(apiKey, options));\n }\n\n private teardownEventListeners = (teardown: boolean) => {\n const globalScope = getGlobalScope();\n if (globalScope) {\n globalScope.removeEventListener('blur', this.blurListener);\n globalScope.removeEventListener('focus', this.focusListener);\n !teardown && globalScope.addEventListener('blur', this.blurListener);\n !teardown && globalScope.addEventListener('focus', this.focusListener);\n // prefer pagehide to unload events, this is the standard going forward. it is not\n // 100% reliable, but is bfcache-compatible.\n if (globalScope.self && 'onpagehide' in globalScope.self) {\n globalScope.removeEventListener('pagehide', this.pageLeaveListener);\n !teardown && globalScope.addEventListener('pagehide', this.pageLeaveListener);\n } else {\n // this has performance implications, but is the only way we can reliably send events\n // in browser that don't support pagehide.\n globalScope.removeEventListener('beforeunload', this.pageLeaveListener);\n !teardown && globalScope.addEventListener('beforeunload', this.pageLeaveListener);\n }\n }\n };\n\n protected async _init(apiKey: string, options: SessionReplayOptions) {\n this.loggerProvider = new SafeLoggerProvider(options.loggerProvider || new Logger());\n Object.prototype.hasOwnProperty.call(options, 'logLevel') &&\n this.loggerProvider.enable(options.logLevel as LogLevel);\n this.identifiers = new SessionIdentifiers({ sessionId: options.sessionId, deviceId: options.deviceId });\n this.joinedConfigGenerator = await createSessionReplayJoinedConfigGenerator(apiKey, options);\n const { joinedConfig, localConfig, remoteConfig } = await this.joinedConfigGenerator.generateJoinedConfig(\n this.identifiers.sessionId,\n );\n this.config = joinedConfig;\n\n this.setMetadata(options.sessionId, joinedConfig, localConfig, remoteConfig, options.version?.version, VERSION);\n\n if (options.sessionId && this.config.interactionConfig?.enabled) {\n const scrollWatcher = ScrollWatcher.default(\n {\n sessionId: options.sessionId,\n type: 'interaction',\n },\n this.config,\n );\n this.pageLeaveFns = [scrollWatcher.send(this.getDeviceId.bind(this)).bind(scrollWatcher)];\n this.scrollHook = scrollWatcher.hook.bind(scrollWatcher);\n }\n\n const managers: EventsManagerWithType<EventType, string>[] = [];\n let { storeType } = this.config;\n if (storeType === 'idb' && !getGlobalScope()?.indexedDB) {\n storeType = 'memory';\n this.loggerProvider.warn('Could not use preferred indexedDB storage, reverting to in memory option.');\n }\n this.loggerProvider.log(`Using ${storeType} for event storage.`);\n try {\n const rrwebEventManager = await createEventsManager<'replay'>({\n config: this.config,\n sessionId: this.identifiers.sessionId,\n type: 'replay',\n storeType,\n });\n managers.push({ name: 'replay', manager: rrwebEventManager });\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while creating replay events manager: ${typedError.toString()}`);\n }\n\n if (this.config.interactionConfig?.enabled) {\n const payloadBatcher = this.config.interactionConfig.batch ? clickBatcher : clickNonBatcher;\n try {\n const interactionEventManager = await createEventsManager<'interaction'>({\n config: this.config,\n sessionId: this.identifiers.sessionId,\n type: 'interaction',\n minInterval: this.config.interactionConfig.trackEveryNms ?? INTERACTION_MIN_INTERVAL,\n maxInterval: INTERACTION_MAX_INTERVAL,\n payloadBatcher,\n storeType,\n });\n managers.push({ name: 'interaction', manager: interactionEventManager });\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while creating interaction events manager: ${typedError.toString()}`);\n }\n }\n\n this.eventsManager = new MultiEventManager<'replay' | 'interaction', string>(...managers);\n // To prevent too many threads.\n if (this.eventCompressor) {\n this.eventCompressor.terminate();\n }\n this.eventCompressor = new EventCompressor(this.eventsManager, this.config, this.getDeviceId());\n\n // Initialize network observers if logging is enabled\n if (this.config.loggingConfig?.network?.enabled) {\n this.networkObservers = new NetworkObservers();\n }\n\n this.loggerProvider.log('Installing @amplitude/session-replay-browser.');\n\n this.teardownEventListeners(false);\n\n void this.initialize(true);\n }\n\n setSessionId(sessionId: string | number, deviceId?: string) {\n return returnWrapper(this.asyncSetSessionId(sessionId, deviceId));\n }\n\n async asyncSetSessionId(sessionId: string | number, deviceId?: string) {\n const previousSessionId = this.identifiers && this.identifiers.sessionId;\n if (previousSessionId) {\n this.sendEvents(previousSessionId);\n }\n\n const deviceIdForReplayId = deviceId || this.getDeviceId();\n this.identifiers = new SessionIdentifiers({\n sessionId: sessionId,\n deviceId: deviceIdForReplayId,\n });\n\n // If there is no previous session id, SDK is being initialized for the first time,\n // and config was just fetched in initialization, so no need to fetch it a second time\n if (this.joinedConfigGenerator && previousSessionId) {\n const { joinedConfig } = await this.joinedConfigGenerator.generateJoinedConfig(this.identifiers.sessionId);\n this.config = joinedConfig;\n }\n void this.recordEvents();\n }\n\n getSessionReplayProperties() {\n const config = this.config;\n const identifiers = this.identifiers;\n if (!config || !identifiers) {\n this.loggerProvider.warn('Session replay init has not been called, cannot get session replay properties.');\n return {};\n }\n\n const shouldRecord = this.getShouldRecord();\n let eventProperties: { [key: string]: string | null } = {};\n\n if (shouldRecord) {\n eventProperties = {\n [DEFAULT_SESSION_REPLAY_PROPERTY]: identifiers.sessionReplayId ? identifiers.sessionReplayId : null,\n };\n if (config.debugMode) {\n eventProperties[SESSION_REPLAY_DEBUG_PROPERTY] = JSON.stringify({\n appHash: generateHashCode(config.apiKey).toString(),\n });\n }\n }\n\n void this.addCustomRRWebEvent(\n CustomRRwebEvent.GET_SR_PROPS,\n {\n shouldRecord,\n eventProperties: eventProperties,\n },\n this.eventCount === 10,\n );\n if (this.eventCount === 10) {\n this.eventCount = 0;\n }\n this.eventCount++;\n\n return eventProperties;\n }\n\n blurListener = () => {\n this.sendEvents();\n };\n\n focusListener = () => {\n // Restart recording on focus to ensure that when user\n // switches tabs, we take a full snapshot\n void this.recordEvents(false);\n };\n\n /**\n * This is an instance member so that if init is called multiple times\n * it doesn't add another listener to the page leave event. This is to\n * prevent duplicate listener actions from firing.\n */\n private pageLeaveListener = (e: PageTransitionEvent | Event) => {\n this.pageLeaveFns.forEach((fn) => {\n fn(e);\n });\n };\n\n sendEvents(sessionId?: string | number) {\n const sessionIdToSend = sessionId || this.identifiers?.sessionId;\n const deviceId = this.getDeviceId();\n this.eventsManager &&\n sessionIdToSend &&\n deviceId &&\n this.eventsManager.sendCurrentSequenceEvents({ sessionId: sessionIdToSend, deviceId });\n }\n\n async initialize(shouldSendStoredEvents = false) {\n if (!this.identifiers?.sessionId) {\n this.loggerProvider.log(`Session is not being recorded due to lack of session id.`);\n return Promise.resolve();\n }\n\n const deviceId = this.getDeviceId();\n if (!deviceId) {\n this.loggerProvider.log(`Session is not being recorded due to lack of device id.`);\n return Promise.resolve();\n }\n this.eventsManager && shouldSendStoredEvents && void this.eventsManager.sendStoredEvents({ deviceId });\n\n return this.recordEvents();\n }\n\n shouldOptOut() {\n let identityStoreOptOut: boolean | undefined;\n if (this.config?.instanceName) {\n const identityStore = getAnalyticsConnector(this.config.instanceName).identityStore;\n identityStoreOptOut = identityStore.getIdentity().optOut;\n }\n\n return identityStoreOptOut !== undefined ? identityStoreOptOut : this.config?.optOut;\n }\n\n getShouldRecord() {\n if (!this.identifiers || !this.config || !this.identifiers.sessionId) {\n this.loggerProvider.warn(`Session is not being recorded due to lack of config, please call sessionReplay.init.`);\n return false;\n }\n if (!this.config.captureEnabled) {\n this.loggerProvider.log(\n `Session ${this.identifiers.sessionId} not being captured due to capture being disabled for project or because the remote config could not be fetched.`,\n );\n return false;\n }\n\n if (this.shouldOptOut()) {\n this.loggerProvider.log(`Opting session ${this.identifiers.sessionId} out of recording due to optOut config.`);\n return false;\n }\n\n const isInSample = isSessionInSample(this.identifiers.sessionId, this.config.sampleRate);\n if (!isInSample) {\n this.loggerProvider.log(`Opting session ${this.identifiers.sessionId} out of recording due to sample rate.`);\n }\n return isInSample;\n }\n\n getBlockSelectors(): string | string[] | undefined {\n // For some reason, this defaults to empty array ([]) if undefined in the compiled script.\n // Empty arrays cause errors when being evaluated in Safari.\n // Force the selector to be undefined if it's an empty array.\n const blockSelector = this.config?.privacyConfig?.blockSelector ?? [];\n if (blockSelector.length === 0) {\n return undefined;\n }\n return blockSelector;\n }\n\n getMaskTextSelectors(): string | undefined {\n if (this.config?.privacyConfig?.defaultMaskLevel === 'conservative') {\n return '*';\n }\n\n const maskSelector = this.config?.privacyConfig?.maskSelector;\n if (!maskSelector) {\n return;\n }\n\n return maskSelector as unknown as string;\n }\n\n async getRecordingPlugins(loggingConfig: LoggingConfig | undefined) {\n const plugins = [];\n\n // Default plugin settings -\n // {\n // level: ['info', 'log', 'warn', 'error'],\n // lengthThreshold: 10000,\n // stringifyOptions: {\n // stringLengthLimit: undefined,\n // numOfKeysLimit: 50,\n // depthOfLimit: 4,\n // },\n // logger: window.console,\n // }\n if (loggingConfig?.console?.enabled) {\n try {\n const { getRecordConsolePlugin } = await import('@amplitude/rrweb-plugin-console-record');\n plugins.push(getRecordConsolePlugin({ level: loggingConfig.console.levels }));\n } catch (error) {\n this.loggerProvider.warn('Failed to load console plugin:', error);\n }\n }\n\n return plugins.length > 0 ? plugins : undefined;\n }\n\n async recordEvents(shouldLogMetadata = true) {\n const config = this.config;\n const shouldRecord = this.getShouldRecord();\n const sessionId = this.identifiers?.sessionId;\n if (!shouldRecord || !sessionId || !config) {\n return;\n }\n this.stopRecordingEvents();\n this.networkObservers?.start((event: NetworkRequestEvent) => {\n void this.addCustomRRWebEvent(CustomRRwebEvent.FETCH_REQUEST, event);\n });\n const { privacyConfig, interactionConfig, loggingConfig } = config;\n\n const hooks = interactionConfig?.enabled\n ? {\n mouseInteraction:\n this.eventsManager &&\n clickHook(this.loggerProvider, {\n eventsManager: this.eventsManager,\n sessionId,\n deviceIdFn: this.getDeviceId.bind(this),\n }),\n scroll: this.scrollHook,\n }\n : {};\n\n this.loggerProvider.log(`Session Replay capture beginning for ${sessionId}.`);\n\n try {\n this.recordCancelCallback = record({\n emit: (event) => {\n if (this.shouldOptOut()) {\n this.loggerProvider.log(`Opting session ${sessionId} out of recording due to optOut config.`);\n this.stopRecordingEvents();\n this.sendEvents();\n return;\n }\n\n if (this.eventCompressor) {\n // Schedule processing during idle time if the browser supports requestIdleCallback\n this.eventCompressor.enqueueEvent(event, sessionId);\n }\n },\n inlineStylesheet: config.shouldInlineStylesheet,\n hooks,\n maskAllInputs: true,\n maskTextClass: MASK_TEXT_CLASS,\n blockClass: BLOCK_CLASS,\n // rrweb only exposes string type through its types, but arrays are also be supported. #class, ['#class', 'id']\n blockSelector: this.getBlockSelectors() as string | undefined,\n maskInputFn: maskFn('input', privacyConfig),\n maskTextFn: maskFn('text', privacyConfig),\n // rrweb only exposes string type through its types, but arrays are also be supported. since rrweb uses .matches() which supports arrays.\n maskTextSelector: this.getMaskTextSelectors(),\n recordCanvas: false,\n errorHandler: (error) => {\n const typedError = error as Error & { _external_?: boolean };\n\n // styled-components relies on this error being thrown and bubbled up, rrweb is otherwise suppressing it\n if (typedError.message.includes('insertRule') && typedError.message.includes('CSSStyleSheet')) {\n throw typedError;\n }\n\n // rrweb does monkey patching on certain window functions such as CSSStyleSheet.proptype.insertRule,\n // and errors from external clients calling these functions can get suppressed. Styled components depend\n // on these errors being re-thrown.\n if (typedError._external_) {\n throw typedError;\n }\n\n this.loggerProvider.warn('Error while capturing replay: ', typedError.toString());\n // Return true so that we don't clutter user's consoles with internal rrweb errors\n return true;\n },\n plugins: await this.getRecordingPlugins(loggingConfig),\n });\n\n void this.addCustomRRWebEvent(CustomRRwebEvent.DEBUG_INFO);\n if (shouldLogMetadata) {\n void this.addCustomRRWebEvent(CustomRRwebEvent.METADATA, this.metadata);\n }\n } catch (error) {\n this.loggerProvider.warn('Failed to initialize session replay:', error);\n }\n }\n\n addCustomRRWebEvent = async (\n eventName: CustomRRwebEvent,\n eventData: { [key: string]: any } = {},\n addStorageInfo = true,\n ) => {\n try {\n let debugInfo: DebugInfo | undefined = undefined;\n const config = this.config;\n // Only add debug info for non-metadata events\n if (config && eventName !== CustomRRwebEvent.METADATA) {\n debugInfo = {\n config: getDebugConfig(config),\n version: VERSION,\n };\n if (addStorageInfo) {\n const storageSizeData = await getStorageSize();\n debugInfo = {\n ...storageSizeData,\n ...debugInfo,\n };\n }\n }\n // Check first to ensure we are recording\n if (this.recordCancelCallback) {\n record.addCustomEvent(eventName, {\n ...eventData,\n ...debugInfo,\n });\n } else {\n this.loggerProvider.debug(\n `Not able to add custom replay capture event ${eventName} due to no ongoing recording.`,\n );\n }\n } catch (e) {\n this.loggerProvider.debug('Error while adding custom replay capture event: ', e);\n }\n };\n\n stopRecordingEvents = () => {\n try {\n this.loggerProvider.log('Session Replay capture stopping.');\n this.recordCancelCallback && this.recordCancelCallback();\n this.recordCancelCallback = null;\n this.networkObservers?.stop();\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while stopping replay capture: ${typedError.toString()}`);\n }\n };\n\n getDeviceId() {\n return this.identifiers?.deviceId;\n }\n\n getSessionId() {\n return this.identifiers?.sessionId;\n }\n\n async flush(useRetry = false) {\n return this.eventsManager?.flush(useRetry);\n }\n\n shutdown() {\n this.teardownEventListeners(true);\n this.stopRecordingEvents();\n this.sendEvents();\n }\n\n private setMetadata(\n sessionId: string | number | undefined,\n joinedConfig: SessionReplayJoinedConfig,\n localConfig: SessionReplayLocalConfig,\n remoteConfig: SessionReplayRemoteConfig | undefined,\n replaySDKVersion: string | undefined,\n standaloneSDKVersion: string | undefined,\n ) {\n const hashValue = sessionId?.toString() ? generateHashCode(sessionId.toString()) : undefined;\n\n this.metadata = {\n joinedConfig,\n localConfig,\n remoteConfig,\n sessionId,\n hashValue,\n sampleRate: joinedConfig.sampleRate,\n replaySDKType: '@amplitude/plugin-session-replay-browser',\n replaySDKVersion,\n standaloneSDKType: '@amplitude/session-replay-browser',\n standaloneSDKVersion,\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"session-replay.js","sourceRoot":"","sources":["../../src/session-replay.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Logger,\n returnWrapper,\n getAnalyticsConnector,\n getGlobalScope,\n ILogger,\n LogLevel,\n} from '@amplitude/analytics-core';\nimport { record } from '@amplitude/rrweb';\nimport { scrollCallback } from '@amplitude/rrweb-types';\nimport { createSessionReplayJoinedConfigGenerator } from './config/joined-config';\nimport {\n LoggingConfig,\n SessionReplayJoinedConfig,\n SessionReplayJoinedConfigGenerator,\n SessionReplayMetadata,\n SessionReplayLocalConfig,\n SessionReplayRemoteConfig,\n} from './config/types';\nimport {\n BLOCK_CLASS,\n CustomRRwebEvent,\n DEFAULT_SESSION_REPLAY_PROPERTY,\n INTERACTION_MAX_INTERVAL,\n INTERACTION_MIN_INTERVAL,\n MASK_TEXT_CLASS,\n SESSION_REPLAY_DEBUG_PROPERTY,\n} from './constants';\nimport { createEventsManager } from './events/events-manager';\nimport { MultiEventManager } from './events/multi-manager';\nimport { generateHashCode, getDebugConfig, getStorageSize, isSessionInSample, maskFn } from './helpers';\nimport { clickBatcher, clickHook, clickNonBatcher } from './hooks/click';\nimport { ScrollWatcher } from './hooks/scroll';\nimport { SessionIdentifiers } from './identifiers';\nimport {\n AmplitudeSessionReplay,\n SessionReplayEventsManager as AmplitudeSessionReplayEventsManager,\n DebugInfo,\n EventType,\n EventsManagerWithType,\n SessionIdentifiers as ISessionIdentifiers,\n SessionReplayOptions,\n} from './typings/session-replay';\nimport { VERSION } from './version';\nimport { EventCompressor } from './events/event-compressor';\nimport { SafeLoggerProvider } from './logger';\nimport { NetworkObservers, NetworkRequestEvent } from './observers';\n\ntype PageLeaveFn = (e: PageTransitionEvent | Event) => void;\n\nexport class SessionReplay implements AmplitudeSessionReplay {\n name = '@amplitude/session-replay-browser';\n config: SessionReplayJoinedConfig | undefined;\n joinedConfigGenerator: SessionReplayJoinedConfigGenerator | undefined;\n identifiers: ISessionIdentifiers | undefined;\n eventsManager?: AmplitudeSessionReplayEventsManager<'replay' | 'interaction', string>;\n loggerProvider: ILogger;\n recordCancelCallback: ReturnType<typeof record> | null = null;\n eventCount = 0;\n eventCompressor: EventCompressor | undefined;\n\n // Visible for testing\n pageLeaveFns: PageLeaveFn[] = [];\n private scrollHook?: scrollCallback;\n private networkObservers?: NetworkObservers;\n private metadata: SessionReplayMetadata | undefined;\n\n constructor() {\n this.loggerProvider = new SafeLoggerProvider(new Logger());\n }\n\n init(apiKey: string, options: SessionReplayOptions) {\n return returnWrapper(this._init(apiKey, options));\n }\n\n private teardownEventListeners = (teardown: boolean) => {\n const globalScope = getGlobalScope();\n if (globalScope) {\n globalScope.removeEventListener('blur', this.blurListener);\n globalScope.removeEventListener('focus', this.focusListener);\n !teardown && globalScope.addEventListener('blur', this.blurListener);\n !teardown && globalScope.addEventListener('focus', this.focusListener);\n // prefer pagehide to unload events, this is the standard going forward. it is not\n // 100% reliable, but is bfcache-compatible.\n if (globalScope.self && 'onpagehide' in globalScope.self) {\n globalScope.removeEventListener('pagehide', this.pageLeaveListener);\n !teardown && globalScope.addEventListener('pagehide', this.pageLeaveListener);\n } else {\n // this has performance implications, but is the only way we can reliably send events\n // in browser that don't support pagehide.\n globalScope.removeEventListener('beforeunload', this.pageLeaveListener);\n !teardown && globalScope.addEventListener('beforeunload', this.pageLeaveListener);\n }\n }\n };\n\n protected async _init(apiKey: string, options: SessionReplayOptions) {\n this.loggerProvider = new SafeLoggerProvider(options.loggerProvider || new Logger());\n Object.prototype.hasOwnProperty.call(options, 'logLevel') &&\n this.loggerProvider.enable(options.logLevel as LogLevel);\n this.identifiers = new SessionIdentifiers({ sessionId: options.sessionId, deviceId: options.deviceId });\n this.joinedConfigGenerator = await createSessionReplayJoinedConfigGenerator(apiKey, options);\n const { joinedConfig, localConfig, remoteConfig } = await this.joinedConfigGenerator.generateJoinedConfig(\n this.identifiers.sessionId,\n );\n this.config = joinedConfig;\n\n this.setMetadata(\n options.sessionId,\n joinedConfig,\n localConfig,\n remoteConfig,\n options.version?.version,\n VERSION,\n options.version?.type,\n );\n\n if (options.sessionId && this.config.interactionConfig?.enabled) {\n const scrollWatcher = ScrollWatcher.default(\n {\n sessionId: options.sessionId,\n type: 'interaction',\n },\n this.config,\n );\n this.pageLeaveFns = [scrollWatcher.send(this.getDeviceId.bind(this)).bind(scrollWatcher)];\n this.scrollHook = scrollWatcher.hook.bind(scrollWatcher);\n }\n\n const managers: EventsManagerWithType<EventType, string>[] = [];\n let { storeType } = this.config;\n if (storeType === 'idb' && !getGlobalScope()?.indexedDB) {\n storeType = 'memory';\n this.loggerProvider.warn('Could not use preferred indexedDB storage, reverting to in memory option.');\n }\n this.loggerProvider.log(`Using ${storeType} for event storage.`);\n try {\n const rrwebEventManager = await createEventsManager<'replay'>({\n config: this.config,\n sessionId: this.identifiers.sessionId,\n type: 'replay',\n storeType,\n });\n managers.push({ name: 'replay', manager: rrwebEventManager });\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while creating replay events manager: ${typedError.toString()}`);\n }\n\n if (this.config.interactionConfig?.enabled) {\n const payloadBatcher = this.config.interactionConfig.batch ? clickBatcher : clickNonBatcher;\n try {\n const interactionEventManager = await createEventsManager<'interaction'>({\n config: this.config,\n sessionId: this.identifiers.sessionId,\n type: 'interaction',\n minInterval: this.config.interactionConfig.trackEveryNms ?? INTERACTION_MIN_INTERVAL,\n maxInterval: INTERACTION_MAX_INTERVAL,\n payloadBatcher,\n storeType,\n });\n managers.push({ name: 'interaction', manager: interactionEventManager });\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while creating interaction events manager: ${typedError.toString()}`);\n }\n }\n\n this.eventsManager = new MultiEventManager<'replay' | 'interaction', string>(...managers);\n // To prevent too many threads.\n if (this.eventCompressor) {\n this.eventCompressor.terminate();\n }\n this.eventCompressor = new EventCompressor(this.eventsManager, this.config, this.getDeviceId());\n\n // Initialize network observers if logging is enabled\n if (this.config.loggingConfig?.network?.enabled) {\n this.networkObservers = new NetworkObservers();\n }\n\n this.loggerProvider.log('Installing @amplitude/session-replay-browser.');\n\n this.teardownEventListeners(false);\n\n void this.initialize(true);\n }\n\n setSessionId(sessionId: string | number, deviceId?: string) {\n return returnWrapper(this.asyncSetSessionId(sessionId, deviceId));\n }\n\n async asyncSetSessionId(sessionId: string | number, deviceId?: string) {\n const previousSessionId = this.identifiers && this.identifiers.sessionId;\n if (previousSessionId) {\n this.sendEvents(previousSessionId);\n }\n\n const deviceIdForReplayId = deviceId || this.getDeviceId();\n this.identifiers = new SessionIdentifiers({\n sessionId: sessionId,\n deviceId: deviceIdForReplayId,\n });\n\n // If there is no previous session id, SDK is being initialized for the first time,\n // and config was just fetched in initialization, so no need to fetch it a second time\n if (this.joinedConfigGenerator && previousSessionId) {\n const { joinedConfig } = await this.joinedConfigGenerator.generateJoinedConfig(this.identifiers.sessionId);\n this.config = joinedConfig;\n }\n void this.recordEvents();\n }\n\n getSessionReplayProperties() {\n const config = this.config;\n const identifiers = this.identifiers;\n if (!config || !identifiers) {\n this.loggerProvider.warn('Session replay init has not been called, cannot get session replay properties.');\n return {};\n }\n\n const shouldRecord = this.getShouldRecord();\n let eventProperties: { [key: string]: string | null } = {};\n\n if (shouldRecord) {\n eventProperties = {\n [DEFAULT_SESSION_REPLAY_PROPERTY]: identifiers.sessionReplayId ? identifiers.sessionReplayId : null,\n };\n if (config.debugMode) {\n eventProperties[SESSION_REPLAY_DEBUG_PROPERTY] = JSON.stringify({\n appHash: generateHashCode(config.apiKey).toString(),\n });\n }\n }\n\n void this.addCustomRRWebEvent(\n CustomRRwebEvent.GET_SR_PROPS,\n {\n shouldRecord,\n eventProperties: eventProperties,\n },\n this.eventCount === 10,\n );\n if (this.eventCount === 10) {\n this.eventCount = 0;\n }\n this.eventCount++;\n\n return eventProperties;\n }\n\n blurListener = () => {\n this.sendEvents();\n };\n\n focusListener = () => {\n // Restart recording on focus to ensure that when user\n // switches tabs, we take a full snapshot\n void this.recordEvents(false);\n };\n\n /**\n * This is an instance member so that if init is called multiple times\n * it doesn't add another listener to the page leave event. This is to\n * prevent duplicate listener actions from firing.\n */\n private pageLeaveListener = (e: PageTransitionEvent | Event) => {\n this.pageLeaveFns.forEach((fn) => {\n fn(e);\n });\n };\n\n sendEvents(sessionId?: string | number) {\n const sessionIdToSend = sessionId || this.identifiers?.sessionId;\n const deviceId = this.getDeviceId();\n this.eventsManager &&\n sessionIdToSend &&\n deviceId &&\n this.eventsManager.sendCurrentSequenceEvents({ sessionId: sessionIdToSend, deviceId });\n }\n\n async initialize(shouldSendStoredEvents = false) {\n if (!this.identifiers?.sessionId) {\n this.loggerProvider.log(`Session is not being recorded due to lack of session id.`);\n return Promise.resolve();\n }\n\n const deviceId = this.getDeviceId();\n if (!deviceId) {\n this.loggerProvider.log(`Session is not being recorded due to lack of device id.`);\n return Promise.resolve();\n }\n this.eventsManager && shouldSendStoredEvents && void this.eventsManager.sendStoredEvents({ deviceId });\n\n return this.recordEvents();\n }\n\n shouldOptOut() {\n let identityStoreOptOut: boolean | undefined;\n if (this.config?.instanceName) {\n const identityStore = getAnalyticsConnector(this.config.instanceName).identityStore;\n identityStoreOptOut = identityStore.getIdentity().optOut;\n }\n\n return identityStoreOptOut !== undefined ? identityStoreOptOut : this.config?.optOut;\n }\n\n getShouldRecord() {\n if (!this.identifiers || !this.config || !this.identifiers.sessionId) {\n this.loggerProvider.warn(`Session is not being recorded due to lack of config, please call sessionReplay.init.`);\n return false;\n }\n if (!this.config.captureEnabled) {\n this.loggerProvider.log(\n `Session ${this.identifiers.sessionId} not being captured due to capture being disabled for project or because the remote config could not be fetched.`,\n );\n return false;\n }\n\n if (this.shouldOptOut()) {\n this.loggerProvider.log(`Opting session ${this.identifiers.sessionId} out of recording due to optOut config.`);\n return false;\n }\n\n const isInSample = isSessionInSample(this.identifiers.sessionId, this.config.sampleRate);\n if (!isInSample) {\n this.loggerProvider.log(`Opting session ${this.identifiers.sessionId} out of recording due to sample rate.`);\n }\n return isInSample;\n }\n\n getBlockSelectors(): string | string[] | undefined {\n // For some reason, this defaults to empty array ([]) if undefined in the compiled script.\n // Empty arrays cause errors when being evaluated in Safari.\n // Force the selector to be undefined if it's an empty array.\n const blockSelector = this.config?.privacyConfig?.blockSelector ?? [];\n if (blockSelector.length === 0) {\n return undefined;\n }\n return blockSelector;\n }\n\n getMaskTextSelectors(): string | undefined {\n if (this.config?.privacyConfig?.defaultMaskLevel === 'conservative') {\n return '*';\n }\n\n const maskSelector = this.config?.privacyConfig?.maskSelector;\n if (!maskSelector) {\n return;\n }\n\n return maskSelector as unknown as string;\n }\n\n async getRecordingPlugins(loggingConfig: LoggingConfig | undefined) {\n const plugins = [];\n\n // Default plugin settings -\n // {\n // level: ['info', 'log', 'warn', 'error'],\n // lengthThreshold: 10000,\n // stringifyOptions: {\n // stringLengthLimit: undefined,\n // numOfKeysLimit: 50,\n // depthOfLimit: 4,\n // },\n // logger: window.console,\n // }\n if (loggingConfig?.console?.enabled) {\n try {\n const { getRecordConsolePlugin } = await import('@amplitude/rrweb-plugin-console-record');\n plugins.push(getRecordConsolePlugin({ level: loggingConfig.console.levels }));\n } catch (error) {\n this.loggerProvider.warn('Failed to load console plugin:', error);\n }\n }\n\n return plugins.length > 0 ? plugins : undefined;\n }\n\n async recordEvents(shouldLogMetadata = true) {\n const config = this.config;\n const shouldRecord = this.getShouldRecord();\n const sessionId = this.identifiers?.sessionId;\n if (!shouldRecord || !sessionId || !config) {\n return;\n }\n this.stopRecordingEvents();\n this.networkObservers?.start((event: NetworkRequestEvent) => {\n void this.addCustomRRWebEvent(CustomRRwebEvent.FETCH_REQUEST, event);\n });\n const { privacyConfig, interactionConfig, loggingConfig } = config;\n\n const hooks = interactionConfig?.enabled\n ? {\n mouseInteraction:\n this.eventsManager &&\n clickHook(this.loggerProvider, {\n eventsManager: this.eventsManager,\n sessionId,\n deviceIdFn: this.getDeviceId.bind(this),\n }),\n scroll: this.scrollHook,\n }\n : {};\n\n this.loggerProvider.log(`Session Replay capture beginning for ${sessionId}.`);\n\n try {\n this.recordCancelCallback = record({\n emit: (event) => {\n if (this.shouldOptOut()) {\n this.loggerProvider.log(`Opting session ${sessionId} out of recording due to optOut config.`);\n this.stopRecordingEvents();\n this.sendEvents();\n return;\n }\n\n if (this.eventCompressor) {\n // Schedule processing during idle time if the browser supports requestIdleCallback\n this.eventCompressor.enqueueEvent(event, sessionId);\n }\n },\n inlineStylesheet: config.shouldInlineStylesheet,\n hooks,\n maskAllInputs: true,\n maskTextClass: MASK_TEXT_CLASS,\n blockClass: BLOCK_CLASS,\n // rrweb only exposes string type through its types, but arrays are also be supported. #class, ['#class', 'id']\n blockSelector: this.getBlockSelectors() as string | undefined,\n maskInputFn: maskFn('input', privacyConfig),\n maskTextFn: maskFn('text', privacyConfig),\n // rrweb only exposes string type through its types, but arrays are also be supported. since rrweb uses .matches() which supports arrays.\n maskTextSelector: this.getMaskTextSelectors(),\n recordCanvas: false,\n errorHandler: (error) => {\n const typedError = error as Error & { _external_?: boolean };\n\n // styled-components relies on this error being thrown and bubbled up, rrweb is otherwise suppressing it\n if (typedError.message.includes('insertRule') && typedError.message.includes('CSSStyleSheet')) {\n throw typedError;\n }\n\n // rrweb does monkey patching on certain window functions such as CSSStyleSheet.proptype.insertRule,\n // and errors from external clients calling these functions can get suppressed. Styled components depend\n // on these errors being re-thrown.\n if (typedError._external_) {\n throw typedError;\n }\n\n this.loggerProvider.warn('Error while capturing replay: ', typedError.toString());\n // Return true so that we don't clutter user's consoles with internal rrweb errors\n return true;\n },\n plugins: await this.getRecordingPlugins(loggingConfig),\n });\n\n void this.addCustomRRWebEvent(CustomRRwebEvent.DEBUG_INFO);\n if (shouldLogMetadata) {\n void this.addCustomRRWebEvent(CustomRRwebEvent.METADATA, this.metadata);\n }\n } catch (error) {\n this.loggerProvider.warn('Failed to initialize session replay:', error);\n }\n }\n\n addCustomRRWebEvent = async (\n eventName: CustomRRwebEvent,\n eventData: { [key: string]: any } = {},\n addStorageInfo = true,\n ) => {\n try {\n let debugInfo: DebugInfo | undefined = undefined;\n const config = this.config;\n // Only add debug info for non-metadata events\n if (config && eventName !== CustomRRwebEvent.METADATA) {\n debugInfo = {\n config: getDebugConfig(config),\n version: VERSION,\n };\n if (addStorageInfo) {\n const storageSizeData = await getStorageSize();\n debugInfo = {\n ...storageSizeData,\n ...debugInfo,\n };\n }\n }\n // Check first to ensure we are recording\n if (this.recordCancelCallback) {\n record.addCustomEvent(eventName, {\n ...eventData,\n ...debugInfo,\n });\n } else {\n this.loggerProvider.debug(\n `Not able to add custom replay capture event ${eventName} due to no ongoing recording.`,\n );\n }\n } catch (e) {\n this.loggerProvider.debug('Error while adding custom replay capture event: ', e);\n }\n };\n\n stopRecordingEvents = () => {\n try {\n this.loggerProvider.log('Session Replay capture stopping.');\n this.recordCancelCallback && this.recordCancelCallback();\n this.recordCancelCallback = null;\n this.networkObservers?.stop();\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while stopping replay capture: ${typedError.toString()}`);\n }\n };\n\n getDeviceId() {\n return this.identifiers?.deviceId;\n }\n\n getSessionId() {\n return this.identifiers?.sessionId;\n }\n\n async flush(useRetry = false) {\n return this.eventsManager?.flush(useRetry);\n }\n\n shutdown() {\n this.teardownEventListeners(true);\n this.stopRecordingEvents();\n this.sendEvents();\n }\n\n private mapSDKType(sdkType: string | undefined) {\n if (sdkType === 'plugin') {\n return '@amplitude/plugin-session-replay-browser';\n }\n\n if (sdkType === 'segment') {\n return '@amplitude/segment-session-replay-plugin';\n }\n\n return null;\n }\n\n private setMetadata(\n sessionId: string | number | undefined,\n joinedConfig: SessionReplayJoinedConfig,\n localConfig: SessionReplayLocalConfig,\n remoteConfig: SessionReplayRemoteConfig | undefined,\n replaySDKVersion: string | undefined,\n standaloneSDKVersion: string | undefined,\n sdkType: string | undefined,\n ) {\n const hashValue = sessionId?.toString() ? generateHashCode(sessionId.toString()) : undefined;\n\n this.metadata = {\n joinedConfig,\n localConfig,\n remoteConfig,\n sessionId,\n hashValue,\n sampleRate: joinedConfig.sampleRate,\n replaySDKType: this.mapSDKType(sdkType),\n replaySDKVersion,\n standaloneSDKType: '@amplitude/session-replay-browser',\n standaloneSDKVersion,\n };\n }\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function toLowerCase<T extends string>(str: T): Lowercase<T>;
|
|
2
|
+
/**
|
|
3
|
+
* Get the type of an input element.
|
|
4
|
+
* This takes care of the case where a password input is changed to a text input.
|
|
5
|
+
* In this case, we continue to consider this of type password, in order to avoid leaking sensitive data
|
|
6
|
+
* where passwords should be masked.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getInputType(element: HTMLElement): Lowercase<string> | null;
|
|
9
|
+
//# sourceMappingURL=get-input-type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-input-type.d.ts","sourceRoot":"","sources":["../../../src/utils/get-input-type.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAElE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAU3E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function toLowerCase(str) {
|
|
2
|
+
return str.toLowerCase();
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Get the type of an input element.
|
|
6
|
+
* This takes care of the case where a password input is changed to a text input.
|
|
7
|
+
* In this case, we continue to consider this of type password, in order to avoid leaking sensitive data
|
|
8
|
+
* where passwords should be masked.
|
|
9
|
+
*/
|
|
10
|
+
export function getInputType(element) {
|
|
11
|
+
// when omitting the type of input element(e.g. <input />), the type is treated as text
|
|
12
|
+
var type = element.type;
|
|
13
|
+
return element.hasAttribute('data-rr-is-password')
|
|
14
|
+
? 'password'
|
|
15
|
+
: type
|
|
16
|
+
? // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
17
|
+
toLowerCase(type)
|
|
18
|
+
: null;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=get-input-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-input-type.js","sourceRoot":"","sources":["../../../src/utils/get-input-type.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAmB,GAAM;IAClD,OAAO,GAAG,CAAC,WAAW,EAA6B,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,OAAoB;IAC/C,uFAAuF;IACvF,IAAM,IAAI,GAAI,OAA4B,CAAC,IAAI,CAAC;IAEhD,OAAO,OAAO,CAAC,YAAY,CAAC,qBAAqB,CAAC;QAChD,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,4EAA4E;gBAC5E,WAAW,CAAC,IAAI,CAAC;YACnB,CAAC,CAAC,IAAI,CAAC;AACX,CAAC","sourcesContent":["export function toLowerCase<T extends string>(str: T): Lowercase<T> {\n return str.toLowerCase() as unknown as Lowercase<T>;\n}\n\n/**\n * Get the type of an input element.\n * This takes care of the case where a password input is changed to a text input.\n * In this case, we continue to consider this of type password, in order to avoid leaking sensitive data\n * where passwords should be masked.\n */\nexport function getInputType(element: HTMLElement): Lowercase<string> | null {\n // when omitting the type of input element(e.g. <input />), the type is treated as text\n const type = (element as HTMLInputElement).type;\n\n return element.hasAttribute('data-rr-is-password')\n ? 'password'\n : type\n ? // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n toLowerCase(type)\n : null;\n}\n"]}
|
package/lib/esm/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "1.22.
|
|
1
|
+
export declare const VERSION = "1.22.11";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/lib/esm/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,YAAY,CAAC"}
|
package/lib/esm/version.js
CHANGED
package/lib/esm/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,MAAM,CAAC,IAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,MAAM,CAAC,IAAM,OAAO,GAAG,SAAS,CAAC","sourcesContent":["// Autogenerated by `yarn version-file`. DO NOT EDIT\nexport const VERSION = '1.22.11';\n"]}
|
|
Binary file
|