prebid.js 8.4.0 → 8.5.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 (285) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/a1MediaRtdProvider.js +1 -0
  4. package/dist/adagioBidAdapter.js +1 -1
  5. package/dist/adbookpspBidAdapter.js +1 -1
  6. package/dist/adfBidAdapter.js +1 -1
  7. package/dist/adgenerationBidAdapter.js +1 -1
  8. package/dist/adkernelAdnBidAdapter.js +1 -1
  9. package/dist/adkernelBidAdapter.js +1 -1
  10. package/dist/admixerIdSystem.js +1 -1
  11. package/dist/adnuntiusBidAdapter.js +1 -1
  12. package/dist/adqueryBidAdapter.js +1 -1
  13. package/dist/adqueryIdSystem.js +1 -1
  14. package/dist/adrelevantisBidAdapter.js +1 -1
  15. package/dist/adtelligentIdSystem.js +1 -1
  16. package/dist/adtrgtmeBidAdapter.js +1 -1
  17. package/dist/adxcgBidAdapter.js +1 -1
  18. package/dist/adyoulikeBidAdapter.js +1 -1
  19. package/dist/ajaBidAdapter.js +1 -1
  20. package/dist/amxBidAdapter.js +1 -1
  21. package/dist/amxIdSystem.js +1 -1
  22. package/dist/appierAnalyticsAdapter.js +1 -1
  23. package/dist/appnexusBidAdapter.js +1 -1
  24. package/dist/asoBidAdapter.js +1 -1
  25. package/dist/axonixBidAdapter.js +1 -1
  26. package/dist/beachfrontBidAdapter.js +1 -1
  27. package/dist/bidglassBidAdapter.js +1 -1
  28. package/dist/big-richmediaBidAdapter.js +1 -1
  29. package/dist/bridBidAdapter.js +1 -1
  30. package/dist/bridgewellBidAdapter.js +1 -1
  31. package/dist/brightMountainMediaBidAdapter.js +1 -1
  32. package/dist/britepoolIdSystem.js +1 -1
  33. package/dist/carodaBidAdapter.js +1 -1
  34. package/dist/chtnwBidAdapter.js +1 -1
  35. package/dist/concertBidAdapter.js +1 -1
  36. package/dist/connectIdSystem.js +1 -1
  37. package/dist/connectadBidAdapter.js +1 -1
  38. package/dist/consentManagementGpp.js +1 -1
  39. package/dist/consumableBidAdapter.js +1 -1
  40. package/dist/conversantAnalyticsAdapter.js +1 -1
  41. package/dist/conversantBidAdapter.js +1 -1
  42. package/dist/craftBidAdapter.js +1 -1
  43. package/dist/criteoBidAdapter.js +1 -1
  44. package/dist/criteoIdSystem.js +1 -1
  45. package/dist/cwireBidAdapter.js +1 -1
  46. package/dist/czechAdIdSystem.js +1 -1
  47. package/dist/dacIdSystem.js +1 -1
  48. package/dist/deepintentDpesIdSystem.js +1 -1
  49. package/dist/dependencies.json +3 -0
  50. package/dist/dmdIdSystem.js +1 -1
  51. package/dist/dspxBidAdapter.js +1 -1
  52. package/dist/eplanningBidAdapter.js +1 -1
  53. package/dist/euidIdSystem.js +1 -1
  54. package/dist/fabrickIdSystem.js +1 -1
  55. package/dist/feedadBidAdapter.js +1 -1
  56. package/dist/finativeBidAdapter.js +1 -1
  57. package/dist/freewheel-sspBidAdapter.js +1 -1
  58. package/dist/ftrackIdSystem.js +1 -1
  59. package/dist/geolocationRtdProvider.js +1 -0
  60. package/dist/gmosspBidAdapter.js +1 -1
  61. package/dist/goldbachBidAdapter.js +1 -1
  62. package/dist/gravitoIdSystem.js +1 -1
  63. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  64. package/dist/greenbidsRtdProvider.js +1 -1
  65. package/dist/gridBidAdapter.js +1 -1
  66. package/dist/growthCodeIdSystem.js +1 -1
  67. package/dist/gumgumBidAdapter.js +1 -1
  68. package/dist/h12mediaBidAdapter.js +1 -1
  69. package/dist/hadronIdSystem.js +1 -1
  70. package/dist/hypelabBidAdapter.js +1 -1
  71. package/dist/id5IdSystem.js +1 -1
  72. package/dist/identityLinkIdSystem.js +1 -1
  73. package/dist/idxIdSystem.js +1 -1
  74. package/dist/imdsBidAdapter.js +1 -1
  75. package/dist/improvedigitalBidAdapter.js +1 -1
  76. package/dist/imuIdSystem.js +1 -1
  77. package/dist/insticatorBidAdapter.js +1 -1
  78. package/dist/intentIqIdSystem.js +1 -1
  79. package/dist/invibesBidAdapter.js +1 -1
  80. package/dist/ixBidAdapter.js +1 -1
  81. package/dist/justIdSystem.js +1 -1
  82. package/dist/justpremiumBidAdapter.js +1 -1
  83. package/dist/kargoBidAdapter.js +1 -1
  84. package/dist/kinessoIdSystem.js +1 -1
  85. package/dist/konduitAnalyticsAdapter.js +1 -1
  86. package/dist/kueezBidAdapter.js +1 -1
  87. package/dist/kueezRtbBidAdapter.js +1 -1
  88. package/dist/kulturemediaBidAdapter.js +1 -1
  89. package/dist/lassoBidAdapter.js +1 -1
  90. package/dist/lifestreetBidAdapter.js +1 -1
  91. package/dist/liveIntentIdSystem.js +1 -1
  92. package/dist/logicadBidAdapter.js +1 -1
  93. package/dist/loglyliftBidAdapter.js +1 -1
  94. package/dist/lotamePanoramaIdSystem.js +1 -1
  95. package/dist/magniteAnalyticsAdapter.js +1 -1
  96. package/dist/malltvAnalyticsAdapter.js +1 -1
  97. package/dist/marsmediaBidAdapter.js +1 -1
  98. package/dist/mediafuseBidAdapter.js +1 -1
  99. package/dist/mediasquareBidAdapter.js +1 -1
  100. package/dist/merkleIdSystem.js +1 -1
  101. package/dist/mgidBidAdapter.js +1 -1
  102. package/dist/minutemediaBidAdapter.js +1 -1
  103. package/dist/minutemediaplusBidAdapter.js +1 -1
  104. package/dist/mwOpenLinkIdSystem.js +1 -1
  105. package/dist/naveggIdSystem.js +1 -1
  106. package/dist/netIdSystem.js +1 -1
  107. package/dist/nexx360BidAdapter.js +1 -1
  108. package/dist/not-for-prod/prebid.js +176 -173
  109. package/dist/novatiqIdSystem.js +1 -1
  110. package/dist/oguryBidAdapter.js +1 -1
  111. package/dist/oneKeyIdSystem.js +1 -1
  112. package/dist/onetagBidAdapter.js +1 -1
  113. package/dist/ooloAnalyticsAdapter.js +1 -1
  114. package/dist/optidigitalBidAdapter.js +1 -1
  115. package/dist/outbrainBidAdapter.js +1 -1
  116. package/dist/ozoneBidAdapter.js +1 -1
  117. package/dist/pairIdSystem.js +1 -1
  118. package/dist/parrableIdSystem.js +1 -1
  119. package/dist/pixfutureBidAdapter.js +1 -1
  120. package/dist/prebid-core.js +1 -1
  121. package/dist/publinkIdSystem.js +1 -1
  122. package/dist/pubmaticBidAdapter.js +1 -1
  123. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  124. package/dist/pxyzBidAdapter.js +1 -1
  125. package/dist/quantcastBidAdapter.js +1 -1
  126. package/dist/quantcastIdSystem.js +1 -1
  127. package/dist/readpeakBidAdapter.js +1 -1
  128. package/dist/relaidoBidAdapter.js +1 -1
  129. package/dist/retailspotBidAdapter.js +1 -1
  130. package/dist/rhythmoneBidAdapter.js +1 -1
  131. package/dist/riseBidAdapter.js +1 -1
  132. package/dist/rubiconBidAdapter.js +1 -1
  133. package/dist/seedingAllianceBidAdapter.js +1 -1
  134. package/dist/seedtagBidAdapter.js +1 -1
  135. package/dist/sharedIdSystem.js +1 -1
  136. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  137. package/dist/sharethroughBidAdapter.js +1 -1
  138. package/dist/shinezBidAdapter.js +1 -1
  139. package/dist/silverpushBidAdapter.js +1 -1
  140. package/dist/smaatoBidAdapter.js +1 -1
  141. package/dist/smartadserverBidAdapter.js +1 -1
  142. package/dist/smartxBidAdapter.js +1 -1
  143. package/dist/smilewantedBidAdapter.js +1 -1
  144. package/dist/sonobiBidAdapter.js +1 -1
  145. package/dist/sovrnAnalyticsAdapter.js +1 -1
  146. package/dist/sovrnBidAdapter.js +1 -1
  147. package/dist/ssmasBidAdapter.js +1 -0
  148. package/dist/sspBCBidAdapter.js +1 -1
  149. package/dist/stvBidAdapter.js +1 -1
  150. package/dist/sublimeBidAdapter.js +1 -1
  151. package/dist/tapadIdSystem.js +1 -1
  152. package/dist/targetVideoBidAdapter.js +1 -1
  153. package/dist/teadsBidAdapter.js +1 -1
  154. package/dist/tncIdSystem.js +1 -1
  155. package/dist/trionBidAdapter.js +1 -1
  156. package/dist/tripleliftBidAdapter.js +1 -1
  157. package/dist/ttdBidAdapter.js +1 -1
  158. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  159. package/dist/uid2IdSystem.js +1 -1
  160. package/dist/underdogmediaBidAdapter.js +1 -1
  161. package/dist/undertoneBidAdapter.js +1 -1
  162. package/dist/unifiedIdSystem.js +1 -1
  163. package/dist/userId.js +1 -1
  164. package/dist/utiqSystem.js +1 -1
  165. package/dist/verizonMediaIdSystem.js +1 -1
  166. package/dist/vidazooBidAdapter.js +1 -1
  167. package/dist/videobyteBidAdapter.js +1 -1
  168. package/dist/visxBidAdapter.js +1 -1
  169. package/dist/vrtcalBidAdapter.js +1 -1
  170. package/dist/vuukleBidAdapter.js +1 -1
  171. package/dist/widespaceBidAdapter.js +1 -1
  172. package/dist/winrBidAdapter.js +1 -1
  173. package/dist/yahoosspBidAdapter.js +1 -1
  174. package/dist/yieldmoBidAdapter.js +1 -1
  175. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  176. package/dist/zeotapIdPlusIdSystem.js +1 -1
  177. package/integrationExamples/gpt/adUnitFloors.html +0 -1
  178. package/modules/.submodules.json +1 -0
  179. package/modules/33acrossIdSystem.js +9 -0
  180. package/modules/a1MediaRtdProvider.js +92 -0
  181. package/modules/a1MediaRtdProvider.md +46 -0
  182. package/modules/adfBidAdapter.js +4 -1
  183. package/modules/adkernelAdnBidAdapter.js +1 -1
  184. package/modules/adkernelBidAdapter.js +10 -3
  185. package/modules/admixerIdSystem.js +6 -0
  186. package/modules/adnuntiusBidAdapter.js +5 -13
  187. package/modules/adqueryIdSystem.js +6 -0
  188. package/modules/adtelligentIdSystem.js +6 -0
  189. package/modules/adyoulikeBidAdapter.js +6 -3
  190. package/modules/amxIdSystem.js +6 -0
  191. package/modules/beachfrontBidAdapter.js +32 -6
  192. package/modules/britepoolIdSystem.js +6 -0
  193. package/modules/connectIdSystem.js +6 -0
  194. package/modules/consentManagementGpp.js +10 -1
  195. package/modules/consumableBidAdapter.js +9 -1
  196. package/modules/criteoIdSystem.js +6 -0
  197. package/modules/czechAdIdSystem.js +6 -0
  198. package/modules/dacIdSystem.js +6 -0
  199. package/modules/deepintentDpesIdSystem.js +7 -2
  200. package/modules/dmdIdSystem.js +6 -0
  201. package/modules/euidIdSystem.js +9 -0
  202. package/modules/fabrickIdSystem.js +6 -0
  203. package/modules/ftrackIdSystem.js +16 -0
  204. package/modules/geolocationRtdProvider.js +65 -0
  205. package/modules/gravitoIdSystem.js +6 -0
  206. package/modules/greenbidsRtdProvider.js +1 -1
  207. package/modules/growthCodeIdSystem.js +20 -1
  208. package/modules/hadronIdSystem.js +6 -0
  209. package/modules/id5IdSystem.js +34 -8
  210. package/modules/identityLinkIdSystem.js +6 -0
  211. package/modules/idxIdSystem.js +6 -0
  212. package/modules/imdsBidAdapter.js +38 -14
  213. package/modules/imuIdSystem.js +10 -0
  214. package/modules/intentIqIdSystem.js +6 -0
  215. package/modules/invibesBidAdapter.js +5 -5
  216. package/modules/ixBidAdapter.js +16 -0
  217. package/modules/justIdSystem.js +6 -0
  218. package/modules/kinessoIdSystem.js +7 -2
  219. package/modules/liveIntentIdSystem.js +53 -0
  220. package/modules/lotamePanoramaIdSystem.js +6 -0
  221. package/modules/merkleIdSystem.js +24 -0
  222. package/modules/mwOpenLinkIdSystem.js +6 -0
  223. package/modules/naveggIdSystem.js +6 -0
  224. package/modules/netIdSystem.js +6 -0
  225. package/modules/novatiqIdSystem.js +12 -0
  226. package/modules/oneKeyIdSystem.js +26 -0
  227. package/modules/ozoneBidAdapter.js +65 -18
  228. package/modules/ozoneBidAdapter.md +3 -1
  229. package/modules/pairIdSystem.js +6 -0
  230. package/modules/parrableIdSystem.js +38 -2
  231. package/modules/publinkIdSystem.js +7 -1
  232. package/modules/quantcastIdSystem.js +6 -0
  233. package/modules/rubiconBidAdapter.js +9 -0
  234. package/modules/sharedIdSystem.js +6 -0
  235. package/modules/silverpushBidAdapter.js +2 -2
  236. package/modules/ssmasBidAdapter.js +126 -0
  237. package/modules/ssmasBidAdapter.md +35 -0
  238. package/modules/sspBCBidAdapter.js +36 -13
  239. package/modules/tapadIdSystem.js +6 -0
  240. package/modules/tncIdSystem.js +6 -0
  241. package/modules/tripleliftBidAdapter.js +5 -0
  242. package/modules/uid2IdSystem.js +14 -0
  243. package/modules/unifiedIdSystem.js +11 -0
  244. package/modules/userId/eids.js +6 -445
  245. package/modules/userId/index.js +36 -24
  246. package/modules/utiqSystem.js +9 -0
  247. package/modules/verizonMediaIdSystem.js +6 -0
  248. package/modules/vrtcalBidAdapter.js +10 -6
  249. package/modules/zeotapIdPlusIdSystem.js +6 -0
  250. package/package.json +1 -1
  251. package/src/adapters/bidderFactory.js +15 -6
  252. package/src/adloader.js +2 -1
  253. package/test/spec/modules/a1MediaRtdProvider_spec.js +105 -0
  254. package/test/spec/modules/adfBidAdapter_spec.js +47 -0
  255. package/test/spec/modules/adkernelAdnBidAdapter_spec.js +1 -2
  256. package/test/spec/modules/adkernelBidAdapter_spec.js +7 -2
  257. package/test/spec/modules/adnuntiusBidAdapter_spec.js +116 -64
  258. package/test/spec/modules/adyoulikeBidAdapter_spec.js +13 -24
  259. package/test/spec/modules/beachfrontBidAdapter_spec.js +35 -2
  260. package/test/spec/modules/consentManagementGpp_spec.js +16 -0
  261. package/test/spec/modules/consumableBidAdapter_spec.js +15 -0
  262. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +5 -5
  263. package/test/spec/modules/geolocationRtdProvider_spec.js +119 -0
  264. package/test/spec/modules/greenbidsRtdProvider_spec.js +1 -1
  265. package/test/spec/modules/id5IdSystem_spec.js +18 -0
  266. package/test/spec/modules/imdsBidAdapter_spec.js +98 -17
  267. package/test/spec/modules/invibesBidAdapter_spec.js +123 -32
  268. package/test/spec/modules/ixBidAdapter_spec.js +23 -5
  269. package/test/spec/modules/medianetBidAdapter_spec.js +117 -0
  270. package/test/spec/modules/outbrainBidAdapter_spec.js +3 -5
  271. package/test/spec/modules/ozoneBidAdapter_spec.js +27 -1
  272. package/test/spec/modules/prebidServerBidAdapter_spec.js +2 -20
  273. package/test/spec/modules/priceFloors_spec.js +14 -0
  274. package/test/spec/modules/pubmaticBidAdapter_spec.js +6 -373
  275. package/test/spec/modules/rubiconBidAdapter_spec.js +220 -9
  276. package/test/spec/modules/smaatoBidAdapter_spec.js +4 -6
  277. package/test/spec/modules/ssmasBidAdapter_spec.js +244 -0
  278. package/test/spec/modules/sspBCBidAdapter_spec.js +18 -19
  279. package/test/spec/modules/tripleliftBidAdapter_spec.js +40 -0
  280. package/test/spec/modules/userId_spec.js +116 -7
  281. package/test/spec/modules/vrtcalBidAdapter_spec.js +12 -4
  282. package/test/spec/modules/xeBidAdapter_spec.js +366 -368
  283. package/test/spec/modules/yahoosspBidAdapter_spec.js +5 -18
  284. package/test/spec/unit/core/bidderFactory_spec.js +61 -14
  285. package/integrationExamples/gpt/pbjs_video_adUnit.html +0 -109
