prebid.js 9.4.1 → 9.6.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/aidemBidAdapter.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/connectIdSystem.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 +69 -8
- 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 +208 -199
- 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/riseUtils.js +1 -0
- 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/smarthubBidAdapter.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/telariaBidAdapter.js +1 -1
- package/dist/teqblazeUtils.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/uid2IdSystem_shared.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/riseUtils/index.js +330 -0
- 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/teqblazeUtils/bidderUtils.js +15 -11
- 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/adagioAnalyticsAdapter.js +101 -84
- package/modules/adagioAnalyticsAdapter.md +4 -0
- package/modules/adagioBidAdapter.js +5 -17
- 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/aidemBidAdapter.js +2 -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 +6 -2
- 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/insticatorBidAdapter.js +35 -31
- 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/kargoBidAdapter.js +11 -14
- package/modules/kimberliteBidAdapter.js +24 -7
- package/modules/kimberliteBidAdapter.md +30 -1
- 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/minutemediaBidAdapter.js +21 -398
- package/modules/mobianRtdProvider.js +16 -2
- package/modules/nextMillenniumBidAdapter.js +1 -27
- package/modules/nexx360BidAdapter.js +3 -2
- package/modules/nobidBidAdapter.js +1 -1
- package/modules/openwebBidAdapter.js +18 -396
- 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/publirBidAdapter.js +20 -273
- package/modules/pubmaticBidAdapter.js +12 -0
- package/modules/pubxaiAnalyticsAdapter.js +306 -164
- package/modules/relevatehealthBidAdapter.js +2 -1
- package/modules/resetdigitalBidAdapter.md +54 -45
- package/modules/richaudienceBidAdapter.js +1 -1
- package/modules/riseBidAdapter.js +19 -400
- package/modules/rtdModule/index.js +5 -3
- package/modules/shinezBidAdapter.js +17 -361
- package/modules/sirdataRtdProvider.js +2 -0
- package/modules/sizeMapping.js +2 -5
- package/modules/smaatoBidAdapter.js +18 -1
- package/modules/smarthubBidAdapter.js +45 -177
- package/modules/smilewantedBidAdapter.js +26 -22
- package/modules/snigelBidAdapter.js +1 -1
- package/modules/sonobiBidAdapter.js +5 -10
- package/modules/stnBidAdapter.js +22 -398
- 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/telariaBidAdapter.js +2 -32
- package/modules/uid2IdSystem_shared.js +51 -39
- 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/adloader.js +1 -0
- package/src/ajax.js +15 -0
- package/src/config.js +0 -4
- package/src/debugging.js +1 -0
- package/src/prebid.js +4 -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/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/fpd/gdpr_spec.js +1 -1
- package/test/spec/libraries/userAgentUtils_spec.js +109 -0
- package/test/spec/modules/adagioAnalyticsAdapter_spec.js +231 -141
- package/test/spec/modules/adagioBidAdapter_spec.js +32 -66
- 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/connectIdSystem_spec.js +27 -28
- 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/insticatorBidAdapter_spec.js +8 -1
- package/test/spec/modules/intentIqAnalyticsAdapter_spec.js +172 -0
- package/test/spec/modules/jwplayerRtdProvider_spec.js +61 -0
- package/test/spec/modules/kargoBidAdapter_spec.js +7 -8
- package/test/spec/modules/kimberliteBidAdapter_spec.js +137 -65
- 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/nexx360BidAdapter_spec.js +1 -1
- 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/smarthubBidAdapter_spec.js +6 -4
- 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/unit/pbjs_api_spec.js +11 -0
- package/test/spec/utils_spec.js +19 -0
- /package/src/utils/{gpdr.js → gdpr.js} +0 -0
|
@@ -7,12 +7,22 @@ function isValidIdentity(identity) {
|
|
|
7
7
|
return !!(typeof identity === 'object' && identity !== null && identity.advertising_token && identity.identity_expires && identity.refresh_from && identity.refresh_token && identity.refresh_expires);
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
+
// Helper function to prepend message
|
|
11
|
+
function prependMessage(message) {
|
|
12
|
+
return `UID2 shared library - ${message}`;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Wrapper function for logInfo
|
|
16
|
+
function logInfoWrapper(logInfo, ...args) {
|
|
17
|
+
logInfo(prependMessage(args[0]), ...args.slice(1));
|
|
18
|
+
}
|
|
19
|
+
|
|
10
20
|
// This is extracted from an in-progress API client. Once it's available via NPM, this class should be replaced with the NPM package.
|
|
11
21
|
export class Uid2ApiClient {
|
|
12
22
|
constructor(opts, clientId, logInfo, logWarn) {
|
|
13
23
|
this._baseUrl = opts.baseUrl;
|
|
14
24
|
this._clientVersion = clientId;
|
|
15
|
-
this._logInfo = logInfo;
|
|
25
|
+
this._logInfo = (...args) => logInfoWrapper(logInfo, ...args);
|
|
16
26
|
this._logWarn = logWarn;
|
|
17
27
|
}
|
|
18
28
|
|
|
@@ -35,7 +45,7 @@ export class Uid2ApiClient {
|
|
|
35
45
|
if (this.isValidRefreshResponse(response)) {
|
|
36
46
|
if (response.status === 'success') { return { status: response.status, identity: response.body }; }
|
|
37
47
|
return response;
|
|
38
|
-
} else { return `Response didn't contain a valid status
|
|
48
|
+
} else { return prependMessage(`Response didn't contain a valid status`); }
|
|
39
49
|
}
|
|
40
50
|
callRefreshApi(refreshDetails) {
|
|
41
51
|
const url = this._baseUrl + '/v2/token/refresh';
|
|
@@ -53,7 +63,7 @@ export class Uid2ApiClient {
|
|
|
53
63
|
this._logInfo('No response decryption key available, assuming unencrypted JSON');
|
|
54
64
|
const response = JSON.parse(responseText);
|
|
55
65
|
const result = this.ResponseToRefreshResult(response);
|
|
56
|
-
if (typeof result === 'string') { rejectPromise(result); } else { resolvePromise(result); }
|
|
66
|
+
if (typeof result === 'string') { rejectPromise(prependMessage(result)); } else { resolvePromise(result); }
|
|
57
67
|
} else {
|
|
58
68
|
this._logInfo('Decrypting refresh API response');
|
|
59
69
|
const encodeResp = this.createArrayBuffer(atob(responseText));
|
|
@@ -69,12 +79,12 @@ export class Uid2ApiClient {
|
|
|
69
79
|
this._logInfo('Decrypted to:', decryptedResponse);
|
|
70
80
|
const response = JSON.parse(decryptedResponse);
|
|
71
81
|
const result = this.ResponseToRefreshResult(response);
|
|
72
|
-
if (typeof result === 'string') { rejectPromise(result); } else { resolvePromise(result); }
|
|
73
|
-
}, (reason) => this._logWarn(`Call to UID2 API failed
|
|
74
|
-
}, (reason) => this._logWarn(`Call to UID2 API failed
|
|
82
|
+
if (typeof result === 'string') { rejectPromise(prependMessage(result)); } else { resolvePromise(result); }
|
|
83
|
+
}, (reason) => this._logWarn(prependMessage(`Call to UID2 API failed`), reason));
|
|
84
|
+
}, (reason) => this._logWarn(prependMessage(`Call to UID2 API failed`), reason));
|
|
75
85
|
}
|
|
76
86
|
} catch (_err) {
|
|
77
|
-
rejectPromise(responseText);
|
|
87
|
+
rejectPromise(prependMessage(responseText));
|
|
78
88
|
}
|
|
79
89
|
},
|
|
80
90
|
error: (error, xhr) => {
|
|
@@ -82,9 +92,9 @@ export class Uid2ApiClient {
|
|
|
82
92
|
this._logInfo('Error status, assuming unencrypted JSON');
|
|
83
93
|
const response = JSON.parse(xhr.responseText);
|
|
84
94
|
const result = this.ResponseToRefreshResult(response);
|
|
85
|
-
if (typeof result === 'string') { rejectPromise(result); } else { resolvePromise(result); }
|
|
95
|
+
if (typeof result === 'string') { rejectPromise(prependMessage(result)); } else { resolvePromise(result); }
|
|
86
96
|
} catch (_e) {
|
|
87
|
-
rejectPromise(error)
|
|
97
|
+
rejectPromise(prependMessage(error));
|
|
88
98
|
}
|
|
89
99
|
}
|
|
90
100
|
}, refreshDetails.refresh_token, { method: 'POST',
|
|
@@ -99,7 +109,7 @@ export class Uid2StorageManager {
|
|
|
99
109
|
this._storage = storage;
|
|
100
110
|
this._preferLocalStorage = preferLocalStorage;
|
|
101
111
|
this._storageName = storageName;
|
|
102
|
-
this._logInfo = logInfo;
|
|
112
|
+
this._logInfo = (...args) => logInfoWrapper(logInfo, ...args);
|
|
103
113
|
}
|
|
104
114
|
readCookie(cookieName) {
|
|
105
115
|
return this._storage.cookiesAreEnabled() ? this._storage.getCookie(cookieName) : null;
|
|
@@ -392,7 +402,7 @@ if (FEATURES.UID2_CSTG) {
|
|
|
392
402
|
this._baseUrl = opts.baseUrl;
|
|
393
403
|
this._serverPublicKey = opts.cstg.serverPublicKey;
|
|
394
404
|
this._subscriptionId = opts.cstg.subscriptionId;
|
|
395
|
-
this._logInfo = logInfo;
|
|
405
|
+
this._logInfo = (...args) => logInfoWrapper(logInfo, ...args);
|
|
396
406
|
this._logWarn = logWarn;
|
|
397
407
|
}
|
|
398
408
|
|
|
@@ -512,11 +522,11 @@ if (FEATURES.UID2_CSTG) {
|
|
|
512
522
|
// A 200 should always be a success response.
|
|
513
523
|
// Something has gone wrong.
|
|
514
524
|
rejectPromise(
|
|
515
|
-
`API error: Response body was invalid for HTTP status 200: ${decryptedResponse}`
|
|
525
|
+
prependMessage(`API error: Response body was invalid for HTTP status 200: ${decryptedResponse}`)
|
|
516
526
|
);
|
|
517
527
|
}
|
|
518
528
|
} catch (err) {
|
|
519
|
-
rejectPromise(err);
|
|
529
|
+
rejectPromise(prependMessage(err));
|
|
520
530
|
}
|
|
521
531
|
},
|
|
522
532
|
error: (error, xhr) => {
|
|
@@ -524,32 +534,32 @@ if (FEATURES.UID2_CSTG) {
|
|
|
524
534
|
if (xhr.status === 400) {
|
|
525
535
|
const response = JSON.parse(xhr.responseText);
|
|
526
536
|
if (this.isCstgApiClientErrorResponse(response)) {
|
|
527
|
-
rejectPromise(`Client error: ${response.message}`);
|
|
537
|
+
rejectPromise(prependMessage(`Client error: ${response.message}`));
|
|
528
538
|
} else {
|
|
529
539
|
// A 400 should always be a client error.
|
|
530
540
|
// Something has gone wrong.
|
|
531
541
|
rejectPromise(
|
|
532
|
-
`API error: Response body was invalid for HTTP status 400: ${xhr.responseText}`
|
|
542
|
+
prependMessage(`UID2 API error: Response body was invalid for HTTP status 400: ${xhr.responseText}`)
|
|
533
543
|
);
|
|
534
544
|
}
|
|
535
545
|
} else if (xhr.status === 403) {
|
|
536
546
|
const response = JSON.parse(xhr.responseText);
|
|
537
547
|
if (this.isCstgApiForbiddenResponse(xhr)) {
|
|
538
|
-
rejectPromise(`Forbidden: ${response.message}`);
|
|
548
|
+
rejectPromise(prependMessage(`Forbidden: ${response.message}`));
|
|
539
549
|
} else {
|
|
540
550
|
// A 403 should always be a forbidden response.
|
|
541
551
|
// Something has gone wrong.
|
|
542
552
|
rejectPromise(
|
|
543
|
-
`API error: Response body was invalid for HTTP status 403: ${xhr.responseText}`
|
|
553
|
+
prependMessage(`UID2 API error: Response body was invalid for HTTP status 403: ${xhr.responseText}`)
|
|
544
554
|
);
|
|
545
555
|
}
|
|
546
556
|
} else {
|
|
547
557
|
rejectPromise(
|
|
548
|
-
`API error: Unexpected HTTP status ${xhr.status}: ${error}`
|
|
558
|
+
prependMessage(`UID2 API error: Unexpected HTTP status ${xhr.status}: ${error}`)
|
|
549
559
|
);
|
|
550
560
|
}
|
|
551
561
|
} catch (_e) {
|
|
552
|
-
rejectPromise(error);
|
|
562
|
+
rejectPromise(prependMessage(error));
|
|
553
563
|
}
|
|
554
564
|
},
|
|
555
565
|
},
|
|
@@ -678,43 +688,45 @@ if (FEATURES.UID2_CSTG) {
|
|
|
678
688
|
}
|
|
679
689
|
|
|
680
690
|
export function Uid2GetId(config, prebidStorageManager, _logInfo, _logWarn) {
|
|
691
|
+
const logInfo = (...args) => logInfoWrapper(_logInfo, ...args);
|
|
692
|
+
|
|
681
693
|
let suppliedToken = null;
|
|
682
694
|
const preferLocalStorage = (config.storage !== 'cookie');
|
|
683
|
-
const storageManager = new Uid2StorageManager(prebidStorageManager, preferLocalStorage, config.internalStorage,
|
|
684
|
-
|
|
695
|
+
const storageManager = new Uid2StorageManager(prebidStorageManager, preferLocalStorage, config.internalStorage, logInfo);
|
|
696
|
+
logInfo(`Module is using ${preferLocalStorage ? 'local storage' : 'cookies'} for internal storage.`);
|
|
685
697
|
|
|
686
698
|
const isCstgEnabled =
|
|
687
699
|
clientSideTokenGenerator &&
|
|
688
700
|
clientSideTokenGenerator.isCSTGOptionsValid(config.cstg, _logWarn);
|
|
689
701
|
if (isCstgEnabled) {
|
|
690
|
-
|
|
702
|
+
logInfo(`Module is using client-side token generation.`);
|
|
691
703
|
// Ignores config.paramToken and config.serverCookieName if any is provided
|
|
692
704
|
suppliedToken = null;
|
|
693
705
|
} else if (config.paramToken) {
|
|
694
706
|
suppliedToken = config.paramToken;
|
|
695
|
-
|
|
707
|
+
logInfo('Read token from params', suppliedToken);
|
|
696
708
|
} else if (config.serverCookieName) {
|
|
697
709
|
suppliedToken = storageManager.readProvidedCookie(config.serverCookieName);
|
|
698
|
-
|
|
710
|
+
logInfo('Read token from server-supplied cookie', suppliedToken);
|
|
699
711
|
}
|
|
700
712
|
let storedTokens = storageManager.getStoredValueWithFallback();
|
|
701
|
-
|
|
713
|
+
logInfo('Loaded module-stored tokens:', storedTokens);
|
|
702
714
|
|
|
703
715
|
if (storedTokens && typeof storedTokens === 'string') {
|
|
704
716
|
// Stored value is a plain token - if no token is supplied, just use the stored value.
|
|
705
717
|
|
|
706
718
|
if (!suppliedToken && !isCstgEnabled) {
|
|
707
|
-
|
|
719
|
+
logInfo('Returning legacy cookie value.');
|
|
708
720
|
return { id: storedTokens };
|
|
709
721
|
}
|
|
710
722
|
// Otherwise, ignore the legacy value - it should get over-written later anyway.
|
|
711
|
-
|
|
723
|
+
logInfo('Discarding superseded legacy cookie.');
|
|
712
724
|
storedTokens = null;
|
|
713
725
|
}
|
|
714
726
|
|
|
715
727
|
if (suppliedToken && storedTokens) {
|
|
716
728
|
if (storedTokens.originalToken?.advertising_token !== suppliedToken.advertising_token) {
|
|
717
|
-
|
|
729
|
+
logInfo('Server supplied new token - ignoring stored value.', storedTokens.originalToken?.advertising_token, suppliedToken.advertising_token);
|
|
718
730
|
// Stored token wasn't originally sourced from the provided token - ignore the stored value. A new user has logged in?
|
|
719
731
|
storedTokens = null;
|
|
720
732
|
}
|
|
@@ -723,16 +735,16 @@ export function Uid2GetId(config, prebidStorageManager, _logInfo, _logWarn) {
|
|
|
723
735
|
if (FEATURES.UID2_CSTG && isCstgEnabled) {
|
|
724
736
|
const cstgIdentity = clientSideTokenGenerator.getValidIdentity(config.cstg, _logWarn);
|
|
725
737
|
if (cstgIdentity) {
|
|
726
|
-
if (storedTokens && clientSideTokenGenerator.isStoredTokenInvalid(cstgIdentity, storedTokens,
|
|
738
|
+
if (storedTokens && clientSideTokenGenerator.isStoredTokenInvalid(cstgIdentity, storedTokens, logInfo, _logWarn)) {
|
|
727
739
|
storedTokens = null;
|
|
728
740
|
}
|
|
729
741
|
|
|
730
742
|
if (!storedTokens || Date.now() > storedTokens.latestToken.refresh_expires) {
|
|
731
|
-
const promise = clientSideTokenGenerator.generateTokenAndStore(config.apiBaseUrl, config.cstg, cstgIdentity, storageManager,
|
|
732
|
-
|
|
743
|
+
const promise = clientSideTokenGenerator.generateTokenAndStore(config.apiBaseUrl, config.cstg, cstgIdentity, storageManager, logInfo, _logWarn);
|
|
744
|
+
logInfo('Generate token using CSTG');
|
|
733
745
|
return { callback: (cb) => {
|
|
734
746
|
promise.then((result) => {
|
|
735
|
-
|
|
747
|
+
logInfo('Token generation responded, passing the new token on.', result);
|
|
736
748
|
cb(result);
|
|
737
749
|
});
|
|
738
750
|
} };
|
|
@@ -742,25 +754,25 @@ export function Uid2GetId(config, prebidStorageManager, _logInfo, _logWarn) {
|
|
|
742
754
|
|
|
743
755
|
const useSuppliedToken = !(storedTokens?.latestToken) || (suppliedToken && suppliedToken.identity_expires > storedTokens.latestToken.identity_expires);
|
|
744
756
|
const newestAvailableToken = useSuppliedToken ? suppliedToken : storedTokens.latestToken;
|
|
745
|
-
|
|
757
|
+
logInfo('UID2 module selected latest token', useSuppliedToken, newestAvailableToken);
|
|
746
758
|
if ((!newestAvailableToken || Date.now() > newestAvailableToken.refresh_expires)) {
|
|
747
|
-
|
|
759
|
+
logInfo('Newest available token is expired and not refreshable.');
|
|
748
760
|
return { id: null };
|
|
749
761
|
}
|
|
750
762
|
if (Date.now() > newestAvailableToken.identity_expires) {
|
|
751
|
-
const promise = refreshTokenAndStore(config.apiBaseUrl, newestAvailableToken, config.clientId, storageManager,
|
|
752
|
-
|
|
763
|
+
const promise = refreshTokenAndStore(config.apiBaseUrl, newestAvailableToken, config.clientId, storageManager, logInfo, _logWarn);
|
|
764
|
+
logInfo('Token is expired but can be refreshed, attempting refresh.');
|
|
753
765
|
return { callback: (cb) => {
|
|
754
766
|
promise.then((result) => {
|
|
755
|
-
|
|
767
|
+
logInfo('Refresh reponded, passing the updated token on.', result);
|
|
756
768
|
cb(result);
|
|
757
769
|
});
|
|
758
770
|
} };
|
|
759
771
|
}
|
|
760
772
|
// If should refresh (but don't need to), refresh in the background.
|
|
761
773
|
if (Date.now() > newestAvailableToken.refresh_from) {
|
|
762
|
-
|
|
763
|
-
refreshTokenAndStore(config.apiBaseUrl, newestAvailableToken, config.clientId, storageManager,
|
|
774
|
+
logInfo(`Refreshing token in background with low priority.`);
|
|
775
|
+
refreshTokenAndStore(config.apiBaseUrl, newestAvailableToken, config.clientId, storageManager, logInfo, _logWarn);
|
|
764
776
|
}
|
|
765
777
|
const tokens = {
|
|
766
778
|
originalToken: suppliedToken ?? storedTokens?.originalToken,
|
package/modules/userId/eids.js
CHANGED
package/modules/utiqIdSystem.js
CHANGED
|
@@ -27,11 +27,6 @@ function getUtiqFromStorage() {
|
|
|
27
27
|
let utiqPassStorage = JSON.parse(
|
|
28
28
|
storage.getDataFromLocalStorage('utiqPass')
|
|
29
29
|
);
|
|
30
|
-
logInfo(
|
|
31
|
-
`${LOG_PREFIX}: Local storage utiqPass: ${JSON.stringify(
|
|
32
|
-
utiqPassStorage
|
|
33
|
-
)}`
|
|
34
|
-
);
|
|
35
30
|
|
|
36
31
|
if (
|
|
37
32
|
utiqPassStorage &&
|
|
@@ -40,12 +35,19 @@ function getUtiqFromStorage() {
|
|
|
40
35
|
utiqPassStorage.connectId.idGraph.length > 0
|
|
41
36
|
) {
|
|
42
37
|
utiqPass = utiqPassStorage.connectId.idGraph[0];
|
|
38
|
+
|
|
39
|
+
logInfo(
|
|
40
|
+
`${LOG_PREFIX}: Local storage utiqPass: ${JSON.stringify(
|
|
41
|
+
utiqPassStorage
|
|
42
|
+
)}`
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
logInfo(
|
|
46
|
+
`${LOG_PREFIX}: Graph of utiqPass: ${JSON.stringify(
|
|
47
|
+
utiqPass
|
|
48
|
+
)}`
|
|
49
|
+
);
|
|
43
50
|
}
|
|
44
|
-
logInfo(
|
|
45
|
-
`${LOG_PREFIX}: Graph of utiqPass: ${JSON.stringify(
|
|
46
|
-
utiqPass
|
|
47
|
-
)}`
|
|
48
|
-
);
|
|
49
51
|
|
|
50
52
|
return {
|
|
51
53
|
utiq:
|
|
@@ -13,8 +13,8 @@ let optout;
|
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Check if data passed is empty
|
|
16
|
-
* @param {*}
|
|
17
|
-
* @returns {Boolean} is
|
|
16
|
+
* @param {*} data to test against
|
|
17
|
+
* @returns {Boolean} is data empty
|
|
18
18
|
*/
|
|
19
19
|
function isEmptyData(data) {
|
|
20
20
|
let check = true;
|
|
@@ -30,10 +30,10 @@ function isEmptyData(data) {
|
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* Check if required keys exist in data object
|
|
33
|
-
* @param {Object} data object
|
|
34
|
-
* @param {Array} array of required keys
|
|
35
|
-
* @param {String} object path (for printing warning)
|
|
36
|
-
* @param {Number} index of object value in the data array (for printing warning)
|
|
33
|
+
* @param {Object} obj data object
|
|
34
|
+
* @param {Array} required array of required keys
|
|
35
|
+
* @param {String} parent object path (for printing warning)
|
|
36
|
+
* @param {Number} i index of object value in the data array (for printing warning)
|
|
37
37
|
* @returns {Boolean} is requirements fulfilled
|
|
38
38
|
*/
|
|
39
39
|
function getRequiredData(obj, required, parent, i) {
|
|
@@ -51,8 +51,8 @@ function getRequiredData(obj, required, parent, i) {
|
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
53
|
* Check if data type is valid
|
|
54
|
-
* @param {*} value to test against
|
|
55
|
-
* @param {Object} object containing type definition and if should be array bool
|
|
54
|
+
* @param {*} data value to test against
|
|
55
|
+
* @param {Object} mapping object containing type definition and if should be array bool
|
|
56
56
|
* @returns {Boolean} is type fulfilled
|
|
57
57
|
*/
|
|
58
58
|
function typeValidation(data, mapping) {
|
|
@@ -77,10 +77,10 @@ function typeValidation(data, mapping) {
|
|
|
77
77
|
|
|
78
78
|
/**
|
|
79
79
|
* Validates ortb2 data arrays and filters out invalid data
|
|
80
|
-
* @param {Array} ortb2 data array
|
|
81
|
-
* @param {Object} object defining child type and if array
|
|
82
|
-
* @param {String} config path of data array
|
|
83
|
-
* @param {String} parent path for logging warnings
|
|
80
|
+
* @param {Array} arr ortb2 data array
|
|
81
|
+
* @param {Object} child object defining child type and if array
|
|
82
|
+
* @param {String} path config path of data array
|
|
83
|
+
* @param {String} parent parent path for logging warnings
|
|
84
84
|
* @returns {Array} validated/filtered data
|
|
85
85
|
*/
|
|
86
86
|
export function filterArrayData(arr, child, path, parent) {
|
|
@@ -136,9 +136,9 @@ export function filterArrayData(arr, child, path, parent) {
|
|
|
136
136
|
|
|
137
137
|
/**
|
|
138
138
|
* Validates ortb2 object and filters out invalid data
|
|
139
|
-
* @param {Object} ortb2 object
|
|
140
|
-
* @param {String} config path of data array
|
|
141
|
-
* @param {String} parent path for logging warnings
|
|
139
|
+
* @param {Object} fpd ortb2 object
|
|
140
|
+
* @param {String} path config path of data array
|
|
141
|
+
* @param {String} parent parent path for logging warnings
|
|
142
142
|
* @returns {Object} validated/filtered data
|
|
143
143
|
*/
|
|
144
144
|
export function validateFpd(fpd, path = '', parent = '') {
|
|
@@ -190,6 +190,8 @@ export function validateFpd(fpd, path = '', parent = '') {
|
|
|
190
190
|
|
|
191
191
|
/**
|
|
192
192
|
* Run validation on global and bidder config data for ortb2
|
|
193
|
+
* @param {Object} data global and bidder config data
|
|
194
|
+
* @returns {Object} validated data
|
|
193
195
|
*/
|
|
194
196
|
function runValidations(data) {
|
|
195
197
|
return {
|
|
@@ -200,6 +202,9 @@ function runValidations(data) {
|
|
|
200
202
|
|
|
201
203
|
/**
|
|
202
204
|
* Sets default values to ortb2 if exists and adds currency and ortb2 setConfig callbacks on init
|
|
205
|
+
* @param {Object} fpdConf configuration object
|
|
206
|
+
* @param {Object} data ortb2 data
|
|
207
|
+
* @returns {Object} processed data
|
|
203
208
|
*/
|
|
204
209
|
export function processFpd(fpdConf, data) {
|
|
205
210
|
// Checks for existsnece of pubcid optout cookie/storage
|
|
@@ -210,11 +215,11 @@ export function processFpd(fpdConf, data) {
|
|
|
210
215
|
return (!fpdConf.skipValidations) ? runValidations(data) : data;
|
|
211
216
|
}
|
|
212
217
|
|
|
213
|
-
/** @type {
|
|
218
|
+
/** @type {{name: string, queue: number, processFpd: function}} */
|
|
214
219
|
export const validationSubmodule = {
|
|
215
220
|
name: 'validation',
|
|
216
221
|
queue: 1,
|
|
217
222
|
processFpd
|
|
218
223
|
}
|
|
219
224
|
|
|
220
|
-
submodule('firstPartyData', validationSubmodule)
|
|
225
|
+
submodule('firstPartyData', validationSubmodule);
|
|
@@ -13,6 +13,9 @@ import { submodule } from '../src/hook.js';
|
|
|
13
13
|
import stateFactory from '../libraries/video/shared/state.js';
|
|
14
14
|
import { PLAYBACK_MODE } from '../libraries/video/constants/constants.js';
|
|
15
15
|
import { getEventHandler } from '../libraries/video/shared/eventHandler.js';
|
|
16
|
+
/**
|
|
17
|
+
* @typedef {import('../libraries/video/shared/state.js').State} State
|
|
18
|
+
*/
|
|
16
19
|
|
|
17
20
|
/*
|
|
18
21
|
Plugins of interest:
|
|
@@ -33,7 +33,7 @@ const LOG_ERROR_MESS = {
|
|
|
33
33
|
onlyVideoInstream: `Only video ${VIDEO_INSTREAM} supported`,
|
|
34
34
|
videoMissing: 'Bid request videoType property is missing - '
|
|
35
35
|
};
|
|
36
|
-
const currencyWhiteList = ['EUR', 'USD', 'GBP', 'PLN'];
|
|
36
|
+
const currencyWhiteList = ['EUR', 'USD', 'GBP', 'PLN', 'CHF', 'SEK'];
|
|
37
37
|
export const storage = getStorageManager({bidderCode: BIDDER_CODE});
|
|
38
38
|
const _bidResponseTimeLogged = [];
|
|
39
39
|
export const spec = {
|
|
@@ -13,9 +13,10 @@ import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
|
13
13
|
import {BANNER} from '../src/mediaTypes.js';
|
|
14
14
|
import {find, includes} from '../src/polyfill.js';
|
|
15
15
|
import {getStorageManager} from '../src/storageManager.js';
|
|
16
|
-
import {hasPurpose1Consent} from '../src/utils/
|
|
16
|
+
import {hasPurpose1Consent} from '../src/utils/gdpr.js';
|
|
17
17
|
import {getANKeywordParam} from '../libraries/appnexusUtils/anKeywords.js';
|
|
18
18
|
import {convertCamelToUnderscore} from '../libraries/appnexusUtils/anUtils.js';
|
|
19
|
+
import { transformSizes } from '../libraries/sizeUtils/tranformSize.js';
|
|
19
20
|
|
|
20
21
|
/**
|
|
21
22
|
* @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
|
|
@@ -470,32 +471,6 @@ function bidToTag(bid) {
|
|
|
470
471
|
return tag;
|
|
471
472
|
}
|
|
472
473
|
|
|
473
|
-
/* Turn bid request sizes into ut-compatible format */
|
|
474
|
-
function transformSizes(requestSizes) {
|
|
475
|
-
let sizes = [];
|
|
476
|
-
let sizeObj = {};
|
|
477
|
-
|
|
478
|
-
if (
|
|
479
|
-
isArray(requestSizes) &&
|
|
480
|
-
requestSizes.length === 2 &&
|
|
481
|
-
!isArray(requestSizes[0])
|
|
482
|
-
) {
|
|
483
|
-
sizeObj.width = parseInt(requestSizes[0], 10);
|
|
484
|
-
sizeObj.height = parseInt(requestSizes[1], 10);
|
|
485
|
-
sizes.push(sizeObj);
|
|
486
|
-
} else if (typeof requestSizes === 'object') {
|
|
487
|
-
for (let i = 0; i < requestSizes.length; i++) {
|
|
488
|
-
let size = requestSizes[i];
|
|
489
|
-
sizeObj = {};
|
|
490
|
-
sizeObj.width = parseInt(size[0], 10);
|
|
491
|
-
sizeObj.height = parseInt(size[1], 10);
|
|
492
|
-
sizes.push(sizeObj);
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
return sizes;
|
|
497
|
-
}
|
|
498
|
-
|
|
499
474
|
function hasUserInfo(bid) {
|
|
500
475
|
return !!bid.params.user;
|
|
501
476
|
}
|
|
@@ -3,7 +3,7 @@ import { BANNER, VIDEO } from '../src/mediaTypes.js';
|
|
|
3
3
|
import { deepAccess, isFn, isStr, isNumber, isArray, isEmpty, isPlainObject, generateUUID, logInfo, logWarn } from '../src/utils.js';
|
|
4
4
|
import { config } from '../src/config.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
|
|
|
8
8
|
const INTEGRATION_METHOD = 'prebid.js';
|
|
9
9
|
const BIDDER_CODE = 'yahooAds';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prebid.js",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.6.0",
|
|
4
4
|
"description": "Header Bidding Management Library",
|
|
5
5
|
"main": "src/prebid.public.js",
|
|
6
6
|
"exports": {
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"eslint": "^7.27.0",
|
|
67
67
|
"eslint-config-standard": "^10.2.1",
|
|
68
68
|
"eslint-plugin-import": "^2.20.2",
|
|
69
|
-
"eslint-plugin-jsdoc": "^
|
|
69
|
+
"eslint-plugin-jsdoc": "^48.5.0",
|
|
70
70
|
"eslint-plugin-node": "^11.1.0",
|
|
71
71
|
"eslint-plugin-prebid": "file:./plugins/eslint",
|
|
72
72
|
"eslint-plugin-promise": "^5.1.0",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"execa": "^1.0.0",
|
|
75
75
|
"faker": "^5.5.3",
|
|
76
76
|
"fs.extra": "^1.3.2",
|
|
77
|
-
"gulp": "^4.0.
|
|
77
|
+
"gulp": "^4.0.2",
|
|
78
78
|
"gulp-clean": "^0.4.0",
|
|
79
79
|
"gulp-concat": "^2.6.0",
|
|
80
80
|
"gulp-connect": "^5.7.0",
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
"opn": "^5.4.0",
|
|
116
116
|
"querystring": "^0.2.1",
|
|
117
117
|
"resolve-from": "^5.0.0",
|
|
118
|
-
"sinon": "^4.
|
|
118
|
+
"sinon": "^4.5.0",
|
|
119
119
|
"through2": "^4.0.2",
|
|
120
120
|
"url": "^0.11.0",
|
|
121
121
|
"url-parse": "^1.0.5",
|
package/plugins/eslint/index.js
CHANGED
|
@@ -1,52 +1,13 @@
|
|
|
1
1
|
const _ = require('lodash');
|
|
2
2
|
const { flagErrors } = require('./validateImports.js');
|
|
3
|
+
const noGlobal = require('eslint/lib/rules/no-restricted-globals.js');
|
|
4
|
+
|
|
5
|
+
function getName(node) {
|
|
6
|
+
return node.type === 'Literal' ? node.value : node.name;
|
|
7
|
+
}
|
|
3
8
|
|
|
4
9
|
module.exports = {
|
|
5
10
|
rules: {
|
|
6
|
-
'no-outerText': {
|
|
7
|
-
meta: {
|
|
8
|
-
docs: {
|
|
9
|
-
description: '.outerText property on DOM elements should not be used due to performance issues'
|
|
10
|
-
},
|
|
11
|
-
messages: {
|
|
12
|
-
noInnerText: 'Use of `.outerText` is not allowed. Use `.textContent` instead.',
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
create: function(context) {
|
|
16
|
-
return {
|
|
17
|
-
MemberExpression(node) {
|
|
18
|
-
if (node.property && node.property.name === 'outerText') {
|
|
19
|
-
context.report({
|
|
20
|
-
node: node.property,
|
|
21
|
-
messageId: 'noOuterText',
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
'no-innerText': {
|
|
29
|
-
meta: {
|
|
30
|
-
docs: {
|
|
31
|
-
description: '.innerText property on DOM elements should not be used due to performance issues'
|
|
32
|
-
},
|
|
33
|
-
messages: {
|
|
34
|
-
noInnerText: 'Use of `.innerText` is not allowed. Use `.textContent` instead.',
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
create: function(context) {
|
|
38
|
-
return {
|
|
39
|
-
MemberExpression(node) {
|
|
40
|
-
if (node.property && node.property.name === 'innerText') {
|
|
41
|
-
context.report({
|
|
42
|
-
node: node.property,
|
|
43
|
-
messageId: 'noInnerText',
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
11
|
'validate-imports': {
|
|
51
12
|
meta: {
|
|
52
13
|
docs: {
|
|
@@ -69,8 +30,75 @@ module.exports = {
|
|
|
69
30
|
let importPath = node.source.value.trim();
|
|
70
31
|
flagErrors(context, node, importPath);
|
|
71
32
|
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
'no-member': {
|
|
37
|
+
meta: {
|
|
38
|
+
schema: {
|
|
39
|
+
type: 'array',
|
|
40
|
+
items: {
|
|
41
|
+
type: 'object',
|
|
42
|
+
properties: {
|
|
43
|
+
target: { type: 'string' },
|
|
44
|
+
name: { type: 'string' },
|
|
45
|
+
message: { type: 'string' }
|
|
46
|
+
},
|
|
47
|
+
required: ['name', 'message'],
|
|
48
|
+
additionalProperties: false
|
|
49
|
+
},
|
|
50
|
+
uniqueItems: true,
|
|
51
|
+
minItems: 1
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
messages: {
|
|
55
|
+
noMember: "Unexpected use of '{{target}}.{{name}}'. {{message}}",
|
|
72
56
|
}
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
create(context) {
|
|
60
|
+
return {
|
|
61
|
+
MemberExpression(node) {
|
|
62
|
+
context.options.forEach(({name, target, message}) => {
|
|
63
|
+
if (target === node.object.name && getName(node.property) === name) {
|
|
64
|
+
context.report({
|
|
65
|
+
node,
|
|
66
|
+
messageId: 'noMember',
|
|
67
|
+
data: {
|
|
68
|
+
name,
|
|
69
|
+
target: target || '',
|
|
70
|
+
message
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
'no-global': Object.assign({}, noGlobal, {
|
|
80
|
+
// no-restricted-global that also looks for `window.GLOBAL`
|
|
81
|
+
create(context) {
|
|
82
|
+
const globals = Object.fromEntries(
|
|
83
|
+
context.options.map(option => typeof option === 'string' ? [option, null] : [option.name, option.message])
|
|
84
|
+
)
|
|
85
|
+
return Object.assign(noGlobal.create(context), {
|
|
86
|
+
MemberExpression(node) {
|
|
87
|
+
const name = getName(node.property);
|
|
88
|
+
if (node.object.name === 'window' && globals.hasOwnProperty(name)) {
|
|
89
|
+
const customMessage = globals[name];
|
|
90
|
+
context.report({
|
|
91
|
+
node,
|
|
92
|
+
messageId: customMessage == null ? 'defaultMessage' : 'customMessage',
|
|
93
|
+
data: {
|
|
94
|
+
name,
|
|
95
|
+
customMessage
|
|
96
|
+
}
|
|
97
|
+
})
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
})
|
|
73
101
|
}
|
|
74
|
-
}
|
|
102
|
+
}),
|
|
75
103
|
}
|
|
76
104
|
};
|