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
@@ -43,7 +43,7 @@ export const ceeIdSubmodule = {
43
43
  * performs action to obtain id and return a value
44
44
  * @function
45
45
  * @returns {(IdResponse|undefined)}
46
- */
46
+ */
47
47
  getId(config) {
48
48
  const { params = {} } = config;
49
49
  const { tokenName, value } = params
@@ -1,212 +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 = 'compass';
9
6
  const AD_URL = 'https://sa-lb.deliverimp.com/pbjs';
10
7
  const SYNC_URL = 'https://sa-cs.deliverimp.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, endpointId } = params;
33
- const bidfloor = getBidFloor(bid);
34
-
35
- const placement = {
36
- bidId,
37
- schain,
38
- bidfloor
39
- };
40
-
41
- if (placementId) {
42
- placement.placementId = placementId;
43
- placement.type = 'publisher';
44
- } else if (endpointId) {
45
- placement.endpointId = endpointId;
46
- placement.type = 'network';
47
- }
48
-
49
- if (mediaTypes && mediaTypes[BANNER]) {
50
- placement.adFormat = BANNER;
51
- placement.sizes = mediaTypes[BANNER].sizes;
52
- } else if (mediaTypes && mediaTypes[VIDEO]) {
53
- placement.adFormat = VIDEO;
54
- placement.playerSize = mediaTypes[VIDEO].playerSize;
55
- placement.minduration = mediaTypes[VIDEO].minduration;
56
- placement.maxduration = mediaTypes[VIDEO].maxduration;
57
- placement.mimes = mediaTypes[VIDEO].mimes;
58
- placement.protocols = mediaTypes[VIDEO].protocols;
59
- placement.startdelay = mediaTypes[VIDEO].startdelay;
60
- placement.placement = mediaTypes[VIDEO].placement;
61
- placement.skip = mediaTypes[VIDEO].skip;
62
- placement.skipafter = mediaTypes[VIDEO].skipafter;
63
- placement.minbitrate = mediaTypes[VIDEO].minbitrate;
64
- placement.maxbitrate = mediaTypes[VIDEO].maxbitrate;
65
- placement.delivery = mediaTypes[VIDEO].delivery;
66
- placement.playbackmethod = mediaTypes[VIDEO].playbackmethod;
67
- placement.api = mediaTypes[VIDEO].api;
68
- placement.linearity = mediaTypes[VIDEO].linearity;
69
- } else if (mediaTypes && mediaTypes[NATIVE]) {
70
- placement.native = mediaTypes[NATIVE];
71
- placement.adFormat = NATIVE;
72
- }
73
-
74
- return placement;
75
- }
76
-
77
- function getBidFloor(bid) {
78
- if (!isFn(bid.getFloor)) {
79
- return deepAccess(bid, 'params.bidfloor', 0);
80
- }
81
-
82
- try {
83
- const bidFloor = bid.getFloor({
84
- currency: 'USD',
85
- mediaType: '*',
86
- size: '*',
87
- });
88
- return bidFloor.floor;
89
- } catch (err) {
90
- logError(err);
91
- return 0;
92
- }
93
- }
94
-
95
9
  export const spec = {
96
10
  code: BIDDER_CODE,
97
11
  supportedMediaTypes: [BANNER, VIDEO, NATIVE],
98
12
 
99
- isBidRequestValid: (bid = {}) => {
100
- const { params, bidId, mediaTypes } = bid;
101
- let valid = Boolean(bidId && params && (params.placementId || params.endpointId));
102
-
103
- if (mediaTypes && mediaTypes[BANNER]) {
104
- valid = valid && Boolean(mediaTypes[BANNER] && mediaTypes[BANNER].sizes);
105
- } else if (mediaTypes && mediaTypes[VIDEO]) {
106
- valid = valid && Boolean(mediaTypes[VIDEO] && mediaTypes[VIDEO].playerSize);
107
- } else if (mediaTypes && mediaTypes[NATIVE]) {
108
- valid = valid && Boolean(mediaTypes[NATIVE]);
109
- } else {
110
- valid = false;
111
- }
112
- return valid;
113
- },
114
-
115
- buildRequests: (validBidRequests = [], bidderRequest = {}) => {
116
- // convert Native ORTB definition to old-style prebid native definition
117
- validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
118
-
119
- let deviceWidth = 0;
120
- let deviceHeight = 0;
121
-
122
- let winLocation;
123
- try {
124
- const winTop = window.top;
125
- deviceWidth = winTop.screen.width;
126
- deviceHeight = winTop.screen.height;
127
- winLocation = winTop.location;
128
- } catch (e) {
129
- logMessage(e);
130
- winLocation = window.location;
131
- }
132
-
133
- const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.page;
134
- let refferLocation;
135
- try {
136
- refferLocation = refferUrl && new URL(refferUrl);
137
- } catch (e) {
138
- logMessage(e);
139
- }
140
- // TODO: does the fallback make sense here?
141
- let location = refferLocation || winLocation;
142
- const language = (navigator && navigator.language) ? navigator.language.split('-')[0] : '';
143
- const host = location.host;
144
- const page = location.pathname;
145
- const secure = location.protocol === 'https:' ? 1 : 0;
146
- const placements = [];
147
- const request = {
148
- deviceWidth,
149
- deviceHeight,
150
- language,
151
- secure,
152
- host,
153
- page,
154
- placements,
155
- coppa: config.getConfig('coppa') === true ? 1 : 0,
156
- ccpa: bidderRequest.uspConsent || undefined,
157
- gdpr: bidderRequest.gdprConsent || undefined,
158
- tmax: bidderRequest.timeout
159
- };
160
-
161
- const len = validBidRequests.length;
162
- for (let i = 0; i < len; i++) {
163
- const bid = validBidRequests[i];
164
- placements.push(getPlacementReqData(bid));
165
- }
166
-
167
- return {
168
- method: 'POST',
169
- url: AD_URL,
170
- data: request
171
- };
172
- },
173
-
174
- interpretResponse: (serverResponse) => {
175
- let response = [];
176
- for (let i = 0; i < serverResponse.body.length; i++) {
177
- let resItem = serverResponse.body[i];
178
- if (isBidResponseValid(resItem)) {
179
- const advertiserDomains = resItem.adomain && resItem.adomain.length ? resItem.adomain : [];
180
- resItem.meta = { ...resItem.meta, advertiserDomains };
181
-
182
- response.push(resItem);
183
- }
184
- }
185
- return response;
186
- },
187
-
188
- getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent) => {
189
- let syncType = syncOptions.iframeEnabled ? 'iframe' : 'image';
190
- let syncUrl = SYNC_URL + `/${syncType}?pbjs=1`;
191
- if (gdprConsent && gdprConsent.consentString) {
192
- if (typeof gdprConsent.gdprApplies === 'boolean') {
193
- syncUrl += `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
194
- } else {
195
- syncUrl += `&gdpr=0&gdpr_consent=${gdprConsent.consentString}`;
196
- }
197
- }
198
- if (uspConsent && uspConsent.consentString) {
199
- syncUrl += `&ccpa_consent=${uspConsent.consentString}`;
200
- }
201
-
202
- const coppa = config.getConfig('coppa') ? 1 : 0;
203
- syncUrl += `&coppa=${coppa}`;
204
-
205
- return [{
206
- type: syncType,
207
- url: syncUrl
208
- }];
209
- }
13
+ isBidRequestValid: isBidRequestValid(),
14
+ buildRequests: buildRequests(AD_URL),
15
+ interpretResponse,
16
+ getUserSyncs: getUserSyncs(SYNC_URL)
210
17
  };
211
18
 
212
19
  registerBidder(spec);
@@ -7,12 +7,12 @@
7
7
  import {deepSetValue, isEmpty, isNumber, isPlainObject, isStr, logError, logInfo, logWarn} from '../src/utils.js';
8
8
  import {config} from '../src/config.js';
9
9
  import {gppDataHandler} from '../src/adapterManager.js';
10
- import {timedAuctionHook} from '../src/utils/perfMetrics.js';
11
10
  import {enrichFPD} from '../src/fpd/enrichment.js';
12
11
  import {getGlobal} from '../src/prebidGlobal.js';
13
12
  import {cmpClient, MODE_CALLBACK} from '../libraries/cmp/cmpClient.js';
14
13
  import {GreedyPromise} from '../src/utils/promise.js';
15
14
  import {buildActivityParams} from '../src/activities/params.js';
15
+ import {consentManagementHook} from '../libraries/consentManagement/cmUtils.js';
16
16
 
17
17
  const DEFAULT_CMP = 'iab';
18
18
  const DEFAULT_CONSENT_TIMEOUT = 10000;
@@ -228,20 +228,6 @@ function loadConsentData(cb) {
228
228
  }
229
229
  }
230
230
 
231
- /**
232
- * Like `loadConsentData`, but cache and re-use previously loaded data.
233
- * @param cb
234
- */
235
- function loadIfMissing(cb) {
236
- if (consentData) {
237
- logInfo('User consent information already known. Pulling internally stored information...');
238
- // eslint-disable-next-line standard/no-callback-literal
239
- cb(false);
240
- } else {
241
- loadConsentData(cb);
242
- }
243
- }
244
-
245
231
  /**
246
232
  * If consentManagement module is enabled (ie included in setConfig), this hook function will attempt to fetch the
247
233
  * user's encoded consent string from the supported CMP. Once obtained, the module will store this
@@ -250,29 +236,7 @@ function loadIfMissing(cb) {
250
236
  * @param {object} reqBidsConfigObj required; This is the same param that's used in pbjs.requestBids.
251
237
  * @param {function} fn required; The next function in the chain, used by hook.js
252
238
  */
253
- export const requestBidsHook = timedAuctionHook('gpp', function requestBidsHook(fn, reqBidsConfigObj) {
254
- loadIfMissing(function (shouldCancelAuction, errMsg, ...extraArgs) {
255
- if (errMsg) {
256
- let log = logWarn;
257
- if (shouldCancelAuction) {
258
- log = logError;
259
- errMsg = `${errMsg} Canceling auction as per consentManagement config.`;
260
- }
261
- log(errMsg, ...extraArgs);
262
- }
263
-
264
- if (shouldCancelAuction) {
265
- fn.stopTiming();
266
- if (typeof reqBidsConfigObj.bidsBackHandler === 'function') {
267
- reqBidsConfigObj.bidsBackHandler();
268
- } else {
269
- logError('Error executing bidsBackHandler');
270
- }
271
- } else {
272
- fn.call(this, reqBidsConfigObj);
273
- }
274
- });
275
- });
239
+ export const requestBidsHook = consentManagementHook('gpp', () => consentData, loadConsentData);
276
240
 
277
241
  function processCmpData(consentData) {
278
242
  if (
@@ -8,11 +8,11 @@ import {deepSetValue, isNumber, isPlainObject, isStr, logError, logInfo, logWarn
8
8
  import {config} from '../src/config.js';
9
9
  import {gdprDataHandler} from '../src/adapterManager.js';
10
10
  import {includes} from '../src/polyfill.js';
11
- import {timedAuctionHook} from '../src/utils/perfMetrics.js';
12
11
  import {registerOrtbProcessor, REQUEST} from '../src/pbjsORTB.js';
13
12
  import {enrichFPD} from '../src/fpd/enrichment.js';
14
13
  import {getGlobal} from '../src/prebidGlobal.js';
15
14
  import {cmpClient} from '../libraries/cmp/cmpClient.js';
15
+ import {consentManagementHook} from '../libraries/consentManagement/cmUtils.js';
16
16
 
17
17
  const DEFAULT_CMP = 'iab';
18
18
  const DEFAULT_CONSENT_TIMEOUT = 10000;
@@ -22,6 +22,7 @@ export let userCMP;
22
22
  export let consentTimeout;
23
23
  export let gdprScope;
24
24
  export let staticConsentData;
25
+ let dsaPlatform = false;
25
26
  let actionTimeout;
26
27
 
27
28
  let consentData;
@@ -156,20 +157,6 @@ function loadConsentData(cb) {
156
157
  }
157
158
  }
158
159
 
159
- /**
160
- * Like `loadConsentData`, but cache and re-use previously loaded data.
161
- * @param cb
162
- */
163
- function loadIfMissing(cb) {
164
- if (consentData) {
165
- logInfo('User consent information already known. Pulling internally stored information...');
166
- // eslint-disable-next-line standard/no-callback-literal
167
- cb(false);
168
- } else {
169
- loadConsentData(cb);
170
- }
171
- }
172
-
173
160
  /**
174
161
  * If consentManagement module is enabled (ie included in setConfig), this hook function will attempt to fetch the
175
162
  * user's encoded consent string from the supported CMP. Once obtained, the module will store this
@@ -178,29 +165,7 @@ function loadIfMissing(cb) {
178
165
  * @param {object} reqBidsConfigObj required; This is the same param that's used in pbjs.requestBids.
179
166
  * @param {function} fn required; The next function in the chain, used by hook.js
180
167
  */
181
- export const requestBidsHook = timedAuctionHook('gdpr', function requestBidsHook(fn, reqBidsConfigObj) {
182
- loadIfMissing(function (shouldCancelAuction, errMsg, ...extraArgs) {
183
- if (errMsg) {
184
- let log = logWarn;
185
- if (shouldCancelAuction) {
186
- log = logError;
187
- errMsg = `${errMsg} Canceling auction as per consentManagement config.`;
188
- }
189
- log(errMsg, ...extraArgs);
190
- }
191
-
192
- if (shouldCancelAuction) {
193
- fn.stopTiming();
194
- if (typeof reqBidsConfigObj.bidsBackHandler === 'function') {
195
- reqBidsConfigObj.bidsBackHandler();
196
- } else {
197
- logError('Error executing bidsBackHandler');
198
- }
199
- } else {
200
- fn.call(this, reqBidsConfigObj);
201
- }
202
- });
203
- });
168
+ export const requestBidsHook = consentManagementHook('gdpr', () => consentData, loadConsentData);
204
169
 
205
170
  /**
206
171
  * This function checks the consent data provided by CMP to ensure it's in an expected state.
@@ -282,6 +247,7 @@ export function setConsentConfig(config) {
282
247
 
283
248
  // if true, then gdprApplies should be set to true
284
249
  gdprScope = config.defaultGdprScope === true;
250
+ dsaPlatform = !!config.dsaPlatform;
285
251
 
286
252
  logInfo('consentManagement module has been activated...');
287
253
 
@@ -315,6 +281,9 @@ export function enrichFPDHook(next, fpd) {
315
281
  }
316
282
  deepSetValue(ortb2, 'user.ext.consent', consent.consentString);
317
283
  }
284
+ if (dsaPlatform) {
285
+ deepSetValue(ortb2, 'regs.ext.dsa.dsarequired', 3);
286
+ }
318
287
  return ortb2;
319
288
  }));
320
289
  }
@@ -1,216 +1,21 @@
1
- import { isFn, deepAccess, logMessage } from '../src/utils.js';
2
1
  import { registerBidder } from '../src/adapters/bidderFactory.js';
3
2
  import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
4
- import {config} from '../src/config.js';
5
- import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
3
+ import { isBidRequestValid, buildRequests, interpretResponse, getUserSyncs } from '../libraries/teqblazeUtils/bidderUtils.js';
6
4
 
7
5
  const BIDDER_CODE = 'contentexchange';
8
6
  const AD_URL = 'https://eu2.adnetwork.agency/pbjs';
9
7
  const SYNC_URL = 'https://sync2.adnetwork.agency';
10
8
  const GVLID = 864;
11
9
 
12
- function isBidResponseValid (bid) {
13
- if (!bid.requestId || !bid.cpm || !bid.creativeId ||
14
- !bid.ttl || !bid.currency || !bid.meta) {
15
- return false;
16
- }
17
-
18
- switch (bid.mediaType) {
19
- case BANNER:
20
- return Boolean(bid.width && bid.height && bid.ad);
21
- case VIDEO:
22
- return Boolean(bid.vastUrl || bid.vastXml);
23
- case NATIVE:
24
- return Boolean(bid.native && bid.native.impressionTrackers && bid.native.impressionTrackers.length);
25
- default:
26
- return false;
27
- }
28
- }
29
-
30
- function getPlacementReqData (bid) {
31
- const { params, bidId, mediaTypes } = bid;
32
- const schain = bid.schain || {};
33
- const { placementId, adFormat } = params;
34
- const bidfloor = getBidFloor(bid);
35
-
36
- const placement = {
37
- placementId,
38
- bidId,
39
- adFormat,
40
- schain,
41
- bidfloor
42
- };
43
-
44
- switch (adFormat) {
45
- case BANNER:
46
- placement.sizes = mediaTypes[BANNER].sizes;
47
- break;
48
- case 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.skip = mediaTypes[VIDEO].skip;
57
- placement.skipafter = mediaTypes[VIDEO].skipafter;
58
- placement.minbitrate = mediaTypes[VIDEO].minbitrate;
59
- placement.maxbitrate = mediaTypes[VIDEO].maxbitrate;
60
- placement.delivery = mediaTypes[VIDEO].delivery;
61
- placement.playbackmethod = mediaTypes[VIDEO].playbackmethod;
62
- placement.api = mediaTypes[VIDEO].api;
63
- placement.linearity = mediaTypes[VIDEO].linearity;
64
- break;
65
- case NATIVE:
66
- placement.native = mediaTypes[NATIVE];
67
- break;
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 (_) {
86
- return 0
87
- }
88
- }
89
-
90
10
  export const spec = {
91
11
  code: BIDDER_CODE,
92
12
  gvlid: GVLID,
93
13
  supportedMediaTypes: [BANNER, VIDEO, NATIVE],
94
14
 
95
- isBidRequestValid: (bid = {}) => {
96
- const { params, bidId, mediaTypes } = bid;
97
- let valid = Boolean(bidId &&
98
- params &&
99
- params.placementId &&
100
- params.adFormat
101
- );
102
- switch (params.adFormat) {
103
- case BANNER:
104
- valid = valid && Boolean(mediaTypes[BANNER] && mediaTypes[BANNER].sizes);
105
- break;
106
- case VIDEO:
107
- valid = valid && Boolean(mediaTypes[VIDEO] && mediaTypes[VIDEO].playerSize);
108
- break;
109
- case NATIVE:
110
- valid = valid && Boolean(mediaTypes[NATIVE]);
111
- break;
112
- default:
113
- valid = false;
114
- }
115
- return valid;
116
- },
117
-
118
- buildRequests: (validBidRequests = [], bidderRequest = {}) => {
119
- // convert Native ORTB definition to old-style prebid native definition
120
- validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
121
-
122
- let deviceWidth = 0;
123
- let deviceHeight = 0;
124
-
125
- let winLocation;
126
- try {
127
- const winTop = window.top;
128
- deviceWidth = winTop.screen.width;
129
- deviceHeight = winTop.screen.height;
130
- winLocation = winTop.location;
131
- } catch (e) {
132
- logMessage(e);
133
- winLocation = window.location;
134
- }
135
-
136
- const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.page;
137
- let refferLocation;
138
- try {
139
- refferLocation = refferUrl && new URL(refferUrl);
140
- } catch (e) {
141
- logMessage(e);
142
- }
143
-
144
- // TODO: does the fallback to 'window.location' make sense?
145
- let location = refferLocation || winLocation;
146
- const language = (navigator && navigator.language) ? navigator.language.split('-')[0] : '';
147
- const host = location.host;
148
- const page = location.pathname;
149
- const secure = location.protocol === 'https:' ? 1 : 0;
150
- const placements = [];
151
- const request = {
152
- deviceWidth,
153
- deviceHeight,
154
- language,
155
- secure,
156
- host,
157
- page,
158
- placements,
159
- coppa: config.getConfig('coppa') === true ? 1 : 0,
160
- ccpa: bidderRequest.uspConsent || undefined,
161
- gdpr: bidderRequest.gdprConsent || undefined,
162
- tmax: bidderRequest.timeout
163
- };
164
-
165
- const len = validBidRequests.length;
166
- for (let i = 0; i < len; i++) {
167
- const bid = validBidRequests[i];
168
- placements.push(getPlacementReqData(bid));
169
- }
170
-
171
- return {
172
- method: 'POST',
173
- url: AD_URL,
174
- data: request
175
- };
176
- },
177
-
178
- interpretResponse: (serverResponse) => {
179
- let response = [];
180
- for (let i = 0; i < serverResponse.body.length; i++) {
181
- let resItem = serverResponse.body[i];
182
- if (isBidResponseValid(resItem)) {
183
- const advertiserDomains = resItem.adomain && resItem.adomain.length ? resItem.adomain : [];
184
- resItem.meta = { ...resItem.meta, advertiserDomains };
185
-
186
- response.push(resItem);
187
- }
188
- }
189
- return response;
190
- },
191
-
192
- getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent) => {
193
- let syncType = syncOptions.iframeEnabled ? 'iframe' : 'image';
194
- let syncUrl = SYNC_URL + `/${syncType}?pbjs=1`;
195
- if (gdprConsent && gdprConsent.consentString) {
196
- if (typeof gdprConsent.gdprApplies === 'boolean') {
197
- syncUrl += `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
198
- } else {
199
- syncUrl += `&gdpr=0&gdpr_consent=${gdprConsent.consentString}`;
200
- }
201
- }
202
- if (uspConsent && uspConsent.consentString) {
203
- syncUrl += `&ccpa_consent=${uspConsent.consentString}`;
204
- }
205
-
206
- const coppa = config.getConfig('coppa') ? 1 : 0;
207
- syncUrl += `&coppa=${coppa}`;
208
-
209
- return [{
210
- type: syncType,
211
- url: syncUrl
212
- }];
213
- }
15
+ isBidRequestValid: isBidRequestValid(),
16
+ buildRequests: buildRequests(AD_URL),
17
+ interpretResponse,
18
+ getUserSyncs: getUserSyncs(SYNC_URL)
214
19
  };
