video-ad-sdk
Version:
VAST/VPAID SDK that allows video ads to be played on top of any player
71 lines (70 loc) • 3.95 kB
JavaScript
import { getClickTracking, getCustomClick, getImpression, getViewable, getNotViewable, getViewUndetermined, getLinearTrackingEvents } from '../vastSelectors';
import { pixelTracker } from './helpers/pixelTracker';
import { trackError } from './helpers/trackError';
import { trackIconView } from './helpers/trackIconView';
import { trackIconClick } from './helpers/trackIconClick';
import { trackProgress } from './helpers/trackProgress';
import { createVastEventTracker } from './helpers/createVastEventTracker';
import { clickThrough, closeLinear, complete, error, exitFullscreen, firstQuartile, fullscreen, iconClick, iconView, impression, viewable, notViewable, viewUndetermined, midpoint, mute, pause, playerCollapse, playerExpand, progress, resume, rewind, skip, start, thirdQuartile, unmute, creativeView } from './linearEvents';
const eventSelector = (...selectors) => (ad) => {
const trackingURIs = [];
if (selectors.length > 0) {
selectors.forEach((getElements) => {
const elements = getElements(ad);
/* istanbul ignore else */
if (Array.isArray(elements) && elements.length > 0) {
trackingURIs.push(...elements.map((uri) => ({ uri })));
}
});
}
return trackingURIs;
};
const linearTrackingEventSelector = (event) => (ad) => getLinearTrackingEvents(ad, event);
const linearTrackers = {
[ ]: createVastEventTracker(eventSelector(getClickTracking, getCustomClick)),
[ ]: createVastEventTracker(linearTrackingEventSelector(closeLinear)),
[ ]: createVastEventTracker(linearTrackingEventSelector(complete)),
[ ]: createVastEventTracker(linearTrackingEventSelector(creativeView)),
[ ]: trackError,
[ ]: createVastEventTracker(linearTrackingEventSelector(exitFullscreen)),
[ ]: createVastEventTracker(linearTrackingEventSelector(firstQuartile)),
[ ]: createVastEventTracker(linearTrackingEventSelector(fullscreen)),
[ ]: trackIconClick,
[ ]: trackIconView,
[ ]: createVastEventTracker(eventSelector(getImpression)),
[ ]: createVastEventTracker(linearTrackingEventSelector(midpoint)),
[ ]: createVastEventTracker(linearTrackingEventSelector(mute)),
[ ]: createVastEventTracker(eventSelector(getNotViewable)),
[ ]: createVastEventTracker(linearTrackingEventSelector(pause)),
[ ]: createVastEventTracker(linearTrackingEventSelector(playerCollapse)),
[ ]: createVastEventTracker(linearTrackingEventSelector(playerExpand)),
[ ]: trackProgress,
[ ]: createVastEventTracker(linearTrackingEventSelector(resume)),
[ ]: createVastEventTracker(linearTrackingEventSelector(rewind)),
[ ]: createVastEventTracker(linearTrackingEventSelector(skip)),
[ ]: createVastEventTracker(linearTrackingEventSelector(start)),
[ ]: createVastEventTracker(linearTrackingEventSelector(thirdQuartile)),
[ ]: createVastEventTracker(linearTrackingEventSelector(unmute)),
[ ]: createVastEventTracker(eventSelector(getViewable)),
[ ]: createVastEventTracker(eventSelector(getViewUndetermined))
};
/**
* Tracks the passed linear event.
*
* @param event name of the linear event we need to track. @see LinearEvents
* @param vastChain the ad VAST Chain.
* @param options Options Map. The allowed properties are:
*/
export const trackLinearEvent = (event, vastChain, { data, errorCode, tracker = pixelTracker, logger = console }) => {
const { [event]: linearTracker } = linearTrackers;
if (linearTracker) {
linearTracker(vastChain, {
data: Object.assign(Object.assign({}, data), { errorCode }),
errorCode,
tracker
});
}
else {
logger.error(`Event '${event}' cannot be tracked`);
}
};