@applicaster/zapp-react-native-utils
Version:
Applicaster Zapp React Native utilities package
60 lines (47 loc) • 1.58 kB
text/typescript
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");
}