prebid.js 7.26.0 → 7.28.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 (334) hide show
  1. package/.github/workflows/issue_tracker.yml +1 -1
  2. package/dist/33acrossBidAdapter.js +1 -1
  3. package/dist/33acrossIdSystem.js +1 -1
  4. package/dist/adWMGAnalyticsAdapter.js +1 -1
  5. package/dist/adagioAnalyticsAdapter.js +1 -1
  6. package/dist/adagioBidAdapter.js +1 -1
  7. package/dist/adbookpspBidAdapter.js +1 -1
  8. package/dist/adgenerationBidAdapter.js +1 -1
  9. package/dist/adhashBidAdapter.js +1 -1
  10. package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
  11. package/dist/adlooxAdServerVideo.js +1 -1
  12. package/dist/adlooxAnalyticsAdapter.js +1 -1
  13. package/dist/adlooxRtdProvider.js +1 -1
  14. package/dist/admaticBidAdapter.js +1 -1
  15. package/dist/admixerBidAdapter.js +1 -1
  16. package/dist/adomikAnalyticsAdapter.js +1 -1
  17. package/dist/adrelevantisBidAdapter.js +1 -1
  18. package/dist/adtrgtmeBidAdapter.js +1 -1
  19. package/dist/adxcgAnalyticsAdapter.js +1 -1
  20. package/dist/adxcgBidAdapter.js +1 -1
  21. package/dist/adxpremiumAnalyticsAdapter.js +1 -1
  22. package/dist/aidemBidAdapter.js +1 -0
  23. package/dist/ajaBidAdapter.js +1 -1
  24. package/dist/amxBidAdapter.js +1 -1
  25. package/dist/amxIdSystem.js +1 -1
  26. package/dist/analyticsAdapter.js +1 -1
  27. package/dist/appierAnalyticsAdapter.js +1 -1
  28. package/dist/appnexusBidAdapter.js +1 -1
  29. package/dist/asoBidAdapter.js +1 -1
  30. package/dist/atsAnalyticsAdapter.js +1 -1
  31. package/dist/axonixBidAdapter.js +1 -1
  32. package/dist/bidViewability.js +1 -1
  33. package/dist/bidglassBidAdapter.js +1 -1
  34. package/dist/bidwatchAnalyticsAdapter.js +1 -1
  35. package/dist/big-richmediaBidAdapter.js +1 -1
  36. package/dist/bridgewellBidAdapter.js +1 -1
  37. package/dist/brightMountainMediaBidAdapter.js +1 -1
  38. package/dist/browsiRtdProvider.js +1 -1
  39. package/dist/bucksenseBidAdapter.js +1 -1
  40. package/dist/byDataAnalyticsAdapter.js +1 -1
  41. package/dist/carodaBidAdapter.js +1 -1
  42. package/dist/chtnwBidAdapter.js +1 -1
  43. package/dist/concertAnalyticsAdapter.js +1 -1
  44. package/dist/concertBidAdapter.js +1 -1
  45. package/dist/connectadBidAdapter.js +1 -1
  46. package/dist/consentManagement.js +1 -1
  47. package/dist/consentManagementUsp.js +1 -1
  48. package/dist/consumableBidAdapter.js +1 -1
  49. package/dist/conversantAnalyticsAdapter.js +1 -1
  50. package/dist/conversantBidAdapter.js +1 -1
  51. package/dist/craftBidAdapter.js +1 -1
  52. package/dist/criteoBidAdapter.js +1 -1
  53. package/dist/datablocksAnalyticsAdapter.js +1 -1
  54. package/dist/dependencies.json +6 -0
  55. package/dist/dfpAdServerVideo.js +1 -1
  56. package/dist/discoveryBidAdapter.js +1 -1
  57. package/dist/dspxBidAdapter.js +1 -1
  58. package/dist/eplanningAnalyticsAdapter.js +1 -1
  59. package/dist/eplanningBidAdapter.js +1 -1
  60. package/dist/finativeBidAdapter.js +1 -1
  61. package/dist/fintezaAnalyticsAdapter.js +1 -1
  62. package/dist/fluctBidAdapter.js +1 -1
  63. package/dist/ftrackIdSystem.js +1 -1
  64. package/dist/gdprEnforcement.js +1 -1
  65. package/dist/genericAnalyticsAdapter.js +1 -0
  66. package/dist/geoedgeRtdProvider.js +1 -1
  67. package/dist/glimpseBidAdapter.js +1 -1
  68. package/dist/glomexBidAdapter.js +1 -1
  69. package/dist/gmosspBidAdapter.js +1 -1
  70. package/dist/goldbachBidAdapter.js +1 -1
  71. package/dist/googleAnalyticsAdapter.js +1 -1
  72. package/dist/gravitoIdSystem.js +1 -1
  73. package/dist/gridBidAdapter.js +1 -1
  74. package/dist/gridNMBidAdapter.js +1 -1
  75. package/dist/growthCodeAnalyticsAdapter.js +1 -0
  76. package/dist/gumgumBidAdapter.js +1 -1
  77. package/dist/h12mediaBidAdapter.js +1 -1
  78. package/dist/hadronAnalyticsAdapter.js +1 -1
  79. package/dist/id5AnalyticsAdapter.js +1 -1
  80. package/dist/id5IdSystem.js +1 -1
  81. package/dist/impactifyBidAdapter.js +1 -1
  82. package/dist/improvedigitalBidAdapter.js +1 -1
  83. package/dist/inmarBidAdapter.js +1 -1
  84. package/dist/insticatorBidAdapter.js +1 -1
  85. package/dist/invisiblyAnalyticsAdapter.js +1 -1
  86. package/dist/ixBidAdapter.js +1 -1
  87. package/dist/justpremiumBidAdapter.js +1 -1
  88. package/dist/jwplayerRtdProvider.js +1 -1
  89. package/dist/kargoAnalyticsAdapter.js +1 -1
  90. package/dist/kargoBidAdapter.js +1 -1
  91. package/dist/kinessoIdSystem.js +1 -1
  92. package/dist/konduitAnalyticsAdapter.js +1 -1
  93. package/dist/kueezBidAdapter.js +1 -1
  94. package/dist/kueezRtbBidAdapter.js +1 -1
  95. package/dist/lassoBidAdapter.js +1 -1
  96. package/dist/lifestreetBidAdapter.js +1 -1
  97. package/dist/limelightDigitalBidAdapter.js +1 -1
  98. package/dist/liveIntentAnalyticsAdapter.js +1 -1
  99. package/dist/liveIntentIdSystem.js +1 -1
  100. package/dist/livewrappedAnalyticsAdapter.js +1 -1
  101. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  102. package/dist/logicadBidAdapter.js +1 -1
  103. package/dist/loglyliftBidAdapter.js +1 -1
  104. package/dist/lotamePanoramaIdSystem.js +1 -1
  105. package/dist/magniteAnalyticsAdapter.js +1 -1
  106. package/dist/malltvAnalyticsAdapter.js +1 -1
  107. package/dist/marsmediaAnalyticsAdapter.js +1 -1
  108. package/dist/marsmediaBidAdapter.js +1 -1
  109. package/dist/mediafuseBidAdapter.js +1 -1
  110. package/dist/mediagoBidAdapter.js +1 -1
  111. package/dist/medianetAnalyticsAdapter.js +1 -1
  112. package/dist/mediasquareBidAdapter.js +1 -1
  113. package/dist/mgidBidAdapter.js +1 -1
  114. package/dist/minutemediaBidAdapter.js +1 -1
  115. package/dist/nexx360BidAdapter.js +1 -1
  116. package/dist/not-for-prod/prebid.js +206 -202
  117. package/dist/oguryBidAdapter.js +1 -1
  118. package/dist/onetagBidAdapter.js +1 -1
  119. package/dist/ooloAnalyticsAdapter.js +1 -1
  120. package/dist/openxAnalyticsAdapter.js +1 -1
  121. package/dist/optimonAnalyticsAdapter.js +1 -1
  122. package/dist/outbrainBidAdapter.js +1 -1
  123. package/dist/parrableIdSystem.js +1 -1
  124. package/dist/pbsExtensions.js +1 -1
  125. package/dist/pianoDmpAnalyticsAdapter.js +1 -1
  126. package/dist/pixfutureBidAdapter.js +1 -1
  127. package/dist/prebid-core.js +2 -2
  128. package/dist/prebidServerBidAdapter.js +1 -1
  129. package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
  130. package/dist/pubCommonId.js +1 -1
  131. package/dist/pubProvidedIdSystem.js +1 -1
  132. package/dist/publinkIdSystem.js +1 -1
  133. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  134. package/dist/pubmaticBidAdapter.js +1 -1
  135. package/dist/pubperfAnalyticsAdapter.js +1 -1
  136. package/dist/pubstackAnalyticsAdapter.js +1 -1
  137. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  138. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  139. package/dist/pulsepointAnalyticsAdapter.js +1 -1
  140. package/dist/pxyzBidAdapter.js +1 -1
  141. package/dist/quantcastBidAdapter.js +1 -1
  142. package/dist/quantcastIdSystem.js +1 -1
  143. package/dist/rasBidAdapter.js +1 -1
  144. package/dist/readpeakBidAdapter.js +1 -1
  145. package/dist/realvuAnalyticsAdapter.js +1 -1
  146. package/dist/redtramBidAdapter.js +1 -0
  147. package/dist/relaidoBidAdapter.js +1 -1
  148. package/dist/relevantAnalyticsAdapter.js +1 -1
  149. package/dist/rhythmoneBidAdapter.js +1 -1
  150. package/dist/riseBidAdapter.js +1 -1
  151. package/dist/rivrAnalyticsAdapter.js +1 -1
  152. package/dist/roxotAnalyticsAdapter.js +1 -1
  153. package/dist/rtbhouseBidAdapter.js +1 -1
  154. package/dist/rtdModule.js +1 -1
  155. package/dist/rubiconAnalyticsAdapter.js +1 -1
  156. package/dist/rubiconBidAdapter.js +1 -1
  157. package/dist/s2sTesting.js +1 -1
  158. package/dist/scaleableAnalyticsAdapter.js +1 -1
  159. package/dist/schain.js +1 -1
  160. package/dist/seedingAllianceBidAdapter.js +1 -1
  161. package/dist/seedtagBidAdapter.js +1 -1
  162. package/dist/sharedIdSystem.js +1 -1
  163. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  164. package/dist/sharethroughBidAdapter.js +1 -1
  165. package/dist/shinezBidAdapter.js +1 -1
  166. package/dist/sigmoidAnalyticsAdapter.js +1 -1
  167. package/dist/smaatoBidAdapter.js +1 -1
  168. package/dist/smartadserverBidAdapter.js +1 -1
  169. package/dist/smartxBidAdapter.js +1 -1
  170. package/dist/smilewantedBidAdapter.js +1 -1
  171. package/dist/sonobiAnalyticsAdapter.js +1 -1
  172. package/dist/sonobiBidAdapter.js +1 -1
  173. package/dist/sovrnAnalyticsAdapter.js +1 -1
  174. package/dist/sovrnBidAdapter.js +1 -1
  175. package/dist/sspBCBidAdapter.js +1 -1
  176. package/dist/staqAnalyticsAdapter.js +1 -1
  177. package/dist/sublimeBidAdapter.js +1 -1
  178. package/dist/synacormediaBidAdapter.js +1 -1
  179. package/dist/taboolaBidAdapter.js +1 -1
  180. package/dist/tapadIdSystem.js +1 -1
  181. package/dist/targetVideoBidAdapter.js +1 -1
  182. package/dist/teadsBidAdapter.js +1 -1
  183. package/dist/teadsIdSystem.js +1 -1
  184. package/dist/terceptAnalyticsAdapter.js +1 -1
  185. package/dist/trionBidAdapter.js +1 -1
  186. package/dist/tripleliftBidAdapter.js +1 -1
  187. package/dist/ttdBidAdapter.js +1 -1
  188. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  189. package/dist/underdogmediaBidAdapter.js +1 -1
  190. package/dist/undertoneBidAdapter.js +1 -1
  191. package/dist/userId.js +1 -1
  192. package/dist/vidazooBidAdapter.js +1 -1
  193. package/dist/videobyteBidAdapter.js +1 -1
  194. package/dist/visxBidAdapter.js +1 -1
  195. package/dist/vuukleBidAdapter.js +1 -1
  196. package/dist/weboramaRtdProvider.js +1 -1
  197. package/dist/widespaceBidAdapter.js +1 -1
  198. package/dist/winrBidAdapter.js +1 -1
  199. package/dist/yahoosspBidAdapter.js +1 -1
  200. package/dist/yandexBidAdapter.js +1 -1
  201. package/dist/yieldlabBidAdapter.js +1 -1
  202. package/dist/yieldliftBidAdapter.js +1 -1
  203. package/dist/yieldmoBidAdapter.js +1 -1
  204. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  205. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  206. package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
  207. package/integrationExamples/gpt/growthcode.html +134 -0
  208. package/libraries/analyticsAdapter/AnalyticsAdapter.js +95 -102
  209. package/libraries/ortb2.5StrictTranslator/dsl.js +54 -0
  210. package/libraries/ortb2.5StrictTranslator/spec.js +81 -0
  211. package/libraries/ortb2.5StrictTranslator/translator.js +37 -0
  212. package/libraries/ortb2.5Translator/translator.js +82 -0
  213. package/modules/33acrossIdSystem.js +3 -0
  214. package/modules/adhashBidAdapter.js +115 -30
  215. package/modules/adhashBidAdapter.md +1 -3
  216. package/modules/admaticBidAdapter.js +10 -1
  217. package/modules/admixerBidAdapter.js +1 -1
  218. package/modules/aidemBidAdapter.js +492 -0
  219. package/modules/aidemBidAdapter.md +187 -0
  220. package/modules/browsiRtdProvider.js +6 -4
  221. package/modules/bucksenseBidAdapter.js +1 -1
  222. package/modules/criteoBidAdapter.js +3 -3
  223. package/modules/discoveryBidAdapter.js +3 -0
  224. package/modules/eplanningBidAdapter.js +2 -6
  225. package/modules/fluctBidAdapter.js +5 -0
  226. package/modules/gdprEnforcement.js +26 -24
  227. package/modules/genericAnalyticsAdapter.js +157 -0
  228. package/modules/geoedgeRtdProvider.js +22 -0
  229. package/modules/glomexBidAdapter.js +2 -0
  230. package/modules/gravitoIdSystem.js +3 -4
  231. package/modules/gridBidAdapter.js +1 -1
  232. package/modules/gridNMBidAdapter.js +1 -1
  233. package/modules/growthCodeAnalyticsAdapter.js +176 -0
  234. package/modules/growthCodeAnalyticsAdapter.md +41 -0
  235. package/modules/impactifyBidAdapter.js +19 -1
  236. package/modules/jwplayerRtdProvider.js +1 -2
  237. package/modules/kargoBidAdapter.js +1 -1
  238. package/modules/lassoBidAdapter.js +8 -4
  239. package/modules/limelightDigitalBidAdapter.js +1 -1
  240. package/modules/liveIntentIdSystem.js +1 -2
  241. package/modules/mediagoBidAdapter.js +2 -1
  242. package/modules/minutemediaBidAdapter.md +3 -3
  243. package/modules/nexx360BidAdapter.js +264 -138
  244. package/modules/openxBidAdapter.md +15 -14
  245. package/modules/pubCommonId.js +2 -1
  246. package/modules/pubProvidedIdSystem.js +2 -0
  247. package/modules/rasBidAdapter.js +8 -3
  248. package/modules/rasBidAdapter.md +16 -15
  249. package/modules/redtramBidAdapter.js +155 -0
  250. package/modules/redtramBidAdapter.md +33 -0
  251. package/modules/riseBidAdapter.js +15 -0
  252. package/modules/riseBidAdapter.md +3 -3
  253. package/modules/rtbhouseBidAdapter.js +90 -29
  254. package/modules/rubiconBidAdapter.js +2 -1
  255. package/modules/seedtagBidAdapter.js +67 -56
  256. package/modules/seedtagBidAdapter.md +60 -0
  257. package/modules/sharedIdSystem.js +3 -1
  258. package/modules/smartxBidAdapter.js +1 -1
  259. package/modules/smnBidAdapter.md +52 -0
  260. package/modules/taboolaBidAdapter.js +20 -7
  261. package/modules/tripleliftBidAdapter.js +1 -1
  262. package/modules/ttdBidAdapter.js +4 -0
  263. package/modules/vidazooBidAdapter.js +31 -8
  264. package/modules/yandexBidAdapter.js +85 -19
  265. package/modules/yandexBidAdapter.md +7 -7
  266. package/modules/yieldlabBidAdapter.js +10 -4
  267. package/modules/yieldliftBidAdapter.js +3 -3
  268. package/package.json +2 -2
  269. package/src/auction.js +30 -4
  270. package/src/consentHandler.js +8 -0
  271. package/src/constants.json +2 -1
  272. package/src/events.js +4 -0
  273. package/src/native.js +31 -20
  274. package/src/refererDetection.js +6 -1
  275. package/src/storageManager.js +6 -3
  276. package/test/helpers/analytics.js +34 -0
  277. package/test/helpers/refererDetectionHelper.js +88 -0
  278. package/test/mocks/analyticsStub.js +3 -1
  279. package/test/spec/AnalyticsAdapter_spec.js +119 -116
  280. package/test/spec/auctionmanager_spec.js +119 -1
  281. package/test/spec/modules/33acrossIdSystem_spec.js +4 -1
  282. package/test/spec/modules/adWMGAnalyticsAdapter_spec.js +10 -8
  283. package/test/spec/modules/adagioAnalyticsAdapter_spec.js +18 -25
  284. package/test/spec/modules/adhashBidAdapter_spec.js +65 -11
  285. package/test/spec/modules/aidemBidAdapter_spec.js +664 -0
  286. package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +0 -2
  287. package/test/spec/modules/browsiRtdProvider_spec.js +2 -1
  288. package/test/spec/modules/concertAnalyticsAdapter_spec.js +2 -4
  289. package/test/spec/modules/enrichmentFpdModule_spec.js +3 -2
  290. package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +0 -3
  291. package/test/spec/modules/eplanningBidAdapter_spec.js +4 -4
  292. package/test/spec/modules/fluctBidAdapter_spec.js +37 -1
  293. package/test/spec/modules/fpdModule_spec.js +1 -1
  294. package/test/spec/modules/gdprEnforcement_spec.js +115 -68
  295. package/test/spec/modules/genericAnalyticsAdapter_spec.js +284 -0
  296. package/test/spec/modules/geoedgeRtdProvider_spec.js +15 -0
  297. package/test/spec/modules/glomexBidAdapter_spec.js +4 -0
  298. package/test/spec/modules/gravitoIdSystem_spec.js +1 -1
  299. package/test/spec/modules/growthCodeAnalyticsAdapter_spec.js +70 -0
  300. package/test/spec/modules/impactifyBidAdapter_spec.js +13 -0
  301. package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +17 -27
  302. package/test/spec/modules/jwplayerRtdProvider_spec.js +3 -3
  303. package/test/spec/modules/konduitAnalyticsAdapter_spec.js +0 -2
  304. package/test/spec/modules/liveIntentAnalyticsAdapter_spec.js +3 -6
  305. package/test/spec/modules/medianetAnalyticsAdapter_spec.js +7 -1
  306. package/test/spec/modules/nexx360BidAdapter_spec.js +441 -221
  307. package/test/spec/modules/optimonAnalyticsAdapter_spec.js +3 -11
  308. package/test/spec/modules/pianoDmpAnalyticsAdapter_spec.js +4 -11
  309. package/test/spec/modules/prebidmanagerAnalyticsAdapter_spec.js +3 -12
  310. package/test/spec/modules/pubperfAnalyticsAdapter_spec.js +6 -19
  311. package/test/spec/modules/pubstackAnalyticsAdapter_spec.js +3 -17
  312. package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +13 -19
  313. package/test/spec/modules/rasBidAdapter_spec.js +5 -1
  314. package/test/spec/modules/redtramBidAdapter_spec.js +256 -0
  315. package/test/spec/modules/riseBidAdapter_spec.js +24 -0
  316. package/test/spec/modules/rtbhouseBidAdapter_spec.js +79 -0
  317. package/test/spec/modules/seedtagBidAdapter_spec.js +65 -92
  318. package/test/spec/modules/sigmoidAnalyticsAdapter_spec.js +4 -8
  319. package/test/spec/modules/sovrnAnalyticsAdapter_spec.js +6 -18
  320. package/test/spec/modules/taboolaBidAdapter_spec.js +39 -0
  321. package/test/spec/modules/tripleliftBidAdapter_spec.js +3 -10
  322. package/test/spec/modules/ttdBidAdapter_spec.js +50 -9
  323. package/test/spec/modules/vidazooBidAdapter_spec.js +173 -27
  324. package/test/spec/modules/yandexBidAdapter_spec.js +22 -13
  325. package/test/spec/modules/yieldlabBidAdapter_spec.js +49 -20
  326. package/test/spec/modules/yieldliftBidAdapter_spec.js +1 -1
  327. package/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +5 -2
  328. package/test/spec/native_spec.js +68 -56
  329. package/test/spec/ortb2.5StrictTranslator/dsl_spec.js +137 -0
  330. package/test/spec/ortb2.5StrictTranslator/spec_spec.js +358 -0
  331. package/test/spec/ortb2.5StrictTranslator/translator_spec.js +16 -0
  332. package/test/spec/ortb2.5Translator/translator_spec.js +64 -0
  333. package/test/spec/refererDetection_spec.js +46 -95
  334. package/test/spec/unit/core/storageManager_spec.js +2 -1
