prebid.js 9.1.0 → 9.3.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.
Files changed (362) hide show
  1. package/browsers.json +3 -3
  2. package/dist/33acrossAnalyticsAdapter.js +1 -1
  3. package/dist/33acrossBidAdapter.js +1 -1
  4. package/dist/33acrossIdSystem.js +1 -1
  5. package/dist/BTBidAdapter.js +1 -1
  6. package/dist/acuityadsBidAdapter.js +1 -1
  7. package/dist/adagioAnalyticsAdapter.js +1 -1
  8. package/dist/adagioBidAdapter.js +1 -1
  9. package/dist/adagioRtdProvider.js +1 -1
  10. package/dist/adagioUtils.js +1 -0
  11. package/dist/addefendBidAdapter.js +1 -1
  12. package/dist/adgenerationBidAdapter.js +1 -1
  13. package/dist/adlooxRtdProvider.js +1 -1
  14. package/dist/admanBidAdapter.js +1 -1
  15. package/dist/adnuntiusBidAdapter.js +1 -1
  16. package/dist/adpod.js +1 -1
  17. package/dist/adprimeBidAdapter.js +1 -1
  18. package/dist/adqueryBidAdapter.js +1 -1
  19. package/dist/adrelevantisBidAdapter.js +1 -1
  20. package/dist/adstirBidAdapter.js +1 -1
  21. package/dist/adtrgtmeBidAdapter.js +1 -1
  22. package/dist/adxcgAnalyticsAdapter.js +1 -1
  23. package/dist/adxcgBidAdapter.js +1 -1
  24. package/dist/adyoulikeBidAdapter.js +1 -1
  25. package/dist/agmaAnalyticsAdapter.js +1 -1
  26. package/dist/ajaBidAdapter.js +1 -1
  27. package/dist/amxBidAdapter.js +1 -1
  28. package/dist/amxIdSystem.js +1 -1
  29. package/dist/appierAnalyticsAdapter.js +1 -1
  30. package/dist/appnexusBidAdapter.js +1 -1
  31. package/dist/appnexusUtils.js +1 -1
  32. package/dist/asoBidAdapter.js +1 -1
  33. package/dist/autoplayDetection.js +1 -1
  34. package/dist/axisBidAdapter.js +1 -1
  35. package/dist/axonixBidAdapter.js +1 -1
  36. package/dist/beyondmediaBidAdapter.js +1 -1
  37. package/dist/bidglassBidAdapter.js +1 -1
  38. package/dist/big-richmediaBidAdapter.js +1 -1
  39. package/dist/bliinkBidAdapter.js +1 -1
  40. package/dist/boldwinBidAdapter.js +1 -1
  41. package/dist/bridBidAdapter.js +1 -1
  42. package/dist/bridgewellBidAdapter.js +1 -1
  43. package/dist/brightMountainMediaBidAdapter.js +1 -1
  44. package/dist/carodaBidAdapter.js +1 -1
  45. package/dist/chtnwBidAdapter.js +1 -1
  46. package/dist/chunk-core.js +1 -1
  47. package/dist/compassBidAdapter.js +1 -1
  48. package/dist/concertBidAdapter.js +1 -1
  49. package/dist/connectadBidAdapter.js +1 -1
  50. package/dist/consentManagement.js +1 -0
  51. package/dist/consentManagementGpp.js +1 -1
  52. package/dist/consentManagementTcf.js +1 -1
  53. package/dist/consumableBidAdapter.js +1 -1
  54. package/dist/contentexchangeBidAdapter.js +1 -1
  55. package/dist/conversantAnalyticsAdapter.js +1 -1
  56. package/dist/conversantBidAdapter.js +1 -1
  57. package/dist/copper6sspBidAdapter.js +1 -0
  58. package/dist/craftBidAdapter.js +1 -1
  59. package/dist/criteoBidAdapter.js +1 -1
  60. package/dist/cwireBidAdapter.js +1 -1
  61. package/dist/dailymotionBidAdapter.js +1 -1
  62. package/dist/dependencies.json +96 -6
  63. package/dist/dspxBidAdapter.js +1 -1
  64. package/dist/dxkultureBidAdapter.js +1 -1
  65. package/dist/e_volutionBidAdapter.js +1 -1
  66. package/dist/emtvBidAdapter.js +1 -1
  67. package/dist/eplanningBidAdapter.js +1 -1
  68. package/dist/euidIdSystem.js +1 -1
  69. package/dist/exadsBidAdapter.js +1 -1
  70. package/dist/feedadBidAdapter.js +1 -1
  71. package/dist/finativeBidAdapter.js +1 -1
  72. package/dist/freewheel-sspBidAdapter.js +1 -1
  73. package/dist/globalsunBidAdapter.js +1 -1
  74. package/dist/gmosspBidAdapter.js +1 -1
  75. package/dist/goldbachBidAdapter.js +1 -1
  76. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  77. package/dist/greenbidsRtdProvider.js +1 -1
  78. package/dist/gridBidAdapter.js +1 -1
  79. package/dist/gumgumBidAdapter.js +1 -1
  80. package/dist/h12mediaBidAdapter.js +1 -1
  81. package/dist/hypelabBidAdapter.js +1 -1
  82. package/dist/id5AnalyticsAdapter.js +1 -1
  83. package/dist/id5IdSystem.js +1 -1
  84. package/dist/illuminBidAdapter.js +1 -1
  85. package/dist/imdsBidAdapter.js +1 -1
  86. package/dist/improvedigitalBidAdapter.js +1 -1
  87. package/dist/insticatorBidAdapter.js +1 -1
  88. package/dist/intentIqIdSystem.js +1 -1
  89. package/dist/iqzoneBidAdapter.js +1 -1
  90. package/dist/ixBidAdapter.js +1 -1
  91. package/dist/jixieBidAdapter.js +1 -1
  92. package/dist/justpremiumBidAdapter.js +1 -1
  93. package/dist/kargoBidAdapter.js +1 -1
  94. package/dist/kimberliteBidAdapter.js +1 -1
  95. package/dist/kiviadsBidAdapter.js +1 -1
  96. package/dist/konduitAnalyticsAdapter.js +1 -1
  97. package/dist/krushmediaBidAdapter.js +1 -1
  98. package/dist/kueezBidAdapter.js +1 -1
  99. package/dist/kueezRtbBidAdapter.js +1 -1
  100. package/dist/lassoBidAdapter.js +1 -1
  101. package/dist/lifestreetBidAdapter.js +1 -1
  102. package/dist/liveIntentIdSystem.js +1 -1
  103. package/dist/logicadBidAdapter.js +1 -1
  104. package/dist/loglyliftBidAdapter.js +1 -1
  105. package/dist/loyalBidAdapter.js +1 -1
  106. package/dist/luceadBidAdapter.js +1 -1
  107. package/dist/lunamediahbBidAdapter.js +1 -1
  108. package/dist/mabidderBidAdapter.js +1 -1
  109. package/dist/magniteAnalyticsAdapter.js +1 -1
  110. package/dist/malltvAnalyticsAdapter.js +1 -1
  111. package/dist/marsmediaBidAdapter.js +1 -1
  112. package/dist/mathildeadsBidAdapter.js +1 -1
  113. package/dist/mediafuseBidAdapter.js +1 -1
  114. package/dist/medianetAnalyticsAdapter.js +1 -1
  115. package/dist/medianetBidAdapter.js +1 -1
  116. package/dist/mediasquareBidAdapter.js +1 -1
  117. package/dist/mgidBidAdapter.js +1 -1
  118. package/dist/mgidXBidAdapter.js +1 -1
  119. package/dist/minutemediaBidAdapter.js +1 -1
  120. package/dist/missenaBidAdapter.js +1 -1
  121. package/dist/mobfoxpbBidAdapter.js +1 -1
  122. package/dist/mobianRtdProvider.js +1 -1
  123. package/dist/nexx360BidAdapter.js +1 -1
  124. package/dist/nobidAnalyticsAdapter.js +1 -1
  125. package/dist/nobidBidAdapter.js +1 -1
  126. package/dist/not-for-prod/prebid.js +211 -204
  127. package/dist/oguryBidAdapter.js +1 -1
  128. package/dist/onetagBidAdapter.js +1 -1
  129. package/dist/ooloAnalyticsAdapter.js +1 -1
  130. package/dist/openwebBidAdapter.js +1 -1
  131. package/dist/openxBidAdapter.js +1 -1
  132. package/dist/optidigitalBidAdapter.js +1 -1
  133. package/dist/orakiBidAdapter.js +1 -0
  134. package/dist/orbidderBidAdapter.js +1 -1
  135. package/dist/ortbConverter.js +1 -1
  136. package/dist/outbrainBidAdapter.js +1 -1
  137. package/dist/ozoneBidAdapter.js +1 -1
  138. package/dist/paapi.js +1 -1
  139. package/dist/pairIdSystem.js +1 -1
  140. package/dist/pgamsspBidAdapter.js +1 -1
  141. package/dist/pixfutureBidAdapter.js +1 -1
  142. package/dist/playdigoBidAdapter.js +1 -1
  143. package/dist/prebidServerBidAdapter.js +1 -1
  144. package/dist/pubCircleBidAdapter.js +1 -1
  145. package/dist/publinkIdSystem.js +1 -1
  146. package/dist/publirBidAdapter.js +1 -1
  147. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  148. package/dist/pubmaticBidAdapter.js +1 -1
  149. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  150. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  151. package/dist/pxyzBidAdapter.js +1 -1
  152. package/dist/qtBidAdapter.js +1 -1
  153. package/dist/quantcastBidAdapter.js +1 -1
  154. package/dist/raynRtdProvider.js +1 -1
  155. package/dist/readpeakBidAdapter.js +1 -1
  156. package/dist/relaidoBidAdapter.js +1 -1
  157. package/dist/retailspotBidAdapter.js +1 -1
  158. package/dist/rhythmoneBidAdapter.js +1 -1
  159. package/dist/riseBidAdapter.js +1 -1
  160. package/dist/rubiconBidAdapter.js +1 -1
  161. package/dist/seedingAllianceBidAdapter.js +1 -1
  162. package/dist/seedtagBidAdapter.js +1 -1
  163. package/dist/setupadBidAdapter.js +1 -1
  164. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  165. package/dist/sharethroughBidAdapter.js +1 -1
  166. package/dist/shinezBidAdapter.js +1 -1
  167. package/dist/shinezRtbBidAdapter.js +1 -1
  168. package/dist/smaatoBidAdapter.js +1 -1
  169. package/dist/smartadserverBidAdapter.js +1 -1
  170. package/dist/smartxBidAdapter.js +1 -1
  171. package/dist/smartyadsBidAdapter.js +1 -1
  172. package/dist/smartyadsUtils.js +1 -0
  173. package/dist/smartytechBidAdapter.js +1 -1
  174. package/dist/smilewantedBidAdapter.js +1 -1
  175. package/dist/snigelBidAdapter.js +1 -1
  176. package/dist/sonobiBidAdapter.js +1 -1
  177. package/dist/sovrnBidAdapter.js +1 -1
  178. package/dist/sspBCBidAdapter.js +1 -1
  179. package/dist/stnBidAdapter.js +1 -1
  180. package/dist/stvBidAdapter.js +1 -1
  181. package/dist/sublimeBidAdapter.js +1 -1
  182. package/dist/taboolaBidAdapter.js +1 -1
  183. package/dist/tagorasBidAdapter.js +1 -1
  184. package/dist/tappxBidAdapter.js +1 -1
  185. package/dist/targetVideoBidAdapter.js +1 -1
  186. package/dist/teadsBidAdapter.js +1 -1
  187. package/dist/teqblazeUtils.js +1 -0
  188. package/dist/terceptAnalyticsAdapter.js +1 -1
  189. package/dist/themoneytizerBidAdapter.js +1 -1
  190. package/dist/topicsFpdModule.js +1 -1
  191. package/dist/trionBidAdapter.js +1 -1
  192. package/dist/tripleliftBidAdapter.js +1 -1
  193. package/dist/ttdBidAdapter.js +1 -1
  194. package/dist/twistDigitalBidAdapter.js +1 -1
  195. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  196. package/dist/uid2IdSystem.js +1 -1
  197. package/dist/underdogmediaBidAdapter.js +1 -1
  198. package/dist/undertoneBidAdapter.js +1 -1
  199. package/dist/unrulyBidAdapter.js +1 -1
  200. package/dist/userId.js +1 -1
  201. package/dist/vidazooBidAdapter.js +1 -1
  202. package/dist/vidazooUtils.js +1 -0
  203. package/dist/videobyteBidAdapter.js +1 -1
  204. package/dist/visiblemeasuresBidAdapter.js +1 -1
  205. package/dist/visxBidAdapter.js +1 -1
  206. package/dist/vuukleBidAdapter.js +1 -1
  207. package/dist/widespaceBidAdapter.js +1 -1
  208. package/dist/winrBidAdapter.js +1 -1
  209. package/dist/yahooAdsBidAdapter.js +1 -1
  210. package/dist/yieldmoBidAdapter.js +1 -1
  211. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  212. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  213. package/integrationExamples/gpt/raynRtdProvider_example.html +1 -0
  214. package/libraries/adagioUtils/adagioUtils.js +35 -0
  215. package/libraries/appnexusUtils/anUtils.js +1 -0
  216. package/libraries/autoplayDetection/autoplay.js +8 -1
  217. package/libraries/consentManagement/cmUtils.js +38 -0
  218. package/libraries/ortbConverter/converter.js +1 -1
  219. package/libraries/smartyadsUtils/getAdUrlByRegion.js +32 -0
  220. package/libraries/teqblazeUtils/bidderUtils.js +253 -0
  221. package/libraries/vidazooUtils/bidderUtils.js +481 -0
  222. package/libraries/vidazooUtils/constants.js +7 -0
  223. package/modules/.submodules.json +1 -0
  224. package/modules/acuityadsBidAdapter.js +5 -203
  225. package/modules/adagioBidAdapter.js +1 -17
  226. package/modules/adagioRtdProvider.js +41 -51
  227. package/modules/adagioRtdProvider.md +1 -0
  228. package/modules/addefendBidAdapter.js +1 -2
  229. package/modules/adlooxRtdProvider.js +1 -1
  230. package/modules/admanBidAdapter.js +31 -188
  231. package/modules/adnuntiusBidAdapter.js +1 -0
  232. package/modules/adprimeBidAdapter.js +28 -165
  233. package/modules/adxcgAnalyticsAdapter.js +1 -2
  234. package/modules/axisBidAdapter.js +33 -165
  235. package/modules/beyondmediaBidAdapter.js +5 -189
  236. package/modules/bliinkBidAdapter.js +3 -31
  237. package/modules/boldwinBidAdapter.js +21 -159
  238. package/modules/ceeIdSystem.js +1 -1
  239. package/modules/compassBidAdapter.js +5 -198
  240. package/modules/consentManagementGpp.js +2 -38
  241. package/modules/consentManagementTcf.js +7 -38
  242. package/modules/contentexchangeBidAdapter.js +5 -200
  243. package/modules/conversantAnalyticsAdapter.js +1 -2
  244. package/modules/conversantBidAdapter.js +1 -0
  245. package/modules/copper6sspBidAdapter.js +19 -0
  246. package/modules/copper6sspBidAdapter.md +79 -0
  247. package/modules/criteoBidAdapter.js +10 -3
  248. package/modules/e_volutionBidAdapter.js +4 -186
  249. package/modules/emtvBidAdapter.js +5 -198
  250. package/modules/globalsunBidAdapter.js +5 -199
  251. package/modules/id5AnalyticsAdapter.js +1 -2
  252. package/modules/id5IdSystem.js +31 -2
  253. package/modules/id5IdSystem.md +67 -2
  254. package/modules/intentIqIdSystem.js +408 -50
  255. package/modules/intentIqIdSystem.md +92 -0
  256. package/modules/iqzoneBidAdapter.js +5 -224
  257. package/modules/kiviadsBidAdapter.js +5 -199
  258. package/modules/krushmediaBidAdapter.js +25 -143
  259. package/modules/liveIntentIdSystem.js +2 -2
  260. package/modules/loyalBidAdapter.js +4 -178
  261. package/modules/lunamediahbBidAdapter.js +5 -118
  262. package/modules/mabidderBidAdapter.js +1 -2
  263. package/modules/mathildeadsBidAdapter.js +5 -198
  264. package/modules/medianetAnalyticsAdapter.js +1 -2
  265. package/modules/medianetBidAdapter.js +1 -1
  266. package/modules/mgidXBidAdapter.js +14 -207
  267. package/modules/mobfoxpbBidAdapter.js +4 -135
  268. package/modules/mobianRtdProvider.js +2 -2
  269. package/modules/nobidAnalyticsAdapter.js +2 -3
  270. package/modules/orakiBidAdapter.js +19 -0
  271. package/modules/orakiBidAdapter.md +79 -0
  272. package/modules/orbidderBidAdapter.js +4 -2
  273. package/modules/ozoneBidAdapter.js +117 -58
  274. package/modules/paapi.js +2 -1
  275. package/modules/pairIdSystem.js +27 -10
  276. package/modules/pgamsspBidAdapter.js +5 -240
  277. package/modules/pixfutureBidAdapter.js +1 -2
  278. package/modules/playdigoBidAdapter.js +4 -186
  279. package/modules/prebidServerBidAdapter/index.js +10 -3
  280. package/modules/pubCircleBidAdapter.js +5 -218
  281. package/modules/pubmaticAnalyticsAdapter.js +21 -8
  282. package/modules/pubxaiAnalyticsAdapter.js +1 -5
  283. package/modules/qtBidAdapter.js +5 -224
  284. package/modules/raynRtdProvider.js +36 -3
  285. package/modules/seedtagBidAdapter.js +5 -0
  286. package/modules/setupadBidAdapter.js +58 -140
  287. package/modules/smartadserverBidAdapter.js +3 -0
  288. package/modules/smartyadsBidAdapter.js +6 -110
  289. package/modules/smartytechBidAdapter.js +7 -2
  290. package/modules/snigelBidAdapter.js +1 -2
  291. package/modules/tappxBidAdapter.js +1 -2
  292. package/modules/terceptAnalyticsAdapter.js +1 -2
  293. package/modules/topicsFpdModule.js +1 -1
  294. package/modules/twistDigitalBidAdapter.js +1 -12
  295. package/modules/uid2IdSystem.js +0 -1
  296. package/modules/uid2IdSystem_shared.js +0 -1
  297. package/modules/userId/index.js +31 -21
  298. package/modules/vidazooBidAdapter.js +26 -468
  299. package/modules/visiblemeasuresBidAdapter.js +5 -199
  300. package/modules/yahooAdsBidAdapter.js +4 -1
  301. package/modules/yuktamediaAnalyticsAdapter.js +1 -2
  302. package/package.json +1 -1
  303. package/src/auction.js +5 -63
  304. package/src/utils/focusTimeout.js +41 -0
  305. package/src/utils/ttlCollection.js +2 -1
  306. package/src/utils.js +42 -0
  307. package/src/videoCache.js +72 -0
  308. package/test/mocks/videoCacheStub.js +1 -1
  309. package/test/spec/auctionmanager_spec.js +16 -1
  310. package/test/spec/fpd/gdpr_spec.js +24 -2
  311. package/test/spec/libraries/teqblazeUtils/bidderUtils_spec.js +519 -0
  312. package/test/spec/modules/acuityadsBidAdapter_spec.js +79 -43
  313. package/test/spec/modules/adagioRtdProvider_spec.js +62 -1
  314. package/test/spec/modules/admanBidAdapter_spec.js +370 -247
  315. package/test/spec/modules/adnuntiusBidAdapter_spec.js +6 -3
  316. package/test/spec/modules/adprimeBidAdapter_spec.js +225 -78
  317. package/test/spec/modules/axisBidAdapter_spec.js +78 -14
  318. package/test/spec/modules/beyondmediaBidAdapter_spec.js +80 -18
  319. package/test/spec/modules/bliinkBidAdapter_spec.js +8 -2
  320. package/test/spec/modules/boldwinBidAdapter_spec.js +221 -75
  321. package/test/spec/modules/compassBidAdapter_spec.js +130 -16
  322. package/test/spec/modules/contentexchangeBidAdapter_spec.js +134 -21
  323. package/test/spec/modules/conversantAnalyticsAdapter_spec.js +1 -1
  324. package/test/spec/modules/conversantBidAdapter_spec.js +7 -0
  325. package/test/spec/modules/copper6sspBidAdapter_spec.js +514 -0
  326. package/test/spec/modules/e_volutionBidAdapter_spec.js +65 -3
  327. package/test/spec/modules/emtvBidAdapter_spec.js +131 -16
  328. package/test/spec/modules/globalsunBidAdapter_spec.js +130 -16
  329. package/test/spec/modules/id5IdSystem_spec.js +79 -3
  330. package/test/spec/modules/intentIqIdSystem_spec.js +264 -36
  331. package/test/spec/modules/iqzoneBidAdapter_spec.js +66 -12
  332. package/test/spec/modules/kiviadsBidAdapter_spec.js +131 -20
  333. package/test/spec/modules/krushmediaBidAdapter_spec.js +272 -90
  334. package/test/spec/modules/loyalBidAdapter_spec.js +114 -14
  335. package/test/spec/modules/lunamediahbBidAdapter_spec.js +221 -87
  336. package/test/spec/modules/mathildeadsBidAdapter_spec.js +87 -18
  337. package/test/spec/modules/mgidXBidAdapter_spec.js +11 -3
  338. package/test/spec/modules/mobfoxpbBidAdapter_spec.js +229 -91
  339. package/test/spec/modules/orakiBidAdapter_spec.js +510 -0
  340. package/test/spec/modules/ozoneBidAdapter_spec.js +192 -22
  341. package/test/spec/modules/paapi_spec.js +5 -5
  342. package/test/spec/modules/pgamsspBidAdapter_spec.js +83 -16
  343. package/test/spec/modules/playdigoBidAdapter_spec.js +38 -9
  344. package/test/spec/modules/prebidServerBidAdapter_spec.js +14 -0
  345. package/test/spec/modules/pubCircleBidAdapter_spec.js +82 -17
  346. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +52 -5
  347. package/test/spec/modules/qtBidAdapter_spec.js +15 -3
  348. package/test/spec/modules/raynRtdProvider_spec.js +25 -0
  349. package/test/spec/modules/seedtagBidAdapter_spec.js +29 -0
  350. package/test/spec/modules/setupadBidAdapter_spec.js +124 -97
  351. package/test/spec/modules/smartadserverBidAdapter_spec.js +7 -0
  352. package/test/spec/modules/smartyadsBidAdapter_spec.js +6 -83
  353. package/test/spec/modules/smartytechBidAdapter_spec.js +5 -1
  354. package/test/spec/modules/topicsFpdModule_spec.js +43 -59
  355. package/test/spec/modules/twistDigitalBidAdapter_spec.js +5 -3
  356. package/test/spec/modules/userId_spec.js +86 -47
  357. package/test/spec/modules/vidazooBidAdapter_spec.js +21 -23
  358. package/test/spec/modules/visiblemeasuresBidAdapter_spec.js +130 -16
  359. package/test/spec/modules/yahooAdsBidAdapter_spec.js +1 -1
  360. package/test/spec/ortbConverter/converter_spec.js +7 -3
  361. package/test/spec/unit/utils/focusTimeout_spec.js +60 -0
  362. package/test/spec/videoCache_spec.js +56 -53
