prebid.js 9.53.2 → 9.53.4

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 (229) hide show
  1. package/dist/33acrossAnalyticsAdapter.js +1 -1
  2. package/dist/33acrossBidAdapter.js +1 -1
  3. package/dist/33acrossIdSystem.js +1 -1
  4. package/dist/BTBidAdapter.js +1 -1
  5. package/dist/adagioAnalyticsAdapter.js +1 -1
  6. package/dist/adagioBidAdapter.js +1 -1
  7. package/dist/adagioRtdProvider.js +1 -1
  8. package/dist/adagioUtils.js +1 -1
  9. package/dist/addefendBidAdapter.js +1 -1
  10. package/dist/adgenerationBidAdapter.js +1 -1
  11. package/dist/adlooxRtdProvider.js +1 -1
  12. package/dist/adqueryBidAdapter.js +1 -1
  13. package/dist/adrelevantisBidAdapter.js +1 -1
  14. package/dist/adstirBidAdapter.js +1 -1
  15. package/dist/adtrgtmeBidAdapter.js +1 -1
  16. package/dist/adxcgAnalyticsAdapter.js +1 -1
  17. package/dist/adxcgBidAdapter.js +1 -1
  18. package/dist/adyoulikeBidAdapter.js +1 -1
  19. package/dist/agmaAnalyticsAdapter.js +1 -1
  20. package/dist/ajaBidAdapter.js +1 -1
  21. package/dist/amxBidAdapter.js +1 -1
  22. package/dist/amxIdSystem.js +1 -1
  23. package/dist/aniviewBidAdapter.js +1 -1
  24. package/dist/appierAnalyticsAdapter.js +1 -1
  25. package/dist/appnexusBidAdapter.js +1 -1
  26. package/dist/asoBidAdapter.js +1 -1
  27. package/dist/axonixBidAdapter.js +1 -1
  28. package/dist/beopBidAdapter.js +1 -1
  29. package/dist/bidderTimeoutUtils.js +1 -0
  30. package/dist/bidglassBidAdapter.js +1 -1
  31. package/dist/big-richmediaBidAdapter.js +1 -1
  32. package/dist/bitmediaBidAdapter.js +1 -1
  33. package/dist/bridBidAdapter.js +1 -1
  34. package/dist/bridgeuppBidAdapter.js +1 -1
  35. package/dist/bridgewellBidAdapter.js +1 -1
  36. package/dist/brightMountainMediaBidAdapter.js +1 -1
  37. package/dist/carodaBidAdapter.js +1 -1
  38. package/dist/chtnwBidAdapter.js +1 -1
  39. package/dist/chunk-core.js +1 -1
  40. package/dist/concertBidAdapter.js +1 -1
  41. package/dist/connectadBidAdapter.js +1 -1
  42. package/dist/consumableBidAdapter.js +1 -1
  43. package/dist/contxtfulBidAdapter.js +1 -1
  44. package/dist/conversantAnalyticsAdapter.js +1 -1
  45. package/dist/conversantBidAdapter.js +1 -1
  46. package/dist/craftBidAdapter.js +1 -1
  47. package/dist/criteoBidAdapter.js +1 -1
  48. package/dist/cwireBidAdapter.js +1 -1
  49. package/dist/dailymotionBidAdapter.js +1 -1
  50. package/dist/debugging-standalone.js +1 -1
  51. package/dist/dependencies.json +10 -1
  52. package/dist/dspxBidAdapter.js +1 -1
  53. package/dist/dxkultureBidAdapter.js +1 -1
  54. package/dist/eplanningBidAdapter.js +1 -1
  55. package/dist/equativBidAdapter.js +1 -1
  56. package/dist/eskimiBidAdapter.js +1 -1
  57. package/dist/euidIdSystem.js +1 -1
  58. package/dist/exadsBidAdapter.js +1 -1
  59. package/dist/excoBidAdapter.js +1 -1
  60. package/dist/feedadBidAdapter.js +1 -1
  61. package/dist/finativeBidAdapter.js +1 -1
  62. package/dist/freewheel-sspBidAdapter.js +1 -1
  63. package/dist/fwsspBidAdapter.js +1 -1
  64. package/dist/gmosspBidAdapter.js +1 -1
  65. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  66. package/dist/greenbidsBidAdapter.js +1 -1
  67. package/dist/greenbidsRtdProvider.js +1 -1
  68. package/dist/gridBidAdapter.js +1 -1
  69. package/dist/gumgumBidAdapter.js +1 -1
  70. package/dist/h12mediaBidAdapter.js +1 -1
  71. package/dist/hypelabBidAdapter.js +1 -1
  72. package/dist/id5AnalyticsAdapter.js +1 -1
  73. package/dist/id5IdSystem.js +1 -1
  74. package/dist/imdsBidAdapter.js +1 -1
  75. package/dist/improvedigitalBidAdapter.js +1 -1
  76. package/dist/inmobiBidAdapter.js +1 -1
  77. package/dist/insticatorBidAdapter.js +1 -1
  78. package/dist/intentIqAnalyticsAdapter.js +1 -1
  79. package/dist/ixBidAdapter.js +1 -1
  80. package/dist/jixieBidAdapter.js +1 -1
  81. package/dist/justpremiumBidAdapter.js +1 -1
  82. package/dist/kargoBidAdapter.js +1 -1
  83. package/dist/kimberliteBidAdapter.js +1 -1
  84. package/dist/konduitAnalyticsAdapter.js +1 -1
  85. package/dist/kueezBidAdapter.js +1 -1
  86. package/dist/lassoBidAdapter.js +1 -1
  87. package/dist/lifestreetBidAdapter.js +1 -1
  88. package/dist/liveIntentId.js +1 -1
  89. package/dist/logicadBidAdapter.js +1 -1
  90. package/dist/loglyliftBidAdapter.js +1 -1
  91. package/dist/luceadBidAdapter.js +1 -1
  92. package/dist/mabidderBidAdapter.js +1 -1
  93. package/dist/madsenseBidAdapter.js +1 -1
  94. package/dist/magniteAnalyticsAdapter.js +1 -1
  95. package/dist/malltvAnalyticsAdapter.js +1 -1
  96. package/dist/marsmediaBidAdapter.js +1 -1
  97. package/dist/mediafuseBidAdapter.js +1 -1
  98. package/dist/medianetBidAdapter.js +1 -1
  99. package/dist/medianetUtils.js +1 -1
  100. package/dist/mediasquareBidAdapter.js +1 -1
  101. package/dist/mgidBidAdapter.js +1 -1
  102. package/dist/missenaBidAdapter.js +1 -1
  103. package/dist/mobilefuseBidAdapter.js +1 -1
  104. package/dist/nextMillenniumBidAdapter.js +1 -1
  105. package/dist/nexx360Utils.js +1 -1
  106. package/dist/nobidAnalyticsAdapter.js +1 -1
  107. package/dist/nobidBidAdapter.js +1 -1
  108. package/dist/nodalsAiRtdProvider.js +1 -1
  109. package/dist/not-for-prod/prebid.js +178 -175
  110. package/dist/objectGuard.js +1 -1
  111. package/dist/oguryBidAdapter.js +1 -1
  112. package/dist/onetagBidAdapter.js +1 -1
  113. package/dist/ooloAnalyticsAdapter.js +1 -1
  114. package/dist/openxBidAdapter.js +1 -1
  115. package/dist/optableRtdProvider.js +1 -1
  116. package/dist/optidigitalBidAdapter.js +1 -1
  117. package/dist/orbidderBidAdapter.js +1 -1
  118. package/dist/outbrainBidAdapter.js +1 -1
  119. package/dist/pixfutureBidAdapter.js +1 -1
  120. package/dist/publinkIdSystem.js +1 -1
  121. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  122. package/dist/pubmaticBidAdapter.js +1 -1
  123. package/dist/pubmaticIdSystem.js +1 -1
  124. package/dist/pubmaticRtdProvider.js +1 -1
  125. package/dist/pubmaticUtils.js +1 -0
  126. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  127. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  128. package/dist/pxyzBidAdapter.js +1 -1
  129. package/dist/quantcastBidAdapter.js +1 -1
  130. package/dist/readpeakBidAdapter.js +1 -1
  131. package/dist/relaidoBidAdapter.js +1 -1
  132. package/dist/retailspotBidAdapter.js +1 -1
  133. package/dist/rhythmoneBidAdapter.js +1 -1
  134. package/dist/riseUtils.js +1 -1
  135. package/dist/rtdModule.js +1 -1
  136. package/dist/rubiconBidAdapter.js +1 -1
  137. package/dist/seedingAllianceBidAdapter.js +1 -1
  138. package/dist/seedtagBidAdapter.js +1 -1
  139. package/dist/sevioBidAdapter.js +1 -0
  140. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  141. package/dist/sharethroughBidAdapter.js +1 -1
  142. package/dist/showheroes-bsBidAdapter.js +1 -1
  143. package/dist/smaatoBidAdapter.js +1 -1
  144. package/dist/smartadserverBidAdapter.js +1 -1
  145. package/dist/smartxBidAdapter.js +1 -1
  146. package/dist/smilewantedBidAdapter.js +1 -1
  147. package/dist/snigelBidAdapter.js +1 -1
  148. package/dist/sonobiBidAdapter.js +1 -1
  149. package/dist/sovrnBidAdapter.js +1 -1
  150. package/dist/sparteoBidAdapter.js +1 -1
  151. package/dist/sspBCBidAdapter.js +1 -1
  152. package/dist/stvBidAdapter.js +1 -1
  153. package/dist/sublimeBidAdapter.js +1 -1
  154. package/dist/taboolaBidAdapter.js +1 -1
  155. package/dist/tappxBidAdapter.js +1 -1
  156. package/dist/targetVideoBidAdapter.js +1 -1
  157. package/dist/teadsBidAdapter.js +1 -1
  158. package/dist/terceptAnalyticsAdapter.js +1 -1
  159. package/dist/themoneytizerBidAdapter.js +1 -1
  160. package/dist/timeoutRtdProvider.js +1 -1
  161. package/dist/trionBidAdapter.js +1 -1
  162. package/dist/tripleliftBidAdapter.js +1 -1
  163. package/dist/ttdBidAdapter.js +1 -1
  164. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  165. package/dist/uid2IdSystem.js +1 -1
  166. package/dist/underdogmediaBidAdapter.js +1 -1
  167. package/dist/undertoneBidAdapter.js +1 -1
  168. package/dist/unrulyBidAdapter.js +1 -1
  169. package/dist/userId.js +1 -1
  170. package/dist/vidazooUtils.js +1 -1
  171. package/dist/videobyteBidAdapter.js +1 -1
  172. package/dist/visxBidAdapter.js +1 -1
  173. package/dist/vuukleBidAdapter.js +1 -1
  174. package/dist/widespaceBidAdapter.js +1 -1
  175. package/dist/winrBidAdapter.js +1 -1
  176. package/dist/yahooAdsBidAdapter.js +1 -1
  177. package/dist/yandexBidAdapter.js +1 -1
  178. package/dist/yieldmoBidAdapter.js +1 -1
  179. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  180. package/integrationExamples/gpt/pubmaticRtdProvider_Example.html +161 -0
  181. package/libraries/bidderTimeoutUtils/bidderTimeoutUtils.js +119 -0
  182. package/libraries/objectGuard/objectGuard.js +170 -48
  183. package/libraries/objectGuard/ortbGuard.js +33 -43
  184. package/libraries/pubmaticUtils/plugins/dynamicTimeout.js +209 -0
  185. package/libraries/pubmaticUtils/plugins/floorProvider.js +168 -0
  186. package/libraries/pubmaticUtils/plugins/pluginManager.js +106 -0
  187. package/libraries/pubmaticUtils/plugins/unifiedPricingRule.js +375 -0
  188. package/libraries/pubmaticUtils/pubmaticUtils.js +76 -0
  189. package/modules/adagioAnalyticsAdapter.js +6 -1
  190. package/modules/adagioBidAdapter.js +12 -5
  191. package/modules/adagioRtdProvider.js +41 -35
  192. package/modules/fwsspBidAdapter.js +134 -69
  193. package/modules/fwsspBidAdapter.md +121 -26
  194. package/modules/optableRtdProvider.js +33 -12
  195. package/modules/pubmaticAnalyticsAdapter.js +315 -587
  196. package/modules/pubmaticBidAdapter.js +71 -8
  197. package/modules/pubmaticIdSystem.js +4 -4
  198. package/modules/pubmaticRtdProvider.js +105 -613
  199. package/modules/rtdModule/index.js +23 -6
  200. package/modules/sevioBidAdapter.js +413 -0
  201. package/modules/sevioBidAdapter.md +29 -0
  202. package/modules/sparteoBidAdapter.js +122 -10
  203. package/modules/timeoutRtdProvider.js +2 -105
  204. package/modules/ttdBidAdapter.js +0 -5
  205. package/modules/userId/eids.js +1 -1
  206. package/modules/userId/index.js +32 -1
  207. package/package.json +1 -1
  208. package/src/auction.js +3 -0
  209. package/test/spec/activities/objectGuard_spec.js +189 -32
  210. package/test/spec/activities/ortbGuard_spec.js +10 -15
  211. package/test/spec/libraries/bidderTimeoutUtils/bidderTimeoutUtils_spec.js +213 -0
  212. package/test/spec/libraries/pubmaticUtils/plugins/dynamicTimeout_spec.js +746 -0
  213. package/test/spec/libraries/pubmaticUtils/plugins/floorProvider_spec.js +184 -0
  214. package/test/spec/libraries/pubmaticUtils/plugins/pluginManager_spec.js +489 -0
  215. package/test/spec/libraries/pubmaticUtils/plugins/unifiedPricingRule_spec.js +359 -0
  216. package/test/spec/libraries/pubmaticUtils/pubmaticUtils_spec.js +236 -0
  217. package/test/spec/modules/adagioAnalyticsAdapter_spec.js +94 -24
  218. package/test/spec/modules/adagioRtdProvider_spec.js +17 -17
  219. package/test/spec/modules/fwsspBidAdapter_spec.js +513 -78
  220. package/test/spec/modules/optableRtdProvider_spec.js +55 -5
  221. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +634 -916
  222. package/test/spec/modules/pubmaticBidAdapter_spec.js +260 -1
  223. package/test/spec/modules/pubmaticRtdProvider_spec.js +252 -1505
  224. package/test/spec/modules/realTimeDataModule_spec.js +58 -8
  225. package/test/spec/modules/sevioBidAdapter_spec.js +513 -0
  226. package/test/spec/modules/sparteoBidAdapter_spec.js +528 -43
  227. package/test/spec/modules/timeoutRtdProvider_spec.js +1 -201
  228. package/test/spec/modules/ttdBidAdapter_spec.js +0 -33
  229. package/test/spec/modules/userId_spec.js +115 -1