@@ -1,19 +1,18 @@
1
1
  import { isArray, _map, triggerPixel } from '../src/utils.js';
2
- import { registerBidder } from '../src/adapters/bidderFactory.js'
3
- import { VIDEO, BANNER } from '../src/mediaTypes.js'
2
+ import { registerBidder } from '../src/adapters/bidderFactory.js';
3
+ import { VIDEO, BANNER } from '../src/mediaTypes.js';
4
4
  import { config } from '../src/config.js';
5
5
 
6
6
  const BIDDER_CODE = 'seedtag';
7
7
  const SEEDTAG_ALIAS = 'st';
8
8
  const SEEDTAG_SSP_ENDPOINT = 'https://s.seedtag.com/c/hb/bid';
9
9
  const SEEDTAG_SSP_ONTIMEOUT_ENDPOINT = 'https://s.seedtag.com/se/hb/timeout';
10
- const ALLOWED_PLACEMENTS = {
11
- inImage: true,
12
- inScreen: true,
13
- inArticle: true,
14
- banner: true,
15
- video: true
16
- }
10
+ const ALLOWED_DISPLAY_PLACEMENTS = [
11
+ 'inScreen',
12
+ 'inImage',
13
+ 'inArticle',
14
+ 'inBanner',
15
+ ];
17
16
 
