prebid.js 9.4.0 → 9.5.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/.eslintrc.js +31 -5
- package/.github/workflows/jscpd.yml +2 -2
- package/.github/workflows/linter.yml +107 -0
- package/creative/crossDomain.js +6 -3
- package/dist/33acrossAnalyticsAdapter.js +1 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/BTBidAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adagioRtdProvider.js +1 -1
- package/dist/adagioUtils.js +1 -1
- package/dist/addefendBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adkernelAdnBidAdapter.js +1 -1
- package/dist/adkernelBidAdapter.js +1 -1
- package/dist/adkernelUtils.js +1 -0
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/admixerBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adstirBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/advRedAnalyticsAdapter.js +1 -0
- package/dist/adxcgAnalyticsAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/agmaAnalyticsAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/akamaiDapRtdProvider.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/anonymisedRtdProvider.js +1 -1
- package/dist/apacdexBidAdapter.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/azerionedgeRtdProvider.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/chunk-core.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connatixBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/contxtfulRtdProvider.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/currencyUtils.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/dailymotionBidAdapter.js +1 -1
- package/dist/debugging-standalone.js +1 -1
- package/dist/dependencies.json +43 -7
- package/dist/dfpAdServerVideo.js +1 -1
- package/dist/dfpAdpod.js +1 -1
- package/dist/dfpUtils.js +1 -1
- package/dist/discoveryBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/dxkultureBidAdapter.js +1 -1
- package/dist/eightPodAnalyticsAdapter.js +1 -1
- package/dist/eightPodBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -1
- package/dist/exadsBidAdapter.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/fintezaAnalyticsAdapter.js +1 -1
- package/dist/fpdUtils.js +1 -0
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/gptPreAuction.js +1 -1
- package/dist/gptUtils.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/greenbidsRtdProvider.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/growthCodeAnalyticsAdapter.js +1 -1
- package/dist/growthCodeRtdProvider.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/id5AnalyticsAdapter.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/intentIqAnalyticsAdapter.js +1 -0
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/jwplayerBidAdapter.js +1 -1
- package/dist/jwplayerRtdProvider.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/kimberliteBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.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/luceadBidAdapter.js +1 -1
- package/dist/mabidderBidAdapter.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/mediagoBidAdapter.js +1 -1
- package/dist/medianetAnalyticsAdapter.js +1 -1
- package/dist/medianetBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/missenaBidAdapter.js +1 -1
- package/dist/mobianRtdProvider.js +1 -1
- package/dist/nextMillenniumBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/nobidAnalyticsAdapter.js +1 -1
- package/dist/nobidBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +201 -193
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openwebBidAdapter.js +1 -1
- package/dist/openxBidAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/optoutBidAdapter.js +1 -1
- package/dist/orbidderBidAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/paapi.js +1 -1
- package/dist/permutiveRtdProvider.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/playdigoBidAdapter.js +1 -1
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/programmaticaBidAdapter.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/publirBidAdapter.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxaiAnalyticsAdapter.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/relevatehealthBidAdapter.js +1 -1
- package/dist/retailspotBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/ringieraxelspringerBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/schainSerializer.js +1 -0
- 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/sizeMapping.js +1 -1
- package/dist/sizeUtils.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/snigelBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stnBidAdapter.js +1 -1
- package/dist/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/symitriDapRtdProvider.js +1 -0
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/tappxBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/targetVideoUtils.js +1 -0
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/terceptAnalyticsAdapter.js +1 -1
- package/dist/themoneytizerBidAdapter.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/unrulyBidAdapter.js +1 -1
- package/dist/userAgentUtils.js +1 -0
- package/dist/utiqIdSystem.js +1 -1
- package/dist/vidazooUtils.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/yahooAdsBidAdapter.js +1 -1
- package/dist/yandexIdSystem.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/integrationExamples/gpt/x-domain/creative.html +1 -1
- package/libraries/adkernelUtils/adkernelUtils.js +11 -0
- package/libraries/currencyUtils/floor.js +23 -0
- package/libraries/dfpUtils/dfpUtils.js +7 -0
- package/libraries/fpdUtils/deviceInfo.js +58 -0
- package/libraries/fpdUtils/pageInfo.js +73 -0
- package/libraries/gptUtils/gptUtils.js +23 -1
- package/libraries/schainSerializer/schainSerializer.js +24 -0
- package/libraries/sizeUtils/tranformSize.js +43 -0
- package/libraries/targetVideoUtils/bidderUtils.js +178 -0
- package/libraries/targetVideoUtils/constants.js +23 -0
- package/libraries/userAgentUtils/index.js +58 -0
- package/libraries/userAgentUtils/userAgentTypes.enums.js +22 -0
- package/modules/.submodules.json +1 -0
- package/modules/33acrossAnalyticsAdapter.js +2 -0
- package/modules/adagioBidAdapter.js +1 -1
- package/modules/adagioRtdProvider.js +18 -4
- package/modules/adkernelAdnBidAdapter.js +1 -12
- package/modules/adkernelBidAdapter.js +4 -13
- package/modules/adlooxAnalyticsAdapter.js +1 -0
- package/modules/admixerBidAdapter.js +10 -6
- package/modules/admixerBidAdapter.md +7 -10
- package/modules/adtrgtmeBidAdapter.js +1 -1
- package/modules/advRedAnalyticsAdapter.js +198 -0
- package/modules/advRedAnalyticsAdapter.md +30 -0
- package/modules/akamaiDapRtdProvider.js +19 -798
- package/modules/anonymisedRtdProvider.js +5 -1
- package/modules/anonymisedRtdProvider.md +1 -1
- package/modules/apacdexBidAdapter.js +1 -1
- package/modules/appnexusBidAdapter.js +56 -2
- package/modules/automatadAnalyticsAdapter.js +2 -0
- package/modules/azerionedgeRtdProvider.js +13 -3
- package/modules/azerionedgeRtdProvider.md +0 -17
- package/modules/bridBidAdapter.js +47 -47
- package/modules/cleanioRtdProvider.js +1 -0
- package/modules/concertBidAdapter.js +1 -1
- package/modules/connatixBidAdapter.js +36 -8
- package/modules/connectIdSystem.js +3 -1
- package/modules/contxtfulRtdProvider.js +20 -2
- package/modules/contxtfulRtdProvider.md +1 -0
- package/modules/craftBidAdapter.js +1 -1
- package/modules/criteoBidAdapter.js +1 -1
- package/modules/cwireBidAdapter.js +5 -1
- package/modules/dailymotionBidAdapter.js +85 -65
- package/modules/debugging/debugging.js +3 -0
- package/modules/dfpAdServerVideo.js +15 -33
- package/modules/dfpAdpod.js +2 -6
- package/modules/dgkeywordRtdProvider.js +2 -0
- package/modules/discoveryBidAdapter.js +26 -210
- package/modules/dspxBidAdapter.js +176 -54
- package/modules/eightPodAnalyticsAdapter.js +28 -34
- package/modules/eightPodBidAdapter.js +113 -57
- package/modules/fintezaAnalyticsAdapter.js +9 -4
- package/modules/goldbachBidAdapter.js +1 -1
- package/modules/gptPreAuction.js +63 -4
- package/modules/growthCodeAnalyticsAdapter.js +1 -1
- package/modules/growthCodeRtdProvider.js +1 -1
- package/modules/gumgumBidAdapter.js +14 -10
- package/modules/improvedigitalBidAdapter.js +1 -1
- package/modules/intentIqAnalyticsAdapter.js +234 -0
- package/modules/intentIqAnalyticsAdapter.md +27 -0
- package/modules/intentIqIdSystem.md +0 -0
- package/modules/jwplayerBidAdapter.js +1 -1
- package/modules/jwplayerRtdProvider.js +26 -6
- package/modules/jwplayerVideoProvider.js +6 -0
- package/modules/mediafuseBidAdapter.js +1 -1
- package/modules/mediagoBidAdapter.js +7 -176
- package/modules/medianetBidAdapter.js +101 -40
- package/modules/mgidBidAdapter.js +3 -1
- package/modules/mobianRtdProvider.js +16 -2
- package/modules/nextMillenniumBidAdapter.js +1 -27
- package/modules/nobidBidAdapter.js +1 -1
- package/modules/optoutBidAdapter.js +1 -1
- package/modules/paapi.js +48 -35
- package/modules/permutiveRtdProvider.js +72 -22
- package/modules/playdigoBidAdapter.js +4 -2
- package/modules/prebidServerBidAdapter/index.js +4 -2
- package/modules/prebidServerBidAdapter/ortbConverter.js +1 -0
- package/modules/programmaticaBidAdapter.js +1 -1
- package/modules/pubmaticBidAdapter.js +12 -0
- package/modules/pubxaiAnalyticsAdapter.js +306 -164
- package/modules/relevatehealthBidAdapter.js +2 -1
- package/modules/richaudienceBidAdapter.js +1 -1
- package/modules/rtdModule/index.js +5 -3
- package/modules/sirdataRtdProvider.js +2 -0
- package/modules/sizeMapping.js +2 -5
- package/modules/smaatoBidAdapter.js +18 -1
- package/modules/smilewantedBidAdapter.js +26 -22
- package/modules/snigelBidAdapter.js +1 -1
- package/modules/sonobiBidAdapter.js +5 -10
- package/modules/symitriDapRtdProvider.js +812 -0
- package/modules/symitriDapRtdProvider.md +49 -0
- package/modules/targetVideoBidAdapter.js +120 -152
- package/modules/targetVideoBidAdapter.md +20 -3
- package/modules/userId/eids.js +3 -0
- package/modules/utiqIdSystem.js +12 -10
- package/modules/validationFpdModule/index.js +22 -17
- package/modules/videojsVideoProvider.js +3 -0
- package/modules/visxBidAdapter.js +1 -1
- package/modules/winrBidAdapter.js +2 -27
- package/modules/yahooAdsBidAdapter.js +1 -1
- package/modules/yandexIdSystem.js +1 -1
- package/package.json +4 -4
- package/plugins/eslint/index.js +73 -45
- package/src/adRendering.js +7 -3
- package/src/adloader.js +1 -0
- package/src/ajax.js +15 -0
- package/src/config.js +0 -4
- package/src/debugging.js +1 -0
- package/src/secureCreatives.js +1 -1
- package/src/storageManager.js +62 -73
- package/src/targeting.js +26 -20
- package/src/utils.js +9 -0
- package/test/pages/banner_sync.html +97 -0
- package/test/pages/consent_mgt_gdpr.html +1 -1
- package/test/spec/ajax_spec.js +11 -0
- package/test/spec/creative/crossDomainCreative_spec.js +26 -9
- package/test/spec/e2e/banner/basic_banner_ad.spec.js +20 -14
- package/test/spec/fpd/gdpr_spec.js +1 -1
- package/test/spec/libraries/userAgentUtils_spec.js +109 -0
- package/test/spec/modules/adagioRtdProvider_spec.js +72 -0
- package/test/spec/modules/admixerBidAdapter_spec.js +21 -17
- package/test/spec/modules/advRedAnalyticsAdapter_spec.js +114 -0
- package/test/spec/modules/adxcgBidAdapter_spec.js +1 -1
- package/test/spec/modules/appnexusBidAdapter_spec.js +36 -0
- package/test/spec/modules/azerionedgeRtdProvider_spec.js +36 -21
- package/test/spec/modules/connatixBidAdapter_spec.js +55 -2
- package/test/spec/modules/consentManagement_spec.js +1 -1
- package/test/spec/modules/contxtfulRtdProvider_spec.js +6 -0
- package/test/spec/modules/dailymotionBidAdapter_spec.js +497 -4
- package/test/spec/modules/discoveryBidAdapter_spec.js +9 -6
- package/test/spec/modules/dspxBidAdapter_spec.js +188 -7
- package/test/spec/modules/eightPodAnalyticsAdapter_spec.js +22 -13
- package/test/spec/modules/gptPreAuction_spec.js +143 -1
- package/test/spec/modules/gumgumBidAdapter_spec.js +17 -0
- package/test/spec/modules/intentIqAnalyticsAdapter_spec.js +172 -0
- package/test/spec/modules/jwplayerRtdProvider_spec.js +61 -0
- package/test/spec/modules/mediagoBidAdapter_spec.js +34 -37
- package/test/spec/modules/medianetBidAdapter_spec.js +297 -16
- package/test/spec/modules/mgidBidAdapter_spec.js +15 -5
- package/test/spec/modules/mobianRtdProvider_spec.js +1 -3
- package/test/spec/modules/paapi_spec.js +177 -111
- package/test/spec/modules/permutiveRtdProvider_spec.js +42 -8
- package/test/spec/modules/prebidServerBidAdapter_spec.js +17 -3
- package/test/spec/modules/proxistoreBidAdapter_spec.js +1 -1
- package/test/spec/modules/pubmaticBidAdapter_spec.js +40 -0
- package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +970 -603
- package/test/spec/modules/pulsepointBidAdapter_spec.js +4 -4
- package/test/spec/modules/smaatoBidAdapter_spec.js +36 -1
- package/test/spec/modules/smilewantedBidAdapter_spec.js +57 -1
- package/test/spec/modules/symitriDapRtdProvider_spec.js +600 -0
- package/test/spec/modules/targetVideoBidAdapter_spec.js +112 -11
- package/test/spec/modules/yandexIdSystem_spec.js +6 -1
- package/test/spec/schainSerializer/schainSerializer_spec.js +138 -0
- package/test/spec/unit/core/storageManager_spec.js +68 -51
- package/test/spec/utils_spec.js +19 -0
- /package/src/utils/{gpdr.js → gdpr.js} +0 -0
|
@@ -70,7 +70,8 @@ function initFirstVisit() {
|
|
|
70
70
|
let cookies;
|
|
71
71
|
|
|
72
72
|
try {
|
|
73
|
-
|
|
73
|
+
// TODO: commented out because of rule violations
|
|
74
|
+
cookies = {} // parseCookies(document.cookie);
|
|
74
75
|
} catch (a) {
|
|
75
76
|
cookies = {};
|
|
76
77
|
}
|
|
@@ -91,7 +92,8 @@ function initFirstVisit() {
|
|
|
91
92
|
|
|
92
93
|
return visitDate;
|
|
93
94
|
}
|
|
94
|
-
|
|
95
|
+
// TODO: commented out because of rule violations
|
|
96
|
+
/*
|
|
95
97
|
function trim(string) {
|
|
96
98
|
if (string.trim) {
|
|
97
99
|
return string.trim();
|
|
@@ -130,6 +132,7 @@ function parseCookies(cookie) {
|
|
|
130
132
|
|
|
131
133
|
return values;
|
|
132
134
|
}
|
|
135
|
+
*/
|
|
133
136
|
|
|
134
137
|
function getRandAsStr(digits) {
|
|
135
138
|
let str = '';
|
|
@@ -172,7 +175,8 @@ function initSession() {
|
|
|
172
175
|
let isNew = false;
|
|
173
176
|
|
|
174
177
|
try {
|
|
175
|
-
|
|
178
|
+
// TODO: commented out because of rule violations
|
|
179
|
+
cookies = {} // parseCookies(document.cookie);
|
|
176
180
|
} catch (a) {
|
|
177
181
|
cookies = {};
|
|
178
182
|
}
|
|
@@ -263,7 +267,8 @@ function getTrackRequestLastTime() {
|
|
|
263
267
|
);
|
|
264
268
|
}
|
|
265
269
|
|
|
266
|
-
|
|
270
|
+
// TODO: commented out because of rule violations
|
|
271
|
+
cookie = {} // parseCookies(document.cookie);
|
|
267
272
|
cookie = cookie[ TRACK_TIME_KEY ];
|
|
268
273
|
if (cookie) {
|
|
269
274
|
return parseInt(cookie, 10);
|
|
@@ -21,7 +21,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
|
21
21
|
import {ADPOD, BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
|
|
22
22
|
import {find, includes} from '../src/polyfill.js';
|
|
23
23
|
import {INSTREAM, OUTSTREAM} from '../src/video.js';
|
|
24
|
-
import {hasPurpose1Consent} from '../src/utils/
|
|
24
|
+
import {hasPurpose1Consent} from '../src/utils/gdpr.js';
|
|
25
25
|
import {convertOrtbRequestToProprietaryNative} from '../src/native.js';
|
|
26
26
|
import {APPNEXUS_CATEGORY_MAPPING} from '../libraries/categoryTranslationMapping/index.js';
|
|
27
27
|
import {getANKeywordParam} from '../libraries/appnexusUtils/anKeywords.js';
|
package/modules/gptPreAuction.js
CHANGED
|
@@ -1,19 +1,68 @@
|
|
|
1
|
+
import { getSignals as getSignalsFn, getSegments as getSegmentsFn, taxonomies } from '../libraries/gptUtils/gptUtils.js';
|
|
2
|
+
import { auctionManager } from '../src/auctionManager.js';
|
|
3
|
+
import { config } from '../src/config.js';
|
|
4
|
+
import { TARGETING_KEYS } from '../src/constants.js';
|
|
5
|
+
import { getHook } from '../src/hook.js';
|
|
6
|
+
import { find } from '../src/polyfill.js';
|
|
1
7
|
import {
|
|
2
8
|
deepAccess,
|
|
9
|
+
deepSetValue,
|
|
3
10
|
isAdUnitCodeMatchingSlot,
|
|
4
11
|
isGptPubadsDefined,
|
|
5
12
|
logInfo,
|
|
13
|
+
logWarn,
|
|
6
14
|
pick,
|
|
7
|
-
|
|
15
|
+
uniques
|
|
8
16
|
} from '../src/utils.js';
|
|
9
|
-
import {config} from '../src/config.js';
|
|
10
|
-
import {getHook} from '../src/hook.js';
|
|
11
|
-
import {find} from '../src/polyfill.js';
|
|
12
17
|
|
|
13
18
|
const MODULE_NAME = 'GPT Pre-Auction';
|
|
14
19
|
export let _currentConfig = {};
|
|
15
20
|
let hooksAdded = false;
|
|
16
21
|
|
|
22
|
+
export function getSegments(fpd, sections, segtax) {
|
|
23
|
+
return getSegmentsFn(fpd, sections, segtax);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function getSignals(fpd) {
|
|
27
|
+
return getSignalsFn(fpd);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function getSignalsArrayByAuctionsIds(auctionIds, index = auctionManager.index) {
|
|
31
|
+
const signals = auctionIds
|
|
32
|
+
.map(auctionId => index.getAuction({ auctionId })?.getFPD()?.global)
|
|
33
|
+
.map(getSignals)
|
|
34
|
+
.filter(fpd => fpd);
|
|
35
|
+
|
|
36
|
+
return signals;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function getSignalsIntersection(signals) {
|
|
40
|
+
const result = {};
|
|
41
|
+
taxonomies.forEach((taxonomy) => {
|
|
42
|
+
const allValues = signals
|
|
43
|
+
.flatMap(x => x)
|
|
44
|
+
.filter(x => x.taxonomy === taxonomy)
|
|
45
|
+
.map(x => x.values);
|
|
46
|
+
result[taxonomy] = allValues.length ? (
|
|
47
|
+
allValues.reduce((commonElements, subArray) => {
|
|
48
|
+
return commonElements.filter(element => subArray.includes(element));
|
|
49
|
+
})
|
|
50
|
+
) : []
|
|
51
|
+
result[taxonomy] = { values: result[taxonomy] };
|
|
52
|
+
})
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function getAuctionsIdsFromTargeting(targeting, am = auctionManager) {
|
|
57
|
+
return Object.values(targeting)
|
|
58
|
+
.flatMap(x => Object.entries(x))
|
|
59
|
+
.filter((entry) => entry[0] === TARGETING_KEYS.AD_ID || entry[0].startsWith(TARGETING_KEYS.AD_ID + '_'))
|
|
60
|
+
.flatMap(entry => entry[1])
|
|
61
|
+
.map(adId => am.findBidByAdId(adId)?.auctionId)
|
|
62
|
+
.filter(id => id != null)
|
|
63
|
+
.filter(uniques);
|
|
64
|
+
}
|
|
65
|
+
|
|
17
66
|
export const appendGptSlots = adUnits => {
|
|
18
67
|
const { customGptSlotMatching } = _currentConfig;
|
|
19
68
|
|
|
@@ -153,6 +202,14 @@ export const makeBidRequestsHook = (fn, adUnits, ...args) => {
|
|
|
153
202
|
return fn.call(this, adUnits, ...args);
|
|
154
203
|
};
|
|
155
204
|
|
|
205
|
+
const setPpsConfigFromTargetingSet = (next, targetingSet) => {
|
|
206
|
+
// set gpt config
|
|
207
|
+
const auctionsIds = getAuctionsIdsFromTargeting(targetingSet);
|
|
208
|
+
const signals = getSignalsIntersection(getSignalsArrayByAuctionsIds(auctionsIds));
|
|
209
|
+
window.googletag.setConfig && window.googletag.setConfig({pps: { taxonomies: signals }});
|
|
210
|
+
next(targetingSet);
|
|
211
|
+
};
|
|
212
|
+
|
|
156
213
|
const handleSetGptConfig = moduleConfig => {
|
|
157
214
|
_currentConfig = pick(moduleConfig, [
|
|
158
215
|
'enabled', enabled => enabled !== false,
|
|
@@ -166,12 +223,14 @@ const handleSetGptConfig = moduleConfig => {
|
|
|
166
223
|
if (_currentConfig.enabled) {
|
|
167
224
|
if (!hooksAdded) {
|
|
168
225
|
getHook('makeBidRequests').before(makeBidRequestsHook);
|
|
226
|
+
getHook('targetingDone').after(setPpsConfigFromTargetingSet)
|
|
169
227
|
hooksAdded = true;
|
|
170
228
|
}
|
|
171
229
|
} else {
|
|
172
230
|
logInfo(`${MODULE_NAME}: Turning off module`);
|
|
173
231
|
_currentConfig = {};
|
|
174
232
|
getHook('makeBidRequests').getHooks({hook: makeBidRequestsHook}).remove();
|
|
233
|
+
getHook('targetingDone').getHooks({hook: setPpsConfigFromTargetingSet}).remove();
|
|
175
234
|
hooksAdded = false;
|
|
176
235
|
}
|
|
177
236
|
};
|
|
@@ -140,7 +140,7 @@ function logToServer() {
|
|
|
140
140
|
if (pid === DEFAULT_PID) return;
|
|
141
141
|
if (eventQueue.length >= 1) {
|
|
142
142
|
// Get the correct GCID
|
|
143
|
-
let gcid =
|
|
143
|
+
let gcid = storage.getDataFromLocalStorage('gcid');
|
|
144
144
|
|
|
145
145
|
let data = {
|
|
146
146
|
session: sessionId,
|
|
@@ -75,7 +75,7 @@ function callServer(configParams, items, expiresAt, userConsent) {
|
|
|
75
75
|
storage.removeDataFromLocalStorage(RTD_EXPIRE_KEY, null)
|
|
76
76
|
}
|
|
77
77
|
if ((items === null) && (isNaN(expiresAt))) {
|
|
78
|
-
let gcid =
|
|
78
|
+
let gcid = storage.getDataFromLocalStorage('gcid')
|
|
79
79
|
|
|
80
80
|
let url = configParams.url ? configParams.url : ENDPOINT_URL;
|
|
81
81
|
url = tryAppendQueryString(url, 'pid', configParams.pid);
|
|
@@ -215,11 +215,12 @@ function _getVidParams(attributes) {
|
|
|
215
215
|
}
|
|
216
216
|
|
|
217
217
|
/**
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
* @param {
|
|
221
|
-
* @param {
|
|
222
|
-
* @
|
|
218
|
+
* Retrieves the bid floor value, which is the minimum acceptable bid for an ad unit.
|
|
219
|
+
* This function calculates the bid floor based on the given media types and other bidding parameters.
|
|
220
|
+
* @param {Object} mediaTypes - The media types specified for the bid, which might influence floor calculations.
|
|
221
|
+
* @param {number} staticBidFloor - The default or static bid floor set for the bid.
|
|
222
|
+
* @param {Object} bid - The bid object which may contain a method to get dynamic floor values.
|
|
223
|
+
* @returns {Object} An object containing the calculated bid floor and its currency.
|
|
223
224
|
*/
|
|
224
225
|
function _getFloor(mediaTypes, staticBidFloor, bid) {
|
|
225
226
|
const curMediaType = Object.keys(mediaTypes)[0] || 'banner';
|
|
@@ -290,10 +291,10 @@ function getEids(userId) {
|
|
|
290
291
|
}
|
|
291
292
|
|
|
292
293
|
/**
|
|
293
|
-
*
|
|
294
|
-
*
|
|
295
|
-
* @param {
|
|
296
|
-
* @
|
|
294
|
+
* Builds requests for bids.
|
|
295
|
+
* @param {validBidRequests[]} validBidRequests - An array of valid bid requests.
|
|
296
|
+
* @param {Object} bidderRequest - The bidder's request information.
|
|
297
|
+
* @returns {Object[]} An array of server requests.
|
|
297
298
|
*/
|
|
298
299
|
function buildRequests(validBidRequests, bidderRequest) {
|
|
299
300
|
const bids = [];
|
|
@@ -316,6 +317,7 @@ function buildRequests(validBidRequests, bidderRequest) {
|
|
|
316
317
|
const { currency, floor } = _getFloor(mediaTypes, params.bidfloor, bidRequest);
|
|
317
318
|
const eids = getEids(userId);
|
|
318
319
|
const gpid = deepAccess(ortb2Imp, 'ext.gpid') || deepAccess(ortb2Imp, 'ext.data.pbadslot');
|
|
320
|
+
const paapiEligible = deepAccess(ortb2Imp, 'ext.ae') === 1
|
|
319
321
|
let sizes = [1, 1];
|
|
320
322
|
let data = {};
|
|
321
323
|
data.displaymanager = 'Prebid.js - gumgum';
|
|
@@ -402,7 +404,9 @@ function buildRequests(validBidRequests, bidderRequest) {
|
|
|
402
404
|
} else { // legacy params
|
|
403
405
|
data = { ...data, ...handleLegacyParams(params, sizes) };
|
|
404
406
|
}
|
|
405
|
-
|
|
407
|
+
if (paapiEligible) {
|
|
408
|
+
data.ae = paapiEligible
|
|
409
|
+
}
|
|
406
410
|
if (gdprConsent) {
|
|
407
411
|
data.gdprApplies = gdprConsent.gdprApplies ? 1 : 0;
|
|
408
412
|
}
|
|
@@ -3,7 +3,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
|
3
3
|
import {config} from '../src/config.js';
|
|
4
4
|
import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
|
|
5
5
|
import {Renderer} from '../src/Renderer.js';
|
|
6
|
-
import {hasPurpose1Consent} from '../src/utils/
|
|
6
|
+
import {hasPurpose1Consent} from '../src/utils/gdpr.js';
|
|
7
7
|
import {ortbConverter} from '../libraries/ortbConverter/converter.js';
|
|
8
8
|
/**
|
|
9
9
|
* See https://github.com/prebid/Prebid.js/pull/8827 for details on linting exception
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { logInfo, logError } from '../src/utils.js';
|
|
2
|
+
import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
|
|
3
|
+
import adapterManager from '../src/adapterManager.js';
|
|
4
|
+
import { ajax } from '../src/ajax.js';
|
|
5
|
+
import { getStorageManager } from '../src/storageManager.js';
|
|
6
|
+
import { config } from '../src/config.js';
|
|
7
|
+
import { EVENTS } from '../src/constants.js';
|
|
8
|
+
import { MODULE_TYPE_ANALYTICS } from '../src/activities/modules.js';
|
|
9
|
+
|
|
10
|
+
const MODULE_NAME = 'iiqAnalytics'
|
|
11
|
+
const analyticsType = 'endpoint';
|
|
12
|
+
const defaultUrl = 'https://reports.intentiq.com/report';
|
|
13
|
+
const storage = getStorageManager({ moduleType: MODULE_TYPE_ANALYTICS, moduleName: MODULE_NAME });
|
|
14
|
+
const prebidVersion = '$prebid.version$';
|
|
15
|
+
export const REPORTER_ID = Date.now() + '_' + getRandom(0, 1000);
|
|
16
|
+
|
|
17
|
+
const FIRST_PARTY_KEY = '_iiq_fdata';
|
|
18
|
+
const FIRST_PARTY_DATA_KEY = '_iiq_fdata';
|
|
19
|
+
const JSVERSION = 0.1
|
|
20
|
+
|
|
21
|
+
const PARAMS_NAMES = {
|
|
22
|
+
abTestGroup: 'abGroup',
|
|
23
|
+
pbPauseUntil: 'pbPauseUntil',
|
|
24
|
+
pbMonitoringEnabled: 'pbMonitoringEnabled',
|
|
25
|
+
isInTestGroup: 'isInTestGroup',
|
|
26
|
+
enhanceRequests: 'enhanceRequests',
|
|
27
|
+
wasSubscribedForPrebid: 'wasSubscribedForPrebid',
|
|
28
|
+
hadEids: 'hadEids',
|
|
29
|
+
ABTestingConfigurationSource: 'ABTestingConfigurationSource',
|
|
30
|
+
lateConfiguration: 'lateConfiguration',
|
|
31
|
+
jsversion: 'jsversion',
|
|
32
|
+
eidsNames: 'eidsNames',
|
|
33
|
+
requestRtt: 'rtt',
|
|
34
|
+
clientType: 'clientType',
|
|
35
|
+
adserverDeviceType: 'AdserverDeviceType',
|
|
36
|
+
terminationCause: 'terminationCause',
|
|
37
|
+
callCount: 'callCount',
|
|
38
|
+
manualCallCount: 'mcc',
|
|
39
|
+
pubprovidedidsFailedToregister: 'ppcc',
|
|
40
|
+
noDataCount: 'noDataCount',
|
|
41
|
+
profile: 'profile',
|
|
42
|
+
isProfileDeterministic: 'pidDeterministic',
|
|
43
|
+
siteId: 'sid',
|
|
44
|
+
hadEidsInLocalStorage: 'idls',
|
|
45
|
+
auctionStartTime: 'ast',
|
|
46
|
+
eidsReadTime: 'eidt',
|
|
47
|
+
agentId: 'aid',
|
|
48
|
+
auctionEidsLength: 'aeidln',
|
|
49
|
+
wasServerCalled: 'wsrvcll',
|
|
50
|
+
referrer: 'vrref',
|
|
51
|
+
isInBrowserBlacklist: 'inbbl',
|
|
52
|
+
prebidVersion: 'pbjsver',
|
|
53
|
+
partnerId: 'partnerId'
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
let iiqAnalyticsAnalyticsAdapter = Object.assign(adapter({ defaultUrl, analyticsType }), {
|
|
57
|
+
initOptions: {
|
|
58
|
+
lsValueInitialized: false,
|
|
59
|
+
partner: null,
|
|
60
|
+
fpid: null,
|
|
61
|
+
currentGroup: null,
|
|
62
|
+
dataInLs: null,
|
|
63
|
+
eidl: null,
|
|
64
|
+
lsIdsInitialized: false,
|
|
65
|
+
manualReport: false
|
|
66
|
+
},
|
|
67
|
+
track({ eventType, args }) {
|
|
68
|
+
switch (eventType) {
|
|
69
|
+
case BID_WON:
|
|
70
|
+
bidWon(args);
|
|
71
|
+
break;
|
|
72
|
+
default:
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// Events needed
|
|
79
|
+
const {
|
|
80
|
+
BID_WON
|
|
81
|
+
} = EVENTS;
|
|
82
|
+
|
|
83
|
+
function readData(key) {
|
|
84
|
+
try {
|
|
85
|
+
if (storage.hasLocalStorage()) {
|
|
86
|
+
return storage.getDataFromLocalStorage(key);
|
|
87
|
+
}
|
|
88
|
+
if (storage.cookiesAreEnabled()) {
|
|
89
|
+
return storage.getCookie(key);
|
|
90
|
+
}
|
|
91
|
+
} catch (error) {
|
|
92
|
+
logError(error);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function initLsValues() {
|
|
97
|
+
if (iiqAnalyticsAnalyticsAdapter.initOptions.lsValueInitialized) return;
|
|
98
|
+
iiqAnalyticsAnalyticsAdapter.initOptions.fpid = JSON.parse(readData(FIRST_PARTY_KEY));
|
|
99
|
+
let iiqArr = config.getConfig('userSync.userIds').filter(m => m.name == 'intentIqId');
|
|
100
|
+
if (iiqArr && iiqArr.length > 0) iiqAnalyticsAnalyticsAdapter.initOptions.lsValueInitialized = true;
|
|
101
|
+
if (!iiqArr) iiqArr = [];
|
|
102
|
+
if (iiqArr.length == 0) {
|
|
103
|
+
iiqArr.push({
|
|
104
|
+
'params': {
|
|
105
|
+
'partner': -1,
|
|
106
|
+
'group': 'U'
|
|
107
|
+
}
|
|
108
|
+
})
|
|
109
|
+
}
|
|
110
|
+
if (iiqArr && iiqArr.length > 0) {
|
|
111
|
+
if (iiqArr[0].params && iiqArr[0].params.partner && !isNaN(iiqArr[0].params.partner)) {
|
|
112
|
+
iiqAnalyticsAnalyticsAdapter.initOptions.partner = iiqArr[0].params.partner;
|
|
113
|
+
iiqAnalyticsAnalyticsAdapter.initOptions.currentGroup = iiqAnalyticsAnalyticsAdapter.initOptions.fpid.group;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function initReadLsIds() {
|
|
119
|
+
if (isNaN(iiqAnalyticsAnalyticsAdapter.initOptions.partner) || iiqAnalyticsAnalyticsAdapter.initOptions.partner == -1) return;
|
|
120
|
+
try {
|
|
121
|
+
iiqAnalyticsAnalyticsAdapter.initOptions.dataInLs = null;
|
|
122
|
+
let iData = readData(FIRST_PARTY_DATA_KEY + '_' + iiqAnalyticsAnalyticsAdapter.initOptions.partner)
|
|
123
|
+
if (iData) {
|
|
124
|
+
iiqAnalyticsAnalyticsAdapter.initOptions.lsIdsInitialized = true;
|
|
125
|
+
let pData = JSON.parse(iData);
|
|
126
|
+
iiqAnalyticsAnalyticsAdapter.initOptions.dataInLs = pData.data;
|
|
127
|
+
iiqAnalyticsAnalyticsAdapter.initOptions.eidl = pData.eidl || -1;
|
|
128
|
+
}
|
|
129
|
+
} catch (e) {
|
|
130
|
+
logError(e)
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function bidWon(args) {
|
|
135
|
+
if (!iiqAnalyticsAnalyticsAdapter.initOptions.lsValueInitialized) { initLsValues(); }
|
|
136
|
+
if (iiqAnalyticsAnalyticsAdapter.initOptions.lsValueInitialized && !iiqAnalyticsAnalyticsAdapter.initOptions.lsIdsInitialized) { initReadLsIds(); }
|
|
137
|
+
if (!iiqAnalyticsAnalyticsAdapter.initOptions.manualReport) {
|
|
138
|
+
ajax(constructFullUrl(preparePayload(args, true)), undefined, null, { method: 'GET' });
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
logInfo('IIQ ANALYTICS -> BID WON')
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function getRandom(start, end) {
|
|
145
|
+
return Math.floor((Math.random() * (end - start + 1)) + start);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export function preparePayload(data) {
|
|
149
|
+
let result = getDefaultDataObject();
|
|
150
|
+
|
|
151
|
+
result[PARAMS_NAMES.partnerId] = iiqAnalyticsAnalyticsAdapter.initOptions.partner;
|
|
152
|
+
result[PARAMS_NAMES.prebidVersion] = prebidVersion;
|
|
153
|
+
result[PARAMS_NAMES.referrer] = getReferrer();
|
|
154
|
+
|
|
155
|
+
result[PARAMS_NAMES.abTestGroup] = iiqAnalyticsAnalyticsAdapter.initOptions.currentGroup;
|
|
156
|
+
|
|
157
|
+
result[PARAMS_NAMES.isInTestGroup] = iiqAnalyticsAnalyticsAdapter.initOptions.currentGroup == 'A';
|
|
158
|
+
|
|
159
|
+
result[PARAMS_NAMES.agentId] = REPORTER_ID;
|
|
160
|
+
|
|
161
|
+
fillPrebidEventData(data, result);
|
|
162
|
+
|
|
163
|
+
fillEidsData(result);
|
|
164
|
+
|
|
165
|
+
return result;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
function fillEidsData(result) {
|
|
169
|
+
if (iiqAnalyticsAnalyticsAdapter.initOptions.lsIdsInitialized) {
|
|
170
|
+
result[PARAMS_NAMES.hadEidsInLocalStorage] = iiqAnalyticsAnalyticsAdapter.initOptions.eidl && iiqAnalyticsAnalyticsAdapter.initOptions.eidl > 0;
|
|
171
|
+
result[PARAMS_NAMES.auctionEidsLength] = iiqAnalyticsAnalyticsAdapter.initOptions.eidl || -1;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function fillPrebidEventData(eventData, result) {
|
|
176
|
+
if (eventData.bidderCode) { result.bidderCode = eventData.bidderCode; }
|
|
177
|
+
if (eventData.cpm) { result.cpm = eventData.cpm; }
|
|
178
|
+
if (eventData.currency) { result.currency = eventData.currency; }
|
|
179
|
+
if (eventData.originalCpm) { result.originalCpm = eventData.originalCpm; }
|
|
180
|
+
if (eventData.originalCurrency) { result.originalCurrency = eventData.originalCurrency; }
|
|
181
|
+
if (eventData.status) { result.status = eventData.status; }
|
|
182
|
+
if (eventData.auctionId) { result.prebidAuctionId = eventData.auctionId; }
|
|
183
|
+
|
|
184
|
+
result.biddingPlatformId = 1;
|
|
185
|
+
result.partnerAuctionId = 'BW';
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function getDefaultDataObject() {
|
|
189
|
+
return {
|
|
190
|
+
'inbbl': false,
|
|
191
|
+
'pbjsver': prebidVersion,
|
|
192
|
+
'partnerAuctionId': 'BW',
|
|
193
|
+
'reportSource': 'pbjs',
|
|
194
|
+
'abGroup': 'U',
|
|
195
|
+
'jsversion': JSVERSION,
|
|
196
|
+
'partnerId': -1,
|
|
197
|
+
'biddingPlatformId': 1,
|
|
198
|
+
'idls': false,
|
|
199
|
+
'ast': -1,
|
|
200
|
+
'aeidln': -1
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
function constructFullUrl(data) {
|
|
205
|
+
let report = []
|
|
206
|
+
data = btoa(JSON.stringify(data))
|
|
207
|
+
report.push(data)
|
|
208
|
+
return defaultUrl + '?pid=' + iiqAnalyticsAnalyticsAdapter.initOptions.partner +
|
|
209
|
+
'&mct=1' +
|
|
210
|
+
((iiqAnalyticsAnalyticsAdapter.initOptions && iiqAnalyticsAnalyticsAdapter.initOptions.fpid)
|
|
211
|
+
? '&iiqid=' + encodeURIComponent(iiqAnalyticsAnalyticsAdapter.initOptions.fpid.pcid) : '') +
|
|
212
|
+
'&agid=' + REPORTER_ID +
|
|
213
|
+
'&jsver=' + JSVERSION +
|
|
214
|
+
'&vrref=' + getReferrer() +
|
|
215
|
+
'&source=pbjs' +
|
|
216
|
+
'&payload=' + JSON.stringify(report)
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
export function getReferrer() {
|
|
220
|
+
return document.referrer;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
iiqAnalyticsAnalyticsAdapter.originEnableAnalytics = iiqAnalyticsAnalyticsAdapter.enableAnalytics;
|
|
224
|
+
|
|
225
|
+
iiqAnalyticsAnalyticsAdapter.enableAnalytics = function (myConfig) {
|
|
226
|
+
iiqAnalyticsAnalyticsAdapter.originEnableAnalytics(myConfig); // call the base class function
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
adapterManager.registerAnalyticsAdapter({
|
|
230
|
+
adapter: iiqAnalyticsAnalyticsAdapter,
|
|
231
|
+
code: MODULE_NAME
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
export default iiqAnalyticsAnalyticsAdapter;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
Module Name: iiqAnalytics
|
|
4
|
+
Module Type: Analytics Adapter
|
|
5
|
+
Maintainer: julian@intentiq.com
|
|
6
|
+
|
|
7
|
+
# Description
|
|
8
|
+
|
|
9
|
+
By using this Intent IQ adapter, you will be able to obtain comprehensive analytics and metrics regarding the performance of the Intent IQ Unified ID module. This includes how the module impacts your revenue, CPMs, and fill rates related to bidders and domains.
|
|
10
|
+
|
|
11
|
+
## Intent IQ Universal ID Registration
|
|
12
|
+
|
|
13
|
+
No registration for this module is required.
|
|
14
|
+
|
|
15
|
+
## Intent IQ Universal IDConfiguration
|
|
16
|
+
|
|
17
|
+
<B>IMPORTANT</B>: only effective when Intent IQ Universal ID module is installed and configured. [(How-To)](https://docs.prebid.org/dev-docs/modules/userid-submodules/intentiq.html)
|
|
18
|
+
|
|
19
|
+
No additional configuration for this module is required. We will use the configuration provided for Intent IQ Universal IQ module.
|
|
20
|
+
|
|
21
|
+
#### Example Configuration
|
|
22
|
+
|
|
23
|
+
```js
|
|
24
|
+
pbjs.enableAnalytics({
|
|
25
|
+
provider: 'iiqAnalytics'
|
|
26
|
+
});
|
|
27
|
+
```
|
|
File without changes
|
|
@@ -2,7 +2,7 @@ import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
|
2
2
|
import { VIDEO } from '../src/mediaTypes.js';
|
|
3
3
|
import { isArray, isFn, deepAccess, deepSetValue, getDNT, logError, logWarn } from '../src/utils.js';
|
|
4
4
|
import { config } from '../src/config.js';
|
|
5
|
-
import { hasPurpose1Consent } from '../src/utils/
|
|
5
|
+
import { hasPurpose1Consent } from '../src/utils/gdpr.js';
|
|
6
6
|
|
|
7
7
|
const BIDDER_CODE = 'jwplayer';
|
|
8
8
|
const BASE_URL = 'https://vpb-server.jwplayer.com/';
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
import {submodule} from '../src/hook.js';
|
|
13
13
|
import {config} from '../src/config.js';
|
|
14
14
|
import {ajaxBuilder} from '../src/ajax.js';
|
|
15
|
-
import {deepAccess, logError} from '../src/utils.js'
|
|
15
|
+
import { deepAccess, logError, logWarn } from '../src/utils.js'
|
|
16
16
|
import {find} from '../src/polyfill.js';
|
|
17
17
|
import {getGlobal} from '../src/prebidGlobal.js';
|
|
18
18
|
|
|
@@ -429,17 +429,37 @@ export function addTargetingToBid(bid, targeting) {
|
|
|
429
429
|
bid.rtd = Object.assign({}, rtd, jwRtd);
|
|
430
430
|
}
|
|
431
431
|
|
|
432
|
-
function getPlayer(playerDivId) {
|
|
432
|
+
export function getPlayer(playerDivId) {
|
|
433
433
|
const jwplayer = window.jwplayer;
|
|
434
434
|
if (!jwplayer) {
|
|
435
435
|
logError(SUBMODULE_NAME + '.js was not found on page');
|
|
436
436
|
return;
|
|
437
437
|
}
|
|
438
438
|
|
|
439
|
-
|
|
440
|
-
if (
|
|
441
|
-
|
|
439
|
+
let player = jwplayer(playerDivId);
|
|
440
|
+
if (player && player.getPlaylist) {
|
|
441
|
+
return player;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
const playerOnPageCount = document.getElementsByClassName('jwplayer').length;
|
|
445
|
+
if (playerOnPageCount === 0) {
|
|
446
|
+
logError('No JWPlayer instances have been detected on the page');
|
|
442
447
|
return;
|
|
443
448
|
}
|
|
444
|
-
|
|
449
|
+
|
|
450
|
+
let errorMessage = `player Div ID ${playerDivId} did not match any players.`;
|
|
451
|
+
|
|
452
|
+
// If there are multiple instances on the page, we cannot guess which one should be targeted.
|
|
453
|
+
if (playerOnPageCount > 1) {
|
|
454
|
+
logError(errorMessage);
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
player = jwplayer();
|
|
459
|
+
if (player && player.getPlaylist) {
|
|
460
|
+
logWarn(`${errorMessage} Targeting player Div ID ${player.id} instead`);
|
|
461
|
+
return player;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
logError(errorMessage);
|
|
445
465
|
}
|
|
@@ -12,6 +12,12 @@ import stateFactory from '../libraries/video/shared/state.js';
|
|
|
12
12
|
import { JWPLAYER_VENDOR } from '../libraries/video/constants/vendorCodes.js';
|
|
13
13
|
import { getEventHandler } from '../libraries/video/shared/eventHandler.js';
|
|
14
14
|
import { submodule } from '../src/hook.js';
|
|
15
|
+
/**
|
|
16
|
+
* @typedef {import('../libraries/video/constants/ortb.js').OrtbVideoParams} OrtbVideoParams
|
|
17
|
+
* @typedef {import('../libraries/video/shared/state.js').State} State
|
|
18
|
+
* @typedef {import('../modules/videoModule/coreVideo.js').VideoProvider} VideoProvider
|
|
19
|
+
* @typedef {import('../modules/videoModule/coreVideo.js').videoProviderConfig} videoProviderConfig
|
|
20
|
+
*/
|
|
15
21
|
|
|
16
22
|
/**
|
|
17
23
|
* @constructor
|
|
@@ -24,7 +24,7 @@ import {find, includes} from '../src/polyfill.js';
|
|
|
24
24
|
import {INSTREAM, OUTSTREAM} from '../src/video.js';
|
|
25
25
|
import {getStorageManager} from '../src/storageManager.js';
|
|
26
26
|
import {bidderSettings} from '../src/bidderSettings.js';
|
|
27
|
-
import {hasPurpose1Consent} from '../src/utils/
|
|
27
|
+
import {hasPurpose1Consent} from '../src/utils/gdpr.js';
|
|
28
28
|
import {convertOrtbRequestToProprietaryNative} from '../src/native.js';
|
|
29
29
|
import {APPNEXUS_CATEGORY_MAPPING} from '../libraries/categoryTranslationMapping/index.js';
|
|
30
30
|
import {
|