prebid.js 9.6.0 → 9.7.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 (211) hide show
  1. package/.github/PULL_REQUEST_TEMPLATE.md +1 -1
  2. package/.github/release-drafter.yml +4 -0
  3. package/README.md +4 -4
  4. package/dist/33acrossAnalyticsAdapter.js +1 -1
  5. package/dist/33acrossBidAdapter.js +1 -1
  6. package/dist/33acrossIdSystem.js +1 -1
  7. package/dist/BTBidAdapter.js +1 -1
  8. package/dist/adagioAnalyticsAdapter.js +1 -1
  9. package/dist/adagioBidAdapter.js +1 -1
  10. package/dist/adagioUtils.js +1 -1
  11. package/dist/addefendBidAdapter.js +1 -1
  12. package/dist/adgenerationBidAdapter.js +1 -1
  13. package/dist/adlooxRtdProvider.js +1 -1
  14. package/dist/adqueryBidAdapter.js +1 -1
  15. package/dist/adrelevantisBidAdapter.js +1 -1
  16. package/dist/adstirBidAdapter.js +1 -1
  17. package/dist/adtrgtmeBidAdapter.js +1 -1
  18. package/dist/adxcgAnalyticsAdapter.js +1 -1
  19. package/dist/adxcgBidAdapter.js +1 -1
  20. package/dist/adyoulikeBidAdapter.js +1 -1
  21. package/dist/agmaAnalyticsAdapter.js +1 -1
  22. package/dist/ajaBidAdapter.js +1 -1
  23. package/dist/amxBidAdapter.js +1 -1
  24. package/dist/amxIdSystem.js +1 -1
  25. package/dist/appierAnalyticsAdapter.js +1 -1
  26. package/dist/appnexusBidAdapter.js +1 -1
  27. package/dist/asoBidAdapter.js +1 -1
  28. package/dist/axonixBidAdapter.js +1 -1
  29. package/dist/bidglassBidAdapter.js +1 -1
  30. package/dist/big-richmediaBidAdapter.js +1 -1
  31. package/dist/bridBidAdapter.js +1 -1
  32. package/dist/bridgewellBidAdapter.js +1 -1
  33. package/dist/brightMountainMediaBidAdapter.js +1 -1
  34. package/dist/carodaBidAdapter.js +1 -1
  35. package/dist/chtnwBidAdapter.js +1 -1
  36. package/dist/chunk-core.js +1 -1
  37. package/dist/cleanmedianetBidAdapter.js +1 -1
  38. package/dist/concertBidAdapter.js +1 -1
  39. package/dist/connectadBidAdapter.js +1 -1
  40. package/dist/connectionInfo.js +1 -0
  41. package/dist/consumableBidAdapter.js +1 -1
  42. package/dist/conversantAnalyticsAdapter.js +1 -1
  43. package/dist/conversantBidAdapter.js +1 -1
  44. package/dist/craftBidAdapter.js +1 -1
  45. package/dist/criteoBidAdapter.js +1 -1
  46. package/dist/cwireBidAdapter.js +1 -1
  47. package/dist/dailymotionBidAdapter.js +1 -1
  48. package/dist/dependencies.json +5 -1
  49. package/dist/docereeAdManagerBidAdapter.js +1 -1
  50. package/dist/dspxBidAdapter.js +1 -1
  51. package/dist/dxkultureBidAdapter.js +1 -1
  52. package/dist/eplanningBidAdapter.js +1 -1
  53. package/dist/euidIdSystem.js +1 -1
  54. package/dist/exadsBidAdapter.js +1 -1
  55. package/dist/feedadBidAdapter.js +1 -1
  56. package/dist/finativeBidAdapter.js +1 -1
  57. package/dist/freewheel-sspBidAdapter.js +1 -1
  58. package/dist/gamoshiBidAdapter.js +1 -1
  59. package/dist/gmosspBidAdapter.js +1 -1
  60. package/dist/goldbachBidAdapter.js +1 -1
  61. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  62. package/dist/greenbidsRtdProvider.js +1 -1
  63. package/dist/gridBidAdapter.js +1 -1
  64. package/dist/gumgumBidAdapter.js +1 -1
  65. package/dist/h12mediaBidAdapter.js +1 -1
  66. package/dist/hypelabBidAdapter.js +1 -1
  67. package/dist/id5AnalyticsAdapter.js +1 -1
  68. package/dist/id5IdSystem.js +1 -1
  69. package/dist/idImportLibrary.js +1 -1
  70. package/dist/imdsBidAdapter.js +1 -1
  71. package/dist/improvedigitalBidAdapter.js +1 -1
  72. package/dist/insticatorBidAdapter.js +1 -1
  73. package/dist/intentIqAnalyticsAdapter.js +1 -1
  74. package/dist/ixBidAdapter.js +1 -1
  75. package/dist/jixieBidAdapter.js +1 -1
  76. package/dist/justpremiumBidAdapter.js +1 -1
  77. package/dist/kargoBidAdapter.js +1 -1
  78. package/dist/kimberliteBidAdapter.js +1 -1
  79. package/dist/konduitAnalyticsAdapter.js +1 -1
  80. package/dist/kueezBidAdapter.js +1 -1
  81. package/dist/lassoBidAdapter.js +1 -1
  82. package/dist/lifestreetBidAdapter.js +1 -1
  83. package/dist/liveIntentIdSystem.js +1 -1
  84. package/dist/logicadBidAdapter.js +1 -1
  85. package/dist/loglyliftBidAdapter.js +1 -1
  86. package/dist/luceadBidAdapter.js +1 -1
  87. package/dist/mabidderBidAdapter.js +1 -1
  88. package/dist/magniteAnalyticsAdapter.js +1 -1
  89. package/dist/malltvAnalyticsAdapter.js +1 -1
  90. package/dist/marsmediaBidAdapter.js +1 -1
  91. package/dist/mediafuseBidAdapter.js +1 -1
  92. package/dist/medianetAnalyticsAdapter.js +1 -1
  93. package/dist/medianetBidAdapter.js +1 -1
  94. package/dist/mediasquareBidAdapter.js +1 -1
  95. package/dist/mgidBidAdapter.js +1 -1
  96. package/dist/missenaBidAdapter.js +1 -1
  97. package/dist/mobianRtdProvider.js +1 -1
  98. package/dist/nexx360BidAdapter.js +1 -1
  99. package/dist/nobidAnalyticsAdapter.js +1 -1
  100. package/dist/nobidBidAdapter.js +1 -1
  101. package/dist/not-for-prod/prebid.js +161 -158
  102. package/dist/oguryBidAdapter.js +1 -1
  103. package/dist/onetagBidAdapter.js +1 -1
  104. package/dist/ooloAnalyticsAdapter.js +1 -1
  105. package/dist/openxBidAdapter.js +1 -1
  106. package/dist/optidigitalBidAdapter.js +1 -1
  107. package/dist/orbidderBidAdapter.js +1 -1
  108. package/dist/ortbConverter.js +1 -1
  109. package/dist/outbrainBidAdapter.js +1 -1
  110. package/dist/ownadxBidAdapter.js +1 -0
  111. package/dist/pixfutureBidAdapter.js +1 -1
  112. package/dist/prismaBidAdapter.js +1 -1
  113. package/dist/publinkIdSystem.js +1 -1
  114. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  115. package/dist/pubmaticBidAdapter.js +1 -1
  116. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  117. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  118. package/dist/pxyzBidAdapter.js +1 -1
  119. package/dist/quantcastBidAdapter.js +1 -1
  120. package/dist/readpeakBidAdapter.js +1 -1
  121. package/dist/relaidoBidAdapter.js +1 -1
  122. package/dist/retailspotBidAdapter.js +1 -1
  123. package/dist/rhythmoneBidAdapter.js +1 -1
  124. package/dist/riseUtils.js +1 -1
  125. package/dist/rubiconBidAdapter.js +1 -1
  126. package/dist/seedingAllianceBidAdapter.js +1 -1
  127. package/dist/seedtagBidAdapter.js +1 -1
  128. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  129. package/dist/sharethroughBidAdapter.js +1 -1
  130. package/dist/smaatoBidAdapter.js +1 -1
  131. package/dist/smartadserverBidAdapter.js +1 -1
  132. package/dist/smartxBidAdapter.js +1 -1
  133. package/dist/smilewantedBidAdapter.js +1 -1
  134. package/dist/snigelBidAdapter.js +1 -1
  135. package/dist/sonobiBidAdapter.js +1 -1
  136. package/dist/sovrnBidAdapter.js +1 -1
  137. package/dist/sspBCBidAdapter.js +1 -1
  138. package/dist/stvBidAdapter.js +1 -1
  139. package/dist/sublimeBidAdapter.js +1 -1
  140. package/dist/taboolaBidAdapter.js +1 -1
  141. package/dist/tappxBidAdapter.js +1 -1
  142. package/dist/targetVideoBidAdapter.js +1 -1
  143. package/dist/teadsBidAdapter.js +1 -1
  144. package/dist/terceptAnalyticsAdapter.js +1 -1
  145. package/dist/themoneytizerBidAdapter.js +1 -1
  146. package/dist/trionBidAdapter.js +1 -1
  147. package/dist/tripleliftBidAdapter.js +1 -1
  148. package/dist/ttdBidAdapter.js +1 -1
  149. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  150. package/dist/uid2IdSystem.js +1 -1
  151. package/dist/underdogmediaBidAdapter.js +1 -1
  152. package/dist/undertoneBidAdapter.js +1 -1
  153. package/dist/unrulyBidAdapter.js +1 -1
  154. package/dist/viantOrtbBidAdapter.js +1 -1
  155. package/dist/vidazooUtils.js +1 -1
  156. package/dist/videobyteBidAdapter.js +1 -1
  157. package/dist/visxBidAdapter.js +1 -1
  158. package/dist/vuukleBidAdapter.js +1 -1
  159. package/dist/widespaceBidAdapter.js +1 -1
  160. package/dist/winrBidAdapter.js +1 -1
  161. package/dist/wurflRtdProvider.js +1 -0
  162. package/dist/yahooAdsBidAdapter.js +1 -1
  163. package/dist/yieldmoBidAdapter.js +1 -1
  164. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  165. package/integrationExamples/gpt/wurflRtdProvider_example.html +106 -0
  166. package/libraries/connectionInfo/connectionUtils.js +33 -0
  167. package/libraries/ortbConverter/processors/video.js +2 -24
  168. package/libraries/riseUtils/index.js +2 -1
  169. package/libraries/vidazooUtils/bidderUtils.js +16 -0
  170. package/modules/.submodules.json +3 -1
  171. package/modules/51DegreesRtdProvider.md +11 -7
  172. package/modules/adagioBidAdapter.js +10 -50
  173. package/modules/appnexusBidAdapter.js +1 -1
  174. package/modules/cleanmedianetBidAdapter.js +1 -1
  175. package/modules/dailymotionBidAdapter.js +19 -0
  176. package/modules/docereeAdManagerBidAdapter.js +9 -12
  177. package/modules/gamoshiBidAdapter.js +1 -1
  178. package/modules/greenbidsAnalyticsAdapter.js +7 -4
  179. package/modules/greenbidsRtdProvider.js +15 -5
  180. package/modules/id5IdSystem.js +14 -93
  181. package/modules/idImportLibrary.js +14 -6
  182. package/modules/mobianRtdProvider.js +28 -14
  183. package/modules/ownadxBidAdapter.js +99 -0
  184. package/modules/prismaBidAdapter.js +1 -27
  185. package/modules/pubmaticBidAdapter.js +2 -1
  186. package/modules/sharethroughBidAdapter.js +5 -0
  187. package/modules/ttdBidAdapter.js +14 -32
  188. package/modules/viantOrtbBidAdapter.js +1 -1
  189. package/modules/wurflRtdProvider.js +213 -0
  190. package/modules/wurflRtdProvider.md +67 -0
  191. package/package.json +1 -1
  192. package/src/adloader.js +1 -0
  193. package/src/prebid.js +2 -1
  194. package/src/video.js +78 -1
  195. package/test/spec/modules/adagioBidAdapter_spec.js +0 -1
  196. package/test/spec/modules/appnexusBidAdapter_spec.js +0 -33
  197. package/test/spec/modules/cleanmedianetBidAdapter_spec.js +1 -1
  198. package/test/spec/modules/dailymotionBidAdapter_spec.js +50 -0
  199. package/test/spec/modules/docereeAdManagerBidAdapter_spec.js +1 -0
  200. package/test/spec/modules/gamoshiBidAdapter_spec.js +1 -1
  201. package/test/spec/modules/id5IdSystem_spec.js +25 -98
  202. package/test/spec/modules/idImportLibrary_spec.js +14 -0
  203. package/test/spec/modules/mobianRtdProvider_spec.js +46 -43
  204. package/test/spec/modules/ownadxBidAdapter_spec.js +103 -0
  205. package/test/spec/modules/pubmaticBidAdapter_spec.js +18 -0
  206. package/test/spec/modules/sharethroughBidAdapter_spec.js +35 -0
  207. package/test/spec/modules/ttdBidAdapter_spec.js +10 -1
  208. package/test/spec/modules/viantOrtbBidAdapter_spec.js +1 -1
  209. package/test/spec/modules/vidazooBidAdapter_spec.js +12 -4
  210. package/test/spec/modules/wurflRtdProvider_spec.js +324 -0
  211. package/test/spec/video_spec.js +103 -1
