prebid.js 6.6.0 → 6.10.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 (271) hide show
  1. package/.eslintrc.js +8 -1
  2. package/allowedModules.js +4 -7
  3. package/integrationExamples/gpt/amp/creative.html +11 -33
  4. package/integrationExamples/gpt/{haloRtdProvider_example.html → hadronRtdProvider_example.html} +9 -9
  5. package/integrationExamples/gpt/idImportLibrary_example.html +2 -2
  6. package/integrationExamples/gpt/userId_example.html +2 -2
  7. package/integrationExamples/gpt/weboramaRtdProvider_example.html +154 -115
  8. package/integrationExamples/gpt/x-domain/creative.html +63 -29
  9. package/modules/.submodules.json +3 -0
  10. package/modules/adagioBidAdapter.js +1 -9
  11. package/modules/adagioBidAdapter.md +1 -1
  12. package/modules/adbookpspBidAdapter.js +29 -12
  13. package/modules/adhashBidAdapter.js +4 -4
  14. package/modules/adkernelBidAdapter.js +2 -2
  15. package/modules/adlooxAnalyticsAdapter.js +1 -1
  16. package/modules/adlooxRtdProvider.js +1 -1
  17. package/modules/adnowBidAdapter.js +1 -1
  18. package/modules/adnuntiusRtdProvider.js +96 -0
  19. package/modules/adnuntiusRtdProvider.md +41 -0
  20. package/modules/adomikAnalyticsAdapter.js +2 -2
  21. package/modules/adotBidAdapter.js +1 -1
  22. package/modules/adpod.js +14 -17
  23. package/modules/adrelevantisBidAdapter.js +2 -2
  24. package/modules/adtargetBidAdapter.js +1 -1
  25. package/modules/adtelligentBidAdapter.js +1 -1
  26. package/modules/advangelistsBidAdapter.js +2 -2
  27. package/modules/adxpremiumAnalyticsAdapter.js +1 -1
  28. package/modules/adyoulikeBidAdapter.js +1 -1
  29. package/modules/afpBidAdapter.js +1 -1
  30. package/modules/appnexusBidAdapter.js +16 -4
  31. package/modules/asealBidAdapter.js +58 -0
  32. package/modules/asealBidAdapter.md +52 -0
  33. package/modules/beachfrontBidAdapter.js +2 -2
  34. package/modules/betweenBidAdapter.js +1 -1
  35. package/modules/bidViewability.js +1 -1
  36. package/modules/bluebillywigBidAdapter.js +1 -1
  37. package/modules/brandmetricsRtdProvider.js +168 -0
  38. package/modules/brandmetricsRtdProvider.md +40 -0
  39. package/modules/bridgewellBidAdapter.js +1 -1
  40. package/modules/browsiRtdProvider.js +2 -2
  41. package/modules/cleanmedianetBidAdapter.js +1 -1
  42. package/modules/colossussspBidAdapter.js +12 -8
  43. package/modules/colossussspBidAdapter.md +15 -1
  44. package/modules/compassBidAdapter.js +1 -1
  45. package/modules/connectIdSystem.js +1 -1
  46. package/modules/consentManagement.js +2 -3
  47. package/modules/consumableBidAdapter.md +1 -1
  48. package/modules/conversantBidAdapter.js +7 -0
  49. package/modules/craftBidAdapter.js +2 -2
  50. package/modules/criteoBidAdapter.js +10 -1
  51. package/modules/currency.js +27 -5
  52. package/modules/cwireBidAdapter.js +1 -1
  53. package/modules/dailyhuntBidAdapter.js +1 -1
  54. package/modules/dchain.js +1 -1
  55. package/modules/displayioBidAdapter.js +157 -0
  56. package/modules/displayioBidAdapter.md +148 -0
  57. package/modules/dspxBidAdapter.js +69 -29
  58. package/modules/dspxBidAdapter.md +2 -1
  59. package/modules/e_volutionBidAdapter.js +158 -0
  60. package/modules/emx_digitalBidAdapter.js +2 -2
  61. package/modules/fluctBidAdapter.js +0 -1
  62. package/modules/gamoshiBidAdapter.js +1 -1
  63. package/modules/gdprEnforcement.js +2 -2
  64. package/modules/glomexBidAdapter.js +1 -1
  65. package/modules/gnetBidAdapter.js +3 -3
  66. package/modules/gnetBidAdapter.md +4 -4
  67. package/modules/goldbachBidAdapter.js +2 -2
  68. package/modules/gptPreAuction.js +1 -1
  69. package/modules/gridBidAdapter.js +15 -1
  70. package/modules/gumgumBidAdapter.js +57 -43
  71. package/modules/hadronIdSystem.js +96 -0
  72. package/modules/hadronIdSystem.md +35 -0
  73. package/modules/hadronRtdProvider.js +254 -0
  74. package/modules/hadronRtdProvider.md +126 -0
  75. package/modules/haloIdSystem.md +4 -35
  76. package/modules/haloRtdProvider.md +3 -126
  77. package/modules/hybridBidAdapter.js +1 -1
  78. package/modules/improvedigitalBidAdapter.js +6 -1
  79. package/modules/insticatorBidAdapter.js +1 -1
  80. package/modules/interactiveOffersBidAdapter.js +9 -6
  81. package/modules/intersectionRtdProvider.js +1 -1
  82. package/modules/ixBidAdapter.js +2 -2
  83. package/modules/jwplayerRtdProvider.js +72 -7
  84. package/modules/jwplayerRtdProvider.md +27 -11
  85. package/modules/kargoBidAdapter.js +2 -2
  86. package/modules/livewrappedBidAdapter.js +1 -1
  87. package/modules/lunamediahbBidAdapter.js +32 -4
  88. package/modules/malltvBidAdapter.js +7 -3
  89. package/modules/malltvBidAdapter.md +64 -51
  90. package/modules/mass.js +3 -5
  91. package/modules/mediakeysBidAdapter.js +2 -2
  92. package/modules/medianetAnalyticsAdapter.js +2 -2
  93. package/modules/medianetRtdProvider.js +1 -1
  94. package/modules/mediasquareBidAdapter.js +1 -0
  95. package/modules/nextMillenniumBidAdapter.js +1 -0
  96. package/modules/nextrollBidAdapter.js +1 -1
  97. package/modules/oguryBidAdapter.js +7 -14
  98. package/modules/onetagBidAdapter.js +1 -1
  99. package/modules/openwebBidAdapter.js +1 -1
  100. package/modules/openxAnalyticsAdapter.js +2 -2
  101. package/modules/openxBidAdapter.js +1 -1
  102. package/modules/parrableIdSystem.js +1 -1
  103. package/modules/permutiveRtdProvider.js +1 -1
  104. package/modules/pilotxBidAdapter.js +147 -0
  105. package/modules/pilotxBidAdapter.md +50 -0
  106. package/modules/pixfutureBidAdapter.js +2 -2
  107. package/modules/prebidServerBidAdapter/index.js +63 -41
  108. package/modules/priceFloors.js +15 -14
  109. package/modules/pubmaticBidAdapter.js +1 -1
  110. package/modules/quantcastBidAdapter.js +1 -1
  111. package/modules/reconciliationRtdProvider.js +1 -1
  112. package/modules/richaudienceBidAdapter.js +7 -2
  113. package/modules/riseBidAdapter.js +17 -6
  114. package/modules/roxotAnalyticsAdapter.js +1 -1
  115. package/modules/rtbhouseBidAdapter.js +1 -1
  116. package/modules/rtdModule/index.js +9 -11
  117. package/modules/rubiconAnalyticsAdapter.js +8 -2
  118. package/modules/rubiconBidAdapter.js +1 -1
  119. package/modules/saambaaBidAdapter.js +420 -420
  120. package/modules/seedingAllianceBidAdapter.js +3 -3
  121. package/modules/sharethroughBidAdapter.js +12 -17
  122. package/modules/sigmoidAnalyticsAdapter.js +1 -1
  123. package/modules/sirdataRtdProvider.js +1 -1
  124. package/modules/sizeMappingV2.js +2 -9
  125. package/modules/smarticoBidAdapter.js +1 -1
  126. package/modules/sortableAnalyticsAdapter.js +5 -4
  127. package/modules/sovrnAnalyticsAdapter.js +2 -2
  128. package/modules/sovrnBidAdapter.js +93 -18
  129. package/modules/sovrnBidAdapter.md +80 -2
  130. package/modules/sspBCBidAdapter.js +54 -21
  131. package/modules/synacormediaBidAdapter.js +32 -11
  132. package/modules/targetVideoBidAdapter.js +1 -1
  133. package/modules/telariaBidAdapter.js +22 -29
  134. package/modules/trustpidSystem.js +197 -0
  135. package/modules/trustpidSystem.md +45 -0
  136. package/modules/undertoneBidAdapter.js +17 -1
  137. package/modules/userId/eids.js +16 -1
  138. package/modules/userId/eids.md +10 -2
  139. package/modules/userId/index.js +2 -2
  140. package/modules/userId/userId.md +17 -2
  141. package/modules/ventesBidAdapter.js +1 -1
  142. package/modules/verizonMediaIdSystem.js +1 -1
  143. package/modules/vibrantmediaBidAdapter.js +220 -0
  144. package/modules/vibrantmediaBidAdapter.md +92 -0
  145. package/modules/viewability.js +177 -0
  146. package/modules/viewability.md +87 -0
  147. package/modules/viewdeosDXBidAdapter.js +1 -1
  148. package/modules/voxBidAdapter.js +1 -1
  149. package/modules/waardexBidAdapter.js +1 -1
  150. package/modules/weboramaRtdProvider.js +264 -34
  151. package/modules/weboramaRtdProvider.md +110 -40
  152. package/modules/widespaceBidAdapter.js +2 -2
  153. package/modules/winrBidAdapter.js +7 -7
  154. package/modules/yahoosspBidAdapter.js +3 -1
  155. package/modules/yieldlabBidAdapter.js +1 -1
  156. package/modules/yieldmoBidAdapter.js +2 -2
  157. package/modules/yieldoneBidAdapter.js +6 -0
  158. package/modules/yuktamediaAnalyticsAdapter.js +1 -1
  159. package/package.json +3 -1
  160. package/plugins/poly/arrayFrom.js +3 -0
  161. package/plugins/poly/find.js +3 -0
  162. package/plugins/poly/findIndex.js +3 -0
  163. package/plugins/poly/includes.js +3 -0
  164. package/plugins/poly/package.json +8 -0
  165. package/src/Renderer.js +1 -1
  166. package/src/adRendering.js +38 -0
  167. package/src/adapterManager.js +33 -28
  168. package/src/adapters/bidderFactory.js +13 -11
  169. package/src/adloader.js +3 -2
  170. package/src/auction.js +140 -117
  171. package/src/auctionIndex.js +85 -0
  172. package/src/auctionManager.js +4 -1
  173. package/src/bidderSettings.js +69 -0
  174. package/src/bidfactory.js +18 -6
  175. package/src/config.js +3 -4
  176. package/src/cpmBucketManager.js +1 -1
  177. package/src/native.js +30 -22
  178. package/src/prebid.js +4 -20
  179. package/src/secureCreatives.js +133 -49
  180. package/src/sizeMapping.js +1 -1
  181. package/src/storageManager.js +1 -1
  182. package/src/targeting.js +13 -4
  183. package/src/userSync.js +1 -1
  184. package/src/utils.js +16 -19
  185. package/src/video.js +11 -12
  186. package/src/videoCache.js +10 -9
  187. package/test/fixtures/fixtures.js +2 -1
  188. package/test/helpers/indexStub.js +28 -0
  189. package/test/helpers/syncPromise.js +71 -0
  190. package/test/spec/auctionmanager_spec.js +269 -90
  191. package/test/spec/config_spec.js +24 -1
  192. package/test/spec/e2e/longform/basic_w_bidderSettings.spec.js +1 -1
  193. package/test/spec/e2e/longform/basic_w_custom_adserver_translation.spec.js +1 -1
  194. package/test/spec/e2e/longform/basic_w_priceGran.spec.js +1 -1
  195. package/test/spec/e2e/longform/basic_w_requireExactDuration.spec.js +1 -1
  196. package/test/spec/e2e/longform/basic_wo_brandCategoryExclusion.spec.js +1 -1
  197. package/test/spec/e2e/longform/basic_wo_requireExactDuration.spec.js +1 -1
  198. package/test/spec/modules/adagioBidAdapter_spec.js +0 -10
  199. package/test/spec/modules/adbookpspBidAdapter_spec.js +17 -3
  200. package/test/spec/modules/adhashBidAdapter_spec.js +2 -2
  201. package/test/spec/modules/adnuntiusRtdProvider_spec.js +145 -0
  202. package/test/spec/modules/adpod_spec.js +91 -156
  203. package/test/spec/modules/afpBidAdapter_spec.js +1 -1
  204. package/test/spec/modules/appnexusBidAdapter_spec.js +27 -0
  205. package/test/spec/modules/asealBidAdapter_spec.js +144 -0
  206. package/test/spec/modules/brandmetricsRtdProvider_spec.js +191 -0
  207. package/test/spec/modules/colossussspBidAdapter_spec.js +5 -2
  208. package/test/spec/modules/conversantBidAdapter_spec.js +54 -2
  209. package/test/spec/modules/criteoBidAdapter_spec.js +21 -0
  210. package/test/spec/modules/currency_spec.js +36 -15
  211. package/test/spec/modules/deepintentDpesIdsystem_spec.js +1 -1
  212. package/test/spec/modules/displayioBidAdapter_spec.js +239 -0
  213. package/test/spec/modules/dspxBidAdapter_spec.js +20 -15
  214. package/test/spec/modules/e_volutionBidAdapter_spec.js +242 -0
  215. package/test/spec/modules/eids_spec.js +2 -2
  216. package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +1 -1
  217. package/test/spec/modules/fintezaAnalyticsAdapter_spec.js +1 -1
  218. package/test/spec/modules/gnetBidAdapter_spec.js +6 -6
  219. package/test/spec/modules/gridBidAdapter_spec.js +18 -0
  220. package/test/spec/modules/gumgumBidAdapter_spec.js +49 -3
  221. package/test/spec/modules/hadronIdSystem_spec.js +57 -0
  222. package/test/spec/modules/hadronRtdProvider_spec.js +762 -0
  223. package/test/spec/modules/idxIdSystem_spec.js +1 -1
  224. package/test/spec/modules/improvedigitalBidAdapter_spec.js +19 -0
  225. package/test/spec/modules/jwplayerRtdProvider_spec.js +195 -2
  226. package/test/spec/modules/kargoBidAdapter_spec.js +1 -1
  227. package/test/spec/modules/lunamediahbBidAdapter_spec.js +27 -1
  228. package/test/spec/modules/mass_spec.js +2 -14
  229. package/test/spec/modules/mediakeysBidAdapter_spec.js +1 -1
  230. package/test/spec/modules/multibid_spec.js +1 -1
  231. package/test/spec/modules/oguryBidAdapter_spec.js +63 -5
  232. package/test/spec/modules/onetagBidAdapter_spec.js +1 -1
  233. package/test/spec/modules/openxAnalyticsAdapter_spec.js +1 -1
  234. package/test/spec/modules/parrableIdSystem_spec.js +1 -1
  235. package/test/spec/modules/pilotxBidAdapter_spec.js +244 -0
  236. package/test/spec/modules/prebidServerBidAdapter_spec.js +43 -6
  237. package/test/spec/modules/priceFloors_spec.js +37 -24
  238. package/test/spec/modules/pubmaticBidAdapter_spec.js +40 -0
  239. package/test/spec/modules/realTimeDataModule_spec.js +51 -2
  240. package/test/spec/modules/riseBidAdapter_spec.js +30 -4
  241. package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +61 -1
  242. package/test/spec/modules/rubiconBidAdapter_spec.js +1 -1
  243. package/test/spec/modules/sharethroughBidAdapter_spec.js +91 -6
  244. package/test/spec/modules/sortableAnalyticsAdapter_spec.js +2 -3
  245. package/test/spec/modules/sovrnBidAdapter_spec.js +413 -333
  246. package/test/spec/modules/sspBCBidAdapter_spec.js +7 -7
  247. package/test/spec/modules/stroeerCoreBidAdapter_spec.js +1 -1
  248. package/test/spec/modules/synacormediaBidAdapter_spec.js +70 -0
  249. package/test/spec/modules/telariaBidAdapter_spec.js +1 -3
  250. package/test/spec/modules/trustpidSystem_spec.js +232 -0
  251. package/test/spec/modules/undertoneBidAdapter_spec.js +55 -2
  252. package/test/spec/modules/userId_spec.js +40 -40
  253. package/test/spec/modules/vibrantmediaBidAdapter_spec.js +1237 -0
  254. package/test/spec/modules/viewability_spec.js +280 -0
  255. package/test/spec/modules/weboramaRtdProvider_spec.js +536 -20
  256. package/test/spec/modules/widespaceBidAdapter_spec.js +1 -1
  257. package/test/spec/modules/yahoosspBidAdapter_spec.js +10 -0
  258. package/test/spec/modules/yieldoneBidAdapter_spec.js +33 -0
  259. package/test/spec/modules/zeotapIdPlusIdSystem_spec.js +1 -1
  260. package/test/spec/native_spec.js +62 -40
  261. package/test/spec/sizeMapping_spec.js +1 -1
  262. package/test/spec/unit/core/adapterManager_spec.js +24 -2
  263. package/test/spec/unit/core/auctionIndex_spec.js +129 -0
  264. package/test/spec/unit/core/bidderFactory_spec.js +65 -12
  265. package/test/spec/unit/core/bidderSettings_spec.js +123 -0
  266. package/test/spec/unit/core/targeting_spec.js +93 -0
  267. package/test/spec/unit/pbjs_api_spec.js +81 -43
  268. package/test/spec/unit/secureCreatives_spec.js +143 -24
  269. package/test/spec/videoCache_spec.js +18 -19
  270. package/test/spec/video_spec.js +51 -61
  271. package/webpack.conf.js +1 -1
