prebid.js 9.0.0 → 9.2.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 (307) hide show
  1. package/.nvmrc +1 -1
  2. package/browsers.json +3 -3
  3. package/dist/33acrossAnalyticsAdapter.js +1 -1
  4. package/dist/33acrossBidAdapter.js +1 -1
  5. package/dist/33acrossIdSystem.js +1 -1
  6. package/dist/BTBidAdapter.js +1 -1
  7. package/dist/acuityadsBidAdapter.js +1 -1
  8. package/dist/adagioAnalyticsAdapter.js +1 -1
  9. package/dist/adagioBidAdapter.js +1 -1
  10. package/dist/adagioRtdProvider.js +1 -1
  11. package/dist/adagioUtils.js +1 -0
  12. package/dist/adgenerationBidAdapter.js +1 -1
  13. package/dist/admanBidAdapter.js +1 -1
  14. package/dist/adpod.js +1 -1
  15. package/dist/adprimeBidAdapter.js +1 -1
  16. package/dist/adqueryBidAdapter.js +1 -1
  17. package/dist/adrelevantisBidAdapter.js +1 -1
  18. package/dist/adstirBidAdapter.js +1 -1
  19. package/dist/adtrgtmeBidAdapter.js +1 -1
  20. package/dist/adxcgBidAdapter.js +1 -1
  21. package/dist/adyoulikeBidAdapter.js +1 -1
  22. package/dist/agmaAnalyticsAdapter.js +1 -1
  23. package/dist/ajaBidAdapter.js +1 -1
  24. package/dist/amxBidAdapter.js +1 -1
  25. package/dist/amxIdSystem.js +1 -1
  26. package/dist/appierAnalyticsAdapter.js +1 -1
  27. package/dist/appnexusBidAdapter.js +1 -1
  28. package/dist/appnexusUtils.js +1 -1
  29. package/dist/asoBidAdapter.js +1 -1
  30. package/dist/autoplayDetection.js +1 -1
  31. package/dist/axisBidAdapter.js +1 -1
  32. package/dist/axonixBidAdapter.js +1 -1
  33. package/dist/beyondmediaBidAdapter.js +1 -1
  34. package/dist/bidglassBidAdapter.js +1 -1
  35. package/dist/big-richmediaBidAdapter.js +1 -1
  36. package/dist/bliinkBidAdapter.js +1 -1
  37. package/dist/boldwinBidAdapter.js +1 -1
  38. package/dist/bridBidAdapter.js +1 -1
  39. package/dist/bridgewellBidAdapter.js +1 -1
  40. package/dist/brightMountainMediaBidAdapter.js +1 -1
  41. package/dist/carodaBidAdapter.js +1 -1
  42. package/dist/chtnwBidAdapter.js +1 -1
  43. package/dist/chunk-core.js +1 -1
  44. package/dist/compassBidAdapter.js +1 -1
  45. package/dist/concertBidAdapter.js +1 -1
  46. package/dist/connectadBidAdapter.js +1 -1
  47. package/dist/consumableBidAdapter.js +1 -1
  48. package/dist/contentexchangeBidAdapter.js +1 -1
  49. package/dist/conversantAnalyticsAdapter.js +1 -1
  50. package/dist/conversantBidAdapter.js +1 -1
  51. package/dist/craftBidAdapter.js +1 -1
  52. package/dist/criteoBidAdapter.js +1 -1
  53. package/dist/cwireBidAdapter.js +1 -1
  54. package/dist/dailymotionBidAdapter.js +1 -1
  55. package/dist/dependencies.json +83 -4
  56. package/dist/dspxBidAdapter.js +1 -1
  57. package/dist/dxkultureBidAdapter.js +1 -1
  58. package/dist/e_volutionBidAdapter.js +1 -1
  59. package/dist/emtvBidAdapter.js +1 -1
  60. package/dist/eplanningBidAdapter.js +1 -1
  61. package/dist/euidIdSystem.js +1 -1
  62. package/dist/exadsBidAdapter.js +1 -1
  63. package/dist/feedadBidAdapter.js +1 -1
  64. package/dist/finativeBidAdapter.js +1 -1
  65. package/dist/freewheel-sspBidAdapter.js +1 -1
  66. package/dist/globalsunBidAdapter.js +1 -1
  67. package/dist/gmosspBidAdapter.js +1 -1
  68. package/dist/goldbachBidAdapter.js +1 -1
  69. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  70. package/dist/greenbidsRtdProvider.js +1 -1
  71. package/dist/gridBidAdapter.js +1 -1
  72. package/dist/gumgumBidAdapter.js +1 -1
  73. package/dist/h12mediaBidAdapter.js +1 -1
  74. package/dist/hypelabBidAdapter.js +1 -1
  75. package/dist/id5IdSystem.js +1 -1
  76. package/dist/illuminBidAdapter.js +1 -1
  77. package/dist/imdsBidAdapter.js +1 -1
  78. package/dist/improvedigitalBidAdapter.js +1 -1
  79. package/dist/insticatorBidAdapter.js +1 -1
  80. package/dist/iqzoneBidAdapter.js +1 -1
  81. package/dist/ixBidAdapter.js +1 -1
  82. package/dist/jixieBidAdapter.js +1 -1
  83. package/dist/justpremiumBidAdapter.js +1 -1
  84. package/dist/kargoBidAdapter.js +1 -1
  85. package/dist/kimberliteBidAdapter.js +1 -1
  86. package/dist/kiviadsBidAdapter.js +1 -1
  87. package/dist/konduitAnalyticsAdapter.js +1 -1
  88. package/dist/krushmediaBidAdapter.js +1 -1
  89. package/dist/kueezBidAdapter.js +1 -1
  90. package/dist/kueezRtbBidAdapter.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/loyalBidAdapter.js +1 -1
  97. package/dist/luceadBidAdapter.js +1 -1
  98. package/dist/lunamediahbBidAdapter.js +1 -1
  99. package/dist/magniteAnalyticsAdapter.js +1 -1
  100. package/dist/malltvAnalyticsAdapter.js +1 -1
  101. package/dist/marsmediaBidAdapter.js +1 -1
  102. package/dist/mathildeadsBidAdapter.js +1 -1
  103. package/dist/mediafuseBidAdapter.js +1 -1
  104. package/dist/mediasquareBidAdapter.js +1 -1
  105. package/dist/mgidBidAdapter.js +1 -1
  106. package/dist/mgidXBidAdapter.js +1 -1
  107. package/dist/minutemediaBidAdapter.js +1 -1
  108. package/dist/missenaBidAdapter.js +1 -1
  109. package/dist/mobfoxpbBidAdapter.js +1 -1
  110. package/dist/mobianRtdProvider.js +1 -0
  111. package/dist/nexx360BidAdapter.js +1 -1
  112. package/dist/nobidAnalyticsAdapter.js +1 -1
  113. package/dist/nobidBidAdapter.js +1 -1
  114. package/dist/not-for-prod/prebid.js +190 -186
  115. package/dist/oguryBidAdapter.js +1 -1
  116. package/dist/onetagBidAdapter.js +1 -1
  117. package/dist/ooloAnalyticsAdapter.js +1 -1
  118. package/dist/openwebBidAdapter.js +1 -1
  119. package/dist/openxBidAdapter.js +1 -1
  120. package/dist/optidigitalBidAdapter.js +1 -1
  121. package/dist/ortbConverter.js +1 -1
  122. package/dist/outbrainBidAdapter.js +1 -1
  123. package/dist/ozoneBidAdapter.js +1 -1
  124. package/dist/paapi.js +1 -1
  125. package/dist/pgamsspBidAdapter.js +1 -1
  126. package/dist/pixfutureBidAdapter.js +1 -1
  127. package/dist/playdigoBidAdapter.js +1 -1
  128. package/dist/prebidServerBidAdapter.js +1 -1
  129. package/dist/pubCircleBidAdapter.js +1 -1
  130. package/dist/publinkIdSystem.js +1 -1
  131. package/dist/publirBidAdapter.js +1 -1
  132. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  133. package/dist/pubmaticBidAdapter.js +1 -1
  134. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  135. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  136. package/dist/pxyzBidAdapter.js +1 -1
  137. package/dist/qtBidAdapter.js +1 -1
  138. package/dist/quantcastBidAdapter.js +1 -1
  139. package/dist/raynRtdProvider.js +1 -1
  140. package/dist/readpeakBidAdapter.js +1 -1
  141. package/dist/relaidoBidAdapter.js +1 -1
  142. package/dist/retailspotBidAdapter.js +1 -1
  143. package/dist/rhythmoneBidAdapter.js +1 -1
  144. package/dist/richaudienceBidAdapter.js +1 -0
  145. package/dist/ringieraxelspringerBidAdapter.js +1 -1
  146. package/dist/riseBidAdapter.js +1 -1
  147. package/dist/rubiconBidAdapter.js +1 -1
  148. package/dist/seedingAllianceBidAdapter.js +1 -1
  149. package/dist/seedtagBidAdapter.js +1 -1
  150. package/dist/setupadBidAdapter.js +1 -1
  151. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  152. package/dist/sharethroughBidAdapter.js +1 -1
  153. package/dist/shinezBidAdapter.js +1 -1
  154. package/dist/shinezRtbBidAdapter.js +1 -1
  155. package/dist/smaatoBidAdapter.js +1 -1
  156. package/dist/smartadserverBidAdapter.js +1 -1
  157. package/dist/smartxBidAdapter.js +1 -1
  158. package/dist/smartytechBidAdapter.js +1 -1
  159. package/dist/smilewantedBidAdapter.js +1 -1
  160. package/dist/sonobiBidAdapter.js +1 -1
  161. package/dist/sovrnBidAdapter.js +1 -1
  162. package/dist/sspBCBidAdapter.js +1 -1
  163. package/dist/stnBidAdapter.js +1 -1
  164. package/dist/stvBidAdapter.js +1 -1
  165. package/dist/sublimeBidAdapter.js +1 -1
  166. package/dist/taboolaBidAdapter.js +1 -1
  167. package/dist/tagorasBidAdapter.js +1 -1
  168. package/dist/targetVideoBidAdapter.js +1 -1
  169. package/dist/teadsBidAdapter.js +1 -1
  170. package/dist/teqblazeUtils.js +1 -0
  171. package/dist/themoneytizerBidAdapter.js +1 -1
  172. package/dist/topicsFpdModule.js +1 -1
  173. package/dist/trionBidAdapter.js +1 -1
  174. package/dist/tripleliftBidAdapter.js +1 -1
  175. package/dist/ttdBidAdapter.js +1 -1
  176. package/dist/twistDigitalBidAdapter.js +1 -1
  177. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  178. package/dist/uid2IdSystem.js +1 -1
  179. package/dist/underdogmediaBidAdapter.js +1 -1
  180. package/dist/undertoneBidAdapter.js +1 -1
  181. package/dist/unrulyBidAdapter.js +1 -1
  182. package/dist/vidazooBidAdapter.js +1 -1
  183. package/dist/videobyteBidAdapter.js +1 -1
  184. package/dist/visiblemeasuresBidAdapter.js +1 -1
  185. package/dist/visxBidAdapter.js +1 -1
  186. package/dist/vuukleBidAdapter.js +1 -1
  187. package/dist/widespaceBidAdapter.js +1 -1
  188. package/dist/winrBidAdapter.js +1 -1
  189. package/dist/yahooAdsBidAdapter.js +1 -1
  190. package/dist/yieldmoBidAdapter.js +1 -1
  191. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  192. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  193. package/integrationExamples/gpt/raynRtdProvider_example.html +1 -0
  194. package/libraries/adagioUtils/adagioUtils.js +35 -0
  195. package/libraries/appnexusUtils/anUtils.js +1 -0
  196. package/libraries/autoplayDetection/autoplay.js +8 -1
  197. package/libraries/ortbConverter/converter.js +1 -1
  198. package/libraries/teqblazeUtils/bidderUtils.js +253 -0
  199. package/modules/.submodules.json +1 -0
  200. package/modules/acuityadsBidAdapter.js +5 -203
  201. package/modules/adagioBidAdapter.js +1 -17
  202. package/modules/adagioRtdProvider.js +41 -51
  203. package/modules/adagioRtdProvider.md +1 -0
  204. package/modules/admanBidAdapter.js +31 -188
  205. package/modules/adprimeBidAdapter.js +28 -165
  206. package/modules/axisBidAdapter.js +33 -165
  207. package/modules/beyondmediaBidAdapter.js +5 -189
  208. package/modules/bliinkBidAdapter.js +3 -31
  209. package/modules/boldwinBidAdapter.js +21 -159
  210. package/modules/ceeIdSystem.js +1 -1
  211. package/modules/compassBidAdapter.js +5 -198
  212. package/modules/contentexchangeBidAdapter.js +5 -200
  213. package/modules/conversantBidAdapter.js +1 -0
  214. package/modules/dailymotionBidAdapter.js +1 -1
  215. package/modules/e_volutionBidAdapter.js +4 -186
  216. package/modules/emtvBidAdapter.js +5 -198
  217. package/modules/globalsunBidAdapter.js +5 -199
  218. package/modules/id5IdSystem.js +31 -2
  219. package/modules/id5IdSystem.md +67 -2
  220. package/modules/iqzoneBidAdapter.js +5 -224
  221. package/modules/kiviadsBidAdapter.js +5 -199
  222. package/modules/krushmediaBidAdapter.js +25 -143
  223. package/modules/loyalBidAdapter.js +4 -178
  224. package/modules/lunamediahbBidAdapter.js +5 -118
  225. package/modules/mathildeadsBidAdapter.js +5 -198
  226. package/modules/mgidXBidAdapter.js +14 -209
  227. package/modules/mobfoxpbBidAdapter.js +4 -135
  228. package/modules/mobianRtdProvider.js +52 -0
  229. package/modules/mobianRtdProvider.md +11 -0
  230. package/modules/nobidAnalyticsAdapter.js +2 -3
  231. package/modules/novatiqIdSystem.md +2 -3
  232. package/modules/ozoneBidAdapter.js +117 -58
  233. package/modules/paapi.js +2 -1
  234. package/modules/pgamsspBidAdapter.js +5 -240
  235. package/modules/playdigoBidAdapter.js +4 -186
  236. package/modules/prebidServerBidAdapter/index.js +9 -2
  237. package/modules/pubCircleBidAdapter.js +5 -218
  238. package/modules/pubmaticAnalyticsAdapter.js +21 -8
  239. package/modules/pubxaiAnalyticsAdapter.js +1 -5
  240. package/modules/qtBidAdapter.js +5 -224
  241. package/modules/raynRtdProvider.js +36 -3
  242. package/modules/richaudienceBidAdapter.js +375 -0
  243. package/modules/richaudienceBidAdapter.md +1 -1
  244. package/modules/seedtagBidAdapter.js +1 -0
  245. package/modules/setupadBidAdapter.js +76 -153
  246. package/modules/setupadBidAdapter.md +1 -1
  247. package/modules/smaatoBidAdapter.js +17 -6
  248. package/modules/smartytechBidAdapter.js +7 -2
  249. package/modules/topicsFpdModule.js +1 -1
  250. package/modules/uid2IdSystem.js +0 -1
  251. package/modules/uid2IdSystem_shared.js +0 -1
  252. package/modules/visiblemeasuresBidAdapter.js +5 -199
  253. package/modules/zeta_global_sspAnalyticsAdapter.js +8 -4
  254. package/package.json +1 -1
  255. package/src/auction.js +5 -63
  256. package/src/utils/focusTimeout.js +41 -0
  257. package/src/utils/ttlCollection.js +2 -1
  258. package/src/utils.js +42 -0
  259. package/src/videoCache.js +72 -0
  260. package/test/mocks/videoCacheStub.js +1 -1
  261. package/test/spec/auctionmanager_spec.js +16 -1
  262. package/test/spec/libraries/teqblazeUtils/bidderUtils_spec.js +519 -0
  263. package/test/spec/modules/acuityadsBidAdapter_spec.js +79 -43
  264. package/test/spec/modules/adagioRtdProvider_spec.js +62 -1
  265. package/test/spec/modules/admanBidAdapter_spec.js +370 -247
  266. package/test/spec/modules/adprimeBidAdapter_spec.js +225 -78
  267. package/test/spec/modules/axisBidAdapter_spec.js +78 -14
  268. package/test/spec/modules/beyondmediaBidAdapter_spec.js +80 -18
  269. package/test/spec/modules/bliinkBidAdapter_spec.js +8 -2
  270. package/test/spec/modules/boldwinBidAdapter_spec.js +221 -75
  271. package/test/spec/modules/compassBidAdapter_spec.js +130 -16
  272. package/test/spec/modules/contentexchangeBidAdapter_spec.js +134 -21
  273. package/test/spec/modules/conversantBidAdapter_spec.js +7 -0
  274. package/test/spec/modules/dailymotionBidAdapter_spec.js +3 -3
  275. package/test/spec/modules/e_volutionBidAdapter_spec.js +65 -3
  276. package/test/spec/modules/emtvBidAdapter_spec.js +131 -16
  277. package/test/spec/modules/globalsunBidAdapter_spec.js +130 -16
  278. package/test/spec/modules/id5IdSystem_spec.js +79 -3
  279. package/test/spec/modules/iqzoneBidAdapter_spec.js +66 -12
  280. package/test/spec/modules/kiviadsBidAdapter_spec.js +131 -20
  281. package/test/spec/modules/krushmediaBidAdapter_spec.js +272 -90
  282. package/test/spec/modules/loyalBidAdapter_spec.js +114 -14
  283. package/test/spec/modules/lunamediahbBidAdapter_spec.js +221 -87
  284. package/test/spec/modules/mathildeadsBidAdapter_spec.js +87 -18
  285. package/test/spec/modules/mgidXBidAdapter_spec.js +11 -3
  286. package/test/spec/modules/mobfoxpbBidAdapter_spec.js +229 -91
  287. package/test/spec/modules/mobianRtdProvider_spec.js +107 -0
  288. package/test/spec/modules/ozoneBidAdapter_spec.js +192 -22
  289. package/test/spec/modules/paapi_spec.js +5 -5
  290. package/test/spec/modules/pgamsspBidAdapter_spec.js +83 -16
  291. package/test/spec/modules/playdigoBidAdapter_spec.js +38 -9
  292. package/test/spec/modules/prebidServerBidAdapter_spec.js +14 -0
  293. package/test/spec/modules/pubCircleBidAdapter_spec.js +82 -17
  294. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +52 -5
  295. package/test/spec/modules/qtBidAdapter_spec.js +15 -3
  296. package/test/spec/modules/raynRtdProvider_spec.js +25 -0
  297. package/test/spec/modules/richaudienceBidAdapter_spec.js +1304 -0
  298. package/test/spec/modules/seedtagBidAdapter_spec.js +2 -0
  299. package/test/spec/modules/setupadBidAdapter_spec.js +139 -97
  300. package/test/spec/modules/smaatoBidAdapter_spec.js +27 -0
  301. package/test/spec/modules/smartytechBidAdapter_spec.js +5 -1
  302. package/test/spec/modules/topicsFpdModule_spec.js +43 -59
  303. package/test/spec/modules/visiblemeasuresBidAdapter_spec.js +130 -16
  304. package/test/spec/modules/zeta_global_sspAnalyticsAdapter_spec.js +4 -0
  305. package/test/spec/ortbConverter/converter_spec.js +7 -3
  306. package/test/spec/unit/utils/focusTimeout_spec.js +60 -0
  307. package/test/spec/videoCache_spec.js +56 -53
