prebid.js 5.16.0 → 5.20.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 (182) hide show
  1. package/.devcontainer/Dockerfile +11 -0
  2. package/.devcontainer/devcontainer.json +27 -0
  3. package/.devcontainer/postCreate.sh +6 -0
  4. package/browsers.json +1 -0
  5. package/integrationExamples/gpt/akamaidap_segments_example.html +132 -0
  6. package/modules/.submodules.json +1 -0
  7. package/modules/adfBidAdapter.js +21 -16
  8. package/modules/adgenerationBidAdapter.js +28 -4
  9. package/modules/adkernelBidAdapter.js +3 -1
  10. package/modules/admixerBidAdapter.js +11 -0
  11. package/modules/adnuntiusBidAdapter.js +1 -0
  12. package/modules/adtelligentBidAdapter.js +2 -1
  13. package/modules/airgridRtdProvider.js +1 -1
  14. package/modules/akamaiDapRtdProvider.js +474 -0
  15. package/modules/akamaiDapRtdProvider.md +47 -0
  16. package/modules/aolBidAdapter.js +2 -1
  17. package/modules/appnexusBidAdapter.js +5 -3
  18. package/modules/atsAnalyticsAdapter.js +89 -63
  19. package/modules/atsAnalyticsAdapter.md +1 -0
  20. package/modules/betweenBidAdapter.js +20 -3
  21. package/modules/bliinkBidAdapter.js +58 -32
  22. package/modules/bliinkBidAdapter.md +29 -6
  23. package/modules/browsiRtdProvider.js +106 -18
  24. package/modules/cleanioRtdProvider.js +192 -0
  25. package/modules/cleanioRtdProvider.md +59 -0
  26. package/modules/codefuelBidAdapter.js +183 -0
  27. package/modules/codefuelBidAdapter.md +111 -0
  28. package/modules/connectIdSystem.js +104 -0
  29. package/modules/connectIdSystem.md +33 -0
  30. package/modules/cwireBidAdapter.js +272 -0
  31. package/modules/cwireBidAdapter.md +43 -0
  32. package/modules/deepintentBidAdapter.js +106 -9
  33. package/modules/deepintentBidAdapter.md +36 -1
  34. package/modules/deltaprojectsBidAdapter.js +252 -0
  35. package/modules/deltaprojectsBidAdapter.md +32 -0
  36. package/modules/dgkeywordRtdProvider.js +0 -1
  37. package/modules/engageyaBidAdapter.js +157 -0
  38. package/modules/glimpseBidAdapter.js +160 -48
  39. package/modules/glimpseBidAdapter.md +11 -74
  40. package/modules/gridBidAdapter.js +1 -0
  41. package/modules/gridNMBidAdapter.js +7 -6
  42. package/modules/gumgumBidAdapter.js +16 -2
  43. package/modules/iasRtdProvider.js +83 -67
  44. package/modules/inskinBidAdapter.js +7 -3
  45. package/modules/ixBidAdapter.js +8 -1
  46. package/modules/jixieBidAdapter.js +8 -2
  47. package/modules/justpremiumBidAdapter.js +6 -1
  48. package/modules/kargoBidAdapter.js +14 -7
  49. package/modules/kargoBidAdapter.md +20 -0
  50. package/modules/limelightDigitalBidAdapter.js +22 -2
  51. package/modules/livewrappedAnalyticsAdapter.js +53 -3
  52. package/modules/mediakeysBidAdapter.js +405 -14
  53. package/modules/mediakeysBidAdapter.md +108 -0
  54. package/modules/multibid/index.js +3 -3
  55. package/modules/mytargetBidAdapter.js +112 -0
  56. package/modules/nativoBidAdapter.js +48 -29
  57. package/modules/nativoBidAdapter.md +0 -1
  58. package/modules/nextMillenniumBidAdapter.js +12 -3
  59. package/modules/nextrollBidAdapter.js +375 -0
  60. package/modules/nobidBidAdapter.js +2 -1
  61. package/modules/oguryBidAdapter.js +36 -7
  62. package/modules/openxBidAdapter.js +34 -22
  63. package/modules/operaadsBidAdapter.js +21 -1
  64. package/modules/otmBidAdapter.js +146 -0
  65. package/modules/otmBidAdapter.md +27 -26
  66. package/modules/outbrainBidAdapter.js +5 -0
  67. package/modules/pixfutureBidAdapter.js +24 -4
  68. package/modules/pixfutureBidAdapter.md +127 -0
  69. package/modules/playwireBidAdapter.md +61 -0
  70. package/modules/prebidServerBidAdapter/index.js +1 -1
  71. package/modules/proxistoreBidAdapter.js +4 -6
  72. package/modules/publinkIdSystem.js +17 -7
  73. package/modules/publinkIdSystem.md +7 -2
  74. package/modules/pubmaticBidAdapter.js +22 -6
  75. package/modules/pubmaticBidAdapter.md +1 -1
  76. package/modules/relaidoBidAdapter.js +8 -2
  77. package/modules/rtdModule/index.js +2 -2
  78. package/modules/sharethroughBidAdapter.js +12 -19
  79. package/modules/slimcutBidAdapter.js +121 -0
  80. package/modules/sonobiBidAdapter.js +7 -0
  81. package/modules/sortableBidAdapter.js +1 -0
  82. package/modules/spotxBidAdapter.js +15 -1
  83. package/modules/sspBCBidAdapter.js +207 -12
  84. package/modules/sspBCBidAdapter.md +1 -1
  85. package/modules/talkadsBidAdapter.js +129 -0
  86. package/modules/talkadsBidAdapter.md +60 -0
  87. package/modules/tappxBidAdapter.js +6 -5
  88. package/modules/teadsBidAdapter.js +3 -0
  89. package/modules/tripleliftBidAdapter.js +22 -5
  90. package/modules/trustxBidAdapter.js +17 -11
  91. package/modules/undertoneBidAdapter.js +9 -5
  92. package/modules/undertoneBidAdapter.md +5 -1
  93. package/modules/unicornBidAdapter.js +3 -3
  94. package/modules/userId/eids.js +18 -0
  95. package/modules/userId/eids.md +7 -0
  96. package/modules/userId/userId.md +12 -0
  97. package/modules/ventesBidAdapter.js +370 -0
  98. package/modules/ventesBidAdapter.md +94 -0
  99. package/modules/videobyteBidAdapter.js +13 -6
  100. package/modules/videobyteBidAdapter.md +49 -0
  101. package/modules/vidoomyBidAdapter.js +20 -12
  102. package/modules/visxBidAdapter.js +15 -22
  103. package/modules/yahoosspBidAdapter.js +637 -0
  104. package/modules/yahoosspBidAdapter.md +795 -0
  105. package/modules/yieldlabBidAdapter.js +48 -3
  106. package/modules/yieldlabBidAdapter.md +16 -1
  107. package/modules/yieldmoBidAdapter.js +20 -6
  108. package/modules/yieldmoSyntheticInventoryModule.js +46 -0
  109. package/modules/yieldmoSyntheticInventoryModule.md +68 -0
  110. package/package.json +1 -1
  111. package/src/adapterManager.js +5 -0
  112. package/src/adapters/bidderFactory.js +4 -3
  113. package/src/auction.js +11 -11
  114. package/src/constants.json +1 -0
  115. package/src/secureCreatives.js +6 -7
  116. package/src/targeting.js +11 -9
  117. package/test/.eslintrc.js +2 -1
  118. package/test/spec/modules/adfBidAdapter_spec.js +83 -29
  119. package/test/spec/modules/adgenerationBidAdapter_spec.js +121 -50
  120. package/test/spec/modules/adnuntiusBidAdapter_spec.js +68 -0
  121. package/test/spec/modules/adtelligentBidAdapter_spec.js +1 -0
  122. package/test/spec/modules/akamaiDapRtdProvider_spec.js +246 -0
  123. package/test/spec/modules/appnexusBidAdapter_spec.js +2 -1
  124. package/test/spec/modules/atsAnalyticsAdapter_spec.js +77 -9
  125. package/test/spec/modules/betweenBidAdapter_spec.js +41 -0
  126. package/test/spec/modules/bliinkBidAdapter_spec.js +87 -36
  127. package/test/spec/modules/browsiRtdProvider_spec.js +62 -7
  128. package/test/spec/modules/cleanioRtdProvider_spec.js +188 -0
  129. package/test/spec/modules/codefuelBidAdapter_spec.js +316 -0
  130. package/test/spec/modules/connectIdSystem_spec.js +189 -0
  131. package/test/spec/modules/cwireBidAdapter_spec.js +246 -0
  132. package/test/spec/modules/deepintentBidAdapter_spec.js +153 -3
  133. package/test/spec/modules/deltaprojectsBidAdapter_spec.js +399 -0
  134. package/test/spec/modules/engageyaBidAdapter_spec.js +286 -0
  135. package/test/spec/modules/glimpseBidAdapter_spec.js +302 -204
  136. package/test/spec/modules/gridNMBidAdapter_spec.js +40 -1
  137. package/test/spec/modules/gumgumBidAdapter_spec.js +23 -6
  138. package/test/spec/modules/iasRtdProvider_spec.js +71 -6
  139. package/test/spec/modules/ixBidAdapter_spec.js +13 -3
  140. package/test/spec/modules/jixieBidAdapter_spec.js +13 -11
  141. package/test/spec/modules/justpremiumBidAdapter_spec.js +9 -2
  142. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +155 -1
  143. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +67 -12
  144. package/test/spec/modules/mediakeysBidAdapter_spec.js +406 -51
  145. package/test/spec/modules/multibid_spec.js +31 -31
  146. package/test/spec/modules/mytargetBidAdapter_spec.js +199 -0
  147. package/test/spec/modules/nativoBidAdapter_spec.js +50 -3
  148. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +13 -1
  149. package/test/spec/modules/nextrollBidAdapter_spec.js +290 -0
  150. package/test/spec/modules/nobidBidAdapter_spec.js +65 -1
  151. package/test/spec/modules/oguryBidAdapter_spec.js +125 -37
  152. package/test/spec/modules/openxBidAdapter_spec.js +85 -13
  153. package/test/spec/modules/operaadsBidAdapter_spec.js +38 -6
  154. package/test/spec/modules/otmBidAdapter_spec.js +67 -0
  155. package/test/spec/modules/outbrainBidAdapter_spec.js +18 -0
  156. package/test/spec/modules/publinkIdSystem_spec.js +34 -15
  157. package/test/spec/modules/pubmaticBidAdapter_spec.js +217 -1
  158. package/test/spec/modules/relaidoBidAdapter_spec.js +21 -20
  159. package/test/spec/modules/sharethroughBidAdapter_spec.js +156 -136
  160. package/test/spec/modules/slimcutBidAdapter_spec.js +200 -0
  161. package/test/spec/modules/sonobiBidAdapter_spec.js +34 -1
  162. package/test/spec/modules/sortableBidAdapter_spec.js +11 -0
  163. package/test/spec/modules/spotxBidAdapter_spec.js +36 -0
  164. package/test/spec/modules/sspBCBidAdapter_spec.js +210 -62
  165. package/test/spec/modules/talkadsBidAdapter_spec.js +231 -0
  166. package/test/spec/modules/teadsBidAdapter_spec.js +132 -0
  167. package/test/spec/modules/tripleliftBidAdapter_spec.js +128 -0
  168. package/test/spec/modules/trustxBidAdapter_spec.js +38 -5
  169. package/test/spec/modules/undertoneBidAdapter_spec.js +52 -0
  170. package/test/spec/modules/unicornBidAdapter_spec.js +4 -4
  171. package/test/spec/modules/ventesBidAdapter_spec.js +845 -0
  172. package/test/spec/modules/videobyteBidAdapter_spec.js +2 -2
  173. package/test/spec/modules/visxBidAdapter_spec.js +48 -4
  174. package/test/spec/modules/yahoosspBidAdapter_spec.js +1332 -0
  175. package/test/spec/modules/yieldlabBidAdapter_spec.js +65 -1
  176. package/test/spec/modules/yieldmoBidAdapter_spec.js +30 -9
  177. package/test/spec/modules/yieldmoSyntheticInventoryModule_spec.js +89 -0
  178. package/test/spec/unit/core/adapterManager_spec.js +32 -0
  179. package/test/spec/unit/core/bidderFactory_spec.js +61 -1
  180. package/test/spec/unit/pbjs_api_spec.js +37 -2
  181. package/test/spec/unit/secureCreatives_spec.js +54 -25
  182. package/modules/turktelekomBidAdapter.md +0 -49
