import { Analytics } from '../../../../core/analytics' import { eventIsTrusted, getEmail, getHashOrNull } from '../../utils' import { logger } from '../../../logger' import { version } from '../../constants' import { IFormTrackingOptions, IEventData } from '../../types' /** * handleMessage processes form submissions from iframes, identifying and tracking the user's actions. */ const handleMessage = async ( analytics: Analytics, data: { type: string; formName: string; fields: IEventData[] }, shouldHash: boolean ) => { const { fields, formName } = data const email = getEmail(fields) if (!email) { return } const id = await getHashOrNull(shouldHash, email) await analytics.identify(id, { email }) logger.debug(`IFramePlugin: Form with the name '${formName}' was submitted`) logger.debug(`IFramePlugin: Identified user with email '${email}'`) await analytics.track(formName, { version }) } export default (analytics: Analytics, options: IFormTrackingOptions) => { window.addEventListener('message', async (event) => { const { data } = event if (eventIsTrusted(event) && data && data.type === 'dreamdata-message') { const { shouldHash } = options await handleMessage(analytics, data, shouldHash || false) } }) }