prebid.js 9.7.0 → 9.9.0
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.
- package/.github/codeql/codeql-config.yml +3 -0
- package/.github/codeql/queries/deviceMemory.ql +14 -0
- package/.github/codeql/queries/hardwareConcurrency.ql +14 -0
- package/.github/codeql/queries/prebid.qll +36 -0
- package/.github/codeql/queries/qlpack.yml +8 -0
- package/.github/workflows/jscpd.yml +1 -1
- package/dist/33acrossAnalyticsAdapter.js +1 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/BTBidAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adagioUtils.js +1 -1
- package/dist/addefendBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/admixerBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adstirBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgAnalyticsAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/agmaAnalyticsAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/ccxBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/chunk-core.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/contxtfulRtdProvider.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/dailymotionBidAdapter.js +1 -1
- package/dist/dependencies.json +19 -4
- package/dist/discoveryBidAdapter.js +1 -1
- package/dist/docereeAdManagerBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/dxkultureBidAdapter.js +1 -1
- package/dist/eclickadsBidAdapter.js +1 -0
- package/dist/eightPodAnalyticsAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -1
- package/dist/exadsBidAdapter.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/greenbidsRtdProvider.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/id5AnalyticsAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/imdsBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/intentIqAnalyticsAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/kimberliteBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/limelightDigitalBidAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/luceadBidAdapter.js +1 -1
- package/dist/mabidderBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediagoBidAdapter.js +1 -1
- package/dist/medianetAnalyticsAdapter.js +1 -1
- package/dist/medianetBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/mgidUtils.js +1 -0
- package/dist/mgidXBidAdapter.js +1 -1
- package/dist/missenaBidAdapter.js +1 -1
- package/dist/mobianRtdProvider.js +1 -1
- package/dist/naveggIdSystem.js +1 -1
- package/dist/navigatorData.js +1 -0
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/nobidAnalyticsAdapter.js +1 -1
- package/dist/nobidBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +174 -169
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/omsBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxBidAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/orbidderBidAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/pstudioBidAdapter.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubriseBidAdapter.js +1 -0
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxaiAnalyticsAdapter.js +1 -1
- package/dist/pubxaiRtdProvider.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/redtramBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/retailspotBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/richaudienceBidAdapter.js +1 -1
- package/dist/riseUtils.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smarthubBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/snigelBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/tappxBidAdapter.js +1 -1
- package/dist/targetVideoAdServerVideo.js +1 -0
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/teqblazeUtils.js +1 -1
- package/dist/terceptAnalyticsAdapter.js +1 -1
- package/dist/themoneytizerBidAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/uid2IdSystem.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/unrulyBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooUtils.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahooAdsBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/libraries/mgidUtils/mgidUtils.js +73 -0
- package/{src/fpd/navigator.js → libraries/navigatorData/navigatorData.js} +1 -1
- package/libraries/riseUtils/index.js +1 -1
- package/libraries/teqblazeUtils/bidderUtils.js +1 -1
- package/modules/admixerBidAdapter.js +12 -5
- package/modules/appnexusBidAdapter.js +1 -1
- package/modules/ccxBidAdapter.js +6 -2
- package/modules/contxtfulRtdProvider.js +15 -12
- package/modules/cwireBidAdapter.js +13 -9
- package/modules/cwireBidAdapter.md +29 -10
- package/modules/dailymotionBidAdapter.js +1 -1
- package/modules/dailymotionBidAdapter.md +11 -7
- package/modules/discoveryBidAdapter.js +1 -3
- package/modules/docereeAdManagerBidAdapter.js +14 -8
- package/modules/eclickadsBidAdapter.js +80 -0
- package/modules/eclickadsBidAdapter.md +55 -0
- package/modules/eightPodAnalyticsAdapter.js +13 -1
- package/modules/gumgumBidAdapter.js +6 -2
- package/modules/ixBidAdapter.js +0 -1
- package/modules/limelightDigitalBidAdapter.js +1 -1
- package/modules/mediagoBidAdapter.js +2 -4
- package/modules/mgidBidAdapter.js +30 -109
- package/modules/mgidXBidAdapter.js +2 -66
- package/modules/mobianRtdProvider.js +12 -8
- package/modules/naveggIdSystem.js +62 -58
- package/modules/naveggIdSystem.md +8 -0
- package/modules/oguryBidAdapter.js +5 -2
- package/modules/omsBidAdapter.js +1 -1
- package/modules/openxBidAdapter.js +1 -6
- package/modules/pstudioBidAdapter.js +5 -8
- package/modules/pstudioBidAdapter.md +6 -4
- package/modules/pubriseBidAdapter.js +19 -0
- package/modules/pubriseBidAdapter.md +79 -0
- package/modules/pubxaiAnalyticsAdapter.js +9 -4
- package/modules/pubxaiRtdProvider.js +38 -18
- package/modules/pubxaiRtdProvider.md +2 -2
- package/modules/redtramBidAdapter.js +2 -6
- package/modules/richaudienceBidAdapter.js +8 -1
- package/modules/rubiconBidAdapter.js +3 -3
- package/modules/smarthubBidAdapter.js +2 -0
- package/modules/targetVideoAdServerVideo.js +96 -0
- package/modules/targetVideoAdServerVideo.md +26 -0
- package/modules/teadsBidAdapter.js +4 -3
- package/modules/undertoneBidAdapter.js +1 -19
- package/modules/userId/index.js +1 -1
- package/package.json +1 -1
- package/src/adRendering.js +3 -0
- package/src/adapterManager.js +4 -0
- package/src/utils/focusTimeout.js +17 -6
- package/src/utils/ttlCollection.js +1 -1
- package/src/utils.js +28 -0
- package/test/spec/modules/admixerBidAdapter_spec.js +2 -2
- package/test/spec/modules/ccxBidAdapter_spec.js +81 -0
- package/test/spec/modules/contxtfulRtdProvider_spec.js +19 -19
- package/test/spec/modules/dailymotionBidAdapter_spec.js +12 -12
- package/test/spec/modules/discoveryBidAdapter_spec.js +1 -47
- package/test/spec/modules/docereeAdManagerBidAdapter_spec.js +87 -9
- package/test/spec/modules/eclickadsBidAdapter_spec.js +214 -0
- package/test/spec/modules/ixBidAdapter_spec.js +8 -1
- package/test/spec/modules/mobianRtdProvider_spec.js +32 -15
- package/test/spec/modules/naveggIdSystem_spec.js +141 -31
- package/test/spec/modules/oguryBidAdapter_spec.js +50 -4
- package/test/spec/modules/openxBidAdapter_spec.js +16 -49
- package/test/spec/modules/pstudioBidAdapter_spec.js +5 -5
- package/test/spec/modules/pubriseBidAdapter_spec.js +514 -0
- package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +9 -4
- package/test/spec/modules/pubxaiRtdProvider_spec.js +37 -5
- package/test/spec/modules/richaudienceBidAdapter_spec.js +62 -0
- package/test/spec/modules/rubiconBidAdapter_spec.js +10 -0
- package/test/spec/modules/targetVideoAdServerVideo_spec.js +179 -0
- package/test/spec/modules/trafficgateBidAdapter_spec.js +1 -1
- package/test/spec/ortbConverter/userId_spec.js +23 -2
- package/test/spec/unit/adRendering_spec.js +27 -1
- package/test/spec/unit/core/adapterManager_spec.js +10 -0
- package/test/spec/unit/utils/focusTimeout_spec.js +33 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.pbjsChunk=self.pbjsChunk||[]).push([[69380],{64668:(e,t,r)=>{var i=r(7873),n=r(91069),o=r(70433),s=r(63172),a=r(71371),d=r(57377),p=r(95789),c=r(15901);const u="USD",m=300,l=!0,f="https://prebid-outstream.yieldmo.com/bundle.js",g=["mimes","startdelay","placement","plcmt","skipafter","protocols","api","playbackmethod","maxduration","minduration","pos","skip","skippable"],y=["name","domain","cat","keywords"],b=(0,n.getWindowTop)(),h=2,v=0,A=["description","title","pr","page_url"],x={code:"yieldmo",supportedMediaTypes:[a.D4,a.G_],gvlid:173,isBidRequestValid:function(e){return!!(e&&e.adUnitCode&&e.bidId&&(I(e)||w(e))&&function(e){if(!w(e))return!0;const t=(e,t,r)=>{let i=`"${e}" is required`;throw r&&(i+=" when "+r),new Error(i)},r=(e,t,r)=>{throw r=r?", expected: "+r:"",t=JSON.stringify(t),new Error(`"${e}"=${t} is invalid${r}`)},i=e=>void 0!==e,s=(t,r,i,n)=>{if(0===t.indexOf("video")){const s="params."+t,a="mediaTypes."+t,d=(0,o.A)(e,s),p=(0,o.A)(e,a),c=r(d),u=r(p);return c?d:u||(c?u||i(a,p,n):i(s,d,n),d||p)}{const s=(0,o.A)(e,t);return r(s)||i(t,s,n),s}};try{return s("video.context",(e=>!(0,n.isEmpty)(e)),t),s("params.placementId",(e=>!(0,n.isEmpty)(e)),t),s("video.playerSize",(e=>(0,n.isArrayOfNums)(e,2)||(0,n.isArray)(e)&&e.every((e=>(0,n.isArrayOfNums)(e,2)))),r,"array of 2 integers, ex: [640,480] or [[640,480]]"),s("video.mimes",(e=>i(e)),t),s("video.mimes",(e=>(0,n.isArray)(e)&&e.every((e=>(0,n.isStr)(e)))),r,'array of strings, ex: ["video/mp4"]'),s("video.protocols",(e=>i(e)),t),s("video.api",(e=>i(e)),t),s("video.api",(e=>(0,n.isArrayOfNums)(e)&&e.every((e=>e>=1&&e<=6))),r,"array of numbers, ex: [2,3]"),s("video.playbackmethod",(e=>!i(e)||(0,n.isArrayOfNums)(e)),r,"array of integers, ex: [2,6]"),s("video.maxduration",(e=>i(e)),t),s("video.maxduration",(e=>(0,n.isInteger)(e)),r),s("video.minduration",(e=>!i(e)||(0,n.isNumber)(e)),r),s("video.skippable",(e=>!i(e)||(0,n.isBoolean)(e)),r),s("video.skipafter",(e=>!i(e)||(0,n.isNumber)(e)),r),s("video.pos",(e=>!i(e)||(0,n.isNumber)(e)),r),s("params.badv",(e=>!i(e)||(0,n.isArray)(e)),r,'array of strings, ex: ["ford.com","pepsi.com"]'),s("params.bcat",(e=>!i(e)||(0,n.isArray)(e)),r,'array of strings, ex: ["IAB1-5","IAB1-6"]'),!0}catch(e){return(0,n.logError)(e.message),!1}}(e))},buildRequests:function(e,t){const r=function(e){return!!e.refererInfo?.referer?.includes("pb_force_a")}(t),i=N("/exchange/prebid",r),d=N("/exchange/prebidvideo",r),p=e.filter((e=>I(e))),u=e.filter((e=>w(e)));let m=[];const l=function(e){if((0,o.A)(e,"userIdAsEids"))return e.userIdAsEids||[]}(e[0])||[],f=function(e){const t=(0,o.A)(e,"ortb2.user.data")||[],r=t.filter((e=>{const t=e.ext?.segtax;return t>=600&&t<=609}))[0];if(r){return{taxonomy:r.ext.segtax,classifier:r.ext.segclass,topics:Object.values(r.segment).map((e=>Number(e)))}}return null}(t),y=function(e){const t=(0,o.A)(e,"ortb2.device.ext.cdep")||null;return t}(t);if(p.length>0){let e={pbav:"9.
|
|
1
|
+
(self.pbjsChunk=self.pbjsChunk||[]).push([[69380],{64668:(e,t,r)=>{var i=r(7873),n=r(91069),o=r(70433),s=r(63172),a=r(71371),d=r(57377),p=r(95789),c=r(15901);const u="USD",m=300,l=!0,f="https://prebid-outstream.yieldmo.com/bundle.js",g=["mimes","startdelay","placement","plcmt","skipafter","protocols","api","playbackmethod","maxduration","minduration","pos","skip","skippable"],y=["name","domain","cat","keywords"],b=(0,n.getWindowTop)(),h=2,v=0,A=["description","title","pr","page_url"],x={code:"yieldmo",supportedMediaTypes:[a.D4,a.G_],gvlid:173,isBidRequestValid:function(e){return!!(e&&e.adUnitCode&&e.bidId&&(I(e)||w(e))&&function(e){if(!w(e))return!0;const t=(e,t,r)=>{let i=`"${e}" is required`;throw r&&(i+=" when "+r),new Error(i)},r=(e,t,r)=>{throw r=r?", expected: "+r:"",t=JSON.stringify(t),new Error(`"${e}"=${t} is invalid${r}`)},i=e=>void 0!==e,s=(t,r,i,n)=>{if(0===t.indexOf("video")){const s="params."+t,a="mediaTypes."+t,d=(0,o.A)(e,s),p=(0,o.A)(e,a),c=r(d),u=r(p);return c?d:u||(c?u||i(a,p,n):i(s,d,n),d||p)}{const s=(0,o.A)(e,t);return r(s)||i(t,s,n),s}};try{return s("video.context",(e=>!(0,n.isEmpty)(e)),t),s("params.placementId",(e=>!(0,n.isEmpty)(e)),t),s("video.playerSize",(e=>(0,n.isArrayOfNums)(e,2)||(0,n.isArray)(e)&&e.every((e=>(0,n.isArrayOfNums)(e,2)))),r,"array of 2 integers, ex: [640,480] or [[640,480]]"),s("video.mimes",(e=>i(e)),t),s("video.mimes",(e=>(0,n.isArray)(e)&&e.every((e=>(0,n.isStr)(e)))),r,'array of strings, ex: ["video/mp4"]'),s("video.protocols",(e=>i(e)),t),s("video.api",(e=>i(e)),t),s("video.api",(e=>(0,n.isArrayOfNums)(e)&&e.every((e=>e>=1&&e<=6))),r,"array of numbers, ex: [2,3]"),s("video.playbackmethod",(e=>!i(e)||(0,n.isArrayOfNums)(e)),r,"array of integers, ex: [2,6]"),s("video.maxduration",(e=>i(e)),t),s("video.maxduration",(e=>(0,n.isInteger)(e)),r),s("video.minduration",(e=>!i(e)||(0,n.isNumber)(e)),r),s("video.skippable",(e=>!i(e)||(0,n.isBoolean)(e)),r),s("video.skipafter",(e=>!i(e)||(0,n.isNumber)(e)),r),s("video.pos",(e=>!i(e)||(0,n.isNumber)(e)),r),s("params.badv",(e=>!i(e)||(0,n.isArray)(e)),r,'array of strings, ex: ["ford.com","pepsi.com"]'),s("params.bcat",(e=>!i(e)||(0,n.isArray)(e)),r,'array of strings, ex: ["IAB1-5","IAB1-6"]'),!0}catch(e){return(0,n.logError)(e.message),!1}}(e))},buildRequests:function(e,t){const r=function(e){return!!e.refererInfo?.referer?.includes("pb_force_a")}(t),i=N("/exchange/prebid",r),d=N("/exchange/prebidvideo",r),p=e.filter((e=>I(e))),u=e.filter((e=>w(e)));let m=[];const l=function(e){if((0,o.A)(e,"userIdAsEids"))return e.userIdAsEids||[]}(e[0])||[],f=function(e){const t=(0,o.A)(e,"ortb2.user.data")||[],r=t.filter((e=>{const t=e.ext?.segtax;return t>=600&&t<=609}))[0];if(r){return{taxonomy:r.ext.segtax,classifier:r.ext.segclass,topics:Object.values(r.segment).map((e=>Number(e)))}}return null}(t),y=function(e){const t=(0,o.A)(e,"ortb2.device.ext.cdep")||null;return t}(t);if(p.length>0){let e={pbav:"9.9.0",p:[],page_url:t.refererInfo.page,bust:(new Date).getTime().toString(),dnt:"1"===window.doNotTrack||"1"===window.navigator.doNotTrack||!1,description:_(),tmax:t.timeout||400,userConsent:JSON.stringify({gdprApplies:(0,o.A)(t,"gdprConsent.gdprApplies")||"",cmp:(0,o.A)(t,"gdprConsent.consentString")||"",gpp:(0,o.A)(t,"gppConsent.gppString")||"",gpp_sid:(0,o.A)(t,"gppConsent.applicableSections")||[]}),us_privacy:(0,o.A)(t,"uspConsent")||""};f&&(e.topics=JSON.stringify(f));const r=k(t);r&&(e.gpc=r),y&&(e.cdep=y),function(){try{if((0,n.getWindowTop)().location.href)return!0}catch(e){return!1}}()&&(e.pr=b.document&&b.document.referrer||"",e.scrd=b.devicePixelRatio||0,e.title=b.document.title||"",e.w=b.innerWidth,e.h=b.innerHeight);const s=window.navigator.maxTouchPoints;s&&(e.mtp=s),p.forEach((t=>{e.p.push(function(e){const t=(0,o.A)(e,"ortb2Imp.ext.gpid")||(0,o.A)(e,"ortb2Imp.ext.data.pbadslot"),r={placement_id:e.adUnitCode,callback_id:e.bidId,sizes:e.mediaTypes.banner.sizes};if(e.params){e.params.placementId&&(r.ym_placement_id=e.params.placementId);const t=T(e,a.D4);t&&(r.bidFloor=t)}t&&(r.gpid=t);const i=(0,o.A)(e,"ortb2Imp.ext.tid");i&&(r.tid=i);e.auctionId&&(r.auctionId=e.auctionId);return JSON.stringify(r)}(t));const r=S(t,"pubcid");r?e.pubcid=r:t.crumbs&&t.crumbs.pubcid&&(e.pubcid=t.crumbs.pubcid);const i=S(t,"tdid");i&&(e.tdid=i);const n=S(t,"criteoId");n&&(e.cri_prebid=n),t.schain&&(e.schain=JSON.stringify(t.schain)),(0,o.A)(t,"params.lr_env")&&(e.ats_envelope=t.params.lr_env)})),e.p="["+e.p.toString()+"]",l.length&&(e.eids=JSON.stringify(l));let d=`${i}?${(0,n.parseQueryStringParameters)(e)}`.length-8e3;if(d>0)for(let t=0;t<A.length&&(d=E(d,e,A[t]),!(d<=0));t++);m.push({method:"GET",url:i,data:e})}if(u.length>0){const e=function(e,t){const r=e[0].schain;let i={id:e[0].bidderRequestId,tmax:t.timeout||400,at:1,imp:e.map((e=>function(e){const t=(0,o.A)(e,"ortb2Imp.ext.gpid")||(0,o.A)(e,"ortb2Imp.ext.data.pbadslot"),r=function(e){const t=(0,o.A)(e,"mediaTypes.video.playerSize");if((0,n.isArrayOfNums)(t,2))return t;if((0,n.isArray)(t)&&(0,n.isArrayOfNums)(t[0],2))return t[0];return null}(e),i={id:e.bidId,tagid:e.adUnitCode,bidfloor:T(e,a.G_),ext:{placement_id:e.params.placementId,tid:(0,o.A)(e,"ortb2Imp.ext.tid")},video:{w:r[0],h:r[1],linearity:1}},s=(0,o.A)(e,"mediaTypes.video",{});Object.keys(s).filter((e=>(0,c.mK)(g,e))).forEach((e=>i.video[e]=s[e]));const d=(0,o.A)(e,"params.video",{});Object.keys(d).filter((e=>(0,c.mK)(g,e))).forEach((e=>i.video[e]=d[e])),i.video.skippable&&(i.video.skip=1,delete i.video.skippable);1===i.video.plcmt&&1===i.video.placement||(i.video.startdelay=v,i.video.playbackmethod=[h]);t&&(i.ext.gpid=t);return i}(e))),site:O(e[0],t),device:(0,o.A)(t,"ortb2.device"),badv:e[0].params.badv||[],bcat:(0,o.A)(t,"bcat")||e[0].params.bcat||[],ext:{prebid:"9.9.0"},ats_envelope:e[0].params.lr_env};r&&(i.schain=r);const d=k(t);d&&(0,s.J)(i,"regs.ext.gpc",d);e[0].auctionId&&(i.auctionId=e[0].auctionId);return function(e,t){const r=t.gdprConsent,i=(0,o.A)(t,"gppConsent.gppString"),n=(0,o.A)(t,"gppConsent.applicableSections");i?(0,s.J)(e,"regs.ext.gpp",i):((0,s.J)(e,"regs.ext.gdpr",r&&r.gdprApplies?1:0),(0,s.J)(e,"user.ext.consent",r&&r.consentString?r.consentString:""));n&&n.length>0&&(0,s.J)(e,"regs.ext.gpp_sid",n);const a=(0,o.A)(t,"uspConsent");!i&&a&&(0,s.J)(e,"regs.ext.us_privacy",a)}(i,t),i}(u,t);f&&(e.topics=f),l.length&&(0,s.J)(e,"user.ext.eids",l),m.push({method:"POST",url:d,data:e})}return m},interpretResponse:function(e,t){let r=[];const i=e.body;if(i.length>0&&i.forEach((e=>{e.cpm>0&&r.push(function(e){return{dealId:e.publisherDealId,requestId:e.callback_id,cpm:e.cpm,width:e.width,height:e.height,creativeId:e.creative_id,currency:u,netRevenue:l,ttl:300,ad:e.ad,meta:{advertiserDomains:e.adomain||[],mediaType:a.D4}}}(e))})),i.seatbid){i.seatbid.reduce(((e,t)=>e.concat(t.bid)),[]).forEach((e=>r.push(function(e,t){const r=(0,c.I6)((0,o.A)(t,"data.imp")||[],(t=>t.id===e.impid));let i={dealId:e.dealid,requestId:r.id,cpm:e.price,width:r.video.w,height:r.video.h,creativeId:e.crid||e.adid,currency:u,netRevenue:l,mediaType:a.G_,ttl:m,vastXml:e.adm,meta:{advertiserDomains:e.adomain||[],mediaType:a.G_}};if(r.video.plcmt&&1!==r.video.plcmt){const e=p.A4.install({url:f,config:{width:i.width,height:i.height,vastTimeout:15e3,maxAllowedVastTagRedirects:5,allowVpaid:!0,autoPlay:!0,preload:!0,mute:!0},id:r.tagid,loaded:!1});e.setRender((function(e){e.renderer.push((()=>{const{id:t,config:r}=e.renderer;window.YMoutstreamPlayer(e,t,r)}))})),i.renderer=e}return i}(e,t))))}return r},getUserSyncs:function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";const n=[],o="&gdpr="+(r.gdprApplies?1:0),s=`&gdpr_consent=${encodeURIComponent(r.consentString||"")}`,a=`https://ads.yieldmo.com/pbcas?${`us_privacy=${encodeURIComponent(i)}`}${o}${s}`;return e.iframeEnabled?n.push({type:"iframe",url:a+"&type=iframe"}):e.pixelEnabled&&n.push({type:"image",url:a+"&type=image"}),n}};function I(e){return!!(0,o.A)(e,"mediaTypes.banner")}function w(e){return!!(0,o.A)(e,"mediaTypes.video")}function _(){return document.querySelector('meta[name="description"]')&&document.querySelector('meta[name="description"]').getAttribute("content")||""}function S(e,t){return"object"==typeof(0,o.A)(e,"userId")?e.userId[t]:void 0}function k(e){return(0,o.A)(e,"ortb2.regs.ext.gpc")}function T(e,t){let r={};return"function"==typeof e.getFloor&&(r=e.getFloor({currency:u,mediaType:t,size:"*"})),r.floor||e.params.bidfloor||e.params.bidFloor||0}function O(e,t){let r={};const i=(0,n.parseUrl)((0,o.A)(t,"refererInfo.page"));(0,n.isEmpty)(i)||(r.page=`${i.protocol}://${i.hostname}${i.pathname}`),t.refererInfo?.ref&&(r.ref=t.refererInfo.ref);const s=document.getElementsByTagName("meta").keywords;s&&s.content&&(r.keywords=s.content);const a=(0,o.A)(e,"params.site");return a&&Object.keys(a).filter((e=>(0,c.mK)(y,e))).forEach((e=>r[e]=a[e])),r}function E(e,t,r){if(t[r].length>e)return t[r]=t[r].substring(0,t[r].length-e),0;const i=e-t[r].length;return t[r]="",i}function N(e,t){return`${t?"https://ads-stg.yieldmo.com":"https://ads.yieldmo.com"}${e}`}(0,d.a$)(x),(0,i.E)("yieldmoBidAdapter")}},e=>{e.O(0,[60802,51085],(()=>{return t=64668,e(e.s=t);var t}));e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.pbjsChunk=self.pbjsChunk||[]).push([[38743],{98059:(e,t,n)=>{var s=n(7873),i=n(91069),d=n(68044),a=n(88910),o=n(78969),r=n(11445),c=n(97779),g=n(67314);const l={},p={},b={},u={};u[o.qY.BID_ADJUSTMENT]=!0,u[o.qY.BIDDER_DONE]=!0,u[o.qY.AUCTION_END]=!0;let v="",f="https://pool.tsukiji.iponweb.net/hba",I="";function S(e,t){e.adUnitCode&&t[e.adUnitCode]&&(e.adUnitName=t[e.adUnitCode]),(0,i.isArray)(e.adUnits)&&e.adUnits.forEach((e=>{e.code&&t[e.code]&&(e.name=t[e.code])})),(0,i.isArray)(e.adUnitCodes)&&(e.adUnitNames=e.adUnitCodes.map((e=>t[e]))),["bids","bidderRequests","bidsReceived","noBids"].forEach((n=>{!function(e,t){(0,i.isArray)(e)&&e.forEach((e=>{S(e,t)}))}(e[n],t)}))}const y=Object.assign((0,a.Ay)({analyticsType:"endpoint"}),{getUrl:()=>f,track(e){let{eventType:t,args:n={}}=e;if(t===o.qY.BID_REQUESTED){const e=`${n.bidderCode}_${n.auctionId}`;l[e]=(0,i.deepClone)(n),l[e].bids=[],n.bids.forEach((e=>{p[`${e.bidId}_${e.auctionId}`]=e}))}if(t===o.qY.BID_TIMEOUT&&(0,i.isArray)(n)){const e=y.eventsStorage,s={};n.forEach((n=>{const i=`${n.bidId}_${n.auctionId}`,d=`${n.bidder}_${n.auctionId}`;e[n.auctionId]||(e[n.auctionId]={events:[]}),(l[d]||s[n.bidder])&&p[i]&&(s[n.bidder]||(s[n.bidder]=l[d],e[n.auctionId].events.push({eventType:t,params:s[n.bidder]}),delete l[d]),s[n.bidder].bids.push(p[i]),delete p[i])}))}else if(v=n.auctionId||v,v){const e=y.eventsStorage;e[v]||(e[v]={events:[]});const s=n.refererInfo&&n.refererInfo.page;s&&b[v]!==s&&(b[v]=s);const i=Object.assign({},n);if(delete i.ad,i.bidsReceived&&(i.bidsReceived=i.bidsReceived.map((e=>{const t=Object.assign({},e);return delete t.ad,t}))),u[t]||e[v].events.push({eventType:t,params:i}),t===o.qY.AUCTION_END||t===o.qY.BID_WON){if(i.adServerTargeting=c.iS.getAllTargeting(g.n.getAdUnitCodes(),g.n.getBidsReceived()),y.eventsStorage[v]&&y.eventsStorage[v].events.length){y.eventsStorage[v].page={url:b[v]},y.eventsStorage[v].pubId=I,y.eventsStorage[v].wrapper_version="9.
|
|
1
|
+
(self.pbjsChunk=self.pbjsChunk||[]).push([[38743],{98059:(e,t,n)=>{var s=n(7873),i=n(91069),d=n(68044),a=n(88910),o=n(78969),r=n(11445),c=n(97779),g=n(67314);const l={},p={},b={},u={};u[o.qY.BID_ADJUSTMENT]=!0,u[o.qY.BIDDER_DONE]=!0,u[o.qY.AUCTION_END]=!0;let v="",f="https://pool.tsukiji.iponweb.net/hba",I="";function S(e,t){e.adUnitCode&&t[e.adUnitCode]&&(e.adUnitName=t[e.adUnitCode]),(0,i.isArray)(e.adUnits)&&e.adUnits.forEach((e=>{e.code&&t[e.code]&&(e.name=t[e.code])})),(0,i.isArray)(e.adUnitCodes)&&(e.adUnitNames=e.adUnitCodes.map((e=>t[e]))),["bids","bidderRequests","bidsReceived","noBids"].forEach((n=>{!function(e,t){(0,i.isArray)(e)&&e.forEach((e=>{S(e,t)}))}(e[n],t)}))}const y=Object.assign((0,a.Ay)({analyticsType:"endpoint"}),{getUrl:()=>f,track(e){let{eventType:t,args:n={}}=e;if(t===o.qY.BID_REQUESTED){const e=`${n.bidderCode}_${n.auctionId}`;l[e]=(0,i.deepClone)(n),l[e].bids=[],n.bids.forEach((e=>{p[`${e.bidId}_${e.auctionId}`]=e}))}if(t===o.qY.BID_TIMEOUT&&(0,i.isArray)(n)){const e=y.eventsStorage,s={};n.forEach((n=>{const i=`${n.bidId}_${n.auctionId}`,d=`${n.bidder}_${n.auctionId}`;e[n.auctionId]||(e[n.auctionId]={events:[]}),(l[d]||s[n.bidder])&&p[i]&&(s[n.bidder]||(s[n.bidder]=l[d],e[n.auctionId].events.push({eventType:t,params:s[n.bidder]}),delete l[d]),s[n.bidder].bids.push(p[i]),delete p[i])}))}else if(v=n.auctionId||v,v){const e=y.eventsStorage;e[v]||(e[v]={events:[]});const s=n.refererInfo&&n.refererInfo.page;s&&b[v]!==s&&(b[v]=s);const i=Object.assign({},n);if(delete i.ad,i.bidsReceived&&(i.bidsReceived=i.bidsReceived.map((e=>{const t=Object.assign({},e);return delete t.ad,t}))),u[t]||e[v].events.push({eventType:t,params:i}),t===o.qY.AUCTION_END||t===o.qY.BID_WON){if(i.adServerTargeting=c.iS.getAllTargeting(g.n.getAdUnitCodes(),g.n.getBidsReceived()),y.eventsStorage[v]&&y.eventsStorage[v].events.length){y.eventsStorage[v].page={url:b[v]},y.eventsStorage[v].pubId=I,y.eventsStorage[v].wrapper_version="9.9.0";const e=function(){if(window.googletag&&window.googletag.pubads){const e=googletag.pubads();if(e&&e.getSlots){const t=e.getSlots();if(t&&t.length){const e={};return t.forEach((t=>{const n=t.getSlotElementId(),s=(t.getAdUnitPath()||"").split("/").pop();e[n]=s})),e}}}}();e&&y.eventsStorage[v].events.forEach((t=>{S(t.params,e)}))}y.sendStat(y.eventsStorage[v],v)}}},sendStat(e,t){e&&e.events&&e.events.length&&(delete y.eventsStorage[t],(0,d.RD)(f,{success:function(){},error:function(){}},JSON.stringify(e),{method:"POST"}))}});y.eventsStorage={},y.originEnableAnalytics=y.enableAnalytics,y.enableAnalytics=function(e){const t=e&&e.options;t&&("string"==typeof t.url&&(f=t.url),t.pubId&&(I=t.pubId.toString())),y.originEnableAnalytics(e)},r.Ay.registerAnalyticsAdapter({adapter:y,code:"yieldone"});(0,s.E)("yieldoneAnalyticsAdapter")}},e=>{e.O(0,[2630,60802,51085],(()=>{return t=98059,e(e.s=t);var t}));e.O()}]);
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isPlainObject,
|
|
3
|
+
isArray,
|
|
4
|
+
isStr,
|
|
5
|
+
isNumber,
|
|
6
|
+
} from '../../src/utils.js';
|
|
7
|
+
import { config } from '../../src/config.js';
|
|
8
|
+
import { USERSYNC_DEFAULT_CONFIG } from '../../src/userSync.js';
|
|
9
|
+
|
|
10
|
+
const PIXEL_SYNC_URL = 'https://cm.mgid.com/i.gif';
|
|
11
|
+
const IFRAME_SYNC_URL = 'https://cm.mgid.com/i.html';
|
|
12
|
+
|
|
13
|
+
export function getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent, gppConsent) {
|
|
14
|
+
const spb = isPlainObject(config.getConfig('userSync')) &&
|
|
15
|
+
isNumber(config.getConfig('userSync').syncsPerBidder)
|
|
16
|
+
? config.getConfig('userSync').syncsPerBidder : USERSYNC_DEFAULT_CONFIG.syncsPerBidder;
|
|
17
|
+
|
|
18
|
+
if (spb > 0 && isPlainObject(syncOptions) && (syncOptions.iframeEnabled || syncOptions.pixelEnabled)) {
|
|
19
|
+
let pixels = [];
|
|
20
|
+
if (serverResponses &&
|
|
21
|
+
isArray(serverResponses) &&
|
|
22
|
+
serverResponses.length > 0 &&
|
|
23
|
+
isPlainObject(serverResponses[0].body) &&
|
|
24
|
+
isPlainObject(serverResponses[0].body.ext) &&
|
|
25
|
+
isArray(serverResponses[0].body.ext.cm) &&
|
|
26
|
+
serverResponses[0].body.ext.cm.length > 0) {
|
|
27
|
+
pixels = serverResponses[0].body.ext.cm;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const syncs = [];
|
|
31
|
+
const query = [];
|
|
32
|
+
query.push('cbuster={cbuster}');
|
|
33
|
+
query.push('gdpr_consent=' + encodeURIComponent(isPlainObject(gdprConsent) && isStr(gdprConsent?.consentString) ? gdprConsent.consentString : ''));
|
|
34
|
+
if (isPlainObject(gdprConsent) && typeof gdprConsent?.gdprApplies === 'boolean' && gdprConsent.gdprApplies) {
|
|
35
|
+
query.push('gdpr=1');
|
|
36
|
+
} else {
|
|
37
|
+
query.push('gdpr=0');
|
|
38
|
+
}
|
|
39
|
+
if (isPlainObject(uspConsent) && uspConsent?.consentString) {
|
|
40
|
+
query.push(`us_privacy=${encodeURIComponent(uspConsent?.consentString)}`);
|
|
41
|
+
}
|
|
42
|
+
if (isPlainObject(gppConsent) && gppConsent?.gppString) {
|
|
43
|
+
query.push(`gppString=${encodeURIComponent(gppConsent?.gppString)}`);
|
|
44
|
+
}
|
|
45
|
+
if (config.getConfig('coppa')) {
|
|
46
|
+
query.push('coppa=1')
|
|
47
|
+
}
|
|
48
|
+
const q = query.join('&')
|
|
49
|
+
if (syncOptions.iframeEnabled) {
|
|
50
|
+
syncs.push({
|
|
51
|
+
type: 'iframe',
|
|
52
|
+
url: IFRAME_SYNC_URL + '?' + q.replace('{cbuster}', Math.round(new Date().getTime()))
|
|
53
|
+
});
|
|
54
|
+
} else if (syncOptions.pixelEnabled) {
|
|
55
|
+
if (pixels.length === 0) {
|
|
56
|
+
for (let i = 0; i < spb; i++) {
|
|
57
|
+
syncs.push({
|
|
58
|
+
type: 'image',
|
|
59
|
+
url: PIXEL_SYNC_URL + '?' + q.replace('{cbuster}', Math.round(new Date().getTime())) // randomly selects partner if sync required
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
} else {
|
|
63
|
+
for (let i = 0; i < spb && i < pixels.length; i++) {
|
|
64
|
+
syncs.push({
|
|
65
|
+
type: 'image',
|
|
66
|
+
url: pixels[i] + (pixels[i].indexOf('?') > 0 ? '&' : '?') + q.replace('{cbuster}', Math.round(new Date().getTime()))
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return syncs;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -324,7 +324,7 @@ export function generateGeneralParams(generalObject, bidderRequest, adapterVersi
|
|
|
324
324
|
if (bidderRequest && bidderRequest.refererInfo) {
|
|
325
325
|
generalParams.referrer = deepAccess(bidderRequest, 'refererInfo.ref');
|
|
326
326
|
generalParams.page_url = deepAccess(bidderRequest, 'refererInfo.page') || deepAccess(window, 'location.href');
|
|
327
|
-
generalParams.
|
|
327
|
+
generalParams.site_domain = deepAccess(bidderRequest, 'refererInfo.domain') || deepAccess(window, 'location.hostname');
|
|
328
328
|
}
|
|
329
329
|
|
|
330
330
|
return generalParams;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {isStr, logError} from '../src/utils.js';
|
|
1
|
+
import {isStr, logError, isFn, deepAccess} from '../src/utils.js';
|
|
2
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import {config} from '../src/config.js';
|
|
4
4
|
import {BANNER, VIDEO, NATIVE} from '../src/mediaTypes.js';
|
|
@@ -71,15 +71,15 @@ export const spec = {
|
|
|
71
71
|
if (bidderRequest.uspConsent) {
|
|
72
72
|
payload.uspConsent = bidderRequest.uspConsent;
|
|
73
73
|
}
|
|
74
|
-
let bidFloor = getBidFloor(bidderRequest);
|
|
75
|
-
if (bidFloor) {
|
|
76
|
-
payload.bidFloor = bidFloor;
|
|
77
|
-
}
|
|
78
74
|
}
|
|
79
75
|
validRequest.forEach((bid) => {
|
|
80
76
|
let imp = {};
|
|
81
77
|
Object.keys(bid).forEach(key => imp[key] = bid[key]);
|
|
82
78
|
imp.ortb2 && delete imp.ortb2;
|
|
79
|
+
let bidFloor = getBidFloor(bid);
|
|
80
|
+
if (bidFloor) {
|
|
81
|
+
imp.bidFloor = bidFloor;
|
|
82
|
+
}
|
|
83
83
|
payload.imps.push(imp);
|
|
84
84
|
});
|
|
85
85
|
|
|
@@ -117,10 +117,16 @@ export const spec = {
|
|
|
117
117
|
return pixels;
|
|
118
118
|
}
|
|
119
119
|
};
|
|
120
|
+
|
|
120
121
|
function getEndpointUrl(code) {
|
|
121
122
|
return find(ALIASES, (val) => val.code === code)?.endpoint || ENDPOINT_URL;
|
|
122
123
|
}
|
|
124
|
+
|
|
123
125
|
function getBidFloor(bid) {
|
|
126
|
+
if (!isFn(bid.getFloor)) {
|
|
127
|
+
return deepAccess(bid, 'params.bidFloor', 0);
|
|
128
|
+
}
|
|
129
|
+
|
|
124
130
|
try {
|
|
125
131
|
const bidFloor = bid.getFloor({
|
|
126
132
|
currency: 'USD',
|
|
@@ -132,4 +138,5 @@ function getBidFloor(bid) {
|
|
|
132
138
|
return 0;
|
|
133
139
|
}
|
|
134
140
|
}
|
|
141
|
+
|
|
135
142
|
registerBidder(spec);
|
|
@@ -747,7 +747,7 @@ function bidToTag(bid) {
|
|
|
747
747
|
// page.html?ast_override_div=divId:creativeId,divId2:creativeId2
|
|
748
748
|
const overrides = getParameterByName('ast_override_div');
|
|
749
749
|
if (isStr(overrides) && overrides !== '') {
|
|
750
|
-
const adUnitOverride = overrides.split(',').find((pair) => pair.startsWith(`${bid.adUnitCode}:`));
|
|
750
|
+
const adUnitOverride = decodeURIComponent(overrides).split(',').find((pair) => pair.startsWith(`${bid.adUnitCode}:`));
|
|
751
751
|
if (adUnitOverride) {
|
|
752
752
|
const forceCreativeId = adUnitOverride.split(':')[1];
|
|
753
753
|
if (forceCreativeId) {
|
package/modules/ccxBidAdapter.js
CHANGED
|
@@ -65,7 +65,7 @@ function _validateSizes (sizeObj, type) {
|
|
|
65
65
|
return true
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
function _buildBid (bid) {
|
|
68
|
+
function _buildBid (bid, bidderRequest) {
|
|
69
69
|
let placement = {}
|
|
70
70
|
placement.id = bid.bidId
|
|
71
71
|
placement.secure = 1
|
|
@@ -105,6 +105,10 @@ function _buildBid (bid) {
|
|
|
105
105
|
|
|
106
106
|
placement.ext = {'pid': bid.params.placementId}
|
|
107
107
|
|
|
108
|
+
if (bidderRequest.paapi?.enabled) {
|
|
109
|
+
placement.ext.ae = bid?.ortb2Imp?.ext?.ae
|
|
110
|
+
}
|
|
111
|
+
|
|
108
112
|
return placement
|
|
109
113
|
}
|
|
110
114
|
|
|
@@ -197,7 +201,7 @@ export const spec = {
|
|
|
197
201
|
}
|
|
198
202
|
|
|
199
203
|
_each(validBidRequests, function (bid) {
|
|
200
|
-
requestBody.imp.push(_buildBid(bid))
|
|
204
|
+
requestBody.imp.push(_buildBid(bid, bidderRequest))
|
|
201
205
|
})
|
|
202
206
|
// Return the server request
|
|
203
207
|
return {
|
|
@@ -101,8 +101,7 @@ function init(config) {
|
|
|
101
101
|
rxApi = null;
|
|
102
102
|
|
|
103
103
|
try {
|
|
104
|
-
|
|
105
|
-
initCustomer(version, customer, hostname);
|
|
104
|
+
initCustomer(config);
|
|
106
105
|
return true;
|
|
107
106
|
} catch (error) {
|
|
108
107
|
logError(MODULE, error);
|
|
@@ -137,35 +136,39 @@ export function extractParameters(config) {
|
|
|
137
136
|
/**
|
|
138
137
|
* Initialize sub module for a customer.
|
|
139
138
|
* This will load the external resources for the sub module.
|
|
140
|
-
* @param { String }
|
|
141
|
-
* @param { String } customer
|
|
142
|
-
* @param { String } hostname
|
|
139
|
+
* @param { String } config
|
|
143
140
|
*/
|
|
144
|
-
function initCustomer(
|
|
141
|
+
function initCustomer(config) {
|
|
142
|
+
const { version, customer, hostname } = extractParameters(config);
|
|
145
143
|
const CONNECTOR_URL = buildUrl({
|
|
146
144
|
protocol: 'https',
|
|
147
145
|
host: hostname,
|
|
148
146
|
pathname: `/${version}/prebid/${customer}/connector/rxConnector.js`,
|
|
149
147
|
});
|
|
150
148
|
|
|
151
|
-
|
|
152
|
-
|
|
149
|
+
addConnectorEventListener(customer, config);
|
|
150
|
+
loadExternalScript(CONNECTOR_URL, MODULE_NAME);
|
|
153
151
|
}
|
|
154
152
|
|
|
155
153
|
/**
|
|
156
154
|
* Add event listener to the script tag for the expected events from the external script.
|
|
157
|
-
* @param {
|
|
155
|
+
* @param { String } tagId
|
|
156
|
+
* @param { String } prebidConfig
|
|
158
157
|
*/
|
|
159
|
-
function
|
|
160
|
-
|
|
158
|
+
function addConnectorEventListener(tagId, prebidConfig) {
|
|
159
|
+
window.addEventListener(
|
|
161
160
|
'rxConnectorIsReady',
|
|
162
|
-
async ({ detail: rxConnector }) => {
|
|
161
|
+
async ({ detail: { [tagId]: rxConnector } }) => {
|
|
162
|
+
if (!rxConnector) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
163
165
|
// Fetch the customer configuration
|
|
164
166
|
const { rxApiBuilder, fetchConfig } = rxConnector;
|
|
165
167
|
let config = await fetchConfig(tagId);
|
|
166
168
|
if (!config) {
|
|
167
169
|
return;
|
|
168
170
|
}
|
|
171
|
+
config['prebid'] = prebidConfig || {};
|
|
169
172
|
rxApi = await rxApiBuilder(config);
|
|
170
173
|
}
|
|
171
174
|
);
|
|
@@ -151,14 +151,18 @@ export const spec = {
|
|
|
151
151
|
* @return boolean True if this is a valid bid, and false otherwise.
|
|
152
152
|
*/
|
|
153
153
|
isBidRequestValid: function (bid) {
|
|
154
|
-
if (!bid.params?.
|
|
155
|
-
logError('
|
|
156
|
-
|
|
157
|
-
|
|
154
|
+
if (!bid.params?.domainId || !isNumber(bid.params.domainId)) {
|
|
155
|
+
logError('domainId not provided or not a number');
|
|
156
|
+
if (!bid.params?.placementId || !isNumber(bid.params.placementId)) {
|
|
157
|
+
logError('placementId not provided or not a number');
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
158
160
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
161
|
+
if (!bid.params?.pageId || !isNumber(bid.params.pageId)) {
|
|
162
|
+
logError('pageId not provided or not a number');
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
return true;
|
|
162
166
|
}
|
|
163
167
|
return true;
|
|
164
168
|
},
|
|
@@ -176,8 +180,8 @@ export const spec = {
|
|
|
176
180
|
// process bid requests
|
|
177
181
|
let processed = validBidRequests
|
|
178
182
|
.map(bid => slotDimensions(bid))
|
|
179
|
-
// Flattens the pageId and placement Id for backwards compatibility.
|
|
180
|
-
.map((bid) => ({...bid, pageId: bid.params?.pageId, placementId: bid.params?.placementId}));
|
|
183
|
+
// Flattens the pageId, domainId and placement Id for backwards compatibility.
|
|
184
|
+
.map((bid) => ({...bid, pageId: bid.params?.pageId, domainId: bid.params?.domainId, placementId: bid.params?.placementId}));
|
|
181
185
|
|
|
182
186
|
const extensions = getCwExtension();
|
|
183
187
|
const payload = {
|
|
@@ -14,14 +14,15 @@ Prebid.js Adapter for C-Wire.
|
|
|
14
14
|
|
|
15
15
|
Below, the list of C-WIRE params and where they can be set.
|
|
16
16
|
|
|
17
|
-
| Param name | URL parameter | AdUnit config | Type |
|
|
18
|
-
|
|
19
|
-
| pageId | | x | number |
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
|
23
|
-
|
|
|
24
|
-
|
|
|
17
|
+
| Param name | URL parameter | AdUnit config | Type | Required |
|
|
18
|
+
|-------------|:-------------:|:-------------:|:--------:|:--------:|
|
|
19
|
+
| pageId | | x | number | NO |
|
|
20
|
+
| domainId | | x | number | YES |
|
|
21
|
+
| placementId | | x | number | NO |
|
|
22
|
+
| cwgroups | x | | string | NO |
|
|
23
|
+
| cwcreative | x | | string | NO |
|
|
24
|
+
| cwdebug | x | | boolean | NO |
|
|
25
|
+
| cwfeatures | x | | string | NO |
|
|
25
26
|
|
|
26
27
|
|
|
27
28
|
### adUnit configuration
|
|
@@ -38,12 +39,30 @@ var adUnits = [
|
|
|
38
39
|
}
|
|
39
40
|
},
|
|
40
41
|
params: {
|
|
41
|
-
|
|
42
|
-
placementId: 2211521, //
|
|
42
|
+
domainId: 1422, // required - number
|
|
43
|
+
placementId: 2211521, // optional - number
|
|
43
44
|
}
|
|
44
45
|
}]
|
|
45
46
|
}
|
|
46
47
|
];
|
|
48
|
+
// old version for the compatibility
|
|
49
|
+
var adUnits = [
|
|
50
|
+
{
|
|
51
|
+
code: 'target_div_id', // REQUIRED
|
|
52
|
+
bids: [{
|
|
53
|
+
bidder: 'cwire',
|
|
54
|
+
mediaTypes: {
|
|
55
|
+
banner: {
|
|
56
|
+
sizes: [[400, 600]],
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
params: {
|
|
60
|
+
pageId: 1422, // required - number
|
|
61
|
+
placementId: 2211521, // required - number
|
|
62
|
+
}
|
|
63
|
+
}]
|
|
64
|
+
}
|
|
65
|
+
];
|
|
47
66
|
```
|
|
48
67
|
|
|
49
68
|
### URL parameters
|
|
@@ -64,7 +64,6 @@ function getVideoMetadata(bidRequest, bidderRequest) {
|
|
|
64
64
|
title: videoParams.title || deepAccess(contentObj, 'title', ''),
|
|
65
65
|
url: videoParams.url || deepAccess(contentObj, 'url', ''),
|
|
66
66
|
topics: videoParams.topics || '',
|
|
67
|
-
xid: videoParams.xid || '',
|
|
68
67
|
isCreatedForKids: typeof videoParams.isCreatedForKids === 'boolean'
|
|
69
68
|
? videoParams.isCreatedForKids
|
|
70
69
|
: null,
|
|
@@ -79,6 +78,7 @@ function getVideoMetadata(bidRequest, bidderRequest) {
|
|
|
79
78
|
autoplay: typeof videoParams.autoplay === 'boolean'
|
|
80
79
|
? videoParams.autoplay
|
|
81
80
|
: null,
|
|
81
|
+
playerName: videoParams.playerName || deepAccess(contentObj, 'playerName', ''),
|
|
82
82
|
playerVolume: (
|
|
83
83
|
typeof videoParams.playerVolume === 'number' &&
|
|
84
84
|
videoParams.playerVolume >= 0 &&
|
|
@@ -88,7 +88,7 @@ Please note that failing to set these will result in the adapter not bidding at
|
|
|
88
88
|
To allow better targeting, you should provide as much context about the video as possible.
|
|
89
89
|
There are three ways of doing this depending on if you're using Dailymotion player or a third party one.
|
|
90
90
|
|
|
91
|
-
If you are using the Dailymotion player, you
|
|
91
|
+
If you are using the Dailymotion player, you must provide the video `xid` in the `video.id` field of your ad unit, example:
|
|
92
92
|
|
|
93
93
|
```javascript
|
|
94
94
|
const adUnits = [
|
|
@@ -98,7 +98,10 @@ const adUnits = [
|
|
|
98
98
|
params: {
|
|
99
99
|
apiKey: 'dailymotion-testing',
|
|
100
100
|
video: {
|
|
101
|
-
|
|
101
|
+
id: 'x123456' // Dailymotion infrastructure unique video ID
|
|
102
|
+
autoplay: false,
|
|
103
|
+
playerName: 'dailymotion',
|
|
104
|
+
playerVolume: 8
|
|
102
105
|
},
|
|
103
106
|
}
|
|
104
107
|
}],
|
|
@@ -117,9 +120,9 @@ const adUnits = [
|
|
|
117
120
|
```
|
|
118
121
|
|
|
119
122
|
This will automatically fetch the most up-to-date information about the video.
|
|
120
|
-
|
|
123
|
+
Please note that if you provide any video metadata not listed above, they will be replaced by the ones fetched from the `video.id`.
|
|
121
124
|
|
|
122
|
-
If you are using a third party video player, you should
|
|
125
|
+
If you are using a third party video player, you should fill the following members:
|
|
123
126
|
|
|
124
127
|
```javascript
|
|
125
128
|
const adUnits = [
|
|
@@ -143,6 +146,7 @@ const adUnits = [
|
|
|
143
146
|
isCreatedForKids: false,
|
|
144
147
|
videoViewsInSession: 1,
|
|
145
148
|
autoplay: false,
|
|
149
|
+
playerName: 'video.js',
|
|
146
150
|
playerVolume: 8
|
|
147
151
|
}
|
|
148
152
|
}
|
|
@@ -181,14 +185,14 @@ Each of the following video metadata fields can be added in bids.params.video.
|
|
|
181
185
|
* `title` - Video title
|
|
182
186
|
* `url` - URL of the content
|
|
183
187
|
* `topics` - Main topics for the video, comma separated
|
|
184
|
-
* `xid` - Dailymotion video identifier (only applicable if using the Dailymotion player)
|
|
185
188
|
* `isCreatedForKids` - [The content is created for children as primary audience](https://faq.dailymotion.com/hc/en-us/articles/360020920159-Content-created-for-kids)
|
|
186
189
|
|
|
187
|
-
The following contextual
|
|
190
|
+
The following contextual information can also be added in bids.params.video.
|
|
188
191
|
|
|
189
|
-
* `videoViewsInSession` - Number of videos viewed within the current user session
|
|
190
192
|
* `autoplay` - Playback was launched without user interaction
|
|
193
|
+
* `playerName` - Name of the player used to display the video
|
|
191
194
|
* `playerVolume` - Player volume between 0 (muted, 0%) and 10 (100%)
|
|
195
|
+
* `videoViewsInSession` - Number of videos viewed within the current user session
|
|
192
196
|
|
|
193
197
|
If you already specify [First-Party data](https://docs.prebid.org/features/firstPartyData.html) through the `ortb2` object when calling [`pbjs.requestBids(requestObj)`](https://docs.prebid.org/dev-docs/publisher-api-reference/requestBids.html), we will collect the following values and fallback to bids.params.video values when applicable. See the mapping below.
|
|
194
198
|
|
|
@@ -2,11 +2,11 @@ import * as utils from '../src/utils.js';
|
|
|
2
2
|
import { getStorageManager } from '../src/storageManager.js';
|
|
3
3
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
4
4
|
import { BANNER, NATIVE } from '../src/mediaTypes.js';
|
|
5
|
-
import { getHLen, getHC, getDM } from '../src/fpd/navigator.js';
|
|
6
5
|
import { getPageTitle, getPageDescription, getPageKeywords, getConnectionDownLink, getReferrer } from '../libraries/fpdUtils/pageInfo.js';
|
|
7
6
|
import { getDevice, getScreenSize } from '../libraries/fpdUtils/deviceInfo.js';
|
|
8
7
|
import { getBidFloor } from '../libraries/currencyUtils/floor.js';
|
|
9
8
|
import { transformSizes, normalAdSize } from '../libraries/sizeUtils/tranformSize.js';
|
|
9
|
+
import { getHLen } from '../libraries/navigatorData/navigatorData.js';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
|
|
@@ -291,8 +291,6 @@ function getParam(validBidRequests, bidderRequest) {
|
|
|
291
291
|
},
|
|
292
292
|
device: {
|
|
293
293
|
nbw: getConnectionDownLink(),
|
|
294
|
-
hc: getHC(),
|
|
295
|
-
dm: getDM()
|
|
296
294
|
}
|
|
297
295
|
}
|
|
298
296
|
} catch (error) {}
|
|
@@ -70,14 +70,19 @@ export const spec = {
|
|
|
70
70
|
},
|
|
71
71
|
};
|
|
72
72
|
|
|
73
|
-
function getPayload(bid, userData) {
|
|
73
|
+
export function getPayload(bid, userData) {
|
|
74
74
|
if (!userData || !bid) {
|
|
75
75
|
return false;
|
|
76
76
|
}
|
|
77
77
|
const { bidId, params } = bid;
|
|
78
|
-
const { placementId } = params;
|
|
78
|
+
const { placementId, publisherUrl } = params;
|
|
79
79
|
const {
|
|
80
80
|
userid,
|
|
81
|
+
email,
|
|
82
|
+
firstname,
|
|
83
|
+
lastname,
|
|
84
|
+
hcpid,
|
|
85
|
+
dob,
|
|
81
86
|
specialization,
|
|
82
87
|
gender,
|
|
83
88
|
city,
|
|
@@ -95,11 +100,11 @@ function getPayload(bid, userData) {
|
|
|
95
100
|
|
|
96
101
|
const data = {
|
|
97
102
|
userid: platformUid || userid || '',
|
|
98
|
-
email: '',
|
|
99
|
-
firstname: '',
|
|
100
|
-
lastname: '',
|
|
103
|
+
email: email || '',
|
|
104
|
+
firstname: firstname || '',
|
|
105
|
+
lastname: lastname || '',
|
|
101
106
|
specialization: specialization || '',
|
|
102
|
-
hcpid: '',
|
|
107
|
+
hcpid: hcpid || '',
|
|
103
108
|
gender: gender || '',
|
|
104
109
|
city: city || '',
|
|
105
110
|
state: state || '',
|
|
@@ -113,9 +118,10 @@ function getPayload(bid, userData) {
|
|
|
113
118
|
hashedmobile: hashedmobile || '',
|
|
114
119
|
country: country || '',
|
|
115
120
|
organization: organization || '',
|
|
116
|
-
dob: '',
|
|
121
|
+
dob: dob || '',
|
|
117
122
|
userconsent: 1,
|
|
118
|
-
mobile: mobile || ''
|
|
123
|
+
mobile: mobile || '',
|
|
124
|
+
pageurl: publisherUrl || ''
|
|
119
125
|
};
|
|
120
126
|
return {
|
|
121
127
|
data,
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { NATIVE } from '../src/mediaTypes.js';
|
|
2
|
+
import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
|
|
3
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
4
|
+
import { getDevice } from '../libraries/fpdUtils/deviceInfo.js';
|
|
5
|
+
|
|
6
|
+
// ***** ECLICKADS ADAPTER *****
|
|
7
|
+
export const BIDDER_CODE = 'eclickads';
|
|
8
|
+
const DEFAULT_CURRENCY = ['USD'];
|
|
9
|
+
const DEFAULT_TTL = 1000;
|
|
10
|
+
export const ENDPOINT = 'https://g.eclick.vn/rtb_hb_request?fosp_uid=';
|
|
11
|
+
export const spec = {
|
|
12
|
+
code: BIDDER_CODE,
|
|
13
|
+
supportedMediaTypes: [NATIVE],
|
|
14
|
+
isBidRequestValid: (bid) => {
|
|
15
|
+
return !!bid && !!bid.params && !!bid.bidder && !!bid.params.zid;
|
|
16
|
+
},
|
|
17
|
+
buildRequests: (validBidRequests = [], bidderRequest) => {
|
|
18
|
+
validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
|
|
19
|
+
|
|
20
|
+
const ortb2ConfigFPD = bidderRequest.ortb2.site.ext?.data || {};
|
|
21
|
+
const ortb2Device = bidderRequest.ortb2.device;
|
|
22
|
+
const ortb2Site = bidderRequest.ortb2.site;
|
|
23
|
+
|
|
24
|
+
const isMobile = getDevice();
|
|
25
|
+
const imp = [];
|
|
26
|
+
const fENDPOINT = ENDPOINT + (ortb2ConfigFPD.fosp_uid || '');
|
|
27
|
+
const request = {
|
|
28
|
+
deviceWidth: ortb2Device.w,
|
|
29
|
+
deviceHeight: ortb2Device.h,
|
|
30
|
+
ua: ortb2Device.ua,
|
|
31
|
+
language: ortb2Device.language,
|
|
32
|
+
device: isMobile ? 'mobile' : 'desktop',
|
|
33
|
+
host: ortb2Site.domain,
|
|
34
|
+
page: ortb2Site.page,
|
|
35
|
+
imp,
|
|
36
|
+
myvne_id: ortb2ConfigFPD.myvne_id || '',
|
|
37
|
+
orig_aid: ortb2ConfigFPD.orig_aid,
|
|
38
|
+
fosp_aid: ortb2ConfigFPD.fosp_aid,
|
|
39
|
+
fosp_uid: ortb2ConfigFPD.fosp_uid,
|
|
40
|
+
id: ortb2ConfigFPD.id,
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
validBidRequests.map((bid) => {
|
|
44
|
+
imp.push({
|
|
45
|
+
requestId: bid.bidId,
|
|
46
|
+
adUnitCode: bid.adUnitCode,
|
|
47
|
+
zid: bid.params.zid,
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
method: 'POST',
|
|
53
|
+
url: fENDPOINT,
|
|
54
|
+
data: request,
|
|
55
|
+
};
|
|
56
|
+
},
|
|
57
|
+
interpretResponse: (serverResponse) => {
|
|
58
|
+
const seatbid = serverResponse.body?.seatbid || [];
|
|
59
|
+
return seatbid.reduce((bids, bid) => {
|
|
60
|
+
return [
|
|
61
|
+
...bids,
|
|
62
|
+
{
|
|
63
|
+
id: bid.id,
|
|
64
|
+
impid: bid.impid,
|
|
65
|
+
adUnitCode: bid.adUnitCode,
|
|
66
|
+
cpm: bid.cpm,
|
|
67
|
+
ttl: bid.ttl || DEFAULT_TTL,
|
|
68
|
+
requestId: bid.requestId,
|
|
69
|
+
creativeId: bid.creativeId,
|
|
70
|
+
netRevenue: bid.netRevenue,
|
|
71
|
+
currency: bid.currency || DEFAULT_CURRENCY,
|
|
72
|
+
adserverTargeting: {
|
|
73
|
+
hb_ad_eclickads: bid.ad,
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
];
|
|
77
|
+
}, []);
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
registerBidder(spec);
|