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
|
@@ -130,76 +130,96 @@ export const spec = {
|
|
|
130
130
|
* @param {BidderRequest} bidderRequest
|
|
131
131
|
* @return ServerRequest Info describing the request to the server.
|
|
132
132
|
*/
|
|
133
|
-
buildRequests: (validBidRequests = [], bidderRequest)
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
|
|
133
|
+
buildRequests: function(validBidRequests = [], bidderRequest) {
|
|
134
|
+
// check consent to be able to read user cookie
|
|
135
|
+
const allowCookieReading =
|
|
136
|
+
// No GDPR applies
|
|
137
|
+
!deepAccess(bidderRequest, 'gdprConsent.gdprApplies') ||
|
|
138
|
+
// OR GDPR applies and we have global consent
|
|
139
|
+
deepAccess(bidderRequest, 'gdprConsent.vendorData.hasGlobalConsent') === true ||
|
|
140
|
+
(
|
|
141
|
+
// Vendor consent
|
|
142
|
+
deepAccess(bidderRequest, 'gdprConsent.vendorData.vendor.consents.573') === true &&
|
|
143
|
+
// Purposes
|
|
144
|
+
[1, 3, 4].every(v => deepAccess(bidderRequest, `gdprConsent.vendorData.purpose.consents.${v}`) === true) &&
|
|
145
|
+
// Flexible purposes
|
|
146
|
+
[2, 7, 9, 10].every(v =>
|
|
147
|
+
deepAccess(bidderRequest, `gdprConsent.vendorData.purpose.consents.${v}`) === true ||
|
|
148
|
+
deepAccess(bidderRequest, `gdprConsent.vendorData.purpose.legitimateInterests.${v}`) === true
|
|
149
|
+
)
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
return validBidRequests.map(bid => ({
|
|
153
|
+
method: 'POST',
|
|
154
|
+
url: 'https://pb.dmxleo.com',
|
|
155
|
+
data: {
|
|
156
|
+
pbv: '$prebid.version$',
|
|
157
|
+
bidder_request: {
|
|
158
|
+
gdprConsent: {
|
|
159
|
+
apiVersion: deepAccess(bidderRequest, 'gdprConsent.apiVersion', 1),
|
|
160
|
+
consentString: deepAccess(bidderRequest, 'gdprConsent.consentString', ''),
|
|
161
|
+
// Cast boolean in any case (eg: if value is int) to ensure type
|
|
162
|
+
gdprApplies: !!deepAccess(bidderRequest, 'gdprConsent.gdprApplies'),
|
|
163
|
+
},
|
|
164
|
+
refererInfo: {
|
|
165
|
+
page: deepAccess(bidderRequest, 'refererInfo.page', ''),
|
|
166
|
+
},
|
|
167
|
+
uspConsent: deepAccess(bidderRequest, 'uspConsent', ''),
|
|
168
|
+
gppConsent: {
|
|
169
|
+
gppString: deepAccess(bidderRequest, 'gppConsent.gppString') ||
|
|
170
|
+
deepAccess(bidderRequest, 'ortb2.regs.gpp', ''),
|
|
171
|
+
applicableSections: deepAccess(bidderRequest, 'gppConsent.applicableSections') ||
|
|
172
|
+
deepAccess(bidderRequest, 'ortb2.regs.gpp_sid', []),
|
|
173
|
+
},
|
|
147
174
|
},
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
gppString: deepAccess(bidderRequest, 'gppConsent.gppString') ||
|
|
151
|
-
deepAccess(bidderRequest, 'ortb2.regs.gpp', ''),
|
|
152
|
-
applicableSections: deepAccess(bidderRequest, 'gppConsent.applicableSections') ||
|
|
153
|
-
deepAccess(bidderRequest, 'ortb2.regs.gpp_sid', []),
|
|
175
|
+
config: {
|
|
176
|
+
api_key: bid.params.apiKey
|
|
154
177
|
},
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
startdelay: bid.mediaTypes?.[VIDEO]?.startdelay || 0,
|
|
190
|
-
w: bid.mediaTypes?.[VIDEO]?.w || 0,
|
|
191
|
-
h: bid.mediaTypes?.[VIDEO]?.h || 0,
|
|
178
|
+
// Cast boolean in any case (value should be 0 or 1) to ensure type
|
|
179
|
+
coppa: !!deepAccess(bidderRequest, 'ortb2.regs.coppa'),
|
|
180
|
+
// In app context, we need to retrieve additional informations
|
|
181
|
+
...(!deepAccess(bidderRequest, 'ortb2.site') && !!deepAccess(bidderRequest, 'ortb2.app') ? {
|
|
182
|
+
appBundle: deepAccess(bidderRequest, 'ortb2.app.bundle', ''),
|
|
183
|
+
appStoreUrl: deepAccess(bidderRequest, 'ortb2.app.storeurl', ''),
|
|
184
|
+
} : {}),
|
|
185
|
+
...(deepAccess(bidderRequest, 'ortb2.device') ? {
|
|
186
|
+
device: {
|
|
187
|
+
lmt: deepAccess(bidderRequest, 'ortb2.device.lmt', null),
|
|
188
|
+
ifa: deepAccess(bidderRequest, 'ortb2.device.ifa', ''),
|
|
189
|
+
atts: deepAccess(bidderRequest, 'ortb2.device.ext.atts', 0),
|
|
190
|
+
},
|
|
191
|
+
} : {}),
|
|
192
|
+
request: {
|
|
193
|
+
adUnitCode: deepAccess(bid, 'adUnitCode', ''),
|
|
194
|
+
auctionId: deepAccess(bid, 'auctionId', ''),
|
|
195
|
+
bidId: deepAccess(bid, 'bidId', ''),
|
|
196
|
+
mediaTypes: {
|
|
197
|
+
video: {
|
|
198
|
+
api: bid.mediaTypes?.[VIDEO]?.api || [],
|
|
199
|
+
mimes: bid.mediaTypes?.[VIDEO]?.mimes || [],
|
|
200
|
+
minduration: bid.mediaTypes?.[VIDEO]?.minduration || 0,
|
|
201
|
+
maxduration: bid.mediaTypes?.[VIDEO]?.maxduration || 0,
|
|
202
|
+
playbackmethod: bid.mediaTypes?.[VIDEO]?.playbackmethod || [],
|
|
203
|
+
plcmt: bid.mediaTypes?.[VIDEO]?.plcmt,
|
|
204
|
+
protocols: bid.mediaTypes?.[VIDEO]?.protocols || [],
|
|
205
|
+
skip: bid.mediaTypes?.[VIDEO]?.skip || 0,
|
|
206
|
+
skipafter: bid.mediaTypes?.[VIDEO]?.skipafter || 0,
|
|
207
|
+
skipmin: bid.mediaTypes?.[VIDEO]?.skipmin || 0,
|
|
208
|
+
startdelay: bid.mediaTypes?.[VIDEO]?.startdelay,
|
|
209
|
+
w: bid.mediaTypes?.[VIDEO]?.w || 0,
|
|
210
|
+
h: bid.mediaTypes?.[VIDEO]?.h || 0,
|
|
211
|
+
},
|
|
192
212
|
},
|
|
213
|
+
sizes: bid.sizes || [],
|
|
193
214
|
},
|
|
194
|
-
|
|
215
|
+
video_metadata: getVideoMetadata(bid, bidderRequest),
|
|
195
216
|
},
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
})),
|
|
217
|
+
options: {
|
|
218
|
+
withCredentials: allowCookieReading,
|
|
219
|
+
crossOrigin: true,
|
|
220
|
+
},
|
|
221
|
+
}));
|
|
222
|
+
},
|
|
203
223
|
|
|
204
224
|
/**
|
|
205
225
|
* Map the response from the server into a list of bids.
|
|
@@ -31,6 +31,7 @@ export function disableDebugging({hook, logger}) {
|
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
// eslint-disable-next-line prebid/no-global
|
|
34
35
|
function saveDebuggingConfig(debugConfig, {sessionStorage = window.sessionStorage, DEBUG_KEY} = {}) {
|
|
35
36
|
if (!debugConfig.enabled) {
|
|
36
37
|
try {
|
|
@@ -49,6 +50,7 @@ function saveDebuggingConfig(debugConfig, {sessionStorage = window.sessionStorag
|
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
52
|
|
|
53
|
+
// eslint-disable-next-line prebid/no-global
|
|
52
54
|
export function getConfig(debugging, {getStorage = () => window.sessionStorage, DEBUG_KEY, config, hook, logger} = {}) {
|
|
53
55
|
if (debugging == null) return;
|
|
54
56
|
let sessionStorage;
|
|
@@ -70,6 +72,7 @@ export function getConfig(debugging, {getStorage = () => window.sessionStorage,
|
|
|
70
72
|
export function sessionLoader({DEBUG_KEY, storage, config, hook, logger}) {
|
|
71
73
|
let overrides;
|
|
72
74
|
try {
|
|
75
|
+
// eslint-disable-next-line prebid/no-global
|
|
73
76
|
storage = storage || window.sessionStorage;
|
|
74
77
|
overrides = JSON.parse(storage.getItem(DEBUG_KEY));
|
|
75
78
|
} catch (e) {
|
|
@@ -2,8 +2,18 @@
|
|
|
2
2
|
* This module adds [DFP support]{@link https://www.doubleclickbygoogle.com/} for Video to Prebid.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { DEFAULT_DFP_PARAMS, DFP_ENDPOINT, setGdprConsent } from '../libraries/dfpUtils/dfpUtils.js';
|
|
6
|
+
import { getSignals } from '../libraries/gptUtils/gptUtils.js';
|
|
7
|
+
import { registerVideoSupport } from '../src/adServerManager.js';
|
|
8
|
+
import { gdprDataHandler } from '../src/adapterManager.js';
|
|
9
|
+
import { getPPID } from '../src/adserver.js';
|
|
10
|
+
import { auctionManager } from '../src/auctionManager.js';
|
|
11
|
+
import { config } from '../src/config.js';
|
|
12
|
+
import { EVENTS } from '../src/constants.js';
|
|
13
|
+
import * as events from '../src/events.js';
|
|
14
|
+
import { getHook } from '../src/hook.js';
|
|
15
|
+
import { getRefererInfo } from '../src/refererDetection.js';
|
|
16
|
+
import { targeting } from '../src/targeting.js';
|
|
7
17
|
import {
|
|
8
18
|
buildUrl,
|
|
9
19
|
deepAccess,
|
|
@@ -12,19 +22,8 @@ import {
|
|
|
12
22
|
isNumber,
|
|
13
23
|
logError,
|
|
14
24
|
parseSizesInput,
|
|
15
|
-
parseUrl
|
|
16
|
-
uniques
|
|
25
|
+
parseUrl
|
|
17
26
|
} from '../src/utils.js';
|
|
18
|
-
import {config} from '../src/config.js';
|
|
19
|
-
import {getHook} from '../src/hook.js';
|
|
20
|
-
import {auctionManager} from '../src/auctionManager.js';
|
|
21
|
-
import {gdprDataHandler} from '../src/adapterManager.js';
|
|
22
|
-
import * as events from '../src/events.js';
|
|
23
|
-
import {EVENTS} from '../src/constants.js';
|
|
24
|
-
import {getPPID} from '../src/adserver.js';
|
|
25
|
-
import {getRefererInfo} from '../src/refererDetection.js';
|
|
26
|
-
import {CLIENT_SECTIONS} from '../src/fpd/oneClient.js';
|
|
27
|
-
import {DEFAULT_DFP_PARAMS, DFP_ENDPOINT} from '../libraries/dfpUtils/dfpUtils.js';
|
|
28
27
|
/**
|
|
29
28
|
* @typedef {Object} DfpVideoParams
|
|
30
29
|
*
|
|
@@ -115,11 +114,7 @@ export function buildDfpVideoUrl(options) {
|
|
|
115
114
|
const descriptionUrl = getDescriptionUrl(bid, options, 'params');
|
|
116
115
|
if (descriptionUrl) { queryParams.description_url = descriptionUrl; }
|
|
117
116
|
const gdprConsent = gdprDataHandler.getConsentData();
|
|
118
|
-
|
|
119
|
-
if (typeof gdprConsent.gdprApplies === 'boolean') { queryParams.gdpr = Number(gdprConsent.gdprApplies); }
|
|
120
|
-
if (gdprConsent.consentString) { queryParams.gdpr_consent = gdprConsent.consentString; }
|
|
121
|
-
if (gdprConsent.addtlConsent) { queryParams.addtl_consent = gdprConsent.addtlConsent; }
|
|
122
|
-
}
|
|
117
|
+
setGdprConsent(gdprConsent, queryParams);
|
|
123
118
|
|
|
124
119
|
if (!queryParams.ppid) {
|
|
125
120
|
const ppid = getPPID();
|
|
@@ -171,20 +166,7 @@ export function buildDfpVideoUrl(options) {
|
|
|
171
166
|
const fpd = auctionManager.index.getBidRequest(options.bid || {})?.ortb2 ??
|
|
172
167
|
auctionManager.index.getAuction(options.bid || {})?.getFPD()?.global;
|
|
173
168
|
|
|
174
|
-
|
|
175
|
-
return sections
|
|
176
|
-
.flatMap(section => deepAccess(fpd, section) || [])
|
|
177
|
-
.filter(datum => datum.ext?.segtax === segtax)
|
|
178
|
-
.flatMap(datum => datum.segment?.map(seg => seg.id))
|
|
179
|
-
.filter(ob => ob)
|
|
180
|
-
.filter(uniques)
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
const signals = Object.entries({
|
|
184
|
-
IAB_AUDIENCE_1_1: getSegments(['user.data'], 4),
|
|
185
|
-
IAB_CONTENT_2_2: getSegments(CLIENT_SECTIONS.map(section => `${section}.content.data`), 6)
|
|
186
|
-
}).map(([taxonomy, values]) => values.length ? {taxonomy, values} : null)
|
|
187
|
-
.filter(ob => ob);
|
|
169
|
+
const signals = getSignals(fpd);
|
|
188
170
|
|
|
189
171
|
if (signals.length) {
|
|
190
172
|
queryParams.ppsj = btoa(JSON.stringify({
|
package/modules/dfpAdpod.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {submodule} from '../src/hook.js';
|
|
2
2
|
import {buildUrl, deepAccess, formatQS, logError, parseSizesInput} from '../src/utils.js';
|
|
3
3
|
import {auctionManager} from '../src/auctionManager.js';
|
|
4
|
-
import {DEFAULT_DFP_PARAMS, DFP_ENDPOINT} from '../libraries/dfpUtils/dfpUtils.js';
|
|
4
|
+
import {DEFAULT_DFP_PARAMS, DFP_ENDPOINT, setGdprConsent} from '../libraries/dfpUtils/dfpUtils.js';
|
|
5
5
|
import {gdprDataHandler} from '../src/consentHandler.js';
|
|
6
6
|
import {registerVideoSupport} from '../src/adServerManager.js';
|
|
7
7
|
|
|
@@ -79,11 +79,7 @@ export function buildAdpodVideoUrl({code, params, callback} = {}) {
|
|
|
79
79
|
);
|
|
80
80
|
|
|
81
81
|
const gdprConsent = gdprDataHandler.getConsentData();
|
|
82
|
-
|
|
83
|
-
if (typeof gdprConsent.gdprApplies === 'boolean') { queryParams.gdpr = Number(gdprConsent.gdprApplies); }
|
|
84
|
-
if (gdprConsent.consentString) { queryParams.gdpr_consent = gdprConsent.consentString; }
|
|
85
|
-
if (gdprConsent.addtlConsent) { queryParams.addtl_consent = gdprConsent.addtlConsent; }
|
|
86
|
-
}
|
|
82
|
+
setGdprConsent(gdprConsent, queryParams);
|
|
87
83
|
|
|
88
84
|
const masterTag = buildUrl({
|
|
89
85
|
...DFP_ENDPOINT,
|
|
@@ -101,6 +101,8 @@ export function getProfileApiUrl(customeUrl, enableReadFpid) {
|
|
|
101
101
|
|
|
102
102
|
export function readFpidFromLocalStrage() {
|
|
103
103
|
try {
|
|
104
|
+
// TODO: use storageManager
|
|
105
|
+
// eslint-disable-next-line prebid/no-global
|
|
104
106
|
const fpid = window.localStorage.getItem('ope_fpid');
|
|
105
107
|
if (fpid) {
|
|
106
108
|
return fpid;
|
|
@@ -3,6 +3,10 @@ import { getStorageManager } from '../src/storageManager.js';
|
|
|
3
3
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
4
4
|
import { BANNER, NATIVE } from '../src/mediaTypes.js';
|
|
5
5
|
import { getHLen, getHC, getDM } from '../src/fpd/navigator.js';
|
|
6
|
+
import { getPageTitle, getPageDescription, getPageKeywords, getConnectionDownLink, getReferrer } from '../libraries/fpdUtils/pageInfo.js';
|
|
7
|
+
import { getDevice, getScreenSize } from '../libraries/fpdUtils/deviceInfo.js';
|
|
8
|
+
import { getBidFloor } from '../libraries/currencyUtils/floor.js';
|
|
9
|
+
import { transformSizes, normalAdSize } from '../libraries/sizeUtils/tranformSize.js';
|
|
6
10
|
|
|
7
11
|
/**
|
|
8
12
|
* @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
|
|
@@ -22,6 +26,9 @@ const MEDIATYPE = [BANNER, NATIVE];
|
|
|
22
26
|
const COOKIE_KEY_SSPPID = '_ss_pp_id';
|
|
23
27
|
export const COOKIE_KEY_MGUID = '__mguid_';
|
|
24
28
|
const COOKIE_KEY_PMGUID = '__pmguid_';
|
|
29
|
+
const COOKIE_KEY_PBUID = 'pub_pp_tag';
|
|
30
|
+
const STORAGE_KEY_FTUID = 'fluct_ppUUIDv4';
|
|
31
|
+
const STORAGE_KEY_IMUID = '__im_ppid';
|
|
25
32
|
const COOKIE_RETENTION_TIME = 365 * 24 * 60 * 60 * 1000; // 1 year
|
|
26
33
|
const COOKY_SYNC_IFRAME_URL = 'https://asset.popin.cc/js/cookieSync.html';
|
|
27
34
|
export const THIRD_PARTY_COOKIE_ORIGIN = 'https://asset.popin.cc';
|
|
@@ -68,64 +75,6 @@ const NATIVERET = {
|
|
|
68
75
|
ext: {},
|
|
69
76
|
};
|
|
70
77
|
|
|
71
|
-
/**
|
|
72
|
-
* get page title111
|
|
73
|
-
* @returns {string}
|
|
74
|
-
*/
|
|
75
|
-
|
|
76
|
-
export function getPageTitle(win = window) {
|
|
77
|
-
try {
|
|
78
|
-
const ogTitle = win.top.document.querySelector('meta[property="og:title"]')
|
|
79
|
-
return win.top.document.title || (ogTitle && ogTitle.content) || '';
|
|
80
|
-
} catch (e) {
|
|
81
|
-
const ogTitle = document.querySelector('meta[property="og:title"]')
|
|
82
|
-
return document.title || (ogTitle && ogTitle.content) || '';
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* get page description
|
|
88
|
-
* @returns {string}
|
|
89
|
-
*/
|
|
90
|
-
export function getPageDescription(win = window) {
|
|
91
|
-
let element;
|
|
92
|
-
|
|
93
|
-
try {
|
|
94
|
-
element = win.top.document.querySelector('meta[name="description"]') ||
|
|
95
|
-
win.top.document.querySelector('meta[property="og:description"]')
|
|
96
|
-
} catch (e) {
|
|
97
|
-
element = document.querySelector('meta[name="description"]') ||
|
|
98
|
-
document.querySelector('meta[property="og:description"]')
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
return (element && element.content) || '';
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* get page keywords
|
|
106
|
-
* @returns {string}
|
|
107
|
-
*/
|
|
108
|
-
export function getPageKeywords(win = window) {
|
|
109
|
-
let element;
|
|
110
|
-
|
|
111
|
-
try {
|
|
112
|
-
element = win.top.document.querySelector('meta[name="keywords"]');
|
|
113
|
-
} catch (e) {
|
|
114
|
-
element = document.querySelector('meta[name="keywords"]');
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
return (element && element.content) || '';
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* get connection downlink
|
|
122
|
-
* @returns {number}
|
|
123
|
-
*/
|
|
124
|
-
export function getConnectionDownLink(win = window) {
|
|
125
|
-
const nav = win.navigator || {};
|
|
126
|
-
return nav && nav.connection && nav.connection.downlink >= 0 ? nav.connection.downlink.toString() : undefined;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
78
|
/**
|
|
130
79
|
* get pmg uid
|
|
131
80
|
* 获取并生成用户的id
|
|
@@ -140,7 +89,7 @@ export const getPmgUID = () => {
|
|
|
140
89
|
}
|
|
141
90
|
// Extend the expiration time of pmguid
|
|
142
91
|
try {
|
|
143
|
-
storage.setCookie(COOKIE_KEY_PMGUID, pmgUid,
|
|
92
|
+
storage.setCookie(COOKIE_KEY_PMGUID, pmgUid, getCookieTimeToUTCString());
|
|
144
93
|
} catch (e) {}
|
|
145
94
|
return pmgUid;
|
|
146
95
|
};
|
|
@@ -166,150 +115,14 @@ function getKv(obj, ...keys) {
|
|
|
166
115
|
return o;
|
|
167
116
|
}
|
|
168
117
|
|
|
169
|
-
/**
|
|
170
|
-
* get device
|
|
171
|
-
* @return {boolean}
|
|
172
|
-
*/
|
|
173
|
-
function getDevice() {
|
|
174
|
-
let check = false;
|
|
175
|
-
(function (a) {
|
|
176
|
-
let reg1 = new RegExp(
|
|
177
|
-
[
|
|
178
|
-
'(android|bbd+|meego)',
|
|
179
|
-
'.+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)',
|
|
180
|
-
'|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone',
|
|
181
|
-
'|p(ixi|re)/|plucker|pocket|psp|series(4|6)0|symbian|treo|up.(browser|link)|vodafone|wap',
|
|
182
|
-
'|windows ce|xda|xiino|android|ipad|playbook|silk',
|
|
183
|
-
].join(''),
|
|
184
|
-
'i'
|
|
185
|
-
);
|
|
186
|
-
let reg2 = new RegExp(
|
|
187
|
-
[
|
|
188
|
-
'1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)',
|
|
189
|
-
'|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )',
|
|
190
|
-
'|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55/|capi|ccwa|cdm-|cell',
|
|
191
|
-
'|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)',
|
|
192
|
-
'|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene',
|
|
193
|
-
'|gf-5|g-mo|go(.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c',
|
|
194
|
-
'|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|/)|ibro|idea|ig01|ikom',
|
|
195
|
-
'|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc-|kyo(c|k)',
|
|
196
|
-
'|le(no|xi)|lg( g|/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)',
|
|
197
|
-
'|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]',
|
|
198
|
-
'|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)',
|
|
199
|
-
'|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio',
|
|
200
|
-
'|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms',
|
|
201
|
-
'|ny|va)|sc(01|h-|oo|p-)|sdk/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al',
|
|
202
|
-
'|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)',
|
|
203
|
-
'|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(.b|g1|si)|utst|',
|
|
204
|
-
'v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)',
|
|
205
|
-
'|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-',
|
|
206
|
-
'|your|zeto|zte-',
|
|
207
|
-
].join(''),
|
|
208
|
-
'i'
|
|
209
|
-
);
|
|
210
|
-
if (reg1.test(a) || reg2.test(a.substr(0, 4))) {
|
|
211
|
-
check = true;
|
|
212
|
-
}
|
|
213
|
-
})(navigator.userAgent || navigator.vendor || window.opera);
|
|
214
|
-
return check;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* get BidFloor
|
|
219
|
-
* @param {*} bid
|
|
220
|
-
* @param {*} mediaType
|
|
221
|
-
* @param {*} sizes
|
|
222
|
-
* @returns
|
|
223
|
-
*/
|
|
224
|
-
function getBidFloor(bid) {
|
|
225
|
-
if (!utils.isFn(bid.getFloor)) {
|
|
226
|
-
return utils.deepAccess(bid, 'params.bidfloor', 0);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
try {
|
|
230
|
-
const bidFloor = bid.getFloor({
|
|
231
|
-
currency: 'USD',
|
|
232
|
-
mediaType: '*',
|
|
233
|
-
size: '*',
|
|
234
|
-
});
|
|
235
|
-
return bidFloor.floor;
|
|
236
|
-
} catch (_) {
|
|
237
|
-
return 0;
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* get sizes for rtb
|
|
243
|
-
* @param {Array|Object} requestSizes
|
|
244
|
-
* @return {Object}
|
|
245
|
-
*/
|
|
246
|
-
function transformSizes(requestSizes) {
|
|
247
|
-
let sizes = [];
|
|
248
|
-
let sizeObj = {};
|
|
249
|
-
|
|
250
|
-
if (
|
|
251
|
-
utils.isArray(requestSizes) &&
|
|
252
|
-
requestSizes.length === 2 &&
|
|
253
|
-
!utils.isArray(requestSizes[0])
|
|
254
|
-
) {
|
|
255
|
-
sizeObj.width = parseInt(requestSizes[0], 10);
|
|
256
|
-
sizeObj.height = parseInt(requestSizes[1], 10);
|
|
257
|
-
sizes.push(sizeObj);
|
|
258
|
-
} else if (typeof requestSizes === 'object') {
|
|
259
|
-
for (let i = 0; i < requestSizes.length; i++) {
|
|
260
|
-
let size = requestSizes[i];
|
|
261
|
-
sizeObj = {};
|
|
262
|
-
sizeObj.width = parseInt(size[0], 10);
|
|
263
|
-
sizeObj.height = parseInt(size[1], 10);
|
|
264
|
-
sizes.push(sizeObj);
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
return sizes;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
118
|
// Support sizes
|
|
272
|
-
const popInAdSize =
|
|
273
|
-
{ w: 300, h: 250 },
|
|
274
|
-
{ w: 300, h: 600 },
|
|
275
|
-
{ w: 728, h: 90 },
|
|
276
|
-
{ w: 970, h: 250 },
|
|
277
|
-
{ w: 320, h: 50 },
|
|
278
|
-
{ w: 160, h: 600 },
|
|
279
|
-
{ w: 320, h: 180 },
|
|
280
|
-
{ w: 320, h: 100 },
|
|
281
|
-
{ w: 336, h: 280 },
|
|
282
|
-
];
|
|
283
|
-
|
|
284
|
-
/**
|
|
285
|
-
* get screen size
|
|
286
|
-
*
|
|
287
|
-
* @returns {Array} eg: "['widthxheight']"
|
|
288
|
-
*/
|
|
289
|
-
function getScreenSize() {
|
|
290
|
-
return utils.parseSizesInput([window.screen.width, window.screen.height]);
|
|
291
|
-
}
|
|
119
|
+
const popInAdSize = normalAdSize;
|
|
292
120
|
|
|
293
121
|
/**
|
|
294
|
-
*
|
|
295
|
-
* @param bidderRequest
|
|
296
|
-
* @returns {string}
|
|
297
|
-
*/
|
|
298
|
-
function getReferrer(bidRequest = {}, bidderRequest = {}) {
|
|
299
|
-
let pageUrl;
|
|
300
|
-
if (bidRequest.params && bidRequest.params.referrer) {
|
|
301
|
-
pageUrl = bidRequest.params.referrer;
|
|
302
|
-
} else {
|
|
303
|
-
pageUrl = utils.deepAccess(bidderRequest, 'refererInfo.page');
|
|
304
|
-
}
|
|
305
|
-
return pageUrl;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
/**
|
|
309
|
-
* get current time to UTC string
|
|
122
|
+
* get cookie time to UTC string
|
|
310
123
|
* @returns utc string
|
|
311
124
|
*/
|
|
312
|
-
export function
|
|
125
|
+
export function getCookieTimeToUTCString() {
|
|
313
126
|
const date = new Date();
|
|
314
127
|
date.setTime(date.getTime() + COOKIE_RETENTION_TIME);
|
|
315
128
|
return date.toUTCString();
|
|
@@ -382,9 +195,8 @@ function getItems(validBidRequests, bidderRequest) {
|
|
|
382
195
|
}
|
|
383
196
|
}
|
|
384
197
|
if (!matchSize) {
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
: { h: 0, w: 0 };
|
|
198
|
+
const { height = 0, width = 0 } = sizes[0] || {};
|
|
199
|
+
matchSize = { h: height, w: width };
|
|
388
200
|
}
|
|
389
201
|
ret = {
|
|
390
202
|
id: id,
|
|
@@ -424,7 +236,7 @@ export const buildUTMTagData = (url) => {
|
|
|
424
236
|
});
|
|
425
237
|
UTMValue = JSON.parse(storage.getCookie(UTM_KEY) || '{}');
|
|
426
238
|
Object.assign(UTMValue, UTMParams);
|
|
427
|
-
storage.setCookie(UTM_KEY, JSON.stringify(UTMValue),
|
|
239
|
+
storage.setCookie(UTM_KEY, JSON.stringify(UTMValue), getCookieTimeToUTCString());
|
|
428
240
|
}
|
|
429
241
|
|
|
430
242
|
/**
|
|
@@ -435,10 +247,10 @@ export const buildUTMTagData = (url) => {
|
|
|
435
247
|
* @return {Object}
|
|
436
248
|
*/
|
|
437
249
|
function getParam(validBidRequests, bidderRequest) {
|
|
438
|
-
const pubcid = utils.deepAccess(validBidRequests[0], 'crumbs.pubcid');
|
|
439
250
|
const sharedid =
|
|
440
251
|
utils.deepAccess(validBidRequests[0], 'userId.sharedid.id') ||
|
|
441
|
-
utils.deepAccess(validBidRequests[0], 'userId.pubcid')
|
|
252
|
+
utils.deepAccess(validBidRequests[0], 'userId.pubcid') ||
|
|
253
|
+
utils.deepAccess(validBidRequests[0], 'crumbs.pubcid');
|
|
442
254
|
const eids = validBidRequests[0].userIdAsEids || validBidRequests[0].userId;
|
|
443
255
|
|
|
444
256
|
let isMobile = getDevice() ? 1 : 0;
|
|
@@ -466,10 +278,13 @@ function getParam(validBidRequests, bidderRequest) {
|
|
|
466
278
|
firstPartyData,
|
|
467
279
|
ssppid: storage.getCookie(COOKIE_KEY_SSPPID) || undefined,
|
|
468
280
|
pmguid: getPmgUID(),
|
|
281
|
+
ssftUid: storage.getDataFromLocalStorage(STORAGE_KEY_FTUID) || undefined,
|
|
282
|
+
ssimUid: storage.getDataFromLocalStorage(STORAGE_KEY_IMUID) || undefined,
|
|
283
|
+
sspbid: storage.getCookie(COOKIE_KEY_PBUID) || undefined,
|
|
469
284
|
tpData,
|
|
470
285
|
utm: storage.getCookie(UTM_KEY),
|
|
471
286
|
page: {
|
|
472
|
-
title: title ? title.slice(0,
|
|
287
|
+
title: title ? title.slice(0, 150) : undefined,
|
|
473
288
|
desc: desc ? desc.slice(0, 300) : undefined,
|
|
474
289
|
keywords: keywords ? keywords.slice(0, 100) : undefined,
|
|
475
290
|
hLen: getHLen(),
|
|
@@ -504,7 +319,7 @@ function getParam(validBidRequests, bidderRequest) {
|
|
|
504
319
|
ext,
|
|
505
320
|
user: {
|
|
506
321
|
buyeruid: storage.getCookie(COOKIE_KEY_MGUID) || undefined,
|
|
507
|
-
id: sharedid
|
|
322
|
+
id: sharedid,
|
|
508
323
|
},
|
|
509
324
|
tmax: timeout,
|
|
510
325
|
site: {
|
|
@@ -565,14 +380,15 @@ export const spec = {
|
|
|
565
380
|
* @return ServerRequest Info describing the request to the server.
|
|
566
381
|
*/
|
|
567
382
|
buildRequests: function (validBidRequests, bidderRequest) {
|
|
568
|
-
|
|
383
|
+
const pbToken = globals['token'];
|
|
384
|
+
if (!pbToken) return;
|
|
569
385
|
|
|
570
386
|
let payload = getParam(validBidRequests, bidderRequest);
|
|
571
|
-
|
|
572
387
|
const payloadString = JSON.stringify(payload);
|
|
388
|
+
|
|
573
389
|
return {
|
|
574
390
|
method: 'POST',
|
|
575
|
-
url: ENDPOINT_URL
|
|
391
|
+
url: `${ENDPOINT_URL}${pbToken}`,
|
|
576
392
|
data: payloadString,
|
|
577
393
|
};
|
|
578
394
|
},
|
|
@@ -696,7 +512,7 @@ export const spec = {
|
|
|
696
512
|
|
|
697
513
|
const response = event.data;
|
|
698
514
|
if (!response.optout && response.mguid) {
|
|
699
|
-
storage.setCookie(COOKIE_KEY_MGUID, response.mguid,
|
|
515
|
+
storage.setCookie(COOKIE_KEY_MGUID, response.mguid, getCookieTimeToUTCString());
|
|
700
516
|
}
|
|
701
517
|
}, true);
|
|
702
518
|
return [
|