// Metro module 10497 (f10498). import { createContext, useRef, useEffect } from "react"; import QuestStore from "../../QuestStore"; import { HEARTBEAT_SECONDS, MIN_QUEST_VIEW_TIME_SECONDS, MIN_QUEST_CONTENT_VISIBILITY_PERCENTAGE } from "./ContentImpressionTrackerConstants"; import { AnalyticEvents } from "../../../../Constants"; import { jsx } from "react/jsx-runtime"; import { v4 } from "../../../../_bundle/Module514"; import { shouldMigrateToAdAnalyticsInterface, AdAnalyticsInterfaceExperimentStep } from "../../experiments/AdAnalyticsInterfaceExperiment"; import { getAdMetadataSealed, isQuestExpired, isBillableQuestContent, getAdTrafficMetadataSealed, getQuestPlacementFromQuestContent } from "../../utils/QuestDataUtils"; import { AdCreativeType } from "../../../../_bundle/Module6013"; import { getAdUser } from "../../../ads/utils/AdDataUtils.android"; import { getQuestContentName, getContentProperties } from "./AnalyticsTypes"; import { isIOS, isAndroid } from "../../../../utils/PlatformUtils"; import getDeviceMetadata_native from "../../../device/getDeviceMetadata.native"; import { getBrandSafetyContext } from "./BrandSafetyContext"; import { markAdContentSeen } from "../../QuestActionCreators"; import { captureAdUserAction } from "../../../ads/analytics/captureAdUserAction"; import { AdUserActionType } from "../../../ads/analytics/captureAdUserActionTypes"; import { getQuestLogger } from "../getQuestLogger"; import { trackQuestEvent, trackAdContentEvent } from "./AnalyticsActions"; import { getCurrentQuestHomeSearchSession } from "./QuestHomeSearchSession"; import MonitoringAgent from "../../../monitoring/MonitoringAgent"; import { MetricEvents } from "../../../../_bundle/Module5872"; import { useQuestStatusChanged } from "./ContentImpressionTrackerHooks"; import { useStateFromStores } from "../../../../_bundle/Module589"; import useMountEffect from "../../../../hooks/useMountEffect"; function $mk118168($env) { return (a0, a1) => { const r10 = $env; const r32 = $env.$parent[0]; let metadata_sealed = getAdMetadataSealed(r32.sourceQuestContent, a0); const shouldExtendSession2 = r32.shouldExtendSession(a0); r32.trackViewedPlacement(a0); const migrateQuestContentViewedToCaptureAdUserAction = r32.migrateQuestContentViewedToCaptureAdUserAction; const adCreativeType = r32.entity.adCreativeType; const QUEST = AdCreativeType.QUEST; if (migrateQuestContentViewedToCaptureAdUserAction) { if (adCreativeType === QUEST) { const r151 = r32.entity.adContentIds[a1]; const quest2 = QuestStore.getQuest(r151); if (!(quest2 == null || isQuestExpired(quest2))) { markAdContentSeen(AdCreativeType.QUEST, [r151]); } } r32.entity.adCreativeType; AdCreativeType.QUEST; const r177 = { adCreativeType: r32.entity.adCreativeType, adCreativeId: r32.entity.adContentIds[a1] }; captureAdUserAction({ type: isBillableQuestContent(r32.questContent) ? AdUserActionType.VIEW_EXTERNAL_PAID_AD_PLACEMENT_IMPRESSION : AdUserActionType.VIEW_INTERNAL_SURFACE_IMPRESSION, surfaceId: r32.questContent, sourceQuestContent: r32.sourceQuestContent, impressionId: r32.id, triggeredByStatusChange: r32.triggeredByStatusChange, minViewTimeSeconds: r32.minViewTimeSeconds, minViewportPercentage: r32.minViewportPercentage, isQuestEnrollmentBlocked: r32.isQuestEnrollmentBlocked, shouldExtendSession: shouldExtendSession2, adUser: r10[0], questContentPosition: r32.questContentPosition, questContentRowIndex: r32.questContentRowIndex, trackGuildAndChannelMetadata: r32.trackGuildAndChannelMetadata, ...r177 }); getQuestLogger().info(`${a0} ad content viewed for at least ${r32.minViewTimeSeconds}s at ${getQuestContentName(r32.questContent)}`, { impressionId: r32.id }); return void 0; } if (adCreativeType === QUEST) { const questId = r32.entity.adContentIds[a1]; const quest = QuestStore.getQuest(questId); if (!(quest == null || isQuestExpired(quest))) { markAdContentSeen(AdCreativeType.QUEST, [questId]); } const questLogger = getQuestLogger(); let r24 = quest == null ? void 0 : quest.config.messages.questName; if (r24 == null) { r24 = questId; } questLogger.info(`${r24} Quest viewed for at least ${r32.minViewTimeSeconds}s at ${getQuestContentName(r32.questContent)}`, { impressionId: r32.id }); const properties = { ...r10[2], ...r32.commonProperties() }; if (metadata_sealed == null) { metadata_sealed = null; } properties.metadata_sealed = metadata_sealed; let search_session_id = getCurrentQuestHomeSearchSession()?.uuid; if (search_session_id == null) { search_session_id = null; } properties.search_session_id = search_session_id; let traffic_metadata_sealed = getAdTrafficMetadataSealed(r32.sourceQuestContent, quest?.id); if (traffic_metadata_sealed == null) { traffic_metadata_sealed = null; } properties.traffic_metadata_sealed = traffic_metadata_sealed; trackQuestEvent({ ...r10[1], shouldExtendSession: shouldExtendSession2, questId, event: AnalyticEvents.QUEST_CONTENT_VIEWED, properties }); } else { const adContentId = r32.entity.adContentIds[a1]; getQuestLogger().info(`${adContentId} ad content viewed for at least ${r32.minViewTimeSeconds}s at ${getQuestContentName(r32.questContent)}`, { impressionId: r32.id }); trackAdContentEvent({ ...r10[1], shouldExtendSession: shouldExtendSession2, adContentId, adCreativeType: r32.entity.adCreativeType, event: AnalyticEvents.QUEST_CONTENT_VIEWED, properties: { ...r10[2], ...r32.commonProperties() } }); } }; } let QuestContentImpression, c7042_13; let env7042 = {}; const c7042_11 = new Set(); const c7042_14 = class QuestContentImpression { constructor(a0) { let env18074; const _this = this; this.isRunning = false; this.trackViewedPlacement = (a0) => { const questPlacementFromQuestContent = getQuestPlacementFromQuestContent(_this.questContent); if (questPlacementFromQuestContent != null && isBillableQuestContent(_this.questContent)) { c7042_11.add(`${a0}_${questPlacementFromQuestContent}`); } }; this.shouldExtendSession = (a0) => { const questPlacementFromQuestContent = getQuestPlacementFromQuestContent(_this.questContent); return questPlacementFromQuestContent != null && !c7042_11.has(`${a0}_${questPlacementFromQuestContent}`) && isBillableQuestContent(_this.questContent); }; env18074 = { $parent: env7042 }; env18074[0] = this; this.onMinViewTimeReached = async () => { let env31534; const r25 = env18074; let c30234_1 = r25; const r9 = env31534 = { $parent: r25 }; let c30234_0 = r9; env31534[0] = void 0; env31534[1] = void 0; env31534[2] = void 0; env31534[0] = await getAdUser(getQuestContentName(env18074[0].questContent)); env31534[1] = { trackGuildAndChannelMetadata: env18074[0].trackGuildAndChannelMetadata, sourceQuestContent: env18074[0].sourceQuestContent }; const apple_advertising_id = env31534[0] != null ? isIOS() ? env31534[0].advertisingId : null : null; const android_advertising_id = env31534[0] != null ? isAndroid() ? env31534[0].advertisingId : null : null; env31534[2] = { min_view_time_seconds: env18074[0].minViewTimeSeconds, min_viewport_percentage: env18074[0].minViewportPercentage, triggered_by_status_change: env18074[0].triggeredByStatusChange, apple_advertising_id, android_advertising_id, ...getDeviceMetadata_native(), ...getBrandSafetyContext(env18074[0].questContent) }; env18074[0].entity.adContentIds.forEach($mk118168(c30234_0)); const r108 = env18074[0]; const onImpressionCallback = r108.onImpressionCallback; if (onImpressionCallback != null) { onImpressionCallback.call(r108); } }; this.beat = function beat(is_termination_beat = false) { let c26698_1, c26698_2, c26698_3; let c26698_0 = is_termination_beat; c26698_1 = void 0; c26698_2 = void 0; c26698_3 = void 0; if (_this.lastBeatTime != null) { const viewed_time_ms = Math.round(Date.now() - _this.lastBeatTime); c26698_1 = viewed_time_ms; c26698_2 = { trackGuildAndChannelMetadata: _this.trackGuildAndChannelMetadata, sourceQuestContent: _this.sourceQuestContent }; c26698_3 = { is_termination_beat, viewed_time_ms, triggered_by_status_change: _this.triggeredByStatusChange }; _this.entity.adContentIds.forEach((a0, index) => { if (_this.entity.adCreativeType === AdCreativeType.QUEST) { const questId = _this.entity.adContentIds[index]; const quest = QuestStore.getQuest(questId); const questLogger = getQuestLogger(); let r73 = quest == null ? void 0 : quest.config.messages.questName; if (r73 == null) { r73 = questId; } questLogger.info(`${r73} Quest impression ${c26698_0 ? "terminal " : ""}heartbeat: ${c26698_1}ms since last heartbeat`, { impressionId: _this.id }); trackQuestEvent({ ...c26698_2, questId, event: AnalyticEvents.QUEST_CONTENT_VIEW_TIME, properties: { ...c26698_3, ..._this.commonProperties() } }); } else { const adContentId = _this.entity.adContentIds[index]; getQuestLogger().info(`${adContentId} ad content impression ${c26698_0 ? "terminal " : ""}heartbeat: ${c26698_1}ms since last heartbeat`, { impressionId: _this.id }); trackAdContentEvent({ ...c26698_2, adContentId, adCreativeType: _this.entity.adCreativeType, event: AnalyticEvents.QUEST_CONTENT_VIEW_TIME, properties: { ...c26698_3, ..._this.commonProperties() } }); } }); } _this.lastBeatTime = Date.now(); }; this.commonProperties = () => ({ impression_id: _this.id, is_quest_enrollment_blocked: _this.isQuestEnrollmentBlocked, ...getContentProperties(_this.questContent, _this.questContentPosition, _this.questContentRowIndex) }); this.clone = ({ triggeredByStatusChange }) => { _this.stop(); return new c7042_14({ questContent: _this.questContent, questContentRowIndex: _this.questContentRowIndex, questContentPosition: _this.questContentPosition, trackGuildAndChannelMetadata: _this.trackGuildAndChannelMetadata, triggeredByStatusChange, isQuestEnrollmentBlocked: _this.isQuestEnrollmentBlocked, onImpression: _this.onImpressionCallback, sourceQuestContent: _this.sourceQuestContent, ..._this.entity }); }; this.start = () => { let c26699_0, c26699_1; _this.stop(false); _this.lastBeatTime = Date.now(); _this.heartbeatTimeoutId = window.setInterval(() => _this.beat(), 1000 * HEARTBEAT_SECONDS); _this.minViewTimeReachedTimeoutId = window.setTimeout(_this.onMinViewTimeReached, 1000 * _this.minViewTimeSeconds); c26699_0 = { trackGuildAndChannelMetadata: _this.trackGuildAndChannelMetadata, sourceQuestContent: _this.sourceQuestContent }; c26699_1 = { triggered_by_status_change: _this.triggeredByStatusChange }; _this.entity.adContentIds.forEach((a0, index) => { let metadata_sealed = getAdMetadataSealed(_this.sourceQuestContent, a0); const migrateQuestContentLoadedToCaptureAdUserAction = _this.migrateQuestContentLoadedToCaptureAdUserAction; const adCreativeType = _this.entity.adCreativeType; const QUEST = AdCreativeType.QUEST; if (migrateQuestContentLoadedToCaptureAdUserAction) { captureAdUserAction({ type: AdUserActionType.END_CONTENT_LOAD, surfaceId: _this.questContent, sourceQuestContent: _this.sourceQuestContent, impressionId: _this.id, triggeredByStatusChange: _this.triggeredByStatusChange, trackGuildAndChannelMetadata: _this.trackGuildAndChannelMetadata, questContentPosition: _this.questContentPosition, questContentRowIndex: _this.questContentRowIndex, ...{ adCreativeType: _this.entity.adCreativeType, adCreativeId: _this.entity.adContentIds[index] } }); } else if (adCreativeType === QUEST) { const questId = _this.entity.adContentIds[index]; const quest = QuestStore.getQuest(questId); const questLogger = getQuestLogger(); let r18 = quest == null ? void 0 : quest.config.messages.questName; if (r18 == null) { r18 = questId; } questLogger.info(`${r18} Quest became visible at ${getQuestContentName(_this.questContent)}`, { impressionId: _this.id }); if (metadata_sealed == null) { metadata_sealed = null; } const properties = { ...c26699_1, metadata_sealed, ..._this.commonProperties() }; let traffic_metadata_sealed = getAdTrafficMetadataSealed(_this.sourceQuestContent, quest?.id); if (traffic_metadata_sealed == null) { traffic_metadata_sealed = null; } properties.traffic_metadata_sealed = traffic_metadata_sealed; trackQuestEvent({ ...c26699_0, questId, event: AnalyticEvents.QUEST_CONTENT_LOADED, properties }); } else { const adContentId = _this.entity.adContentIds[index]; getQuestLogger().info(`${adContentId} ad content became visible at ${getQuestContentName(_this.questContent)}`, { impressionId: _this.id }); trackAdContentEvent({ ...c26699_0, adContentId, adCreativeType: _this.entity.adCreativeType, event: AnalyticEvents.QUEST_CONTENT_LOADED, properties: { ...c26699_1, ..._this.commonProperties() } }); } }); MonitoringAgent.increment({ name: MetricEvents.QUEST_CONTENT_IMPRESSION, tags: [`quest_content:${getQuestContentName(_this.questContent)}`] }); _this.isRunning = true; }; this.stop = function stop(r3 = true) { if (r3) { _this.beat(true); } _this.lastBeatTime = void 0; clearInterval(_this.heartbeatTimeoutId); clearTimeout(_this.minViewTimeReachedTimeoutId); _this.isRunning = false; }; const { adContentIds, adCreativeType, questContent, triggeredByStatusChange, trackGuildAndChannelMetadata, questContentPosition, questContentRowIndex, minViewTimeSeconds = MIN_QUEST_VIEW_TIME_SECONDS, isQuestEnrollmentBlocked, onImpression, sourceQuestContent: sourceQuestContent2 } = a0; this.id = v4(); this.questContent = questContent; this.questContentPosition = questContentPosition; this.minViewTimeSeconds = minViewTimeSeconds; this.minViewportPercentage = MIN_QUEST_CONTENT_VISIBILITY_PERCENTAGE; this.trackGuildAndChannelMetadata = trackGuildAndChannelMetadata; this.triggeredByStatusChange = triggeredByStatusChange; this.questContentRowIndex = questContentRowIndex; this.isQuestEnrollmentBlocked = isQuestEnrollmentBlocked; this.onImpressionCallback = onImpression; this.sourceQuestContent = sourceQuestContent2; this.migrateQuestContentLoadedToCaptureAdUserAction = shouldMigrateToAdAnalyticsInterface(AdAnalyticsInterfaceExperimentStep.STEP_1_LOADED, "quest_content_impression"); this.migrateQuestContentViewedToCaptureAdUserAction = shouldMigrateToAdAnalyticsInterface(isBillableQuestContent(questContent) ? AdAnalyticsInterfaceExperimentStep.STEP_5_VIEWED_IMPRESSION : AdAnalyticsInterfaceExperimentStep.STEP_4_VIEWED_NON_IMPRESSION, "quest_content_impression"); AdCreativeType.QUEST; this.entity = { adContentIds, adCreativeType }; } getId() { return this.id; } getQuestContentPosition() { return this.questContentPosition; } }; QuestContentImpression = c7042_14; const context = createContext(void 0); c7042_13 = context; export { c7042_14 as QuestContentImpression }; export { context as QuestImpressionContext }; export function QuestContentImpressionTracker(a0) { const { visible, visibleChanged, focused, reference, focusedChanged, sourceQuestContent } = a0; const questStatusChanged = useQuestStatusChanged(a0); const ref = useRef(null); const stateFromStores = useStateFromStores([QuestStore], () => QuestStore.questEnrollmentBlockedUntil != null, []); useMountEffect(() => () => { if (ref.current != null) { ref.current.stop(); } }); useEffect(() => { let r5 = focused; if (focused) { r5 = visible; } let r4 = visibleChanged; const r2 = ((visibleChanged ? visibleChanged : focusedChanged) || questStatusChanged) && r5; let r3 = r2; if (!r3) { if (!visibleChanged) { r4 = focusedChanged; } if (r4) { r4 = !r5; } r3 = r4; } if (!r3) { r3 = questStatusChanged; } if (r3) { r3 = ref.current != null; } if (r3) { ref.current.stop(); } if (r2) { const r19 = { isQuestEnrollmentBlocked: stateFromStores, minViewTimeSeconds: a0.minViewTimeSeconds, onImpression: a0.onImpression, questContent: a0.questContent, questContentPosition: a0.questContentPosition, questContentRowIndex: a0.questContentRowIndex, sourceQuestContent, trackGuildAndChannelMetadata: a0.trackGuildAndChannelMetadata, triggeredByStatusChange: questStatusChanged }; a0.adCreativeType; AdCreativeType.QUEST; ref.current = new QuestContentImpression({ ...r19, adContentIds: a0.adContentIds, adCreativeType: a0.adCreativeType }); ref.current.start(); } }, [focused, visible, focusedChanged, visibleChanged, a0.adContentIds, a0.onImpression, a0.questContent, a0.questContentPosition, a0.questContentRowIndex, a0.trackGuildAndChannelMetadata, questStatusChanged, a0.minViewTimeSeconds, stateFromStores, sourceQuestContent, a0.adCreativeType]); return (0, jsx)(c7042_13.Provider, { value: ref, children: a0.children(reference, ref) }); }