@@ -242,6 +242,59 @@ export const liveIntentIdSubmodule = {
242
242
  }
243
243
 
244
244
  return { callback: result };
245
+ },
246
+ eids: {
247
+ 'lipb': {
248
+ getValue: function(data) {
249
+ return data.lipbid;
250
+ },
251
+ source: 'liveintent.com',
252
+ atype: 3,
253
+ getEidExt: function(data) {
254
+ if (Array.isArray(data.segments) && data.segments.length) {
255
+ return {
256
+ segments: data.segments
257
+ };
258
+ }
259
+ }
260
+ },
261
+ 'bidswitch': {
262
+ source: 'bidswitch.net',
263
+ atype: 3,
264
+ getValue: function(data) {
265
+ return data.id;
266
+ },
267
+ getUidExt: function(data) {
268
+ if (data.ext) {
269
+ return data.ext;
270
+ }
271
+ }
272
+ },
273
+ 'medianet': {
274
+ source: 'media.net',
275
+ atype: 3,
276
+ getValue: function(data) {
277
+ return data.id;
278
+ },
279
+ getUidExt: function(data) {
280
+ if (data.ext) {
281
+ return data.ext;
282
+ }
283
+ }
284
+ },
285
+ 'magnite': {
286
+ source: 'rubiconproject.com',
287
+ atype: 3,
288
+ getValue: function(data) {
289
+ return data.id;
290
+ },
291
+ getUidExt: function(data) {
292
+ if (data.ext) {
293
+ return data.ext;
294
+ }
295
+ }
296
+ },
297
+
245
298
  }