@@ -19,7 +19,7 @@ const PUBLINK_S2S_COOKIE = '_publink_srv';
19
19
  export const storage = getStorageManager(GVLID);
20
20
 
21
21
  function isHex(s) {
22
- return (typeof s === 'string' && /^[A-F0-9]+$/i.test(s));
22
+ return /^[A-F0-9]+$/i.test(s);
23
23
  }
24
24
 
25
25
  function publinkIdUrl(params, consentData) {
@@ -29,11 +29,16 @@ function publinkIdUrl(params, consentData) {
29
29
  mpn: 'Prebid.js',
30
30
  mpv: '$prebid.version$',
31
31
  };
32
+
32
33
  if (consentData) {
33
34
  url.search.gdpr = (consentData.gdprApplies) ? 1 : 0;
34
35
  url.search.gdpr_consent = consentData.consentString;
35
36
  }
36
37
 
38
+ if (params.site_id) { url.search.sid = params.site_id; }
39
+
40
+ if (params.api_key) { url.search.apikey = params.api_key; }
41
+
37
42
  const usPrivacyString = uspDataHandler.getConsentData();
38
43
  if (usPrivacyString && typeof usPrivacyString === 'string') {
39
44
  url.search.us_privacy = usPrivacyString;
@@ -76,13 +81,18 @@ function getlocalValue() {
76
81
  }
77
82
 
78
83
  if (typeof value === 'string') {
79
- try {
80
- const obj = JSON.parse(value);
81
- if (obj && obj.exp && obj.exp > Date.now()) {
82
- return obj.publink;
84
+ // if it's a json object parse it and return the publink value, otherwise assume the value is the id
85
+ if (value.charAt(0) === '{') {
86
+ try {
87
+ const obj = JSON.parse(value);
88
+ if (obj) {
89
+ return obj.publink;
90
+ }
91
+ } catch (e) {
92
+ logError(e);
83
93
  }
84
- } catch (e) {
85
- logError(e);
94
+ } else {
95
+ return value;
86
96
  }
87
97
  }
88
98
  }
@@ -7,7 +7,10 @@ Publink user id module
7
7
  | Param Name | Required | Type | Description | Example |
8
8
  | --- | --- | --- | --- | --- |
9
9
  | name | Yes | String | module identifier | `"publinkId"` |
10
- | params.e | Yes | String | hashed email address | `"e80b5017098950fc58aad83c8c14978e"` |
10
+ | params.e | Yes | String | hashed email address | `"7D320454942620664D96EF78ED4E3A2A"` |
11
+ | params.api_key | Yes | String | api key for access | `"7ab62359-bdc0-4095-b573-ef474fb55d24"` |
12
+ | params.site_id | Yes | String | site identifier | `"123456"` |
13
+
11
14
 
12
15
  ### Example configuration for Publink
13
16
  ```
@@ -20,7 +23,9 @@ pbjs.setConfig({
20
23
  type: "html5"
21
24
  },
22
25
  params: {
23
- e: "e80b5017098950fc58aad83c8c14978e", // example hashed email (md5)
26
+ e: "7D320454942620664D96EF78ED4E3A2A", // example hashed email (md5)
27
+ site_id: "123456", // provided by Epsilon
28
+ api_key: "7ab62359-bdc0-4095-b573-ef474fb55d2" // provided by Epsilon
24
29
  }
25
30
  }],
26
31
  }
@@ -17,6 +17,7 @@ const DEFAULT_HEIGHT = 0;
17
17
  const PREBID_NATIVE_HELP_LINK = 'http://prebid.org/dev-docs/show-native-ads.html';
18
18
  const PUBLICATION = 'pubmatic'; // Your publication on Blue Billywig, potentially with environment (e.g. publication.bbvms.com or publication.test.bbvms.com)
19
19
  const RENDERER_URL = 'https://pubmatic.bbvms.com/r/'.concat('$RENDERER', '.js'); // URL of the renderer application
20
+ const MSG_VIDEO_PLACEMENT_MISSING = 'Video.Placement param missing';
20
21
  const CUSTOM_PARAMS = {
21
22
  'kadpageurl': '', // Custom page url
22
23
  'gender': '', // User gender
@@ -537,12 +538,20 @@ function _createBannerRequest(bid) {
537
538
  return bannerObj;
538
539
  }
539
540
 
541
+ export function checkVideoPlacement(videoData, adUnitCode) {
542
+ // Check for video.placement property. If property is missing display log message.
543
+ if (!deepAccess(videoData, 'placement')) {
544
+ logWarn(MSG_VIDEO_PLACEMENT_MISSING + ' for ' + adUnitCode);
545
+ };
546
+ }
547
+
540
548
  function _createVideoRequest(bid) {
541
549
  var videoData = mergeDeep(deepAccess(bid.mediaTypes, 'video'), bid.params.video);
542
550
  var videoObj;
543
551
 
544
552
  if (videoData !== UNDEFINED) {
545
553
  videoObj = {};
554
+ checkVideoPlacement(videoData, bid.adUnitCode);
546
555
  for (var key in VIDEO_CUSTOM_PARAMS) {
547
556
  if (videoData.hasOwnProperty(key)) {
548
557
  videoObj[key] = _checkParamDataType(key, videoData[key], VIDEO_CUSTOM_PARAMS[key]);
@@ -605,7 +614,7 @@ function _addDealCustomTargetings(imp, bid) {
605
614
  }
606
615
  }
607
616
 
608
- function _addJWPlayerSegmentData(imp, bid) {
617
+ function _addJWPlayerSegmentData(imp, bid, isS2S) {
609
618
  var jwSegData = (bid.rtd && bid.rtd.jwplayer && bid.rtd.jwplayer.targeting) || undefined;
610
619
  var jwPlayerData = '';
611
620
  const jwMark = 'jw-';
@@ -619,10 +628,15 @@ function _addJWPlayerSegmentData(imp, bid) {
619
628
  for (var i = 0; i < maxLength; i++) {
620
629
  jwPlayerData += '|' + jwMark + jwSegData.segments[i] + '=1';
621
630
  }
622
- const ext = imp.ext;
623
- (ext && ext.key_val === undefined)
624
- ? ext.key_val = jwPlayerData
625
- : ext.key_val += '|' + jwPlayerData;
631
+
632
+ var ext;
633
+
634
+ if (isS2S) {
635
+ (imp.dctr === undefined || imp.dctr.length == 0) ? imp.dctr = jwPlayerData : imp.dctr += '|' + jwPlayerData;
636
+ } else {
637
+ ext = imp.ext;
638
+ ext && ext.key_val === undefined ? ext.key_val = jwPlayerData : ext.key_val += '|' + jwPlayerData;
639
+ }
626
640
  }
627
641
 
628
642
  function _createImpressionObject(bid, conf) {
@@ -1322,7 +1336,9 @@ export const spec = {
1322
1336
  * @param {Boolean} isOpenRtb boolean to check openrtb2 protocol
1323
1337
  * @return {Object} params bid params
1324
1338
  */
1325
- transformBidParams: function (params, isOpenRtb) {
1339
+
1340
+ transformBidParams: function (params, isOpenRtb, adUnit, bidRequests) {
1341
+ _addJWPlayerSegmentData(params, adUnit.bids[0], true);
1326
1342
  return convertTypes({
1327
1343
  'publisherId': 'string',
1328
1344
  'adSlot': 'string'
@@ -25,7 +25,7 @@ var adUnits = [
25
25
  bidder: 'pubmatic',
26
26
  params: {
27
27
  publisherId: '156209', // required, must be a string, not an integer or other js type.
28
- oustreamAU: 'renderer_test_pubmatic', // required if mediaTypes-> video-> context is 'outstream' and optional if renderer is defined in adUnits or in mediaType video. This value can be get by BlueBillyWig Team.
28
+ outstreamAU: 'renderer_test_pubmatic', // required if mediaTypes-> video-> context is 'outstream' and optional if renderer is defined in adUnits or in mediaType video. This value can be get by BlueBillyWig Team.
29
29
  adSlot: 'pubmatic_test2', // optional, must be a string, not an integer or other js type.
30
30
  pmzoneid: 'zone1, zone11', // optional
31
31
  lat: '40.712775', // optional
@@ -6,7 +6,7 @@ import { getStorageManager } from '../src/storageManager.js';
6
6
 
7
7
  const BIDDER_CODE = 'relaido';
8
8
  const BIDDER_DOMAIN = 'api.relaido.jp';
9
- const ADAPTER_VERSION = '1.0.5';
9
+ const ADAPTER_VERSION = '1.0.6';
10
10
  const DEFAULT_TTL = 300;
11
11
  const UUID_KEY = 'relaido_uuid';
12
12
 
@@ -68,9 +68,15 @@ function buildRequests(validBidRequests, bidderRequest) {
68
68
  media_type: mediaType,
69
69
  uuid: uuid,
70
70
  width: width,
71
- height: height
71
+ height: height,
72
+ pv: '$prebid.version$'
72
73
  };
73
74
 
75
+ const imuid = deepAccess(bidRequest, 'userId.imuid');
76
+ if (imuid) {
77
+ payload.imuid = imuid;
78
+ }
79
+
74
80
  // It may not be encoded, so add it at the end of the payload
75
81
  payload.ref = bidderRequest.refererInfo.referer;
76
82
 
@@ -42,10 +42,10 @@
42
42
  * @function?
43
43
  * @summary modify bid request data
44
44
  * @name RtdSubmodule#getBidRequestData
45
- * @param {SubmoduleConfig} config
46
- * @param {UserConsentData} userConsent
47
45
  * @param {Object} reqBidsConfigObj
48
46
  * @param {function} callback
47
+ * @param {SubmoduleConfig} config
48
+ * @param {UserConsentData} userConsent
49
49
  */
50
50
 
51
51
  /**
@@ -3,9 +3,8 @@ import { registerBidder } from '../src/adapters/bidderFactory.js';
3
3
  import { config } from '../src/config.js';
4
4
  import { BANNER, VIDEO } from '../src/mediaTypes.js';
5
5
  import { createEidsArray } from './userId/eids.js';
6
- import find from 'core-js-pure/features/array/find.js';
7
6
 
8
- const VERSION = '4.0.0';
7
+ const VERSION = '4.0.1';
9
8
  const BIDDER_CODE = 'sharethrough';
10
9
  const SUPPLY_ID = 'WYu2BXv1';
11
10
 
@@ -141,16 +140,16 @@ export const sharethroughAdapterSpec = {
141
140
  };
142
141
  }).filter(imp => !!imp);
143
142
 
144
- return {
145
- method: 'POST',
146
- url: STR_ENDPOINT,
147
- data: {
148
- ...req,
149
- imp: imps,
150
- },
151
- bidRequests,
152
- bidderRequest,
153
- };
143
+ return imps.map(impression => {
144
+ return {
145
+ method: 'POST',
146
+ url: STR_ENDPOINT,
147
+ data: {
148
+ ...req,
149
+ imp: [impression],
150
+ },
151
+ };
152
+ });
154
153
  },
155
154
 
156
155
  interpretResponse: ({ body }, req) => {
@@ -159,8 +158,6 @@ export const sharethroughAdapterSpec = {
159
158
  }
160
159
 
161
160
  return body.seatbid[0].bid.map(bid => {
162
- const request = matchRequest(bid.impid, req);
163
-
164
161
  const response = {
165
162
  requestId: bid.impid,
166
163
  width: +bid.w,
@@ -168,7 +165,7 @@ export const sharethroughAdapterSpec = {
168
165
  cpm: +bid.price,
169
166
  creativeId: bid.crid,
170
167
  dealId: bid.dealid || null,
171
- mediaType: request.mediaTypes && request.mediaTypes.video ? VIDEO : BANNER,
168
+ mediaType: req.data.imp[0].video ? VIDEO : BANNER,
172
169
  currency: body.cur || 'USD',
173
170
  netRevenue: true,
174
171
  ttl: 360,
@@ -270,10 +267,6 @@ function getProtocol() {
270
267
  return window.location.protocol;
271
268
  }
272
269
 
273
- function matchRequest(id, request) {
274
- return find(request.bidRequests, bid => bid.bidId === id);
275
- }
276
-
277
270
  // stub for ?? operator
278
271
  function nullish(input, def) {
279
272
  return input === null || input === undefined ? def : input;
@@ -0,0 +1,121 @@
1
+ import { getValue, parseSizesInput, getBidIdParameter } from '../src/utils.js';
2
+ import {
3
+ registerBidder
4
+ } from '../src/adapters/bidderFactory.js';
5
+ import {
6
+ ajax
7
+ } from '../src/ajax.js';
8
+ const BIDDER_CODE = 'slimcut';
9
+ const ENDPOINT_URL = 'https://sb.freeskreen.com/pbr';
10
+ export const spec = {
11
+ code: BIDDER_CODE,
12
+ aliases: ['scm'],
13
+ supportedMediaTypes: ['video', 'banner'],
14
+ /**
15
+ * Determines whether or not the given bid request is valid.
16
+ *
17
+ * @param {BidRequest} bid The bid params to validate.
18
+ * @return boolean True if this is a valid bid, and false otherwise.
19
+ */
20
+ isBidRequestValid: function(bid) {
21
+ let isValid = false;
22
+ if (typeof bid.params !== 'undefined' && !isNaN(parseInt(getValue(bid.params, 'placementId'))) && parseInt(getValue(bid.params, 'placementId')) > 0) {
23
+ isValid = true;
24
+ }
25
+ return isValid;
26
+ },
27
+ /**
28
+ * Make a server request from the list of BidRequests.
29
+ *
30
+ * @param {validBidRequests[]} an array of bids
31
+ * @return ServerRequest Info describing the request to the server.
32
+ */
33
+ buildRequests: function(validBidRequests, bidderRequest) {
34
+ const bids = validBidRequests.map(buildRequestObject);
35
+ const payload = {
36
+ referrer: getReferrerInfo(bidderRequest),
37
+ data: bids,
38
+ deviceWidth: screen.width
39
+ };
40
+ let gdpr = bidderRequest.gdprConsent;
41
+ if (bidderRequest && gdpr) {
42
+ let isCmp = (typeof gdpr.gdprApplies === 'boolean')
43
+ let isConsentString = (typeof gdpr.consentString === 'string')
44
+ payload.gdpr_iab = {
45
+ consent: isConsentString ? gdpr.consentString : '',
46
+ status: isCmp ? gdpr.gdprApplies : -1
47
+ };
48
+ }
49
+ const payloadString = JSON.stringify(payload);
50
+ return {
51
+ method: 'POST',
52
+ url: ENDPOINT_URL,
53
+ data: payloadString,
54
+ };
55
+ },
56
+ /**
57
+ * Unpack the response from the server into a list of bids.
58
+ *
59
+ * @param {*} serverResponse A successful response from the server.
60
+ * @return {Bid[]} An array of bids which were nested inside the server.
61
+ */
62
+ interpretResponse: function(serverResponse, request) {
63
+ const bidResponses = [];
64
+ serverResponse = serverResponse.body;
65
+ if (serverResponse.responses) {
66
+ serverResponse.responses.forEach(function(bid) {
67
+ const bidResponse = {
68
+ cpm: bid.cpm,
69
+ width: bid.width,
70
+ height: bid.height,
71
+ currency: bid.currency,
72
+ netRevenue: bid.netRevenue,
73
+ ttl: bid.ttl,
74
+ ad: bid.ad,
75
+ requestId: bid.requestId,
76
+ creativeId: bid.creativeId,
77
+ transactionId: bid.tranactionId,
78
+ winUrl: bid.winUrl,
79
+ meta: {
80
+ advertiserDomains: bid.adomain || []
81
+ }
82
+ };
83
+ bidResponses.push(bidResponse);
84
+ });
85
+ }
86
+ return bidResponses;
87
+ },
88
+ getUserSyncs: function(syncOptions, serverResponses) {
89
+ if (syncOptions.iframeEnabled) {
90
+ return [{
91
+ type: 'iframe',
92
+ url: 'https://sb.freeskreen.com/async_usersync.html'
93
+ }];
94
+ }
95
+ return [];
96
+ },
97
+ onBidWon: function(bid) {
98
+ ajax(bid.winUrl + bid.cpm, null);
99
+ }
100
+ }
101
+ function buildRequestObject(bid) {
102
+ const reqObj = {};
103
+ let placementId = getValue(bid.params, 'placementId');
104
+ reqObj.sizes = parseSizesInput(bid.sizes);
105
+ reqObj.bidId = getBidIdParameter('bidId', bid);
106
+ reqObj.bidderRequestId = getBidIdParameter('bidderRequestId', bid);
107
+ reqObj.placementId = parseInt(placementId);
108
+ reqObj.adUnitCode = getBidIdParameter('adUnitCode', bid);
109
+ reqObj.auctionId = getBidIdParameter('auctionId', bid);
110
+ reqObj.transactionId = getBidIdParameter('transactionId', bid);
111
+ return reqObj;
112
+ }
113
+ function getReferrerInfo(bidderRequest) {
114
+ let ref = window.location.href;
115
+ if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) {
116
+ ref = bidderRequest.refererInfo.referer;
117
+ }
118
+ return ref;
119
+ }
120
+
121
+ registerBidder(spec);
@@ -83,8 +83,15 @@ export const spec = {
83
83
  'lib_name': 'prebid',
84
84
  'lib_v': '$prebid.version$',
85
85
  'us': 0,
86
+
86
87
  };
87
88
 
89
+ const fpd = config.getConfig('ortb2');
90
+
91
+ if (fpd) {
92
+ payload.fpd = JSON.stringify(fpd);
93
+ }
94
+
88
95
  if (config.getConfig('userSync') && config.getConfig('userSync').syncsPerBidder) {
89
96
  payload.us = config.getConfig('userSync').syncsPerBidder;
90
97
  }
@@ -227,6 +227,7 @@ export const spec = {
227
227
  rv.ext[partner] = params;
228
228
  });
229
229
  }
230
+ rv.ext.gpid = deepAccess(bid, 'ortb2Imp.ext.data.pbadslot');
230
231
  return rv;
231
232
  });
232
233
  const gdprConsent = bidderRequest && bidderRequest.gdprConsent;
@@ -1,4 +1,4 @@
1
- import { logError, deepAccess, isArray, getBidIdParameter, getDNT, deepSetValue, isEmpty, _each, logMessage, logWarn, isBoolean, isNumber, isPlainObject } from '../src/utils.js';
1
+ import { logError, deepAccess, isArray, getBidIdParameter, getDNT, deepSetValue, isEmpty, _each, logMessage, logWarn, isBoolean, isNumber, isPlainObject, isFn } from '../src/utils.js';
2
2
  import { config } from '../src/config.js';
3
3
  import { Renderer } from '../src/Renderer.js';
4
4
  import { registerBidder } from '../src/adapters/bidderFactory.js';
@@ -163,6 +163,20 @@ export const spec = {
163
163
  }
164
164
  };
165
165
 
166
+ if (isFn(bid.getFloor)) {
167
+ let floorInfo = bid.getFloor({
168
+ currency: 'USD',
169
+ mediaType: 'video',
170
+ size: '*'
171
+ });
172
+
173
+ if (floorInfo.currency === 'USD') {
174
+ spotxReq.bidfloor = floorInfo.floor;
175
+ }
176
+ } else if (getBidIdParameter('price_floor', bid.params) != '') {
177
+ spotxReq.bidfloor = getBidIdParameter('price_floor', bid.params);
178
+ }
179
+
166
180
  if (getBidIdParameter('start_delay', bid.params) != '') {
167
181
  spotxReq.video.startdelay = 0 + Boolean(getBidIdParameter('start_delay', bid.params));
168
182
  }