prebid.js 5.16.0 → 5.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/.devcontainer/Dockerfile +11 -0
  2. package/.devcontainer/devcontainer.json +27 -0
  3. package/.devcontainer/postCreate.sh +6 -0
  4. package/browsers.json +1 -0
  5. package/integrationExamples/gpt/akamaidap_segments_example.html +132 -0
  6. package/modules/.submodules.json +1 -0
  7. package/modules/adfBidAdapter.js +21 -16
  8. package/modules/adgenerationBidAdapter.js +28 -4
  9. package/modules/adkernelBidAdapter.js +3 -1
  10. package/modules/admixerBidAdapter.js +11 -0
  11. package/modules/adnuntiusBidAdapter.js +1 -0
  12. package/modules/adtelligentBidAdapter.js +2 -1
  13. package/modules/airgridRtdProvider.js +1 -1
  14. package/modules/akamaiDapRtdProvider.js +474 -0
  15. package/modules/akamaiDapRtdProvider.md +47 -0
  16. package/modules/aolBidAdapter.js +2 -1
  17. package/modules/appnexusBidAdapter.js +5 -3
  18. package/modules/atsAnalyticsAdapter.js +89 -63
  19. package/modules/atsAnalyticsAdapter.md +1 -0
  20. package/modules/betweenBidAdapter.js +20 -3
  21. package/modules/bliinkBidAdapter.js +58 -32
  22. package/modules/bliinkBidAdapter.md +29 -6
  23. package/modules/browsiRtdProvider.js +106 -18
  24. package/modules/cleanioRtdProvider.js +192 -0
  25. package/modules/cleanioRtdProvider.md +59 -0
  26. package/modules/codefuelBidAdapter.js +183 -0
  27. package/modules/codefuelBidAdapter.md +111 -0
  28. package/modules/connectIdSystem.js +104 -0
  29. package/modules/connectIdSystem.md +33 -0
  30. package/modules/cwireBidAdapter.js +272 -0
  31. package/modules/cwireBidAdapter.md +43 -0
  32. package/modules/deepintentBidAdapter.js +106 -9
  33. package/modules/deepintentBidAdapter.md +36 -1
  34. package/modules/deltaprojectsBidAdapter.js +252 -0
  35. package/modules/deltaprojectsBidAdapter.md +32 -0
  36. package/modules/dgkeywordRtdProvider.js +0 -1
  37. package/modules/engageyaBidAdapter.js +157 -0
  38. package/modules/glimpseBidAdapter.js +160 -48
  39. package/modules/glimpseBidAdapter.md +11 -74
  40. package/modules/gridBidAdapter.js +1 -0
  41. package/modules/gridNMBidAdapter.js +7 -6
  42. package/modules/gumgumBidAdapter.js +16 -2
  43. package/modules/iasRtdProvider.js +83 -67
  44. package/modules/inskinBidAdapter.js +7 -3
  45. package/modules/ixBidAdapter.js +8 -1
  46. package/modules/jixieBidAdapter.js +8 -2
  47. package/modules/justpremiumBidAdapter.js +6 -1
  48. package/modules/kargoBidAdapter.js +14 -7
  49. package/modules/kargoBidAdapter.md +20 -0
  50. package/modules/limelightDigitalBidAdapter.js +22 -2
  51. package/modules/livewrappedAnalyticsAdapter.js +53 -3
  52. package/modules/mediakeysBidAdapter.js +405 -14
  53. package/modules/mediakeysBidAdapter.md +108 -0
  54. package/modules/multibid/index.js +3 -3
  55. package/modules/mytargetBidAdapter.js +112 -0
  56. package/modules/nativoBidAdapter.js +48 -29
  57. package/modules/nativoBidAdapter.md +0 -1
  58. package/modules/nextMillenniumBidAdapter.js +12 -3
  59. package/modules/nextrollBidAdapter.js +375 -0
  60. package/modules/nobidBidAdapter.js +2 -1
  61. package/modules/oguryBidAdapter.js +36 -7
  62. package/modules/openxBidAdapter.js +34 -22
  63. package/modules/operaadsBidAdapter.js +21 -1
  64. package/modules/otmBidAdapter.js +146 -0
  65. package/modules/otmBidAdapter.md +27 -26
  66. package/modules/outbrainBidAdapter.js +5 -0
  67. package/modules/pixfutureBidAdapter.js +24 -4
  68. package/modules/pixfutureBidAdapter.md +127 -0
  69. package/modules/playwireBidAdapter.md +61 -0
  70. package/modules/prebidServerBidAdapter/index.js +1 -1
  71. package/modules/proxistoreBidAdapter.js +4 -6
  72. package/modules/publinkIdSystem.js +17 -7
  73. package/modules/publinkIdSystem.md +7 -2
  74. package/modules/pubmaticBidAdapter.js +22 -6
  75. package/modules/pubmaticBidAdapter.md +1 -1
  76. package/modules/relaidoBidAdapter.js +8 -2
  77. package/modules/rtdModule/index.js +2 -2
  78. package/modules/sharethroughBidAdapter.js +12 -19
  79. package/modules/slimcutBidAdapter.js +121 -0
  80. package/modules/sonobiBidAdapter.js +7 -0
  81. package/modules/sortableBidAdapter.js +1 -0
  82. package/modules/spotxBidAdapter.js +15 -1
  83. package/modules/sspBCBidAdapter.js +207 -12
  84. package/modules/sspBCBidAdapter.md +1 -1
  85. package/modules/talkadsBidAdapter.js +129 -0
  86. package/modules/talkadsBidAdapter.md +60 -0
  87. package/modules/tappxBidAdapter.js +6 -5
  88. package/modules/teadsBidAdapter.js +3 -0
  89. package/modules/tripleliftBidAdapter.js +22 -5
  90. package/modules/trustxBidAdapter.js +17 -11
  91. package/modules/undertoneBidAdapter.js +9 -5
  92. package/modules/undertoneBidAdapter.md +5 -1
  93. package/modules/unicornBidAdapter.js +3 -3
  94. package/modules/userId/eids.js +18 -0
  95. package/modules/userId/eids.md +7 -0
  96. package/modules/userId/userId.md +12 -0
  97. package/modules/ventesBidAdapter.js +370 -0
  98. package/modules/ventesBidAdapter.md +94 -0
  99. package/modules/videobyteBidAdapter.js +13 -6
  100. package/modules/videobyteBidAdapter.md +49 -0
  101. package/modules/vidoomyBidAdapter.js +20 -12
  102. package/modules/visxBidAdapter.js +15 -22
  103. package/modules/yahoosspBidAdapter.js +637 -0
  104. package/modules/yahoosspBidAdapter.md +795 -0
  105. package/modules/yieldlabBidAdapter.js +48 -3
  106. package/modules/yieldlabBidAdapter.md +16 -1
  107. package/modules/yieldmoBidAdapter.js +20 -6
  108. package/modules/yieldmoSyntheticInventoryModule.js +46 -0
  109. package/modules/yieldmoSyntheticInventoryModule.md +68 -0
  110. package/package.json +1 -1
  111. package/src/adapterManager.js +5 -0
  112. package/src/adapters/bidderFactory.js +4 -3
  113. package/src/auction.js +11 -11
  114. package/src/constants.json +1 -0
  115. package/src/secureCreatives.js +6 -7
  116. package/src/targeting.js +11 -9
  117. package/test/.eslintrc.js +2 -1
  118. package/test/spec/modules/adfBidAdapter_spec.js +83 -29
  119. package/test/spec/modules/adgenerationBidAdapter_spec.js +121 -50
  120. package/test/spec/modules/adnuntiusBidAdapter_spec.js +68 -0
  121. package/test/spec/modules/adtelligentBidAdapter_spec.js +1 -0
  122. package/test/spec/modules/akamaiDapRtdProvider_spec.js +246 -0
  123. package/test/spec/modules/appnexusBidAdapter_spec.js +2 -1
  124. package/test/spec/modules/atsAnalyticsAdapter_spec.js +77 -9
  125. package/test/spec/modules/betweenBidAdapter_spec.js +41 -0
  126. package/test/spec/modules/bliinkBidAdapter_spec.js +87 -36
  127. package/test/spec/modules/browsiRtdProvider_spec.js +62 -7
  128. package/test/spec/modules/cleanioRtdProvider_spec.js +188 -0
  129. package/test/spec/modules/codefuelBidAdapter_spec.js +316 -0
  130. package/test/spec/modules/connectIdSystem_spec.js +189 -0
  131. package/test/spec/modules/cwireBidAdapter_spec.js +246 -0
  132. package/test/spec/modules/deepintentBidAdapter_spec.js +153 -3
  133. package/test/spec/modules/deltaprojectsBidAdapter_spec.js +399 -0
  134. package/test/spec/modules/engageyaBidAdapter_spec.js +286 -0
  135. package/test/spec/modules/glimpseBidAdapter_spec.js +302 -204
  136. package/test/spec/modules/gridNMBidAdapter_spec.js +40 -1
  137. package/test/spec/modules/gumgumBidAdapter_spec.js +23 -6
  138. package/test/spec/modules/iasRtdProvider_spec.js +71 -6
  139. package/test/spec/modules/ixBidAdapter_spec.js +13 -3
  140. package/test/spec/modules/jixieBidAdapter_spec.js +13 -11
  141. package/test/spec/modules/justpremiumBidAdapter_spec.js +9 -2
  142. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +155 -1
  143. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +67 -12
  144. package/test/spec/modules/mediakeysBidAdapter_spec.js +406 -51
  145. package/test/spec/modules/multibid_spec.js +31 -31
  146. package/test/spec/modules/mytargetBidAdapter_spec.js +199 -0
  147. package/test/spec/modules/nativoBidAdapter_spec.js +50 -3
  148. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +13 -1
  149. package/test/spec/modules/nextrollBidAdapter_spec.js +290 -0
  150. package/test/spec/modules/nobidBidAdapter_spec.js +65 -1
  151. package/test/spec/modules/oguryBidAdapter_spec.js +125 -37
  152. package/test/spec/modules/openxBidAdapter_spec.js +85 -13
  153. package/test/spec/modules/operaadsBidAdapter_spec.js +38 -6
  154. package/test/spec/modules/otmBidAdapter_spec.js +67 -0
  155. package/test/spec/modules/outbrainBidAdapter_spec.js +18 -0
  156. package/test/spec/modules/publinkIdSystem_spec.js +34 -15
  157. package/test/spec/modules/pubmaticBidAdapter_spec.js +217 -1
  158. package/test/spec/modules/relaidoBidAdapter_spec.js +21 -20
  159. package/test/spec/modules/sharethroughBidAdapter_spec.js +156 -136
  160. package/test/spec/modules/slimcutBidAdapter_spec.js +200 -0
  161. package/test/spec/modules/sonobiBidAdapter_spec.js +34 -1
  162. package/test/spec/modules/sortableBidAdapter_spec.js +11 -0
  163. package/test/spec/modules/spotxBidAdapter_spec.js +36 -0
  164. package/test/spec/modules/sspBCBidAdapter_spec.js +210 -62
  165. package/test/spec/modules/talkadsBidAdapter_spec.js +231 -0
  166. package/test/spec/modules/teadsBidAdapter_spec.js +132 -0
  167. package/test/spec/modules/tripleliftBidAdapter_spec.js +128 -0
  168. package/test/spec/modules/trustxBidAdapter_spec.js +38 -5
  169. package/test/spec/modules/undertoneBidAdapter_spec.js +52 -0
  170. package/test/spec/modules/unicornBidAdapter_spec.js +4 -4
  171. package/test/spec/modules/ventesBidAdapter_spec.js +845 -0
  172. package/test/spec/modules/videobyteBidAdapter_spec.js +2 -2
  173. package/test/spec/modules/visxBidAdapter_spec.js +48 -4
  174. package/test/spec/modules/yahoosspBidAdapter_spec.js +1332 -0
  175. package/test/spec/modules/yieldlabBidAdapter_spec.js +65 -1
  176. package/test/spec/modules/yieldmoBidAdapter_spec.js +30 -9
  177. package/test/spec/modules/yieldmoSyntheticInventoryModule_spec.js +89 -0
  178. package/test/spec/unit/core/adapterManager_spec.js +32 -0
  179. package/test/spec/unit/core/bidderFactory_spec.js +61 -1
  180. package/test/spec/unit/pbjs_api_spec.js +37 -2
  181. package/test/spec/unit/secureCreatives_spec.js +54 -25
  182. package/modules/turktelekomBidAdapter.md +0 -49
