prebid.js 7.24.0 → 7.26.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/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/admaticBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/beopBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/captifyRtdProvider.js +1 -0
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.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/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/discoveryBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.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/id5IdSystem.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/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/microadBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/nextMillenniumBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +154 -120
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.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/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smartytechBidAdapter.js +1 -0
- 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/tappxBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/viqeoBidAdapter.js +1 -0
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldlabBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspBidAdapter.js +1 -1
- package/dist/zeusPrimeRtdProvider.js +31 -0
- package/integrationExamples/gpt/captifyRtdProvider_example.html +167 -0
- package/modules/.submodules.json +3 -1
- package/modules/adagioBidAdapter.js +1 -1
- package/modules/admaticBidAdapter.js +108 -59
- package/modules/admaticBidAdapter.md +2 -2
- package/modules/beopBidAdapter.js +17 -2
- package/modules/captifyRtdProvider.js +146 -0
- package/modules/captifyRtdProvider.md +68 -0
- package/modules/concertBidAdapter.js +17 -3
- package/modules/conversantAnalyticsAdapter.md +12 -13
- package/modules/conversantBidAdapter.md +3 -3
- package/modules/discoveryBidAdapter.js +38 -17
- package/modules/discoveryBidAdapter.md +7 -6
- package/modules/gridBidAdapter.js +440 -22
- package/modules/kargoBidAdapter.js +14 -8
- package/modules/magniteAnalyticsAdapter.js +1 -1
- package/modules/microadBidAdapter.js +22 -11
- package/modules/nextMillenniumBidAdapter.js +20 -24
- package/modules/oguryBidAdapter.js +5 -2
- package/modules/pubmaticBidAdapter.js +1 -1
- package/modules/seedtagBidAdapter.js +9 -4
- package/modules/smartadserverBidAdapter.js +6 -2
- package/modules/smartxBidAdapter.js +10 -7
- package/modules/smartytechBidAdapter.js +78 -0
- package/modules/smartytechBidAdapter.md +44 -0
- package/modules/taboolaBidAdapter.js +3 -3
- package/modules/taboolaBidAdapter.md +0 -2
- package/modules/tappxBidAdapter.js +21 -6
- package/modules/ttdBidAdapter.js +4 -3
- package/modules/userId/index.js +1 -1
- package/modules/vidazooBidAdapter.js +29 -3
- package/modules/viqeoBidAdapter.js +180 -0
- package/modules/viqeoBidAdapter.md +56 -0
- package/modules/yieldlabBidAdapter.js +19 -8
- package/modules/yieldmoBidAdapter.js +22 -8
- package/modules/yieldoneBidAdapter.js +60 -8
- package/modules/yieldoneBidAdapter.md +109 -9
- package/modules/zeta_global_sspBidAdapter.js +4 -0
- package/modules/zeusPrimeRtdProvider.js +357 -0
- package/modules/zeusPrimeRtdProvider.md +60 -0
- package/package.json +1 -1
- package/src/adloader.js +0 -1
- package/test/spec/modules/adagioBidAdapter_spec.js +2 -2
- package/test/spec/modules/admaticBidAdapter_spec.js +262 -3
- package/test/spec/modules/beopBidAdapter_spec.js +52 -0
- package/test/spec/modules/captifyRtdProvider_spec.js +253 -0
- package/test/spec/modules/concertBidAdapter_spec.js +26 -15
- package/test/spec/modules/discoveryBidAdapter_spec.js +9 -8
- package/test/spec/modules/gridBidAdapter_spec.js +289 -1
- package/test/spec/modules/kargoBidAdapter_spec.js +76 -4
- package/test/spec/modules/magniteAnalyticsAdapter_spec.js +20 -0
- package/test/spec/modules/microadBidAdapter_spec.js +48 -0
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +4 -3
- package/test/spec/modules/oguryBidAdapter_spec.js +27 -5
- package/test/spec/modules/pubmaticBidAdapter_spec.js +2 -2
- package/test/spec/modules/seedtagBidAdapter_spec.js +34 -10
- package/test/spec/modules/smartadserverBidAdapter_spec.js +80 -0
- package/test/spec/modules/smartxBidAdapter_spec.js +32 -0
- package/test/spec/modules/smartytechBidAdapter_spec.js +162 -0
- package/test/spec/modules/taboolaBidAdapter_spec.js +0 -77
- package/test/spec/modules/ttdBidAdapter_spec.js +13 -0
- package/test/spec/modules/vidazooBidAdapter_spec.js +1 -0
- package/test/spec/modules/viqeoBidAdapter_spec.js +124 -0
- package/test/spec/modules/yieldlabBidAdapter_spec.js +125 -0
- package/test/spec/modules/yieldmoBidAdapter_spec.js +3 -4
- package/test/spec/modules/yieldoneBidAdapter_spec.js +30 -6
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +16 -1
- package/test/spec/modules/zeusPrimeRtdProvider_spec.js +410 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module adds Zeus Insights For Publishers (ZIP) provider to the real time data module
|
|
3
|
+
* The {@link module:modules/realTimeData} module is required
|
|
4
|
+
*
|
|
5
|
+
* This module will request the article topics for the current page and add them as page keyvalues
|
|
6
|
+
* for the ad requests.
|
|
7
|
+
*
|
|
8
|
+
* @module modules/zeusInsightsForPublishersRtdProvider
|
|
9
|
+
* @requires module:modules/realTimeData
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { logInfo, logError, logWarn, logMessage } from '../src/utils.js'
|
|
13
|
+
import { submodule } from '../src/hook.js'
|
|
14
|
+
import { ajaxBuilder } from '../src/ajax.js'
|
|
15
|
+
|
|
16
|
+
class Logger {
|
|
17
|
+
get showDebug() {
|
|
18
|
+
if (this._showDebug === true || this._showDebug === false) {
|
|
19
|
+
return this._showDebug
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return window.zeusPrime?.debug || false
|
|
23
|
+
}
|
|
24
|
+
set showDebug(shouldShow) {
|
|
25
|
+
this._showDebug = shouldShow
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
get error() {
|
|
29
|
+
return logError.bind(this, 'zeusPrimeRtdProvider: ')
|
|
30
|
+
}
|
|
31
|
+
get warn() {
|
|
32
|
+
return logWarn.bind(this, 'zeusPrimeRtdProvider: ')
|
|
33
|
+
}
|
|
34
|
+
get info() {
|
|
35
|
+
return logInfo.bind(this, 'zeusPrimeRtdProvider: ')
|
|
36
|
+
}
|
|
37
|
+
get debug() {
|
|
38
|
+
if (this.showDebug) {
|
|
39
|
+
return logMessage.bind(this, 'zeusPrimeRtdProvider: ')
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return () => {}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
var logger = new Logger()
|
|
47
|
+
|
|
48
|
+
function loadCommandQueue() {
|
|
49
|
+
window.zeusPrime = window.zeusPrime || { cmd: [] }
|
|
50
|
+
const queue = [...window.zeusPrime.cmd]
|
|
51
|
+
|
|
52
|
+
window.zeusPrime.cmd = []
|
|
53
|
+
window.zeusPrime.cmd.push = (callback) => {
|
|
54
|
+
callback(window.zeusPrime)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
queue.forEach((callback) => callback(window.zeusPrime))
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function markStatusComplete(key) {
|
|
61
|
+
const status = window?.zeusPrime?.status
|
|
62
|
+
if (status) {
|
|
63
|
+
status[key] = true
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function createStatus() {
|
|
68
|
+
if (window.zeusPrime && !window.zeusPrime.status) {
|
|
69
|
+
Object.defineProperty(window.zeusPrime, 'status', {
|
|
70
|
+
enumerable: false,
|
|
71
|
+
value: {
|
|
72
|
+
initComplete: false,
|
|
73
|
+
primeKeyValueSet: false,
|
|
74
|
+
insightsReqSent: false,
|
|
75
|
+
insightsReqReceived: false,
|
|
76
|
+
insightsKeyValueSet: false,
|
|
77
|
+
scriptComplete: false,
|
|
78
|
+
},
|
|
79
|
+
})
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function loadPrimeQueryParams() {
|
|
84
|
+
try {
|
|
85
|
+
const params = new URLSearchParams(window.location.search)
|
|
86
|
+
params.forEach((paramValue, paramKey) => {
|
|
87
|
+
if (!paramKey.startsWith('zeus_prime_')) {
|
|
88
|
+
return
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
let key = paramKey.replace('zeus_prime_', '')
|
|
92
|
+
let value = paramValue.toLowerCase()
|
|
93
|
+
|
|
94
|
+
if (value === 'true' || value === '1') {
|
|
95
|
+
value = true
|
|
96
|
+
} else if (value === 'false' || value === '0') {
|
|
97
|
+
value = false
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
window.zeusPrime[key] = value
|
|
101
|
+
})
|
|
102
|
+
} catch (_) {}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const DEFAULT_API = 'https://insights.zeustechnology.com'
|
|
106
|
+
|
|
107
|
+
function init(gamId = null, options = {}) {
|
|
108
|
+
window.zeusPrime = window.zeusPrime || { cmd: [] }
|
|
109
|
+
|
|
110
|
+
window.zeusPrime.gamId = gamId || options.gamId || window.zeusPrime.gamId || undefined
|
|
111
|
+
window.zeusPrime.api = DEFAULT_API
|
|
112
|
+
window.zeusPrime.hostname = options.hostname || window.location?.hostname || ''
|
|
113
|
+
window.zeusPrime.pathname = options.pathname || window.location?.pathname || ''
|
|
114
|
+
window.zeusPrime.pageUrl = `${window.zeusPrime.hostname}${window.zeusPrime.pathname}`
|
|
115
|
+
window.zeusPrime.pageHash = options.pageHash || null
|
|
116
|
+
window.zeusPrime.debug = window.zeusPrime.debug || options.debug === true || false
|
|
117
|
+
window.zeusPrime.disabled = window.zeusPrime.disabled || options.disabled === true || false
|
|
118
|
+
|
|
119
|
+
loadPrimeQueryParams()
|
|
120
|
+
|
|
121
|
+
logger.showDebug = window.zeusPrime.debug
|
|
122
|
+
|
|
123
|
+
createStatus()
|
|
124
|
+
markStatusComplete('initComplete')
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function setTargeting() {
|
|
128
|
+
const { gamId, hostname } = window.zeusPrime
|
|
129
|
+
|
|
130
|
+
if (typeof gamId !== 'string') {
|
|
131
|
+
throw new Error(`window.zeusPrime.gamId must be a string. Received: ${String(gamId)}`)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
addKeyValueToGoogletag(`zeus_${gamId}`, hostname)
|
|
135
|
+
logger.debug(`Setting zeus_${gamId}=${hostname}`)
|
|
136
|
+
markStatusComplete('primeKeyValueSet')
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function setPrimeAsDisabled() {
|
|
140
|
+
addKeyValueToGoogletag('zeus_prime', 'false')
|
|
141
|
+
logger.debug('Disabling prime; Setting key-value zeus_prime to false')
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function addKeyValueToGoogletag(key, value) {
|
|
145
|
+
window.googletag = window.googletag || { cmd: [] }
|
|
146
|
+
window.googletag.cmd.push(function () {
|
|
147
|
+
window.googletag.pubads().setTargeting(key, value)
|
|
148
|
+
})
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function isInsightsPage(pathname = '') {
|
|
152
|
+
const NOT_SECTIONS = [
|
|
153
|
+
{
|
|
154
|
+
test: /\/search/,
|
|
155
|
+
type: 'search',
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
test: /\/author/,
|
|
159
|
+
type: 'author',
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
test: /\/event/,
|
|
163
|
+
type: 'event',
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
test: /\/homepage/,
|
|
167
|
+
type: 'front',
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
test: /^\/?$/,
|
|
171
|
+
type: 'front',
|
|
172
|
+
},
|
|
173
|
+
]
|
|
174
|
+
|
|
175
|
+
const typeObj = NOT_SECTIONS.find((pg) => pathname.match(pg.test))
|
|
176
|
+
return typeObj === undefined
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
async function getUrlHash(canonical) {
|
|
180
|
+
try {
|
|
181
|
+
const buf = await window.crypto.subtle.digest(
|
|
182
|
+
'SHA-1',
|
|
183
|
+
new TextEncoder('utf-8').encode(canonical)
|
|
184
|
+
)
|
|
185
|
+
const hashed = Array.prototype.map
|
|
186
|
+
.call(new Uint8Array(buf), (x) => `00${x.toString(16)}`.slice(-2))
|
|
187
|
+
.join('')
|
|
188
|
+
|
|
189
|
+
return hashed
|
|
190
|
+
} catch (e) {
|
|
191
|
+
logger.error('Failed to load hash', e.message)
|
|
192
|
+
logger.debug('Exception', e)
|
|
193
|
+
return ''
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
async function sendPrebidRequest(url) {
|
|
198
|
+
return new Promise((resolve, reject) => {
|
|
199
|
+
const ajax = ajaxBuilder()
|
|
200
|
+
ajax(url, {
|
|
201
|
+
success: (responseText, response) => {
|
|
202
|
+
resolve({
|
|
203
|
+
...response,
|
|
204
|
+
status: response.status,
|
|
205
|
+
json: () => JSON.parse(responseText),
|
|
206
|
+
})
|
|
207
|
+
},
|
|
208
|
+
|
|
209
|
+
error: (responseText, response) => {
|
|
210
|
+
if (!response.status) {
|
|
211
|
+
reject(response)
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
let json = responseText
|
|
215
|
+
if (responseText) {
|
|
216
|
+
try {
|
|
217
|
+
json = JSON.parse(responseText)
|
|
218
|
+
} catch (_) {
|
|
219
|
+
json = null
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
resolve({
|
|
224
|
+
status: response.status,
|
|
225
|
+
json: () => json || null,
|
|
226
|
+
responseValue: json,
|
|
227
|
+
})
|
|
228
|
+
},
|
|
229
|
+
})
|
|
230
|
+
})
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
async function requestTopics() {
|
|
234
|
+
const { api, hostname, pageUrl } = window.zeusPrime
|
|
235
|
+
|
|
236
|
+
if (!window.zeusPrime.pageHash) {
|
|
237
|
+
window.zeusPrime.pageHash = await getUrlHash(pageUrl)
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
const pageHash = window.zeusPrime.pageHash
|
|
241
|
+
const zeusInsightsUrl = `${api}/${hostname}/${pageHash}?article_location=${pageUrl}`
|
|
242
|
+
|
|
243
|
+
logger.debug('Requesting topics', zeusInsightsUrl)
|
|
244
|
+
try {
|
|
245
|
+
markStatusComplete('insightsReqSent')
|
|
246
|
+
const response = await sendPrebidRequest(zeusInsightsUrl)
|
|
247
|
+
if (response.status === 200) {
|
|
248
|
+
logger.debug('topics found')
|
|
249
|
+
markStatusComplete('insightsReqReceived')
|
|
250
|
+
return await response.json()
|
|
251
|
+
} else if (
|
|
252
|
+
response.status === 204 ||
|
|
253
|
+
response.status < 200 ||
|
|
254
|
+
(response.status >= 300 && response.status <= 399)
|
|
255
|
+
) {
|
|
256
|
+
logger.debug('no topics found')
|
|
257
|
+
markStatusComplete('insightsReqReceived')
|
|
258
|
+
return null
|
|
259
|
+
} else {
|
|
260
|
+
logger.error(`Topics request returned error: ${response.status}`)
|
|
261
|
+
markStatusComplete('insightsReqReceived')
|
|
262
|
+
return null
|
|
263
|
+
}
|
|
264
|
+
} catch (e) {
|
|
265
|
+
logger.error('failed to request topics', e)
|
|
266
|
+
return null
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
function setTopicsTargeting(topics = []) {
|
|
271
|
+
if (topics.length === 0) {
|
|
272
|
+
return
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
window.googletag = window.googletag || { cmd: [] }
|
|
276
|
+
window.googletag.cmd.push(function () {
|
|
277
|
+
window.googletag.pubads().setTargeting('zeus_insights', topics)
|
|
278
|
+
})
|
|
279
|
+
|
|
280
|
+
markStatusComplete('insightsKeyValueSet')
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
async function startTopicsRequest() {
|
|
284
|
+
if (isInsightsPage(window.zeusPrime.pathname)) {
|
|
285
|
+
const response = await requestTopics()
|
|
286
|
+
if (response) {
|
|
287
|
+
setTopicsTargeting(response?.topics)
|
|
288
|
+
}
|
|
289
|
+
} else {
|
|
290
|
+
logger.debug('This page is not eligible for topics, request will be skipped')
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
async function run(gamId, options = {}) {
|
|
295
|
+
logger.showDebug = options.debug || false
|
|
296
|
+
|
|
297
|
+
try {
|
|
298
|
+
init(gamId, options)
|
|
299
|
+
loadCommandQueue()
|
|
300
|
+
|
|
301
|
+
if (window.zeusPrime.disabled) {
|
|
302
|
+
setPrimeAsDisabled()
|
|
303
|
+
} else {
|
|
304
|
+
setTargeting()
|
|
305
|
+
await startTopicsRequest()
|
|
306
|
+
}
|
|
307
|
+
} catch (e) {
|
|
308
|
+
logger.error('Failed to run.', e.message || e)
|
|
309
|
+
} finally {
|
|
310
|
+
markStatusComplete('scriptComplete')
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* @preserve
|
|
316
|
+
* Initializes the ZeusPrime RTD Submodule. The config provides the GamID for this
|
|
317
|
+
* site that is used to configure Prime.
|
|
318
|
+
* @param {object} config The Prebid configuration for this module.
|
|
319
|
+
* @param {object} config.params The parameters for this module.
|
|
320
|
+
* @param {string} config.params.gamId The Gam ID (or Network Code) in GAM for this site.
|
|
321
|
+
*/
|
|
322
|
+
function initModule(config) {
|
|
323
|
+
const { params } = config || {}
|
|
324
|
+
const { gamId, ...rest } = params || {}
|
|
325
|
+
run(gamId, rest)
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* @preserve
|
|
330
|
+
* @type {RtdSubmodule}
|
|
331
|
+
*/
|
|
332
|
+
const zeusPrimeSubmodule = {
|
|
333
|
+
/**
|
|
334
|
+
* @preserve
|
|
335
|
+
* The name of the plugin.
|
|
336
|
+
* @type {string}
|
|
337
|
+
*/
|
|
338
|
+
name: 'zeusPrime',
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* @preserve
|
|
342
|
+
* ZeusPrime use
|
|
343
|
+
*/
|
|
344
|
+
init: initModule,
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* @preserve
|
|
349
|
+
* Register the Sub Module.
|
|
350
|
+
*/
|
|
351
|
+
function registerSubModule() {
|
|
352
|
+
submodule('realTimeData', zeusPrimeSubmodule)
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
registerSubModule()
|
|
356
|
+
|
|
357
|
+
export { zeusPrimeSubmodule }
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
Module Name: Zeus Prime RTD Provider
|
|
4
|
+
Module Type: Rtd Provider
|
|
5
|
+
Maintainer: support@zeustechnology.com
|
|
6
|
+
|
|
7
|
+
## Description
|
|
8
|
+
|
|
9
|
+
The Zeus Prime RTD Provider provides integration of Zeus Prime onto sites with Prebid. This module will request information from Zeus Prime servers to add the page level targeting required for Prime into the customer's ad setup.
|
|
10
|
+
|
|
11
|
+
Zeus Prime runs as soon as the code is initialized, so it can retrieve the information required from the Zeus Prime server to create the targeting key-values. Zeus Prime will provide two page level key-values: `zeus_<yourGamId>` and `zeus_insights`. Zeus Prime provides contextual information about a pages content, and does not provide user information that could present privacy implications.
|
|
12
|
+
|
|
13
|
+
For more information and help with setting up Zeus Prime, see the [onboarding documentation site](https://onboarding.zeustechnology.com).
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
To use Zeus Prime, add `zeusPrimeRtdProvider` into your Prebid build:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
gulp build --modules=rtdModule,zeusPrimeRtdProvider
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
> Note that the global RTD module, `rtdModule`, is required for the Zeus Prime RTD module.
|
|
24
|
+
|
|
25
|
+
Once the code is included, configure Zeus Prime in your Prebid configuration:
|
|
26
|
+
|
|
27
|
+
```javascript
|
|
28
|
+
pbjs.setConfig({
|
|
29
|
+
...,
|
|
30
|
+
realTimeData: {
|
|
31
|
+
dataProviders: [{
|
|
32
|
+
name: 'zeusPrime',
|
|
33
|
+
waitForIt: false,
|
|
34
|
+
params: {
|
|
35
|
+
gamId: '<yourGamId>'
|
|
36
|
+
}
|
|
37
|
+
}]
|
|
38
|
+
},
|
|
39
|
+
...
|
|
40
|
+
})
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Parameters
|
|
44
|
+
|
|
45
|
+
The parameters below describe the configuration object used to configure Zeus Prime.
|
|
46
|
+
|
|
47
|
+
| Name | Type | Description | Default |
|
|
48
|
+
|------------------------|----------|-----------------------------------------------------------------------------------------------|---------|
|
|
49
|
+
| name | String | This will always be `zeusPrime` | - |
|
|
50
|
+
| waitForIt | Boolean | Should be false since Zeus Prime runs on initial load and not during the bidding cycle. | `false` |
|
|
51
|
+
| params | Object | | - |
|
|
52
|
+
| params.gamId | String | The gamId or Google Ad Manager Network Code to access your Google Ad Manager instance. | - |
|
|
53
|
+
|
|
54
|
+
### `gamId` Parameter
|
|
55
|
+
|
|
56
|
+
Zeus Prime requires the gamId parameter, or the Google Ad Manager Network Code, to reference your account. See the [Google documentation](https://support.google.com/admanager/answer/7674889?hl=en) to find out where you can retrieve the Network Code.
|
|
57
|
+
|
|
58
|
+
## Troubleshooting
|
|
59
|
+
|
|
60
|
+
For troubleshooting steps and guides to assist with verifying your Zeus Prime installation, see our [installation documentation](https://onboarding.zeustechnology.com/docs/installation).
|
package/package.json
CHANGED
package/src/adloader.js
CHANGED
|
@@ -400,7 +400,7 @@ describe('Adagio bid adapter', () => {
|
|
|
400
400
|
skipafter: 4,
|
|
401
401
|
minduration: 10,
|
|
402
402
|
maxduration: 30,
|
|
403
|
-
placement:
|
|
403
|
+
placement: 3,
|
|
404
404
|
protocols: [8]
|
|
405
405
|
}
|
|
406
406
|
}).build();
|
|
@@ -415,7 +415,7 @@ describe('Adagio bid adapter', () => {
|
|
|
415
415
|
skipafter: 4,
|
|
416
416
|
minduration: 10,
|
|
417
417
|
maxduration: 30,
|
|
418
|
-
placement:
|
|
418
|
+
placement: 3,
|
|
419
419
|
protocols: [8],
|
|
420
420
|
w: 300,
|
|
421
421
|
h: 250
|