prebid.js 7.44.0 → 7.46.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 (309) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/acuityAdsBidAdapter.js +1 -1
  4. package/dist/adagioBidAdapter.js +1 -1
  5. package/dist/adbookpspBidAdapter.js +1 -1
  6. package/dist/adgenerationBidAdapter.js +1 -1
  7. package/dist/admaticBidAdapter.js +1 -1
  8. package/dist/adnuntiusBidAdapter.js +1 -1
  9. package/dist/adrelevantisBidAdapter.js +1 -1
  10. package/dist/adtrgtmeBidAdapter.js +1 -1
  11. package/dist/adxcgBidAdapter.js +1 -1
  12. package/dist/adyoulikeBidAdapter.js +1 -1
  13. package/dist/ajaBidAdapter.js +1 -1
  14. package/dist/amxBidAdapter.js +1 -1
  15. package/dist/amxIdSystem.js +1 -1
  16. package/dist/appierAnalyticsAdapter.js +1 -1
  17. package/dist/appnexusBidAdapter.js +1 -1
  18. package/dist/appushBidAdapter.js +1 -1
  19. package/dist/asoBidAdapter.js +1 -1
  20. package/dist/axonixBidAdapter.js +1 -1
  21. package/dist/beyondmediaBidAdapter.js +1 -1
  22. package/dist/bidglassBidAdapter.js +1 -1
  23. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  24. package/dist/big-richmediaBidAdapter.js +1 -1
  25. package/dist/braveBidAdapter.js +1 -1
  26. package/dist/bridgewellBidAdapter.js +1 -1
  27. package/dist/brightMountainMediaBidAdapter.js +1 -1
  28. package/dist/brightcomBidAdapter.js +1 -1
  29. package/dist/brightcomSSPBidAdapter.js +1 -1
  30. package/dist/carodaBidAdapter.js +1 -1
  31. package/dist/chtnwBidAdapter.js +1 -1
  32. package/dist/coinzillaBidAdapter.js +1 -1
  33. package/dist/compassBidAdapter.js +1 -1
  34. package/dist/concertBidAdapter.js +1 -1
  35. package/dist/connectIdSystem.js +1 -1
  36. package/dist/connectadBidAdapter.js +1 -1
  37. package/dist/consumableBidAdapter.js +1 -1
  38. package/dist/contentexchangeBidAdapter.js +1 -1
  39. package/dist/conversantAnalyticsAdapter.js +1 -1
  40. package/dist/conversantBidAdapter.js +1 -1
  41. package/dist/craftBidAdapter.js +1 -1
  42. package/dist/criteoBidAdapter.js +1 -1
  43. package/dist/cwireBidAdapter.js +1 -1
  44. package/dist/debugging-standalone.js +1 -1
  45. package/dist/dependencies.json +15 -0
  46. package/dist/domainOverrideToRootDomain.js +1 -0
  47. package/dist/dspxBidAdapter.js +1 -1
  48. package/dist/eplanningBidAdapter.js +1 -1
  49. package/dist/eskimiBidAdapter.js +1 -0
  50. package/dist/feedadBidAdapter.js +1 -1
  51. package/dist/finativeBidAdapter.js +1 -1
  52. package/dist/freewheel-sspBidAdapter.js +1 -1
  53. package/dist/glimpseBidAdapter.js +1 -1
  54. package/dist/globalsunBidAdapter.js +1 -1
  55. package/dist/gmosspBidAdapter.js +1 -1
  56. package/dist/goldbachBidAdapter.js +1 -1
  57. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  58. package/dist/gridBidAdapter.js +1 -1
  59. package/dist/growthCodeIdSystem.js +1 -1
  60. package/dist/gumgumBidAdapter.js +1 -1
  61. package/dist/h12mediaBidAdapter.js +1 -1
  62. package/dist/id5IdSystem.js +1 -1
  63. package/dist/improvedigitalBidAdapter.js +1 -1
  64. package/dist/inmarBidAdapter.js +1 -1
  65. package/dist/insticatorBidAdapter.js +1 -1
  66. package/dist/iqzoneBidAdapter.js +1 -1
  67. package/dist/ivsBidAdapter.js +1 -0
  68. package/dist/ixBidAdapter.js +1 -1
  69. package/dist/justpremiumBidAdapter.js +1 -1
  70. package/dist/jwplayerVideoProvider.js +1 -1
  71. package/dist/kargoBidAdapter.js +1 -1
  72. package/dist/koblerBidAdapter.js +1 -1
  73. package/dist/konduitAnalyticsAdapter.js +1 -1
  74. package/dist/kueezBidAdapter.js +1 -1
  75. package/dist/kueezRtbBidAdapter.js +1 -1
  76. package/dist/kulturemediaBidAdapter.js +1 -1
  77. package/dist/lassoBidAdapter.js +1 -1
  78. package/dist/lifestreetBidAdapter.js +1 -1
  79. package/dist/liveIntentIdSystem.js +1 -1
  80. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  81. package/dist/logicadBidAdapter.js +1 -1
  82. package/dist/loglyliftBidAdapter.js +1 -1
  83. package/dist/luponmediaBidAdapter.js +1 -1
  84. package/dist/magniteAnalyticsAdapter.js +1 -1
  85. package/dist/malltvAnalyticsAdapter.js +1 -1
  86. package/dist/marsmediaBidAdapter.js +1 -1
  87. package/dist/mathildeadsBidAdapter.js +1 -1
  88. package/dist/mediafuseBidAdapter.js +1 -1
  89. package/dist/medianetBidAdapter.js +1 -1
  90. package/dist/mediasquareBidAdapter.js +1 -1
  91. package/dist/mgidBidAdapter.js +1 -1
  92. package/dist/minutemediaBidAdapter.js +1 -1
  93. package/dist/minutemediaplusBidAdapter.js +1 -1
  94. package/dist/nativoBidAdapter.js +1 -1
  95. package/dist/neuwoRtdProvider.js +1 -1
  96. package/dist/nexx360BidAdapter.js +1 -1
  97. package/dist/not-for-prod/prebid.js +165 -162
  98. package/dist/oguryBidAdapter.js +1 -1
  99. package/dist/onetagBidAdapter.js +1 -1
  100. package/dist/onomagicBidAdapter.js +1 -1
  101. package/dist/ooloAnalyticsAdapter.js +1 -1
  102. package/dist/openxBidAdapter.js +1 -1
  103. package/dist/openxOrtbBidAdapter.js +1 -1
  104. package/dist/operaadsBidAdapter.js +1 -1
  105. package/dist/optidigitalBidAdapter.js +1 -1
  106. package/dist/ortbConverter.js +1 -1
  107. package/dist/outbrainBidAdapter.js +1 -1
  108. package/dist/pairIdSystem.js +1 -0
  109. package/dist/parrableIdSystem.js +1 -1
  110. package/dist/pixfutureBidAdapter.js +1 -1
  111. package/dist/prebid-core.js +1 -1
  112. package/dist/publinkIdSystem.js +1 -1
  113. package/dist/pubmaticBidAdapter.js +1 -1
  114. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  115. package/dist/pubxBidAdapter.js +1 -1
  116. package/dist/pxyzBidAdapter.js +1 -1
  117. package/dist/quantcastBidAdapter.js +1 -1
  118. package/dist/readpeakBidAdapter.js +1 -1
  119. package/dist/relaidoBidAdapter.js +1 -1
  120. package/dist/rhythmoneBidAdapter.js +1 -1
  121. package/dist/riseBidAdapter.js +1 -1
  122. package/dist/rubiconAnalyticsAdapter.js +1 -1
  123. package/dist/rubiconBidAdapter.js +1 -1
  124. package/dist/seedingAllianceBidAdapter.js +1 -1
  125. package/dist/seedtagBidAdapter.js +1 -1
  126. package/dist/sharedIdSystem.js +1 -1
  127. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  128. package/dist/sharethroughBidAdapter.js +1 -1
  129. package/dist/shinezBidAdapter.js +1 -1
  130. package/dist/smaatoBidAdapter.js +1 -1
  131. package/dist/smartadserverBidAdapter.js +1 -1
  132. package/dist/smarthubBidAdapter.js +1 -1
  133. package/dist/smartxBidAdapter.js +1 -1
  134. package/dist/smilewantedBidAdapter.js +1 -1
  135. package/dist/sonobiBidAdapter.js +1 -1
  136. package/dist/sovrnAnalyticsAdapter.js +1 -1
  137. package/dist/sovrnBidAdapter.js +1 -1
  138. package/dist/sspBCBidAdapter.js +1 -1
  139. package/dist/stvBidAdapter.js +1 -1
  140. package/dist/sublimeBidAdapter.js +1 -1
  141. package/dist/synacormediaBidAdapter.js +1 -1
  142. package/dist/targetVideoBidAdapter.js +1 -1
  143. package/dist/teadsBidAdapter.js +1 -1
  144. package/dist/trionBidAdapter.js +1 -1
  145. package/dist/tripleliftBidAdapter.js +1 -1
  146. package/dist/truereachBidAdapter.js +1 -1
  147. package/dist/ttdBidAdapter.js +1 -1
  148. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  149. package/dist/uid2IdSystem.js +1 -1
  150. package/dist/underdogmediaBidAdapter.js +1 -1
  151. package/dist/undertoneBidAdapter.js +1 -1
  152. package/dist/userId.js +1 -1
  153. package/dist/vidazooBidAdapter.js +1 -1
  154. package/dist/videobyteBidAdapter.js +1 -1
  155. package/dist/videoheroesBidAdapter.js +1 -1
  156. package/dist/vidoomyBidAdapter.js +1 -1
  157. package/dist/visiblemeasuresBidAdapter.js +1 -1
  158. package/dist/visxBidAdapter.js +1 -1
  159. package/dist/vrtcalBidAdapter.js +1 -1
  160. package/dist/vuukleBidAdapter.js +1 -1
  161. package/dist/widespaceBidAdapter.js +1 -1
  162. package/dist/winrBidAdapter.js +1 -1
  163. package/dist/yahoosspBidAdapter.js +1 -1
  164. package/dist/yieldmoBidAdapter.js +1 -1
  165. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  166. package/dist/yieldoneBidAdapter.js +1 -1
  167. package/integrationExamples/gpt/fledge_example.html +103 -0
  168. package/integrationExamples/gpt/prebidServer_fledge_example.html +111 -0
  169. package/libraries/domainOverrideToRootDomain/index.js +39 -0
  170. package/libraries/ortbConverter/processors/video.js +1 -0
  171. package/modules/acuityAdsBidAdapter.js +1 -1
  172. package/modules/admaticBidAdapter.js +7 -2
  173. package/modules/adnuntiusBidAdapter.js +3 -1
  174. package/modules/amxBidAdapter.js +1 -1
  175. package/modules/amxIdSystem.js +23 -20
  176. package/modules/amxIdSystem.md +7 -7
  177. package/modules/appnexusBidAdapter.js +108 -102
  178. package/modules/appushBidAdapter.js +1 -1
  179. package/modules/beyondmediaBidAdapter.js +1 -1
  180. package/modules/bidwatchAnalyticsAdapter.js +2 -0
  181. package/modules/braveBidAdapter.js +1 -1
  182. package/modules/brightcomBidAdapter.js +1 -1
  183. package/modules/brightcomSSPBidAdapter.js +1 -1
  184. package/modules/coinzillaBidAdapter.js +1 -2
  185. package/modules/compassBidAdapter.js +1 -1
  186. package/modules/connectIdSystem.js +96 -21
  187. package/modules/connectIdSystem.md +6 -5
  188. package/modules/contentexchangeBidAdapter.js +1 -1
  189. package/modules/conversantBidAdapter.js +3 -0
  190. package/modules/criteoBidAdapter.js +5 -1
  191. package/modules/eskimiBidAdapter.js +72 -0
  192. package/modules/eskimiBidAdapter.md +34 -0
  193. package/modules/freewheel-sspBidAdapter.js +8 -0
  194. package/modules/glimpseBidAdapter.js +1 -2
  195. package/modules/globalsunBidAdapter.js +1 -1
  196. package/modules/gridBidAdapter.js +43 -20
  197. package/modules/growthCodeIdSystem.js +18 -15
  198. package/modules/gumgumBidAdapter.js +1 -1
  199. package/modules/iqzoneBidAdapter.js +1 -1
  200. package/modules/ivsBidAdapter.js +85 -0
  201. package/modules/ivsBidAdapter.md +34 -0
  202. package/modules/ixBidAdapter.js +72 -105
  203. package/modules/jwplayerVideoProvider.js +25 -32
  204. package/modules/kargoBidAdapter.js +473 -246
  205. package/modules/koblerBidAdapter.js +1 -2
  206. package/modules/kueezBidAdapter.js +1 -1
  207. package/modules/kueezRtbBidAdapter.js +16 -4
  208. package/modules/liveIntentIdSystem.js +8 -0
  209. package/modules/luponmediaBidAdapter.js +1 -1
  210. package/modules/magniteAnalyticsAdapter.js +76 -3
  211. package/modules/mathildeadsBidAdapter.js +1 -1
  212. package/modules/medianetBidAdapter.js +1 -1
  213. package/modules/mediasquareBidAdapter.js +2 -1
  214. package/modules/mgidBidAdapter.js +178 -26
  215. package/modules/minutemediaBidAdapter.js +1 -1
  216. package/modules/minutemediaplusBidAdapter.js +16 -4
  217. package/modules/nativoBidAdapter.js +110 -21
  218. package/modules/neuwoRtdProvider.js +0 -2
  219. package/modules/oguryBidAdapter.js +3 -2
  220. package/modules/onomagicBidAdapter.js +1 -2
  221. package/modules/openxBidAdapter.js +192 -563
  222. package/modules/openxBidAdapter.md +22 -20
  223. package/modules/openxOrtbBidAdapter.js +13 -11
  224. package/modules/openxOrtbBidAdapter.md +5 -3
  225. package/modules/operaadsBidAdapter.js +1 -1
  226. package/modules/pairIdSystem.js +79 -0
  227. package/modules/pubmaticBidAdapter.js +13 -10
  228. package/modules/pubxBidAdapter.js +5 -2
  229. package/modules/riseBidAdapter.js +1 -1
  230. package/modules/sharedIdSystem.js +4 -27
  231. package/modules/sharethroughBidAdapter.js +1 -1
  232. package/modules/shinezBidAdapter.js +1 -1
  233. package/modules/smarthubBidAdapter.js +1 -1
  234. package/modules/synacormediaBidAdapter.js +1 -3
  235. package/modules/truereachBidAdapter.js +1 -2
  236. package/modules/userId/eids.js +24 -0
  237. package/modules/userId/eids.md +16 -0
  238. package/modules/videoheroesBidAdapter.js +1 -1
  239. package/modules/vidoomyBidAdapter.js +33 -4
  240. package/modules/visiblemeasuresBidAdapter.js +1 -1
  241. package/modules/vrtcalBidAdapter.js +1 -1
  242. package/modules/yieldmoBidAdapter.js +15 -5
  243. package/modules/yieldoneBidAdapter.js +1 -1
  244. package/package.json +1 -1
  245. package/src/Renderer.js +2 -1
  246. package/src/config.js +78 -127
  247. package/src/native.js +5 -1
  248. package/test/spec/auctionmanager_spec.js +2 -2
  249. package/test/spec/libraries/domainOverrideToRootDomain/index_spec.js +77 -0
  250. package/test/spec/modules/1plusXRtdProvider_spec.js +8 -7
  251. package/test/spec/modules/acuityAdsBidAdapter_spec.js +2 -1
  252. package/test/spec/modules/adagioBidAdapter_spec.js +0 -25
  253. package/test/spec/modules/admaticBidAdapter_spec.js +1 -1
  254. package/test/spec/modules/adnuntiusBidAdapter_spec.js +2 -1
  255. package/test/spec/modules/amxIdSystem_spec.js +13 -26
  256. package/test/spec/modules/appnexusBidAdapter_spec.js +464 -448
  257. package/test/spec/modules/appushBidAdapter_spec.js +2 -1
  258. package/test/spec/modules/axonixBidAdapter_spec.js +0 -27
  259. package/test/spec/modules/beyondmediaBidAdapter_spec.js +2 -1
  260. package/test/spec/modules/big-richmediaBidAdapter_spec.js +68 -64
  261. package/test/spec/modules/compassBidAdapter_spec.js +2 -1
  262. package/test/spec/modules/connectIdSystem_spec.js +420 -242
  263. package/test/spec/modules/contentexchangeBidAdapter_spec.js +2 -1
  264. package/test/spec/modules/conversantBidAdapter_spec.js +1 -0
  265. package/test/spec/modules/criteoBidAdapter_spec.js +33 -1
  266. package/test/spec/modules/eids_spec.js +30 -0
  267. package/test/spec/modules/eskimiBidAdapter_spec.js +155 -0
  268. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +37 -0
  269. package/test/spec/modules/globalsunBidAdapter_spec.js +2 -1
  270. package/test/spec/modules/gridBidAdapter_spec.js +8 -0
  271. package/test/spec/modules/iqzoneBidAdapter_spec.js +2 -1
  272. package/test/spec/modules/ivsBidAdapter_spec.js +197 -0
  273. package/test/spec/modules/ixBidAdapter_spec.js +141 -71
  274. package/test/spec/modules/kargoBidAdapter_spec.js +297 -140
  275. package/test/spec/modules/koblerBidAdapter_spec.js +0 -20
  276. package/test/spec/modules/kueezRtbBidAdapter_spec.js +22 -2
  277. package/test/spec/modules/liveIntentIdSystem_spec.js +10 -0
  278. package/test/spec/modules/luponmediaBidAdapter_spec.js +1 -1
  279. package/test/spec/modules/magniteAnalyticsAdapter_spec.js +129 -1
  280. package/test/spec/modules/mathildeadsBidAdapter_spec.js +2 -1
  281. package/test/spec/modules/mgidBidAdapter_spec.js +184 -36
  282. package/test/spec/modules/minutemediaplusBidAdapter_spec.js +22 -2
  283. package/test/spec/modules/nativoBidAdapter_spec.js +101 -0
  284. package/test/spec/modules/neuwoRtdProvider_spec.js +0 -1
  285. package/test/spec/modules/oguryBidAdapter_spec.js +19 -4
  286. package/test/spec/modules/ooloAnalyticsAdapter_spec.js +1 -1
  287. package/test/spec/modules/openxBidAdapter_spec.js +1157 -1936
  288. package/test/spec/modules/openxOrtbBidAdapter_spec.js +12 -39
  289. package/test/spec/modules/pairIdSystem_spec.js +68 -0
  290. package/test/spec/modules/pubCommonId_spec.js +0 -17
  291. package/test/spec/modules/pubmaticBidAdapter_spec.js +868 -867
  292. package/test/spec/modules/pubxBidAdapter_spec.js +10 -2
  293. package/test/spec/modules/realvuAnalyticsAdapter_spec.js +0 -5
  294. package/test/spec/modules/sharedIdSystem_spec.js +0 -46
  295. package/test/spec/modules/sharethroughBidAdapter_spec.js +2 -1
  296. package/test/spec/modules/smarthubBidAdapter_spec.js +2 -1
  297. package/test/spec/modules/synacormediaBidAdapter_spec.js +0 -26
  298. package/test/spec/modules/videoModule/submodules/jwplayerVideoProvider_spec.js +17 -4
  299. package/test/spec/modules/vidoomyBidAdapter_spec.js +58 -0
  300. package/test/spec/modules/visiblemeasuresBidAdapter_spec.js +2 -1
  301. package/test/spec/modules/vrtcalBidAdapter_spec.js +3 -2
  302. package/test/spec/modules/yieldmoBidAdapter_spec.js +19 -1
  303. package/test/spec/renderer_spec.js +1 -2
  304. package/test/spec/unit/pbjs_api_spec.js +19 -3
  305. package/test/test_index.js +13 -3
  306. package/dist/gridNMBidAdapter.js +0 -1
  307. package/modules/gridNMBidAdapter.js +0 -422
  308. package/modules/gridNMBidAdapter.md +0 -39
  309. package/test/spec/modules/gridNMBidAdapter_spec.js +0 -636
