prebid.js 7.2.0 → 7.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.circleci/config.yml +11 -6
- package/.github/dependabot.yml +6 -0
- package/.github/workflows/issue_tracker.yml +5 -0
- package/.github/workflows/release-drafter.yml +6 -0
- package/README.md +35 -0
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adkernelBidAdapter.js +1 -1
- package/dist/adotBidAdapter.js +1 -1
- package/dist/adpod.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.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/asoBidAdapter.js +1 -1
- package/dist/audiencerunBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bluebillywigBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/cpexIdSystem.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/debugging-standalone.js +1 -1
- package/dist/debugging.js +1 -1
- package/dist/dianomiBidAdapter.js +1 -0
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -0
- package/dist/fpdModule.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/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hadronIdSystem.js +1 -1
- package/dist/hadronRtdProvider.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/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoAnalyticsAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -0
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediakeysBidAdapter.js +1 -1
- package/dist/medianetBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/missenaBidAdapter.js +1 -1
- package/dist/nativoBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +137 -131
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxOrtbBidAdapter.js +1 -0
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +2 -2
- 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/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.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 -0
- package/dist/sizeMappingV2.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/sspBCBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/tncIdSystem.js +1 -0
- 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/ventesBidAdapter.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vrtcalBidAdapter.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/yieldlabBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/yieldoneBidAdapter.js +1 -1
- package/governance.md +5 -11
- package/gulpHelpers.js +1 -1
- package/gulpfile.js +1 -1
- package/karma.conf.maker.js +3 -1
- package/modules/.submodules.json +1 -0
- package/modules/33acrossBidAdapter.js +5 -1
- package/modules/adkernelBidAdapter.js +2 -1
- package/modules/adotBidAdapter.js +3 -3
- package/modules/adqueryBidAdapter.js +5 -1
- package/modules/appnexusBidAdapter.js +3 -3
- package/modules/cpexIdSystem.js +7 -8
- package/modules/criteoBidAdapter.js +7 -1
- package/modules/cwireBidAdapter.md +1 -1
- package/modules/debugging/bidInterceptor.js +1 -1
- package/modules/debugging/index.js +2 -1
- package/modules/dianomiBidAdapter.js +369 -0
- package/modules/dianomiBidAdapter.md +73 -0
- package/modules/finativeBidAdapter.js +235 -0
- package/modules/finativeBidAdapter.md +45 -0
- package/modules/fpdModule/index.js +6 -5
- package/modules/gdprEnforcement.js +8 -14
- package/modules/gumgumBidAdapter.js +2 -0
- package/modules/gumgumBidAdapter.md +19 -1
- package/modules/hadronAnalyticsAdapter.md +5 -5
- package/modules/hadronIdSystem.js +18 -5
- package/modules/hadronIdSystem.md +15 -11
- package/modules/hadronRtdProvider.js +14 -1
- package/modules/hadronRtdProvider.md +17 -13
- package/modules/insticatorBidAdapter.js +9 -0
- package/modules/ixBidAdapter.js +457 -57
- package/modules/ixBidAdapter.md +95 -5
- package/modules/kargoAnalyticsAdapter.js +88 -6
- package/modules/kargoAnalyticsAdapter.md +33 -0
- package/modules/kargoBidAdapter.js +1 -2
- package/modules/lassoBidAdapter.js +133 -0
- package/modules/lassoBidAdapter.md +29 -0
- package/modules/medianetBidAdapter.js +9 -5
- package/modules/missenaBidAdapter.js +20 -2
- package/modules/nativoBidAdapter.js +19 -7
- package/modules/openxBidAdapter.md +3 -1
- package/modules/openxOrtbBidAdapter.js +349 -0
- package/modules/openxOrtbBidAdapter.md +105 -0
- package/modules/pubCommonId.js +1 -2
- package/modules/readpeakBidAdapter.js +15 -6
- package/modules/relaidoBidAdapter.js +19 -4
- package/modules/riseBidAdapter.js +1 -0
- package/modules/seedtagBidAdapter.js +33 -1
- package/modules/sharedIdSystem.js +11 -5
- package/modules/sharethroughBidAdapter.js +9 -24
- package/modules/shinezBidAdapter.js +435 -0
- package/modules/shinezBidAdapter.md +76 -0
- package/modules/sonobiBidAdapter.js +28 -9
- package/modules/sovrnBidAdapter.js +16 -10
- package/modules/taboolaBidAdapter.js +1 -1
- package/modules/taboolaBidAdapter.md +3 -3
- package/modules/tncIdSystem.js +63 -0
- package/modules/tncIdSystem.md +33 -0
- package/modules/userId/eids.js +12 -0
- package/modules/userId/eids.md +7 -0
- package/modules/userId/userId.md +17 -0
- package/modules/ventesBidAdapter.js +1 -1
- package/modules/ventesBidAdapter.md +1 -1
- package/modules/vrtcalBidAdapter.js +35 -0
- package/modules/yieldlabBidAdapter.js +4 -0
- package/modules/yieldmoBidAdapter.js +20 -2
- package/modules/yieldoneBidAdapter.js +12 -1
- package/package.json +1 -1
- package/plugins/pbjsGlobals.js +2 -1
- package/src/adloader.js +1 -0
- package/src/prebid.js +4 -1
- package/src/storageManager.js +4 -5
- package/test/spec/modules/33acrossBidAdapter_spec.js +39 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +165 -156
- package/test/spec/modules/cpexIdSystem_spec.js +5 -5
- package/test/spec/modules/criteoBidAdapter_spec.js +15 -5
- package/test/spec/modules/debugging_mod_spec.js +7 -0
- package/test/spec/modules/dianomiBidAdapter_spec.js +1223 -0
- package/test/spec/modules/eids_spec.js +26 -1
- package/test/spec/modules/finativeBidAdapter_spec.js +186 -0
- package/test/spec/modules/fpdModule_spec.js +28 -1
- package/test/spec/modules/gdprEnforcement_spec.js +53 -100
- package/test/spec/modules/gumgumBidAdapter_spec.js +5 -0
- package/test/spec/modules/hadronIdSystem_spec.js +2 -2
- package/test/spec/modules/insticatorBidAdapter_spec.js +22 -1
- package/test/spec/modules/ixBidAdapter_spec.js +429 -10
- package/test/spec/modules/kargoAnalyticsAdapter_spec.js +42 -0
- package/test/spec/modules/kargoBidAdapter_spec.js +1 -0
- package/test/spec/modules/lassoBidAdapter_spec.js +177 -0
- package/test/spec/modules/medianetBidAdapter_spec.js +24 -1
- package/test/spec/modules/missenaBidAdapter_spec.js +36 -14
- package/test/spec/modules/nativoBidAdapter_spec.js +67 -17
- package/test/spec/modules/openxOrtbBidAdapter_spec.js +1303 -0
- package/test/spec/modules/readpeakBidAdapter_spec.js +1 -0
- package/test/spec/modules/relaidoBidAdapter_spec.js +29 -2
- package/test/spec/modules/riseBidAdapter_spec.js +3 -0
- package/test/spec/modules/seedtagBidAdapter_spec.js +4 -0
- package/test/spec/modules/sharethroughBidAdapter_spec.js +4 -4
- package/test/spec/modules/shinezBidAdapter_spec.js +479 -0
- package/test/spec/modules/sonobiBidAdapter_spec.js +38 -23
- package/test/spec/modules/sovrnBidAdapter_spec.js +39 -5
- package/test/spec/modules/taboolaBidAdapter_spec.js +1 -1
- package/test/spec/modules/tncIdSystem_spec.js +109 -0
- package/test/spec/modules/userId_spec.js +6 -3
- package/test/spec/modules/ventesBidAdapter_spec.js +2 -2
- package/test/spec/modules/vrtcalBidAdapter_spec.js +17 -0
- package/test/spec/modules/yieldlabBidAdapter_spec.js +4 -0
- package/test/spec/modules/yieldmoBidAdapter_spec.js +15 -2
- package/test/spec/modules/yieldoneBidAdapter_spec.js +43 -2
- package/test/spec/unit/pbjs_api_spec.js +23 -0
- package/webpack.conf.js +1 -1
package/modules/ixBidAdapter.md
CHANGED
|
@@ -13,7 +13,7 @@ Description
|
|
|
13
13
|
This module connects publishers to Index Exchange's (IX) network of demand
|
|
14
14
|
sources through Prebid.js. This module is GDPR and CCPA compliant.
|
|
15
15
|
|
|
16
|
-
It is compatible with the newer PrebidJS 5.0 ad unit format where the `banner` and/or `
|
|
16
|
+
It is compatible with the newer PrebidJS 5.0 ad unit format where the `banner`, `video` and/or `native` properties are encapsulated within the `adUnits[].mediaTypes` object. We
|
|
17
17
|
recommend that you use this newer format when possible as it will be better able
|
|
18
18
|
to accommodate new feature additions.
|
|
19
19
|
|
|
@@ -32,7 +32,18 @@ var adUnits = [{
|
|
|
32
32
|
video: {
|
|
33
33
|
context: 'instream',
|
|
34
34
|
playerSize: [300, 250]
|
|
35
|
-
}
|
|
35
|
+
},
|
|
36
|
+
native: {
|
|
37
|
+
title: {
|
|
38
|
+
required: true
|
|
39
|
+
},
|
|
40
|
+
image: {
|
|
41
|
+
required: true
|
|
42
|
+
},
|
|
43
|
+
body: {
|
|
44
|
+
required: false
|
|
45
|
+
}
|
|
46
|
+
},
|
|
36
47
|
},
|
|
37
48
|
// ...
|
|
38
49
|
}];
|
|
@@ -44,7 +55,7 @@ var adUnits = [{
|
|
|
44
55
|
| --- | ---
|
|
45
56
|
| Banner | Fully supported for all IX approved sizes.
|
|
46
57
|
| Video | Fully supported for all IX approved sizes.
|
|
47
|
-
| Native |
|
|
58
|
+
| Native | Supported (render through GAM or publisher's renderer).
|
|
48
59
|
|
|
49
60
|
|
|
50
61
|
|
|
@@ -56,14 +67,14 @@ Each of the IX-specific parameters provided under the `adUnits[].bids[].params`
|
|
|
56
67
|
object are detailed here.
|
|
57
68
|
|
|
58
69
|
|
|
59
|
-
|
|
70
|
+
## Banner
|
|
60
71
|
|
|
61
72
|
| Key | Scope | Type | Description
|
|
62
73
|
| --- | --- | --- | ---
|
|
63
74
|
| siteId | Required | String | An IX-specific identifier that is associated with this ad unit. It will be associated to the single size, if the size provided. This is similar to a placement ID or an ad unit ID that some other modules have. Examples: `'3723'`, `'6482'`, `'3639'`
|
|
64
75
|
| sizes | Required | Number[Number[]] | The size / sizes associated with the site ID. It should be one of the sizes listed in the ad unit under `adUnits[].mediaTypes.banner.sizes`. Examples: `[300, 250]`, `[300, 600]`, `[728, 90]`
|
|
65
76
|
|
|
66
|
-
|
|
77
|
+
## Video
|
|
67
78
|
|
|
68
79
|
| Key | Scope | Type | Description
|
|
69
80
|
| --- | --- | --- | ---
|
|
@@ -81,6 +92,58 @@ object are detailed here.
|
|
|
81
92
|
| video.playerConfig.floatOnScroll | Optional | Boolean | A boolean specifying whether you want to use the player’s floating capabilities, where: <br /> - `true`: Allow the player to float.<br /> <b>Note</b>: If you set floatOnScroll to true, Index updates the placement value to `5`. <br />- `false`: Do not allow the player to float (default).
|
|
82
93
|
| video.playerConfig.floatSize | Optional | Integer[] | The height and width of the floating player in pixels. If you do not specify a float size, the player adjusts to the aspect ratio of the player size that is defined when it is not floating. Index recommends that you review and test the float size to your user experience preference.
|
|
83
94
|
|
|
95
|
+
## Native
|
|
96
|
+
|
|
97
|
+
| Key | Scope | Type | Description
|
|
98
|
+
| --- | --- | --- | ---
|
|
99
|
+
| sendTargetingKeys | Optional | Boolean | Defines whether or not to send the hb_native_ASSET targeting keys to the ad server. Defaults to true.
|
|
100
|
+
| adTemplate | Optional | String | Used in the ‘AdUnit-Defined Creative Scenario’, this value controls the Native template right in the page.
|
|
101
|
+
| rendererUrl | Optional | String | Used in the ‘Custom Renderer Scenario’, this points to javascript code that will produce the Native template.
|
|
102
|
+
| title | Optional | Title asset | The title of the ad, usually a call to action or a brand name.
|
|
103
|
+
| body | Optional | Data asset | Text of the ad copy.
|
|
104
|
+
| body2 | Optional | Data asset | Additional Text of the ad copy.
|
|
105
|
+
| sponsoredBy | Optional | Data asset | The name of the brand associated with the ad.
|
|
106
|
+
| icon | Optional | Image asset | The brand icon that will appear with the ad.
|
|
107
|
+
| image | Optional | Image asset | A picture that is associated with the brand, or grabs the user’s attention.
|
|
108
|
+
| displayUrl | Optional | Data asset | Text that can be displayed instead of the raw click URL. e.g, “Example.com/Specials”
|
|
109
|
+
| cta | Optional | Data asset | Call to Action text, e.g., “Click here for more information”.
|
|
110
|
+
| rating | Optional | Data asset | Rating information, e.g., “4” out of 5.
|
|
111
|
+
| downloads | Optional | Data asset | The total downloads of the advertised application/product.
|
|
112
|
+
| likes | Optional | Data asset | The total number of individuals who like the advertised application/product.
|
|
113
|
+
| price | Optional | Data asset | The non-sale price of the advertised application/product.
|
|
114
|
+
| salePrice | Optional | Data asset | The sale price of the advertised application/product.
|
|
115
|
+
| address | Optional | Data asset | Address of the Buyer/Store. e.g, “123 Main Street, Anywhere USA”
|
|
116
|
+
| phone | Optional | Data asset | Phone Number of the Buyer/Store. e.g, “(123) 456-7890”
|
|
117
|
+
|
|
118
|
+
#### Title Asset
|
|
119
|
+
|
|
120
|
+
| Key | Scope | Type | Description
|
|
121
|
+
| --- | --- | --- | ---
|
|
122
|
+
| required | Required | Boolean | Specify whether or not a title is required.
|
|
123
|
+
| len | Optional | Integer | Maximum number of characters (defaults to 25 if omitted).
|
|
124
|
+
| ext | Optional | Object | Arbitrary additional parameters to send to the bidder.
|
|
125
|
+
|
|
126
|
+
#### Data Asset
|
|
127
|
+
|
|
128
|
+
| Key | Scope | Type | Description
|
|
129
|
+
| --- | --- | --- | ---
|
|
130
|
+
| required | Required | Boolean | Specify whether or not the asset is required.
|
|
131
|
+
| len | Optional | Integer | Maximum number of characters.
|
|
132
|
+
| ext | Optional | Object | Arbitrary additional parameters to send to the bidder.
|
|
133
|
+
|
|
134
|
+
#### Image Asset
|
|
135
|
+
|
|
136
|
+
| Key | Scope | Type | Description
|
|
137
|
+
| --- | --- | --- | ---
|
|
138
|
+
| required | Required | Boolean | Specify whether or not the asset is required.
|
|
139
|
+
| sizes | Optional | Integer[] | Minimum size requested for the image, e.g., [100, 100]
|
|
140
|
+
| mimes | Optional | String[] | Whitelist of content MIME types supported, e.g., ["image/jpg", "image/gif"]
|
|
141
|
+
| ext | Optional | Object | Arbitrary additional parameters to send to the bidder.
|
|
142
|
+
|
|
143
|
+
### Rendering Native Ad
|
|
144
|
+
|
|
145
|
+
Native ad can be rendered by setting up GAM or setup custom native renderer. Reference [Prebid implementing the native template](https://docs.prebid.org/prebid/native-implementation.html#4-implementing-the-native-template) for more information.
|
|
146
|
+
|
|
84
147
|
## Deprecation warning
|
|
85
148
|
|
|
86
149
|
We are deprecating the older format
|
|
@@ -319,6 +382,33 @@ pbjs.setBidderConfig({
|
|
|
319
382
|
});
|
|
320
383
|
```
|
|
321
384
|
|
|
385
|
+
**Native**
|
|
386
|
+
|
|
387
|
+
```javascript
|
|
388
|
+
var adUnits = [{
|
|
389
|
+
code: 'native-div-a',
|
|
390
|
+
mediaTypes: {
|
|
391
|
+
native: {
|
|
392
|
+
title: {
|
|
393
|
+
required: true
|
|
394
|
+
},
|
|
395
|
+
image: {
|
|
396
|
+
required: true
|
|
397
|
+
},
|
|
398
|
+
sponsoredBy: {
|
|
399
|
+
required: false
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
},
|
|
403
|
+
bids: [{
|
|
404
|
+
bidder: 'ix',
|
|
405
|
+
params: {
|
|
406
|
+
siteId: '715966'
|
|
407
|
+
}
|
|
408
|
+
}]
|
|
409
|
+
}];
|
|
410
|
+
```
|
|
411
|
+
|
|
322
412
|
### 2. Include `ixBidAdapter` in your build process
|
|
323
413
|
|
|
324
414
|
When running the build command, include `ixBidAdapter` as a module, as well as `dfpAdServerVideo` if you require video support.
|
|
@@ -1,14 +1,96 @@
|
|
|
1
|
+
import { logError } from '../src/utils.js';
|
|
2
|
+
import { ajax } from '../src/ajax.js';
|
|
1
3
|
import adapter from '../src/AnalyticsAdapter.js';
|
|
2
4
|
import adapterManager from '../src/adapterManager.js';
|
|
5
|
+
import CONSTANTS from '../src/constants.json';
|
|
3
6
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
const EVENT_URL = 'https://krk.kargo.com/api/v1/event';
|
|
8
|
+
const KARGO_BIDDER_CODE = 'kargo';
|
|
9
|
+
|
|
10
|
+
const analyticsType = 'endpoint';
|
|
11
|
+
|
|
12
|
+
let _initOptions = {};
|
|
13
|
+
|
|
14
|
+
let _logBidResponseData = {
|
|
15
|
+
auctionId: '',
|
|
16
|
+
auctionTimeout: 0,
|
|
17
|
+
responseTime: 0,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
let _bidResponseDataLogged = [];
|
|
21
|
+
|
|
22
|
+
var kargoAnalyticsAdapter = Object.assign(
|
|
23
|
+
adapter({ analyticsType }), {
|
|
24
|
+
track({ eventType, args }) {
|
|
25
|
+
switch (eventType) {
|
|
26
|
+
case CONSTANTS.EVENTS.AUCTION_INIT: {
|
|
27
|
+
_logBidResponseData.auctionTimeout = args.timeout;
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
case CONSTANTS.EVENTS.BID_RESPONSE: {
|
|
31
|
+
handleBidResponseData(args);
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
// handleBidResponseData: Get auction data for Kargo bids and send to server
|
|
40
|
+
function handleBidResponseData (bidResponse) {
|
|
41
|
+
// Verify this is Kargo and we haven't seen this auction data yet
|
|
42
|
+
if (bidResponse.bidder !== KARGO_BIDDER_CODE || _bidResponseDataLogged.includes(bidResponse.auctionId) !== false) {
|
|
43
|
+
return
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
_logBidResponseData.auctionId = bidResponse.auctionId;
|
|
47
|
+
_logBidResponseData.responseTime = bidResponse.timeToRespond;
|
|
48
|
+
sendAuctionData(_logBidResponseData);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// sendAuctionData: Send auction data to the server
|
|
52
|
+
function sendAuctionData (data) {
|
|
53
|
+
try {
|
|
54
|
+
_bidResponseDataLogged.push(data.auctionId);
|
|
55
|
+
|
|
56
|
+
if (!shouldFireEventRequest()) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
ajax(
|
|
61
|
+
`${EVENT_URL}/auction-data`,
|
|
62
|
+
null,
|
|
63
|
+
{
|
|
64
|
+
aid: data.auctionId,
|
|
65
|
+
ato: data.auctionTimeout,
|
|
66
|
+
rt: data.responseTime,
|
|
67
|
+
it: 0,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
method: 'GET',
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
} catch (err) {
|
|
74
|
+
logError('Error sending auction data: ', err);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Sampling rate out of 100
|
|
79
|
+
function shouldFireEventRequest () {
|
|
80
|
+
const samplingRate = (_initOptions && _initOptions.sampling) || 100;
|
|
81
|
+
return ((Math.floor(Math.random() * 100) + 1) <= parseInt(samplingRate));
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
kargoAnalyticsAdapter.originEnableAnalytics = kargoAnalyticsAdapter.enableAnalytics;
|
|
85
|
+
|
|
86
|
+
kargoAnalyticsAdapter.enableAnalytics = function (config) {
|
|
87
|
+
_initOptions = config.options;
|
|
88
|
+
kargoAnalyticsAdapter.originEnableAnalytics(config);
|
|
89
|
+
};
|
|
8
90
|
|
|
9
91
|
adapterManager.registerAnalyticsAdapter({
|
|
10
|
-
adapter:
|
|
92
|
+
adapter: kargoAnalyticsAdapter,
|
|
11
93
|
code: 'kargo'
|
|
12
94
|
});
|
|
13
95
|
|
|
14
|
-
export default
|
|
96
|
+
export default kargoAnalyticsAdapter;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
Module Name: Kargo Analytics Adapter
|
|
4
|
+
Module Type: Analytics Adapter
|
|
5
|
+
Maintainer: support@kargo.com
|
|
6
|
+
|
|
7
|
+
# Description
|
|
8
|
+
|
|
9
|
+
Analytics adapter for Kargo. Contact support@kargo.com for information.
|
|
10
|
+
|
|
11
|
+
# Usage
|
|
12
|
+
|
|
13
|
+
The simplest way to enable the analytics adapter is this
|
|
14
|
+
|
|
15
|
+
```javascript
|
|
16
|
+
pbjs.enableAnalytics([{
|
|
17
|
+
provider: 'kargo',
|
|
18
|
+
options: {
|
|
19
|
+
sampling: 100 // value out of 100
|
|
20
|
+
}
|
|
21
|
+
}]);
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
# Test Parameters
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
{
|
|
28
|
+
provider: 'kargo',
|
|
29
|
+
options: {
|
|
30
|
+
sampling: 100
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
@@ -88,6 +88,7 @@ export const spec = {
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
const bidResponse = {
|
|
91
|
+
ad: adUnit.adm,
|
|
91
92
|
requestId: bidId,
|
|
92
93
|
cpm: Number(adUnit.cpm),
|
|
93
94
|
width: adUnit.width,
|
|
@@ -103,8 +104,6 @@ export const spec = {
|
|
|
103
104
|
|
|
104
105
|
if (meta.mediaType == VIDEO) {
|
|
105
106
|
bidResponse.vastXml = adUnit.adm;
|
|
106
|
-
} else {
|
|
107
|
-
bidResponse.ad = adUnit.adm;
|
|
108
107
|
}
|
|
109
108
|
|
|
110
109
|
bidResponses.push(bidResponse);
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
2
|
+
import { BANNER } from '../src/mediaTypes.js';
|
|
3
|
+
import { getStorageManager } from '../src/storageManager.js';
|
|
4
|
+
import { ajax } from '../src/ajax.js';
|
|
5
|
+
import { config } from '../src/config.js';
|
|
6
|
+
|
|
7
|
+
const BIDDER_CODE = 'lasso';
|
|
8
|
+
const ENDPOINT_URL = 'https://trc.lhmos.com/prebid';
|
|
9
|
+
const GET_IUD_URL = 'https://secure.adnxs.com/getuid?';
|
|
10
|
+
const COOKIE_NAME = 'aim-xr';
|
|
11
|
+
const storage = getStorageManager({bidderCode: BIDDER_CODE});
|
|
12
|
+
|
|
13
|
+
export const spec = {
|
|
14
|
+
code: BIDDER_CODE,
|
|
15
|
+
isBidRequestValid: function(bid) {
|
|
16
|
+
return !!(bid.params && bid.params.adUnitId);
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
buildRequests: function(validBidRequests, bidderRequest) {
|
|
20
|
+
if (validBidRequests.length === 0) {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
let aimXR = '';
|
|
25
|
+
if (storage.cookiesAreEnabled) {
|
|
26
|
+
aimXR = storage.getCookie(COOKIE_NAME, undefined);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return validBidRequests.map(bidRequest => {
|
|
30
|
+
let sizes = []
|
|
31
|
+
if (bidRequest.mediaTypes && bidRequest.mediaTypes[BANNER] && bidRequest.mediaTypes[BANNER].sizes) {
|
|
32
|
+
sizes = bidRequest.mediaTypes[BANNER].sizes;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const payload = {
|
|
36
|
+
auctionStart: bidderRequest.auctionStart,
|
|
37
|
+
url: encodeURIComponent(window.location.href),
|
|
38
|
+
bidderRequestId: bidRequest.bidderRequestId,
|
|
39
|
+
adUnitCode: bidRequest.adUnitCode,
|
|
40
|
+
auctionId: bidRequest.auctionId,
|
|
41
|
+
bidId: bidRequest.bidId,
|
|
42
|
+
transactionId: bidRequest.transactionId,
|
|
43
|
+
device: JSON.stringify(getDeviceData()),
|
|
44
|
+
sizes,
|
|
45
|
+
aimXR,
|
|
46
|
+
uid: '$UID',
|
|
47
|
+
params: JSON.stringify(bidRequest.params),
|
|
48
|
+
crumbs: JSON.stringify(bidRequest.crumbs),
|
|
49
|
+
prebidVersion: '$prebid.version$',
|
|
50
|
+
version: 1,
|
|
51
|
+
coppa: config.getConfig('coppa') == true ? 1 : 0,
|
|
52
|
+
ccpa: bidderRequest.uspConsent || undefined
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
method: 'GET',
|
|
57
|
+
url: getBidRequestUrl(aimXR),
|
|
58
|
+
data: payload,
|
|
59
|
+
options: {
|
|
60
|
+
withCredentials: false
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
interpretResponse: function(serverResponse) {
|
|
67
|
+
const response = serverResponse && serverResponse.body;
|
|
68
|
+
const bidResponses = [];
|
|
69
|
+
|
|
70
|
+
if (!response) {
|
|
71
|
+
return bidResponses;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const bidResponse = {
|
|
75
|
+
requestId: response.bidid,
|
|
76
|
+
cpm: response.bid.price,
|
|
77
|
+
currency: response.cur,
|
|
78
|
+
width: response.bid.w,
|
|
79
|
+
height: response.bid.h,
|
|
80
|
+
creativeId: response.bid.crid,
|
|
81
|
+
netRevenue: response.netRevenue,
|
|
82
|
+
ttl: response.ttl,
|
|
83
|
+
ad: response.bid.ad,
|
|
84
|
+
mediaType: response.bid.mediaType,
|
|
85
|
+
meta: {
|
|
86
|
+
secondaryCatIds: response.bid.cat,
|
|
87
|
+
advertiserDomains: response.bid.advertiserDomains,
|
|
88
|
+
advertiserName: response.meta.advertiserName,
|
|
89
|
+
mediaType: response.bid.mediaType
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
bidResponses.push(bidResponse);
|
|
93
|
+
return bidResponses;
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
onTimeout: function(timeoutData) {
|
|
97
|
+
if (timeoutData === null) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
ajax(ENDPOINT_URL + '/timeout', null, JSON.stringify(timeoutData), {
|
|
101
|
+
method: 'POST',
|
|
102
|
+
withCredentials: false
|
|
103
|
+
});
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
onBidWon: function(bid) {
|
|
107
|
+
ajax(ENDPOINT_URL + '/won', null, JSON.stringify(bid), {
|
|
108
|
+
method: 'POST',
|
|
109
|
+
withCredentials: false
|
|
110
|
+
});
|
|
111
|
+
},
|
|
112
|
+
|
|
113
|
+
supportedMediaTypes: [BANNER]
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function getBidRequestUrl(aimXR) {
|
|
117
|
+
if (!aimXR) {
|
|
118
|
+
return GET_IUD_URL + ENDPOINT_URL + '/request';
|
|
119
|
+
}
|
|
120
|
+
return ENDPOINT_URL + '/request'
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function getDeviceData() {
|
|
124
|
+
const win = window.top;
|
|
125
|
+
return {
|
|
126
|
+
ua: navigator.userAgent,
|
|
127
|
+
width: win.innerWidth || win.document.documentElement.clientWidth || win.document.body.clientWidth,
|
|
128
|
+
height: win.innerHeight || win.document.documentElement.clientHeight || win.document.body.clientHeight,
|
|
129
|
+
browserLanguage: navigator.language,
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
registerBidder(spec);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
**Module Name**: Lasso Bidder Adapter
|
|
4
|
+
**Module Type**: Bidder Adapter
|
|
5
|
+
**Maintainer**: headerbidding@lassomarketing.io
|
|
6
|
+
|
|
7
|
+
# Description
|
|
8
|
+
|
|
9
|
+
Connects to Lasso demand source to fetch bids.
|
|
10
|
+
Only banner format supported.
|
|
11
|
+
|
|
12
|
+
# Test Parameters
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
var adUnits = [{
|
|
16
|
+
code: 'banner-ad-unit',
|
|
17
|
+
mediaTypes: {
|
|
18
|
+
banner: {
|
|
19
|
+
sizes: [[300, 250]],
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
bids: [{
|
|
23
|
+
bidder: 'lasso',
|
|
24
|
+
params: {
|
|
25
|
+
adUnitId: '0'
|
|
26
|
+
}
|
|
27
|
+
}]
|
|
28
|
+
}];
|
|
29
|
+
```
|
|
@@ -56,13 +56,15 @@ function getTopWindowReferrer() {
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
function siteDetails(site) {
|
|
59
|
+
function siteDetails(site, bidderRequest) {
|
|
60
|
+
const urlData = bidderRequest.refererInfo;
|
|
60
61
|
site = site || {};
|
|
61
62
|
let siteData = {
|
|
62
|
-
domain: site.domain ||
|
|
63
|
-
page: site.page ||
|
|
63
|
+
domain: site.domain || urlData.domain,
|
|
64
|
+
page: site.page || urlData.page,
|
|
64
65
|
ref: site.ref || getTopWindowReferrer(),
|
|
65
|
-
|
|
66
|
+
topMostLocation: urlData.topmostLocation,
|
|
67
|
+
isTop: site.isTop || urlData.reachedTop
|
|
66
68
|
};
|
|
67
69
|
|
|
68
70
|
return Object.assign(siteData, getPageMeta());
|
|
@@ -187,6 +189,7 @@ function slotParams(bidRequest) {
|
|
|
187
189
|
// check with Media.net Account manager for bid floor and crid parameters
|
|
188
190
|
let params = {
|
|
189
191
|
id: bidRequest.bidId,
|
|
192
|
+
transactionId: bidRequest.transactionId,
|
|
190
193
|
ext: {
|
|
191
194
|
dfp_id: bidRequest.adUnitCode,
|
|
192
195
|
display_count: bidRequest.bidRequestsCount
|
|
@@ -320,10 +323,11 @@ function getBidderURL(cid) {
|
|
|
320
323
|
|
|
321
324
|
function generatePayload(bidRequests, bidderRequests) {
|
|
322
325
|
return {
|
|
323
|
-
site: siteDetails(bidRequests[0].params.site),
|
|
326
|
+
site: siteDetails(bidRequests[0].params.site, bidderRequests),
|
|
324
327
|
ext: extParams(bidRequests[0], bidderRequests),
|
|
325
328
|
id: bidRequests[0].auctionId,
|
|
326
329
|
imp: bidRequests.map(request => slotParams(request)),
|
|
330
|
+
ortb2: bidderRequests.ortb2,
|
|
327
331
|
tmax: bidderRequests.timeout || config.getConfig('bidderTimeout')
|
|
328
332
|
}
|
|
329
333
|
}
|
|
@@ -72,11 +72,29 @@ export const spec = {
|
|
|
72
72
|
|
|
73
73
|
return bidResponses;
|
|
74
74
|
},
|
|
75
|
-
getUserSyncs: function (
|
|
75
|
+
getUserSyncs: function (
|
|
76
|
+
syncOptions,
|
|
77
|
+
serverResponses,
|
|
78
|
+
gdprConsent,
|
|
79
|
+
uspConsent
|
|
80
|
+
) {
|
|
76
81
|
if (!syncOptions.iframeEnabled) {
|
|
77
82
|
return [];
|
|
78
83
|
}
|
|
79
|
-
|
|
84
|
+
|
|
85
|
+
let gdprParams = '';
|
|
86
|
+
if (
|
|
87
|
+
gdprConsent &&
|
|
88
|
+
'gdprApplies' in gdprConsent &&
|
|
89
|
+
typeof gdprConsent.gdprApplies === 'boolean'
|
|
90
|
+
) {
|
|
91
|
+
gdprParams = `?gdpr=${Number(gdprConsent.gdprApplies)}&gdpr_consent=${
|
|
92
|
+
gdprConsent.consentString
|
|
93
|
+
}`;
|
|
94
|
+
}
|
|
95
|
+
return [
|
|
96
|
+
{ type: 'iframe', url: 'https://sync.missena.io/iframe' + gdprParams },
|
|
97
|
+
];
|
|
80
98
|
},
|
|
81
99
|
/**
|
|
82
100
|
* Register bidder specific code, which will execute if bidder timed out after an auction
|
|
@@ -16,7 +16,7 @@ const SUPPORTED_AD_TYPES = [BANNER]
|
|
|
16
16
|
* Keep track of bid data by keys
|
|
17
17
|
* @returns {Object} - Map of bid data that can be referenced by multiple keys
|
|
18
18
|
*/
|
|
19
|
-
const BidDataMap = () => {
|
|
19
|
+
export const BidDataMap = () => {
|
|
20
20
|
const referenceMap = {}
|
|
21
21
|
const bids = []
|
|
22
22
|
|
|
@@ -25,7 +25,7 @@ const BidDataMap = () => {
|
|
|
25
25
|
* @param {String} key - The key to store the index reference
|
|
26
26
|
* @param {Integer} index - The index value of the bidData
|
|
27
27
|
*/
|
|
28
|
-
function
|
|
28
|
+
function addKeyReference(key, index) {
|
|
29
29
|
if (!referenceMap.hasOwnProperty(key)) {
|
|
30
30
|
referenceMap[key] = index
|
|
31
31
|
}
|
|
@@ -42,12 +42,12 @@ const BidDataMap = () => {
|
|
|
42
42
|
|
|
43
43
|
if (Array.isArray(keys)) {
|
|
44
44
|
keys.forEach((key) => {
|
|
45
|
-
|
|
45
|
+
addKeyReference(String(key), index)
|
|
46
46
|
})
|
|
47
47
|
return
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
addKeyReference(String(keys), index)
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
/**
|
|
@@ -132,8 +132,9 @@ export const spec = {
|
|
|
132
132
|
*/
|
|
133
133
|
buildRequests: function (validBidRequests, bidderRequest) {
|
|
134
134
|
const placementIds = new Set()
|
|
135
|
-
let placementId, pageUrl
|
|
136
135
|
const bidDataMap = BidDataMap()
|
|
136
|
+
const placementSizes = { length: 0 }
|
|
137
|
+
let placementId, pageUrl
|
|
137
138
|
validBidRequests.forEach((request) => {
|
|
138
139
|
pageUrl = deepAccess(
|
|
139
140
|
request,
|
|
@@ -142,15 +143,21 @@ export const spec = {
|
|
|
142
143
|
)
|
|
143
144
|
placementId = deepAccess(request, 'params.placementId')
|
|
144
145
|
|
|
145
|
-
|
|
146
|
+
const bidDataKeys = [request.adUnitCode]
|
|
147
|
+
|
|
148
|
+
if (placementId && !placementIds.has(placementId)) {
|
|
146
149
|
placementIds.add(placementId)
|
|
150
|
+
bidDataKeys.push(placementId)
|
|
151
|
+
|
|
152
|
+
placementSizes[placementId] = request.sizes
|
|
153
|
+
placementSizes.length++
|
|
147
154
|
}
|
|
148
155
|
|
|
149
156
|
const bidData = {
|
|
150
157
|
bidId: request.bidId,
|
|
151
158
|
size: getLargestSize(request.sizes),
|
|
152
159
|
}
|
|
153
|
-
bidDataMap.addBidData(bidData,
|
|
160
|
+
bidDataMap.addBidData(bidData, bidDataKeys)
|
|
154
161
|
})
|
|
155
162
|
bidRequestMap[bidderRequest.bidderRequestId] = bidDataMap
|
|
156
163
|
|
|
@@ -199,6 +206,11 @@ export const spec = {
|
|
|
199
206
|
params.unshift({ key: 'ntv_ctf', value: Array.from(campaignsToFilter).join(',') })
|
|
200
207
|
}
|
|
201
208
|
|
|
209
|
+
// Placement Sizes
|
|
210
|
+
if (placementSizes.length) {
|
|
211
|
+
params.unshift({ key: 'ntv_pas', value: btoa(JSON.stringify(placementSizes)) })
|
|
212
|
+
}
|
|
213
|
+
|
|
202
214
|
// Add placement IDs
|
|
203
215
|
if (placementIds.size > 0) {
|
|
204
216
|
// Convert Set to Array (IE 11 Safe)
|
|
@@ -8,7 +8,9 @@ Maintainer: team-openx@openx.com
|
|
|
8
8
|
|
|
9
9
|
# Description
|
|
10
10
|
|
|
11
|
-
Module that connects to OpenX's demand sources
|
|
11
|
+
Module that connects to OpenX's demand sources.
|
|
12
|
+
Note there is an updated version of the OpenX bid adapter called openxOrtbBidAdapter.
|
|
13
|
+
Publishers are welcome to test the other adapter and give feedback. Please note you should only include either openxBidAdapter or openxOrtbBidAdapter in your build.
|
|
12
14
|
|
|
13
15
|
# Bid Parameters
|
|
14
16
|
## Banner
|