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
@@ -1,297 +1,218 @@
1
- import { resetUserSync, spec, hasValidSupplyChainParams } from 'modules/luponmediaBidAdapter.js';
2
- const ENDPOINT_URL = 'https://rtb.adxpremium.services/openrtb2/auction';
1
+ // tests/luponmediaBidAdapter_spec.js
2
+ import { resetUserSync, spec, converter, storage } from 'modules/luponmediaBidAdapter.js';
3
+ import sinon from 'sinon';
4
+ import { expect } from 'chai';
3
5
 
4
6
  describe('luponmediaBidAdapter', function () {
7
+ let sandbox;
8
+
9
+ beforeEach(function () {
10
+ sandbox = sinon.createSandbox();
11
+ });
12
+
13
+ afterEach(function () {
14
+ sandbox.restore();
15
+ });
16
+
5
17
  describe('isBidRequestValid', function () {
6
- let bid = {
7
- 'bidder': 'luponmedia',
8
- 'params': {
9
- 'siteId': 12345,
10
- 'keyId': '4o2c4'
11
- },
12
- 'adUnitCode': 'test-div',
13
- 'sizes': [[300, 250]],
14
- 'bidId': 'g1987234bjkads',
15
- 'bidderRequestId': '290348ksdhkas89324',
16
- 'auctionId': '20384rlek235',
18
+ const bid = {
19
+ bidder: 'luponmedia',
20
+ params: { keyId: 'uid@eu_test_300_600' },
21
+ adUnitCode: 'test-div',
22
+ sizes: [[300, 250]],
23
+ bidId: 'g1987234bjkads'
17
24
  };
18
25
 
19
- it('should return true when required params are found', function () {
20
- expect(spec.isBidRequestValid(bid)).to.equal(true);
26
+ it('should return true when required param is found and it is valid', function () {
27
+ expect(spec.isBidRequestValid(bid)).to.be.true;
21
28
  });
22
29
 
23
- it('should return false when required params are not passed', function () {
24
- let invalidBid = Object.assign({}, bid);
25
- delete invalidBid.params;
26
- invalidBid.params = {
27
- 'siteId': 12345
28
- };
29
- expect(spec.isBidRequestValid(invalidBid)).to.equal(false);
30
+ it('should return true with required and without optional param', function () {
31
+ bid.params = { keyId: 'uid_test_300_600' };
32
+ expect(spec.isBidRequestValid(bid)).to.be.true;
33
+ });
34
+
35
+ it('should return false when keyId is not in the required format', function () {
36
+ bid.params = { keyId: 12345 };
37
+ expect(spec.isBidRequestValid(bid)).to.be.false;
30
38
  });
31
39
  });
32
40
 
33
41
  describe('buildRequests', function () {
34
- let bidRequests = [
42
+ const bidRequests = [
35
43
  {
36
- 'bidder': 'luponmedia',
37
- 'params': {
38
- 'siteId': 303522,
39
- 'keyId': '4o2c4'
40
- },
41
- 'crumbs': {
42
- 'pubcid': '8d8b16cb-1383-4a0f-b4bb-0be28464d974'
43
- },
44
- 'mediaTypes': {
45
- 'banner': {
46
- 'sizes': [
47
- [
48
- 300,
49
- 250
50
- ]
51
- ]
52
- }
53
- },
54
- 'adUnitCode': 'div-gpt-ad-1533155193780-2',
55
- 'transactionId': '585d96a5-bd93-4a89-b8ea-0f546f3aaa82',
56
- 'sizes': [
57
- [
58
- 300,
59
- 250
60
- ]
61
- ],
62
- 'bidId': '268a30af10dd6f',
63
- 'bidderRequestId': '140411b5010a2a',
64
- 'auctionId': '7376c117-b7aa-49f5-a661-488543deeefd',
65
- 'src': 'client',
66
- 'bidRequestsCount': 1,
67
- 'bidderRequestsCount': 1,
68
- 'bidderWinsCount': 0,
69
- 'schain': {
70
- 'ver': '1.0',
71
- 'complete': 1,
72
- 'nodes': [
73
- {
74
- 'asi': 'novi.ba',
75
- 'sid': '199424',
76
- 'hp': 1
77
- }
78
- ]
79
- }
44
+ bidder: 'luponmedia',
45
+ params: { keyId: 'uid_test_300_600', placement_id: 'test-div' },
46
+ mediaTypes: { banner: { sizes: [[300, 600]] } },
47
+ adUnitCode: 'test-div',
48
+ transactionId: 'txn-id',
49
+ bidId: 'bid-id',
50
+ ortb2: { device: { ua: 'test-agent' } }
80
51
  }
81
52
  ];
82
53
 
83
- let bidderRequest = {
84
- 'bidderCode': 'luponmedia',
85
- 'auctionId': '7376c117-b7aa-49f5-a661-488543deeefd',
86
- 'bidderRequestId': '140411b5010a2a',
87
- 'bids': [
88
- {
89
- 'bidder': 'luponmedia',
90
- 'params': {
91
- 'siteId': 303522,
92
- 'keyId': '4o2c4'
93
- },
94
- 'crumbs': {
95
- 'pubcid': '8d8b16cb-1383-4a0f-b4bb-0be28464d974'
96
- },
97
- 'mediaTypes': {
98
- 'banner': {
99
- 'sizes': [
100
- [
101
- 300,
102
- 250
103
- ]
104
- ]
105
- }
106
- },
107
- 'adUnitCode': 'div-gpt-ad-1533155193780-2',
108
- 'transactionId': '585d96a5-bd93-4a89-b8ea-0f546f3aaa82',
109
- 'sizes': [
110
- [
111
- 300,
112
- 250
113
- ]
114
- ],
115
- 'bidId': '268a30af10dd6f',
116
- 'bidderRequestId': '140411b5010a2a',
117
- 'auctionId': '7376c117-b7aa-49f5-a661-488543deeefd',
118
- 'src': 'client',
119
- 'bidRequestsCount': 1,
120
- 'bidderRequestsCount': 1,
121
- 'bidderWinsCount': 0,
122
- 'schain': {
123
- 'ver': '1.0',
124
- 'complete': 1,
125
- 'nodes': [
126
- {
127
- 'asi': 'novi.ba',
128
- 'sid': '199424',
129
- 'hp': 1
130
- }
131
- ]
132
- }
133
- }
134
- ],
135
- 'auctionStart': 1587413920820,
136
- 'timeout': 1500,
137
- 'refererInfo': {
138
- 'page': 'https://novi.ba/clanak/176067/fast-car-beginner-s-guide-to-tuning-turbo-engines',
139
- 'reachedTop': true,
140
- 'numIframes': 0,
141
- 'stack': [
142
- 'https://novi.ba/clanak/176067/fast-car-beginner-s-guide-to-tuning-turbo-engines'
143
- ]
144
- },
145
- 'start': 1587413920835,
146
- ortb2: {
147
- source: {
148
- tid: 'mock-tid'
149
- }
54
+ const bidderRequest = {
55
+ bidderCode: 'luponmedia',
56
+ gdprConsent: {
57
+ gdprApplies: true
150
58
  },
59
+ uspConsent: true
151
60
  };
152
61
 
153
- it('sends bid request to ENDPOINT via POST', function () {
154
- const requests = spec.buildRequests(bidRequests, bidderRequest);
155
- let dynRes = JSON.parse(requests.data);
156
- expect(requests.url).to.equal(ENDPOINT_URL);
157
- expect(requests.method).to.equal('POST');
158
- expect(JSON.parse(requests.data)).to.deep.include({
159
- 'test': 0,
160
- 'source': {
161
- tid: 'mock-tid',
162
- 'ext': {'schain': {'ver': '1.0', 'complete': 1, 'nodes': [{'asi': 'novi.ba', 'sid': '199424', 'hp': 1}]}}
163
- },
164
- 'tmax': 1500,
165
- 'imp': [{
166
- 'id': '268a30af10dd6f',
167
- 'secure': 1,
168
- 'ext': {'luponmedia': {'siteId': 303522, 'keyId': '4o2c4'}},
169
- 'banner': {'format': [{'w': 300, 'h': 250}]}
170
- }],
171
- 'ext': {'prebid': {'targeting': {'includewinners': true, 'includebidderkeys': false}}},
172
- 'user': {'id': dynRes.user.id, 'buyeruid': '8d8b16cb-1383-4a0f-b4bb-0be28464d974'},
173
- 'site': {'page': 'https://novi.ba/clanak/176067/fast-car-beginner-s-guide-to-tuning-turbo-engines'}
174
- });
62
+ it('sends bid request to default endpoint', function () {
63
+ const req = spec.buildRequests(bidRequests, bidderRequest);
64
+
65
+ expect(req.url).to.include('https://rtb.adxpremium.services/openrtb2/auction');
66
+ expect(req.method).to.equal('POST');
67
+ expect(req.data.imp[0].ext.luponmedia.placement_id).to.equal('test-div');
68
+ expect(req.data.imp[0].ext.luponmedia.keyId).to.equal('uid_test_300_600');
69
+ });
70
+
71
+ it('sends bid request to endpoint specified in keyId', function () {
72
+ bidRequests[0].params.keyId = 'uid@eu_test_300_600';
73
+
74
+ const req = spec.buildRequests(bidRequests, bidderRequest);
75
+ expect(req.url).to.include('https://eu.adxpremium.services/openrtb2/auction');
175
76
  });
176
77
  });
177
78
 
178
79
  describe('interpretResponse', function () {
179
80
  it('should get correct banner bid response', function () {
180
- let response = {
181
- 'id': '4776d680-15a2-45c3-bad5-db6bebd94a06',
182
- 'seatbid': [
81
+ const response = {
82
+ id: 'resp-id',
83
+ seatbid: [
183
84
  {
184
- 'bid': [
85
+ bid: [
185
86
  {
186
- 'id': '2a122246ef72ea',
187
- 'impid': '2a122246ef72ea',
188
- 'price': 0.43,
189
- 'adm': '<a href="https://novi.ba" target="_blank" style="position:absolute; width:300px; height:250px; z-index:5;"> </a><iframe src="https://lupon.media/vijestiba/300x250new/index.html" height="250" width="300" scrolling="no" frameborder="0"></iframe>',
190
- 'adid': '56380110',
191
- 'adomain': [
192
- 'mi.betrivers.com'
193
- ],
194
- 'cid': '44724710',
195
- 'crid': '443801010',
196
- 'w': 300,
197
- 'h': 250,
198
- 'ext': {
199
- 'prebid': {
200
- 'targeting': {
201
- 'hb_bidder': 'luponmedia',
202
- 'hb_pb': '0.40',
203
- 'hb_size': '300x250'
87
+ id: 'bid123',
88
+ impid: 'bid123',
89
+ price: 0.43,
90
+ adm: '<div>Ad Markup</div>',
91
+ crid: 'creative-id',
92
+ w: 300,
93
+ h: 250,
94
+ ext: {
95
+ prebid: {
96
+ targeting: {
97
+ hb_bidder: 'luponmedia',
98
+ hb_pb: '0.40',
99
+ hb_size: '300x250'
204
100
  },
205
- 'type': 'banner'
101
+ type: 'banner'
206
102
  }
207
103
  }
208
104
  }
209
105
  ],
210
- 'seat': 'luponmedia'
106
+ seat: 'luponmedia'
211
107
  }
212
108
  ],
213
- 'cur': 'USD',
214
- 'ext': {
215
- 'responsetimemillis': {
216
- 'luponmedia': 233
217
- },
218
- 'tmaxrequest': 1500,
219
- 'usersyncs': {
220
- 'status': 'ok',
221
- 'bidder_status': []
222
- }
109
+ cur: 'USD'
110
+ };
111
+
112
+ const bidRequests = [
113
+ {
114
+ bidId: 'bid123',
115
+ adUnitCode: 'test-div',
116
+ params: { keyId: 'uid_test_300_600' },
117
+ mediaTypes: { banner: { sizes: [[300, 250]] } }
223
118
  }
119
+ ];
120
+
121
+ const bidderRequest = { refererInfo: { referer: 'https://example.com' } };
122
+ const ortbRequest = converter.toORTB({ bidRequests, bidderRequest });
123
+
124
+ const result = spec.interpretResponse({ status: 200, body: response }, { data: ortbRequest });
125
+
126
+ expect(result).to.be.an('array').with.lengthOf(1);
127
+ expect(result[0]).to.include({
128
+ requestId: 'bid123',
129
+ cpm: 0.43,
130
+ width: 300,
131
+ height: 250,
132
+ creativeId: 'creative-id',
133
+ currency: 'USD',
134
+ ttl: 300,
135
+ ad: '<div>Ad Markup</div>'
136
+ });
137
+ });
138
+
139
+ it('should enrich bidResponse with crid, dealId, and referrer if missing', function () {
140
+ const response = {
141
+ id: 'resp-id',
142
+ seatbid: [
143
+ {
144
+ bid: [
145
+ {
146
+ id: 'bid456',
147
+ impid: 'bid456',
148
+ price: 0.75,
149
+ adm: '<div>Creative</div>',
150
+ crid: 'creative456',
151
+ dealid: 'deal789',
152
+ w: 300,
153
+ h: 250
154
+ }
155
+ ],
156
+ seat: 'luponmedia'
157
+ }
158
+ ],
159
+ cur: 'USD'
224
160
  };
225
161
 
226
- let expectedResponse = [
162
+ const bidRequests = [
227
163
  {
228
- 'requestId': '2a122246ef72ea',
229
- 'cpm': '0.43',
230
- 'width': 300,
231
- 'height': 250,
232
- 'creativeId': '443801010',
233
- 'currency': 'USD',
234
- 'dealId': '23425',
235
- 'netRevenue': false,
236
- 'ttl': 300,
237
- 'referrer': '',
238
- 'ad': '<a href="https://novi.ba" target="_blank" style="position:absolute; width:300px; height:250px; z-index:5;"> </a><iframe src="https://lupon.media/vijestiba/300x250new/index.html" height="250" width="300" scrolling="no" frameborder="0"></iframe>',
239
- 'adomain': [
240
- 'mi.betrivers.com'
241
- ],
242
- 'meta': {
243
- 'advertiserDomains': [
244
- 'mi.betrivers.com'
245
- ]
164
+ bidId: 'bid456',
165
+ adUnitCode: 'test-div',
166
+ params: { keyId: 'uid_test_300_600' },
167
+ mediaTypes: { banner: { sizes: [[300, 250]] } },
168
+ ortb2: {
169
+ site: {
170
+ ref: 'https://mysite.com'
171
+ }
246
172
  }
247
173
  }
248
174
  ];
249
175
 
250
- let bidderRequest = {
251
- 'data': '{"site":{"page":"https://novi.ba/clanak/176067/fast-car-beginner-s-guide-to-tuning-turbo-engines"}}'
176
+ const bidderRequest = {
177
+ refererInfo: { referer: 'https://mysite.com' }
252
178
  };
253
179
 
254
- let result = spec.interpretResponse({ body: response }, bidderRequest);
255
- expect(Object.keys(result[0])).to.have.members(Object.keys(expectedResponse[0]));
180
+ const ortbRequest = converter.toORTB({ bidRequests, bidderRequest });
181
+
182
+ const result = spec.interpretResponse({ status: 200, body: response }, { data: ortbRequest });
183
+
184
+ expect(result[0].creativeId).to.equal('creative456');
185
+ expect(result[0].dealId).to.equal('deal789');
186
+ expect(result[0].referrer).to.equal('https://mysite.com');
256
187
  });
257
188
 
258
- it('handles nobid responses', function () {
259
- let noBidResponse = [];
189
+ it('should return empty array for unhandled response', function () {
190
+ const bidRequests = [{
191
+ bidId: 'bad-response',
192
+ adUnitCode: 'test-div',
193
+ params: { keyId: 'uid_test_300_600' },
194
+ mediaTypes: { banner: { sizes: [[300, 250]] } }
195
+ }];
196
+ const ortbRequest = converter.toORTB({ bidRequests, bidderRequest: {} });
260
197
 
261
- let noBidBidderRequest = {
262
- 'data': '{"site":{"page":""}}'
263
- }
264
- let noBidResult = spec.interpretResponse({ body: noBidResponse }, noBidBidderRequest);
265
- expect(noBidResult.length).to.equal(0);
198
+ const result = spec.interpretResponse({ status: 400, body: {} }, { data: ortbRequest });
199
+ expect(result).to.deep.equal([]);
266
200
  });
267
201
  });
268
202
 
269
203
  describe('getUserSyncs', function () {
270
- const bidResponse1 = {
271
- 'body': {
272
- 'ext': {
273
- 'responsetimemillis': {
274
- 'luponmedia': 233
275
- },
276
- 'tmaxrequest': 1500,
277
- 'usersyncs': {
278
- 'status': 'ok',
279
- 'bidder_status': [
204
+ const bidResponse = {
205
+ body: {
206
+ ext: {
207
+ usersyncs: {
208
+ bidder_status: [
280
209
  {
281
- 'bidder': 'luponmedia',
282
- 'no_cookie': true,
283
- 'usersync': {
284
- 'url': 'https://adxpremium.services/api/usersync',
285
- 'type': 'redirect'
286
- }
210
+ no_cookie: true,
211
+ usersync: { url: 'https://sync.img', type: 'image' }
287
212
  },
288
213
  {
289
- 'bidder': 'luponmedia',
290
- 'no_cookie': true,
291
- 'usersync': {
292
- 'url': 'https://adxpremium.services/api/iframeusersync',
293
- 'type': 'iframe'
294
- }
214
+ no_cookie: true,
215
+ usersync: { url: 'https://sync.iframe', type: 'iframe' }
295
216
  }
296
217
  ]
297
218
  }
@@ -299,101 +220,42 @@ describe('luponmediaBidAdapter', function () {
299
220
  }
300
221
  };
301
222
 
302
- const bidResponse2 = {
303
- 'body': {
304
- 'ext': {
305
- 'responsetimemillis': {
306
- 'luponmedia': 233
307
- },
308
- 'tmaxrequest': 1500,
309
- 'usersyncs': {
310
- 'status': 'no_cookie',
311
- 'bidder_status': []
312
- }
313
- }
314
- }
315
- };
316
-
317
- it('should use a sync url from first response (pixel and iframe)', function () {
318
- const syncs = spec.getUserSyncs({ pixelEnabled: true, iframeEnabled: true }, [bidResponse1, bidResponse2]);
319
- expect(syncs).to.deep.equal([
320
- {
321
- type: 'image',
322
- url: 'https://adxpremium.services/api/usersync'
323
- },
324
- {
325
- type: 'iframe',
326
- url: 'https://adxpremium.services/api/iframeusersync'
327
- }
328
- ]);
329
- });
330
-
331
- it('handle empty response (e.g. timeout)', function () {
332
- const syncs = spec.getUserSyncs({ pixelEnabled: true, iframeEnabled: true }, []);
333
- expect(syncs).to.deep.equal([]);
223
+ it('should return empty syncs when not pixel or iframe enabled', function () {
224
+ resetUserSync();
225
+ const syncs = spec.getUserSyncs({ pixelEnabled: false, iframeEnabled: false }, [bidResponse]);
226
+ expect(syncs.length).to.equal(0);
334
227
  });
335
228
 
336
- it('returns empty syncs when not pixel enabled and not iframe enabled', function () {
337
- const syncs = spec.getUserSyncs({ pixelEnabled: false, iframeEnabled: false }, [bidResponse1]);
338
- expect(syncs).to.deep.equal([]);
229
+ it('returns pixel syncs when pixel enabled and iframe not enabled', function () {
230
+ resetUserSync();
231
+ const syncs = spec.getUserSyncs({ pixelEnabled: true, iframeEnabled: false }, [bidResponse]);
232
+ expect(syncs).to.deep.include({ type: 'image', url: 'https://sync.img' });
339
233
  });
340
234
 
341
- it('returns pixel syncs when pixel enabled and not iframe enabled', function() {
235
+ it('returns iframe syncs when iframe enabled and pixel not enabled', function () {
342
236
  resetUserSync();
343
-
344
- const syncs = spec.getUserSyncs({ pixelEnabled: true, iframeEnabled: false }, [bidResponse1]);
345
- expect(syncs).to.deep.equal([
346
- {
347
- type: 'image',
348
- url: 'https://adxpremium.services/api/usersync'
349
- }
350
- ]);
237
+ const syncs = spec.getUserSyncs({ pixelEnabled: false, iframeEnabled: true }, [bidResponse]);
238
+ expect(syncs).to.deep.include({ type: 'iframe', url: 'https://sync.iframe' });
351
239
  });
352
240
 
353
- it('returns iframe syncs when not pixel enabled and iframe enabled', function() {
241
+ it('returns both syncs when both iframe and pixel enabled', function () {
354
242
  resetUserSync();
355
-
356
- const syncs = spec.getUserSyncs({ pixelEnabled: false, iframeEnabled: true }, [bidResponse1]);
357
- expect(syncs).to.deep.equal([
358
- {
359
- type: 'iframe',
360
- url: 'https://adxpremium.services/api/iframeusersync'
361
- }
243
+ const syncs = spec.getUserSyncs({ pixelEnabled: true, iframeEnabled: true }, [bidResponse]);
244
+ expect(syncs).to.deep.include.members([
245
+ { type: 'image', url: 'https://sync.img' },
246
+ { type: 'iframe', url: 'https://sync.iframe' }
362
247
  ]);
363
248
  });
364
- });
365
249
 
366
- describe('hasValidSupplyChainParams', function () {
367
- it('returns true if schain is valid', function () {
368
- const schain = {
369
- 'ver': '1.0',
370
- 'complete': 1,
371
- 'nodes': [
372
- {
373
- 'asi': 'novi.ba',
374
- 'sid': '199424',
375
- 'hp': 1
376
- }
377
- ]
378
- };
379
-
380
- const checkSchain = hasValidSupplyChainParams(schain);
381
- expect(checkSchain).to.equal(true);
250
+ it('returns no syncs when usersyncs object missing', function () {
251
+ const emptyResponse = { body: { ext: {} } };
252
+ const syncs = spec.getUserSyncs({ pixelEnabled: true, iframeEnabled: true }, [emptyResponse]);
253
+ expect(syncs).to.deep.equal([]);
382
254
  });
383
255
 
384
- it('returns false if schain is invalid', function () {
385
- const schain = {
386
- 'ver': '1.0',
387
- 'complete': 1,
388
- 'nodes': [
389
- {
390
- 'invalid': 'novi.ba'
391
- }
392
- ]
393
- };
394
-
395
- const checkSchain = hasValidSupplyChainParams(schain);
396
- expect(checkSchain).to.equal(false);
256
+ it('returns empty syncs on empty response array', function () {
257
+ const syncs = spec.getUserSyncs({ pixelEnabled: true, iframeEnabled: true }, []);
258
+ expect(syncs).to.deep.equal([]);
397
259
  });
398
260
  });
399
261
  });
@@ -152,7 +152,7 @@ describe('mediaeyes adapter', function () {
152
152
  let request = spec.buildRequests(newRequest);
153
153
  let data = JSON.parse(request[0].data);
154
154
  data = data.imp[0];
155
- expect(data.bidfloor).to.equal(0);
155
+ expect(data.bidfloor).to.equal(0);
156
156
  });
157
157
 
158
158
  it('floormodule if currency is not matched', function () {
@@ -1,5 +1,4 @@
1
1
  import { expect } from 'chai';
2
- import {find} from 'src/polyfill.js';
3
2
  import { spec } from 'modules/mediakeysBidAdapter.js';
4
3
  import { newBidder } from 'src/adapters/bidderFactory.js';
5
4
  import * as utils from 'src/utils.js';
@@ -247,7 +246,7 @@ describe('mediakeysBidAdapter', function () {
247
246
  expect(data.imp[0].native.request.plcmttype).to.equal(1);
248
247
  expect(data.imp[0].native.request.assets.length).to.equal(6);
249
248
  // find the asset body
250
- const bodyAsset = find(data.imp[0].native.request.assets, asset => asset.id === 6);
249
+ const bodyAsset = data.imp[0].native.request.assets.find(asset => asset.id === 6);
251
250
  expect(bodyAsset.data.type).to.equal(2);
252
251
  });
253
252
 
@@ -130,6 +130,13 @@ describe('MediaSquare bid adapter tests', function () {
130
130
  }
131
131
  }
132
132
  },
133
+ userIdAsEids: [{
134
+ "source": "superid.com",
135
+ "uids": [{
136
+ "id": "12345678",
137
+ "atype": 1
138
+ }]
139
+ }],
133
140
  gdprConsent: {
134
141
  gdprApplies: true,
135
142
  consentString: 'BOzZdA0OzZdA0AGABBENDJ-AAAAvh7_______9______9uz_Ov_v_f__33e8__9v_l_7_-___u_-33d4-_1vf99yfm1-7ftr3tp_87ues2_Xur__79__3z3_9pxP78k89r7337Mw_v-_v-b7JCPN_Y3v-8Kg',
@@ -163,10 +170,14 @@ describe('MediaSquare bid adapter tests', function () {
163
170
  expect(requestContent.codes[0]).to.have.property('code').and.to.equal('publishername_atf_desktop_rg_pave');
164
171
  expect(requestContent.codes[0]).to.have.property('adunit').and.to.equal('banner-div');
165
172
  expect(requestContent.codes[0]).to.have.property('bidId').and.to.equal('aaaa1234');
166
- expect(requestContent.codes[0]).to.have.property('auctionId').and.to.equal('bbbb1234');
167
- expect(requestContent.codes[0]).to.have.property('transactionId').and.to.equal('cccc1234');
173
+ expect(requestContent.codes[0]).not.to.have.property('auctionId');
174
+ expect(requestContent.codes[0]).not.to.have.property('transactionId');
168
175
  expect(requestContent.codes[0]).to.have.property('mediatypes').exist;
169
176
  expect(requestContent.codes[0]).to.have.property('floor').exist;
177
+ expect(requestContent.codes[0]).to.have.property('ortb2Imp').exist;
178
+ expect(requestContent).to.have.property('ortb2').exist;
179
+ expect(requestContent.eids).exist;
180
+ expect(requestContent.eids).to.have.lengthOf(1);
170
181
  expect(requestContent.codes[0].floor).to.deep.equal({});
171
182
  expect(requestContent).to.have.property('dsa');
172
183
  const requestfloor = spec.buildRequests(FLOORS_PARAMS, DEFAULT_OPTIONS);
@@ -80,7 +80,7 @@ describe('Missena Adapter', function () {
80
80
  user: {
81
81
  ext: { consent: CONSENT_STRING },
82
82
  },
83
- device: {
83
+ device: {
84
84
  w: screen.width,
85
85
  h: screen.height,
86
86
  ext: { cdep: COOKIE_DEPRECATION_LABEL },