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.
Files changed (229) hide show
  1. package/.devcontainer/Dockerfile +2 -0
  2. package/dist/33acrossBidAdapter.js +1 -1
  3. package/dist/33acrossIdSystem.js +1 -1
  4. package/dist/adagioBidAdapter.js +1 -1
  5. package/dist/adbookpspBidAdapter.js +1 -1
  6. package/dist/adgenerationBidAdapter.js +1 -1
  7. package/dist/admaruBidAdapter.js +1 -1
  8. package/dist/adrelevantisBidAdapter.js +1 -1
  9. package/dist/adtrgtmeBidAdapter.js +1 -1
  10. package/dist/adxcgBidAdapter.js +1 -1
  11. package/dist/adyoulikeBidAdapter.js +1 -1
  12. package/dist/aidemBidAdapter.js +1 -1
  13. package/dist/ajaBidAdapter.js +1 -1
  14. package/dist/amxBidAdapter.js +1 -1
  15. package/dist/amxIdSystem.js +1 -1
  16. package/dist/aolBidAdapter.js +1 -1
  17. package/dist/appierAnalyticsAdapter.js +1 -1
  18. package/dist/appnexusBidAdapter.js +1 -1
  19. package/dist/asoBidAdapter.js +1 -1
  20. package/dist/audiencerunBidAdapter.js +1 -1
  21. package/dist/axonixBidAdapter.js +1 -1
  22. package/dist/bidglassBidAdapter.js +1 -1
  23. package/dist/big-richmediaBidAdapter.js +1 -1
  24. package/dist/bluebillywigBidAdapter.js +1 -1
  25. package/dist/bridgewellBidAdapter.js +1 -1
  26. package/dist/brightMountainMediaBidAdapter.js +1 -1
  27. package/dist/brightcomBidAdapter.js +1 -1
  28. package/dist/brightcomSSPBidAdapter.js +1 -0
  29. package/dist/carodaBidAdapter.js +1 -1
  30. package/dist/chtnwBidAdapter.js +1 -1
  31. package/dist/concertBidAdapter.js +1 -1
  32. package/dist/connectadBidAdapter.js +1 -1
  33. package/dist/consumableBidAdapter.js +1 -1
  34. package/dist/conversantBidAdapter.js +1 -1
  35. package/dist/craftBidAdapter.js +1 -1
  36. package/dist/criteoBidAdapter.js +1 -1
  37. package/dist/cwireBidAdapter.js +1 -1
  38. package/dist/dependencies.json +3 -0
  39. package/dist/discoveryBidAdapter.js +1 -1
  40. package/dist/dspxBidAdapter.js +1 -1
  41. package/dist/eplanningBidAdapter.js +1 -1
  42. package/dist/feedadBidAdapter.js +1 -1
  43. package/dist/finativeBidAdapter.js +1 -1
  44. package/dist/freewheel-sspBidAdapter.js +1 -1
  45. package/dist/glimpseBidAdapter.js +1 -1
  46. package/dist/gmosspBidAdapter.js +1 -1
  47. package/dist/goldbachBidAdapter.js +1 -1
  48. package/dist/gridBidAdapter.js +1 -1
  49. package/dist/gridNMBidAdapter.js +1 -1
  50. package/dist/gumgumBidAdapter.js +1 -1
  51. package/dist/h12mediaBidAdapter.js +1 -1
  52. package/dist/id5IdSystem.js +1 -1
  53. package/dist/impactifyBidAdapter.js +1 -1
  54. package/dist/improvedigitalBidAdapter.js +1 -1
  55. package/dist/incrxBidAdapter.js +1 -1
  56. package/dist/inmarBidAdapter.js +1 -1
  57. package/dist/insticatorBidAdapter.js +1 -1
  58. package/dist/ixBidAdapter.js +1 -1
  59. package/dist/jixieBidAdapter.js +1 -1
  60. package/dist/justpremiumBidAdapter.js +1 -1
  61. package/dist/konduitAnalyticsAdapter.js +1 -1
  62. package/dist/kueezBidAdapter.js +1 -1
  63. package/dist/kueezRtbBidAdapter.js +1 -1
  64. package/dist/lassoBidAdapter.js +1 -1
  65. package/dist/lifestreetBidAdapter.js +1 -1
  66. package/dist/limelightDigitalBidAdapter.js +1 -1
  67. package/dist/liveIntentIdSystem.js +1 -1
  68. package/dist/livewrappedBidAdapter.js +1 -1
  69. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  70. package/dist/logicadBidAdapter.js +1 -1
  71. package/dist/loglyliftBidAdapter.js +1 -1
  72. package/dist/magniteAnalyticsAdapter.js +1 -1
  73. package/dist/malltvAnalyticsAdapter.js +1 -1
  74. package/dist/marsmediaBidAdapter.js +1 -1
  75. package/dist/mediafuseBidAdapter.js +1 -1
  76. package/dist/mediagoBidAdapter.js +1 -1
  77. package/dist/mediakeysBidAdapter.js +1 -1
  78. package/dist/mediasquareBidAdapter.js +1 -1
  79. package/dist/mgidBidAdapter.js +1 -1
  80. package/dist/minutemediaBidAdapter.js +1 -1
  81. package/dist/minutemediaplusBidAdapter.js +1 -0
  82. package/dist/neuwoRtdProvider.js +1 -0
  83. package/dist/nextMillenniumBidAdapter.js +1 -1
  84. package/dist/nexx360BidAdapter.js +1 -1
  85. package/dist/not-for-prod/prebid.js +141 -137
  86. package/dist/oguryBidAdapter.js +1 -1
  87. package/dist/onetagBidAdapter.js +1 -1
  88. package/dist/ooloAnalyticsAdapter.js +1 -1
  89. package/dist/outbrainBidAdapter.js +1 -1
  90. package/dist/parrableIdSystem.js +1 -1
  91. package/dist/pixfutureBidAdapter.js +1 -1
  92. package/dist/prebid-core.js +1 -1
  93. package/dist/prebidServerBidAdapter.js +1 -1
  94. package/dist/proxistoreBidAdapter.js +1 -1
  95. package/dist/publinkIdSystem.js +1 -1
  96. package/dist/pubmaticBidAdapter.js +1 -1
  97. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  98. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  99. package/dist/pxyzBidAdapter.js +1 -1
  100. package/dist/quantcastBidAdapter.js +1 -1
  101. package/dist/readpeakBidAdapter.js +1 -1
  102. package/dist/relaidoBidAdapter.js +1 -1
  103. package/dist/rhythmoneBidAdapter.js +1 -1
  104. package/dist/riseBidAdapter.js +1 -1
  105. package/dist/rubiconAnalyticsAdapter.js +1 -1
  106. package/dist/rubiconBidAdapter.js +1 -1
  107. package/dist/scatteredBidAdapter.js +1 -0
  108. package/dist/seedingAllianceBidAdapter.js +1 -1
  109. package/dist/seedtagBidAdapter.js +1 -1
  110. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  111. package/dist/sharethroughBidAdapter.js +1 -1
  112. package/dist/shinezBidAdapter.js +1 -1
  113. package/dist/sirdataRtdProvider.js +1 -1
  114. package/dist/smaatoBidAdapter.js +1 -1
  115. package/dist/smartadserverBidAdapter.js +1 -1
  116. package/dist/smartxBidAdapter.js +1 -1
  117. package/dist/smilewantedBidAdapter.js +1 -1
  118. package/dist/sonobiBidAdapter.js +1 -1
  119. package/dist/sovrnAnalyticsAdapter.js +1 -1
  120. package/dist/sovrnBidAdapter.js +1 -1
  121. package/dist/sspBCBidAdapter.js +1 -1
  122. package/dist/sublimeBidAdapter.js +1 -1
  123. package/dist/synacormediaBidAdapter.js +1 -1
  124. package/dist/targetVideoBidAdapter.js +1 -1
  125. package/dist/teadsBidAdapter.js +1 -1
  126. package/dist/trionBidAdapter.js +1 -1
  127. package/dist/tripleliftBidAdapter.js +1 -1
  128. package/dist/ttdBidAdapter.js +1 -1
  129. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  130. package/dist/uid2IdSystem.js +1 -1
  131. package/dist/underdogmediaBidAdapter.js +1 -1
  132. package/dist/undertoneBidAdapter.js +1 -1
  133. package/dist/userId.js +1 -1
  134. package/dist/vidazooBidAdapter.js +1 -1
  135. package/dist/videobyteBidAdapter.js +1 -1
  136. package/dist/visxBidAdapter.js +1 -1
  137. package/dist/vuukleBidAdapter.js +1 -1
  138. package/dist/widespaceBidAdapter.js +1 -1
  139. package/dist/winrBidAdapter.js +1 -1
  140. package/dist/yahoosspBidAdapter.js +1 -1
  141. package/dist/yieldmoBidAdapter.js +1 -1
  142. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  143. package/integrationExamples/gpt/neuwoRtdProvider_example.html +190 -0
  144. package/modules/33acrossBidAdapter.js +13 -4
  145. package/modules/adagioBidAdapter.js +14 -14
  146. package/modules/adagioBidAdapter.md +3 -1
  147. package/modules/admaruBidAdapter.js +19 -1
  148. package/modules/aidemBidAdapter.js +90 -65
  149. package/modules/aidemBidAdapter.md +10 -7
  150. package/modules/ajaBidAdapter.js +6 -1
  151. package/modules/amxIdSystem.md +2 -10
  152. package/modules/aolBidAdapter.js +1 -1
  153. package/modules/appnexusBidAdapter.js +45 -48
  154. package/modules/brightcomBidAdapter.js +1 -0
  155. package/modules/brightcomSSPBidAdapter.js +323 -0
  156. package/modules/brightcomSSPBidAdapter.md +46 -0
  157. package/modules/criteoBidAdapter.js +4 -5
  158. package/modules/cwireBidAdapter.md +9 -3
  159. package/modules/discoveryBidAdapter.js +22 -12
  160. package/modules/feedadBidAdapter.js +35 -15
  161. package/modules/fpdModule/index.md +5 -2
  162. package/modules/freewheel-sspBidAdapter.js +5 -1
  163. package/modules/gridBidAdapter.js +3 -1
  164. package/modules/incrxBidAdapter.js +2 -0
  165. package/modules/ixBidAdapter.js +318 -175
  166. package/modules/kueezRtbBidAdapter.js +54 -20
  167. package/modules/limelightDigitalBidAdapter.js +6 -1
  168. package/modules/limelightDigitalBidAdapter.md +12 -2
  169. package/modules/liveIntentIdSystem.js +1 -1
  170. package/modules/livewrappedBidAdapter.js +28 -16
  171. package/modules/mediagoBidAdapter.js +22 -17
  172. package/modules/minutemediaplusBidAdapter.js +291 -0
  173. package/modules/minutemediaplusBidAdapter.md +35 -0
  174. package/modules/neuwoRtdProvider.js +171 -0
  175. package/modules/neuwoRtdProvider.md +40 -0
  176. package/modules/nextMillenniumBidAdapter.js +9 -1
  177. package/modules/nexx360BidAdapter.js +1 -1
  178. package/modules/prebidServerBidAdapter/ortbConverter.js +6 -0
  179. package/modules/proxistoreBidAdapter.js +2 -2
  180. package/modules/pubmaticBidAdapter.js +4 -0
  181. package/modules/pubxaiAnalyticsAdapter.js +2 -2
  182. package/modules/scatteredBidAdapter.js +72 -0
  183. package/modules/scatteredBidAdapter.md +36 -0
  184. package/modules/sirdataRtdProvider.js +262 -284
  185. package/modules/smartxBidAdapter.js +2 -0
  186. package/modules/smilewantedBidAdapter.js +5 -0
  187. package/modules/sonobiBidAdapter.js +1 -10
  188. package/modules/topicsFpdModule.md +62 -0
  189. package/modules/tripleliftBidAdapter.js +4 -0
  190. package/modules/userId/eids.js +1 -1
  191. package/modules/vidazooBidAdapter.js +3 -1
  192. package/modules/yahoosspBidAdapter.js +1 -1
  193. package/modules/yieldmoBidAdapter.js +1 -0
  194. package/package.json +2 -2
  195. package/src/adapterManager.js +30 -14
  196. package/src/utils.js +1 -1
  197. package/test/spec/modules/33acrossBidAdapter_spec.js +51 -18
  198. package/test/spec/modules/adagioBidAdapter_spec.js +2 -2
  199. package/test/spec/modules/admaruBidAdapter_spec.js +48 -0
  200. package/test/spec/modules/aidemBidAdapter_spec.js +77 -10
  201. package/test/spec/modules/ajaBidAdapter_spec.js +21 -1
  202. package/test/spec/modules/aolBidAdapter_spec.js +2 -2
  203. package/test/spec/modules/appnexusBidAdapter_spec.js +123 -16
  204. package/test/spec/modules/brightcomSSPBidAdapter_spec.js +411 -0
  205. package/test/spec/modules/criteoBidAdapter_spec.js +24 -1
  206. package/test/spec/modules/eids_spec.js +1 -1
  207. package/test/spec/modules/feedadBidAdapter_spec.js +47 -77
  208. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +1 -1
  209. package/test/spec/modules/incrxBidAdapter_spec.js +4 -0
  210. package/test/spec/modules/ixBidAdapter_spec.js +24 -54
  211. package/test/spec/modules/kueezRtbBidAdapter_spec.js +63 -22
  212. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +35 -5
  213. package/test/spec/modules/livewrappedBidAdapter_spec.js +267 -2
  214. package/test/spec/modules/minutemediaplusBidAdapter_spec.js +519 -0
  215. package/test/spec/modules/neuwoRtdProvider_spec.js +123 -0
  216. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +11 -0
  217. package/test/spec/modules/prebidServerBidAdapter_spec.js +56 -0
  218. package/test/spec/modules/proxistoreBidAdapter_spec.js +2 -2
  219. package/test/spec/modules/pubmaticBidAdapter_spec.js +15 -0
  220. package/test/spec/modules/pubxaiAnalyticsAdapter_spec.js +3 -1
  221. package/test/spec/modules/scatteredBidAdapter_spec.js +210 -0
  222. package/test/spec/modules/sirdataRtdProvider_spec.js +116 -22
  223. package/test/spec/modules/smilewantedBidAdapter_spec.js +54 -3
  224. package/test/spec/modules/sonobiBidAdapter_spec.js +3 -25
  225. package/test/spec/modules/tripleliftBidAdapter_spec.js +9 -2
  226. package/test/spec/modules/userId_spec.js +1 -1
  227. package/test/spec/modules/vidazooBidAdapter_spec.js +4 -1
  228. package/test/spec/modules/yahoosspBidAdapter_spec.js +1 -1
  229. 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: false,
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://abs.proxistore.com/v3/rtb/prebid/multi';
6
+ const COOKIE_BASE_URL = 'https://api.proxistore.com/v3/rtb/prebid/multi';
7
7
  const COOKIE_LESS_URL =
8
- 'https://abs.cookieless-proxistore.com/v3/rtb/prebid/multi';
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.1.0';
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.adUnitCount = data.auctionInit.adUnitCodes ? data.auctionInit.adUnitCodes.length : null;
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
+ ```