prebid.js 8.4.0 → 8.6.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 (332) 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/adsinteractiveBidAdapter.js +1 -1
  16. package/dist/adtelligentIdSystem.js +1 -1
  17. package/dist/adtrgtmeBidAdapter.js +1 -1
  18. package/dist/adxcgBidAdapter.js +1 -1
  19. package/dist/adyoulikeBidAdapter.js +1 -1
  20. package/dist/ajaBidAdapter.js +1 -1
  21. package/dist/amxBidAdapter.js +1 -1
  22. package/dist/amxIdSystem.js +1 -1
  23. package/dist/appierAnalyticsAdapter.js +1 -1
  24. package/dist/appnexusBidAdapter.js +1 -1
  25. package/dist/asoBidAdapter.js +1 -1
  26. package/dist/axonixBidAdapter.js +1 -1
  27. package/dist/beachfrontBidAdapter.js +1 -1
  28. package/dist/bidglassBidAdapter.js +1 -1
  29. package/dist/big-richmediaBidAdapter.js +1 -1
  30. package/dist/bridBidAdapter.js +1 -1
  31. package/dist/bridgewellBidAdapter.js +1 -1
  32. package/dist/brightMountainMediaBidAdapter.js +1 -1
  33. package/dist/britepoolIdSystem.js +1 -1
  34. package/dist/carodaBidAdapter.js +1 -1
  35. package/dist/chtnwBidAdapter.js +1 -1
  36. package/dist/concertBidAdapter.js +1 -1
  37. package/dist/connectIdSystem.js +1 -1
  38. package/dist/connectadBidAdapter.js +1 -1
  39. package/dist/consentManagementGpp.js +1 -1
  40. package/dist/consumableBidAdapter.js +1 -1
  41. package/dist/conversantAnalyticsAdapter.js +1 -1
  42. package/dist/conversantBidAdapter.js +1 -1
  43. package/dist/craftBidAdapter.js +1 -1
  44. package/dist/criteoBidAdapter.js +1 -1
  45. package/dist/criteoIdSystem.js +1 -1
  46. package/dist/cwireBidAdapter.js +1 -1
  47. package/dist/czechAdIdSystem.js +1 -1
  48. package/dist/dacIdSystem.js +1 -1
  49. package/dist/deepintentDpesIdSystem.js +1 -1
  50. package/dist/dependencies.json +6 -0
  51. package/dist/dmdIdSystem.js +1 -1
  52. package/dist/dspxBidAdapter.js +1 -1
  53. package/dist/eplanningBidAdapter.js +1 -1
  54. package/dist/euidIdSystem.js +1 -1
  55. package/dist/fabrickIdSystem.js +1 -1
  56. package/dist/feedadBidAdapter.js +1 -1
  57. package/dist/finativeBidAdapter.js +1 -1
  58. package/dist/freewheel-sspBidAdapter.js +1 -1
  59. package/dist/ftrackIdSystem.js +1 -1
  60. package/dist/geolocationRtdProvider.js +1 -0
  61. package/dist/gmosspBidAdapter.js +1 -1
  62. package/dist/goldbachBidAdapter.js +1 -1
  63. package/dist/gravitoIdSystem.js +1 -1
  64. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  65. package/dist/greenbidsRtdProvider.js +1 -1
  66. package/dist/gridBidAdapter.js +1 -1
  67. package/dist/growthCodeAnalyticsAdapter.js +1 -1
  68. package/dist/growthCodeIdSystem.js +1 -1
  69. package/dist/gumgumBidAdapter.js +1 -1
  70. package/dist/h12mediaBidAdapter.js +1 -1
  71. package/dist/hadronIdSystem.js +1 -1
  72. package/dist/hypelabBidAdapter.js +1 -1
  73. package/dist/id5IdSystem.js +1 -1
  74. package/dist/identityLinkIdSystem.js +1 -1
  75. package/dist/idxIdSystem.js +1 -1
  76. package/dist/imdsBidAdapter.js +1 -1
  77. package/dist/improvedigitalBidAdapter.js +1 -1
  78. package/dist/imuIdSystem.js +1 -1
  79. package/dist/insticatorBidAdapter.js +1 -1
  80. package/dist/intentIqIdSystem.js +1 -1
  81. package/dist/invibesBidAdapter.js +1 -1
  82. package/dist/ixBidAdapter.js +1 -1
  83. package/dist/justIdSystem.js +1 -1
  84. package/dist/justpremiumBidAdapter.js +1 -1
  85. package/dist/kargoBidAdapter.js +1 -1
  86. package/dist/kinessoIdSystem.js +1 -1
  87. package/dist/konduitAnalyticsAdapter.js +1 -1
  88. package/dist/kueezBidAdapter.js +1 -1
  89. package/dist/kueezRtbBidAdapter.js +1 -1
  90. package/dist/kulturemediaBidAdapter.js +1 -1
  91. package/dist/lassoBidAdapter.js +1 -1
  92. package/dist/lifestreetBidAdapter.js +1 -1
  93. package/dist/liveIntentIdSystem.js +1 -1
  94. package/dist/logicadBidAdapter.js +1 -1
  95. package/dist/loglyliftBidAdapter.js +1 -1
  96. package/dist/lotamePanoramaIdSystem.js +1 -1
  97. package/dist/magniteAnalyticsAdapter.js +1 -1
  98. package/dist/malltvAnalyticsAdapter.js +1 -1
  99. package/dist/marsmediaBidAdapter.js +1 -1
  100. package/dist/mediafuseBidAdapter.js +1 -1
  101. package/dist/mediasquareBidAdapter.js +1 -1
  102. package/dist/merkleIdSystem.js +1 -1
  103. package/dist/mgidBidAdapter.js +1 -1
  104. package/dist/minutemediaBidAdapter.js +1 -1
  105. package/dist/minutemediaplusBidAdapter.js +1 -1
  106. package/dist/mspa.js +1 -1
  107. package/dist/mwOpenLinkIdSystem.js +1 -1
  108. package/dist/naveggIdSystem.js +1 -1
  109. package/dist/netIdSystem.js +1 -1
  110. package/dist/newspassidBidAdapter.js +1 -1
  111. package/dist/nexx360BidAdapter.js +1 -1
  112. package/dist/not-for-prod/prebid.js +186 -181
  113. package/dist/novatiqIdSystem.js +1 -1
  114. package/dist/oguryBidAdapter.js +1 -1
  115. package/dist/oneKeyIdSystem.js +1 -1
  116. package/dist/onetagBidAdapter.js +1 -1
  117. package/dist/ooloAnalyticsAdapter.js +1 -1
  118. package/dist/optidigitalBidAdapter.js +1 -1
  119. package/dist/outbrainBidAdapter.js +1 -1
  120. package/dist/ozoneBidAdapter.js +1 -1
  121. package/dist/pairIdSystem.js +1 -1
  122. package/dist/parrableIdSystem.js +1 -1
  123. package/dist/pixfutureBidAdapter.js +1 -1
  124. package/dist/prebid-core.js +1 -1
  125. package/dist/pubCircleBidAdapter.js +1 -0
  126. package/dist/publinkIdSystem.js +1 -1
  127. package/dist/pubmaticBidAdapter.js +1 -1
  128. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  129. package/dist/pxyzBidAdapter.js +1 -1
  130. package/dist/quantcastBidAdapter.js +1 -1
  131. package/dist/quantcastIdSystem.js +1 -1
  132. package/dist/readpeakBidAdapter.js +1 -1
  133. package/dist/relaidoBidAdapter.js +1 -1
  134. package/dist/relevadRtdProvider.js +1 -1
  135. package/dist/retailspotBidAdapter.js +1 -1
  136. package/dist/rhythmoneBidAdapter.js +1 -1
  137. package/dist/riseBidAdapter.js +1 -1
  138. package/dist/rubiconBidAdapter.js +1 -1
  139. package/dist/seedingAllianceBidAdapter.js +1 -1
  140. package/dist/seedtagBidAdapter.js +1 -1
  141. package/dist/sharedIdSystem.js +1 -1
  142. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  143. package/dist/sharethroughBidAdapter.js +1 -1
  144. package/dist/shinezBidAdapter.js +1 -1
  145. package/dist/silverpushBidAdapter.js +1 -1
  146. package/dist/smaatoBidAdapter.js +1 -1
  147. package/dist/smartadserverBidAdapter.js +1 -1
  148. package/dist/smartxBidAdapter.js +1 -1
  149. package/dist/smilewantedBidAdapter.js +1 -1
  150. package/dist/sonobiBidAdapter.js +1 -1
  151. package/dist/sovrnAnalyticsAdapter.js +1 -1
  152. package/dist/sovrnBidAdapter.js +1 -1
  153. package/dist/ssmasBidAdapter.js +1 -0
  154. package/dist/sspBCBidAdapter.js +1 -1
  155. package/dist/stvBidAdapter.js +1 -1
  156. package/dist/sublimeBidAdapter.js +1 -1
  157. package/dist/tapadIdSystem.js +1 -1
  158. package/dist/tappxBidAdapter.js +1 -1
  159. package/dist/targetVideoBidAdapter.js +1 -1
  160. package/dist/teadsBidAdapter.js +1 -1
  161. package/dist/tncIdSystem.js +1 -1
  162. package/dist/topicsFpdModule.js +1 -1
  163. package/dist/trionBidAdapter.js +1 -1
  164. package/dist/tripleliftBidAdapter.js +1 -1
  165. package/dist/ttdBidAdapter.js +1 -1
  166. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  167. package/dist/uid2IdSystem.js +1 -1
  168. package/dist/underdogmediaBidAdapter.js +1 -1
  169. package/dist/undertoneBidAdapter.js +1 -1
  170. package/dist/unifiedIdSystem.js +1 -1
  171. package/dist/userId.js +1 -1
  172. package/dist/utiqSystem.js +1 -1
  173. package/dist/verizonMediaIdSystem.js +1 -1
  174. package/dist/viantOrtbBidAdapter.js +1 -0
  175. package/dist/vidazooBidAdapter.js +1 -1
  176. package/dist/videobyteBidAdapter.js +1 -1
  177. package/dist/videojsVideoProvider.js +1 -1
  178. package/dist/visxBidAdapter.js +1 -1
  179. package/dist/vrtcalBidAdapter.js +1 -1
  180. package/dist/vuukleBidAdapter.js +1 -1
  181. package/dist/widespaceBidAdapter.js +1 -1
  182. package/dist/winrBidAdapter.js +1 -1
  183. package/dist/yahoosspBidAdapter.js +1 -1
  184. package/dist/yieldmoBidAdapter.js +1 -1
  185. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  186. package/dist/zeotapIdPlusIdSystem.js +1 -1
  187. package/integrationExamples/gpt/adUnitFloors.html +0 -1
  188. package/integrationExamples/videoModule/jwplayer/bidMarkedAsUsed.html +1 -1
  189. package/integrationExamples/videoModule/jwplayer/bidRequestScheduling.html +1 -1
  190. package/integrationExamples/videoModule/jwplayer/bidsBackHandlerOverride.html +137 -0
  191. package/integrationExamples/videoModule/jwplayer/eventListeners.html +1 -1
  192. package/integrationExamples/videoModule/jwplayer/eventsUI.html +1 -1
  193. package/integrationExamples/videoModule/jwplayer/gamAdServerMediation.html +1 -1
  194. package/integrationExamples/videoModule/jwplayer/mediaMetadata.html +1 -1
  195. package/integrationExamples/videoModule/jwplayer/playlist.html +1 -1
  196. package/integrationExamples/videoModule/videojs/bidsBackHandlerOverride.html +164 -0
  197. package/libraries/mspa/activityControls.js +51 -32
  198. package/modules/.submodules.json +1 -0
  199. package/modules/33acrossIdSystem.js +9 -0
  200. package/modules/a1MediaRtdProvider.js +92 -0
  201. package/modules/a1MediaRtdProvider.md +46 -0
  202. package/modules/adfBidAdapter.js +4 -1
  203. package/modules/adgenerationBidAdapter.js +3 -3
  204. package/modules/adkernelAdnBidAdapter.js +1 -1
  205. package/modules/adkernelBidAdapter.js +10 -3
  206. package/modules/admixerIdSystem.js +6 -0
  207. package/modules/adnuntiusBidAdapter.js +5 -13
  208. package/modules/adqueryIdSystem.js +6 -0
  209. package/modules/adsinteractiveBidAdapter.js +2 -2
  210. package/modules/adtelligentIdSystem.js +6 -0
  211. package/modules/adyoulikeBidAdapter.js +6 -3
  212. package/modules/amxIdSystem.js +6 -0
  213. package/modules/appnexusBidAdapter.js +1 -1
  214. package/modules/beachfrontBidAdapter.js +32 -6
  215. package/modules/britepoolIdSystem.js +6 -0
  216. package/modules/connectIdSystem.js +6 -0
  217. package/modules/consentManagementGpp.js +10 -1
  218. package/modules/consumableBidAdapter.js +9 -1
  219. package/modules/criteoBidAdapter.js +18 -0
  220. package/modules/criteoIdSystem.js +6 -0
  221. package/modules/cwireBidAdapter.js +19 -0
  222. package/modules/czechAdIdSystem.js +6 -0
  223. package/modules/dacIdSystem.js +6 -0
  224. package/modules/deepintentDpesIdSystem.js +7 -2
  225. package/modules/dmdIdSystem.js +6 -0
  226. package/modules/euidIdSystem.js +9 -0
  227. package/modules/fabrickIdSystem.js +6 -0
  228. package/modules/ftrackIdSystem.js +16 -0
  229. package/modules/geolocationRtdProvider.js +65 -0
  230. package/modules/gravitoIdSystem.js +6 -0
  231. package/modules/greenbidsRtdProvider.js +1 -1
  232. package/modules/growthCodeAnalyticsAdapter.js +7 -2
  233. package/modules/growthCodeIdSystem.js +20 -1
  234. package/modules/hadronIdSystem.js +6 -0
  235. package/modules/id5IdSystem.js +34 -8
  236. package/modules/identityLinkIdSystem.js +6 -0
  237. package/modules/idxIdSystem.js +6 -0
  238. package/modules/imdsBidAdapter.js +38 -14
  239. package/modules/imuIdSystem.js +10 -0
  240. package/modules/intentIqIdSystem.js +6 -0
  241. package/modules/invibesBidAdapter.js +5 -5
  242. package/modules/ixBidAdapter.js +16 -0
  243. package/modules/justIdSystem.js +6 -0
  244. package/modules/kinessoIdSystem.js +7 -2
  245. package/modules/liveIntentIdSystem.js +53 -0
  246. package/modules/lotamePanoramaIdSystem.js +6 -0
  247. package/modules/merkleIdSystem.js +24 -0
  248. package/modules/mwOpenLinkIdSystem.js +6 -0
  249. package/modules/naveggIdSystem.js +6 -0
  250. package/modules/netIdSystem.js +6 -0
  251. package/modules/newspassid.md +76 -0
  252. package/modules/newspassidBidAdapter.js +44 -18
  253. package/modules/novatiqIdSystem.js +12 -0
  254. package/modules/oneKeyIdSystem.js +26 -0
  255. package/modules/ozoneBidAdapter.js +65 -18
  256. package/modules/ozoneBidAdapter.md +3 -1
  257. package/modules/pairIdSystem.js +6 -0
  258. package/modules/parrableIdSystem.js +38 -2
  259. package/modules/pubCircleBidAdapter.js +231 -0
  260. package/modules/pubCircleBidAdapter.md +79 -0
  261. package/modules/publinkIdSystem.js +7 -1
  262. package/modules/quantcastIdSystem.js +6 -0
  263. package/modules/relevadRtdProvider.js +6 -7
  264. package/modules/rubiconBidAdapter.js +9 -0
  265. package/modules/sharedIdSystem.js +6 -0
  266. package/modules/silverpushBidAdapter.js +2 -2
  267. package/modules/ssmasBidAdapter.js +126 -0
  268. package/modules/ssmasBidAdapter.md +35 -0
  269. package/modules/sspBCBidAdapter.js +36 -13
  270. package/modules/tapadIdSystem.js +6 -0
  271. package/modules/tappxBidAdapter.js +10 -1
  272. package/modules/tappxBidAdapter.md +17 -0
  273. package/modules/tncIdSystem.js +6 -0
  274. package/modules/topicsFpdModule.js +21 -48
  275. package/modules/tripleliftBidAdapter.js +5 -0
  276. package/modules/uid2IdSystem.js +14 -0
  277. package/modules/unifiedIdSystem.js +11 -0
  278. package/modules/userId/eids.js +6 -445
  279. package/modules/userId/index.js +36 -24
  280. package/modules/utiqSystem.js +9 -0
  281. package/modules/verizonMediaIdSystem.js +6 -0
  282. package/modules/viantOrtbBidAdapter.js +113 -0
  283. package/modules/viantOrtbBidAdapter.md +54 -0
  284. package/modules/vidazooBidAdapter.js +9 -2
  285. package/modules/videojsVideoProvider.js +9 -2
  286. package/modules/vrtcalBidAdapter.js +10 -6
  287. package/modules/zeotapIdPlusIdSystem.js +6 -0
  288. package/package.json +1 -1
  289. package/src/adapters/bidderFactory.js +15 -6
  290. package/src/adloader.js +2 -1
  291. package/test/spec/libraries/mspa/activityControls_spec.js +145 -212
  292. package/test/spec/modules/a1MediaRtdProvider_spec.js +105 -0
  293. package/test/spec/modules/adfBidAdapter_spec.js +47 -0
  294. package/test/spec/modules/adgenerationBidAdapter_spec.js +6 -6
  295. package/test/spec/modules/adkernelAdnBidAdapter_spec.js +1 -2
  296. package/test/spec/modules/adkernelBidAdapter_spec.js +7 -2
  297. package/test/spec/modules/adnuntiusBidAdapter_spec.js +116 -64
  298. package/test/spec/modules/adyoulikeBidAdapter_spec.js +13 -24
  299. package/test/spec/modules/appnexusBidAdapter_spec.js +12 -1
  300. package/test/spec/modules/beachfrontBidAdapter_spec.js +35 -2
  301. package/test/spec/modules/consentManagementGpp_spec.js +16 -0
  302. package/test/spec/modules/consumableBidAdapter_spec.js +15 -0
  303. package/test/spec/modules/criteoBidAdapter_spec.js +31 -3
  304. package/test/spec/modules/cwireBidAdapter_spec.js +47 -0
  305. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +5 -5
  306. package/test/spec/modules/geolocationRtdProvider_spec.js +119 -0
  307. package/test/spec/modules/greenbidsRtdProvider_spec.js +1 -1
  308. package/test/spec/modules/id5IdSystem_spec.js +18 -0
  309. package/test/spec/modules/imdsBidAdapter_spec.js +98 -17
  310. package/test/spec/modules/invibesBidAdapter_spec.js +123 -32
  311. package/test/spec/modules/ixBidAdapter_spec.js +23 -5
  312. package/test/spec/modules/medianetBidAdapter_spec.js +117 -0
  313. package/test/spec/modules/newspassidBidAdapter_spec.js +6 -0
  314. package/test/spec/modules/outbrainBidAdapter_spec.js +3 -5
  315. package/test/spec/modules/ozoneBidAdapter_spec.js +27 -1
  316. package/test/spec/modules/prebidServerBidAdapter_spec.js +2 -20
  317. package/test/spec/modules/priceFloors_spec.js +14 -0
  318. package/test/spec/modules/pubCircleBidAdapter_spec.js +399 -0
  319. package/test/spec/modules/pubmaticBidAdapter_spec.js +6 -373
  320. package/test/spec/modules/rubiconBidAdapter_spec.js +220 -9
  321. package/test/spec/modules/smaatoBidAdapter_spec.js +4 -6
  322. package/test/spec/modules/ssmasBidAdapter_spec.js +244 -0
  323. package/test/spec/modules/sspBCBidAdapter_spec.js +18 -19
  324. package/test/spec/modules/topicsFpdModule_spec.js +343 -365
  325. package/test/spec/modules/tripleliftBidAdapter_spec.js +40 -0
  326. package/test/spec/modules/userId_spec.js +116 -7
  327. package/test/spec/modules/viantOrtbBidAdapter_spec.js +432 -0
  328. package/test/spec/modules/vrtcalBidAdapter_spec.js +12 -4
  329. package/test/spec/modules/xeBidAdapter_spec.js +366 -368
  330. package/test/spec/modules/yahoosspBidAdapter_spec.js +5 -18
  331. package/test/spec/unit/core/bidderFactory_spec.js +61 -14
  332. package/integrationExamples/gpt/pbjs_video_adUnit.html +0 -109
