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,488 +1,46 @@
1
- import {
2
- _each,
3
- deepAccess,
4
- isFn,
5
- parseSizesInput,
6
- parseUrl,
7
- uniques,
8
- isArray,
9
- formatQS,
10
- triggerPixel
11
- } from '../src/utils.js';
12
1
  import {registerBidder} from '../src/adapters/bidderFactory.js';
13
2
  import {BANNER, VIDEO} from '../src/mediaTypes.js';
14
3
  import {getStorageManager} from '../src/storageManager.js';
15
- import {bidderSettings} from '../src/bidderSettings.js';
16
- import {config} from '../src/config.js';
17
- import {chunk} from '../libraries/chunk/chunk.js';
4
+ import {
5
+ createSessionId,
6
+ isBidRequestValid,
7
+ getCacheOpt,
8
+ getNextDealId,
9
+ onBidWon,
10
+ createUserSyncGetter,
11
+ getVidazooSessionId,
12
+ createBuildRequestsFn,
13
+ createInterpretResponseFn
14
+ } from '../libraries/vidazooUtils/bidderUtils.js';
15
+ import {OPT_CACHE_KEY, OPT_TIME_KEY} from '../libraries/vidazooUtils/constants.js';
18
16
 
19
17
  const GVLID = 744;
20
18
  const DEFAULT_SUB_DOMAIN = 'prebid';
21
19
  const BIDDER_CODE = 'vidazoo';
22
20
  const BIDDER_VERSION = '1.0.0';
23
- const CURRENCY = 'USD';
24
- const TTL_SECONDS = 60 * 5;
25
- const DEAL_ID_EXPIRY = 1000 * 60 * 15;
26
- const UNIQUE_DEAL_ID_EXPIRY = 1000 * 60 * 60;
27
- const SESSION_ID_KEY = 'vidSid';
28
- const OPT_CACHE_KEY = 'vdzwopt';
29
- export const webSessionId = 'wsid_' + parseInt(Date.now() * Math.random());
30
- const storage = getStorageManager({bidderCode: BIDDER_CODE});
31
-
32
- function getTopWindowQueryParams() {
33
- try {
34
- const parsedUrl = parseUrl(window.top.document.URL, {decodeSearchAsString: true});
35
- return parsedUrl.search;
36
- } catch (e) {
37
- return '';
38
- }
39
- }
21
+ export const storage = getStorageManager({bidderCode: BIDDER_CODE});
22
+ export const webSessionId = createSessionId();
40
23
 
41
24
  export function createDomain(subDomain = DEFAULT_SUB_DOMAIN) {
42
25
  return `https://${subDomain}.cootlogix.com`;
43
26
  }
44
27
 
