prebid.js 6.5.0 → 6.9.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/.eslintrc.js +8 -1
- package/integrationExamples/gpt/amp/creative.html +11 -33
- package/integrationExamples/gpt/weboramaRtdProvider_example.html +154 -115
- package/integrationExamples/gpt/x-domain/creative.html +63 -29
- package/modules/.submodules.json +2 -1
- package/modules/adagioBidAdapter.js +0 -8
- package/modules/adagioBidAdapter.md +1 -1
- package/modules/adbookpspBidAdapter.js +27 -10
- package/modules/adhashBidAdapter.js +3 -3
- package/modules/adkernelBidAdapter.js +2 -1
- package/modules/admanBidAdapter.js +10 -4
- package/modules/adomikAnalyticsAdapter.js +23 -11
- package/modules/adqueryIdSystem.js +103 -0
- package/modules/adqueryIdSystem.md +35 -0
- package/modules/appnexusBidAdapter.js +14 -2
- package/modules/asealBidAdapter.js +58 -0
- package/modules/asealBidAdapter.md +52 -0
- package/modules/bliinkBidAdapter.js +2 -1
- package/modules/brandmetricsRtdProvider.js +168 -0
- package/modules/brandmetricsRtdProvider.md +40 -0
- package/modules/colossussspBidAdapter.js +12 -8
- package/modules/colossussspBidAdapter.md +15 -1
- package/modules/compassBidAdapter.js +10 -3
- package/modules/consumableBidAdapter.md +1 -1
- package/modules/conversantBidAdapter.js +7 -0
- package/modules/criteoBidAdapter.js +10 -1
- package/modules/criteoIdSystem.js +29 -7
- package/modules/currency.js +26 -1
- package/modules/displayioBidAdapter.js +157 -0
- package/modules/displayioBidAdapter.md +148 -0
- package/modules/e_volutionBidAdapter.js +158 -0
- package/modules/glimpseBidAdapter.js +66 -44
- package/modules/gnetBidAdapter.js +3 -3
- package/modules/gnetBidAdapter.md +4 -4
- package/modules/gumgumBidAdapter.js +56 -42
- package/modules/idImportLibrary.js +45 -8
- package/modules/idImportLibrary.md +4 -0
- package/modules/improvedigitalBidAdapter.js +29 -2
- package/modules/interactiveOffersBidAdapter.js +9 -6
- package/modules/jwplayerRtdProvider.js +71 -6
- package/modules/jwplayerRtdProvider.md +27 -11
- package/modules/kargoBidAdapter.js +2 -2
- package/modules/lunamediahbBidAdapter.js +32 -4
- package/modules/nextMillenniumBidAdapter.js +3 -1
- package/modules/oguryBidAdapter.js +14 -14
- package/modules/onetagBidAdapter.js +4 -2
- package/modules/pilotxBidAdapter.js +147 -0
- package/modules/pilotxBidAdapter.md +50 -0
- package/modules/priceFloors.js +2 -1
- package/modules/proxistoreBidAdapter.js +0 -2
- package/modules/pubmaticAnalyticsAdapter.js +16 -0
- package/modules/richaudienceBidAdapter.js +10 -4
- package/modules/riseBidAdapter.js +18 -7
- package/modules/rtbhouseBidAdapter.js +14 -4
- package/modules/rtdModule/index.js +14 -15
- package/modules/rubiconAnalyticsAdapter.js +8 -2
- package/modules/seedingAllianceBidAdapter.js +3 -3
- package/modules/sharethroughBidAdapter.js +12 -17
- package/modules/showheroes-bsBidAdapter.js +13 -2
- package/modules/sortableAnalyticsAdapter.js +5 -4
- package/modules/sovrnBidAdapter.js +93 -18
- package/modules/sovrnBidAdapter.md +80 -2
- package/modules/synacormediaBidAdapter.js +31 -10
- package/modules/tappxBidAdapter.js +8 -5
- package/modules/teadsBidAdapter.js +1 -2
- package/modules/undertoneBidAdapter.js +17 -1
- package/modules/userId/eids.js +7 -1
- package/modules/userId/userId.md +8 -0
- package/modules/viewability.js +177 -0
- package/modules/viewability.md +87 -0
- package/modules/weboramaRtdProvider.js +264 -34
- package/modules/weboramaRtdProvider.md +110 -40
- package/modules/welectBidAdapter.js +106 -0
- package/modules/yahoosspBidAdapter.js +2 -0
- package/package.json +2 -1
- package/src/adRendering.js +38 -0
- package/src/adloader.js +2 -1
- package/src/auction.js +103 -73
- package/src/bidderSettings.js +69 -0
- package/src/hook.js +5 -1
- package/src/prebid.js +19 -21
- package/src/secureCreatives.js +131 -47
- package/src/targeting.js +3 -2
- package/src/utils.js +13 -10
- package/test/helpers/syncPromise.js +71 -0
- package/test/spec/auctionmanager_spec.js +179 -15
- package/test/spec/modules/adagioBidAdapter_spec.js +0 -10
- package/test/spec/modules/adbookpspBidAdapter_spec.js +17 -3
- package/test/spec/modules/adhashBidAdapter_spec.js +2 -2
- package/test/spec/modules/admanBidAdapter_spec.js +2 -2
- package/test/spec/modules/adomikAnalyticsAdapter_spec.js +3 -1
- package/test/spec/modules/adqueryIdSystem_spec.js +74 -0
- package/test/spec/modules/appnexusBidAdapter_spec.js +27 -0
- package/test/spec/modules/asealBidAdapter_spec.js +144 -0
- package/test/spec/modules/bliinkBidAdapter_spec.js +2 -0
- package/test/spec/modules/brandmetricsRtdProvider_spec.js +191 -0
- package/test/spec/modules/colossussspBidAdapter_spec.js +5 -2
- package/test/spec/modules/compassBidAdapter_spec.js +1 -0
- package/test/spec/modules/conversantBidAdapter_spec.js +54 -2
- package/test/spec/modules/criteoBidAdapter_spec.js +21 -0
- package/test/spec/modules/criteoIdSystem_spec.js +6 -3
- package/test/spec/modules/currency_spec.js +21 -6
- package/test/spec/modules/displayioBidAdapter_spec.js +239 -0
- package/test/spec/modules/e_volutionBidAdapter_spec.js +242 -0
- package/test/spec/modules/eids_spec.js +15 -0
- package/test/spec/modules/glimpseBidAdapter_spec.js +0 -18
- package/test/spec/modules/gnetBidAdapter_spec.js +6 -6
- package/test/spec/modules/gumgumBidAdapter_spec.js +46 -0
- package/test/spec/modules/idImportLibrary_spec.js +197 -10
- package/test/spec/modules/improvedigitalBidAdapter_spec.js +61 -0
- package/test/spec/modules/jwplayerRtdProvider_spec.js +195 -2
- package/test/spec/modules/kargoBidAdapter_spec.js +1 -1
- package/test/spec/modules/loglyliftBidAdapter_spec.js +1 -1
- package/test/spec/modules/lunamediahbBidAdapter_spec.js +27 -1
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +1 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +69 -3
- package/test/spec/modules/pilotxBidAdapter_spec.js +244 -0
- package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +13 -1
- package/test/spec/modules/realTimeDataModule_spec.js +67 -5
- package/test/spec/modules/richaudienceBidAdapter_spec.js +40 -0
- package/test/spec/modules/riseBidAdapter_spec.js +31 -5
- package/test/spec/modules/rtbhouseBidAdapter_spec.js +20 -0
- package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +61 -1
- package/test/spec/modules/sharethroughBidAdapter_spec.js +91 -6
- package/test/spec/modules/showheroes-bsBidAdapter_spec.js +2 -0
- package/test/spec/modules/sortableAnalyticsAdapter_spec.js +2 -3
- package/test/spec/modules/sovrnBidAdapter_spec.js +413 -333
- package/test/spec/modules/synacormediaBidAdapter_spec.js +70 -0
- package/test/spec/modules/tappxBidAdapter_spec.js +0 -19
- package/test/spec/modules/teadsBidAdapter_spec.js +14 -59
- package/test/spec/modules/undertoneBidAdapter_spec.js +55 -2
- package/test/spec/modules/userId_spec.js +68 -19
- package/test/spec/modules/viewability_spec.js +280 -0
- package/test/spec/modules/weboramaRtdProvider_spec.js +536 -20
- package/test/spec/modules/welectBidAdapter_spec.js +211 -0
- package/test/spec/modules/yahoosspBidAdapter_spec.js +10 -0
- package/test/spec/unit/core/bidderSettings_spec.js +123 -0
- package/test/spec/unit/pbjs_api_spec.js +21 -8
- package/test/spec/unit/secureCreatives_spec.js +143 -24
package/.eslintrc.js
CHANGED
|
@@ -23,10 +23,13 @@ module.exports = {
|
|
|
23
23
|
'BROWSERSTACK_USERNAME': false,
|
|
24
24
|
'BROWSERSTACK_KEY': false
|
|
25
25
|
},
|
|
26
|
+
// use babel as parser for fancy syntax
|
|
27
|
+
parser: '@babel/eslint-parser',
|
|
26
28
|
parserOptions: {
|
|
27
29
|
sourceType: 'module',
|
|
28
30
|
ecmaVersion: 2018,
|
|
29
31
|
},
|
|
32
|
+
|
|
30
33
|
rules: {
|
|
31
34
|
'comma-dangle': 'off',
|
|
32
35
|
semi: 'off',
|
|
@@ -49,5 +52,9 @@ module.exports = {
|
|
|
49
52
|
rules: {
|
|
50
53
|
'prebid/validate-imports': ['error', allowedModules[key]]
|
|
51
54
|
}
|
|
52
|
-
}))
|
|
55
|
+
})).concat([{
|
|
56
|
+
// code in other packages (such as plugins/eslint) is not "seen" by babel and its parser will complain.
|
|
57
|
+
files: 'plugins/*/**/*.js',
|
|
58
|
+
parser: 'esprima'
|
|
59
|
+
}])
|
|
53
60
|
};
|
|
@@ -1,38 +1,16 @@
|
|
|
1
1
|
<!-- This script tag should be returned by your ad server -->
|
|
2
2
|
|
|
3
|
+
<script src="https://cdn.jsdelivr.net/npm/prebid-universal-creative@latest/dist/creative.js"></script>
|
|
3
4
|
<script>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
data = JSON.parse(ev[key]);
|
|
10
|
-
} catch (e) {
|
|
11
|
-
// Do nothing. No ad found.
|
|
12
|
-
}
|
|
13
|
-
if (data.ad || data.adUrl) {
|
|
14
|
-
if (data.ad) {
|
|
15
|
-
document.write(data.ad);
|
|
16
|
-
document.close();
|
|
17
|
-
} else if (data.adUrl) {
|
|
18
|
-
document.write('<IFRAME SRC="' + data.adUrl + '" WIDTH="'+ data.width +'" HEIGHT="'+ data.height +'" FRAMEBORDER="0" SCROLLING="no" MARGINHEIGHT="0" MARGINWIDTH="0" TOPMARGIN="0" LEFTMARGIN="0" ALLOWTRANSPARENCY="true"></IFRAME>');
|
|
19
|
-
document.close();
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
};
|
|
5
|
+
var ucTagData = {};
|
|
6
|
+
ucTagData.adServerDomain = "";
|
|
7
|
+
ucTagData.pubUrl = "%%PATTERN:url%%";
|
|
8
|
+
ucTagData.targetingMap = "%%PATTERN:TARGETINGMAP%%";
|
|
9
|
+
ucTagData.hbPb = "%%PATTERN:hb_pb%%";
|
|
23
10
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
window.parent.postMessage(message, '*');
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
var listenAdFromPrebid = function () {
|
|
33
|
-
window.addEventListener("message", renderAd, false);
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
listenAdFromPrebid();
|
|
37
|
-
requestAdFromPrebid();
|
|
11
|
+
try {
|
|
12
|
+
ucTag.renderAd(document, ucTagData);
|
|
13
|
+
} catch (e) {
|
|
14
|
+
console.log(e);
|
|
15
|
+
}
|
|
38
16
|
</script>
|
|
@@ -1,135 +1,174 @@
|
|
|
1
|
-
<!DOCTYPE html
|
|
1
|
+
<!DOCTYPE html
|
|
2
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
2
3
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
4
|
+
|
|
3
5
|
<head>
|
|
4
6
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
5
7
|
</head>
|
|
8
|
+
|
|
6
9
|
<body>
|
|
7
10
|
|
|
8
|
-
<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
|
|
9
|
-
<script src="../../build/dev/prebid.js" async></script>
|
|
11
|
+
<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
|
|
12
|
+
<script src="../../build/dev/prebid.js" async></script>
|
|
10
13
|
|
|
11
|
-
<script>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
<script>
|
|
15
|
+
var pbjs = pbjs || {};
|
|
16
|
+
pbjs.que = pbjs.que || [];
|
|
14
17
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
pbjs.que.push(function () {
|
|
19
|
+
pbjs.setConfig({
|
|
20
|
+
debug: true,
|
|
21
|
+
realTimeData: {
|
|
22
|
+
auctionDelay: 1000,
|
|
23
|
+
dataProviders: [{
|
|
21
24
|
name: "weborama",
|
|
22
25
|
waitForIt: true,
|
|
23
26
|
params: {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
27
|
+
setPrebidTargeting: true, // optional
|
|
28
|
+
sendToBidders: true, // optional
|
|
29
|
+
onData: function (data, site) { // optional
|
|
30
|
+
var kind = (site) ? 'site' : 'user';
|
|
31
|
+
console.log('onData', kind, data);
|
|
32
|
+
},
|
|
33
|
+
weboCtxConf: {
|
|
34
|
+
token: "to-be-defined", // mandatory
|
|
35
|
+
targetURL: "https://prebid.org", // default is document.URL
|
|
36
|
+
setPrebidTargeting: true, // override param.setPrebidTargeting or default true
|
|
37
|
+
sendToBidders: true, // override param.sendToBidders or default true
|
|
38
|
+
defaultProfile: { // optional
|
|
39
|
+
webo_ctx: ['moon'],
|
|
40
|
+
webo_ds: ['bar']
|
|
41
|
+
},
|
|
42
|
+
//, onData: function (data, ...) { ...}
|
|
43
|
+
},
|
|
44
|
+
weboUserDataConf: {
|
|
45
|
+
accountId: 12345, // optional
|
|
46
|
+
setPrebidTargeting: true, // override param.setPrebidTargeting or default true
|
|
47
|
+
sendToBidders: true, // override param.sendToBidders or default true
|
|
48
|
+
defaultProfile: { // optional
|
|
49
|
+
webo_cs: ['Red'],
|
|
50
|
+
webo_audiences: ['bam']
|
|
51
|
+
},
|
|
52
|
+
localStorageProfileKey: 'webo_wam2gam_entry', // default
|
|
53
|
+
//, onData: function (data,...) { ...}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}]
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
</script>
|
|
61
|
+
<script>
|
|
62
|
+
var div_1_sizes = [
|
|
63
|
+
[300, 300]
|
|
64
|
+
];
|
|
65
|
+
|
|
66
|
+
var PREBID_TIMEOUT = 3000;
|
|
67
|
+
var FAILSAFE_TIMEOUT = 5000;
|
|
68
|
+
|
|
69
|
+
var adUnits = [
|
|
70
|
+
{
|
|
71
|
+
code: '/1056029/webo-ctx-prebid',
|
|
72
|
+
mediaTypes: {
|
|
73
|
+
banner: {
|
|
74
|
+
sizes: div_1_sizes
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
bids: [{
|
|
78
|
+
bidder: 'smartadserver',
|
|
79
|
+
params: {
|
|
80
|
+
siteId: 1234,
|
|
81
|
+
pageId: 1234,
|
|
82
|
+
formatId: 1234,
|
|
83
|
+
}
|
|
84
|
+
}, {
|
|
85
|
+
bidder: 'pubmatic',
|
|
86
|
+
params: {
|
|
87
|
+
publisherId: '32572',
|
|
88
|
+
}
|
|
89
|
+
}, {
|
|
90
|
+
bidder: 'appnexus',
|
|
91
|
+
params: {
|
|
92
|
+
placementId: 234234,
|
|
93
|
+
}
|
|
94
|
+
}, {
|
|
95
|
+
bidder: 'rubicon',
|
|
96
|
+
params: {
|
|
97
|
+
accountId: '14062',
|
|
98
|
+
siteId: '70608',
|
|
99
|
+
zoneId: '335918',
|
|
100
|
+
userId: '12346',
|
|
101
|
+
}
|
|
102
|
+
}, {
|
|
103
|
+
bidder: 'criteo',
|
|
104
|
+
params: {
|
|
105
|
+
zoneId: 234234,
|
|
106
|
+
networkId: 456456,
|
|
107
|
+
},
|
|
44
108
|
}]
|
|
45
109
|
}
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
</script>
|
|
49
|
-
<script>
|
|
50
|
-
var div_1_sizes = [
|
|
51
|
-
[300, 300]
|
|
52
|
-
];
|
|
53
|
-
|
|
54
|
-
var PREBID_TIMEOUT = 3000;
|
|
55
|
-
var FAILSAFE_TIMEOUT = 5000;
|
|
56
|
-
|
|
57
|
-
var adUnits = [
|
|
58
|
-
{
|
|
59
|
-
code: '/1056029/webo-ctx-prebid',
|
|
60
|
-
mediaTypes: {
|
|
61
|
-
banner: {
|
|
62
|
-
sizes: div_1_sizes
|
|
63
|
-
}
|
|
64
|
-
},
|
|
65
|
-
bids: [{
|
|
66
|
-
bidder: 'smartadserver',
|
|
67
|
-
params: {
|
|
68
|
-
placementId: 1
|
|
69
|
-
}
|
|
70
|
-
}]
|
|
71
|
-
}
|
|
72
110
|
];
|
|
73
111
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
var pbjs = pbjs || {};
|
|
82
|
-
pbjs.que = pbjs.que || [];
|
|
83
|
-
|
|
84
|
-
pbjs.que.push(function() {
|
|
85
|
-
pbjs.addAdUnits(adUnits);
|
|
86
|
-
pbjs.requestBids({
|
|
87
|
-
bidsBackHandler: initAdserver,
|
|
88
|
-
timeout: PREBID_TIMEOUT
|
|
112
|
+
// ======== DO NOT EDIT BELOW THIS LINE =========== //
|
|
113
|
+
var googletag = googletag || {};
|
|
114
|
+
googletag.cmd = googletag.cmd || [];
|
|
115
|
+
googletag.cmd.push(function () {
|
|
116
|
+
googletag.pubads().disableInitialLoad();
|
|
89
117
|
});
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
pbjs.
|
|
95
|
-
|
|
96
|
-
pbjs.
|
|
97
|
-
|
|
98
|
-
|
|
118
|
+
|
|
119
|
+
var pbjs = pbjs || {};
|
|
120
|
+
pbjs.que = pbjs.que || [];
|
|
121
|
+
|
|
122
|
+
pbjs.que.push(function () {
|
|
123
|
+
pbjs.addAdUnits(adUnits);
|
|
124
|
+
pbjs.requestBids({
|
|
125
|
+
bidsBackHandler: initAdserver,
|
|
126
|
+
timeout: PREBID_TIMEOUT
|
|
99
127
|
});
|
|
100
128
|
});
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
googletag.cmd.push(function() {
|
|
110
|
-
googletag.defineSlot('/1056029/webo-ctx-prebid', div_1_sizes, 'div-gpt-ad-1620653642627-0').addService(googletag.pubads());
|
|
111
|
-
googletag.pubads().disableInitialLoad();
|
|
112
|
-
googletag.enableServices();
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
</script>
|
|
116
|
-
|
|
117
|
-
<article>
|
|
118
|
-
<p>
|
|
119
|
-
test webo ctx using prebid.js
|
|
120
|
-
</p>
|
|
121
|
-
</article>
|
|
122
|
-
<h2>Basic Prebid.js Example</h2>
|
|
123
|
-
<h5>Div-1</h5>
|
|
124
|
-
<div id='div-gpt-ad-1620653642627-0' style='width: 300px; height: 300px;'>
|
|
125
|
-
<script type='text/javascript'>
|
|
126
|
-
googletag.cmd.push(function() {
|
|
127
|
-
googletag.display('div-gpt-ad-1620653642627-0');
|
|
129
|
+
|
|
130
|
+
function initAdserver() {
|
|
131
|
+
if (pbjs.initAdserverSet) return;
|
|
132
|
+
pbjs.initAdserverSet = true;
|
|
133
|
+
googletag.cmd.push(function () {
|
|
134
|
+
pbjs.que.push(function () {
|
|
135
|
+
pbjs.setTargetingForGPTAsync();
|
|
136
|
+
googletag.pubads().refresh();
|
|
128
137
|
});
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
// in case PBJS doesn't load
|
|
143
|
+
setTimeout(function () {
|
|
144
|
+
initAdserver();
|
|
145
|
+
}, FAILSAFE_TIMEOUT);
|
|
146
|
+
|
|
147
|
+
googletag.cmd.push(function () {
|
|
148
|
+
googletag.defineSlot('/1056029/webo-ctx-prebid', div_1_sizes, 'div-gpt-ad-1620653642627-0').addService(googletag.pubads());
|
|
149
|
+
googletag.pubads().disableInitialLoad();
|
|
150
|
+
googletag.enableServices();
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
</script>
|
|
154
|
+
|
|
155
|
+
<article>
|
|
156
|
+
<p>
|
|
157
|
+
test webo ctx using prebid.js
|
|
158
|
+
</p>
|
|
159
|
+
</article>
|
|
160
|
+
<h2>Basic Prebid.js Example</h2>
|
|
161
|
+
<h5>Div-1</h5>
|
|
162
|
+
<div id='div-gpt-ad-1620653642627-0' style='width: 300px; height: 300px;'>
|
|
163
|
+
<script type='text/javascript'>
|
|
164
|
+
googletag.cmd.push(function () {
|
|
165
|
+
googletag.display('div-gpt-ad-1620653642627-0');
|
|
166
|
+
});
|
|
167
|
+
</script>
|
|
168
|
+
</div>
|
|
169
|
+
<button onclick="googletag.cmd.push(function() { googletag.pubads().refresh(); });">
|
|
170
|
+
Show/Refresh Ad
|
|
171
|
+
</button>
|
|
134
172
|
</body>
|
|
135
|
-
|
|
173
|
+
|
|
174
|
+
</html>
|
|
@@ -2,37 +2,45 @@
|
|
|
2
2
|
// this script can be returned by an ad server delivering a cross domain iframe, into which the
|
|
3
3
|
// creative will be rendered, e.g. DFP delivering a SafeFrame
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
const windowLocation = window.location;
|
|
6
|
+
const urlParser = document.createElement('a');
|
|
7
7
|
urlParser.href = '%%PATTERN:url%%';
|
|
8
|
-
|
|
8
|
+
const publisherDomain = urlParser.protocol + '//' + urlParser.hostname;
|
|
9
|
+
const adId = '%%PATTERN:hb_adid%%';
|
|
10
|
+
|
|
11
|
+
function receiveMessage(ev) {
|
|
12
|
+
const origin = ev.origin || ev.originalEvent.origin;
|
|
13
|
+
if (origin === publisherDomain) {
|
|
14
|
+
renderAd(ev);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
9
17
|
|
|
10
18
|
function renderAd(ev) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
const key = ev.message ? 'message' : 'data';
|
|
20
|
+
let adObject = {};
|
|
21
|
+
try {
|
|
22
|
+
adObject = JSON.parse(ev[key]);
|
|
23
|
+
} catch (e) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
18
26
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
var width = adObject.width;
|
|
28
|
-
var height = adObject.height;
|
|
27
|
+
if (adObject.message && adObject.message === 'Prebid Response' &&
|
|
28
|
+
adObject.adId === adId) {
|
|
29
|
+
try {
|
|
30
|
+
const body = window.document.body;
|
|
31
|
+
const ad = adObject.ad;
|
|
32
|
+
const url = adObject.adUrl;
|
|
33
|
+
const width = adObject.width;
|
|
34
|
+
const height = adObject.height;
|
|
29
35
|
|
|
30
36
|
if (adObject.mediaType === 'video') {
|
|
37
|
+
signalRenderResult(false, {
|
|
38
|
+
reason: 'preventWritingOnMainDocument',
|
|
39
|
+
message: `Cannot render video ad ${adId}`
|
|
40
|
+
});
|
|
31
41
|
console.log('Error trying to write ad.');
|
|
32
|
-
} else
|
|
33
|
-
|
|
34
|
-
if (ad) {
|
|
35
|
-
var frame = document.createElement('iframe');
|
|
42
|
+
} else if (ad) {
|
|
43
|
+
const frame = document.createElement('iframe');
|
|
36
44
|
frame.setAttribute('FRAMEBORDER', 0);
|
|
37
45
|
frame.setAttribute('SCROLLING', 'no');
|
|
38
46
|
frame.setAttribute('MARGINHEIGHT', 0);
|
|
@@ -46,24 +54,50 @@ function renderAd(ev) {
|
|
|
46
54
|
frame.contentDocument.open();
|
|
47
55
|
frame.contentDocument.write(ad);
|
|
48
56
|
frame.contentDocument.close();
|
|
57
|
+
signalRenderResult(true);
|
|
49
58
|
} else if (url) {
|
|
50
59
|
body.insertAdjacentHTML('beforeend', '<IFRAME SRC="' + url + '" FRAMEBORDER="0" SCROLLING="no" MARGINHEIGHT="0" MARGINWIDTH="0" TOPMARGIN="0" LEFTMARGIN="0" ALLOWTRANSPARENCY="true" WIDTH="' + width + '" HEIGHT="' + height + '"></IFRAME>');
|
|
60
|
+
signalRenderResult(true);
|
|
51
61
|
} else {
|
|
52
|
-
|
|
62
|
+
signalRenderResult(false, {
|
|
63
|
+
reason: 'noAd',
|
|
64
|
+
message: `No ad for ${adId}`
|
|
65
|
+
});
|
|
66
|
+
console.log(`Error trying to write ad. No ad markup or adUrl for ${adId}`);
|
|
53
67
|
}
|
|
68
|
+
} catch (e) {
|
|
69
|
+
signalRenderResult(false, {reason: 'exception', message: e.message});
|
|
70
|
+
console.log(`Error in rendering ad`, e);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function signalRenderResult(success, {reason, message} = {}) {
|
|
75
|
+
const payload = {
|
|
76
|
+
message: 'Prebid Event',
|
|
77
|
+
adId,
|
|
78
|
+
event: success ? 'adRenderSucceeded' : 'adRenderFailed',
|
|
54
79
|
}
|
|
80
|
+
if (!success) {
|
|
81
|
+
payload.info = {reason, message};
|
|
82
|
+
}
|
|
83
|
+
window.parent.postMessage(JSON.stringify(payload), publisherDomain);
|
|
55
84
|
}
|
|
56
85
|
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
|
|
57
89
|
function requestAdFromPrebid() {
|
|
58
|
-
|
|
90
|
+
const message = JSON.stringify({
|
|
59
91
|
message: 'Prebid Request',
|
|
60
|
-
adId
|
|
92
|
+
adId
|
|
61
93
|
});
|
|
62
|
-
|
|
94
|
+
const channel = new MessageChannel();
|
|
95
|
+
channel.port1.onmessage = renderAd;
|
|
96
|
+
window.parent.postMessage(message, publisherDomain, [channel.port2]);
|
|
63
97
|
}
|
|
64
98
|
|
|
65
99
|
function listenAdFromPrebid() {
|
|
66
|
-
window.addEventListener('message',
|
|
100
|
+
window.addEventListener('message', receiveMessage, false);
|
|
67
101
|
}
|
|
68
102
|
|
|
69
103
|
listenAdFromPrebid();
|
package/modules/.submodules.json
CHANGED
|
@@ -268,8 +268,6 @@ function getSite(bidderRequest) {
|
|
|
268
268
|
} else if (refererInfo.stack && refererInfo.stack.length && refererInfo.stack[0]) {
|
|
269
269
|
// important note check if refererInfo.stack[0] is 'thruly' because a `null` value
|
|
270
270
|
// will be considered as "localhost" by the parseUrl function.
|
|
271
|
-
// As the isBidRequestValid returns false when it does not reach the referer
|
|
272
|
-
// this should never called.
|
|
273
271
|
const url = parseUrl(refererInfo.stack[0]);
|
|
274
272
|
domain = url.hostname;
|
|
275
273
|
}
|
|
@@ -873,12 +871,6 @@ export const spec = {
|
|
|
873
871
|
|
|
874
872
|
autoFillParams(bid);
|
|
875
873
|
|
|
876
|
-
if (!internal.getRefererInfo().reachedTop) {
|
|
877
|
-
logWarn(`${LOG_PREFIX} the main page url is unreachabled.`);
|
|
878
|
-
// internal.enqueue(debugData());
|
|
879
|
-
return false;
|
|
880
|
-
}
|
|
881
|
-
|
|
882
874
|
if (!(bid.params.organizationId && bid.params.site && bid.params.placement)) {
|
|
883
875
|
logWarn(`${LOG_PREFIX} at least one required param is missing.`);
|
|
884
876
|
// internal.enqueue(debugData());
|
|
@@ -18,7 +18,7 @@ Below, the list of Adagio params and where they can be set.
|
|
|
18
18
|
| ---------- | ------------- | ------------- |
|
|
19
19
|
| siteId | x |
|
|
20
20
|
| organizationId (obsolete) | | x
|
|
21
|
-
|
|
|
21
|
+
| site (obsolete) | | x
|
|
22
22
|
| pagetype | x | x
|
|
23
23
|
| environment | x | x
|
|
24
24
|
| category | x | x
|
|
@@ -363,7 +363,7 @@ function impBidsToPrebidBids(
|
|
|
363
363
|
}
|
|
364
364
|
|
|
365
365
|
const impToPrebidBid =
|
|
366
|
-
(bidderRequestBody, bidResponseCurrency, referrer, targetingMap) => (bid) => {
|
|
366
|
+
(bidderRequestBody, bidResponseCurrency, referrer, targetingMap) => (bid, bidIndex) => {
|
|
367
367
|
try {
|
|
368
368
|
const bidRequest = findBidRequest(bidderRequestBody, bid);
|
|
369
369
|
|
|
@@ -377,7 +377,7 @@ const impToPrebidBid =
|
|
|
377
377
|
let prebidBid = {
|
|
378
378
|
ad: bid.adm,
|
|
379
379
|
adId: bid.adid,
|
|
380
|
-
adserverTargeting: targetingMap[
|
|
380
|
+
adserverTargeting: targetingMap[bidIndex],
|
|
381
381
|
adUnitCode: bidRequest.tagid,
|
|
382
382
|
bidderRequestId: bidderRequestBody.id,
|
|
383
383
|
bidId: bid.id,
|
|
@@ -408,6 +408,9 @@ const impToPrebidBid =
|
|
|
408
408
|
};
|
|
409
409
|
}
|
|
410
410
|
|
|
411
|
+
if (deepAccess(bid, 'ext.pa_win') === true) {
|
|
412
|
+
prebidBid.auctionWinner = true;
|
|
413
|
+
}
|
|
411
414
|
return prebidBid;
|
|
412
415
|
} catch (error) {
|
|
413
416
|
logError(`${BIDDER_CODE}: Error while building bid`, error);
|
|
@@ -429,29 +432,43 @@ function buildTargetingMap(bids) {
|
|
|
429
432
|
const values = impIds.reduce((result, id) => {
|
|
430
433
|
result[id] = {
|
|
431
434
|
lineItemIds: [],
|
|
435
|
+
orderIds: [],
|
|
432
436
|
dealIds: [],
|
|
433
437
|
adIds: [],
|
|
438
|
+
adAndOrderIndexes: []
|
|
434
439
|
};
|
|
435
440
|
|
|
436
441
|
return result;
|
|
437
442
|
}, {});
|
|
438
443
|
|
|
439
|
-
bids.forEach((bid) => {
|
|
440
|
-
|
|
441
|
-
values[
|
|
442
|
-
values[
|
|
444
|
+
bids.forEach((bid, bidIndex) => {
|
|
445
|
+
let impId = bid.impid;
|
|
446
|
+
values[impId].lineItemIds.push(bid.ext.liid);
|
|
447
|
+
values[impId].dealIds.push(bid.dealid);
|
|
448
|
+
values[impId].adIds.push(bid.adid);
|
|
449
|
+
|
|
450
|
+
if (deepAccess(bid, 'ext.ordid')) {
|
|
451
|
+
values[impId].orderIds.push(bid.ext.ordid);
|
|
452
|
+
bid.ext.ordid.split(TARGETING_VALUE_SEPARATOR).forEach((ordid, ordIndex) => {
|
|
453
|
+
let adIdIndex = values[impId].adIds.indexOf(bid.adid);
|
|
454
|
+
values[impId].adAndOrderIndexes.push(adIdIndex + '_' + ordIndex)
|
|
455
|
+
})
|
|
456
|
+
}
|
|
443
457
|
});
|
|
444
458
|
|
|
445
459
|
const targetingMap = {};
|
|
446
460
|
|
|
447
|
-
|
|
448
|
-
|
|
461
|
+
bids.forEach((bid, bidIndex) => {
|
|
462
|
+
let id = bid.impid;
|
|
463
|
+
|
|
464
|
+
targetingMap[bidIndex] = {
|
|
449
465
|
hb_liid_adbookpsp: values[id].lineItemIds.join(TARGETING_VALUE_SEPARATOR),
|
|
450
466
|
hb_deal_adbookpsp: values[id].dealIds.join(TARGETING_VALUE_SEPARATOR),
|
|
467
|
+
hb_ad_ord_adbookpsp: values[id].adAndOrderIndexes.join(TARGETING_VALUE_SEPARATOR),
|
|
451
468
|
hb_adid_c_adbookpsp: values[id].adIds.join(TARGETING_VALUE_SEPARATOR),
|
|
469
|
+
hb_ordid_adbookpsp: values[id].orderIds.join(TARGETING_VALUE_SEPARATOR),
|
|
452
470
|
};
|
|
453
|
-
}
|
|
454
|
-
|
|
471
|
+
})
|
|
455
472
|
return targetingMap;
|
|
456
473
|
}
|
|
457
474
|
|
|
@@ -6,7 +6,7 @@ const VERSION = '1.0';
|
|
|
6
6
|
|
|
7
7
|
export const spec = {
|
|
8
8
|
code: 'adhash',
|
|
9
|
-
url: 'https://bidder.adhash.
|
|
9
|
+
url: 'https://bidder.adhash.com/rtb?version=' + VERSION + '&prebid=true',
|
|
10
10
|
supportedMediaTypes: [ BANNER ],
|
|
11
11
|
|
|
12
12
|
isBidRequestValid: (bid) => {
|
|
@@ -37,7 +37,7 @@ export const spec = {
|
|
|
37
37
|
var size = validBidRequests[i].sizes[index].join('x');
|
|
38
38
|
bidRequests.push({
|
|
39
39
|
method: 'POST',
|
|
40
|
-
url: url,
|
|
40
|
+
url: url + '&publisher=' + validBidRequests[i].params.publisherId,
|
|
41
41
|
bidRequest: validBidRequests[i],
|
|
42
42
|
data: {
|
|
43
43
|
timezone: new Date().getTimezoneOffset() / 60,
|
|
@@ -87,7 +87,7 @@ export const spec = {
|
|
|
87
87
|
cpm: responseBody.creatives[0].costEUR,
|
|
88
88
|
ad:
|
|
89
89
|
`<div id="${oneTimeId}"></div>
|
|
90
|
-
<script src="https://bidder.adhash.
|
|
90
|
+
<script src="https://bidder.adhash.com/static/scripts/creative.min.js"></script>
|
|
91
91
|
<script>callAdvertiser(${bidderResponse},['${oneTimeId}'],${requestData},${publisherURL})</script>`,
|
|
92
92
|
width: request.bidRequest.sizes[0][0],
|
|
93
93
|
height: request.bidRequest.sizes[0][1],
|