@@ -788,7 +788,7 @@ function bidToTag(bid) {
788
788
  tag.keywords = auKeywords;
789
789
  }
790
790
 
791
- let gpid = deepAccess(bid, 'ortb2Imp.ext.data.pbadslot');
791
+ let gpid = deepAccess(bid, 'ortb2Imp.ext.gpid') || deepAccess(bid, 'ortb2Imp.ext.data.pbadslot');
792
792
  if (gpid) {
793
793
  tag.gpid = gpid;
794
794
  }
@@ -7,14 +7,15 @@ import {
7
7
  isFn,
8
8
  logWarn,
9
9
  parseSizesInput,
10
- parseUrl
10
+ parseUrl,
11
+ formatQS
11
12
  } from '../src/utils.js';
12
13
  import {registerBidder} from '../src/adapters/bidderFactory.js';
13
14
  import {Renderer} from '../src/Renderer.js';
14
15
  import {BANNER, VIDEO} from '../src/mediaTypes.js';
15
16
  import {find, includes} from '../src/polyfill.js';
16
17
 
17
- const ADAPTER_VERSION = '1.19';
18
+ const ADAPTER_VERSION = '1.20';
18
19
  const ADAPTER_NAME = 'BFIO_PREBID';
19
20
  const OUTSTREAM = 'outstream';
