prebid.js 7.22.0 → 7.23.1
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/dist/33acrossBidAdapter.js +1 -1
- package/dist/aaxBlockmeterRtdProvider.js +1 -0
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/analyticsAdapter.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/bidViewability.js +1 -1
- package/dist/bidViewabilityIO.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/browsiRtdProvider.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -0
- package/dist/cleanioRtdProvider.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consentManagement.js +1 -1
- package/dist/consentManagementUsp.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/currency.js +1 -1
- package/dist/dependencies.json +19 -0
- package/dist/dfpAdServerVideo.js +1 -1
- package/dist/dgkeywordRtdProvider.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/gdprEnforcement.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/googleAnalyticsAdapter.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/id5AnalyticsAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/instreamTracking.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/jwplayerVideoProvider.js +1 -0
- package/dist/kargoBidAdapter.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/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/multibid.js +1 -1
- package/dist/not-for-prod/prebid.js +141 -132
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxOrtbBidAdapter.js +1 -1
- package/dist/ortbConverter.js +1 -0
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/oxxionRtdProvider.js +1 -0
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pbsExtensions.js +1 -0
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/priceFloors.js +1 -1
- package/dist/pubCommonId.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rtdModule.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/schain.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/spotxBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/teadsIdSystem.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/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/video.js +1 -0
- package/dist/videoModule.js +1 -0
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/videojsVideoProvider.js +1 -0
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/integrationExamples/videoModule/jwplayer/bidMarkedAsUsed.html +98 -0
- package/integrationExamples/videoModule/jwplayer/bidRequestScheduling.html +89 -0
- package/integrationExamples/videoModule/jwplayer/eventListeners.html +244 -0
- package/integrationExamples/videoModule/jwplayer/gamAdServerMediation.html +122 -0
- package/integrationExamples/videoModule/jwplayer/mediaMetadata.html +80 -0
- package/integrationExamples/videoModule/jwplayer/playlist.html +122 -0
- package/integrationExamples/videoModule/videojs/bidMarkedAsUsed.html +126 -0
- package/integrationExamples/videoModule/videojs/bidRequestScheduling.html +132 -0
- package/integrationExamples/videoModule/videojs/eventListeners.html +238 -0
- package/integrationExamples/videoModule/videojs/gamAdServerMediation.html +138 -0
- package/integrationExamples/videoModule/videojs/mediaMetadata.html +103 -0
- package/integrationExamples/videoModule/videojs/playlist.html +151 -0
- package/libraries/ortbConverter/README.md +378 -0
- package/libraries/ortbConverter/converter.js +135 -0
- package/libraries/ortbConverter/lib/composer.js +43 -0
- package/libraries/ortbConverter/lib/mergeProcessors.js +9 -0
- package/libraries/ortbConverter/lib/sizes.js +14 -0
- package/libraries/ortbConverter/processors/banner.js +40 -0
- package/libraries/ortbConverter/processors/default.js +167 -0
- package/libraries/ortbConverter/processors/mediaType.js +21 -0
- package/libraries/ortbConverter/processors/native.js +37 -0
- package/libraries/ortbConverter/processors/video.js +66 -0
- package/libraries/pbsExtensions/pbsExtensions.js +12 -0
- package/libraries/pbsExtensions/processors/aliases.js +17 -0
- package/libraries/pbsExtensions/processors/mediaType.js +23 -0
- package/libraries/pbsExtensions/processors/params.js +22 -0
- package/libraries/pbsExtensions/processors/pbs.js +99 -0
- package/libraries/pbsExtensions/processors/requestExtPrebid.js +30 -0
- package/libraries/pbsExtensions/processors/video.js +23 -0
- package/libraries/video/constants/enums.js +5 -0
- package/libraries/video/constants/events.js +97 -0
- package/libraries/video/constants/ortb.js +169 -0
- package/libraries/video/constants/vendorCodes.js +6 -0
- package/libraries/video/shared/eventHandler.js +18 -0
- package/libraries/video/shared/parentModule.js +82 -0
- package/libraries/video/shared/state.js +47 -0
- package/libraries/video/shared/vastXmlBuilder.js +77 -0
- package/libraries/video/shared/vastXmlEditor.js +115 -0
- package/modules/.submodules.json +6 -1
- package/modules/aaxBlockmeterRtdProvider.js +59 -0
- package/modules/aaxBlockmeterRtdProvider.md +48 -0
- package/modules/appnexusBidAdapter.js +38 -1
- package/modules/chtnwBidAdapter.js +110 -0
- package/modules/chtnwBidAdapter.md +31 -0
- package/modules/concertBidAdapter.js +44 -2
- package/modules/consentManagement.js +22 -1
- package/modules/consentManagementUsp.js +29 -7
- package/modules/criteoBidAdapter.js +25 -5
- package/modules/currency.js +9 -0
- package/modules/dgkeywordRtdProvider.js +3 -3
- package/modules/gridNMBidAdapter.js +10 -14
- package/modules/improvedigitalBidAdapter.js +191 -470
- package/modules/ixBidAdapter.js +24 -64
- package/modules/jwplayerVideoProvider.js +929 -0
- package/modules/jwplayerVideoProvider.md +25 -0
- package/modules/kargoBidAdapter.js +1 -1
- package/modules/multibid/index.js +12 -0
- package/modules/openxOrtbBidAdapter.js +120 -275
- package/modules/oxxionRtdProvider.js +119 -0
- package/modules/oxxionRtdProvider.md +48 -0
- package/modules/prebidServerBidAdapter/index.js +19 -716
- package/modules/prebidServerBidAdapter/ortbConverter.js +274 -0
- package/modules/priceFloors.js +73 -1
- package/modules/rtdModule/index.js +22 -1
- package/modules/schain.js +24 -1
- package/modules/spotxBidAdapter.js +16 -15
- package/modules/synacormediaBidAdapter.js +1 -1
- package/modules/teadsIdSystem.js +5 -0
- package/modules/userId/index.js +64 -6
- package/modules/videoModule/addingSubmodule.md +521 -0
- package/modules/videoModule/coreVideo.js +234 -0
- package/modules/videoModule/gamAdServerSubmodule.js +27 -0
- package/modules/videoModule/index.js +244 -0
- package/modules/videoModule/videoImpressionVerifier.js +206 -0
- package/modules/videojsVideoProvider.js +854 -0
- package/modules/videojsVideoProvider.md +17 -0
- package/package.json +5 -1
- package/src/adapterManager.js +56 -7
- package/src/adloader.js +2 -1
- package/src/auction.js +5 -0
- package/src/events.js +5 -1
- package/src/pbjsORTB.js +35 -0
- package/src/prebid.js +137 -112
- package/src/targeting.js +10 -2
- package/src/utils/currency.js +16 -0
- package/src/utils.js +21 -0
- package/test/spec/auctionmanager_spec.js +6 -0
- package/test/spec/modules/aaxBlockmeter_spec.js +58 -0
- package/test/spec/modules/chtnwBidAdapter_spec.js +105 -0
- package/test/spec/modules/concertBidAdapter_spec.js +56 -0
- package/test/spec/modules/consentManagementUsp_spec.js +64 -18
- package/test/spec/modules/criteoBidAdapter_spec.js +28 -0
- package/test/spec/modules/dgkeywordRtdProvider_spec.js +3 -3
- package/test/spec/modules/improvedigitalBidAdapter_spec.js +231 -211
- package/test/spec/modules/ixBidAdapter_spec.js +230 -371
- package/test/spec/modules/openxOrtbBidAdapter_spec.js +77 -49
- package/test/spec/modules/oxxionRtdProvider_spec.js +142 -0
- package/test/spec/modules/prebidServerBidAdapter_spec.js +139 -137
- package/test/spec/modules/realTimeDataModule_spec.js +65 -0
- package/test/spec/modules/userId_spec.js +67 -1
- package/test/spec/modules/videoModule/coreVideo_spec.js +98 -0
- package/test/spec/modules/videoModule/pbVideo_spec.js +362 -0
- package/test/spec/modules/videoModule/shared/parentModule_spec.js +73 -0
- package/test/spec/modules/videoModule/shared/state_spec.js +26 -0
- package/test/spec/modules/videoModule/shared/vastXmlBuilder_spec.js +103 -0
- package/test/spec/modules/videoModule/shared/vastXmlEditor_spec.js +209 -0
- package/test/spec/modules/videoModule/submodules/jwplayerVideoProvider_spec.js +846 -0
- package/test/spec/modules/videoModule/submodules/videojsVideoProvider_spec.js +391 -0
- package/test/spec/modules/videoModule/videoImpressionVerifier_spec.js +112 -0
- package/test/spec/ortbConverter/banner_spec.js +203 -0
- package/test/spec/ortbConverter/composer_spec.js +69 -0
- package/test/spec/ortbConverter/converter_spec.js +283 -0
- package/test/spec/ortbConverter/currency_spec.js +40 -0
- package/test/spec/ortbConverter/default_processors_spec.js +61 -0
- package/test/spec/ortbConverter/gdpr_spec.js +38 -0
- package/test/spec/ortbConverter/mediaTypes_spec.js +67 -0
- package/test/spec/ortbConverter/mergeProcessors_spec.js +59 -0
- package/test/spec/ortbConverter/multibid_spec.js +35 -0
- package/test/spec/ortbConverter/native_spec.js +95 -0
- package/test/spec/ortbConverter/pbjsORTB_spec.js +67 -0
- package/test/spec/ortbConverter/pbsExtensions/aliases_spec.js +57 -0
- package/test/spec/ortbConverter/pbsExtensions/params_spec.js +96 -0
- package/test/spec/ortbConverter/pbsExtensions/video_spec.js +52 -0
- package/test/spec/ortbConverter/priceFloors_spec.js +143 -0
- package/test/spec/ortbConverter/schain_spec.js +33 -0
- package/test/spec/ortbConverter/userId_spec.js +21 -0
- package/test/spec/ortbConverter/usp_spec.js +15 -0
- package/test/spec/ortbConverter/video_spec.js +189 -0
- package/test/spec/unit/core/adapterManager_spec.js +102 -0
- package/test/spec/unit/core/targeting_spec.js +34 -0
- package/test/spec/unit/pbjs_api_spec.js +124 -45
- package/test/spec/utils_spec.js +45 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
## Overview
|
|
2
|
+
|
|
3
|
+
Module Name: AAX Blockmeter Realtime Data Module
|
|
4
|
+
Module Type: Rtd Provider
|
|
5
|
+
Maintainer: product@aax.media
|
|
6
|
+
|
|
7
|
+
## Description
|
|
8
|
+
|
|
9
|
+
The module enables publishers to measure traffic coming from visitors using adblockers.
|
|
10
|
+
|
|
11
|
+
AAX can also help publishers monetize this traffic by allowing them to serve [acceptable ads](https://acceptableads.com/about/) to these adblock visitors and recover their lost revenue. [Reach out to us](https://www.aax.media/try-blockmeter/) to know more.
|
|
12
|
+
|
|
13
|
+
## Integration
|
|
14
|
+
|
|
15
|
+
Build the AAX Blockmeter Realtime Data Module into the Prebid.js package with:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
gulp build --modules=aaxBlockmeterRtdProvider,rtdModule
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Configuration
|
|
22
|
+
|
|
23
|
+
This module is configured as part of the `realTimeData.dataProviders` object.
|
|
24
|
+
|
|
25
|
+
| Name | Scope | Description | Example | Type |
|
|
26
|
+
|:----------:|:--------:|:-----------------------------|:---------------:|:------:|
|
|
27
|
+
| `name` | required | Real time data module name | `'aaxBlockmeter'` | `string` |
|
|
28
|
+
| `params` | required | | | `Object` |
|
|
29
|
+
| `params.pub` | required | AAX to share pub ID, [Reach out to us](https://www.aax.media/try-blockmeter/) to know more! | `'AAX00000'` | `string` |
|
|
30
|
+
| `params.url` | optional | AAX Blockmeter Script Url. Defaults to `'c.aaxads.com/aax.js?ver=1.2'` | `'c.aaxads.com/aax.js?ver=1.2'` | `string` |
|
|
31
|
+
|
|
32
|
+
### Example
|
|
33
|
+
|
|
34
|
+
```javascript
|
|
35
|
+
pbjs.setConfig({
|
|
36
|
+
"realTimeData": {
|
|
37
|
+
"dataProviders": [
|
|
38
|
+
{
|
|
39
|
+
"name": "aaxBlockmeter",
|
|
40
|
+
"params": {
|
|
41
|
+
"pub": "AAX00000",
|
|
42
|
+
"url": "c.aaxads.com/aax.js?ver=1.2",
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
})
|
|
48
|
+
```
|
|
@@ -43,7 +43,7 @@ const URL = 'https://ib.adnxs.com/ut/v3/prebid';
|
|
|
43
43
|
const URL_SIMPLE = 'https://ib.adnxs-simple.com/ut/v3/prebid';
|
|
44
44
|
const VIDEO_TARGETING = ['id', 'minduration', 'maxduration',
|
|
45
45
|
'skippable', 'playback_method', 'frameworks', 'context', 'skipoffset'];
|
|
46
|
-
const VIDEO_RTB_TARGETING = ['minduration', 'maxduration', 'skip', 'skipafter', 'playbackmethod', 'api'];
|
|
46
|
+
const VIDEO_RTB_TARGETING = ['minduration', 'maxduration', 'skip', 'skipafter', 'playbackmethod', 'api', 'startdelay'];
|
|
47
47
|
const USER_PARAMS = ['age', 'externalUid', 'segments', 'gender', 'dnt', 'language'];
|
|
48
48
|
const APP_DEVICE_PARAMS = ['geo', 'device_id']; // appid is collected separately
|
|
49
49
|
const DEBUG_PARAMS = ['enabled', 'dongle', 'member_id', 'debug_timeout'];
|
|
@@ -920,6 +920,17 @@ function bidToTag(bid) {
|
|
|
920
920
|
tag['video_frameworks'] = apiTmp;
|
|
921
921
|
}
|
|
922
922
|
break;
|
|
923
|
+
|
|
924
|
+
case 'startdelay':
|
|
925
|
+
case 'placement':
|
|
926
|
+
const contextKey = 'context';
|
|
927
|
+
if (typeof tag.video[contextKey] !== 'number') {
|
|
928
|
+
const placement = videoMediaType['placement'];
|
|
929
|
+
const startdelay = videoMediaType['startdelay'];
|
|
930
|
+
const context = getContextFromPlacement(placement) || getContextFromStartDelay(startdelay);
|
|
931
|
+
tag.video[contextKey] = VIDEO_MAPPING[contextKey][context];
|
|
932
|
+
}
|
|
933
|
+
break;
|
|
923
934
|
}
|
|
924
935
|
});
|
|
925
936
|
}
|
|
@@ -967,6 +978,32 @@ function transformSizes(requestSizes) {
|
|
|
967
978
|
return sizes;
|
|
968
979
|
}
|
|
969
980
|
|
|
981
|
+
function getContextFromPlacement(ortbPlacement) {
|
|
982
|
+
if (!ortbPlacement) {
|
|
983
|
+
return;
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
if (ortbPlacement === 2) {
|
|
987
|
+
return 'in-banner';
|
|
988
|
+
} else if (ortbPlacement > 2) {
|
|
989
|
+
return 'outstream';
|
|
990
|
+
}
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
function getContextFromStartDelay(ortbStartDelay) {
|
|
994
|
+
if (!ortbStartDelay) {
|
|
995
|
+
return;
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
if (ortbStartDelay === 0) {
|
|
999
|
+
return 'pre_roll';
|
|
1000
|
+
} else if (ortbStartDelay === -1) {
|
|
1001
|
+
return 'mid_roll';
|
|
1002
|
+
} else if (ortbStartDelay === -2) {
|
|
1003
|
+
return 'post_roll';
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
|
|
970
1007
|
function hasUserInfo(bid) {
|
|
971
1008
|
return !!bid.params.user;
|
|
972
1009
|
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import {
|
|
2
|
+
generateUUID,
|
|
3
|
+
getDNT,
|
|
4
|
+
_each,
|
|
5
|
+
} from '../src/utils.js';
|
|
6
|
+
import { config } from '../src/config.js';
|
|
7
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
8
|
+
import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
|
|
9
|
+
import { getStorageManager } from '../src/storageManager.js';
|
|
10
|
+
import { ajax } from '../src/ajax.js';
|
|
11
|
+
import {BANNER, VIDEO, NATIVE} from '../src/mediaTypes.js';
|
|
12
|
+
const ENDPOINT_URL = 'https://prebid.cht.hinet.net/api/v1';
|
|
13
|
+
const BIDDER_CODE = 'chtnw';
|
|
14
|
+
const COOKIE_NAME = '__htid';
|
|
15
|
+
const storage = getStorageManager({bidderCode: BIDDER_CODE});
|
|
16
|
+
|
|
17
|
+
const { getConfig } = config;
|
|
18
|
+
|
|
19
|
+
function _isMobile() {
|
|
20
|
+
return (/(ios|ipod|ipad|iphone|android)/i).test(navigator.userAgent);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const spec = {
|
|
24
|
+
code: BIDDER_CODE,
|
|
25
|
+
supportedMediaTypes: [BANNER, VIDEO, NATIVE],
|
|
26
|
+
isBidRequestValid: function(bid = {}) {
|
|
27
|
+
return !!(bid && bid.params);
|
|
28
|
+
},
|
|
29
|
+
buildRequests: function(validBidRequests = [], bidderRequest = {}) {
|
|
30
|
+
validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
|
|
31
|
+
const chtnwId = (storage.getCookie(COOKIE_NAME) != undefined) ? storage.getCookie(COOKIE_NAME) : generateUUID();
|
|
32
|
+
if (storage.cookiesAreEnabled()) {
|
|
33
|
+
storage.setCookie(COOKIE_NAME, chtnwId);
|
|
34
|
+
}
|
|
35
|
+
const device = getConfig('device') || {};
|
|
36
|
+
device.w = device.w || window.innerWidth;
|
|
37
|
+
device.h = device.h || window.innerHeight;
|
|
38
|
+
device.ua = device.ua || navigator.userAgent;
|
|
39
|
+
device.dnt = getDNT() ? 1 : 0;
|
|
40
|
+
device.language = (navigator && navigator.language) ? navigator.language.split('-')[0] : '';
|
|
41
|
+
const bidParams = [];
|
|
42
|
+
_each(validBidRequests, function(bid) {
|
|
43
|
+
bidParams.push({
|
|
44
|
+
bidId: bid.bidId,
|
|
45
|
+
placement: bid.params.placementId,
|
|
46
|
+
sizes: bid.sizes,
|
|
47
|
+
adSlot: bid.adUnitCode
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
return {
|
|
51
|
+
method: 'POST',
|
|
52
|
+
url: ENDPOINT_URL + '/request/prebid.json',
|
|
53
|
+
data: {
|
|
54
|
+
bids: bidParams,
|
|
55
|
+
uuid: chtnwId,
|
|
56
|
+
device: device,
|
|
57
|
+
version: {
|
|
58
|
+
prebid: '$prebid.version$',
|
|
59
|
+
adapter: '1.0.0',
|
|
60
|
+
},
|
|
61
|
+
site: {
|
|
62
|
+
numIframes: bidderRequest.refererInfo?.numIframes || 0,
|
|
63
|
+
isAmp: bidderRequest.refererInfo?.isAmp || false,
|
|
64
|
+
pageUrl: bidderRequest.refererInfo?.page || '',
|
|
65
|
+
ref: bidderRequest.refererInfo?.ref || '',
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
bids: validBidRequests
|
|
69
|
+
};
|
|
70
|
+
},
|
|
71
|
+
interpretResponse: function(serverResponse) {
|
|
72
|
+
const bidResponses = []
|
|
73
|
+
_each(serverResponse.body, function(response, i) {
|
|
74
|
+
bidResponses.push({
|
|
75
|
+
...response
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
return bidResponses;
|
|
79
|
+
},
|
|
80
|
+
getUserSyncs: function(syncOptions, serverResponses, gdprConsent, uspConsent) {
|
|
81
|
+
const syncs = [];
|
|
82
|
+
if (syncOptions.pixelEnabled) {
|
|
83
|
+
const chtnwId = generateUUID()
|
|
84
|
+
const uuid = chtnwId
|
|
85
|
+
const type = (_isMobile()) ? 'dot' : 'pixel';
|
|
86
|
+
syncs.push({
|
|
87
|
+
type: 'image',
|
|
88
|
+
url: `https://t.ssp.hinet.net/${type}?bd=${uuid}&t=chtnw`
|
|
89
|
+
})
|
|
90
|
+
}
|
|
91
|
+
return syncs
|
|
92
|
+
},
|
|
93
|
+
onTimeout: function(timeoutData) {
|
|
94
|
+
if (timeoutData === null) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
ajax(ENDPOINT_URL + '/trace/timeout/bid', null, JSON.stringify(timeoutData), {
|
|
98
|
+
method: 'POST',
|
|
99
|
+
withCredentials: false
|
|
100
|
+
});
|
|
101
|
+
},
|
|
102
|
+
onBidWon: function(bid) {
|
|
103
|
+
if (bid.nurl) {
|
|
104
|
+
ajax(bid.nurl, null);
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
onSetTargeting: function(bid) {
|
|
108
|
+
},
|
|
109
|
+
}
|
|
110
|
+
registerBidder(spec);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
Module Name: CHT Bidder Adapter
|
|
5
|
+
Module Type: Bidder Adapter
|
|
6
|
+
Maintainer: chtdsp@cht.com.tw
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
# Description
|
|
10
|
+
|
|
11
|
+
Module that connects to CHT's demand sources
|
|
12
|
+
|
|
13
|
+
# Test Parameters
|
|
14
|
+
```
|
|
15
|
+
var adUnits = [
|
|
16
|
+
{
|
|
17
|
+
code: 'adunit-code',
|
|
18
|
+
mediaTypes: {
|
|
19
|
+
banner: {
|
|
20
|
+
sizes: [[300, 250]]
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
bids: [{
|
|
24
|
+
bidder: 'chtnw',
|
|
25
|
+
params: {
|
|
26
|
+
placementId: '38EL412LO82XR9O6'
|
|
27
|
+
}
|
|
28
|
+
}]
|
|
29
|
+
}
|
|
30
|
+
];
|
|
31
|
+
```
|
|
@@ -34,6 +34,9 @@ export const spec = {
|
|
|
34
34
|
buildRequests: function(validBidRequests, bidderRequest) {
|
|
35
35
|
logMessage(validBidRequests);
|
|
36
36
|
logMessage(bidderRequest);
|
|
37
|
+
|
|
38
|
+
const eids = [];
|
|
39
|
+
|
|
37
40
|
let payload = {
|
|
38
41
|
meta: {
|
|
39
42
|
prebidVersion: '$prebid.version$',
|
|
@@ -49,6 +52,10 @@ export const spec = {
|
|
|
49
52
|
};
|
|
50
53
|
|
|
51
54
|
payload.slots = validBidRequests.map(bidRequest => {
|
|
55
|
+
collectEid(eids, bidRequest);
|
|
56
|
+
const adUnitElement = document.getElementById(bidRequest.adUnitCode)
|
|
57
|
+
const coordinates = getOffset(adUnitElement)
|
|
58
|
+
|
|
52
59
|
let slot = {
|
|
53
60
|
name: bidRequest.adUnitCode,
|
|
54
61
|
bidId: bidRequest.bidId,
|
|
@@ -59,12 +66,15 @@ export const spec = {
|
|
|
59
66
|
adSlot: bidRequest.params.slot || bidRequest.adUnitCode,
|
|
60
67
|
placementId: bidRequest.params.placementId || '',
|
|
61
68
|
site: bidRequest.params.site || bidderRequest.refererInfo.page,
|
|
62
|
-
ref: bidderRequest.refererInfo.ref
|
|
63
|
-
|
|
69
|
+
ref: bidderRequest.refererInfo.ref,
|
|
70
|
+
offsetCoordinates: { x: coordinates?.left, y: coordinates?.top }
|
|
71
|
+
}
|
|
64
72
|
|
|
65
73
|
return slot;
|
|
66
74
|
});
|
|
67
75
|
|
|
76
|
+
payload.meta.eids = eids.filter(Boolean);
|
|
77
|
+
|
|
68
78
|
logMessage(payload);
|
|
69
79
|
|
|
70
80
|
return {
|
|
@@ -216,3 +226,35 @@ function consentAllowsPpid(bidderRequest) {
|
|
|
216
226
|
|
|
217
227
|
return (uspConsent || gdprConsent);
|
|
218
228
|
}
|
|
229
|
+
|
|
230
|
+
function collectEid(eids, bid) {
|
|
231
|
+
if (bid.userId) {
|
|
232
|
+
const eid = getUserId(bid.userId.uid2 && bid.userId.uid2.id, 'uidapi.com', undefined, 3)
|
|
233
|
+
eids.push(eid)
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
function getUserId(id, source, uidExt, atype) {
|
|
238
|
+
if (id) {
|
|
239
|
+
const uid = { id, atype };
|
|
240
|
+
|
|
241
|
+
if (uidExt) {
|
|
242
|
+
uid.ext = uidExt;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
return {
|
|
246
|
+
source,
|
|
247
|
+
uids: [ uid ]
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
function getOffset(el) {
|
|
253
|
+
if (el) {
|
|
254
|
+
const rect = el.getBoundingClientRect();
|
|
255
|
+
return {
|
|
256
|
+
left: rect.left + window.scrollX,
|
|
257
|
+
top: rect.top + window.scrollY
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
}
|
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
* and make it available for any GDPR supported adapters to read/pass this information to
|
|
5
5
|
* their system.
|
|
6
6
|
*/
|
|
7
|
-
import {isNumber, isPlainObject, isStr, logError, logInfo, logWarn} from '../src/utils.js';
|
|
7
|
+
import {deepSetValue, isNumber, isPlainObject, isStr, logError, logInfo, logWarn} from '../src/utils.js';
|
|
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
11
|
import {timedAuctionHook} from '../src/utils/perfMetrics.js';
|
|
12
|
+
import {registerOrtbProcessor, REQUEST} from '../src/pbjsORTB.js';
|
|
12
13
|
|
|
13
14
|
const DEFAULT_CMP = 'iab';
|
|
14
15
|
const DEFAULT_CONSENT_TIMEOUT = 10000;
|
|
@@ -354,3 +355,23 @@ export function setConsentConfig(config) {
|
|
|
354
355
|
loadConsentData(); // immediately look up consent data to make it available without requiring an auction
|
|
355
356
|
}
|
|
356
357
|
config.getConfig('consentManagement', config => setConsentConfig(config.consentManagement));
|
|
358
|
+
|
|
359
|
+
export function setOrtbGdpr(ortbRequest, bidderRequest) {
|
|
360
|
+
const consent = bidderRequest.gdprConsent;
|
|
361
|
+
if (consent) {
|
|
362
|
+
if (typeof consent.gdprApplies === 'boolean') {
|
|
363
|
+
deepSetValue(ortbRequest, 'regs.ext.gdpr', consent.gdprApplies ? 1 : 0);
|
|
364
|
+
}
|
|
365
|
+
deepSetValue(ortbRequest, 'user.ext.consent', consent.consentString);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
export function setOrtbAdditionalConsent(ortbRequest, bidderRequest) {
|
|
370
|
+
const addtl = bidderRequest.gdprConsent?.addtlConsent;
|
|
371
|
+
if (addtl && typeof addtl === 'string') {
|
|
372
|
+
deepSetValue(ortbRequest, 'user.ext.ConsentedProvidersSettings.consented_providers', addtl);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
registerOrtbProcessor({type: REQUEST, name: 'gdpr', fn: setOrtbGdpr});
|
|
377
|
+
registerOrtbProcessor({type: REQUEST, name: 'gdprAddtlConsent', fn: setOrtbAdditionalConsent})
|
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
* information and make it available for any USP (CCPA) supported adapters to
|
|
5
5
|
* read/pass this information to their system.
|
|
6
6
|
*/
|
|
7
|
-
import {isFn, isNumber, isPlainObject, isStr, logError, logInfo, logWarn} from '../src/utils.js';
|
|
7
|
+
import {deepSetValue, isFn, isNumber, isPlainObject, isStr, logError, logInfo, logWarn} from '../src/utils.js';
|
|
8
8
|
import {config} from '../src/config.js';
|
|
9
|
-
import {uspDataHandler} from '../src/adapterManager.js';
|
|
9
|
+
import adapterManager, {uspDataHandler} from '../src/adapterManager.js';
|
|
10
|
+
import {registerOrtbProcessor, REQUEST} from '../src/pbjsORTB.js';
|
|
10
11
|
import {timedAuctionHook} from '../src/utils/perfMetrics.js';
|
|
11
12
|
import {getHook} from '../src/hook.js';
|
|
12
13
|
|
|
@@ -114,6 +115,11 @@ function lookupUspConsent({onSuccess, onError}) {
|
|
|
114
115
|
USPAPI_VERSION,
|
|
115
116
|
callbackHandler.consentDataCallback
|
|
116
117
|
);
|
|
118
|
+
uspapiFunction(
|
|
119
|
+
'registerDeletion',
|
|
120
|
+
USPAPI_VERSION,
|
|
121
|
+
adapterManager.callDataDeletionRequest
|
|
122
|
+
)
|
|
117
123
|
} else {
|
|
118
124
|
logInfo(
|
|
119
125
|
'Detected USP CMP is outside the current iframe where Prebid.js is located, calling it now...'
|
|
@@ -123,12 +129,17 @@ function lookupUspConsent({onSuccess, onError}) {
|
|
|
123
129
|
uspapiFrame,
|
|
124
130
|
callbackHandler.consentDataCallback
|
|
125
131
|
);
|
|
132
|
+
callUspApiWhileInIframe(
|
|
133
|
+
'registerDeletion',
|
|
134
|
+
uspapiFrame,
|
|
135
|
+
adapterManager.callDataDeletionRequest
|
|
136
|
+
);
|
|
126
137
|
}
|
|
127
138
|
|
|
139
|
+
let listening = false;
|
|
140
|
+
|
|
128
141
|
function callUspApiWhileInIframe(commandName, uspapiFrame, moduleCallback) {
|
|
129
|
-
|
|
130
|
-
This function behaves, from the caller's perspective, identicially to the in-frame __uspapi call (although it is not synchronous) */
|
|
131
|
-
window.__uspapi = function (cmd, ver, callback) {
|
|
142
|
+
function callUsp(cmd, ver, callback) {
|
|
132
143
|
let callId = Math.random() + '';
|
|
133
144
|
let msg = {
|
|
134
145
|
__uspapiCall: {
|
|
@@ -143,10 +154,13 @@ function lookupUspConsent({onSuccess, onError}) {
|
|
|
143
154
|
};
|
|
144
155
|
|
|
145
156
|
/** when we get the return message, call the stashed callback */
|
|
146
|
-
|
|
157
|
+
if (!listening) {
|
|
158
|
+
window.addEventListener('message', readPostMessageResponse, false);
|
|
159
|
+
listening = true;
|
|
160
|
+
}
|
|
147
161
|
|
|
148
162
|
// call uspapi
|
|
149
|
-
|
|
163
|
+
callUsp(commandName, USPAPI_VERSION, moduleCallback);
|
|
150
164
|
|
|
151
165
|
function readPostMessageResponse(event) {
|
|
152
166
|
const res = event && event.data && event.data.__uspapiReturn;
|
|
@@ -308,3 +322,11 @@ function enableConsentManagement(configFromUser = false) {
|
|
|
308
322
|
config.getConfig('consentManagement', config => setConsentConfig(config.consentManagement));
|
|
309
323
|
|
|
310
324
|
getHook('requestBids').before(requestBidsHook, 50);
|
|
325
|
+
|
|
326
|
+
export function setOrtbUsp(ortbRequest, bidderRequest) {
|
|
327
|
+
if (bidderRequest.uspConsent) {
|
|
328
|
+
deepSetValue(ortbRequest, 'regs.ext.us_privacy', bidderRequest.uspConsent);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
registerOrtbProcessor({type: REQUEST, name: 'usp', fn: setOrtbUsp});
|
|
@@ -27,7 +27,7 @@ const LOG_PREFIX = 'Criteo: ';
|
|
|
27
27
|
Unminified source code can be found in the privately shared repo: https://github.com/Prebid-org/prebid-js-external-js-criteo/blob/master/dist/prod.js
|
|
28
28
|
*/
|
|
29
29
|
const FAST_BID_VERSION_PLACEHOLDER = '%FAST_BID_VERSION%';
|
|
30
|
-
export const FAST_BID_VERSION_CURRENT =
|
|
30
|
+
export const FAST_BID_VERSION_CURRENT = 132;
|
|
31
31
|
const FAST_BID_VERSION_LATEST = 'latest';
|
|
32
32
|
const FAST_BID_VERSION_NONE = 'none';
|
|
33
33
|
const PUBLISHER_TAG_URL_TEMPLATE = 'https://static.criteo.net/js/ld/publishertag.prebid' + FAST_BID_VERSION_PLACEHOLDER + '.js';
|
|
@@ -644,26 +644,46 @@ for (var i = 0; i < 10; ++i) {
|
|
|
644
644
|
</script>`;
|
|
645
645
|
}
|
|
646
646
|
|
|
647
|
+
function pickAvailableGetFloorFunc(bidRequest) {
|
|
648
|
+
if (bidRequest.getFloor) {
|
|
649
|
+
return bidRequest.getFloor;
|
|
650
|
+
}
|
|
651
|
+
if (bidRequest.params.bidFloor && bidRequest.params.bidFloorCur) {
|
|
652
|
+
try {
|
|
653
|
+
const floor = parseFloat(bidRequest.params.bidFloor);
|
|
654
|
+
return () => {
|
|
655
|
+
return {
|
|
656
|
+
currency: bidRequest.params.bidFloorCur,
|
|
657
|
+
floor: floor
|
|
658
|
+
};
|
|
659
|
+
};
|
|
660
|
+
} catch { }
|
|
661
|
+
}
|
|
662
|
+
return undefined;
|
|
663
|
+
}
|
|
664
|
+
|
|
647
665
|
function enrichSlotWithFloors(slot, bidRequest) {
|
|
648
666
|
try {
|
|
649
667
|
const slotFloors = {};
|
|
650
668
|
|
|
651
|
-
|
|
669
|
+
const getFloor = pickAvailableGetFloorFunc(bidRequest);
|
|
670
|
+
|
|
671
|
+
if (getFloor) {
|
|
652
672
|
if (bidRequest.mediaTypes?.banner) {
|
|
653
673
|
slotFloors.banner = {};
|
|
654
674
|
const bannerSizes = parseSizes(deepAccess(bidRequest, 'mediaTypes.banner.sizes'))
|
|
655
|
-
bannerSizes.forEach(bannerSize => slotFloors.banner[parseSize(bannerSize).toString()] =
|
|
675
|
+
bannerSizes.forEach(bannerSize => slotFloors.banner[parseSize(bannerSize).toString()] = getFloor({ size: bannerSize, mediaType: BANNER }));
|
|
656
676
|
}
|
|
657
677
|
|
|
658
678
|
if (bidRequest.mediaTypes?.video) {
|
|
659
679
|
slotFloors.video = {};
|
|
660
680
|
const videoSizes = parseSizes(deepAccess(bidRequest, 'mediaTypes.video.playerSize'))
|
|
661
|
-
videoSizes.forEach(videoSize => slotFloors.video[parseSize(videoSize).toString()] =
|
|
681
|
+
videoSizes.forEach(videoSize => slotFloors.video[parseSize(videoSize).toString()] = getFloor({ size: videoSize, mediaType: VIDEO }));
|
|
662
682
|
}
|
|
663
683
|
|
|
664
684
|
if (bidRequest.mediaTypes?.native) {
|
|
665
685
|
slotFloors.native = {};
|
|
666
|
-
slotFloors.native['*'] =
|
|
686
|
+
slotFloors.native['*'] = getFloor({ size: '*', mediaType: NATIVE });
|
|
667
687
|
}
|
|
668
688
|
|
|
669
689
|
if (Object.keys(slotFloors).length > 0) {
|
package/modules/currency.js
CHANGED
|
@@ -5,6 +5,7 @@ import {ajax} from '../src/ajax.js';
|
|
|
5
5
|
import {config} from '../src/config.js';
|
|
6
6
|
import {getHook} from '../src/hook.js';
|
|
7
7
|
import {defer} from '../src/utils/promise.js';
|
|
8
|
+
import {registerOrtbProcessor, REQUEST} from '../src/pbjsORTB.js';
|
|
8
9
|
import {timedBidResponseHook} from '../src/utils/perfMetrics.js';
|
|
9
10
|
|
|
10
11
|
const DEFAULT_CURRENCY_RATE_URL = 'https://cdn.jsdelivr.net/gh/prebid/currency-file@1/latest.json?date=$$TODAY$$';
|
|
@@ -314,3 +315,11 @@ function roundFloat(num, dec) {
|
|
|
314
315
|
}
|
|
315
316
|
return Math.round(num * d) / d;
|
|
316
317
|
}
|
|
318
|
+
|
|
319
|
+
export function setOrtbCurrency(ortbRequest, bidderRequest, context) {
|
|
320
|
+
if (currencySupportEnabled) {
|
|
321
|
+
ortbRequest.cur = ortbRequest.cur || [context.currency || adServerCurrency];
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
registerOrtbProcessor({type: REQUEST, name: 'currency', fn: setOrtbCurrency});
|
|
@@ -41,7 +41,7 @@ export function getDgKeywordsAndSet(reqBidsConfigObj, callback, moduleConfig, us
|
|
|
41
41
|
} else {
|
|
42
42
|
logMessage('[dgkeyword sub module] dgkeyword targets:', setKeywordTargetBidders);
|
|
43
43
|
logMessage('[dgkeyword sub module] get targets from profile api start.');
|
|
44
|
-
ajax(getProfileApiUrl(moduleConfig?.params?.url, moduleConfig?.params?.
|
|
44
|
+
ajax(getProfileApiUrl(moduleConfig?.params?.url, moduleConfig?.params?.enableReadFpid), {
|
|
45
45
|
success: function(response) {
|
|
46
46
|
const res = JSON.parse(response);
|
|
47
47
|
if (!isFinish) {
|
|
@@ -96,9 +96,9 @@ export function getDgKeywordsAndSet(reqBidsConfigObj, callback, moduleConfig, us
|
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
export function getProfileApiUrl(customeUrl,
|
|
99
|
+
export function getProfileApiUrl(customeUrl, enableReadFpid) {
|
|
100
100
|
const URL = 'https://mediaconsortium.profiles.tagger.opecloud.com/api/v1';
|
|
101
|
-
const fpid = (
|
|
101
|
+
const fpid = (enableReadFpid) ? readFpidFromLocalStrage() : '';
|
|
102
102
|
let url = customeUrl || URL;
|
|
103
103
|
url = url + '?url=' + encodeURIComponent(window.location.href) + ((fpid) ? `&fpid=${fpid}` : '');
|
|
104
104
|
return url;
|
|
@@ -34,8 +34,6 @@ const LOG_ERROR_MESS = {
|
|
|
34
34
|
hasNoArrayOfBids: 'Seatbid from response has no array of bid objects - '
|
|
35
35
|
};
|
|
36
36
|
|
|
37
|
-
const VIDEO_KEYS = ['mimes', 'protocols', 'startdelay', 'placement', 'linearity', 'skip', 'skipmin', 'skipafter', 'sequence', 'battr', 'maxextended', 'minbitrate', 'maxbitrate', 'boxingallowed', 'playbackmethod', 'playbackend', 'delivery', 'pos', 'companionad', 'api', 'companiontype'];
|
|
38
|
-
|
|
39
37
|
export const spec = {
|
|
40
38
|
code: BIDDER_CODE,
|
|
41
39
|
supportedMediaTypes: [ VIDEO ],
|
|
@@ -105,7 +103,7 @@ export const spec = {
|
|
|
105
103
|
const impObj = {
|
|
106
104
|
id: bidId.toString(),
|
|
107
105
|
tagid: secid.toString(),
|
|
108
|
-
video: createVideoForImp(
|
|
106
|
+
video: createVideoForImp(mergeDeep({}, video, mediaTypes && mediaTypes.video), sizes),
|
|
109
107
|
ext: {
|
|
110
108
|
divid: adUnitCode.toString()
|
|
111
109
|
}
|
|
@@ -386,13 +384,7 @@ function createRenderer (bid, rendererParams) {
|
|
|
386
384
|
return renderer;
|
|
387
385
|
}
|
|
388
386
|
|
|
389
|
-
function createVideoForImp({ mind, maxd, size, ...paramsVideo }, bidSizes
|
|
390
|
-
VIDEO_KEYS.forEach((key) => {
|
|
391
|
-
if (!(key in paramsVideo) && key in bidVideo) {
|
|
392
|
-
paramsVideo[key] = bidVideo[key];
|
|
393
|
-
}
|
|
394
|
-
});
|
|
395
|
-
|
|
387
|
+
function createVideoForImp({ mind, maxd, size, ...paramsVideo }, bidSizes) {
|
|
396
388
|
if (size && isStr(size)) {
|
|
397
389
|
const sizeArray = size.split('x');
|
|
398
390
|
if (sizeArray.length === 2 && parseInt(sizeArray[0]) && parseInt(sizeArray[1])) {
|
|
@@ -402,7 +394,7 @@ function createVideoForImp({ mind, maxd, size, ...paramsVideo }, bidSizes, bidVi
|
|
|
402
394
|
}
|
|
403
395
|
|
|
404
396
|
if (!paramsVideo.w || !paramsVideo.h) {
|
|
405
|
-
const playerSizes =
|
|
397
|
+
const playerSizes = paramsVideo.playerSize && paramsVideo.playerSize.length === 2 ? paramsVideo.playerSize : bidSizes;
|
|
406
398
|
if (playerSizes) {
|
|
407
399
|
const playerSize = playerSizes[0];
|
|
408
400
|
if (playerSize) {
|
|
@@ -411,9 +403,13 @@ function createVideoForImp({ mind, maxd, size, ...paramsVideo }, bidSizes, bidVi
|
|
|
411
403
|
}
|
|
412
404
|
}
|
|
413
405
|
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
406
|
+
if (paramsVideo.playerSize) {
|
|
407
|
+
delete paramsVideo.playerSize;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
const durationRangeSec = paramsVideo.durationRangeSec || [];
|
|
411
|
+
const minDur = mind || durationRangeSec[0] || paramsVideo.minduration;
|
|
412
|
+
const maxDur = maxd || durationRangeSec[1] || paramsVideo.maxduration;
|
|
417
413
|
|
|
418
414
|
if (minDur) {
|
|
419
415
|
paramsVideo.minduration = minDur;
|