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,199 +1,17 @@
1
- import { logMessage, logError } from '../src/utils.js';
2
- import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
3
1
  import { registerBidder } from '../src/adapters/bidderFactory.js';
4
2
  import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
5
- import { config } from '../src/config.js';
3
+ import { isBidRequestValid, buildRequests, interpretResponse } from '../libraries/teqblazeUtils/bidderUtils.js';
6
4
 
7
5
  const BIDDER_CODE = 'playdigo';
8
6
  const AD_URL = 'https://server.playdigo.com/pbjs';
9
7
 
10
- function isBidResponseValid(bid) {
11
- if (!bid.requestId || !bid.cpm || !bid.creativeId || !bid.ttl || !bid.currency) {
12
- return false;
13
- }
14
-
15
- switch (bid.mediaType) {
16
- case BANNER:
17
- return Boolean(bid.width && bid.height && bid.ad);
18
- case VIDEO:
19
- return Boolean(bid.vastUrl || bid.vastXml);
20
- case NATIVE:
21
- return Boolean(bid.native && bid.native.impressionTrackers && bid.native.impressionTrackers.length);
22
- default:
23
- return false;
24
- }
25
- }
26
-
27
- function getPlacementReqData(bid) {
28
- const { params, bidId, mediaTypes } = bid;
29
- const schain = bid.schain || {};
30
- const { placementId, endpointId } = params;
31
- const bidfloor = getBidFloor(bid);
32
-
33
- const placement = {
34
- bidId,
35
- schain,
36
- bidfloor
37
- };
38
-
39
- if (placementId) {
40
- placement.placementId = placementId;
41
- placement.type = 'publisher';
42
- } else if (endpointId) {
43
- placement.endpointId = endpointId;
44
- placement.type = 'network';
45
- }
46
-
47
- if (mediaTypes && mediaTypes[BANNER]) {
48
- placement.adFormat = BANNER;
49
- placement.sizes = mediaTypes[BANNER].sizes;
50
- } else if (mediaTypes && mediaTypes[VIDEO]) {
51
- placement.adFormat = VIDEO;
52
- placement.playerSize = mediaTypes[VIDEO].playerSize;
53
- placement.minduration = mediaTypes[VIDEO].minduration;
54
- placement.maxduration = mediaTypes[VIDEO].maxduration;
55
- placement.mimes = mediaTypes[VIDEO].mimes;
56
- placement.protocols = mediaTypes[VIDEO].protocols;
57
- placement.startdelay = mediaTypes[VIDEO].startdelay;
58
- placement.placement = mediaTypes[VIDEO].placement;
59
- placement.skip = mediaTypes[VIDEO].skip;
60
- placement.skipafter = mediaTypes[VIDEO].skipafter;
61
- placement.minbitrate = mediaTypes[VIDEO].minbitrate;
62
- placement.maxbitrate = mediaTypes[VIDEO].maxbitrate;
63
- placement.delivery = mediaTypes[VIDEO].delivery;
64
- placement.playbackmethod = mediaTypes[VIDEO].playbackmethod;
65
- placement.api = mediaTypes[VIDEO].api;
66
- placement.linearity = mediaTypes[VIDEO].linearity;
67
- } else if (mediaTypes && mediaTypes[NATIVE]) {
68
- placement.native = mediaTypes[NATIVE];
69
- placement.adFormat = NATIVE;
70
- }
71
-
72
- return placement;
73
- }
74
-
75
- function getBidFloor(bid) {
76
- if (!bid.getFloor || typeof bid.getFloor !== 'function') {
77
- return 0;
78
- }
79
-
80
- try {
81
- const bidFloor = bid.getFloor({
82
- currency: 'USD',
83
- mediaType: '*',
84
- size: '*',
85
- });
86
- return bidFloor.floor;
87
- } catch (err) {
88
- logError(err);
89
- return 0;
90
- }
91
- }
92
-
93
8
  export const spec = {
94
9
  code: BIDDER_CODE,
95
10
  supportedMediaTypes: [BANNER, VIDEO, NATIVE],
96
11
 
97
- isBidRequestValid: (bid = {}) => {
98
- const { params, bidId, mediaTypes } = bid;
99
- let valid = Boolean(bidId && params && (params.placementId || params.endpointId));
100
-
101
- if (mediaTypes && mediaTypes[BANNER]) {
102
- valid = valid && Boolean(mediaTypes[BANNER] && mediaTypes[BANNER].sizes);
103
- } else if (mediaTypes && mediaTypes[VIDEO]) {
104
- valid = valid && Boolean(mediaTypes[VIDEO] && mediaTypes[VIDEO].playerSize);
105
- } else if (mediaTypes && mediaTypes[NATIVE]) {
106
- valid = valid && Boolean(mediaTypes[NATIVE]);
107
- } else {
108
- valid = false;
109
- }
110
- return valid;
111
- },
112
-
113
- buildRequests: (validBidRequests = [], bidderRequest = {}) => {
114
- // convert Native ORTB definition to old-style prebid native definition
115
- validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
116
-
117
- let deviceWidth = 0;
118
- let deviceHeight = 0;
119
-
120
- let winLocation;
121
- try {
122
- const winTop = window.top;
123
- deviceWidth = winTop.screen.width;
124
- deviceHeight = winTop.screen.height;
125
- winLocation = winTop.location;
126
- } catch (e) {
127
- logMessage(e);
128
- winLocation = window.location;
129
- }
130
-
131
- const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.page;
132
- let refferLocation;
133
- try {
134
- refferLocation = refferUrl && new URL(refferUrl);
135
- } catch (e) {
136
- logMessage(e);
137
- }
138
- let location = refferLocation || winLocation;
139
- const language = (navigator && navigator.language) ? navigator.language.split('-')[0] : '';
140
- const host = location.host;
141
- const page = location.pathname;
142
- const secure = location.protocol === 'https:' ? 1 : 0;
143
- const placements = [];
144
- const request = {
145
- deviceWidth,
146
- deviceHeight,
147
- language,
148
- secure,
149
- host,
150
- page,
151
- placements,
152
- coppa: config.getConfig('coppa') === true ? 1 : 0,
153
- ccpa: bidderRequest.uspConsent || undefined,
154
- tmax: config.getConfig('bidderTimeout')
155
- };
156
-
157
- if (bidderRequest.gdprConsent) {
158
- request.gdpr = {
159
- consentString: bidderRequest.gdprConsent.consentString
160
- };
161
- }
162
-
163
- if (bidderRequest.gppConsent) {
164
- request.gpp = bidderRequest.gppConsent.gppString;
165
- request.gpp_sid = bidderRequest.gppConsent.applicableSections;
166
- } else if (bidderRequest.ortb2?.regs?.gpp) {
167
- request.gpp = bidderRequest.ortb2.regs.gpp;
168
- request.gpp_sid = bidderRequest.ortb2.regs.gpp_sid;
169
- }
170
-
171
- const len = validBidRequests.length;
172
- for (let i = 0; i < len; i++) {
173
- const bid = validBidRequests[i];
174
- placements.push(getPlacementReqData(bid));
175
- }
176
-
177
- return {
178
- method: 'POST',
179
- url: AD_URL,
180
- data: request
181
- };
182
- },
183
-
184
- interpretResponse: (serverResponse) => {
185
- let response = [];
186
- for (let i = 0; i < serverResponse.body.length; i++) {
187
- let resItem = serverResponse.body[i];
188
- if (isBidResponseValid(resItem)) {
189
- const advertiserDomains = resItem.adomain && resItem.adomain.length ? resItem.adomain : [];
190
- resItem.meta = { ...resItem.meta, advertiserDomains };
191
-
192
- response.push(resItem);
193
- }
194
- }
195
- return response;
196
- }
12
+ isBidRequestValid: isBidRequestValid(),
13
+ buildRequests: buildRequests(AD_URL),
14
+ interpretResponse
197
15
  };
