// @flow import React from 'react'; import { VASTClient } from 'vast-client'; import analytics from 'analytics'; const PRE_ROLL_ADS_PROVIDER = 'https://tag.targeting.unrulymedia.com/rmp/216276/0/vast2?vastfw=vpaid&w=300&h=500&url='; // Ignores any call made 1 minutes or less after the last successful ad const ADS_CAP_LEVEL = 1 * 60 * 1000; const vastClient = new VASTClient(0, ADS_CAP_LEVEL); export function useGetAds(approvedVideo: boolean, adsEnabled: boolean): [?string, (?string) => void, boolean] { const [isFetching, setIsFetching] = React.useState(true); const [adUrl, setAdUrl] = React.useState(); // Fetch ads for all approved videos, even if we won't show ads to the user // Unruly needs more fetches before they will start returning ads ¯\_(ツ)_/¯ React.useEffect(() => { if (!approvedVideo) { setIsFetching(false); return; } analytics.adsFetchedEvent(); const encodedHref = encodeURI(window.location.href); const url = `${PRE_ROLL_ADS_PROVIDER}${encodedHref}`; // Used for testing on local dev // const url = 'https://raw.githubusercontent.com/dailymotion/vast-client-js/master/test/vastfiles/sample.xml'; vastClient .get(url) .then((res) => { if (res.ads.length > 0) { // Let this line error if res.ads is empty // I took this from an example response from Dailymotion // It will be caught below and sent to matomo to figure out if there if this needs to be something changed to deal with unrulys data const adUrl = res.ads[0].creatives[0].mediaFiles[0].fileURL; // Dummy video file // const adUrl = 'https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4'; if (adsEnabled && adUrl) { setAdUrl(adUrl); } } setIsFetching(false); }) .catch(() => { setIsFetching(false); }); }, [approvedVideo, adsEnabled]); return [adUrl, setAdUrl, isFetching]; }