UNPKG

@applicaster/zapp-react-native-utils

Version:

Applicaster Zapp React Native utilities package

60 lines (47 loc) 1.58 kB
type AdMap = { [key: string]: any; }; function pad(num: number): string { const s = num.toString(); return s.padStart(2, "0"); } function toHHMMSS(timeInSeconds: number): string { const hours = Math.floor(timeInSeconds / 3600); const minutes = Math.floor((timeInSeconds % 3600) / 60); const seconds = timeInSeconds % 60; return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}.000`; } function convertOffset(offset: any): string { if (typeof offset === "number") { return toHHMMSS(offset); } else if (typeof offset === "string") { if (offset === "postroll") { return "end"; } const floatOffset = parseFloat(offset); return isNaN(floatOffset) ? offset : toHHMMSS(floatOffset); } else { return toHHMMSS(0); } } function createAdBreak(ad: AdMap): string { const offset = ad["offset"]; const id = offset.toString(); const timestamp = convertOffset(offset); const url = ad["ad_url"].toString().trim(); return ` <vmap:AdBreak timeOffset="${timestamp}" breakType="linear" breakId="break-${id}"> <vmap:AdSource id="ad-${id}-ad-1" allowMultipleAds="true" followRedirects="true"> <vmap:AdTagURI templateType="vast3"> <![CDATA[ ${url} ]]> </vmap:AdTagURI> </vmap:AdSource> </vmap:AdBreak> `.trim(); } export function createVMAP(ads: AdMap[]): string { const header = '<vmap:VMAP xmlns:vmap="http://www.iab.net/videosuite/vmap" version="1.0">'; const footer = "</vmap:VMAP>"; return [header, ...ads.map(createAdBreak), footer].join("\n"); }