198
16
 
199
17
  registerBidder(spec);
@@ -488,7 +488,12 @@ export function PrebidServer() {
488
488
  doClientSideSyncs(requestedBidders, gdprConsent, uspConsent, gppConsent);
489
489
  },
490
490
  onError(msg, error) {
491
- logError(`Prebid server call failed: '${msg}'`, error);
491
+ const {p1Consent = '', noP1Consent = ''} = s2sBidRequest?.s2sConfig?.endpoint || {};
492
+ if (p1Consent === noP1Consent) {
493
+ logError(`Prebid server call failed: '${msg}'. Endpoint: "${p1Consent}"}`, error);
494
+ } else {
495
+ logError(`Prebid server call failed: '${msg}'. Endpoints: p1Consent "${p1Consent}", noP1Consent "${noP1Consent}"}`, error);
496
+ }
492
497
  bidRequests.forEach(bidderRequest => events.emit(EVENTS.BIDDER_ERROR, { error, bidderRequest }));
493
498
  done(error.timedOut);
494
499
  },
@@ -550,6 +555,7 @@ export const processPBSRequest = hook('sync', function (s2sBidRequest, bidReques
550
555
  const requestJson = request && JSON.stringify(request);
551
556
  logInfo('BidRequest: ' + requestJson);
552
557
  const endpointUrl = getMatchingConsentUrl(s2sBidRequest.s2sConfig.endpoint, gdprConsent);
558
+ const customHeaders = deepAccess(s2sBidRequest, 's2sConfig.customHeaders', {});
553
559
  if (request && requestJson && endpointUrl) {
554
560
  const networkDone = s2sBidRequest.metrics.startTiming('net');
555
561
  ajax(
@@ -584,7 +590,8 @@ export const processPBSRequest = hook('sync', function (s2sBidRequest, bidReques
584
590
  {
585
591
  contentType: 'text/plain',
586
592
  withCredentials: true,
587
- browsingTopics: isActivityAllowed(ACTIVITY_TRANSMIT_UFPD, s2sActivityParams(s2sBidRequest.s2sConfig))
593
+ browsingTopics: isActivityAllowed(ACTIVITY_TRANSMIT_UFPD, s2sActivityParams(s2sBidRequest.s2sConfig)),
594
+ customHeaders
588
595
  }
589
596
  );
590
597
  } else {
@@ -1,232 +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 = 'pubcircle';
9
6
  const AD_URL = 'https://ml.pubcircle.ai/pbjs';
10
7
  const SYNC_URL = 'https://cs.pubcircle.ai';
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 } = params;
33
- const bidfloor = getBidFloor(bid);
34
-
35
- const placement = {
36
- bidId,
37
- schain,
38
- bidfloor
39
- };
40
-
41
- placement.placementId = placementId;
42
- placement.type = 'publisher';
43
-
44
- if (bid.userId) {
45
- getUserId(placement.eids, bid.userId.uid2 && bid.userId.uid2.id, 'uidapi.com');
46
- getUserId(placement.eids, bid.userId.lotamePanoramaId, 'lotame.com');
47
- getUserId(placement.eids, bid.userId.idx, 'idx.lat');
48
- getUserId(placement.eids, bid.userId.idl_env, 'liveramp.com');
49
- }
50
-
51
- if (mediaTypes && mediaTypes[BANNER]) {
52
- placement.adFormat = BANNER;
53
- placement.sizes = mediaTypes[BANNER].sizes;
54
- } else if (mediaTypes && mediaTypes[VIDEO]) {
55
- placement.adFormat = VIDEO;
56
- placement.playerSize = mediaTypes[VIDEO].playerSize;
57
- placement.minduration = mediaTypes[VIDEO].minduration;
58
- placement.maxduration = mediaTypes[VIDEO].maxduration;
59
- placement.mimes = mediaTypes[VIDEO].mimes;
60
- placement.protocols = mediaTypes[VIDEO].protocols;
61
- placement.startdelay = mediaTypes[VIDEO].startdelay;
62
- placement.placement = mediaTypes[VIDEO].placement;
63
- placement.plcmt = mediaTypes[VIDEO].plcmt;
64
- placement.skip = mediaTypes[VIDEO].skip;
65
- placement.skipafter = mediaTypes[VIDEO].skipafter;
66
- placement.minbitrate = mediaTypes[VIDEO].minbitrate;
67
- placement.maxbitrate = mediaTypes[VIDEO].maxbitrate;
68
- placement.delivery = mediaTypes[VIDEO].delivery;
69
- placement.playbackmethod = mediaTypes[VIDEO].playbackmethod;
70
- placement.api = mediaTypes[VIDEO].api;
71
- placement.linearity = mediaTypes[VIDEO].linearity;
72
- } else if (mediaTypes && mediaTypes[NATIVE]) {
73
- placement.native = mediaTypes[NATIVE];
74
- placement.adFormat = NATIVE;
75
- }
76
-
77
- return placement;
78
- }
79
-
80
- function getBidFloor(bid) {
81
- if (!isFn(bid.getFloor)) {
82
- return deepAccess(bid, 'params.bidfloor', 0);
83
- }
84
-
85
- try {
86
- const bidFloor = bid.getFloor({
87
- currency: 'USD',
88
- mediaType: '*',
89
- size: '*',
90
- });
91
- return bidFloor.floor;
92
- } catch (err) {
93
- logError(err);
94
- return 0;
95
- }
96
- }
97
-
98
- function getUserId(eids, id, source, uidExt) {
99
- if (id) {
100
- var uid = { id };
101
- if (uidExt) {
102
- uid.ext = uidExt;
103
- }
104
- eids.push({
105
- source,
106
- uids: [ uid ]
107
- });
108
- }
109
- }
110
-
111
9
  export const spec = {
112
10
  code: BIDDER_CODE,
113
11
  supportedMediaTypes: [BANNER, VIDEO, NATIVE],
114
12
 
115
- isBidRequestValid: (bid = {}) => {
116
- const { params, bidId, mediaTypes } = bid;
117
- let valid = Boolean(bidId && params && params.placementId);
118
-
119
- if (mediaTypes && mediaTypes[BANNER]) {
120
- valid = valid && Boolean(mediaTypes[BANNER] && mediaTypes[BANNER].sizes);
121
- } else if (mediaTypes && mediaTypes[VIDEO]) {
122
- valid = valid && Boolean(mediaTypes[VIDEO] && mediaTypes[VIDEO].playerSize);
123
- } else if (mediaTypes && mediaTypes[NATIVE]) {
124
- valid = valid && Boolean(mediaTypes[NATIVE]);
125
- } else {
126
- valid = false;
127
- }
128
- return valid;
129
- },
130
-
131
- buildRequests: (validBidRequests = [], bidderRequest = {}) => {
132
- // convert Native ORTB definition to old-style prebid native definition
133
- validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
134
-
135
- let deviceWidth = 0;
136
- let deviceHeight = 0;
137
-
138
- let winLocation;
139
- try {
140
- const winTop = window.top;
141
- deviceWidth = winTop.screen.width;
142
- deviceHeight = winTop.screen.height;
143
- winLocation = winTop.location;
144
- } catch (e) {
145
- logMessage(e);
146
- winLocation = window.location;
147
- }
148
-
149
- const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.page;
150
- let refferLocation;
151
- try {
152
- refferLocation = refferUrl && new URL(refferUrl);
153
- } catch (e) {
154
- logMessage(e);
155
- }
156
- // TODO: does the fallback make sense here?
157
- let location = refferLocation || winLocation;
158
- const language = (navigator && navigator.language) ? navigator.language.split('-')[0] : '';
159
- const host = location.host;
160
- const page = location.pathname;
161
- const secure = location.protocol === 'https:' ? 1 : 0;
162
- const placements = [];
163
- const request = {
164
- deviceWidth,
165
- deviceHeight,
166
- language,
167
- secure,
168
- host,
169
- page,
170
- placements,
171
- coppa: config.getConfig('coppa') === true ? 1 : 0,
172
- ccpa: bidderRequest.uspConsent || undefined,
173
- gdpr: bidderRequest.gdprConsent || undefined,
174
- tmax: bidderRequest.timeout
175
- };
176
-
177
- const len = validBidRequests.length;
178
- for (let i = 0; i < len; i++) {
179
- const bid = validBidRequests[i];
180
- placements.push(getPlacementReqData(bid));
181
- }
182
-
183
- return {
184
- method: 'POST',
185
- url: AD_URL,
186
- data: request
187
- };
188
- },
189
-
190
- interpretResponse: (serverResponse) => {
191
- let response = [];
192
- for (let i = 0; i < serverResponse.body.length; i++) {
193
- let resItem = serverResponse.body[i];
194
- if (isBidResponseValid(resItem)) {
195
- const advertiserDomains = resItem.adomain && resItem.adomain.length ? resItem.adomain : [];
196
- resItem.meta = { ...resItem.meta, advertiserDomains };
197
-
198
- response.push(resItem);
199
- }
200
- }
201
- return response;
202
- },
203
-
204
- getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent) => {
205
- let syncType = syncOptions.iframeEnabled ? 'iframe' : 'image';
206
- let syncUrl = SYNC_URL + `/${syncType}?pbjs=1`;
207
- if (gdprConsent && gdprConsent.consentString) {
208
- if (typeof gdprConsent.gdprApplies === 'boolean') {
209
- syncUrl += `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
210
- } else {
211
- syncUrl += `&gdpr=0&gdpr_consent=${gdprConsent.consentString}`;
212
- }
213
- }
214
- if (uspConsent && uspConsent.consentString) {
215
- syncUrl += `&ccpa_consent=${uspConsent.consentString}`;
216
- }
217
-
218
- const coppa = config.getConfig('coppa') ? 1 : 0;
219
- syncUrl += `&coppa=${coppa}`;
220
-
221
- return [{
222
- type: syncType,
223
- url: syncUrl
224
- }];
225
- },
226
-
227
- onBidViewable: function (bid) {
228
- // to do : we need to implement js tag to fire pixel with viewability counter
229
- }
13
+ isBidRequestValid: isBidRequestValid(['placementId']),
14
+ buildRequests: buildRequests(AD_URL),
15
+ interpretResponse,
16
+ getUserSyncs: getUserSyncs(SYNC_URL)
230
17
  };
231
18
 
232
19
  registerBidder(spec);
@@ -281,7 +281,7 @@ function isOWPubmaticBid(adapterName) {
281
281
  })
282
282
  }
283
283
 
284
- function gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestBid) {
284
+ function gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestBid, e) {
285
285
  highestBid = (highestBid && highestBid.length > 0) ? highestBid[0] : null;
286
286
  return Object.keys(adUnit.bids).reduce(function(partnerBids, bidId) {
287
287
  adUnit.bids[bidId].forEach(function(bid) {
@@ -290,6 +290,16 @@ function gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestBid) {
290
290
  return;
291
291
  }
292
292
  const pg = window.parseFloat(Number(bid.bidResponse?.adserverTargeting?.hb_pb || bid.bidResponse?.adserverTargeting?.pwtpb).toFixed(BID_PRECISION));
293
+
294
+ const prebidBidsReceived = e?.bidsReceived;
295
+ if (isArray(prebidBidsReceived) && prebidBidsReceived.length > 0) {
296
+ prebidBidsReceived.forEach(function(iBid) {
297
+ if (iBid.adId === bid.adId) {
298
+ bid.bidderCode = iBid.bidderCode;
299
+ }
300
+ });
301
+ }
302
+
293
303
  partnerBids.push({
294
304
  'pn': adapterName,
295
305
  'bc': bid.bidderCode || bid.bidder,
@@ -391,7 +401,7 @@ function executeBidsLoggerCall(e, highestCpmBids) {
391
401
  outputObj['pdvid'] = '' + profileVersionId;
392
402
  outputObj['dvc'] = {'plt': getDevicePlatform()};
393
403
  outputObj['tgid'] = getTgId();
394
- outputObj['pbv'] = getGlobal()?.version || '-1';
404
+ outputObj['pbv'] = '$prebid.version$' || '-1';
395
405
 
396
406
  if (floorData && floorFetchStatus) {
397
407
  outputObj['fmv'] = floorData.floorRequestData ? floorData.floorRequestData.modelVersion || undefined : undefined;
@@ -407,7 +417,7 @@ function executeBidsLoggerCall(e, highestCpmBids) {
407
417
  'au': origAdUnit.owAdUnitId || getGptSlotInfoForAdUnitCode(adUnitId)?.gptSlot || adUnitId,
408
418
  'mt': getAdUnitAdFormats(origAdUnit),
409
419
  'sz': getSizesForAdUnit(adUnit, adUnitId),
410
- 'ps': gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestCpmBids.filter(bid => bid.adUnitCode === adUnitId)),
420
+ 'ps': gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestCpmBids.filter(bid => bid.adUnitCode === adUnitId), e),
411
421
  'fskp': floorData && floorFetchStatus ? (floorData.floorRequestData ? (floorData.floorRequestData.skipped == false ? 0 : 1) : undefined) : undefined,
412
422
  'sid': generateUUID()
413
423
  };
@@ -559,7 +569,8 @@ function bidResponseHandler(args) {
559
569
  logWarn(LOG_PRE_FIX + 'Got null requestId in bidResponseHandler');
560
570
  return;
561
571
  }
562
- let bid = cache.auctions[args.auctionId].adUnitCodes[args.adUnitCode].bids[args.requestId][0];
572
+ let requestId = args.originalRequestId || args.requestId;
573
+ let bid = cache.auctions[args.auctionId].adUnitCodes[args.adUnitCode].bids[requestId][0];
563
574
  if (!bid) {
564
575
  logError(LOG_PRE_FIX + 'Could not find associated bid request for bid response with requestId: ', args.requestId);
565
576
  return;
@@ -567,7 +578,9 @@ function bidResponseHandler(args) {
567
578
 
568
579
  if ((bid.bidder && args.bidderCode && bid.bidder !== args.bidderCode) || (bid.bidder === args.bidderCode && bid.status === SUCCESS)) {
569
580
  bid = copyRequiredBidDetails(args);
570
- cache.auctions[args.auctionId].adUnitCodes[args.adUnitCode].bids[args.requestId].push(bid);
581
+ cache.auctions[args.auctionId].adUnitCodes[args.adUnitCode].bids[requestId].push(bid);
582
+ } else if (args.originalRequestId) {
583
+ bid.bidId = args.requestId;
571
584
  }
572
585
 
573
586
  if (args.floorData) {
@@ -598,7 +611,7 @@ function bidRejectedHandler(args) {
598
611
  function bidderDoneHandler(args) {
599
612
  cache.auctions[args.auctionId].bidderDonePendingCount--;
600
613
  args.bids.forEach(bid => {
601
- let cachedBid = cache.auctions[bid.auctionId].adUnitCodes[bid.adUnitCode].bids[bid.bidId || bid.requestId];
614
+ let cachedBid = cache.auctions[bid.auctionId].adUnitCodes[bid.adUnitCode].bids[bid.bidId || bid.originalRequestId || bid.requestId];
602
615
  if (typeof bid.serverResponseTimeMs !== 'undefined') {
603
616
  cachedBid.serverLatencyTimeMs = bid.serverResponseTimeMs;
604
617
  }
@@ -613,7 +626,7 @@ function bidderDoneHandler(args) {
613
626
 
614
627
  function bidWonHandler(args) {
615
628
  let auctionCache = cache.auctions[args.auctionId];
616
- auctionCache.adUnitCodes[args.adUnitCode].bidWon = args.requestId;
629
+ auctionCache.adUnitCodes[args.adUnitCode].bidWon = args.originalRequestId || args.requestId;
617
630
  auctionCache.adUnitCodes[args.adUnitCode].bidWonAdId = args.adId;
618
631
  executeBidWonLoggerCall(args.auctionId, args.adUnitCode);
619
632
  }
@@ -631,7 +644,7 @@ function bidTimeoutHandler(args) {
631
644
  // db = 0 and t = 1 means bidder did respond with a bid but post timeout
632
645
  args.forEach(badBid => {
633
646
  let auctionCache = cache.auctions[badBid.auctionId];
634
- let bid = auctionCache.adUnitCodes[badBid.adUnitCode].bids[ badBid.bidId || badBid.requestId ][0];
647
+ let bid = auctionCache.adUnitCodes[badBid.adUnitCode].bids[ badBid.bidId || badBid.originalRequestId || badBid.requestId ][0];
635
648
  if (bid) {
636
649
  bid.status = ERROR;
637
650
  bid.error = {
@@ -24,11 +24,7 @@ let events = {
24
24
  };
25
25
 
26
26
  function getStorage() {
27
- try {
28
- return window.top['sessionStorage'];
29
- } catch (e) {
30
- return null;
31
- }
27
+ return null;
32
28
  }
33
29
 
34
30
  var pubxaiAnalyticsAdapter = Object.assign(adapter(