From 2e7768d9bb1593a6b8fa0ac43f1fff7af70727e3 Mon Sep 17 00:00:00 2001 From: Neelanjan Sen <14229985+Fawke@users.noreply.github.com> Date: Mon, 13 Apr 2020 17:05:20 +0530 Subject: [PATCH] Revert "Add Relaido Adapter (#5101)" This reverts commit 06045585979e00430ef142eb58fa1ee0582fa1a4. --- modules/relaidoBidAdapter.js | 303 ------------------ modules/relaidoBidAdapter.md | 48 --- test/spec/modules/relaidoBidAdapter_spec.js | 324 -------------------- 3 files changed, 675 deletions(-) delete mode 100644 modules/relaidoBidAdapter.js delete mode 100644 modules/relaidoBidAdapter.md delete mode 100644 test/spec/modules/relaidoBidAdapter_spec.js diff --git a/modules/relaidoBidAdapter.js b/modules/relaidoBidAdapter.js deleted file mode 100644 index 22551877a93..00000000000 --- a/modules/relaidoBidAdapter.js +++ /dev/null @@ -1,303 +0,0 @@ -import * as utils from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { BANNER, VIDEO } from '../src/mediaTypes.js'; -import { Renderer } from '../src/Renderer.js'; -import { getStorageManager } from '../src/storageManager.js'; - -const BIDDER_CODE = 'relaido'; -const BIDDER_DOMAIN = 'api.relaido.jp'; -const ADAPTER_VERSION = '1.0.0'; -const DEFAULT_TTL = 300; -const UUID_KEY = 'relaido_uuid'; - -const storage = getStorageManager(); - -function isBidRequestValid(bid) { - if (!utils.isSafariBrowser() && !hasUuid()) { - utils.logWarn('uuid is not found.'); - return false; - } - if (!utils.deepAccess(bid, 'params.placementId')) { - utils.logWarn('placementId param is reqeuired.'); - return false; - } - if (hasVideoMediaType(bid)) { - if (!isVideoValid(bid)) { - utils.logWarn('Invalid mediaType video.'); - return false; - } - } else if (hasBannerMediaType(bid)) { - if (!isBannerValid(bid)) { - utils.logWarn('Invalid mediaType banner.'); - return false; - } - } else { - utils.logWarn('Invalid mediaTypes input banner or video.'); - return false; - } - return true; -} - -function buildRequests(validBidRequests, bidderRequest) { - let bidRequests = []; - - for (let i = 0; i < validBidRequests.length; i++) { - const bidRequest = validBidRequests[i]; - const placementId = utils.getBidIdParameter('placementId', bidRequest.params); - const bidDomain = bidRequest.params.domain || BIDDER_DOMAIN; - const bidUrl = `https://${bidDomain}/vast/v1/out/bid/${placementId}`; - const uuid = getUuid(); - const mediaType = getMediaType(bidRequest); - - let payload = { - version: ADAPTER_VERSION, - ref: bidderRequest.refererInfo.referer, - timeout_ms: bidderRequest.timeout, - ad_unit_code: bidRequest.adUnitCode, - auction_id: bidRequest.auctionId, - bidder: bidRequest.bidder, - bidder_request_id: bidRequest.bidderRequestId, - bid_requests_count: bidRequest.bidRequestsCount, - bid_id: bidRequest.bidId, - transaction_id: bidRequest.transactionId, - media_type: mediaType, - uuid: uuid, - }; - - if (hasVideoMediaType(bidRequest)) { - const playerSize = utils.deepAccess(bidRequest, 'mediaTypes.video.playerSize'); - payload.width = playerSize[0][0]; - payload.height = playerSize[0][1]; - } else if (hasBannerMediaType(bidRequest)) { - const sizes = utils.deepAccess(bidRequest, 'mediaTypes.banner.sizes'); - payload.width = sizes[0][0]; - payload.height = sizes[0][1]; - } - - bidRequests.push({ - method: 'GET', - url: bidUrl, - data: payload, - options: { - withCredentials: true - }, - bidId: bidRequest.bidId, - player: bidRequest.params.player, - width: payload.width, - height: payload.height, - mediaType: mediaType, - }); - } - - return bidRequests; -} - -function interpretResponse(serverResponse, bidRequest) { - const bidResponses = []; - const body = serverResponse.body; - if (!body || body.status != 'ok') { - return []; - } - - if (body.uuid) { - storage.setDataInLocalStorage(UUID_KEY, body.uuid); - } - - const playerUrl = bidRequest.player || body.playerUrl; - const mediaType = bidRequest.mediaType || VIDEO; - - let bidResponse = { - requestId: bidRequest.bidId, - width: bidRequest.width, - height: bidRequest.height, - cpm: body.price, - currency: body.currency, - creativeId: body.creativeId, - dealId: body.dealId || '', - ttl: body.ttl || DEFAULT_TTL, - netRevenue: true, - mediaType: mediaType, - }; - if (mediaType === VIDEO) { - bidResponse.vastXml = body.vast; - bidResponse.renderer = newRenderer(bidRequest.bidId, playerUrl); - } else { - const playerTag = createPlayerTag(playerUrl); - const renderTag = createRenderTag(bidRequest.width, bidRequest.height, body.vast); - bidResponse.ad = `
${playerTag}${renderTag}
`; - } - bidResponses.push(bidResponse); - - return bidResponses; -} - -function getUserSyncs(syncOptions, serverResponses) { - if (!syncOptions.iframeEnabled) { - return []; - } - let syncUrl = `https://${BIDDER_DOMAIN}/tr/v1/prebid/sync.html`; - if (serverResponses.length > 0) { - syncUrl = utils.deepAccess(serverResponses, '0.body.syncUrl') || syncUrl; - } - receiveMessage(); - return [{ - type: 'iframe', - url: syncUrl - }]; -} - -function onBidWon(bid) { - let query = utils.parseQueryStringParameters({ - placement_id: utils.deepAccess(bid, 'params.0.placementId'), - creative_id: utils.deepAccess(bid, 'creativeId'), - price: utils.deepAccess(bid, 'cpm'), - auction_id: utils.deepAccess(bid, 'auctionId'), - bid_id: utils.deepAccess(bid, 'requestId'), - ad_id: utils.deepAccess(bid, 'adId'), - ad_unit_code: utils.deepAccess(bid, 'adUnitCode'), - ref: window.location.href, - }).replace(/\&$/, ''); - const bidDomain = utils.deepAccess(bid, 'params.0.domain') || BIDDER_DOMAIN; - const burl = `https://${bidDomain}/tr/v1/prebid/win.gif?${query}`; - utils.triggerPixel(burl); -} - -function onTimeout(data) { - let query = utils.parseQueryStringParameters({ - placement_id: utils.deepAccess(data, '0.params.0.placementId'), - timeout: utils.deepAccess(data, '0.timeout'), - auction_id: utils.deepAccess(data, '0.auctionId'), - bid_id: utils.deepAccess(data, '0.bidId'), - ad_unit_code: utils.deepAccess(data, '0.adUnitCode'), - ref: window.location.href, - }).replace(/\&$/, ''); - const bidDomain = utils.deepAccess(data, '0.params.0.domain') || BIDDER_DOMAIN; - const timeoutUrl = `https://${bidDomain}/tr/v1/prebid/timeout.gif?${query}`; - utils.triggerPixel(timeoutUrl); -} - -function createPlayerTag(playerUrl) { - return ``; -} - -function createRenderTag(width, height, vast) { - return ``; -}; - -function newRenderer(bidId, playerUrl) { - const renderer = Renderer.install({ - id: bidId, - url: playerUrl, - loaded: false - }); - try { - renderer.setRender(outstreamRender); - } catch (err) { - utils.logWarn('renderer.setRender Error', err); - } - return renderer; -} - -function outstreamRender(bid) { - bid.renderer.push(() => { - window.RelaidoPlayer.renderAd({ - adUnitCode: bid.adUnitCode, - width: bid.width, - height: bid.height, - vastXml: bid.vastXml, - mediaType: bid.mediaType, - }); - }); -} - -function receiveMessage() { - window.addEventListener('message', setUuid); -} - -function setUuid(e) { - if (utils.isPlainObject(e.data) && e.data.relaido_uuid) { - storage.setDataInLocalStorage(UUID_KEY, e.data.relaido_uuid); - window.removeEventListener('message', setUuid); - } -} - -function isBannerValid(bid) { - if (!isMobile()) { - return false; - } - const sizes = utils.deepAccess(bid, 'mediaTypes.banner.sizes'); - if (sizes && utils.isArray(sizes)) { - if (utils.isArray(sizes[0])) { - const width = sizes[0][0]; - const height = sizes[0][1]; - if (width >= 300 && height >= 250) { - return true; - } - } - } - return false; -} - -function isVideoValid(bid) { - const playerSize = utils.deepAccess(bid, 'mediaTypes.video.playerSize'); - if (playerSize && utils.isArray(playerSize) && playerSize.length > 0) { - const context = utils.deepAccess(bid, 'mediaTypes.video.context'); - if (context && context === 'outstream') { - return true; - } - } - return false; -} - -function hasUuid() { - return !!storage.getDataFromLocalStorage(UUID_KEY); -} - -function getUuid() { - return storage.getDataFromLocalStorage(UUID_KEY) || ''; -} - -export function isMobile() { - const ua = navigator.userAgent; - if (ua.indexOf('iPhone') > -1 || ua.indexOf('iPod') > -1 || (ua.indexOf('Android') > -1 && ua.indexOf('Tablet') == -1)) { - return true; - } - return false; -} - -function getMediaType(bid) { - if (hasVideoMediaType(bid)) { - return VIDEO; - } else if (hasBannerMediaType(bid)) { - return BANNER; - } - return ''; -} - -function hasBannerMediaType(bid) { - return !!utils.deepAccess(bid, 'mediaTypes.banner'); -} - -function hasVideoMediaType(bid) { - return !!utils.deepAccess(bid, 'mediaTypes.video'); -} - -export const spec = { - code: BIDDER_CODE, - supportedMediaTypes: [BANNER, VIDEO], - isBidRequestValid, - buildRequests, - interpretResponse, - getUserSyncs: getUserSyncs, - onBidWon, - onTimeout -} - -registerBidder(spec); diff --git a/modules/relaidoBidAdapter.md b/modules/relaidoBidAdapter.md deleted file mode 100644 index 459f772c66b..00000000000 --- a/modules/relaidoBidAdapter.md +++ /dev/null @@ -1,48 +0,0 @@ -# Overview - -``` -Module Name: Relaido Bidder Adapter -Module Type: Bidder Adapter -Maintainer: video-dev@cg.relaido.co.jp -``` - -# Description - -Connects to Relaido exchange for bids. - -Relaido bid adapter supports Outstream Video. - -# Test Parameters - -```javascript - var adUnits=[{ - code: 'banner-ad-div', - mediaTypes: { - banner: { - sizes: [ - [300, 250] - ] - } - }, - bids: [{ - bidder: 'relaido', - params: { - placementId: '9900' - } - }] - },{ - code: 'video-ad-player', - mediaTypes: { - video: { - context: 'outstream', - playerSize: [640, 360] - } - }, - bids: [{ - bidder: 'relaido', - params: { - placementId: '9900' - } - }] - }]; -``` \ No newline at end of file diff --git a/test/spec/modules/relaidoBidAdapter_spec.js b/test/spec/modules/relaidoBidAdapter_spec.js deleted file mode 100644 index 8e72548cc1f..00000000000 --- a/test/spec/modules/relaidoBidAdapter_spec.js +++ /dev/null @@ -1,324 +0,0 @@ -import { expect } from 'chai'; -import { spec } from 'modules/relaidoBidAdapter.js'; -import * as url from 'src/url.js'; -import * as utils from 'src/utils.js'; - -const UUID_KEY = 'relaido_uuid'; -const DEFAULT_USER_AGENT = window.navigator.userAgent; -const MOBILE_USER_AGENT = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Mobile/15E148 Safari/604.1'; - -const setUADefault = () => { window.navigator.__defineGetter__('userAgent', function () { return DEFAULT_USER_AGENT }) }; -const setUAMobile = () => { window.navigator.__defineGetter__('userAgent', function () { return MOBILE_USER_AGENT }) }; - -describe('RelaidoAdapter', function () { - const relaido_uuid = 'hogehoge'; - let bidRequest; - let bidderRequest; - let serverResponse; - let serverRequest; - - beforeEach(function () { - bidRequest = { - bidder: 'relaido', - params: { - placementId: '100000', - }, - mediaTypes: { - video: { - context: 'outstream', - playerSize: [ - [640, 360] - ] - } - }, - adUnitCode: 'test', - bidId: '2ed93003f7bb99', - bidderRequestId: '1c50443387a1f2', - auctionId: '413ed000-8c7a-4ba1-a1fa-9732e006f8c3', - transactionId: '5c2d064c-7b76-42e8-a383-983603afdc45', - bidRequestsCount: 1, - bidderRequestsCount: 1, - bidderWinsCount: 0 - }; - bidderRequest = { - timeout: 1000, - refererInfo: { - referer: 'https://publisher.com/home' - } - }; - serverResponse = { - body: { - status: 'ok', - price: 500, - model: 'vcpm', - currency: 'JPY', - creativeId: 1000, - uuid: relaido_uuid, - vast: '', - playerUrl: 'https://relaido/player.js', - syncUrl: 'https://relaido/sync.html' - } - }; - serverRequest = { - method: 'GET', - bidId: bidRequest.bidId, - width: bidRequest.mediaTypes.video.playerSize[0][0], - height: bidRequest.mediaTypes.video.playerSize[0][1], - mediaType: 'video', - }; - localStorage.setItem(UUID_KEY, relaido_uuid); - }); - - describe('spec.isBidRequestValid', function () { - it('should return true when the required params are passed by video', function () { - expect(spec.isBidRequestValid(bidRequest)).to.equal(true); - }); - - it('should return true when the required params are passed by banner', function () { - setUAMobile(); - bidRequest.mediaTypes = { - banner: { - sizes: [ - [300, 250] - ] - } - }; - expect(spec.isBidRequestValid(bidRequest)).to.equal(true); - setUADefault(); - }); - - it('should return false when the uuid are missing', function () { - localStorage.removeItem(UUID_KEY); - const result = !!(utils.isSafariBrowser()); - expect(spec.isBidRequestValid(bidRequest)).to.equal(result); - }); - - it('should return false when the placementId params are missing', function () { - bidRequest.params.placementId = undefined; - expect(spec.isBidRequestValid(bidRequest)).to.equal(false); - }); - - it('should return false when the mediaType video params are missing', function () { - bidRequest.mediaTypes = { - video: {} - }; - expect(spec.isBidRequestValid(bidRequest)).to.equal(false); - }); - - it('should return false when the mediaType banner params are missing', function () { - setUAMobile(); - bidRequest.mediaTypes = { - banner: {} - }; - expect(spec.isBidRequestValid(bidRequest)).to.equal(false); - setUADefault(); - }); - - it('should return false when the non-mobile', function () { - bidRequest.mediaTypes = { - banner: { - sizes: [ - [300, 250] - ] - } - }; - expect(spec.isBidRequestValid(bidRequest)).to.equal(false); - }); - - it('should return false when the mediaTypes params are missing', function () { - bidRequest.mediaTypes = {}; - expect(spec.isBidRequestValid(bidRequest)).to.equal(false); - }); - }); - - describe('spec.buildRequests', function () { - it('should build bid requests by video', function () { - const bidRequests = spec.buildRequests([bidRequest], bidderRequest); - expect(bidRequests).to.have.lengthOf(1); - const request = bidRequests[0]; - expect(request.method).to.equal('GET'); - expect(request.url).to.equal('https://api.relaido.jp/vast/v1/out/bid/100000'); - expect(request.bidId).to.equal(bidRequest.bidId); - expect(request.width).to.equal(bidRequest.mediaTypes.video.playerSize[0][0]); - expect(request.height).to.equal(bidRequest.mediaTypes.video.playerSize[0][1]); - expect(request.mediaType).to.equal('video'); - expect(request.data.ref).to.equal(bidderRequest.refererInfo.referer); - expect(request.data.timeout_ms).to.equal(bidderRequest.timeout); - expect(request.data.ad_unit_code).to.equal(bidRequest.adUnitCode); - expect(request.data.auction_id).to.equal(bidRequest.auctionId); - expect(request.data.bidder).to.equal(bidRequest.bidder); - expect(request.data.bidder_request_id).to.equal(bidRequest.bidderRequestId); - expect(request.data.bid_requests_count).to.equal(bidRequest.bidRequestsCount); - expect(request.data.bid_id).to.equal(bidRequest.bidId); - expect(request.data.transaction_id).to.equal(bidRequest.transactionId); - expect(request.data.media_type).to.equal('video'); - expect(request.data.uuid).to.equal(relaido_uuid); - expect(request.data.width).to.equal(bidRequest.mediaTypes.video.playerSize[0][0]); - expect(request.data.height).to.equal(bidRequest.mediaTypes.video.playerSize[0][1]); - }); - - it('should build bid requests by banner', function () { - bidRequest.mediaTypes = { - banner: { - sizes: [ - [640, 360] - ] - } - }; - const bidRequests = spec.buildRequests([bidRequest], bidderRequest); - expect(bidRequests).to.have.lengthOf(1); - const request = bidRequests[0]; - expect(request.mediaType).to.equal('banner'); - }); - }); - - describe('spec.interpretResponse', function () { - it('should build bid response by video', function () { - const bidResponses = spec.interpretResponse(serverResponse, serverRequest); - expect(bidResponses).to.have.lengthOf(1); - const response = bidResponses[0]; - expect(response.requestId).to.equal(serverRequest.bidId); - expect(response.width).to.equal(serverRequest.width); - expect(response.height).to.equal(serverRequest.height); - expect(response.cpm).to.equal(serverResponse.body.price); - expect(response.currency).to.equal(serverResponse.body.currency); - expect(response.creativeId).to.equal(serverResponse.body.creativeId); - expect(response.vastXml).to.equal(serverResponse.body.vast); - expect(response.ad).to.be.undefined; - }); - - it('should build bid response by banner', function () { - serverRequest.mediaType = 'banner'; - const bidResponses = spec.interpretResponse(serverResponse, serverRequest); - expect(bidResponses).to.have.lengthOf(1); - const response = bidResponses[0]; - expect(response.requestId).to.equal(serverRequest.bidId); - expect(response.width).to.equal(serverRequest.width); - expect(response.height).to.equal(serverRequest.height); - expect(response.cpm).to.equal(serverResponse.body.price); - expect(response.currency).to.equal(serverResponse.body.currency); - expect(response.creativeId).to.equal(serverResponse.body.creativeId); - expect(response.vastXml).to.be.undefined; - expect(response.ad).to.include(`
`); - expect(response.ad).to.include(``); - expect(response.ad).to.include(`window.RelaidoPlayer.renderAd`); - }); - - it('should not build bid response', function () { - serverResponse = {}; - const bidResponses = spec.interpretResponse(serverResponse, serverRequest); - expect(bidResponses).to.have.lengthOf(0); - }); - - it('should not build bid response', function () { - serverResponse = { - body: { - status: 'no_ad', - } - }; - const bidResponses = spec.interpretResponse(serverResponse, serverRequest); - expect(bidResponses).to.have.lengthOf(0); - }); - }); - - describe('spec.getUserSyncs', function () { - it('should choose iframe sync urls', function () { - let userSyncs = spec.getUserSyncs({iframeEnabled: true}, [serverResponse]); - expect(userSyncs).to.deep.equal([{ - type: 'iframe', - url: serverResponse.body.syncUrl - }]); - }); - - it('should choose iframe sync urls if serverResponse are empty', function () { - let userSyncs = spec.getUserSyncs({iframeEnabled: true}, []); - expect(userSyncs).to.deep.equal([{ - type: 'iframe', - url: 'https://api.relaido.jp/tr/v1/prebid/sync.html' - }]); - }); - - it('should choose iframe sync urls if syncUrl are undefined', function () { - serverResponse.body.syncUrl = undefined; - let userSyncs = spec.getUserSyncs({iframeEnabled: true}, [serverResponse]); - expect(userSyncs).to.deep.equal([{ - type: 'iframe', - url: 'https://api.relaido.jp/tr/v1/prebid/sync.html' - }]); - }); - - it('should return empty if iframeEnabled are false', function () { - let userSyncs = spec.getUserSyncs({iframeEnabled: false}, [serverResponse]); - expect(userSyncs).to.have.lengthOf(0); - }); - }); - - describe('spec.onBidWon', function () { - let stub; - beforeEach(() => { - stub = sinon.stub(utils, 'triggerPixel'); - }); - afterEach(() => { - stub.restore(); - }); - - it('Should create nurl pixel if bid nurl', function () { - let bid = { - bidder: bidRequest.bidder, - creativeId: serverResponse.body.creativeId, - cpm: serverResponse.body.price, - params: [bidRequest.params], - auctionId: bidRequest.auctionId, - requestId: bidRequest.bidId, - adId: '3b286a4db7031f', - adUnitCode: bidRequest.adUnitCode, - ref: window.location.href, - } - spec.onBidWon(bid); - const parser = url.parse(stub.getCall(0).args[0]); - const query = parser.search; - expect(parser.hostname).to.equal('api.relaido.jp'); - expect(parser.pathname).to.equal('/tr/v1/prebid/win.gif'); - expect(query.placement_id).to.equal('100000'); - expect(query.creative_id).to.equal('1000'); - expect(query.price).to.equal('500'); - expect(query.auction_id).to.equal('413ed000-8c7a-4ba1-a1fa-9732e006f8c3'); - expect(query.bid_id).to.equal('2ed93003f7bb99'); - expect(query.ad_id).to.equal('3b286a4db7031f'); - expect(query.ad_unit_code).to.equal('test'); - expect(query.ref).to.include(window.location.href); - }); - }); - - describe('spec.onTimeout', function () { - let stub; - beforeEach(() => { - stub = sinon.stub(utils, 'triggerPixel'); - }); - afterEach(() => { - stub.restore(); - }); - - it('Should create nurl pixel if bid nurl', function () { - const data = [{ - bidder: bidRequest.bidder, - bidId: bidRequest.bidId, - adUnitCode: bidRequest.adUnitCode, - auctionId: bidRequest.auctionId, - params: [bidRequest.params], - timeout: bidderRequest.timeout, - }]; - spec.onTimeout(data); - const parser = url.parse(stub.getCall(0).args[0]); - const query = parser.search; - expect(parser.hostname).to.equal('api.relaido.jp'); - expect(parser.pathname).to.equal('/tr/v1/prebid/timeout.gif'); - expect(query.placement_id).to.equal('100000'); - expect(query.timeout).to.equal('1000'); - expect(query.auction_id).to.equal('413ed000-8c7a-4ba1-a1fa-9732e006f8c3'); - expect(query.bid_id).to.equal('2ed93003f7bb99'); - expect(query.ad_unit_code).to.equal('test'); - expect(query.ref).to.include(window.location.href); - }); - }); -});