@@ -1,9 +1,11 @@
1
1
  import { logMessage } from '../src/utils.js';
2
2
  import { registerBidder } from '../src/adapters/bidderFactory.js';
3
3
  import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
4
+ import { config } from '../src/config.js';
4
5
 
5
6
  const BIDDER_CODE = 'lunamediahb';
6
7
  const AD_URL = 'https://balancer.lmgssp.com/?c=o&m=multi';
8
+ const SYNC_URL = 'https://cookie.lmgssp.com';
7
9
 
8
10
  function isBidResponseValid(bid) {
9
11
  if (!bid.requestId || !bid.cpm || !bid.creativeId ||
@@ -14,7 +16,7 @@ function isBidResponseValid(bid) {
14
16
  case BANNER:
15
17
  return Boolean(bid.width && bid.height && bid.ad);
16
18
  case VIDEO:
17
- return Boolean(bid.vastUrl);
19
+ return Boolean(bid.vastUrl) || Boolean(bid.vastXml);
18
20
  case NATIVE:
19
21
  return Boolean(bid.native && bid.native.impressionTrackers);
20
22
  default:
@@ -74,10 +76,13 @@ export const spec = {
74
76
  if (mediaType && mediaType[BANNER] && mediaType[BANNER].sizes) {
75
77
  placement.sizes = mediaType[BANNER].sizes;
76
78
  placement.traffic = BANNER;
77
- } else if (mediaType && mediaType[VIDEO] && mediaType[VIDEO].playerSize) {
78
- placement.wPlayer = mediaType[VIDEO].playerSize[0];
79
- placement.hPlayer = mediaType[VIDEO].playerSize[1];
79
+ } else if (mediaType && mediaType[VIDEO]) {
80
+ if (mediaType[VIDEO].playerSize) {
81
+ placement.wPlayer = mediaType[VIDEO].playerSize[0];
82
+ placement.hPlayer = mediaType[VIDEO].playerSize[1];
83
+ }
80
84
  placement.traffic = VIDEO;
85
+ placement.videoContext = mediaType[VIDEO].context || 'instream'
81
86
  } else if (mediaType && mediaType[NATIVE]) {
82
87
  placement.native = mediaType[NATIVE];
83
88
  placement.traffic = NATIVE;
@@ -102,6 +107,29 @@ export const spec = {
102
107
  }
103
108
  return response;
104
109
  },
110
+
111
+ getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent) => {
112
+ let syncType = syncOptions.iframeEnabled ? 'iframe' : 'image';
113
+ let syncUrl = SYNC_URL + `/${syncType}?pbjs=1`;
114
+ if (gdprConsent && gdprConsent.consentString) {
115
+ if (typeof gdprConsent.gdprApplies === 'boolean') {
116
+ syncUrl += `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
117
+ } else {
118
+ syncUrl += `&gdpr=0&gdpr_consent=${gdprConsent.consentString}`;
119
+ }
120
+ }
121
+ if (uspConsent && uspConsent.consentString) {
122
+ syncUrl += `&ccpa_consent=${uspConsent.consentString}`;
123
+ }
124
+
125
+ const coppa = config.getConfig('coppa') ? 1 : 0;
126
+ syncUrl += `&coppa=${coppa}`;
127
+
128
+ return [{
129
+ type: syncType,
130
+ url: syncUrl
131
+ }];
132
+ }
105
133
  };
106
134
 
107
135
  registerBidder(spec);
@@ -41,7 +41,8 @@ export const spec = {
41
41
  let contents = [];
42
42
  let data = {};
43
43
  let auctionId = bidderRequest ? bidderRequest.auctionId : '';
44
-
44
+ let gdrpApplies = true;
45
+ let gdprConsent = '';
45
46
  let placements = validBidRequests.map(bidRequest => {
46
47
  if (!propertyId) { propertyId = bidRequest.params.propertyId; }
47
48
  if (!pageViewGuid && bidRequest.params) { pageViewGuid = bidRequest.params.pageViewGuid || ''; }
@@ -49,7 +50,8 @@ export const spec = {
49
50
  if (!url && bidderRequest) { url = bidderRequest.refererInfo.referer; }
50
51
  if (!contents.length && bidRequest.params.contents && bidRequest.params.contents.length) { contents = bidRequest.params.contents; }
51
52
  if (Object.keys(data).length === 0 && bidRequest.params.data && Object.keys(bidRequest.params.data).length !== 0) { data = bidRequest.params.data; }
52
-
53
+ if (bidderRequest && bidRequest.gdprConsent) { gdrpApplies = bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies ? bidderRequest.gdprConsent.gdprApplies : true; }
54
+ if (bidderRequest && bidRequest.gdprConsent) { gdprConsent = bidderRequest.gdprConsent && bidderRequest.gdprConsent.consentString ? bidderRequest.gdprConsent.consentString : ''; }
53
55
  let adUnitId = bidRequest.adUnitCode;
54
56
  let placementId = bidRequest.params.placementId;
55
57
  let sizes = generateSizeParam(bidRequest.sizes);
@@ -75,7 +77,9 @@ export const spec = {
75
77
  requestid: bidderRequestId,
76
78
  placements: placements,
77
79
  contents: contents,
78
- data: data
80
+ data: data,
81
+ gdpr_applies: gdrpApplies,
82
+ gdpr_consent: gdprConsent,
79
83
  }
80
84
 
81
85
  return [{
@@ -1,68 +1,81 @@
1
1
  # Overview
2
+
2
3
  Module Name: MallTV Bidder Adapter Module
3
4
 
4
5
  Type: Bidder Adapter
5
6
 
6
- Maintainer: arditb@gjirafa.com
7
+ Maintainer: myhedin@gjirafa.com
7
8
 
8
9
  # Description
10
+
9
11
  MallTV Bidder Adapter for Prebid.js.
10
12
 
11
13
  # Test Parameters
14
+
12
15
  ```js
13
16
  var adUnits = [
14
- {
15
- code: 'test-div',
16
- mediaTypes: {
17
- banner: {
18
- sizes: [
19
- [300, 250],
20
- [300, 300]
21
- ]
22
- }
17
+ {
18
+ code: "test-div",
19
+ mediaTypes: {
20
+ banner: {
21
+ sizes: [
22
+ [300, 250],
23
+ [300, 300],
24
+ ],
25
+ },
26
+ },
27
+ bids: [
28
+ {
29
+ bidder: "malltv",
30
+ params: {
31
+ propertyId: "105134", //Required
32
+ placementId: "846832", //Required
33
+ data: {
34
+ //Optional
35
+ catalogs: [
36
+ {
37
+ catalogId: 9,
38
+ items: ["193", "4", "1"],
39
+ },
40
+ ],
41
+ inventory: {
42
+ category: ["tech"],
43
+ query: ["iphone 12"],
44
+ },
45
+ },
23
46
  },
24
- bids: [{
25
- bidder: 'malltv',
26
- params: {
27
- propertyId: '105134', //Required
28
- placementId: '846832', //Required
29
- data: { //Optional
30
- catalogs: [{
31
- catalogId: 9,
32
- items: ["193", "4", "1"]
33
- }],
34
- inventory: {
35
- category: ["tech"],
36
- query: ["iphone 12"]
37
- }
38
- }
39
- }
40
- }]
47
+ },
48
+ ],
49
+ },
50
+ {
51
+ code: "test-div",
52
+ mediaTypes: {
53
+ video: {
54
+ context: "instream",
55
+ },
41
56
  },
42
- {
43
- code: 'test-div',
44
- mediaTypes: {
45
- video: {
46
- context: 'instream'
47
- }
57
+ bids: [
58
+ {
59
+ bidder: "malltv",
60
+ params: {
61
+ propertyId: "105134", //Required
62
+ placementId: "846832", //Required
63
+ data: {
64
+ //Optional
65
+ catalogs: [
66
+ {
67
+ catalogId: 9,
68
+ items: ["193", "4", "1"],
69
+ },
70
+ ],
71
+ inventory: {
72
+ category: ["tech"],
73
+ query: ["iphone 12"],
74
+ },
75
+ },
48
76
  },
49
- bids: [{
50
- bidder: 'malltv',
51
- params: {
52
- propertyId: '105134', //Required
53
- placementId: '846832', //Required
54
- data: { //Optional
55
- catalogs: [{
56
- catalogId: 9,
57
- items: ["193", "4", "1"]
58
- }],
59
- inventory: {
60
- category: ["tech"],
61
- query: ["iphone 12"]
62
- }
63
- }
64
- }
65
- }]
66
- }
77
+ },
78
+ ],
79
+ },
67
80
  ];
68
81
  ```
package/modules/mass.js CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { config } from '../src/config.js';
6
6
  import { getHook } from '../src/hook.js';
7
- import find from 'core-js-pure/features/array/find.js';
7
+ import {auctionManager} from '../src/auctionManager.js';
8
8
 
9
9
  const defaultCfg = {
10
10
  dealIdPattern: /^MASS/i
@@ -78,7 +78,7 @@ export function updateRenderers() {
78
78
  /**
79
79
  * Before hook for 'addBidResponse'.
80
80
  */
81
- export function addBidResponseHook(next, adUnitCode, bid) {
81
+ export function addBidResponseHook(next, adUnitCode, bid, {index = auctionManager.index} = {}) {
82
82
  let renderer;
83
83
  for (let i = 0; i < renderers.length; i++) {
84
84
  if (renderers[i].match(bid)) {
@@ -88,9 +88,7 @@ export function addBidResponseHook(next, adUnitCode, bid) {
88
88
  }
89
89
 
90
90
  if (renderer) {
91
- const bidRequest = find(this.bidderRequest.bids, bidRequest =>
92
- bidRequest.bidId === bid.requestId
93
- );
91
+ const bidRequest = index.getBidRequest(bid);
94
92
 
95
93
  matchedBids[bid.requestId] = {
96
94
  renderer,
@@ -1,5 +1,5 @@
1
- import find from 'core-js-pure/features/array/find.js';
2
- import arrayFrom from 'core-js-pure/features/array/from';
1
+ import find from 'prebidjs-polyfill/find.js';
2
+ import arrayFrom from 'prebidjs-polyfill/arrayFrom.js';
3
3
  import { getWindowTop, isFn, logWarn, getDNT, deepAccess, isArray, inIframe, mergeDeep, isStr, isEmpty, deepSetValue, deepClone, parseUrl, cleanObj, logError, triggerPixel, isInteger, isNumber } from '../src/utils.js';
4
4
  import { registerBidder } from '../src/adapters/bidderFactory.js';
5
5
  import { config } from '../src/config.js';
@@ -5,7 +5,7 @@ import CONSTANTS from '../src/constants.json';
5
5
  import { ajax } from '../src/ajax.js';
6
6
  import { getRefererInfo } from '../src/refererDetection.js';
7
7
  import { AUCTION_COMPLETED, AUCTION_IN_PROGRESS, getPriceGranularity } from '../src/auction.js';
8
- import includes from 'core-js-pure/features/array/includes.js';
8
+ import includes from 'prebidjs-polyfill/includes.js';
9
9
 
10
10
  const analyticsType = 'endpoint';
11
11
  const ENDPOINT = 'https://pb-logs.media.net/log?logid=kfk&evtid=prebid_analytics_events_client';
@@ -511,7 +511,7 @@ function bidResponseHandler(bid) {
511
511
  bidObj.originalCpm = originalCpm || cpm;
512
512
  let dfpbd = deepAccess(bid, 'adserverTargeting.hb_pb');
513
513
  if (!dfpbd) {
514
- let priceGranularity = getPriceGranularity(mediaType, bid);
514
+ let priceGranularity = getPriceGranularity(bid);
515
515
  let priceGranularityKey = PRICE_GRANULARITY[priceGranularity];
516
516
  dfpbd = bid[priceGranularityKey] || cpm;
517
517
  }
@@ -1,7 +1,7 @@
1
1
  import { isStr, isEmptyStr, logError, mergeDeep, isFn, insertElement } from '../src/utils.js';
2
2
  import { submodule } from '../src/hook.js';
3
3
  import { getGlobal } from '../src/prebidGlobal.js';
4
- import includes from 'core-js-pure/features/array/includes.js';
4
+ import includes from 'prebidjs-polyfill/includes.js';
5
5
 
6
6
  const MODULE_NAME = 'medianet';
7
7
  const SOURCE = MODULE_NAME + 'rtd';
@@ -11,6 +11,7 @@ const BIDDER_ENDPOINT_WINNING = 'winning';
11
11
 
12
12
  export const spec = {
13
13
  code: BIDDER_CODE,
14
+ gvlid: 791,
14
15
  aliases: ['msq'], // short code
15
16
  supportedMediaTypes: [BANNER, NATIVE, VIDEO],
16
17
  /**
@@ -109,6 +109,7 @@ export const spec = {
109
109
  let bidders = []
110
110
  if (responses) {
111
111
  _each(responses, (response) => {
112
+ if (!(response && response.body && response.body.ext && response.body.ext.responsetimemillis)) return
112
113
  _each(Object.keys(response.body.ext.responsetimemillis), b => bidders.push(b))
113
114
  })
114
115
  }
@@ -12,7 +12,7 @@ import {
12
12
  import { registerBidder } from '../src/adapters/bidderFactory.js';
13
13
  import { BANNER, NATIVE } from '../src/mediaTypes.js';
14
14
 
15
- import find from 'core-js-pure/features/array/find.js';
15
+ import find from 'prebidjs-polyfill/find.js';
16
16
 
17
17
  const BIDDER_CODE = 'nextroll';
18
18
  const BIDDER_ENDPOINT = 'https://d.adroll.com/bid/prebid/';
@@ -10,7 +10,7 @@ const DEFAULT_TIMEOUT = 1000;
10
10
  const BID_HOST = 'https://mweb-hb.presage.io/api/header-bidding-request';
11
11
  const TIMEOUT_MONITORING_HOST = 'https://ms-ads-monitoring-events.presage.io';
12
12
  const MS_COOKIE_SYNC_DOMAIN = 'https://ms-cookie-sync.presage.io';
13
- const ADAPTER_VERSION = '1.2.7';
13
+ const ADAPTER_VERSION = '1.2.10';
14
14
 
15
15
  function isBidRequestValid(bid) {
16
16
  const adUnitSizes = getAdUnitSizes(bid);
@@ -41,10 +41,10 @@ function buildRequests(validBidRequests, bidderRequest) {
41
41
  const openRtbBidRequestBanner = {
42
42
  id: bidderRequest.auctionId,
43
43
  tmax: DEFAULT_TIMEOUT,
44
- at: 2,
44
+ at: 1,
45
45
  regs: {
46
46
  ext: {
47
- gdpr: 1
47
+ gdpr: bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies ? 1 : 0
48
48
  },
49
49
  },
50
50
  site: {
@@ -63,14 +63,7 @@ function buildRequests(validBidRequests, bidderRequest) {
63
63
  }
64
64
  };
65
65
 
66
- if (bidderRequest.hasOwnProperty('gdprConsent') &&
67
- bidderRequest.gdprConsent.hasOwnProperty('gdprApplies')) {
68
- openRtbBidRequestBanner.regs.ext.gdpr = bidderRequest.gdprConsent.gdprApplies ? 1 : 0
69
- }
70
-
71
- if (bidderRequest.hasOwnProperty('gdprConsent') &&
72
- bidderRequest.gdprConsent.hasOwnProperty('consentString') &&
73
- bidderRequest.gdprConsent.consentString.length > 0) {
66
+ if (bidderRequest.gdprConsent && bidderRequest.gdprConsent.consentString) {
74
67
  openRtbBidRequestBanner.user.ext.consent = bidderRequest.gdprConsent.consentString
75
68
  }
76
69
 
@@ -78,7 +71,7 @@ function buildRequests(validBidRequests, bidderRequest) {
78
71
  const sizes = getAdUnitSizes(bidRequest)
79
72
  .map(size => ({ w: size[0], h: size[1] }));
80
73
 
81
- if (bidRequest.hasOwnProperty('mediaTypes') &&
74
+ if (bidRequest.mediaTypes &&
82
75
  bidRequest.mediaTypes.hasOwnProperty('banner')) {
83
76
  openRtbBidRequestBanner.site.id = bidRequest.params.assetKey;
84
77
 
@@ -166,11 +159,11 @@ function onBidWon(bid) {
166
159
  w.OG_PREBID_BID_OBJECT = {
167
160
  ...(bid && { ...bid }),
168
161
  }
169
- if (bid && bid.hasOwnProperty('nurl') && bid.nurl.length > 0) ajax(bid['nurl'], null);
162
+ if (bid && bid.nurl) ajax(bid.nurl, null);
170
163
  }
171
164
 
172
165
  function onTimeout(timeoutData) {
173
- ajax(`${TIMEOUT_MONITORING_HOST}/bid_timeout`, null, JSON.stringify(timeoutData[0]), {
166
+ ajax(`${TIMEOUT_MONITORING_HOST}/bid_timeout`, null, JSON.stringify({...timeoutData[0], location: window.location.href}), {
174
167
  method: 'POST',
175
168
  contentType: 'application/json'
176
169
  });
@@ -3,7 +3,7 @@
3
3
  import { BANNER, VIDEO } from '../src/mediaTypes.js';
4
4
  import { INSTREAM, OUTSTREAM } from '../src/video.js';
5
5
  import { Renderer } from '../src/Renderer.js';
6
- import find from 'core-js-pure/features/array/find.js';
6
+ import find from 'prebidjs-polyfill/find.js';
7
7
  import { getStorageManager } from '../src/storageManager.js';
8
8
  import { registerBidder } from '../src/adapters/bidderFactory.js';
9
9
  import { createEidsArray } from './userId/eids.js';
@@ -2,7 +2,7 @@ import { isNumber, deepAccess, isArray, flatten, convertTypes, parseSizesInput }
2
2
  import { registerBidder } from '../src/adapters/bidderFactory.js';
3
3
  import { ADPOD, BANNER, VIDEO } from '../src/mediaTypes.js';
4
4
  import { config } from '../src/config.js';
5
- import find from 'core-js-pure/features/array/find.js';
5
+ import find from 'prebidjs-polyfill/find.js';
6
6
 
7
7
  const ENDPOINT = 'https://ghb.spotim.market/v2/auction';
8
8
  const BIDDER_CODE = 'openweb';
@@ -3,8 +3,8 @@ import adapter from '../src/AnalyticsAdapter.js';
3
3
  import CONSTANTS from '../src/constants.json';
4
4
  import adapterManager from '../src/adapterManager.js';
5
5
  import { ajax } from '../src/ajax.js';
6
- import find from 'core-js-pure/features/array/find.js';
7
- import includes from 'core-js-pure/features/array/includes.js';
6
+ import find from 'prebidjs-polyfill/find.js';
7
+ import includes from 'prebidjs-polyfill/includes.js';
8
8
 
9
9
  export const AUCTION_STATES = {
10
10
  INIT: 'initialized', // auction has initialized
@@ -2,7 +2,7 @@ import { deepAccess, convertTypes, isArray, inIframe, _map, deepSetValue, _each,
2
2
  import {config} from '../src/config.js';
3
3
  import {registerBidder} from '../src/adapters/bidderFactory.js';
4
4
  import {BANNER, VIDEO} from '../src/mediaTypes.js';
5
- import includes from 'core-js-pure/features/array/includes.js'
5
+ import includes from 'prebidjs-polyfill/includes.js'
6
6
 
7
7
  const SUPPORTED_AD_TYPES = [BANNER, VIDEO];
8
8
  const VIDEO_TARGETING = ['startdelay', 'mimes', 'minduration', 'maxduration',
@@ -8,7 +8,7 @@
8
8
  // ci trigger: 1
9
9
 
10
10
  import { timestamp, logError, logWarn, isEmpty, contains, inIframe, deepClone, isPlainObject } from '../src/utils.js';
11
- import find from 'core-js-pure/features/array/find.js';
11
+ import find from 'prebidjs-polyfill/find.js';
12
12
  import { ajax } from '../src/ajax.js';
13
13
  import { submodule } from '../src/hook.js';
14
14
  import { getRefererInfo } from '../src/refererDetection.js';
@@ -10,7 +10,7 @@ import { submodule } from '../src/hook.js'
10
10
  import { getStorageManager } from '../src/storageManager.js'
11
11
  import { deepSetValue, deepAccess, isFn, mergeDeep, logError } from '../src/utils.js'
12
12
  import { config } from '../src/config.js'
13
- import includes from 'core-js-pure/features/array/includes.js'
13
+ import includes from 'prebidjs-polyfill/includes.js'
14
14
  const MODULE_NAME = 'permutive'
15
15
 
16
16
  export const storage = getStorageManager(null, MODULE_NAME)
@@ -0,0 +1,147 @@
1
+ import { registerBidder } from '../src/adapters/bidderFactory.js';
2
+ const BIDDER_CODE = 'pilotx';
3
+ const ENDPOINT_URL = '//adn.pilotx.tv/hb'
4
+ export const spec = {
5
+ code: BIDDER_CODE,
6
+ supportedMediaTypes: ['banner', 'video'],
7
+ aliases: ['pilotx'], // short code
8
+ /**
9
+ * Determines whether or not the given bid request is valid.
10
+ *
11
+ * @param {BidRequest} bid The bid params to validate.
12
+ * @return boolean True if this is a valid bid, and false otherwise.
13
+ */
14
+ isBidRequestValid: function (bid) {
15
+ let sizesCheck = !!bid.sizes
16
+ let paramSizesCheck = !!bid.params.sizes
17
+ var sizeConfirmed = false
18
+ if (sizesCheck) {
19
+ if (bid.sizes.length < 1) {
20
+ return false
21
+ } else {
22
+ sizeConfirmed = true
23
+ }
24
+ }
25
+ if (paramSizesCheck) {
26
+ if (bid.params.sizes.length < 1 && !sizeConfirmed) {
27
+ return false
28
+ } else {
29
+ sizeConfirmed = true
30
+ }
31
+ }
32
+ if (!sizeConfirmed) {
33
+ return false
34
+ }
35
+ return !!(bid.params.placementId);
36
+ },
37
+ /**
38
+ * Make a server request from the list of BidRequests.
39
+ *
40
+ * @param {validBidRequests[]} - an array of bids
41
+ * @return ServerRequest Info describing the request to the server.
42
+ */
43
+ buildRequests: function (validBidRequests, bidderRequest) {
44
+ let payloadItems = {};
45
+ validBidRequests.forEach(bidRequest => {
46
+ let sizes = [];
47
+ let placementId = this.setPlacementID(bidRequest.params.placementId)
48
+ payloadItems[placementId] = {}
49
+ if (bidRequest.sizes.length > 0) {
50
+ if (Array.isArray(bidRequest.sizes[0])) {
51
+ for (let i = 0; i < bidRequest.sizes.length; i++) {
52
+ sizes[i] = [(bidRequest.sizes[i])[0], (bidRequest.sizes[i])[1]]
53
+ }
54
+ } else {
55
+ sizes[0] = [bidRequest.sizes[0], bidRequest.sizes[1]]
56
+ }
57
+ payloadItems[placementId]['sizes'] = sizes
58
+ }
59
+ if (bidRequest.mediaTypes != null) {
60
+ for (let i in bidRequest.mediaTypes) {
61
+ payloadItems[placementId][i] = {
62
+ ...bidRequest.mediaTypes[i]
63
+ }
64
+ }
65
+ }
66
+ let consentTemp = ''
67
+ let consentRequiredTemp = false
68
+ if (bidderRequest && bidderRequest.gdprConsent) {
69
+ consentTemp = bidderRequest.gdprConsent.consentString
70
+ // will check if the gdprApplies field was populated with a boolean value (ie from page config). If it's undefined, then default to true
71
+ consentRequiredTemp = (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean') ? bidderRequest.gdprConsent.gdprApplies : true
72
+ }
73
+
74
+ payloadItems[placementId]['gdprConsentString'] = consentTemp
75
+ payloadItems[placementId]['gdprConsentRequired'] = consentRequiredTemp
76
+ payloadItems[placementId]['bidId'] = bidRequest.bidId
77
+ });
78
+ const payload = payloadItems;
79
+ const payloadString = JSON.stringify(payload);
80
+ return {
81
+ method: 'POST',
82
+ url: ENDPOINT_URL,
83
+ data: payloadString,
84
+ };
85
+ },
86
+ /**
87
+ * Unpack the response from the server into a list of bids.
88
+ *
89
+ * @param {ServerResponse} serverResponse A successful response from the server.
90
+ * @return {Bid[]} An array of bids which were nested inside the server.
91
+ */
92
+ interpretResponse: function (serverResponse, bidRequest) {
93
+ const serverBody = serverResponse.body;
94
+ const bidResponses = [];
95
+ if (serverBody.mediaType == 'banner') {
96
+ const bidResponse = {
97
+ requestId: serverBody.requestId,
98
+ cpm: serverBody.cpm,
99
+ width: serverBody.width,
100
+ height: serverBody.height,
101
+ creativeId: serverBody.creativeId,
102
+ currency: serverBody.currency,
103
+ netRevenue: false,
104
+ ttl: serverBody.ttl,
105
+ ad: serverBody.ad,
106
+ mediaType: 'banner',
107
+ meta: {
108
+ mediaType: 'banner',
109
+ advertiserDomains: serverBody.advertiserDomains
110
+ }
111
+ }
112
+ bidResponses.push(bidResponse)
113
+ } else if (serverBody.mediaType == 'video') {
114
+ const bidResponse = {
115
+ requestId: serverBody.requestId,
116
+ cpm: serverBody.cpm,
117
+ width: serverBody.width,
118
+ height: serverBody.height,
119
+ creativeId: serverBody.creativeId,
120
+ currency: serverBody.currency,
121
+ netRevenue: false,
122
+ ttl: serverBody.ttl,
123
+ vastUrl: serverBody.vastUrl,
124
+ mediaType: 'video',
125
+ meta: {
126
+ mediaType: 'video',
127
+ advertiserDomains: serverBody.advertiserDomains
128
+ }
129
+ }
130
+ bidResponses.push(bidResponse)
131
+ }
132
+
133
+ return bidResponses;
134
+ },
135
+
136
+ /**
137
+ * Formats placement ids for adserver ingestion purposes
138
+ * @param {string[]} The placement ID/s in an array
139
+ */
140
+ setPlacementID: function (placementId) {
141
+ if (Array.isArray(placementId)) {
142
+ return placementId.join('#')
143
+ }
144
+ return placementId
145
+ },
146
+ }
147
+ registerBidder(spec);
@@ -0,0 +1,50 @@
1
+ # Overview
2
+
3
+ ```
4
+ Module Name: Pilotx Prebid Adapter
5
+ Module Type: Bidder Adapter
6
+ Maintainer: tony@pilotx.tv
7
+ ```
8
+
9
+ # Description
10
+
11
+ Connects to Pilotx
12
+
13
+ Pilotx's bid adapter supports banner and video.
14
+
15
+ # Test Parameters
16
+ ```
17
+ // Banner adUnit
18
+ var adUnits = [{
19
+ code: 'div-gpt-ad-1460505748561-0',
20
+ mediaTypes: {
21
+ banner: {
22
+ sizes: [[300, 250], [300,600]],
23
+ }
24
+ },
25
+ bids: [{
26
+ bidder: 'pilotx',
27
+ params: {
28
+ placementId: ["1423"]
29
+ }
30
+ }]
31
+
32
+ }];
33
+
34
+ // Video adUnit
35
+ var videoAdUnit = {
36
+ code: 'video1',
37
+ mediaTypes: {
38
+ video: {
39
+ context: 'instream',
40
+ playerSize: [640, 480],
41
+ }
42
+ },
43
+ bids: [{
44
+ bidder: 'pilotx',
45
+ params: {
46
+ placementId: '1422',
47
+ }
48
+ }]
49
+ };
50
+ ```
@@ -2,10 +2,10 @@ import { registerBidder } from '../src/adapters/bidderFactory.js';
2
2
  import { getStorageManager } from '../src/storageManager.js';
3
3
  import { BANNER } from '../src/mediaTypes.js';
4
4
  import { config } from '../src/config.js';
5
- import includes from 'core-js-pure/features/array/includes.js';
5
+ import includes from 'prebidjs-polyfill/includes.js';
6
6
  import { convertCamelToUnderscore, isArray, isNumber, isPlainObject, deepAccess, isEmpty, transformBidderParamKeywords, isFn } from '../src/utils.js';
7
7
  import { auctionManager } from '../src/auctionManager.js';
8
- import find from 'core-js-pure/features/array/find.js';
8
+ import find from 'prebidjs-polyfill/find.js';
9
9
 
10
10
  const SOURCE = 'pbjs';
11
11
  const storageManager = getStorageManager();