prebid.js 8.4.0 → 8.6.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 (332) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/a1MediaRtdProvider.js +1 -0
  4. package/dist/adagioBidAdapter.js +1 -1
  5. package/dist/adbookpspBidAdapter.js +1 -1
  6. package/dist/adfBidAdapter.js +1 -1
  7. package/dist/adgenerationBidAdapter.js +1 -1
  8. package/dist/adkernelAdnBidAdapter.js +1 -1
  9. package/dist/adkernelBidAdapter.js +1 -1
  10. package/dist/admixerIdSystem.js +1 -1
  11. package/dist/adnuntiusBidAdapter.js +1 -1
  12. package/dist/adqueryBidAdapter.js +1 -1
  13. package/dist/adqueryIdSystem.js +1 -1
  14. package/dist/adrelevantisBidAdapter.js +1 -1
  15. package/dist/adsinteractiveBidAdapter.js +1 -1
  16. package/dist/adtelligentIdSystem.js +1 -1
  17. package/dist/adtrgtmeBidAdapter.js +1 -1
  18. package/dist/adxcgBidAdapter.js +1 -1
  19. package/dist/adyoulikeBidAdapter.js +1 -1
  20. package/dist/ajaBidAdapter.js +1 -1
  21. package/dist/amxBidAdapter.js +1 -1
  22. package/dist/amxIdSystem.js +1 -1
  23. package/dist/appierAnalyticsAdapter.js +1 -1
  24. package/dist/appnexusBidAdapter.js +1 -1
  25. package/dist/asoBidAdapter.js +1 -1
  26. package/dist/axonixBidAdapter.js +1 -1
  27. package/dist/beachfrontBidAdapter.js +1 -1
  28. package/dist/bidglassBidAdapter.js +1 -1
  29. package/dist/big-richmediaBidAdapter.js +1 -1
  30. package/dist/bridBidAdapter.js +1 -1
  31. package/dist/bridgewellBidAdapter.js +1 -1
  32. package/dist/brightMountainMediaBidAdapter.js +1 -1
  33. package/dist/britepoolIdSystem.js +1 -1
  34. package/dist/carodaBidAdapter.js +1 -1
  35. package/dist/chtnwBidAdapter.js +1 -1
  36. package/dist/concertBidAdapter.js +1 -1
  37. package/dist/connectIdSystem.js +1 -1
  38. package/dist/connectadBidAdapter.js +1 -1
  39. package/dist/consentManagementGpp.js +1 -1
  40. package/dist/consumableBidAdapter.js +1 -1
  41. package/dist/conversantAnalyticsAdapter.js +1 -1
  42. package/dist/conversantBidAdapter.js +1 -1
  43. package/dist/craftBidAdapter.js +1 -1
  44. package/dist/criteoBidAdapter.js +1 -1
  45. package/dist/criteoIdSystem.js +1 -1
  46. package/dist/cwireBidAdapter.js +1 -1
  47. package/dist/czechAdIdSystem.js +1 -1
  48. package/dist/dacIdSystem.js +1 -1
  49. package/dist/deepintentDpesIdSystem.js +1 -1
  50. package/dist/dependencies.json +6 -0
  51. package/dist/dmdIdSystem.js +1 -1
  52. package/dist/dspxBidAdapter.js +1 -1
  53. package/dist/eplanningBidAdapter.js +1 -1
  54. package/dist/euidIdSystem.js +1 -1
  55. package/dist/fabrickIdSystem.js +1 -1
  56. package/dist/feedadBidAdapter.js +1 -1
  57. package/dist/finativeBidAdapter.js +1 -1
  58. package/dist/freewheel-sspBidAdapter.js +1 -1
  59. package/dist/ftrackIdSystem.js +1 -1
  60. package/dist/geolocationRtdProvider.js +1 -0
  61. package/dist/gmosspBidAdapter.js +1 -1
  62. package/dist/goldbachBidAdapter.js +1 -1
  63. package/dist/gravitoIdSystem.js +1 -1
  64. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  65. package/dist/greenbidsRtdProvider.js +1 -1
  66. package/dist/gridBidAdapter.js +1 -1
  67. package/dist/growthCodeAnalyticsAdapter.js +1 -1
  68. package/dist/growthCodeIdSystem.js +1 -1
  69. package/dist/gumgumBidAdapter.js +1 -1
  70. package/dist/h12mediaBidAdapter.js +1 -1
  71. package/dist/hadronIdSystem.js +1 -1
  72. package/dist/hypelabBidAdapter.js +1 -1
  73. package/dist/id5IdSystem.js +1 -1
  74. package/dist/identityLinkIdSystem.js +1 -1
  75. package/dist/idxIdSystem.js +1 -1
  76. package/dist/imdsBidAdapter.js +1 -1
  77. package/dist/improvedigitalBidAdapter.js +1 -1
  78. package/dist/imuIdSystem.js +1 -1
  79. package/dist/insticatorBidAdapter.js +1 -1
  80. package/dist/intentIqIdSystem.js +1 -1
  81. package/dist/invibesBidAdapter.js +1 -1
  82. package/dist/ixBidAdapter.js +1 -1
  83. package/dist/justIdSystem.js +1 -1
  84. package/dist/justpremiumBidAdapter.js +1 -1
  85. package/dist/kargoBidAdapter.js +1 -1
  86. package/dist/kinessoIdSystem.js +1 -1
  87. package/dist/konduitAnalyticsAdapter.js +1 -1
  88. package/dist/kueezBidAdapter.js +1 -1
  89. package/dist/kueezRtbBidAdapter.js +1 -1
  90. package/dist/kulturemediaBidAdapter.js +1 -1
  91. package/dist/lassoBidAdapter.js +1 -1
  92. package/dist/lifestreetBidAdapter.js +1 -1
  93. package/dist/liveIntentIdSystem.js +1 -1
  94. package/dist/logicadBidAdapter.js +1 -1
  95. package/dist/loglyliftBidAdapter.js +1 -1
  96. package/dist/lotamePanoramaIdSystem.js +1 -1
  97. package/dist/magniteAnalyticsAdapter.js +1 -1
  98. package/dist/malltvAnalyticsAdapter.js +1 -1
  99. package/dist/marsmediaBidAdapter.js +1 -1
  100. package/dist/mediafuseBidAdapter.js +1 -1
  101. package/dist/mediasquareBidAdapter.js +1 -1
  102. package/dist/merkleIdSystem.js +1 -1
  103. package/dist/mgidBidAdapter.js +1 -1
  104. package/dist/minutemediaBidAdapter.js +1 -1
  105. package/dist/minutemediaplusBidAdapter.js +1 -1
  106. package/dist/mspa.js +1 -1
  107. package/dist/mwOpenLinkIdSystem.js +1 -1
  108. package/dist/naveggIdSystem.js +1 -1
  109. package/dist/netIdSystem.js +1 -1
  110. package/dist/newspassidBidAdapter.js +1 -1
  111. package/dist/nexx360BidAdapter.js +1 -1
  112. package/dist/not-for-prod/prebid.js +186 -181
  113. package/dist/novatiqIdSystem.js +1 -1
  114. package/dist/oguryBidAdapter.js +1 -1
  115. package/dist/oneKeyIdSystem.js +1 -1
  116. package/dist/onetagBidAdapter.js +1 -1
  117. package/dist/ooloAnalyticsAdapter.js +1 -1
  118. package/dist/optidigitalBidAdapter.js +1 -1
  119. package/dist/outbrainBidAdapter.js +1 -1
  120. package/dist/ozoneBidAdapter.js +1 -1
  121. package/dist/pairIdSystem.js +1 -1
  122. package/dist/parrableIdSystem.js +1 -1
  123. package/dist/pixfutureBidAdapter.js +1 -1
  124. package/dist/prebid-core.js +1 -1
  125. package/dist/pubCircleBidAdapter.js +1 -0
  126. package/dist/publinkIdSystem.js +1 -1
  127. package/dist/pubmaticBidAdapter.js +1 -1
  128. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  129. package/dist/pxyzBidAdapter.js +1 -1
  130. package/dist/quantcastBidAdapter.js +1 -1
  131. package/dist/quantcastIdSystem.js +1 -1
  132. package/dist/readpeakBidAdapter.js +1 -1
  133. package/dist/relaidoBidAdapter.js +1 -1
  134. package/dist/relevadRtdProvider.js +1 -1
  135. package/dist/retailspotBidAdapter.js +1 -1
  136. package/dist/rhythmoneBidAdapter.js +1 -1
  137. package/dist/riseBidAdapter.js +1 -1
  138. package/dist/rubiconBidAdapter.js +1 -1
  139. package/dist/seedingAllianceBidAdapter.js +1 -1
  140. package/dist/seedtagBidAdapter.js +1 -1
  141. package/dist/sharedIdSystem.js +1 -1
  142. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  143. package/dist/sharethroughBidAdapter.js +1 -1
  144. package/dist/shinezBidAdapter.js +1 -1
  145. package/dist/silverpushBidAdapter.js +1 -1
  146. package/dist/smaatoBidAdapter.js +1 -1
  147. package/dist/smartadserverBidAdapter.js +1 -1
  148. package/dist/smartxBidAdapter.js +1 -1
  149. package/dist/smilewantedBidAdapter.js +1 -1
  150. package/dist/sonobiBidAdapter.js +1 -1
  151. package/dist/sovrnAnalyticsAdapter.js +1 -1
  152. package/dist/sovrnBidAdapter.js +1 -1
  153. package/dist/ssmasBidAdapter.js +1 -0
  154. package/dist/sspBCBidAdapter.js +1 -1
  155. package/dist/stvBidAdapter.js +1 -1
  156. package/dist/sublimeBidAdapter.js +1 -1
  157. package/dist/tapadIdSystem.js +1 -1
  158. package/dist/tappxBidAdapter.js +1 -1
  159. package/dist/targetVideoBidAdapter.js +1 -1
  160. package/dist/teadsBidAdapter.js +1 -1
  161. package/dist/tncIdSystem.js +1 -1
  162. package/dist/topicsFpdModule.js +1 -1
  163. package/dist/trionBidAdapter.js +1 -1
  164. package/dist/tripleliftBidAdapter.js +1 -1
  165. package/dist/ttdBidAdapter.js +1 -1
  166. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  167. package/dist/uid2IdSystem.js +1 -1
  168. package/dist/underdogmediaBidAdapter.js +1 -1
  169. package/dist/undertoneBidAdapter.js +1 -1
  170. package/dist/unifiedIdSystem.js +1 -1
  171. package/dist/userId.js +1 -1
  172. package/dist/utiqSystem.js +1 -1
  173. package/dist/verizonMediaIdSystem.js +1 -1
  174. package/dist/viantOrtbBidAdapter.js +1 -0
  175. package/dist/vidazooBidAdapter.js +1 -1
  176. package/dist/videobyteBidAdapter.js +1 -1
  177. package/dist/videojsVideoProvider.js +1 -1
  178. package/dist/visxBidAdapter.js +1 -1
  179. package/dist/vrtcalBidAdapter.js +1 -1
  180. package/dist/vuukleBidAdapter.js +1 -1
  181. package/dist/widespaceBidAdapter.js +1 -1
  182. package/dist/winrBidAdapter.js +1 -1
  183. package/dist/yahoosspBidAdapter.js +1 -1
  184. package/dist/yieldmoBidAdapter.js +1 -1
  185. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  186. package/dist/zeotapIdPlusIdSystem.js +1 -1
  187. package/integrationExamples/gpt/adUnitFloors.html +0 -1
  188. package/integrationExamples/videoModule/jwplayer/bidMarkedAsUsed.html +1 -1
  189. package/integrationExamples/videoModule/jwplayer/bidRequestScheduling.html +1 -1
  190. package/integrationExamples/videoModule/jwplayer/bidsBackHandlerOverride.html +137 -0
  191. package/integrationExamples/videoModule/jwplayer/eventListeners.html +1 -1
  192. package/integrationExamples/videoModule/jwplayer/eventsUI.html +1 -1
  193. package/integrationExamples/videoModule/jwplayer/gamAdServerMediation.html +1 -1
  194. package/integrationExamples/videoModule/jwplayer/mediaMetadata.html +1 -1
  195. package/integrationExamples/videoModule/jwplayer/playlist.html +1 -1
  196. package/integrationExamples/videoModule/videojs/bidsBackHandlerOverride.html +164 -0
  197. package/libraries/mspa/activityControls.js +51 -32
  198. package/modules/.submodules.json +1 -0
  199. package/modules/33acrossIdSystem.js +9 -0
  200. package/modules/a1MediaRtdProvider.js +92 -0
  201. package/modules/a1MediaRtdProvider.md +46 -0
  202. package/modules/adfBidAdapter.js +4 -1
  203. package/modules/adgenerationBidAdapter.js +3 -3
  204. package/modules/adkernelAdnBidAdapter.js +1 -1
  205. package/modules/adkernelBidAdapter.js +10 -3
  206. package/modules/admixerIdSystem.js +6 -0
  207. package/modules/adnuntiusBidAdapter.js +5 -13
  208. package/modules/adqueryIdSystem.js +6 -0
  209. package/modules/adsinteractiveBidAdapter.js +2 -2
  210. package/modules/adtelligentIdSystem.js +6 -0
  211. package/modules/adyoulikeBidAdapter.js +6 -3
  212. package/modules/amxIdSystem.js +6 -0
  213. package/modules/appnexusBidAdapter.js +1 -1
  214. package/modules/beachfrontBidAdapter.js +32 -6
  215. package/modules/britepoolIdSystem.js +6 -0
  216. package/modules/connectIdSystem.js +6 -0
  217. package/modules/consentManagementGpp.js +10 -1
  218. package/modules/consumableBidAdapter.js +9 -1
  219. package/modules/criteoBidAdapter.js +18 -0
  220. package/modules/criteoIdSystem.js +6 -0
  221. package/modules/cwireBidAdapter.js +19 -0
  222. package/modules/czechAdIdSystem.js +6 -0
  223. package/modules/dacIdSystem.js +6 -0
  224. package/modules/deepintentDpesIdSystem.js +7 -2
  225. package/modules/dmdIdSystem.js +6 -0
  226. package/modules/euidIdSystem.js +9 -0
  227. package/modules/fabrickIdSystem.js +6 -0
  228. package/modules/ftrackIdSystem.js +16 -0
  229. package/modules/geolocationRtdProvider.js +65 -0
  230. package/modules/gravitoIdSystem.js +6 -0
  231. package/modules/greenbidsRtdProvider.js +1 -1
  232. package/modules/growthCodeAnalyticsAdapter.js +7 -2
  233. package/modules/growthCodeIdSystem.js +20 -1
  234. package/modules/hadronIdSystem.js +6 -0
  235. package/modules/id5IdSystem.js +34 -8
  236. package/modules/identityLinkIdSystem.js +6 -0
  237. package/modules/idxIdSystem.js +6 -0
  238. package/modules/imdsBidAdapter.js +38 -14
  239. package/modules/imuIdSystem.js +10 -0
  240. package/modules/intentIqIdSystem.js +6 -0
  241. package/modules/invibesBidAdapter.js +5 -5
  242. package/modules/ixBidAdapter.js +16 -0
  243. package/modules/justIdSystem.js +6 -0
  244. package/modules/kinessoIdSystem.js +7 -2
  245. package/modules/liveIntentIdSystem.js +53 -0
  246. package/modules/lotamePanoramaIdSystem.js +6 -0
  247. package/modules/merkleIdSystem.js +24 -0
  248. package/modules/mwOpenLinkIdSystem.js +6 -0
  249. package/modules/naveggIdSystem.js +6 -0
  250. package/modules/netIdSystem.js +6 -0
  251. package/modules/newspassid.md +76 -0
  252. package/modules/newspassidBidAdapter.js +44 -18
  253. package/modules/novatiqIdSystem.js +12 -0
  254. package/modules/oneKeyIdSystem.js +26 -0
  255. package/modules/ozoneBidAdapter.js +65 -18
  256. package/modules/ozoneBidAdapter.md +3 -1
  257. package/modules/pairIdSystem.js +6 -0
  258. package/modules/parrableIdSystem.js +38 -2
  259. package/modules/pubCircleBidAdapter.js +231 -0
  260. package/modules/pubCircleBidAdapter.md +79 -0
  261. package/modules/publinkIdSystem.js +7 -1
  262. package/modules/quantcastIdSystem.js +6 -0
  263. package/modules/relevadRtdProvider.js +6 -7
  264. package/modules/rubiconBidAdapter.js +9 -0
  265. package/modules/sharedIdSystem.js +6 -0
  266. package/modules/silverpushBidAdapter.js +2 -2
  267. package/modules/ssmasBidAdapter.js +126 -0
  268. package/modules/ssmasBidAdapter.md +35 -0
  269. package/modules/sspBCBidAdapter.js +36 -13
  270. package/modules/tapadIdSystem.js +6 -0
  271. package/modules/tappxBidAdapter.js +10 -1
  272. package/modules/tappxBidAdapter.md +17 -0
  273. package/modules/tncIdSystem.js +6 -0
  274. package/modules/topicsFpdModule.js +21 -48
  275. package/modules/tripleliftBidAdapter.js +5 -0
  276. package/modules/uid2IdSystem.js +14 -0
  277. package/modules/unifiedIdSystem.js +11 -0
  278. package/modules/userId/eids.js +6 -445
  279. package/modules/userId/index.js +36 -24
  280. package/modules/utiqSystem.js +9 -0
  281. package/modules/verizonMediaIdSystem.js +6 -0
  282. package/modules/viantOrtbBidAdapter.js +113 -0
  283. package/modules/viantOrtbBidAdapter.md +54 -0
  284. package/modules/vidazooBidAdapter.js +9 -2
  285. package/modules/videojsVideoProvider.js +9 -2
  286. package/modules/vrtcalBidAdapter.js +10 -6
  287. package/modules/zeotapIdPlusIdSystem.js +6 -0
  288. package/package.json +1 -1
  289. package/src/adapters/bidderFactory.js +15 -6
  290. package/src/adloader.js +2 -1
  291. package/test/spec/libraries/mspa/activityControls_spec.js +145 -212
  292. package/test/spec/modules/a1MediaRtdProvider_spec.js +105 -0
  293. package/test/spec/modules/adfBidAdapter_spec.js +47 -0
  294. package/test/spec/modules/adgenerationBidAdapter_spec.js +6 -6
  295. package/test/spec/modules/adkernelAdnBidAdapter_spec.js +1 -2
  296. package/test/spec/modules/adkernelBidAdapter_spec.js +7 -2
  297. package/test/spec/modules/adnuntiusBidAdapter_spec.js +116 -64
  298. package/test/spec/modules/adyoulikeBidAdapter_spec.js +13 -24
  299. package/test/spec/modules/appnexusBidAdapter_spec.js +12 -1
  300. package/test/spec/modules/beachfrontBidAdapter_spec.js +35 -2
  301. package/test/spec/modules/consentManagementGpp_spec.js +16 -0
  302. package/test/spec/modules/consumableBidAdapter_spec.js +15 -0
  303. package/test/spec/modules/criteoBidAdapter_spec.js +31 -3
  304. package/test/spec/modules/cwireBidAdapter_spec.js +47 -0
  305. package/test/spec/modules/freewheel-sspBidAdapter_spec.js +5 -5
  306. package/test/spec/modules/geolocationRtdProvider_spec.js +119 -0
  307. package/test/spec/modules/greenbidsRtdProvider_spec.js +1 -1
  308. package/test/spec/modules/id5IdSystem_spec.js +18 -0
  309. package/test/spec/modules/imdsBidAdapter_spec.js +98 -17
  310. package/test/spec/modules/invibesBidAdapter_spec.js +123 -32
  311. package/test/spec/modules/ixBidAdapter_spec.js +23 -5
  312. package/test/spec/modules/medianetBidAdapter_spec.js +117 -0
  313. package/test/spec/modules/newspassidBidAdapter_spec.js +6 -0
  314. package/test/spec/modules/outbrainBidAdapter_spec.js +3 -5
  315. package/test/spec/modules/ozoneBidAdapter_spec.js +27 -1
  316. package/test/spec/modules/prebidServerBidAdapter_spec.js +2 -20
  317. package/test/spec/modules/priceFloors_spec.js +14 -0
  318. package/test/spec/modules/pubCircleBidAdapter_spec.js +399 -0
  319. package/test/spec/modules/pubmaticBidAdapter_spec.js +6 -373
  320. package/test/spec/modules/rubiconBidAdapter_spec.js +220 -9
  321. package/test/spec/modules/smaatoBidAdapter_spec.js +4 -6
  322. package/test/spec/modules/ssmasBidAdapter_spec.js +244 -0
  323. package/test/spec/modules/sspBCBidAdapter_spec.js +18 -19
  324. package/test/spec/modules/topicsFpdModule_spec.js +343 -365
  325. package/test/spec/modules/tripleliftBidAdapter_spec.js +40 -0
  326. package/test/spec/modules/userId_spec.js +116 -7
  327. package/test/spec/modules/viantOrtbBidAdapter_spec.js +432 -0
  328. package/test/spec/modules/vrtcalBidAdapter_spec.js +12 -4
  329. package/test/spec/modules/xeBidAdapter_spec.js +366 -368
  330. package/test/spec/modules/yahoosspBidAdapter_spec.js +5 -18
  331. package/test/spec/unit/core/bidderFactory_spec.js +61 -14
  332. package/integrationExamples/gpt/pbjs_video_adUnit.html +0 -109