@@ -1,26 +1,54 @@
1
1
  import {
2
2
  _each,
3
- createTrackPixelHtml,
4
- deepAccess,
5
3
  isStr,
6
4
  getBidIdParameter,
7
5
  triggerPixel,
8
6
  logWarn,
7
+ deepSetValue,
9
8
  } from '../src/utils.js';
10
9
  import { registerBidder } from '../src/adapters/bidderFactory.js';
11
10
  import { BANNER } from '../src/mediaTypes.js';
11
+ import { ortbConverter } from '../libraries/ortbConverter/converter.js';
12
12
 
13
13
  const BIDDER_CODE = 'setupad';
14
14
  const ENDPOINT = 'https://prebid.setupad.io/openrtb2/auction';
15
15
  const SYNC_ENDPOINT = 'https://cookie.stpd.cloud/sync?';
16
- const REPORT_ENDPOINT = 'https://adapter-analytics.setupad.io/api/adapter-analytics';
16
+ const REPORT_ENDPOINT = 'https://adapter-analytics.setupad.io/api/adapter-analytics?';
17
17
  const GVLID = 1241;
18
18
  const TIME_TO_LIVE = 360;
19
- const biddersCreativeIds = {};
20
-
21
- function getEids(bidRequest) {
22
- if (deepAccess(bidRequest, 'userIdAsEids')) return bidRequest.userIdAsEids;
23
- }
19
+ export const biddersCreativeIds = {}; // export only for tests
20
+ const NET_REVENUE = true;
21
+ const TEST_REQUEST = 0; // used only for testing
22
+
23
+ const converter = ortbConverter({
24
+ context: {
25
+ netRevenue: NET_REVENUE,
26
+ ttl: TIME_TO_LIVE,
27
+ },
28
+ imp(buildImp, bidRequest, context) {
29
+ const imp = buildImp(bidRequest, context);
30
+ deepSetValue(
31
+ imp,
32
+ 'ext.prebid.storedrequest.id',
33
+ getBidIdParameter('placement_id', bidRequest.params)
34
+ );
35
+ return imp;
36
+ },
37
+ request(buildRequest, imps, bidderRequest, context) {
38
+ const request = buildRequest(imps, bidderRequest, context);
39
+ deepSetValue(request, 'test', TEST_REQUEST);
40
+ deepSetValue(
41
+ request,
42
+ 'ext.prebid.storedrequest.id',
43
+ getBidIdParameter(
44
+ 'account_id',
45
+ bidderRequest.bids.find((bid) => bid.hasOwnProperty('params')).params
46
+ )
47
+ );
48
+ deepSetValue(request, 'setupad', 'adapter');
49
+ return request;
50
+ },
51
+ });
24
52
 
