diff --git a/modules/.submodules.json b/modules/.submodules.json index 74ebc021a6d..0a10044a78e 100644 --- a/modules/.submodules.json +++ b/modules/.submodules.json @@ -36,7 +36,6 @@ ], "rtdModule": [ "browsiRtdProvider", - "dgkeywordRtdProvider", "geoedgeRtdProvider", "haloRtdProvider", "jwplayerRtdProvider", diff --git a/modules/dgkeywordRtdProvider.js b/modules/dgkeywordRtdProvider.js deleted file mode 100644 index 52fa9fd70c4..00000000000 --- a/modules/dgkeywordRtdProvider.js +++ /dev/null @@ -1,132 +0,0 @@ -/** - * This module adds dgkeyword provider to the real time data module - * The {@link module:modules/realTimeData} module is required - * The module will get keywords from 1plux profile api. - * This module can work only with AppNexusBidAdapter. - * @module modules/dgkeywordProvider - * @requires module:modules/realTimeData - */ - -import * as utils from '../src/utils.js'; -import { ajax } from '../src/ajax.js'; -import { submodule } from '../src/hook.js'; -import { getGlobal } from '../src/prebidGlobal.js'; - -/** - * get keywords from api server. and set keywords. - * @param {Object} reqBidsConfigObj - * @param {function} callback - * @param {Object} moduleConfig - * @param {Object} userConsent - */ -export function getDgKeywordsAndSet(reqBidsConfigObj, callback, moduleConfig, userConsent) { - const URL = 'https://mediaconsortium.profiles.tagger.opecloud.com/api/v1?url='; - const PROFILE_TIMEOUT_MS = 1000; - const timeout = (moduleConfig && moduleConfig.params && moduleConfig.params.timeout && Number(moduleConfig.params.timeout) > 0) ? Number(moduleConfig.params.timeout) : PROFILE_TIMEOUT_MS; - const url = (moduleConfig && moduleConfig.params && moduleConfig.params.url) ? moduleConfig.params.url : URL + encodeURIComponent(window.location.href); - const adUnits = reqBidsConfigObj.adUnits || getGlobal().adUnits; - let isFinish = false; - utils.logMessage('[dgkeyword sub module]', adUnits, timeout); - let setKeywordTargetBidders = getTargetBidderOfDgKeywords(adUnits); - if (setKeywordTargetBidders.length <= 0) { - utils.logMessage('[dgkeyword sub module] no dgkeyword targets.'); - callback(); - } else { - utils.logMessage('[dgkeyword sub module] dgkeyword targets:', setKeywordTargetBidders); - utils.logMessage('[dgkeyword sub module] get targets from profile api start.'); - ajax(url, { - success: function(response) { - const res = JSON.parse(response); - if (!isFinish) { - utils.logMessage('[dgkeyword sub module] get targets from profile api end.'); - if (res) { - let keywords = {}; - if (res['s'] != null && res['s'].length > 0) { - keywords['opeaud'] = res['s']; - } - if (res['t'] != null && res['t'].length > 0) { - keywords['opectx'] = res['t']; - } - if (Object.keys(keywords).length > 0) { - const targetBidKeys = {} - for (let bid of setKeywordTargetBidders) { - // set keywords to params - bid.params.keywords = keywords; - if (!targetBidKeys[bid.bidder]) { - targetBidKeys[bid.bidder] = true; - } - } - - // set keywrods to ortb2 - let addOrtb2 = {}; - utils.deepSetValue(addOrtb2, 'site.keywords', keywords); - utils.deepSetValue(addOrtb2, 'user.keywords', keywords); - const ortb2 = {ortb2: addOrtb2}; - getGlobal().setBidderConfig({ bidders: Object.keys(targetBidKeys), config: ortb2 }); - } - } - isFinish = true; - } - callback(); - }, - error: function(errorStatus) { - // error occur - utils.logError('[dgkeyword sub module] profile api access error.', errorStatus); - callback(); - } - }, null, { - withCredentials: true, - contentType: 'application/json', - }); - setTimeout(function () { - if (!isFinish) { - // profile api timeout - utils.logInfo('[dgkeyword sub module] profile api timeout. [timeout: ' + timeout + 'ms]'); - isFinish = true; - } - callback(); - }, timeout); - } -} - -/** - * get all bidder which hava {dgkeyword: true} in params - * @param {Object} adUnits - */ -export function getTargetBidderOfDgKeywords(adUnits) { - let setKeywordTargetBidders = []; - for (let adUnit of adUnits) { - for (let bid of adUnit.bids) { - if (bid.params && bid.params['dgkeyword'] === true) { - delete bid.params['dgkeyword']; - setKeywordTargetBidders.push(bid); - } - } - } - return setKeywordTargetBidders; -} - -/** @type {RtdSubmodule} */ -export const dgkeywordSubmodule = { - /** - * used to link submodule with realTimeData - * @type {string} - */ - name: 'dgkeyword', - /** - * get data and send back to realTimeData module - * @function - * @param {string[]} adUnitsCodes - */ - getBidRequestData: getDgKeywordsAndSet, - init: init, -}; - -function init(moduleConfig) { - return true; -} - -function registerSubModule() { - submodule('realTimeData', dgkeywordSubmodule); -} -registerSubModule(); diff --git a/modules/dgkeywordRtdProvider.md b/modules/dgkeywordRtdProvider.md deleted file mode 100644 index 314475b45a8..00000000000 --- a/modules/dgkeywordRtdProvider.md +++ /dev/null @@ -1,29 +0,0 @@ - ## Integration - -1) Compile the Digital Garage Keyword Module and Appnexus Bid Adapter into your Prebid build: - -``` -gulp build --modules="dgkeywordRtdProvider,appnexusBidAdapter,..." -``` - -2) Use `setConfig` to instruct Prebid.js to initilize the dgkeyword module, as specified below. - -## Configuration - -This module is configured as part of the `realTimeData.dataProviders` - -```javascript -var DGKEYWORD_TIMEOUT = 1000; -pbjs.setConfig({ - realTimeData: { - auctionDelay: DGKEYWORD_TIMEOUT, - dataProviders: [{ - name: 'dgkeyword', - waitForIt: true, - params: { - timeout: DGKEYWORD_TIMEOUT - } - }] - } -}); -``` diff --git a/test/spec/modules/dgkeywordRtdProvider_spec.js b/test/spec/modules/dgkeywordRtdProvider_spec.js deleted file mode 100644 index 0fac92e5118..00000000000 --- a/test/spec/modules/dgkeywordRtdProvider_spec.js +++ /dev/null @@ -1,326 +0,0 @@ -import * as dgRtd from 'modules/dgkeywordRtdProvider.js'; -import { cloneDeep } from 'lodash'; -import { server } from 'test/mocks/xhr.js'; -import { getGlobal } from 'src/prebidGlobal.js'; -import { config } from 'src/config.js'; - -const DG_GET_KEYWORDS_TIMEOUT = 1950; -const DEF_CONFIG = { - name: 'dgkeyword', - waitForIt: true, - params: { - timeout: DG_GET_KEYWORDS_TIMEOUT, - }, -}; -const DUMMY_RESPONSE_HEADER = {'Content-Type': 'application/json'}; -const DUMMY_RESPONSE = { s: ['s1', 's2'], t: ['t1', 't2'] }; -const SUCCESS_RESULT = { opeaud: ['s1', 's2'], opectx: ['t1', 't2'] }; -const SUCCESS_ORTB2 = { ortb2: { site: { keywords: SUCCESS_RESULT }, user: { keywords: SUCCESS_RESULT } } }; - -describe('Digital Garage Keyword Module', function () { - it('should init and return always true', function () { - expect(dgRtd.dgkeywordSubmodule.init()).to.equal(true); - }); - - describe('dgkeyword target test', function () { - it('should have no target', function () { - const adUnits_no_target = [ - { - code: 'code1', - mediaTypes: { - banner: { - sizes: [[300, 250]], - }, - }, - bids: [ - { - bidder: 'dg', - params: { - placementId: 99999999, - }, - }, - { - bidder: 'dg2', - params: { - placementId: 99999998, - dgkeyword: false, - }, - }, - { - bidder: 'dg3', - params: { - placementId: 99999997, - }, - }, - ], - }, - { - code: 'code2', - mediaTypes: { - banner: { - sizes: [[300, 250]], - }, - }, - bids: [ - { - bidder: 'dg', - params: { - placementId: 99999996, - }, - }, - { - bidder: 'dg2', - params: { - placementId: 99999995, - }, - }, - { - bidder: 'dg3', - params: { - placementId: 99999994, - }, - }, - ], - }, - ]; - expect(dgRtd.getTargetBidderOfDgKeywords(adUnits_no_target)).an('array') - .that.is.empty; - }); - it('should have targets', function () { - const adUnits_targets = [ - { - code: 'code1', - mediaTypes: { - banner: { - sizes: [[300, 250]], - }, - }, - bids: [ - { - bidder: 'dg', - params: { - placementId: 99999999, - }, - }, - { - bidder: 'dg2', - params: { - placementId: 99999998, - dgkeyword: true, - }, - }, - { - bidder: 'dg3', - params: { - placementId: 99999997, - dgkeyword: false, - }, - }, - ], - }, - { - code: 'code2', - mediaTypes: { - banner: { - sizes: [[300, 250]], - }, - }, - bids: [ - { - bidder: 'dg', - params: { - placementId: 99999996, - dgkeyword: true, - }, - }, - { - bidder: 'dg2', - params: { - placementId: 99999995, - dgkeyword: 'aa', - }, - }, - { - bidder: 'dg3', - params: { - placementId: 99999994, - dgkeyword: true, - }, - }, - ], - }, - ]; - const targets = dgRtd.getTargetBidderOfDgKeywords(adUnits_targets); - expect(targets[0].bidder).to.be.equal('dg2'); - expect(targets[0].params.placementId).to.be.equal(99999998); - expect(targets[0].params.dgkeyword).to.be.an('undefined'); - expect(targets[1].bidder).to.be.equal('dg'); - expect(targets[1].params.placementId).to.be.equal(99999996); - expect(targets[1].params.dgkeyword).to.be.an('undefined'); - expect(targets[2].bidder).to.be.equal('dg3'); - expect(targets[2].params.placementId).to.be.equal(99999994); - expect(targets[2].params.dgkeyword).to.be.an('undefined'); - }); - }); - - describe('get profile.', function () { - const AD_UNITS = [ - { - code: 'code1', - mediaTypes: { - banner: { - sizes: [[300, 250]], - }, - }, - bids: [ - { - bidder: 'dg', - params: { - placementId: 99999999, - }, - }, - { - bidder: 'dg2', - params: { - placementId: 99999998, - dgkeyword: true, - }, - }, - { - bidder: 'dg3', - params: { - placementId: 99999997, - dgkeyword: false, - }, - }, - ], - }, - { - code: 'code2', - mediaTypes: { - banner: { - sizes: [[300, 250]], - }, - }, - bids: [ - { - bidder: 'dg', - params: { - placementId: 99999996, - dgkeyword: true, - }, - }, - { - bidder: 'dg2', - params: { - placementId: 99999995, - dgkeyword: 'aa', - }, - }, - { - bidder: 'dg3', - params: { - placementId: 99999994, - }, - }, - ], - }, - ]; - it('should get profiles error(404).', function (done) { - let pdjs = getGlobal(); - pbjs.adUnits = cloneDeep(AD_UNITS); - let moduleConfig = cloneDeep(DEF_CONFIG); - dgRtd.getDgKeywordsAndSet( - pdjs, - () => { - let targets = pbjs.adUnits[0].bids; - expect(targets[1].bidder).to.be.equal('dg2'); - expect(targets[1].params.placementId).to.be.equal(99999998); - expect(targets[1].params.dgkeyword).to.be.an('undefined'); - expect(targets[1].params.keywords).to.be.an('undefined'); - targets = pbjs.adUnits[1].bids; - expect(targets[0].bidder).to.be.equal('dg'); - expect(targets[0].params.placementId).to.be.equal(99999996); - expect(targets[0].params.dgkeyword).to.be.an('undefined'); - expect(targets[0].params.keywords).to.be.an('undefined'); - expect(targets[2].bidder).to.be.equal('dg3'); - expect(targets[2].params.placementId).to.be.equal(99999994); - expect(targets[2].params.dgkeyword).to.be.an('undefined'); - expect(targets[2].params.keywords).to.be.an('undefined'); - - expect(config.getBidderConfig()).to.be.deep.equal({}); - - done(); - }, - moduleConfig, - null - ); - const request = server.requests[0]; - request.respond(404); - }); - it('should get profiles timeout.', function (done) { - let pdjs = getGlobal(); - pbjs.adUnits = cloneDeep(AD_UNITS); - let moduleConfig = cloneDeep(DEF_CONFIG); - moduleConfig.params.timeout = 10; - dgRtd.getDgKeywordsAndSet( - pdjs, - () => { - let targets = pbjs.adUnits[0].bids; - expect(targets[1].bidder).to.be.equal('dg2'); - expect(targets[1].params.placementId).to.be.equal(99999998); - expect(targets[1].params.dgkeyword).to.be.an('undefined'); - expect(targets[1].params.keywords).to.be.an('undefined'); - targets = pbjs.adUnits[1].bids; - expect(targets[0].bidder).to.be.equal('dg'); - expect(targets[0].params.placementId).to.be.equal(99999996); - expect(targets[0].params.dgkeyword).to.be.an('undefined'); - expect(targets[0].params.keywords).to.be.an('undefined'); - expect(targets[2].bidder).to.be.equal('dg3'); - expect(targets[2].params.placementId).to.be.equal(99999994); - expect(targets[2].params.dgkeyword).to.be.an('undefined'); - expect(targets[2].params.keywords).to.be.an('undefined'); - - expect(config.getBidderConfig()).to.be.deep.equal({}); - - done(); - }, - moduleConfig, - null - ); - setTimeout(() => { - const request = server.requests[0]; - if (request) { - request.respond(200, DUMMY_RESPONSE_HEADER, JSON.stringify(DUMMY_RESPONSE)); - } - }, 1000) - }); - it('should get profiles ok(200).', function (done) { - let pdjs = getGlobal(); - pbjs.adUnits = cloneDeep(AD_UNITS); - let moduleConfig = cloneDeep(DEF_CONFIG); - dgRtd.getDgKeywordsAndSet(pdjs, () => { - let targets = pbjs.adUnits[0].bids; - expect(targets[1].bidder).to.be.equal('dg2'); - expect(targets[1].params.placementId).to.be.equal(99999998); - expect(targets[1].params.dgkeyword).to.be.an('undefined'); - expect(targets[1].params.keywords).to.be.deep.equal(SUCCESS_RESULT); - targets = pbjs.adUnits[1].bids; - expect(targets[0].bidder).to.be.equal('dg'); - expect(targets[0].params.placementId).to.be.equal(99999996); - expect(targets[0].params.dgkeyword).to.be.an('undefined'); - expect(targets[0].params.keywords).to.be.deep.equal(SUCCESS_RESULT); - expect(targets[2].bidder).to.be.equal('dg3'); - expect(targets[2].params.placementId).to.be.equal(99999994); - expect(targets[2].params.dgkeyword).to.be.an('undefined'); - expect(targets[2].params.keywords).to.be.an('undefined'); - - // expect(config.getBidderConfig()).to.be.deep.equal({ dg2: SUCCESS_ORTB2, dg: SUCCESS_ORTB2 }); - - done(); - }, moduleConfig, null); - const request = server.requests[0]; - request.respond(200, DUMMY_RESPONSE_HEADER, JSON.stringify(DUMMY_RESPONSE)); - }); - }); -});