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
@@ -1,12 +1,13 @@
1
1
  /**
2
2
  * This module adds Sirdata provider to the real time data module
3
+ * and now supports Seller Defined Audience
3
4
  * The {@link module:modules/realTimeData} module is required
4
5
  * The module will fetch segments (user-centric) and categories (page-centric) from Sirdata server
5
6
  * The module will automatically handle user's privacy and choice in California (IAB TL CCPA Framework) and in Europe (IAB EU TCF FOR GDPR)
6
7
  * @module modules/sirdataRtdProvider
7
8
  * @requires module:modules/realTimeData
8
9
  */
9
- import {deepAccess, deepEqual, deepSetValue, isEmpty, logError, mergeDeep} from '../src/utils.js';
10
+ import {deepAccess, deepSetValue, isEmpty, logError, mergeDeep} from '../src/utils.js';
10
11
  import {submodule} from '../src/hook.js';
11
12
  import {ajax} from '../src/ajax.js';
12
13
  import {findIndex} from '../src/polyfill.js';
@@ -16,6 +17,52 @@ import {config} from '../src/config.js';
16
17
  /** @type {string} */
17
18
  const MODULE_NAME = 'realTimeData';
18
19
  const SUBMODULE_NAME = 'SirdataRTDModule';
20
+ const ORTB2_NAME = 'sirdata.com';
21
+
22
+ const partnerIds = {
23
+ 'criteo': 27443,
24
+ 'openx': 30342,
25
+ 'pubmatic': 30345,
26
+ 'smaato': 27520,
27
+ 'triplelift': 27518,
28
+ 'yahoossp': 30339,
29
+ 'rubicon': 27452,
30
+ 'appnexus': 27446,
31
+ 'appnexusAst': 27446,
32
+ 'brealtime': 27446,
33
+ 'emxdigital': 27446,
34
+ 'pagescience': 27446,
35
+ 'gourmetads': 33394,
36
+ 'matomy': 27446,
37
+ 'featureforward': 27446,
38
+ 'oftmedia': 27446,
39
+ 'districtm': 27446,
40
+ 'adasta': 27446,
41
+ 'beintoo': 27446,
42
+ 'gravity': 27446,
43
+ 'msq_classic': 27878,
44
+ 'msq_max': 27878,
45
+ '366_apx': 27878,
46
+ 'mediasquare': 27878,
47
+ 'smartadserver': 27440,
48
+ 'smart': 27440,
49
+ 'proxistore': 27484,
50
+ 'ix': 27248,
51
+ 'sdRtdForGpt': 27449,
52
+ 'smilewanted': 28690,
53
+ 'taboola': 33379,
54
+ 'ttd': 33382,
55
+ 'zeta_global': 33385,
56
+ 'teads': 33388,
57
+ 'conversant': 33391,
58
+ 'improvedigital': 33397,
59
+ 'invibes': 33400,
60
+ 'sublime': 33403,
61
+ 'rtbhouse': 33406,
62
+ 'zeta_global_ssp': 33385,
63
+ };
64
+
65
+ let CONTEXT_ONLY = true;
19
66
 
20
67
  export function getSegmentsAndCategories(reqBidsConfigObj, onDone, moduleConfig, userConsent) {
21
68
  moduleConfig.params = moduleConfig.params || {};
@@ -46,9 +93,10 @@ export function getSegmentsAndCategories(reqBidsConfigObj, onDone, moduleConfig,
46
93
  if (!sirdataDomain || !gdprApplies || (deepAccess(userConsent, 'gdpr.vendorData.vendor.consents') && userConsent.gdpr.vendorData.vendor.consents[53] && userConsent.gdpr.vendorData.purpose.consents[1] && userConsent.gdpr.vendorData.purpose.consents[4])) {
47
94
  sirdataDomain = 'sddan.com';
48
95
  sendWithCredentials = true;
96
+ CONTEXT_ONLY = false;
49
97
  }
50
- // TODO: is 'page' the right value here?
51
- var actualUrl = moduleConfig.params.actualUrl || getRefererInfo().page;
98
+
99
+ var actualUrl = moduleConfig.params.actualUrl || getRefererInfo().stack.pop() || getRefererInfo().page;
52
100
 
53
101
  const url = 'https://kvt.' + sirdataDomain + '/api/v1/public/p/' + moduleConfig.params.partnerId + '/d/' + moduleConfig.params.key + '/s?callback=&gdpr=' + gdprApplies + '&gdpr_consent=' + tcString + (actualUrl ? '&url=' + encodeURIComponent(actualUrl) : '');
54
102
 
@@ -86,39 +134,74 @@ export function getSegmentsAndCategories(reqBidsConfigObj, onDone, moduleConfig,
86
134
  });
87
135
  }
