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.
Files changed (188) 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/dspxBidAdapter.js +1 -1
  40. package/dist/eplanningBidAdapter.js +1 -1
  41. package/dist/feedadBidAdapter.js +1 -1
  42. package/dist/finativeBidAdapter.js +1 -1
  43. package/dist/freewheel-sspBidAdapter.js +1 -1
  44. package/dist/glimpseBidAdapter.js +1 -1
  45. package/dist/gmosspBidAdapter.js +1 -1
  46. package/dist/goldbachBidAdapter.js +1 -1
  47. package/dist/gridBidAdapter.js +1 -1
  48. package/dist/gridNMBidAdapter.js +1 -1
  49. package/dist/gumgumBidAdapter.js +1 -1
  50. package/dist/h12mediaBidAdapter.js +1 -1
  51. package/dist/id5IdSystem.js +1 -1
  52. package/dist/impactifyBidAdapter.js +1 -1
  53. package/dist/improvedigitalBidAdapter.js +1 -1
  54. package/dist/inmarBidAdapter.js +1 -1
  55. package/dist/insticatorBidAdapter.js +1 -1
  56. package/dist/ixBidAdapter.js +1 -1
  57. package/dist/jixieBidAdapter.js +1 -1
  58. package/dist/justpremiumBidAdapter.js +1 -1
  59. package/dist/konduitAnalyticsAdapter.js +1 -1
  60. package/dist/kueezBidAdapter.js +1 -1
  61. package/dist/kueezRtbBidAdapter.js +1 -1
  62. package/dist/lassoBidAdapter.js +1 -1
  63. package/dist/lifestreetBidAdapter.js +1 -1
  64. package/dist/limelightDigitalBidAdapter.js +1 -1
  65. package/dist/liveIntentIdSystem.js +1 -1
  66. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  67. package/dist/logicadBidAdapter.js +1 -1
  68. package/dist/loglyliftBidAdapter.js +1 -1
  69. package/dist/magniteAnalyticsAdapter.js +1 -1
  70. package/dist/malltvAnalyticsAdapter.js +1 -1
  71. package/dist/marsmediaBidAdapter.js +1 -1
  72. package/dist/mediafuseBidAdapter.js +1 -1
  73. package/dist/mediakeysBidAdapter.js +1 -1
  74. package/dist/mediasquareBidAdapter.js +1 -1
  75. package/dist/mgidBidAdapter.js +1 -1
  76. package/dist/minutemediaBidAdapter.js +1 -1
  77. package/dist/neuwoRtdProvider.js +1 -0
  78. package/dist/nexx360BidAdapter.js +1 -1
  79. package/dist/not-for-prod/prebid.js +132 -129
  80. package/dist/oguryBidAdapter.js +1 -1
  81. package/dist/onetagBidAdapter.js +1 -1
  82. package/dist/ooloAnalyticsAdapter.js +1 -1
  83. package/dist/outbrainBidAdapter.js +1 -1
  84. package/dist/parrableIdSystem.js +1 -1
  85. package/dist/pixfutureBidAdapter.js +1 -1
  86. package/dist/prebid-core.js +1 -1
  87. package/dist/publinkIdSystem.js +1 -1
  88. package/dist/pubmaticBidAdapter.js +1 -1
  89. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  90. package/dist/pxyzBidAdapter.js +1 -1
  91. package/dist/quantcastBidAdapter.js +1 -1
  92. package/dist/readpeakBidAdapter.js +1 -1
  93. package/dist/relaidoBidAdapter.js +1 -1
  94. package/dist/rhythmoneBidAdapter.js +1 -1
  95. package/dist/riseBidAdapter.js +1 -1
  96. package/dist/rubiconAnalyticsAdapter.js +1 -1
  97. package/dist/rubiconBidAdapter.js +1 -1
  98. package/dist/scatteredBidAdapter.js +1 -0
  99. package/dist/seedingAllianceBidAdapter.js +1 -1
  100. package/dist/seedtagBidAdapter.js +1 -1
  101. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  102. package/dist/sharethroughBidAdapter.js +1 -1
  103. package/dist/shinezBidAdapter.js +1 -1
  104. package/dist/sirdataRtdProvider.js +1 -1
  105. package/dist/smaatoBidAdapter.js +1 -1
  106. package/dist/smartadserverBidAdapter.js +1 -1
  107. package/dist/smartxBidAdapter.js +1 -1
  108. package/dist/smilewantedBidAdapter.js +1 -1
  109. package/dist/sonobiBidAdapter.js +1 -1
  110. package/dist/sovrnAnalyticsAdapter.js +1 -1
  111. package/dist/sovrnBidAdapter.js +1 -1
  112. package/dist/sspBCBidAdapter.js +1 -1
  113. package/dist/sublimeBidAdapter.js +1 -1
  114. package/dist/synacormediaBidAdapter.js +1 -1
  115. package/dist/targetVideoBidAdapter.js +1 -1
  116. package/dist/teadsBidAdapter.js +1 -1
  117. package/dist/trionBidAdapter.js +1 -1
  118. package/dist/tripleliftBidAdapter.js +1 -1
  119. package/dist/ttdBidAdapter.js +1 -1
  120. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  121. package/dist/uid2IdSystem.js +1 -1
  122. package/dist/underdogmediaBidAdapter.js +1 -1
  123. package/dist/undertoneBidAdapter.js +1 -1
  124. package/dist/userId.js +1 -1
  125. package/dist/vidazooBidAdapter.js +1 -1
  126. package/dist/videobyteBidAdapter.js +1 -1
  127. package/dist/visxBidAdapter.js +1 -1
  128. package/dist/vuukleBidAdapter.js +1 -1
  129. package/dist/widespaceBidAdapter.js +1 -1
  130. package/dist/winrBidAdapter.js +1 -1
  131. package/dist/yahoosspBidAdapter.js +1 -1
  132. package/dist/yieldmoBidAdapter.js +1 -1
  133. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  134. package/integrationExamples/gpt/neuwoRtdProvider_example.html +190 -0
  135. package/modules/33acrossBidAdapter.js +13 -4
  136. package/modules/admaruBidAdapter.js +19 -1
  137. package/modules/aidemBidAdapter.js +90 -65
  138. package/modules/aidemBidAdapter.md +10 -7
  139. package/modules/ajaBidAdapter.js +6 -1
  140. package/modules/amxIdSystem.md +2 -10
  141. package/modules/aolBidAdapter.js +1 -1
  142. package/modules/appnexusBidAdapter.js +45 -48
  143. package/modules/brightcomBidAdapter.js +1 -0
  144. package/modules/brightcomSSPBidAdapter.js +323 -0
  145. package/modules/brightcomSSPBidAdapter.md +46 -0
  146. package/modules/feedadBidAdapter.js +35 -15
  147. package/modules/fpdModule/index.md +5 -2
  148. package/modules/freewheel-sspBidAdapter.js +5 -1
  149. package/modules/gridBidAdapter.js +3 -1
  150. package/modules/ixBidAdapter.js +318 -175
  151. package/modules/limelightDigitalBidAdapter.js +6 -1
  152. package/modules/limelightDigitalBidAdapter.md +12 -2
  153. package/modules/liveIntentIdSystem.js +1 -1
  154. package/modules/neuwoRtdProvider.js +171 -0
  155. package/modules/neuwoRtdProvider.md +40 -0
  156. package/modules/nexx360BidAdapter.js +1 -1
  157. package/modules/pubmaticBidAdapter.js +4 -0
  158. package/modules/scatteredBidAdapter.js +72 -0
  159. package/modules/scatteredBidAdapter.md +36 -0
  160. package/modules/sirdataRtdProvider.js +262 -284
  161. package/modules/smartxBidAdapter.js +2 -0
  162. package/modules/smilewantedBidAdapter.js +5 -0
  163. package/modules/topicsFpdModule.md +62 -0
  164. package/modules/userId/eids.js +1 -1
  165. package/modules/vidazooBidAdapter.js +3 -1
  166. package/modules/yahoosspBidAdapter.js +1 -1
  167. package/package.json +2 -2
  168. package/test/spec/modules/33acrossBidAdapter_spec.js +51 -18
  169. package/test/spec/modules/admaruBidAdapter_spec.js +48 -0
  170. package/test/spec/modules/aidemBidAdapter_spec.js +77 -10
  171. package/test/spec/modules/ajaBidAdapter_spec.js +21 -1
  172. package/test/spec/modules/aolBidAdapter_spec.js +2 -2
  173. package/test/spec/modules/appnexusBidAdapter_spec.js +123 -16
  174. package/test/spec/modules/brightcomSSPBidAdapter_spec.js +411 -0
  175. package/test/spec/modules/eids_spec.js +1 -1
  176. package/test/spec/modules/feedadBidAdapter_spec.js +47 -77
  177. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +1 -1
  178. package/test/spec/modules/ixBidAdapter_spec.js +24 -54
  179. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +35 -5
  180. package/test/spec/modules/neuwoRtdProvider_spec.js +123 -0
  181. package/test/spec/modules/pubmaticBidAdapter_spec.js +15 -0
  182. package/test/spec/modules/scatteredBidAdapter_spec.js +210 -0
  183. package/test/spec/modules/sirdataRtdProvider_spec.js +116 -22
  184. package/test/spec/modules/smilewantedBidAdapter_spec.js +54 -3
  185. package/test/spec/modules/tripleliftBidAdapter_spec.js +2 -2
  186. package/test/spec/modules/userId_spec.js +1 -1
  187. package/test/spec/modules/vidazooBidAdapter_spec.js +4 -1
  188. 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/esm/initializer.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
+ ```