246
299
  };
247
300
 
@@ -368,6 +368,12 @@ export const lotamePanoramaIdSubmodule = {
368
368
 
369
369
  return { callback: resolveIdFunction };
370
370
  },
371
+ eids: {
372
+ lotamePanoramaId: {
373
+ source: 'crwdcntrl.net',
374
+ atype: 1,
375
+ },
376
+ },
371
377
  };
372
378
 
373
379
  submodule('userId', lotamePanoramaIdSubmodule);
@@ -196,6 +196,30 @@ export const merkleIdSubmodule = {
196
196
 
197
197
  logInfo('User ID - merkleId not refreshed');
198
198
  return {id: storedId};
199
+ },
200
+ eids: {
201
+ 'merkleId': {
202
+ atype: 3,
203
+ getSource: function(data) {
204
+ if (data?.ext?.ssp) {
205
+ return `${data.ext.ssp}.merkleinc.com`
206
+ }
207
+ return 'merkleinc.com'
208
+ },
209
+ getValue: function(data) {
210
+ return data.id;
211
+ },
212
+ getUidExt: function(data) {
213
+ if (data.keyID) {
214
+ return {
215
+ keyID: data.keyID
216
+ }
217
+ }
218
+ if (data.ext) {
219
+ return data.ext;
220
+ }
221
+ }
222
+ },
199
223
  }