@@ -1 +1 @@
1
- (self.pbjsChunk=self.pbjsChunk||[]).push([[69380],{64668:(e,t,i)=>{var r=i(7873),n=i(91069),o=i(70433),s=i(63172),d=i(71371),a=i(57377),p=i(95789);const c="USD",u=300,m=!0,l="https://prebid-outstream.yieldmo.com/bundle.js",g=["mimes","startdelay","placement","plcmt","skipafter","protocols","api","playbackmethod","maxduration","minduration","pos","skip","skippable"],f=["name","domain","cat","keywords"],b=(0,n.getWindowTop)(),y=2,v=0,h=["description","title","pr","page_url"],A={code:"yieldmo",supportedMediaTypes:[d.D4,d.G_],gvlid:173,isBidRequestValid:function(e){return!!(e&&e.adUnitCode&&e.bidId&&(x(e)||I(e))&&function(e){if(!I(e))return!0;const t=(e,t,i)=>{let r=`"${e}" is required`;throw i&&(r+=" when "+i),new Error(r)},i=(e,t,i)=>{throw i=i?", expected: "+i:"",t=JSON.stringify(t),new Error(`"${e}"=${t} is invalid${i}`)},r=e=>void 0!==e,s=(t,i,r,n)=>{if(0===t.indexOf("video")){const s="params."+t,d="mediaTypes."+t,a=(0,o.A)(e,s),p=(0,o.A)(e,d),c=i(a),u=i(p);return c?a:u||(c?u||r(d,p,n):r(s,a,n),a||p)}{const s=(0,o.A)(e,t);return i(s)||r(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)))),i,"array of 2 integers, ex: [640,480] or [[640,480]]"),s("video.mimes",(e=>r(e)),t),s("video.mimes",(e=>(0,n.isArray)(e)&&e.every((e=>(0,n.isStr)(e)))),i,'array of strings, ex: ["video/mp4"]'),s("video.protocols",(e=>r(e)),t),s("video.api",(e=>r(e)),t),s("video.api",(e=>(0,n.isArrayOfNums)(e)&&e.every((e=>e>=1))),i,"array of numbers, ex: [2,3]"),s("video.playbackmethod",(e=>!r(e)||(0,n.isArrayOfNums)(e)),i,"array of integers, ex: [2,6]"),s("video.maxduration",(e=>r(e)),t),s("video.maxduration",(e=>(0,n.isInteger)(e)),i),s("video.minduration",(e=>!r(e)||(0,n.isNumber)(e)),i),s("video.skippable",(e=>!r(e)||(0,n.isBoolean)(e)),i),s("video.skipafter",(e=>!r(e)||(0,n.isNumber)(e)),i),s("video.pos",(e=>!r(e)||(0,n.isNumber)(e)),i),s("params.badv",(e=>!r(e)||(0,n.isArray)(e)),i,'array of strings, ex: ["ford.com","pepsi.com"]'),s("params.bcat",(e=>!r(e)||(0,n.isArray)(e)),i,'array of strings, ex: ["IAB1-5","IAB1-6"]'),!0}catch(e){return(0,n.logError)(e.message),!1}}(e))},buildRequests:function(e,t){const i=function(e){return!!e.refererInfo?.referer?.includes("pb_force_a")}(t),r=E("/exchange/prebid",i),a=E("/exchange/prebidvideo",i),p=e.filter((e=>x(e))),c=e.filter((e=>I(e)));let u=[];const m=function(e){if((0,o.A)(e,"userIdAsEids"))return e.userIdAsEids||[]}(e[0])||[],l=function(e){const t=(0,o.A)(e,"ortb2.user.data")||[],i=t.filter((e=>{const t=e.ext?.segtax;return t>=600&&t<=609}))[0];if(i){return{taxonomy:i.ext.segtax,classifier:i.ext.segclass,topics:Object.values(i.segment).map((e=>Number(e)))}}return null}(t),f=function(e){const t=(0,o.A)(e,"ortb2.device.ext.cdep")||null;return t}(t);if(p.length>0){let e={pbav:"9.53.2-pre",p:[],page_url:t.refererInfo.page,bust:(new Date).getTime().toString(),dnt:"1"===window.doNotTrack||"1"===window.navigator.doNotTrack||!1,description:w(),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")||""};l&&(e.topics=JSON.stringify(l));const i=S(t);i&&(e.gpc=i),f&&(e.cdep=f),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=(0,n.getWinDimensions)().innerWidth,e.h=(0,n.getWinDimensions)().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"),i=(0,o.A)(e,"ortb2Imp.ext.tagid"),r=(0,o.A)(e,"ortb2Imp.ext.divid"),n={placement_id:e.adUnitCode,callback_id:e.bidId,sizes:e.mediaTypes.banner.sizes};if(e.params){e.params.placementId&&(n.ym_placement_id=e.params.placementId);const t=k(e,d.D4);t&&(n.bidFloor=t)}t&&(n.gpid=t);i&&(n.tagid=i);r&&(n.divid=r);const s=(0,o.A)(e,"ortb2Imp.ext.tid");s&&(n.tid=s);e.auctionId&&(n.auctionId=e.auctionId);return JSON.stringify(n)}(t));const i=_(t,"pubcid");i?e.pubcid=i:t.crumbs&&t.crumbs.pubcid&&(e.pubcid=t.crumbs.pubcid);const r=_(t,"tdid");r&&(e.tdid=r);const n=_(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()+"]",m.length&&(e.eids=JSON.stringify(m));let a=`${r}?${(0,n.parseQueryStringParameters)(e)}`.length-8e3;if(a>0)for(let t=0;t<h.length&&(a=O(a,e,h[t]),!(a<=0));t++);u.push({method:"GET",url:r,data:e})}if(c.length>0){const e=function(e,t){const i=e[0].schain;let r={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"),i=(0,o.A)(e,"ortb2Imp.ext.tagid"),r=(0,o.A)(e,"ortb2Imp.ext.divid"),s=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),a={id:e.bidId,tagid:e.adUnitCode,bidfloor:k(e,d.G_),ext:{placement_id:e.params.placementId,tid:(0,o.A)(e,"ortb2Imp.ext.tid")},video:{w:s[0],h:s[1],linearity:1}},p=(0,o.A)(e,"mediaTypes.video",{});Object.keys(p).filter((e=>g.includes(e))).forEach((e=>a.video[e]=p[e]));const c=(0,o.A)(e,"params.video",{});Object.keys(c).filter((e=>g.includes(e))).forEach((e=>a.video[e]=c[e])),a.video.skippable&&(a.video.skip=1,delete a.video.skippable);1===a.video.plcmt&&1===a.video.placement||(a.video.startdelay=v,a.video.playbackmethod=[y]);t&&(a.ext.gpid=t);i&&(a.ext.tagid=i);r&&(a.ext.divid=r);return a}(e))),site:T(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.53.2-pre"},ats_envelope:e[0].params.lr_env};i&&(r.schain=i);const a=S(t);a&&(0,s.J)(r,"regs.ext.gpc",a);e[0].auctionId&&(r.auctionId=e[0].auctionId);return function(e,t){const i=t.gdprConsent,r=(0,o.A)(t,"gppConsent.gppString"),n=(0,o.A)(t,"gppConsent.applicableSections");r?(0,s.J)(e,"regs.ext.gpp",r):((0,s.J)(e,"regs.ext.gdpr",i&&i.gdprApplies?1:0),(0,s.J)(e,"user.ext.consent",i&&i.consentString?i.consentString:""));n&&n.length>0&&(0,s.J)(e,"regs.ext.gpp_sid",n);const d=(0,o.A)(t,"uspConsent");!r&&d&&(0,s.J)(e,"regs.ext.us_privacy",d)}(r,t),r}(c,t);l&&(e.topics=l),m.length&&(0,s.J)(e,"user.ext.eids",m),u.push({method:"POST",url:a,data:e})}return u},interpretResponse:function(e,t){let i=[];const r=e.body;if(r.length>0&&r.forEach((e=>{e.cpm>0&&i.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:c,netRevenue:m,ttl:300,ad:e.ad,meta:{advertiserDomains:e.adomain||[],mediaType:d.D4}}}(e))})),r.seatbid){r.seatbid.reduce(((e,t)=>e.concat(t.bid)),[]).forEach((e=>i.push(function(e,t){const i=((0,o.A)(t,"data.imp")||[]).find((t=>t.id===e.impid));let r={dealId:e.dealid,requestId:i.id,cpm:e.price,width:i.video.w,height:i.video.h,creativeId:e.crid||e.adid,currency:c,netRevenue:m,mediaType:d.G_,ttl:u,vastXml:e.adm,meta:{advertiserDomains:e.adomain||[],mediaType:d.G_}};if(i.video.plcmt&&1!==i.video.plcmt){const e=p.A4.install({url:l,config:{width:r.width,height:r.height,vastTimeout:15e3,maxAllowedVastTagRedirects:5,allowVpaid:!0,autoPlay:!0,preload:!0,mute:!0},id:i.tagid,loaded:!1});e.setRender((function(e){e.renderer.push((()=>{const{id:t,config:i}=e.renderer;window.YMoutstreamPlayer(e,t,i)}))})),r.renderer=e}return r}(e,t))))}return i},getUserSyncs:function(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";const n=[],o="&gdpr="+(i.gdprApplies?1:0),s=`&gdpr_consent=${encodeURIComponent(i.consentString||"")}`,d=`https://ads.yieldmo.com/pbcas?${`us_privacy=${encodeURIComponent(r)}`}${o}${s}`;return e.iframeEnabled?n.push({type:"iframe",url:d+"&type=iframe"}):e.pixelEnabled&&n.push({type:"image",url:d+"&type=image"}),n}};function x(e){return!!(0,o.A)(e,"mediaTypes.banner")}function I(e){return!!(0,o.A)(e,"mediaTypes.video")}function w(){return document.querySelector('meta[name="description"]')&&document.querySelector('meta[name="description"]').getAttribute("content")||""}function _(e,t){return"object"==typeof(0,o.A)(e,"userId")?e.userId[t]:void 0}function S(e){return(0,o.A)(e,"ortb2.regs.ext.gpc")}function k(e,t){let i={};return"function"==typeof e.getFloor&&(i=e.getFloor({currency:c,mediaType:t,size:"*"})),i.floor||e.params.bidfloor||e.params.bidFloor||0}function T(e,t){let i={};const r=(0,n.parseUrl)((0,o.A)(t,"refererInfo.page"));(0,n.isEmpty)(r)||(i.page=`${r.protocol}://${r.hostname}${r.pathname}`),t.refererInfo?.ref&&(i.ref=t.refererInfo.ref);const s=document.getElementsByTagName("meta").keywords;s&&s.content&&(i.keywords=s.content);const d=(0,o.A)(e,"params.site");return d&&Object.keys(d).filter((e=>f.includes(e))).forEach((e=>i[e]=d[e])),i}function O(e,t,i){if(t[i].length>e)return t[i]=t[i].substring(0,t[i].length-e),0;const r=e-t[i].length;return t[i]="",r}function E(e,t){return`${t?"https://ads-stg.yieldmo.com":"https://ads.yieldmo.com"}${e}`}(0,a.a$)(A),(0,r.E)("yieldmoBidAdapter")}},e=>{e.O(0,[60802,37769,12139,51085],(()=>{return t=64668,e(e.s=t);var t}));e.O()}]);
1
+ (self.pbjsChunk=self.pbjsChunk||[]).push([[69380],{64668:(e,t,i)=>{var r=i(7873),n=i(91069),o=i(70433),s=i(63172),d=i(71371),a=i(57377),p=i(95789);const c="USD",u=300,m=!0,l="https://prebid-outstream.yieldmo.com/bundle.js",g=["mimes","startdelay","placement","plcmt","skipafter","protocols","api","playbackmethod","maxduration","minduration","pos","skip","skippable"],f=["name","domain","cat","keywords"],b=(0,n.getWindowTop)(),y=2,v=0,h=["description","title","pr","page_url"],A={code:"yieldmo",supportedMediaTypes:[d.D4,d.G_],gvlid:173,isBidRequestValid:function(e){return!!(e&&e.adUnitCode&&e.bidId&&(x(e)||I(e))&&function(e){if(!I(e))return!0;const t=(e,t,i)=>{let r=`"${e}" is required`;throw i&&(r+=" when "+i),new Error(r)},i=(e,t,i)=>{throw i=i?", expected: "+i:"",t=JSON.stringify(t),new Error(`"${e}"=${t} is invalid${i}`)},r=e=>void 0!==e,s=(t,i,r,n)=>{if(0===t.indexOf("video")){const s="params."+t,d="mediaTypes."+t,a=(0,o.A)(e,s),p=(0,o.A)(e,d),c=i(a),u=i(p);return c?a:u||(c?u||r(d,p,n):r(s,a,n),a||p)}{const s=(0,o.A)(e,t);return i(s)||r(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)))),i,"array of 2 integers, ex: [640,480] or [[640,480]]"),s("video.mimes",(e=>r(e)),t),s("video.mimes",(e=>(0,n.isArray)(e)&&e.every((e=>(0,n.isStr)(e)))),i,'array of strings, ex: ["video/mp4"]'),s("video.protocols",(e=>r(e)),t),s("video.api",(e=>r(e)),t),s("video.api",(e=>(0,n.isArrayOfNums)(e)&&e.every((e=>e>=1))),i,"array of numbers, ex: [2,3]"),s("video.playbackmethod",(e=>!r(e)||(0,n.isArrayOfNums)(e)),i,"array of integers, ex: [2,6]"),s("video.maxduration",(e=>r(e)),t),s("video.maxduration",(e=>(0,n.isInteger)(e)),i),s("video.minduration",(e=>!r(e)||(0,n.isNumber)(e)),i),s("video.skippable",(e=>!r(e)||(0,n.isBoolean)(e)),i),s("video.skipafter",(e=>!r(e)||(0,n.isNumber)(e)),i),s("video.pos",(e=>!r(e)||(0,n.isNumber)(e)),i),s("params.badv",(e=>!r(e)||(0,n.isArray)(e)),i,'array of strings, ex: ["ford.com","pepsi.com"]'),s("params.bcat",(e=>!r(e)||(0,n.isArray)(e)),i,'array of strings, ex: ["IAB1-5","IAB1-6"]'),!0}catch(e){return(0,n.logError)(e.message),!1}}(e))},buildRequests:function(e,t){const i=function(e){return!!e.refererInfo?.referer?.includes("pb_force_a")}(t),r=E("/exchange/prebid",i),a=E("/exchange/prebidvideo",i),p=e.filter((e=>x(e))),c=e.filter((e=>I(e)));let u=[];const m=function(e){if((0,o.A)(e,"userIdAsEids"))return e.userIdAsEids||[]}(e[0])||[],l=function(e){const t=(0,o.A)(e,"ortb2.user.data")||[],i=t.filter((e=>{const t=e.ext?.segtax;return t>=600&&t<=609}))[0];if(i){return{taxonomy:i.ext.segtax,classifier:i.ext.segclass,topics:Object.values(i.segment).map((e=>Number(e)))}}return null}(t),f=function(e){const t=(0,o.A)(e,"ortb2.device.ext.cdep")||null;return t}(t);if(p.length>0){let e={pbav:"9.53.4-pre",p:[],page_url:t.refererInfo.page,bust:(new Date).getTime().toString(),dnt:"1"===window.doNotTrack||"1"===window.navigator.doNotTrack||!1,description:w(),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")||""};l&&(e.topics=JSON.stringify(l));const i=S(t);i&&(e.gpc=i),f&&(e.cdep=f),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=(0,n.getWinDimensions)().innerWidth,e.h=(0,n.getWinDimensions)().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"),i=(0,o.A)(e,"ortb2Imp.ext.tagid"),r=(0,o.A)(e,"ortb2Imp.ext.divid"),n={placement_id:e.adUnitCode,callback_id:e.bidId,sizes:e.mediaTypes.banner.sizes};if(e.params){e.params.placementId&&(n.ym_placement_id=e.params.placementId);const t=k(e,d.D4);t&&(n.bidFloor=t)}t&&(n.gpid=t);i&&(n.tagid=i);r&&(n.divid=r);const s=(0,o.A)(e,"ortb2Imp.ext.tid");s&&(n.tid=s);e.auctionId&&(n.auctionId=e.auctionId);return JSON.stringify(n)}(t));const i=_(t,"pubcid");i?e.pubcid=i:t.crumbs&&t.crumbs.pubcid&&(e.pubcid=t.crumbs.pubcid);const r=_(t,"tdid");r&&(e.tdid=r);const n=_(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()+"]",m.length&&(e.eids=JSON.stringify(m));let a=`${r}?${(0,n.parseQueryStringParameters)(e)}`.length-8e3;if(a>0)for(let t=0;t<h.length&&(a=O(a,e,h[t]),!(a<=0));t++);u.push({method:"GET",url:r,data:e})}if(c.length>0){const e=function(e,t){const i=e[0].schain;let r={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"),i=(0,o.A)(e,"ortb2Imp.ext.tagid"),r=(0,o.A)(e,"ortb2Imp.ext.divid"),s=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),a={id:e.bidId,tagid:e.adUnitCode,bidfloor:k(e,d.G_),ext:{placement_id:e.params.placementId,tid:(0,o.A)(e,"ortb2Imp.ext.tid")},video:{w:s[0],h:s[1],linearity:1}},p=(0,o.A)(e,"mediaTypes.video",{});Object.keys(p).filter((e=>g.includes(e))).forEach((e=>a.video[e]=p[e]));const c=(0,o.A)(e,"params.video",{});Object.keys(c).filter((e=>g.includes(e))).forEach((e=>a.video[e]=c[e])),a.video.skippable&&(a.video.skip=1,delete a.video.skippable);1===a.video.plcmt&&1===a.video.placement||(a.video.startdelay=v,a.video.playbackmethod=[y]);t&&(a.ext.gpid=t);i&&(a.ext.tagid=i);r&&(a.ext.divid=r);return a}(e))),site:T(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.53.4-pre"},ats_envelope:e[0].params.lr_env};i&&(r.schain=i);const a=S(t);a&&(0,s.J)(r,"regs.ext.gpc",a);e[0].auctionId&&(r.auctionId=e[0].auctionId);return function(e,t){const i=t.gdprConsent,r=(0,o.A)(t,"gppConsent.gppString"),n=(0,o.A)(t,"gppConsent.applicableSections");r?(0,s.J)(e,"regs.ext.gpp",r):((0,s.J)(e,"regs.ext.gdpr",i&&i.gdprApplies?1:0),(0,s.J)(e,"user.ext.consent",i&&i.consentString?i.consentString:""));n&&n.length>0&&(0,s.J)(e,"regs.ext.gpp_sid",n);const d=(0,o.A)(t,"uspConsent");!r&&d&&(0,s.J)(e,"regs.ext.us_privacy",d)}(r,t),r}(c,t);l&&(e.topics=l),m.length&&(0,s.J)(e,"user.ext.eids",m),u.push({method:"POST",url:a,data:e})}return u},interpretResponse:function(e,t){let i=[];const r=e.body;if(r.length>0&&r.forEach((e=>{e.cpm>0&&i.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:c,netRevenue:m,ttl:300,ad:e.ad,meta:{advertiserDomains:e.adomain||[],mediaType:d.D4}}}(e))})),r.seatbid){r.seatbid.reduce(((e,t)=>e.concat(t.bid)),[]).forEach((e=>i.push(function(e,t){const i=((0,o.A)(t,"data.imp")||[]).find((t=>t.id===e.impid));let r={dealId:e.dealid,requestId:i.id,cpm:e.price,width:i.video.w,height:i.video.h,creativeId:e.crid||e.adid,currency:c,netRevenue:m,mediaType:d.G_,ttl:u,vastXml:e.adm,meta:{advertiserDomains:e.adomain||[],mediaType:d.G_}};if(i.video.plcmt&&1!==i.video.plcmt){const e=p.A4.install({url:l,config:{width:r.width,height:r.height,vastTimeout:15e3,maxAllowedVastTagRedirects:5,allowVpaid:!0,autoPlay:!0,preload:!0,mute:!0},id:i.tagid,loaded:!1});e.setRender((function(e){e.renderer.push((()=>{const{id:t,config:i}=e.renderer;window.YMoutstreamPlayer(e,t,i)}))})),r.renderer=e}return r}(e,t))))}return i},getUserSyncs:function(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";const n=[],o="&gdpr="+(i.gdprApplies?1:0),s=`&gdpr_consent=${encodeURIComponent(i.consentString||"")}`,d=`https://ads.yieldmo.com/pbcas?${`us_privacy=${encodeURIComponent(r)}`}${o}${s}`;return e.iframeEnabled?n.push({type:"iframe",url:d+"&type=iframe"}):e.pixelEnabled&&n.push({type:"image",url:d+"&type=image"}),n}};function x(e){return!!(0,o.A)(e,"mediaTypes.banner")}function I(e){return!!(0,o.A)(e,"mediaTypes.video")}function w(){return document.querySelector('meta[name="description"]')&&document.querySelector('meta[name="description"]').getAttribute("content")||""}function _(e,t){return"object"==typeof(0,o.A)(e,"userId")?e.userId[t]:void 0}function S(e){return(0,o.A)(e,"ortb2.regs.ext.gpc")}function k(e,t){let i={};return"function"==typeof e.getFloor&&(i=e.getFloor({currency:c,mediaType:t,size:"*"})),i.floor||e.params.bidfloor||e.params.bidFloor||0}function T(e,t){let i={};const r=(0,n.parseUrl)((0,o.A)(t,"refererInfo.page"));(0,n.isEmpty)(r)||(i.page=`${r.protocol}://${r.hostname}${r.pathname}`),t.refererInfo?.ref&&(i.ref=t.refererInfo.ref);const s=document.getElementsByTagName("meta").keywords;s&&s.content&&(i.keywords=s.content);const d=(0,o.A)(e,"params.site");return d&&Object.keys(d).filter((e=>f.includes(e))).forEach((e=>i[e]=d[e])),i}function O(e,t,i){if(t[i].length>e)return t[i]=t[i].substring(0,t[i].length-e),0;const r=e-t[i].length;return t[i]="",r}function E(e,t){return`${t?"https://ads-stg.yieldmo.com":"https://ads.yieldmo.com"}${e}`}(0,a.a$)(A),(0,r.E)("yieldmoBidAdapter")}},e=>{e.O(0,[60802,37769,12139,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.53.2-pre";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,37769,12139,51085],(()=>{return t=98059,e(e.s=t);var t}));e.O()}]);
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.53.4-pre";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,37769,12139,51085],(()=>{return t=98059,e(e.s=t);var t}));e.O()}]);
@@ -0,0 +1,161 @@
1
+ <html>
2
+ <head>
3
+ <title>PubMatic RTD Provider Example</title>
4
+ <script async src="../../build/dev/prebid.js"></script>
5
+ <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
6
+ <script>
7
+ var FAILSAFE_TIMEOUT = 3300;
8
+ var PREBID_TIMEOUT = 1000;
9
+
10
+ var adUnits = [{
11
+ code: 'div-gpt-ad-1460505748561-0',
12
+ mediaTypes: {
13
+ banner: {
14
+ sizes: [[300, 250], [300,600]],
15
+ pos: 7,
16
+ }
17
+ },
18
+ bids: [
19
+ {
20
+ bidder: 'appnexus',
21
+ params: {
22
+ placementId: 13144370
23
+ }
24
+ }, {
25
+ bidder: 'pubmatic',
26
+ params: {
27
+ publisherId: '103207',
28
+ adUnit: 'dcomHomeTop-728x90',
29
+ }
30
+ },
31
+ ]
32
+ }
33
+ ,
34
+ {
35
+ code: 'div-gpt-ad-1460505748561-1',
36
+ mediaTypes: {
37
+ banner: {
38
+ sizes: [[728, 90]],
39
+ }
40
+ },
41
+ bids: [
42
+ {
43
+ bidder: 'appnexus',
44
+ params: {
45
+ placementId: 13144370
46
+ }
47
+ }, {
48
+ bidder: 'pubmatic',
49
+ params: {
50
+ publisherId: '103207',
51
+ adUnit: 'dcomHomeTop-728x90',
52
+ }
53
+ }
54
+ ]
55
+ }
56
+ ];
57
+
58
+ var pbjs = pbjs || {};
59
+ pbjs.que = pbjs.que || [];
60
+
61
+ </script>
62
+
63
+ <script>
64
+ var googletag = googletag || {};
65
+ googletag.cmd = googletag.cmd || [];
66
+ var s1;
67
+ googletag.cmd.push(function () {
68
+ googletag.pubads().disableInitialLoad();
69
+ });
70
+
71
+ pbjs.que.push(function () {
72
+ pbjs.setConfig({
73
+ enableSendAllBids : true,
74
+ enableTIDs: true,
75
+ realTimeData: {
76
+ auctionDelay: 500,
77
+ dataProviders: [
78
+ {
79
+ name: 'pubmatic',
80
+ waitForIt: true,
81
+ params:{
82
+ publisherId: '103207', // please contact PubMatic to get a publisherId for yourself
83
+ profileId: '12', // please contact PubMatic to get a profileId for yourself
84
+ }
85
+ }
86
+ ]
87
+ }
88
+ })
89
+
90
+ pbjs.addAdUnits(adUnits);
91
+ pbjs.enableAnalytics({
92
+ provider: 'pubmatic',
93
+ options: {
94
+ "publisherId": 5890 // please contact PubMatic to get a publisherId for yourself
95
+ }
96
+ });
97
+
98
+ pbjs.requestBids({
99
+ bidsBackHandler: sendAdserverRequest,
100
+ timeout: PREBID_TIMEOUT
101
+ });
102
+
103
+ });
104
+
105
+
106
+ function sendAdserverRequest() {
107
+ if (pbjs.adserverRequestSent) return;
108
+ pbjs.adserverRequestSent = true;
109
+ googletag.cmd.push(function () {
110
+ pbjs.que.push(function () {
111
+ pbjs.setTargetingForGPTAsync();
112
+ googletag.pubads().refresh();
113
+
114
+ });
115
+ });
116
+ }
117
+
118
+ </script>
119
+
120
+ <script>
121
+ googletag.cmd.push(function () {
122
+ s1 = googletag.defineSlot('/19968336/header-bid-tag-0', [[300, 250], [300, 600]], 'div-gpt-ad-1460505748561-0').addService(googletag.pubads());
123
+ s2 = googletag.defineSlot('/19968336/header-bid-tag-1', [[728, 90]], 'div-gpt-ad-1460505748561-1').addService(googletag.pubads());
124
+
125
+ googletag.pubads().enableSingleRequest();
126
+ googletag.enableServices();
127
+ });
128
+
129
+
130
+ function sendAdserverRequest() {
131
+ if (pbjs.adserverRequestSent) return;
132
+ pbjs.adserverRequestSent = true;
133
+ googletag.cmd.push(function () {
134
+ pbjs.que.push(function () {
135
+ pbjs.setTargetingForGPTAsync();
136
+ googletag.pubads().refresh();
137
+
138
+ });
139
+ });
140
+ }
141
+ </script>
142
+ </head>
143
+
144
+ <body>
145
+ <h2>Prebid.js Test</h2>
146
+ <h5>Div-1111</h5>
147
+ <div id='div-gpt-ad-1460505748561-0'>
148
+ <script type='text/javascript'>
149
+ googletag.cmd.push(function () { googletag.display('div-gpt-ad-1460505748561-0'); });
150
+ </script>
151
+ </div>
152
+ <br>
153
+
154
+ <h5>Div 2</h5>
155
+ <div id='div-gpt-ad-1460505748561-1'>
156
+ <script type='text/javascript'>
157
+ googletag.cmd.push(function () { googletag.display('div-gpt-ad-1460505748561-1'); });
158
+ </script>
159
+ </div>
160
+ </body>
161
+ </html>
@@ -0,0 +1,119 @@
1
+ import { logInfo } from '../../src/utils.js';
2
+
3
+ // this allows the stubbing of functions during testing
4
+ export const bidderTimeoutFunctions = {
5
+ getDeviceType,
6
+ checkVideo,
7
+ getConnectionSpeed,
8
+ calculateTimeoutModifier
9
+ };
10
+
11
+ /**
12
+ * Returns an array of a given object's own enumerable string-keyed property [key, value] pairs.
13
+ * @param {Object} obj
14
+ * @return {Array}
15
+ */
16
+ const entries = Object.entries || function (obj) {
17
+ const ownProps = Object.keys(obj);
18
+ let i = ownProps.length;
19
+ let resArray = new Array(i);
20
+ while (i--) { resArray[i] = [ownProps[i], obj[ownProps[i]]]; }
21
+ return resArray;
22
+ };
23
+
24
+ function getDeviceType() {
25
+ const userAgent = window.navigator.userAgent.toLowerCase();
26
+ if ((/ipad|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i.test(userAgent))) {
27
+ return 5; // tablet
28
+ }
29
+ if ((/iphone|ipod|android|blackberry|opera|mini|windows\sce|palm|smartphone|iemobile/i.test(userAgent))) {
30
+ return 4; // mobile
31
+ }
32
+ return 2; // personal computer
33
+ }
34
+
35
+ function checkVideo(adUnits) {
36
+ return adUnits.some((adUnit) => {
37
+ return adUnit.mediaTypes && adUnit.mediaTypes.video;
38
+ });
39
+ }
40
+
41
+ function getConnectionSpeed() {
42
+ const connection = window.navigator.connection || window.navigator.mozConnection || window.navigator.webkitConnection || {}
43
+ const connectionType = connection.type || connection.effectiveType;
44
+
45
+ switch (connectionType) {
46
+ case 'slow-2g':
47
+ case '2g':
48
+ return 'slow';
49
+
50
+ case '3g':
51
+ return 'medium';
52
+
53
+ case 'bluetooth':
54
+ case 'cellular':
55
+ case 'ethernet':
56
+ case 'wifi':
57
+ case 'wimax':
58
+ case '4g':
59
+ return 'fast';
60
+ }
61
+
62
+ return 'unknown';
63
+ }
64
+
65
+ /**
66
+ * Calculate the time to be added to the timeout
67
+ * @param {Array} adUnits
68
+ * @param {Object} rules
69
+ * @return {number}
70
+ */
71
+ function calculateTimeoutModifier(adUnits, rules) {
72
+ if (!rules) {
73
+ return 0;
74
+ }
75
+
76
+ logInfo('Timeout rules', rules);
77
+ let timeoutModifier = 0;
78
+ let toAdd = 0;
79
+
80
+ if (rules.includesVideo) {
81
+ const hasVideo = bidderTimeoutFunctions.checkVideo(adUnits);
82
+ toAdd = rules.includesVideo[hasVideo] || 0;
83
+ logInfo(`Adding ${toAdd} to timeout for includesVideo ${hasVideo}`)
84
+ timeoutModifier += toAdd;
85
+ }
86
+
87
+ if (rules.numAdUnits) {
88
+ const numAdUnits = adUnits.length;
89
+ if (rules.numAdUnits[numAdUnits]) {
90
+ timeoutModifier += rules.numAdUnits[numAdUnits];
91
+ } else {
92
+ for (const [rangeStr, timeoutVal] of entries(rules.numAdUnits)) {
93
+ const [lowerBound, upperBound] = rangeStr.split('-');
94
+ if (parseInt(lowerBound) <= numAdUnits && numAdUnits <= parseInt(upperBound)) {
95
+ logInfo(`Adding ${timeoutVal} to timeout for numAdUnits ${numAdUnits}`)
96
+ timeoutModifier += timeoutVal;
97
+ break;
98
+ }
99
+ }
100
+ }
101
+ }
102
+
103
+ if (rules.deviceType) {
104
+ const deviceType = bidderTimeoutFunctions.getDeviceType();
105
+ toAdd = rules.deviceType[deviceType] || 0;
106
+ logInfo(`Adding ${toAdd} to timeout for deviceType ${deviceType}`)
107
+ timeoutModifier += toAdd;
108
+ }
109
+
110
+ if (rules.connectionSpeed) {
111
+ const connectionSpeed = bidderTimeoutFunctions.getConnectionSpeed();
112
+ toAdd = rules.connectionSpeed[connectionSpeed] || 0;
113
+ logInfo(`Adding ${toAdd} to timeout for connectionSpeed ${connectionSpeed}`)
114
+ timeoutModifier += toAdd;
115
+ }
116
+
117
+ logInfo('timeout Modifier calculated', timeoutModifier);
118
+ return timeoutModifier;
119
+ }
@@ -1,5 +1,5 @@
1
- import {isData, objectTransformer, sessionedApplies} from '../../src/activities/redactor.js';
2
- import {deepAccess, deepClone, deepEqual, deepSetValue} from '../../src/utils.js';
1
+ import {isData, sessionedApplies} from '../../src/activities/redactor.js';
2
+ import {deepEqual, logWarn} from '../../src/utils.js';
3
3
 
4
4
  /**
5
5
  * @typedef {import('../src/activities/redactor.js').TransformationRuleDef} TransformationRuleDef
@@ -12,66 +12,203 @@ import {deepAccess, deepClone, deepEqual, deepSetValue} from '../../src/utils.js
12
12
  /**
13
13
  * Create a factory function for object guards using the given rules.
14
14
  *
15
- * An object guard is a pair {obj, verify} where:
16
- * - `obj` is a view on the guarded object that applies "redact" rules (the same rules used in activites/redactor.js)
17
- * - `verify` is a function that, when called, will check that the guarded object was not modified
18
- * in a way that violates any "write protect" rules, and rolls back any offending changes.
15
+ * An object guard is a view on the guarded object that applies "redact" rules (the same rules used in activites/redactor.js),
16
+ * and prevents writes (including deltes) that violate "write protect" rules.
19
17
  *
20
18
  * This is meant to provide sandboxed version of a privacy-sensitive object, where reads
21
19
  * are filtered through redaction rules and writes are checked against write protect rules.
22
20
  *
23
- * @param {Array[TransformationRule]} rules
24
- * @return {function(*, ...[*]): ObjectGuard}
25
21
  */
26
22
  export function objectGuard(rules) {
27
23
  const root = {};
28
- const writeRules = [];
24
+
25
+ // rules are associated with specific portions of the object, e.g. "user.eids"
26
+ // build a tree representation of them, where the root is the object itself,
27
+ // and each node's children are properties of the corresponding (nested) object.
28
+
29
+ function invalid() {
30
+ return new Error('incompatible redaction rules');
31
+ }
29
32
 
30
33
  rules.forEach(rule => {
31
- if (rule.wp) writeRules.push(rule);
32
- if (!rule.get) return;
33
34
  rule.paths.forEach(path => {
34
35
  let node = root;
35
36
  path.split('.').forEach(el => {
36
- node.children = node.children || {};
37
- node.children[el] = node.children[el] || {};
37
+ node.children = node.children ?? {};
38
+ node.children[el] = node.children[el] ?? { parent: node, path: node.path ? `${node.path}.${el}` : el };
38
39
  node = node.children[el];
39
- })
40
- node.rule = rule;
40
+ node.wpRules = node.wpRules ?? [];
41
+ node.redactRules = node.redactRules ?? [];
42
+ });
43
+ const tag = rule.wp ? 'hasWP' : 'hasRedact';
44
+ const ruleset = rule.wp ? 'wpRules' : 'redactRules';
45
+ // sanity check: do not allow rules of the same type on related paths,
46
+ // e.g. redact both 'user' and 'user.eids'; we don't need and this logic
47
+ // does not handle it
48
+ if (node[tag] && !node[ruleset]?.length) {
49
+ throw invalid();
50
+ }
51
+ node[ruleset].push(rule);
52
+ let parent = node;
53
+ while (parent) {
54
+ parent[tag] = true;
55
+ if (parent !== node && parent[ruleset]?.length) {
56
+ throw invalid();
57
+ }
58
+ parent = parent.parent;
59
+ }
41
60
  });
42
61
  });