215
20
 
216
21
  registerBidder(spec);
@@ -1,7 +1,6 @@
1
1
  import {ajax} from '../src/ajax.js';
2
2
  import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
3
3
  import { EVENTS } from '../src/constants.js';
4
- import {getGlobal} from '../src/prebidGlobal.js';
5
4
  import adapterManager from '../src/adapterManager.js';
6
5
  import {logInfo, logWarn, logError, logMessage, deepAccess, isInteger} from '../src/utils.js';
7
6
  import {getRefererInfo} from '../src/refererDetection.js';
@@ -515,7 +514,7 @@ cnvrHelper.createPayload = function(payloadType, auctionId, timestamp) {
515
514
  cnvrSampleRate: initOptions.cnvr_sample_rate,
516
515
  auction: {
517
516
  auctionId: auctionId,
518
- preBidVersion: getGlobal().version,
517
+ preBidVersion: '$prebid.version$',
519
518
  sid: initOptions.site_id,
520
519
  auctionTimestamp: timestamp
521
520
  },
@@ -60,6 +60,7 @@ const converter = ortbConverter({
60
60
  request: function (buildRequest, imps, bidderRequest, context) {
61
61
  const request = buildRequest(imps, bidderRequest, context);
62
62
  request.at = 1;
63
+ request.cur = ['USD'];
63
64
  if (context.bidRequests) {
64
65
  const bidRequest = context.bidRequests[0];
65
66
  setSiteId(bidRequest, request);
@@ -0,0 +1,19 @@
1
+ import { registerBidder } from '../src/adapters/bidderFactory.js';
2
+ import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
3
+ import { isBidRequestValid, buildRequests, interpretResponse, getUserSyncs } from '../libraries/teqblazeUtils/bidderUtils.js';
4
+
5
+ const BIDDER_CODE = 'copper6ssp';
6
+ const AD_URL = 'https://endpoint.copper6.com/pbjs';
7
+ const SYNC_URL = 'https://сsync.copper6.com';
8
+
9
+ export const spec = {
10
+ code: BIDDER_CODE,
11
+ supportedMediaTypes: [BANNER, VIDEO, NATIVE],
12
+
13
+ isBidRequestValid: isBidRequestValid(),
14
+ buildRequests: buildRequests(AD_URL),
15
+ interpretResponse,
16
+ getUserSyncs: getUserSyncs(SYNC_URL)
17
+ };
18
+
19
+ registerBidder(spec);