@aller/blink
Version:
A library for tracking user behaviour.
98 lines (92 loc) • 2.69 kB
text/typescript
import {
DFP_INSCREEN,
SCROLL_POS_AD_LOAD,
SCROLL_POS_INSCREEN_DFP,
SCROLL_POS_SLOT_RENDER_ENDED,
SCROLL_POS_SLOT_ONLOAD,
SCROLL_OFFSET_TOP,
SCROLL_OFFSET_HEIGHT,
DFP_NAME,
DFP_ADVERTISER_ID,
DFP_CAMPAIGN_ID,
DFP_CREATIVE_ID,
DFP_ADUNIT_PATH,
DFP_RENDERED,
DFP_LOADED,
DFP_LINE_ITEM_ID,
DFP_SIZE,
DFP_SOURCE_AGNOSTIC_LINE_ITEM_ID,
DFP_SOURCE_AGNOSTIC_CREATIVE_ID,
DFP_BIDDER,
} from './consts';
import generalData from '../utils/general-data';
import { calculateEventTime } from '../utils/event-time';
import { BlinkEvent } from '../types';
import { Page } from '../selectors/get-page-state';
export interface PrepareAdEventInput {
id: string;
page: Page;
utils: any;
time?: Date;
}
export default function prepareAdEvent(input: PrepareAdEventInput): BlinkEvent {
const { page, utils, id } = input;
const inscreenTime = calculateEventTime({
times: page.state.inscreen[id],
screenEvents: page.state.screen.events,
now: input.time,
});
const inscreenTime0 = calculateEventTime({
times: page.state.inscreen0[id],
screenEvents: page.state.screen.events,
now: input.time,
});
const { getScrollHeight } = utils;
const ad = page.state.ads[id] || {};
return {
...generalData(page.state),
id: id || 'N/A',
adId: id || 'N/A',
type: 'ads',
inscreenTime: inscreenTime || 0,
inscreenTime0: inscreenTime0 || 0,
scroll: {
pos: {
adLoad: ad[SCROLL_POS_AD_LOAD] || 0,
inscreenDFP: ad[SCROLL_POS_INSCREEN_DFP] || 0,
slotRenderEnded: ad[SCROLL_POS_SLOT_RENDER_ENDED] || 0,
slotOnload: ad[SCROLL_POS_SLOT_ONLOAD] || 0,
},
offsetTop: ad[SCROLL_OFFSET_TOP] || 0,
offsetHeight: ad[SCROLL_OFFSET_HEIGHT] || 0,
scrollHeight: getScrollHeight() || 0,
},
dfp: {
inscreen: ad[DFP_INSCREEN] || 0,
name: ad[DFP_NAME] || 'N/A',
advertiserId: ad[DFP_ADVERTISER_ID] || 0,
campaignId: ad[DFP_CAMPAIGN_ID] || 0,
creativeId: ad[DFP_CREATIVE_ID] || 0,
adUnitPath: ad[DFP_ADUNIT_PATH] || 'N/A',
rendered: ad[DFP_RENDERED] || 0,
loaded: ad[DFP_LOADED] || 0,
lineItemId: ad[DFP_LINE_ITEM_ID] || 0,
size: ad[DFP_SIZE] || [0],
sourceAgnosticCreativeId: ad[DFP_SOURCE_AGNOSTIC_CREATIVE_ID] || 0,
sourceAgnosticLineItemId: ad[DFP_SOURCE_AGNOSTIC_LINE_ITEM_ID] || 0,
bidder: ad[DFP_BIDDER] || null,
},
};
}
export function getAllAdEventsPrepared(
page: Page,
utils: any,
time: Date,
): BlinkEvent[] {
if (!page || !page.state) {
return [];
}
return Object.keys(page.state.ads).map(adId =>
prepareAdEvent({ id: adId, page, utils, time }),
);
}