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
@@ -4,19 +4,18 @@ import {
4
4
  getPrebidInternal, logError, isStr, isPlainObject, logWarn, generateUUID, bind, logMessage,
5
5
  triggerPixel, insertUserSyncIframe, deepAccess, mergeDeep, deepSetValue, cleanObj, parseSizesInput,
6
6
  getBidRequest, getDefinedParams, createTrackPixelHtml, pick, deepClone, uniques, flatten, isNumber,
7
- isEmpty, isArray, logInfo
7
+ isEmpty, isArray, logInfo, timestamp
8
8
  } from '../../src/utils.js';
9
9
  import CONSTANTS from '../../src/constants.json';
10
10
  import adapterManager from '../../src/adapterManager.js';
11
11
  import { config } from '../../src/config.js';
12
12
  import { VIDEO, NATIVE } from '../../src/mediaTypes.js';
13
- import { processNativeAdUnitParams } from '../../src/native.js';
14
13
  import { isValid } from '../../src/adapters/bidderFactory.js';
15
14
  import events from '../../src/events.js';
16
- import includes from 'core-js-pure/features/array/includes.js';
15
+ import includes from 'prebidjs-polyfill/includes.js';
17
16
  import { S2S_VENDORS } from './config.js';
18
17
  import { ajax } from '../../src/ajax.js';
19
- import find from 'core-js-pure/features/array/find.js';
18
+ import find from 'prebidjs-polyfill/find.js';
20
19
 
21
20
  const getConfig = config.getConfig;
22
21
 
@@ -54,6 +53,7 @@ let eidPermissions;
54
53
  * @typedef {Object} S2SDefaultConfig
55
54
  * @summary Base config properties for server to server header bidding
56
55
  * @property {string} [adapter='prebidServer'] adapter code to use for S2S
56
+ * @property {boolean} [allowUnknownBidderCodes=false] allow bids from bidders that were not explicitly requested
57
57
  * @property {boolean} [enabled=false] enables S2S bidding
58
58
  * @property {number} [timeout=1000] timeout for S2S bidders - should be lower than `pbjs.requestBids({timeout})`
59
59
  * @property {number} [syncTimeout=1000] timeout for cookie sync iframe / image rendering
@@ -81,6 +81,7 @@ const s2sDefaultConfig = {
81
81
  syncTimeout: 1000,
82
82
  maxBids: 1,
83
83
  adapter: 'prebidServer',
84
+ allowUnknownBidderCodes: false,
84
85
  adapterOptions: {},
85
86
  syncUrlModifier: {}
86
87
  };