43
62
 
44
- const wpTransformer = objectTransformer(writeRules);
63
+ function getRedactRule(node) {
64
+ if (node.redactRule == null) {
65
+ node.redactRule = node.redactRules.length === 0 ? false : {
66
+ check: (applies) => node.redactRules.some(applies),
67
+ get(val) {
68
+ for (const rule of node.redactRules) {
69
+ val = rule.get(val);
70
+ if (!isData(val)) break;
71
+ }
72
+ return val;
73
+ }
74
+ }
75
+ }
76
+ return node.redactRule;
77
+ }
78
+
79
+ function getWPRule(node) {
80
+ if (node.wpRule == null) {
81
+ node.wpRule = node.wpRules.length === 0 ? false : {
82
+ check: (applies) => node.wpRules.some(applies),
83
+ }
84
+ }
85
+ return node.wpRule;
86
+ }
87
+
88
+ /**
89
+ * clean up `newValue` so that it doesn't violate any write protect rules
90
+ * when set onto the property represented by 'node'.
91
+ *
92
+ * This is done substituting (portions of) `curValue` when some rule is violated.
93
+ */
94
+ function cleanup(node, curValue, newValue, applies) {
95
+ if (
96
+ !node.hasWP ||
97
+ (!isData(curValue) && !isData(newValue)) ||
98
+ deepEqual(curValue, newValue)
99
+ ) {
100
+ return newValue;
101
+ }
102
+ const rule = getWPRule(node);
103
+ if (rule && rule.check(applies)) {
104
+ return curValue;
105
+ }
106
+ if (node.children) {
107
+ for (const [prop, child] of Object.entries(node.children)) {
108
+ const propValue = cleanup(child, curValue?.[prop], newValue?.[prop], applies);
109
+ if (newValue != null && typeof newValue === 'object') {
110
+ if (!isData(propValue) && !curValue?.hasOwnProperty(prop)) {
111
+ delete newValue[prop];
112
+ } else {
113
+ newValue[prop] = propValue;
114
+ }
115
+ } else {
116
+ logWarn(`Invalid value set for '${node.path}', expected an object`, newValue);
117
+ return curValue;
118
+ }
119
+ }
120
+ }
121
+ return newValue;
122
+ }
123
+
124
+ function isDeleteAllowed(node, curValue, applies) {
125
+ if (!node.hasWP || !isData(curValue)) {
126
+ return true;
127
+ }
128
+ const rule = getWPRule(node);
129
+ if (rule && rule.check(applies)) {
130
+ return false;
131
+ }
132
+ if (node.children) {
133
+ for (const [prop, child] of Object.entries(node.children)) {
134
+ if (!isDeleteAllowed(child, curValue?.[prop], applies)) {
135
+ return false;
136
+ }
137
+ }
138
+ }
139
+ return true;
140
+ }
45
141
 