18
17
  // Global Vendor List Id
19
18
  // https://iabeurope.eu/vendor-list-tcf-v2-0/
@@ -21,27 +20,33 @@ const GVLID = 157;
21
20
 
22
21
  const mediaTypesMap = {
23
22
  [BANNER]: 'display',
24
- [VIDEO]: 'video'
23
+ [VIDEO]: 'video',
25
24
  };
26
25
 
27
26
  const deviceConnection = {
28
27
  FIXED: 'fixed',
29
28
  MOBILE: 'mobile',
30
- UNKNOWN: 'unknown'
29
+ UNKNOWN: 'unknown',
31
30
  };
32
31
 
33
32
  const getConnectionType = () => {
34
- const connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection || {}
33
+ const connection =
34
+ navigator.connection ||
35
+ navigator.mozConnection ||
36
+ navigator.webkitConnection ||
37
+ {};
35
38
  switch (connection.type || connection.effectiveType) {
36
39
  case 'wifi':
37
40
  case 'ethernet':
38
- return deviceConnection.FIXED
41
+ return deviceConnection.FIXED;
39
42
  case 'cellular':
40
43
  case 'wimax':
41
- return deviceConnection.MOBILE
44
+ return deviceConnection.MOBILE;
42
45
  default:
43
- const isMobile = /iPad|iPhone|iPod/.test(navigator.userAgent) || /android/i.test(navigator.userAgent)
44
- return isMobile ? deviceConnection.UNKNOWN : deviceConnection.FIXED
46
+ const isMobile =
47
+ /iPad|iPhone|iPod/.test(navigator.userAgent) ||
48
+ /android/i.test(navigator.userAgent);
49
+ return isMobile ? deviceConnection.UNKNOWN : deviceConnection.FIXED;
45
50
  }
46
51
  };
