prebid.js 6.26.0 → 6.29.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 (261) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/adWMGAnalyticsAdapter.js +1 -1
  3. package/dist/adagioAnalyticsAdapter.js +1 -1
  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/adkernelAdnAnalyticsAdapter.js +1 -1
  9. package/dist/adlooxAdServerVideo.js +1 -1
  10. package/dist/adlooxAnalyticsAdapter.js +1 -1
  11. package/dist/adlooxRtdProvider.js +1 -1
  12. package/dist/adoceanBidAdapter.js +1 -1
  13. package/dist/adomikAnalyticsAdapter.js +1 -1
  14. package/dist/adrelevantisBidAdapter.js +1 -1
  15. package/dist/adxcgAnalyticsAdapter.js +1 -1
  16. package/dist/adxcgBidAdapter.js +1 -1
  17. package/dist/adxpremiumAnalyticsAdapter.js +1 -1
  18. package/dist/adyoulikeBidAdapter.js +1 -1
  19. package/dist/ajaBidAdapter.js +1 -1
  20. package/dist/akamaiDapRtdProvider.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/appnexusAnalyticsAdapter.js +1 -1
  25. package/dist/appnexusBidAdapter.js +1 -1
  26. package/dist/asoBidAdapter.js +1 -1
  27. package/dist/atsAnalyticsAdapter.js +1 -1
  28. package/dist/audiencerunBidAdapter.js +1 -1
  29. package/dist/automatadBidAdapter.js +1 -1
  30. package/dist/axonixBidAdapter.js +1 -1
  31. package/dist/bidglassBidAdapter.js +1 -1
  32. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  33. package/dist/big-richmediaBidAdapter.js +1 -1
  34. package/dist/bluebillywigBidAdapter.js +1 -1
  35. package/dist/bridgewellBidAdapter.js +1 -1
  36. package/dist/brightMountainMediaBidAdapter.js +1 -1
  37. package/dist/byDataAnalyticsAdapter.js +1 -1
  38. package/dist/colossussspBidAdapter.js +1 -1
  39. package/dist/concertAnalyticsAdapter.js +1 -1
  40. package/dist/concertBidAdapter.js +1 -1
  41. package/dist/connectadBidAdapter.js +1 -1
  42. package/dist/consumableBidAdapter.js +1 -1
  43. package/dist/conversantBidAdapter.js +1 -1
  44. package/dist/craftBidAdapter.js +1 -1
  45. package/dist/criteoBidAdapter.js +1 -1
  46. package/dist/datablocksAnalyticsAdapter.js +1 -1
  47. package/dist/dspxBidAdapter.js +1 -1
  48. package/dist/eplanningAnalyticsAdapter.js +1 -1
  49. package/dist/eplanningBidAdapter.js +1 -1
  50. package/dist/fintezaAnalyticsAdapter.js +1 -1
  51. package/dist/ftrackIdSystem.js +1 -1
  52. package/dist/gdprEnforcement.js +1 -1
  53. package/dist/glimpseBidAdapter.js +1 -1
  54. package/dist/gmosspBidAdapter.js +1 -1
  55. package/dist/goldbachBidAdapter.js +1 -1
  56. package/dist/gridBidAdapter.js +1 -1
  57. package/dist/gridNMBidAdapter.js +1 -1
  58. package/dist/gumgumBidAdapter.js +1 -1
  59. package/dist/h12mediaBidAdapter.js +1 -1
  60. package/dist/hadronAnalyticsAdapter.js +1 -1
  61. package/dist/hadronRtdProvider.js +1 -1
  62. package/dist/id5AnalyticsAdapter.js +1 -1
  63. package/dist/id5IdSystem.js +1 -1
  64. package/dist/impactifyBidAdapter.js +1 -1
  65. package/dist/improvedigitalBidAdapter.js +1 -1
  66. package/dist/incrxBidAdapter.js +1 -0
  67. package/dist/inmarBidAdapter.js +1 -1
  68. package/dist/inskinBidAdapter.js +1 -1
  69. package/dist/insticatorBidAdapter.js +1 -1
  70. package/dist/invisiblyAnalyticsAdapter.js +1 -1
  71. package/dist/ixBidAdapter.js +1 -1
  72. package/dist/jixieBidAdapter.js +1 -1
  73. package/dist/justpremiumBidAdapter.js +1 -1
  74. package/dist/kargoAnalyticsAdapter.js +1 -1
  75. package/dist/kargoBidAdapter.js +1 -1
  76. package/dist/koblerBidAdapter.js +1 -1
  77. package/dist/konduitAnalyticsAdapter.js +1 -1
  78. package/dist/livewrappedAnalyticsAdapter.js +1 -1
  79. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  80. package/dist/logicadBidAdapter.js +1 -1
  81. package/dist/loglyliftBidAdapter.js +1 -1
  82. package/dist/malltvAnalyticsAdapter.js +1 -1
  83. package/dist/mantisBidAdapter.js +1 -1
  84. package/dist/marsmediaAnalyticsAdapter.js +1 -1
  85. package/dist/marsmediaBidAdapter.js +1 -1
  86. package/dist/mediafuseBidAdapter.js +1 -1
  87. package/dist/mediakeysBidAdapter.js +1 -1
  88. package/dist/medianetAnalyticsAdapter.js +1 -1
  89. package/dist/medianetBidAdapter.js +1 -1
  90. package/dist/medianetRtdProvider.js +1 -1
  91. package/dist/mediasquareBidAdapter.js +1 -1
  92. package/dist/merkleIdSystem.js +1 -1
  93. package/dist/mgidBidAdapter.js +1 -1
  94. package/dist/minutemediaBidAdapter.js +1 -1
  95. package/dist/naveggIdSystem.js +1 -1
  96. package/dist/not-for-prod/prebid.js +178 -176
  97. package/dist/novatiqIdSystem.js +1 -1
  98. package/dist/oguryBidAdapter.js +1 -1
  99. package/dist/oneVideoBidAdapter.js +1 -1
  100. package/dist/onetagBidAdapter.js +1 -1
  101. package/dist/ooloAnalyticsAdapter.js +1 -1
  102. package/dist/openxAnalyticsAdapter.js +1 -1
  103. package/dist/optimonAnalyticsAdapter.js +1 -1
  104. package/dist/outbrainBidAdapter.js +1 -1
  105. package/dist/parrableIdSystem.js +1 -1
  106. package/dist/pixfutureBidAdapter.js +1 -1
  107. package/dist/prebid-core.js +3 -3
  108. package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
  109. package/dist/pubCommonId.js +1 -1
  110. package/dist/publinkIdSystem.js +1 -1
  111. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  112. package/dist/pubmaticBidAdapter.js +1 -1
  113. package/dist/pubperfAnalyticsAdapter.js +1 -1
  114. package/dist/pubstackAnalyticsAdapter.js +1 -1
  115. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  116. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  117. package/dist/pulsepointAnalyticsAdapter.js +1 -1
  118. package/dist/pxyzBidAdapter.js +1 -1
  119. package/dist/quantcastBidAdapter.js +1 -1
  120. package/dist/readpeakBidAdapter.js +1 -1
  121. package/dist/realvuAnalyticsAdapter.js +1 -1
  122. package/dist/relaidoBidAdapter.js +1 -1
  123. package/dist/relevantAnalyticsAdapter.js +1 -1
  124. package/dist/rhythmoneBidAdapter.js +1 -1
  125. package/dist/riseBidAdapter.js +1 -1
  126. package/dist/rivrAnalyticsAdapter.js +1 -1
  127. package/dist/roxotAnalyticsAdapter.js +1 -1
  128. package/dist/rubiconAnalyticsAdapter.js +1 -1
  129. package/dist/rubiconBidAdapter.js +1 -1
  130. package/dist/scaleableAnalyticsAdapter.js +1 -1
  131. package/dist/seedingAllianceBidAdapter.js +1 -1
  132. package/dist/seedtagBidAdapter.js +1 -1
  133. package/dist/sharedIdSystem.js +1 -1
  134. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  135. package/dist/sharethroughBidAdapter.js +1 -1
  136. package/dist/sigmoidAnalyticsAdapter.js +1 -1
  137. package/dist/slimcutBidAdapter.js +1 -1
  138. package/dist/smaatoBidAdapter.js +1 -1
  139. package/dist/smartadserverBidAdapter.js +1 -1
  140. package/dist/smartxBidAdapter.js +1 -1
  141. package/dist/smilewantedBidAdapter.js +1 -1
  142. package/dist/sonobiAnalyticsAdapter.js +1 -1
  143. package/dist/sonobiBidAdapter.js +1 -1
  144. package/dist/sortableAnalyticsAdapter.js +1 -1
  145. package/dist/sortableBidAdapter.js +1 -1
  146. package/dist/sovrnAnalyticsAdapter.js +1 -1
  147. package/dist/sovrnBidAdapter.js +1 -1
  148. package/dist/spotxBidAdapter.js +1 -1
  149. package/dist/sspBCBidAdapter.js +1 -1
  150. package/dist/staqAnalyticsAdapter.js +1 -1
  151. package/dist/sublimeBidAdapter.js +1 -1
  152. package/dist/synacormediaBidAdapter.js +1 -1
  153. package/dist/taboolaBidAdapter.js +1 -0
  154. package/dist/targetVideoBidAdapter.js +1 -1
  155. package/dist/teadsBidAdapter.js +1 -1
  156. package/dist/telariaBidAdapter.js +1 -1
  157. package/dist/terceptAnalyticsAdapter.js +1 -1
  158. package/dist/trionBidAdapter.js +1 -1
  159. package/dist/tripleliftBidAdapter.js +1 -1
  160. package/dist/trustxBidAdapter.js +1 -1
  161. package/dist/ttdBidAdapter.js +1 -1
  162. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  163. package/dist/underdogmediaBidAdapter.js +1 -1
  164. package/dist/undertoneBidAdapter.js +1 -1
  165. package/dist/userId.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/vuukleBidAdapter.js +1 -1
  170. package/dist/widespaceBidAdapter.js +1 -1
  171. package/dist/winrBidAdapter.js +1 -1
  172. package/dist/yahoosspBidAdapter.js +1 -1
  173. package/dist/yieldmoBidAdapter.js +1 -1
  174. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  175. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  176. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  177. package/dist/zeta_global_sspBidAdapter.js +1 -1
  178. package/integrationExamples/gpt/akamaidap_segments_example.html +5 -3
  179. package/modules/.submodules.json +1 -0
  180. package/modules/adfBidAdapter.js +0 -3
  181. package/modules/adlooxAnalyticsAdapter.js +9 -5
  182. package/modules/adlooxAnalyticsAdapter.md +3 -3
  183. package/modules/adlooxRtdProvider.js +3 -5
  184. package/modules/adlooxRtdProvider.md +2 -2
  185. package/modules/adoceanBidAdapter.js +29 -1
  186. package/modules/adyoulikeBidAdapter.js +3 -0
  187. package/modules/akamaiDapRtdProvider.js +469 -139
  188. package/modules/akamaiDapRtdProvider.md +5 -3
  189. package/modules/automatadBidAdapter.js +9 -5
  190. package/modules/colossussspBidAdapter.js +17 -17
  191. package/modules/conversantBidAdapter.js +2 -2
  192. package/modules/criteoBidAdapter.js +1 -1
  193. package/modules/ftrackIdSystem.js +5 -8
  194. package/modules/gdprEnforcement.js +15 -9
  195. package/modules/gridBidAdapter.js +4 -0
  196. package/modules/hadronAnalyticsAdapter.js +5 -1
  197. package/modules/hadronRtdProvider.js +15 -13
  198. package/modules/incrxBidAdapter.js +87 -0
  199. package/modules/{vertozBidAdapter.md → incrxBidAdapter.md} +6 -6
  200. package/modules/inskinBidAdapter.js +4 -3
  201. package/modules/insticatorBidAdapter.js +109 -42
  202. package/modules/ixBidAdapter.js +3 -2
  203. package/modules/ixBidAdapter.md +1 -1
  204. package/modules/kargoBidAdapter.js +32 -1
  205. package/modules/koblerBidAdapter.js +54 -45
  206. package/modules/koblerBidAdapter.md +12 -17
  207. package/modules/mantisBidAdapter.js +4 -8
  208. package/modules/medianetBidAdapter.js +2 -2
  209. package/modules/medianetRtdProvider.js +4 -6
  210. package/modules/merkleIdSystem.js +43 -31
  211. package/modules/naveggIdSystem.js +3 -2
  212. package/modules/novatiqIdSystem.js +6 -1
  213. package/modules/pubCommonId.js +2 -1
  214. package/modules/pubmaticAnalyticsAdapter.js +49 -33
  215. package/modules/relaidoBidAdapter.js +0 -3
  216. package/modules/sharedIdSystem.js +5 -11
  217. package/modules/slimcutBidAdapter.js +2 -2
  218. package/modules/spotxBidAdapter.js +1 -1
  219. package/modules/synacormediaBidAdapter.js +11 -2
  220. package/modules/taboolaBidAdapter.js +265 -0
  221. package/modules/taboolaBidAdapter.md +49 -0
  222. package/modules/telariaBidAdapter.js +3 -3
  223. package/modules/userId/eids.js +25 -5
  224. package/modules/zeta_global_sspBidAdapter.js +3 -2
  225. package/package.json +1 -1
  226. package/src/AnalyticsAdapter.js +5 -1
  227. package/src/adloader.js +6 -1
  228. package/src/storageManager.js +5 -4
  229. package/test/mocks/analyticsStub.js +13 -0
  230. package/test/mocks/xhr.js +22 -0
  231. package/test/spec/AnalyticsAdapter_spec.js +4 -0
  232. package/test/spec/modules/adfBidAdapter_spec.js +1 -1
  233. package/test/spec/modules/adoceanBidAdapter_spec.js +25 -1
  234. package/test/spec/modules/adriverIdSystem_spec.js +7 -3
  235. package/test/spec/modules/adyoulikeBidAdapter_spec.js +16 -1
  236. package/test/spec/modules/akamaiDapRtdProvider_spec.js +457 -109
  237. package/test/spec/modules/automatadBidAdapter_spec.js +4 -0
  238. package/test/spec/modules/conversantBidAdapter_spec.js +36 -5
  239. package/test/spec/modules/datablocksBidAdapter_spec.js +9 -8
  240. package/test/spec/modules/eids_spec.js +48 -3
  241. package/test/spec/modules/fintezaAnalyticsAdapter_spec.js +4 -4
  242. package/test/spec/modules/ftrackIdSystem_spec.js +11 -22
  243. package/test/spec/modules/gdprEnforcement_spec.js +100 -53
  244. package/test/spec/modules/gridBidAdapter_spec.js +11 -0
  245. package/test/spec/modules/incrxBidAdapter_spec.js +100 -0
  246. package/test/spec/modules/insticatorBidAdapter_spec.js +46 -1
  247. package/test/spec/modules/ixBidAdapter_spec.js +1 -1
  248. package/test/spec/modules/kargoBidAdapter_spec.js +27 -0
  249. package/test/spec/modules/koblerBidAdapter_spec.js +160 -124
  250. package/test/spec/modules/medianetRtdProvider_spec.js +146 -0
  251. package/test/spec/modules/merkleIdSystem_spec.js +58 -37
  252. package/test/spec/modules/naveggIdSystem_spec.js +25 -1
  253. package/test/spec/modules/proxistoreBidAdapter_spec.js +0 -2
  254. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +117 -0
  255. package/test/spec/modules/sovrnBidAdapter_spec.js +253 -264
  256. package/test/spec/modules/synacormediaBidAdapter_spec.js +74 -0
  257. package/test/spec/modules/taboolaBidAdapter_spec.js +455 -0
  258. package/test/spec/modules/userId_spec.js +27 -1
  259. package/test/spec/modules/vidazooBidAdapter_spec.js +9 -4
  260. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +4 -2
  261. package/test/test_deps.js +1 -0