20
21
  const CURRENCY = 'USD';
@@ -22,6 +23,8 @@ const CURRENCY = 'USD';
22
23
  export const VIDEO_ENDPOINT = 'https://reachms.bfmio.com/bid.json?exchange_id=';
23
24
  export const BANNER_ENDPOINT = 'https://display.bfmio.com/prebid_display';
24
25
  export const OUTSTREAM_SRC = 'https://player-cdn.beachfrontmedia.com/playerapi/loader/outstream.js';
26
+ export const SYNC_IFRAME_ENDPOINT = 'https://sync.bfmio.com/sync_iframe';
27
+ export const SYNC_IMAGE_ENDPOINT = 'https://sync.bfmio.com/syncb';
25
28
 
26
29
  export const VIDEO_TARGETING = ['mimes', 'playbackmethod', 'maxduration', 'placement', 'skip', 'skipmin', 'skipafter'];
27
30
  export const DEFAULT_MIMES = ['video/mp4', 'application/javascript'];
@@ -152,11 +155,22 @@ export const spec = {
152
155
  }
153
156
  },
154
157
 
155
- getUserSyncs(syncOptions, serverResponses = [], gdprConsent = {}, uspConsent = '') {
156
- let syncs = [];
158
+ getUserSyncs(syncOptions, serverResponses = [], gdprConsent = {}, uspConsent = '', gppConsent = {}) {
157
159
  let { gdprApplies, consentString = '' } = gdprConsent;
160
+ let { gppString = '', applicableSections = [] } = gppConsent;
158
161
  let bannerResponse = find(serverResponses, (res) => isArray(res.body));
159
162
 
163
+ let syncs = [];
164
+ let params = {
165
+ id: appId,
166
+ gdpr: gdprApplies ? 1 : 0,
167
+ gc: consentString,
168
+ gce: 1,
169
+ us_privacy: uspConsent,
170
+ gpp: gppString,
171
+ gpp_sid: Array.isArray(applicableSections) ? applicableSections.join(',') : ''
172
+ };
173
+
160
174
  if (bannerResponse) {
161
175
  if (syncOptions.iframeEnabled) {
162
176
  bannerResponse.body
@@ -171,12 +185,12 @@ export const spec = {
171
185
  } else if (syncOptions.iframeEnabled) {
172
186
  syncs.push({
173
187
  type: 'iframe',
174
- url: `https://sync.bfmio.com/sync_iframe?ifg=1&id=${appId}&gdpr=${gdprApplies ? 1 : 0}&gc=${consentString}&gce=1&us_privacy=${uspConsent}`
188
+ url: `${SYNC_IFRAME_ENDPOINT}?ifg=1&${formatQS(params)}`
175
189
  });
176
190
  } else if (syncOptions.pixelEnabled) {
177
191
  syncs.push({
178
192
  type: 'image',
179
- url: `https://sync.bfmio.com/syncb?pid=144&id=${appId}&gdpr=${gdprApplies ? 1 : 0}&gc=${consentString}&gce=1&us_privacy=${uspConsent}`
193
+ url: `${SYNC_IMAGE_ENDPOINT}?pid=144&${formatQS(params)}`
180
194
  });
181
195
  }
182
196
 
@@ -404,6 +418,12 @@ function createVideoRequestData(bid, bidderRequest) {
404
418
  deepSetValue(payload, 'user.ext.consent', consentString);
405
419
  }
406
420
 
421
+ if (bidderRequest && bidderRequest.gppConsent) {
422
+ let { gppString, applicableSections } = bidderRequest.gppConsent;
423
+ deepSetValue(payload, 'regs.gpp', gppString);
424
+ deepSetValue(payload, 'regs.gpp_sid', applicableSections);
425
+ }
426
+
407
427
  if (bid.schain) {
408
428
  deepSetValue(payload, 'source.ext.schain', bid.schain);
409
429
  }
@@ -459,6 +479,12 @@ function createBannerRequestData(bids, bidderRequest) {
459
479
  payload.gdprConsent = consentString;
460
480
  }
461
481
 
482
+ if (bidderRequest && bidderRequest.gppConsent) {
483
+ let { gppString, applicableSections } = bidderRequest.gppConsent;
484
+ payload.gpp = gppString;
485
+ payload.gppSid = applicableSections;
486
+ }
487
+
462
488
  if (bids[0] && bids[0].schain) {
463
489
  payload.schain = bids[0].schain;
464
490
  }
@@ -136,6 +136,12 @@ export const britepoolIdSubmodule = {
136
136
  }
137
137
  }
138
138
  return valueObj;
139
+ },
140
+ eids: {
141
+ 'britepoolid': {
142
+ source: 'britepool.com',
143
+ atype: 3
144
+ },
139
145
  }
140
146
  };
141
147
 
@@ -294,6 +294,12 @@ export const connectIdSubmodule = {
294
294
  */
295
295
  getAjaxFn() {
296
296
  return ajax;
297
+ },
298
+ eids: {
299
+ 'connectId': {
300
+ source: 'yahoo.com',
301
+ atype: 3
302
+ },
297
303
  }
298
304
  };
299
305
 
@@ -71,11 +71,20 @@ export function lookupIabConsent({onSuccess, onError}, mkClient = cmpClient) {
71
71
  : 'Detected GPP CMP is outside the current iframe where Prebid.js is located, calling it now...';
72
72
  logInfo(startupMsg);
73
73
 
74
+ let versionMismatch = false;
75
+
74
76
  cmp({
75
77
  command: 'addEventListener',
76
78
  callback: function (evt) {
77
- if (evt) {
79
+ if (evt && !versionMismatch) {
78
80
  logInfo(`Received a ${(cmp.isDirect ? 'direct' : 'postmsg')} response from GPP CMP for event`, evt);
81
+ const cmpVer = evt?.pingData?.gppVersion;
82
+ if (cmpVer != null && cmpVer !== '1.0') {
83
+ logWarn(`Unsupported GPP CMP version: ${cmpVer}. Continuing auction without consent`);
84
+ versionMismatch = true;
85
+ onSuccess(storeConsentData());
86
+ return;
87
+ }
79
88
  if (evt.eventName === 'sectionChange' || evt.pingData.cmpStatus === 'loaded') {
80
89
  cmp({command: 'getGPPData'}).then((gppData) => {
81
90
  logInfo(`Received a ${cmp.isDirect ? 'direct' : 'postmsg'} response from GPP CMP for getGPPData`, gppData);
@@ -65,6 +65,11 @@ export const spec = {
65
65
  };
66
66
  }
67
67
 
68
+ if (bidderRequest && bidderRequest.gppConsent && bidderRequest.gppConsent.gppString) {
69
+ data.gpp = bidderRequest.gppConsent.gppString;
70
+ data.gpp_sid = bidderRequest.gppConsent.applicableSections;
71
+ }
72
+
68
73
  if (bidderRequest && bidderRequest.uspConsent) {
69
74
  data.ccpa = bidderRequest.uspConsent;
70
75
  }
@@ -180,7 +185,7 @@ export const spec = {
180
185
  return bidResponses;
181
186
  },
182
187
 
183
- getUserSyncs: function(syncOptions, serverResponses, gdprConsent, uspConsent) {
188
+ getUserSyncs: function(syncOptions, serverResponses, gdprConsent, uspConsent, gppConsent) {
184
189
  let syncUrl = 'https://sync.serverbid.com/ss/' + siteId + '.html';
185
190
 
186
191
  if (syncOptions.iframeEnabled) {
@@ -191,6 +196,9 @@ export const spec = {
191
196
  syncUrl = appendUrlParam(syncUrl, `gdpr=0&gdpr_consent=${gdprConsent.consentString}`);
192
197
  }
193
198
  }
199
+ if (gppConsent && gppConsent.gppString) {
200
+ syncUrl = appendUrlParam(syncUrl, `gpp=${gppConsent.gppString}&gpp_sid=${gppConsent.applicableSections}`);
201
+ }
194
202
 
195
203
  if (uspConsent && uspConsent.consentString) {
196
204
  syncUrl = appendUrlParam(syncUrl, `us_privacy=${uspConsent.consentString}`);
@@ -10,6 +10,7 @@ import { getRefererInfo } from '../src/refererDetection.js';
10
10
  import { hasPurpose1Consent } from '../src/utils/gpdr.js';
11
11
  import { Renderer } from '../src/Renderer.js';
12
12
  import { OUTSTREAM } from '../src/video.js';
13
+ import { ajax } from '../src/ajax.js';
13
14
 
14
15
  const GVLID = 91;
15
16
  export const ADAPTER_VERSION = 36;
@@ -306,6 +307,23 @@ export const spec = {
306
307
  adapter.handleSetTargeting(bid);
307
308
  }
308
309
  },
310
+
311
+ /**
312
+ * @param {BidRequest[]} bidRequests
313
+ */
314
+ onDataDeletionRequest: (bidRequests) => {
315
+ const id = readFromAllStorages(BUNDLE_COOKIE_NAME);
316
+ if (id) {
317
+ deleteFromAllStorages(BUNDLE_COOKIE_NAME);
318
+ }
319
+ ajax('https://privacy.criteo.com/api/privacy/datadeletionrequest',
320
+ null,
321
+ JSON.stringify({ publisherUserId: id }),
322
+ {
323
+ contentType: 'application/json',
324
+ method: 'POST'
325
+ });
326
+ }
309
327
  };
310
328
 
311
329
  function readFromAllStorages(name) {
@@ -216,6 +216,12 @@ export const criteoIdSubmodule = {
216
216
  id: localData.bidId ? { criteoId: localData.bidId } : undefined,
217
217
  callback: result
218
218
  }
219
+ },
220
+ eids: {
221
+ 'criteoId': {
222
+ source: 'criteo.com',
223
+ atype: 1
224
+ },
219
225
  }
220
226
  };
221
227
 
@@ -2,6 +2,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js';
2
2
  import {getStorageManager} from '../src/storageManager.js';
3
3
  import {BANNER} from '../src/mediaTypes.js';
4
4
  import {generateUUID, getParameterByName, isNumber, logError, logInfo} from '../src/utils.js';
5
+ import {hasPurpose1Consent} from '../src/utils/gpdr.js';
5
6
 
6
7
  // ------------------------------------
7
8
  const BIDDER_CODE = 'cwire';
@@ -230,5 +231,23 @@ export const spec = {
230
231
  navigator.sendBeacon(EVENT_ENDPOINT, JSON.stringify(event))
231
232
  },
232
233
 
234
+ getUserSyncs: function(syncOptions, serverResponses, gdprConsent, uspConsent) {
235
+ logInfo('Collecting user-syncs: ', JSON.stringify({syncOptions, gdprConsent, uspConsent, serverResponses}));
236
+
237
+ const syncs = []
238
+ if (hasPurpose1Consent(gdprConsent)) {
239
+ logInfo('GDPR purpose 1 consent was given, adding user-syncs')
240
+ let type = (syncOptions.pixelEnabled) ? 'image' : null ?? (syncOptions.iframeEnabled) ? 'iframe' : null
241
+ if (type) {
242
+ syncs.push({
243
+ type: type,
244
+ url: 'https://ib.adnxs.com/getuid?https://prebid.cwi.re/v1/cookiesync?xandrId=$UID'
245
+ })
246
+ }
247
+ }
248
+ logInfo('Collected user-syncs: ', JSON.stringify({syncs}))
249
+ return syncs
250
+ }
251
+
233
252
  };
234
253
  registerBidder(spec);
@@ -42,6 +42,12 @@ export const czechAdIdSubmodule = {
42
42
  getId () {
43
43
  const id = readId()
44
44
  return id ? { id: id } : undefined
45
+ },
46
+ eids: {
47
+ 'czechAdId': {
48
+ source: 'czechadid.cz',
49
+ atype: 1
50
+ },
45
51
  }
46
52
  }
47
53
 
@@ -170,6 +170,12 @@ export const dacIdSystemSubmodule = {
170
170
  }
171
171
 
172
172
  return fetchAoneId(configParams.oid, cookie.fuuid);
173
+ },
174
+ eids: {
175
+ 'dacId': {
176
+ source: 'impact-ad.jp',
177
+ atype: 1
178
+ },
173
179
  }
174
180
  };
175
181
 
@@ -39,8 +39,13 @@ export const deepintentDpesSubmodule = {
39
39
  */
40
40
  getId(config, consentData, cacheIdObj) {
41
41
  return cacheIdObj;
42
- }
43
-
42
+ },
43
+ eids: {
44
+ 'deepintentId': {
45
+ source: 'deepintent.com',
46
+ atype: 3
47
+ },
48
+ },
44
49
  };
45
50
 
46
51
  submodule('userId', deepintentDpesSubmodule);
@@ -85,6 +85,12 @@ export const dmdIdSubmodule = {
85
85
  };
86
86
  return { callback: resp };
87
87
  }
88
+ },
89
+ eids: {
90
+ 'dmdId': {
91
+ source: 'hcn.health',
92
+ atype: 3
93
+ },
88
94
  }
89
95
  };
90
96
 
@@ -103,6 +103,15 @@ export const euidIdSubmodule = {
103
103
  _logInfo(`EUID getId returned`, result);
104
104
  return result;
105
105
  },
106
+ eids: {
107
+ 'euid': {
108
+ source: 'euid.eu',
109
+ atype: 3,
110
+ getValue: function(data) {
111
+ return data.id;
112
+ }
113
+ },
114
+ },
106
115
  };
107
116
 
108
117
  function decodeImpl(value) {
@@ -117,6 +117,12 @@ export const fabrickIdSubmodule = {
117
117
  } catch (e) {
118
118
  logError(`fabrickIdSystem encountered an error`, e);
119
119
  }
120
+ },
121
+ eids: {
122
+ 'fabrickId': {
123
+ source: 'neustar.biz',
124
+ atype: 1
125
+ },
120
126
  }
121
127
  };
