prebid.js 9.46.0 → 9.48.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 (325) hide show
  1. package/.github/codeql/queries/jsonRequestContentType.ql +18 -0
  2. package/AGENTS.md +42 -0
  3. package/CLAUDE.md +1 -0
  4. package/babelConfig.js +1 -1
  5. package/dist/33acrossAnalyticsAdapter.js +1 -1
  6. package/dist/33acrossBidAdapter.js +1 -1
  7. package/dist/33acrossIdSystem.js +1 -1
  8. package/dist/BTBidAdapter.js +1 -1
  9. package/dist/adagioAnalyticsAdapter.js +1 -1
  10. package/dist/adagioBidAdapter.js +1 -1
  11. package/dist/adagioUtils.js +1 -1
  12. package/dist/addefendBidAdapter.js +1 -1
  13. package/dist/adgenerationBidAdapter.js +1 -1
  14. package/dist/adlooxRtdProvider.js +1 -1
  15. package/dist/adqueryBidAdapter.js +1 -1
  16. package/dist/adrelevantisBidAdapter.js +1 -1
  17. package/dist/adstirBidAdapter.js +1 -1
  18. package/dist/adtrgtmeBidAdapter.js +1 -1
  19. package/dist/advangUtils.js +1 -1
  20. package/dist/adverxoBidAdapter.js +1 -1
  21. package/dist/adxcgAnalyticsAdapter.js +1 -1
  22. package/dist/adxcgBidAdapter.js +1 -1
  23. package/dist/adyoulikeBidAdapter.js +1 -1
  24. package/dist/agmaAnalyticsAdapter.js +1 -1
  25. package/dist/ajaBidAdapter.js +1 -1
  26. package/dist/amxBidAdapter.js +1 -1
  27. package/dist/amxIdSystem.js +1 -1
  28. package/dist/aniviewBidAdapter.js +1 -1
  29. package/dist/appierAnalyticsAdapter.js +1 -1
  30. package/dist/appnexusBidAdapter.js +1 -1
  31. package/dist/asoBidAdapter.js +1 -1
  32. package/dist/axonixBidAdapter.js +1 -1
  33. package/dist/beopBidAdapter.js +1 -1
  34. package/dist/bidglassBidAdapter.js +1 -1
  35. package/dist/big-richmediaBidAdapter.js +1 -1
  36. package/dist/bitmediaBidAdapter.js +1 -1
  37. package/dist/blueBidAdapter.js +1 -1
  38. package/dist/blueUtils.js +1 -0
  39. package/dist/bmsBidAdapter.js +1 -1
  40. package/dist/bridBidAdapter.js +1 -1
  41. package/dist/bridgeuppBidAdapter.js +1 -1
  42. package/dist/bridgewellBidAdapter.js +1 -1
  43. package/dist/brightMountainMediaBidAdapter.js +1 -1
  44. package/dist/browsiUtils.js +1 -1
  45. package/dist/carodaBidAdapter.js +1 -1
  46. package/dist/chtnwBidAdapter.js +1 -1
  47. package/dist/chunk-core.js +1 -1
  48. package/dist/concertBidAdapter.js +1 -1
  49. package/dist/connectadBidAdapter.js +1 -1
  50. package/dist/consumableBidAdapter.js +1 -1
  51. package/dist/contxtfulBidAdapter.js +1 -1
  52. package/dist/conversantAnalyticsAdapter.js +1 -1
  53. package/dist/conversantBidAdapter.js +1 -1
  54. package/dist/craftBidAdapter.js +1 -1
  55. package/dist/criteoBidAdapter.js +1 -1
  56. package/dist/cwireBidAdapter.js +1 -1
  57. package/dist/czechAdIdSystem.js +1 -1
  58. package/dist/dailymotionBidAdapter.js +1 -1
  59. package/dist/debugging-standalone.js +1 -1
  60. package/dist/dependencies.json +16 -2
  61. package/dist/dspxBidAdapter.js +1 -1
  62. package/dist/dxkultureBidAdapter.js +1 -1
  63. package/dist/dynamicAdBoostRtdProvider.js +1 -1
  64. package/dist/eplanningBidAdapter.js +1 -1
  65. package/dist/eskimiBidAdapter.js +1 -1
  66. package/dist/euidIdSystem.js +1 -1
  67. package/dist/exadsBidAdapter.js +1 -1
  68. package/dist/excoBidAdapter.js +1 -1
  69. package/dist/feedadBidAdapter.js +1 -1
  70. package/dist/finativeBidAdapter.js +1 -1
  71. package/dist/freewheel-sspBidAdapter.js +1 -1
  72. package/dist/gmosspBidAdapter.js +1 -1
  73. package/dist/gptUtils.js +1 -1
  74. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  75. package/dist/greenbidsBidAdapter.js +1 -1
  76. package/dist/greenbidsRtdProvider.js +1 -1
  77. package/dist/gridBidAdapter.js +1 -1
  78. package/dist/gumgumBidAdapter.js +1 -1
  79. package/dist/h12mediaBidAdapter.js +1 -1
  80. package/dist/hypelabBidAdapter.js +1 -1
  81. package/dist/id5AnalyticsAdapter.js +1 -1
  82. package/dist/id5IdSystem.js +1 -1
  83. package/dist/imdsBidAdapter.js +1 -1
  84. package/dist/improvedigitalBidAdapter.js +1 -1
  85. package/dist/inmobiBidAdapter.js +1 -1
  86. package/dist/insticatorBidAdapter.js +1 -1
  87. package/dist/intentIqAnalyticsAdapter.js +1 -1
  88. package/dist/ixBidAdapter.js +1 -1
  89. package/dist/jixieBidAdapter.js +1 -1
  90. package/dist/justpremiumBidAdapter.js +1 -1
  91. package/dist/kargoBidAdapter.js +1 -1
  92. package/dist/kimberliteBidAdapter.js +1 -1
  93. package/dist/konduitAnalyticsAdapter.js +1 -1
  94. package/dist/kueezBidAdapter.js +1 -1
  95. package/dist/lassoBidAdapter.js +1 -1
  96. package/dist/lifestreetBidAdapter.js +1 -1
  97. package/dist/liveIntentId.js +1 -1
  98. package/dist/logicadBidAdapter.js +1 -1
  99. package/dist/loglyliftBidAdapter.js +1 -1
  100. package/dist/luceadBidAdapter.js +1 -1
  101. package/dist/luponmediaBidAdapter.js +1 -1
  102. package/dist/mabidderBidAdapter.js +1 -1
  103. package/dist/madsenseBidAdapter.js +1 -1
  104. package/dist/magniteAnalyticsAdapter.js +1 -1
  105. package/dist/malltvAnalyticsAdapter.js +1 -1
  106. package/dist/marsmediaBidAdapter.js +1 -1
  107. package/dist/mediafuseBidAdapter.js +1 -1
  108. package/dist/medianetBidAdapter.js +1 -1
  109. package/dist/medianetUtils.js +1 -1
  110. package/dist/mediasquareBidAdapter.js +1 -1
  111. package/dist/mgidBidAdapter.js +1 -1
  112. package/dist/missenaBidAdapter.js +1 -1
  113. package/dist/mobilefuseBidAdapter.js +1 -1
  114. package/dist/nativeryBidAdapter.js +1 -0
  115. package/dist/nextMillenniumBidAdapter.js +1 -1
  116. package/dist/nexx360Utils.js +1 -1
  117. package/dist/nobidAnalyticsAdapter.js +1 -1
  118. package/dist/nobidBidAdapter.js +1 -1
  119. package/dist/nodalsAiRtdProvider.js +1 -1
  120. package/dist/not-for-prod/prebid.js +187 -184
  121. package/dist/oguryBidAdapter.js +1 -1
  122. package/dist/onetagBidAdapter.js +1 -1
  123. package/dist/ooloAnalyticsAdapter.js +1 -1
  124. package/dist/openxBidAdapter.js +1 -1
  125. package/dist/optidigitalBidAdapter.js +1 -1
  126. package/dist/orbidderBidAdapter.js +1 -1
  127. package/dist/outbrainBidAdapter.js +1 -1
  128. package/dist/pinkLionBidAdapter.js +1 -0
  129. package/dist/pixfutureBidAdapter.js +1 -1
  130. package/dist/prebidServerBidAdapter.js +1 -1
  131. package/dist/priceFloors.js +1 -1
  132. package/dist/publinkIdSystem.js +1 -1
  133. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  134. package/dist/pubmaticBidAdapter.js +1 -1
  135. package/dist/pubmaticRtdProvider.js +1 -1
  136. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  137. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  138. package/dist/pubxaiRtdProvider.js +1 -1
  139. package/dist/pxyzBidAdapter.js +1 -1
  140. package/dist/quantcastBidAdapter.js +1 -1
  141. package/dist/readpeakBidAdapter.js +1 -1
  142. package/dist/relaidoBidAdapter.js +1 -1
  143. package/dist/retailspotBidAdapter.js +1 -1
  144. package/dist/rhythmoneBidAdapter.js +1 -1
  145. package/dist/riseUtils.js +1 -1
  146. package/dist/rtbhouseBidAdapter.js +1 -1
  147. package/dist/rubiconBidAdapter.js +1 -1
  148. package/dist/seedingAllianceBidAdapter.js +1 -1
  149. package/dist/seedtagBidAdapter.js +1 -1
  150. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  151. package/dist/sharethroughBidAdapter.js +1 -1
  152. package/dist/showheroes-bsBidAdapter.js +1 -1
  153. package/dist/smaatoBidAdapter.js +1 -1
  154. package/dist/smartadserverBidAdapter.js +1 -1
  155. package/dist/smartxBidAdapter.js +1 -1
  156. package/dist/smilewantedBidAdapter.js +1 -1
  157. package/dist/snigelBidAdapter.js +1 -1
  158. package/dist/sonobiBidAdapter.js +1 -1
  159. package/dist/sovrnBidAdapter.js +1 -1
  160. package/dist/sparteoBidAdapter.js +1 -1
  161. package/dist/sspBCBidAdapter.js +1 -1
  162. package/dist/stroeerCoreBidAdapter.js +1 -1
  163. package/dist/stvBidAdapter.js +1 -1
  164. package/dist/sublimeBidAdapter.js +1 -1
  165. package/dist/taboolaBidAdapter.js +1 -1
  166. package/dist/tappxBidAdapter.js +1 -1
  167. package/dist/targetVideoBidAdapter.js +1 -1
  168. package/dist/teadsBidAdapter.js +1 -1
  169. package/dist/terceptAnalyticsAdapter.js +1 -1
  170. package/dist/themoneytizerBidAdapter.js +1 -1
  171. package/dist/trionBidAdapter.js +1 -1
  172. package/dist/tripleliftBidAdapter.js +1 -1
  173. package/dist/ttdBidAdapter.js +1 -1
  174. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  175. package/dist/uid2IdSystem.js +1 -1
  176. package/dist/underdogmediaBidAdapter.js +1 -1
  177. package/dist/undertoneBidAdapter.js +1 -1
  178. package/dist/unifiedIdSystem.js +1 -1
  179. package/dist/unrulyBidAdapter.js +1 -1
  180. package/dist/userId.js +1 -1
  181. package/dist/vidazooUtils.js +1 -1
  182. package/dist/videobyteBidAdapter.js +1 -1
  183. package/dist/visxBidAdapter.js +1 -1
  184. package/dist/vuukleBidAdapter.js +1 -1
  185. package/dist/weboramaRtdProvider.js +1 -1
  186. package/dist/widespaceBidAdapter.js +1 -1
  187. package/dist/winrBidAdapter.js +1 -1
  188. package/dist/xeUtils.js +1 -1
  189. package/dist/yahooAdsBidAdapter.js +1 -1
  190. package/dist/yandexBidAdapter.js +1 -1
  191. package/dist/yieldmoBidAdapter.js +1 -1
  192. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  193. package/eslint.config.js +1 -3
  194. package/gulpHelpers.js +3 -6
  195. package/gulpfile.js +25 -24
  196. package/karma.conf.maker.js +1 -3
  197. package/libraries/advangUtils/index.js +3 -4
  198. package/libraries/blueUtils/bidderUtils.js +113 -0
  199. package/libraries/browsiUtils/browsiUtils.js +1 -2
  200. package/libraries/gptUtils/gptUtils.js +1 -2
  201. package/libraries/liveIntentId/shared.js +4 -0
  202. package/libraries/xeUtils/bidderUtils.js +3 -4
  203. package/modules/adagioBidAdapter.js +1 -2
  204. package/modules/addefendBidAdapter.md +1 -1
  205. package/modules/adtrgtmeBidAdapter.js +6 -8
  206. package/modules/aduptechBidAdapter.md +1 -1
  207. package/modules/adverxoBidAdapter.js +3 -3
  208. package/modules/blueBidAdapter.js +24 -104
  209. package/modules/bmsBidAdapter.js +25 -105
  210. package/modules/concertBidAdapter.md +1 -1
  211. package/modules/contxtfulBidAdapter.js +56 -10
  212. package/modules/conversantBidAdapter.js +0 -58
  213. package/modules/cwireBidAdapter.js +8 -0
  214. package/modules/czechAdIdSystem.js +13 -3
  215. package/modules/dynamicAdBoostRtdProvider.js +16 -33
  216. package/modules/dynamicAdBoostRtdProvider.md +1 -6
  217. package/modules/ixBidAdapter.js +2 -3
  218. package/modules/luponmediaBidAdapter.js +117 -522
  219. package/modules/luponmediaBidAdapter.md +2 -3
  220. package/modules/mediasquareBidAdapter.js +14 -20
  221. package/modules/microadBidAdapter.js +0 -1
  222. package/modules/nativeryBidAdapter.js +135 -0
  223. package/modules/nativeryBidAdapter.md +95 -0
  224. package/modules/nativoBidAdapter.js +3 -3
  225. package/modules/onetagBidAdapter.js +0 -1
  226. package/modules/pinkLionBidAdapter.js +17 -0
  227. package/modules/pinkLionBidAdapter.md +79 -0
  228. package/modules/prebidServerBidAdapter/ortbConverter.js +1 -1
  229. package/modules/priceFloors.js +2 -2
  230. package/modules/pubmaticBidAdapter.js +4 -1
  231. package/modules/qortexRtdProvider.md +1 -1
  232. package/modules/reconciliationRtdProvider.md +4 -4
  233. package/modules/rtbhouseBidAdapter.js +4 -83
  234. package/modules/rubiconBidAdapter.js +1 -1
  235. package/modules/sspBCBidAdapter.js +1 -1
  236. package/modules/stroeerCoreBidAdapter.js +3 -3
  237. package/modules/stvBidAdapter.js +19 -14
  238. package/modules/topicsFpdModule.md +1 -1
  239. package/modules/unifiedIdSystem.js +8 -1
  240. package/modules/userId/eids.js +15 -0
  241. package/modules/videoModule/index.js +0 -1
  242. package/modules/videoModule/videoImpressionVerifier.js +0 -1
  243. package/modules/yieldlabBidAdapter.js +1 -2
  244. package/modules/yieldmoBidAdapter.js +1 -2
  245. package/package.json +13 -20
  246. package/src/Renderer.js +1 -2
  247. package/src/adapterManager.js +14 -4
  248. package/src/auction.js +2 -3
  249. package/src/config.js +1 -2
  250. package/src/cpmBucketManager.js +1 -2
  251. package/src/secureCreatives.js +2 -3
  252. package/src/targeting.js +1 -2
  253. package/test/fake-server/README.md +3 -3
  254. package/test/helpers/index_adapter_utils.js +2 -2
  255. package/test/helpers/testing-utils.js +1 -1
  256. package/test/spec/auctionmanager_spec.js +2 -3
  257. package/test/spec/fpd/enrichment_spec.js +1 -1
  258. package/test/spec/libraries/greedy/greedyPromise_spec.js +2 -2
  259. package/test/spec/modules/adfBidAdapter_spec.js +1 -1
  260. package/test/spec/modules/adnuntiusBidAdapter_spec.js +25 -9
  261. package/test/spec/modules/adtrgtmeBidAdapter_spec.js +2 -4
  262. package/test/spec/modules/adverxoBidAdapter_spec.js +25 -1
  263. package/test/spec/modules/afpBidAdapter_spec.js +0 -1
  264. package/test/spec/modules/bliinkBidAdapter_spec.js +15 -7
  265. package/test/spec/modules/contxtfulBidAdapter_spec.js +606 -82
  266. package/test/spec/modules/conversantBidAdapter_spec.js +1 -139
  267. package/test/spec/modules/cwireBidAdapter_spec.js +2 -2
  268. package/test/spec/modules/czechAdIdSystem_spec.js +4 -4
  269. package/test/spec/modules/displayioBidAdapter_spec.js +1 -1
  270. package/test/spec/modules/dynamicAdBoostRtdProvider_spec.js +0 -42
  271. package/test/spec/modules/enrichmentLiftMeasurement_spec.js +8 -8
  272. package/test/spec/modules/hypelabBidAdapter_spec.js +17 -11
  273. package/test/spec/modules/iasRtdProvider_spec.js +2 -2
  274. package/test/spec/modules/id5IdSystem_spec.js +1 -1
  275. package/test/spec/modules/idxIdSystem_spec.js +1 -2
  276. package/test/spec/modules/intentIqAnalyticsAdapter_spec.js +25 -25
  277. package/test/spec/modules/intentIqIdSystem_spec.js +32 -32
  278. package/test/spec/modules/kargoBidAdapter_spec.js +11 -5
  279. package/test/spec/modules/liveIntentIdSystem_spec.js +14 -0
  280. package/test/spec/modules/lmpIdSystem_spec.js +1 -2
  281. package/test/spec/modules/lockrAIMIdSystem_spec.js +2 -2
  282. package/test/spec/modules/luceadBidAdapter_spec.js +1 -1
  283. package/test/spec/modules/luponmediaBidAdapter_spec.js +186 -324
  284. package/test/spec/modules/mediaeyesBidAdapter_spec.js +1 -1
  285. package/test/spec/modules/mediakeysBidAdapter_spec.js +1 -2
  286. package/test/spec/modules/mediasquareBidAdapter_spec.js +13 -2
  287. package/test/spec/modules/missenaBidAdapter_spec.js +1 -1
  288. package/test/spec/modules/nativeryBidAdapter_spec.js +195 -0
  289. package/test/spec/modules/nexx360BidAdapter_spec.js +6 -6
  290. package/test/spec/modules/oguryBidAdapter_spec.js +2 -2
  291. package/test/spec/modules/omsBidAdapter_spec.js +1 -1
  292. package/test/spec/modules/onetagBidAdapter_spec.js +1 -2
  293. package/test/spec/modules/onomagicBidAdapter_spec.js +2 -2
  294. package/test/spec/modules/overtoneRtdProvider_spec.mjs +1 -1
  295. package/test/spec/modules/permutiveIdentityManagerIdSystem_spec.js +17 -14
  296. package/test/spec/modules/pinkLionBidAdapter_spec.js +480 -0
  297. package/test/spec/modules/prebidServerBidAdapter_spec.js +2 -2
  298. package/test/spec/modules/previousAuctionInfo_spec.js +2 -2
  299. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +1 -1
  300. package/test/spec/modules/pubmaticBidAdapter_spec.js +19 -1
  301. package/test/spec/modules/pubmaticRtdProvider_spec.js +16 -17
  302. package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +2 -2
  303. package/test/spec/modules/rtbhouseBidAdapter_spec.js +0 -182
  304. package/test/spec/modules/rubiconBidAdapter_spec.js +3 -4
  305. package/test/spec/modules/sizeMappingV2_spec.js +1 -1
  306. package/test/spec/modules/sizeMapping_spec.js +2 -3
  307. package/test/spec/modules/stroeerCoreBidAdapter_spec.js +36 -26
  308. package/test/spec/modules/stvBidAdapter_spec.js +108 -40
  309. package/test/spec/modules/topLevelPaapi_spec.js +1 -1
  310. package/test/spec/modules/tpmnBidAdapter_spec.js +1 -1
  311. package/test/spec/modules/ttdBidAdapter_spec.js +1 -1
  312. package/test/spec/modules/unifiedIdSystem_spec.js +20 -0
  313. package/test/spec/modules/userId_spec.js +1 -1
  314. package/test/spec/modules/vibrantmediaBidAdapter_spec.js +1 -1
  315. package/test/spec/modules/videoModule/submodules/videojsVideoProvider_spec.js +1 -1
  316. package/test/spec/modules/yieldmoBidAdapter_spec.js +2 -2
  317. package/test/spec/modules/zeotapIdPlusIdSystem_spec.js +1 -2
  318. package/test/spec/unit/core/adapterManager_spec.js +29 -17
  319. package/test/spec/unit/core/targeting_spec.js +1 -1
  320. package/test/spec/unit/pbjs_api_spec.js +4 -5
  321. package/test/spec/utils_spec.js +20 -12
  322. package/test/test_deps.js +1 -1
  323. package/nightwatch.browserstack.json +0 -46
  324. package/nightwatch.conf.js +0 -36
  325. package/nightwatch.json +0 -40