@@ -1,217 +1,19 @@
1
- import { isFn, deepAccess, logMessage, logError } from '../src/utils.js';
2
- import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
3
-
4
1
  import { registerBidder } from '../src/adapters/bidderFactory.js';
5
2
  import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
6
- import { config } from '../src/config.js';
3
+ import { isBidRequestValid, buildRequests, interpretResponse, getUserSyncs } from '../libraries/teqblazeUtils/bidderUtils.js';
7
4
 
8
5
  const BIDDER_CODE = 'acuityads';
9
6
  const AD_URL = 'https://prebid.admanmedia.com/pbjs';
10
7
  const SYNC_URL = 'https://cs.admanmedia.com';
11
8
 
12
- function isBidResponseValid(bid) {
13
- if (!bid.requestId || !bid.cpm || !bid.creativeId || !bid.ttl || !bid.currency) {
14
- return false;
15
- }
16
-
17
- switch (bid.mediaType) {
18
- case BANNER:
19
- return Boolean(bid.width && bid.height && bid.ad);
20
- case VIDEO:
21
- return Boolean(bid.vastUrl || bid.vastXml);
22
- case NATIVE:
23
- return Boolean(bid.native && bid.native.impressionTrackers && bid.native.impressionTrackers.length);
24
- default:
25
- return false;
26
- }
27
- }
28
-
29
- function getPlacementReqData(bid) {
30
- const { params, bidId, mediaTypes } = bid;
31
- const schain = bid.schain || {};
32
- const { placementId } = params;
33
- const bidfloor = getBidFloor(bid);
34
-
35
- const placement = {
36
- bidId,
37
- schain,
38
- bidfloor
39
- };
40
-
41
- placement.placementId = placementId;
42
- placement.type = 'publisher';
43
-
44
- if (mediaTypes && mediaTypes[BANNER]) {
45
- placement.adFormat = BANNER;
46
- placement.sizes = mediaTypes[BANNER].sizes;
47
- } else if (mediaTypes && mediaTypes[VIDEO]) {
48
- placement.adFormat = VIDEO;
49
- placement.playerSize = mediaTypes[VIDEO].playerSize;
50
- placement.minduration = mediaTypes[VIDEO].minduration;
51
- placement.maxduration = mediaTypes[VIDEO].maxduration;
52
- placement.mimes = mediaTypes[VIDEO].mimes;
53
- placement.protocols = mediaTypes[VIDEO].protocols;
54
- placement.startdelay = mediaTypes[VIDEO].startdelay;
55
- placement.placement = mediaTypes[VIDEO].placement;
56
- placement.plcmt = mediaTypes[VIDEO].plcmt;
57
- placement.skip = mediaTypes[VIDEO].skip;
58
- placement.skipafter = mediaTypes[VIDEO].skipafter;
59
- placement.minbitrate = mediaTypes[VIDEO].minbitrate;
60
- placement.maxbitrate = mediaTypes[VIDEO].maxbitrate;
61
- placement.delivery = mediaTypes[VIDEO].delivery;
62
- placement.playbackmethod = mediaTypes[VIDEO].playbackmethod;
63
- placement.api = mediaTypes[VIDEO].api;
64
- placement.linearity = mediaTypes[VIDEO].linearity;
65
- } else if (mediaTypes && mediaTypes[NATIVE]) {
66
- placement.native = mediaTypes[NATIVE];
67
- placement.adFormat = NATIVE;
68
- }
69
-
70
- return placement;
71
- }
72
-
73
- function getBidFloor(bid) {
74
- if (!isFn(bid.getFloor)) {
75
- return deepAccess(bid, 'params.bidfloor', 0);
76
- }
77
-
78
- try {
79
- const bidFloor = bid.getFloor({
80
- currency: 'USD',
81
- mediaType: '*',
82
- size: '*',
83
- });
84
- return bidFloor.floor;
85
- } catch (err) {
86
- logError(err);
87
- return 0;
88
- }
89
- }
90
-
91
9
  export const spec = {
92
10
  code: BIDDER_CODE,
93
11
  supportedMediaTypes: [BANNER, VIDEO, NATIVE],
94
12
 
95
- isBidRequestValid: (bid = {}) => {
96
- const { params, bidId, mediaTypes } = bid;
97
- let valid = Boolean(bidId && params && params.placementId);
98
-
99
- if (mediaTypes && mediaTypes[BANNER]) {
100
- valid = valid && Boolean(mediaTypes[BANNER] && mediaTypes[BANNER].sizes);
101
- } else if (mediaTypes && mediaTypes[VIDEO]) {
102
- valid = valid && Boolean(mediaTypes[VIDEO] && mediaTypes[VIDEO].playerSize);
103
- } else if (mediaTypes && mediaTypes[NATIVE]) {
104
- valid = valid && Boolean(mediaTypes[NATIVE]);
105
- } else {
106
- valid = false;
107
- }
108
- return valid;
109
- },
110
-
111
- buildRequests: (validBidRequests = [], bidderRequest = {}) => {
112
- // convert Native ORTB definition to old-style prebid native definition
113
- validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
114
-
115
- let deviceWidth = 0;
116
- let deviceHeight = 0;
117
-
118
- let winLocation;
119
- try {
120
- const winTop = window.top;
121
- deviceWidth = winTop.screen.width;
122
- deviceHeight = winTop.screen.height;
123
- winLocation = winTop.location;
124
- } catch (e) {
125
- logMessage(e);
126
- winLocation = window.location;
127
- }
128
-
129
- const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.page;
130
- let refferLocation;
131
- try {
132
- refferLocation = refferUrl && new URL(refferUrl);
133
- } catch (e) {
134
- logMessage(e);
135
- }
136
- // TODO: does the fallback make sense here?
137
- let location = refferLocation || winLocation;
138
- const language = (navigator && navigator.language) ? navigator.language.split('-')[0] : '';
139
- const host = location.host;
140
- const page = location.pathname;
141
- const secure = location.protocol === 'https:' ? 1 : 0;
142
- const placements = [];
143
- const request = {
144
- deviceWidth,
145
- deviceHeight,
146
- language,
147
- secure,
148
- host,
149
- page,
150
- placements,
151
- coppa: config.getConfig('coppa') === true ? 1 : 0,
152
- ccpa: bidderRequest.uspConsent || undefined,
153
- gdpr: bidderRequest.gdprConsent || undefined,
154
- tmax: bidderRequest.timeout
155
- };
156
-
157
- // Add GPP consent
158
- if (bidderRequest.gppConsent) {
159
- request.gpp = bidderRequest.gppConsent.gppString;
160
- request.gpp_sid = bidderRequest.gppConsent.applicableSections;
161
- } else if (bidderRequest.ortb2?.regs?.gpp) {
162
- request.gpp = bidderRequest.ortb2.regs.gpp;
163
- request.gpp_sid = bidderRequest.ortb2.regs.gpp_sid;
164
- }
165
-
166
- const len = validBidRequests.length;
167
- for (let i = 0; i < len; i++) {
168
- const bid = validBidRequests[i];
169
- placements.push(getPlacementReqData(bid));
170
- }
171
-
172
- return {
173
- method: 'POST',
174
- url: AD_URL,
175
- data: request
176
- };
177
- },
178
-
179
- interpretResponse: (serverResponse) => {
180
- let response = [];
181
- for (let i = 0; i < serverResponse.body.length; i++) {
182
- let resItem = serverResponse.body[i];
183
- if (isBidResponseValid(resItem)) {
184
- const advertiserDomains = resItem.adomain && resItem.adomain.length ? resItem.adomain : [];
185
- resItem.meta = { ...resItem.meta, advertiserDomains };
186
-
187
- response.push(resItem);
188
- }
189
- }
190
- return response;
191
- },
192
-
193
- getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent) => {
194
- let syncType = syncOptions.iframeEnabled ? 'iframe' : 'image';
195
- let syncUrl = SYNC_URL + `/${syncType}?pbjs=1`;
196
- if (gdprConsent && gdprConsent.consentString) {
197
- if (typeof gdprConsent.gdprApplies === 'boolean') {
198
- syncUrl += `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
199
- } else {
200
- syncUrl += `&gdpr=0&gdpr_consent=${gdprConsent.consentString}`;
201
- }
202
- }
203
- if (uspConsent && uspConsent.consentString) {
204
- syncUrl += `&ccpa_consent=${uspConsent.consentString}`;
205
- }
206
-
207
- const coppa = config.getConfig('coppa') ? 1 : 0;
208
- syncUrl += `&coppa=${coppa}`;
209
-
210
- return [{
211
- type: syncType,
212
- url: syncUrl
213
- }];
214
- }
13
+ isBidRequestValid: isBidRequestValid(['placementId']),
14
+ buildRequests: buildRequests(AD_URL),
15
+ interpretResponse,
16
+ getUserSyncs: getUserSyncs(SYNC_URL)
215
17
  };
216
18
 
217
19
  registerBidder(spec);
@@ -7,13 +7,11 @@ import {
7
7
  generateUUID,
8
8
  getDNT,
9
9
  getWindowSelf,
10
- getWindowTop,
11
10
  isArray,
12
11
  isArrayOfNums,
13
12
  isFn,
14
13
  isInteger,
15
14
  isNumber,
16
- isSafeFrameWindow,
17
15
  isStr,
18
16
  logError,
19
17
  logInfo,
@@ -26,6 +24,7 @@ import { config } from '../src/config.js';
26
24
  import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
27
25
  import { find } from '../src/polyfill.js';
28
26
  import { getGptSlotInfoForAdUnitCode } from '../libraries/gptUtils/gptUtils.js';
27
+ import { _ADAGIO } from '../libraries/adagioUtils/adagioUtils.js';
29
28
  import { registerBidder } from '../src/adapters/bidderFactory.js';
30
29
  import { userSync } from '../src/userSync.js';
31
30
 
@@ -78,21 +77,6 @@ export const ORTB_VIDEO_PARAMS = {
78
77
  * Returns the window.ADAGIO global object used to store Adagio data.
79
78
  * This object is created in window.top if possible, otherwise in window.self.
80
79
  */
81
- const _ADAGIO = (function() {
82
- const w = (canAccessWindowTop()) ? getWindowTop() : getWindowSelf();
83
-
84
- w.ADAGIO = w.ADAGIO || {};
85
- w.ADAGIO.pageviewId = w.ADAGIO.pageviewId || generateUUID();
86
- w.ADAGIO.adUnits = w.ADAGIO.adUnits || {};
87
- w.ADAGIO.pbjsAdUnits = w.ADAGIO.pbjsAdUnits || [];
88
- w.ADAGIO.queue = w.ADAGIO.queue || [];
89
- w.ADAGIO.versions = w.ADAGIO.versions || {};
90
- w.ADAGIO.versions.pbjs = '$prebid.version$';
91
- w.ADAGIO.isSafeFrameWindow = isSafeFrameWindow();
92
-
93
- return w.ADAGIO;
94
- })();
95
-
96
80
  function getDevice() {
97
81
  const language = navigator.language ? 'language' : 'userLanguage';
98
82
  return {
@@ -15,6 +15,8 @@ import {
15
15
  deepAccess,
16
16
  deepSetValue,
17
17
  generateUUID,
18
+ getDomLoadingDuration,
19
+ getSafeframeGeometry,
18
20
  getUniqueIdentifierStr,
19
21
  getWindowSelf,
20
22
  getWindowTop,
@@ -24,6 +26,7 @@ import {
24
26
  isStr,
25
27
  prefixLog
26
28
  } from '../src/utils.js';
29
+ import { _ADAGIO, getBestWindowForAdagio } from '../libraries/adagioUtils/adagioUtils.js';
27
30
  import { getGptSlotInfoForAdUnitCode } from '../libraries/gptUtils/gptUtils.js';
28
31
 
29
32
  /**
@@ -35,6 +38,11 @@ const ADAGIO_BIDDER_CODE = 'adagio';
35
38
  const GVLID = 617;
36
39
  const SCRIPT_URL = 'https://script.4dex.io/a/latest/adagio.js';
37
40
  const SESS_DURATION = 30 * 60 * 1000;
41
+ export const PLACEMENT_SOURCES = {
42
+ ORTB: 'ortb', // implicit default, not used atm.
43
+ ADUNITCODE: 'code',
44
+ GPID: 'gpid'
45
+ };
38
46
  export const storage = getStorageManager({ moduleType: MODULE_TYPE_RTD, moduleName: SUBMODULE_NAME });
39
47
 
40
48
  const { logError, logWarn } = prefixLog('AdagioRtdProvider:');
@@ -42,23 +50,6 @@ const { logError, logWarn } = prefixLog('AdagioRtdProvider:');
42
50
  // Guard to avoid storing the same bid data several times.
43
51
  const guard = new Set();
44
52
 
45
- /**
46
- * Returns the window.ADAGIO global object used to store Adagio data.
47
- * This object is created in window.top if possible, otherwise in window.self.
48
- */
49
- const _ADAGIO = (function() {
50
- const w = (canAccessWindowTop()) ? getWindowTop() : getWindowSelf();
51
-
52
- w.ADAGIO = w.ADAGIO || {};
53
- w.ADAGIO.pageviewId = w.ADAGIO.pageviewId || generateUUID();
54
- w.ADAGIO.adUnits = w.ADAGIO.adUnits || {};
55
- w.ADAGIO.pbjsAdUnits = w.ADAGIO.pbjsAdUnits || [];
56
- w.ADAGIO.queue = w.ADAGIO.queue || [];
57
- w.ADAGIO.windows = w.ADAGIO.windows || [];
58
-
59
- return w.ADAGIO;
60
- })();
61
-
62
53
  /**
63
54
  * Store the sampling data.
64
55
  * This data is used to determine if beacons should be sent to adagio.
@@ -131,12 +122,14 @@ const _FEATURES = (function() {
131
122
  features.data = {};
132
123
  },
133
124
  get: function() {
125
+ const w = getBestWindowForAdagio();
126
+
134
127
  if (!features.initialized) {
135
128
  features.data = {
136
129
  page_dimensions: getPageDimensions().toString(),
137
130
  viewport_dimensions: getViewPortDimensions().toString(),
138
131
  user_timestamp: getTimestampUTC().toString(),
139
- dom_loading: getDomLoadingDuration().toString(),
132
+ dom_loading: getDomLoadingDuration(w).toString(),
140
133
  };
141
134
  features.initialized = true;
142
135
  }
@@ -271,10 +264,12 @@ function onBidRequest(bidderRequest, config, _userConsent) {
271
264
  * @param {*} config
272
265
  */
273
266
  function onGetBidRequestData(bidReqConfig, callback, config) {
267
+ const configParams = deepAccess(config, 'params', {});
274
268
  const { site: ortb2Site } = bidReqConfig.ortb2Fragments.global;
275
269
  const features = _internal.getFeatures().get();
276
270
  const ext = {
277
271
  uid: generateUUID(),
272
+ pageviewId: _ADAGIO.pageviewId,
278
273
  features: { ...features },
279
274
  session: { ..._SESSION.get() }
280
275
  };
@@ -294,8 +289,26 @@ function onGetBidRequestData(bidReqConfig, callback, config) {
294
289
  const slotPosition = getSlotPosition(adUnit);
295
290
  deepSetValue(ortb2Imp, `ext.data.adg_rtd.adunit_position`, slotPosition);
296
291
 
297
- // We expect `pagetype` `category` are defined in FPD `ortb2.site.ext.data` object.
298
- // `placement` is expected in FPD `adUnits[].ortb2Imp.ext.data` object. (Please note that this `placement` is not related to the oRTB video property.)
292
+ // It is expected that the publisher set a `adUnits[].ortb2Imp.ext.data.placement` value.
293
+ // Btw, We allow fallback sources to programmatically set this value.
294
+ // The source is defined in the `config.params.placementSource` and the possible values are `code` or `gpid`.
295
+ // (Please note that this `placement` is not related to the oRTB video property.)
296
+ if (!deepAccess(ortb2Imp, 'ext.data.placement')) {
297
+ const { placementSource = '' } = configParams;
298
+
299
+ switch (placementSource.toLowerCase()) {
300
+ case PLACEMENT_SOURCES.ADUNITCODE:
301
+ deepSetValue(ortb2Imp, 'ext.data.placement', adUnit.code);
302
+ break;
303
+ case PLACEMENT_SOURCES.GPID:
304
+ deepSetValue(ortb2Imp, 'ext.data.placement', deepAccess(ortb2Imp, 'ext.gpid'));
305
+ break;
306
+ default:
307
+ logWarn('`ortb2Imp.ext.data.placement` is missing and `params.definePlacement` is not set in the config.');
308
+ }
309
+ }
310
+
311
+ // We expect that `pagetype`, `category`, `placement` are defined in FPD `ortb2.site.ext.data` and `adUnits[].ortb2Imp.ext.data` objects.
299
312
  // Btw, we have to ensure compatibility with publishers that use the "legacy" adagio params at the adUnit.params level.
300
313
  const adagioBid = adUnit.bids.find(bid => _internal.isAdagioBidder(bid.bidder));
301
314
  if (adagioBid) {
@@ -316,9 +329,6 @@ function onGetBidRequestData(bidReqConfig, callback, config) {
316
329
  if (adagioBid.params.placement) {
317
330
  deepSetValue(ortb2Imp, 'ext.data.placement', adagioBid.params.placement);
318
331
  mustWarnOrtb2Imp = true;
319
- } else {
320
- // If the placement is not defined, we fallback to the adUnit code.
321
- deepSetValue(ortb2Imp, 'ext.data.placement', adUnit.code);
322
332
  }
323
333
  }
324
334
 
@@ -428,16 +438,14 @@ function getSlotPosition(adUnit) {
428
438
  const position = { x: 0, y: 0 };
429
439
 
430
440
  if (isSafeFrameWindow()) {
431
- const ws = getWindowSelf();
432
-
433
- const sfGeom = (typeof ws.$sf.ext.geom === 'function') ? ws.$sf.ext.geom() : null;
441
+ const { self } = getSafeframeGeometry() || {};
434
442
 
435
- if (!sfGeom || !sfGeom.self) {
443
+ if (!self) {
436
444
  return '';
437
445
  }
438
446
 
439
- position.x = Math.round(sfGeom.self.t);
440
- position.y = Math.round(sfGeom.self.l);
447
+ position.x = Math.round(self.t);
448
+ position.y = Math.round(self.l);
441
449
  } else {
442
450
  try {
443
451
  // window.top based computing
@@ -513,16 +521,14 @@ function getViewPortDimensions() {
513
521
  const viewportDims = { w: 0, h: 0 };
514
522
 
515
523
  if (isSafeFrameWindow()) {
516
- const ws = getWindowSelf();
524
+ const { win } = getSafeframeGeometry() || {};
517
525
 
518
- const sfGeom = (typeof ws.$sf.ext.geom === 'function') ? ws.$sf.ext.geom() : null;
519
-
520
- if (!sfGeom || !sfGeom.win) {
526
+ if (!win) {
521
527
  return '';
522
528
  }
523
529
 
524
- viewportDims.w = Math.round(sfGeom.win.w);
525
- viewportDims.h = Math.round(sfGeom.win.h);
530
+ viewportDims.w = Math.round(win.w);
531
+ viewportDims.h = Math.round(win.h);
526
532
  } else {
527
533
  // window.top based computing
528
534
  const wt = getWindowTop();
@@ -538,22 +544,6 @@ function getTimestampUTC() {
538
544
  return Math.floor(new Date().getTime() / 1000) - new Date().getTimezoneOffset() * 60;
539
545
  }
540
546
 
541
- function getDomLoadingDuration() {
542
- const w = (canAccessWindowTop()) ? getWindowTop() : getWindowSelf();
543
- const performance = w.performance;
544
-
545
- let domLoadingDuration = -1;
546
-
547
- if (performance && performance.timing && performance.timing.navigationStart > 0) {
548
- const val = performance.timing.domLoading - performance.timing.navigationStart;
549
- if (val > 0) {
550
- domLoadingDuration = val;
551
- }
552
- }
553
-
554
- return domLoadingDuration;
555
- }
556
-
557
547
  /**
558
548
  * registerEventsForAdServers bind adagio listeners to ad-server events.
559
549
  * Theses events are used to track the viewability and attention.
@@ -30,6 +30,7 @@ pbjs.setConfig({
30
30
  params: {
31
31
  organizationId: '1000' // Required. Provided by Adagio
32
32
  site: 'my-site' // Required. Provided by Adagio
33
+ placementSource: 'ortb' // Optional. Where to find the "placement" value. Possible values: 'ortb'<default> | 'code' | 'gpid'
33
34
  }
34
35
  }]
35
36
  }
@@ -1,5 +1,4 @@
1
1
  import {registerBidder} from '../src/adapters/bidderFactory.js';
2
- import {getGlobal} from '../src/prebidGlobal.js';
3
2
 
4
3
  const BIDDER_CODE = 'addefend';
5
4
 
@@ -17,7 +16,7 @@ export const spec = {
17
16
  },
18
17
  buildRequests: function(validBidRequests, bidderRequest) {
19
18
  let bid = {
20
- v: getGlobal().version,
19
+ v: 'v' + '$prebid.version$',
21
20
  auctionId: false,
22
21
  pageId: false,
23
22
  gdpr_applies: bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies ? bidderRequest.gdprConsent.gdprApplies : 'true',
@@ -106,7 +106,7 @@ function getBidRequestData(reqBidsConfigObj, callback, config, userConsent) {
106
106
 
107
107
  // buildUrl creates PHP style multi-parameters and includes undefined... (╯°□°)╯ ┻━┻
108
108
  const url = buildUrl(mergeDeep(parseUrl(`${API_ORIGIN}/q`), { search: {
109
- 'v': `pbjs-${getGlobal().version}`,
109
+ 'v': 'pbjs-v' + '$prebid.version$',
110
110
  'c': config.params.clientid,
111
111
  'p': config.params.platformid,
112
112
  't': config.params.tagid,