122
128
 
@@ -221,6 +221,22 @@ export const ftrackIdSubmodule = {
221
221
  if (usPrivacyVersion == 1 && usPrivacyOptOutSale === 'Y') consentValue = false;
222
222
 
223
223
  return consentValue;
224
+ },
225
+ eids: {
226
+ 'ftrackId': {
227
+ source: 'flashtalking.com',
228
+ atype: 1,
229
+ getValue: function(data) {
230
+ let value = '';
231
+ if (data && data.ext && data.ext.DeviceID) {
232
+ value = data.ext.DeviceID;
233
+ }
234
+ return value;
235
+ },
236
+ getUidExt: function(data) {
237
+ return data && data.ext;
238
+ }
239
+ },
224
240
  }
225
241
  };
226
242
 
@@ -0,0 +1,65 @@
1
+ import {submodule} from '../src/hook.js';
2
+ import {isFn, logError, deepAccess, deepSetValue, logInfo, logWarn} from '../src/utils.js';
3
+ import { ACTIVITY_TRANSMIT_PRECISE_GEO } from '../src/activities/activities.js';
4
+ import { MODULE_TYPE_RTD } from '../src/activities/modules.js';
5
+ import { isActivityAllowed } from '../src/activities/rules.js';
6
+ import { activityParams } from '../src/activities/activityParams.js';
7
+
8
+ let permissionsAvailable = true;
9
+ let geolocation;
10
+ function getGeolocationData(requestBidsObject, onDone, providerConfig, userConsent) {
11
+ let done = false;
12
+ if (!permissionsAvailable) {
13
+ logWarn('permission for geolocation receiving was denied');
14
+ return complete()
15
+ };
16
+ if (!isActivityAllowed(ACTIVITY_TRANSMIT_PRECISE_GEO, activityParams(MODULE_TYPE_RTD, 'geolocation'))) {
17
+ logWarn('permission for geolocation receiving was denied by CMP');
18
+ return complete()
19
+ };
20
+ const requestPermission = deepAccess(providerConfig, 'params.requestPermission') === true;
21
+ const waitForIt = providerConfig.waitForIt;
22
+ navigator.permissions.query({
23
+ name: 'geolocation',
24
+ }).then(permission => {
25
+ if (permission.state !== 'granted' && !requestPermission) return complete();
26
+ navigator.geolocation.getCurrentPosition(geo => {
27
+ geolocation = geo;
28
+ complete();
29
+ });
30
+ });
31
+ if (!waitForIt) complete();
32
+ function complete() {
33
+ if (done) return;
34
+ done = true;
35
+ if (geolocation) {
36
+ deepSetValue(requestBidsObject, 'ortb2Fragments.global.device.geo', {
37
+ lat: geolocation.coords.latitude,
38
+ lon: geolocation.coords.longitude,
39
+ lastfix: geolocation.timestamp,
40
+ type: 1
41
+ });
42
+ logInfo('geolocation was successfully received ', requestBidsObject.ortb2Fragments.global.device.geo)
43
+ }
44
+ onDone();
45
+ }
46
+ }
47
+ function init(moduleConfig) {
48
+ geolocation = void 0;
49
+ if (!isFn(navigator?.permissions?.query) || !isFn(navigator?.geolocation?.getCurrentPosition || !navigator?.permissions?.query)) {
50
+ logError('geolocation is not defined');
51
+ permissionsAvailable = false;
52
+ } else {
53
+ permissionsAvailable = true;
54
+ }
55
+ return permissionsAvailable;
56
+ }
57
+ export const geolocationSubmodule = {
58
+ name: 'geolocation',
59
+ getBidRequestData: getGeolocationData,
60
+ init: init,
61
+ };
62
+ function registerSubModule() {
63
+ submodule('realTimeData', geolocationSubmodule);
64
+ }
65
+ registerSubModule();
@@ -53,6 +53,12 @@ export const gravitoIdSystemSubmodule = {
53
53
  }