45
- export function extractCID(params) {
46
- return params.cId || params.CID || params.cID || params.CId || params.cid || params.ciD || params.Cid || params.CiD;
47
- }
48
-
49
- export function extractPID(params) {
50
- return params.pId || params.PID || params.pID || params.PId || params.pid || params.piD || params.Pid || params.PiD;
51
- }
52
-
53
- export function extractSubDomain(params) {
54
- return params.subDomain || params.SubDomain || params.Subdomain || params.subdomain || params.SUBDOMAIN || params.subDOMAIN;
55
- }
56
-
57
- function isBidRequestValid(bid) {
58
- const params = bid.params || {};
59
- return !!(extractCID(params) && extractPID(params));
60
- }
61
-
62
- function buildRequestData(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) {
63
- const {
64
- params,
65
- bidId,
66
- userId,
67
- adUnitCode,
68
- schain,
69
- mediaTypes,
70
- ortb2Imp,
71
- bidderRequestId,
72
- bidRequestsCount,
73
- bidderRequestsCount,
74
- bidderWinsCount
75
- } = bid;
76
- const {ext} = params;
77
- let {bidFloor} = params;
78
- const hashUrl = hashCode(topWindowUrl);
79
- const dealId = getNextDealId(hashUrl);
80
- const uniqueDealId = getUniqueDealId(hashUrl);
81
- const sId = getVidazooSessionId();
82
- const pId = extractPID(params);
83
- const ptrace = getCacheOpt();
84
- const isStorageAllowed = bidderSettings.get(BIDDER_CODE, 'storageAllowed');
85
-
86
- const gpid = deepAccess(bid, 'ortb2Imp.ext.gpid') || deepAccess(bid, 'ortb2Imp.ext.data.pbadslot', '');
87
- const cat = deepAccess(bidderRequest, 'ortb2.site.cat', []);
88
- const pagecat = deepAccess(bidderRequest, 'ortb2.site.pagecat', []);
89
- const contentData = deepAccess(bidderRequest, 'ortb2.site.content.data', []);
90
- const userData = deepAccess(bidderRequest, 'ortb2.user.data', []);
91
-
92
- if (isFn(bid.getFloor)) {
93
- const floorInfo = bid.getFloor({
94
- currency: 'USD',
95
- mediaType: '*',
96
- size: '*'
97
- });
98
-
99
- if (floorInfo.currency === 'USD') {
100
- bidFloor = floorInfo.floor;
101
- }
102
- }
103
-
104
- let data = {
105
- url: encodeURIComponent(topWindowUrl),
106
- uqs: getTopWindowQueryParams(),
107
- cb: Date.now(),
108
- bidFloor: bidFloor,
109
- bidId: bidId,
110
- referrer: bidderRequest.refererInfo.ref,
111
- adUnitCode: adUnitCode,
112
- publisherId: pId,
113
- sessionId: sId,
114
- sizes: sizes,
115
- dealId: dealId,
116
- uniqueDealId: uniqueDealId,
117
- bidderVersion: BIDDER_VERSION,
118
- prebidVersion: '$prebid.version$',
119
- res: `${screen.width}x${screen.height}`,
120
- schain: schain,
121
- mediaTypes: mediaTypes,
122
- ptrace: ptrace,
123
- isStorageAllowed: isStorageAllowed,
124
- gpid: gpid,
125
- cat: cat,
126
- contentData,
127
- userData: userData,
128
- pagecat: pagecat,
129
- transactionId: ortb2Imp?.ext?.tid,
130
- bidderRequestId: bidderRequestId,
131
- bidRequestsCount: bidRequestsCount,
132
- bidderRequestsCount: bidderRequestsCount,
133
- bidderWinsCount: bidderWinsCount,
134
- bidderTimeout: bidderTimeout,
135
- webSessionId: webSessionId
136
- };
137
-
138
- appendUserIdsToRequestPayload(data, userId);
139
-
140
- const sua = deepAccess(bidderRequest, 'ortb2.device.sua');
141
-
142
- if (sua) {
143
- data.sua = sua;
144
- }
145
-
146
- if (bidderRequest.gdprConsent) {
147
- if (bidderRequest.gdprConsent.consentString) {
148
- data.gdprConsent = bidderRequest.gdprConsent.consentString;
149
- }
150
- if (bidderRequest.gdprConsent.gdprApplies !== undefined) {
151
- data.gdpr = bidderRequest.gdprConsent.gdprApplies ? 1 : 0;
152
- }
153
- }
154
- if (bidderRequest.uspConsent) {
155
- data.usPrivacy = bidderRequest.uspConsent;
156
- }
157
-
158
- if (bidderRequest.gppConsent) {
159
- data.gppString = bidderRequest.gppConsent.gppString;
160
- data.gppSid = bidderRequest.gppConsent.applicableSections;
161
- } else if (bidderRequest.ortb2?.regs?.gpp) {
162
- data.gppString = bidderRequest.ortb2.regs.gpp;
163
- data.gppSid = bidderRequest.ortb2.regs.gpp_sid;
164
- }
165
-
166
- if (bidderRequest.paapi?.enabled) {
167
- const fledge = deepAccess(bidderRequest, 'ortb2Imp.ext.ae');
168
- if (fledge) {
169
- data.fledge = fledge;
170
- }
171
- }
172
-
173
- _each(ext, (value, key) => {
174
- data['ext.' + key] = value;
175
- });
176
-
177
- return data;
178
- }
179
-
180
- function buildRequest(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) {
181
- const {params} = bid;
182
- const cId = extractCID(params);
183
- const subDomain = extractSubDomain(params);
184
- const data = buildRequestData(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout);
185
- const dto = {
186
- method: 'POST',
187
- url: `${createDomain(subDomain)}/prebid/multi/${cId}`,
188
- data: data
189
- };
190
- return dto;
191
- }
192
-
193
- function buildSingleRequest(bidRequests, bidderRequest, topWindowUrl, bidderTimeout) {
194
- const {params} = bidRequests[0];
195
- const cId = extractCID(params);
196
- const subDomain = extractSubDomain(params);
197
- const data = bidRequests.map(bid => {
198
- const sizes = parseSizesInput(bid.sizes);
199
- return buildRequestData(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout)
200
- });
201
- const chunkSize = Math.min(20, config.getConfig('vidazoo.chunkSize') || 10);
202
-
203
- const chunkedData = chunk(data, chunkSize);
204
- return chunkedData.map(chunk => {
205
- return {
206
- method: 'POST',
207
- url: `${createDomain(subDomain)}/prebid/multi/${cId}`,
208
- data: {
209
- bids: chunk
210
- }
211
- };
212
- });
213
- }
214
-
215
- function appendUserIdsToRequestPayload(payloadRef, userIds) {
216
- let key;
217
- _each(userIds, (userId, idSystemProviderName) => {
218
- key = `uid.${idSystemProviderName}`;
219
- switch (idSystemProviderName) {
220
- case 'lipb':
221
- payloadRef[key] = userId.lipbid;
222
- break;
223
- case 'id5id':
224
- payloadRef[key] = userId.uid;
225
- break;
226
- default:
227
- payloadRef[key] = userId;
228
- }
229
- });
230
- }
231
-
232
- function buildRequests(validBidRequests, bidderRequest) {
233
- // TODO: does the fallback make sense here?
234
- const topWindowUrl = bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation;
235
- const bidderTimeout = config.getConfig('bidderTimeout');
236
-
237
- const singleRequestMode = config.getConfig('vidazoo.singleRequest');
238
-
239
- const requests = [];
240
-
241
- if (singleRequestMode) {
242
- // banner bids are sent as a single request
243
- const bannerBidRequests = validBidRequests.filter(bid => isArray(bid.mediaTypes) ? bid.mediaTypes.includes(BANNER) : bid.mediaTypes[BANNER] !== undefined);
244
- if (bannerBidRequests.length > 0) {
245
- const singleRequests = buildSingleRequest(bannerBidRequests, bidderRequest, topWindowUrl, bidderTimeout);
246
- requests.push(...singleRequests);
247
- }
248
-
249
- // video bids are sent as a single request for each bid
250
-
251
- const videoBidRequests = validBidRequests.filter(bid => bid.mediaTypes[VIDEO] !== undefined);
252
- videoBidRequests.forEach(validBidRequest => {
253
- const sizes = parseSizesInput(validBidRequest.sizes);
254
- const request = buildRequest(validBidRequest, topWindowUrl, sizes, bidderRequest, bidderTimeout);
255
- requests.push(request);
256
- });
257
- } else {
258
- validBidRequests.forEach(validBidRequest => {
259
- const sizes = parseSizesInput(validBidRequest.sizes);
260
- const request = buildRequest(validBidRequest, topWindowUrl, sizes, bidderRequest, bidderTimeout);
261
- requests.push(request);
262
- });
263
- }
264
- return requests;
265
- }
266
-
267
- function interpretResponse(serverResponse, request) {
268
- if (!serverResponse || !serverResponse.body) {
269
- return [];
270
- }
271
-
272
- const singleRequestMode = config.getConfig('vidazoo.singleRequest');
273
- const reqBidId = deepAccess(request, 'data.bidId');
274
- const {results} = serverResponse.body;
275
-
276
- let output = [];
277
-
278
- try {
279
- results.forEach((result, i) => {
280
- const {
281
- creativeId,
282
- ad,
283
- price,
284
- exp,
285
- width,
286
- height,
287
- currency,
288
- bidId,
289
- nurl,
290
- advertiserDomains,
291
- metaData,
292
- mediaType = BANNER
293
- } = result;
294
- if (!ad || !price) {
295
- return;
296
- }
297
-
298
- const response = {
299
- requestId: (singleRequestMode && bidId) ? bidId : reqBidId,
300
- cpm: price,
301
- width: width,
302
- height: height,
303
- creativeId: creativeId,
304
- currency: currency || CURRENCY,
305
- netRevenue: true,
306
- ttl: exp || TTL_SECONDS,
307
- };
308
-
309
- if (nurl) {
310
- response.nurl = nurl;
311
- }
312
-
313
- if (metaData) {
314
- Object.assign(response, {
315
- meta: metaData
316
- })
317
- } else {
318
- Object.assign(response, {
319
- meta: {
320
- advertiserDomains: advertiserDomains || []
321
- }
322
- })
323
- }
324
-
325
- if (mediaType === BANNER) {
326
- Object.assign(response, {
327
- ad: ad,
328
- });
329
- } else {
330
- Object.assign(response, {
331
- vastXml: ad,
332
- mediaType: VIDEO
333
- });
334
- }
335
- output.push(response);
336
- });
337
-
338
- return output;
339
- } catch (e) {
340
- return [];
341
- }
342
- }
343
-
344
- function getUserSyncs(syncOptions, responses, gdprConsent = {}, uspConsent = '', gppConsent = {}) {
345
- let syncs = [];
346
- const {iframeEnabled, pixelEnabled} = syncOptions;
347
- const {gdprApplies, consentString = ''} = gdprConsent;
348
- const {gppString, applicableSections} = gppConsent;
349
-
350
- const cidArr = responses.filter(resp => deepAccess(resp, 'body.cid')).map(resp => resp.body.cid).filter(uniques);
351
- let params = `?cid=${encodeURIComponent(cidArr.join(','))}&gdpr=${gdprApplies ? 1 : 0}&gdpr_consent=${encodeURIComponent(consentString || '')}&us_privacy=${encodeURIComponent(uspConsent || '')}`;
28
+ function createUniqueRequestData(hashUrl) {
29
+ const dealId = getNextDealId(storage, hashUrl);
30
+ const sessionId = getVidazooSessionId(storage);
31
+ const ptrace = getCacheOpt(storage, OPT_CACHE_KEY);
32
+ const vdzhum = getCacheOpt(storage, OPT_TIME_KEY);
352
33
 
353
- if (gppString && applicableSections?.length) {
354
- params += '&gpp=' + encodeURIComponent(gppString);
355
- params += '&gpp_sid=' + encodeURIComponent(applicableSections.join(','));
356
- }
357
-
358
- if (iframeEnabled) {
359
- syncs.push({
360
- type: 'iframe',
361
- url: `https://sync.cootlogix.com/api/sync/iframe/${params}`
362
- });
363
- }
364
- if (pixelEnabled) {
365
- syncs.push({
366
- type: 'image',
367
- url: `https://sync.cootlogix.com/api/sync/image/${params}`
368
- });
369
- }
370
- return syncs;
371
- }
372
-
373
- /**
374
- * @param {Bid} bid
375
- */
376
- function onBidWon(bid) {
377
- if (!bid.nurl) {
378
- return;
379
- }
380
- const wonBid = {
381
- adId: bid.adId,
382
- creativeId: bid.creativeId,
383
- auctionId: bid.auctionId,
384
- transactionId: bid.transactionId,
385
- adUnitCode: bid.adUnitCode,
386
- cpm: bid.cpm,
387
- currency: bid.currency,
388
- originalCpm: bid.originalCpm,
389
- originalCurrency: bid.originalCurrency,
390
- netRevenue: bid.netRevenue,
391
- mediaType: bid.mediaType,
392
- timeToRespond: bid.timeToRespond,
393
- status: bid.status,
34
+ return {
35
+ dealId: dealId, sessionId: sessionId, ptrace: ptrace, vdzhum: vdzhum
394
36
  };
395
- const qs = formatQS(wonBid);
396
- const url = bid.nurl + (bid.nurl.indexOf('?') === -1 ? '?' : '&') + qs;
397
- triggerPixel(url);
398
- }
399
-
400
- export function hashCode(s, prefix = '_') {
401
- const l = s.length;
402
- let h = 0
403
- let i = 0;
404
- if (l > 0) {
405
- while (i < l) {
406
- h = (h << 5) - h + s.charCodeAt(i++) | 0;
407
- }
408
- }
409
- return prefix + h;
410
37
  }
411
38
 
412
- export function getNextDealId(key, expiry = DEAL_ID_EXPIRY) {
413
- try {
414
- const data = getStorageItem(key);
415
- let currentValue = 0;
416
- let timestamp;
417
-
418
- if (data && data.value && Date.now() - data.created < expiry) {
419
- currentValue = data.value;
420
- timestamp = data.created;
421
- }
422
-
423
- const nextValue = currentValue + 1;
424
- setStorageItem(key, nextValue, timestamp);
425
- return nextValue;
426
- } catch (e) {
427
- return 0;
428
- }
429
- }
430
-
431
- export function getUniqueDealId(key, expiry = UNIQUE_DEAL_ID_EXPIRY) {
432
- const storageKey = `u_${key}`;
433
- const now = Date.now();
434
- const data = getStorageItem(storageKey);
435
- let uniqueId;
436
-
437
- if (!data || !data.value || now - data.created > expiry) {
438
- uniqueId = `${key}_${now.toString()}`;
439
- setStorageItem(storageKey, uniqueId);
440
- } else {
441
- uniqueId = data.value;
442
- }
443
-
444
- return uniqueId;
445
- }
446
-
447
- export function getVidazooSessionId() {
448
- return getStorageItem(SESSION_ID_KEY) || '';
449
- }
450
-
451
- export function getCacheOpt() {
452
- let data = storage.getDataFromLocalStorage(OPT_CACHE_KEY);
453
- if (!data) {
454
- data = String(Date.now());
455
- storage.setDataInLocalStorage(OPT_CACHE_KEY, data);
456
- }
457
-
458
- return data;
459
- }
460
-
461
- export function getStorageItem(key) {
462
- try {
463
- return tryParseJSON(storage.getDataFromLocalStorage(key));
464
- } catch (e) {
465
- }
466
-
467
- return null;
468
- }
469
-
470
- export function setStorageItem(key, value, timestamp) {
471
- try {
472
- const created = timestamp || Date.now();
473
- const data = JSON.stringify({value, created});
474
- storage.setDataInLocalStorage(key, data);
475
- } catch (e) {
476
- }
477
- }
478
-
479
- export function tryParseJSON(value) {
480
- try {
481
- return JSON.parse(value);
482
- } catch (e) {
483
- return value;
484
- }
485
- }
39
+ const buildRequests = createBuildRequestsFn(createDomain, createUniqueRequestData, webSessionId, storage, BIDDER_CODE, BIDDER_VERSION);
40
+ const interpretResponse = createInterpretResponseFn(BIDDER_CODE);
41
+ const getUserSyncs = createUserSyncGetter({
42
+ iframeSyncUrl: 'https://sync.cootlogix.com/api/sync/iframe', imageSyncUrl: 'https://sync.cootlogix.com/api/sync/image'
43
+ });
486
44
 
487
45
  export const spec = {
488
46
  code: BIDDER_CODE,