46
- function mkGuard(obj, tree, applies) {
47
- return new Proxy(obj, {
142
+ function mkGuard(obj, tree, final, applies, cache = new WeakMap()) {
143
+ // If this object is already proxied, return the cached proxy
144
+ if (cache.has(obj)) {
145
+ return cache.get(obj);
146
+ }
147
+
148
+ const proxy = new Proxy(obj, {
48
149
  get(target, prop, receiver) {
49
150
  const val = Reflect.get(target, prop, receiver);
50
- if (tree.hasOwnProperty(prop)) {
51
- const {children, rule} = tree[prop];
52
- if (children && val != null && typeof val === 'object') {
53
- return mkGuard(val, children, applies);
54
- } else if (rule && isData(val) && applies(rule)) {
55
- return rule.get(val);
151
+ if (final && val != null && typeof val === 'object') {
152
+ // a parent property has write protect rules, keep guarding
153
+ return mkGuard(val, tree, final, applies, cache)
154
+ } else if (tree.children?.hasOwnProperty(prop)) {
155
+ const {children, hasWP} = tree.children[prop];
156
+ if (isData(val)) {
157
+ // if this property has redact rules, apply them
158
+ const rule = getRedactRule(tree.children[prop]);
159
+ if (rule && rule.check(applies)) {
160
+ return rule.get(val);
161
+ }
162
+ }
163
+ if ((children || hasWP) && val != null && typeof val === 'object') {
164
+ // some nested properties have rules, return a guard for the branch
165
+ return mkGuard(val, tree.children?.[prop] || tree, final || children == null, applies, cache);
56
166
  }
57
167
  }
58
168
  return val;
59
169
  },
170
+ set(target, prop, newValue, receiver) {
171
+ if (final) {
172
+ // a parent property has rules, apply them
173
+ const rule = getWPRule(tree);
174
+ if (rule && rule.check(applies)) {
175
+ return true;
176
+ }
177
+ }
178
+ if (tree.children?.hasOwnProperty(prop)) {
179
+ // apply all (possibly nested) write protect rules
180
+ const curValue = Reflect.get(target, prop, receiver);
181
+ newValue = cleanup(tree.children[prop], curValue, newValue, applies);
182
+ if (!isData(newValue) && !target.hasOwnProperty(prop)) {
183
+ return true;
184
+ }
185
+ }
186
+ return Reflect.set(target, prop, newValue, receiver);
187
+ },
188
+ deleteProperty(target, prop) {
189
+ if (final) {
190
+ // a parent property has rules, apply them
191
+ const rule = getWPRule(tree);
192
+ if (rule && rule.check(applies)) {
193
+ return true;
194
+ }
195
+ }
196
+ if (tree.children?.hasOwnProperty(prop) && !isDeleteAllowed(tree.children[prop], target[prop], applies)) {
197
+ // some nested properties should not be deleted
198
+ return true;
199
+ }
200
+ return Reflect.deleteProperty(target, prop);
201
+ }
60
202
  });
61
- }
62
203
 
63
- function mkVerify(transformResult) {
64
- return function () {
65
- transformResult.forEach(fn => fn());
66
- }
204
+ // Cache the proxy before returning
205
+ cache.set(obj, proxy);
206
+ return proxy;
67
207
  }
68
208
 
69
209
  return function guard(obj, ...args) {
70
210
  const session = {};
71
- return {
72
- obj: mkGuard(obj, root.children || {}, sessionedApplies(session, ...args)),
73
- verify: mkVerify(wpTransformer(session, obj, ...args))
74
- }
211
+ return mkGuard(obj, root, false, sessionedApplies(session, ...args))
75
212
  };
76
213
  }
77
214
 
@@ -82,20 +219,5 @@ export function objectGuard(rules) {
82
219
  export function writeProtectRule(ruleDef) {
83
220
  return Object.assign({
84
221
  wp: true,
85
- run(root, path, object, property, applies) {
86
- const origHasProp = object && object.hasOwnProperty(property);
87
- const original = origHasProp ? object[property] : undefined;
88
- const origCopy = origHasProp && original != null && typeof original === 'object' ? deepClone(original) : original;
89
- return function () {
90
- const object = path == null ? root : deepAccess(root, path);
91
- const finalHasProp = object && isData(object[property]);
92
- const finalValue = finalHasProp ? object[property] : undefined;
93
- if (!origHasProp && finalHasProp && applies()) {
94
- delete object[property];
95
- } else if ((origHasProp !== finalHasProp || finalValue !== original || !deepEqual(finalValue, origCopy)) && applies()) {
96
- deepSetValue(root, (path == null ? [] : [path]).concat(property).join('.'), origCopy);
97
- }
98
- }
99
- }
100
222
  }, ruleDef)
101
223
  }