prebid.js 9.1.0 → 9.3.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/browsers.json +3 -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/acuityadsBidAdapter.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 -0
- package/dist/addefendBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/admanBidAdapter.js +1 -1
- package/dist/adnuntiusBidAdapter.js +1 -1
- package/dist/adpod.js +1 -1
- package/dist/adprimeBidAdapter.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/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/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/appnexusUtils.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/autoplayDetection.js +1 -1
- package/dist/axisBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/beyondmediaBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bliinkBidAdapter.js +1 -1
- package/dist/boldwinBidAdapter.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/compassBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consentManagement.js +1 -0
- package/dist/consentManagementGpp.js +1 -1
- package/dist/consentManagementTcf.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/contentexchangeBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/copper6sspBidAdapter.js +1 -0
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/cwireBidAdapter.js +1 -1
- package/dist/dailymotionBidAdapter.js +1 -1
- package/dist/dependencies.json +96 -6
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/dxkultureBidAdapter.js +1 -1
- package/dist/e_volutionBidAdapter.js +1 -1
- package/dist/emtvBidAdapter.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/freewheel-sspBidAdapter.js +1 -1
- package/dist/globalsunBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/greenbidsRtdProvider.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hypelabBidAdapter.js +1 -1
- package/dist/id5AnalyticsAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/illuminBidAdapter.js +1 -1
- package/dist/imdsBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/intentIqIdSystem.js +1 -1
- package/dist/iqzoneBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/kimberliteBidAdapter.js +1 -1
- package/dist/kiviadsBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/krushmediaBidAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.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/loyalBidAdapter.js +1 -1
- package/dist/luceadBidAdapter.js +1 -1
- package/dist/lunamediahbBidAdapter.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/mathildeadsBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.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/mgidXBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/missenaBidAdapter.js +1 -1
- package/dist/mobfoxpbBidAdapter.js +1 -1
- package/dist/mobianRtdProvider.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 +211 -204
- 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/orakiBidAdapter.js +1 -0
- package/dist/orbidderBidAdapter.js +1 -1
- package/dist/ortbConverter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/ozoneBidAdapter.js +1 -1
- package/dist/paapi.js +1 -1
- package/dist/pairIdSystem.js +1 -1
- package/dist/pgamsspBidAdapter.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/playdigoBidAdapter.js +1 -1
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/pubCircleBidAdapter.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/qtBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/raynRtdProvider.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/retailspotBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/setupadBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/shinezRtbBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smartyadsBidAdapter.js +1 -1
- package/dist/smartyadsUtils.js +1 -0
- package/dist/smartytechBidAdapter.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/taboolaBidAdapter.js +1 -1
- package/dist/tagorasBidAdapter.js +1 -1
- package/dist/tappxBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/teqblazeUtils.js +1 -0
- package/dist/terceptAnalyticsAdapter.js +1 -1
- package/dist/themoneytizerBidAdapter.js +1 -1
- package/dist/topicsFpdModule.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/twistDigitalBidAdapter.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/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/vidazooUtils.js +1 -0
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visiblemeasuresBidAdapter.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/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/yuktamediaAnalyticsAdapter.js +1 -1
- package/integrationExamples/gpt/raynRtdProvider_example.html +1 -0
- package/libraries/adagioUtils/adagioUtils.js +35 -0
- package/libraries/appnexusUtils/anUtils.js +1 -0
- package/libraries/autoplayDetection/autoplay.js +8 -1
- package/libraries/consentManagement/cmUtils.js +38 -0
- package/libraries/ortbConverter/converter.js +1 -1
- package/libraries/smartyadsUtils/getAdUrlByRegion.js +32 -0
- package/libraries/teqblazeUtils/bidderUtils.js +253 -0
- package/libraries/vidazooUtils/bidderUtils.js +481 -0
- package/libraries/vidazooUtils/constants.js +7 -0
- package/modules/.submodules.json +1 -0
- package/modules/acuityadsBidAdapter.js +5 -203
- package/modules/adagioBidAdapter.js +1 -17
- package/modules/adagioRtdProvider.js +41 -51
- package/modules/adagioRtdProvider.md +1 -0
- package/modules/addefendBidAdapter.js +1 -2
- package/modules/adlooxRtdProvider.js +1 -1
- package/modules/admanBidAdapter.js +31 -188
- package/modules/adnuntiusBidAdapter.js +1 -0
- package/modules/adprimeBidAdapter.js +28 -165
- package/modules/adxcgAnalyticsAdapter.js +1 -2
- package/modules/axisBidAdapter.js +33 -165
- package/modules/beyondmediaBidAdapter.js +5 -189
- package/modules/bliinkBidAdapter.js +3 -31
- package/modules/boldwinBidAdapter.js +21 -159
- package/modules/ceeIdSystem.js +1 -1
- package/modules/compassBidAdapter.js +5 -198
- package/modules/consentManagementGpp.js +2 -38
- package/modules/consentManagementTcf.js +7 -38
- package/modules/contentexchangeBidAdapter.js +5 -200
- package/modules/conversantAnalyticsAdapter.js +1 -2
- package/modules/conversantBidAdapter.js +1 -0
- package/modules/copper6sspBidAdapter.js +19 -0
- package/modules/copper6sspBidAdapter.md +79 -0
- package/modules/criteoBidAdapter.js +10 -3
- package/modules/e_volutionBidAdapter.js +4 -186
- package/modules/emtvBidAdapter.js +5 -198
- package/modules/globalsunBidAdapter.js +5 -199
- package/modules/id5AnalyticsAdapter.js +1 -2
- package/modules/id5IdSystem.js +31 -2
- package/modules/id5IdSystem.md +67 -2
- package/modules/intentIqIdSystem.js +408 -50
- package/modules/intentIqIdSystem.md +92 -0
- package/modules/iqzoneBidAdapter.js +5 -224
- package/modules/kiviadsBidAdapter.js +5 -199
- package/modules/krushmediaBidAdapter.js +25 -143
- package/modules/liveIntentIdSystem.js +2 -2
- package/modules/loyalBidAdapter.js +4 -178
- package/modules/lunamediahbBidAdapter.js +5 -118
- package/modules/mabidderBidAdapter.js +1 -2
- package/modules/mathildeadsBidAdapter.js +5 -198
- package/modules/medianetAnalyticsAdapter.js +1 -2
- package/modules/medianetBidAdapter.js +1 -1
- package/modules/mgidXBidAdapter.js +14 -207
- package/modules/mobfoxpbBidAdapter.js +4 -135
- package/modules/mobianRtdProvider.js +2 -2
- package/modules/nobidAnalyticsAdapter.js +2 -3
- package/modules/orakiBidAdapter.js +19 -0
- package/modules/orakiBidAdapter.md +79 -0
- package/modules/orbidderBidAdapter.js +4 -2
- package/modules/ozoneBidAdapter.js +117 -58
- package/modules/paapi.js +2 -1
- package/modules/pairIdSystem.js +27 -10
- package/modules/pgamsspBidAdapter.js +5 -240
- package/modules/pixfutureBidAdapter.js +1 -2
- package/modules/playdigoBidAdapter.js +4 -186
- package/modules/prebidServerBidAdapter/index.js +10 -3
- package/modules/pubCircleBidAdapter.js +5 -218
- package/modules/pubmaticAnalyticsAdapter.js +21 -8
- package/modules/pubxaiAnalyticsAdapter.js +1 -5
- package/modules/qtBidAdapter.js +5 -224
- package/modules/raynRtdProvider.js +36 -3
- package/modules/seedtagBidAdapter.js +5 -0
- package/modules/setupadBidAdapter.js +58 -140
- package/modules/smartadserverBidAdapter.js +3 -0
- package/modules/smartyadsBidAdapter.js +6 -110
- package/modules/smartytechBidAdapter.js +7 -2
- package/modules/snigelBidAdapter.js +1 -2
- package/modules/tappxBidAdapter.js +1 -2
- package/modules/terceptAnalyticsAdapter.js +1 -2
- package/modules/topicsFpdModule.js +1 -1
- package/modules/twistDigitalBidAdapter.js +1 -12
- package/modules/uid2IdSystem.js +0 -1
- package/modules/uid2IdSystem_shared.js +0 -1
- package/modules/userId/index.js +31 -21
- package/modules/vidazooBidAdapter.js +26 -468
- package/modules/visiblemeasuresBidAdapter.js +5 -199
- package/modules/yahooAdsBidAdapter.js +4 -1
- package/modules/yuktamediaAnalyticsAdapter.js +1 -2
- package/package.json +1 -1
- package/src/auction.js +5 -63
- package/src/utils/focusTimeout.js +41 -0
- package/src/utils/ttlCollection.js +2 -1
- package/src/utils.js +42 -0
- package/src/videoCache.js +72 -0
- package/test/mocks/videoCacheStub.js +1 -1
- package/test/spec/auctionmanager_spec.js +16 -1
- package/test/spec/fpd/gdpr_spec.js +24 -2
- package/test/spec/libraries/teqblazeUtils/bidderUtils_spec.js +519 -0
- package/test/spec/modules/acuityadsBidAdapter_spec.js +79 -43
- package/test/spec/modules/adagioRtdProvider_spec.js +62 -1
- package/test/spec/modules/admanBidAdapter_spec.js +370 -247
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +6 -3
- package/test/spec/modules/adprimeBidAdapter_spec.js +225 -78
- package/test/spec/modules/axisBidAdapter_spec.js +78 -14
- package/test/spec/modules/beyondmediaBidAdapter_spec.js +80 -18
- package/test/spec/modules/bliinkBidAdapter_spec.js +8 -2
- package/test/spec/modules/boldwinBidAdapter_spec.js +221 -75
- package/test/spec/modules/compassBidAdapter_spec.js +130 -16
- package/test/spec/modules/contentexchangeBidAdapter_spec.js +134 -21
- package/test/spec/modules/conversantAnalyticsAdapter_spec.js +1 -1
- package/test/spec/modules/conversantBidAdapter_spec.js +7 -0
- package/test/spec/modules/copper6sspBidAdapter_spec.js +514 -0
- package/test/spec/modules/e_volutionBidAdapter_spec.js +65 -3
- package/test/spec/modules/emtvBidAdapter_spec.js +131 -16
- package/test/spec/modules/globalsunBidAdapter_spec.js +130 -16
- package/test/spec/modules/id5IdSystem_spec.js +79 -3
- package/test/spec/modules/intentIqIdSystem_spec.js +264 -36
- package/test/spec/modules/iqzoneBidAdapter_spec.js +66 -12
- package/test/spec/modules/kiviadsBidAdapter_spec.js +131 -20
- package/test/spec/modules/krushmediaBidAdapter_spec.js +272 -90
- package/test/spec/modules/loyalBidAdapter_spec.js +114 -14
- package/test/spec/modules/lunamediahbBidAdapter_spec.js +221 -87
- package/test/spec/modules/mathildeadsBidAdapter_spec.js +87 -18
- package/test/spec/modules/mgidXBidAdapter_spec.js +11 -3
- package/test/spec/modules/mobfoxpbBidAdapter_spec.js +229 -91
- package/test/spec/modules/orakiBidAdapter_spec.js +510 -0
- package/test/spec/modules/ozoneBidAdapter_spec.js +192 -22
- package/test/spec/modules/paapi_spec.js +5 -5
- package/test/spec/modules/pgamsspBidAdapter_spec.js +83 -16
- package/test/spec/modules/playdigoBidAdapter_spec.js +38 -9
- package/test/spec/modules/prebidServerBidAdapter_spec.js +14 -0
- package/test/spec/modules/pubCircleBidAdapter_spec.js +82 -17
- package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +52 -5
- package/test/spec/modules/qtBidAdapter_spec.js +15 -3
- package/test/spec/modules/raynRtdProvider_spec.js +25 -0
- package/test/spec/modules/seedtagBidAdapter_spec.js +29 -0
- package/test/spec/modules/setupadBidAdapter_spec.js +124 -97
- package/test/spec/modules/smartadserverBidAdapter_spec.js +7 -0
- package/test/spec/modules/smartyadsBidAdapter_spec.js +6 -83
- package/test/spec/modules/smartytechBidAdapter_spec.js +5 -1
- package/test/spec/modules/topicsFpdModule_spec.js +43 -59
- package/test/spec/modules/twistDigitalBidAdapter_spec.js +5 -3
- package/test/spec/modules/userId_spec.js +86 -47
- package/test/spec/modules/vidazooBidAdapter_spec.js +21 -23
- package/test/spec/modules/visiblemeasuresBidAdapter_spec.js +130 -16
- package/test/spec/modules/yahooAdsBidAdapter_spec.js +1 -1
- package/test/spec/ortbConverter/converter_spec.js +7 -3
- package/test/spec/unit/utils/focusTimeout_spec.js +60 -0
- package/test/spec/videoCache_spec.js +56 -53
package/modules/ceeIdSystem.js
CHANGED
|
@@ -1,212 +1,19 @@
|
|
|
1
|
-
import { isFn, deepAccess, logMessage, logError } from '../src/utils.js';
|
|
2
|
-
import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
|
|
3
|
-
|
|
4
1
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
5
2
|
import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
|
|
6
|
-
import {
|
|
3
|
+
import { isBidRequestValid, buildRequests, interpretResponse, getUserSyncs } from '../libraries/teqblazeUtils/bidderUtils.js';
|
|
7
4
|
|
|
8
5
|
const BIDDER_CODE = 'compass';
|
|
9
6
|
const AD_URL = 'https://sa-lb.deliverimp.com/pbjs';
|
|
10
7
|
const SYNC_URL = 'https://sa-cs.deliverimp.com';
|
|
11
8
|
|
|
12
|
-
function isBidResponseValid(bid) {
|
|
13
|
-
if (!bid.requestId || !bid.cpm || !bid.creativeId || !bid.ttl || !bid.currency) {
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
switch (bid.mediaType) {
|
|
18
|
-
case BANNER:
|
|
19
|
-
return Boolean(bid.width && bid.height && bid.ad);
|
|
20
|
-
case VIDEO:
|
|
21
|
-
return Boolean(bid.vastUrl || bid.vastXml);
|
|
22
|
-
case NATIVE:
|
|
23
|
-
return Boolean(bid.native && bid.native.impressionTrackers && bid.native.impressionTrackers.length);
|
|
24
|
-
default:
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function getPlacementReqData(bid) {
|
|
30
|
-
const { params, bidId, mediaTypes } = bid;
|
|
31
|
-
const schain = bid.schain || {};
|
|
32
|
-
const { placementId, endpointId } = params;
|
|
33
|
-
const bidfloor = getBidFloor(bid);
|
|
34
|
-
|
|
35
|
-
const placement = {
|
|
36
|
-
bidId,
|
|
37
|
-
schain,
|
|
38
|
-
bidfloor
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
if (placementId) {
|
|
42
|
-
placement.placementId = placementId;
|
|
43
|
-
placement.type = 'publisher';
|
|
44
|
-
} else if (endpointId) {
|
|
45
|
-
placement.endpointId = endpointId;
|
|
46
|
-
placement.type = 'network';
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
if (mediaTypes && mediaTypes[BANNER]) {
|
|
50
|
-
placement.adFormat = BANNER;
|
|
51
|
-
placement.sizes = mediaTypes[BANNER].sizes;
|
|
52
|
-
} else if (mediaTypes && mediaTypes[VIDEO]) {
|
|
53
|
-
placement.adFormat = VIDEO;
|
|
54
|
-
placement.playerSize = mediaTypes[VIDEO].playerSize;
|
|
55
|
-
placement.minduration = mediaTypes[VIDEO].minduration;
|
|
56
|
-
placement.maxduration = mediaTypes[VIDEO].maxduration;
|
|
57
|
-
placement.mimes = mediaTypes[VIDEO].mimes;
|
|
58
|
-
placement.protocols = mediaTypes[VIDEO].protocols;
|
|
59
|
-
placement.startdelay = mediaTypes[VIDEO].startdelay;
|
|
60
|
-
placement.placement = mediaTypes[VIDEO].placement;
|
|
61
|
-
placement.skip = mediaTypes[VIDEO].skip;
|
|
62
|
-
placement.skipafter = mediaTypes[VIDEO].skipafter;
|
|
63
|
-
placement.minbitrate = mediaTypes[VIDEO].minbitrate;
|
|
64
|
-
placement.maxbitrate = mediaTypes[VIDEO].maxbitrate;
|
|
65
|
-
placement.delivery = mediaTypes[VIDEO].delivery;
|
|
66
|
-
placement.playbackmethod = mediaTypes[VIDEO].playbackmethod;
|
|
67
|
-
placement.api = mediaTypes[VIDEO].api;
|
|
68
|
-
placement.linearity = mediaTypes[VIDEO].linearity;
|
|
69
|
-
} else if (mediaTypes && mediaTypes[NATIVE]) {
|
|
70
|
-
placement.native = mediaTypes[NATIVE];
|
|
71
|
-
placement.adFormat = NATIVE;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
return placement;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function getBidFloor(bid) {
|
|
78
|
-
if (!isFn(bid.getFloor)) {
|
|
79
|
-
return deepAccess(bid, 'params.bidfloor', 0);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
try {
|
|
83
|
-
const bidFloor = bid.getFloor({
|
|
84
|
-
currency: 'USD',
|
|
85
|
-
mediaType: '*',
|
|
86
|
-
size: '*',
|
|
87
|
-
});
|
|
88
|
-
return bidFloor.floor;
|
|
89
|
-
} catch (err) {
|
|
90
|
-
logError(err);
|
|
91
|
-
return 0;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
9
|
export const spec = {
|
|
96
10
|
code: BIDDER_CODE,
|
|
97
11
|
supportedMediaTypes: [BANNER, VIDEO, NATIVE],
|
|
98
12
|
|
|
99
|
-
isBidRequestValid: (
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
if (mediaTypes && mediaTypes[BANNER]) {
|
|
104
|
-
valid = valid && Boolean(mediaTypes[BANNER] && mediaTypes[BANNER].sizes);
|
|
105
|
-
} else if (mediaTypes && mediaTypes[VIDEO]) {
|
|
106
|
-
valid = valid && Boolean(mediaTypes[VIDEO] && mediaTypes[VIDEO].playerSize);
|
|
107
|
-
} else if (mediaTypes && mediaTypes[NATIVE]) {
|
|
108
|
-
valid = valid && Boolean(mediaTypes[NATIVE]);
|
|
109
|
-
} else {
|
|
110
|
-
valid = false;
|
|
111
|
-
}
|
|
112
|
-
return valid;
|
|
113
|
-
},
|
|
114
|
-
|
|
115
|
-
buildRequests: (validBidRequests = [], bidderRequest = {}) => {
|
|
116
|
-
// convert Native ORTB definition to old-style prebid native definition
|
|
117
|
-
validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
|
|
118
|
-
|
|
119
|
-
let deviceWidth = 0;
|
|
120
|
-
let deviceHeight = 0;
|
|
121
|
-
|
|
122
|
-
let winLocation;
|
|
123
|
-
try {
|
|
124
|
-
const winTop = window.top;
|
|
125
|
-
deviceWidth = winTop.screen.width;
|
|
126
|
-
deviceHeight = winTop.screen.height;
|
|
127
|
-
winLocation = winTop.location;
|
|
128
|
-
} catch (e) {
|
|
129
|
-
logMessage(e);
|
|
130
|
-
winLocation = window.location;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.page;
|
|
134
|
-
let refferLocation;
|
|
135
|
-
try {
|
|
136
|
-
refferLocation = refferUrl && new URL(refferUrl);
|
|
137
|
-
} catch (e) {
|
|
138
|
-
logMessage(e);
|
|
139
|
-
}
|
|
140
|
-
// TODO: does the fallback make sense here?
|
|
141
|
-
let location = refferLocation || winLocation;
|
|
142
|
-
const language = (navigator && navigator.language) ? navigator.language.split('-')[0] : '';
|
|
143
|
-
const host = location.host;
|
|
144
|
-
const page = location.pathname;
|
|
145
|
-
const secure = location.protocol === 'https:' ? 1 : 0;
|
|
146
|
-
const placements = [];
|
|
147
|
-
const request = {
|
|
148
|
-
deviceWidth,
|
|
149
|
-
deviceHeight,
|
|
150
|
-
language,
|
|
151
|
-
secure,
|
|
152
|
-
host,
|
|
153
|
-
page,
|
|
154
|
-
placements,
|
|
155
|
-
coppa: config.getConfig('coppa') === true ? 1 : 0,
|
|
156
|
-
ccpa: bidderRequest.uspConsent || undefined,
|
|
157
|
-
gdpr: bidderRequest.gdprConsent || undefined,
|
|
158
|
-
tmax: bidderRequest.timeout
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
const len = validBidRequests.length;
|
|
162
|
-
for (let i = 0; i < len; i++) {
|
|
163
|
-
const bid = validBidRequests[i];
|
|
164
|
-
placements.push(getPlacementReqData(bid));
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
return {
|
|
168
|
-
method: 'POST',
|
|
169
|
-
url: AD_URL,
|
|
170
|
-
data: request
|
|
171
|
-
};
|
|
172
|
-
},
|
|
173
|
-
|
|
174
|
-
interpretResponse: (serverResponse) => {
|
|
175
|
-
let response = [];
|
|
176
|
-
for (let i = 0; i < serverResponse.body.length; i++) {
|
|
177
|
-
let resItem = serverResponse.body[i];
|
|
178
|
-
if (isBidResponseValid(resItem)) {
|
|
179
|
-
const advertiserDomains = resItem.adomain && resItem.adomain.length ? resItem.adomain : [];
|
|
180
|
-
resItem.meta = { ...resItem.meta, advertiserDomains };
|
|
181
|
-
|
|
182
|
-
response.push(resItem);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
return response;
|
|
186
|
-
},
|
|
187
|
-
|
|
188
|
-
getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent) => {
|
|
189
|
-
let syncType = syncOptions.iframeEnabled ? 'iframe' : 'image';
|
|
190
|
-
let syncUrl = SYNC_URL + `/${syncType}?pbjs=1`;
|
|
191
|
-
if (gdprConsent && gdprConsent.consentString) {
|
|
192
|
-
if (typeof gdprConsent.gdprApplies === 'boolean') {
|
|
193
|
-
syncUrl += `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
|
|
194
|
-
} else {
|
|
195
|
-
syncUrl += `&gdpr=0&gdpr_consent=${gdprConsent.consentString}`;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
if (uspConsent && uspConsent.consentString) {
|
|
199
|
-
syncUrl += `&ccpa_consent=${uspConsent.consentString}`;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
const coppa = config.getConfig('coppa') ? 1 : 0;
|
|
203
|
-
syncUrl += `&coppa=${coppa}`;
|
|
204
|
-
|
|
205
|
-
return [{
|
|
206
|
-
type: syncType,
|
|
207
|
-
url: syncUrl
|
|
208
|
-
}];
|
|
209
|
-
}
|
|
13
|
+
isBidRequestValid: isBidRequestValid(),
|
|
14
|
+
buildRequests: buildRequests(AD_URL),
|
|
15
|
+
interpretResponse,
|
|
16
|
+
getUserSyncs: getUserSyncs(SYNC_URL)
|
|
210
17
|
};
|
|
211
18
|
|
|
212
19
|
registerBidder(spec);
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
import {deepSetValue, isEmpty, isNumber, isPlainObject, isStr, logError, logInfo, logWarn} from '../src/utils.js';
|
|
8
8
|
import {config} from '../src/config.js';
|
|
9
9
|
import {gppDataHandler} from '../src/adapterManager.js';
|
|
10
|
-
import {timedAuctionHook} from '../src/utils/perfMetrics.js';
|
|
11
10
|
import {enrichFPD} from '../src/fpd/enrichment.js';
|
|
12
11
|
import {getGlobal} from '../src/prebidGlobal.js';
|
|
13
12
|
import {cmpClient, MODE_CALLBACK} from '../libraries/cmp/cmpClient.js';
|
|
14
13
|
import {GreedyPromise} from '../src/utils/promise.js';
|
|
15
14
|
import {buildActivityParams} from '../src/activities/params.js';
|
|
15
|
+
import {consentManagementHook} from '../libraries/consentManagement/cmUtils.js';
|
|
16
16
|
|
|
17
17
|
const DEFAULT_CMP = 'iab';
|
|
18
18
|
const DEFAULT_CONSENT_TIMEOUT = 10000;
|
|
@@ -228,20 +228,6 @@ function loadConsentData(cb) {
|
|
|
228
228
|
}
|
|
229
229
|
}
|
|
230
230
|
|
|
231
|
-
/**
|
|
232
|
-
* Like `loadConsentData`, but cache and re-use previously loaded data.
|
|
233
|
-
* @param cb
|
|
234
|
-
*/
|
|
235
|
-
function loadIfMissing(cb) {
|
|
236
|
-
if (consentData) {
|
|
237
|
-
logInfo('User consent information already known. Pulling internally stored information...');
|
|
238
|
-
// eslint-disable-next-line standard/no-callback-literal
|
|
239
|
-
cb(false);
|
|
240
|
-
} else {
|
|
241
|
-
loadConsentData(cb);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
|
|
245
231
|
/**
|
|
246
232
|
* If consentManagement module is enabled (ie included in setConfig), this hook function will attempt to fetch the
|
|
247
233
|
* user's encoded consent string from the supported CMP. Once obtained, the module will store this
|
|
@@ -250,29 +236,7 @@ function loadIfMissing(cb) {
|
|
|
250
236
|
* @param {object} reqBidsConfigObj required; This is the same param that's used in pbjs.requestBids.
|
|
251
237
|
* @param {function} fn required; The next function in the chain, used by hook.js
|
|
252
238
|
*/
|
|
253
|
-
export const requestBidsHook =
|
|
254
|
-
loadIfMissing(function (shouldCancelAuction, errMsg, ...extraArgs) {
|
|
255
|
-
if (errMsg) {
|
|
256
|
-
let log = logWarn;
|
|
257
|
-
if (shouldCancelAuction) {
|
|
258
|
-
log = logError;
|
|
259
|
-
errMsg = `${errMsg} Canceling auction as per consentManagement config.`;
|
|
260
|
-
}
|
|
261
|
-
log(errMsg, ...extraArgs);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
if (shouldCancelAuction) {
|
|
265
|
-
fn.stopTiming();
|
|
266
|
-
if (typeof reqBidsConfigObj.bidsBackHandler === 'function') {
|
|
267
|
-
reqBidsConfigObj.bidsBackHandler();
|
|
268
|
-
} else {
|
|
269
|
-
logError('Error executing bidsBackHandler');
|
|
270
|
-
}
|
|
271
|
-
} else {
|
|
272
|
-
fn.call(this, reqBidsConfigObj);
|
|
273
|
-
}
|
|
274
|
-
});
|
|
275
|
-
});
|
|
239
|
+
export const requestBidsHook = consentManagementHook('gpp', () => consentData, loadConsentData);
|
|
276
240
|
|
|
277
241
|
function processCmpData(consentData) {
|
|
278
242
|
if (
|
|
@@ -8,11 +8,11 @@ import {deepSetValue, isNumber, isPlainObject, isStr, logError, logInfo, logWarn
|
|
|
8
8
|
import {config} from '../src/config.js';
|
|
9
9
|
import {gdprDataHandler} from '../src/adapterManager.js';
|
|
10
10
|
import {includes} from '../src/polyfill.js';
|
|
11
|
-
import {timedAuctionHook} from '../src/utils/perfMetrics.js';
|
|
12
11
|
import {registerOrtbProcessor, REQUEST} from '../src/pbjsORTB.js';
|
|
13
12
|
import {enrichFPD} from '../src/fpd/enrichment.js';
|
|
14
13
|
import {getGlobal} from '../src/prebidGlobal.js';
|
|
15
14
|
import {cmpClient} from '../libraries/cmp/cmpClient.js';
|
|
15
|
+
import {consentManagementHook} from '../libraries/consentManagement/cmUtils.js';
|
|
16
16
|
|
|
17
17
|
const DEFAULT_CMP = 'iab';
|
|
18
18
|
const DEFAULT_CONSENT_TIMEOUT = 10000;
|
|
@@ -22,6 +22,7 @@ export let userCMP;
|
|
|
22
22
|
export let consentTimeout;
|
|
23
23
|
export let gdprScope;
|
|
24
24
|
export let staticConsentData;
|
|
25
|
+
let dsaPlatform = false;
|
|
25
26
|
let actionTimeout;
|
|
26
27
|
|
|
27
28
|
let consentData;
|
|
@@ -156,20 +157,6 @@ function loadConsentData(cb) {
|
|
|
156
157
|
}
|
|
157
158
|
}
|
|
158
159
|
|
|
159
|
-
/**
|
|
160
|
-
* Like `loadConsentData`, but cache and re-use previously loaded data.
|
|
161
|
-
* @param cb
|
|
162
|
-
*/
|
|
163
|
-
function loadIfMissing(cb) {
|
|
164
|
-
if (consentData) {
|
|
165
|
-
logInfo('User consent information already known. Pulling internally stored information...');
|
|
166
|
-
// eslint-disable-next-line standard/no-callback-literal
|
|
167
|
-
cb(false);
|
|
168
|
-
} else {
|
|
169
|
-
loadConsentData(cb);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
160
|
/**
|
|
174
161
|
* If consentManagement module is enabled (ie included in setConfig), this hook function will attempt to fetch the
|
|
175
162
|
* user's encoded consent string from the supported CMP. Once obtained, the module will store this
|
|
@@ -178,29 +165,7 @@ function loadIfMissing(cb) {
|
|
|
178
165
|
* @param {object} reqBidsConfigObj required; This is the same param that's used in pbjs.requestBids.
|
|
179
166
|
* @param {function} fn required; The next function in the chain, used by hook.js
|
|
180
167
|
*/
|
|
181
|
-
export const requestBidsHook =
|
|
182
|
-
loadIfMissing(function (shouldCancelAuction, errMsg, ...extraArgs) {
|
|
183
|
-
if (errMsg) {
|
|
184
|
-
let log = logWarn;
|
|
185
|
-
if (shouldCancelAuction) {
|
|
186
|
-
log = logError;
|
|
187
|
-
errMsg = `${errMsg} Canceling auction as per consentManagement config.`;
|
|
188
|
-
}
|
|
189
|
-
log(errMsg, ...extraArgs);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
if (shouldCancelAuction) {
|
|
193
|
-
fn.stopTiming();
|
|
194
|
-
if (typeof reqBidsConfigObj.bidsBackHandler === 'function') {
|
|
195
|
-
reqBidsConfigObj.bidsBackHandler();
|
|
196
|
-
} else {
|
|
197
|
-
logError('Error executing bidsBackHandler');
|
|
198
|
-
}
|
|
199
|
-
} else {
|
|
200
|
-
fn.call(this, reqBidsConfigObj);
|
|
201
|
-
}
|
|
202
|
-
});
|
|
203
|
-
});
|
|
168
|
+
export const requestBidsHook = consentManagementHook('gdpr', () => consentData, loadConsentData);
|
|
204
169
|
|
|
205
170
|
/**
|
|
206
171
|
* This function checks the consent data provided by CMP to ensure it's in an expected state.
|
|
@@ -282,6 +247,7 @@ export function setConsentConfig(config) {
|
|
|
282
247
|
|
|
283
248
|
// if true, then gdprApplies should be set to true
|
|
284
249
|
gdprScope = config.defaultGdprScope === true;
|
|
250
|
+
dsaPlatform = !!config.dsaPlatform;
|
|
285
251
|
|
|
286
252
|
logInfo('consentManagement module has been activated...');
|
|
287
253
|
|
|
@@ -315,6 +281,9 @@ export function enrichFPDHook(next, fpd) {
|
|
|
315
281
|
}
|
|
316
282
|
deepSetValue(ortb2, 'user.ext.consent', consent.consentString);
|
|
317
283
|
}
|
|
284
|
+
if (dsaPlatform) {
|
|
285
|
+
deepSetValue(ortb2, 'regs.ext.dsa.dsarequired', 3);
|
|
286
|
+
}
|
|
318
287
|
return ortb2;
|
|
319
288
|
}));
|
|
320
289
|
}
|
|
@@ -1,216 +1,21 @@
|
|
|
1
|
-
import { isFn, deepAccess, logMessage } from '../src/utils.js';
|
|
2
1
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
2
|
import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
|
|
4
|
-
import {
|
|
5
|
-
import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
|
|
3
|
+
import { isBidRequestValid, buildRequests, interpretResponse, getUserSyncs } from '../libraries/teqblazeUtils/bidderUtils.js';
|
|
6
4
|
|
|
7
5
|
const BIDDER_CODE = 'contentexchange';
|
|
8
6
|
const AD_URL = 'https://eu2.adnetwork.agency/pbjs';
|
|
9
7
|
const SYNC_URL = 'https://sync2.adnetwork.agency';
|
|
10
8
|
const GVLID = 864;
|
|
11
9
|
|
|
12
|
-
function isBidResponseValid (bid) {
|
|
13
|
-
if (!bid.requestId || !bid.cpm || !bid.creativeId ||
|
|
14
|
-
!bid.ttl || !bid.currency || !bid.meta) {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
switch (bid.mediaType) {
|
|
19
|
-
case BANNER:
|
|
20
|
-
return Boolean(bid.width && bid.height && bid.ad);
|
|
21
|
-
case VIDEO:
|
|
22
|
-
return Boolean(bid.vastUrl || bid.vastXml);
|
|
23
|
-
case NATIVE:
|
|
24
|
-
return Boolean(bid.native && bid.native.impressionTrackers && bid.native.impressionTrackers.length);
|
|
25
|
-
default:
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function getPlacementReqData (bid) {
|
|
31
|
-
const { params, bidId, mediaTypes } = bid;
|
|
32
|
-
const schain = bid.schain || {};
|
|
33
|
-
const { placementId, adFormat } = params;
|
|
34
|
-
const bidfloor = getBidFloor(bid);
|
|
35
|
-
|
|
36
|
-
const placement = {
|
|
37
|
-
placementId,
|
|
38
|
-
bidId,
|
|
39
|
-
adFormat,
|
|
40
|
-
schain,
|
|
41
|
-
bidfloor
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
switch (adFormat) {
|
|
45
|
-
case BANNER:
|
|
46
|
-
placement.sizes = mediaTypes[BANNER].sizes;
|
|
47
|
-
break;
|
|
48
|
-
case VIDEO:
|
|
49
|
-
placement.playerSize = mediaTypes[VIDEO].playerSize;
|
|
50
|
-
placement.minduration = mediaTypes[VIDEO].minduration;
|
|
51
|
-
placement.maxduration = mediaTypes[VIDEO].maxduration;
|
|
52
|
-
placement.mimes = mediaTypes[VIDEO].mimes;
|
|
53
|
-
placement.protocols = mediaTypes[VIDEO].protocols;
|
|
54
|
-
placement.startdelay = mediaTypes[VIDEO].startdelay;
|
|
55
|
-
placement.placement = mediaTypes[VIDEO].placement;
|
|
56
|
-
placement.skip = mediaTypes[VIDEO].skip;
|
|
57
|
-
placement.skipafter = mediaTypes[VIDEO].skipafter;
|
|
58
|
-
placement.minbitrate = mediaTypes[VIDEO].minbitrate;
|
|
59
|
-
placement.maxbitrate = mediaTypes[VIDEO].maxbitrate;
|
|
60
|
-
placement.delivery = mediaTypes[VIDEO].delivery;
|
|
61
|
-
placement.playbackmethod = mediaTypes[VIDEO].playbackmethod;
|
|
62
|
-
placement.api = mediaTypes[VIDEO].api;
|
|
63
|
-
placement.linearity = mediaTypes[VIDEO].linearity;
|
|
64
|
-
break;
|
|
65
|
-
case NATIVE:
|
|
66
|
-
placement.native = mediaTypes[NATIVE];
|
|
67
|
-
break;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
return placement;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function getBidFloor(bid) {
|
|
74
|
-
if (!isFn(bid.getFloor)) {
|
|
75
|
-
return deepAccess(bid, 'params.bidfloor', 0);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
try {
|
|
79
|
-
const bidFloor = bid.getFloor({
|
|
80
|
-
currency: 'USD',
|
|
81
|
-
mediaType: '*',
|
|
82
|
-
size: '*',
|
|
83
|
-
});
|
|
84
|
-
return bidFloor.floor;
|
|
85
|
-
} catch (_) {
|
|
86
|
-
return 0
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
10
|
export const spec = {
|
|
91
11
|
code: BIDDER_CODE,
|
|
92
12
|
gvlid: GVLID,
|
|
93
13
|
supportedMediaTypes: [BANNER, VIDEO, NATIVE],
|
|
94
14
|
|
|
95
|
-
isBidRequestValid: (
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
params.placementId &&
|
|
100
|
-
params.adFormat
|
|
101
|
-
);
|
|
102
|
-
switch (params.adFormat) {
|
|
103
|
-
case BANNER:
|
|
104
|
-
valid = valid && Boolean(mediaTypes[BANNER] && mediaTypes[BANNER].sizes);
|
|
105
|
-
break;
|
|
106
|
-
case VIDEO:
|
|
107
|
-
valid = valid && Boolean(mediaTypes[VIDEO] && mediaTypes[VIDEO].playerSize);
|
|
108
|
-
break;
|
|
109
|
-
case NATIVE:
|
|
110
|
-
valid = valid && Boolean(mediaTypes[NATIVE]);
|
|
111
|
-
break;
|
|
112
|
-
default:
|
|
113
|
-
valid = false;
|
|
114
|
-
}
|
|
115
|
-
return valid;
|
|
116
|
-
},
|
|
117
|
-
|
|
118
|
-
buildRequests: (validBidRequests = [], bidderRequest = {}) => {
|
|
119
|
-
// convert Native ORTB definition to old-style prebid native definition
|
|
120
|
-
validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
|
|
121
|
-
|
|
122
|
-
let deviceWidth = 0;
|
|
123
|
-
let deviceHeight = 0;
|
|
124
|
-
|
|
125
|
-
let winLocation;
|
|
126
|
-
try {
|
|
127
|
-
const winTop = window.top;
|
|
128
|
-
deviceWidth = winTop.screen.width;
|
|
129
|
-
deviceHeight = winTop.screen.height;
|
|
130
|
-
winLocation = winTop.location;
|
|
131
|
-
} catch (e) {
|
|
132
|
-
logMessage(e);
|
|
133
|
-
winLocation = window.location;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.page;
|
|
137
|
-
let refferLocation;
|
|
138
|
-
try {
|
|
139
|
-
refferLocation = refferUrl && new URL(refferUrl);
|
|
140
|
-
} catch (e) {
|
|
141
|
-
logMessage(e);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// TODO: does the fallback to 'window.location' make sense?
|
|
145
|
-
let location = refferLocation || winLocation;
|
|
146
|
-
const language = (navigator && navigator.language) ? navigator.language.split('-')[0] : '';
|
|
147
|
-
const host = location.host;
|
|
148
|
-
const page = location.pathname;
|
|
149
|
-
const secure = location.protocol === 'https:' ? 1 : 0;
|
|
150
|
-
const placements = [];
|
|
151
|
-
const request = {
|
|
152
|
-
deviceWidth,
|
|
153
|
-
deviceHeight,
|
|
154
|
-
language,
|
|
155
|
-
secure,
|
|
156
|
-
host,
|
|
157
|
-
page,
|
|
158
|
-
placements,
|
|
159
|
-
coppa: config.getConfig('coppa') === true ? 1 : 0,
|
|
160
|
-
ccpa: bidderRequest.uspConsent || undefined,
|
|
161
|
-
gdpr: bidderRequest.gdprConsent || undefined,
|
|
162
|
-
tmax: bidderRequest.timeout
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
const len = validBidRequests.length;
|
|
166
|
-
for (let i = 0; i < len; i++) {
|
|
167
|
-
const bid = validBidRequests[i];
|
|
168
|
-
placements.push(getPlacementReqData(bid));
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
return {
|
|
172
|
-
method: 'POST',
|
|
173
|
-
url: AD_URL,
|
|
174
|
-
data: request
|
|
175
|
-
};
|
|
176
|
-
},
|
|
177
|
-
|
|
178
|
-
interpretResponse: (serverResponse) => {
|
|
179
|
-
let response = [];
|
|
180
|
-
for (let i = 0; i < serverResponse.body.length; i++) {
|
|
181
|
-
let resItem = serverResponse.body[i];
|
|
182
|
-
if (isBidResponseValid(resItem)) {
|
|
183
|
-
const advertiserDomains = resItem.adomain && resItem.adomain.length ? resItem.adomain : [];
|
|
184
|
-
resItem.meta = { ...resItem.meta, advertiserDomains };
|
|
185
|
-
|
|
186
|
-
response.push(resItem);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
return response;
|
|
190
|
-
},
|
|
191
|
-
|
|
192
|
-
getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent) => {
|
|
193
|
-
let syncType = syncOptions.iframeEnabled ? 'iframe' : 'image';
|
|
194
|
-
let syncUrl = SYNC_URL + `/${syncType}?pbjs=1`;
|
|
195
|
-
if (gdprConsent && gdprConsent.consentString) {
|
|
196
|
-
if (typeof gdprConsent.gdprApplies === 'boolean') {
|
|
197
|
-
syncUrl += `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
|
|
198
|
-
} else {
|
|
199
|
-
syncUrl += `&gdpr=0&gdpr_consent=${gdprConsent.consentString}`;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
if (uspConsent && uspConsent.consentString) {
|
|
203
|
-
syncUrl += `&ccpa_consent=${uspConsent.consentString}`;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
const coppa = config.getConfig('coppa') ? 1 : 0;
|
|
207
|
-
syncUrl += `&coppa=${coppa}`;
|
|
208
|
-
|
|
209
|
-
return [{
|
|
210
|
-
type: syncType,
|
|
211
|
-
url: syncUrl
|
|
212
|
-
}];
|
|
213
|
-
}
|
|
15
|
+
isBidRequestValid: isBidRequestValid(),
|
|
16
|
+
buildRequests: buildRequests(AD_URL),
|
|
17
|
+
interpretResponse,
|
|
18
|
+
getUserSyncs: getUserSyncs(SYNC_URL)
|
|
214
19
|
};
|
|
215
20
|
|
|
216
21
|
registerBidder(spec);
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {ajax} from '../src/ajax.js';
|
|
2
2
|
import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
|
|
3
3
|
import { EVENTS } from '../src/constants.js';
|
|
4
|
-
import {getGlobal} from '../src/prebidGlobal.js';
|
|
5
4
|
import adapterManager from '../src/adapterManager.js';
|
|
6
5
|
import {logInfo, logWarn, logError, logMessage, deepAccess, isInteger} from '../src/utils.js';
|
|
7
6
|
import {getRefererInfo} from '../src/refererDetection.js';
|
|
@@ -515,7 +514,7 @@ cnvrHelper.createPayload = function(payloadType, auctionId, timestamp) {
|
|
|
515
514
|
cnvrSampleRate: initOptions.cnvr_sample_rate,
|
|
516
515
|
auction: {
|
|
517
516
|
auctionId: auctionId,
|
|
518
|
-
preBidVersion:
|
|
517
|
+
preBidVersion: '$prebid.version$',
|
|
519
518
|
sid: initOptions.site_id,
|
|
520
519
|
auctionTimestamp: timestamp
|
|
521
520
|
},
|
|
@@ -60,6 +60,7 @@ const converter = ortbConverter({
|
|
|
60
60
|
request: function (buildRequest, imps, bidderRequest, context) {
|
|
61
61
|
const request = buildRequest(imps, bidderRequest, context);
|
|
62
62
|
request.at = 1;
|
|
63
|
+
request.cur = ['USD'];
|
|
63
64
|
if (context.bidRequests) {
|
|
64
65
|
const bidRequest = context.bidRequests[0];
|
|
65
66
|
setSiteId(bidRequest, request);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
2
|
+
import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
|
|
3
|
+
import { isBidRequestValid, buildRequests, interpretResponse, getUserSyncs } from '../libraries/teqblazeUtils/bidderUtils.js';
|
|
4
|
+
|
|
5
|
+
const BIDDER_CODE = 'copper6ssp';
|
|
6
|
+
const AD_URL = 'https://endpoint.copper6.com/pbjs';
|
|
7
|
+
const SYNC_URL = 'https://сsync.copper6.com';
|
|
8
|
+
|
|
9
|
+
export const spec = {
|
|
10
|
+
code: BIDDER_CODE,
|
|
11
|
+
supportedMediaTypes: [BANNER, VIDEO, NATIVE],
|
|
12
|
+
|
|
13
|
+
isBidRequestValid: isBidRequestValid(),
|
|
14
|
+
buildRequests: buildRequests(AD_URL),
|
|
15
|
+
interpretResponse,
|
|
16
|
+
getUserSyncs: getUserSyncs(SYNC_URL)
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
registerBidder(spec);
|