200
224
 
201
225
  };
@@ -137,6 +137,12 @@ export const mwOpenLinkIdSubModule = {
137
137
  const submoduleConfigParams = (submoduleConfig && submoduleConfig.params) || {};
138
138
  if (!isValidConfig(submoduleConfigParams)) return undefined;
139
139
  return setID(submoduleConfigParams);
140
+ },
141
+ eids: {
142
+ 'mwOpenLinkId': {
143
+ source: 'mediawallahscript.com',
144
+ atype: 1
145
+ },
140
146
  }
141
147
  };
142
148
 
@@ -107,6 +107,12 @@ export const naveggIdSubmodule = {
107
107
  }
108
108
  }
109
109
  return undefined;
110
+ },
111
+ eids: {
112
+ 'naveggId': {
113
+ source: 'navegg.com',
114
+ atype: 1
115
+ },
110
116
  }
111
117
  };
112
118
  submodule('userId', naveggIdSubmodule);
@@ -34,6 +34,12 @@ export const netIdSubmodule = {
34
34
  getId(config) {
35
35
  /* currently not possible */
36
36
  return {};
37
+ },
38
+ eids: {
39
+ 'netId': {
40
+ source: 'netid.de',
41
+ atype: 1
42
+ },
37
43
  }
38
44
  };
