prebid-universal-creative 1.16.0 → 1.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/.circleci/config.yml +44 -30
  2. package/.github/workflows/codeql.yml +98 -0
  3. package/README.md +2 -2
  4. package/dist/0df2612ebfffd5ad651a.max.js +1050 -0
  5. package/dist/amp.js +3 -3
  6. package/dist/banner.js +3 -3
  7. package/dist/creative.js +3 -3
  8. package/dist/load-cookie-with-consent.html +1 -1
  9. package/dist/load-cookie.html +1 -1
  10. package/dist/mobile.js +3 -3
  11. package/dist/native-render.js +3 -3
  12. package/dist/native-trk.js +3 -3
  13. package/dist/native.js +3 -3
  14. package/dist/uid.js +2 -2
  15. package/dist/video.js +3 -3
  16. package/gulpfile.js +12 -24
  17. package/integ-test/fixtures/test.js +79 -0
  18. package/integ-test/pages/amp.html +80 -0
  19. package/integ-test/pages/banner.html +96 -0
  20. package/integ-test/pages/native_legacy.html +107 -0
  21. package/integ-test/spec/amp_spec.js +111 -0
  22. package/integ-test/spec/banner_spec.js +85 -0
  23. package/integ-test/spec/native_legacy_spec.js +213 -0
  24. package/package.json +7 -13
  25. package/playwright.config.js +108 -0
  26. package/src/adHtmlRender.js +15 -0
  27. package/src/cookieSync.js +3 -0
  28. package/src/cookieSyncWithConsent.js +3 -0
  29. package/src/domHelper.js +25 -15
  30. package/src/dynamicRenderer.js +56 -0
  31. package/src/messaging.js +23 -2
  32. package/src/mobileAndAmpRender.js +17 -20
  33. package/src/nativeAssetManager.js +98 -79
  34. package/src/nativeORTBTrackerManager.js +1 -1
  35. package/src/nativeRenderManager.js +7 -12
  36. package/src/nativeTrackerManager.js +2 -2
  37. package/src/renderingManager.js +13 -19
  38. package/test/helpers/mocks.js +1 -0
  39. package/test/spec/dynamicRenderer_spec.js +167 -0
  40. package/test/spec/messaging_spec.js +98 -3
  41. package/test/spec/mobileAndAmpRender_spec.js +59 -66
  42. package/test/spec/nativeAssetManager_spec.js +73 -23
  43. package/test/spec/renderingManager_spec.js +20 -6
  44. package/webpack.conf.js +0 -1
  45. package/.nvmrc +0 -1
  46. package/dist/creative.max.js +0 -3102
  47. package/src/postscribeRender.js +0 -10
  48. package/test/e2e/specs/hello_world_banner_non_sf.spec.js +0 -14
  49. package/test/e2e/specs/outstream_non_sf.spec.js +0 -14
  50. package/test/e2e/specs/outstream_sf.spec.js +0 -14
  51. package/wdio.conf.js +0 -50
