prebid.js 7.26.0 → 7.28.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/.github/workflows/issue_tracker.yml +1 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/adWMGAnalyticsAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adhashBidAdapter.js +1 -1
- package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
- package/dist/adlooxAdServerVideo.js +1 -1
- package/dist/adlooxAnalyticsAdapter.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/admaticBidAdapter.js +1 -1
- package/dist/admixerBidAdapter.js +1 -1
- package/dist/adomikAnalyticsAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgAnalyticsAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adxpremiumAnalyticsAdapter.js +1 -1
- package/dist/aidemBidAdapter.js +1 -0
- 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/atsAnalyticsAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bidViewability.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/bidwatchAnalyticsAdapter.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/bucksenseBidAdapter.js +1 -1
- package/dist/byDataAnalyticsAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/concertAnalyticsAdapter.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/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/datablocksAnalyticsAdapter.js +1 -1
- package/dist/dependencies.json +6 -0
- package/dist/dfpAdServerVideo.js +1 -1
- package/dist/discoveryBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningAnalyticsAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/fintezaAnalyticsAdapter.js +1 -1
- package/dist/fluctBidAdapter.js +1 -1
- package/dist/ftrackIdSystem.js +1 -1
- package/dist/gdprEnforcement.js +1 -1
- package/dist/genericAnalyticsAdapter.js +1 -0
- package/dist/geoedgeRtdProvider.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/glomexBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/googleAnalyticsAdapter.js +1 -1
- package/dist/gravitoIdSystem.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/growthCodeAnalyticsAdapter.js +1 -0
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hadronAnalyticsAdapter.js +1 -1
- package/dist/id5AnalyticsAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/impactifyBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/invisiblyAnalyticsAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/jwplayerRtdProvider.js +1 -1
- package/dist/kargoAnalyticsAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/kinessoIdSystem.js +1 -1
- package/dist/konduitAnalyticsAdapter.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/limelightDigitalBidAdapter.js +1 -1
- package/dist/liveIntentAnalyticsAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/livewrappedAnalyticsAdapter.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/lotamePanoramaIdSystem.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaAnalyticsAdapter.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/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +206 -202
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxAnalyticsAdapter.js +1 -1
- package/dist/optimonAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pbsExtensions.js +1 -1
- package/dist/pianoDmpAnalyticsAdapter.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +2 -2
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
- package/dist/pubCommonId.js +1 -1
- package/dist/pubProvidedIdSystem.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubperfAnalyticsAdapter.js +1 -1
- package/dist/pubstackAnalyticsAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxaiAnalyticsAdapter.js +1 -1
- package/dist/pulsepointAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/quantcastIdSystem.js +1 -1
- package/dist/rasBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/realvuAnalyticsAdapter.js +1 -1
- package/dist/redtramBidAdapter.js +1 -0
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/relevantAnalyticsAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rivrAnalyticsAdapter.js +1 -1
- package/dist/roxotAnalyticsAdapter.js +1 -1
- package/dist/rtbhouseBidAdapter.js +1 -1
- package/dist/rtdModule.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/s2sTesting.js +1 -1
- package/dist/scaleableAnalyticsAdapter.js +1 -1
- package/dist/schain.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharedIdSystem.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/sigmoidAnalyticsAdapter.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/sonobiAnalyticsAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/staqAnalyticsAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/tapadIdSystem.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/teadsIdSystem.js +1 -1
- package/dist/terceptAnalyticsAdapter.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/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/weboramaRtdProvider.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yandexBidAdapter.js +1 -1
- package/dist/yieldlabBidAdapter.js +1 -1
- package/dist/yieldliftBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/yuktamediaAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
- package/integrationExamples/gpt/growthcode.html +134 -0
- package/libraries/analyticsAdapter/AnalyticsAdapter.js +95 -102
- package/libraries/ortb2.5StrictTranslator/dsl.js +54 -0
- package/libraries/ortb2.5StrictTranslator/spec.js +81 -0
- package/libraries/ortb2.5StrictTranslator/translator.js +37 -0
- package/libraries/ortb2.5Translator/translator.js +82 -0
- package/modules/33acrossIdSystem.js +3 -0
- package/modules/adhashBidAdapter.js +115 -30
- package/modules/adhashBidAdapter.md +1 -3
- package/modules/admaticBidAdapter.js +10 -1
- package/modules/admixerBidAdapter.js +1 -1
- package/modules/aidemBidAdapter.js +492 -0
- package/modules/aidemBidAdapter.md +187 -0
- package/modules/browsiRtdProvider.js +6 -4
- package/modules/bucksenseBidAdapter.js +1 -1
- package/modules/criteoBidAdapter.js +3 -3
- package/modules/discoveryBidAdapter.js +3 -0
- package/modules/eplanningBidAdapter.js +2 -6
- package/modules/fluctBidAdapter.js +5 -0
- package/modules/gdprEnforcement.js +26 -24
- package/modules/genericAnalyticsAdapter.js +157 -0
- package/modules/geoedgeRtdProvider.js +22 -0
- package/modules/glomexBidAdapter.js +2 -0
- package/modules/gravitoIdSystem.js +3 -4
- package/modules/gridBidAdapter.js +1 -1
- package/modules/gridNMBidAdapter.js +1 -1
- package/modules/growthCodeAnalyticsAdapter.js +176 -0
- package/modules/growthCodeAnalyticsAdapter.md +41 -0
- package/modules/impactifyBidAdapter.js +19 -1
- package/modules/jwplayerRtdProvider.js +1 -2
- package/modules/kargoBidAdapter.js +1 -1
- package/modules/lassoBidAdapter.js +8 -4
- package/modules/limelightDigitalBidAdapter.js +1 -1
- package/modules/liveIntentIdSystem.js +1 -2
- package/modules/mediagoBidAdapter.js +2 -1
- package/modules/minutemediaBidAdapter.md +3 -3
- package/modules/nexx360BidAdapter.js +264 -138
- package/modules/openxBidAdapter.md +15 -14
- package/modules/pubCommonId.js +2 -1
- package/modules/pubProvidedIdSystem.js +2 -0
- package/modules/rasBidAdapter.js +8 -3
- package/modules/rasBidAdapter.md +16 -15
- package/modules/redtramBidAdapter.js +155 -0
- package/modules/redtramBidAdapter.md +33 -0
- package/modules/riseBidAdapter.js +15 -0
- package/modules/riseBidAdapter.md +3 -3
- package/modules/rtbhouseBidAdapter.js +90 -29
- package/modules/rubiconBidAdapter.js +2 -1
- package/modules/seedtagBidAdapter.js +67 -56
- package/modules/seedtagBidAdapter.md +60 -0
- package/modules/sharedIdSystem.js +3 -1
- package/modules/smartxBidAdapter.js +1 -1
- package/modules/smnBidAdapter.md +52 -0
- package/modules/taboolaBidAdapter.js +20 -7
- package/modules/tripleliftBidAdapter.js +1 -1
- package/modules/ttdBidAdapter.js +4 -0
- package/modules/vidazooBidAdapter.js +31 -8
- package/modules/yandexBidAdapter.js +85 -19
- package/modules/yandexBidAdapter.md +7 -7
- package/modules/yieldlabBidAdapter.js +10 -4
- package/modules/yieldliftBidAdapter.js +3 -3
- package/package.json +2 -2
- package/src/auction.js +30 -4
- package/src/consentHandler.js +8 -0
- package/src/constants.json +2 -1
- package/src/events.js +4 -0
- package/src/native.js +31 -20
- package/src/refererDetection.js +6 -1
- package/src/storageManager.js +6 -3
- package/test/helpers/analytics.js +34 -0
- package/test/helpers/refererDetectionHelper.js +88 -0
- package/test/mocks/analyticsStub.js +3 -1
- package/test/spec/AnalyticsAdapter_spec.js +119 -116
- package/test/spec/auctionmanager_spec.js +119 -1
- package/test/spec/modules/33acrossIdSystem_spec.js +4 -1
- package/test/spec/modules/adWMGAnalyticsAdapter_spec.js +10 -8
- package/test/spec/modules/adagioAnalyticsAdapter_spec.js +18 -25
- package/test/spec/modules/adhashBidAdapter_spec.js +65 -11
- package/test/spec/modules/aidemBidAdapter_spec.js +664 -0
- package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +0 -2
- package/test/spec/modules/browsiRtdProvider_spec.js +2 -1
- package/test/spec/modules/concertAnalyticsAdapter_spec.js +2 -4
- package/test/spec/modules/enrichmentFpdModule_spec.js +3 -2
- package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +0 -3
- package/test/spec/modules/eplanningBidAdapter_spec.js +4 -4
- package/test/spec/modules/fluctBidAdapter_spec.js +37 -1
- package/test/spec/modules/fpdModule_spec.js +1 -1
- package/test/spec/modules/gdprEnforcement_spec.js +115 -68
- package/test/spec/modules/genericAnalyticsAdapter_spec.js +284 -0
- package/test/spec/modules/geoedgeRtdProvider_spec.js +15 -0
- package/test/spec/modules/glomexBidAdapter_spec.js +4 -0
- package/test/spec/modules/gravitoIdSystem_spec.js +1 -1
- package/test/spec/modules/growthCodeAnalyticsAdapter_spec.js +70 -0
- package/test/spec/modules/impactifyBidAdapter_spec.js +13 -0
- package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +17 -27
- package/test/spec/modules/jwplayerRtdProvider_spec.js +3 -3
- package/test/spec/modules/konduitAnalyticsAdapter_spec.js +0 -2
- package/test/spec/modules/liveIntentAnalyticsAdapter_spec.js +3 -6
- package/test/spec/modules/medianetAnalyticsAdapter_spec.js +7 -1
- package/test/spec/modules/nexx360BidAdapter_spec.js +441 -221
- package/test/spec/modules/optimonAnalyticsAdapter_spec.js +3 -11
- package/test/spec/modules/pianoDmpAnalyticsAdapter_spec.js +4 -11
- package/test/spec/modules/prebidmanagerAnalyticsAdapter_spec.js +3 -12
- package/test/spec/modules/pubperfAnalyticsAdapter_spec.js +6 -19
- package/test/spec/modules/pubstackAnalyticsAdapter_spec.js +3 -17
- package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +13 -19
- package/test/spec/modules/rasBidAdapter_spec.js +5 -1
- package/test/spec/modules/redtramBidAdapter_spec.js +256 -0
- package/test/spec/modules/riseBidAdapter_spec.js +24 -0
- package/test/spec/modules/rtbhouseBidAdapter_spec.js +79 -0
- package/test/spec/modules/seedtagBidAdapter_spec.js +65 -92
- package/test/spec/modules/sigmoidAnalyticsAdapter_spec.js +4 -8
- package/test/spec/modules/sovrnAnalyticsAdapter_spec.js +6 -18
- package/test/spec/modules/taboolaBidAdapter_spec.js +39 -0
- package/test/spec/modules/tripleliftBidAdapter_spec.js +3 -10
- package/test/spec/modules/ttdBidAdapter_spec.js +50 -9
- package/test/spec/modules/vidazooBidAdapter_spec.js +173 -27
- package/test/spec/modules/yandexBidAdapter_spec.js +22 -13
- package/test/spec/modules/yieldlabBidAdapter_spec.js +49 -20
- package/test/spec/modules/yieldliftBidAdapter_spec.js +1 -1
- package/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +5 -2
- package/test/spec/native_spec.js +68 -56
- package/test/spec/ortb2.5StrictTranslator/dsl_spec.js +137 -0
- package/test/spec/ortb2.5StrictTranslator/spec_spec.js +358 -0
- package/test/spec/ortb2.5StrictTranslator/translator_spec.js +16 -0
- package/test/spec/ortb2.5Translator/translator_spec.js +64 -0
- package/test/spec/refererDetection_spec.js +46 -95
- package/test/spec/unit/core/storageManager_spec.js +2 -1
|
@@ -15,23 +15,24 @@ Publishers are welcome to test the other adapter and give feedback. Please note
|
|
|
15
15
|
# Bid Parameters
|
|
16
16
|
## Banner
|
|
17
17
|
|
|
18
|
-
| Name
|
|
19
|
-
|
|
20
|
-
| `delDomain` or `platform
|
|
21
|
-
| `unit`
|
|
22
|
-
| `customParams`
|
|
23
|
-
| `customFloor`
|
|
24
|
-
| `doNotTrack`
|
|
25
|
-
| `coppa`
|
|
18
|
+
| Name | Scope | Type | Description | Example |
|
|
19
|
+
|---------------------------------|----------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------|
|
|
20
|
+
| `delDomain` ~~or `platform`~~** | required | String | OpenX delivery domain provided by your OpenX representative. | "PUBLISHER-d.openx.net" |
|
|
21
|
+
| `unit` | required | String | OpenX ad unit ID provided by your OpenX representative. | "1611023122" |
|
|
22
|
+
| `customParams` | optional | Object | User-defined targeting key-value pairs. customParams applies to a specific unit. | `{key1: "v1", key2: ["v2","v3"]}` |
|
|
23
|
+
| `customFloor` | optional | Number | Minimum price in USD. customFloor applies to a specific unit. For example, use the following value to set a $1.50 floor: 1.50 <br/><br/> **WARNING:**<br/> Misuse of this parameter can impact revenue<br/><br/>Note: OpenX suggests using the [Price Floor Module](https://docs.prebid.org/dev-docs/modules/floors.html) instead of customFloor. The Price Floor Module is prioritized over customFloor if both are present. | 1.50 |
|
|
24
|
+
| `doNotTrack` | optional | Boolean | Prevents advertiser from using data for this user. <br/><br/> **WARNING:**<br/> Request-level setting. May impact revenue. | true |
|
|
25
|
+
| `coppa` | optional | Boolean | Enables Child's Online Privacy Protection Act (COPPA) regulations. | true |
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
** platform is deprecated. Please use delDomain instead. If you have any questions please contact your representative.
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
| ---- | ----- | ---- | ----------- | -------
|
|
31
|
-
| `unit` | required | String | OpenX ad unit ID provided by your OpenX representative. | "1611023122"
|
|
32
|
-
| `delDomain` | required | String | OpenX delivery domain provided by your OpenX representative. | "PUBLISHER-d.openx.net"
|
|
33
|
-
| `openrtb` | optional | OpenRTB Impression | An OpenRtb Impression with Video subtype properties | `{ imp: [{ video: {mimes: ['video/x-ms-wmv, video/mp4']} }] }`
|
|
29
|
+
## Video
|
|
34
30
|
|
|
31
|
+
| Name | Scope | Type | Description | Example |
|
|
32
|
+
|-------------|----------|--------------------|--------------------------------------------------------------|----------------------------------------------------------------|
|
|
33
|
+
| `unit` | required | String | OpenX ad unit ID provided by your OpenX representative. | "1611023122" |
|
|
34
|
+
| `delDomain` | required | String | OpenX delivery domain provided by your OpenX representative. | "PUBLISHER-d.openx.net" |
|
|
35
|
+
| `openrtb` | optional | OpenRTB Impression | An OpenRtb Impression with Video subtype properties | `{ imp: [{ video: {mimes: ['video/x-ms-wmv, video/mp4']} }] }` |
|
|
35
36
|
|
|
36
37
|
# Example
|
|
37
38
|
```javascript
|
package/modules/pubCommonId.js
CHANGED
|
@@ -9,8 +9,9 @@ import * as events from '../src/events.js';
|
|
|
9
9
|
import CONSTANTS from '../src/constants.json';
|
|
10
10
|
import { getStorageManager } from '../src/storageManager.js';
|
|
11
11
|
import {timedAuctionHook} from '../src/utils/perfMetrics.js';
|
|
12
|
+
import {VENDORLESS_GVLID} from '../src/consentHandler.js';
|
|
12
13
|
|
|
13
|
-
const storage = getStorageManager({moduleName: 'pubCommonId'});
|
|
14
|
+
const storage = getStorageManager({moduleName: 'pubCommonId', gvlid: VENDORLESS_GVLID});
|
|
14
15
|
|
|
15
16
|
const ID_NAME = '_pubcid';
|
|
16
17
|
const OPTOUT_NAME = '_pubcid_optout';
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import {submodule} from '../src/hook.js';
|
|
9
9
|
import { logInfo, isArray } from '../src/utils.js';
|
|
10
|
+
import {VENDORLESS_GVLID} from '../src/consentHandler.js';
|
|
10
11
|
|
|
11
12
|
const MODULE_NAME = 'pubProvidedId';
|
|
12
13
|
|
|
@@ -18,6 +19,7 @@ export const pubProvidedIdSubmodule = {
|
|
|
18
19
|
* @type {string}
|
|
19
20
|
*/
|
|
20
21
|
name: MODULE_NAME,
|
|
22
|
+
gvlid: VENDORLESS_GVLID,
|
|
21
23
|
|
|
22
24
|
/**
|
|
23
25
|
* decode the stored id value for passing to bid request
|
package/modules/rasBidAdapter.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as utils from '../src/utils.js';
|
|
2
1
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
2
|
import { BANNER } from '../src/mediaTypes.js';
|
|
4
3
|
import { isEmpty, getAdUnitSizes, parseSizesInput, deepAccess } from '../src/utils.js';
|
|
@@ -12,9 +11,15 @@ const getEndpoint = (network) => {
|
|
|
12
11
|
|
|
13
12
|
function parseParams(params, bidderRequest) {
|
|
14
13
|
const newParams = {};
|
|
14
|
+
if (params.customParams && typeof params.customParams === 'object') {
|
|
15
|
+
for (const param in params.customParams) {
|
|
16
|
+
if (params.customParams.hasOwnProperty(param)) {
|
|
17
|
+
newParams[param] = params.customParams[param];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
15
21
|
const du = deepAccess(bidderRequest, 'refererInfo.page');
|
|
16
22
|
const dr = deepAccess(bidderRequest, 'refererInfo.ref');
|
|
17
|
-
|
|
18
23
|
if (du) {
|
|
19
24
|
newParams.du = du;
|
|
20
25
|
}
|
|
@@ -93,7 +98,7 @@ const getSlots = (bidRequests) => {
|
|
|
93
98
|
const batchSize = bidRequests.length;
|
|
94
99
|
for (let i = 0; i < batchSize; i++) {
|
|
95
100
|
const adunit = bidRequests[i];
|
|
96
|
-
const slotSequence =
|
|
101
|
+
const slotSequence = deepAccess(adunit, 'params.slotSequence');
|
|
97
102
|
|
|
98
103
|
const sizes = parseSizesInput(getAdUnitSizes(adunit)).join(',');
|
|
99
104
|
|
package/modules/rasBidAdapter.md
CHANGED
|
@@ -34,18 +34,19 @@ var adUnits = [{
|
|
|
34
34
|
|
|
35
35
|
# Parameters
|
|
36
36
|
|
|
37
|
-
| Name
|
|
38
|
-
|
|
39
|
-
| network
|
|
40
|
-
| site
|
|
41
|
-
| area
|
|
42
|
-
| slot
|
|
43
|
-
| slotSequence
|
|
44
|
-
| pageContext
|
|
45
|
-
| pageContext.dr
|
|
46
|
-
| pageContext.du
|
|
47
|
-
| pageContext.dv
|
|
48
|
-
| pageContext.keyWords
|
|
49
|
-
| pageContext.keyValues
|
|
50
|
-
| pageContext.keyValues.ci
|
|
51
|
-
| pageContext.keyValues.adunit | optional | String
|
|
37
|
+
| Name | Scope | Type | Description | Example |
|
|
38
|
+
|------------------------------|----------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------|
|
|
39
|
+
| network | required | String | Specific identifier provided by RAS | `"4178463"` |
|
|
40
|
+
| site | required | String | Specific identifier name (case-insensitive) that is associated with this ad unit and provided by RAS | `"example_com"` |
|
|
41
|
+
| area | required | String | Ad unit category name; only case-insensitive alphanumeric with underscores and hyphens are allowed | `"sport"` |
|
|
42
|
+
| slot | required | String | Ad unit placement name (case-insensitive) provided by RAS | `"slot"` |
|
|
43
|
+
| slotSequence | optional | Number | Ad unit sequence position provided by RAS | `1` |
|
|
44
|
+
| pageContext | optional | Object | Web page context data | `{}` |
|
|
45
|
+
| pageContext.dr | optional | String | Document referrer URL address | `"https://example.com/"` |
|
|
46
|
+
| pageContext.du | optional | String | Document URL address | `"https://example.com/sport/football/article.html?id=932016a5-02fc-4d5c-b643-fafc2f270f06"` |
|
|
47
|
+
| pageContext.dv | optional | String | Document virtual address as slash-separated path that may consist of any number of parts (case-insensitive alphanumeric with underscores and hyphens); first part should be the same as `site` value and second as `area` value; next parts may reflect website navigation | `"example_com/sport/football"` |
|
|
48
|
+
| pageContext.keyWords | optional | String[] | List of keywords associated with this ad unit; only case-insensitive alphanumeric with underscores and hyphens are allowed | `["euro", "lewandowski"]` |
|
|
49
|
+
| pageContext.keyValues | optional | Object | Key-values associated with this ad unit (case-insensitive); following characters are not allowed in the values: `" ' = ! + # * ~ ; ^ ( ) < > [ ] & @` | `{}` |
|
|
50
|
+
| pageContext.keyValues.ci | optional | String | Content unique identifier | `"932016a5-02fc-4d5c-b643-fafc2f270f06"` |
|
|
51
|
+
| pageContext.keyValues.adunit | optional | String | Ad unit name | `"example_com/sport"` |
|
|
52
|
+
| customParams | optional | Object | Custom request params | `{}` |
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isFn,
|
|
3
|
+
isStr,
|
|
4
|
+
deepAccess,
|
|
5
|
+
getWindowTop,
|
|
6
|
+
triggerPixel
|
|
7
|
+
} from '../src/utils.js';
|
|
8
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
9
|
+
import { BANNER } from '../src/mediaTypes.js';
|
|
10
|
+
import { config } from '../src/config.js';
|
|
11
|
+
|
|
12
|
+
const BIDDER_CODE = 'redtram';
|
|
13
|
+
const AD_URL = 'https://prebid.redtram.com/pbjs';
|
|
14
|
+
const SYNC_URL = 'https://prebid.redtram.com/sync';
|
|
15
|
+
|
|
16
|
+
function isBidResponseValid(bid) {
|
|
17
|
+
if (!bid.requestId || !bid.cpm || !bid.creativeId ||
|
|
18
|
+
!bid.ttl || !bid.currency || !bid.meta) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
switch (bid.mediaType) {
|
|
23
|
+
case BANNER:
|
|
24
|
+
return Boolean(bid.width && bid.height && bid.ad);
|
|
25
|
+
default:
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function getBidFloor(bid) {
|
|
31
|
+
if (!isFn(bid.getFloor)) {
|
|
32
|
+
return deepAccess(bid, 'params.bidFloor', 0);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
const bidFloor = bid.getFloor({
|
|
37
|
+
currency: 'USD',
|
|
38
|
+
mediaType: '*',
|
|
39
|
+
size: '*',
|
|
40
|
+
});
|
|
41
|
+
return bidFloor.floor;
|
|
42
|
+
} catch (_) {
|
|
43
|
+
return 0
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export const spec = {
|
|
48
|
+
code: BIDDER_CODE,
|
|
49
|
+
supportedMediaTypes: [BANNER],
|
|
50
|
+
|
|
51
|
+
isBidRequestValid: (bid) => {
|
|
52
|
+
return Boolean(bid.bidId && bid.params && bid.params.placementId);
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
buildRequests: (validBidRequests = [], bidderRequest) => {
|
|
56
|
+
const winTop = getWindowTop();
|
|
57
|
+
const location = winTop.location;
|
|
58
|
+
const placements = [];
|
|
59
|
+
|
|
60
|
+
const request = {
|
|
61
|
+
deviceWidth: winTop.screen.width,
|
|
62
|
+
deviceHeight: winTop.screen.height,
|
|
63
|
+
language: (navigator && navigator.language) ? navigator.language.split('-')[0] : '',
|
|
64
|
+
host: location.host,
|
|
65
|
+
page: location.pathname,
|
|
66
|
+
placements: placements
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
if (bidderRequest) {
|
|
70
|
+
if (bidderRequest.uspConsent) {
|
|
71
|
+
request.ccpa = bidderRequest.uspConsent;
|
|
72
|
+
}
|
|
73
|
+
if (bidderRequest.gdprConsent) {
|
|
74
|
+
request.gdpr = bidderRequest.gdprConsent;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const len = validBidRequests.length;
|
|
79
|
+
for (let i = 0; i < len; i++) {
|
|
80
|
+
const bid = validBidRequests[i];
|
|
81
|
+
const placement = {
|
|
82
|
+
placementId: bid.params.placementId,
|
|
83
|
+
bidId: bid.bidId,
|
|
84
|
+
schain: bid.schain || {},
|
|
85
|
+
bidfloor: getBidFloor(bid)
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
if (typeof bid.userId !== 'undefined') {
|
|
89
|
+
placement.userId = bid.userId;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const mediaType = bid.mediaTypes;
|
|
93
|
+
|
|
94
|
+
if (mediaType && mediaType[BANNER] && mediaType[BANNER].sizes) {
|
|
95
|
+
placement.sizes = mediaType[BANNER].sizes;
|
|
96
|
+
placement.adFormat = BANNER;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
placements.push(placement);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return {
|
|
103
|
+
method: 'POST',
|
|
104
|
+
url: AD_URL,
|
|
105
|
+
data: request
|
|
106
|
+
};
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
interpretResponse: (serverResponse) => {
|
|
110
|
+
let response = [];
|
|
111
|
+
for (let i = 0; i < serverResponse.body.length; i++) {
|
|
112
|
+
let resItem = serverResponse.body[i];
|
|
113
|
+
if (isBidResponseValid(resItem)) {
|
|
114
|
+
const advertiserDomains = resItem.adomain && resItem.adomain.length ? resItem.adomain : [];
|
|
115
|
+
resItem.meta = { ...resItem.meta, advertiserDomains };
|
|
116
|
+
|
|
117
|
+
response.push(resItem);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return response;
|
|
121
|
+
},
|
|
122
|
+
|
|
123
|
+
getUserSyncs: (syncOptions, serverResponses, gdprConsent, uspConsent) => {
|
|
124
|
+
let syncType = syncOptions.iframeEnabled ? 'iframe' : 'image';
|
|
125
|
+
let syncUrl = SYNC_URL + `/${syncType}?pbjs=1`;
|
|
126
|
+
if (gdprConsent && gdprConsent.consentString) {
|
|
127
|
+
if (typeof gdprConsent.gdprApplies === 'boolean') {
|
|
128
|
+
syncUrl += `&gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${gdprConsent.consentString}`;
|
|
129
|
+
} else {
|
|
130
|
+
syncUrl += `&gdpr=0&gdpr_consent=${gdprConsent.consentString}`;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (uspConsent && uspConsent.consentString) {
|
|
134
|
+
syncUrl += `&ccpa_consent=${uspConsent.consentString}`;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const coppa = config.getConfig('coppa') ? 1 : 0;
|
|
138
|
+
syncUrl += `&coppa=${coppa}`;
|
|
139
|
+
|
|
140
|
+
return [{
|
|
141
|
+
type: syncType,
|
|
142
|
+
url: syncUrl
|
|
143
|
+
}];
|
|
144
|
+
},
|
|
145
|
+
|
|
146
|
+
onBidWon: (bid) => {
|
|
147
|
+
const cpm = deepAccess(bid, 'adserverTargeting.hb_pb') || '';
|
|
148
|
+
if (isStr(bid.nurl) && bid.nurl !== '') {
|
|
149
|
+
bid.nurl = bid.nurl.replace(/\${AUCTION_PRICE}/, cpm);
|
|
150
|
+
triggerPixel(bid.nurl);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
registerBidder(spec);
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
Module Name: redtram Bidder Adapter
|
|
5
|
+
Module Type: redtram Bidder Adapter
|
|
6
|
+
Maintainer: support@redtram.com
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
# Description
|
|
10
|
+
|
|
11
|
+
Module that connects to redtram demand sources
|
|
12
|
+
|
|
13
|
+
# Test Parameters
|
|
14
|
+
```
|
|
15
|
+
var adUnits = [
|
|
16
|
+
{
|
|
17
|
+
code: 'div-prebid',
|
|
18
|
+
mediaTypes:{
|
|
19
|
+
banner: {
|
|
20
|
+
sizes: [[300, 250]],
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
bids:[
|
|
24
|
+
{
|
|
25
|
+
bidder: 'redtram',
|
|
26
|
+
params: {
|
|
27
|
+
placementId: '23611' //test, please replace after test
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
```
|
|
@@ -309,6 +309,16 @@ function generateBidParameters(bid, bidderRequest) {
|
|
|
309
309
|
bidObject.placementId = placementId;
|
|
310
310
|
}
|
|
311
311
|
|
|
312
|
+
const mimes = deepAccess(bid, `mediaTypes.${mediaType}.mimes`);
|
|
313
|
+
if (mimes) {
|
|
314
|
+
bidObject.mimes = mimes;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
const api = deepAccess(bid, `mediaTypes.${mediaType}.api`);
|
|
318
|
+
if (api) {
|
|
319
|
+
bidObject.api = api;
|
|
320
|
+
}
|
|
321
|
+
|
|
312
322
|
if (mediaType === VIDEO) {
|
|
313
323
|
const playbackMethod = deepAccess(bid, `mediaTypes.video.playbackmethod`);
|
|
314
324
|
let playbackMethodValue;
|
|
@@ -349,6 +359,11 @@ function generateBidParameters(bid, bidderRequest) {
|
|
|
349
359
|
if (linearity) {
|
|
350
360
|
bidObject.linearity = linearity;
|
|
351
361
|
}
|
|
362
|
+
|
|
363
|
+
const protocols = deepAccess(bid, `mediaTypes.video.protocols`);
|
|
364
|
+
if (protocols) {
|
|
365
|
+
bidObject.protocols = protocols;
|
|
366
|
+
}
|
|
352
367
|
}
|
|
353
368
|
|
|
354
369
|
return bidObject;
|
|
@@ -20,7 +20,7 @@ The adapter supports Video(instream).
|
|
|
20
20
|
|
|
21
21
|
| Name | Scope | Type | Description | Example
|
|
22
22
|
| ---- | ----- | ---- | ----------- | -------
|
|
23
|
-
| `org` | required | String | Rise publisher Id provided by your Rise representative | "
|
|
23
|
+
| `org` | required | String | Rise publisher Id provided by your Rise representative | "1234567890abcdef12345678"
|
|
24
24
|
| `floorPrice` | optional | Number | Minimum price in USD. Misuse of this parameter can impact revenue | 2.00
|
|
25
25
|
| `placementId` | optional | String | A unique placement identifier | "12345678"
|
|
26
26
|
| `testMode` | optional | Boolean | This activates the test mode | false
|
|
@@ -41,10 +41,10 @@ var adUnits = [
|
|
|
41
41
|
bids: [{
|
|
42
42
|
bidder: 'rise',
|
|
43
43
|
params: {
|
|
44
|
-
org: '
|
|
44
|
+
org: '1234567890abcdef12345678', // Required
|
|
45
45
|
floorPrice: 2.00, // Optional
|
|
46
46
|
placementId: '12345678', // Optional
|
|
47
|
-
testMode: false // Optional,
|
|
47
|
+
testMode: false, // Optional,
|
|
48
48
|
rtbDomain: "www.test.com" //Optional
|
|
49
49
|
}
|
|
50
50
|
}]
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import {deepAccess, isArray, logError} from '../src/utils.js';
|
|
1
|
+
import {deepAccess, mergeDeep, isArray, logError, logInfo} from '../src/utils.js';
|
|
2
2
|
import { getOrigin } from '../libraries/getOrigin/index.js';
|
|
3
3
|
import {BANNER, NATIVE} from '../src/mediaTypes.js';
|
|
4
4
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
5
5
|
import {includes} from '../src/polyfill.js';
|
|
6
6
|
import { convertOrtbRequestToProprietaryNative } from '../src/native.js';
|
|
7
|
+
import { config } from '../src/config.js';
|
|
7
8
|
|
|
8
9
|
const BIDDER_CODE = 'rtbhouse';
|
|
9
10
|
const REGIONS = ['prebid-eu', 'prebid-us', 'prebid-asia'];
|
|
10
11
|
const ENDPOINT_URL = 'creativecdn.com/bidder/prebid/bids';
|
|
12
|
+
const FLEDGE_ENDPOINT_URL = 'creativecdn.com/bidder/prebidfledge/bids';
|
|
11
13
|
const DEFAULT_CURRENCY_ARR = ['USD']; // NOTE - USD is the only supported currency right now; Hardcoded for bids
|
|
12
14
|
const SUPPORTED_MEDIA_TYPES = [BANNER, NATIVE];
|
|
13
15
|
const TTL = 55;
|
|
@@ -50,12 +52,13 @@ export const spec = {
|
|
|
50
52
|
|
|
51
53
|
const request = {
|
|
52
54
|
id: validBidRequests[0].auctionId,
|
|
53
|
-
imp: validBidRequests.map(slot => mapImpression(slot)),
|
|
55
|
+
imp: validBidRequests.map(slot => mapImpression(slot, bidderRequest)),
|
|
54
56
|
site: mapSite(validBidRequests, bidderRequest),
|
|
55
57
|
cur: DEFAULT_CURRENCY_ARR,
|
|
56
58
|
test: validBidRequests[0].params.test || 0,
|
|
57
59
|
source: mapSource(validBidRequests[0]),
|
|
58
60
|
};
|
|
61
|
+
|
|
59
62
|
if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies) {
|
|
60
63
|
const consentStr = (bidderRequest.gdprConsent.consentString)
|
|
61
64
|
? bidderRequest.gdprConsent.consentString.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '') : '';
|
|
@@ -81,37 +84,32 @@ export const spec = {
|
|
|
81
84
|
}
|
|
82
85
|
}
|
|
83
86
|
|
|
84
|
-
const ortb2Params = bidderRequest
|
|
85
|
-
if (ortb2Params
|
|
86
|
-
request.
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}),
|
|
94
|
-
};
|
|
87
|
+
const ortb2Params = bidderRequest?.ortb2 || {};
|
|
88
|
+
if (ortb2Params.site) {
|
|
89
|
+
mergeDeep(request, { site: ortb2Params.site });
|
|
90
|
+
}
|
|
91
|
+
if (ortb2Params.user) {
|
|
92
|
+
mergeDeep(request, { user: ortb2Params.user });
|
|
93
|
+
}
|
|
94
|
+
if (ortb2Params.device) {
|
|
95
|
+
mergeDeep(request, { device: ortb2Params.device });
|
|
95
96
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
ext: { ...request.site?.ext, ...ortb2Params.site.ext },
|
|
104
|
-
}),
|
|
105
|
-
};
|
|
97
|
+
|
|
98
|
+
let computedEndpointUrl = ENDPOINT_URL;
|
|
99
|
+
|
|
100
|
+
const fledgeConfig = config.getConfig('fledgeConfig');
|
|
101
|
+
if (bidderRequest.fledgeEnabled && fledgeConfig) {
|
|
102
|
+
mergeDeep(request, { ext: { fledge_config: fledgeConfig } });
|
|
103
|
+
computedEndpointUrl = FLEDGE_ENDPOINT_URL;
|
|
106
104
|
}
|
|
107
105
|
|
|
108
106
|
return {
|
|
109
107
|
method: 'POST',
|
|
110
|
-
url: 'https://' + validBidRequests[0].params.region + '.' +
|
|
108
|
+
url: 'https://' + validBidRequests[0].params.region + '.' + computedEndpointUrl,
|
|
111
109
|
data: JSON.stringify(request)
|
|
112
110
|
};
|
|
113
111
|
},
|
|
114
|
-
|
|
112
|
+
interpretOrtbResponse: function (serverResponse, originalRequest) {
|
|
115
113
|
const responseBody = serverResponse.body;
|
|
116
114
|
if (!isArray(responseBody)) {
|
|
117
115
|
return [];
|
|
@@ -119,17 +117,72 @@ export const spec = {
|
|
|
119
117
|
|
|
120
118
|
const bids = [];
|
|
121
119
|
responseBody.forEach(serverBid => {
|
|
122
|
-
if (serverBid.price === 0)
|
|
120
|
+
if (!serverBid.price) { // price may exist and is === 0 or there's no price prop at all (fledge req case)
|
|
123
121
|
return;
|
|
124
122
|
}
|
|
123
|
+
|
|
124
|
+
let interpretedBid;
|
|
125
|
+
|
|
125
126
|
// try...catch would be risky cause JSON.parse throws SyntaxError
|
|
126
127
|
if (serverBid.adm.indexOf('{') === 0) {
|
|
127
|
-
|
|
128
|
+
interpretedBid = interpretNativeBid(serverBid);
|
|
128
129
|
} else {
|
|
129
|
-
|
|
130
|
+
interpretedBid = interpretBannerBid(serverBid);
|
|
130
131
|
}
|
|
132
|
+
if (serverBid.ext) interpretedBid.ext = serverBid.ext;
|
|
133
|
+
|
|
134
|
+
bids.push(interpretedBid);
|
|
131
135
|
});
|
|
132
136
|
return bids;
|
|
137
|
+
},
|
|
138
|
+
interpretResponse: function (serverResponse, originalRequest) {
|
|
139
|
+
let bids;
|
|
140
|
+
|
|
141
|
+
const responseBody = serverResponse.body;
|
|
142
|
+
let fledgeAuctionConfigs = null;
|
|
143
|
+
|
|
144
|
+
if (responseBody.bidid && isArray(responseBody?.ext?.igbid)) {
|
|
145
|
+
// we have fledge response
|
|
146
|
+
// mimic the original response ([{},...])
|
|
147
|
+
bids = this.interpretOrtbResponse({ body: responseBody.seatbid[0]?.bid }, originalRequest);
|
|
148
|
+
|
|
149
|
+
const seller = responseBody.ext.seller;
|
|
150
|
+
const decisionLogicUrl = responseBody.ext.decisionLogicUrl;
|
|
151
|
+
const sellerTimeout = 'sellerTimeout' in responseBody.ext ? { sellerTimeout: responseBody.ext.sellerTimeout } : {};
|
|
152
|
+
responseBody.ext.igbid.forEach((igbid) => {
|
|
153
|
+
const perBuyerSignals = {};
|
|
154
|
+
igbid.igbuyer.forEach(buyerItem => {
|
|
155
|
+
perBuyerSignals[buyerItem.igdomain] = buyerItem.buyersignal
|
|
156
|
+
});
|
|
157
|
+
fledgeAuctionConfigs = fledgeAuctionConfigs || {};
|
|
158
|
+
fledgeAuctionConfigs[igbid.impid] = mergeDeep(
|
|
159
|
+
{
|
|
160
|
+
seller,
|
|
161
|
+
decisionLogicUrl,
|
|
162
|
+
interestGroupBuyers: Object.keys(perBuyerSignals),
|
|
163
|
+
perBuyerSignals,
|
|
164
|
+
},
|
|
165
|
+
sellerTimeout
|
|
166
|
+
);
|
|
167
|
+
});
|
|
168
|
+
} else {
|
|
169
|
+
bids = this.interpretOrtbResponse(serverResponse, originalRequest);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (fledgeAuctionConfigs) {
|
|
173
|
+
fledgeAuctionConfigs = Object.entries(fledgeAuctionConfigs).map(([bidId, cfg]) => {
|
|
174
|
+
return Object.assign({
|
|
175
|
+
bidId,
|
|
176
|
+
auctionSignals: {}
|
|
177
|
+
}, cfg);
|
|
178
|
+
});
|
|
179
|
+
logInfo('Response with FLEDGE:', { bids, fledgeAuctionConfigs });
|
|
180
|
+
return {
|
|
181
|
+
bids,
|
|
182
|
+
fledgeAuctionConfigs,
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return bids;
|
|
133
186
|
}
|
|
134
187
|
};
|
|
135
188
|
registerBidder(spec);
|
|
@@ -154,7 +207,7 @@ function applyFloor(slot) {
|
|
|
154
207
|
* @param {object} slot Ad Unit Params by Prebid
|
|
155
208
|
* @returns {object} Imp by OpenRTB 2.5 §3.2.4
|
|
156
209
|
*/
|
|
157
|
-
function mapImpression(slot) {
|
|
210
|
+
function mapImpression(slot, bidderRequest) {
|
|
158
211
|
const imp = {
|
|
159
212
|
id: slot.bidId,
|
|
160
213
|
banner: mapBanner(slot),
|
|
@@ -167,6 +220,14 @@ function mapImpression(slot) {
|
|
|
167
220
|
imp.bidfloor = bidfloor;
|
|
168
221
|
}
|
|
169
222
|
|
|
223
|
+
if (bidderRequest.fledgeEnabled) {
|
|
224
|
+
imp.ext = imp.ext || {};
|
|
225
|
+
imp.ext.ae = slot?.ortb2Imp?.ext?.ae
|
|
226
|
+
} else {
|
|
227
|
+
if (imp.ext?.ae) {
|
|
228
|
+
delete imp.ext.ae;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
170
231
|
return imp;
|
|
171
232
|
}
|
|
172
233
|
|