@@ -433,7 +434,6 @@ let nativeEventTrackerMethodMap = {
433
434
  * Protocol spec for OpenRTB endpoint
434
435
  * e.g., https://<prebid-server-url>/v1/openrtb2/auction
435
436
  */
436
- let bidIdMap = {};
437
437
  let nativeAssetCache = {}; // store processed native params to preserve
438
438
 
439
439
  /**
@@ -491,8 +491,24 @@ export function resetWurlMap() {
491
491
  wurlMap = {};
492
492
  }
493
493
 
494
- const OPEN_RTB_PROTOCOL = {
495
- buildRequest(s2sBidRequest, bidRequests, adUnits, s2sConfig, requestedBidders) {
494
+ function ORTB2(s2sBidRequest, bidderRequests, adUnits, requestedBidders) {
495
+ this.s2sBidRequest = s2sBidRequest;
496
+ this.bidderRequests = bidderRequests;
497
+ this.adUnits = adUnits;
498
+ this.s2sConfig = s2sBidRequest.s2sConfig;
499
+ this.requestedBidders = requestedBidders;
500
+
501
+ this.bidIdMap = {};
502
+ this.adUnitsByImp = {};
503
+ this.impRequested = {};
504
+ this.auctionId = bidderRequests.map(br => br.auctionId).reduce((l, r) => (l == null || l === r) && r);
505
+ this.requestTimestamp = timestamp();
506
+ }
507
+
508
+ Object.assign(ORTB2.prototype, {
509
+ buildRequest() {
510
+ const {s2sBidRequest, bidderRequests: bidRequests, adUnits, s2sConfig, requestedBidders} = this;
511
+
496
512
  let imps = [];
497
513
  let aliases = {};
498
514
  const firstBidRequest = bidRequests[0];
@@ -510,8 +526,9 @@ const OPEN_RTB_PROTOCOL = {
510
526
  impressionId = `${adUnit.code}-${i}`;
511
527
  }
512
528
  impIds.add(impressionId);
529
+ this.adUnitsByImp[impressionId] = adUnit;
513
530
 
514
- const nativeParams = processNativeAdUnitParams(deepAccess(adUnit, 'mediaTypes.native'));
531
+ const nativeParams = adUnit.nativeParams;
515
532
  let nativeAssets;
516
533
  if (nativeParams) {
517
534
  try {
@@ -584,9 +601,7 @@ const OPEN_RTB_PROTOCOL = {
584
601
  const bannerParams = deepAccess(adUnit, 'mediaTypes.banner');
585
602
 
586
603
  adUnit.bids.forEach(bid => {
587
- // OpenRTB response contains imp.id and bidder name. These are
588
- // combined to create a unique key for each bid since an id isn't returned
589
- bidIdMap[`${impressionId}${bid.bidder}`] = bid.bid_id;
604
+ this.setBidRequestId(impressionId, bid.bidder, bid.bid_id);
590
605
  // check for and store valid aliases to add to the request
591
606
  if (adapterManager.aliasRegistry[bid.bidder]) {
592
607
  const bidder = adapterManager.bidderRegistry[bid.bidder];
@@ -854,10 +869,12 @@ const OPEN_RTB_PROTOCOL = {
854
869
 
855
870
  addBidderFirstPartyDataToRequest(request);
856
871
 
872
+ request.imp.forEach((imp) => this.impRequested[imp.id] = imp);
857
873
  return request;
858
874
  },
859
875
 
860
- interpretResponse(response, bidderRequests, s2sConfig) {
876
+ interpretResponse(response) {
877
+ const {bidderRequests, s2sConfig} = this;
861
878
  const bids = [];
862
879
 
863
880
  [['errors', 'serverErrors'], ['responsetimemillis', 'serverResponseTimeMs']]
@@ -867,22 +884,22 @@ const OPEN_RTB_PROTOCOL = {
867
884
  // a seatbid object contains a `bid` array and a `seat` string
868
885
  response.seatbid.forEach(seatbid => {
869
886
  (seatbid.bid || []).forEach(bid => {
870
- let bidRequest;
871
- let key = `${bid.impid}${seatbid.seat}`;
872
- if (bidIdMap[key]) {
873
- bidRequest = getBidRequest(
874
- bidIdMap[key],
875
- bidderRequests
876
- );
887
+ const bidRequest = this.getBidRequest(bid.impid, seatbid.seat);
888
+ if (bidRequest == null && !s2sConfig.allowUnknownBidderCodes) {
889
+ logWarn(`PBS adapter received bid from unknown bidder (${seatbid.seat}), but 's2sConfig.allowUnknownBidderCodes' is not set. Ignoring bid.`);
890
+ return;
877
891
  }
878
892
 
879
893
  const cpm = bid.price;
880
894
  const status = cpm !== 0 ? CONSTANTS.STATUS.GOOD : CONSTANTS.STATUS.NO_BID;
881
- let bidObject = createBid(status, bidRequest || {
895
+ let bidObject = createBid(status, {
882
896
  bidder: seatbid.seat,
883
- src: TYPE
897
+ src: TYPE,
898
+ bidId: bidRequest ? (bidRequest.bidId || bidRequest.bid_Id) : null,
899
+ transactionId: this.adUnitsByImp[bid.impid].transactionId,
900
+ auctionId: this.auctionId,
884
901
  });
885
-
902
+ bidObject.requestTimestamp = this.requestTimestamp;
886
903
  bidObject.cpm = cpm;
887
904
 
888
905
  // temporarily leaving attaching it to each bidResponse so no breaking change
@@ -900,7 +917,7 @@ const OPEN_RTB_PROTOCOL = {
900
917
 
901
918
  // store wurl by auctionId and adId so it can be accessed from the BID_WON event handler
902
919
  if (isStr(deepAccess(bid, 'ext.prebid.events.win'))) {
903
- addWurl(bidRequest.auctionId, bidObject.adId, deepAccess(bid, 'ext.prebid.events.win'));
920
+ addWurl(this.auctionId, bidObject.adId, deepAccess(bid, 'ext.prebid.events.win'));
904
921
  }
905
922
 
906
923
  let extPrebidTargeting = deepAccess(bid, 'ext.prebid.targeting');
@@ -921,9 +938,8 @@ const OPEN_RTB_PROTOCOL = {
921
938
 
922
939
  if (deepAccess(bid, 'ext.prebid.type') === VIDEO) {
923
940
  bidObject.mediaType = VIDEO;
924
- let sizes = bidRequest.sizes && bidRequest.sizes[0];
925
- bidObject.playerWidth = sizes[0];
926
- bidObject.playerHeight = sizes[1];
941
+ const impReq = this.impRequested[bid.impid];
942
+ [bidObject.playerWidth, bidObject.playerHeight] = [impReq.video.w, impReq.video.h];
927
943
 
928
944
  // try to get cache values from 'response.ext.prebid.cache.js'
929
945
  // else try 'bid.ext.prebid.targeting' as fallback
@@ -1006,7 +1022,6 @@ const OPEN_RTB_PROTOCOL = {
1006
1022
  bidObject.width = bid.w;
1007
1023
  bidObject.height = bid.h;
1008
1024
  if (bid.dealid) { bidObject.dealId = bid.dealid; }
1009
- bidObject.requestId = bidRequest.bidId || bidRequest.bid_Id;
1010
1025
  bidObject.creative_id = bid.crid;
1011
1026
  bidObject.creativeId = bid.crid;
1012
1027
  if (bid.burl) { bidObject.burl = bid.burl; }
@@ -1021,14 +1036,24 @@ const OPEN_RTB_PROTOCOL = {
1021
1036
  bidObject.ttl = (bid.exp) ? bid.exp : configTtl;
1022
1037
  bidObject.netRevenue = (bid.netRevenue) ? bid.netRevenue : DEFAULT_S2S_NETREVENUE;
1023
1038
 
1024
- bids.push({ adUnit: bidRequest.adUnitCode, bid: bidObject });
1039
+ bids.push({ adUnit: this.adUnitsByImp[bid.impid].code, bid: bidObject });
1025
1040
  });
1026
1041
  });
1027
1042
  }
1028
1043
 
1029
1044
  return bids;
1045
+ },
1046
+ setBidRequestId(impId, bidderCode, bidId) {
1047
+ this.bidIdMap[this.impBidderKey(impId, bidderCode)] = bidId;
1048
+ },
1049
+ getBidRequest(impId, bidderCode) {
1050
+ const key = this.impBidderKey(impId, bidderCode);
1051
+ return this.bidIdMap[key] && getBidRequest(this.bidIdMap[key], this.bidderRequests);
1052
+ },
1053
+ impBidderKey(impId, bidderCode) {
1054
+ return `${impId}${bidderCode}`;
1030
1055
  }
1031
- };
1056
+ });
1032
1057
 
1033
1058
  /**
1034
1059
  * BID_WON event to request the wurl
@@ -1099,7 +1124,8 @@ export function PrebidServer() {
1099
1124
  queueSync(syncBidders, gdprConsent, uspConsent, s2sBidRequest.s2sConfig);
1100
1125
  }
1101
1126
 
1102
- const request = OPEN_RTB_PROTOCOL.buildRequest(s2sBidRequest, bidRequests, validAdUnits, s2sBidRequest.s2sConfig, requestedBidders);
1127
+ const ortb2 = new ORTB2(s2sBidRequest, bidRequests, validAdUnits, requestedBidders);
1128
+ const request = ortb2.buildRequest();
1103
1129
  const requestJson = request && JSON.stringify(request);
1104
1130
  logInfo('BidRequest: ' + requestJson);
1105
1131
  const endpointUrl = getMatchingConsentUrl(s2sBidRequest.s2sConfig.endpoint, gdprConsent);
@@ -1107,7 +1133,7 @@ export function PrebidServer() {
1107
1133
  ajax(
1108
1134
  endpointUrl,
1109
1135
  {
1110
- success: response => handleResponse(response, requestedBidders, bidRequests, addBidResponse, done, s2sBidRequest.s2sConfig),
1136
+ success: response => handleResponse(response, ortb2, addBidResponse, done),
1111
1137
  error: done
1112
1138
  },
1113
1139
  requestJson,
@@ -1120,27 +1146,23 @@ export function PrebidServer() {
1120
1146
  };
1121
1147
 
1122
1148
  /* Notify Prebid of bid responses so bids can get in the auction */
1123
- function handleResponse(response, requestedBidders, bidderRequests, addBidResponse, done, s2sConfig) {
1149
+ function handleResponse(response, ortb2, addBidResponse, done) {
1124
1150
  let result;
1125
1151
  let bids = [];
1126
- let { gdprConsent, uspConsent } = getConsentData(bidderRequests);
1152
+ let { gdprConsent, uspConsent } = getConsentData(ortb2.bidderRequests);
1127
1153
 
1128
1154
  try {
1129
1155
  result = JSON.parse(response);
1130
1156
 
1131
- bids = OPEN_RTB_PROTOCOL.interpretResponse(
1132
- result,
1133
- bidderRequests,
1134
- s2sConfig
1135
- );
1157
+ bids = ortb2.interpretResponse(result);
1136
1158
 
1137
1159
  bids.forEach(({adUnit, bid}) => {
1138
- if (isValid(adUnit, bid, bidderRequests)) {
1160
+ if (isValid(adUnit, bid)) {
1139
1161
  addBidResponse(adUnit, bid);
1140
1162
  }
1141
1163
  });
1142
1164
 
1143
- bidderRequests.forEach(bidderRequest => events.emit(CONSTANTS.EVENTS.BIDDER_DONE, bidderRequest));
1165
+ ortb2.bidderRequests.forEach(bidderRequest => events.emit(CONSTANTS.EVENTS.BIDDER_DONE, bidderRequest));
1144
1166
  } catch (error) {
1145
1167
  logError(error);
1146
1168
  }
@@ -1150,7 +1172,7 @@ export function PrebidServer() {
1150
1172
  }
1151
1173
 
1152
1174
  done();
1153
- doClientSideSyncs(requestedBidders, gdprConsent, uspConsent);
1175
+ doClientSideSyncs(ortb2.requestedBidders, gdprConsent, uspConsent);
1154
1176
  }
1155
1177
 
1156
1178
  // Listen for bid won to call wurl
@@ -6,8 +6,10 @@ import events from '../src/events.js';
6
6
  import CONSTANTS from '../src/constants.json';
7
7
  import { getHook } from '../src/hook.js';
8
8
  import { createBid } from '../src/bidfactory.js';
9
- import find from 'core-js-pure/features/array/find.js';
9
+ import find from 'prebidjs-polyfill/find.js';
10
10
  import { getRefererInfo } from '../src/refererDetection.js';
11
+ import {auctionManager} from '../src/auctionManager.js';
12
+ import {bidderSettings} from '../src/bidderSettings.js';
11
13
 
12
14
  /**
13
15
  * @summary This Module is intended to provide users with the ability to dynamically set and enforce price floors on a per auction basis.
@@ -65,9 +67,10 @@ function getHostNameFromReferer(referer) {
65
67
  }
66
68
 
67
69
  // First look into bidRequest!
68
- function getGptSlotFromBidRequest(bidRequest) {
69
- const isGam = deepAccess(bidRequest, 'ortb2Imp.ext.data.adserver.name') === 'gam';
70
- return isGam && bidRequest.ortb2Imp.ext.data.adserver.adslot;
70
+ function getGptSlotFromAdUnit(transactionId, {index = auctionManager.index} = {}) {
71
+ const adUnit = index.getAdUnit({transactionId});
72
+ const isGam = deepAccess(adUnit, 'ortb2Imp.ext.data.adserver.name') === 'gam';
73
+ return isGam && adUnit.ortb2Imp.ext.data.adserver.adslot;
71
74
  }
72
75
 
73
76
  /**
@@ -76,9 +79,9 @@ function getGptSlotFromBidRequest(bidRequest) {
76
79
  export let fieldMatchingFunctions = {
77
80
  'size': (bidRequest, bidResponse) => parseGPTSingleSizeArray(bidResponse.size) || '*',
78
81
  'mediaType': (bidRequest, bidResponse) => bidResponse.mediaType || 'banner',
79
- 'gptSlot': (bidRequest, bidResponse) => getGptSlotFromBidRequest(bidRequest) || getGptSlotInfoForAdUnitCode(bidRequest.adUnitCode).gptSlot,
82
+ 'gptSlot': (bidRequest, bidResponse) => getGptSlotFromAdUnit((bidRequest || bidResponse).transactionId) || getGptSlotInfoForAdUnitCode((bidRequest || bidResponse).adUnitCode).gptSlot,
80
83
  'domain': (bidRequest, bidResponse) => referrerHostname || getHostNameFromReferer(getRefererInfo().referer),
81
- 'adUnitCode': (bidRequest, bidResponse) => bidRequest.adUnitCode
84
+ 'adUnitCode': (bidRequest, bidResponse) => (bidRequest || bidResponse).adUnitCode
82
85
  }
83
86
 
84
87
  /**
@@ -147,7 +150,7 @@ function generatePossibleEnumerations(arrayOfFields, delimiter) {
147
150
  * @summary If a the input bidder has a registered cpmadjustment it returns the input CPM after being adjusted
148
151
  */
149
152
  export function getBiddersCpmAdjustment(bidderName, inputCpm, bid = {}) {
150
- const adjustmentFunction = deepAccess(getGlobal(), `bidderSettings.${bidderName}.bidCpmAdjustment`) || deepAccess(getGlobal(), 'bidderSettings.standard.bidCpmAdjustment');
153
+ const adjustmentFunction = bidderSettings.get(bidderName, 'bidCpmAdjustment');
151
154
  if (adjustmentFunction) {
152
155
  return parseFloat(adjustmentFunction(inputCpm, {...bid, cpm: inputCpm}));
153
156
  }
@@ -664,15 +667,13 @@ function shouldFloorBid(floorData, floorInfo, bid) {
664
667
  * And if the rule we find determines a bid should be floored we will do so.
665
668
  */
666
669
  export function addBidResponseHook(fn, adUnitCode, bid) {
667
- let floorData = _floorDataForAuction[this.bidderRequest.auctionId];
668
- // if no floor data or associated bidRequest then bail
669
- const matchingBidRequest = find(this.bidderRequest.bids, bidRequest => bidRequest.bidId && bidRequest.bidId === bid.requestId);
670
- if (!floorData || !bid || floorData.skipped || !matchingBidRequest) {
670
+ let floorData = _floorDataForAuction[bid.auctionId];
671
+ // if no floor data then bail
672
+ if (!floorData || !bid || floorData.skipped) {
671
673
  return fn.call(this, adUnitCode, bid);
672
674
  }
673
-
674
675
  // get the matching rule
675
- let floorInfo = getFirstMatchingFloor(floorData.data, {...matchingBidRequest}, {...bid, size: [bid.width, bid.height]});
676
+ let floorInfo = getFirstMatchingFloor(floorData.data, null, {...bid, size: [bid.width, bid.height]});
676
677
 
677
678
  if (!floorInfo.matchingFloor) {
678
679
  logWarn(`${MODULE_NAME}: unable to determine a matching price floor for bidResponse`, bid);
@@ -706,7 +707,7 @@ export function addBidResponseHook(fn, adUnitCode, bid) {
706
707
  if (shouldFloorBid(floorData, floorInfo, bid)) {
707
708
  // bid fails floor -> throw it out
708
709
  // create basic bid no-bid with necessary data fro analytics adapters
709
- let flooredBid = createBid(CONSTANTS.STATUS.NO_BID, matchingBidRequest);
710
+ let flooredBid = createBid(CONSTANTS.STATUS.NO_BID, bid.getIdentifiers());
710
711
  Object.assign(flooredBid, pick(bid, [
711
712
  'floorData',
712
713
  'width',
@@ -1080,7 +1080,7 @@ export const spec = {
1080
1080
  bid = deepClone(originalBid);
1081
1081
  bid.params.adSlot = bid.params.adSlot || '';
1082
1082
  _parseAdSlot(bid);
1083
- if (bid.params.hasOwnProperty('video')) {
1083
+ if ((bid.mediaTypes && bid.mediaTypes.hasOwnProperty('video')) || bid.params.hasOwnProperty('video')) {
1084
1084
  // Nothing to do
1085
1085
  } else {
1086
1086
  // If we have a native mediaType configured alongside banner, its ok if the banner size is not set in width and height
@@ -3,7 +3,7 @@ import { ajax } from '../src/ajax.js';
3
3
  import { config } from '../src/config.js';
4
4
  import { getStorageManager } from '../src/storageManager.js';
5
5
  import { registerBidder } from '../src/adapters/bidderFactory.js';
6
- import find from 'core-js-pure/features/array/find.js';
6
+ import find from 'prebidjs-polyfill/find.js';
7
7
 
8
8
  const BIDDER_CODE = 'quantcast';
9
9
  const DEFAULT_BID_FLOOR = 0.0000000001;
@@ -19,7 +19,7 @@
19
19
  import { submodule } from '../src/hook.js';
20
20
  import { ajaxBuilder } from '../src/ajax.js';
21
21
  import { isGptPubadsDefined, timestamp, generateUUID, logError } from '../src/utils.js';
22
- import find from 'core-js-pure/features/array/find.js';
22
+ import find from 'prebidjs-polyfill/find.js';
23
23
 
24
24
  /** @type {Object} */
25
25
  const MessageType = {
@@ -59,10 +59,15 @@ export const spec = {
59
59
  REFERER = (typeof bidderRequest.refererInfo.referer != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.referer) : null)
60
60
 
61
61
  payload.gdpr_consent = '';
62
- payload.gdpr = bidderRequest.gdprConsent.gdprApplies;
62
+ payload.gdpr = false;
63
63
 
64
64
  if (bidderRequest && bidderRequest.gdprConsent) {
65
- payload.gdpr_consent = bidderRequest.gdprConsent.consentString;
65
+ if (typeof bidderRequest.gdprConsent.gdprApplies != 'undefined') {
66
+ payload.gdpr = bidderRequest.gdprConsent.gdprApplies;
67
+ }
68
+ if (typeof bidderRequest.gdprConsent.consentString != 'undefined') {
69
+ payload.gdpr_consent = bidderRequest.gdprConsent.consentString;
70
+ }
66
71
  }
67
72
 
68
73
  var payloadString = JSON.stringify(payload);
@@ -1,4 +1,4 @@
1
- import { logWarn, isArray, isFn, deepAccess, isEmpty, contains, timestamp, getBidIdParameter } from '../src/utils.js';
1
+ import { logWarn, logInfo, isArray, isFn, deepAccess, isEmpty, contains, timestamp, getBidIdParameter, triggerPixel } from '../src/utils.js';
2
2
  import {registerBidder} from '../src/adapters/bidderFactory.js';
3
3
  import {VIDEO} from '../src/mediaTypes.js';
4
4
  import {config} from '../src/config.js';
@@ -23,7 +23,7 @@ export const spec = {
23
23
  gvlid: 1043,
24
24
  version: ADAPTER_VERSION,
25
25
  supportedMediaTypes: SUPPORTED_AD_TYPES,
26
- isBidRequestValid: function(bidRequest) {
26
+ isBidRequestValid: function (bidRequest) {
27
27
  if (!bidRequest.params) {
28
28
  logWarn('no params have been set to Rise adapter');
29
29
  return false;
@@ -49,7 +49,7 @@ export const spec = {
49
49
 
50
50
  return requests;
51
51
  },
52
- interpretResponse: function({body}) {
52
+ interpretResponse: function ({body}) {
53
53
  const bidResponses = [];
54
54
 
55
55
  const bidResponse = {
@@ -62,6 +62,7 @@ export const spec = {
62
62
  netRevenue: body.netRevenue,
63
63
  ttl: body.ttl || TTL,
64
64
  vastXml: body.vastXml,
65
+ nurl: body.nurl,
65
66
  mediaType: VIDEO
66
67
  };
67
68
 
@@ -73,7 +74,7 @@ export const spec = {
73
74
 
74
75
  return bidResponses;
75
76
  },
76
- getUserSyncs: function(syncOptions, serverResponses) {
77
+ getUserSyncs: function (syncOptions, serverResponses) {
77
78
  const syncs = [];
78
79
  for (const response of serverResponses) {
79
80
  if (syncOptions.iframeEnabled && response.body.userSyncURL) {
@@ -93,8 +94,18 @@ export const spec = {
93
94
  }
94
95
  }
95
96
  return syncs;
96
- }
97
- };
97
+ },
98
+ onBidWon: function (bid) {
99
+ if (bid == null) {
100
+ return;
101
+ }
102
+
103
+ logInfo('onBidWon:', bid);
104
+ if (bid.hasOwnProperty('nurl') && bid.nurl.length > 0) {
105
+ triggerPixel(bid.nurl);
106
+ }
107
+ },
108
+ }
98
109
 
99
110
  registerBidder(spec);
100
111
 
@@ -2,7 +2,7 @@ import { deepClone, getParameterByName, logInfo, logError } from '../src/utils.j
2
2
  import adapter from '../src/AnalyticsAdapter.js';
3
3
  import CONSTANTS from '../src/constants.json';
4
4
  import adapterManager from '../src/adapterManager.js';
5
- import includes from 'core-js-pure/features/array/includes.js';
5
+ import includes from 'prebidjs-polyfill/includes.js';
6
6
  import {ajaxBuilder} from '../src/ajax.js';
7
7
  import { getStorageManager } from '../src/storageManager.js';
8
8
 
@@ -1,7 +1,7 @@
1
1
  import { isArray, deepAccess, getOrigin, logError } from '../src/utils.js';
2
2
  import { BANNER, NATIVE } from '../src/mediaTypes.js';
3
3
  import { registerBidder } from '../src/adapters/bidderFactory.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 BIDDER_CODE = 'rtbhouse';
7
7
  const REGIONS = ['prebid-eu', 'prebid-us', 'prebid-asia'];
@@ -152,11 +152,11 @@
152
152
 
153
153
  import {config} from '../../src/config.js';
154
154
  import {module} from '../../src/hook.js';
155
- import {logError, logWarn} from '../../src/utils.js';
155
+ import {logError, logInfo, logWarn} from '../../src/utils.js';
156
156
  import events from '../../src/events.js';
157
157
  import CONSTANTS from '../../src/constants.json';
158
158
  import {gdprDataHandler, uspDataHandler} from '../../src/adapterManager.js';
159
- import find from 'core-js-pure/features/array/find.js';
159
+ import find from 'prebidjs-polyfill/find.js';
160
160
  import {getGlobal} from '../../src/prebidGlobal.js';
161
161
 
162
162
  /** @type {string} */
@@ -256,6 +256,7 @@ function initSubModules() {
256
256
  }
257
257
  });
258
258
  subModules = subModulesByOrder;
259
+ logInfo(`Real time data module enabled, using submodules: ${subModules.map((m) => m.name).join(', ')}`);
259
260
  }
260
261
 
261
262
  /**
@@ -290,18 +291,12 @@ export function setBidRequestsData(fn, reqBidsConfigObj) {
290
291
  return exitHook();
291
292
  }
292
293
 
293
- if (shouldDelayAuction) {
294
- waitTimeout = setTimeout(exitHook, _moduleConfig.auctionDelay);
295
- }
294
+ waitTimeout = setTimeout(exitHook, shouldDelayAuction ? _moduleConfig.auctionDelay : 0);
296
295
 
297
296
  relevantSubModules.forEach(sm => {
298
297
  sm.getBidRequestData(reqBidsConfigObj, onGetBidRequestDataCallback.bind(sm), sm.config, _userConsent)
299
298
  });
300
299
 
301
- if (!shouldDelayAuction) {
302
- return exitHook();
303
- }
304
-
305
300
  function onGetBidRequestDataCallback() {
306
301
  if (isDone) {
307
302
  return;
@@ -309,12 +304,15 @@ export function setBidRequestsData(fn, reqBidsConfigObj) {
309
304
  if (this.config && this.config.waitForIt) {
310
305
  callbacksExpected--;
311
306
  }
312
- if (callbacksExpected <= 0) {
313
- return exitHook();
307
+ if (callbacksExpected === 0) {
308
+ setTimeout(exitHook, 0);
314
309
  }
315
310
  }
316
311
 
317
312
  function exitHook() {
313
+ if (isDone) {
314
+ return;
315
+ }
318
316
  isDone = true;
319
317
  clearTimeout(waitTimeout);
320
318
  fn.call(this, reqBidsConfigObj);
@@ -234,6 +234,9 @@ function sendMessage(auctionId, bidWonId, trigger) {
234
234
 
235
235
  let auction = {
236
236
  clientTimeoutMillis: auctionCache.timeout,
237
+ auctionStart: auctionCache.timestamp,
238
+ auctionEnd: auctionCache.endTs,
239
+ bidderOrder: auctionCache.bidderOrder,
237
240
  samplingFactor,
238
241
  accountId,
239
242
  adUnits: Object.keys(adUnitMap).map(i => adUnitMap[i]),
@@ -384,8 +387,9 @@ export function parseBidResponse(bid, previousBidResponse, auctionFloorData) {
384
387
  'floorRuleValue', () => deepAccess(bid, 'floorData.floorRuleValue'),
385
388
  'floorRule', () => debugTurnedOn() ? deepAccess(bid, 'floorData.floorRule') : undefined,
386
389
  'adomains', () => {
387
- let adomains = deepAccess(bid, 'meta.advertiserDomains');
388
- return Array.isArray(adomains) && adomains.length > 0 ? adomains.slice(0, 10) : undefined
390
+ const adomains = deepAccess(bid, 'meta.advertiserDomains');
391
+ const validAdomains = Array.isArray(adomains) && adomains.filter(domain => typeof domain === 'string');
392
+ return validAdomains && validAdomains.length > 0 ? validAdomains.slice(0, 10) : undefined
389
393
  }
390
394
  ]);
391
395
  }
@@ -582,6 +586,7 @@ let rubiconAdapter = Object.assign({}, baseAdapter, {
582
586
  cacheEntry.bids = {};
583
587
  cacheEntry.bidsWon = {};
584
588
  cacheEntry.gamHasRendered = {};
589
+ cacheEntry.bidderOrder = [];
585
590
  cacheEntry.referrer = deepAccess(args, 'bidderRequests.0.refererInfo.referer');
586
591
  const floorData = deepAccess(args, 'bidderRequests.0.bids.0.floorData');
587
592
  if (floorData) {
@@ -607,6 +612,7 @@ let rubiconAdapter = Object.assign({}, baseAdapter, {
607
612
  }
608
613
  break;
609
614
  case BID_REQUESTED:
615
+ cache.auctions[args.auctionId].bidderOrder.push(args.bidderCode);
610
616
  Object.assign(cache.auctions[args.auctionId].bids, args.bids.reduce((memo, bid) => {
611
617
  // mark adUnits we expect bidWon events for
612
618
  cache.auctions[args.auctionId].bidsWon[bid.adUnitCode] = false;
@@ -2,7 +2,7 @@ import { mergeDeep, _each, logError, deepAccess, deepSetValue, isStr, isNumber,
2
2
  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
- import find from 'core-js-pure/features/array/find.js';
5
+ import find from 'prebidjs-polyfill/find.js';
6
6
  import { Renderer } from '../src/Renderer.js';
7
7
  import { getGlobal } from '../src/prebidGlobal.js';
8
8