25
53
  export const spec = {
26
54
  code: BIDDER_CODE,
@@ -28,101 +56,26 @@ export const spec = {
28
56
  gvlid: GVLID,
29
57
 
30
58
  isBidRequestValid: function (bid) {
31
- return !!(bid.params.placement_id && isStr(bid.params.placement_id));
59
+ return !!(
60
+ bid.params.placement_id &&
61
+ isStr(bid.params.placement_id) &&
62
+ bid.params.account_id &&
63
+ isStr(bid.params.account_id)
64
+ );
32
65
  },
33
66
 
34
67
  buildRequests: function (validBidRequests, bidderRequest) {
35
- const requests = [];
36
-
37
- _each(validBidRequests, function (bid) {
38
- const id = getBidIdParameter('placement_id', bid.params);
39
- const accountId = getBidIdParameter('account_id', bid.params);
40
- const auctionId = bid.auctionId;
41
- const bidId = bid.bidId;
42
- const eids = getEids(bid) || undefined;
43
- let sizes = bid.sizes;
44
- if (sizes && !Array.isArray(sizes[0])) sizes = [sizes];
45
-
46
- const site = {
47
- page: bidderRequest?.refererInfo?.page,
48
- ref: bidderRequest?.refererInfo?.ref,
49
- domain: bidderRequest?.refererInfo?.domain,
50
- };
51
- const device = {
52
- w: bidderRequest?.ortb2?.device?.w,
53
- h: bidderRequest?.ortb2?.device?.h,
54
- };
55
-
56
- const payload = {
57
- id: bid?.bidderRequestId,
58
- ext: {
59
- prebid: {
60
- storedrequest: {
61
- id: accountId || 'default',
62
- },
63
- },
64
- },
65
- user: { ext: { eids } },
66
- device,
67
- site,
68
- imp: [],
69
- };
70
-
71
- const imp = {
72
- id: bid.adUnitCode,
73
- ext: {
74
- prebid: {
75
- storedrequest: { id },
76
- },
77
- },
78
- };
79
-
80
- if (deepAccess(bid, 'mediaTypes.banner')) {
81
- imp.banner = {
82
- format: (sizes || []).map((s) => {
83
- return { w: s[0], h: s[1] };
84
- }),
85
- };
86
- }
87
-
88
- payload.imp.push(imp);
89
-
90
- const gdprConsent = bidderRequest && bidderRequest.gdprConsent;
91
- const uspConsent = bidderRequest && bidderRequest.uspConsent;
92
-
93
- if (gdprConsent || uspConsent) {
94
- payload.regs = { ext: {} };
95
-
96
- if (uspConsent) payload.regs.ext.us_privacy = uspConsent;
97
-
98
- if (gdprConsent) {
99
- if (typeof gdprConsent.gdprApplies !== 'undefined') {
100
- payload.regs.ext.gdpr = gdprConsent.gdprApplies ? 1 : 0;
101
- }
102
-
103
- if (typeof gdprConsent.consentString !== 'undefined') {
104
- payload.user.ext.consent = gdprConsent.consentString;
105
- }
106
- }
107
- }
108
- const params = bid.params;
109
-
110
- requests.push({
111
- method: 'POST',
112
- url: ENDPOINT,
113
- data: JSON.stringify(payload),
114
- options: {
115
- contentType: 'text/plain',
116
- withCredentials: true,
117
- },
118
-
119
- bidId,
120
- params,
121
- auctionId,
122
- });
123
- });
124
-
125
- return requests;
68
+ const data = converter.toORTB({ validBidRequests, bidderRequest });
69
+
70
+ return {
71
+ method: 'POST',
72
+ url: ENDPOINT,
73
+ data,
74
+ options: {
75
+ contentType: 'text/plain',
76
+ withCredentials: true,
77
+ },
78
+ };
126
79
  },
127
80
 
128
81
  interpretResponse: function (serverResponse, bidRequest) {
@@ -136,40 +89,22 @@ export const spec = {
136
89
  return [];
137
90
  }
138
91
 
139
- const serverBody = serverResponse.body;
140
- const bidResponses = [];
141
-
142
- _each(serverBody.seatbid, (res) => {
92
+ // set a seat for creativeId for triggerPixel url
93
+ _each(serverResponse.body.seatbid, (res) => {
143
94
  _each(res.bid, (bid) => {
144
- const requestId = bidRequest.bidId;
145
- const params = bidRequest.params;
146
- const { ad, adUrl } = getAd(bid);
147
-
148
- const bidResponse = {
149
- requestId,
150
- params,
151
- cpm: bid.price,
152
- width: bid.w,
153
- height: bid.h,
154
- creativeId: bid.id,
155
- currency: serverBody.cur,
156
- netRevenue: true,
157
- ttl: TIME_TO_LIVE,
158
- meta: {
159
- advertiserDomains: bid.adomain || [],
160
- },
161
- };
162
-
163
- // set a seat for creativeId for triggerPixel url
164
- biddersCreativeIds[bidResponse.creativeId] = res.seat;
165
-
166
- bidResponse.ad = ad;
167
- bidResponse.adUrl = adUrl;
168
- bidResponses.push(bidResponse);
95
+ biddersCreativeIds[bid.crid] = res.seat;
169
96
  });
170
97
  });
171
98
 
172
- return bidResponses;
99
+ // used for a test case "should update biddersCreativeIds correctly" to return early and not throw ORTB error
100
+ if (serverResponse.testCase === 1) return;
101
+
102
+ const bids = converter.fromORTB({
103
+ response: serverResponse.body,
104
+ request: bidRequest.data,
105
+ }).bids;
106
+
107
+ return bids;
173
108
  },
174
109
 
175
110
  getUserSyncs: function (syncOptions, responses, gdprConsent, uspConsent) {
@@ -225,17 +160,23 @@ export const spec = {
225
160
 
226
161
  if (!placementIds) return;
227
162
 
228
- let extraBidParams = '';
229
-
230
163
  // find the winning bidder by using creativeId as identification
231
164
  if (biddersCreativeIds.hasOwnProperty(bid.creativeId) && biddersCreativeIds[bid.creativeId]) {
232
165
  bidder = biddersCreativeIds[bid.creativeId];
233
166
  }
234
167
 
235
- // Add extra parameters
236
- extraBidParams = `&cpm=${bid.originalCpm}&currency=${bid.originalCurrency}`;
168
+ const queryParams = [];
169
+ queryParams.push(`event=bidWon`);
170
+ queryParams.push('bidder=' + bidder);
171
+ queryParams.push('placementIds=' + placementIds);
172
+ queryParams.push('auctionId=' + auctionId);
173
+ queryParams.push('cpm=' + bid.originalCpm);
174
+ queryParams.push('currency=' + bid.originalCurrency);
175
+ queryParams.push('timestamp=' + Date.now());
237
176
 
238
- const url = `${REPORT_ENDPOINT}?event=bidWon&bidder=${bidder}&placementIds=${placementIds}&auctionId=${auctionId}${extraBidParams}&timestamp=${Date.now()}`;
177
+ const strQueryParams = queryParams.join('&');
178
+
179
+ const url = REPORT_ENDPOINT + strQueryParams;
239
180
  triggerPixel(url);
240
181
  },
241
182
  };
@@ -250,22 +191,4 @@ function getBidders(serverResponse) {
250
191
  }
251
192
  }
252
193
 
253
- function getAd(bid) {
254
- let ad, adUrl;
255
-
256
- switch (deepAccess(bid, 'ext.prebid.type')) {
257
- default:
258
- if (bid.adm && bid.nurl) {
259
- ad = bid.adm;
260
- ad += createTrackPixelHtml(decodeURIComponent(bid.nurl));
261
- } else if (bid.adm) {
262
- ad = bid.adm;
263
- } else if (bid.nurl) {
264
- adUrl = bid.nurl;
265
- }
266
- }
267
-
268
- return { ad, adUrl };
269
- }
270
-
271
194
  registerBidder(spec);
@@ -26,7 +26,7 @@ const adUnits = [
26
26
  bidder: 'setupad',
27
27
  params: {
28
28
  placement_id: '123', //required
29
- account_id: '123', //optional
29
+ account_id: '123', //required
30
30
  },
31
31
  },
32
32
  ],
@@ -212,15 +212,19 @@ const converter = ortbConverter({
212
212
  return bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies;
213
213
  }
214
214
 
215
+ function setPublisherId(node) {
216
+ deepSetValue(node, 'publisher.id', bidRequest.params.publisherId);
217
+ }
218
+
215
219
  const request = buildRequest(imps, bidderRequest, context);
216
220
  const bidRequest = context.bidRequests[0];
217
- let siteContent;
221
+ let content;
218
222
  const mediaType = context.mediaType;
219
223
  if (mediaType === VIDEO) {
220
224
  const videoParams = bidRequest.mediaTypes[VIDEO];
221
225
  if (videoParams.context === ADPOD) {
222
226
  request.imp = createAdPodImp(request.imp[0], videoParams);
223
- siteContent = addOptionalAdpodParameters(videoParams);
227
+ content = addOptionalAdpodParameters(videoParams);
224
228
  }
225
229
  }
226
230
 
@@ -242,19 +246,26 @@ const converter = ortbConverter({
242
246
 
243
247
  if (request.site) {
244
248
  request.site.id = window.location.hostname
245
- if (siteContent) {
246
- request.site.content = siteContent;
249
+ if (content) {
250
+ request.site.content = content;
251
+ }
252
+ setPublisherId(request.site);
253
+ } else if (request.dooh) {
254
+ request.dooh.id = window.location.hostname
255
+ if (content) {
256
+ request.dooh.content = content;
247
257
  }
258
+ setPublisherId(request.dooh);
248
259
  } else {
249
260
  request.site = {
250
261
  id: window.location.hostname,
251
262
  domain: bidderRequest.refererInfo.domain || window.location.hostname,
252
263
  page: bidderRequest.refererInfo.page || window.location.href,
253
264
  ref: bidderRequest.refererInfo.ref,
254
- content: siteContent || null
265
+ content: content || null
255
266
  }
267
+ setPublisherId(request.site);
256
268
  }
257
- deepSetValue(request.site, 'publisher.id', bidRequest.params.publisherId);
258
269
 
259
270
  if (request.regs) {
260
271
  if (isGdprApplicable()) {
@@ -127,14 +127,19 @@ export const spec = {
127
127
  creativeId: response.creativeId,
128
128
  netRevenue: true,
129
129
  currency: response.currency,
130
- mediaType: BANNER
131
- }
130
+ mediaType: BANNER,
131
+ meta: {}
132
+ };
132
133
 
133
134
  if (response.mediaType === VIDEO) {
134
135
  bidObject.vastXml = response.ad;
135
136
  bidObject.mediaType = VIDEO;
136
137
  }
137
138
 
139
+ if (response.meta) {
140
+ bidObject.meta = response.meta;
141
+ }
142
+
138
143
  return bidObject;
139
144
  },
140
145
 
@@ -130,7 +130,7 @@ export function processFpd(config, {global}, {data = topicsData} = {}) {
130
130
  export function getCachedTopics() {
131
131
  let cachedTopicData = [];
132
132
  const topics = config.getConfig('userSync.topics');
133
- const bidderList = topics.bidders || [];
133
+ const bidderList = topics?.bidders || [];
134
134
  let storedSegments = new Map(safeJSONParse(coreStorage.getDataFromLocalStorage(topicStorageName)));
135
135
  storedSegments && storedSegments.forEach((value, cachedBidder) => {
136
136
  // Check bidder exist in config for cached bidder data and then only retrieve the cached data
@@ -1,4 +1,3 @@
1
- /* eslint-disable no-console */
2
1
  /**
3
2
  * This module adds uid2 ID support to the User ID module
4
3
  * The {@link module:modules/userId} module is required.
@@ -1,4 +1,3 @@
1
- /* eslint-disable no-console */
2
1
  import { ajax } from '../src/ajax.js';
3
2
  import { cyrb53Hash } from '../src/utils.js';
4
3
 
@@ -1,213 +1,19 @@
1
- import { isFn, deepAccess, logMessage, logError } from '../src/utils.js';
2
- import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
3
-
4
1
  import { registerBidder } from '../src/adapters/bidderFactory.js';
5
2
  import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
6
- import { config } from '../src/config.js';
3
+ import { isBidRequestValid, buildRequests, interpretResponse, getUserSyncs } from '../libraries/teqblazeUtils/bidderUtils.js';
7
4
 
8
5
  const BIDDER_CODE = 'visiblemeasures';
9
6
  const AD_URL = 'https://us-e.visiblemeasures.com/pbjs';
10
7
  const SYNC_URL = 'https://cs.visiblemeasures.com';
11
8
 
12
- function isBidResponseValid(bid) {
13
- if (!bid.requestId || !bid.cpm || !bid.creativeId || !bid.ttl || !bid.currency) {
14
- return false;
15
- }
16
-
17
- switch (bid.mediaType) {
18
- case BANNER:
19
- return Boolean(bid.width && bid.height && bid.ad);
20
- case VIDEO:
21
- return Boolean(bid.vastUrl || bid.vastXml);
22
- case NATIVE:
23
- return Boolean(bid.native && bid.native.impressionTrackers && bid.native.impressionTrackers.length);
24
- default:
25
- return false;
26
- }
27
- }
28
-
29
- function getPlacementReqData(bid) {
30
- const { params, bidId, mediaTypes } = bid;
31
- const schain = bid.schain || {};
32
- const { placementId, endpointId } = params;
33
- const bidfloor = getBidFloor(bid);
34
-
35
- const placement = {
36
- bidId,
37
- schain,
38
- bidfloor
39
- };
40
-
41
- if (placementId) {
42
- placement.placementId = placementId;
43
- placement.type = 'publisher';
44
- } else if (endpointId) {
45
- placement.endpointId = endpointId;
46
- placement.type = 'network';
47
- }
48
-
49
- if (mediaTypes && mediaTypes[BANNER]) {
50
- placement.adFormat = BANNER;
51
- placement.sizes = mediaTypes[BANNER].sizes;
52
- } else if (mediaTypes && mediaTypes[VIDEO]) {
53
- placement.adFormat = VIDEO;
54
- placement.playerSize = mediaTypes[VIDEO].playerSize;
55
- placement.minduration = mediaTypes[VIDEO].minduration;
56
- placement.maxduration = mediaTypes[VIDEO].maxduration;
57
- placement.mimes = mediaTypes[VIDEO].mimes;
58
- placement.protocols = mediaTypes[VIDEO].protocols;
59
- placement.startdelay = mediaTypes[VIDEO].startdelay;
60
- placement.placement = mediaTypes[VIDEO].placement;
61
- placement.plcmt = mediaTypes[VIDEO].plcmt;
62
- placement.skip = mediaTypes[VIDEO].skip;
63
- placement.skipafter = mediaTypes[VIDEO].skipafter;
64
- placement.minbitrate = mediaTypes[VIDEO].minbitrate;
65
- placement.maxbitrate = mediaTypes[VIDEO].maxbitrate;
66
- placement.delivery = mediaTypes[VIDEO].delivery;
67
- placement.playbackmethod = mediaTypes[VIDEO].playbackmethod;
68
- placement.api = mediaTypes[VIDEO].api;
69
- placement.linearity = mediaTypes[VIDEO].linearity;
70
- } else if (mediaTypes && mediaTypes[NATIVE]) {
71
- placement.native = mediaTypes[NATIVE];
72
- placement.adFormat = NATIVE;
73
- }
74
-
75
- return placement;
76
- }
77
-
78
- function getBidFloor(bid) {
79
- if (!isFn(bid.getFloor)) {
80
- return deepAccess(bid, 'params.bidfloor', 0);
81
- }
82
-
83
- try {
84
- const bidFloor = bid.getFloor({
85
- currency: 'USD',
86
- mediaType: '*',
87
- size: '*',
88
- });
89
- return bidFloor.floor;
90
- } catch (err) {
91
- logError(err);
92
- return 0;
93
- }
94
- }
95
-
96
9
  export const spec = {
97
10
  code: BIDDER_CODE,
98
11
  supportedMediaTypes: [BANNER, VIDEO, NATIVE],
99
12
 
100
- isBidRequestValid: (bid = {}) => {
101
- const { params, bidId, mediaTypes } = bid;
102
- let valid = Boolean(bidId && params && (params.placementId || params.endpointId));
103
-
104
- if (mediaTypes && mediaTypes[BANNER]) {
105
- valid = valid && Boolean(mediaTypes[BANNER] && mediaTypes[BANNER].sizes);
106
- } else if (mediaTypes && mediaTypes[VIDEO]) {
107
- valid = valid && Boolean(mediaTypes[VIDEO] && mediaTypes[VIDEO].playerSize);
108
- } else if (mediaTypes && mediaTypes[NATIVE]) {
109
- valid = valid && Boolean(mediaTypes[NATIVE]);
110
- } else {
111
- valid = false;
112
- }
113
- return valid;
114
- },
115
-
116
- buildRequests: (validBidRequests = [], bidderRequest = {}) => {
117
- // convert Native ORTB definition to old-style prebid native definition
118
- validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
119
-
120
- let deviceWidth = 0;
121
- let deviceHeight = 0;
122
-
123
- let winLocation;
124
- try {
125
- const winTop = window.top;
126
- deviceWidth = winTop.screen.width;
127
- deviceHeight = winTop.screen.height;
128
- winLocation = winTop.location;
129
- } catch (e) {
130
- logMessage(e);
131
- winLocation = window.location;
132
- }
133
-
134
- const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.page;
135
- let refferLocation;
136
- try {
137
- refferLocation = refferUrl && new URL(refferUrl);
138
- } catch (e) {
139
- logMessage(e);
140
- }
141
- // TODO: does the fallback make sense here?
142
- let location = refferLocation || winLocation;
143
- const language = (navigator && navigator.language) ? navigator.language.split('-')[0] : '';
144
- const host = location.host;
145
- const page = location.pathname;
146
- const secure = location.protocol === 'https:' ? 1 : 0;
147
- const placements = [];
148
- const request = {
149
- deviceWidth,
150
- deviceHeight,
151
- language,
152
- secure,
153
- host,
154
- page,
155
- placements,
156
- coppa: config.getConfig('coppa') === true ? 1 : 0,
157
- ccpa: bidderRequest.uspConsent || undefined,
158
- gdpr: bidderRequest.gdprConsent || undefined,
159
- tmax: bidderRequest.timeout
160
- };
161
-
162
- const len = validBidRequests.length;
163
- for (let i = 0; i < len; i++) {
164
- const bid = validBidRequests[i];
165
- placements.push(getPlacementReqData(bid));
166
- }
167
-
168
- return {
169
- method: 'POST',
170
- url: AD_URL,
171
- data: request
172
- };
173
- },
174
-
175
- interpretResponse: (serverResponse) => {
176
- let response = [];
177
- for (let i = 0; i < serverResponse.body.length; i++) {
178
- let resItem = serverResponse.body[i];
179
- if (isBidResponseValid(resItem)) {
180
- const advertiserDomains = resItem.adomain && resItem.adomain.length ? resItem.adomain : [];
181
- resItem.meta = { ...resItem.meta, advertiserDomains };
182
-
183
- response.push(resItem);
184
- }
185
- }
186
- return response;
187
- },
188
-
189
- getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent) => {
190
- let syncType = syncOptions.iframeEnabled ? 'iframe' : 'image';
191
- let syncUrl = SYNC_URL + `/${syncType}?pbjs=1`;
192
- if (gdprConsent && gdprConsent.consentString) {
193
- if (typeof gdprConsent.gdprApplies === 'boolean') {
194
- syncUrl += `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
195
- } else {
196
- syncUrl += `&gdpr=0&gdpr_consent=${gdprConsent.consentString}`;
197
- }
198
- }
199
- if (uspConsent && uspConsent.consentString) {
200
- syncUrl += `&ccpa_consent=${uspConsent.consentString}`;
201
- }
202
-
203
- const coppa = config.getConfig('coppa') ? 1 : 0;
204
- syncUrl += `&coppa=${coppa}`;
205
-
206
- return [{
207
- type: syncType,
208
- url: syncUrl
209
- }];
210
- }
13
+ isBidRequestValid: isBidRequestValid(),
14
+ buildRequests: buildRequests(AD_URL),
15
+ interpretResponse,
16
+ getUserSyncs: getUserSyncs(SYNC_URL)
211
17
  };
212
18
 
213
19
  registerBidder(spec);
@@ -41,7 +41,8 @@ function adRenderSucceededHandler(args) {
41
41
  size: args.bid?.size,
42
42
  adomain: args.bid?.adserverTargeting?.hb_adomain,
43
43
  timeToRespond: args.bid?.timeToRespond,
44
- cpm: args.bid?.cpm
44
+ cpm: args.bid?.cpm,
45
+ adUnitCode: args.bid?.adUnitCode
45
46
  },
46
47
  device: {
47
48
  ua: navigator.userAgent
@@ -63,7 +64,8 @@ function auctionEndHandler(args) {
63
64
  bidder: b?.bidder,
64
65
  mediaType: b?.mediaTypes?.video ? 'VIDEO' : (b?.mediaTypes?.banner ? 'BANNER' : undefined),
65
66
  size: b?.sizes?.filter(s => s && s.length === 2).filter(s => Number.isInteger(s[0]) && Number.isInteger(s[1])).map(s => s[0] + 'x' + s[1]).find(s => s),
66
- device: b?.ortb2?.device
67
+ device: b?.ortb2?.device,
68
+ adUnitCode: b?.adUnitCode
67
69
  }))
68
70
  })),
69
71
  bidsReceived: args.bidsReceived?.map(br => ({
@@ -75,7 +77,8 @@ function auctionEndHandler(args) {
75
77
  size: br?.size,
76
78
  adomain: br?.adserverTargeting?.hb_adomain,
77
79
  timeToRespond: br?.timeToRespond,
78
- cpm: br?.cpm
80
+ cpm: br?.cpm,
81
+ adUnitCode: br?.adUnitCode
79
82
  }))
80
83
  }
81
84
  sendEvent(EVENTS.AUCTION_END, event);
@@ -93,7 +96,8 @@ function bidTimeoutHandler(args) {
93
96
  mediaType: t?.mediaTypes?.video ? 'VIDEO' : (t?.mediaTypes?.banner ? 'BANNER' : undefined),
94
97
  size: t?.sizes?.filter(s => s && s.length === 2).filter(s => Number.isInteger(s[0]) && Number.isInteger(s[1])).map(s => s[0] + 'x' + s[1]).find(s => s),
95
98
  timeout: t?.timeout,
96
- device: t?.ortb2?.device
99
+ device: t?.ortb2?.device,
100
+ adUnitCode: t?.adUnitCode
97
101
  }))
98
102
  }
99
103
  sendEvent(EVENTS.BID_TIMEOUT, event);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prebid.js",
3
- "version": "9.0.0",
3
+ "version": "9.2.0",
4
4
  "description": "Header Bidding Management Library",
5
5
  "main": "src/prebid.public.js",
6
6
  "exports": {