47
52
 
@@ -52,24 +57,32 @@ function mapMediaType(seedtagMediaType) {
52
57
  }
53
58
 
54
59
  function hasVideoMediaType(bid) {
55
- return (!!bid.mediaTypes && !!bid.mediaTypes.video) || (!!bid.params && !!bid.params.video)
60
+ return !!bid.mediaTypes && !!bid.mediaTypes.video;
56
61
  }
57
62
 
58
- function hasMandatoryParams(params) {
63
+ function hasMandatoryDisplayParams(bid) {
64
+ const p = bid.params;
59
65
  return (
60
- !!params.publisherId &&
61
- !!params.adUnitId &&
62
- !!params.placement &&
63
- !!ALLOWED_PLACEMENTS[params.placement]
66
+ !!p.publisherId &&
67
+ !!p.adUnitId &&
68
+ ALLOWED_DISPLAY_PLACEMENTS.indexOf(p.placement) > -1
64
69
  );
65
70
  }
66
71
 
67
72
  function hasMandatoryVideoParams(bid) {
68
- const videoParams = getVideoParams(bid)
73
+ const videoParams = getVideoParams(bid);
69
74
 
70
- return hasVideoMediaType(bid) && !!videoParams.playerSize &&
75
+ return (
76
+ !!bid.params.publisherId &&
77
+ !!bid.params.adUnitId &&
78
+ hasVideoMediaType(bid) &&
79
+ !!videoParams.playerSize &&
71
80
  isArray(videoParams.playerSize) &&
72
- videoParams.playerSize.length > 0;
81
+ videoParams.playerSize.length > 0 &&
82
+ // only instream is supported for video
83
+ videoParams.context === 'instream' &&
84
+ bid.params.placement === 'inStream'
85
+ );
73
86
  }
74
87
 
75
88
  function buildBidRequest(validBidRequest) {
@@ -89,15 +102,11 @@ function buildBidRequest(validBidRequest) {
89
102
  adUnitId: params.adUnitId,
90
103
  adUnitCode: validBidRequest.adUnitCode,
91
104
  placement: params.placement,
92
- requestCount: validBidRequest.bidderRequestsCount || 1 // FIXME : in unit test the parameter bidderRequestsCount is undefined
105
+ requestCount: validBidRequest.bidderRequestsCount || 1, // FIXME : in unit test the parameter bidderRequestsCount is undefined
93
106
  };
94
107
 
95
- if (params.adPosition) {
96
- bidRequest.adPosition = params.adPosition;
97
- }
98
-
99
108
  if (hasVideoMediaType(validBidRequest)) {
100
- bidRequest.videoParams = getVideoParams(validBidRequest)
109
+ bidRequest.videoParams = getVideoParams(validBidRequest);
101
110
  }
102
111
 
103
112
  return bidRequest;
@@ -113,13 +122,7 @@ function getVideoParams(validBidRequest) {
113
122
  videoParams.h = videoParams.playerSize[0][1];
114
123
  }
115
124
 
116
- const bidderVideoParams = (validBidRequest.params && validBidRequest.params.video) || {}
117
- // override video params from seedtag bidder params
118
- Object.keys(bidderVideoParams).forEach(key => {
119
- videoParams[key] = validBidRequest.params.video[key]
120
- })
121
-
122
- return videoParams
125
+ return videoParams;
123
126
  }
124
127
 
125
128
  function buildBidResponse(seedtagBid) {
@@ -136,8 +139,11 @@ function buildBidResponse(seedtagBid) {
136
139
  ttl: seedtagBid.ttl,
137
140
  nurl: seedtagBid.nurl,
138
141
  meta: {
139
- advertiserDomains: seedtagBid && seedtagBid.adomain && seedtagBid.adomain.length > 0 ? seedtagBid.adomain : []
140
- }
142
+ advertiserDomains:
143
+ seedtagBid && seedtagBid.adomain && seedtagBid.adomain.length > 0
144
+ ? seedtagBid.adomain
145
+ : [],
146
+ },
141
147
  };
142
148
 
143
149
  if (mediaType === VIDEO) {
@@ -181,16 +187,21 @@ function ttfb() {
181
187
  export function getTimeoutUrl(data) {
182
188
  let queryParams = '';
183
189
  if (
184
- isArray(data) && data[0] &&
185
- isArray(data[0].params) && data[0].params[0]
190
+ isArray(data) &&
191
+ data[0] &&
192
+ isArray(data[0].params) &&
193
+ data[0].params[0]
186
194
  ) {
187
195
  const params = data[0].params[0];
188
- const timeout = data[0].timeout
196
+ const timeout = data[0].timeout;
189
197
 
190
198
  queryParams =
191
- '?publisherToken=' + params.publisherId +
192
- '&adUnitId=' + params.adUnitId +
193
- '&timeout=' + timeout;
199
+ '?publisherToken=' +
200
+ params.publisherId +
201
+ '&adUnitId=' +
202
+ params.adUnitId +
203
+ '&timeout=' +
204
+ timeout;
194
205
  }
195
206
  return SEEDTAG_SSP_ONTIMEOUT_ENDPOINT + queryParams;
196
207
  }
@@ -208,8 +219,8 @@ export const spec = {
208
219
  */
209
220
  isBidRequestValid(bid) {
210
221
  return hasVideoMediaType(bid)
211
- ? hasMandatoryParams(bid.params) && hasMandatoryVideoParams(bid)
212
- : hasMandatoryParams(bid.params);
222
+ ? hasMandatoryVideoParams(bid)
223
+ : hasMandatoryDisplayParams(bid);
213
224
  },
214
225
 
215
226
  /**
@@ -237,24 +248,24 @@ export const spec = {
237
248
  payload['cd'] = bidderRequest.gdprConsent.consentString;
238
249
  }
239
250
  if (bidderRequest.uspConsent) {
240
- payload['uspConsent'] = bidderRequest.uspConsent
251
+ payload['uspConsent'] = bidderRequest.uspConsent;
241
252
  }
242
253
 
243
254
  if (validBidRequests[0].schain) {
244
255
  payload.schain = validBidRequests[0].schain;
245
256
  }
246
257
 
247
- let coppa = config.getConfig('coppa')
258
+ let coppa = config.getConfig('coppa');
248
259
  if (coppa) {
249
- payload.coppa = coppa
260
+ payload.coppa = coppa;
250
261
  }
251
262
 
252
- const payloadString = JSON.stringify(payload)
263
+ const payloadString = JSON.stringify(payload);
253
264
  return {
254
265
  method: 'POST',
255
266
  url: SEEDTAG_SSP_ENDPOINT,
256
- data: payloadString
257
- }
267
+ data: payloadString,
268
+ };
258
269
  },
259
270
 
260
271
  /**
@@ -308,6 +319,6 @@ export const spec = {
308
319
  if (bid && bid.nurl) {
309
320
  triggerPixel(bid.nurl);
310
321
  }
311
- }
312
- }
322
+ },
323
+ };
313
324
  registerBidder(spec);
@@ -59,3 +59,63 @@ const adUnits = [
59
59
  }
60
60
  ]
61
61
  ```
62
+
63
+ ## InBanner
64
+ ```js
65
+ const adUnits = [
66
+ {
67
+ code: '/21804003197/prebid_test_300x250',
68
+ mediaTypes: {
69
+ banner: {
70
+ sizes: [[300, 250]]
71
+ }
72
+ },
73
+ bids: [
74
+ {
75
+ bidder: 'seedtag',
76
+ params: {
77
+ publisherId: '0000-0000-01', // required
78
+ adUnitId: '0000', // required
79
+ placement: 'inBanner', // required
80
+ }
81
+ }
82
+ ]
83
+ }
84
+ ]
85
+ ```
86
+
87
+ ## inStream Video
88
+ ```js
89
+ var adUnits = [{
90
+ code: 'video',
91
+ mediaTypes: {
92
+ video: {
93
+ context: 'instream', // required
94
+ playerSize: [640, 360], // required
95
+ // Video object as specified in OpenRTB 2.5
96
+ mimes: ['video/mp4'], // recommended
97
+ minduration: 5, // optional
98
+ maxduration: 60, // optional
99
+ boxingallowed: 1, // optional
100
+ skip: 1, // optional
101
+ startdelay: 1, // optional
102
+ linearity: 1, // optional
103
+ battr: [1, 2], // optional
104
+ maxbitrate: 10, // optional
105
+ playbackmethod: [1], // optional
106
+ delivery: [1], // optional
107
+ placement: 1, // optional
108
+ }
109
+ },
110
+ bids: [
111
+ {
112
+ bidder: 'seedtag',
113
+ params: {
114
+ publisherId: '0000-0000-01', // required
115
+ adUnitId: '0000', // required
116
+ placement: 'inStream', // required
117
+ }
118
+ }
119
+ ]
120
+ }];
121
+ ```
@@ -9,8 +9,9 @@ import { parseUrl, buildUrl, triggerPixel, logInfo, hasDeviceAccess, generateUUI
9
9
  import {submodule} from '../src/hook.js';
10
10
  import { coppaDataHandler } from '../src/adapterManager.js';
11
11
  import {getStorageManager} from '../src/storageManager.js';
12
+ import {VENDORLESS_GVLID} from '../src/consentHandler.js';
12
13
 
13
- export const storage = getStorageManager({moduleName: 'pubCommonId'});
14
+ export const storage = getStorageManager({moduleName: 'pubCommonId', gvlid: VENDORLESS_GVLID});
14
15
  const COOKIE = 'cookie';
15
16
  const LOCAL_STORAGE = 'html5';
16
17
  const OPTOUT_NAME = '_pubcid_optout';
@@ -73,6 +74,7 @@ export const sharedIdSystemSubmodule = {
73
74
  */
74
75
  name: 'sharedId',
75
76
  aliasName: 'pubCommonId',
77
+ gvlid: VENDORLESS_GVLID,
76
78
 
77
79
  /**
78
80
  * decode the stored id value for passing to bid requests
@@ -245,7 +245,7 @@ export const spec = {
245
245
  options: {
246
246
  contentType: 'application/json',
247
247
  customHeaders: {
248
- 'x-openrtb-version': '2.3'
248
+ 'x-openrtb-version': '2.5'
249
249
  }
250
250
  }
251
251
  };
@@ -0,0 +1,52 @@
1
+ # Overview
2
+
3
+ Module Name: SMN Bidder Adapter
4
+ Module Type: Bidder Adapter
5
+ Maintainer: smnoffice.belgrade@gmail.com
6
+
7
+ # Description
8
+
9
+ Connects to SMN demand source to fetch bids.
10
+ Banner and Video formats are supported.
11
+ Please use ```smn``` as the bidder code.
12
+
13
+ # Test Parameters
14
+ ```
15
+ var adUnits = [
16
+ {
17
+ code: 'desktop-banner-ad-div',
18
+ sizes: [[300, 250]], // a display size
19
+ bids: [
20
+ {
21
+ bidder: "smn",
22
+ params: {
23
+ zone: '2eb6bd58-865c-47ce-af7f-a918108c3fd2'
24
+ }
25
+ }
26
+ ]
27
+ },{
28
+ code: 'mobile-banner-ad-div',
29
+ sizes: [[300, 50]], // a mobile size
30
+ bids: [
31
+ {
32
+ bidder: "smn",
33
+ params: {
34
+ zone: '62211486-c50b-4356-9f0f-411778d31fcc'
35
+ }
36
+ }
37
+ ]
38
+ },{
39
+ code: 'video-ad',
40
+ sizes: [[300, 50]],
41
+ mediaType: 'video',
42
+ bids: [
43
+ {
44
+ bidder: "smn",
45
+ params: {
46
+ zone: 'ebeb1e79-8cb4-4473-b2d0-2e24b7ff47fd'
47
+ }
48
+ }
49
+ ]
50
+ },
51
+ ];
52
+ ```
@@ -170,15 +170,28 @@ function getSiteProperties({publisherId, bcat = []}, refererInfo) {
170
170
 
171
171
  function getImps(validBidRequests) {
172
172
  return validBidRequests.map((bid, id) => {
173
- const {tagId, bidfloor = null, bidfloorcur = CURRENCY} = bid.params;
174
-
175
- return {
173
+ const {tagId} = bid.params;
174
+ const imp = {
176
175
  id: id + 1,
177
176
  banner: getBanners(bid),
178
- tagid: tagId,
179
- bidfloor,
180
- bidfloorcur,
181
- };
177
+ tagid: tagId
178
+ }
179
+ if (typeof bid.getFloor === 'function') {
180
+ const floorInfo = bid.getFloor({
181
+ currency: CURRENCY,
182
+ mediaType: BANNER,
183
+ size: '*'
184
+ });
185
+ if (typeof floorInfo === 'object' && floorInfo.currency === CURRENCY && !isNaN(parseFloat(floorInfo.floor))) {
186
+ imp.bidfloor = parseFloat(floorInfo.floor);
187
+ imp.bidfloorcur = CURRENCY;
188
+ }
189
+ } else {
190
+ const {bidfloor = null, bidfloorcur = CURRENCY} = bid.params;
191
+ imp.bidfloor = bidfloor;
192
+ imp.bidfloorcur = bidfloorcur;
193
+ }
194
+ return imp;
182
195
  });
183
196
  }
184
197
 
@@ -29,7 +29,7 @@ export const tripleliftAdapterSpec = {
29
29
  tlCall = tryAppendQueryString(tlCall, 'v', '$prebid.version$');
30
30
 
31
31
  if (bidderRequest && bidderRequest.refererInfo) {
32
- let referrer = bidderRequest?.refererInfo?.topmostLocation || bidderRequest?.refererInfo?.page;
32
+ let referrer = bidderRequest.refererInfo.page;
33
33
  tlCall = tryAppendQueryString(tlCall, 'referrer', referrer);
34
34
  }
35
35
 
@@ -38,6 +38,10 @@ function getRegs(bidderRequest) {
38
38
  if (config.getConfig('coppa') === true) {
39
39
  regs.coppa = 1;
40
40
  }
41
+ if (bidderRequest.ortb2?.regs) {
42
+ utils.mergeDeep(regs, bidderRequest.ortb2.regs);
43
+ }
44
+
41
45
  return regs;
42
46
  }
43
47
 
@@ -1,7 +1,8 @@
1
1
  import { _each, deepAccess, parseSizesInput, parseUrl, uniques, isFn } from '../src/utils.js';
2
2
  import { registerBidder } from '../src/adapters/bidderFactory.js';
3
- import { BANNER } from '../src/mediaTypes.js';
3
+ import { BANNER, VIDEO } from '../src/mediaTypes.js';
4
4
  import { getStorageManager } from '../src/storageManager.js';
5
+ import { bidderSettings } from '../src/bidderSettings.js';
5
6
 
6
7
  const GVLID = 744;
7
8
  const DEFAULT_SUB_DOMAIN = 'prebid';
@@ -58,7 +59,7 @@ function isBidRequestValid(bid) {
58
59
  }
59
60
 
60
61
  function buildRequest(bid, topWindowUrl, sizes, bidderRequest) {
61
- const { params, bidId, userId, adUnitCode, schain } = bid;
62
+ const { params, bidId, userId, adUnitCode, schain, mediaTypes } = bid;
62
63
  const { ext } = params;
63
64
  let { bidFloor } = params;
64
65
  const hashUrl = hashCode(topWindowUrl);
@@ -69,6 +70,11 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest) {
69
70
  const pId = extractPID(params);
70
71
  const subDomain = extractSubDomain(params);
71
72
  const ptrace = getCacheOpt();
73
+ const isStorageAllowed = bidderSettings.get(BIDDER_CODE, 'storageAllowed');
74
+
75
+ const gpid = deepAccess(bid, 'ortb2Imp.ext.gpid', deepAccess(bid, 'ortb2Imp.ext.data.pbadslot', ''));
76
+ const cat = deepAccess(bidderRequest, 'ortb2.site.cat', []);
77
+ const pagecat = deepAccess(bidderRequest, 'ortb2.site.pagecat', []);
72
78
 
73
79
  if (isFn(bid.getFloor)) {
74
80
  const floorInfo = bid.getFloor({
@@ -99,7 +105,12 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest) {
99
105
  prebidVersion: '$prebid.version$',
100
106
  res: `${screen.width}x${screen.height}`,
101
107
  schain: schain,
102
- ptrace: ptrace
108
+ mediaTypes: mediaTypes,
109
+ ptrace: ptrace,
110
+ isStorageAllowed: isStorageAllowed,
111
+ gpid: gpid,
112
+ cat: cat,
113
+ pagecat: pagecat
103
114
  };
104
115
 
105
116
  appendUserIdsToRequestPayload(data, userId);
@@ -178,11 +189,12 @@ function interpretResponse(serverResponse, request) {
178
189
 
179
190
  try {
180
191
  results.forEach(result => {
181
- const { creativeId, ad, price, exp, width, height, currency, advertiserDomains } = result;
192
+ const { creativeId, ad, price, exp, width, height, currency, advertiserDomains, mediaType = BANNER } = result;
182
193
  if (!ad || !price) {
183
194
  return;
184
195
  }
185
- output.push({
196
+
197
+ const response = {
186
198
  requestId: bidId,
187
199
  cpm: price,
188
200
  width: width,
@@ -191,11 +203,22 @@ function interpretResponse(serverResponse, request) {
191
203
  currency: currency || CURRENCY,
192
204
  netRevenue: true,
193
205
  ttl: exp || TTL_SECONDS,
194
- ad: ad,
195
206
  meta: {
196
207
  advertiserDomains: advertiserDomains || []
197
208
  }
198
- })
209
+ };
210
+
211
+ if (mediaType === BANNER) {
212
+ Object.assign(response, {
213
+ ad: ad,
214
+ });
215
+ } else {
216
+ Object.assign(response, {
217
+ vastXml: ad,
218
+ mediaType: VIDEO
219
+ });
220
+ }
221
+ output.push(response);
199
222
  });
200
223
  return output;
201
224
  } catch (e) {
@@ -312,7 +335,7 @@ export const spec = {
312
335
  code: BIDDER_CODE,
313
336
  version: BIDDER_VERSION,
314
337
  gvlid: GVLID,
315
- supportedMediaTypes: [BANNER],
338
+ supportedMediaTypes: [BANNER, VIDEO],
316
339
  isBidRequestValid,
317
340
  buildRequests,
318
341
  interpretResponse,
@@ -1,5 +1,6 @@
1
- import { formatQS, deepAccess, triggerPixel } from '../src/utils.js';
1
+ import { formatQS, deepAccess, triggerPixel, isArray, isNumber } from '../src/utils.js';
2
2
  import { registerBidder } from '../src/adapters/bidderFactory.js';
3
+ import { BANNER } from '../src/mediaTypes.js'
3
4
 
4
5
  const BIDDER_CODE = 'yandex';
5
6
  const BIDDER_URL = 'https://bs.yandex.ru/metadsp';
@@ -10,9 +11,19 @@ const SSP_ID = 10500;
10
11
  export const spec = {
11
12
  code: BIDDER_CODE,
12
13
  aliases: ['ya'], // short code
14
+ supportedMediaTypes: [ BANNER ],
13
15
 
14
16
  isBidRequestValid: function(bid) {
15
- return !!(bid.params && bid.params.pageId && bid.params.impId);
17
+ const { params } = bid;
18
+ if (!params) {
19
+ return false;
20
+ }
21
+ const { pageId, impId } = extractPlacementIds(params);
22
+ if (!(pageId && impId)) {
23
+ return false;
24
+ }
25
+ const sizes = bid.mediaTypes?.banner?.sizes;
26
+ return isArray(sizes) && isArray(sizes[0]) && isNumber(sizes[0][0]) && isNumber(sizes[0][1]);
16
27
  },
17
28
 
18
29
  buildRequests: function(validBidRequests, bidderRequest) {
@@ -29,9 +40,19 @@ export const spec = {
29
40
  page = bidderRequest.refererInfo.page;
30
41
  }
31
42
 
43
+ let timeout = null;
44
+ if (bidderRequest) {
45
+ timeout = bidderRequest.timeout;
46
+ }
47
+
32
48
  return validBidRequests.map((bidRequest) => {
33
49
  const { params } = bidRequest;
34
- const { pageId, impId, targetRef, withCredentials = true } = params;
50
+ const { targetRef, withCredentials = true } = params;
51
+ const sizes = bidRequest.mediaTypes.banner.sizes;
52
+ const size = sizes[0];
53
+ const [ w, h ] = size;
54
+
55
+ const { pageId, impId } = extractPlacementIds(params);
35
56
 
36
57
  const queryParams = {
37
58
  'imp-id': impId,
@@ -43,24 +64,23 @@ export const spec = {
43
64
  queryParams['tcf-consent'] = consentString;
44
65
  }
45
66
 
46
- const floorInfo = bidRequest.getFloor ? bidRequest.getFloor({
47
- currency: DEFAULT_CURRENCY
48
- }) : {};
49
- const bidfloor = floorInfo.floor;
50
- const bidfloorcur = floorInfo.currency;
51
-
52
67
  const imp = {
53
68
  id: impId,
54
- bidfloor,
55
- bidfloorcur,
56
- };
57
- const bannerParams = deepAccess(bidRequest, 'mediaTypes.banner');
58
- if (bannerParams) {
59
- const [ w, h ] = bannerParams.sizes[0];
60
- imp.banner = {
69
+ banner: {
70
+ format: sizes,
61
71
  w,
62
72
  h,
63
- };
73
+ }
74
+ };
75
+
76
+ if (bidRequest.getFloor) {
77
+ const floorInfo = bidRequest.getFloor({
78
+ currency: DEFAULT_CURRENCY,
79
+ size
80
+ });
81
+
82
+ imp.bidfloor = floorInfo.floor;
83
+ imp.bidfloorcur = floorInfo.currency;
64
84
  }
65
85
 
66
86
  const queryParamsString = formatQS(queryParams);
@@ -74,6 +94,7 @@ export const spec = {
74
94
  ref_url: referrer,
75
95
  page_url: page,
76
96
  },
97
+ tmax: timeout,
77
98
  },
78
99
  options: {
79
100
  withCredentials,
@@ -102,6 +123,7 @@ export const spec = {
102
123
  width: rtbBid.w,
103
124
  height: rtbBid.h,
104
125
  creativeId: rtbBid.adid,
126
+ nurl: rtbBid.nurl,
105
127
 
106
128
  netRevenue: true,
107
129
  ttl: DEFAULT_TTL,
@@ -118,13 +140,57 @@ export const spec = {
118
140
  },
119
141
 
120
142
  onBidWon: function (bid) {
121
- const nurl = bid['nurl'];
122
-
143
+ let nurl = bid['nurl'];
123
144
  if (!nurl) {
124
145
  return;
125
146
  }
147
+
148
+ const cpm = deepAccess(bid, 'adserverTargeting.hb_pb') || '';
149
+ const curr = (bid.hasOwnProperty('originalCurrency') && bid.hasOwnProperty('originalCpm'))
150
+ ? bid.originalCurrency
151
+ : bid.currency;
152
+
153
+ nurl = nurl
154
+ .replace(/\${AUCTION_PRICE}/, cpm)
155
+ .replace(/\${AUCTION_CURRENCY}/, curr)
156
+ ;
157
+
126
158
  triggerPixel(nurl);
127
159
  }
128
160
  }
129
161
 
162
+ function extractPlacementIds(bidRequestParams) {
163
+ const { placementId } = bidRequestParams;
164
+ const result = { pageId: null, impId: null };
165
+
166
+ let pageId, impId;
167
+ if (placementId) {
168
+ /*
169
+ * Possible formats
170
+ * R-I-123456-2
171
+ * R-123456-1
172
+ * 123456-789
173
+ */
174
+ const num = placementId.lastIndexOf('-');
175
+ if (num === -1) {
176
+ return result;
177
+ }
178
+ const num2 = placementId.lastIndexOf('-', num - 1);
179
+ pageId = placementId.slice(num2 + 1, num);
180
+ impId = placementId.slice(num + 1);
181
+ } else {
182
+ pageId = bidRequestParams.pageId;
183
+ impId = bidRequestParams.impId;
184
+ }
185
+
186
+ if (!parseInt(pageId, 10) || !parseInt(impId, 10)) {
187
+ return result;
188
+ }
189
+
190
+ result.pageId = pageId;
191
+ result.impId = impId;
192
+
193
+ return result;
194
+ }
195
+
130
196
  registerBidder(spec);