54
54
  return undefined;
55
55
  },
56
+ eids: {
57
+ 'gravitompId': {
58
+ source: 'gravito.net',
59
+ atype: 1
60
+ },
61
+ }
56
62
  }
57
63
 
58
64
  submodule('userId', gravitoIdSystemSubmodule);
@@ -4,7 +4,7 @@ import { submodule } from '../src/hook.js';
4
4
 
5
5
  const MODULE_NAME = 'greenbidsRtdProvider';
6
6
  const MODULE_VERSION = '1.0.0';
7
- const ENDPOINT = 'https://europe-west1-greenbids-357713.cloudfunctions.net/partner-selection';
7
+ const ENDPOINT = 'https://t.greenbids.ai';
8
8
 
9
9
  const auctionInfo = {};
10
10
  const rtdOptions = {};
@@ -30,8 +30,8 @@ let bidRequestTimeout = 0;
30
30
  let analyticsType = 'endpoint';
31
31
 
32
32
  let growthCodeAnalyticsAdapter = Object.assign(adapter({url: url, analyticsType}), {
33
- track({eventType, eventData}) {
34
- eventData = eventData ? JSON.parse(JSON.stringify(eventData)) : {};
33
+ track({eventType, args}) {
34
+ let eventData = args ? JSON.parse(JSON.stringify(args)) : {};
35
35
  let data = {};
36
36
  if (!trackEvents.includes(eventType)) return;
37
37
  switch (eventType) {
@@ -98,6 +98,11 @@ let growthCodeAnalyticsAdapter = Object.assign(adapter({url: url, analyticsType}
98
98
  break;
99
99
  }
100
100
 
101
+ case CONSTANTS.EVENTS.NO_BID: {
102
+ data = eventData
103
+ break;
104
+ }
105
+
101
106
  default:
102
107
  return;
103
108
  }
@@ -5,7 +5,7 @@
5
5
  * @requires module:modules/userId
6
6
  */
7
7
 
8
- import {logError, logInfo, tryAppendQueryString} from '../src/utils.js';
8
+ import {logError, logInfo, pick, tryAppendQueryString} from '../src/utils.js';
9
9
  import {ajax} from '../src/ajax.js';
10
10
  import { submodule } from '../src/hook.js'
11
11
  import {getStorageManager} from '../src/storageManager.js';
@@ -166,6 +166,25 @@ export const growthCodeIdSubmodule = {
166
166
  }
167
167
  };
168
168
  return { callback: resp };
169
+ },
170
+ eids: {
171
+ 'growthCodeId': {
172
+ getValue: function(data) {
173
+ return data.gc_id
174
+ },
175
+ source: 'growthcode.io',
176
+ atype: 1,
177
+ getUidExt: function(data) {
178
+ const extendedData = pick(data, [
179
+ 'h1',
180
+ 'h2',
181
+ 'h3',
182
+ ]);
183
+ if (Object.keys(extendedData).length) {
184
+ return extendedData;
185
+ }
186
+ }
187
+ },
169
188
  }
170
189
  };
171
190
 
@@ -110,6 +110,12 @@ export const hadronIdSubmodule = {
110
110
  ajax(url, callbacks, undefined, {method: 'GET'});
111
111
  };
112
112
  return {callback: resp};
113
+ },
114
+ eids: {
115
+ 'hadronId': {
116
+ source: 'audigent.com',
117
+ atype: 1
118
+ },
113
119
  }
114
120
  };
