11import * as utils from '../src/utils.js' ;
22import { BANNER , VIDEO } from '../src/mediaTypes.js' ;
33import { registerBidder } from '../src/adapters/bidderFactory.js' ;
4+ import { Renderer } from '../src/Renderer.js' ;
45import includes from 'core-js-pure/features/array/includes' ;
5- import find from 'core-js-pure/features/array/find.js' ;
66
77const BIDDER_CODE = 'yieldmo' ;
88const CURRENCY = 'USD' ;
99const TIME_TO_LIVE = 300 ;
1010const NET_REVENUE = true ;
1111const BANNER_SERVER_ENDPOINT = 'https://ads.yieldmo.com/exchange/prebid' ;
1212const VIDEO_SERVER_ENDPOINT = 'https://ads.yieldmo.com/exchange/prebidvideo' ;
13+ const OUTSTREAM_VIDEO_PLAYER_URL = 'https://prebid-outstream.yieldmo.com/bundle.js' ;
1314const OPENRTB_VIDEO_BIDPARAMS = [ 'placement' , 'startdelay' , 'skipafter' ,
1415 'protocols' , 'api' , 'playbackmethod' , 'maxduration' , 'minduration' , 'pos' ] ;
1516const OPENRTB_VIDEO_SITEPARAMS = [ 'name' , 'domain' , 'cat' , 'keywords' ] ;
1617const localWindow = utils . getWindowTop ( ) ;
18+ const DEFAULT_PLAYBACK_METHOD = 2 ;
19+ const VAST_TIMEOUT = 5000 ;
1720
1821export const spec = {
1922 code : BIDDER_CODE ,
@@ -198,8 +201,9 @@ function createNewBannerBid(response) {
198201 * @param bidRequest server request
199202 */
200203function createNewVideoBid ( response , bidRequest ) {
201- const imp = find ( ( utils . deepAccess ( bidRequest , 'data.imp' ) || [ ] ) , imp => imp . id === response . impid ) ;
202- return {
204+ const imp = ( utils . deepAccess ( bidRequest , 'data.imp' ) || [ ] ) . find ( imp => imp . id === response . impid ) ;
205+
206+ let result = {
203207 requestId : imp . id ,
204208 cpm : response . price ,
205209 width : imp . video . w ,
@@ -211,6 +215,52 @@ function createNewVideoBid(response, bidRequest) {
211215 ttl : TIME_TO_LIVE ,
212216 vastXml : response . adm
213217 } ;
218+
219+ const playbackmethodMap = [
220+ {
221+ preload : true ,
222+ mute : false ,
223+ autoPlay : true
224+ } ,
225+ {
226+ preload : true ,
227+ mute : true ,
228+ autoPlay : true
229+ }
230+ ] ;
231+
232+ if ( imp . placement !== 1 ) {
233+ const receivedPlaybackMethod = imp . video . playbackmethod [ 0 ] || DEFAULT_PLAYBACK_METHOD ;
234+ const playbackIdx = ( receivedPlaybackMethod >= 1 && receivedPlaybackMethod <= 2 )
235+ ? receivedPlaybackMethod - 1
236+ : 0 ;
237+
238+ const renderer = Renderer . install ( {
239+ url : OUTSTREAM_VIDEO_PLAYER_URL ,
240+ config : {
241+ width : result . width ,
242+ height : result . height ,
243+ vastTimeout : VAST_TIMEOUT ,
244+ maxAllowedVastTagRedirects : 3 ,
245+ allowVpaid : false ,
246+ autoPlay : true ,
247+ ...playbackmethodMap [ playbackIdx ]
248+ } ,
249+ id : imp . tagid ,
250+ loaded : false ,
251+ } ) ;
252+
253+ renderer . setRender ( function ( bid ) {
254+ bid . renderer . push ( ( ) => {
255+ const { id, config } = bid . renderer ;
256+ window . YMoutstreamPlayer ( bid , id , config ) ;
257+ } ) ;
258+ } ) ;
259+
260+ result . renderer = renderer ;
261+ }
262+
263+ return result ;
214264}
215265
216266/**
@@ -457,3 +507,4 @@ function validateVideoParams(bid) {
457507 return false ;
458508 }
459509}
510+
0 commit comments