prebid.js 8.7.0 → 8.9.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 (350) hide show
  1. package/dist/1plusXRtdProvider.js +1 -1
  2. package/dist/33acrossBidAdapter.js +1 -1
  3. package/dist/33acrossIdSystem.js +1 -1
  4. package/dist/a1MediaRtdProvider.js +1 -1
  5. package/dist/adWMGAnalyticsAdapter.js +1 -1
  6. package/dist/adagioBidAdapter.js +1 -1
  7. package/dist/adbookpspBidAdapter.js +1 -1
  8. package/dist/adgenerationBidAdapter.js +1 -1
  9. package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
  10. package/dist/adlooxAdServerVideo.js +1 -1
  11. package/dist/adlooxRtdProvider.js +1 -1
  12. package/dist/admaticBidAdapter.js +1 -1
  13. package/dist/admixerIdSystem.js +1 -1
  14. package/dist/adnuntiusRtdProvider.js +1 -1
  15. package/dist/adpartnerBidAdapter.js +1 -1
  16. package/dist/adqueryBidAdapter.js +1 -1
  17. package/dist/adqueryIdSystem.js +1 -1
  18. package/dist/adrelevantisBidAdapter.js +1 -1
  19. package/dist/adriverIdSystem.js +1 -1
  20. package/dist/adtelligentIdSystem.js +1 -1
  21. package/dist/adtrgtmeBidAdapter.js +1 -1
  22. package/dist/adxcgAnalyticsAdapter.js +1 -1
  23. package/dist/adxcgBidAdapter.js +1 -1
  24. package/dist/adxpremiumAnalyticsAdapter.js +1 -1
  25. package/dist/adyoulikeBidAdapter.js +1 -1
  26. package/dist/aidemBidAdapter.js +1 -1
  27. package/dist/ajaBidAdapter.js +1 -1
  28. package/dist/akamaiDapRtdProvider.js +1 -1
  29. package/dist/alkimiBidAdapter.js +1 -1
  30. package/dist/amxBidAdapter.js +1 -1
  31. package/dist/amxIdSystem.js +1 -1
  32. package/dist/analyticsAdapter.js +1 -1
  33. package/dist/appierAnalyticsAdapter.js +1 -1
  34. package/dist/appnexusBidAdapter.js +1 -1
  35. package/dist/asoBidAdapter.js +1 -1
  36. package/dist/atsAnalyticsAdapter.js +1 -1
  37. package/dist/automatadBidAdapter.js +1 -1
  38. package/dist/axonixBidAdapter.js +1 -1
  39. package/dist/bidViewability.js +1 -1
  40. package/dist/bidglassBidAdapter.js +1 -1
  41. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  42. package/dist/big-richmediaBidAdapter.js +1 -1
  43. package/dist/brandmetricsRtdProvider.js +1 -1
  44. package/dist/bridBidAdapter.js +1 -1
  45. package/dist/bridgewellBidAdapter.js +1 -1
  46. package/dist/brightMountainMediaBidAdapter.js +1 -1
  47. package/dist/brightcomSSPBidAdapter.js +1 -1
  48. package/dist/britepoolIdSystem.js +1 -1
  49. package/dist/browsiRtdProvider.js +1 -1
  50. package/dist/byDataAnalyticsAdapter.js +1 -1
  51. package/dist/carodaBidAdapter.js +1 -1
  52. package/dist/categoryTranslation.js +1 -1
  53. package/dist/chtnwBidAdapter.js +1 -1
  54. package/dist/colossussspBidAdapter.js +1 -1
  55. package/dist/concertAnalyticsAdapter.js +1 -1
  56. package/dist/concertBidAdapter.js +1 -1
  57. package/dist/connectIdSystem.js +1 -1
  58. package/dist/connectadBidAdapter.js +1 -1
  59. package/dist/consumableBidAdapter.js +1 -1
  60. package/dist/conversantAnalyticsAdapter.js +1 -1
  61. package/dist/conversantBidAdapter.js +1 -1
  62. package/dist/craftBidAdapter.js +1 -1
  63. package/dist/criteoBidAdapter.js +1 -1
  64. package/dist/criteoIdSystem.js +1 -1
  65. package/dist/currency.js +1 -1
  66. package/dist/cwireBidAdapter.js +1 -1
  67. package/dist/dacIdSystem.js +1 -1
  68. package/dist/dailyhuntBidAdapter.js +1 -1
  69. package/dist/datablocksBidAdapter.js +1 -1
  70. package/dist/dependencies.json +4 -1
  71. package/dist/dgkeywordRtdProvider.js +1 -1
  72. package/dist/dmdIdSystem.js +1 -1
  73. package/dist/dspxBidAdapter.js +1 -1
  74. package/dist/eplanningAnalyticsAdapter.js +1 -1
  75. package/dist/eplanningBidAdapter.js +1 -1
  76. package/dist/euidIdSystem.js +1 -1
  77. package/dist/fabrickIdSystem.js +1 -1
  78. package/dist/feedadBidAdapter.js +1 -1
  79. package/dist/finativeBidAdapter.js +1 -1
  80. package/dist/fintezaAnalyticsAdapter.js +1 -1
  81. package/dist/fledgeForGpt.js +1 -1
  82. package/dist/freewheel-sspBidAdapter.js +1 -1
  83. package/dist/genericAnalyticsAdapter.js +1 -1
  84. package/dist/geoedgeRtdProvider.js +1 -1
  85. package/dist/gmosspBidAdapter.js +1 -1
  86. package/dist/gnetBidAdapter.js +1 -1
  87. package/dist/goldbachBidAdapter.js +1 -1
  88. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  89. package/dist/greenbidsRtdProvider.js +1 -1
  90. package/dist/gridBidAdapter.js +1 -1
  91. package/dist/growthCodeAnalyticsAdapter.js +1 -1
  92. package/dist/growthCodeIdSystem.js +1 -1
  93. package/dist/growthCodeRtdProvider.js +1 -1
  94. package/dist/gumgumBidAdapter.js +1 -1
  95. package/dist/h12mediaBidAdapter.js +1 -1
  96. package/dist/hadronAnalyticsAdapter.js +1 -1
  97. package/dist/hadronIdSystem.js +1 -1
  98. package/dist/hadronRtdProvider.js +1 -1
  99. package/dist/hypelabBidAdapter.js +1 -1
  100. package/dist/iasRtdProvider.js +1 -1
  101. package/dist/id5AnalyticsAdapter.js +1 -1
  102. package/dist/id5IdSystem.js +1 -1
  103. package/dist/idImportLibrary.js +1 -1
  104. package/dist/identityLinkIdSystem.js +1 -1
  105. package/dist/imRtdProvider.js +1 -1
  106. package/dist/imdsBidAdapter.js +1 -1
  107. package/dist/impactifyBidAdapter.js +1 -1
  108. package/dist/improvedigitalBidAdapter.js +1 -1
  109. package/dist/imuIdSystem.js +1 -1
  110. package/dist/insticatorBidAdapter.js +1 -1
  111. package/dist/intentIqIdSystem.js +1 -1
  112. package/dist/invisiblyAnalyticsAdapter.js +1 -1
  113. package/dist/ixBidAdapter.js +1 -1
  114. package/dist/jixieBidAdapter.js +1 -1
  115. package/dist/justpremiumBidAdapter.js +1 -1
  116. package/dist/jwplayerRtdProvider.js +1 -1
  117. package/dist/kargoAnalyticsAdapter.js +1 -1
  118. package/dist/kargoBidAdapter.js +1 -1
  119. package/dist/kinessoIdSystem.js +1 -1
  120. package/dist/konduitAnalyticsAdapter.js +1 -1
  121. package/dist/konduitWrapper.js +1 -1
  122. package/dist/kueezBidAdapter.js +1 -1
  123. package/dist/kueezRtbBidAdapter.js +1 -1
  124. package/dist/kulturemediaBidAdapter.js +1 -1
  125. package/dist/lassoBidAdapter.js +1 -1
  126. package/dist/lifestreetBidAdapter.js +1 -1
  127. package/dist/limelightDigitalBidAdapter.js +1 -1
  128. package/dist/liveIntentAnalyticsAdapter.js +1 -1
  129. package/dist/liveIntentIdSystem.js +1 -1
  130. package/dist/livewrappedAnalyticsAdapter.js +1 -1
  131. package/dist/logicadBidAdapter.js +1 -1
  132. package/dist/loglyliftBidAdapter.js +1 -1
  133. package/dist/lotamePanoramaIdSystem.js +1 -1
  134. package/dist/luponmediaBidAdapter.js +1 -1
  135. package/dist/magniteAnalyticsAdapter.js +1 -1
  136. package/dist/malltvAnalyticsAdapter.js +1 -1
  137. package/dist/mantisBidAdapter.js +1 -1
  138. package/dist/marsmediaAnalyticsAdapter.js +1 -1
  139. package/dist/marsmediaBidAdapter.js +1 -1
  140. package/dist/mediafuseBidAdapter.js +1 -1
  141. package/dist/medianetAnalyticsAdapter.js +1 -1
  142. package/dist/mediasquareBidAdapter.js +1 -1
  143. package/dist/merkleIdSystem.js +1 -1
  144. package/dist/mgidBidAdapter.js +1 -1
  145. package/dist/mgidRtdProvider.js +1 -1
  146. package/dist/minutemediaBidAdapter.js +1 -1
  147. package/dist/minutemediaplusBidAdapter.js +1 -1
  148. package/dist/mspa.js +1 -1
  149. package/dist/mwOpenLinkIdSystem.js +1 -1
  150. package/dist/nativoBidAdapter.js +1 -1
  151. package/dist/naveggIdSystem.js +1 -1
  152. package/dist/neuwoRtdProvider.js +1 -1
  153. package/dist/nexx360BidAdapter.js +1 -1
  154. package/dist/not-for-prod/prebid.js +248 -247
  155. package/dist/novatiqIdSystem.js +1 -1
  156. package/dist/oguryBidAdapter.js +1 -1
  157. package/dist/onetagBidAdapter.js +1 -1
  158. package/dist/ooloAnalyticsAdapter.js +1 -1
  159. package/dist/open8BidAdapter.js +1 -1
  160. package/dist/operaadsBidAdapter.js +1 -1
  161. package/dist/operaadsIdSystem.js +1 -0
  162. package/dist/optidigitalBidAdapter.js +1 -1
  163. package/dist/optimeraRtdProvider.js +1 -1
  164. package/dist/outbrainBidAdapter.js +1 -1
  165. package/dist/oxxionAnalyticsAdapter.js +1 -1
  166. package/dist/oxxionRtdProvider.js +1 -1
  167. package/dist/parrableIdSystem.js +1 -1
  168. package/dist/pixfutureBidAdapter.js +1 -1
  169. package/dist/prebid-core.js +2 -2
  170. package/dist/prebidServerBidAdapter.js +1 -1
  171. package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
  172. package/dist/priceFloors.js +1 -1
  173. package/dist/prismaBidAdapter.js +1 -1
  174. package/dist/pubgeniusBidAdapter.js +1 -1
  175. package/dist/publinkIdSystem.js +1 -1
  176. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  177. package/dist/pubmaticBidAdapter.js +1 -1
  178. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  179. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  180. package/dist/pxyzBidAdapter.js +1 -1
  181. package/dist/quantcastBidAdapter.js +1 -1
  182. package/dist/qwarryBidAdapter.js +1 -1
  183. package/dist/readpeakBidAdapter.js +1 -1
  184. package/dist/reconciliationRtdProvider.js +1 -1
  185. package/dist/relaidoBidAdapter.js +1 -1
  186. package/dist/relevadRtdProvider.js +1 -1
  187. package/dist/retailspotBidAdapter.js +1 -1
  188. package/dist/rhythmoneBidAdapter.js +1 -1
  189. package/dist/riseBidAdapter.js +1 -1
  190. package/dist/rivrAnalyticsAdapter.js +1 -1
  191. package/dist/roxotAnalyticsAdapter.js +1 -1
  192. package/dist/rubiconBidAdapter.js +1 -1
  193. package/dist/scaleableAnalyticsAdapter.js +1 -1
  194. package/dist/seedingAllianceBidAdapter.js +1 -1
  195. package/dist/seedtagBidAdapter.js +1 -1
  196. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  197. package/dist/sharethroughBidAdapter.js +1 -1
  198. package/dist/shinezBidAdapter.js +1 -1
  199. package/dist/silverpushBidAdapter.js +1 -1
  200. package/dist/sirdataRtdProvider.js +1 -1
  201. package/dist/slimcutBidAdapter.js +1 -1
  202. package/dist/smaatoBidAdapter.js +1 -1
  203. package/dist/smartadserverBidAdapter.js +1 -1
  204. package/dist/smartxBidAdapter.js +1 -1
  205. package/dist/smartyadsBidAdapter.js +1 -1
  206. package/dist/smilewantedBidAdapter.js +1 -1
  207. package/dist/snigelBidAdapter.js +1 -1
  208. package/dist/sonobiAnalyticsAdapter.js +1 -1
  209. package/dist/sonobiBidAdapter.js +1 -1
  210. package/dist/sovrnAnalyticsAdapter.js +1 -1
  211. package/dist/sovrnBidAdapter.js +1 -1
  212. package/dist/sspBCBidAdapter.js +1 -1
  213. package/dist/staqAnalyticsAdapter.js +1 -1
  214. package/dist/stvBidAdapter.js +1 -1
  215. package/dist/sublimeBidAdapter.js +1 -1
  216. package/dist/taboolaBidAdapter.js +1 -1
  217. package/dist/talkadsBidAdapter.js +1 -1
  218. package/dist/tapadIdSystem.js +1 -1
  219. package/dist/targetVideoBidAdapter.js +1 -1
  220. package/dist/teadsBidAdapter.js +1 -1
  221. package/dist/teadsIdSystem.js +1 -1
  222. package/dist/terceptAnalyticsAdapter.js +1 -1
  223. package/dist/timeoutRtdProvider.js +1 -1
  224. package/dist/topicsFpdModule.js +1 -1
  225. package/dist/trionBidAdapter.js +1 -1
  226. package/dist/tripleliftBidAdapter.js +1 -1
  227. package/dist/ttdBidAdapter.js +1 -1
  228. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  229. package/dist/uid2IdSystem.js +1 -1
  230. package/dist/underdogmediaBidAdapter.js +1 -1
  231. package/dist/undertoneBidAdapter.js +1 -1
  232. package/dist/unifiedIdSystem.js +1 -1
  233. package/dist/verizonMediaIdSystem.js +1 -1
  234. package/dist/vidazooBidAdapter.js +1 -1
  235. package/dist/videobyteBidAdapter.js +1 -1
  236. package/dist/visxBidAdapter.js +1 -1
  237. package/dist/vrtcalBidAdapter.js +1 -1
  238. package/dist/vuukleBidAdapter.js +1 -1
  239. package/dist/weboramaRtdProvider.js +1 -1
  240. package/dist/widespaceBidAdapter.js +1 -1
  241. package/dist/winrBidAdapter.js +1 -1
  242. package/dist/yahoosspBidAdapter.js +1 -1
  243. package/dist/yieldmoBidAdapter.js +1 -1
  244. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  245. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  246. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  247. package/dist/zeta_global_sspBidAdapter.js +1 -1
  248. package/integrationExamples/gpt/growthcode.html +3 -12
  249. package/integrationExamples/topics/topics-server.js +72 -0
  250. package/libraries/mspa/activityControls.js +3 -1
  251. package/modules/.submodules.json +2 -1
  252. package/modules/a1MediaRtdProvider.js +1 -1
  253. package/modules/adagioBidAdapter.js +11 -3
  254. package/modules/admaticBidAdapter.js +5 -0
  255. package/modules/adqueryBidAdapter.js +23 -21
  256. package/modules/adqueryIdSystem.js +45 -30
  257. package/modules/adrelevantisBidAdapter.js +2 -0
  258. package/modules/bidViewability.js +7 -0
  259. package/modules/bidViewability.md +9 -8
  260. package/modules/brandmetricsRtdProvider.js +30 -27
  261. package/modules/concertBidAdapter.js +1 -0
  262. package/modules/criteoBidAdapter.js +66 -43
  263. package/modules/fledgeForGpt.js +17 -4
  264. package/modules/fledgeForGpt.md +17 -10
  265. package/modules/geoedgeRtdProvider.js +44 -18
  266. package/modules/geoedgeRtdProvider.md +2 -1
  267. package/modules/growthCodeAnalyticsAdapter.js +7 -4
  268. package/modules/growthCodeAnalyticsAdapter.md +1 -7
  269. package/modules/liveIntentIdSystem.js +16 -1
  270. package/modules/nativoBidAdapter.js +21 -3
  271. package/modules/nexx360BidAdapter.js +7 -1
  272. package/modules/onetagBidAdapter.js +3 -0
  273. package/modules/operaadsBidAdapter.js +5 -0
  274. package/modules/operaadsBidAdapter.md +5 -5
  275. package/modules/operaadsIdSystem.js +106 -0
  276. package/modules/operaadsIdSystem.md +52 -0
  277. package/modules/oxxionAnalyticsAdapter.js +22 -5
  278. package/modules/prebidServerBidAdapter/index.js +8 -2
  279. package/modules/pubmaticAnalyticsAdapter.js +16 -3
  280. package/modules/rubiconBidAdapter.js +2 -2
  281. package/modules/smartyadsBidAdapter.js +18 -1
  282. package/modules/snigelBidAdapter.js +69 -16
  283. package/modules/snigelBidAdapter.md +9 -3
  284. package/modules/topicsFpdModule.js +35 -9
  285. package/modules/visxBidAdapter.js +51 -1
  286. package/package.json +2 -2
  287. package/src/adapters/bidderFactory.js +14 -5
  288. package/src/adloader.js +1 -0
  289. package/src/ajax.js +126 -87
  290. package/src/constants.json +8 -2
  291. package/src/native.js +14 -3
  292. package/test/mocks/xhr.js +256 -9
  293. package/test/spec/libraries/mspa/activityControls_spec.js +6 -0
  294. package/test/spec/modules/adagioBidAdapter_spec.js +15 -0
  295. package/test/spec/modules/adlooxAdServerVideo_spec.js +1 -5
  296. package/test/spec/modules/adlooxRtdProvider_spec.js +1 -5
  297. package/test/spec/modules/admaticBidAdapter_spec.js +5 -0
  298. package/test/spec/modules/adqueryIdSystem_spec.js +13 -24
  299. package/test/spec/modules/bidViewability_spec.js +32 -1
  300. package/test/spec/modules/brandmetricsRtdProvider_spec.js +6 -0
  301. package/test/spec/modules/categoryTranslation_spec.js +7 -9
  302. package/test/spec/modules/concertBidAdapter_spec.js +1 -1
  303. package/test/spec/modules/conversantAnalyticsAdapter_spec.js +3 -5
  304. package/test/spec/modules/criteoBidAdapter_spec.js +228 -0
  305. package/test/spec/modules/currency_spec.js +2 -2
  306. package/test/spec/modules/dmdIdSystem_spec.js +2 -2
  307. package/test/spec/modules/eids_spec.js +48 -0
  308. package/test/spec/modules/euidIdSystem_spec.js +10 -9
  309. package/test/spec/modules/feedadBidAdapter_spec.js +1 -1
  310. package/test/spec/modules/fledge_spec.js +117 -43
  311. package/test/spec/modules/geoedgeRtdProvider_spec.js +52 -39
  312. package/test/spec/modules/greenbidsRtdProvider_spec.js +3 -12
  313. package/test/spec/modules/growthCodeAnalyticsAdapter_spec.js +0 -1
  314. package/test/spec/modules/hadronIdSystem_spec.js +1 -1
  315. package/test/spec/modules/id5AnalyticsAdapter_spec.js +1 -7
  316. package/test/spec/modules/id5IdSystem_spec.js +25 -25
  317. package/test/spec/modules/identityLinkIdSystem_spec.js +0 -2
  318. package/test/spec/modules/intentIqIdSystem_spec.js +0 -2
  319. package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +2 -6
  320. package/test/spec/modules/jwplayerRtdProvider_spec.js +26 -28
  321. package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +5 -0
  322. package/test/spec/modules/liveIntentIdSystem_spec.js +5 -0
  323. package/test/spec/modules/magniteAnalyticsAdapter_spec.js +2 -2
  324. package/test/spec/modules/mgidRtdProvider_spec.js +1 -5
  325. package/test/spec/modules/nativoBidAdapter_spec.js +6 -1
  326. package/test/spec/modules/nexx360BidAdapter_spec.js +48 -1
  327. package/test/spec/modules/oguryBidAdapter_spec.js +5 -19
  328. package/test/spec/modules/onetagBidAdapter_spec.js +69 -0
  329. package/test/spec/modules/ooloAnalyticsAdapter_spec.js +1 -1
  330. package/test/spec/modules/operaadsIdSystem_spec.js +53 -0
  331. package/test/spec/modules/oxxionAnalyticsAdapter_spec.js +6 -1
  332. package/test/spec/modules/prebidServerBidAdapter_spec.js +33 -2
  333. package/test/spec/modules/priceFloors_spec.js +33 -37
  334. package/test/spec/modules/publinkIdSystem_spec.js +1 -1
  335. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +102 -18
  336. package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +2 -8
  337. package/test/spec/modules/rubiconBidAdapter_spec.js +24 -0
  338. package/test/spec/modules/smartyadsBidAdapter_spec.js +49 -0
  339. package/test/spec/modules/snigelBidAdapter_spec.js +57 -6
  340. package/test/spec/modules/teadsIdSystem_spec.js +1 -1
  341. package/test/spec/modules/topicsFpdModule_spec.js +102 -1
  342. package/test/spec/modules/uid2IdSystem_helpers.js +5 -5
  343. package/test/spec/modules/uid2IdSystem_spec.js +24 -24
  344. package/test/spec/modules/userId_spec.js +1 -1
  345. package/test/spec/modules/visxBidAdapter_spec.js +151 -1
  346. package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +2 -5
  347. package/test/spec/native_spec.js +20 -5
  348. package/test/spec/unit/core/ajax_spec.js +403 -0
  349. package/test/spec/unit/core/bidderFactory_spec.js +80 -8
  350. package/test/spec/videoCache_spec.js +4 -4