88
136
 
89
- export function setGlobalOrtb2(ortb2, segments, categories) {
137
+ export function setGlobalOrtb2Sda(ortb2Fragments, data, segtaxid, cattaxid) {
90
138
  try {
91
- let addOrtb2 = {};
92
- let testGlobal = ortb2 || {}
93
- if (!deepAccess(testGlobal, 'user.ext.data.sd_rtd') || !deepEqual(testGlobal.user.ext.data.sd_rtd, segments)) {
94
- deepSetValue(addOrtb2, 'user.ext.data.sd_rtd', segments || {});
139
+ if (!isEmpty(data.segments)) {
140
+ applyGlobalOrtb2Sda(ortb2Fragments, 'user', data.segments, segtaxid);
95
141
  }
96
- if (!deepAccess(testGlobal, 'site.ext.data.sd_rtd') || !deepEqual(testGlobal.site.ext.data.sd_rtd, categories)) {
97
- deepSetValue(addOrtb2, 'site.ext.data.sd_rtd', categories || {});
98
- }
99
- if (!isEmpty(addOrtb2)) {
100
- mergeDeep(ortb2, addOrtb2);
142
+ if (!isEmpty(data.categories)) {
143
+ applyGlobalOrtb2Sda(ortb2Fragments, 'site', data.categories, cattaxid);
101
144
  }
102
145
  } catch (e) {
103
146
  logError(e)
104
147
  }
148
+ return true;
149
+ }
105
150
 
151
+ export function applyGlobalOrtb2Sda(ortb2Fragments, type, segments, segtaxValue) {
152
+ try {
153
+ let ortb2Data = [{
154
+ name: ORTB2_NAME,
155
+ segment: segments.map((segmentId) => ({ id: segmentId })),
156
+ }];
157
+ if (segtaxValue) {
158
+ ortb2Data[0].ext = { segtax: segtaxValue };
159
+ }
160
+ let ortb2Conf = (type == 'site' ? {site: {content: {data: ortb2Data}}} : {user: {data: ortb2Data}});
161
+ mergeDeep(ortb2Fragments, ortb2Conf);
162
+ } catch (e) {
163
+ logError(e)
164
+ }
106
165
  return true;
107
166
  }
108
167
 
109
- export function setBidderOrtb2(bidderOrtb2, bidder, segments, categories) {
168
+ export function setBidderOrtb2Sda(ortb2Fragments, bidder, data, segtaxid, cattaxid) {
110
169
  try {
111
- let addOrtb2 = {};
112
- let testBidder = bidderOrtb2[bidder];
113
- if (!deepAccess(testBidder, 'user.ext.data.sd_rtd') || !deepEqual(testBidder.user.ext.data.sd_rtd, segments)) {
114
- deepSetValue(addOrtb2, 'user.ext.data.sd_rtd', segments || {});
170
+ if (!isEmpty(data.segments)) {
171
+ applyBidderOrtb2Sda(ortb2Fragments, bidder, 'user', data.segments, segtaxid);
115
172
  }
116
- if (!deepAccess(testBidder, 'site.ext.data.sd_rtd') || !deepEqual(testBidder.site.ext.data.sd_rtd, categories)) {
117
- deepSetValue(addOrtb2, 'site.ext.data.sd_rtd', categories || {});
173
+ if (!isEmpty(data.categories)) {
174
+ applyBidderOrtb2Sda(ortb2Fragments, bidder, 'site', data.categories, cattaxid);
118
175
  }
119
- if (!isEmpty(addOrtb2)) {
120
- mergeDeep(bidderOrtb2[bidder], addOrtb2)
176
+ } catch (e) {
177
+ logError(e)
178
+ }
179
+ return true;
180
+ }
181
+
182
+ export function applyBidderOrtb2Sda(ortb2Fragments, bidder, type, segments, segtaxValue) {
183
+ try {
184
+ let ortb2Data = [{
185
+ name: ORTB2_NAME,
186
+ segment: segments.map((segmentId) => ({ id: segmentId })),
187
+ }];
188
+ if (segtaxValue) {
189
+ ortb2Data[0].ext = { segtax: segtaxValue };
121
190
  }
191
+ let ortb2Conf = (type == 'site' ? {site: {content: {data: ortb2Data}}} : {user: {data: ortb2Data}});
192
+ mergeDeep(ortb2Fragments, {[bidder]: ortb2Conf});
193
+ } catch (e) {
194
+ logError(e)
195
+ }
196
+ return true;
197
+ }
198
+
199
+ export function setBidderOrtb2(bidderOrtb2Fragments, bidder, path, segments) {
200
+ try {
201
+ if (isEmpty(segments)) { return; }
202
+ let ortb2Conf = {};
203
+ deepSetValue(ortb2Conf, path, segments || {});
204
+ mergeDeep(bidderOrtb2Fragments, {[bidder]: ortb2Conf});
122
205
  } catch (e) {
123
206
  logError(e)
124
207
  }
@@ -137,16 +220,16 @@ export function loadCustomFunction(todo, adUnit, list, data, bid) {
137
220
  return true;
138
221
  }
139
222
 
140
- export function getSegAndCatsArray(data, minScore) {
141
- var sirdataData = {'segments': [], 'categories': []};
223
+ export function getSegAndCatsArray(data, minScore, pid) {
224
+ let sirdataData = {'segments': [], 'categories': []};
142
225
  minScore = minScore && typeof minScore == 'number' ? minScore : 30;
143
226
  try {
144
227
  if (data && data.contextual_categories) {
145
228
  for (let catId in data.contextual_categories) {
146
- if (data.contextual_categories.hasOwnProperty(catId)) {
229
+ if (data.contextual_categories.hasOwnProperty(catId) && data.contextual_categories[catId]) {
147
230
  let value = data.contextual_categories[catId];
148
231
  if (value >= minScore && sirdataData.categories.indexOf(catId) === -1) {
149
- sirdataData.categories.push(catId.toString());
232
+ sirdataData.categories.push((pid ? pid.toString() + 'cc' : '') + catId.toString());
150
233
  }
151
234
  }
152
235
  }
@@ -157,8 +240,11 @@ export function getSegAndCatsArray(data, minScore) {
157
240
  try {
158
241
  if (data && data.segments) {
159
242
  for (let segId in data.segments) {
160
- if (data.segments.hasOwnProperty(segId)) {
161
- sirdataData.segments.push(data.segments[segId].toString());
243
+ if (data.segments.hasOwnProperty(segId) && data.segments[segId]) {
244
+ sirdataData.segments.push((pid ? pid.toString() + 'us' : '') + data.segments[segId].toString());
245
+ if (pid && CONTEXT_ONLY) {
246
+ sirdataData.categories.push(pid.toString() + 'uc' + data.segments[segId].toString());
247
+ }
162
248
  }
163
249
  }
164
250
  }
@@ -168,34 +254,77 @@ export function getSegAndCatsArray(data, minScore) {
168
254
  return sirdataData;
169
255
  }
170
256
 
257
+ export function applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit) {
258
+ // only share SDA data if whitelisted
259
+ if (!biddersParamsExist || indexFound) {
260
+ // SDA Publisher
261
+ let sirdataDataForSDA = getSegAndCatsArray(data, minScore, moduleConfig.params.partnerId);
262
+ setBidderOrtb2Sda(reqBids.ortb2Fragments?.bidder, bid.bidder, sirdataDataForSDA, data.segtaxid, data.cattaxid);
263
+ }
264
+
265
+ // always share SDA for curation
266
+ let curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : (partnerIds[bid.bidder] ? partnerIds[bid.bidder] : null));
267
+ if (curationId) {
268
+ // seller defined audience & bidder specific data
269
+ if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
270
+ // Get Bidder Specific Data
271
+ let curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore, null);
272
+ sirdataList = sirdataList.concat(curationData.segments).concat(curationData.categories);
273
+
274
+ // SDA Partners
275
+ let curationDataForSDA = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore, curationId);
276
+ setBidderOrtb2Sda(reqBids.ortb2Fragments?.bidder, bid.bidder, curationDataForSDA, data.shared_taxonomy[curationId].segtaxid, data.shared_taxonomy[curationId].cattaxid);
277
+ }
278
+ }
279
+
280
+ // Apply custom function or return Bidder Specific Data if publisher is ok
281
+ if (sirdataList && sirdataList.length > 0 && (!biddersParamsExist || indexFound)) {
282
+ if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
283
+ return loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataList, data, bid);
284
+ } else {
285
+ return sirdataList;
286
+ }
287
+ }
288
+ }
289
+
290
+ export function applySdaAndDefaultSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit) {
291
+ let specificData = applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
292
+ if (specificData && specificData.length > 0) {
293
+ setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, 'user.ext.data', {sd_rtd: specificData});
294
+ }
295
+ }
296
+
171
297
  export function addSegmentData(reqBids, data, moduleConfig, onDone) {
172
298
  const adUnits = reqBids.adUnits;
173
299
  moduleConfig = moduleConfig || {};
174
300
  moduleConfig.params = moduleConfig.params || {};
175
301
  const globalMinScore = moduleConfig.params.hasOwnProperty('contextualMinRelevancyScore') ? moduleConfig.params.contextualMinRelevancyScore : 30;
176
- var sirdataData = getSegAndCatsArray(data, globalMinScore);
302
+ var sirdataData = getSegAndCatsArray(data, globalMinScore, null);
177
303
 
178
304
  const sirdataList = sirdataData.segments.concat(sirdataData.categories);
179
- var sirdataMergedList = [];
180
305
 
181
- var curationData = {'segments': [], 'categories': []};
182
- var curationId = '1';
183
306
  const biddersParamsExist = (!!(moduleConfig.params && moduleConfig.params.bidders));
184
307
 
185
- // Global ortb2
186
- if (!biddersParamsExist) {
187
- setGlobalOrtb2(reqBids.ortb2Fragments?.global, sirdataData.segments, sirdataData.categories);
308
+ // Global ortb2 SDA
309
+ if (data.global_taxonomy && !isEmpty(data.global_taxonomy)) {
310
+ let globalData = {'segments': [], 'categories': []};
311
+ for (let i in data.global_taxonomy) {
312
+ if (!isEmpty(data.global_taxonomy[i])) {
313
+ globalData = getSegAndCatsArray(data.global_taxonomy[i], globalMinScore, null);
314
+ setGlobalOrtb2Sda(reqBids.ortb2Fragments?.global, globalData, data.global_taxonomy[i].segtaxid, data.global_taxonomy[i].cattaxid);
315
+ }
316
+ }
188
317
  }
189
318
 
190
319
  // Google targeting
191
320
  if (typeof window.googletag !== 'undefined' && (moduleConfig.params.setGptKeyValues || !moduleConfig.params.hasOwnProperty('setGptKeyValues'))) {
192
321
  try {
193
- // For curation Google is pid 27449
194
- curationId = (moduleConfig.params.gptCurationId ? moduleConfig.params.gptCurationId : '27449');
195
- if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
196
- curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], globalMinScore);
322
+ let gptCurationId = (moduleConfig.params.gptCurationId ? moduleConfig.params.gptCurationId : (partnerIds['sdRtdForGpt'] ? partnerIds['sdRtdForGpt'] : null));
323
+ let sirdataMergedList = sirdataList;
324
+ if (gptCurationId && data.shared_taxonomy && data.shared_taxonomy[gptCurationId]) {
325
+ let gamCurationData = getSegAndCatsArray(data.shared_taxonomy[gptCurationId], globalMinScore, null);
326
+ sirdataMergedList = sirdataMergedList.concat(gamCurationData.segments).concat(gamCurationData.categories);
197
327
  }
198
- sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
199
328
  window.googletag.pubads().getSlots().forEach(function (n) {
200
329
  if (typeof n.setTargeting !== 'undefined' && sirdataMergedList && sirdataMergedList.length > 0) {
201
330
  n.setTargeting('sd_rtd', sirdataMergedList);
@@ -221,259 +350,108 @@ export function addSegmentData(reqBids, data, moduleConfig, onDone) {
221
350
  }) : false);
222
351
  indexFound = (!!(typeof bidderIndex == 'number' && bidderIndex >= 0));
223
352
  try {
224
- curationData = {'segments': [], 'categories': []};
225
- sirdataMergedList = [];
226
-
227
353
  let minScore = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('contextualMinRelevancyScore') ? moduleConfig.params.bidders[bidderIndex].contextualMinRelevancyScore : globalMinScore);
354
+ let specificData = null;
355
+
356
+ switch (bid.bidder) {
357
+ case 'appnexus':
358
+ case 'appnexusAst':
359
+ case 'brealtime':
360
+ case 'emxdigital':
361
+ case 'pagescience':
362
+ case 'gourmetads':
363
+ case 'matomy':
364
+ case 'featureforward':
365
+ case 'oftmedia':
366
+ case 'districtm':
367
+ case 'adasta':
368
+ case 'beintoo':
369
+ case 'gravity':
370
+ case 'msq_classic':
371
+ case 'msq_max':
372
+ case '366_apx':
373
+ specificData = applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
374
+ if (specificData && specificData.length > 0) {
375
+ deepSetValue(bid, 'params.keywords.sd_rtd', specificData);
376
+ }
377
+ break;
228
378
 
229
- if (!biddersParamsExist || (indexFound && (!moduleConfig.params.bidders[bidderIndex].hasOwnProperty('adUnitCodes') || moduleConfig.params.bidders[bidderIndex].adUnitCodes.indexOf(adUnit.code) !== -1))) {
230
- switch (bid.bidder) {
231
- case 'appnexus':
232
- case 'appnexusAst':
233
- case 'brealtime':
234
- case 'emxdigital':
235
- case 'pagescience':
236
- case 'gourmetads':
237
- case 'matomy':
238
- case 'featureforward':
239
- case 'oftmedia':
240
- case 'districtm':
241
- case 'adasta':
242
- case 'beintoo':
243
- case 'gravity':
244
- case 'msq_classic':
245
- case 'msq_max':
246
- case '366_apx':
247
- // For curation Xandr is pid 27446
248
- curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '27446');
249
- if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
250
- curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
251
- }
252
- sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
253
- if (sirdataMergedList && sirdataMergedList.length > 0) {
254
- if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
255
- loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
256
- } else {
257
- deepSetValue(bid, 'params.keywords.sd_rtd', sirdataMergedList);
258
- }
259
- }
260
- break;
261
-
262
- case 'smartadserver':
263
- case 'smart':
379
+ case 'smartadserver':
380
+ case 'smart':
381
+ specificData = applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
382
+ if (specificData && specificData.length > 0) {
264
383
  var target = [];
265
384
  if (bid.hasOwnProperty('params') && bid.params.hasOwnProperty('target')) {
266
385
  target.push(bid.params.target);
267
386
  }
268
- // For curation Smart is pid 27440
269
- curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '27440');
270
- if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
271
- curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
272
- }
273
- sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
274
- if (sirdataMergedList && sirdataMergedList.length > 0) {
275
- if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
276
- loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
277
- } else {
278
- sirdataMergedList.forEach(function (entry) {
279
- if (target.indexOf('sd_rtd=' + entry) === -1) {
280
- target.push('sd_rtd=' + entry);
281
- }
282
- });
283
- deepSetValue(bid, 'params.target', target.join(';'));
284
- }
285
- }
286
- break;
287
-
288
- case 'rubicon':
289
- // For curation Magnite is pid 27518
290
- curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '27452');
291
- if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
292
- curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
293
- }
294
- sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
295
- if (sirdataMergedList && sirdataMergedList.length > 0) {
296
- if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
297
- loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
298
- } else {
299
- setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, data.segments.concat(curationData.segments), sirdataMergedList);
300
- }
301
- }
302
- break;
303
-
304
- case 'ix':
305
- var ixConfig = config.getConfig('ix.firstPartyData.sd_rtd');
306
- if (!ixConfig) {
307
- // For curation index is pid 27248
308
- curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '27248');
309
- if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
310
- curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
311
- }
312
- sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
313
- if (sirdataMergedList && sirdataMergedList.length > 0) {
314
- if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
315
- loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
316
- } else {
317
- var cappIxCategories = [];
318
- var ixLength = 0;
319
- var ixLimit = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('sizeLimit') ? moduleConfig.params.bidders[bidderIndex].sizeLimit : 1000);
320
- // Push ids For publisher use and for curation if exists but limit size because the bidder uses GET parameters
321
- sirdataMergedList.forEach(function (entry) {
322
- if (ixLength < ixLimit) {
323
- cappIxCategories.push(entry);
324
- ixLength += entry.toString().length;
325
- }
326
- });
327
- config.setConfig({ix: {firstPartyData: {sd_rtd: cappIxCategories}}});
328
- }
329
- }
330
- }
331
- break;
332
-
333
- case 'proxistore':
334
- // For curation Proxistore is pid 27484
335
- curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '27484');
336
- if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
337
- curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
338
- } else {
339
- data.shared_taxonomy[curationId] = {contextual_categories: {}};
340
- }
341
- sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
342
- if (sirdataMergedList && sirdataMergedList.length > 0) {
343
- if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
344
- loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
345
- } else {
346
- deepSetValue(bid, 'ortb2.user.ext.data', {
347
- segments: sirdataData.segments.concat(curationData.segments),
348
- contextual_categories: {...data.contextual_categories, ...data.shared_taxonomy[curationId].contextual_categories}
349
- });
350
- }
351
- }
352
- break;
353
-
354
- case 'criteo':
355
- // For curation Smart is pid 27443
356
- curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '27443');
357
- if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
358
- curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
359
- }
360
- sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
361
- if (sirdataMergedList && sirdataMergedList.length > 0) {
362
- if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
363
- loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
364
- } else {
365
- setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, data.segments.concat(curationData.segments), sirdataMergedList);
366
- }
367
- }
368
- break;
369
-
370
- case 'triplelift':
371
- // For curation Triplelift is pid 27518
372
- curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '27518');
373
- if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
374
- curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
375
- }
376
- sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
377
- if (sirdataMergedList && sirdataMergedList.length > 0) {
378
- if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
379
- loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
380
- } else {
381
- setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, data.segments.concat(curationData.segments), sirdataMergedList);
382
- }
383
- }
384
- break;
385
-
386
- case 'avct':
387
- case 'avocet':
388
- // For curation Avocet is pid 27522
389
- curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '27522');
390
- if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
391
- curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
392
- }
393
- sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
394
- if (sirdataMergedList && sirdataMergedList.length > 0) {
395
- if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
396
- loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
397
- } else {
398
- setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, data.segments.concat(curationData.segments), sirdataMergedList);
399
- }
400
- }
401
- break;
402
-
403
- case 'smaato':
404
- // For curation Smaato is pid 27520
405
- curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '27520');
406
- if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
407
- curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
408
- }
409
- sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
410
- if (sirdataMergedList && sirdataMergedList.length > 0) {
411
- if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
412
- loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
413
- } else {
414
- setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, data.segments.concat(curationData.segments), sirdataMergedList);
415
- }
416
- }
417
- break;
418
-
419
- case 'yahoossp':
420
- // For curation Yahoo is pid 30339
421
- curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '30339');
422
- if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
423
- curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
424
- }
425
- sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
426
- if (sirdataMergedList && sirdataMergedList.length > 0) {
427
- if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
428
- loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
429
- } else {
430
- setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, data.segments.concat(curationData.segments), sirdataMergedList);
431
- }
432
- }
433
- break;
434
-
435
- case 'openx':
436
- // For curation OpenX is pid 30342
437
- curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '30342');
438
- if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
439
- curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
440
- }
441
- sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
442
- if (sirdataMergedList && sirdataMergedList.length > 0) {
443
- if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
444
- loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
445
- } else {
446
- setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, data.segments.concat(curationData.segments), sirdataMergedList);
387
+ specificData.forEach(function (entry) {
388
+ if (target.indexOf('sd_rtd=' + entry) === -1) {
389
+ target.push('sd_rtd=' + entry);
447
390
  }
448
- }
449
- break;
450
-
451
- case 'pubmatic':
452
- // For curation Pubmatic is pid 30345
453
- curationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : '30345');
454
- if (data.shared_taxonomy && data.shared_taxonomy[curationId]) {
455
- curationData = getSegAndCatsArray(data.shared_taxonomy[curationId], minScore);
456
- }
457
- sirdataMergedList = sirdataList.concat(curationData.segments).concat(curationData.categories);
458
- if (sirdataMergedList && sirdataMergedList.length > 0) {
459
- if (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('customFunction')) {
460
- loadCustomFunction(moduleConfig.params.bidders[bidderIndex].customFunction, adUnit, sirdataMergedList, data, bid);
461
- } else {
462
- setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, data.segments.concat(curationData.segments), sirdataMergedList);
463
- }
464
- }
465
- break;
466
-
467
- default:
468
- if (!biddersParamsExist || indexFound) {
469
- if (!deepAccess(bid, 'ortb2.site.ext.data.sd_rtd')) {
470
- deepSetValue(bid, 'ortb2.site.ext.data.sd_rtd', sirdataData.categories);
471
- }
472
- if (!deepAccess(bid, 'ortb2.user.ext.data.sd_rtd')) {
473
- deepSetValue(bid, 'ortb2.user.ext.data.sd_rtd', sirdataData.segments);
391
+ });
392
+ deepSetValue(bid, 'params.target', target.join(';'));
393
+ }
394
+ break;
395
+
396
+ case 'ix':
397
+ specificData = applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
398
+ let ixConfig = config.getConfig('ix.firstPartyData.sd_rtd');
399
+ if (!ixConfig && specificData && specificData.length > 0) {
400
+ let cappIxCategories = [];
401
+ let ixLength = 0;
402
+ let ixLimit = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('sizeLimit') ? moduleConfig.params.bidders[bidderIndex].sizeLimit : 1000);
403
+ // Push ids For publisher use and for curation if exists but limit size because the bidder uses GET parameters
404
+ specificData.forEach(function (entry) {
405
+ if (ixLength < ixLimit) {
406
+ cappIxCategories.push(entry);
407
+ ixLength += entry.toString().length;
474
408
  }
409
+ });
410
+ config.setConfig({ix: {firstPartyData: {sd_rtd: cappIxCategories}}});
411
+ }
412
+ break;
413
+
414
+ case 'proxistore':
415
+ specificData = applySdaGetSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
416
+ if (specificData && specificData.length > 0) {
417
+ let psCurationId = (indexFound && moduleConfig.params.bidders[bidderIndex].hasOwnProperty('curationId') ? moduleConfig.params.bidders[bidderIndex].curationId : (partnerIds[bid.bidder] ? partnerIds[bid.bidder] : null));
418
+ if (!data.shared_taxonomy || !data.shared_taxonomy[psCurationId]) {
419
+ data.shared_taxonomy[psCurationId] = {segments: [], contextual_categories: {}, segtaxid: null, cattaxid: null};
475
420
  }
476
- }
421
+ let psCurationData = getSegAndCatsArray(data.shared_taxonomy[psCurationId], minScore, null);
422
+ setBidderOrtb2(reqBids.ortb2Fragments?.bidder, bid.bidder, 'user.ext.data', {
423
+ segments: sirdataData.segments.concat(psCurationData.segments),
424
+ contextual_categories: {...data.contextual_categories, ...data.shared_taxonomy[psCurationId].contextual_categories}
425
+ });
426
+ }
427
+ break;
428
+
429
+ case 'rubicon':
430
+ case 'criteo':
431
+ case 'triplelift':
432
+ case 'smaato':
433
+ case 'yahoossp':
434
+ case 'openx':
435
+ case 'pubmatic':
436
+ case 'smilewanted':
437
+ case 'taboola':
438
+ case 'ttd':
439
+ case 'zeta_global':
440
+ case 'zeta_global_ssp':
441
+ case 'teads':
442
+ case 'conversant':
443
+ case 'improvedigital':
444
+ case 'invibes':
445
+ case 'sublime':
446
+ case 'rtbhouse':
447
+ case 'mediasquare':
448
+ applySdaAndDefaultSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
449
+ break;
450
+
451
+ default:
452
+ if (!biddersParamsExist || (indexFound && (!moduleConfig.params.bidders[bidderIndex].hasOwnProperty('adUnitCodes') || moduleConfig.params.bidders[bidderIndex].adUnitCodes.indexOf(adUnit.code) !== -1))) {
453
+ applySdaAndDefaultSpecificData(data, sirdataList, biddersParamsExist, minScore, reqBids, bid, moduleConfig, indexFound, bidderIndex, adUnit);
454
+ }
477
455
  }
478
456
  } catch (e) {
479
457
  logError(e);
@@ -10,8 +10,10 @@ import {
10
10
  } from '../src/mediaTypes.js';
11
11
  const BIDDER_CODE = 'smartx';
12
12
  const URL = 'https://bid.sxp.smartclip.net/bid/1000';
13
+ const GVLID = 115;
13
14
  export const spec = {
14
15
  code: BIDDER_CODE,
16
+ gvlid: GVLID,
15
17
  supportedMediaTypes: [VIDEO],
16
18
  /**
17
19
  * Determines whether or not the given bid request is valid.