@@ -3,6 +3,7 @@ import {getStorageManager} from '../../../src/storageManager';
3
3
  import {server} from 'test/mocks/xhr.js';
4
4
  import sinon from 'sinon';
5
5
  import {uspDataHandler} from '../../../src/adapterManager';
6
+ import {parseUrl} from '../../../src/utils';
6
7
 
7
8
  export const storage = getStorageManager(24);
8
9
  const TEST_COOKIE_VALUE = 'cookievalue';
@@ -46,12 +47,6 @@ describe('PublinkIdSystem', () => {
46
47
  expect(result.id).to.equal(LOCAL_VALUE.publink);
47
48
  storage.removeDataFromLocalStorage(PUBLINK_COOKIE);
48
49
  });
49
- it('ignore expired cookie', () => {
50
- storage.setDataInLocalStorage(PUBLINK_COOKIE, JSON.stringify({publink: 'value', exp: Date.now() - 60 * 60 * 24 * 1000}));
51
- const result = publinkIdSubmodule.getId();
52
- expect(result.id).to.be.undefined;
53
- storage.removeDataFromLocalStorage(PUBLINK_COOKIE);
54
- });
55
50
  it('priority goes to publink_srv cookie', () => {
56
51
  storage.setCookie(PUBLINK_SRV_COOKIE, JSON.stringify(COOKIE_VALUE), COOKIE_EXPIRATION);
57
52
  storage.setDataInLocalStorage(PUBLINK_COOKIE, JSON.stringify(LOCAL_VALUE));
@@ -60,6 +55,12 @@ describe('PublinkIdSystem', () => {
60
55
  storage.setCookie(PUBLINK_SRV_COOKIE, '', DELETE_COOKIE);
61
56
  storage.removeDataFromLocalStorage(PUBLINK_COOKIE);
62
57
  });
58
+ it('publink non-json cookie', () => {
59
+ storage.setCookie(PUBLINK_COOKIE, COOKIE_VALUE.publink, COOKIE_EXPIRATION);
60
+ const result = publinkIdSubmodule.getId();
61
+ expect(result.id).to.equal(COOKIE_VALUE.publink);
62
+ storage.setCookie(PUBLINK_COOKIE, '', DELETE_COOKIE);
63
+ });
63
64
  });