39
45
 
@@ -259,6 +259,18 @@ export const novatiqIdSubmodule = {
259
259
  srcId = configParams.sourceid;
260
260
  }
261
261
  return srcId;
262
+ },
263
+ eids: {
264
+ 'novatiq': {
265
+ getValue: function(data) {
266
+ if (data.snowflake.id === undefined) {
267
+ return data.snowflake;
268
+ }
269
+
270
+ return data.snowflake.id;
271
+ },
272
+ source: 'novatiq.com',
273
+ },
262
274
  }
263
275
  };
264
276
  submodule('userId', novatiqIdSubmodule);
@@ -72,6 +72,32 @@ export const oneKeyIdSubmodule = {
72
72
  return {
73
73
  callback: getIdsAndPreferences
74
74
  };
75
+ },
76
+ eids: {
77
+ 'oneKeyData': {
78
+ getValue: function(data) {
79
+ if (data && Array.isArray(data.identifiers) && data.identifiers[0]) {
80
+ return data.identifiers[0].value;
81
+ }
82
+ },
83
+ source: 'paf',
84
+ atype: 1,
85
+ getEidExt: function(data) {
86
+ if (data && data.preferences) {
87
+ return {preferences: data.preferences};
88
+ }
89
+ },
90
+ getUidExt: function(data) {
91
+ if (data && Array.isArray(data.identifiers) && data.identifiers[0]) {
92
+ const id = data.identifiers[0];
93
+ return {
94
+ version: id.version,
95
+ type: id.type,
96
+ source: id.source
97
+ };
98
+ }
99
+ }
100
+ }
75
101
  }
76
102
  };
77
103
 
@@ -7,7 +7,8 @@ import {
7
7
  isArray,
8
8
  contains,
9
9
  mergeDeep,
10
- parseUrl
10
+ parseUrl,
11
+ generateUUID
11
12
  } from '../src/utils.js';
12
13
  import { registerBidder } from '../src/adapters/bidderFactory.js';
13
14
  import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
@@ -16,12 +17,12 @@ import {getPriceBucketString} from '../src/cpmBucketManager.js';
16
17
  import { Renderer } from '../src/Renderer.js';
17
18
  import {getRefererInfo} from '../src/refererDetection.js';
18
19
  const BIDDER_CODE = 'ozone';
19
- const ORIGIN = 'https://elb.the-ozone-project.com'; // applies only to auction & cookie
20
+ const ORIGIN = 'https://elb.the-ozone-project.com' // applies only to auction & cookie
20
21
  const AUCTIONURI = '/openrtb2/auction';
21
22
  const OZONECOOKIESYNC = '/static/load-cookie.html';
22
23
  const OZONE_RENDERER_URL = 'https://prebid.the-ozone-project.com/ozone-renderer.js';
23
24
  const ORIGIN_DEV = 'https://test.ozpr.net';