@@ -13,7 +13,7 @@ import {MODULE_TYPE_ANALYTICS} from '../src/activities/modules.js';
13
13
 
14
14
  const MODULE_NAME = 'growthCodeAnalytics';
15
15
  const DEFAULT_PID = 'INVALID_PID'
16
- const ENDPOINT_URL = 'https://p2.gcprivacy.com/v1/pb/analytics'
16
+ const ENDPOINT_URL = 'https://p2.gcprivacy.com/v3/pb/analytics'
17
17
 
18
18
  export const storage = getStorageManager({moduleType: MODULE_TYPE_ANALYTICS, moduleName: MODULE_NAME});
19
19
 
@@ -138,12 +138,15 @@ growthCodeAnalyticsAdapter.enableAnalytics = function(conf = {}) {
138
138
 
139
139
  function logToServer() {
140
140
  if (pid === DEFAULT_PID) return;
141
- if (eventQueue.length > 1) {
141
+ if (eventQueue.length >= 1) {
142
+ // Get the correct GCID
143
+ let gcid = localStorage.getItem('gcid')
144
+
142
145
  let data = {
143
146
  session: sessionId,
144
147
  pid: pid,
148
+ gcid: gcid,
145
149
  timestamp: Date.now(),
146
- timezoneoffset: new Date().getTimezoneOffset(),
147
150
  url: getRefererInfo().page,
148
151
  referer: document.referrer,
149
152
  events: eventQueue
@@ -167,7 +170,7 @@ function sendEvent(event) {
167
170
  eventQueue.push(event);
168
171
  logInfo(MODULE_NAME + 'Analytics Event: ' + event);
169
172
 
170
- if (event.eventType === CONSTANTS.EVENTS.AUCTION_END) {
173
+ if ((event.eventType === CONSTANTS.EVENTS.AUCTION_END) || (event.eventType === CONSTANTS.EVENTS.BID_WON)) {
171
174
  logToServer();
172
175
  }
173
176
  }
@@ -21,13 +21,7 @@ pbjs.enableAnalytics({
21
21
  pid: '<Contact GrowthCode>',
22
22
  trackEvents: [
23
23
  'auctionEnd',
24
- 'bidAdjustment',
25
- 'bidTimeout',
26
- 'bidRequested',
27
- 'bidResponse',
28
- 'noBid',
29
- 'bidWon',
30
- 'bidderDone']
24
+ 'bidWon']
31
25
  }
32
26
  });
33
27
  ```
@@ -205,6 +205,10 @@ export const liveIntentIdSubmodule = {
205
205
  result.magnite = { 'id': value.magnite, ext: { provider: LI_PROVIDER_DOMAIN } }
206
206
  }
207
207
 
208
+ if (value.index) {
209
+ result.index = { 'id': value.index, ext: { provider: LI_PROVIDER_DOMAIN } }
210
+ }
211
+
208
212
  return result
209
213
  }
210
214
 
@@ -294,7 +298,18 @@ export const liveIntentIdSubmodule = {
294
298
  }
295
299
  }
296
300
  },
297
-
301
+ 'index': {
302
+ source: 'liveintent.indexexchange.com',
303
+ atype: 3,
304
+ getValue: function(data) {
305
+ return data.id;
306
+ },
307
+ getUidExt: function(data) {
308
+ if (data.ext) {
309
+ return data.ext;
310
+ }
311
+ }
312
+ }
298
313
  }
299
314
  };
300
315
 
@@ -2,7 +2,20 @@ import { deepAccess, isEmpty } from '../src/utils.js'
2
2
  import { registerBidder } from '../src/adapters/bidderFactory.js'
3
3
  import { BANNER } from '../src/mediaTypes.js'
4
4
  import { getGlobal } from '../src/prebidGlobal.js'
5
- // import { config } from 'src/config'
5
+ import { ortbConverter } from '../libraries/ortbConverter/converter.js'
6
+
7
+ const converter = ortbConverter({
8
+ context: {
9
+ // `netRevenue` and `ttl` are required properties of bid responses - provide a default for them
10
+ netRevenue: true, // or false if your adapter should set bidResponse.netRevenue = false
11
+ ttl: 30 // default bidResponse.ttl (when not specified in ORTB response.seatbid[].bid[].exp)
12
+ },
13
+ imp(buildImp, bidRequest, context) {
14
+ const imp = buildImp(bidRequest, context);
15
+ imp.tagid = bidRequest.adUnitCode
16
+ return imp;
17
+ }
18
+ });
6
19
 
7
20
  const BIDDER_CODE = 'nativo'
8
21
  const BIDDER_ENDPOINT = 'https://exchange.postrelease.com/prebid'
@@ -136,6 +149,10 @@ export const spec = {
136
149
  * @return ServerRequest Info describing the request to the server.
137
150
  */
138
151
  buildRequests: function (validBidRequests, bidderRequest) {
152
+ // Get OpenRTB Data
153
+ const openRTBData = converter.toORTB({bidRequests: validBidRequests, bidderRequest})
154
+ const openRTBDataString = JSON.stringify(openRTBData)
155
+
139
156
  const requestData = new RequestData()
140
157
  requestData.addBidRequestDataSource(new UserEIDs())
141
158
 
@@ -271,8 +288,9 @@ export const spec = {
271
288
  const requestUrl = buildRequestUrl(BIDDER_ENDPOINT, qsParamStrings)
272
289
 
273
290
  let serverRequest = {
274
- method: 'GET',
275
- url: requestUrl
291
+ method: 'POST',
292
+ url: requestUrl,
293
+ data: openRTBDataString,
276
294
  }
277
295
 
278
296
  return serverRequest
@@ -192,7 +192,13 @@ function interpretResponse(serverResponse) {
192
192
  };
193
193
  if (allowAlternateBidderCodes) response.bidderCode = `n360-${bid.ext.ssp}`;
194
194
 
195
- if (bid.ext.mediaType === BANNER) response.adUrl = bid.ext.adUrl;
195
+ if (bid.ext.mediaType === BANNER) {
196
+ if (bid.adm) {
197
+ response.ad = bid.adm;
198
+ } else {
199
+ response.adUrl = bid.ext.adUrl;
200
+ }
201
+ }
196
202
  if ([INSTREAM, OUTSTREAM].includes(bid.ext.mediaType)) response.vastXml = bid.ext.vastXml;
197
203
 
198
204
  if (bid.ext.mediaType === OUTSTREAM) {
@@ -70,6 +70,9 @@ function buildRequests(validBidRequests, bidderRequest) {
70
70
  if (bidderRequest && bidderRequest.uspConsent) {
71
71
  payload.usPrivacy = bidderRequest.uspConsent;
72
72
  }
73
+ if (bidderRequest && bidderRequest.ortb2) {
74
+ payload.ortb2 = bidderRequest.ortb2;
75
+ }
73
76
  if (validBidRequests && validBidRequests.length !== 0 && validBidRequests[0].userIdAsEids) {
74
77
  payload.userId = validBidRequests[0].userIdAsEids;
75
78
  }
@@ -680,6 +680,11 @@ function mapNativeImage(image, type) {
680
680
  * @returns {String} userId
681
681
  */
682
682
  function getUserId(bidRequest) {
683
+ let operaId = deepAccess(bidRequest, 'userId.operaId');
684
+ if (operaId) {
685
+ return operaId;
686
+ }
687
+
683
688
  let sharedId = deepAccess(bidRequest, 'userId.sharedid.id');
684
689
  if (sharedId) {
685
690
  return sharedId;
@@ -135,18 +135,18 @@ var adUnits = [{
135
135
 
136
136
  ### User Ids
137
137
 
138
- Opera Ads Bid Adapter uses `sharedId`, `pubcid` or `tdid`, please config at least one.
138
+ Opera Ads Bid Adapter uses `operaId`, please refer to [`Opera ID System`](./operaadsIdSystem.md).
139
139
 
140
140
  ```javascript
141
141
  pbjs.setConfig({
142
142
  ...,
143
143
  userSync: {
144
144
  userIds: [{
145
- name: 'sharedId',
145
+ name: 'operaId',
146
146
  storage: {
147
- name: '_sharedID', // name of the 1st party cookie
148
- type: 'cookie',
149
- expires: 30
147
+ name: 'operaId',
148
+ type: 'html5',
149
+ expires: 14
150
150
  }
151
151
  }]
152
152
  }
@@ -0,0 +1,106 @@
1
+ /**
2
+ * This module adds operaId to the User ID module
3
+ * The {@link module:modules/userId} module is required
4
+ * @module modules/operaadsIdSystem
5
+ * @requires module:modules/userId
6
+ */
7
+ import * as ajax from '../src/ajax.js';
8
+ import { submodule } from '../src/hook.js';
9
+ import { logMessage, logError } from '../src/utils.js';
10
+
11
+ const MODULE_NAME = 'operaId';
12
+ const ID_KEY = MODULE_NAME;
13
+ const version = '1.0';
14
+ const SYNC_URL = 'https://t.adx.opera.com/identity/';
15
+ const AJAX_TIMEOUT = 300;
16
+ const AJAX_OPTIONS = {method: 'GET', withCredentials: true, contentType: 'application/json'};
17
+
18
+ function constructUrl(pairs) {
19
+ const queries = [];
20
+ for (let key in pairs) {
21
+ queries.push(`${key}=${encodeURIComponent(pairs[key])}`);
22
+ }
23
+ return `${SYNC_URL}?${queries.join('&')}`;
24
+ }
25
+
26
+ function asyncRequest(url, cb) {
27
+ ajax.ajaxBuilder(AJAX_TIMEOUT)(
28
+ url,
29
+ {
30
+ success: response => {
31
+ try {
32
+ const jsonResponse = JSON.parse(response);
33
+ const { uid: operaId } = jsonResponse;
34
+ cb(operaId);
35
+ return;
36
+ } catch (e) {
37
+ logError(`${MODULE_NAME}: invalid response`, response);
38
+ }
39
+ cb();
40
+ },
41
+ error: (err) => {
42
+ logError(`${MODULE_NAME}: ID error response`, err);
43
+ cb();
44
+ }
45
+ },
46
+ null,
47
+ AJAX_OPTIONS
48
+ );
49
+ }
50
+
51
+ export const operaIdSubmodule = {
52
+ /**
53
+ * used to link submodule with config
54
+ * @type {string}
55
+ */
56
+ name: MODULE_NAME,
57
+
58
+ /**
59
+ * @type {string}
60
+ */
61
+ version,
62
+
63
+ /**
64
+ * decode the stored id value for passing to bid requests
65
+ * @function
66
+ * @param {string} id
67
+ * @returns {{'operaId': string}}
68
+ */
69
+ decode: (id) =>
70
+ id != null && id.length > 0
71
+ ? { [ID_KEY]: id }
72
+ : undefined,
73
+
74
+ /**
75
+ * performs action to obtain id and return a value in the callback's response argument
76
+ * @function
77
+ * @param {SubmoduleConfig} [config]
78
+ * @returns {IdResponse|undefined}
79
+ */
80
+ getId(config, consentData) {
81
+ logMessage(`${MODULE_NAME}: start synchronizing opera uid`);
82
+ const params = (config && config.params) || {};
83
+ if (typeof params.pid !== 'string' || params.pid.length == 0) {
84
+ logError(`${MODULE_NAME}: submodule requires a publisher ID to be defined`);
85
+ return;
86
+ }
87
+
88
+ const { pid, syncUrl = SYNC_URL } = params;
89
+ const url = constructUrl(syncUrl, { publisherId: pid });
90
+
91
+ return {
92
+ callback: (cb) => {
93
+ asyncRequest(url, cb);
94
+ }
95
+ }
96
+ },
97
+
98
+ eids: {
99
+ 'operaId': {
100
+ source: 't.adx.opera.com',
101
+ atype: 1
102
+ },
103
+ }
104
+ };
105
+
106
+ submodule('userId', operaIdSubmodule);
@@ -0,0 +1,52 @@
1
+ # Opera ID System
2
+
3
+ For help adding this module, please contact [adtech-prebid-group@opera.com](adtech-prebid-group@opera.com).
4
+
5
+ ### Prebid Configuration
6
+
7
+ You should configure this module under your `userSync.userIds[]` configuration:
8
+
9
+ ```javascript
10
+ pbjs.setConfig({
11
+ userSync: {
12
+ userIds: [
13
+ {
14
+ name: "operaId",
15
+ storage: {
16
+ name: "operaId",
17
+ type: "html5",
18
+ expires: 14
19
+ },
20
+ params: {
21
+ pid: "your-pulisher-ID-here"
22
+ }
23
+ }
24
+ ]
25
+ }
26
+ })
27
+ ```
28
+ <br>
29
+
30
+ | Param under `userSync.userIds[]` | Scope | Type | Description | Example |
31
+ | -------------------------------- | -------- | ------ | ----------------------------- | ----------------------------------------- |
32
+ | name | Required | string | ID for the operaId module | `"operaId"` |
33
+ | storage | Optional | Object | Settings for operaId storage | See [storage settings](#storage-settings) |
34
+ | params | Required | Object | Parameters for opreaId module | See [params](#params) |
35
+ <br>
36
+
37
+ ### Params
38
+
39
+ | Param under `params` | Scope | Type | Description | Example |
40
+ | -------------------- | -------- | ------ | ------------------------------ | --------------- |
41
+ | pid | Required | string | Publisher ID assigned by Opera | `"pub12345678"` |
42
+ <br>
43
+
44
+ ### Storage Settings
45
+
46
+ The following settings are suggested for the `storage` property in the `userSync.userIds[]` object:
47
+
48
+ | Param under `storage` | Type | Description | Example |
49
+ | --------------------- | ------------- | -------------------------------------------------------------------------------- | ----------- |
50
+ | name | String | Where the ID will be stored | `"operaId"` |
51
+ | type | String | For best performance, this should be `"html5"` | `"html5"` |
52
+ | expires | Number <= 30 | number of days until the stored ID expires. **Must be less than or equal to 30** | `14` |
@@ -21,6 +21,7 @@ let saveEvents = {}
21
21
  let allEvents = {}
22
22
  let auctionEnd = {}
23
23
  let initOptions = {}
24
+ let mode = {};
24
25
  let endpoint = 'https://default'
25
26
  let requestsAttributes = ['adUnitCode', 'auctionId', 'bidder', 'bidderCode', 'bidId', 'cpm', 'creativeId', 'currency', 'width', 'height', 'mediaType', 'netRevenue', 'originalCpm', 'originalCurrency', 'requestId', 'size', 'source', 'status', 'timeToRespond', 'transactionId', 'ttl', 'sizes', 'mediaTypes', 'src', 'params', 'userId', 'labelAny', 'bids', 'adId'];
26
27
 
@@ -41,16 +42,27 @@ function filterAttributes(arg, removead) {
41
42
  }
42
43
  if (typeof arg['gdprConsent'] != 'undefined') {
43
44
  response['gdprConsent'] = {};
44
- if (typeof arg['gdprConsent']['consentString'] != 'undefined') { response['gdprConsent']['consentString'] = arg['gdprConsent']['consentString']; }
45
+ if (typeof arg['gdprConsent']['consentString'] != 'undefined') {
46
+ response['gdprConsent']['consentString'] = arg['gdprConsent']['consentString'];
47
+ }
45
48
  }
46
- if (typeof arg['meta'] == 'object' && typeof arg['meta']['advertiserDomains'] != 'undefined') {
47
- response['meta'] = {'advertiserDomains': arg['meta']['advertiserDomains']};
49
+ if (typeof arg['meta'] == 'object') {
50
+ response['meta'] = {};
51
+ if (typeof arg['meta']['advertiserDomains'] != 'undefined') {
52
+ response['meta']['advertiserDomains'] = arg['meta']['advertiserDomains'];
53
+ }
54
+ if (typeof arg['meta']['demandSource'] == 'string') {
55
+ response['meta']['demandSource'] = arg['meta']['demandSource'];
56
+ }
48
57
  }
49
58
  requestsAttributes.forEach((attr) => {
50
59
  if (typeof arg[attr] != 'undefined') { response[attr] = arg[attr]; }
51
60
  });
52
- if (typeof response['creativeId'] == 'number') { response['creativeId'] = response['creativeId'].toString(); }
61
+ if (typeof response['creativeId'] == 'number') {
62
+ response['creativeId'] = response['creativeId'].toString();
63
+ }
53
64
  }
65
+ response['oxxionMode'] = mode;
54
66
  return response;
55
67
  }
56
68
 
@@ -229,7 +241,12 @@ oxxionAnalytics.originEnableAnalytics = oxxionAnalytics.enableAnalytics;
229
241
  oxxionAnalytics.enableAnalytics = function (config) {
230
242
  oxxionAnalytics.originEnableAnalytics(config); // call the base class function
231
243
  initOptions = config.options;
232
- if (initOptions.domain) { endpoint = 'https://' + initOptions.domain; }
244
+ if (initOptions.domain) {
245
+ endpoint = 'https://' + initOptions.domain;
246
+ }
247
+ if (window.OXXION_MODE) {
248
+ mode = window.OXXION_MODE;
249
+ }
233
250
  };
234
251
 
235
252
  adapterManager.registerAnalyticsAdapter({
@@ -18,7 +18,7 @@ import {
18
18
  deepAccess,
19
19
  } from '../../src/utils.js';
20
20
  import CONSTANTS from '../../src/constants.json';
21
- import adapterManager from '../../src/adapterManager.js';
21
+ import adapterManager, {s2sActivityParams} from '../../src/adapterManager.js';
22
22
  import {config} from '../../src/config.js';
23
23
  import {addComponentAuction, isValid} from '../../src/adapters/bidderFactory.js';
24
24
  import * as events from '../../src/events.js';
@@ -29,6 +29,8 @@ import {hook} from '../../src/hook.js';
29
29
  import {hasPurpose1Consent} from '../../src/utils/gpdr.js';
30
30
  import {buildPBSRequest, interpretPBSResponse} from './ortbConverter.js';
31
31
  import {useMetrics} from '../../src/utils/perfMetrics.js';
32
+ import {isActivityAllowed} from '../../src/activities/rules.js';
33
+ import {ACTIVITY_TRANSMIT_UFPD} from '../../src/activities/activities.js';
32
34
 
33
35
  const getConfig = config.getConfig;
34
36
 
@@ -571,7 +573,11 @@ export const processPBSRequest = hook('sync', function (s2sBidRequest, bidReques
571
573
  }
572
574
  },
573
575
  requestJson,
574
- {contentType: 'text/plain', withCredentials: true}
576
+ {
577
+ contentType: 'text/plain',
578
+ withCredentials: true,
579
+ browsingTopics: isActivityAllowed(ACTIVITY_TRANSMIT_UFPD, s2sActivityParams(s2sBidRequest.s2sConfig))
580
+ }
575
581
  );
576
582
  } else {
577
583
  logError('PBS request not made. Check endpoints.');
@@ -283,7 +283,7 @@ function gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestBid) {
283
283
  'ocpm': bid.bidResponse ? (bid.bidResponse.originalCpm || 0) : 0,
284
284
  'ocry': bid.bidResponse ? (bid.bidResponse.originalCurrency || CURRENCY_USD) : CURRENCY_USD,
285
285
  'piid': bid.bidResponse ? (bid.bidResponse.partnerImpId || EMPTY_STRING) : EMPTY_STRING,
286
- 'frv': (s2sBidders.indexOf(bid.bidder) > -1) ? undefined : (bid.bidResponse ? (bid.bidResponse.floorData ? bid.bidResponse.floorData.floorRuleValue : undefined) : undefined),
286
+ 'frv': (bid.bidResponse ? (bid.bidResponse.floorData ? bid.bidResponse.floorData.floorRuleValue : undefined) : undefined),
287
287
  'md': bid.bidResponse ? getMetadata(bid.bidResponse.meta) : undefined
288
288
  });
289
289
  });
@@ -319,6 +319,17 @@ function getTgId() {
319
319
  return 0;
320
320
  }
321
321
 
322
+ function getFloorFetchStatus(floorData) {
323
+ if (!floorData?.floorRequestData) {
324
+ return false;
325
+ }
326
+ const { location, fetchStatus } = floorData?.floorRequestData;
327
+ const isDataValid = location !== CONSTANTS.FLOOR_VALUES.NO_DATA;
328
+ const isFetchSuccessful = location === CONSTANTS.FLOOR_VALUES.FETCH && fetchStatus === CONSTANTS.FLOOR_VALUES.SUCCESS;
329
+ const isAdUnitOrSetConfig = location === CONSTANTS.FLOOR_VALUES.AD_UNIT || location === CONSTANTS.FLOOR_VALUES.SET_CONFIG;
330
+ return isDataValid && (isAdUnitOrSetConfig || isFetchSuccessful);
331
+ }
332
+
322
333
  function executeBidsLoggerCall(e, highestCpmBids) {
323
334
  let auctionId = e.auctionId;
324
335
  let referrer = config.getConfig('pageUrl') || cache.auctions[auctionId].referer || '';
@@ -326,6 +337,8 @@ function executeBidsLoggerCall(e, highestCpmBids) {
326
337
  let floorData = auctionCache.floorData;
327
338
  let outputObj = { s: [] };
328
339
  let pixelURL = END_POINT_BID_LOGGER;
340
+ // will return true if floor data is present.
341
+ let fetchStatus = getFloorFetchStatus(auctionCache.floorData);
329
342
 
330
343
  if (!auctionCache) {
331
344
  return;
@@ -347,7 +360,7 @@ function executeBidsLoggerCall(e, highestCpmBids) {
347
360
  outputObj['dvc'] = {'plt': getDevicePlatform()};
348
361
  outputObj['tgid'] = getTgId();
349
362
 
350
- if (floorData) {
363
+ if (floorData && fetchStatus) {
351
364
  outputObj['fmv'] = floorData.floorRequestData ? floorData.floorRequestData.modelVersion || undefined : undefined;
352
365
  outputObj['ft'] = floorData.floorResponseData ? (floorData.floorResponseData.enforcements.enforceJS == false ? 0 : 1) : undefined;
353
366
  }
@@ -362,7 +375,7 @@ function executeBidsLoggerCall(e, highestCpmBids) {
362
375
  'mt': getAdUnitAdFormats(origAdUnit),
363
376
  'sz': getSizesForAdUnit(adUnit, adUnitId),
364
377
  'ps': gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestCpmBids.filter(bid => bid.adUnitCode === adUnitId)),
365
- 'fskp': floorData ? (floorData.floorRequestData ? (floorData.floorRequestData.skipped == false ? 0 : 1) : undefined) : undefined,
378
+ 'fskp': (floorData && fetchStatus) ? (floorData.floorRequestData ? (floorData.floorRequestData.skipped == false ? 0 : 1) : undefined) : undefined,
366
379
  };
367
380
  slotsArray.push(slotObject);
368
381
  return slotsArray;
@@ -27,7 +27,7 @@ const DEFAULT_PBS_INTEGRATION = 'pbjs';
27
27
  const DEFAULT_RENDERER_URL = 'https://video-outstream.rubiconproject.com/apex-2.2.1.js';
28
28
  // renderer code at https://github.com/rubicon-project/apex2
29
29
 
30
- let rubiConf = {};
30
+ let rubiConf = config.getConfig('rubicon') || {};
31
31
  // we are saving these as global to this module so that if a pub accidentally overwrites the entire
32
32
  // rubicon object, then we do not lose other data
33
33
  config.getConfig('rubicon', config => {
@@ -322,7 +322,7 @@ export const spec = {
322
322
  )
323
323
  );
324
324
  });
325
- if (config.getConfig('rubicon.singleRequest') !== true) {
325
+ if (rubiConf.singleRequest !== true) {
326
326
  // bids are not grouped if single request mode is not enabled
327
327
  requests = filteredHttpRequest.concat(bannerBidRequests.map(bidRequest => {
328
328
  const bidParams = spec.createSlotParams(bidRequest, bidderRequest);
@@ -3,6 +3,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js';
3
3
  import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
4
4
  import { config } from '../src/config.js';
5
5
  import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
6
+ import { ajax } from '../src/ajax.js';
6
7
 
7
8
  const BIDDER_CODE = 'smartyads';
8
9
  const AD_URL = 'https://n1.smartyads.com/?c=o&m=prebid&secret_key=prebid_js';
@@ -122,7 +123,23 @@ export const spec = {
122
123
  }
123
124
 
124
125
  return syncs
125
- }
126
+ },
127
+
128
+ onBidWon: function(bid) {
129
+ if (bid.winUrl) {
130
+ ajax(bid.winUrl, () => {}, JSON.stringify(bid));
131
+ } else {
132
+ ajax('https://et-nd43.itdsmr.com/?c=o&m=prebid&secret_key=prebid_js&winTest=1', () => {}, JSON.stringify(bid));
133
+ }
134
+ },
135
+
136
+ onTimeout: function(bid) {
137
+ ajax('https://et-nd43.itdsmr.com/?c=o&m=prebid&secret_key=prebid_js&bidTimeout=1', () => {}, JSON.stringify(bid));
138
+ },
139
+
140
+ onBidderError: function(bid) {
141
+ ajax('https://et-nd43.itdsmr.com/?c=o&m=prebid&secret_key=prebid_js&bidderError=1', () => {}, JSON.stringify(bid));
142
+ },
126
143
 
127
144
  };
128
145