prebid.js 7.35.0 → 7.37.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/discoveryBidAdapter.js +1 -1
- 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/incrxBidAdapter.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/livewrappedBidAdapter.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/mediagoBidAdapter.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/minutemediaplusBidAdapter.js +1 -0
- package/dist/neuwoRtdProvider.js +1 -0
- package/dist/nextMillenniumBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +141 -137
- 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/prebidServerBidAdapter.js +1 -1
- package/dist/proxistoreBidAdapter.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxaiAnalyticsAdapter.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/adagioBidAdapter.js +14 -14
- package/modules/adagioBidAdapter.md +3 -1
- 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/criteoBidAdapter.js +4 -5
- package/modules/cwireBidAdapter.md +9 -3
- package/modules/discoveryBidAdapter.js +22 -12
- 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/incrxBidAdapter.js +2 -0
- package/modules/ixBidAdapter.js +318 -175
- package/modules/kueezRtbBidAdapter.js +54 -20
- package/modules/limelightDigitalBidAdapter.js +6 -1
- package/modules/limelightDigitalBidAdapter.md +12 -2
- package/modules/liveIntentIdSystem.js +1 -1
- package/modules/livewrappedBidAdapter.js +28 -16
- package/modules/mediagoBidAdapter.js +22 -17
- package/modules/minutemediaplusBidAdapter.js +291 -0
- package/modules/minutemediaplusBidAdapter.md +35 -0
- package/modules/neuwoRtdProvider.js +171 -0
- package/modules/neuwoRtdProvider.md +40 -0
- package/modules/nextMillenniumBidAdapter.js +9 -1
- package/modules/nexx360BidAdapter.js +1 -1
- package/modules/prebidServerBidAdapter/ortbConverter.js +6 -0
- package/modules/proxistoreBidAdapter.js +2 -2
- package/modules/pubmaticBidAdapter.js +4 -0
- package/modules/pubxaiAnalyticsAdapter.js +2 -2
- 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/sonobiBidAdapter.js +1 -10
- package/modules/topicsFpdModule.md +62 -0
- package/modules/tripleliftBidAdapter.js +4 -0
- package/modules/userId/eids.js +1 -1
- package/modules/vidazooBidAdapter.js +3 -1
- package/modules/yahoosspBidAdapter.js +1 -1
- package/modules/yieldmoBidAdapter.js +1 -0
- package/package.json +2 -2
- package/src/adapterManager.js +30 -14
- package/src/utils.js +1 -1
- package/test/spec/modules/33acrossBidAdapter_spec.js +51 -18
- package/test/spec/modules/adagioBidAdapter_spec.js +2 -2
- 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/criteoBidAdapter_spec.js +24 -1
- 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/incrxBidAdapter_spec.js +4 -0
- package/test/spec/modules/ixBidAdapter_spec.js +24 -54
- package/test/spec/modules/kueezRtbBidAdapter_spec.js +63 -22
- package/test/spec/modules/limelightDigitalBidAdapter_spec.js +35 -5
- package/test/spec/modules/livewrappedBidAdapter_spec.js +267 -2
- package/test/spec/modules/minutemediaplusBidAdapter_spec.js +519 -0
- package/test/spec/modules/neuwoRtdProvider_spec.js +123 -0
- package/test/spec/modules/nextMillenniumBidAdapter_spec.js +11 -0
- package/test/spec/modules/prebidServerBidAdapter_spec.js +56 -0
- package/test/spec/modules/proxistoreBidAdapter_spec.js +2 -2
- package/test/spec/modules/pubmaticBidAdapter_spec.js +15 -0
- package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +3 -1
- 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/sonobiBidAdapter_spec.js +3 -25
- package/test/spec/modules/tripleliftBidAdapter_spec.js +9 -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
- package/test/spec/unit/core/adapterManager_spec.js +147 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
**Module Name:** MinuteMediaPlus Bidder Adapter
|
|
4
|
+
|
|
5
|
+
**Module Type:** Bidder Adapter
|
|
6
|
+
|
|
7
|
+
**Maintainer:** hb@minutemedia.com
|
|
8
|
+
|
|
9
|
+
# Description
|
|
10
|
+
|
|
11
|
+
Module that connects to MinuteMediaPlus's demand sources.
|
|
12
|
+
|
|
13
|
+
# Test Parameters
|
|
14
|
+
```js
|
|
15
|
+
var adUnits = [
|
|
16
|
+
{
|
|
17
|
+
code: 'test-ad',
|
|
18
|
+
sizes: [[300, 250]],
|
|
19
|
+
bids: [
|
|
20
|
+
{
|
|
21
|
+
bidder: 'mmplus',
|
|
22
|
+
params: {
|
|
23
|
+
cId: '562524b21b1c1f08117fc7f9',
|
|
24
|
+
pId: '59ac17c192832d0011283fe3',
|
|
25
|
+
bidFloor: 0.0001,
|
|
26
|
+
ext: {
|
|
27
|
+
param1: 'loremipsum',
|
|
28
|
+
param2: 'dolorsitamet'
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
];
|
|
35
|
+
```
|
|
@@ -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`
|
|
@@ -24,6 +24,7 @@ import { getRefererInfo } from '../src/refererDetection.js';
|
|
|
24
24
|
const BIDDER_CODE = 'nextMillennium';
|
|
25
25
|
const ENDPOINT = 'https://pbs.nextmillmedia.com/openrtb2/auction';
|
|
26
26
|
const TEST_ENDPOINT = 'https://test.pbs.nextmillmedia.com/openrtb2/auction';
|
|
27
|
+
const SYNC_ENDPOINT = 'https://cookies.nextmillmedia.com/sync?';
|
|
27
28
|
const REPORT_ENDPOINT = 'https://report2.hb.brainlyads.com/statistics/metric';
|
|
28
29
|
const TIME_TO_LIVE = 360;
|
|
29
30
|
const VIDEO_PARAMS = [
|
|
@@ -182,7 +183,7 @@ export const spec = {
|
|
|
182
183
|
height: bid.h,
|
|
183
184
|
creativeId: bid.adid,
|
|
184
185
|
currency: response.cur,
|
|
185
|
-
netRevenue:
|
|
186
|
+
netRevenue: true,
|
|
186
187
|
ttl: TIME_TO_LIVE,
|
|
187
188
|
meta: {
|
|
188
189
|
advertiserDomains: bid.adomain || []
|
|
@@ -231,6 +232,13 @@ export const spec = {
|
|
|
231
232
|
})
|
|
232
233
|
}
|
|
233
234
|
|
|
235
|
+
if (!pixels.length) {
|
|
236
|
+
let syncUrl = SYNC_ENDPOINT;
|
|
237
|
+
if (gdprConsent && gdprConsent.gdprApplies) syncUrl += 'gdpr=1&gdpr_consent=' + gdprConsent.consentString + '&';
|
|
238
|
+
if (uspConsent) syncUrl += 'us_privacy=' + uspConsent + '&';
|
|
239
|
+
if (syncOptions.iframeEnabled) pixels.push({type: 'iframe', url: syncUrl + 'type=iframe'});
|
|
240
|
+
if (syncOptions.pixelEnabled) pixels.push({type: 'image', url: syncUrl + 'type=image'});
|
|
241
|
+
}
|
|
234
242
|
return pixels;
|
|
235
243
|
},
|
|
236
244
|
|
|
@@ -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);
|
|
@@ -32,6 +32,12 @@ const PBS_CONVERTER = ortbConverter({
|
|
|
32
32
|
imp(buildImp, proxyBidRequest, context) {
|
|
33
33
|
Object.assign(context, proxyBidRequest.pbsData);
|
|
34
34
|
const imp = buildImp(proxyBidRequest, context);
|
|
35
|
+
(proxyBidRequest.bids || []).forEach(bid => {
|
|
36
|
+
if (bid.ortb2Imp && Object.keys(bid.ortb2Imp).length > 0) {
|
|
37
|
+
// set bidder-level imp attributes; see https://github.com/prebid/prebid-server/issues/2335
|
|
38
|
+
deepSetValue(imp, `ext.prebid.imp.${bid.bidder}`, bid.ortb2Imp);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
35
41
|
if (Object.values(SUPPORTED_MEDIA_TYPES).some(mtype => imp[mtype])) {
|
|
36
42
|
imp.secure = context.s2sBidRequest.s2sConfig.secure;
|
|
37
43
|
return imp;
|
|
@@ -3,9 +3,9 @@ import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
|
3
3
|
|
|
4
4
|
const BIDDER_CODE = 'proxistore';
|
|
5
5
|
const PROXISTORE_VENDOR_ID = 418;
|
|
6
|
-
const COOKIE_BASE_URL = 'https://
|
|
6
|
+
const COOKIE_BASE_URL = 'https://api.proxistore.com/v3/rtb/prebid/multi';
|
|
7
7
|
const COOKIE_LESS_URL =
|
|
8
|
-
'https://
|
|
8
|
+
'https://api.cookieless-proxistore.com/v3/rtb/prebid/multi';
|
|
9
9
|
|
|
10
10
|
function _createServerRequest(bidRequests, bidderRequest) {
|
|
11
11
|
var sizeIds = [];
|
|
@@ -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;
|
|
@@ -6,7 +6,7 @@ import CONSTANTS from '../src/constants.json';
|
|
|
6
6
|
|
|
7
7
|
const emptyUrl = '';
|
|
8
8
|
const analyticsType = 'endpoint';
|
|
9
|
-
const pubxaiAnalyticsVersion = 'v1.
|
|
9
|
+
const pubxaiAnalyticsVersion = 'v1.2.0';
|
|
10
10
|
const defaultHost = 'api.pbxai.com';
|
|
11
11
|
const auctionPath = '/analytics/auction';
|
|
12
12
|
const winningBidPath = '/analytics/bidwon';
|
|
@@ -154,7 +154,7 @@ function send(data, status) {
|
|
|
154
154
|
search: location.search
|
|
155
155
|
});
|
|
156
156
|
if (typeof data !== 'undefined' && typeof data.auctionInit !== 'undefined') {
|
|
157
|
-
data.pageDetail.
|
|
157
|
+
data.pageDetail.adUnits = data.auctionInit.adUnitCodes;
|
|
158
158
|
data.initOptions.auctionId = data.auctionInit.auctionId;
|
|
159
159
|
delete data.auctionInit;
|
|
160
160
|
|
|
@@ -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
|
+
```
|