@@ -157,7 +157,7 @@ export const spec = {
157
157
  coppa: config.getConfig('coppa') === true ? 1 : 0,
158
158
  ccpa: bidderRequest.uspConsent || undefined,
159
159
  gdpr: bidderRequest.gdprConsent || undefined,
160
- tmax: config.getConfig('bidderTimeout')
160
+ tmax: bidderRequest.timeout
161
161
  };
162
162
 
163
163
  const len = validBidRequests.length;
@@ -124,6 +124,9 @@ export const spec = {
124
124
  const payload = {
125
125
  id: requestId,
126
126
  imp: conversantImps,
127
+ source: {
128
+ tid: requestId
129
+ },
127
130
  site: {
128
131
  id: siteId,
129
132
  mobile: document.querySelector('meta[name="viewport"][content*="width=device-width"]') !== null ? 1 : 0,
@@ -223,7 +223,7 @@ export const spec = {
223
223
  creativeId: slot.creativecode,
224
224
  width: slot.width,
225
225
  height: slot.height,
226
- dealId: slot.dealCode,
226
+ dealId: slot.deal,
227
227
  };
228
228
  if (body.ext?.paf?.transmission && slot.ext?.paf?.content_id) {
229
229
  const pafResponseMeta = {
@@ -514,6 +514,10 @@ function buildCdbRequest(context, bidRequests, bidderRequest) {
514
514
  if (bidderRequest && bidderRequest.uspConsent) {
515
515
  request.user.uspIab = bidderRequest.uspConsent;
516
516
  }
517
+ if (bidderRequest && bidderRequest.ortb2?.device?.sua) {
518
+ request.user.ext = request.user.ext || {};
519
+ request.user.ext.sua = bidderRequest.ortb2?.device?.sua || {};
520
+ }
517
521
  return request;
518
522
  }
519
523
 
@@ -0,0 +1,72 @@
1
+ import {registerBidder} from '../src/adapters/bidderFactory.js';
2
+ import {BANNER} from '../src/mediaTypes.js';
3
+ import * as utils from '../src/utils.js';
4
+ import {ortbConverter} from '../libraries/ortbConverter/converter.js'
5
+
6
+ const BIDDER_CODE = 'eskimi';
7
+ // const ENDPOINT = 'https://hb.eskimi.com/bids'
8
+ const ENDPOINT = 'https://sspback.eskimi.com/bid-request'
9
+
10
+ const DEFAULT_BID_TTL = 30;
11
+ const DEFAULT_CURRENCY = 'USD';
12
+ const DEFAULT_NET_REVENUE = true;
13
+ const GVLID = 814;
14
+
15
+ export const spec = {
16
+ code: BIDDER_CODE,
17
+ gvlid: GVLID,
18
+ supportedMediaTypes: [BANNER],
19
+
20
+ isBidRequestValid: function (bid) {
21
+ return !!bid.params.placementId;
22
+ },
23
+
24
+ buildRequests(bidRequests, bidderRequest) {
25
+ const data = converter.toORTB({bidRequests, bidderRequest})
26
+
27
+ let bid = bidRequests.find((b) => b.params.placementId)
28
+ if (!data.site) data.site = {}
29
+ data.site.ext = {placementId: bid.params.placementId}
30
+
31
+ if (bidderRequest.gdprConsent) {
32
+ if (!data.user) data.user = {};
33
+ if (!data.user.ext) data.user.ext = {};
34
+ if (!data.regs) data.regs = {};
35
+ if (!data.regs.ext) data.regs.ext = {};
36
+ data.user.ext.consent = bidderRequest.gdprConsent.consentString;
37
+ data.regs.ext.gdpr = bidderRequest.gdprConsent.gdprApplies ? 1 : 0;
38
+ }
39
+
40
+ return [{
41
+ method: 'POST',
42
+ url: ENDPOINT,
43
+ data,
44
+ options: {contentType: 'application/json;charset=UTF-8', withCredentials: false}
45
+ }]
46
+ },
47
+
48
+ interpretResponse(response, request) {
49
+ return converter.fromORTB({response: response.body, request: request.data}).bids;
50
+ },
51
+
52
+ /**
53
+ * Register bidder specific code, which will execute if a bid from this bidder won the auction
54
+ * @param {Bid} bid The bid that won the auction
55
+ */
56
+ onBidWon: function (bid) {
57
+ if (bid.burl) {
58
+ utils.triggerPixel(bid.burl);
59
+ }
60
+ }
61
+ }
62
+
63
+ const converter = ortbConverter({
64
+ context: {
65
+ netRevenue: DEFAULT_NET_REVENUE,
66
+ ttl: DEFAULT_BID_TTL,
67
+ currency: DEFAULT_CURRENCY,
68
+ mediaType: BANNER // TODO: support more types, we should set mtype on the winning bid
69
+ }
70
+ });
71
+
72
+ registerBidder(spec);
@@ -0,0 +1,34 @@
1
+ # Overview
2
+
3
+ Module Name: ESKIMI Bidder Adapter
4
+ Module Type: Bidder Adapter
5
+ Maintainer: tech@eskimi.com
6
+
7
+ # Description
8
+
9
+ An adapter to get a bid from Eskimi DSP.
10
+
11
+ # Test Parameters
12
+ ```javascript
13
+ var adUnits = [{
14
+ code: 'div-gpt-ad-1460505748561-0',
15
+ mediaTypes: {
16
+ banner: {
17
+ sizes: [[300, 250], [300, 600]]
18
+ }
19
+ },
20
+
21
+ bids: [{
22
+ bidder: 'eskimi',
23
+ params: {
24
+ placementId: 612
25
+ }
26
+ }]
27
+
28
+ }];
29
+ ```
30
+
31
+ Where:
32
+
33
+ * placementId - Placement ID of the ad unit (required)
34
+
@@ -424,6 +424,14 @@ export const spec = {
424
424
  requestParams.playerSize = playerSize[0] + 'x' + playerSize[1];
425
425
  }
426
426
 
427
+ // Add video context and placement in requestParams
428
+ if (currentBidRequest.mediaTypes.video) {
429
+ var videoContext = currentBidRequest.mediaTypes.video.context ? currentBidRequest.mediaTypes.video.context : 'instream';
430
+ var videoPlacement = currentBidRequest.mediaTypes.video.placement ? currentBidRequest.mediaTypes.video.placement : 1;
431
+ requestParams.video_context = videoContext;
432
+ requestParams.video_placement = videoPlacement;
433
+ }
434
+
427
435
  return {
428
436
  method: 'GET',
429
437
  url: FREEWHEEL_ADSSETUP,
@@ -1,5 +1,4 @@
1
1
  import { registerBidder } from '../src/adapters/bidderFactory.js';
2
- import { config } from '../src/config.js';
3
2
  import { BANNER } from '../src/mediaTypes.js';
4
3
  import { getStorageManager } from '../src/storageManager.js';
5
4
  import {
@@ -99,7 +98,7 @@ function getReferer(bidderRequest) {
99
98
  function buildQuery(bidderRequest) {
100
99
  let url = appendQueryParam(ENDPOINT, 'ver', '$prebid.version$');
101
100
 
102
- const timeout = config.getConfig('bidderTimeout');
101
+ const timeout = bidderRequest.timeout;
103
102
  url = appendQueryParam(url, 'tmax', timeout);
104
103
 
105
104
  if (gdprApplies(bidderRequest)) {
@@ -155,7 +155,7 @@ export const spec = {
155
155
  coppa: config.getConfig('coppa') === true ? 1 : 0,
156
156
  ccpa: bidderRequest.uspConsent || undefined,
157
157
  gdpr: bidderRequest.gdprConsent || undefined,
158
- tmax: config.getConfig('bidderTimeout')
158
+ tmax: bidderRequest.timeout
159
159
  };
160
160
 
161
161
  const len = validBidRequests.length;
@@ -6,7 +6,10 @@ import {
6
6
  generateUUID,
7
7
  mergeDeep,
8
8
  logWarn,
9
- parseUrl, isArray, isNumber
9
+ parseUrl,
10
+ isArray,
11
+ isNumber,
12
+ isStr
10
13
  } from '../src/utils.js';
11
14
  import { registerBidder } from '../src/adapters/bidderFactory.js';
12
15
  import { Renderer } from '../src/Renderer.js';
@@ -52,7 +55,12 @@ const ALIAS_CONFIG = {
52
55
  bidResponseExternal: {
53
56
  netRevenue: false
54
57
  }
55
- }
58
+ },
59
+ 'gridNM': {
60
+ defaultParams: {
61
+ multiRequest: true
62
+ }
63
+ },
56
64
  };
57
65
 
58
66
  let hasSynced = false;
@@ -60,7 +68,7 @@ let hasSynced = false;
60
68
  export const spec = {
61
69
  code: BIDDER_CODE,
62
70
  gvlid: GVLID,
63
- aliases: ['playwire', 'adlivetech', { code: 'trustx', skipPbsAliasing: true }],
71
+ aliases: ['playwire', 'adlivetech', 'gridNM', { code: 'trustx', skipPbsAliasing: true }],
64
72
  supportedMediaTypes: [ BANNER, VIDEO ],
65
73
  /**
66
74
  * Determines whether or not the given bid request is valid.
@@ -93,7 +101,7 @@ export const spec = {
93
101
  let {bidderRequestId, auctionId, gdprConsent, uspConsent, timeout, refererInfo, gppConsent} = bidderRequest || {};
94
102
 
95
103
  const referer = refererInfo ? encodeURIComponent(refererInfo.page) : '';
96
- const tmax = timeout || config.getConfig('bidderTimeout');
104
+ const tmax = timeout;
97
105
  const imp = [];
98
106
  const bidsMap = {};
99
107
  const requests = [];
@@ -126,8 +134,9 @@ export const spec = {
126
134
  if (!endpoint) {
127
135
  endpoint = ALIAS_CONFIG[bid.bidder] && ALIAS_CONFIG[bid.bidder].endpoint;
128
136
  }
129
- const { params: { uid, keywords, forceBidder, multiRequest }, mediaTypes, bidId, adUnitCode, rtd, ortb2Imp } = bid;
130
- const { secid, pubid, source, content: bidParamsContent } = bid.params;
137
+ const { params, mediaTypes, bidId, adUnitCode, rtd, ortb2Imp } = bid;
138
+ const { defaultParams } = ALIAS_CONFIG[bid.bidder] || {};
139
+ const { secid, pubid, source, uid, keywords, forceBidder, multiRequest, content: bidParamsContent, video: videoParams } = { ...defaultParams, ...params };
131
140
  const bidFloor = _getFloor(mediaTypes || {}, bid);
132
141
  const jwTargeting = rtd && rtd.jwplayer && rtd.jwplayer.targeting;
133
142
  if (jwTargeting && !content && jwTargeting.content) {
@@ -178,7 +187,7 @@ export const spec = {
178
187
  }
179
188
  }
180
189
  if (mediaTypes && mediaTypes[VIDEO]) {
181
- const video = createVideoRequest(bid, mediaTypes[VIDEO]);
190
+ const video = createVideoRequest(videoParams, mediaTypes[VIDEO], bid.sizes);
182
191
  if (video) {
183
192
  impObj.video = video;
184
193
  }
@@ -588,27 +597,41 @@ function _addBidResponse(serverBid, bidRequest, bidResponses, RendererConst, bid
588
597
  }
589
598
  }
590
599
 
591
- function createVideoRequest(bid, mediaType) {
592
- const { playerSize, mimes, durationRangeSec, protocols } = mediaType;
593
- const size = (playerSize || bid.sizes || [])[0];
594
- if (!size) return;
600
+ function createVideoRequest(videoParams, mediaType, bidSizes) {
601
+ const { mind, maxd, size, playerSize, protocols, durationRangeSec = [], ...videoData } = { ...mediaType, ...videoParams };
602
+ if (size && isStr(size)) {
603
+ const sizeArray = size.split('x');
604
+ if (sizeArray.length === 2 && parseInt(sizeArray[0]) && parseInt(sizeArray[1])) {
605
+ videoData.w = parseInt(sizeArray[0]);
606
+ videoData.h = parseInt(sizeArray[1]);
607
+ }
608
+ }
609
+ if (!videoData.w || !videoData.h) {
610
+ const pSizesString = (playerSize || bidSizes || []).toString();
611
+ const pSizeString = (pSizesString.match(/^\d+,\d+/) || [])[0];
612
+ const pSize = pSizeString && pSizeString.split(',').map((d) => parseInt(d));
613
+ if (pSize && pSize.length === 2) {
614
+ Object.assign(videoData, parseGPTSingleSizeArrayToRtbSize(pSize));
615
+ }
616
+ }
595
617
 
596
- let result = parseGPTSingleSizeArrayToRtbSize(size);
618
+ if (!videoData.w || !videoData.h) return;
597
619
 
598
- if (mimes) {
599
- result.mimes = mimes;
600
- }
620
+ const minDur = mind || durationRangeSec[0] || videoData.minduration;
621
+ const maxDur = maxd || durationRangeSec[1] || videoData.maxduration;
601
622
 
602
- if (durationRangeSec && durationRangeSec.length === 2) {
603
- result.minduration = durationRangeSec[0];
604
- result.maxduration = durationRangeSec[1];
623
+ if (minDur) {
624
+ videoData.minduration = minDur;
625
+ }
626
+ if (maxDur) {
627
+ videoData.maxduration = maxDur;
605
628
  }
606
629
 
607
630
  if (protocols && protocols.length) {
608
- result.protocols = protocols;
631
+ videoData.protocols = protocols;
609
632
  }
610
633
 
611
- return result;
634
+ return videoData;
612
635
  }
613
636
 
614
637
  function createBannerRequest(bid, mediaType) {
@@ -11,9 +11,9 @@ import { submodule } from '../src/hook.js'
11
11
  import {getStorageManager} from '../src/storageManager.js';
12
12
  import {MODULE_TYPE_UID} from '../src/activities/modules.js';
13
13
 
14
- const GCID_EXPIRY = 7;
15
14
  const MODULE_NAME = 'growthCodeId';
16
15
  const GC_DATA_KEY = '_gc_data';
16
+ const GCID_KEY = 'gcid';
17
17
  const ENDPOINT_URL = 'https://p2.gcprivacy.com/v1/pb?'
18
18
 
19
19
  export const storage = getStorageManager({ moduleType: MODULE_TYPE_UID, moduleName: MODULE_NAME });
@@ -26,14 +26,16 @@ export const storage = getStorageManager({ moduleType: MODULE_TYPE_UID, moduleNa
26
26
  export function readData(key) {
27
27
  try {
28
28
  let payload
29
- if (storage.cookiesAreEnabled()) {
30
- payload = tryParse(storage.getCookie(key))
29
+ if (storage.cookiesAreEnabled(null)) {
30
+ payload = tryParse(storage.getCookie(key, null))
31
31
  }
32
32
  if (storage.hasLocalStorage()) {
33
- payload = tryParse(storage.getDataFromLocalStorage(key))
33
+ payload = tryParse(storage.getDataFromLocalStorage(key, null))
34
34
  }
35
- if ((payload.expire_at !== undefined) && (payload.expire_at > (Date.now() / 1000))) {
36
- return payload
35
+ if (payload !== undefined) {
36
+ if (payload.expire_at > (Date.now() / 1000)) {
37
+ return payload
38
+ }
37
39
  }
38
40
  } catch (error) {
39
41
  logError(error);
@@ -51,12 +53,8 @@ function storeData(key, value) {
51
53
  logInfo(MODULE_NAME + ': storing data: key=' + key + ' value=' + value);
52
54
 
53
55
  if (value) {
54
- if (storage.hasLocalStorage()) {
55
- storage.setDataInLocalStorage(key, value);
56
- }
57
- const expiresStr = (new Date(Date.now() + (GCID_EXPIRY * (60 * 60 * 24 * 1000)))).toUTCString();
58
- if (storage.cookiesAreEnabled()) {
59
- storage.setCookie(key, value, expiresStr, 'LAX');
56
+ if (storage.hasLocalStorage(null)) {
57
+ storage.setDataInLocalStorage(key, value, null);
60
58
  }
61
59
  }
62
60
  } catch (error) {
@@ -70,11 +68,15 @@ function storeData(key, value) {
70
68
  * @param {object|null}
71
69
  */
72
70
  function tryParse(data) {
71
+ let payload;
73
72
  try {
74
- return JSON.parse(data);
73
+ payload = JSON.parse(data);
74
+ if (payload == null) {
75
+ return undefined
76
+ }
77
+ return payload
75
78
  } catch (err) {
76
- logError(err);
77
- return null;
79
+ return undefined;
78
80
  }
79
81
  }
80
82
 
@@ -150,6 +152,7 @@ export const growthCodeIdSubmodule = {
150
152
  // If response is a valid json and should save is true
151
153
  if (respJson) {
152
154
  storeData(GC_DATA_KEY, JSON.stringify(respJson))
155
+ storeData(GCID_KEY, respJson.gc_id);
153
156
  callback(respJson);
154
157
  } else {
155
158
  callback();
@@ -284,7 +284,7 @@ function buildRequests(validBidRequests, bidderRequest) {
284
284
  const gdprConsent = bidderRequest && bidderRequest.gdprConsent;
285
285
  const uspConsent = bidderRequest && bidderRequest.uspConsent;
286
286
  const gppConsent = bidderRequest && bidderRequest.gppConsent;
287
- const timeout = config.getConfig('bidderTimeout');
287
+ const timeout = bidderRequest && bidderRequest.timeout
288
288
  const coppa = config.getConfig('coppa') === true ? 1 : 0;
289
289
  const topWindowUrl = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.page;
290
290
  _each(validBidRequests, bidRequest => {
@@ -154,7 +154,7 @@ export const spec = {
154
154
  coppa: config.getConfig('coppa') === true ? 1 : 0,
155
155
  ccpa: bidderRequest.uspConsent || undefined,
156
156
  gdpr: bidderRequest.gdprConsent || undefined,
157
- tmax: config.getConfig('bidderTimeout')
157
+ tmax: bidderRequest.timeout
158
158
  };
159
159
 
160
160
  const len = validBidRequests.length;
@@ -0,0 +1,85 @@
1
+ import { ortbConverter } from '../libraries/ortbConverter/converter.js';
2
+ import { deepAccess, deepSetValue, getBidIdParameter, logError } from '../src/utils.js';
3
+ import { registerBidder } from '../src/adapters/bidderFactory.js';
4
+ import { VIDEO } from '../src/mediaTypes.js';
5
+ import { INSTREAM } from '../src/video.js';
6
+
7
+ const BIDDER_CODE = 'ivs';
8
+ const ENDPOINT_URL = 'https://a.ivstracker.net/prod/openrtb/2.5';
9
+
10
+ export const converter = ortbConverter({
11
+ context: {
12
+ mediaType: VIDEO,
13
+ ttl: 360,
14
+ netRevenue: true
15
+ }
16
+ });
17
+
18
+ export const spec = {
19
+ code: BIDDER_CODE,
20
+ supportedMediaTypes: [VIDEO],
21
+
22
+ /**
23
+ * Determines whether or not the given bid request is valid.
24
+ *
25
+ * @param {BidRequest} bid The bid params to validate.
26
+ * @return boolean True if this is a valid bid, and false otherwise.
27
+ */
28
+ isBidRequestValid: function(bid) {
29
+ if (bid && typeof bid.params !== 'object') {
30
+ logError(BIDDER_CODE + ': params is not defined or is incorrect in the bidder settings.');
31
+ return false;
32
+ }
33
+
34
+ if (!deepAccess(bid, 'mediaTypes.video')) {
35
+ logError(BIDDER_CODE + ': mediaTypes.video is not present in the bidder settings.');
36
+ return false;
37
+ }
38
+
39
+ if (deepAccess(bid, 'mediaTypes.video.context') !== INSTREAM) {
40
+ logError(BIDDER_CODE + ': only instream video context is allowed.');
41
+ return false;
42
+ }
43
+
44
+ if (!getBidIdParameter('publisherId', bid.params)) {
45
+ logError(BIDDER_CODE + ': publisherId is not present in bidder params.');
46
+ return false;
47
+ }
48
+
49
+ return true;
50
+ },
51
+
52
+ /**
53
+ * Make a server request from the list of BidRequests.
54
+ *
55
+ * @param {validBidRequests[]} - an array of bids
56
+ * @param {bidderRequest} - master bidRequest object
57
+ * @return ServerRequest Info describing the request to the server.
58
+ */
59
+ buildRequests: function(validBidRequests, bidderRequest) {
60
+ const data = converter.toORTB({ bidderRequest, validBidRequests, context: {mediaType: 'video'} });
61
+ deepSetValue(data.site, 'publisher.id', validBidRequests[0].params.publisherId);
62
+
63
+ return {
64
+ method: 'POST',
65
+ url: ENDPOINT_URL,
66
+ data: data,
67
+ options: {
68
+ contentType: 'application/json'
69
+ },
70
+ };
71
+ },
72
+
73
+ /**
74
+ * Unpack the response from the server into a list of bids.
75
+ *
76
+ * @param {ServerResponse} serverResponse A successful response from the server.
77
+ * @return {Bid[]} An array of bids which were nested inside the server.
78
+ */
79
+ interpretResponse: function(serverResponse, bidRequest) {
80
+ if (!serverResponse.body) return;
81
+ return converter.fromORTB({ response: serverResponse.body, request: bidRequest.data }).bids;
82
+ },
83
+ }
84
+
85
+ registerBidder(spec);
@@ -0,0 +1,34 @@
1
+ # Overview
2
+
3
+ ```
4
+ Module Name: IVS Bidder Adapter
5
+ Module Type: Bidder Adapter
6
+ Maintainer: prebid@ivs.tv
7
+ ```
8
+
9
+ # Description
10
+
11
+ Module that connects to IVS's demand sources
12
+
13
+ # Test Parameters
14
+ ```
15
+ var adUnits = [
16
+ {
17
+ code: 'test-div',
18
+ mediaTypes: {
19
+ video: {
20
+ playerSize: [640, 480],
21
+ context: 'instream'
22
+ }
23
+ },
24
+ bids: [
25
+ {
26
+ bidder: 'ivs',
27
+ params: {
28
+ publisherId: '3001234' // required
29
+ }
30
+ }
31
+ ]
32
+ }
33
+ ];
34
+ ```