package/dist/native.js CHANGED
@@ -1,3 +1,3 @@
1
- /* prebid-universal-creative v1.16.0
2
- Updated : 2023-10-12 */
3
- !function(n){var r={};function a(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.m=n,a.c=r,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=2)}([function(e,t,n){"use strict";t.c=function(e,t){var n=new XMLHttpRequest;n.addEventListener("load",function(){t(n.responseText)}),n.open("GET",e),n.send()},t.a=function(e,t,n,r){var a=e.document,i=a.createElement("script");i.type="text/javascript",n&&"function"==typeof n&&(i.readyState?i.onreadystatechange=function(){"loaded"!==i.readyState&&"complete"!==i.readyState||(i.onreadystatechange=null,n())}:i.onload=function(){n()});r&&"function"==typeof r&&(i.onerror=function(){r()});i.src=t;var o=a.getElementsByTagName("head");(o=o.length?o:a.getElementsByTagName("body")).length&&(o=o[0]).insertBefore(i,o.firstChild);return i},t.b=function(e){var t=document.createElement("a");return t.href=decodeURIComponent(e),{href:t.href,protocol:(t.protocol||"").replace(/:$/,""),hostname:t.hostname,port:+t.port,pathname:t.pathname.replace(/^(?!\/)/,"/"),hash:(t.hash||"").replace(/^#/,""),host:(t.host||window.location.host).replace(/:(443|80)$/,"")}};n(6)},function(e,t,n){"use strict";t.a=function(t){var i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:window,o=function(){if(null==t)return null;var e=Object(r.b)(t);return e.protocol+"://"+e.host}();return function(e,t){if(null==o)throw new Error("Missing pubUrl");var n;if(e=JSON.stringify(e),null==t)i.parent.postMessage(e,o);else{var r=new MessageChannel;(n=r.port1).onmessage=t,i.addEventListener("message",a),i.parent.postMessage(e,o,[r.port2])}return function(){null!=n&&(i.removeEventListener("message",a),n.onmessage=null,n=null)};function a(e){(e.origin||e.originalEvent&&e.originalEvent.origin)===o&&t(e)}}};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(3),a=Object(r.a)(window);window.ucTag=window.ucTag||{},window.ucTag.renderAd=a.renderNativeAd},function(e,t,n){"use strict";t.a=function(i){var o,c=1<arguments.length&&void 0!==arguments[1]?arguments[1]:a.a,s=2<arguments.length&&void 0!==arguments[2]?arguments[2]:r.a;return{renderNativeAd:function(e,t){function n(e,t,n){o({message:"Prebid Event",adId:e,event:t?"adRenderSucceeded":"adRenderFailed",info:n})}window.pbNativeData=t,o=c(t.pubUrl,i);try{var r=s(window,t);if(null!=t.adId){if(t.hasOwnProperty("rendererUrl")&&!t.rendererUrl.match(/##.*##/i)){var a=e.createElement("SCRIPT");a.src=t.rendererUrl,a.id="pb-native-renderer",e.body.appendChild(a)}r.loadAssets(t.adId,function(){n(t.adId,!0)},function(e){n(t.adId,!1,{reason:"exception",message:e.message})})}else n(null,!1,{reason:"missingDocOrAdid"}),console.warn("Prebid Native Tag object was missing 'adId'.")}catch(e){n(t&&t.adId,!1,{reason:"exception",message:e.message}),console.error("Error rendering ad",e)}}}};var r=n(4),a=n(1)},function(e,t,n){"use strict";t.a=function(c,e){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:w.a;e.clickUrlUnesc&&e.clickUrlUnesc!==I&&(U=e.clickUrlUnesc);var s,d,a,n=e.pubUrl,l=t(n,c),u=0;function v(){null!=a&&(a(),a=null)}function i(e){var t;try{t=JSON.parse(e)}catch(e){console.log("Error parsing response from cache host: ".concat(e))}return t}function r(e){var t=e.uuid,n="".concat(function(e,t){var n=void 0===t||""===t?T:t;return"https://".concat(void 0===e||""===e?N:e).concat(n)}(e.cacheHost,e.cachePath),"?uuid=").concat(t);Object(_.c)(n,function(e){var t=i(e);if(t&&t.adm){var n=i(t.adm);if(n&&n.assets){var r=function(e){var t,n=[];return e.assets.forEach(function(e){e.img?E.image[e.img.type]?n.push({key:E.image[e.img.type],value:e.img.url}):console.log("ERROR: Invalid image type for image asset"):e.data?E.data[e.data.type]?n.push({key:E.data[e.data.type],value:e.data.value}):console.log("ERROR: Invalid data type for data asset"):e.title&&n.push({key:"title",value:e.title.text})}),e.link&&(e.link.clicktrackers&&(t=e.link.clicktrackers),n.push({key:"clickUrl",value:e.link.url})),{assets:n,clicktrackers:t,imptrackers:e.imptrackers,eventtrackers:e.eventtrackers}}(n),a=g(c.document.body.innerHTML,r);c.document.body.innerHTML=a,s&&s({clickTrackers:r.clicktrackers,impTrackers:r.imptrackers,eventtrackers:r.eventtrackers})}}})}function f(){return void 0!==c.pbNativeData}function p(e,t){return t&&!f()?"".concat(e,":").concat(t):f()?"##".concat(e,"##"):e}function h(s){for(var e=arguments.length,d=new Array(1<e?e-1:0),t=1;t<e;t++)d[t-1]=arguments[t];return Object.values(A).reduce(function(e,t){var n=p(t,s),r=!0,a=!1,i=void 0;try{for(var o,c=d.filter(Boolean)[Symbol.iterator]();!(r=(o=c.next()).done);r=!0){if(0<=o.value.indexOf(n)){e.push(t);break}}}catch(e){a=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(a)throw i}}return e},[])}function o(e){return h(e,c.document.body.innerHTML,c.document.head.innerHTML)}function b(e){try{var t={};try{t=JSON.parse(e.data)}catch(e){if(10<u++)throw v(),e;return}if("assetResponse"===t.message){t.clickUrlUnesc=U;var n=c.document.body.innerHTML,r=c.document.head.innerHTML;if(f()&&t.adId!==c.pbNativeData.adId)return;o=s,s=function(){Object(y.b)(t.adId,l),Object(y.a)(t.adId,l),o&&o()},r&&(c.document.head.innerHTML=g(r,t)),t.assets=t.assets||[];var a=t.assets;if(t.ortb&&(a.ortb=t.ortb),t.hasOwnProperty("rendererUrl")&&t.rendererUrl||f()&&c.pbNativeData.hasOwnProperty("rendererUrl"))if(c.renderAd)m(c.renderAd&&c.renderAd(a)||"",t);else document.getElementById("pb-native-renderer")?document.getElementById("pb-native-renderer").addEventListener("load",function(){m(c.renderAd&&c.renderAd(a)||"",t)}):Object(_.a)(c,f()&&c.pbNativeData.hasOwnProperty("rendererUrl")&&c.pbNativeData.rendererUrl||t.rendererUrl,function(){m(c.renderAd&&c.renderAd(a)||"",t)});else if(t.hasOwnProperty("adTemplate")&&t.adTemplate||f()&&c.pbNativeData.hasOwnProperty("adTemplate")){m(g(f()&&c.pbNativeData.hasOwnProperty("adTemplate")&&c.pbNativeData.adTemplate||t.adTemplate,t),t)}else{var i=g(n,t);c.document.body.innerHTML=i,s&&s(),v()}}}catch(e){d&&d(e)}var o}function m(e,t){if(!Object(k.a)(window)){var n=function(e){for(var t,n=e;n!==e.top;){if(!(t=n.parent).frames||!t.frames.length)return null;for(var r=0;r<t.frames.length;r++)if(t.frames[r]===n){if(!t.document)return null;var a=!0,i=!1,o=void 0;try{for(var c,s=t.document.getElementsByTagName("iframe")[Symbol.iterator]();!(a=(c=s.next()).done);a=!0){var d=c.value;if(!d.contentWindow)return null;if(d.contentWindow===n)return d.parentElement}}catch(e){i=!0,o=e}finally{try{a||null==s.return||s.return()}finally{if(i)throw o}}}}}(c);if(n&&n.children&&n.children[0]){var r=n.children[0];if("1"===r.width&&"1"===r.height){var a=n.getBoundingClientRect().width;c.document.body.style.width="".concat(a,"px")}}}e=e.replaceAll(I,t.clickUrlUnesc||""),c.document.body.innerHTML+=e,s&&s(),c.removeEventListener("message",b),v();function i(){return function(e,t,n){l({message:"Prebid Native",action:"resizeNativeHeight",adId:e,height:t,width:n})}(t.adId,document.body.clientHeight||document.body.offsetHeight,document.body.clientWidth)}"complete"===document.readyState?i():window.onload=i,"function"==typeof window.postRenderAd&&window.postRenderAd(t)}function g(a,e){var i=e.assets,t=e.ortb,o=e.adId;if(t)a=function(t,e){return e.assets.forEach(function(e){t=t.replaceAll("##hb_native_asset_id_".concat(e.id,"##"),function(e){return e.img?e.img.url:e.data?e.data.value:e.title?e.title.text:e.video?e.video.vasttag:""}(e)),e.link&&e.link.url&&(t=t.replaceAll("##hb_native_asset_link_id_".concat(e.id,"##"),e.link.url))}),t=t.replaceAll(/##hb_native_asset_id_\d+##/gm,""),e.privacy&&(t=t.replaceAll("##hb_native_privacy##",e.privacy)),e.link&&(t=t.replaceAll("##hb_native_linkurl##",e.link.url)),t}(a,t);else if(!Array.isArray(i))return a;return i=i||[],h(o,a).forEach(function(t){var e=p(t,o),n=new RegExp(e,"g"),r=i.find(function(e){return t===A[e.key]});a=a.replace(n,r?r.value:"")}),a}return{loadAssets:function(e,t,n){d=n;var r=o(e);f()&&c.pbNativeData.hasOwnProperty("assetsToReplace")&&c.pbNativeData.assetsToReplace.forEach(function(e){var t=e.match(/hb_native_/i)?e:A[e];t&&r.push(t)}),f()&&c.pbNativeData.hasOwnProperty("requestAllAssets")&&c.pbNativeData.requestAllAssets?(s=t,a=function(e){return l({message:"Prebid Native",action:"allAssetRequest",adId:e},b)}(e)):0<r.length?(s=t,a=function(e,t){return l({message:"Prebid Native",action:"assetRequest",adId:e,assets:t},b)}(e,r)):n&&n(new Error("No assets to load: no placeholders found in template"))},loadMobileAssets:function(e,t){0<o().length&&(s=t,r(e))}}};var y=n(5),_=n(0),w=n(1),k=n(7),A={title:"hb_native_title",body:"hb_native_body",body2:"hb_native_body2",privacyLink:"hb_native_privacy",privacyIcon:"hb_native_privicon",sponsoredBy:"hb_native_brand",image:"hb_native_image",icon:"hb_native_icon",clickUrl:"hb_native_linkurl",displayUrl:"hb_native_displayurl",cta:"hb_native_cta",rating:"hb_native_rating",address:"hb_native_address",downloads:"hb_native_downloads",likes:"hb_native_likes",phone:"hb_native_phone",price:"hb_native_price",salePrice:"hb_native_saleprice",rendererUrl:"hb_renderer_url"},E={image:{1:"icon",3:"image"},data:{1:"sponsoredBy",2:"body",3:"rating",4:"likes",5:"downloads",6:"price",7:"salePrice",8:"phone",9:"address",10:"body2",11:"displayUrl",12:"cta"}},N="prebid.adnxs.com",T="/pbc/v1/cache",I="%%CLICK_URL_UNESC%%",U=""},function(e,t,n){"use strict";t.b=function(e,t){t({message:"Prebid Native",action:"fireNativeImpressionTrackers",adId:e})},t.a=function(e,r){for(var a={message:"Prebid Native",action:"click",adId:e},t=document.getElementsByClassName(i)||[],n=0;n<t.length;n++)t[n].addEventListener("click",function(e){var t=e.target,n=t&&t.getAttribute(o);a.assetId=n,r(a)},!0)};n(0);var i="pb-click",o="hb_native_asset_id"},function(e,t,n){"use strict";t.a=function(e,t){var n=document.createElement("iframe");return n.setAttribute("frameborder",0),n.setAttribute("scrolling","no"),n.setAttribute("marginheight",0),n.setAttribute("marginwidth",0),n.setAttribute("TOPMARGIN",0),n.setAttribute("LEFTMARGIN",0),n.setAttribute("allowtransparency","true"),n.setAttribute("width",t),n.setAttribute("height",e),n}},function(e,t,n){"use strict";t.a=function(e){return!(!e.$sf||!e.$sf.ext)}}]);
1
+ /* prebid-universal-creative v1.17.1
2
+ Updated : 2025-03-19 */
3
+ !function(n){var r={};function a(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.m=n,a.c=r,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=3)}([function(e,t,n){"use strict";t.c=function(e,t){var n=new XMLHttpRequest;n.addEventListener("load",function(){t(n.responseText)}),n.open("GET",e),n.send()},t.a=function(e,t,n,r){var a=e.document,i=a.createElement("script");i.type="text/javascript",n&&"function"==typeof n&&(i.readyState?i.onreadystatechange=function(){"loaded"!==i.readyState&&"complete"!==i.readyState||(i.onreadystatechange=null,n())}:i.onload=function(){n()});r&&"function"==typeof r&&(i.onerror=function(){r()});i.src=t;var o=a.getElementsByTagName("head");(o=o.length?o:a.getElementsByTagName("body")).length&&(o=o[0]).insertBefore(i,o.firstChild);return i},t.b=function(e){var t=document.createElement("a");return t.href=decodeURIComponent(e),{href:t.href,protocol:(t.protocol||"").replace(/:$/,""),hostname:t.hostname,port:+t.port,pathname:t.pathname.replace(/^(?!\/)/,"/"),hash:(t.hash||"").replace(/^#/,""),host:(t.host||window.location.host).replace(/:(443|80)$/,"")}};n(2)},function(e,t,n){"use strict";t.a=function(t){var i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:window,o=function(){if(null==t)return null;var e=Object(r.b)(t);return e.protocol+"://"+e.host}();function e(e){return e&&e.frames&&e.frames.__pb_locator__}var c=i.parent;try{for(;null!=c&&c!==i.top&&!e(c);)c=c.parent;e(c)||(c=i.parent)}catch(e){}return function(e,t){if(null==o)throw new Error("Missing pubUrl");var n;if(e=JSON.stringify(e),null==t)c.postMessage(e,o);else{var r=new MessageChannel;(n=r.port1).onmessage=t,i.addEventListener("message",a),c.postMessage(e,o,[r.port2])}return function(){null!=n&&(i.removeEventListener("message",a),n.onmessage=null,n=null)};function a(e){(e.origin||e.originalEvent&&e.originalEvent.origin)===o&&t(e)}}},t.b=function(e,t){return a({adId:e,message:i,event:t?c:o},t?{info:t}:null)};var r=n(0);function a(){return(a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var i="Prebid Event",o="adRenderSucceeded",c="adRenderFailed"},function(e,t,n){"use strict";function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var n=[],r=!0,a=!1,i=void 0;try{for(var o,c=e[Symbol.iterator]();!(r=(o=c.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){a=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(a)throw i}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function r(){return(r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function a(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},a=e.createElement("iframe");return Object.entries(r({frameborder:0,scrolling:"no",marginheight:0,marginwidth:0,TOPMARGIN:0,LEFTMARGIN:0,allowtransparency:"true"},t)).forEach(function(e){var t=i(e,2),n=t[0],r=t[1];a.setAttribute(n,r)}),a}t.b=a,t.a=function(e,t){return a(document,{height:e,width:t})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(4),a=Object(r.a)(window);window.ucTag=window.ucTag||{},window.ucTag.renderAd=a.renderNativeAd},function(e,t,n){"use strict";t.a=function(i){var o,c=1<arguments.length&&void 0!==arguments[1]?arguments[1]:d.a,s=2<arguments.length&&void 0!==arguments[2]?arguments[2]:r.a;return{renderNativeAd:function(e,t){function n(e,t){o(Object(d.b)(e,t))}window.pbNativeData=t,o=c(t.pubUrl,i);try{var r=s(window,t);if(null!=t.adId){if(t.hasOwnProperty("rendererUrl")&&!t.rendererUrl.match(/##.*##/i)){var a=e.createElement("SCRIPT");a.src=t.rendererUrl,a.id="pb-native-renderer",e.body.appendChild(a)}r.loadAssets(t.adId,function(){n(t.adId)},function(e){n(t.adId,{reason:"exception",message:e.message})})}else n(null,{reason:"missingDocOrAdid"}),console.warn("Prebid Native Tag object was missing 'adId'.")}catch(e){n(t&&t.adId,{reason:"exception",message:e.message}),console.error("Error rendering ad",e)}}}};var r=n(5),d=n(1)},function(e,t,n){"use strict";t.a=function(s,e){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:w.a;e.clickUrlUnesc&&e.clickUrlUnesc!==I&&(U=e.clickUrlUnesc);var d,l,a,n=e.pubUrl,u=t(n,s),f=0;function v(){null!=a&&(a(),a=null)}function i(e){var t;try{t=JSON.parse(e)}catch(e){console.log("Error parsing response from cache host: ".concat(e))}return t}function r(e){var t=e.uuid,n="".concat(function(e,t){var n=void 0===t||""===t?T:t;return"https://".concat(void 0===e||""===e?N:e).concat(n)}(e.cacheHost,e.cachePath),"?uuid=").concat(t);Object(_.c)(n,function(e){var t=i(e);if(t&&t.adm){var n=i(t.adm);if(n&&n.assets){var r=function(e){var t,n=[];return e.assets.forEach(function(e){e.img?E.image[e.img.type]?n.push({key:E.image[e.img.type],value:e.img.url}):console.log("ERROR: Invalid image type for image asset"):e.data?E.data[e.data.type]?n.push({key:E.data[e.data.type],value:e.data.value}):console.log("ERROR: Invalid data type for data asset"):e.title&&n.push({key:"title",value:e.title.text})}),e.link&&(e.link.clicktrackers&&(t=e.link.clicktrackers),n.push({key:"clickUrl",value:e.link.url})),{assets:n,clicktrackers:t,imptrackers:e.imptrackers,eventtrackers:e.eventtrackers}}(n),a=y(s.document.body.innerHTML,r);s.document.body.innerHTML=a,d&&d({clickTrackers:r.clicktrackers,impTrackers:r.imptrackers,eventtrackers:r.eventtrackers})}}})}function p(){return void 0!==s.pbNativeData}function h(e,t){return t&&!p()?"".concat(e,":").concat(t):p()?"##".concat(e,"##"):e}function c(s){for(var e=arguments.length,d=new Array(1<e?e-1:0),t=1;t<e;t++)d[t-1]=arguments[t];return Object.values(A).reduce(function(e,t){var n=h(t,s),r=!0,a=!1,i=void 0;try{for(var o,c=d.filter(Boolean)[Symbol.iterator]();!(r=(o=c.next()).done);r=!0){if(0<=o.value.indexOf(n)){e.push(t);break}}}catch(e){a=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(a)throw i}}return e},[])}function o(e){return c(e,s.document.body.innerHTML,s.document.head.innerHTML)}function b(c){return function(e){try{var t={};try{t=JSON.parse(e.data)}catch(e){if(10<f++)throw v(),e;return}if("assetResponse"===t.message&&t.adId===c){if(Object(O.a)(t))return void Object(O.b)(c,t,u,s);t.clickUrlUnesc=U;var n=s.document.body.innerHTML,r=s.document.head.innerHTML;o=d,d=function(){Object(g.b)(t.adId,u),Object(g.a)(t.adId,u),o&&o()},r&&(s.document.head.innerHTML=y(r,t)),t.assets=t.assets||[];var a=t.assets;if(t.ortb&&(a.ortb=t.ortb),t.hasOwnProperty("rendererUrl")&&t.rendererUrl||p()&&s.pbNativeData.hasOwnProperty("rendererUrl"))if(s.renderAd)m(s.renderAd&&s.renderAd(a)||"",t);else document.getElementById("pb-native-renderer")?document.getElementById("pb-native-renderer").addEventListener("load",function(){m(s.renderAd&&s.renderAd(a)||"",t)}):Object(_.a)(s,p()&&s.pbNativeData.hasOwnProperty("rendererUrl")&&s.pbNativeData.rendererUrl||t.rendererUrl,function(){m(s.renderAd&&s.renderAd(a)||"",t)});else if(t.hasOwnProperty("adTemplate")&&t.adTemplate||p()&&s.pbNativeData.hasOwnProperty("adTemplate")){m(y(p()&&s.pbNativeData.hasOwnProperty("adTemplate")&&s.pbNativeData.adTemplate||t.adTemplate,t),t)}else{var i=y(n,t);s.document.body.innerHTML=i,d&&d(),v()}}}catch(e){l&&l(e)}var o}}function m(e,t){if(!Object(k.a)(window)){var n=function(e){try{for(var t,n=e;n!==e.top;){if(!(t=n.parent).frames||!t.frames.length)return null;for(var r=0;r<t.frames.length;r++)if(t.frames[r]===n){if(!t.document)return null;var a=!0,i=!1,o=void 0;try{for(var c,s=t.document.getElementsByTagName("iframe")[Symbol.iterator]();!(a=(c=s.next()).done);a=!0){var d=c.value;if(!d.contentWindow)return null;if(d.contentWindow===n)return d.parentElement}}catch(e){i=!0,o=e}finally{try{a||null==s.return||s.return()}finally{if(i)throw o}}}}}catch(e){}}(s);if(n&&n.children&&n.children[0]){var r=n.children[0];if("1"===r.width&&"1"===r.height){var a=n.getBoundingClientRect().width;s.document.body.style.width="".concat(a,"px")}}}e=e.replaceAll(I,t.clickUrlUnesc||""),s.document.body.innerHTML+=e,d&&d(),v();function i(){return function(e,t,n){u({message:"Prebid Native",action:"resizeNativeHeight",adId:e,height:t,width:n})}(t.adId,document.body.clientHeight||document.body.offsetHeight,1<document.body.clientWidth?document.body.clientWidth:void 0)}"complete"===document.readyState?i():window.onload=i,"function"==typeof window.postRenderAd&&window.postRenderAd(t)}function y(a,e){var i=e.assets,t=e.ortb,o=e.adId;if(t)a=function(t,e){return e.assets.forEach(function(e){t=t.replaceAll("##hb_native_asset_id_".concat(e.id,"##"),function(e){return e.img?e.img.url:e.data?e.data.value:e.title?e.title.text:e.video?e.video.vasttag:""}(e)),e.link&&e.link.url&&(t=t.replaceAll("##hb_native_asset_link_id_".concat(e.id,"##"),e.link.url))}),t=t.replaceAll(/##hb_native_asset_id_\d+##/gm,""),e.privacy&&(t=t.replaceAll("##hb_native_privacy##",e.privacy)),e.link&&(t=t.replaceAll("##hb_native_linkurl##",e.link.url)),t}(a,t);else if(!Array.isArray(i))return a;return i=i||[],c(o,a).forEach(function(t){var e=h(t,o),n=new RegExp(e,"g"),r=i.find(function(e){return t===A[e.key]});a=a.replace(n,r?r.value:"")}),a}return{loadAssets:function(e,t,n){l=n;var r=o(e);p()&&s.pbNativeData.hasOwnProperty("assetsToReplace")&&s.pbNativeData.assetsToReplace.forEach(function(e){var t=e.match(/hb_native_/i)?e:A[e];t&&r.push(t)}),p()&&s.pbNativeData.hasOwnProperty("requestAllAssets")&&s.pbNativeData.requestAllAssets?(d=t,a=function(e){return u({message:"Prebid Native",action:"allAssetRequest",adId:e},b(e))}(e)):0<r.length?(d=t,a=function(e,t){return u({message:"Prebid Native",action:"assetRequest",adId:e,assets:t},b(e))}(e,r)):n&&n(new Error("No assets to load: no placeholders found in template"))},loadMobileAssets:function(e,t){0<o().length&&(d=t,r(e))}}};var g=n(6),_=n(0),w=n(1),k=n(7),O=n(8),A={title:"hb_native_title",body:"hb_native_body",body2:"hb_native_body2",privacyLink:"hb_native_privacy",privacyIcon:"hb_native_privicon",sponsoredBy:"hb_native_brand",image:"hb_native_image",icon:"hb_native_icon",clickUrl:"hb_native_linkurl",displayUrl:"hb_native_displayurl",cta:"hb_native_cta",rating:"hb_native_rating",address:"hb_native_address",downloads:"hb_native_downloads",likes:"hb_native_likes",phone:"hb_native_phone",price:"hb_native_price",salePrice:"hb_native_saleprice",rendererUrl:"hb_renderer_url"},E={image:{1:"icon",3:"image"},data:{1:"sponsoredBy",2:"body",3:"rating",4:"likes",5:"downloads",6:"price",7:"salePrice",8:"phone",9:"address",10:"body2",11:"displayUrl",12:"cta"}},N="prebid.adnxs.com",T="/pbc/v1/cache",I="%%CLICK_URL_UNESC%%",U=""},function(e,t,n){"use strict";t.b=function(e,t){t({message:"Prebid Native",action:"fireNativeImpressionTrackers",adId:e})},t.a=function(e,r){for(var a={message:"Prebid Native",action:"click",adId:e},t=document.getElementsByClassName(i)||[],n=0;n<t.length;n++)t[n].addEventListener("pointerdown",function(e){var t=e.target,n=t&&t.getAttribute(o);a.assetId=n,r(a)},!0)};n(0);var i="pb-click",o="hb_native_asset_id"},function(e,t,n){"use strict";t.a=function(e){return!(!e.$sf||!e.$sf.ext)}},function(e,t,n){"use strict";t.a=function(e){return"string"==typeof e.renderer&&parseInt(e.rendererVersion,10)>=a},t.b=function(i,o,c){var s=3<arguments.length&&void 0!==arguments[3]?arguments[3]:window,d=4<arguments.length&&void 0!==arguments[4]?arguments[4]:r.b,l=d(s.document,{width:0,height:0,style:"display: none",srcdoc:"<script>".concat(o.renderer,"<\/script>"),name:"__pb_renderer__"});return new Promise(function(t,n){function r(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};c(Object(u.b)(i,{reason:e.reason||"exception",message:e.message})),e.stack&&console.error(e),n(e)}function a(e){return function(){try{return e.apply(this,arguments)}catch(e){r(e)}}}l.onload=a(function(){var e=l.contentWindow;e.Promise.resolve(e.render(o,{mkFrame:d,sendMessage:function(e,t,n){return c(f({adId:i,message:e},t),n?a(n):void 0)}},s)).then(function(){return c(Object(u.b)(i))},r).then(t)}),s.document.body.appendChild(l)})};var r=n(2),u=n(1);function f(){return(f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var a=3}]);
package/dist/uid.js CHANGED
@@ -1,3 +1,3 @@
1
- /* v1.16.0
2
- Updated : 2023-10-12 */
1
+ /* v1.17.1
2
+ Updated : 2025-03-19 */
3
3
  !function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getBuyerUids=c,e.loadData=i;var o=n(1);window.pbs=window.pbs||{},window.pbs.getBuyerUids=c;var r="https://prebid.adnxs.com/pbs/v1/getuids",s="ssp-buyeruids",u=14;function c(e){var t=o.b(s);if(a(t))i(e);else{try{t=JSON.parse(t)}catch(t){return void e(t,null)}delete t.lastUpdated,e(null,t)}}function i(e){a(o.b(s))&&o.a(r,function(t){try{(t=JSON.parse(t)).lastUpdated=o.d(),o.c(s,JSON.stringify(t)),delete t.lastUpdated,e(null,t)}catch(t){e(t,null)}},null,{withCredentials:!0})}function a(t){return!t||o.d()>t.lastUpdated+24*u*60*60*1e3}i(function(){})},function(t,e,n){"use strict";function i(){return(i=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t}).apply(this,arguments)}function a(t){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(){try{return!!window.localStorage}catch(t){console.log("Local storage api disabled")}}e.c=function(t,e){o()&&window.localStorage.setItem(t,e)},e.b=function(t){if(o())return window.localStorage.getItem(t)},e.d=function(){return(new Date).getTime()},e.a=function(t,e,n){var o=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{};try{var r,s=o.method||(n?"POST":"GET"),u="object"===a(e)?e:{success:function(){console.log("xhr success")},error:function(t){console.log("xhr error",null,t)}};if("function"==typeof e&&(u.success=e),(r=new window.XMLHttpRequest).onreadystatechange=function(){if(4===r.readyState){var t=r.status;200<=t&&t<300||304===t?u.success(r.responseText,r):u.error(r.statusText,r)}},r.ontimeout=function(){console.log("xhr timeout after ",r.timeout,"ms")},"GET"===s&&n){var c=parseURL(t,o);i(c.search,n),t=formatURL(c)}r.open(s,t),r.timeout=3e3,o.withCredentials&&(r.withCredentials=!0),o.preflight&&r.setRequestHeader("X-Requested-With","XMLHttpRequest"),r.setRequestHeader("Content-Type",o.contentType||"text/plain"),"POST"===s&&n?r.send(n):r.send()}catch(t){console.log("xhr construction",t)}}}]);
package/dist/video.js CHANGED
@@ -1,3 +1,3 @@
1
- /* prebid-universal-creative v1.16.0
2
- Updated : 2023-10-12 */
3
- !function(n){var r={};function o(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.m=n,o.c=r,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=2)}([function(e,t,n){"use strict";t.b=function(t){var n={hb_adid:"adId",hb_cache_host:"cacheHost",hb_cache_path:"cachePath",hb_cache_id:"uuid",hb_format:"mediaType",hb_env:"env",hb_size:"size",hb_pb:"hbPb"};function e(e){return!(!t[e]||!(function(e){return a(e,"Object")}(t[e])&&0<Object.keys(t[e]).length||i(t[e])&&""!==t[e]))}var r={},o={};e("targetingMap")?o=function(t){var n={};return Object.keys(t).forEach(function(e){Array.isArray(t[e])&&0<t[e].length&&(n[e]=t[e][0])}),n}(t.targetingMap):e("targetingKeywords")&&(o=function(e){var o={},t=e.split(",");return 0<t.length&&t.forEach(function(e){var t=e.split(":");if(2===t.length){var n=t[0],r=t[1];o[n]=r}}),o}(t.targetingKeywords));return function(t){Object.keys(t).forEach(function(e){r[n[e]||e]=t[e]})}(o),Object.keys(t).forEach(function(e){"targetingMap"!==e&&"targetingKeywords"!==e&&i(t[e])&&""!==t[e]&&(r[e]=t[e])}),r},t.a=function(e){var t=document.createElement("a");return t.href=decodeURIComponent(e),{href:t.href,protocol:(t.protocol||"").replace(/:$/,""),hostname:t.hostname,port:+t.port,pathname:t.pathname.replace(/^(?!\/)/,"/"),hash:(t.hash||"").replace(/^#/,""),host:(t.host||window.location.host).replace(/:(443|80)$/,"")}};n(1);function a(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function i(e){return a(e,"String")}},function(e,t,n){"use strict";t.a=function(e,t){var n=document.createElement("iframe");return n.setAttribute("frameborder",0),n.setAttribute("scrolling","no"),n.setAttribute("marginheight",0),n.setAttribute("marginwidth",0),n.setAttribute("TOPMARGIN",0),n.setAttribute("LEFTMARGIN",0),n.setAttribute("allowtransparency","true"),n.setAttribute("width",t),n.setAttribute("height",e),n},t.b=function(e,t,n){var r;t=t||document,r=n?t.getElementsByTagName(n):t.getElementsByTagName("head");try{(r=r.length?r:t.getElementsByTagName("body")).length&&(r=r[0]).insertBefore(e,r.firstChild)}catch(e){}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(3);window.ucTag=window.ucTag||{},window.ucTag.renderAd=r.a},function(e,t,n){"use strict";t.a=function(e,t){var n=Object(r.b)(t);Object(o.a)(window)?function(e,t){for(var n=!1,r=window,o=0;o<10;o++)if((r=r.parent).pbjs)try{n=!0,r.pbjs.renderAd(e,t);break}catch(e){continue}n||console.error("Unable to locate pbjs.renderAd function!")}(e,n.adId):function(l,f){var e=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"",t=3<arguments.length?arguments[3]:void 0,n=l.location,r=e||l.location.hostname,o=n.protocol+"//"+r,g=Object(i.a)(t,l);function a(e){var t=e.message?"message":"data",n={};try{n=JSON.parse(e[t])}catch(e){return}if(n.message&&"Prebid Response"===n.message&&n.adId===f)try{var r=l.document.body,o=n.ad,a=n.adUrl,i=n.width,c=n.height;if("video"===n.mediaType)d(!1,{reason:"preventWritingOnMainDocument",message:"Cannot render video ad ".concat(f)}),console.log("Error trying to write ad.");else if(o){var s=Object(h.a)(n.height,n.width);r.appendChild(s),s.contentDocument.open(),s.contentDocument.write(o),s.contentDocument.close(),d(!0)}else if(a){var u=Object(h.a)(c,i);u.style.display="inline",u.style.overflow="hidden",u.src=a,Object(h.b)(u,document,"body"),d(!0)}else d(!1,{reason:"noAd",message:"No ad for ".concat(f)}),console.log("Error trying to write ad. No ad markup or adUrl for ".concat(f))}catch(e){d(!1,{reason:"exception",message:e.message}),console.log("Error in rendering ad",e)}function d(e,t){var n=1<arguments.length&&void 0!==t?t:{},r=n.reason,o=n.message,a={message:"Prebid Event",adId:f,event:e?"adRenderSucceeded":"adRenderFailed"};e||(a.info={reason:r,message:o}),g(a)}}g({message:"Prebid Request",adId:f,adServerDomain:o},a)}(window,n.adId,n.adServerDomain,n.pubUrl)};var r=n(0),o=n(4),h=n(1),i=n(5)},function(e,t,n){"use strict";t.a=function(e){var t=!1,n=e;for(;!t;){try{if(n.pbjs){t=!0;break}}catch(e){}if(n===window.top)break;n=n.parent}return t}},function(e,t,n){"use strict";t.a=function(t){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:window,i=function(){if(null==t)return null;var e=Object(r.a)(t);return e.protocol+"://"+e.host}();return function(e,t){if(null==i)throw new Error("Missing pubUrl");var n;if(e=JSON.stringify(e),null==t)a.parent.postMessage(e,i);else{var r=new MessageChannel;(n=r.port1).onmessage=t,a.addEventListener("message",o),a.parent.postMessage(e,i,[r.port2])}return function(){null!=n&&(a.removeEventListener("message",o),n.onmessage=null,n=null)};function o(e){(e.origin||e.originalEvent&&e.originalEvent.origin)===i&&t(e)}}};var r=n(0)}]);
1
+ /* prebid-universal-creative v1.17.1
2
+ Updated : 2025-03-19 */
3
+ !function(t){var r={};function o(e){if(r[e])return r[e].exports;var n=r[e]={i:e,l:!1,exports:{}};return t[e].call(n.exports,n,n.exports,o),n.l=!0,n.exports}o.m=t,o.c=r,o.d=function(e,n,t){o.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},o.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(n,"a",n),n},o.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},o.p="",o(o.s=3)}([function(e,n,t){"use strict";function a(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var t=[],r=!0,o=!1,a=void 0;try{for(var i,c=e[Symbol.iterator]();!(r=(i=c.next()).done)&&(t.push(i.value),!n||t.length!==n);r=!0);}catch(e){o=!0,a=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw a}}return t}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function r(){return(r=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e}).apply(this,arguments)}function o(e){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},o=e.createElement("iframe");return Object.entries(r({frameborder:0,scrolling:"no",marginheight:0,marginwidth:0,TOPMARGIN:0,LEFTMARGIN:0,allowtransparency:"true"},n)).forEach(function(e){var n=a(e,2),t=n[0],r=n[1];o.setAttribute(t,r)}),o}n.c=o,n.a=function(e,n){return o(document,{height:e,width:n})},n.b=function(e,n,t){var r;n=n||document,r=t?n.getElementsByTagName(t):n.getElementsByTagName("head");try{(r=r.length?r:n.getElementsByTagName("body")).length&&(r=r[0]).insertBefore(e,r.firstChild)}catch(e){}}},function(e,n,t){"use strict";n.b=function(n){var t={hb_adid:"adId",hb_cache_host:"cacheHost",hb_cache_path:"cachePath",hb_cache_id:"uuid",hb_format:"mediaType",hb_env:"env",hb_size:"size",hb_pb:"hbPb"};function e(e){return!(!n[e]||!(function(e){return a(e,"Object")}(n[e])&&0<Object.keys(n[e]).length||i(n[e])&&""!==n[e]))}var r={},o={};e("targetingMap")?o=function(n){var t={};return Object.keys(n).forEach(function(e){Array.isArray(n[e])&&0<n[e].length&&(t[e]=n[e][0])}),t}(n.targetingMap):e("targetingKeywords")&&(o=function(e){var o={},n=e.split(",");return 0<n.length&&n.forEach(function(e){var n=e.split(":");if(2===n.length){var t=n[0],r=n[1];o[t]=r}}),o}(n.targetingKeywords));return function(n){Object.keys(n).forEach(function(e){r[t[e]||e]=n[e]})}(o),Object.keys(n).forEach(function(e){"targetingMap"!==e&&"targetingKeywords"!==e&&i(n[e])&&""!==n[e]&&(r[e]=n[e])}),r},n.a=function(e){var n=document.createElement("a");return n.href=decodeURIComponent(e),{href:n.href,protocol:(n.protocol||"").replace(/:$/,""),hostname:n.hostname,port:+n.port,pathname:n.pathname.replace(/^(?!\/)/,"/"),hash:(n.hash||"").replace(/^#/,""),host:(n.host||window.location.host).replace(/:(443|80)$/,"")}};t(0);function a(e,n){return Object.prototype.toString.call(e)==="[object "+n+"]"}function i(e){return a(e,"String")}},function(e,n,t){"use strict";n.a=function(n){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:window,i=function(){if(null==n)return null;var e=Object(r.a)(n);return e.protocol+"://"+e.host}();function e(e){return e&&e.frames&&e.frames.__pb_locator__}var c=a.parent;try{for(;null!=c&&c!==a.top&&!e(c);)c=c.parent;e(c)||(c=a.parent)}catch(e){}return function(e,n){if(null==i)throw new Error("Missing pubUrl");var t;if(e=JSON.stringify(e),null==n)c.postMessage(e,i);else{var r=new MessageChannel;(t=r.port1).onmessage=n,a.addEventListener("message",o),c.postMessage(e,i,[r.port2])}return function(){null!=t&&(a.removeEventListener("message",o),t.onmessage=null,t=null)};function o(e){(e.origin||e.originalEvent&&e.originalEvent.origin)===i&&n(e)}}},n.b=function(e,n){return o({adId:e,message:a,event:n?c:i},n?{info:n}:null)};var r=t(1);function o(){return(o=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e}).apply(this,arguments)}var a="Prebid Event",i="adRenderSucceeded",c="adRenderFailed"},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=t(4);window.ucTag=window.ucTag||{},window.ucTag.renderAd=r.a},function(e,n,t){"use strict";n.a=function(e,n){var t=Object(r.b)(n);Object(o.a)(window)?function(e,n){for(var t=!1,r=window,o=0;o<10;o++)if((r=r.parent).pbjs)try{r.pbjs.renderAd(e,n),t=!0;break}catch(e){continue}t||console.error("Unable to locate pbjs.renderAd function!")}(e,t.adId):function(l,d){var e=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"",n=3<arguments.length?arguments[3]:void 0,t=l.location,r=e||l.location.hostname,o=t.protocol+"//"+r,f=Object(i.a)(n,l),h=function(e){return f(Object(i.b)(d,e))};function a(e){var n=e.message?"message":"data",t={};try{t=JSON.parse(e[n])}catch(e){return}if(t.message&&"Prebid Response"===t.message&&t.adId===d){if(Object(g.a)(t))return void Object(g.b)(d,t,f,l);try{var r=l.document.body,o=t.ad,a=t.adUrl,i=t.width,c=t.height;if("video"===t.mediaType)h({reason:"preventWritingOnMainDocument",message:"Cannot render video ad ".concat(d)}),console.log("Error trying to write ad.");else if(o){var s=Object(p.a)(t.height,t.width);r.appendChild(s),s.contentDocument.open(),s.contentDocument.write(o),s.contentDocument.close(),h()}else if(a){var u=Object(p.a)(c,i);u.style.display="inline",u.style.overflow="hidden",u.src=a,Object(p.b)(u,document,"body"),h()}else h({reason:"noAd",message:"No ad for ".concat(d)}),console.log("Error trying to write ad. No ad markup or adUrl for ".concat(d))}catch(e){h({reason:"exception",message:e.message}),console.log("Error in rendering ad",e)}}}f({message:"Prebid Request",adId:d,adServerDomain:o},a)}(window,t.adId,t.adServerDomain,t.pubUrl)};var r=t(1),o=t(5),p=t(0),i=t(2),g=t(6)},function(e,n,t){"use strict";n.a=function(e){var n=!1,t=e;for(;!n;){try{if(t.pbjs){n=!0;break}}catch(e){}if(t===window.top)break;t=t.parent}return n}},function(e,n,t){"use strict";n.a=function(e){return"string"==typeof e.renderer&&parseInt(e.rendererVersion,10)>=o},n.b=function(a,i,c){var s=3<arguments.length&&void 0!==arguments[3]?arguments[3]:window,u=4<arguments.length&&void 0!==arguments[4]?arguments[4]:r.c,l=u(s.document,{width:0,height:0,style:"display: none",srcdoc:"<script>".concat(i.renderer,"<\/script>"),name:"__pb_renderer__"});return new Promise(function(n,t){function r(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};c(Object(d.b)(a,{reason:e.reason||"exception",message:e.message})),e.stack&&console.error(e),t(e)}function o(e){return function(){try{return e.apply(this,arguments)}catch(e){r(e)}}}l.onload=o(function(){var e=l.contentWindow;e.Promise.resolve(e.render(i,{mkFrame:u,sendMessage:function(e,n,t){return c(f({adId:a,message:e},n),t?o(t):void 0)}},s)).then(function(){return c(Object(d.b)(a))},r).then(n)}),s.document.body.appendChild(l)})};var r=t(0),d=t(2);function f(){return(f=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e}).apply(this,arguments)}var o=3}]);
package/gulpfile.js CHANGED
@@ -17,6 +17,7 @@ const KarmaServer = require('karma').Server;
17
17
  const karmaConfMaker = require('./karma.conf.maker');
18
18
  const execa = require('execa');
19
19
  const path = require('path');
20
+ const {execSync} = require('child_process');
20
21
 
21
22
  const dateString = 'Updated : ' + (new Date()).toISOString().substring(0, 10);
22
23
  const banner = '/* <%= creative.name %> v<%= creative.version %>\n' + dateString + ' */\n';
@@ -141,16 +142,12 @@ function includeStaticVastXmlFile() {
141
142
  function buildProd({ inputFile, outputFile }) {
142
143
  let cloned = _.cloneDeep(webpackConfig);
143
144
  delete cloned.devtool;
144
-
145
+ cloned.output.filename = outputFile;
145
146
  return gulp.src([inputFile])
146
147
  .pipe(webpackStream(cloned))
147
148
  .pipe(gulp.dest('dist'))
148
149
  .pipe(uglify())
149
150
  .pipe(header(banner, { creative: creative }))
150
- .pipe(rename({
151
- basename: outputFile.split('.')[0],
152
- extname: `.${outputFile.split('.')[1]}`
153
- }))
154
151
  .pipe(gulp.dest('dist'));
155
152
  }
156
153
 
@@ -205,20 +202,10 @@ function includeStaticVastXmlFile() {
205
202
  //
206
203
  // If --watch is given, the task will open the karma debug window
207
204
  // If --browserstack is given, it will run the full suite of currently supported browsers.
208
- // If --e2e is given, it will run test defined in ./test/e2e/specs in browserstack
209
205
 
210
206
  function test(done) {
211
- if (argv.e2e) {
212
- let wdioCmd = path.join(__dirname, 'node_modules/.bin/wdio');
213
- let wdioConf = path.join(__dirname, 'wdio.conf.js');
214
- let wdioOpts = [
215
- wdioConf
216
- ];
217
- return execa(wdioCmd, wdioOpts, { stdio: 'inherit' });
218
- } else {
219
- let karmaConf = karmaConfMaker(false, argv.browserstack, argv.watch);
220
- new KarmaServer(karmaConf, newKarmaCallback(done)).start();
221
- }
207
+ let karmaConf = karmaConfMaker(false, argv.browserstack, argv.watch);
208
+ new KarmaServer(karmaConf, newKarmaCallback(done)).start();
222
209
  }
223
210
 
224
211
  function newKarmaCallback(done) {
@@ -237,17 +224,10 @@ function newKarmaCallback(done) {
237
224
  }
238
225
  }
239
226
 
240
- function setupE2E(done) {
241
- argv.e2e = true;
242
- done();
243
- }
244
-
245
227
  gulp.task('test', gulp.series(clean, test));
246
228
 
247
229
  const buildDevFunctions = [buildLegacyDev, buildBannerDev, buildVideoDev, buildAmpDev, buildMobileDev, buildNativeRenderLegacyDev, buildNativeDev, buildNativeRenderDev, buildCookieSync, buildCookieSyncWithConsent, buildUidDev, includeStaticVastXmlFile];
248
230
 
249
- gulp.task('e2e-test', gulp.series(clean, setupE2E, gulp.parallel(...buildDevFunctions, watch), test));
250
-
251
231
  function watch(done) {
252
232
  const mainWatcher = gulp.watch([
253
233
  'src/**/*.js',
@@ -275,6 +255,14 @@ gulp.task('test-coverage', (done) => {
275
255
  new KarmaServer(karmaConfMaker(true, false, false), newKarmaCallback(done)).start();
276
256
  });
277
257
 
258
+ function integTests(done) {
259
+ execSync('npx playwright test', {stdio: 'inherit'});
260
+ done();
261
+ }
262
+
263
+ gulp.task('integ-tests', gulp.series(clean, 'build', integTests));
264
+
265
+
278
266
  gulp.task('view-coverage', (done) => {
279
267
  const coveragePort = 1999;
280
268
  const localhost = (argv.host) ? argv.host : 'localhost';
@@ -0,0 +1,79 @@
1
+ import {test as baseTest} from '@playwright/test';
2
+ import path from 'path';
3
+ import {expect} from '@playwright/test';
4
+ export {expect} from '@playwright/test';
5
+ import process from 'process'
6
+ export const BASE_URL = 'https://www.prebid.org/puc-test/';
7
+ export const PUC_URL = 'https://cdn.jsdelivr.net/npm/prebid-universal-creative@latest/dist/';
8
+ export const PBJS_URL = 'https://cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js'
9
+
10
+ const LOCAL_PBJS_URL = 'http://localhost:9999/build/dev/prebid.js';
11
+
12
+ const REDIRECTS = {
13
+ [BASE_URL]: '../pages',
14
+ [PUC_URL]: '../../dist'
15
+ };
16
+
17
+ export const test = baseTest.extend({
18
+ /**
19
+ * Replace requests for "https://www.prebid.org" with the contents of files under "pages",
20
+ * and requests for the PUC CDN with contents of files under "dist".
21
+ */
22
+ async context({context}, use) {
23
+ await Promise.all(
24
+ Object.entries(REDIRECTS).map(([url, localDir]) => {
25
+ context.route((u) => u.href.startsWith(url), (route, request) => {
26
+ const fpath = request.url().substring(url.length).split('?')[0];
27
+ route.fulfill({
28
+ path: path.resolve(__dirname, localDir, fpath)
29
+ });
30
+ });
31
+ })
32
+ );
33
+ if (process.env.LOCAL_PBJS) {
34
+ const localUrl = process.env.LOCAL_PBJS.startsWith('http') ? process.env.LOCAL_PBJS : LOCAL_PBJS_URL;
35
+ await context.route((u) => u.href.startsWith(PBJS_URL), (route) => route.fulfill({status: 302, headers: {Location: localUrl}}))
36
+ }
37
+ await use(context);
38
+ },
39
+ /**
40
+ * await crossLocator(selector): returns a locator for the first element matching 'selector' that appears on the
41
+ * page, across all frames.
42
+ */
43
+ async crossLocator({page}, use) {
44
+ await use(function (selector) {
45
+ let n = 0;
46
+ return new Promise((resolve, reject) => {
47
+ async function frameLocator(frame) {
48
+ if (!frame.isDetached()) {
49
+ n++;
50
+ try {
51
+ await frame.waitForSelector(selector);
52
+ resolve(frame.locator(selector));
53
+ } catch (e) {
54
+ n--;
55
+ if (n === 0) {
56
+ reject(e);
57
+ }
58
+ }
59
+ }
60
+ }
61
+ page.on('frameattached', frameLocator);
62
+ function walkFrames(frame) {
63
+ frameLocator(frame);
64
+ frame.childFrames().forEach(walkFrames)
65
+ }
66
+ walkFrames(page.mainFrame());
67
+ })
68
+ })
69
+ },
70
+ async expectEvent({page}, use) {
71
+ await use(async function (predicate, numMatches = 1) {
72
+ await expect.poll(async () =>
73
+ ((await page.evaluate(() => window.pbjs?.getEvents && window.pbjs.getEvents())) || [])
74
+ .filter(predicate)
75
+ .length === numMatches
76
+ ).toBeTruthy();
77
+ });
78
+ }
79
+ });
@@ -0,0 +1,80 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
6
+ <link rel="canonical" href="https://www.prebid-org/puc-test/amp.html">
7
+ <style amp-boilerplate>body {
8
+ -webkit-animation: -amp-start 8s steps(1, end) 0s 1 normal both;
9
+ -moz-animation: -amp-start 8s steps(1, end) 0s 1 normal both;
10
+ -ms-animation: -amp-start 8s steps(1, end) 0s 1 normal both;
11
+ animation: -amp-start 8s steps(1, end) 0s 1 normal both
12
+ }
13
+
14
+ @-webkit-keyframes -amp-start {
15
+ from {
16
+ visibility: hidden
17
+ }
18
+ to {
19
+ visibility: visible
20
+ }
21
+ }
22
+
23
+ @-moz-keyframes -amp-start {
24
+ from {
25
+ visibility: hidden
26
+ }
27
+ to {
28
+ visibility: visible
29
+ }
30
+ }
31
+
32
+ @-ms-keyframes -amp-start {
33
+ from {
34
+ visibility: hidden
35
+ }
36
+ to {
37
+ visibility: visible
38
+ }
39
+ }
40
+
41
+ @-o-keyframes -amp-start {
42
+ from {
43
+ visibility: hidden
44
+ }
45
+ to {
46
+ visibility: visible
47
+ }
48
+ }
49
+
50
+ @keyframes -amp-start {
51
+ from {
52
+ visibility: hidden
53
+ }
54
+ to {
55
+ visibility: visible
56
+ }
57
+ }</style>
58
+ <noscript>
59
+ <style amp-boilerplate>body {
60
+ -webkit-animation: none;
61
+ -moz-animation: none;
62
+ -ms-animation: none;
63
+ animation: none
64
+ }</style>
65
+ </noscript>
66
+ <script async src="https://cdn.ampproject.org/v0.js"></script>
67
+ <script async custom-element="amp-ad" src="https://cdn.ampproject.org/v0/amp-ad-0.1.js"></script>
68
+ <title>AMP-RTC RP Test</title>
69
+ </head>
70
+ <body>
71
+ <h2>AMP-RTC RP Test</h2>
72
+
73
+ <amp-ad width="300" height="250"
74
+ type="doubleclick"
75
+ data-slot="/41758329/integ-test"
76
+ data-multi-size-validation="false"
77
+ rtc-config='{"vendors": {"prebidrubicon": {"REQUEST_ID": "14062-amp-300x50"}}}'
78
+ </amp-ad>
79
+ </body>
80
+ </html>
@@ -0,0 +1,96 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <title>Prebid.js Banner Test</title>
7
+
8
+ <!-- Prebid.js -->
9
+ <script async src="https://cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
10
+
11
+ <!-- Google Publisher Tag -->
12
+ <script async src="https://www.googletagservices.com/tag/js/gpt.js"></script>
13
+
14
+ <script>
15
+ var pbjs = pbjs || {};
16
+ pbjs.que = pbjs.que || [];
17
+ window.params = new URLSearchParams(window.location.search);
18
+ </script>
19
+
20
+ <script>
21
+ var googletag = googletag || {};
22
+ googletag.cmd = googletag.cmd || [];
23
+
24
+ googletag.cmd.push(function () {
25
+ googletag.pubads().disableInitialLoad();
26
+ });
27
+
28
+ pbjs.que.push(function () {
29
+ pbjs.setConfig({
30
+ debug: true,
31
+ debugging: {
32
+ enabled: true,
33
+ intercept: [
34
+ {
35
+ when: {},
36
+ then: JSON.parse(params.get('bidResponse'))
37
+ }
38
+ ]
39
+ }
40
+ });
41
+
42
+ pbjs.requestBids({
43
+ bidsBackHandler: sendAdServerRequest,
44
+ adUnits: [
45
+ {
46
+ code: 'slot',
47
+ mediaTypes: {
48
+ banner: {
49
+ sizes: [[300, 250]],
50
+ }
51
+ },
52
+ bids: [{
53
+ bidder: 'appnexus',
54
+ params: {
55
+ placementId: 123
56
+ }
57
+ }]
58
+ }
59
+ ]
60
+ });
61
+ });
62
+
63
+ function sendAdServerRequest() {
64
+ googletag.cmd.push(function () {
65
+ pbjs.que.push(function () {
66
+ pbjs.setTargetingForGPTAsync('slot');
67
+ googletag.pubads().refresh();
68
+ });
69
+ });
70
+ }
71
+ </script>
72
+
73
+ <script>
74
+ googletag.cmd.push(function () {
75
+ googletag
76
+ .defineSlot('/41758329/integ-test', [[300, 250]], 'slot')
77
+ .setTargeting('creative', params.get('creative'))
78
+ .addService(googletag.pubads());
79
+
80
+ googletag.pubads().enableSingleRequest();
81
+ googletag.enableServices();
82
+ });
83
+ </script>
84
+ </head>
85
+
86
+ <body>
87
+ <h2>Prebid.js Banner Ad Unit Test</h2>
88
+ <div id='slot'>
89
+ <script>
90
+ googletag.cmd.push(function () {
91
+ googletag.display('slot');
92
+ });
93
+ </script>
94
+ </div>
95
+ </body>
96
+ </html>
@@ -0,0 +1,107 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <title>Prebid.js Legacy Native Test</title>
7
+
8
+ <!-- Prebid.js -->
9
+ <script async src="https://cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
10
+
11
+ <!-- Google Publisher Tag -->
12
+ <script async src="https://www.googletagservices.com/tag/js/gpt.js"></script>
13
+
14
+ <script>
15
+ var pbjs = pbjs || {};
16
+ pbjs.que = pbjs.que || [];
17
+ window.params = new URLSearchParams(window.location.search);
18
+ </script>
19
+
20
+ <script>
21
+ var googletag = googletag || {};
22
+ googletag.cmd = googletag.cmd || [];
23
+
24
+ googletag.cmd.push(function () {
25
+ googletag.pubads().disableInitialLoad();
26
+ });
27
+
28
+ pbjs.que.push(function () {
29
+ pbjs.setConfig({
30
+ debug: true,
31
+ debugging: {
32
+ enabled: true,
33
+ intercept: [
34
+ {
35
+ when: {},
36
+ then: JSON.parse(params.get('bidResponse'))
37
+ }
38
+ ]
39
+ }
40
+ });
41
+
42
+ pbjs.requestBids({
43
+ bidsBackHandler: sendAdServerRequest,
44
+ adUnits: [
45
+ {
46
+ code: 'slot',
47
+ mediaTypes: {
48
+ native: {
49
+ image: {
50
+ required: false,
51
+ },
52
+ title: {
53
+ required: true
54
+ },
55
+ body: {
56
+ required: true
57
+ },
58
+ clickUrl: {
59
+ required: true
60
+ }
61
+ }
62
+ },
63
+ bids: [{
64
+ bidder: 'appnexus',
65
+ params: {
66
+ placementId: 123
67
+ }
68
+ }]
69
+ }
70
+ ]
71
+ });
72
+ });
73
+
74
+ function sendAdServerRequest() {
75
+ googletag.cmd.push(function () {
76
+ pbjs.que.push(function () {
77
+ pbjs.setTargetingForGPTAsync('slot');
78
+ googletag.pubads().refresh();
79
+ });
80
+ });
81
+ }
82
+ </script>
83
+
84
+ <script>
85
+ googletag.cmd.push(function () {
86
+ googletag
87
+ .defineSlot('/41758329/integ-test', params.get('banner') === 'true' ? [[640, 480]] : 'fluid', 'slot')
88
+ .setTargeting('creative', params.get('creative'))
89
+ .addService(googletag.pubads());
90
+
91
+ googletag.pubads().enableSingleRequest();
92
+ googletag.enableServices();
93
+ });
94
+ </script>
95
+ </head>
96
+
97
+ <body>
98
+ <h2>Prebid.js Legacy Native Ad Unit Test</h2>
99
+ <div id='slot'>
100
+ <script>
101
+ googletag.cmd.push(function () {
102
+ googletag.display('slot');
103
+ });
104
+ </script>
105
+ </div>
106
+ </body>
107
+ </html>