64
65
 
65
66
  describe('getId', () => {
@@ -83,14 +84,22 @@ describe('PublinkIdSystem', () => {
83
84
  });
84
85
 
85
86
  it('Fetch with consent data', () => {
86
- const config = {storage: {type: 'cookie'}, params: {e: 'ca11c0ca7'}};
87
+ const config = {storage: {type: 'cookie'}, params: {e: 'ca11c0ca7', site_id: '102030'}};
87
88
  const consentData = {gdprApplies: 1, consentString: 'myconsentstring'};
88
89
  let submoduleCallback = publinkIdSubmodule.getId(config, consentData).callback;
89
90
  submoduleCallback(callbackSpy);
90
91
 
91
- let request = server.requests[0];
92
- request.url = request.url.replace(':443', '');
93
- expect(request.url).to.equal('https://proc.ad.cpe.dotomi.com/cvx/client/sync/publink?deh=ca11c0ca7&mpn=Prebid.js&mpv=$prebid.version$&gdpr=1&gdpr_consent=myconsentstring');
92
+ const request = server.requests[0];
93
+ const parsed = parseUrl(request.url);
94
+
95
+ expect(parsed.hostname).to.equal('proc.ad.cpe.dotomi.com');
96
+ expect(parsed.pathname).to.equal('/cvx/client/sync/publink');
97
+ expect(parsed.search.mpn).to.equal('Prebid.js');
98
+ expect(parsed.search.mpv).to.equal('$prebid.version$');
99
+ expect(parsed.search.gdpr).to.equal('1');
100
+ expect(parsed.search.gdpr_consent).to.equal('myconsentstring');
101
+ expect(parsed.search.sid).to.equal('102030');
102
+ expect(parsed.search.apikey).to.be.undefined;
94
103
 
95
104
  request.respond(200, {}, JSON.stringify(serverResponse));
96
105
  expect(callbackSpy.calledOnce).to.be.true;
@@ -103,8 +112,12 @@ describe('PublinkIdSystem', () => {
103
112
  submoduleCallback(callbackSpy);
104
113
 
105
114
  let request = server.requests[0];
106
- request.url = request.url.replace(':443', '');
107
- expect(request.url).to.equal('https://proc.ad.cpe.dotomi.com/cvx/client/sync/publink?deh=ca11c0ca7&mpn=Prebid.js&mpv=$prebid.version$');
115
+ const parsed = parseUrl(request.url);
116
+
117
+ expect(parsed.hostname).to.equal('proc.ad.cpe.dotomi.com');
118
+ expect(parsed.pathname).to.equal('/cvx/client/sync/publink');
119
+ expect(parsed.search.mpn).to.equal('Prebid.js');
120
+ expect(parsed.search.mpv).to.equal('$prebid.version$');
108
121
 
109
122
  request.respond(204, {}, JSON.stringify(serverResponse));
110
123
  expect(callbackSpy.called).to.be.false;
@@ -133,13 +146,19 @@ describe('PublinkIdSystem', () => {
133
146
  });
134
147
 
135
148
  it('Fetch with usprivacy data', () => {
136
- const config = {storage: {type: 'cookie'}, params: {e: 'ca11c0ca7'}};
149
+ const config = {storage: {type: 'cookie'}, params: {e: 'ca11c0ca7', api_key: 'abcdefg'}};
137
150
  let submoduleCallback = publinkIdSubmodule.getId(config).callback;
138
151
  submoduleCallback(callbackSpy);
139
152
 
140
153
  let request = server.requests[0];
141
- request.url = request.url.replace(':443', '');
142
- expect(request.url).to.equal('https://proc.ad.cpe.dotomi.com/cvx/client/sync/publink?deh=ca11c0ca7&mpn=Prebid.js&mpv=$prebid.version$&us_privacy=1YNN');
154
+ const parsed = parseUrl(request.url);
155
+
156
+ expect(parsed.hostname).to.equal('proc.ad.cpe.dotomi.com');
157
+ expect(parsed.pathname).to.equal('/cvx/client/sync/publink');
158
+ expect(parsed.search.mpn).to.equal('Prebid.js');
159
+ expect(parsed.search.mpv).to.equal('$prebid.version$');
160
+ expect(parsed.search.us_privacy).to.equal('1YNN');
161
+ expect(parsed.search.apikey).to.equal('abcdefg');
143
162
 
144
163
  request.respond(200, {}, JSON.stringify(serverResponse));
145
164
  expect(callbackSpy.calledOnce).to.be.true;
@@ -1,5 +1,5 @@
1
1
  import {expect} from 'chai';
2
- import {spec} from 'modules/pubmaticBidAdapter.js';
2
+ import {spec, checkVideoPlacement} from 'modules/pubmaticBidAdapter.js';
3
3
  import * as utils from 'src/utils.js';
4
4
  import {config} from 'src/config.js';
5
5
  import { createEidsArray } from 'modules/userId/eids.js';
@@ -3644,5 +3644,221 @@ describe('PubMatic adapter', function () {
3644
3644
  }]);
3645
3645
  });
3646
3646
  });
3647
+
3648
+ describe('JW player segment data for S2S', function() {
3649
+ let sandbox = sinon.sandbox.create();
3650
+ beforeEach(function () {
3651
+ sandbox = sinon.sandbox.create();
3652
+ });
3653
+ afterEach(function() {
3654
+ sandbox.restore();
3655
+ });
3656
+ it('Should append JW player segment data to dctr values in auction endpoint', function() {
3657
+ var videoAdUnit = {
3658
+ 'bidderCode': 'pubmatic',
3659
+ 'bids': [
3660
+ {
3661
+ 'bidder': 'pubmatic',
3662
+ 'params': {
3663
+ 'publisherId': '156276',
3664
+ 'adSlot': 'pubmatic_video2',
3665
+ 'dctr': 'key1=123|key2=345',
3666
+ 'pmzoneid': '1243',
3667
+ 'video': {
3668
+ 'mimes': ['video/mp4', 'video/x-flv'],
3669
+ 'skippable': true,
3670
+ 'minduration': 5,
3671
+ 'maxduration': 30,
3672
+ 'startdelay': 5,
3673
+ 'playbackmethod': [1, 3],
3674
+ 'api': [1, 2],
3675
+ 'protocols': [2, 3],
3676
+ 'battr': [13, 14],
3677
+ 'linearity': 1,
3678
+ 'placement': 2,
3679
+ 'minbitrate': 10,
3680
+ 'maxbitrate': 10
3681
+ }
3682
+ },
3683
+ 'rtd': {
3684
+ 'jwplayer': {
3685
+ 'targeting': {
3686
+ 'segments': ['80011026', '80011035'],
3687
+ 'content': {
3688
+ 'id': 'jw_d9J2zcaA'
3689
+ }
3690
+ }
3691
+ }
3692
+ },
3693
+ 'bid_id': '17a6771be26cc4',
3694
+ 'ortb2Imp': {
3695
+ 'ext': {
3696
+ 'data': {
3697
+ 'pbadslot': 'abcd',
3698
+ 'jwTargeting': {
3699
+ 'playerID': 'myElement1',
3700
+ 'mediaID': 'd9J2zcaA'
3701
+ }
3702
+ }
3703
+ }
3704
+ }
3705
+ }
3706
+ ],
3707
+ 'auctionStart': 1630923178417,
3708
+ 'timeout': 1000,
3709
+ 'src': 's2s'
3710
+ }
3711
+
3712
+ spec.transformBidParams(bidRequests[0].params, true, videoAdUnit);
3713
+ expect(bidRequests[0].params.dctr).to.equal('key1:val1,val2|key2:val1|jw-id=jw_d9J2zcaA|jw-80011026=1|jw-80011035=1');
3714
+ });
3715
+ it('Should send only JW player segment data in auction endpoint, if dctr is missing', function() {
3716
+ var videoAdUnit = {
3717
+ 'bidderCode': 'pubmatic',
3718
+ 'bids': [
3719
+ {
3720
+ 'bidder': 'pubmatic',
3721
+ 'params': {
3722
+ 'publisherId': '156276',
3723
+ 'adSlot': 'pubmatic_video2',
3724
+ 'dctr': 'key1=123|key2=345',
3725
+ 'pmzoneid': '1243',
3726
+ 'video': {
3727
+ 'mimes': ['video/mp4', 'video/x-flv'],
3728
+ 'skippable': true,
3729
+ 'minduration': 5,
3730
+ 'maxduration': 30,
3731
+ 'startdelay': 5,
3732
+ 'playbackmethod': [1, 3],
3733
+ 'api': [1, 2],
3734
+ 'protocols': [2, 3],
3735
+ 'battr': [13, 14],
3736
+ 'linearity': 1,
3737
+ 'placement': 2,
3738
+ 'minbitrate': 10,
3739
+ 'maxbitrate': 10
3740
+ }
3741
+ },
3742
+ 'rtd': {
3743
+ 'jwplayer': {
3744
+ 'targeting': {
3745
+ 'segments': ['80011026', '80011035'],
3746
+ 'content': {
3747
+ 'id': 'jw_d9J2zcaA'
3748
+ }
3749
+ }
3750
+ }
3751
+ },
3752
+ 'bid_id': '17a6771be26cc4',
3753
+ 'ortb2Imp': {
3754
+ 'ext': {
3755
+ 'data': {
3756
+ 'pbadslot': 'abcd',
3757
+ 'jwTargeting': {
3758
+ 'playerID': 'myElement1',
3759
+ 'mediaID': 'd9J2zcaA'
3760
+ }
3761
+ }
3762
+ }
3763
+ }
3764
+ }
3765
+ ],
3766
+ 'auctionStart': 1630923178417,
3767
+ 'timeout': 1000,
3768
+ 'src': 's2s'
3769
+ }
3770
+
3771
+ delete bidRequests[0].params.dctr;
3772
+ spec.transformBidParams(bidRequests[0].params, true, videoAdUnit);
3773
+ expect(bidRequests[0].params.dctr).to.equal('jw-id=jw_d9J2zcaA|jw-80011026=1|jw-80011035=1');
3774
+ });
3775
+
3776
+ it('Should not send any JW player segment data in auction endpoint, if it is not available', function() {
3777
+ var videoAdUnit = {
3778
+ 'bidderCode': 'pubmatic',
3779
+ 'bids': [
3780
+ {
3781
+ 'bidder': 'pubmatic',
3782
+ 'params': {
3783
+ 'publisherId': '156276',
3784
+ 'adSlot': 'pubmatic_video2',
3785
+ 'dctr': 'key1=123|key2=345',
3786
+ 'pmzoneid': '1243',
3787
+ 'video': {
3788
+ 'mimes': ['video/mp4', 'video/x-flv'],
3789
+ 'skippable': true,
3790
+ 'minduration': 5,
3791
+ 'maxduration': 30,
3792
+ 'startdelay': 5,
3793
+ 'playbackmethod': [1, 3],
3794
+ 'api': [1, 2],
3795
+ 'protocols': [2, 3],
3796
+ 'battr': [13, 14],
3797
+ 'linearity': 1,
3798
+ 'placement': 2,
3799
+ 'minbitrate': 10,
3800
+ 'maxbitrate': 10
3801
+ }
3802
+ },
3803
+ 'bid_id': '17a6771be26cc4',
3804
+ 'ortb2Imp': {
3805
+ 'ext': {
3806
+ 'data': {
3807
+ 'pbadslot': 'abcd',
3808
+ 'jwTargeting': {
3809
+ 'playerID': 'myElement1',
3810
+ 'mediaID': 'd9J2zcaA'
3811
+ }
3812
+ }
3813
+ }
3814
+ }
3815
+ }
3816
+ ],
3817
+ 'auctionStart': 1630923178417,
3818
+ 'timeout': 1000,
3819
+ 'src': 's2s'
3820
+ }
3821
+ spec.transformBidParams(bidRequests[0].params, true, videoAdUnit);
3822
+ expect(bidRequests[0].params.dctr).to.equal('key1:val1,val2|key2:val1');
3823
+ });
3824
+ })
3825
+
3826
+ describe('Checking for Video.Placement property', function() {
3827
+ let sandbox, utilsMock;
3828
+ const adUnit = 'Div1';
3829
+ const msg_placement_missing = 'Video.Placement param missing for Div1';
3830
+ let videoData = {
3831
+ battr: [6, 7],
3832
+ skipafter: 15,
3833
+ maxduration: 50,
3834
+ context: 'instream',
3835
+ playerSize: [640, 480],
3836
+ skip: 0,
3837
+ connectiontype: [1, 2, 6],
3838
+ skipmin: 10,
3839
+ minduration: 10,
3840
+ mimes: ['video/mp4', 'video/x-flv'],
3841
+ }
3842
+ beforeEach(() => {
3843
+ utilsMock = sinon.mock(utils);
3844
+ sandbox = sinon.sandbox.create();
3845
+ sandbox.spy(utils, 'logWarn');
3846
+ });
3847
+
3848
+ afterEach(() => {
3849
+ utilsMock.restore();
3850
+ sandbox.restore();
3851
+ })
3852
+
3853
+ it('should log Video.Placement param missing', function() {
3854
+ checkVideoPlacement(videoData, adUnit);
3855
+ sinon.assert.calledWith(utils.logWarn, msg_placement_missing);
3856
+ })
3857
+ it('shoud not log Video.Placement param missing', function() {
3858
+ videoData['placement'] = 1;
3859
+ checkVideoPlacement(videoData, adUnit);
3860
+ sinon.assert.neverCalledWith(utils.logWarn, msg_placement_missing);
3861
+ })
3862
+ });
3647
3863
  });
3648
3864
  });
