{"version":3,"file":"autoTrackMedia.mjs","sources":["../../../../../src/providers/personalize/utils/autoTrackMedia.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { isBrowser } from '@aws-amplify/core/internals/utils';\nimport { ConsoleLogger } from '@aws-amplify/core';\nvar HTML5_MEDIA_EVENT;\n(function (HTML5_MEDIA_EVENT) {\n    HTML5_MEDIA_EVENT[\"PLAY\"] = \"play\";\n    HTML5_MEDIA_EVENT[\"PAUSE\"] = \"pause\";\n    HTML5_MEDIA_EVENT[\"ENDED\"] = \"Ended\";\n})(HTML5_MEDIA_EVENT || (HTML5_MEDIA_EVENT = {}));\nvar MEDIA_TYPE;\n(function (MEDIA_TYPE) {\n    MEDIA_TYPE[\"IFRAME\"] = \"IFRAME\";\n    MEDIA_TYPE[\"VIDEO\"] = \"VIDEO\";\n    MEDIA_TYPE[\"AUDIO\"] = \"AUDIO\";\n})(MEDIA_TYPE || (MEDIA_TYPE = {}));\nvar EVENT_TYPE;\n(function (EVENT_TYPE) {\n    EVENT_TYPE[\"PLAY\"] = \"Play\";\n    EVENT_TYPE[\"ENDED\"] = \"Ended\";\n    EVENT_TYPE[\"PAUSE\"] = \"Pause\";\n    EVENT_TYPE[\"TIME_WATCHED\"] = \"TimeWatched\";\n})(EVENT_TYPE || (EVENT_TYPE = {}));\nconst logger = new ConsoleLogger('MediaAutoTrack');\nconst startIframeAutoTracking = (element, recordEvent) => {\n    let isPlaying = false;\n    let player;\n    const mediaProperties = () => {\n        const duration = Number(parseFloat(player.getDuration()).toFixed(4));\n        const currentTime = Number(parseFloat(player.getCurrentTime()).toFixed(4));\n        return {\n            duration,\n            eventValue: Number((currentTime / duration).toFixed(4)),\n        };\n    };\n    const scriptElement = document.createElement('script');\n    scriptElement.type = 'text/javascript';\n    scriptElement.src = 'https://www.youtube.com/iframe_api';\n    document.body.append(scriptElement);\n    const timer = setInterval(() => {\n        if (isPlaying && player) {\n            recordEvent(EVENT_TYPE.TIME_WATCHED, mediaProperties());\n        }\n    }, 3000);\n    element.addEventListener('unload', () => {\n        clearInterval(timer);\n    });\n    window.onYouTubeIframeAPIReady = () => {\n        delete window.onYouTubeIframeAPIReady;\n        player = new window.YT.Player(element.id, {\n            events: {\n                onStateChange: (event) => {\n                    const iframeEventMapping = {\n                        0: EVENT_TYPE.ENDED,\n                        1: EVENT_TYPE.PLAY,\n                        2: EVENT_TYPE.PAUSE,\n                    };\n                    const eventType = iframeEventMapping[event.data];\n                    switch (eventType) {\n                        case EVENT_TYPE.ENDED:\n                        case EVENT_TYPE.PAUSE:\n                            isPlaying = false;\n                            break;\n                        case EVENT_TYPE.PLAY:\n                            isPlaying = true;\n                            break;\n                    }\n                    if (eventType) {\n                        recordEvent(eventType, mediaProperties());\n                    }\n                },\n            },\n        });\n    };\n};\nconst startHTMLMediaAutoTracking = (element, recordEvent) => {\n    let isPlaying = false;\n    const mediaProperties = () => ({\n        duration: element.duration,\n        eventValue: Number((element.currentTime / element.duration).toFixed(4)),\n    });\n    const timer = setInterval(() => {\n        if (isPlaying) {\n            recordEvent(EVENT_TYPE.TIME_WATCHED, mediaProperties());\n        }\n    }, 3000);\n    element.addEventListener('unload', () => {\n        clearInterval(timer);\n    });\n    element.addEventListener(HTML5_MEDIA_EVENT.PLAY, () => {\n        isPlaying = true;\n        recordEvent(EVENT_TYPE.PLAY, mediaProperties());\n    });\n    element.addEventListener(HTML5_MEDIA_EVENT.PAUSE, () => {\n        isPlaying = false;\n        recordEvent(EVENT_TYPE.PAUSE, mediaProperties());\n    });\n    element.addEventListener(HTML5_MEDIA_EVENT.ENDED, () => {\n        isPlaying = false;\n        recordEvent(EVENT_TYPE.ENDED, mediaProperties());\n    });\n};\nconst checkElementLoaded = (interval, maxTries) => {\n    let retryCount = 0;\n    const wait = () => new Promise(resolve => setTimeout(resolve, interval));\n    const check = async (elementId) => {\n        if (retryCount >= maxTries) {\n            return false;\n        }\n        const domElement = document.getElementById(elementId);\n        if (domElement && domElement.clientHeight) {\n            return true;\n        }\n        else {\n            retryCount += 1;\n            await wait();\n            return check(elementId);\n        }\n    };\n    return check;\n};\nconst recordEvent = (config, eventBuffer) => (eventType, properties) => {\n    // override eventType and merge properties\n    eventBuffer.append({\n        ...config,\n        event: {\n            ...config.event,\n            eventType,\n            properties: {\n                ...config.event.properties,\n                ...properties,\n            },\n        },\n        timestamp: Date.now(),\n    });\n};\nexport const autoTrackMedia = async (config, eventBuffer) => {\n    const { eventType, properties } = config.event;\n    const { domElementId, ...otherProperties } = properties;\n    if (!isBrowser()) {\n        logger.debug(`${eventType} only for browser`);\n        return;\n    }\n    if (typeof domElementId === 'string' && !domElementId) {\n        logger.debug(\"Missing domElementId field in 'properties' for MediaAutoTrack event type.\");\n        return;\n    }\n    const elementId = domElementId;\n    const isElementLoaded = await checkElementLoaded(500, 5)(elementId);\n    if (isElementLoaded) {\n        const autoTrackConfigWithoutDomElementId = {\n            ...config,\n            event: {\n                ...config.event,\n                properties: otherProperties,\n            },\n        };\n        const element = document.getElementById(elementId);\n        switch (element?.tagName) {\n            case MEDIA_TYPE.IFRAME:\n                startIframeAutoTracking(element, recordEvent(autoTrackConfigWithoutDomElementId, eventBuffer));\n                break;\n            case MEDIA_TYPE.VIDEO:\n            case MEDIA_TYPE.AUDIO:\n                if (element instanceof HTMLMediaElement) {\n                    startHTMLMediaAutoTracking(element, recordEvent(autoTrackConfigWithoutDomElementId, eventBuffer));\n                }\n                break;\n            default:\n                logger.debug(`Unsupported DOM element tag: ${element?.tagName}`);\n                break;\n        }\n    }\n    else {\n        logger.debug('Cannot find the media element.');\n    }\n};\n"],"names":[],"mappings":"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"}