@@ -17,6 +17,7 @@
17
17
  ```
18
18
  pbjs.setConfig({
19
19
  realTimeData: {
20
+ auctionDelay: 2000,
20
21
  dataProviders: [
21
22
  {
22
23
  name: "dap",
@@ -25,9 +26,10 @@
25
26
  apiHostname: '<see your Akamai account rep>',
26
27
  apiVersion: "x1",
27
28
  domain: 'your-domain.com',
28
- identityType: 'email' | 'mobile' | ... | 'dap-signature:1.0.0',
29
- segtax: <Akamai_taxonomy_name>,
30
- tokenTtl: 5,
29
+ identityType: 'email' | 'mobile' | ... | 'dap-signature:1.3.0',
30
+ segtax: 504,
31
+ dapEntropyUrl: 'https://dap-dist.akamaized.net/dapentropy.js',
32
+ dapEntropyTimeout: 1500 // Maximum time for dapentropy to run
31
33
  }
32
34
  }
33
35
  ]
@@ -74,7 +74,7 @@ export const spec = {
74
74
  data: payloadString,
75
75
  options: {
76
76
  contentType: 'application/json',
77
- withCredentials: false,
77
+ withCredentials: true,
78
78
  crossOrigin: true,
79
79
  },
80
80
  }
@@ -114,7 +114,7 @@ export const spec = {
114
114
  },
115
115
  onTimeout: function(timeoutData) {
116
116
  const timeoutUrl = ENDPOINT_URL + '/timeout'
117
- ajax(timeoutUrl, null, JSON.stringify(timeoutData))
117
+ spec.ajaxCall(timeoutUrl, null, JSON.stringify(timeoutData), {method: 'POST', withCredentials: true})
118
118
  },
119
119
  onBidWon: function(bid) {
120
120
  if (!bid.nurl) { return }
@@ -136,11 +136,15 @@ export const spec = {
136
136
  /\$\{AUCTION_ID\}/,
137
137
  bid.auctionId
138
138
  )
139
- spec.ajaxCall(winUrl, null)
139
+ spec.ajaxCall(winUrl, null, null, {method: 'GET', withCredentials: true})
140
140
  return true
141
141
  },
142
- ajaxCall: function(endpoint, data) {
143
- ajax(endpoint, data)
142
+
143
+ ajaxCall: function(endpoint, callback, data, options = {}) {
144
+ if (data) {
145
+ options.contentType = 'application/json'
146
+ }
147
+ ajax(endpoint, callback, data, options)
144
148
  },
145
149
 
146
150
  }
@@ -107,7 +107,7 @@ export const spec = {
107
107
 
108
108
  for (let i = 0; i < validBidRequests.length; i++) {
109
109
  let bid = validBidRequests[i];
110
- let traff = bid.params.traffic || BANNER
110
+ let traff = bid.params.traffic || BANNER;
111
111
  let placement = {
112
112
  placementId: bid.params.placement_id,
113
113
  groupId: bid.params.group_id,
@@ -116,19 +116,7 @@ export const spec = {
116
116
  eids: [],
117
117
  floor: {}
118
118
  };
119
- if (typeof bid.getFloor === 'function') {
120
- let tmpFloor = {};
121
- for (let size of placement.sizes) {
122
- tmpFloor = bid.getFloor({
123
- currency: 'USD',
124
- mediaType: traff,
125
- size: size
126
- });
127
- if (tmpFloor) {
128
- placement.floor[`${size[0]}x${size[1]}`] = tmpFloor.floor;
129
- }
130
- }
131
- }
119
+
132
120
  if (bid.schain) {
133
121
  placement.schain = bid.schain;
134
122
  }
@@ -147,9 +135,7 @@ export const spec = {
147
135
  }
148
136
  if (traff === BANNER) {
149
137
  placement.sizes = bid.mediaTypes[BANNER].sizes
150
- }
151
-
152
- if (traff === VIDEO) {
138
+ } else if (traff === VIDEO) {
153
139
  placement.sizes = bid.mediaTypes[VIDEO].playerSize;
154
140
  placement.playerSize = bid.mediaTypes[VIDEO].playerSize;
155
141
  placement.minduration = bid.mediaTypes[VIDEO].minduration;
@@ -167,6 +153,20 @@ export const spec = {
167
153
  placement.api = bid.mediaTypes[VIDEO].api;
168
154
  placement.linearity = bid.mediaTypes[VIDEO].linearity;
169
155
  }
156
+ if (typeof bid.getFloor === 'function') {
157
+ let tmpFloor = {};
158
+ for (let size of placement.sizes) {
159
+ tmpFloor = bid.getFloor({
160
+ currency: 'USD',
161
+ mediaType: traff,
162
+ size: size
163
+ });
164
+ if (tmpFloor) {
165
+ placement.floor[`${size[0]}x${size[1]}`] = tmpFloor.floor;
166
+ }
167
+ }
168
+ }
169
+
170
170
  placements.push(placement);
171
171
  }
172
172
  return {
@@ -93,7 +93,7 @@ export const spec = {
93
93
  copyOptProperty(format[0].h, video, 'h');
94
94
  }
95
95
 
96
- copyOptProperty(bid.params.position, video, 'pos');
96
+ copyOptProperty(bid.params.position || videoData.pos, video, 'pos');
97
97
  copyOptProperty(bid.params.mimes || videoData.mimes, video, 'mimes');
98
98
  copyOptProperty(bid.params.maxduration || videoData.maxduration, video, 'maxduration');
99
99
  copyOptProperty(bid.params.protocols || videoData.protocols, video, 'protocols');
@@ -105,7 +105,7 @@ export const spec = {
105
105
  const format = convertSizes(bannerData.sizes || bid.sizes);
106
106
  const banner = {format: format};
107
107
 
108
- copyOptProperty(bid.params.position, banner, 'pos');
108
+ copyOptProperty(bid.params.position || bannerData.pos, banner, 'pos');
109
109
 
110
110
  imp.banner = banner;
111
111
  }
@@ -24,7 +24,7 @@ const LOG_PREFIX = 'Criteo: ';
24
24
  Unminified source code can be found in the privately shared repo: https://github.com/Prebid-org/prebid-js-external-js-criteo/blob/master/dist/prod.js
25
25
  */
26
26
  const FAST_BID_VERSION_PLACEHOLDER = '%FAST_BID_VERSION%';
27
- export const FAST_BID_VERSION_CURRENT = 117;
27
+ export const FAST_BID_VERSION_CURRENT = 123;
28
28
  const FAST_BID_VERSION_LATEST = 'latest';
29
29
  const FAST_BID_VERSION_NONE = 'none';
30
30
  const PUBLISHER_TAG_URL_TEMPLATE = 'https://static.criteo.net/js/ld/publishertag.prebid' + FAST_BID_VERSION_PLACEHOLDER + '.js';
@@ -9,6 +9,7 @@ import * as utils from '../src/utils.js';
9
9
  import { submodule } from '../src/hook.js';
10
10
  import { getStorageManager } from '../src/storageManager.js';
11
11
  import { uspDataHandler } from '../src/adapterManager.js';
12
+ import { loadExternalScript } from '../src/adloader.js';
12
13
 
13
14
  const MODULE_NAME = 'ftrackId';
14
15
  const LOG_PREFIX = 'FTRACK - ';
@@ -17,7 +18,6 @@ const VENDOR_ID = null;
17
18
  const LOCAL_STORAGE = 'html5';
18
19
  const FTRACK_STORAGE_NAME = 'ftrackId';
19
20
  const FTRACK_PRIVACY_STORAGE_NAME = `${FTRACK_STORAGE_NAME}_privacy`;
20
- const FTRACK_URL = 'https://d9.flashtalking.com/d9core';
21
21
  const storage = getStorageManager({gvlid: VENDOR_ID, moduleName: MODULE_NAME});
22
22
 
23
23
  let consentInfo = {
@@ -102,11 +102,8 @@ export const ftrackIdSubmodule = {
102
102
  }
103
103
  }
104
104
 
105
- if (config.params && config.params.url && config.params.url === FTRACK_URL) {
106
- var ftrackScript = document.createElement('script');
107
- ftrackScript.setAttribute('src', config.params.url);
108
- window.document.body.appendChild(ftrackScript);
109
- }
105
+ // Creates an async script element and appends it to the document
106
+ loadExternalScript(config.params.url, MODULE_NAME);
110
107
  }
111
108
  };
112
109
  },
@@ -146,8 +143,8 @@ export const ftrackIdSubmodule = {
146
143
  utils.logWarn(LOG_PREFIX + 'config.storage.name recommended to be "' + FTRACK_STORAGE_NAME + '".');
147
144
  }
148
145
 
149
- if (!config.hasOwnProperty('params') || !config.params.hasOwnProperty('url') || config.params.url !== FTRACK_URL) {
150
- utils.logWarn(LOG_PREFIX + 'config.params.url is required for ftrack to run. Url should be "' + FTRACK_URL + '".');
146
+ if (!config.hasOwnProperty('params') || !config.params.hasOwnProperty('url')) {
147
+ utils.logWarn(LOG_PREFIX + 'config.params.url is required for ftrack to run.');
151
148
  return false;
152
149
  }
153
150
 
@@ -18,6 +18,8 @@ const TCF2 = {
18
18
  'purpose7': { id: 7, name: 'measurement' }
19
19
  }
20
20
 
21
+ const VENDORLESS_MODULE_TYPES = ['fpid-module'];
22
+
21
23
  /*
22
24
  These rules would be used if `consentManagement.gdpr.rules` is undefined by the publisher.
23
25
  */
@@ -123,9 +125,10 @@ function getGvlidForAnalyticsAdapter(code) {
123
125
  * @param {Object} consentData - gdpr consent data
124
126
  * @param {string=} currentModule - Bidder code of the current module
125
127
  * @param {number=} gvlId - GVL ID for the module
128
+ * @param {string=} moduleType module type
126
129
  * @returns {boolean}
127
130
  */
128
- export function validateRules(rule, consentData, currentModule, gvlId) {
131
+ export function validateRules(rule, consentData, currentModule, gvlId, moduleType) {
129
132
  const purposeId = TCF2[Object.keys(TCF2).filter(purposeName => TCF2[purposeName].name === rule.purpose)[0]].id;
130
133
 
131
134
  // return 'true' if vendor present in 'vendorExceptions'
@@ -138,12 +141,14 @@ export function validateRules(rule, consentData, currentModule, gvlId) {
138
141
  const vendorConsent = deepAccess(consentData, `vendorData.vendor.consents.${gvlId}`);
139
142
  const liTransparency = deepAccess(consentData, `vendorData.purpose.legitimateInterests.${purposeId}`);
140
143
 
144
+ const vendorlessModule = includes(VENDORLESS_MODULE_TYPES, moduleType);
145
+
141
146
  /*
142
147
  Since vendor exceptions have already been handled, the purpose as a whole is allowed if it's not being enforced
143
148
  or the user has consented. Similar with vendors.
144
149
  */
145
150
  const purposeAllowed = rule.enforcePurpose === false || purposeConsent === true;
146
- const vendorAllowed = rule.enforceVendor === false || vendorConsent === true;
151
+ const vendorAllowed = rule.enforceVendor === false || vendorConsent === true || vendorlessModule === true;
147
152
 
148
153
  /*
149
154
  Few if any vendors should be declaring Legitimate Interest for Device Access (Purpose 1), but some are claiming
@@ -162,15 +167,16 @@ export function validateRules(rule, consentData, currentModule, gvlId) {
162
167
  * @param {Function} fn reference to original function (used by hook logic)
163
168
  * @param {Number=} gvlid gvlid of the module
164
169
  * @param {string=} moduleName name of the module
170
+ * @param {string=} moduleType module type
165
171
  */
166
- export function deviceAccessHook(fn, gvlid, moduleName, result) {
172
+ export function deviceAccessHook(fn, gvlid, moduleName, moduleType, result) {
167
173
  result = Object.assign({}, {
168
174
  hasEnforcementHook: true
169
175
  });
170
176
  if (!hasDeviceAccess()) {
171
177
  logWarn('Device access is disabled by Publisher');
172
178
  result.valid = false;
173
- fn.call(this, gvlid, moduleName, result);
179
+ fn.call(this, gvlid, moduleName, moduleType, result);
174
180
  } else {
175
181
  const consentData = gdprDataHandler.getConsentData();
176
182
  if (consentData && consentData.gdprApplies) {
@@ -183,24 +189,24 @@ export function deviceAccessHook(fn, gvlid, moduleName, result) {
183
189
  gvlid = getGvlid(moduleName) || gvlid;
184
190
  }
185
191
  const curModule = moduleName || curBidder;
186
- let isAllowed = validateRules(purpose1Rule, consentData, curModule, gvlid);
192
+ let isAllowed = validateRules(purpose1Rule, consentData, curModule, gvlid, moduleType);
187
193
  if (isAllowed) {
188
194
  result.valid = true;
189
- fn.call(this, gvlid, moduleName, result);
195
+ fn.call(this, gvlid, moduleName, moduleType, result);
190
196
  } else {
191
197
  curModule && logWarn(`TCF2 denied device access for ${curModule}`);
192
198
  result.valid = false;
193
199
  storageBlocked.push(curModule);
194
- fn.call(this, gvlid, moduleName, result);
200
+ fn.call(this, gvlid, moduleName, moduleType, result);
195
201
  }
196
202
  } else {
197
203
  // The module doesn't enforce TCF1.1 strings
198
204
  result.valid = true;
199
- fn.call(this, gvlid, moduleName, result);
205
+ fn.call(this, gvlid, moduleName, moduleType, result);
200
206
  }
201
207
  } else {
202
208
  result.valid = true;
203
- fn.call(this, gvlid, moduleName, result);
209
+ fn.call(this, gvlid, moduleName, moduleType, result);
204
210
  }
205
211
  }
206
212
  }
@@ -289,6 +289,10 @@ export const spec = {
289
289
  const siteContent = request.site.content || {};
290
290
  request.site.content = mergeDeep(siteContent, { data });
291
291
  }
292
+ const id = deepAccess(site, 'content.id');
293
+ if (id) {
294
+ request.site.content = {...request.site.content, id};
295
+ }
292
296
  }
293
297
 
294
298
  return {
@@ -4,6 +4,7 @@ import adapterManager from '../src/adapterManager.js';
4
4
  import * as utils from '../src/utils.js';
5
5
  import CONSTANTS from '../src/constants.json';
6
6
  import { getStorageManager } from '../src/storageManager.js';
7
+ import {getRefererInfo} from '../src/refererDetection.js';
7
8
 
8
9
  /**
9
10
  * hadronAnalyticsAdapter.js - Audigent Hadron Analytics Adapter
@@ -35,7 +36,10 @@ var pageView = {
35
36
  timezoneOffset: new Date().getTimezoneOffset(),
36
37
  language: window.navigator.language,
37
38
  vendor: window.navigator.vendor,
38
- pageUrl: window.top.location.href,
39
+ pageUrl: (() => {
40
+ const ri = getRefererInfo();
41
+ return ri.canonicalUrl || ri.referer;
42
+ })(),
39
43
  screenWidth: x,
40
44
  screenHeight: y
41
45
  };
@@ -10,12 +10,15 @@ import {config} from '../src/config.js';
10
10
  import {getGlobal} from '../src/prebidGlobal.js';
11
11
  import {getStorageManager} from '../src/storageManager.js';
12
12
  import {submodule} from '../src/hook.js';
13
- import {isFn, isStr, isArray, deepEqual, isPlainObject, logError} from '../src/utils.js';
13
+ import {isFn, isStr, isArray, deepEqual, isPlainObject, logError, logInfo} from '../src/utils.js';
14
+ import {loadExternalScript} from '../src/adloader.js';
14
15
 
16
+ const LOG_PREFIX = 'User ID - HadronRtdProvider submodule: ';
15
17
  const MODULE_NAME = 'realTimeData';
16
18
  const SUBMODULE_NAME = 'hadron';
17
19
  const AU_GVLID = 561;
18
-
20
+ const HADRON_ID_DEFAULT_URL = 'https://id.hadron.ad.gt/api/v1/hadronid?_it=prebid';
21
+ const HADRON_SEGMENT_URL = 'https://seg.hadron.ad.gt/api/v1/rtd';
19
22
  export const HALOID_LOCAL_NAME = 'auHadronId';
20
23
  export const RTD_LOCAL_NAME = 'auHadronRtd';
21
24
  export const storage = getStorageManager({gvlid: AU_GVLID, moduleName: SUBMODULE_NAME});
@@ -92,8 +95,9 @@ function mergeLazy(target, source) {
92
95
 
93
96
  /**
94
97
  * Param or default.
95
- * @param {String} param
98
+ * @param {String|Function} param
96
99
  * @param {String} defaultVal
100
+ * @param {Object} arg
97
101
  */
98
102
  function paramOrDefault(param, defaultVal, arg) {
99
103
  if (isFn(param)) {
@@ -141,7 +145,7 @@ export function addRealTimeData(bidConfig, rtd, rtdConfig) {
141
145
 
142
146
  /**
143
147
  * Real-time data retrieval from Audigent
144
- * @param {Object} reqBidsConfigObj
148
+ * @param {Object} bidConfig
145
149
  * @param {function} onDone
146
150
  * @param {Object} rtdConfig
147
151
  * @param {Object} userConsent
@@ -169,22 +173,21 @@ export function getRealTimeData(bidConfig, onDone, rtdConfig, userConsent) {
169
173
  userIds.hadronId = hadronId;
170
174
  getRealTimeDataAsync(bidConfig, onDone, rtdConfig, userConsent, userIds);
171
175
  } else {
172
- var script = document.createElement('script');
173
- script.type = 'text/javascript';
174
-
175
176
  window.pubHadronCb = (hadronId) => {
176
177
  userIds.hadronId = hadronId;
177
178
  getRealTimeDataAsync(bidConfig, onDone, rtdConfig, userConsent, userIds);
178
179
  }
179
-
180
180
  const hadronIdUrl = rtdConfig.params && rtdConfig.params.hadronIdUrl;
181
- script.src = paramOrDefault(hadronIdUrl, 'https://id.hadron.ad.gt/api/v1/hadronid', userIds);
182
- document.getElementsByTagName('head')[0].appendChild(script);
181
+ const scriptUrl = paramOrDefault(hadronIdUrl, HADRON_ID_DEFAULT_URL, userIds);
182
+ loadExternalScript(scriptUrl, 'hadron', () => {
183
+ logInfo(LOG_PREFIX, 'hadronIdTag loaded', scriptUrl);
184
+ })
183
185
  }
184
186
  }
185
187
 
186
188
  /**
187
189
  * Async rtd retrieval from Audigent
190
+ * @param {Object} bidConfig
188
191
  * @param {function} onDone
189
192
  * @param {Object} rtdConfig
190
193
  * @param {Object} userConsent
@@ -202,8 +205,7 @@ export function getRealTimeDataAsync(bidConfig, onDone, rtdConfig, userConsent,
202
205
  reqParams.pubHadronPm = window.pubHadronPm;
203
206
  }
204
207
 
205
- const url = `https://seg.hadron.ad.gt/api/v1/rtd`;
206
- ajax(url, {
208
+ ajax(HADRON_SEGMENT_URL, {
207
209
  success: function (response, req) {
208
210
  if (req.status === 200) {
209
211
  try {
@@ -237,7 +239,7 @@ export function getRealTimeDataAsync(bidConfig, onDone, rtdConfig, userConsent,
237
239
  /**
238
240
  * Module init
239
241
  * @param {Object} provider
240
- * @param {Objkect} userConsent
242
+ * @param {Object} userConsent
241
243
  * @return {boolean}
242
244
  */
243
245
  function init(provider, userConsent) {
@@ -0,0 +1,87 @@
1
+ import { parseSizesInput, isEmpty } from '../src/utils.js';
2
+ import { registerBidder } from '../src/adapters/bidderFactory.js';
3
+ import { BANNER } from '../src/mediaTypes.js'
4
+
5
+ const BIDDER_CODE = 'incrementx';
6
+ const ENDPOINT_URL = 'https://hb.incrementxserv.com/vzhbidder/bid';
7
+ const DEFAULT_CURRENCY = 'USD';
8
+ const CREATIVE_TTL = 300;
9
+
10
+ export const spec = {
11
+ code: BIDDER_CODE,
12
+ supportedMediaTypes: [BANNER],
13
+
14
+ /**
15
+ * Determines whether or not the given bid request is valid.
16
+ *
17
+ * @param {BidRequest} bid The bid params to validate.
18
+ * @return boolean True if this is a valid bid, and false otherwise.
19
+ */
20
+ isBidRequestValid: function (bid) {
21
+ return !!(bid.params.placementId);
22
+ },
23
+
24
+ /**
25
+ * Make a server request from the list of BidRequests.
26
+ *
27
+ * @param validBidRequests
28
+ * @param bidderRequest
29
+ * @return Array Info describing the request to the server.
30
+ */
31
+ buildRequests: function (validBidRequests, bidderRequest) {
32
+ return validBidRequests.map(bidRequest => {
33
+ const sizes = parseSizesInput(bidRequest.params.size || bidRequest.sizes);
34
+
35
+ const requestParams = {
36
+ _vzPlacementId: bidRequest.params.placementId,
37
+ sizes: sizes,
38
+ _slotBidId: bidRequest.bidId,
39
+ _rqsrc: bidderRequest.refererInfo.referer,
40
+ };
41
+
42
+ const payload = {
43
+ q: encodeURI(JSON.stringify(requestParams))
44
+ }
45
+
46
+ return {
47
+ method: 'POST',
48
+ url: ENDPOINT_URL,
49
+ data: payload
50
+ };
51
+ });
52
+ },
53
+
54
+ /**
55
+ * Unpack the response from the server into a list of bids.
56
+ *
57
+ * @param {ServerResponse} serverResponse A successful response from the server.
58
+ * @return {Bid[]} An array of bids which were nested inside the server.
59
+ */
60
+ interpretResponse: function (serverResponse) {
61
+ const response = serverResponse.body;
62
+ const bids = [];
63
+ if (isEmpty(response)) {
64
+ return bids;
65
+ }
66
+ const responseBid = {
67
+ requestId: response.slotBidId,
68
+ cpm: response.cpm,
69
+ currency: response.currency || DEFAULT_CURRENCY,
70
+ width: response.adWidth,
71
+ height: response.adHeight,
72
+ ttl: CREATIVE_TTL,
73
+ creativeId: response.creativeId || 0,
74
+ netRevenue: response.netRevenue || false,
75
+ meta: {
76
+ mediaType: response.mediaType || BANNER,
77
+ advertiserDomains: response.advertiserDomains || []
78
+ },
79
+ ad: response.ad
80
+ };
81
+ bids.push(responseBid);
82
+ return bids;
83
+ }
84
+
85
+ };
86
+
87
+ registerBidder(spec);
@@ -1,16 +1,16 @@
1
1
  # Overview
2
2
 
3
3
  ```
4
- Module Name: Vertoz Bidder Adapter
4
+ Module Name: IncrementX Bidder Adapter
5
5
  Module Type: Bidder Adapter
6
6
  Maintainer: prebid-team@vertoz.com
7
7
  ```
8
8
 
9
9
  # Description
10
10
 
11
- Connects to Vertoz exchange for bids.
12
- Vertoz Bidder adapter supports Banner ads.
13
- Use bidder code ```vertoz``` for all Vertoz traffic.
11
+ Connects to IncrementX exchange for bids.
12
+ IncrementX Bidder adapter supports Banner ads.
13
+ Use bidder code ```incrementx``` for all IncrementX traffic.
14
14
 
15
15
  # Test Parameters
16
16
  ```
@@ -20,9 +20,9 @@ var adUnits = [
20
20
  code: 'banner-div',
21
21
  sizes: [[300, 250], [300,600]], // a display size(s)
22
22
  bids: [{
23
- bidder: 'vertoz',
23
+ bidder: 'incrementx',
24
24
  params: {
25
- placementId: 'VZ-HB-B784382V6C6G3C'
25
+ placementId: 'PNX-HB-F796830VCF3C4B'
26
26
  }
27
27
  }]
28
28
  },
@@ -1,4 +1,5 @@
1
1
  import { createTrackPixelHtml } from '../src/utils.js';
2
+ import { loadExternalScript } from '../src/adloader.js';
2
3
  import { registerBidder } from '../src/adapters/bidderFactory.js';
3
4
 
4
5
  const BIDDER_CODE = 'inskin';
@@ -211,9 +212,9 @@ export const spec = {
211
212
  bidPrice: bidsMap[e.data.bidId].price,
212
213
  serverResponse
213
214
  };
214
- const script = document.createElement('script');
215
- script.src = 'https://cdn.inskinad.com/isfe/publishercode/' + bidsMap[e.data.bidId].params.siteId + '/default.js?autoload&id=' + id;
216
- document.getElementsByTagName('head')[0].appendChild(script);
215
+
216
+ const url = 'https://cdn.inskinad.com/isfe/publishercode/' + bidsMap[e.data.bidId].params.siteId + '/default.js?autoload&id=' + id;
217
+ loadExternalScript(url, BIDDER_CODE);
217
218
  });
218
219
  }
219
220