@@ -23,83 +23,86 @@ describe('Mobian RTD Submodule', function () {
23
23
  ajaxStub.restore();
24
24
  });
25
25
 
26
- it('should return no_risk when server responds with garm_no_risk', function () {
26
+ it('should return risk level when server responds with garm_risk', function () {
27
27
  ajaxStub = sinon.stub(ajax, 'ajaxBuilder').returns(function(url, callbacks) {
28
- callbacks.success({
29
- garm_no_risk: true,
30
- garm_low_risk: false,
31
- garm_medium_risk: false,
32
- garm_high_risk: false
33
- });
28
+ callbacks.success(JSON.stringify({
29
+ garm_risk: 'low',
30
+ sentiment_positive: true,
31
+ emotion_joy: true
32
+ }));
34
33
  });
35
34
 
36
35
  return mobianBrandSafetySubmodule.getBidRequestData(bidReqConfig, {}, {}).then((risk) => {
37
- expect(risk).to.have.property('mobianGarmRisk');
38
- expect(risk['mobianGarmRisk']).to.equal('no_risk');
36
+ expect(risk).to.deep.equal({
37
+ risk: 'low',
38
+ contentCategories: [],
39
+ sentiment: 'positive',
40
+ emotions: ['joy']
41
+ });
39
42
  expect(bidReqConfig.ortb2Fragments.global.site.ext.data.mobian).to.deep.equal(risk);
40
43
  });
41
44
  });
42
45
 
43
- it('should return low_risk when server responds with garm_no_risk', function () {
46
+ it('should handle response with GARM content categories, sentiment, and emotions', function () {
44
47
  ajaxStub = sinon.stub(ajax, 'ajaxBuilder').returns(function(url, callbacks) {
45
- callbacks.success({
46
- garm_no_risk: false,
47
- garm_low_risk: true,
48
- garm_medium_risk: false,
49
- garm_high_risk: false
50
- });
48
+ callbacks.success(JSON.stringify({
49
+ garm_risk: 'medium',
50
+ garm_content_category_arms: true,
51
+ garm_content_category_crime: true,
52
+ sentiment_negative: true,
53
+ emotion_anger: true,
54
+ emotion_fear: true
55
+ }));
51
56
  });
52
57
 
53
58
  return mobianBrandSafetySubmodule.getBidRequestData(bidReqConfig, {}, {}).then((risk) => {
54
- expect(risk).to.have.property('mobianGarmRisk');
55
- expect(risk['mobianGarmRisk']).to.equal('low_risk');
59
+ expect(risk).to.deep.equal({
60
+ risk: 'medium',
61
+ contentCategories: ['arms', 'crime'],
62
+ sentiment: 'negative',
63
+ emotions: ['anger', 'fear']
64
+ });
56
65
  expect(bidReqConfig.ortb2Fragments.global.site.ext.data.mobian).to.deep.equal(risk);
57
66
  });
58
67
  });
59
68
 
60
- it('should return medium_risk when server responds with garm_medium_risk', function () {
69
+ it('should return unknown risk when garm_risk is not present', function () {
61
70
  ajaxStub = sinon.stub(ajax, 'ajaxBuilder').returns(function(url, callbacks) {
62
- callbacks.success({
63
- garm_no_risk: false,
64
- garm_low_risk: false,
65
- garm_medium_risk: true,
66
- garm_high_risk: false
67
- });
71
+ callbacks.success(JSON.stringify({
72
+ sentiment_neutral: true
73
+ }));
68
74
  });
69
75
 
70
76
  return mobianBrandSafetySubmodule.getBidRequestData(bidReqConfig, {}, {}).then((risk) => {
71
- expect(risk).to.have.property('mobianGarmRisk');
72
- expect(risk['mobianGarmRisk']).to.equal('medium_risk');
77
+ expect(risk).to.deep.equal({
78
+ risk: 'unknown',
79
+ contentCategories: [],
80
+ sentiment: 'neutral',
81
+ emotions: []
82
+ });
73
83
  expect(bidReqConfig.ortb2Fragments.global.site.ext.data.mobian).to.deep.equal(risk);
74
84
  });
75
85
  });
76
86
 
77
- it('should return high_risk when server responds with garm_high_risk', function () {
87
+ it('should return empty object when server response is not valid JSON', function () {
78
88
  ajaxStub = sinon.stub(ajax, 'ajaxBuilder').returns(function(url, callbacks) {
79
- callbacks.success({
80
- garm_no_risk: false,
81
- garm_low_risk: false,
82
- garm_medium_risk: false,
83
- garm_high_risk: true
84
- });
89
+ callbacks.success('unexpected output not even of the right type');
85
90
  });
86
-
91
+ const originalConfig = JSON.parse(JSON.stringify(bidReqConfig));
87
92
  return mobianBrandSafetySubmodule.getBidRequestData(bidReqConfig, {}, {}).then((risk) => {
88
- expect(risk).to.have.property('mobianGarmRisk');
89
- expect(risk['mobianGarmRisk']).to.equal('high_risk');
90
- expect(bidReqConfig.ortb2Fragments.global.site.ext.data.mobian).to.deep.equal(risk);
93
+ expect(risk).to.deep.equal({});
94
+ // Check that bidReqConfig hasn't been modified
95
+ expect(bidReqConfig).to.deep.equal(originalConfig);
91
96
  });
92
97
  });
93
98
 
94
- it('should return unknown when server response is not of the expected shape', function () {
99
+ it('should handle error response', function () {
95
100
  ajaxStub = sinon.stub(ajax, 'ajaxBuilder').returns(function(url, callbacks) {
96
- callbacks.success('unexpected output not even of the right type');
101
+ callbacks.error();
97
102
  });
98
103
 
99
104
  return mobianBrandSafetySubmodule.getBidRequestData(bidReqConfig, {}, {}).then((risk) => {
100
- expect(risk).to.have.property('mobianGarmRisk');
101
- expect(risk['mobianGarmRisk']).to.equal('unknown');
102
- expect(bidReqConfig.ortb2Fragments.global.site.ext.data.mobian).to.deep.equal(risk);
105
+ expect(risk).to.deep.equal({});
103
106
  });
104
107
  });
105
108
  });
@@ -0,0 +1,103 @@
1
+ import { expect } from 'chai';
2
+ import { spec } from 'modules/ownadxBidAdapter.js';
3
+
4
+ describe('ownadx', function () {
5
+ const METHOD = 'POST';
6
+ const URL = 'https://pbs-js.prebid-ownadx.com/publisher/prebid/9/1231?token=3f2941af4f7e446f9a19ca6045f8cff4';
7
+
8
+ const bidRequest = {
9
+ bidder: 'ownadx',
10
+ params: {
11
+ tokenId: '3f2941af4f7e446f9a19ca6045f8cff4',
12
+ sspId: '1231',
13
+ seatId: '9'
14
+ },
15
+ mediaTypes: {
16
+ banner: {
17
+ sizes: [[300, 250], [300, 600]]
18
+ }
19
+ },
20
+ sizes: [
21
+ [300, 250],
22
+ [300, 600]
23
+ ],
24
+ bidId: 'bid-id-123456',
25
+ adUnitCode: 'ad-unit-code-1',
26
+ bidderRequestId: 'bidder-request-id-123456',
27
+ auctionId: 'auction-id-123456',
28
+ transactionId: 'transaction-id-123456'
29
+ };
30
+
31
+ describe('isBidRequestValid', function () {
32
+ it('should return true where required params found', function () {
33
+ expect(spec.isBidRequestValid(bidRequest)).to.equal(true);
34
+ });
35
+ });
36
+
37
+ describe('buildRequests', function () {
38
+ let bidderRequest = {
39
+ refererInfo: {
40
+ page: 'https://www.test.com',
41
+ reachedTop: true,
42
+ isAmp: false,
43
+ numIframes: 0,
44
+ stack: [
45
+ 'https://www.test.com'
46
+ ],
47
+ canonicalUrl: null
48
+ }
49
+ };
50
+
51
+ it('should build correct POST request for banner bid', function () {
52
+ const request = spec.buildRequests([bidRequest], bidderRequest)[0];
53
+ expect(request).to.be.an('object');
54
+ expect(request.method).to.equal('POST');
55
+ expect(request.url).to.equal('https://pbs-js.prebid-ownadx.com/publisher/prebid/9/1231?token=3f2941af4f7e446f9a19ca6045f8cff4');
56
+ const payload = request.data;
57
+ expect(payload).to.be.an('object');
58
+ expect(payload.sizes).to.be.an('array');
59
+ expect(payload.slotBidId).to.be.a('string');
60
+ expect(payload.PageUrl).to.be.a('string');
61
+ expect(payload.mediaChannel).to.be.a('number');
62
+ });
63
+ });
64
+
65
+ describe('interpretResponse', function () {
66
+ let serverResponse = {
67
+ body: {
68
+ tokenId: '3f2941af4f7e446f9a19ca6045f8cff4',
69
+ bid: 'BID-XXXX-XXXX',
70
+ width: '300',
71
+ height: '250',
72
+ cpm: '0.7',
73
+ adm: '<html><h1>Ad from OwnAdX</h1></html>',
74
+ slotBidId: 'bid-id-123456',
75
+ adType: '1',
76
+ statusText: 'Success'
77
+ }
78
+ };
79
+
80
+ let expectedResponse = [{
81
+ token: '3f2941af4f7e446f9a19ca6045f8cff4',
82
+ requestId: 'bid-id-123456',
83
+ cpm: '0.7',
84
+ currency: 'USD',
85
+ aType: '1',
86
+ netRevenue: false,
87
+ width: '300',
88
+ height: '250',
89
+ creativeId: 0,
90
+ ttl: 300,
91
+ ad: '<html><h1>Ad from OwnAdX</h1></html>',
92
+ meta: {
93
+ mediaType: 'banner',
94
+ advertiserDomains: []
95
+ }
96
+ }];
97
+
98
+ it('should correctly interpret valid banner response', function () {
99
+ let result = spec.interpretResponse(serverResponse);
100
+ expect(result).to.deep.equal(expectedResponse);
101
+ });
102
+ });
103
+ });
@@ -2974,6 +2974,24 @@ describe('PubMatic adapter', function () {
2974
2974
  expect(data.device).to.include.any.keys('connectiontype');
2975
2975
  }
2976
2976
  });
2977
+
2978
+ it('should send imp.pmp in request if pmp json is present in adUnit ortb2Imp object', function () {
2979
+ let originalBidRequests = utils.deepClone(bidRequests);
2980
+ originalBidRequests[0].ortb2Imp.pmp = {
2981
+ 'private_auction': 0,
2982
+ 'deals': [{ 'id': '5678' }]
2983
+ }
2984
+ const bidRequest = spec.buildRequests(originalBidRequests);
2985
+ let data = JSON.parse(bidRequest.data);
2986
+ expect(data.imp[0].pmp).to.exist.and.to.be.an('object');
2987
+ })
2988
+
2989
+ it('should not send imp.pmp in request if pmp json is not present in adUnit ortb2Imp object', function () {
2990
+ let originalBidRequests = utils.deepClone(bidRequests);
2991
+ const bidRequest = spec.buildRequests(originalBidRequests);
2992
+ let data = JSON.parse(bidRequest.data);
2993
+ expect(data.imp[0].pmp).to.deep.equal(undefined);
2994
+ })
2977
2995
  });
2978
2996
 
2979
2997
  it('Request params dctr check', function () {
@@ -346,6 +346,41 @@ describe('sharethrough adapter spec', function () {
346
346
 
347
347
  expect(openRtbReq.user.ext.eids).to.deep.equal([]);
348
348
  });
349
+
350
+ it('should add ORTB2 device data to the request', () => {
351
+ const bidderRequestWithOrtb2Device = {
352
+ ...bidderRequest,
353
+ ...{
354
+ ortb2: {
355
+ device: {
356
+ w: 980,
357
+ h: 1720,
358
+ dnt: 0,
359
+ ua: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/125.0.6422.80 Mobile/15E148 Safari/604.1',
360
+ language: 'en',
361
+ devicetype: 1,
362
+ make: 'Apple',
363
+ model: 'iPhone 12 Pro Max',
364
+ os: 'iOS',
365
+ osv: '17.4',
366
+ },
367
+ },
368
+ },
369
+ };
370
+
371
+ const [request] = spec.buildRequests(bidRequests, bidderRequestWithOrtb2Device);
372
+
373
+ expect(request.data.device.w).to.equal(bidderRequestWithOrtb2Device.ortb2.device.w);
374
+ expect(request.data.device.h).to.equal(bidderRequestWithOrtb2Device.ortb2.device.h);
375
+ expect(request.data.device.dnt).to.equal(bidderRequestWithOrtb2Device.ortb2.device.dnt);
376
+ expect(request.data.device.ua).to.equal(bidderRequestWithOrtb2Device.ortb2.device.ua);
377
+ expect(request.data.device.language).to.equal(bidderRequestWithOrtb2Device.ortb2.device.language);
378
+ expect(request.data.device.devicetype).to.equal(bidderRequestWithOrtb2Device.ortb2.device.devicetype);
379
+ expect(request.data.device.make).to.equal(bidderRequestWithOrtb2Device.ortb2.device.make);
380
+ expect(request.data.device.model).to.equal(bidderRequestWithOrtb2Device.ortb2.device.model);
381
+ expect(request.data.device.os).to.equal(bidderRequestWithOrtb2Device.ortb2.device.os);
382
+ expect(request.data.device.osv).to.equal(bidderRequestWithOrtb2Device.ortb2.device.osv);
383
+ });
349
384
  });
350
385
 
351
386
  describe('no referer provided', () => {
@@ -277,6 +277,13 @@ describe('ttdBidAdapter', function () {
277
277
  expect(url).to.equal('https://direct.adsrvr.org/bid/bidder/supplier');
278
278
  });
279
279
 
280
+ it('sends bid requests to the correct custom endpoint', function () {
281
+ let bannerBidRequestsWithCustomEndpoint = deepClone(baseBannerBidRequests);
282
+ bannerBidRequestsWithCustomEndpoint[0].params.useHttp2 = true;
283
+ const url = testBuildRequests(bannerBidRequestsWithCustomEndpoint, baseBidderRequest).url;
284
+ expect(url).to.equal('https://d2.adsrvr.org/bid/bidder/supplier');
285
+ });
286
+
280
287
  it('sends publisher id', function () {
281
288
  const requestBody = testBuildRequests(baseBannerBidRequests, baseBidderRequest).data;
282
289
  expect(requestBody.site).to.be.not.null;
@@ -442,7 +449,9 @@ describe('ttdBidAdapter', function () {
442
449
  let clonedBannerRequests = deepClone(baseBannerBidRequests);
443
450
  const battr = [1, 2, 3];
444
451
  clonedBannerRequests[0].ortb2Imp = {
445
- battr: battr
452
+ banner: {
453
+ battr: battr
454
+ }
446
455
  };
447
456
  const requestBody = testBuildRequests(clonedBannerRequests, baseBidderRequest).data;
448
457
  expect(requestBody.imp[0].banner.battr).to.equal(battr);
@@ -268,7 +268,7 @@ describe('viantOrtbBidAdapter', function () {
268
268
  });
269
269
  it('sends bid requests to the correct endpoint', function () {
270
270
  const url = testBuildRequests(baseBannerBidRequests, baseBidderRequest)[0].url;
271
- expect(url).to.equal('https://bidders-us-east-1.adelphic.net/d/rtb/v25/prebid/bidder');
271
+ expect(url).to.equal('https://bidders-us.adelphic.net/d/rtb/v25/prebid/bidder');
272
272
  });
273
273
 
274
274
  it('sends site', function () {
@@ -92,7 +92,7 @@ const VIDEO_BID = {
92
92
  'minduration': 0,
93
93
  'startdelay': 0,
94
94
  'linearity': 1,
95
- 'api': [2],
95
+ 'api': [2, 7],
96
96
  'placement': 1
97
97
  }
98
98
  }
@@ -157,8 +157,14 @@ const BIDDER_REQUEST = {
157
157
  segment: [{id: '243'}],
158
158
  },
159
159
  ],
160
+ },
161
+ source: {
162
+ ext: {
163
+ omidpn: 'MyIntegrationPartner',
164
+ omidpv: '7.1'
165
+ }
160
166
  }
161
- },
167
+ }
162
168
  };
163
169
 
164
170
  const SERVER_RESPONSE = {
@@ -359,7 +365,7 @@ describe('VidazooBidAdapter', function () {
359
365
  webSessionId: webSessionId,
360
366
  mediaTypes: {
361
367
  video: {
362
- api: [2],
368
+ api: [2, 7],
363
369
  context: 'instream',
364
370
  linearity: 1,
365
371
  maxduration: 60,
@@ -373,7 +379,9 @@ describe('VidazooBidAdapter', function () {
373
379
  protocols: [2, 3, 5, 6],
374
380
  startdelay: 0
375
381
  }
376
- }
382
+ },
383
+ omidpn: 'MyIntegrationPartner',
384
+ omidpv: '7.1'
377
385
  }
378
386
  })
379
387
  ;