prebid.js 8.0.0 → 8.2.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.
- package/.devcontainer/devcontainer.json +3 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/admanBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bedigitechBidAdapter.js +1 -1
- package/dist/beopBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/bidwatchAnalyticsAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridBidAdapter.js +1 -0
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/categoryTranslation.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/cmp.js +1 -0
- package/dist/colossussspBidAdapter.js +1 -1
- package/dist/conceptxBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consentManagement.js +1 -1
- package/dist/consentManagementGpp.js +1 -1
- package/dist/consentManagementUsp.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/dependencies.json +15 -0
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freepassBidAdapter.js +1 -0
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/gppControl_usnat.js +1 -0
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/greenbidsRtdProvider.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/imdsBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/intentIqIdSystem.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/kiviadsBidAdapter.js +1 -0
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/kulturemediaBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/mgidXBidAdapter.js +1 -0
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/mspa.js +1 -0
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +146 -139
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/oxxionAnalyticsAdapter.js +1 -1
- package/dist/oxxionRtdProvider.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/retailspotBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rtbhouseBidAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/uid2IdSystem.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/libraries/cmp/cmpClient.js +139 -0
- package/libraries/mspa/activityControls.js +91 -0
- package/modules/admanBidAdapter.js +5 -0
- package/modules/amxBidAdapter.js +11 -12
- package/modules/bedigitechBidAdapter.js +15 -12
- package/modules/bedigitechBidAdapter.md +2 -2
- package/modules/beopBidAdapter.js +0 -4
- package/modules/bidwatchAnalyticsAdapter.js +33 -5
- package/modules/bridBidAdapter.js +223 -0
- package/modules/categoryTranslation.js +3 -2
- package/modules/colossussspBidAdapter.js +9 -0
- package/modules/conceptxBidAdapter.js +6 -3
- package/modules/consentManagement.js +12 -86
- package/modules/consentManagementGpp.js +47 -126
- package/modules/consentManagementUsp.js +19 -97
- package/modules/freepassBidAdapter.js +98 -0
- package/modules/freepassBidAdapter.md +31 -0
- package/modules/freepassIdSystem.md +1 -1
- package/modules/gppControl_usnat.js +11 -0
- package/modules/greenbidsAnalyticsAdapter.js +7 -13
- package/modules/gridBidAdapter.js +3 -4
- package/modules/intentIqIdSystem.js +11 -9
- package/modules/ixBidAdapter.js +284 -55
- package/modules/kiviadsBidAdapter.js +212 -0
- package/modules/kiviadsBidAdapter.md +79 -0
- package/modules/liveIntentIdSystem.js +8 -3
- package/modules/mediasquareBidAdapter.js +19 -23
- package/modules/mgidXBidAdapter.js +263 -0
- package/modules/mgidXBidAdapter.md +79 -0
- package/modules/oxxionAnalyticsAdapter.js +33 -5
- package/modules/oxxionRtdProvider.js +124 -11
- package/modules/oxxionRtdProvider.md +19 -4
- package/modules/pubmaticBidAdapter.js +18 -2
- package/modules/rtbhouseBidAdapter.js +9 -2
- package/modules/rtbhouseBidAdapter.md +27 -8
- package/modules/rubiconBidAdapter.js +13 -1
- package/modules/sharethroughBidAdapter.js +14 -0
- package/modules/sonobiBidAdapter.js +4 -7
- package/modules/tripleliftBidAdapter.js +21 -1
- package/modules/userId/eids.js +29 -0
- package/modules/userId/eids.md +19 -2
- package/modules/userId/index.js +78 -29
- package/modules/userId/userId.md +3 -0
- package/package.json +1 -1
- package/src/activities/params.js +4 -1
- package/test/spec/libraries/cmp/cmpClient_spec.js +233 -0
- package/test/spec/libraries/mspa/activityControls_spec.js +315 -0
- package/test/spec/modules/admanBidAdapter_spec.js +8 -2
- package/test/spec/modules/adqueryBidAdapter_spec.js +5 -1
- package/test/spec/modules/amxBidAdapter_spec.js +6 -3
- package/test/spec/modules/bedigitechBidAdapter_spec.js +25 -36
- package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +21 -1
- package/test/spec/modules/bridBidAdapter_spec.js +129 -0
- package/test/spec/modules/byDataAnalyticsAdapter_spec.js +9 -7
- package/test/spec/modules/chtnwBidAdapter_spec.js +4 -1
- package/test/spec/modules/colossussspBidAdapter_spec.js +29 -0
- package/test/spec/modules/consentManagementGpp_spec.js +84 -7
- package/test/spec/modules/consentManagement_spec.js +8 -18
- package/test/spec/modules/datablocksBidAdapter_spec.js +7 -3
- package/test/spec/modules/eids_spec.js +87 -0
- package/test/spec/modules/freepassBidAdapter_spec.js +161 -0
- package/test/spec/modules/greenbidsAnalyticsAdapter_spec.js +0 -15
- package/test/spec/modules/gridBidAdapter_spec.js +29 -28
- package/test/spec/modules/insticatorBidAdapter_spec.js +6 -2
- package/test/spec/modules/intentIqIdSystem_spec.js +36 -2
- package/test/spec/modules/ixBidAdapter_spec.js +785 -15
- package/test/spec/modules/kiviadsBidAdapter_spec.js +404 -0
- package/test/spec/modules/lassoBidAdapter_spec.js +6 -4
- package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +17 -2
- package/test/spec/modules/liveIntentIdSystem_spec.js +11 -6
- package/test/spec/modules/mediasquareBidAdapter_spec.js +3 -0
- package/test/spec/modules/mgidXBidAdapter_spec.js +426 -0
- package/test/spec/modules/onetagBidAdapter_spec.js +81 -75
- package/test/spec/modules/orbidderBidAdapter_spec.js +6 -3
- package/test/spec/modules/oxxionAnalyticsAdapter_spec.js +21 -2
- package/test/spec/modules/oxxionRtdProvider_spec.js +113 -1
- package/test/spec/modules/pubmaticBidAdapter_spec.js +25 -0
- package/test/spec/modules/relaidoBidAdapter_spec.js +4 -3
- package/test/spec/modules/rtbhouseBidAdapter_spec.js +35 -0
- package/test/spec/modules/rubiconBidAdapter_spec.js +41 -0
- package/test/spec/modules/sharethroughBidAdapter_spec.js +75 -0
- package/test/spec/modules/sonobiBidAdapter_spec.js +15 -15
- package/test/spec/modules/tripleliftBidAdapter_spec.js +20 -1
- package/test/spec/modules/ucfunnelBidAdapter_spec.js +37 -16
- package/test/spec/modules/userId_spec.js +393 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.pbjsChunk=self.pbjsChunk||[]).push([[54572],{83519:function(e,t,n){var a=n(78640),i=n(64358),o=n(48928),r=n(64563),d=n(5644),s=n(86104),c=n(18621),u=n(78653),v={},g={},f={},l={};l[d.FP.BID_ADJUSTMENT]=!0,l[d.FP.BIDDER_DONE]=!0,l[d.FP.AUCTION_END]=!0;var p="",b="https://pool.tsukiji.iponweb.net/hba",I="";function S(e,t){e.adUnitCode&&t[e.adUnitCode]&&(e.adUnitName=t[e.adUnitCode]),(0,i.isArray)(e.adUnits)&&e.adUnits.forEach((function(e){e.code&&t[e.code]&&(e.name=t[e.code])})),(0,i.isArray)(e.adUnitCodes)&&(e.adUnitNames=e.adUnitCodes.map((function(e){return t[e]}))),["bids","bidderRequests","bidsReceived","noBids"].forEach((function(n){!function(e,t){(0,i.isArray)(e)&&e.forEach((function(e){S(e,t)}))}(e[n],t)}))}var h=Object.assign((0,r.ZP)({analyticsType:"endpoint"}),{getUrl:function(){return b},track:function(e){var t=e.eventType,n=e.args,a=void 0===n?{}:n;if(t===d.FP.BID_REQUESTED){var o="".concat(a.bidderCode,"_").concat(a.auctionId);v[o]=(0,i.deepClone)(a),v[o].bids=[],a.bids.forEach((function(e){g["".concat(e.bidId,"_").concat(e.auctionId)]=e}))}if(t===d.FP.BID_TIMEOUT&&(0,i.isArray)(a)){var r=h.eventsStorage,s={};a.forEach((function(e){var n="".concat(e.bidId,"_").concat(e.auctionId),a="".concat(e.bidder,"_").concat(e.auctionId);r[e.auctionId]||(r[e.auctionId]={events:[]}),(v[a]||s[e.bidder])&&g[n]&&(s[e.bidder]||(s[e.bidder]=v[a],r[e.auctionId].events.push({eventType:t,params:s[e.bidder]}),delete v[a]),s[e.bidder].bids.push(g[n]),delete g[n])}))}else if(p=a.auctionId||p){var b=h.eventsStorage;b[p]||(b[p]={events:[]});var y=a.refererInfo&&a.refererInfo.page;y&&f[p]!==y&&(f[p]=y);var E=Object.assign({},a);if(delete E.ad,E.bidsReceived&&(E.bidsReceived=E.bidsReceived.map((function(e){var t=Object.assign({},e);return delete t.ad,t}))),l[t]||b[p].events.push({eventType:t,params:E}),t===d.FP.AUCTION_END||t===d.FP.BID_WON){if(E.adServerTargeting=c.q0.getAllTargeting(u.K.getAdUnitCodes(),u.K.getBidsReceived()),h.eventsStorage[p]&&h.eventsStorage[p].events.length){h.eventsStorage[p].page={url:f[p]},h.eventsStorage[p].pubId=I,h.eventsStorage[p].wrapper_version="8.
|
|
1
|
+
(self.pbjsChunk=self.pbjsChunk||[]).push([[54572],{83519:function(e,t,n){var a=n(78640),i=n(64358),o=n(48928),r=n(64563),d=n(5644),s=n(86104),c=n(18621),u=n(78653),v={},g={},f={},l={};l[d.FP.BID_ADJUSTMENT]=!0,l[d.FP.BIDDER_DONE]=!0,l[d.FP.AUCTION_END]=!0;var p="",b="https://pool.tsukiji.iponweb.net/hba",I="";function S(e,t){e.adUnitCode&&t[e.adUnitCode]&&(e.adUnitName=t[e.adUnitCode]),(0,i.isArray)(e.adUnits)&&e.adUnits.forEach((function(e){e.code&&t[e.code]&&(e.name=t[e.code])})),(0,i.isArray)(e.adUnitCodes)&&(e.adUnitNames=e.adUnitCodes.map((function(e){return t[e]}))),["bids","bidderRequests","bidsReceived","noBids"].forEach((function(n){!function(e,t){(0,i.isArray)(e)&&e.forEach((function(e){S(e,t)}))}(e[n],t)}))}var h=Object.assign((0,r.ZP)({analyticsType:"endpoint"}),{getUrl:function(){return b},track:function(e){var t=e.eventType,n=e.args,a=void 0===n?{}:n;if(t===d.FP.BID_REQUESTED){var o="".concat(a.bidderCode,"_").concat(a.auctionId);v[o]=(0,i.deepClone)(a),v[o].bids=[],a.bids.forEach((function(e){g["".concat(e.bidId,"_").concat(e.auctionId)]=e}))}if(t===d.FP.BID_TIMEOUT&&(0,i.isArray)(a)){var r=h.eventsStorage,s={};a.forEach((function(e){var n="".concat(e.bidId,"_").concat(e.auctionId),a="".concat(e.bidder,"_").concat(e.auctionId);r[e.auctionId]||(r[e.auctionId]={events:[]}),(v[a]||s[e.bidder])&&g[n]&&(s[e.bidder]||(s[e.bidder]=v[a],r[e.auctionId].events.push({eventType:t,params:s[e.bidder]}),delete v[a]),s[e.bidder].bids.push(g[n]),delete g[n])}))}else if(p=a.auctionId||p){var b=h.eventsStorage;b[p]||(b[p]={events:[]});var y=a.refererInfo&&a.refererInfo.page;y&&f[p]!==y&&(f[p]=y);var E=Object.assign({},a);if(delete E.ad,E.bidsReceived&&(E.bidsReceived=E.bidsReceived.map((function(e){var t=Object.assign({},e);return delete t.ad,t}))),l[t]||b[p].events.push({eventType:t,params:E}),t===d.FP.AUCTION_END||t===d.FP.BID_WON){if(E.adServerTargeting=c.q0.getAllTargeting(u.K.getAdUnitCodes(),u.K.getBidsReceived()),h.eventsStorage[p]&&h.eventsStorage[p].events.length){h.eventsStorage[p].page={url:f[p]},h.eventsStorage[p].pubId=I,h.eventsStorage[p].wrapper_version="8.2.0";var A=function(){if(window.googletag&&window.googletag.pubads){var e=googletag.pubads();if(e&&e.getSlots){var t=e.getSlots();if(t&&t.length){var n={};return t.forEach((function(e){var t=e.getSlotElementId(),a=(e.getAdUnitPath()||"").split("/").pop();n[t]=a})),n}}}}();A&&h.eventsStorage[p].events.forEach((function(e){S(e.params,A)}))}h.sendStat(h.eventsStorage[p],p)}}},sendStat:function(e,t){e&&e.events&&e.events.length&&(delete h.eventsStorage[t],(0,o.h)(b,{success:function(){},error:function(){}},JSON.stringify(e),{method:"POST"}))}});h.eventsStorage={},h.originEnableAnalytics=h.enableAnalytics,h.enableAnalytics=function(e){var t=e&&e.options;t&&("string"==typeof t.url&&(b=t.url),t.pubId&&(I=t.pubId.toString())),h.originEnableAnalytics(e)},s.ZP.registerAnalyticsAdapter({adapter:h,code:"yieldone"});(0,a.z)("yieldoneAnalyticsAdapter")}},function(e){e.O(0,[14861],(function(){return t=83519,e(e.s=t);var t}));e.O()}]);
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import {GreedyPromise} from '../../src/utils/promise.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @typedef {function} CMPClient
|
|
5
|
+
*
|
|
6
|
+
* @param {{}} params CMP parameters. Currently this is a subset of {command, callback, parameter, version}.
|
|
7
|
+
* @returns {Promise<*>} a promise that:
|
|
8
|
+
* - if a `callback` param was provided, resolves (with no result) just before the first time it's run;
|
|
9
|
+
* - if `callback` was *not* provided, resolves to the return value of the CMP command
|
|
10
|
+
* @property {boolean} isDirect true if the CMP is directly accessible (no postMessage required)
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Returns a function that can interface with a CMP regardless of where it's located.
|
|
15
|
+
*
|
|
16
|
+
* @param apiName name of the CMP api, e.g. "__gpp"
|
|
17
|
+
* @param apiVersion? CMP API version
|
|
18
|
+
* @param apiArgs? names of the arguments taken by the api function, in order.
|
|
19
|
+
* @param callbackArgs? names of the cross-frame response payload properties that should be passed as callback arguments, in order
|
|
20
|
+
* @param win
|
|
21
|
+
* @returns {CMPClient} CMP invocation function (or null if no CMP was found).
|
|
22
|
+
*/
|
|
23
|
+
export function cmpClient(
|
|
24
|
+
{
|
|
25
|
+
apiName,
|
|
26
|
+
apiVersion,
|
|
27
|
+
apiArgs = ['command', 'callback', 'parameter', 'version'],
|
|
28
|
+
callbackArgs = ['returnValue', 'success'],
|
|
29
|
+
},
|
|
30
|
+
win = window
|
|
31
|
+
) {
|
|
32
|
+
const cmpCallbacks = {};
|
|
33
|
+
const callName = `${apiName}Call`;
|
|
34
|
+
const cmpDataPkgName = `${apiName}Return`;
|
|
35
|
+
|
|
36
|
+
function handleMessage(event) {
|
|
37
|
+
const json = (typeof event.data === 'string' && event.data.includes(cmpDataPkgName)) ? JSON.parse(event.data) : event.data;
|
|
38
|
+
if (json?.[cmpDataPkgName]?.callId) {
|
|
39
|
+
const payload = json[cmpDataPkgName];
|
|
40
|
+
|
|
41
|
+
if (cmpCallbacks.hasOwnProperty(payload.callId)) {
|
|
42
|
+
cmpCallbacks[payload.callId](...callbackArgs.map(name => payload[name]));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function findCMP() {
|
|
48
|
+
let f = win;
|
|
49
|
+
let cmpFrame;
|
|
50
|
+
let isDirect = false;
|
|
51
|
+
while (f != null) {
|
|
52
|
+
try {
|
|
53
|
+
if (typeof f[apiName] === 'function') {
|
|
54
|
+
cmpFrame = f;
|
|
55
|
+
isDirect = true;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
} catch (e) {
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// need separate try/catch blocks due to the exception errors thrown when trying to check for a frame that doesn't exist in 3rd party env
|
|
62
|
+
try {
|
|
63
|
+
if (f.frames[`${apiName}Locator`]) {
|
|
64
|
+
cmpFrame = f;
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
} catch (e) {
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (f === win.top) break;
|
|
71
|
+
f = f.parent;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return [
|
|
75
|
+
cmpFrame,
|
|
76
|
+
isDirect
|
|
77
|
+
];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const [cmpFrame, isDirect] = findCMP();
|
|
81
|
+
|
|
82
|
+
if (!cmpFrame) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function resolveParams(params) {
|
|
87
|
+
params = Object.assign({version: apiVersion}, params);
|
|
88
|
+
return apiArgs.map(arg => [arg, params[arg]])
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function wrapCallback(callback, resolve, reject, preamble) {
|
|
92
|
+
return function (result, success) {
|
|
93
|
+
preamble && preamble();
|
|
94
|
+
const resolver = success == null || success ? resolve : reject;
|
|
95
|
+
if (typeof callback === 'function') {
|
|
96
|
+
resolver();
|
|
97
|
+
return callback.apply(this, arguments);
|
|
98
|
+
} else {
|
|
99
|
+
resolver(result);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
let client;
|
|
105
|
+
|
|
106
|
+
if (isDirect) {
|
|
107
|
+
client = function invokeCMPDirect(params = {}) {
|
|
108
|
+
return new GreedyPromise((resolve, reject) => {
|
|
109
|
+
const ret = cmpFrame[apiName](...resolveParams({
|
|
110
|
+
...params,
|
|
111
|
+
callback: params.callback && wrapCallback(params.callback, resolve, reject)
|
|
112
|
+
}).map(([_, val]) => val));
|
|
113
|
+
if (params.callback == null) {
|
|
114
|
+
resolve(ret);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
} else {
|
|
119
|
+
win.addEventListener('message', handleMessage, false);
|
|
120
|
+
|
|
121
|
+
client = function invokeCMPFrame(params) {
|
|
122
|
+
return new GreedyPromise((resolve, reject) => {
|
|
123
|
+
// call CMP via postMessage
|
|
124
|
+
const callId = Math.random().toString();
|
|
125
|
+
const msg = {
|
|
126
|
+
[callName]: {
|
|
127
|
+
...Object.fromEntries(resolveParams(params).filter(([param]) => param !== 'callback')),
|
|
128
|
+
callId: callId
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
cmpCallbacks[callId] = wrapCallback(params?.callback, resolve, reject, params?.callback == null && (() => { delete cmpCallbacks[callId] }));
|
|
133
|
+
cmpFrame.postMessage(msg, '*');
|
|
134
|
+
});
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
client.isDirect = isDirect;
|
|
138
|
+
return client;
|
|
139
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import {registerActivityControl} from '../../src/activities/rules.js';
|
|
2
|
+
import {
|
|
3
|
+
ACTIVITY_ENRICH_EIDS,
|
|
4
|
+
ACTIVITY_ENRICH_UFPD,
|
|
5
|
+
ACTIVITY_SYNC_USER,
|
|
6
|
+
ACTIVITY_TRANSMIT_PRECISE_GEO
|
|
7
|
+
} from '../../src/activities/activities.js';
|
|
8
|
+
import {gppDataHandler} from '../../src/adapterManager.js';
|
|
9
|
+
|
|
10
|
+
// default interpretation for MSPA consent(s):
|
|
11
|
+
// https://docs.google.com/document/d/1yPEVx3bBdSkIw-QNkQR5qi1ztmn9zoXk-LaGQB6iw7Q
|
|
12
|
+
|
|
13
|
+
export function isBasicConsentDenied(cd) {
|
|
14
|
+
// service provider mode is always consent denied
|
|
15
|
+
return ['MspaServiceProviderMode', 'Gpc'].some(prop => cd[prop] === 1) ||
|
|
16
|
+
// you cannot consent to what you were not notified of
|
|
17
|
+
cd.PersonalDataConsents === 2 ||
|
|
18
|
+
// minors 13+ who have not given consent
|
|
19
|
+
cd.KnownChildSensitiveDataConsents[0] === 1 ||
|
|
20
|
+
// minors under 13 cannot consent
|
|
21
|
+
cd.KnownChildSensitiveDataConsents[1] !== 0 ||
|
|
22
|
+
// sensitive category consent impossible without notice
|
|
23
|
+
(cd.SensitiveDataProcessing.some(element => element === 2) && (cd.SensitiveDataLimitUseNotice !== 1 || cd.SensitiveDataProcessingOptOutNotice !== 1));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function isSensitiveNoticeMissing(cd) {
|
|
27
|
+
return ['SensitiveDataProcessingOptOutNotice', 'SensitiveDataLimitUseNotice'].some(prop => cd[prop] === 2)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function isConsentDenied(cd) {
|
|
31
|
+
return isBasicConsentDenied(cd) ||
|
|
32
|
+
// user opts out
|
|
33
|
+
(['SaleOptOut', 'SharingOptOut', 'TargetedAdvertisingOptOut'].some(prop => cd[prop] === 1)) ||
|
|
34
|
+
// notice not given
|
|
35
|
+
(['SaleOptOutNotice', 'SharingNotice', 'SharingOptOutNotice', 'TargetedAdvertisingOptOutNotice'].some(prop => cd[prop] === 2)) ||
|
|
36
|
+
// sale opted in but notice does not apply
|
|
37
|
+
((cd.SaleOptOut === 2 && cd.SaleOptOutNotice === 0)) ||
|
|
38
|
+
// targeted opted in but notice does not apply
|
|
39
|
+
((cd.TargetedAdvertisingOptOut === 2 && cd.TargetedAdvertisingOptOutNotice === 0)) ||
|
|
40
|
+
// sharing opted in but notices do not apply
|
|
41
|
+
((cd.SharingOptOut === 2 && (cd.SharingNotice === 0 || cd.SharingOptOutNotice === 0)));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function isTransmitUfpdConsentDenied(cd) {
|
|
45
|
+
// SensitiveDataProcessing[1-5,11]=1 OR SensitiveDataProcessing[6,7,9,10,12]<>0 OR
|
|
46
|
+
const mustBeZero = [6, 7, 9, 10, 12];
|
|
47
|
+
const mustBeZeroSubtractedVector = mustBeZero.map((number) => number - 1);
|
|
48
|
+
const SensitiveDataProcessingMustBeZero = cd.SensitiveDataProcessing.filter(index => mustBeZeroSubtractedVector.includes(index));
|
|
49
|
+
const cannotBeOne = [1, 2, 3, 4, 5, 11];
|
|
50
|
+
const cannotBeOneSubtractedVector = cannotBeOne.map((number) => number - 1);
|
|
51
|
+
const SensitiveDataProcessingCannotBeOne = cd.SensitiveDataProcessing.filter(index => cannotBeOneSubtractedVector.includes(index));
|
|
52
|
+
return isConsentDenied(cd) ||
|
|
53
|
+
isSensitiveNoticeMissing(cd) ||
|
|
54
|
+
SensitiveDataProcessingCannotBeOne.some(val => val === 1) ||
|
|
55
|
+
SensitiveDataProcessingMustBeZero.some(val => val !== 0);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function isTransmitGeoConsentDenied(cd) {
|
|
59
|
+
return isBasicConsentDenied(cd) ||
|
|
60
|
+
isSensitiveNoticeMissing(cd) ||
|
|
61
|
+
cd.SensitiveDataProcessing[7] === 1
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const CONSENT_RULES = {
|
|
65
|
+
[ACTIVITY_SYNC_USER]: isConsentDenied,
|
|
66
|
+
[ACTIVITY_ENRICH_EIDS]: isConsentDenied,
|
|
67
|
+
[ACTIVITY_ENRICH_UFPD]: isTransmitUfpdConsentDenied,
|
|
68
|
+
[ACTIVITY_TRANSMIT_PRECISE_GEO]: isTransmitGeoConsentDenied
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function mspaRule(sids, getConsent, denies, applicableSids = () => gppDataHandler.getConsentData()?.applicableSections) {
|
|
72
|
+
return function() {
|
|
73
|
+
if (applicableSids().some(sid => sids.includes(sid))) {
|
|
74
|
+
const consent = getConsent();
|
|
75
|
+
if (consent == null) {
|
|
76
|
+
return {allow: false, reason: 'consent data not available'};
|
|
77
|
+
}
|
|
78
|
+
if (denies(consent)) {
|
|
79
|
+
return {allow: false}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function setupRules(api, sids, normalizeConsent = (c) => c, rules = CONSENT_RULES, registerRule = registerActivityControl, getConsentData = () => gppDataHandler.getConsentData()) {
|
|
86
|
+
const unreg = [];
|
|
87
|
+
Object.entries(rules).forEach(([activity, denies]) => {
|
|
88
|
+
unreg.push(registerRule(activity, `MSPA (${api})`, mspaRule(sids, () => normalizeConsent(getConsentData()?.sectionData?.[api]), denies, () => getConsentData()?.applicableSections || [])))
|
|
89
|
+
})
|
|
90
|
+
return () => unreg.forEach(ur => ur())
|
|
91
|
+
}
|
|
@@ -109,6 +109,11 @@ export const spec = {
|
|
|
109
109
|
bidFloor: getBidFloor(bid)
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
+
if (bid.transactionId) {
|
|
113
|
+
placement.ext = placement.ext || {};
|
|
114
|
+
placement.ext.tid = bid.transactionId;
|
|
115
|
+
}
|
|
116
|
+
|
|
112
117
|
if (bid.schain) {
|
|
113
118
|
placement.schain = bid.schain;
|
|
114
119
|
}
|
package/modules/amxBidAdapter.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
2
|
-
import {BANNER, VIDEO} from '../src/mediaTypes.js';
|
|
1
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
2
|
+
import { BANNER, VIDEO } from '../src/mediaTypes.js';
|
|
3
3
|
import {
|
|
4
4
|
_each,
|
|
5
5
|
deepAccess,
|
|
@@ -10,15 +10,16 @@ import {
|
|
|
10
10
|
logError,
|
|
11
11
|
parseUrl,
|
|
12
12
|
triggerPixel,
|
|
13
|
+
generateUUID,
|
|
13
14
|
} from '../src/utils.js';
|
|
14
|
-
import {config} from '../src/config.js';
|
|
15
|
-
import {getStorageManager} from '../src/storageManager.js';
|
|
15
|
+
import { config } from '../src/config.js';
|
|
16
|
+
import { getStorageManager } from '../src/storageManager.js';
|
|
16
17
|
|
|
17
18
|
const BIDDER_CODE = 'amx';
|
|
18
19
|
const storage = getStorageManager({ bidderCode: BIDDER_CODE });
|
|
19
20
|
const SIMPLE_TLD_TEST = /\.com?\.\w{2,4}$/;
|
|
20
21
|
const DEFAULT_ENDPOINT = 'https://prebid.a-mo.net/a/c';
|
|
21
|
-
const VERSION = 'pba1.3.
|
|
22
|
+
const VERSION = 'pba1.3.3';
|
|
22
23
|
const VAST_RXP = /^\s*<\??(?:vast|xml)/i;
|
|
23
24
|
const TRACKING_ENDPOINT = 'https://1x1.a-mo.net/hbx/';
|
|
24
25
|
const AMUID_KEY = '__amuidpb';
|
|
@@ -255,12 +256,12 @@ function getGpp(bidderRequest) {
|
|
|
255
256
|
return bidderRequest.gppConsent;
|
|
256
257
|
}
|
|
257
258
|
|
|
258
|
-
return bidderRequest?.ortb2?.regs?.gpp ?? {gppString: '', applicableSections: ''};
|
|
259
|
+
return bidderRequest?.ortb2?.regs?.gpp ?? { gppString: '', applicableSections: '' };
|
|
259
260
|
}
|
|
260
261
|
|
|
261
262
|
function buildReferrerInfo(bidderRequest) {
|
|
262
263
|
if (bidderRequest.refererInfo == null) {
|
|
263
|
-
return {r: '', t: false, c: '', l: 0, s: []}
|
|
264
|
+
return { r: '', t: false, c: '', l: 0, s: [] }
|
|
264
265
|
}
|
|
265
266
|
|
|
266
267
|
const re = bidderRequest.refererInfo;
|
|
@@ -303,8 +304,7 @@ export const spec = {
|
|
|
303
304
|
};
|
|
304
305
|
|
|
305
306
|
const payload = {
|
|
306
|
-
|
|
307
|
-
a: bidderRequest.auctionId,
|
|
307
|
+
a: generateUUID(),
|
|
308
308
|
B: 0,
|
|
309
309
|
b: loc.host,
|
|
310
310
|
brc: fbid.bidderRequestsCount || 0,
|
|
@@ -388,9 +388,9 @@ export const spec = {
|
|
|
388
388
|
const output = [];
|
|
389
389
|
let hasFrame = false;
|
|
390
390
|
|
|
391
|
-
_each(serverResponses, function
|
|
391
|
+
_each(serverResponses, function({ body: response }) {
|
|
392
392
|
if (response != null && response.p != null && response.p.hreq) {
|
|
393
|
-
_each(response.p.hreq, function
|
|
393
|
+
_each(response.p.hreq, function(syncPixel) {
|
|
394
394
|
const pixelType =
|
|
395
395
|
syncPixel.indexOf('__st=iframe') !== -1 ? 'iframe' : 'image';
|
|
396
396
|
if (syncOptions.iframeEnabled || pixelType === 'image') {
|
|
@@ -483,7 +483,6 @@ export const spec = {
|
|
|
483
483
|
bid: timeoutData.bidId,
|
|
484
484
|
a: timeoutData.adUnitCode,
|
|
485
485
|
cn: timeoutData.timeout,
|
|
486
|
-
aud: timeoutData.auctionId,
|
|
487
486
|
});
|
|
488
487
|
},
|
|
489
488
|
|
|
@@ -1,23 +1,27 @@
|
|
|
1
1
|
import {BANNER, NATIVE} from '../src/mediaTypes.js';
|
|
2
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
|
-
import {
|
|
3
|
+
import {_each, isArray} from '../src/utils.js';
|
|
4
4
|
|
|
5
5
|
const BEDIGITECH_CODE = 'bedigitech';
|
|
6
|
-
const BEDIGITECH_ENDPOINT = 'https://
|
|
6
|
+
const BEDIGITECH_ENDPOINT = 'https://bid.bedigitech.com/bid/pub_bid.php';
|
|
7
7
|
const BEDIGITECH_REQUEST_METHOD = 'GET';
|
|
8
8
|
const BEDIGITECH_CURRENCY = 'USD';
|
|
9
|
-
|
|
10
|
-
function interpretResponse(placementResponse,
|
|
9
|
+
let requestId = '';
|
|
10
|
+
function interpretResponse(placementResponse, bids) {
|
|
11
11
|
const bid = {
|
|
12
12
|
id: placementResponse.id,
|
|
13
|
-
requestId: placementResponse.
|
|
13
|
+
requestId: requestId || placementResponse.id,
|
|
14
|
+
bidderCode: 'bedigitech',
|
|
14
15
|
cpm: placementResponse.cpm,
|
|
15
16
|
ad: decodeURIComponent(placementResponse.ad),
|
|
16
17
|
width: placementResponse.width || 0,
|
|
17
18
|
height: placementResponse.height || 0,
|
|
18
19
|
currency: placementResponse.currency || BEDIGITECH_CURRENCY,
|
|
19
20
|
ttl: placementResponse.ttl || 300,
|
|
20
|
-
creativeId: placementResponse.
|
|
21
|
+
creativeId: placementResponse.crid,
|
|
22
|
+
requestTimestamp: placementResponse.requestTime,
|
|
23
|
+
timeToRespond: placementResponse.timeToRespond || 300,
|
|
24
|
+
netRevenue: placementResponse.netRevenue,
|
|
21
25
|
meta: {
|
|
22
26
|
mediaType: BANNER,
|
|
23
27
|
},
|
|
@@ -29,14 +33,15 @@ export const spec = {
|
|
|
29
33
|
code: BEDIGITECH_CODE,
|
|
30
34
|
supportedMediaTypes: [BANNER, NATIVE],
|
|
31
35
|
isBidRequestValid: bid => {
|
|
36
|
+
requestId = '';
|
|
37
|
+
requestId = bid.bidId
|
|
32
38
|
return !!bid.params.placementId && !!bid.bidId && bid.bidder === 'bedigitech'
|
|
33
39
|
},
|
|
34
40
|
|
|
35
|
-
buildRequests: (bidRequests
|
|
41
|
+
buildRequests: (bidRequests) => {
|
|
36
42
|
return bidRequests.map(bid => {
|
|
37
43
|
let url = BEDIGITECH_ENDPOINT;
|
|
38
44
|
const data = {'pid': bid.params.placementId};
|
|
39
|
-
|
|
40
45
|
return {
|
|
41
46
|
method: BEDIGITECH_REQUEST_METHOD,
|
|
42
47
|
url,
|
|
@@ -50,15 +55,13 @@ export const spec = {
|
|
|
50
55
|
});
|
|
51
56
|
},
|
|
52
57
|
|
|
53
|
-
interpretResponse: function(serverResponse
|
|
58
|
+
interpretResponse: function(serverResponse) {
|
|
54
59
|
let bids = [];
|
|
55
|
-
|
|
56
60
|
if (isArray(serverResponse.body)) {
|
|
57
61
|
_each(serverResponse.body, function(placementResponse) {
|
|
58
|
-
interpretResponse(placementResponse,
|
|
62
|
+
interpretResponse(placementResponse, bids);
|
|
59
63
|
});
|
|
60
64
|
}
|
|
61
|
-
|
|
62
65
|
return bids;
|
|
63
66
|
},
|
|
64
67
|
|
|
@@ -4,7 +4,7 @@ Module Name: Bedigitech Bidder Adapter
|
|
|
4
4
|
|
|
5
5
|
Module Type: Bidder Adapter
|
|
6
6
|
|
|
7
|
-
Maintainer:
|
|
7
|
+
Maintainer: prebid@bedigitech.com
|
|
8
8
|
|
|
9
9
|
# Description
|
|
10
10
|
|
|
@@ -23,7 +23,7 @@ About us : https://www.bedigitech.com/
|
|
|
23
23
|
{
|
|
24
24
|
bidder: "bedigitech",
|
|
25
25
|
params: {
|
|
26
|
-
placementId:
|
|
26
|
+
placementId: 309
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
]
|
|
@@ -129,8 +129,6 @@ function buildTrackingParams(data, info, value) {
|
|
|
129
129
|
nptnid: params.networkPartnerId,
|
|
130
130
|
bid: data.bidId || data.requestId,
|
|
131
131
|
sl_n: data.adUnitCode,
|
|
132
|
-
// TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781
|
|
133
|
-
aid: data.auctionId,
|
|
134
132
|
se_ca: 'bid',
|
|
135
133
|
se_ac: info,
|
|
136
134
|
se_va: value,
|
|
@@ -158,8 +156,6 @@ function beOpRequestSlotsMaker(bid) {
|
|
|
158
156
|
bid: getBidIdParameter('bidId', bid),
|
|
159
157
|
brid: getBidIdParameter('bidderRequestId', bid),
|
|
160
158
|
name: getBidIdParameter('adUnitCode', bid),
|
|
161
|
-
// TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781
|
|
162
|
-
aid: getBidIdParameter('auctionId', bid),
|
|
163
159
|
tid: bid.ortb2Imp?.ext?.tid || '',
|
|
164
160
|
brc: getBidIdParameter('bidRequestsCount', bid),
|
|
165
161
|
bdrc: getBidIdParameter('bidderRequestCount', bid),
|
|
@@ -77,7 +77,8 @@ function cleanAuctionEnd(args) {
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
function cleanCreatives(args) {
|
|
80
|
-
|
|
80
|
+
let stringArgs = JSON.parse(dereferenceWithoutRenderer(args));
|
|
81
|
+
return filterAttributes(stringArgs, false);
|
|
81
82
|
}
|
|
82
83
|
|
|
83
84
|
function enhanceMediaType(arg) {
|
|
@@ -93,7 +94,7 @@ function enhanceMediaType(arg) {
|
|
|
93
94
|
|
|
94
95
|
function addBidResponse(args) {
|
|
95
96
|
let eventType = BID_RESPONSE;
|
|
96
|
-
let argsCleaned = cleanCreatives(
|
|
97
|
+
let argsCleaned = cleanCreatives(args); ;
|
|
97
98
|
if (allEvents[eventType] == undefined) { allEvents[eventType] = [] }
|
|
98
99
|
allEvents[eventType].push(argsCleaned);
|
|
99
100
|
}
|
|
@@ -110,7 +111,9 @@ function addTimeout(args) {
|
|
|
110
111
|
if (saveEvents[eventType] == undefined) { saveEvents[eventType] = [] }
|
|
111
112
|
saveEvents[eventType].push(args);
|
|
112
113
|
let argsCleaned = [];
|
|
113
|
-
let argsDereferenced =
|
|
114
|
+
let argsDereferenced = {}
|
|
115
|
+
let stringArgs = JSON.parse(dereferenceWithoutRenderer(args));
|
|
116
|
+
argsDereferenced = stringArgs;
|
|
114
117
|
argsDereferenced.forEach((attr) => {
|
|
115
118
|
argsCleaned.push(filterAttributes(JSON.parse(JSON.stringify(attr)), false));
|
|
116
119
|
});
|
|
@@ -118,17 +121,42 @@ function addTimeout(args) {
|
|
|
118
121
|
auctionEnd[eventType].push(argsCleaned);
|
|
119
122
|
}
|
|
120
123
|
|
|
124
|
+
export const dereferenceWithoutRenderer = function(args) {
|
|
125
|
+
if (args.renderer) {
|
|
126
|
+
let tmp = args.renderer;
|
|
127
|
+
delete args.renderer;
|
|
128
|
+
let stringified = JSON.stringify(args);
|
|
129
|
+
args['renderer'] = tmp;
|
|
130
|
+
return stringified;
|
|
131
|
+
}
|
|
132
|
+
if (args.bidsReceived) {
|
|
133
|
+
let tmp = {}
|
|
134
|
+
for (let key in args.bidsReceived) {
|
|
135
|
+
if (args.bidsReceived[key].renderer) {
|
|
136
|
+
tmp[key] = args.bidsReceived[key].renderer;
|
|
137
|
+
delete args.bidsReceived[key].renderer;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
let stringified = JSON.stringify(args);
|
|
141
|
+
for (let key in tmp) {
|
|
142
|
+
args.bidsReceived[key].renderer = tmp[key];
|
|
143
|
+
}
|
|
144
|
+
return stringified;
|
|
145
|
+
}
|
|
146
|
+
return JSON.stringify(args);
|
|
147
|
+
}
|
|
148
|
+
|
|
121
149
|
function addAuctionEnd(args) {
|
|
122
150
|
let eventType = AUCTION_END;
|
|
123
151
|
if (saveEvents[eventType] == undefined) { saveEvents[eventType] = [] }
|
|
124
152
|
saveEvents[eventType].push(args);
|
|
125
|
-
let argsCleaned = cleanAuctionEnd(JSON.parse(
|
|
153
|
+
let argsCleaned = cleanAuctionEnd(JSON.parse(dereferenceWithoutRenderer(args)));
|
|
126
154
|
if (auctionEnd[eventType] == undefined) { auctionEnd[eventType] = [] }
|
|
127
155
|
auctionEnd[eventType].push(argsCleaned);
|
|
128
156
|
}
|
|
129
157
|
|
|
130
158
|
function handleBidWon(args) {
|
|
131
|
-
args = enhanceMediaType(filterAttributes(JSON.parse(
|
|
159
|
+
args = enhanceMediaType(filterAttributes(JSON.parse(dereferenceWithoutRenderer(args)), true));
|
|
132
160
|
let increment = args['cpm'];
|
|
133
161
|
if (typeof saveEvents['auctionEnd'] == 'object') {
|
|
134
162
|
saveEvents['auctionEnd'].forEach((auction) => {
|