prebid.js 5.19.0 → 6.2.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/.babelrc.js +1 -10
- package/README.md +4 -2
- package/browsers.json +13 -37
- package/gulpfile.js +1 -0
- package/karma.conf.maker.js +1 -1
- package/modules/adheseBidAdapter.js +7 -2
- package/modules/adkernelBidAdapter.js +1 -0
- package/modules/adlivetechBidAdapter.md +61 -0
- package/modules/admixerBidAdapter.js +2 -1
- package/modules/adnuntiusBidAdapter.js +2 -1
- package/modules/adomikAnalyticsAdapter.js +10 -4
- package/modules/adplusBidAdapter.js +203 -0
- package/modules/adplusBidAdapter.md +39 -0
- package/modules/adyoulikeBidAdapter.js +7 -2
- package/modules/airgridRtdProvider.js +1 -1
- package/modules/appnexusBidAdapter.js +28 -5
- package/modules/atsAnalyticsAdapter.js +67 -46
- package/modules/atsAnalyticsAdapter.md +1 -0
- package/modules/beachfrontBidAdapter.js +14 -17
- package/modules/betweenBidAdapter.js +2 -1
- package/modules/browsiRtdProvider.js +106 -18
- package/modules/cleanioRtdProvider.js +192 -0
- package/modules/cleanioRtdProvider.md +59 -0
- package/modules/codefuelBidAdapter.js +1 -3
- package/modules/codefuelBidAdapter.md +3 -3
- package/modules/craftBidAdapter.js +5 -3
- package/modules/datablocksBidAdapter.js +3 -3
- package/modules/dchain.js +149 -0
- package/modules/dchain.md +45 -0
- package/modules/deepintentBidAdapter.js +1 -1
- package/modules/deltaprojectsBidAdapter.js +252 -0
- package/modules/deltaprojectsBidAdapter.md +32 -0
- package/modules/emx_digitalBidAdapter.js +9 -1
- package/modules/engageyaBidAdapter.js +68 -54
- package/modules/freewheel-sspBidAdapter.js +6 -0
- package/modules/glimpseBidAdapter.js +31 -16
- package/modules/goldbachBidAdapter.js +1176 -0
- package/modules/goldbachBidAdapter.md +151 -0
- package/modules/gptPreAuction.js +11 -5
- package/modules/gridBidAdapter.js +1 -0
- package/modules/gumgumBidAdapter.js +5 -1
- package/modules/id5IdSystem.md +6 -6
- package/modules/imRtdProvider.js +31 -0
- package/modules/intersectionRtdProvider.js +114 -0
- package/modules/invibesBidAdapter.js +15 -9
- package/modules/ipromBidAdapter.js +79 -0
- package/modules/ixBidAdapter.js +173 -22
- package/modules/jixieBidAdapter.js +8 -2
- package/modules/justpremiumBidAdapter.js +6 -1
- package/modules/limelightDigitalBidAdapter.js +2 -1
- package/modules/livewrappedAnalyticsAdapter.js +5 -0
- package/modules/luponmediaBidAdapter.js +570 -0
- package/modules/merkleIdSystem.js +5 -0
- package/modules/missenaBidAdapter.js +89 -0
- package/modules/multibid/index.js +3 -3
- package/modules/nativoBidAdapter.js +32 -2
- package/modules/oguryBidAdapter.js +2 -1
- package/modules/openxBidAdapter.js +7 -2
- package/modules/operaadsBidAdapter.js +21 -1
- package/modules/otmBidAdapter.js +146 -0
- package/modules/otmBidAdapter.md +27 -26
- package/modules/outbrainBidAdapter.js +5 -0
- package/modules/playwireBidAdapter.md +61 -0
- package/modules/prebidServerBidAdapter/index.js +3 -3
- package/modules/pubmaticBidAdapter.js +5 -3
- package/modules/relaidoBidAdapter.js +86 -65
- package/modules/richaudienceBidAdapter.js +1 -1
- package/modules/rtdModule/index.js +2 -2
- package/modules/saambaaBidAdapter.js +420 -0
- package/modules/saambaaBidAdapter.md +65 -68
- package/modules/seedtagBidAdapter.js +6 -0
- package/modules/smaatoBidAdapter.js +9 -1
- package/modules/smartxBidAdapter.js +17 -1
- package/modules/sonobiBidAdapter.js +7 -0
- package/modules/sortableBidAdapter.js +1 -0
- package/modules/sspBCBidAdapter.js +34 -3
- package/modules/tappxBidAdapter.js +3 -1
- package/modules/teadsBidAdapter.js +3 -0
- package/modules/trustxBidAdapter.js +18 -7
- package/modules/undertoneBidAdapter.js +8 -1
- package/modules/userId/index.js +27 -2
- package/modules/ventes.md +71 -0
- package/modules/ventesBidAdapter.js +410 -0
- package/modules/ventesBidAdapter.md +93 -0
- package/modules/vidoomyBidAdapter.js +51 -100
- package/modules/visxBidAdapter.js +20 -3
- package/modules/visxBidAdapter.md +4 -6
- package/modules/yahoosspBidAdapter.js +6 -6
- package/modules/yahoosspBidAdapter.md +1 -1
- package/modules/yieldlabBidAdapter.js +41 -10
- package/modules/yieldlabBidAdapter.md +91 -48
- package/modules/yieldoneBidAdapter.js +115 -11
- package/package.json +6 -1
- package/src/adapterManager.js +14 -8
- package/src/auction.js +14 -13
- package/src/targeting.js +2 -2
- package/src/utils.js +7 -0
- package/test/spec/integration/faker/googletag.js +6 -0
- package/test/spec/modules/adheseBidAdapter_spec.js +27 -1
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +18 -0
- package/test/spec/modules/adomikAnalyticsAdapter_spec.js +3 -1
- package/test/spec/modules/adplusBidAdapter_spec.js +213 -0
- package/test/spec/modules/adyoulikeBidAdapter_spec.js +26 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +65 -2
- package/test/spec/modules/atsAnalyticsAdapter_spec.js +42 -9
- package/test/spec/modules/beachfrontBidAdapter_spec.js +65 -1
- package/test/spec/modules/browsiRtdProvider_spec.js +62 -7
- package/test/spec/modules/cleanioRtdProvider_spec.js +188 -0
- package/test/spec/modules/codefuelBidAdapter_spec.js +1 -1
- package/test/spec/modules/datablocksBidAdapter_spec.js +3 -3
- package/test/spec/modules/dchain_spec.js +329 -0
- package/test/spec/modules/deltaprojectsBidAdapter_spec.js +399 -0
- package/test/spec/modules/emx_digitalBidAdapter_spec.js +10 -0
- package/test/spec/modules/engageyaBidAdapter_spec.js +231 -95
- package/test/spec/modules/eplanningBidAdapter_spec.js +8 -8
- package/test/spec/modules/freewheel-sspBidAdapter_spec.js +19 -0
- package/test/spec/modules/glimpseBidAdapter_spec.js +33 -0
- package/test/spec/modules/goldbachBidAdapter_spec.js +1359 -0
- package/test/spec/modules/gptPreAuction_spec.js +58 -4
- package/test/spec/modules/gumgumBidAdapter_spec.js +6 -0
- package/test/spec/modules/imRtdProvider_spec.js +25 -0
- package/test/spec/modules/intersectionRtdProvider_spec.js +141 -0
- package/test/spec/modules/invibesBidAdapter_spec.js +29 -4
- package/test/spec/modules/ipromBidAdapter_spec.js +195 -0
- package/test/spec/modules/ixBidAdapter_spec.js +288 -5
- package/test/spec/modules/jixieBidAdapter_spec.js +13 -11
- package/test/spec/modules/justpremiumBidAdapter_spec.js +9 -2
- package/test/spec/modules/konduitWrapper_spec.js +0 -1
- package/test/spec/modules/limelightDigitalBidAdapter_spec.js +10 -7
- package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +23 -4
- package/test/spec/modules/luponmediaBidAdapter_spec.js +412 -0
- package/test/spec/modules/merkleIdSystem_spec.js +18 -0
- package/test/spec/modules/missenaBidAdapter_spec.js +134 -0
- package/test/spec/modules/multibid_spec.js +31 -31
- package/test/spec/modules/nativoBidAdapter_spec.js +35 -18
- package/test/spec/modules/oguryBidAdapter_spec.js +13 -11
- package/test/spec/modules/openxBidAdapter_spec.js +5 -26
- package/test/spec/modules/operaadsBidAdapter_spec.js +38 -6
- package/test/spec/modules/otmBidAdapter_spec.js +67 -0
- package/test/spec/modules/outbrainBidAdapter_spec.js +18 -0
- package/test/spec/modules/prebidServerBidAdapter_spec.js +19 -2
- package/test/spec/modules/pubmaticBidAdapter_spec.js +1 -1
- package/test/spec/modules/relaidoBidAdapter_spec.js +71 -63
- package/test/spec/modules/seedtagBidAdapter_spec.js +3 -0
- package/test/spec/modules/smaatoBidAdapter_spec.js +61 -0
- package/test/spec/modules/smartxBidAdapter_spec.js +9 -0
- package/test/spec/modules/sonobiBidAdapter_spec.js +34 -1
- package/test/spec/modules/sortableBidAdapter_spec.js +11 -0
- package/test/spec/modules/sspBCBidAdapter_spec.js +33 -3
- package/test/spec/modules/tappxBidAdapter_spec.js +4 -0
- package/test/spec/modules/teadsBidAdapter_spec.js +132 -0
- package/test/spec/modules/trustxBidAdapter_spec.js +45 -3
- package/test/spec/modules/userId_spec.js +51 -0
- package/test/spec/modules/ventesBidAdapter_spec.js +845 -0
- package/test/spec/modules/vidoomyBidAdapter_spec.js +32 -13
- package/test/spec/modules/visxBidAdapter_spec.js +121 -5
- package/test/spec/modules/yieldlabBidAdapter_spec.js +81 -0
- package/test/spec/modules/yieldoneBidAdapter_spec.js +299 -53
- package/test/spec/unit/core/adapterManager_spec.js +26 -7
- package/test/spec/unit/core/targeting_spec.js +44 -0
- package/wdio.conf.js +1 -1
package/.babelrc.js
CHANGED
|
@@ -14,16 +14,7 @@ module.exports = {
|
|
|
14
14
|
[
|
|
15
15
|
useLocal('@babel/preset-env'),
|
|
16
16
|
{
|
|
17
|
-
"
|
|
18
|
-
"browsers": [
|
|
19
|
-
"chrome >= 75",
|
|
20
|
-
"safari >=10",
|
|
21
|
-
"edge >= 70",
|
|
22
|
-
"ff >= 70",
|
|
23
|
-
"ie >= 11",
|
|
24
|
-
"ios >= 11"
|
|
25
|
-
]
|
|
26
|
-
}
|
|
17
|
+
"useBuiltIns": "entry"
|
|
27
18
|
}
|
|
28
19
|
]
|
|
29
20
|
],
|
package/README.md
CHANGED
|
@@ -59,6 +59,8 @@ module.exports = {
|
|
|
59
59
|
loader: 'babel-loader',
|
|
60
60
|
// presets and plugins for Prebid.js must be manually specified separate from your other babel rule.
|
|
61
61
|
// this can be accomplished by requiring prebid's .babelrc.js file (requires Babel 7 and Node v8.9.0+)
|
|
62
|
+
// as of Prebid 6, babelrc.js only targets modern browsers. One can change the targets and build for
|
|
63
|
+
// older browsers if they prefer, but integration tests on ie11 were removed in Prebid.js 6.0
|
|
62
64
|
options: require('prebid.js/.babelrc.js')
|
|
63
65
|
}
|
|
64
66
|
}
|
|
@@ -272,7 +274,7 @@ As you make code changes, the bundles will be rebuilt and the page reloaded auto
|
|
|
272
274
|
|
|
273
275
|
## Contribute
|
|
274
276
|
|
|
275
|
-
Many SSPs, bidders, and publishers have contributed to this project. [Hundreds of bidders](https://github.com/prebid/Prebid.js/tree/master/
|
|
277
|
+
Many SSPs, bidders, and publishers have contributed to this project. [Hundreds of bidders](https://github.com/prebid/Prebid.js/tree/master/modules) are supported by Prebid.js.
|
|
276
278
|
|
|
277
279
|
For guidelines, see [Contributing](./CONTRIBUTING.md).
|
|
278
280
|
|
|
@@ -314,7 +316,7 @@ For instructions on writing tests for Prebid.js, see [Testing Prebid.js](http://
|
|
|
314
316
|
|
|
315
317
|
### Supported Browsers
|
|
316
318
|
|
|
317
|
-
Prebid.js is supported on IE11 and modern browsers.
|
|
319
|
+
Prebid.js is supported on IE11 and modern browsers until 5.x. 6.x+ transpiles to target >0.25%; not Opera Mini; not IE11.
|
|
318
320
|
|
|
319
321
|
### Governance
|
|
320
322
|
Review our governance model [here](https://github.com/prebid/Prebid.js/tree/master/governance.md).
|
package/browsers.json
CHANGED
|
@@ -1,73 +1,49 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
2
|
+
"bs_edge_latest_windows_10": {
|
|
3
3
|
"base": "BrowserStack",
|
|
4
4
|
"os_version": "10",
|
|
5
5
|
"browser": "edge",
|
|
6
|
-
"browser_version": "
|
|
6
|
+
"browser_version": "latest",
|
|
7
7
|
"device": null,
|
|
8
8
|
"os": "Windows"
|
|
9
9
|
},
|
|
10
|
-
"
|
|
11
|
-
"base": "BrowserStack",
|
|
12
|
-
"os_version": "10",
|
|
13
|
-
"browser": "edge",
|
|
14
|
-
"browser_version": "90.0",
|
|
15
|
-
"device": null,
|
|
16
|
-
"os": "Windows"
|
|
17
|
-
},
|
|
18
|
-
"bs_ie_11_windows_10": {
|
|
19
|
-
"base": "BrowserStack",
|
|
20
|
-
"os_version": "10",
|
|
21
|
-
"browser": "ie",
|
|
22
|
-
"browser_version": "11.0",
|
|
23
|
-
"device": null,
|
|
24
|
-
"os": "Windows"
|
|
25
|
-
},
|
|
26
|
-
"bs_chrome_90_windows_10": {
|
|
10
|
+
"bs_chrome_latest_windows_10": {
|
|
27
11
|
"base": "BrowserStack",
|
|
28
12
|
"os_version": "10",
|
|
29
13
|
"browser": "chrome",
|
|
30
|
-
"browser_version": "
|
|
14
|
+
"browser_version": "latest",
|
|
31
15
|
"device": null,
|
|
32
16
|
"os": "Windows"
|
|
33
17
|
},
|
|
34
|
-
"
|
|
18
|
+
"bs_chrome_87_windows_10": {
|
|
35
19
|
"base": "BrowserStack",
|
|
36
20
|
"os_version": "10",
|
|
37
21
|
"browser": "chrome",
|
|
38
|
-
"browser_version": "
|
|
39
|
-
"device": null,
|
|
40
|
-
"os": "Windows"
|
|
41
|
-
},
|
|
42
|
-
"bs_firefox_88_windows_10": {
|
|
43
|
-
"base": "BrowserStack",
|
|
44
|
-
"os_version": "10",
|
|
45
|
-
"browser": "firefox",
|
|
46
|
-
"browser_version": "88.0",
|
|
22
|
+
"browser_version": "87.0",
|
|
47
23
|
"device": null,
|
|
48
24
|
"os": "Windows"
|
|
49
25
|
},
|
|
50
|
-
"
|
|
26
|
+
"bs_firefox_latest_windows_10": {
|
|
51
27
|
"base": "BrowserStack",
|
|
52
28
|
"os_version": "10",
|
|
53
29
|
"browser": "firefox",
|
|
54
|
-
"browser_version": "
|
|
30
|
+
"browser_version": "latest",
|
|
55
31
|
"device": null,
|
|
56
32
|
"os": "Windows"
|
|
57
33
|
},
|
|
58
|
-
"
|
|
34
|
+
"bs_safari_latest_mac_bigsur": {
|
|
59
35
|
"base": "BrowserStack",
|
|
60
36
|
"os_version": "Big Sur",
|
|
61
37
|
"browser": "safari",
|
|
62
|
-
"browser_version": "
|
|
38
|
+
"browser_version": "latest",
|
|
63
39
|
"device": null,
|
|
64
40
|
"os": "OS X"
|
|
65
41
|
},
|
|
66
|
-
"
|
|
42
|
+
"bs_safari_15_catalina": {
|
|
67
43
|
"base": "BrowserStack",
|
|
68
|
-
"os_version": "
|
|
44
|
+
"os_version": "Catalina",
|
|
69
45
|
"browser": "safari",
|
|
70
|
-
"browser_version": "
|
|
46
|
+
"browser_version": "13.1",
|
|
71
47
|
"device": null,
|
|
72
48
|
"os": "OS X"
|
|
73
49
|
}
|
package/gulpfile.js
CHANGED
package/karma.conf.maker.js
CHANGED
|
@@ -166,7 +166,7 @@ module.exports = function(codeCoverage, browserstack, watchMode, file) {
|
|
|
166
166
|
browserNoActivityTimeout: 3e5, // default 10000
|
|
167
167
|
captureTimeout: 3e5, // default 60000,
|
|
168
168
|
browserDisconnectTolerance: 3,
|
|
169
|
-
concurrency:
|
|
169
|
+
concurrency: 6,
|
|
170
170
|
|
|
171
171
|
plugins: plugins
|
|
172
172
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
4
4
|
import { BANNER, VIDEO } from '../src/mediaTypes.js';
|
|
5
|
+
import { config } from '../src/config.js';
|
|
5
6
|
|
|
6
7
|
const BIDDER_CODE = 'adhese';
|
|
7
8
|
const GVLID = 553;
|
|
@@ -20,11 +21,15 @@ export const spec = {
|
|
|
20
21
|
if (validBidRequests.length === 0) {
|
|
21
22
|
return null;
|
|
22
23
|
}
|
|
24
|
+
|
|
23
25
|
const { gdprConsent, refererInfo } = bidderRequest;
|
|
24
26
|
|
|
27
|
+
const adheseConfig = config.getConfig('adhese');
|
|
25
28
|
const gdprParams = (gdprConsent && gdprConsent.consentString) ? { xt: [gdprConsent.consentString] } : {};
|
|
26
29
|
const refererParams = (refererInfo && refererInfo.referer) ? { xf: [base64urlEncode(refererInfo.referer)] } : {};
|
|
27
|
-
const
|
|
30
|
+
const globalCustomParams = (adheseConfig && adheseConfig.globalTargets) ? cleanTargets(adheseConfig.globalTargets) : {};
|
|
31
|
+
const commonParams = { ...globalCustomParams, ...gdprParams, ...refererParams };
|
|
32
|
+
const vastContentAsUrl = !(adheseConfig && adheseConfig.vastContentAsUrl == false);
|
|
28
33
|
|
|
29
34
|
const slots = validBidRequests.map(bid => ({
|
|
30
35
|
slotname: bidToSlotName(bid),
|
|
@@ -34,7 +39,7 @@ export const spec = {
|
|
|
34
39
|
const payload = {
|
|
35
40
|
slots: slots,
|
|
36
41
|
parameters: commonParams,
|
|
37
|
-
vastContentAsUrl:
|
|
42
|
+
vastContentAsUrl: vastContentAsUrl,
|
|
38
43
|
user: {
|
|
39
44
|
ext: {
|
|
40
45
|
eids: getEids(validBidRequests),
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
Module Name: Adlivetech Bidder Adapter
|
|
4
|
+
Module Type: Bidder Adapter
|
|
5
|
+
Maintainer: grid-tech@themediagrid.com
|
|
6
|
+
|
|
7
|
+
# Description
|
|
8
|
+
|
|
9
|
+
Module that connects to Grid demand source to fetch bids.
|
|
10
|
+
The adapter is GDPR compliant and supports banner and video (instream and outstream).
|
|
11
|
+
|
|
12
|
+
# Test Parameters
|
|
13
|
+
```
|
|
14
|
+
var adUnits = [
|
|
15
|
+
{
|
|
16
|
+
code: 'test-div',
|
|
17
|
+
sizes: [[300, 250]],
|
|
18
|
+
bids: [
|
|
19
|
+
{
|
|
20
|
+
bidder: "adlivetech",
|
|
21
|
+
params: {
|
|
22
|
+
uid: '1',
|
|
23
|
+
bidFloor: 0.5
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
},{
|
|
28
|
+
code: 'test-div',
|
|
29
|
+
sizes: [[728, 90]],
|
|
30
|
+
bids: [
|
|
31
|
+
{
|
|
32
|
+
bidder: "adlivetech",
|
|
33
|
+
params: {
|
|
34
|
+
uid: 2,
|
|
35
|
+
keywords: {
|
|
36
|
+
brandsafety: ['disaster'],
|
|
37
|
+
topic: ['stress', 'fear']
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
code: 'test-div',
|
|
45
|
+
sizes: [[728, 90]],
|
|
46
|
+
mediaTypes: { video: {
|
|
47
|
+
context: 'instream',
|
|
48
|
+
playerSize: [728, 90],
|
|
49
|
+
mimes: ['video/mp4']
|
|
50
|
+
},
|
|
51
|
+
bids: [
|
|
52
|
+
{
|
|
53
|
+
bidder: "adlivetech",
|
|
54
|
+
params: {
|
|
55
|
+
uid: 11
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
];
|
|
61
|
+
```
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { logError } from '../src/utils.js';
|
|
2
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import {config} from '../src/config.js';
|
|
4
|
+
import {BANNER, VIDEO, NATIVE} from '../src/mediaTypes.js';
|
|
4
5
|
|
|
5
6
|
const BIDDER_CODE = 'admixer';
|
|
6
7
|
const ALIASES = ['go2net', 'adblender', 'adsyield'];
|
|
@@ -8,7 +9,7 @@ const ENDPOINT_URL = 'https://inv-nets.admixer.net/prebid.1.2.aspx';
|
|
|
8
9
|
export const spec = {
|
|
9
10
|
code: BIDDER_CODE,
|
|
10
11
|
aliases: ALIASES,
|
|
11
|
-
supportedMediaTypes: [
|
|
12
|
+
supportedMediaTypes: [BANNER, VIDEO, NATIVE],
|
|
12
13
|
/**
|
|
13
14
|
* Determines whether or not the given bid request is valid.
|
|
14
15
|
*/
|
|
@@ -37,7 +37,8 @@ const handleMeta = function () {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
const getUsi = function (meta, ortb2, bidderRequest) {
|
|
40
|
-
|
|
40
|
+
let usi = (meta !== null && meta.usi) ? meta.usi : false;
|
|
41
|
+
if (ortb2 && ortb2.user && ortb2.user.id) { usi = ortb2.user.id }
|
|
41
42
|
return usi
|
|
42
43
|
}
|
|
43
44
|
|
|
@@ -12,6 +12,7 @@ const bidRequested = CONSTANTS.EVENTS.BID_REQUESTED;
|
|
|
12
12
|
const bidResponse = CONSTANTS.EVENTS.BID_RESPONSE;
|
|
13
13
|
const bidWon = CONSTANTS.EVENTS.BID_WON;
|
|
14
14
|
const bidTimeout = CONSTANTS.EVENTS.BID_TIMEOUT;
|
|
15
|
+
const ua = navigator.userAgent;
|
|
15
16
|
|
|
16
17
|
let adomikAdapter = Object.assign(adapter({}),
|
|
17
18
|
{
|
|
@@ -47,7 +48,7 @@ let adomikAdapter = Object.assign(adapter({}),
|
|
|
47
48
|
type: 'request',
|
|
48
49
|
event: {
|
|
49
50
|
bidder: bid.bidder.toUpperCase(),
|
|
50
|
-
placementCode: bid.
|
|
51
|
+
placementCode: bid.adUnitCode
|
|
51
52
|
}
|
|
52
53
|
});
|
|
53
54
|
});
|
|
@@ -67,6 +68,10 @@ adomikAdapter.initializeBucketEvents = function() {
|
|
|
67
68
|
adomikAdapter.bucketEvents = [];
|
|
68
69
|
}
|
|
69
70
|
|
|
71
|
+
adomikAdapter.maxPartLength = function () {
|
|
72
|
+
return (ua.includes(' MSIE ')) ? 1600 : 60000;
|
|
73
|
+
};
|
|
74
|
+
|
|
70
75
|
adomikAdapter.sendTypedEvent = function() {
|
|
71
76
|
const groupedTypedEvents = adomikAdapter.buildTypedEvents();
|
|
72
77
|
|
|
@@ -108,9 +113,10 @@ adomikAdapter.sendTypedEvent = function() {
|
|
|
108
113
|
// Encode object in base64
|
|
109
114
|
const encodedBuf = window.btoa(stringBulkEvents);
|
|
110
115
|
|
|
111
|
-
// Create final url and split it
|
|
116
|
+
// Create final url and split it (+endpoint length)
|
|
112
117
|
const encodedUri = encodeURIComponent(encodedBuf);
|
|
113
|
-
const
|
|
118
|
+
const maxLength = adomikAdapter.maxPartLength();
|
|
119
|
+
const splittedUrl = encodedUri.match(new RegExp(`.{1,${maxLength}}`, 'g'));
|
|
114
120
|
|
|
115
121
|
splittedUrl.forEach((split, i) => {
|
|
116
122
|
const partUrl = `${split}&id=${adomikAdapter.currentContext.id}&part=${i}&on=${splittedUrl.length - 1}`;
|
|
@@ -121,7 +127,7 @@ adomikAdapter.sendTypedEvent = function() {
|
|
|
121
127
|
|
|
122
128
|
adomikAdapter.sendWonEvent = function (wonEvent) {
|
|
123
129
|
const stringWonEvent = JSON.stringify(wonEvent)
|
|
124
|
-
logInfo('Won event sent to adomik prebid analytic ' +
|
|
130
|
+
logInfo('Won event sent to adomik prebid analytic ' + stringWonEvent);
|
|
125
131
|
|
|
126
132
|
// Encode object in base64
|
|
127
133
|
const encodedBuf = window.btoa(stringWonEvent);
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
2
|
+
import * as utils from '../src/utils.js';
|
|
3
|
+
import { BANNER } from '../src/mediaTypes.js';
|
|
4
|
+
import { getStorageManager } from '../src/storageManager.js';
|
|
5
|
+
|
|
6
|
+
// #region Constants
|
|
7
|
+
export const BIDDER_CODE = 'adplus';
|
|
8
|
+
export const ADPLUS_ENDPOINT = 'https://ssp.ad-plus.com.tr/server/headerBidding';
|
|
9
|
+
export const DGID_CODE = 'adplus_dg_id';
|
|
10
|
+
export const SESSION_CODE = 'adplus_s_id';
|
|
11
|
+
export const storage = getStorageManager(undefined, BIDDER_CODE);
|
|
12
|
+
const COOKIE_EXP = 1000 * 60 * 60 * 24; // 1 day
|
|
13
|
+
// #endregion
|
|
14
|
+
|
|
15
|
+
// #region Helpers
|
|
16
|
+
export function isValidUuid (uuid) {
|
|
17
|
+
return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(
|
|
18
|
+
uuid
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function getSessionId() {
|
|
23
|
+
let sid = storage.cookiesAreEnabled() && storage.getCookie(SESSION_CODE);
|
|
24
|
+
|
|
25
|
+
if (
|
|
26
|
+
!sid || !isValidUuid(sid)
|
|
27
|
+
) {
|
|
28
|
+
sid = utils.generateUUID();
|
|
29
|
+
setSessionId(sid);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return sid;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function setSessionId(sid) {
|
|
36
|
+
if (storage.cookiesAreEnabled()) {
|
|
37
|
+
const expires = new Date(Date.now() + COOKIE_EXP).toISOString();
|
|
38
|
+
|
|
39
|
+
storage.setCookie(SESSION_CODE, sid, expires);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// #endregion
|
|
43
|
+
|
|
44
|
+
// #region Bid request validation
|
|
45
|
+
function isBidRequestValid(bid) {
|
|
46
|
+
if (!bid) {
|
|
47
|
+
utils.logError(BIDDER_CODE, 'bid, can not be empty', bid);
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (!bid.params) {
|
|
52
|
+
utils.logError(BIDDER_CODE, 'bid.params is required.');
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (!bid.params.adUnitId || typeof bid.params.adUnitId !== 'string') {
|
|
57
|
+
utils.logError(
|
|
58
|
+
BIDDER_CODE,
|
|
59
|
+
'bid.params.adUnitId is missing or has wrong type.'
|
|
60
|
+
);
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (!bid.params.inventoryId || typeof bid.params.inventoryId !== 'string') {
|
|
65
|
+
utils.logError(
|
|
66
|
+
BIDDER_CODE,
|
|
67
|
+
'bid.params.inventoryId is missing or has wrong type.'
|
|
68
|
+
);
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (
|
|
73
|
+
!bid.mediaTypes ||
|
|
74
|
+
!bid.mediaTypes[BANNER] ||
|
|
75
|
+
!utils.isArray(bid.mediaTypes[BANNER].sizes) ||
|
|
76
|
+
bid.mediaTypes[BANNER].sizes.length <= 0 ||
|
|
77
|
+
!utils.isArrayOfNums(bid.mediaTypes[BANNER].sizes[0])
|
|
78
|
+
) {
|
|
79
|
+
utils.logError(BIDDER_CODE, 'Wrong or missing size parameters.');
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
// #endregion
|
|
86
|
+
|
|
87
|
+
// #region Building the bid requests
|
|
88
|
+
/**
|
|
89
|
+
*
|
|
90
|
+
* @param {object} bid
|
|
91
|
+
* @returns
|
|
92
|
+
*/
|
|
93
|
+
function createBidRequest(bid) {
|
|
94
|
+
// Developer Params
|
|
95
|
+
const {
|
|
96
|
+
inventoryId,
|
|
97
|
+
adUnitId,
|
|
98
|
+
extraData,
|
|
99
|
+
yearOfBirth,
|
|
100
|
+
gender,
|
|
101
|
+
categories,
|
|
102
|
+
latitude,
|
|
103
|
+
longitude,
|
|
104
|
+
sdkVersion,
|
|
105
|
+
} = bid.params;
|
|
106
|
+
|
|
107
|
+
return {
|
|
108
|
+
method: 'GET',
|
|
109
|
+
url: ADPLUS_ENDPOINT,
|
|
110
|
+
data: utils.cleanObj({
|
|
111
|
+
bidId: bid.bidId,
|
|
112
|
+
inventoryId,
|
|
113
|
+
adUnitId,
|
|
114
|
+
adUnitWidth: bid.mediaTypes[BANNER].sizes[0][0],
|
|
115
|
+
adUnitHeight: bid.mediaTypes[BANNER].sizes[0][1],
|
|
116
|
+
extraData,
|
|
117
|
+
yearOfBirth,
|
|
118
|
+
gender,
|
|
119
|
+
categories,
|
|
120
|
+
latitude,
|
|
121
|
+
longitude,
|
|
122
|
+
sdkVersion: sdkVersion || '1',
|
|
123
|
+
session: getSessionId(),
|
|
124
|
+
interstitial: 0,
|
|
125
|
+
token: typeof window.top === 'object' && window.top[DGID_CODE] ? window.top[DGID_CODE] : undefined,
|
|
126
|
+
secure: window.location.protocol === 'https:' ? 1 : 0,
|
|
127
|
+
screenWidth: screen.width,
|
|
128
|
+
screenHeight: screen.height,
|
|
129
|
+
language: window.navigator.language || 'en-US',
|
|
130
|
+
pageUrl: window.location.href,
|
|
131
|
+
domain: window.location.hostname,
|
|
132
|
+
referrer: window.location.referrer,
|
|
133
|
+
}),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function buildRequests(validBidRequests, bidderRequest) {
|
|
138
|
+
return validBidRequests.map((req) => createBidRequest(req));
|
|
139
|
+
}
|
|
140
|
+
// #endregion
|
|
141
|
+
|
|
142
|
+
// #region Interpreting Responses
|
|
143
|
+
/**
|
|
144
|
+
*
|
|
145
|
+
* @param {HeaderBiddingResponse} responseData
|
|
146
|
+
* @param { object } bidParams
|
|
147
|
+
* @returns
|
|
148
|
+
*/
|
|
149
|
+
function createAdResponse(responseData, bidParams) {
|
|
150
|
+
return {
|
|
151
|
+
requestId: responseData.requestID,
|
|
152
|
+
cpm: responseData.cpm,
|
|
153
|
+
currency: responseData.currency,
|
|
154
|
+
width: responseData.width,
|
|
155
|
+
height: responseData.height,
|
|
156
|
+
creativeId: responseData.creativeID,
|
|
157
|
+
dealId: responseData.dealID,
|
|
158
|
+
netRevenue: responseData.netRevenue,
|
|
159
|
+
ttl: responseData.ttl,
|
|
160
|
+
ad: responseData.ad,
|
|
161
|
+
mediaType: responseData.mediaType,
|
|
162
|
+
meta: {
|
|
163
|
+
advertiserDomains: responseData.advertiserDomains,
|
|
164
|
+
primaryCatId: utils.isArray(responseData.categoryIDs) && responseData.categoryIDs.length > 0
|
|
165
|
+
? responseData.categoryIDs[0] : undefined,
|
|
166
|
+
secondaryCatIds: responseData.categoryIDs,
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function interpretResponse(response, request) {
|
|
172
|
+
// In case of empty response
|
|
173
|
+
if (
|
|
174
|
+
response.body == null ||
|
|
175
|
+
!utils.isArray(response.body) ||
|
|
176
|
+
response.body.length === 0
|
|
177
|
+
) {
|
|
178
|
+
return [];
|
|
179
|
+
}
|
|
180
|
+
const bids = response.body.map((bid) => createAdResponse(bid));
|
|
181
|
+
return bids;
|
|
182
|
+
}
|
|
183
|
+
// #endregion
|
|
184
|
+
|
|
185
|
+
// #region Bidder
|
|
186
|
+
export const spec = {
|
|
187
|
+
code: BIDDER_CODE,
|
|
188
|
+
supportedMediaTypes: [BANNER],
|
|
189
|
+
isBidRequestValid,
|
|
190
|
+
buildRequests,
|
|
191
|
+
interpretResponse,
|
|
192
|
+
onTimeout(timeoutData) {
|
|
193
|
+
utils.logError('Adplus adapter timed out for the auction.', timeoutData);
|
|
194
|
+
},
|
|
195
|
+
onBidWon(bid) {
|
|
196
|
+
utils.logInfo(
|
|
197
|
+
`Adplus adapter won the auction. Bid id: ${bid.bidId}, Ad Unit Id: ${bid.adUnitId}, Inventory Id: ${bid.inventoryId}`
|
|
198
|
+
);
|
|
199
|
+
},
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
registerBidder(spec);
|
|
203
|
+
// #endregion
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
Module Name: AdPlus Bidder Adapter
|
|
4
|
+
|
|
5
|
+
Module Type: Bidder Adapter
|
|
6
|
+
|
|
7
|
+
Maintainer: adplus.destek@yaani.com.tr
|
|
8
|
+
|
|
9
|
+
# Description
|
|
10
|
+
|
|
11
|
+
AdPlus Prebid.js Bidder Adapter. Only banner formats are supported.
|
|
12
|
+
|
|
13
|
+
About us : https://ssp.ad-plus.com.tr/
|
|
14
|
+
|
|
15
|
+
# Test Parameters
|
|
16
|
+
|
|
17
|
+
```javascript
|
|
18
|
+
var adUnits = [
|
|
19
|
+
{
|
|
20
|
+
code: "div-adplus",
|
|
21
|
+
mediaTypes: {
|
|
22
|
+
banner: {
|
|
23
|
+
sizes: [
|
|
24
|
+
[300, 250],
|
|
25
|
+
],
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
bids: [
|
|
29
|
+
{
|
|
30
|
+
bidder: "adplus",
|
|
31
|
+
params: {
|
|
32
|
+
inventoryId: "-1",
|
|
33
|
+
adUnitId: "-3",
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
```
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { deepAccess, buildUrl, parseSizesInput } from '../src/utils.js';
|
|
2
2
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import { config } from '../src/config.js';
|
|
4
|
+
import { createEidsArray } from './userId/eids.js';
|
|
4
5
|
import find from 'core-js-pure/features/array/find.js';
|
|
5
6
|
import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
|
|
6
7
|
|
|
@@ -97,17 +98,21 @@ export const spec = {
|
|
|
97
98
|
PageRefreshed: getPageRefreshed()
|
|
98
99
|
};
|
|
99
100
|
|
|
100
|
-
if (bidderRequest
|
|
101
|
+
if (bidderRequest.gdprConsent) {
|
|
101
102
|
payload.gdprConsent = {
|
|
102
103
|
consentString: bidderRequest.gdprConsent.consentString,
|
|
103
104
|
consentRequired: (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean') ? bidderRequest.gdprConsent.gdprApplies : null
|
|
104
105
|
};
|
|
105
106
|
}
|
|
106
107
|
|
|
107
|
-
if (bidderRequest
|
|
108
|
+
if (bidderRequest.uspConsent) {
|
|
108
109
|
payload.uspConsent = bidderRequest.uspConsent;
|
|
109
110
|
}
|
|
110
111
|
|
|
112
|
+
if (deepAccess(bidderRequest, 'userId')) {
|
|
113
|
+
payload.userId = createEidsArray(bidderRequest.userId);
|
|
114
|
+
}
|
|
115
|
+
|
|
111
116
|
const data = JSON.stringify(payload);
|
|
112
117
|
const options = {
|
|
113
118
|
withCredentials: true
|
|
@@ -33,7 +33,7 @@ export function attachScriptTagToDOM(rtdConfig) {
|
|
|
33
33
|
edktInitializor.load = function(e) {
|
|
34
34
|
var p = e || 'sdk';
|
|
35
35
|
var n = document.createElement('script');
|
|
36
|
-
n.type = '
|
|
36
|
+
n.type = 'module';
|
|
37
37
|
n.async = true;
|
|
38
38
|
n.src = 'https://cdn.edkt.io/' + p + '/edgekit.min.js';
|
|
39
39
|
document.getElementsByTagName('head')[0].appendChild(n);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { convertCamelToUnderscore, isArray, isNumber, isPlainObject, logError, logInfo, deepAccess, logMessage, convertTypes, isStr, getParameterByName, deepClone, chunk, logWarn, getBidRequest, createTrackPixelHtml, isEmpty, transformBidderParamKeywords, getMaxValueFromArray, fill, getMinValueFromArray, isArrayOfNums, isFn } from '../src/utils.js';
|
|
1
|
+
import { convertCamelToUnderscore, isArray, isNumber, isPlainObject, logError, logInfo, deepAccess, logMessage, convertTypes, isStr, getParameterByName, deepClone, chunk, logWarn, getBidRequest, createTrackPixelHtml, isEmpty, transformBidderParamKeywords, getMaxValueFromArray, fill, getMinValueFromArray, isArrayOfNums, isFn, isAllowZeroCpmBidsEnabled } from '../src/utils.js';
|
|
2
2
|
import { Renderer } from '../src/Renderer.js';
|
|
3
3
|
import { config } from '../src/config.js';
|
|
4
4
|
import { registerBidder, getIabSubCategory } from '../src/adapters/bidderFactory.js';
|
|
@@ -293,7 +293,8 @@ export const spec = {
|
|
|
293
293
|
serverResponse.tags.forEach(serverBid => {
|
|
294
294
|
const rtbBid = getRtbBid(serverBid);
|
|
295
295
|
if (rtbBid) {
|
|
296
|
-
|
|
296
|
+
const cpmCheck = (isAllowZeroCpmBidsEnabled(bidderRequest.bidderCode)) ? rtbBid.cpm >= 0 : rtbBid.cpm > 0;
|
|
297
|
+
if (cpmCheck && includes(this.supportedMediaTypes, rtbBid.ad_type)) {
|
|
297
298
|
const bid = newBid(serverBid, rtbBid, bidderRequest);
|
|
298
299
|
bid.mediaType = parseMediaType(rtbBid);
|
|
299
300
|
bids.push(bid);
|
|
@@ -598,6 +599,26 @@ function newBid(serverBid, rtbBid, bidderRequest) {
|
|
|
598
599
|
bid.meta = Object.assign({}, bid.meta, { advertiserId: rtbBid.advertiser_id });
|
|
599
600
|
}
|
|
600
601
|
|
|
602
|
+
// temporary function; may remove at later date if/when adserver fully supports dchain
|
|
603
|
+
function setupDChain(rtbBid) {
|
|
604
|
+
let dchain = {
|
|
605
|
+
ver: '1.0',
|
|
606
|
+
complete: 0,
|
|
607
|
+
nodes: [{
|
|
608
|
+
bsid: rtbBid.buyer_member_id.toString()
|
|
609
|
+
}],
|
|
610
|
+
};
|
|
611
|
+
|
|
612
|
+
return dchain;
|
|
613
|
+
}
|
|
614
|
+
if (rtbBid.buyer_member_id) {
|
|
615
|
+
bid.meta = Object.assign({}, bid.meta, {dchain: setupDChain(rtbBid)});
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
if (rtbBid.brand_id) {
|
|
619
|
+
bid.meta = Object.assign({}, bid.meta, { brandId: rtbBid.brand_id });
|
|
620
|
+
}
|
|
621
|
+
|
|
601
622
|
if (rtbBid.rtb.video) {
|
|
602
623
|
// shared video properties used for all 3 contexts
|
|
603
624
|
Object.assign(bid, {
|
|
@@ -696,9 +717,11 @@ function newBid(serverBid, rtbBid, bidderRequest) {
|
|
|
696
717
|
});
|
|
697
718
|
try {
|
|
698
719
|
if (rtbBid.rtb.trackers) {
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
720
|
+
for (let i = 0; i < rtbBid.rtb.trackers[0].impression_urls.length; i++) {
|
|
721
|
+
const url = rtbBid.rtb.trackers[0].impression_urls[i];
|
|
722
|
+
const tracker = createTrackPixelHtml(url);
|
|
723
|
+
bid.ad += tracker;
|
|
724
|
+
}
|
|
702
725
|
}
|
|
703
726
|
} catch (error) {
|
|
704
727
|
logError('Error appending tracking pixel', error);
|