@@ -1130,6 +1130,46 @@ describe('triplelift adapter', function () {
1130
1130
 
1131
1131
  expect(logErrorSpy.calledOnce).to.equal(true);
1132
1132
  });
1133
+ it('should add ortb2 ext object if global fpd is available', function() {
1134
+ const ortb2 = {
1135
+ site: {
1136
+ domain: 'page.example.com',
1137
+ cat: ['IAB2'],
1138
+ sectioncat: ['IAB2-2'],
1139
+ pagecat: ['IAB2-2'],
1140
+ page: 'https://page.example.com/here.html',
1141
+ },
1142
+ user: {
1143
+ yob: 1985,
1144
+ gender: 'm',
1145
+ keywords: 'a,b',
1146
+ data: [
1147
+ {
1148
+ name: 'dataprovider.com',
1149
+ ext: { segtax: 4 },
1150
+ segment: [{ id: '1' }]
1151
+ }
1152
+ ],
1153
+ ext: {
1154
+ data: {
1155
+ registered: true,
1156
+ interests: ['cars']
1157
+ }
1158
+ }
1159
+ }
1160
+ };
1161
+
1162
+ const request = tripleliftAdapterSpec.buildRequests(bidRequests, {...bidderRequest, ortb2});
1163
+ const { data: payload } = request;
1164
+ expect(payload.ext.ortb2).to.exist;
1165
+ expect(payload.ext.ortb2.site).to.deep.equal({
1166
+ domain: 'page.example.com',
1167
+ cat: ['IAB2'],
1168
+ sectioncat: ['IAB2-2'],
1169
+ pagecat: ['IAB2-2'],
1170
+ page: 'https://page.example.com/here.html',
1171
+ });
1172
+ });
1133
1173
  it('should send global config fpd if kvps are available', function() {
1134
1174
  const sens = null;
1135
1175
  const category = ['news', 'weather', 'hurricane'];
@@ -12,7 +12,7 @@ import {
12
12
  setSubmoduleRegistry,
13
13
  syncDelay,
14
14
  } from 'modules/userId/index.js';
15
- import {createEidsArray} from 'modules/userId/eids.js';
15
+ import {createEidsArray, EID_CONFIG} from 'modules/userId/eids.js';
16
16
  import {config} from 'src/config.js';
17
17
  import * as utils from 'src/utils.js';
18
18
  import {getPrebidInternal} from 'src/utils.js';
@@ -86,7 +86,7 @@ describe('User ID', function () {
86
86
  }
87
87
  }
88
88
 
89
- function createMockIdSubmodule(name, value, aliasName) {
89
+ function createMockIdSubmodule(name, value, aliasName, eids) {
90
90
  return {
91
91
  name,
92
92
  getId() {
@@ -95,7 +95,8 @@ describe('User ID', function () {
95
95
  decode(v) {
96
96
  return v;
97
97
  },
98
- aliasName
98
+ aliasName,
99
+ eids
99
100
  }
100
101
  }
101
102
 
@@ -594,6 +595,50 @@ describe('User ID', function () {
594
595
  });
595
596
  });
596
597
 
598
+ describe('EID updateConfig', () => {
599
+ function mockSubmod(name, eids) {
600
+ return createMockIdSubmodule(name, null, null, eids);
601
+ }
602
+
603
+ it('does not choke if a submod does not provide an eids map', () => {
604
+ setSubmoduleRegistry([
605
+ mockSubmod('mock1'),
606
+ mockSubmod('mock2')
607
+ ]);
608
+ expect(EID_CONFIG.size).to.equal(0);
609
+ });
610
+
611
+ it('should merge together submodules\' eid configs', () => {
612
+ setSubmoduleRegistry([
613
+ mockSubmod('mock1', {mock1: {m: 1}}),
614
+ mockSubmod('mock2', {mock2: {m: 2}})
615
+ ]);
616
+ expect(EID_CONFIG.get('mock1')).to.eql({m: 1});
617
+ expect(EID_CONFIG.get('mock2')).to.eql({m: 2});
618
+ });
619
+
620
+ it('should respect idPriority', () => {
621
+ config.setConfig({
622
+ userSync: {
623
+ idPriority: {
624
+ m1: ['mod2', 'mod1'],
625
+ m2: ['mod1', 'mod2']
626
+ },
627
+ userIds: [
628
+ { name: 'mod1' },
629
+ { name: 'mod2' },
630
+ ]
631
+ }
632
+ });
633
+ setSubmoduleRegistry([
634
+ mockSubmod('mod1', {m1: {i: 1}, m2: {i: 2}}),
635
+ mockSubmod('mod2', {m1: {i: 3}, m2: {i: 4}})
636
+ ]);
637
+ expect(EID_CONFIG.get('m1')).to.eql({i: 3});
638
+ expect(EID_CONFIG.get('m2')).to.eql({i: 2});
639
+ });
640
+ })
641
+
597
642
  it('should set googletag ppid correctly', function () {
598
643
  let adUnits = [getAdUnitMock()];
599
644
  init(config);
@@ -626,7 +671,25 @@ describe('User ID', function () {
626
671
  // some of the ids are padded to have length >= 32 characters
627
672
  createMockIdSubmodule('mockId1Module', {id: {uid2: {id: 'uid2_value_7ac66c0f148de9519b8bd264312c4d64'}}}),
628
673
  createMockIdSubmodule('mockId2Module', {id: {pubcid: 'pubcid_value_7ac66c0f148de9519b8bd264312c4d64', lipb: {lipbid: 'lipbid_value_from_mockId2Module_7ac66c0f148de9519b8bd264312c4d64'}}}),
629
- createMockIdSubmodule('mockId3Module', {id: {uid2: {id: 'uid2_value_from_mockId3Module_7ac66c0f148de9519b8bd264312c4d64'}, pubcid: 'pubcid_value_from_mockId3Module_7ac66c0f148de9519b8bd264312c4d64', lipb: {lipbid: 'lipbid_value_7ac66c0f148de9519b8bd264312c4d64'}, merkleId: {id: 'merkleId_value_from_mockId3Module_7ac66c0f148de9519b8bd264312c4d64'}}}),
674
+ createMockIdSubmodule('mockId3Module', {
675
+ id: {
676
+ uid2: {
677
+ id: 'uid2_value_from_mockId3Module_7ac66c0f148de9519b8bd264312c4d64'
678
+ },
679
+ pubcid: 'pubcid_value_from_mockId3Module_7ac66c0f148de9519b8bd264312c4d64',
680
+ lipb: {
681
+ lipbid: 'lipbid_value_7ac66c0f148de9519b8bd264312c4d64'
682
+ },
683
+ merkleId: {
684
+ id: 'merkleId_value_from_mockId3Module_7ac66c0f148de9519b8bd264312c4d64'
685
+ }
686
+ }
687
+ }, null, {
688
+ uid2: {
689
+ source: 'uidapi.com',
690
+ getValue(data) { return data.id }
691
+ }
692
+ }),
630
693
  createMockIdSubmodule('mockId4Module', {id: {merkleId: {id: 'merkleId_value_7ac66c0f148de9519b8bd264312c4d64'}}})
631
694
  ]);
632
695
 
@@ -717,6 +780,11 @@ describe('User ID', function () {
717
780
  },
718
781
  decode(d) {
719
782
  return d
783
+ },
784
+ eids: {
785
+ pubcid: {
786
+ source: 'pubcid.org',
787
+ }
720
788
  }
721
789
  }]);
722
790
  config.setConfig({
@@ -808,7 +876,25 @@ describe('User ID', function () {
808
876
  // some of the ids are padded to have length >= 32 characters
809
877
  createMockIdSubmodule('mockId1Module', {id: {uid2: {id: 'uid2_value_7ac66c0f148de9519b8bd264312c4d64'}}}),
810
878
  createMockIdSubmodule('mockId2Module', {id: {pubcid: 'pubcid_value_7ac66c0f148de9519b8bd264312c4d64', lipb: {lipbid: 'lipbid_value_from_mockId2Module_7ac66c0f148de9519b8bd264312c4d64'}}}),
811
- createMockIdSubmodule('mockId3Module', {id: {uid2: {id: 'uid2_value_from_mockId3Module_7ac66c0f148de9519b8bd264312c4d64'}, pubcid: 'pubcid_value_from_mockId3Module_7ac66c0f148de9519b8bd264312c4d64', lipb: {lipbid: 'lipbid_value_7ac66c0f148de9519b8bd264312c4d64'}, merkleId: {id: 'merkleId_value_from_mockId3Module_7ac66c0f148de9519b8bd264312c4d64'}}}),
879
+ createMockIdSubmodule('mockId3Module', {
880
+ id: {
881
+ uid2: {
882
+ id: 'uid2_value_from_mockId3Module_7ac66c0f148de9519b8bd264312c4d64'
883
+ },
884
+ pubcid: 'pubcid_value_from_mockId3Module_7ac66c0f148de9519b8bd264312c4d64',
885
+ lipb: {
886
+ lipbid: 'lipbid_value_7ac66c0f148de9519b8bd264312c4d64'
887
+ },
888
+ merkleId: {
889
+ id: 'merkleId_value_from_mockId3Module_7ac66c0f148de9519b8bd264312c4d64'
890
+ }
891
+ }
892
+ }, null, {
893
+ uid2: {
894
+ source: 'uidapi.com',
895
+ getValue(data) { return data.id }
896
+ }
897
+ }),
812
898
  createMockIdSubmodule('mockId4Module', {id: {merkleId: {id: 'merkleId_value_7ac66c0f148de9519b8bd264312c4d64'}}})
813
899
  ]);
814
900
 
@@ -3259,8 +3345,31 @@ describe('User ID', function () {
3259
3345
  setSubmoduleRegistry([
3260
3346
  createMockIdSubmodule('mockId1Module', {id: {uid2: {id: 'uid2_value'}}}),
3261
3347
  createMockIdSubmodule('mockId2Module', {id: {pubcid: 'pubcid_value', lipb: {lipbid: 'lipbid_value_from_mockId2Module'}}}),
3262
- createMockIdSubmodule('mockId3Module', {id: {uid2: {id: 'uid2_value_from_mockId3Module'}, pubcid: 'pubcid_value_from_mockId3Module', lipb: {lipbid: 'lipbid_value'}, merkleId: {id: 'merkleId_value_from_mockId3Module'}}}),
3263
- createMockIdSubmodule('mockId4Module', {id: {merkleId: {id: 'merkleId_value'}}})
3348
+ createMockIdSubmodule('mockId3Module', {id: {uid2: {id: 'uid2_value_from_mockId3Module'}, pubcid: 'pubcid_value_from_mockId3Module', lipb: {lipbid: 'lipbid_value'}, merkleId: {id: 'merkleId_value_from_mockId3Module'}}}, null, {
3349
+ uid2: {
3350
+ source: 'uidapi.com',
3351
+ getValue(data) {
3352
+ return data.id
3353
+ }
3354
+ },
3355
+ pubcid: {
3356
+ source: 'pubcid.org',
3357
+ },
3358
+ lipb: {
3359
+ source: 'liveintent.com',
3360
+ getValue(data) {
3361
+ return data.lipbid
3362
+ }
3363
+ }
3364
+ }),
3365
+ createMockIdSubmodule('mockId4Module', {id: {merkleId: {id: 'merkleId_value'}}}, null, {
3366
+ merkleId: {
3367
+ source: 'merkleinc.com',
3368
+ getValue(data) {
3369
+ return data.id
3370
+ }
3371
+ }
3372
+ })
3264
3373
  ]);
3265
3374
  config.setConfig({
3266
3375
  userSync: {
@@ -0,0 +1,432 @@
1
+ import { spec, converter } from 'modules/viantOrtbBidAdapter.js';
2
+ import {assert, expect} from 'chai';
3
+ import { deepClone } from '../../../src/utils';
4
+ import {buildWindowTree} from '../../helpers/refererDetectionHelper';
5
+ import {detectReferer} from '../../../src/refererDetection';
6
+ describe('viantOrtbBidAdapter', function () {
7
+ function testBuildRequests(bidRequests, bidderRequestBase) {
8
+ let clonedBidderRequest = deepClone(bidderRequestBase);
9
+ clonedBidderRequest.bids = bidRequests;
10
+ let requests = spec.buildRequests(bidRequests, clonedBidderRequest);
11
+ return requests
12
+ }
13
+ describe('isBidRequestValid', function() {
14
+ function makeBid() {
15
+ return {
16
+ 'bidder': 'viant',
17
+ 'params': {
18
+ 'publisherId': '464',
19
+ 'placementId': 'some-PlacementId_1'
20
+ },
21
+ 'mediaTypes': {
22
+ 'banner': {
23
+ 'sizes': [
24
+ [728, 90]
25
+ ]
26
+ }
27
+ },
28
+ 'adUnitCode': 'adunit-code',
29
+ 'bidId': '30b31c1838de1e',
30
+ 'bidderRequestId': '22edbae2733bf6',
31
+ 'auctionId': '1d1a030790a475',
32
+ };
33
+ }
34
+
35
+ describe('core', function () {
36
+ it('should return true when required params found', function () {
37
+ expect(spec.isBidRequestValid(makeBid())).to.equal(true);
38
+ });
39
+
40
+ it('should return false when publisherId not passed', function () {
41
+ let bid = makeBid();
42
+ delete bid.params.publisherId;
43
+ expect(spec.isBidRequestValid(bid)).to.equal(false);
44
+ });
45
+
46
+ it('should return true if placementId is not passed ', function () {
47
+ let bid = makeBid();
48
+ delete bid.params.placementId;
49
+ bid.ortb2Imp = {
50
+
51
+ }
52
+ expect(spec.isBidRequestValid(bid)).to.equal(true);
53
+ });
54
+
55
+ it('should return false if mediaTypes.banner is Not passed', function () {
56
+ let bid = makeBid();
57
+ delete bid.mediaTypes
58
+ expect(spec.isBidRequestValid(bid)).to.equal(false);
59
+ });
60
+ });
61
+
62
+ describe('banner', function () {
63
+ it('should return true if banner.pos is passed correctly', function () {
64
+ let bid = makeBid();
65
+ bid.mediaTypes.banner.pos = 1;
66
+ expect(spec.isBidRequestValid(bid)).to.equal(true);
67
+ });
68
+ });
69
+
70
+ describe('video', function () {
71
+ describe('and request config uses mediaTypes', () => {
72
+ function makeBid() {
73
+ return {
74
+ 'bidder': 'viant',
75
+ 'params': {
76
+ 'unit': '12345678',
77
+ 'delDomain': 'test-del-domain',
78
+ 'publisherId': '464',
79
+ 'placementId': 'some-PlacementId_2'
80
+ },
81
+ 'mediaTypes': {
82
+ 'video': {
83
+ 'context': 'instream',
84
+ 'playerSize': [[640, 480]],
85
+ 'mimes': ['video/mp4'],
86
+ 'protocols': [1, 2, 3, 4, 5, 6, 7, 8],
87
+ 'api': [1, 3],
88
+ 'skip': 1,
89
+ 'skipafter': 5,
90
+ 'minduration': 10,
91
+ 'maxduration': 30
92
+ }
93
+ },
94
+ 'adUnitCode': 'adunit-code',
95
+ 'bidId': '30b31c1838de1e',
96
+ 'bidderRequestId': '22edbae2733bf6',
97
+ 'auctionId': '1d1a030790a475',
98
+ 'transactionId': '4008d88a-8137-410b-aa35-fbfdabcb478e'
99
+ }
100
+ }
101
+ it('should return true when required params found', function () {
102
+ expect(spec.isBidRequestValid(makeBid())).to.equal(true);
103
+ });
104
+
105
+ it('should return false when required params are not passed', function () {
106
+ let videoBidWithMediaTypes = Object.assign({}, makeBid());
107
+ videoBidWithMediaTypes.params = {};
108
+ expect(spec.isBidRequestValid(videoBidWithMediaTypes)).to.equal(false);
109
+ });
110
+ });
111
+ });
112
+ });
113
+
114
+ describe('buildRequests-banner', function () {
115
+ const baseBannerBidRequests = [{
116
+ 'bidder': 'viant',
117
+ 'params': {
118
+ 'publisherId': '464',
119
+ 'placementId': '1'
120
+ },
121
+ 'mediaTypes': {
122
+ 'banner': {
123
+ 'sizes': [[728, 90]]
124
+ }
125
+ },
126
+ 'gdprConsent': {
127
+ 'consentString': 'consentString',
128
+ 'gdprApplies': true,
129
+ },
130
+ 'uspConsent': '1YYY',
131
+ 'sizes': [[728, 90]],
132
+ 'transactionId': '1111474f-58b1-4368-b812-84f8c937a099',
133
+ 'adUnitCode': 'div-gpt-ad-1460505748561-0',
134
+ 'bidId': '243310435309b5',
135
+ 'bidderRequestId': '18084284054531',
136
+ 'auctionId': 'e7b34fa3-8654-424e-8c49-03e509e53d8c',
137
+ 'src': 'client',
138
+ 'bidRequestsCount': 1
139
+ }];
140
+
141
+ const testWindow = buildWindowTree(['https://www.example.com/test', 'https://www.example.com/other/page', 'https://www.example.com/third/page'], 'https://othersite.com/', 'https://example.com/canonical/page');
142
+ const baseBidderRequestReferer = detectReferer(testWindow)();
143
+ const baseBidderRequest = {
144
+ 'bidderCode': 'viant',
145
+ 'auctionId': 'e7b34fa3-8654-424e-8c49-03e509e53d8c',
146
+ 'bidderRequestId': '18084284054531',
147
+ 'auctionStart': 1540945362095,
148
+ 'timeout': 3000,
149
+ 'refererInfo': baseBidderRequestReferer,
150
+ 'start': 1540945362099,
151
+ 'doneCbCallCount': 0
152
+ };
153
+
154
+ it('test regs', function () {
155
+ const gdprBaseBidderRequest = Object.assign({}, baseBidderRequest, {
156
+ gdprConsent: {
157
+ consentString: 'consentString',
158
+ gdprApplies: true,
159
+ },
160
+ uspConsent: '1YYN'
161
+ });
162
+ const request = testBuildRequests(baseBannerBidRequests, gdprBaseBidderRequest)[0];
163
+ expect(request.data.regs.ext).to.have.property('gdpr', 1);
164
+ expect(request.data.regs.ext).to.have.property('us_privacy', '1YYN');
165
+ });
166
+
167
+ it('sends bid request to our endpoint that makes sense', function () {
168
+ const request = testBuildRequests(baseBannerBidRequests, baseBidderRequest)[0];
169
+ expect(request.method).to.equal('POST');
170
+ expect(request.url).to.be.not.empty;
171
+ expect(request.data).to.be.not.null;
172
+ });
173
+ it('sends bid requests to the correct endpoint', function () {
174
+ const url = testBuildRequests(baseBannerBidRequests, baseBidderRequest)[0].url;
175
+ expect(url).to.equal('https://bidders-us-east-1.adelphic.net/d/rtb/v25/prebid/bidder_test');
176
+ });
177
+
178
+ it('sends site', function () {
179
+ const requestBody = testBuildRequests(baseBannerBidRequests, baseBidderRequest)[0].data;
180
+ expect(requestBody.site).to.be.not.null;
181
+ });
182
+
183
+ it('includes the ad size in the bid request', function () {
184
+ const requestBody = testBuildRequests(baseBannerBidRequests, baseBidderRequest)[0].data;
185
+ expect(requestBody.imp[0].banner.format[0].w).to.equal(728);
186
+ expect(requestBody.imp[0].banner.format[0].h).to.equal(90);
187
+ });
188
+
189
+ it('sets the banner pos correctly if sent', function () {
190
+ let clonedBannerRequests = deepClone(baseBannerBidRequests);
191
+ clonedBannerRequests[0].mediaTypes.banner.pos = 1;
192
+
193
+ const requestBody = testBuildRequests(clonedBannerRequests, baseBidderRequest)[0].data;
194
+ expect(requestBody.imp[0].banner.pos).to.equal(1);
195
+ });
196
+ });
197
+
198
+ if (FEATURES.VIDEO) {
199
+ describe('buildRequests-video', function () {
200
+ function makeBid() {
201
+ return {
202
+ 'bidder': 'viant',
203
+ 'params': {
204
+ 'unit': '12345678',
205
+ 'delDomain': 'test-del-domain',
206
+ 'publisherId': '464',
207
+ 'placementId': 'some-PlacementId_2'
208
+ },
209
+ 'mediaTypes': {
210
+ 'video': {
211
+ 'context': 'instream',
212
+ 'playerSize': [[640, 480]],
213
+ 'mimes': ['video/mp4'],
214
+ 'protocols': [1, 2, 3, 4, 5, 6, 7, 8],
215
+ 'api': [1, 3],
216
+ 'skip': 1,
217
+ 'skipafter': 5,
218
+ 'minduration': 10,
219
+ 'maxduration': 31
220
+ }
221
+ },
222
+ 'adUnitCode': 'adunit-code',
223
+ 'bidId': '30b31c1838de1e',
224
+ 'bidderRequestId': '22edbae2733bf6',
225
+ 'auctionId': '1d1a030790a475',
226
+ 'transactionId': '4008d88a-8137-410b-aa35-fbfdabcb478e'
227
+ }
228
+ }
229
+
230
+ it('assert video and its fields is present in imp ', function () {
231
+ let requests = spec.buildRequests([makeBid()], {referrerInfo: {}});
232
+ let clonedRequests = deepClone(requests)
233
+ assert.equal(clonedRequests[0].data.imp[0].video.mimes[0], 'video/mp4')
234
+ assert.equal(clonedRequests[0].data.imp[0].video.maxduration, 31)
235
+ assert.equal(clonedRequests[0].data.imp[0].video.placement, 1)
236
+ assert.equal(clonedRequests[0].method, 'POST')
237
+ });
238
+ });
239
+ }
240
+
241
+ describe('interpretResponse', function () {
242
+ const baseBannerBidRequests = [{
243
+ 'bidder': 'viant',
244
+ 'params': {
245
+ 'publisherId': '464',
246
+ 'placementId': '1'
247
+ },
248
+ 'mediaTypes': {
249
+ 'banner': {
250
+ 'sizes': [[728, 90]]
251
+ }
252
+ },
253
+ 'sizes': [[728, 90]],
254
+ 'transactionId': '1111474f-58b1-4368-b812-84f8c937a099',
255
+ 'adUnitCode': 'div-gpt-ad-1460505748561-0',
256
+ 'bidId': '243310435309b5',
257
+ 'bidderRequestId': '18084284054531',
258
+ 'auctionId': 'e7b34fa3-8654-424e-8c49-03e509e53d8c',
259
+ 'src': 'client',
260
+ 'bidRequestsCount': 1
261
+ }];
262
+
263
+ const testWindow = buildWindowTree(['https://www.example.com/test', 'https://www.example.com/other/page', 'https://www.example.com/third/page'], 'https://othersite.com/', 'https://example.com/canonical/page');
264
+ const baseBidderRequestReferer = detectReferer(testWindow)();
265
+ const baseBidderRequest = {
266
+ 'bidderCode': 'viant',
267
+ 'auctionId': 'e7b34fa3-8654-424e-8c49-03e509e53d8c',
268
+ 'bidderRequestId': '18084284054531',
269
+ 'auctionStart': 1540945362095,
270
+ 'timeout': 3000,
271
+ 'refererInfo': baseBidderRequestReferer,
272
+ 'start': 1540945362099,
273
+ 'doneCbCallCount': 0
274
+ };
275
+
276
+ it('empty bid response test', function () {
277
+ const request = testBuildRequests(baseBannerBidRequests, baseBidderRequest)[0];
278
+ let bidResponse = {nbr: 0}; // Unknown error
279
+ let bids = spec.interpretResponse({body: bidResponse}, request);
280
+ expect(bids.length).to.equal(0);
281
+ });
282
+
283
+ it('bid response is a banner', function () {
284
+ const request = testBuildRequests(baseBannerBidRequests, baseBidderRequest)[0];
285
+ let bidResponse = {
286
+ seatbid: [{
287
+ bid: [{
288
+ impid: '243310435309b5',
289
+ price: 2,
290
+ w: 728,
291
+ h: 90,
292
+ crid: 'test-creative-id',
293
+ dealid: 'test-deal-id',
294
+ adm: 'test-ad-markup',
295
+ }]
296
+ }],
297
+ cur: 'USD'
298
+ };
299
+ let bids = spec.interpretResponse({body: bidResponse}, request);
300
+ expect(bids.length).to.equal(1);
301
+ let bid = bids[0];
302
+ it('should return the proper mediaType', function () {
303
+ it('should return a creativeId', function () {
304
+ expect(bid.mediaType).to.equal('banner');
305
+ });
306
+ });
307
+ it('should return a price', function () {
308
+ expect(bid.cpm).to.equal(bidResponse.seatbid[0].bid[0].price);
309
+ });
310
+
311
+ it('should return a request id', function () {
312
+ expect(bid.requestId).to.equal(bidResponse.seatbid[0].bid[0].impid);
313
+ });
314
+
315
+ it('should return width and height for the creative', function () {
316
+ expect(bid.width).to.equal(bidResponse.seatbid[0].bid[0].w);
317
+ expect(bid.height).to.equal(bidResponse.seatbid[0].bid[0].h);
318
+ });
319
+ it('should return a creativeId', function () {
320
+ expect(bid.creativeId).to.equal(bidResponse.seatbid[0].bid[0].crid);
321
+ });
322
+ it('should return an ad', function () {
323
+ expect(bid.ad).to.equal(bidResponse.seatbid[0].bid[0].adm);
324
+ });
325
+
326
+ it('should return a deal id if it exists', function () {
327
+ expect(bid.dealId).to.equal(bidResponse.seatbid[0].bid[0].dealid);
328
+ });
329
+
330
+ it('should have a time-to-live of 5 minutes', function () {
331
+ expect(bid.ttl).to.equal(300);
332
+ });
333
+
334
+ it('should always return net revenue', function () {
335
+ expect(bid.netRevenue).to.equal(true);
336
+ });
337
+ it('should return a currency', function () {
338
+ expect(bid.currency).to.equal(bidResponse.cur);
339
+ });
340
+ });
341
+ });
342
+ describe('interpretResponse-Video', function () {
343
+ const baseVideoBidRequests = [{
344
+ 'bidder': 'viant',
345
+ 'params': {
346
+ 'publisherId': '464',
347
+ 'placementId': '1'
348
+ },
349
+ 'mediaTypes': {
350
+ 'video': {
351
+ 'context': 'instream',
352
+ 'playerSize': [[640, 480]],
353
+ 'mimes': ['video/mp4'],
354
+ 'protocols': [1, 2, 3, 4, 5, 6, 7, 8],
355
+ 'api': [1, 3],
356
+ 'skip': 1,
357
+ 'skipafter': 5,
358
+ 'minduration': 10,
359
+ 'maxduration': 31
360
+ }
361
+ },
362
+ 'sizes': [[640, 480]],
363
+ 'transactionId': '1111474f-58b1-4368-b812-84f8c937a099',
364
+ 'adUnitCode': 'div-gpt-ad-1460505748561-0',
365
+ 'bidId': '243310435309b5',
366
+ 'bidderRequestId': '18084284054531',
367
+ 'auctionId': 'e7b34fa3-8654-424e-8c49-03e509e53d8c',
368
+ 'src': 'client',
369
+ 'bidRequestsCount': 1
370
+ }];
371
+
372
+ const testWindow = buildWindowTree(['https://www.example.com/test', 'https://www.example.com/other/page', 'https://www.example.com/third/page'], 'https://othersite.com/', 'https://example.com/canonical/page');
373
+ const baseBidderRequestReferer = detectReferer(testWindow)();
374
+ const baseBidderRequest = {
375
+ 'bidderCode': 'viant',
376
+ 'auctionId': 'e7b34fa3-8654-424e-8c49-03e509e53d8c',
377
+ 'bidderRequestId': '18084284054531',
378
+ 'auctionStart': 1540945362095,
379
+ 'timeout': 3000,
380
+ 'refererInfo': baseBidderRequestReferer,
381
+ 'start': 1540945362099,
382
+ 'doneCbCallCount': 0
383
+ };
384
+
385
+ it('bid response is a video', function () {
386
+ const request = testBuildRequests(baseVideoBidRequests, baseBidderRequest)[0];
387
+ const VIDEO_BID_RESPONSE = {
388
+ 'id': 'bidderRequestId',
389
+ 'bidid': 'e7b34fa3-8654-424e-8c49-03e509e53d8c',
390
+ 'seatbid': [
391
+ {
392
+ 'bid': [
393
+ {
394
+ 'id': '1',
395
+ 'impid': '243310435309b5',
396
+ 'price': 1.09,
397
+ 'adid': '144762342',
398
+ 'nurl': 'http://0.0.0.0:8181/nurl',
399
+ 'adm': '<VAST version="4.2"></VAST>',
400
+ 'adomain': [
401
+ 'https://dummydomain.com'
402
+ ],
403
+ 'cid': 'cid',
404
+ 'crid': 'crid',
405
+ 'iurl': 'iurl',
406
+ 'cat': [],
407
+ 'h': 480,
408
+ 'w': 640
409
+ }
410
+ ]
411
+ }
412
+ ],
413
+ 'cur': 'USD'
414
+ };
415
+ let bids = spec.interpretResponse({body: VIDEO_BID_RESPONSE}, request);
416
+ expect(bids.length).to.equal(1);
417
+ let bid = bids[0];
418
+ it('should return the proper mediaType', function () {
419
+ expect(bid.mediaType).to.equal('video');
420
+ });
421
+ it('should return correct Ad Markup', function () {
422
+ expect(bid.vastXml).to.equal('<VAST version="4.2"></VAST>');
423
+ });
424
+ it('should return correct Notification', function () {
425
+ expect(bid.vastUrl).to.equal('http://0.0.0.0:8181/nurl');
426
+ });
427
+ it('should return correct Cpm', function () {
428
+ expect(bid.cpm).to.equal(1.09);
429
+ });
430
+ });
431
+ });
432
+ });
@@ -29,7 +29,12 @@ describe('vrtcalBidAdapter', function () {
29
29
  'bidderRequestId': 'br0001',
30
30
  'auctionId': 'auction0001',
31
31
  'userIdAsEids': {},
32
- timeout: 435
32
+ timeout: 435,
33
+
34
+ refererInfo: {
35
+ page: 'page'
36
+ }
37
+
33
38
  }
34
39
  ];
35
40
 
@@ -79,9 +84,12 @@ describe('vrtcalBidAdapter', function () {
79
84
  });
80
85
 
81
86
  it('pass 3rd party IDs with the request when present', function () {
82
- bidRequests[0].userIdAsEids = createEidsArray({
83
- tdid: 'TTD_ID_FROM_USER_ID_MODULE'
84
- });
87
+ bidRequests[0].userIdAsEids = [
88
+ {
89
+ source: 'adserver.org',
90
+ uids: [{id: 'TTD_ID_FROM_USER_ID_MODULE', atype: 1, ext: {rtiPartner: 'TDID'}}]
91
+ }
92
+ ];
85
93
 
86
94
  request = spec.buildRequests(bidRequests);
87
95
  expect(request[0].data).to.include(JSON.stringify({ext: {consent: 'gdpr-consent-string', eids: [{source: 'adserver.org', uids: [{id: 'TTD_ID_FROM_USER_ID_MODULE', atype: 1, ext: {rtiPartner: 'TDID'}}]}]}}));