@@ -0,0 +1,195 @@
1
+ import { expect } from 'chai';
2
+ import { spec, converter } from 'modules/nativeryBidAdapter';
3
+ import { newBidder } from 'src/adapters/bidderFactory.js';
4
+ import * as utils from 'src/utils.js';
5
+
6
+ const ENDPOINT = 'https://hb.nativery.com/openrtb2/auction';
7
+ const MAX_IMPS_PER_REQUEST = 10;
8
+
9
+ const bid = {
10
+ bidder: 'nativery',
11
+ params: {
12
+ widgetId: 'abc123',
13
+ },
14
+ adUnitCode: '/adunit-code/test-path',
15
+ bidId: 'test-bid-id-1',
16
+ bidderRequestId: 'test-bid-request-1',
17
+ auctionId: 'test-auction-1',
18
+ transactionId: 'test-transactionId-1',
19
+ };
20
+
21
+ const bidRequests = [
22
+ {
23
+ ...bid,
24
+ mediaTypes: {
25
+ banner: {
26
+ sizes: [
27
+ [300, 250],
28
+ [300, 600],
29
+ ],
30
+ },
31
+ },
32
+ ortb2: {},
33
+ },
34
+ ];
35
+
36
+ describe('NativeryAdapter', function () {
37
+ const adapter = newBidder(spec);
38
+ let sandBox;
39
+
40
+ beforeEach(() => {
41
+ sandBox = sinon.createSandbox();
42
+ });
43
+
44
+ afterEach(() => sandBox.restore());
45
+
46
+ describe('inherited functions', function () {
47
+ it('exists and is a function', function () {
48
+ expect(adapter.callBids).to.exist.and.to.be.a('function');
49
+ });
50
+ });
51
+
52
+ describe('isBidRequestValid', function () {
53
+ it('should return true when required params found', function () {
54
+ expect(spec.isBidRequestValid(bid)).to.equal(true);
55
+ });
56
+
57
+ it('should return false when required params are not passed', function () {
58
+ const invalidBid = Object.assign({}, bid);
59
+ delete invalidBid.params.widgetId;
60
+ expect(spec.isBidRequestValid(invalidBid)).to.equal(false);
61
+ });
62
+ });
63
+
64
+ describe('buildRequests', function () {
65
+ it('should build the request', function () {
66
+ const request = spec.buildRequests(bidRequests, {});
67
+ expect(request.method).to.equal('POST');
68
+ expect(request.url).to.equal(ENDPOINT);
69
+ expect(request.options.withCredentials).to.equal(true);
70
+ expect(typeof request.data.id).to.equal('string');
71
+ expect(request.data.imp).to.be.an('array');
72
+ expect(request.data.imp.length).to.equal(1);
73
+ request.data.imp.forEach((data) => {
74
+ expect(data.id).to.exist.and.to.be.a('string');
75
+ expect(data).to.have.nested.property('banner.format');
76
+ expect(data.ext.nativery.widgetId).to.equal(bid.params.widgetId);
77
+ });
78
+ });
79
+ // build multi bid request
80
+ const multiBidRequest = Array(12).fill(bidRequests[0]);
81
+
82
+ it('should build the request splitting in chuncks', function () {
83
+ const request = spec.buildRequests(multiBidRequest, {});
84
+
85
+ const expectedNumRequests = Math.ceil(
86
+ multiBidRequest.length / MAX_IMPS_PER_REQUEST
87
+ );
88
+ expect(request).to.be.an('array').that.has.lengthOf(expectedNumRequests);
89
+
90
+ // Check each object of the request
91
+ request.forEach((req) => {
92
+ expect(req).to.have.property('method', 'POST');
93
+ expect(req).to.have.property('url', ENDPOINT);
94
+ expect(req).to.have.property('data').that.is.an('object');
95
+ expect(req.data).to.have.property('imp').that.is.an('array');
96
+ // Each chunk must contain at most MAX_IMPS_PER_REQUEST elements.
97
+ expect(req.data.imp.length).to.be.at.most(MAX_IMPS_PER_REQUEST);
98
+ });
99
+ });
100
+ });
101
+
102
+ describe('interpretResponse', function () {
103
+ const bidderRequest = spec.buildRequests(bidRequests, {});
104
+ it('should return [] if serverResponse.body is falsy', function () {
105
+ // Case: serverResponse.body does not exist
106
+ let serverResponse = {};
107
+ let result = spec.interpretResponse(serverResponse, bidderRequest);
108
+ expect(result).to.be.an('array').that.is.empty;
109
+
110
+ // Case: serverResponse.body is null
111
+ serverResponse = { body: null };
112
+ result = spec.interpretResponse(serverResponse, bidderRequest);
113
+ expect(result).to.be.an('array').that.is.empty;
114
+ });
115
+
116
+ it('should return [] if serverResponse.body is not an object', function () {
117
+ const serverResponse = { body: 'not an object' };
118
+ const result = spec.interpretResponse(serverResponse, bidderRequest);
119
+ expect(result).to.be.an('array').that.is.empty;
120
+ });
121
+
122
+ it('should return [] if serverResponse.body.seatbid is not an array', function () {
123
+ const serverResponse = {
124
+ body: {
125
+ seatbid: {}, // Not an array
126
+ },
127
+ };
128
+
129
+ const result = spec.interpretResponse(serverResponse, bidderRequest);
130
+ expect(result).to.be.an('array').that.is.empty;
131
+ });
132
+
133
+ it('should correctly process a response with a seatbid array and return bids', function () {
134
+ const bidsMock = [{ bid: 1 }, { bid: 2 }];
135
+ const serverResponse = {
136
+ body: {
137
+ seatbid: [{}],
138
+ },
139
+ };
140
+
141
+ sandBox.stub(converter, 'fromORTB').returns({ bids: bidsMock });
142
+
143
+ const result = spec.interpretResponse(serverResponse, bidderRequest);
144
+ expect(result).to.deep.equal(bidsMock);
145
+ sinon.assert.calledWith(converter.fromORTB, {
146
+ request: bidderRequest.data,
147
+ response: serverResponse.body,
148
+ });
149
+ });
150
+
151
+ it('should log a warning if deepAccess returns errors, but still return bids', function () {
152
+ const logWarnSpy = sinon.spy(utils, 'logWarn');
153
+ const bidsMock = [{ bid: 1 }];
154
+ const bidderRequest = spec.buildRequests(bidRequests, {});
155
+
156
+ const errors = ['error1', 'error2'];
157
+ const serverResponse = {
158
+ body: {
159
+ seatbid: [{}],
160
+ ext: {
161
+ errors: {
162
+ nativery: errors,
163
+ },
164
+ },
165
+ },
166
+ };
167
+
168
+ sandBox.stub(converter, 'fromORTB').returns({ bids: bidsMock });
169
+
170
+ const result = spec.interpretResponse(serverResponse, bidderRequest);
171
+ expect(result).to.deep.equal(bidsMock);
172
+ expect(logWarnSpy.calledOnceWithExactly(`Nativery: Error in bid response ${JSON.stringify(errors)}`)).to.be.true;
173
+ logWarnSpy.restore();
174
+ });
175
+
176
+ it('should return [] and log an error if converter.fromORTB throws an error', function () {
177
+ const logErrorSpy = sinon.spy(utils, 'logError');
178
+ const bidderRequest = spec.buildRequests(bidRequests, {});
179
+
180
+ const serverResponse = {
181
+ body: {
182
+ seatbid: [{}],
183
+ },
184
+ };
185
+
186
+ const error = new Error('Test error');
187
+ sandBox.stub(converter, 'fromORTB').throws(error);
188
+
189
+ const result = spec.interpretResponse(serverResponse, bidderRequest);
190
+ expect(result).to.be.an('array').that.is.empty;
191
+ expect(logErrorSpy.calledOnceWithExactly(`Nativery: unhandled error in bid response ${error.message}`)).to.be.true;
192
+ logErrorSpy.restore();
193
+ });
194
+ });
195
+ });
@@ -31,7 +31,7 @@ describe('Nexx360 bid adapter tests', () => {
31
31
  }],