24
- const OZONEVERSION = '2.8.0';
25
+ const OZONEVERSION = '2.9.0';
25
26
  export const spec = {
26
27
  gvlid: 524,
27
28
  aliases: [{code: 'lmc', gvlid: 524}],
@@ -36,7 +37,8 @@ export const spec = {
36
37
  'keyPrefix': 'oz',
37
38
  'auctionUrl': ORIGIN + AUCTIONURI,
38
39
  'cookieSyncUrl': ORIGIN + OZONECOOKIESYNC,
39
- 'rendererUrl': OZONE_RENDERER_URL
40
+ 'rendererUrl': OZONE_RENDERER_URL,
41
+ 'batchRequests': false /* you can change this to true OR override it in the config: config.ozone.batchRequests */
40
42
  },
41
43
  loadWhitelabelData(bid) {
42
44
  if (this.propertyBag.whitelabel) { return; }
@@ -73,6 +75,9 @@ export const spec = {
73
75
  this.propertyBag.whitelabel.auctionUrl = bidderConfig.endpointOverride.auctionUrl;
74
76
  }
75
77
  }
78
+ if (bidderConfig.hasOwnProperty('batchRequests')) {
79
+ this.propertyBag.whitelabel.batchRequests = bidderConfig.batchRequests;
80
+ }
76
81
  try {
77
82
  if (arr.hasOwnProperty('auction') && arr.auction === 'dev') {
78
83
  logInfo('GET: auction=dev');
@@ -94,11 +99,14 @@ export const spec = {
94
99
  getRendererUrl() {
95
100
  return this.propertyBag.whitelabel.rendererUrl;
96
101
  },
102
+ isBatchRequests() {
103
+ return this.propertyBag.whitelabel.batchRequests;
104
+ },
97
105
  isBidRequestValid(bid) {
98
106
  this.loadWhitelabelData(bid);
99
107
  logInfo('isBidRequestValid : ', config.getConfig(), bid);
100
108
  let adUnitCode = bid.adUnitCode; // adunit[n].code
101
- let err1 = 'VALIDATION FAILED : missing {param} : siteId, placementId and publisherId are REQUIRED';
109
+ let err1 = 'VALIDATION FAILED : missing {param} : siteId, placementId and publisherId are REQUIRED'
102
110
  if (!(bid.params.hasOwnProperty('placementId'))) {
103
111
  logError(err1.replace('{param}', 'placementId'), adUnitCode);
104
112
  return false;
@@ -199,7 +207,7 @@ export const spec = {
199
207
  let placementId = placementIdOverrideFromGetParam || this.getPlacementId(ozoneBidRequest); // prefer to use a valid override param, else the bidRequest placement Id
200
208
  obj.id = ozoneBidRequest.bidId; // this causes an error if we change it to something else, even if you update the bidRequest object: "WARNING: Bidder ozone made bid for unknown request ID: mb7953.859498327448. Ignoring."
201
209
  obj.tagid = placementId;
202
- let parsed = parseUrl(getRefererInfo().page);
210
+ let parsed = parseUrl(this.getRefererInfo().page);
203
211
  obj.secure = parsed.protocol === 'https' ? 1 : 0;
204
212
  let arrBannerSizes = [];
205
213
  if (!ozoneBidRequest.hasOwnProperty('mediaTypes')) {
@@ -262,9 +270,7 @@ export const spec = {
262
270
  obj.placementId = placementId;
263
271
  deepSetValue(obj, 'ext.prebid', {'storedrequest': {'id': placementId}});
264
272
  obj.ext[whitelabelBidder] = {};
265
- // TODO: fix auctionId/transactionID leak: https://github.com/prebid/Prebid.js/issues/9781
266
273
  obj.ext[whitelabelBidder].adUnitCode = ozoneBidRequest.adUnitCode; // eg. 'mpu'
267
- obj.ext[whitelabelBidder].transactionId = ozoneBidRequest.transactionId; // this is the transactionId PER adUnit, common across bidders for this unit
268
274
  if (ozoneBidRequest.params.hasOwnProperty('customData')) {
269
275
  obj.ext[whitelabelBidder].customData = ozoneBidRequest.params.customData;
270
276
  }
@@ -291,6 +297,10 @@ export const spec = {
291
297
  if (!schain && deepAccess(ozoneBidRequest, 'schain')) {
292
298
  schain = ozoneBidRequest.schain;
293
299
  }
300
+ let gpid = deepAccess(ozoneBidRequest, 'ortb2Imp.ext.gpid');
301
+ if (gpid) {
302
+ deepSetValue(obj, 'ext.gpid', gpid);
303
+ }
294
304
  return obj;
295
305
  });
296
306
  let extObj = {};
@@ -326,7 +336,7 @@ export const spec = {
326
336
  let userExtEids = deepAccess(validBidRequests, '0.userIdAsEids', []); // generate the UserIDs in the correct format for UserId module
327
337
  ozoneRequest.site = {
328
338
  'publisher': {'id': htmlParams.publisherId},
329
- 'page': getRefererInfo().page,
339
+ 'page': this.getRefererInfo().page,
330
340
  'id': htmlParams.siteId
331
341
  };
332
342
  ozoneRequest.test = config.getConfig('debug') ? 1 : 0;
@@ -355,13 +365,33 @@ export const spec = {
355
365
  if (config.getConfig('coppa') === true) {
356
366
  deepSetValue(ozoneRequest, 'regs.coppa', 1);
357
367
  }
368
+ let ozUuid = generateUUID();
369
+ if (this.isBatchRequests()) {
370
+ logInfo('going to batch the requests');
371
+ let arrRet = []; // return an array of objects containing data describing max 10 bids
372
+ for (let i = 0; i < tosendtags.length; i += 10) {
373
+ ozoneRequest.id = ozUuid; // Unique ID of the bid request, provided by the exchange. (REQUIRED)
374
+ ozoneRequest.imp = tosendtags.slice(i, i + 10);
375
+ ozoneRequest.ext = extObj;
376
+ deepSetValue(ozoneRequest, 'user.ext.eids', userExtEids);
377
+ if (ozoneRequest.imp.length > 0) {
378
+ arrRet.push({
379
+ method: 'POST',
380
+ url: this.getAuctionUrl(),
381
+ data: JSON.stringify(ozoneRequest),
382
+ bidderRequest: bidderRequest
383
+ });
384
+ }
385
+ }
386
+ logInfo('batch request going to return : ', arrRet);
387
+ return arrRet;
388
+ }
389
+ logInfo('requests will not be batched.');
358
390
  if (singleRequest) {
359
391
  logInfo('buildRequests starting to generate response for a single request');
360
- ozoneRequest.id = bidderRequest.auctionId; // Unique ID of the bid request, provided by the exchange.
361
- ozoneRequest.auctionId = bidderRequest.auctionId; // not sure if this should be here?
392
+ ozoneRequest.id = ozUuid; // Unique ID of the bid request, provided by the exchange. (REQUIRED)
362
393
  ozoneRequest.imp = tosendtags;
363
394
  ozoneRequest.ext = extObj;
364
- deepSetValue(ozoneRequest, 'source.tid', bidderRequest.auctionId);// RTB 2.5 : tid is Transaction ID that must be common across all participants in this bid request (e.g., potentially multiple exchanges).
365
395
  deepSetValue(ozoneRequest, 'user.ext.eids', userExtEids);
366
396
  var ret = {
367
397
  method: 'POST',
@@ -377,12 +407,9 @@ export const spec = {
377
407
  let arrRet = tosendtags.map(imp => {
378
408
  logInfo('buildRequests starting to generate non-single response, working on imp : ', imp);
379
409
  let ozoneRequestSingle = Object.assign({}, ozoneRequest);
380
- imp.ext[whitelabelBidder].pageAuctionId = bidderRequest['auctionId']; // make a note in the ext object of what the original auctionId was, in the bidderRequest object
381
- ozoneRequestSingle.id = imp.ext[whitelabelBidder].transactionId; // Unique ID of the bid request, provided by the exchange.
382
- ozoneRequestSingle.auctionId = imp.ext[whitelabelBidder].transactionId; // not sure if this should be here?
410
+ ozoneRequestSingle.id = generateUUID(); // Unique ID of the bid request, provided by the exchange. (REQUIRED)
383
411
  ozoneRequestSingle.imp = [imp];
384
412
  ozoneRequestSingle.ext = extObj;
385
- deepSetValue(ozoneRequestSingle, 'source.tid', bidderRequest.auctionId);// RTB 2.5 : tid is Transaction ID that must be common across all participants in this bid request (e.g., potentially multiple exchanges).
386
413
  deepSetValue(ozoneRequestSingle, 'user.ext.eids', userExtEids);
387
414
  logInfo('buildRequests RequestSingle (for non-single) = ', ozoneRequestSingle);
388
415
  return {
@@ -424,6 +451,7 @@ export const spec = {
424
451
  logInfo(`interpretResponse time: ${startTime} . Time between buildRequests done and interpretResponse start was ${startTime - this.propertyBag.buildRequestsEnd}ms`);
425
452
  logInfo(`serverResponse, request`, JSON.parse(JSON.stringify(serverResponse)), JSON.parse(JSON.stringify(request)));
426
453
  serverResponse = serverResponse.body || {};
454
+ let aucId = serverResponse.id; // this will be correct for single requests and non-single
427
455
  if (!serverResponse.hasOwnProperty('seatbid')) {
428
456
  return [];
429
457
  }
@@ -518,7 +546,7 @@ export const spec = {
518
546
  }
519
547
  }
520
548
  let {seat: winningSeat, bid: winningBid} = ozoneGetWinnerForRequestBid(thisBid.bidId, serverResponse.seatbid);
521
- adserverTargeting[whitelabelPrefix + '_auc_id'] = String(request.bidderRequest.auctionId);
549
+ adserverTargeting[whitelabelPrefix + '_auc_id'] = String(aucId); // was request.bidderRequest.auctionId
522
550
  adserverTargeting[whitelabelPrefix + '_winner'] = String(winningSeat);
523
551
  adserverTargeting[whitelabelPrefix + '_bid'] = 'true';
524
552
  adserverTargeting[whitelabelPrefix + '_cache_id'] = deepAccess(thisBid, 'ext.prebid.targeting.hb_cache_id', 'no-id');
@@ -686,10 +714,29 @@ export const spec = {
686
714
  return null;
687
715
  },
688
716
  getGetParametersAsObject() {
689
- let parsed = parseUrl(getRefererInfo().page);
717
+ let parsed = parseUrl(this.getRefererInfo().location);
690
718
  logInfo('getGetParametersAsObject found:', parsed.search);
691
719
  return parsed.search;
692
720
  },
721
+ getRefererInfo() {
722
+ if (getRefererInfo().hasOwnProperty('location')) {
723
+ logInfo('FOUND location on getRefererInfo OK (prebid >= 7); will use getRefererInfo for location & page');
724
+ return getRefererInfo();
725
+ } else {
726
+ logInfo('DID NOT FIND location on getRefererInfo (prebid < 7); will use legacy code that ALWAYS worked reliably to get location & page ;-)');
727
+ try {
728
+ return {
729
+ page: top.location.href,
730
+ location: top.location.href
731
+ };
732
+ } catch (e) {
733
+ return {
734
+ page: window.location.href,
735
+ location: window.location.href
736
+ };
737
+ }
738
+ }
739
+ },
693
740
  blockTheRequest() {
694
741
  let ozRequest = this.getWhitelabelConfigItem('ozone.oz_request');
695
742
  if (typeof ozRequest == 'boolean' && !ozRequest) {
@@ -73,6 +73,8 @@ adUnits = [{
73
73
  }];
74
74
  ```
75
75
 
76
+
77
+ ```
76
78
  //Instream Video adUnit
77
79
 
78
80
  adUnits = [{
@@ -108,4 +110,4 @@ adUnits = [{
108
110
  }
109
111
  }]
110
112
  };
111
- ```
113
+ ```
@@ -78,6 +78,12 @@ export const pairIdSubmodule = {
78
78
  return undefined;
79
79
  }
80
80
  return {'id': ids};
81
+ },
82
+ eids: {
83
+ 'pairId': {
84
+ source: 'google.com',
85
+ atype: 571187
86
+ },
81
87
  }
82
88
  };
83
89
 
@@ -7,7 +7,17 @@
7
7
 
8
8
  // ci trigger: 1
9
9
 
10
- import {contains, deepClone, inIframe, isEmpty, isPlainObject, logError, logWarn, timestamp} from '../src/utils.js';
10
+ import {
11
+ contains,
12
+ deepClone,
13
+ inIframe,
14
+ isEmpty,
15
+ isPlainObject,
16
+ logError,
17
+ logWarn,
18
+ pick,
19
+ timestamp
20
+ } from '../src/utils.js';
11
21
  import {find} from '../src/polyfill.js';
12
22
  import {ajax} from '../src/ajax.js';
13
23
  import {submodule} from '../src/hook.js';
@@ -368,7 +378,33 @@ export const parrableIdSubmodule = {
368
378
  getId(config, gdprConsentData, currentStoredId) {
369
379
  const configParams = (config && config.params) || {};
370
380
  return fetchId(configParams, gdprConsentData);
371
- }
381
+ },
382
+ eids: {
383
+ 'parrableId': {
384
+ source: 'parrable.com',
385
+ atype: 1,
386
+ getValue: function(parrableId) {
387
+ if (parrableId.eid) {
388
+ return parrableId.eid;
389
+ }
390
+ if (parrableId.ccpaOptout) {
391
+ // If the EID was suppressed due to a non consenting ccpa optout then
392
+ // we still wish to provide this as a reason to the adapters
393
+ return '';
394
+ }
395
+ return null;
396
+ },
397
+ getUidExt: function(parrableId) {
398
+ const extendedData = pick(parrableId, [
399
+ 'ibaOptout',
400
+ 'ccpaOptout'
401
+ ]);
402
+ if (Object.keys(extendedData).length) {
403
+ return extendedData;
404
+ }
405
+ }
406
+ },
407
+ },
372
408
  };
373
409
 
374
410
  submodule('userId', parrableIdSubmodule);
@@ -140,6 +140,12 @@ export const publinkIdSubmodule = {
140
140
  if (!storedId) {
141
141
  return {callback: makeCallback(config, consentData)};
142
142
  }
143
- }
143
+ },
144
+ eids: {
145
+ 'publinkId': {
146
+ source: 'epsilon.com',
147
+ atype: 3
148
+ },
149
+ },
144
150
  };
145
151
  submodule('userId', publinkIdSubmodule);
@@ -214,6 +214,12 @@ export const quantcastIdSubmodule = {
214
214
  }
215
215
 
216
216
  return { id: fpa ? { quantcastId: fpa } : undefined };
217
+ },
218
+ eids: {
219
+ 'quantcastId': {
220
+ source: 'quantcast.com',
221
+ atype: 1
222
+ },
217
223
  }
218
224
  };
219
225
 
@@ -200,6 +200,10 @@ export const converter = ortbConverter({
200
200
  bidRequest.params.position === 'btf' && (imp.video.pos = 3);
201
201
  delete imp.ext?.prebid?.storedrequest;
202
202
 
203
+ if (bidRequest.params.bidonmultiformat === true && bidRequestType.length > 1) {
204
+ deepSetValue(imp, 'ext.prebid.bidder.rubicon.formats', bidRequestType);
205
+ }
206
+
203
207
  setBidFloors(bidRequest, imp);
204
208
 
205
209
  return imp;
@@ -497,6 +501,11 @@ export const spec = {
497
501
  data['rp_hard_floor'] = typeof floorInfo === 'object' && floorInfo.currency === 'USD' && !isNaN(parseInt(floorInfo.floor)) ? floorInfo.floor : undefined;
498
502
  }
499
503
 
504
+ // Send multiformat data if requested
505
+ if (params.bidonmultiformat === true && deepAccess(bidRequest, 'mediaTypes') && Object.keys(bidRequest.mediaTypes).length > 1) {
506
+ data['p_formats'] = Object.keys(bidRequest.mediaTypes).join(',');
507
+ }
508
+
500
509
  // add p_pos only if specified and valid
501
510
  // For SRA we need to explicitly put empty semi colons so AE treats it as empty, instead of copying the latter value
502
511
  let posMapping = {1: 'atf', 3: 'btf'};
@@ -174,6 +174,12 @@ export const sharedIdSystemSubmodule = {
174
174
  },
175
175
 
176
176
  domainOverride: domainOverrideToRootDomain(storage, 'sharedId'),
177
+ eids: {
178
+ 'pubcid': {
179
+ source: 'pubcid.org',
180
+ atype: 1
181
+ },
182
+ }
177
183
  };
178
184
 
179
185
  submodule('userId', sharedIdSystemSubmodule);
@@ -12,7 +12,7 @@ const bidderConfig = 'sp_pb_ortb';
12
12
  const bidderVersion = '1.0.0';
13
13
  const DEFAULT_CURRENCY = 'USD';
14
14
 
15
- export const REQUEST_URL = 'https://apac.chocolateplatform.com/bidder/?identifier=prebidchoc';
15
+ export const REQUEST_URL = 'https://prebid.chocolateplatform.co/bidder/?identifier=prebidchoc';
16
16
  export const SP_OUTSTREAM_PLAYER_URL = 'https://xaido.sgp1.cdn.digitaloceanspaces.com/prebid/spoutstream.min.js';
17
17
 
18
18
  const VIDEO_ORTB_PARAMS = [
@@ -110,7 +110,7 @@ export const CONVERTER = ortbConverter({
110
110
  bidResponse.meta.paf.content_id = utils.deepAccess(bid, 'ext.paf.content_id');
111
111
  }
112
112
 
113
- bidResponse = buildVideoVastResponse(bidResponse)
113
+ bidResponse = buildVideoVastResponse(bidResponse);
114
114
  bidResponse = buildVideoOutstreamResponse(bidResponse, context)
115
115
 
116
116
  return bidResponse;