115
121
 
@@ -108,7 +108,7 @@ export const id5IdSubmodule = {
108
108
  * @returns {IdResponse|undefined}
109
109
  */
110
110
  getId(submoduleConfig, consentData, cacheIdObj) {
111
- if (!hasRequiredConfig(submoduleConfig)) {
111
+ if (!validateConfig(submoduleConfig)) {
112
112
  return undefined;
113
113
  }
114
114
 
@@ -142,19 +142,31 @@ export const id5IdSubmodule = {
142
142
  * @return {(IdResponse|function(callback:function))} A response object that contains id and/or callback.
143
143
  */
144
144
  extendId(config, consentData, cacheIdObj) {
145
- hasRequiredConfig(config);
146
-
147
145
  if (!hasWriteConsentToLocalStorage(consentData)) {
148
146
  logInfo(LOG_PREFIX + 'No consent given for ID5 local storage writing, skipping nb increment.')
149
147
  return cacheIdObj;
150
148
  }
151
149
 
152
- const partnerId = (config && config.params && config.params.partner) || 0;
150
+ const partnerId = validateConfig(config) ? config.params.partner : 0;
153
151
  incrementNb(partnerId);
154
152
 
155
153
  logInfo(LOG_PREFIX + 'using cached ID', cacheIdObj);
156
154
  return cacheIdObj;
157
- }
155
+ },
156
+ eids: {
157
+ 'id5id': {
158
+ getValue: function(data) {
159
+ return data.uid
160
+ },
161
+ source: 'id5-sync.com',
162
+ atype: 1,
163
+ getUidExt: function(data) {
164
+ if (data.ext) {
165
+ return data.ext;
166
+ }
167
+ }
168
+ },
169
+ },
158
170
  };
159
171
 
160
172
  class IdFetchFlow {
@@ -293,9 +305,23 @@ class IdFetchFlow {
293
305
  }
294
306
  }
295
307
 
296
- function hasRequiredConfig(config) {
297
- if (!config || !config.params || !config.params.partner || typeof config.params.partner !== 'number') {
298
- logError(LOG_PREFIX + 'partner required to be defined as a number');
308
+ function validateConfig(config) {
309
+ if (!config || !config.params || !config.params.partner) {
310
+ logError(LOG_PREFIX + 'partner required to be defined');
311
+ return false;
312
+ }
313
+
314
+ const partner = config.params.partner
315
+ if (typeof partner === 'string' || partner instanceof String) {
316
+ let parsedPartnerId = parseInt(partner);
317
+ if (isNaN(parsedPartnerId) || parsedPartnerId < 0) {
318
+ logError(LOG_PREFIX + 'partner required to be a number or a String parsable to a positive integer');
319
+ return false;
320
+ } else {
321
+ config.params.partner = parsedPartnerId;
322
+ }
323
+ } else if (typeof partner !== 'number') {
324
+ logError(LOG_PREFIX + 'partner required to be a number or a String parsable to a positive integer');
299
325
  return false;
300
326
  }
301
327
 
@@ -79,6 +79,12 @@ export const identityLinkSubmodule = {
79
79
  };
80
80
 
81
81
  return { callback: resp };
82
+ },
83
+ eids: {
84
+ 'idl_env': {
85
+ source: 'liveramp.com',
86
+ atype: 3
87
+ },
82
88
  }
83
89
  };
84
90
  // return envelope from third party endpoint
@@ -57,6 +57,12 @@ export const idxIdSubmodule = {
57
57
  }
58
58
  }
59
59
  return undefined;
60
+ },
61
+ eids: {
62
+ 'idx': {
63
+ source: 'idx.lat',
64
+ atype: 1
65
+ },
60
66
  }
61
67
  };
62
68
  submodule('userId', idxIdSubmodule);