32
32
  },
33
33
  };
34
-
34
+
35
35
 
36
36
  describe('isBidRequestValid()', () => {
37
37
  let bannerBid;
@@ -226,7 +226,7 @@ describe('Nexx360 bid adapter tests', () => {
226
226
  sizes: [[728, 90], [970, 250]]
227
227
  }
228
228
  },
229
-
229
+
230
230
  adUnitCode: 'div-2-abcd',
231
231
  transactionId: '6196885d-4e76-40dc-a09c-906ed232626b',
232
232
  sizes: [[728, 90], [970, 250]],
@@ -523,7 +523,7 @@ describe('Nexx360 bid adapter tests', () => {
523
523
  },
524
524
  },
525
525
  };
526
-
526
+
527
527
  const output = spec.interpretResponse(response);
528
528
  const expectedOutput = [{
529
529
  requestId: '263cba3b8bfb72',
@@ -575,7 +575,7 @@ describe('Nexx360 bid adapter tests', () => {
575
575
  },
576
576
  },
577
577
  };
578
-
578
+
579
579
  const output = spec.interpretResponse(response);
580
580
  const expectedOutut = [{
581
581
  requestId: '4ce809b61a3928',
@@ -631,7 +631,7 @@ describe('Nexx360 bid adapter tests', () => {
631
631
  },
632
632
  },
633
633
  };
634
-
634
+
635
635
  const output = spec.interpretResponse(response);
636
636
  const expectOutput = [{
637
637
  requestId: '23e11d845514bb',
@@ -692,7 +692,7 @@ describe('Nexx360 bid adapter tests', () => {
692
692
  },
693
693
  },
694
694
  }];
695
- expect(output).to.eql(expectOutput);
695
+ expect(output).to.eql(expectOutput);
696
696
  });
697
697
  });
