import { NodePrivacyLevel, shouldMaskNode } from '@openobserve/browser-rum-core' import { isSafari } from '@openobserve/browser-core' import { getElementInputValue, switchToAbsoluteUrl, getValidTagName } from './serializationUtils' import type { SerializeOptions } from './serialization.types' import { SerializationContextStatus } from './serialization.types' import { serializeAttribute } from './serializeAttribute' import { updateSerializationStats } from './serializationStats' export function serializeAttributes( element: Element, nodePrivacyLevel: NodePrivacyLevel, options: SerializeOptions ): Record { if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) { return {} } const safeAttrs: Record = {} const tagName = getValidTagName(element.tagName) const doc = element.ownerDocument for (let i = 0; i < element.attributes.length; i += 1) { const attribute = element.attributes.item(i)! const attributeName = attribute.name const attributeValue = serializeAttribute(element, nodePrivacyLevel, attributeName, options.configuration) if (attributeValue !== null) { safeAttrs[attributeName] = attributeValue } } if ( (element as HTMLInputElement).value && (tagName === 'textarea' || tagName === 'select' || tagName === 'option' || tagName === 'input') ) { const formValue = getElementInputValue(element, nodePrivacyLevel) if (formValue !== undefined) { safeAttrs.value = formValue } } /** *