@@ -20,8 +20,12 @@ describe('RelaidoAdapter', function () {
20
20
  let bidderRequest;
21
21
  let serverResponse;
22
22
  let serverRequest;
23
+ let generateUUIDStub;
24
+ let triggerPixelStub;
23
25
 
24
26
  beforeEach(function () {
27
+ generateUUIDStub = sinon.stub(utils, 'generateUUID').returns(relaido_uuid);
28
+ triggerPixelStub = sinon.stub(utils, 'triggerPixel');
25
29
  bidRequest = {
26
30
  bidder: 'relaido',
27
31
  params: {
@@ -73,6 +77,11 @@ describe('RelaidoAdapter', function () {
73
77
  };
74
78
  });
75
79
 
80
+ afterEach(() => {
81
+ generateUUIDStub.restore();
82
+ triggerPixelStub.restore();
83
+ });
84
+
76
85
  describe('spec.isBidRequestValid', function () {
77
86
  it('should return true when the required params are passed by video', function () {
78
87
  expect(spec.isBidRequestValid(bidRequest)).to.equal(true);
@@ -207,6 +216,7 @@ describe('RelaidoAdapter', function () {
207
216
  expect(request.data.uuid).to.equal(relaido_uuid);
208
217
  expect(request.data.width).to.equal(bidRequest.mediaTypes.video.playerSize[0][0]);
209
218
  expect(request.data.height).to.equal(bidRequest.mediaTypes.video.playerSize[0][1]);
219
+ expect(request.data.pv).to.equal('$prebid.version$');
210
220
  });
211
221
 
212
222
  it('should build bid requests by banner', function () {
@@ -251,8 +261,6 @@ describe('RelaidoAdapter', function () {
251
261
  expect(bidRequests).to.have.lengthOf(1);
252
262
  const request = bidRequests[0];
253
263
 
254
- // eslint-disable-next-line no-console
255
- console.log(bidRequests);
256
264
  expect(request.width).to.equal(1);
257
265
  });
258
266
 
@@ -264,6 +272,15 @@ describe('RelaidoAdapter', function () {
264
272
  expect(keys[0]).to.equal('version');
265
273
  expect(keys[keys.length - 1]).to.equal('ref');
266
274
  });
275
+
276
+ it('should get imuid', function () {
277
+ bidRequest.userId = {}
278
+ bidRequest.userId.imuid = 'i.tjHcK_7fTcqnbrS_YA2vaw';
279
+ const bidRequests = spec.buildRequests([bidRequest], bidderRequest);
280
+ expect(bidRequests).to.have.lengthOf(1);
281
+ const request = bidRequests[0];
282
+ expect(request.data.imuid).to.equal('i.tjHcK_7fTcqnbrS_YA2vaw');
283
+ });
267
284
  });
268
285
 
269
286
  describe('spec.interpretResponse', function () {
@@ -350,14 +367,6 @@ describe('RelaidoAdapter', function () {
350
367
  });
351
368
 
352
369
  describe('spec.onBidWon', function () {
353
- let stub;
354
- beforeEach(() => {
355
- stub = sinon.stub(utils, 'triggerPixel');
356
- });
357
- afterEach(() => {
358
- stub.restore();
359
- });
360
-
361
370
  it('Should create nurl pixel if bid nurl', function () {
362
371
  let bid = {
363
372
  bidder: bidRequest.bidder,
@@ -371,7 +380,7 @@ describe('RelaidoAdapter', function () {
371
380
  ref: window.location.href,
372
381
  }
373
382
  spec.onBidWon(bid);
374
- const parser = utils.parseUrl(stub.getCall(0).args[0]);
383
+ const parser = utils.parseUrl(triggerPixelStub.getCall(0).args[0]);
375
384
  const query = parser.search;
376
385
  expect(parser.hostname).to.equal('api.relaido.jp');
377
386
  expect(parser.pathname).to.equal('/tr/v1/prebid/win.gif');
@@ -387,14 +396,6 @@ describe('RelaidoAdapter', function () {
387
396
  });
388
397
 
389
398
  describe('spec.onTimeout', function () {
390
- let stub;
391
- beforeEach(() => {
392
- stub = sinon.stub(utils, 'triggerPixel');
393
- });
394
- afterEach(() => {
395
- stub.restore();
396
- });
397
-
398
399
  it('Should create nurl pixel if bid nurl', function () {
399
400
  const data = [{
400
401
  bidder: bidRequest.bidder,
@@ -405,7 +406,7 @@ describe('RelaidoAdapter', function () {
405
406
  timeout: bidderRequest.timeout,
406
407
  }];
407
408
  spec.onTimeout(data);
408
- const parser = utils.parseUrl(stub.getCall(0).args[0]);
409
+ const parser = utils.parseUrl(triggerPixelStub.getCall(0).args[0]);
409
410
  const query = parser.search;
410
411
  expect(parser.hostname).to.equal('api.relaido.jp');
411
412
  expect(parser.pathname).to.equal('/tr/v1/prebid/timeout.gif');