698
698
 
@@ -941,10 +941,10 @@ describe('OguryBidAdapter', () => {
941
941
 
942
942
  const bid = { nurl: 'http://url.co/win' };
943
943
 
944
- expect(ortbConverterProps.bidResponse(buildBidResponseSpy, utils.deepClone(bid), {})).to.deep.equal({
944
+ expect(ortbConverterProps.bidResponse(buildBidResponseSpy, utils.deepClone(bid), {})).to.deep.equal({
945
945
  ...bidResponse,
946
946
  currency: 'USD',
947
- nurl: bid.nurl
947
+ nurl: bid.nurl
948
948
  });
949
949
 
950
950
  sinon.assert.calledWith(buildBidResponseSpy, {}, {});
@@ -331,7 +331,7 @@ describe('omsBidAdapter', function () {
331
331
 
332
332
  context('when element is partially in view', function () {
333
333
  it('returns percentage', function () {
334
- const getWinDimensionsStub = sandbox.stub(utils, 'getWinDimensions')
334
+ const getWinDimensionsStub = sandbox.stub(utils, 'getWinDimensions')
335
335
  getWinDimensionsStub.returns({ innerHeight: win.innerHeight, innerWidth: win.innerWidth });
336
336
  Object.assign(element, {width: 800, height: 800});
337
337
  const request = spec.buildRequests(bidRequests);
@@ -1,6 +1,5 @@
1
1
  import { spec, isValid, hasTypeVideo, isSchainValid } from 'modules/onetagBidAdapter.js';
2
2
  import { expect } from 'chai';
3
- import { find } from 'src/polyfill.js';
4
3
  import { BANNER, VIDEO, NATIVE } from 'src/mediaTypes.js';
5
4
  import { INSTREAM, OUTSTREAM } from 'src/video.js';
6
5
  import { toOrtbNativeRequest } from 'src/native.js';
@@ -724,7 +723,7 @@ describe('onetag', function () {
724
723
  let dataItem = interpretedResponse[i];
725
724
  expect(dataItem).to.include.all.keys('requestId', 'cpm', 'width', 'height', 'ttl', 'creativeId', 'netRevenue', 'currency', 'meta', 'dealId');
726
725
  if (dataItem.meta.mediaType === VIDEO) {
727
- const { context } = find(requestData.bids, (item) => item.bidId === dataItem.requestId);
726
+ const { context } = requestData.bids.find((item) => item.bidId === dataItem.requestId);
728
727
  if (context === INSTREAM) {
729
728
  expect(dataItem).to.include.all.keys('videoCacheKey', 'vastUrl');
730
729
  expect(dataItem.vastUrl).to.be.a('string');
@@ -161,7 +161,7 @@ describe('onomagicBidAdapter', function() {
161
161
 
162
162
  context('when element is partially in view', function() {
163
163
  it('returns percentage', function() {
164
- const getWinDimensionsStub = sandbox.stub(utils, 'getWinDimensions')
164
+ const getWinDimensionsStub = sandbox.stub(utils, 'getWinDimensions')
165
165
  getWinDimensionsStub.returns({ innerHeight: win.innerHeight, innerWidth: win.innerWidth });
166
166
  Object.assign(element, { width: 800, height: 800 });
167
167
  const request = spec.buildRequests(bidRequests);
@@ -172,7 +172,7 @@ describe('onomagicBidAdapter', function() {
172
172
 
173
173
  context('when width or height of the element is zero', function() {
174
174
  it('try to use alternative values', function() {
175
- const getWinDimensionsStub = sandbox.stub(utils, 'getWinDimensions')
175
+ const getWinDimensionsStub = sandbox.stub(utils, 'getWinDimensions')
176
176
  getWinDimensionsStub.returns({ innerHeight: win.innerHeight, innerWidth: win.innerWidth });
177
177
  Object.assign(element, { width: 0, height: 0 });
178
178
  bidRequests[0].mediaTypes.banner.sizes = [[800, 2400]];
@@ -26,7 +26,7 @@ describe('Overtone RTD Submodule with Test URLs', function () {
26
26
  }
27
27
  throw new Error('Unexpected URL in test');
28
28
  });
29
-
29
+
30
30
  getBidRequestDataStub = sinon.stub(overtoneRtdProvider, 'getBidRequestData').callsFake((config, callback) => {
31
31
  if (config.shouldFail) {
32
32
  return;
@@ -54,24 +54,27 @@ describe('permutiveIdentityManagerIdSystem', () => {
54
54
 
55
55
  it('will optionally wait for Permutive SDK if no identities are in local storage already', async () => {
56
56
  const cleanup = setWindowPermutive()
57
- const result = permutiveIdentityManagerIdSubmodule.getId({params: {ajaxTimeout: 50}})
58
- expect(result).not.to.be.undefined
59
- expect(result.id).to.be.undefined
60
- expect(result.callback).not.to.be.undefined
61
- const expected = {
62
- 'id5id': {
63
- 'uid': '0',
64
- 'linkType': 0,
65
- 'ext': {
66
- 'abTestingControlGroup': false,
57
+ try {
58
+ const result = permutiveIdentityManagerIdSubmodule.getId({params: {ajaxTimeout: 50}})
59
+ expect(result).not.to.be.undefined
60
+ expect(result.id).to.be.undefined
61
+ expect(result.callback).not.to.be.undefined
62
+ const expected = {
63
+ 'id5id': {
64
+ 'uid': '0',
67
65
  'linkType': 0,
68
- 'pba': 'EVqgf9vY0fSrsrqJZMOm+Q=='
66
+ 'ext': {
67
+ 'abTestingControlGroup': false,
68
+ 'linkType': 0,
69
+ 'pba': 'EVqgf9vY0fSrsrqJZMOm+Q=='
70
+ }
69
71
  }
70
72
  }
73
+ const r = await new Promise(result.callback)
74
+ expect(r).to.deep.equal(expected)
75
+ } finally {
76
+ cleanup()
71
77
  }
72
- const r = await new Promise(result.callback)
73
- expect(r).to.deep.equal(expected)
74
- cleanup()
75
78
  })
76
79
  })
77
80
  })