prebid.js 7.35.0 → 7.36.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/.devcontainer/Dockerfile +2 -0
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/admaruBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/aidemBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/aolBidAdapter.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/brightcomBidAdapter.js +1 -1
- package/dist/brightcomSSPBidAdapter.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/cwireBidAdapter.js +1 -1
- package/dist/dependencies.json +3 -0
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.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/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/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/limelightDigitalBidAdapter.js +1 -1
- package/dist/liveIntentIdSystem.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/mediakeysBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/neuwoRtdProvider.js +1 -0
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +132 -129
- 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/scatteredBidAdapter.js +1 -0
- 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/sirdataRtdProvider.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/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/uid2IdSystem.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/integrationExamples/gpt/neuwoRtdProvider_example.html +190 -0
- package/modules/33acrossBidAdapter.js +13 -4
- package/modules/admaruBidAdapter.js +19 -1
- package/modules/aidemBidAdapter.js +90 -65
- package/modules/aidemBidAdapter.md +10 -7
- package/modules/ajaBidAdapter.js +6 -1
- package/modules/amxIdSystem.md +2 -10
- package/modules/aolBidAdapter.js +1 -1
- package/modules/appnexusBidAdapter.js +45 -48
- package/modules/brightcomBidAdapter.js +1 -0
- package/modules/brightcomSSPBidAdapter.js +323 -0
- package/modules/brightcomSSPBidAdapter.md +46 -0
- package/modules/feedadBidAdapter.js +35 -15
- package/modules/fpdModule/index.md +5 -2
- package/modules/freewheel-sspBidAdapter.js +5 -1
- package/modules/gridBidAdapter.js +3 -1
- package/modules/ixBidAdapter.js +318 -175
- package/modules/limelightDigitalBidAdapter.js +6 -1
- package/modules/limelightDigitalBidAdapter.md +12 -2
- package/modules/liveIntentIdSystem.js +1 -1
- package/modules/neuwoRtdProvider.js +171 -0
- package/modules/neuwoRtdProvider.md +40 -0
- package/modules/nexx360BidAdapter.js +1 -1
- package/modules/pubmaticBidAdapter.js +4 -0
- package/modules/scatteredBidAdapter.js +72 -0
- package/modules/scatteredBidAdapter.md +36 -0
- package/modules/sirdataRtdProvider.js +262 -284
- package/modules/smartxBidAdapter.js +2 -0
- package/modules/smilewantedBidAdapter.js +5 -0
- package/modules/topicsFpdModule.md +62 -0
- package/modules/userId/eids.js +1 -1
- package/modules/vidazooBidAdapter.js +3 -1
- package/modules/yahoosspBidAdapter.js +1 -1
- package/package.json +2 -2
- package/test/spec/modules/33acrossBidAdapter_spec.js +51 -18
- package/test/spec/modules/admaruBidAdapter_spec.js +48 -0
- package/test/spec/modules/aidemBidAdapter_spec.js +77 -10
- package/test/spec/modules/ajaBidAdapter_spec.js +21 -1
- package/test/spec/modules/aolBidAdapter_spec.js +2 -2
- package/test/spec/modules/appnexusBidAdapter_spec.js +123 -16
- package/test/spec/modules/brightcomSSPBidAdapter_spec.js +411 -0
- package/test/spec/modules/eids_spec.js +1 -1
- package/test/spec/modules/feedadBidAdapter_spec.js +47 -77
- package/test/spec/modules/freewheel-sspBidAdapter_spec.js +1 -1
- package/test/spec/modules/ixBidAdapter_spec.js +24 -54
- package/test/spec/modules/limelightDigitalBidAdapter_spec.js +35 -5
- package/test/spec/modules/neuwoRtdProvider_spec.js +123 -0
- package/test/spec/modules/pubmaticBidAdapter_spec.js +15 -0
- package/test/spec/modules/scatteredBidAdapter_spec.js +210 -0
- package/test/spec/modules/sirdataRtdProvider_spec.js +116 -22
- package/test/spec/modules/smilewantedBidAdapter_spec.js +54 -3
- package/test/spec/modules/tripleliftBidAdapter_spec.js +2 -2
- package/test/spec/modules/userId_spec.js +1 -1
- package/test/spec/modules/vidazooBidAdapter_spec.js +4 -1
- package/test/spec/modules/yahoosspBidAdapter_spec.js +1 -1
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import { triggerPixel, logError } from '../src/utils.js';
|
|
8
8
|
import { ajaxBuilder } from '../src/ajax.js';
|
|
9
9
|
import { submodule } from '../src/hook.js';
|
|
10
|
-
import { LiveConnect } from 'live-connect-js
|
|
10
|
+
import { LiveConnect } from 'live-connect-js'; // eslint-disable-line prebid/validate-imports
|
|
11
11
|
import { gdprDataHandler, uspDataHandler } from '../src/adapterManager.js';
|
|
12
12
|
import { getStorageManager } from '../src/storageManager.js';
|
|
13
13
|
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { deepAccess, deepSetValue, generateUUID, logError, logInfo, mergeDeep } from '../src/utils.js';
|
|
2
|
+
import { getRefererInfo } from '../src/refererDetection.js';
|
|
3
|
+
import { ajax } from '../src/ajax.js';
|
|
4
|
+
import { submodule } from '../src/hook.js';
|
|
5
|
+
import * as events from '../src/events.js';
|
|
6
|
+
import CONSTANTS from '../src/constants.json';
|
|
7
|
+
|
|
8
|
+
export const DATA_PROVIDER = 'neuwo.ai';
|
|
9
|
+
const SEGTAX_IAB = 6 // IAB - Content Taxonomy version 2
|
|
10
|
+
const CATTAX_IAB = 6 // IAB Tech Lab Content Taxonomy 2.2
|
|
11
|
+
const RESPONSE_IAB_TIER_1 = 'marketing_categories.iab_tier_1'
|
|
12
|
+
const RESPONSE_IAB_TIER_2 = 'marketing_categories.iab_tier_2'
|
|
13
|
+
|
|
14
|
+
function init(config = {}, userConsent = '') {
|
|
15
|
+
config.params = config.params || {}
|
|
16
|
+
// ignore module if publicToken is missing (module setup failure)
|
|
17
|
+
if (!config.params.publicToken) {
|
|
18
|
+
logError('publicToken missing', 'NeuwoRTDModule', 'config.params.publicToken')
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function getBidRequestData(reqBidsConfigObj, callback, config, userConsent) {
|
|
25
|
+
config.params = config.params || {};
|
|
26
|
+
logInfo('NeuwoRTDModule', 'starting getBidRequestData')
|
|
27
|
+
|
|
28
|
+
const wrappedArgUrl = encodeURIComponent(config.params.argUrl || getRefererInfo().page);
|
|
29
|
+
const url = 'https://m1apidev.neuwo.ai/edge/GetAiTopics?' + [
|
|
30
|
+
'token=' + config.params.publicToken,
|
|
31
|
+
'lang=en',
|
|
32
|
+
'url=' + wrappedArgUrl
|
|
33
|
+
].join('&')
|
|
34
|
+
const billingId = generateUUID();
|
|
35
|
+
|
|
36
|
+
const success = (responseContent) => {
|
|
37
|
+
logInfo('NeuwoRTDModule', 'GetAiTopics: response', responseContent)
|
|
38
|
+
try {
|
|
39
|
+
const jsonContent = JSON.parse(responseContent);
|
|
40
|
+
if (jsonContent.marketing_categories) {
|
|
41
|
+
events.emit(CONSTANTS.EVENTS.BILLABLE_EVENT, { type: 'request', billingId, vendor: neuwoRtdModule.name })
|
|
42
|
+
}
|
|
43
|
+
injectTopics(jsonContent, reqBidsConfigObj, billingId)
|
|
44
|
+
} catch (ex) {
|
|
45
|
+
logError('NeuwoRTDModule', 'Response to JSON parse error', ex)
|
|
46
|
+
}
|
|
47
|
+
callback()
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const error = (err) => {
|
|
51
|
+
logError('xhr error', null, err);
|
|
52
|
+
callback()
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
ajax(url, {success, error}, null, {
|
|
56
|
+
// could assume Origin header is set, or
|
|
57
|
+
// customHeaders: { 'Origin': 'Origin' }
|
|
58
|
+
})
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function addFragment(base, path, addition) {
|
|
62
|
+
const container = {}
|
|
63
|
+
deepSetValue(container, path, addition)
|
|
64
|
+
mergeDeep(base, container)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Concatenate a base array and an array within an object
|
|
69
|
+
* non-array bases will be arrays, non-arrays at object key will be discarded
|
|
70
|
+
* @param {array} base base array to add to
|
|
71
|
+
* @param {object} source object to get an array from
|
|
72
|
+
* @param {string} key dot-notated path to array within object
|
|
73
|
+
* @returns base + source[key] if that's an array
|
|
74
|
+
*/
|
|
75
|
+
function combineArray(base, source, key) {
|
|
76
|
+
if (Array.isArray(base) === false) base = []
|
|
77
|
+
const addition = deepAccess(source, key, [])
|
|
78
|
+
if (Array.isArray(addition)) return base.concat(addition)
|
|
79
|
+
else return base
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export function injectTopics(topics, bidsConfig) {
|
|
83
|
+
topics = topics || {}
|
|
84
|
+
|
|
85
|
+
// join arrays of IAB category details to single array
|
|
86
|
+
const combinedTiers = combineArray(
|
|
87
|
+
combineArray([], topics, RESPONSE_IAB_TIER_1),
|
|
88
|
+
topics, RESPONSE_IAB_TIER_2)
|
|
89
|
+
|
|
90
|
+
const segment = pickSegments(combinedTiers)
|
|
91
|
+
// effectively gets topics.marketing_categories.iab_tier_1, topics.marketing_categories.iab_tier_2
|
|
92
|
+
// used as FPD segments content
|
|
93
|
+
|
|
94
|
+
const IABSegments = {
|
|
95
|
+
name: DATA_PROVIDER,
|
|
96
|
+
ext: { segtax: SEGTAX_IAB },
|
|
97
|
+
segment
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
addFragment(bidsConfig.ortb2Fragments.global, 'site.content.data', [IABSegments])
|
|
101
|
+
|
|
102
|
+
// upgrade category taxonomy to IAB 2.2, inject result to page categories
|
|
103
|
+
if (segment.length > 0) {
|
|
104
|
+
addFragment(bidsConfig.ortb2Fragments.global, 'site.cattax', CATTAX_IAB)
|
|
105
|
+
addFragment(bidsConfig.ortb2Fragments.global, 'site.pagecat', segment.map(s => s.id))
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
logInfo('NeuwoRTDModule', 'injectTopics: post-injection bidsConfig', bidsConfig)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* eslint-disable object-property-newline */
|
|
112
|
+
const D_IAB_ID = { // Content Taxonomy version 2.0 final release November 2017 [sic] (Taxonomy ID Mapping, IAB versions 2.0 - 2.2)
|
|
113
|
+
'IAB19-1': '603', 'IAB6-1': '193', 'IAB5-2': '133', 'IAB20-1': '665', 'IAB20-2': '656', 'IAB23-2': '454', 'IAB3-2': '102', 'IAB20-3': '672', 'IAB8-5': '211',
|
|
114
|
+
'IAB8-18': '211', 'IAB7-4': '288', 'IAB7-5': '233', 'IAB17-12': '484', 'IAB19-3': '608', 'IAB21-1': '442', 'IAB9-2': '248', 'IAB15-1': '456', 'IAB9-17': '265', 'IAB20-4': '658',
|
|
115
|
+
'IAB2-3': '30', 'IAB2-1': '32', 'IAB17-1': '518', 'IAB2-2': '34', 'IAB2': '1', 'IAB8-2': '215', 'IAB17-2': '545', 'IAB17-26': '547', 'IAB9-3': '249', 'IAB18-1': '553', 'IAB20-5': '674',
|
|
116
|
+
'IAB15-2': '465', 'IAB3-3': '119', 'IAB16-2': '423', 'IAB9-4': '259', 'IAB9-5': '270', 'IAB18-2': '574', 'IAB17-4': '549', 'IAB7-33': '312', 'IAB1-1': '42', 'IAB17-5': '485', 'IAB23-3': '458',
|
|
117
|
+
'IAB20-6': '675', 'IAB3': '53', 'IAB20-7': '676', 'IAB19-5': '633', 'IAB20-9': '677', 'IAB9-6': '250', 'IAB17-6': '499', 'IAB2-4': '25', 'IAB9-7': '271', 'IAB4-11': '125', 'IAB4-1': '126',
|
|
118
|
+
'IAB4': '123', 'IAB16-3': '424', 'IAB2-5': '18', 'IAB17-7': '486', 'IAB15-3': '466', 'IAB23-5': '459', 'IAB9-9': '260', 'IAB2-22': '19', 'IAB17-8': '500', 'IAB9-10': '261', 'IAB5-5': '137',
|
|
119
|
+
'IAB9-11': '262', 'IAB2-21': '3', 'IAB19-2': '610', 'IAB19-8': '600', 'IAB19-9': '601', 'IAB3-5': '121', 'IAB9-15': '264', 'IAB2-6': '8', 'IAB2-7': '9', 'IAB22-2': '474', 'IAB17-9': '491',
|
|
120
|
+
'IAB2-8': '10', 'IAB20-12': '678', 'IAB17-3': '492', 'IAB19-12': '611', 'IAB14-1': '188', 'IAB6-3': '194', 'IAB7-17': '316', 'IAB19-13': '612', 'IAB8-8': '217', 'IAB9-1': '205', 'IAB19-22': '613',
|
|
121
|
+
'IAB8-9': '218', 'IAB14-2': '189', 'IAB16-4': '425', 'IAB9-12': '251', 'IAB5': '132', 'IAB6-9': '190', 'IAB19-15': '623', 'IAB17-17': '496', 'IAB20-14': '659', 'IAB6': '186', 'IAB20-26': '666',
|
|
122
|
+
'IAB17-10': '510', 'IAB13-4': '396', 'IAB1-3': '201', 'IAB16-1': '426', 'IAB17-11': '511', 'IAB17-13': '511', 'IAB17-32': '511', 'IAB7-1': '225', 'IAB8': '210', 'IAB8-10': '219', 'IAB9-13': '266',
|
|
123
|
+
'IAB10-4': '275', 'IAB9-14': '273', 'IAB15-8': '469', 'IAB15-4': '470', 'IAB17-15': '512', 'IAB3-7': '77', 'IAB19-16': '614', 'IAB3-8': '78', 'IAB2-10': '22', 'IAB2-12': '22', 'IAB2-11': '11',
|
|
124
|
+
'IAB8-12': '221', 'IAB7-35': '223', 'IAB7-38': '223', 'IAB7-24': '296', 'IAB13-5': '411', 'IAB7-25': '234', 'IAB23-6': '460', 'IAB9': '239', 'IAB7-26': '235', 'IAB10': '274', 'IAB10-1': '278',
|
|
125
|
+
'IAB10-2': '279', 'IAB19-17': '634', 'IAB10-5': '280', 'IAB5-10': '145', 'IAB5-11': '146', 'IAB20-17': '667', 'IAB17-16': '497', 'IAB20-18': '668', 'IAB3-9': '55', 'IAB1-4': '440', 'IAB17-18': '514',
|
|
126
|
+
'IAB17-27': '515', 'IAB10-3': '282', 'IAB19-25': '618', 'IAB17-19': '516', 'IAB13-6': '398', 'IAB10-7': '283', 'IAB12-1': '382', 'IAB19-24': '624', 'IAB6-4': '195', 'IAB23-7': '461', 'IAB9-19': '252',
|
|
127
|
+
'IAB4-4': '128', 'IAB4-5': '127', 'IAB23-8': '462', 'IAB10-8': '284', 'IAB5-8': '147', 'IAB16-5': '427', 'IAB11-2': '383', 'IAB12-3': '384', 'IAB3-10': '57', 'IAB2-13': '23', 'IAB9-20': '241',
|
|
128
|
+
'IAB3-1': '58', 'IAB3-11': '58', 'IAB14-4': '191', 'IAB17-20': '520', 'IAB7-31': '228', 'IAB7-37': '301', 'IAB3-12': '107', 'IAB2-14': '13', 'IAB17-25': '519', 'IAB2-15': '27', 'IAB1-5': '324',
|
|
129
|
+
'IAB1-6': '338', 'IAB9-16': '243', 'IAB13-8': '412', 'IAB12-2': '385', 'IAB9-21': '253', 'IAB8-6': '222', 'IAB7-32': '229', 'IAB2-16': '14', 'IAB17-23': '521', 'IAB13-9': '413', 'IAB17-24': '501',
|
|
130
|
+
'IAB9-22': '254', 'IAB15-5': '244', 'IAB6-2': '196', 'IAB6-5': '197', 'IAB6-6': '198', 'IAB2-17': '24', 'IAB13-2': '405', 'IAB13': '391', 'IAB13-7': '410', 'IAB13-12': '415', 'IAB16': '422',
|
|
131
|
+
'IAB9-23': '255', 'IAB7-36': '236', 'IAB15-6': '471', 'IAB2-18': '15', 'IAB11-4': '386', 'IAB1-2': '432', 'IAB5-9': '139', 'IAB6-7': '305', 'IAB5-12': '149', 'IAB5-13': '134', 'IAB19-4': '631',
|
|
132
|
+
'IAB19-19': '631', 'IAB19-20': '631', 'IAB19-32': '631', 'IAB9-24': '245', 'IAB21': '441', 'IAB21-3': '451', 'IAB23': '453', 'IAB10-9': '276', 'IAB4-9': '130', 'IAB16-6': '429', 'IAB4-6': '129',
|
|
133
|
+
'IAB13-10': '416', 'IAB2-19': '28', 'IAB17-28': '525', 'IAB9-25': '272', 'IAB17-29': '527', 'IAB17-30': '227', 'IAB17-31': '530', 'IAB22-1': '481', 'IAB15': '464', 'IAB9-26': '246', 'IAB9-27': '256',
|
|
134
|
+
'IAB9-28': '267', 'IAB17-33': '502', 'IAB19-35': '627', 'IAB2-20': '4', 'IAB7-39': '307', 'IAB19-30': '605', 'IAB22': '473', 'IAB17-34': '503', 'IAB17-35': '531', 'IAB7-19': '309', 'IAB7-40': '310',
|
|
135
|
+
'IAB19-6': '635', 'IAB7-41': '237', 'IAB17-36': '504', 'IAB17-44': '533', 'IAB20-23': '662', 'IAB15-7': '472', 'IAB20-24': '671', 'IAB5-14': '136', 'IAB6-8': '199', 'IAB17': '483', 'IAB9-29': '263',
|
|
136
|
+
'IAB2-23': '5', 'IAB13-11': '414', 'IAB4-3': '395', 'IAB18': '552', 'IAB7-42': '311', 'IAB17-37': '505', 'IAB17-38': '537', 'IAB17-39': '538', 'IAB19-26': '636', 'IAB19': '596', 'IAB1-7': '640',
|
|
137
|
+
'IAB17-40': '539', 'IAB7-43': '293', 'IAB20': '653', 'IAB8-16': '212', 'IAB8-17': '213', 'IAB16-7': '430', 'IAB9-30': '680', 'IAB17-41': '541', 'IAB17-42': '542', 'IAB17-43': '506', 'IAB15-10': '390',
|
|
138
|
+
'IAB19-23': '607', 'IAB19-34': '629', 'IAB14-7': '165', 'IAB7-44': '231', 'IAB7-45': '238', 'IAB9-31': '257', 'IAB5-1': '135', 'IAB7-2': '301', 'IAB18-6': '580', 'IAB7-3': '297', 'IAB23-1': '453',
|
|
139
|
+
'IAB8-1': '214', 'IAB7-6': '312', 'IAB7-7': '300', 'IAB7-8': '301', 'IAB13-1': '410', 'IAB7-9': '301', 'IAB15-9': '465', 'IAB7-10': '313', 'IAB3-4': '602', 'IAB20-8': '660', 'IAB8-3': '214',
|
|
140
|
+
'IAB20-10': '660', 'IAB7-11': '314', 'IAB20-11': '660', 'IAB23-4': '459', 'IAB9-8': '270', 'IAB8-4': '214', 'IAB7-12': '306', 'IAB7-13': '313', 'IAB7-14': '287', 'IAB18-5': '575', 'IAB7-15': '315',
|
|
141
|
+
'IAB8-7': '214', 'IAB19-11': '616', 'IAB7-16': '289', 'IAB7-18': '301', 'IAB7-20': '290', 'IAB20-13': '659', 'IAB7-21': '313', 'IAB18-3': '579', 'IAB13-3': '52', 'IAB20-15': '659', 'IAB8-11': '214',
|
|
142
|
+
'IAB7-22': '318', 'IAB20-16': '659', 'IAB7-23': '313', 'IAB7': '223', 'IAB10-6': '634', 'IAB7-27': '318', 'IAB11-1': '388', 'IAB7-29': '318', 'IAB7-30': '304', 'IAB19-18': '619', 'IAB8-13': '214',
|
|
143
|
+
'IAB20-19': '659', 'IAB20-20': '657', 'IAB8-14': '214', 'IAB18-4': '565', 'IAB23-9': '459', 'IAB11': '379', 'IAB8-15': '214', 'IAB20-21': '662', 'IAB17-21': '492', 'IAB17-22': '518', 'IAB12': '379',
|
|
144
|
+
'IAB23-10': '453', 'IAB7-34': '301', 'IAB4-8': '395', 'IAB26-3': '608', 'IAB20-25': '151', 'IAB20-27': '659'
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export function convertSegment(segment) {
|
|
148
|
+
if (!segment) return {}
|
|
149
|
+
return {
|
|
150
|
+
id: D_IAB_ID[segment.id || segment.ID]
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* map array of objects to segments
|
|
156
|
+
* @param {Array[{ID: string}]} normalizable
|
|
157
|
+
* @returns array of IAB "segments"
|
|
158
|
+
*/
|
|
159
|
+
export function pickSegments(normalizable) {
|
|
160
|
+
if (Array.isArray(normalizable) === false) return []
|
|
161
|
+
return normalizable.map(convertSegment)
|
|
162
|
+
.filter(t => t.id)
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export const neuwoRtdModule = {
|
|
166
|
+
name: 'NeuwoRTDModule',
|
|
167
|
+
init,
|
|
168
|
+
getBidRequestData
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
submodule('realTimeData', neuwoRtdModule)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
Module Name: Neuwo Rtd Provider
|
|
4
|
+
Module Type: Rtd Provider
|
|
5
|
+
Maintainer: neuwo.ai
|
|
6
|
+
|
|
7
|
+
# Description
|
|
8
|
+
|
|
9
|
+
Real-time data provider for Neuwo AI. Contact neuwo.ai [https://neuwo.ai/contact-us] for more information.
|
|
10
|
+
|
|
11
|
+
# Configuration
|
|
12
|
+
|
|
13
|
+
```javascript
|
|
14
|
+
|
|
15
|
+
const neuwoDataProvider = {
|
|
16
|
+
name: 'NeuwoRTDModule',
|
|
17
|
+
params: {
|
|
18
|
+
publicToken: '<public token here>'
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
pbjs.setConfig({realTimeData: { dataProviders: [ neuwoDataProvider ]}})
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
# Testing
|
|
26
|
+
|
|
27
|
+
## Add development tools if necessary
|
|
28
|
+
|
|
29
|
+
- Install node for npm
|
|
30
|
+
- run in prebid.js source folder:
|
|
31
|
+
`npm ci`
|
|
32
|
+
`npm i -g gulp-cli`
|
|
33
|
+
|
|
34
|
+
## Serve
|
|
35
|
+
|
|
36
|
+
`gulp serve --modules=rtdModule,neuwoRtdProvider,appnexusBidAdapter`
|
|
37
|
+
|
|
38
|
+
- in your browser, navigate to:
|
|
39
|
+
|
|
40
|
+
`http://localhost:9999/integrationExamples/gpt/neuwoRtdProvider_example.html`
|
|
@@ -23,13 +23,13 @@ export const spec = {
|
|
|
23
23
|
{ code: 'revenuemaker' },
|
|
24
24
|
{ code: 'first-id', gvlid: 1178 },
|
|
25
25
|
{ code: 'adwebone' },
|
|
26
|
+
{ code: 'league-m', gvlid: 965 }
|
|
26
27
|
],
|
|
27
28
|
supportedMediaTypes: [BANNER, VIDEO],
|
|
28
29
|
isBidRequestValid,
|
|
29
30
|
buildRequests,
|
|
30
31
|
interpretResponse,
|
|
31
32
|
getUserSyncs,
|
|
32
|
-
// onBidWon,
|
|
33
33
|
};
|
|
34
34
|
|
|
35
35
|
registerBidder(spec);
|
|
@@ -1189,6 +1189,10 @@ export const spec = {
|
|
|
1189
1189
|
if (commonFpd.bcat) {
|
|
1190
1190
|
blockedIabCategories = blockedIabCategories.concat(commonFpd.bcat);
|
|
1191
1191
|
}
|
|
1192
|
+
// check if fpd ortb2 contains device property with sua object
|
|
1193
|
+
if (commonFpd.device?.sua) {
|
|
1194
|
+
payload.device.sua = commonFpd.device?.sua;
|
|
1195
|
+
}
|
|
1192
1196
|
|
|
1193
1197
|
if (commonFpd.ext?.prebid?.bidderparams?.[bidderRequest.bidderCode]?.acat) {
|
|
1194
1198
|
const acatParams = commonFpd.ext.prebid.bidderparams[bidderRequest.bidderCode].acat;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// jshint esversion: 6, es3: false, node: true
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
5
|
+
import { BANNER } from '../src/mediaTypes.js';
|
|
6
|
+
import { deepAccess, logInfo } from '../src/utils.js';
|
|
7
|
+
import { ortbConverter } from '../libraries/ortbConverter/converter.js';
|
|
8
|
+
|
|
9
|
+
const BIDDER_CODE = 'scattered';
|
|
10
|
+
const GVLID = 1179;
|
|
11
|
+
export const converter = ortbConverter({
|
|
12
|
+
context: {
|
|
13
|
+
mediaType: BANNER,
|
|
14
|
+
ttl: 360,
|
|
15
|
+
netRevenue: true
|
|
16
|
+
}
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
export const spec = {
|
|
20
|
+
code: BIDDER_CODE,
|
|
21
|
+
gvlid: GVLID,
|
|
22
|
+
supportedMediaTypes: [BANNER],
|
|
23
|
+
|
|
24
|
+
// 1.
|
|
25
|
+
isBidRequestValid: function (bid) {
|
|
26
|
+
const bidderDomain = deepAccess(bid, 'params.bidderDomain')
|
|
27
|
+
if (bidderDomain === undefined || bidderDomain === '') {
|
|
28
|
+
return false
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const sizes = deepAccess(bid, 'mediaTypes.banner.sizes')
|
|
32
|
+
if (sizes === undefined || sizes.length < 1) {
|
|
33
|
+
return false
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return true
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
// 2.
|
|
40
|
+
buildRequests: function (bidRequests, bidderRequest) {
|
|
41
|
+
return {
|
|
42
|
+
method: 'POST',
|
|
43
|
+
url: 'https://' + getKeyOnAny(bidRequests, 'params.bidderDomain'),
|
|
44
|
+
data: converter.toORTB({ bidderRequest, bidRequests }),
|
|
45
|
+
options: {
|
|
46
|
+
contentType: 'application/json'
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
// 3.
|
|
52
|
+
interpretResponse: function (response, request) {
|
|
53
|
+
if (!response.body) return;
|
|
54
|
+
return converter.fromORTB({ response: response.body, request: request.data }).bids;
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
// 4
|
|
58
|
+
onBidWon: function (bid) {
|
|
59
|
+
logInfo('onBidWon', bid)
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function getKeyOnAny(collection, key) {
|
|
64
|
+
for (let i = 0; i < collection.length; i++) {
|
|
65
|
+
const result = deepAccess(collection[i], key);
|
|
66
|
+
if (result) {
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
registerBidder(spec);
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
Module Name: Scattered Adapter
|
|
5
|
+
Module Type: Bidder Adapter
|
|
6
|
+
Maintainer: office@scattered.pl
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
# Description
|
|
10
|
+
|
|
11
|
+
Module that connects to Scattered's demand sources.
|
|
12
|
+
It uses OpenRTB standard to communicate between the adapter and bidding servers.
|
|
13
|
+
|
|
14
|
+
# Test Parameters
|
|
15
|
+
|
|
16
|
+
```javascript
|
|
17
|
+
var adUnits = [
|
|
18
|
+
{
|
|
19
|
+
code: 'test-div',
|
|
20
|
+
mediaTypes: {
|
|
21
|
+
banner: {
|
|
22
|
+
sizes: [[300, 250]], // a display size
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
bids: [
|
|
26
|
+
{
|
|
27
|
+
bidder: "scattered",
|
|
28
|
+
params: {
|
|
29
|
+
bidderDomain: "prebid-test.scattered.eu/bid",
|
|
30
|
+
test: 0
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
];
|
|
36
|
+
```
|