prebid.js 7.10.0 → 7.13.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 (366) hide show
  1. package/.github/PULL_REQUEST_TEMPLATE.md +16 -10
  2. package/.github/codeql/codeql-config.yml +4 -0
  3. package/.github/workflows/codeql-analysis.yml +73 -0
  4. package/.github/workflows/issue_tracker.yml +1 -1
  5. package/README.md +0 -2
  6. package/babelConfig.js +10 -4
  7. package/dist/33acrossBidAdapter.js +1 -1
  8. package/dist/acuityAdsBidAdapter.js +1 -0
  9. package/dist/adagioBidAdapter.js +1 -1
  10. package/dist/adbookpspBidAdapter.js +1 -1
  11. package/dist/adgenerationBidAdapter.js +1 -1
  12. package/dist/adkernelBidAdapter.js +1 -1
  13. package/dist/adrelevantisBidAdapter.js +1 -1
  14. package/dist/adriverBidAdapter.js +1 -1
  15. package/dist/adriverIdSystem.js +1 -1
  16. package/dist/adtelligentBidAdapter.js +1 -1
  17. package/dist/adtrgtmeBidAdapter.js +1 -0
  18. package/dist/adxcgBidAdapter.js +1 -1
  19. package/dist/adyoulikeBidAdapter.js +1 -1
  20. package/dist/ajaBidAdapter.js +1 -1
  21. package/dist/alkimiBidAdapter.js +1 -1
  22. package/dist/amxBidAdapter.js +1 -1
  23. package/dist/amxIdSystem.js +1 -1
  24. package/dist/aniviewBidAdapter.js +1 -1
  25. package/dist/aolBidAdapter.js +1 -1
  26. package/dist/appierAnalyticsAdapter.js +1 -1
  27. package/dist/appnexusBidAdapter.js +1 -1
  28. package/dist/asoBidAdapter.js +1 -1
  29. package/dist/audiencerunBidAdapter.js +1 -1
  30. package/dist/axonixBidAdapter.js +1 -1
  31. package/dist/beopBidAdapter.js +1 -1
  32. package/dist/betweenBidAdapter.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/bluebillywigBidAdapter.js +1 -1
  37. package/dist/brandmetricsRtdProvider.js +1 -1
  38. package/dist/bridgewellBidAdapter.js +1 -1
  39. package/dist/brightMountainMediaBidAdapter.js +1 -1
  40. package/dist/browsiRtdProvider.js +1 -1
  41. package/dist/cleanioRtdProvider.js +1 -1
  42. package/dist/concertBidAdapter.js +1 -1
  43. package/dist/connectadBidAdapter.js +1 -1
  44. package/dist/consentManagement.js +1 -1
  45. package/dist/consentManagementUsp.js +1 -1
  46. package/dist/consumableBidAdapter.js +1 -1
  47. package/dist/conversantBidAdapter.js +1 -1
  48. package/dist/cpmstarBidAdapter.js +1 -1
  49. package/dist/craftBidAdapter.js +1 -1
  50. package/dist/criteoBidAdapter.js +1 -1
  51. package/dist/currency.js +1 -1
  52. package/dist/datawrkzBidAdapter.js +1 -0
  53. package/dist/debugging-standalone.js +1 -1
  54. package/dist/dfpAdServerVideo.js +1 -1
  55. package/dist/dgkeywordRtdProvider.js +1 -1
  56. package/dist/displayioBidAdapter.js +1 -3
  57. package/dist/dspxBidAdapter.js +1 -1
  58. package/dist/enrichmentFpdModule.js +1 -1
  59. package/dist/eplanningBidAdapter.js +1 -1
  60. package/dist/finativeBidAdapter.js +1 -1
  61. package/dist/glimpseBidAdapter.js +1 -1
  62. package/dist/gmosspBidAdapter.js +1 -1
  63. package/dist/goldbachBidAdapter.js +1 -1
  64. package/dist/gridBidAdapter.js +1 -1
  65. package/dist/gridNMBidAdapter.js +1 -1
  66. package/dist/gumgumBidAdapter.js +1 -1
  67. package/dist/h12mediaBidAdapter.js +1 -1
  68. package/dist/id5IdSystem.js +1 -1
  69. package/dist/imRtdProvider.js +1 -1
  70. package/dist/impactifyBidAdapter.js +1 -1
  71. package/dist/improvedigitalBidAdapter.js +1 -1
  72. package/dist/inmarBidAdapter.js +1 -1
  73. package/dist/insticatorBidAdapter.js +1 -1
  74. package/dist/ixBidAdapter.js +1 -1
  75. package/dist/jixieBidAdapter.js +1 -1
  76. package/dist/justpremiumBidAdapter.js +1 -1
  77. package/dist/kargoBidAdapter.js +1 -1
  78. package/dist/konduitAnalyticsAdapter.js +1 -1
  79. package/dist/kueezBidAdapter.js +1 -1
  80. package/dist/lassoBidAdapter.js +1 -1
  81. package/dist/lifestreetBidAdapter.js +1 -0
  82. package/dist/limelightDigitalBidAdapter.js +1 -1
  83. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  84. package/dist/logicadBidAdapter.js +1 -1
  85. package/dist/loglyliftBidAdapter.js +1 -1
  86. package/dist/mabidderBidAdapter.js +1 -0
  87. package/dist/malltvAnalyticsAdapter.js +1 -1
  88. package/dist/marsmediaBidAdapter.js +1 -1
  89. package/dist/mediafuseBidAdapter.js +1 -1
  90. package/dist/mediagoBidAdapter.js +1 -0
  91. package/dist/mediakeysBidAdapter.js +1 -1
  92. package/dist/mediasquareBidAdapter.js +1 -1
  93. package/dist/mgidBidAdapter.js +1 -1
  94. package/dist/minutemediaBidAdapter.js +1 -1
  95. package/dist/nextMillenniumBidAdapter.js +1 -1
  96. package/dist/not-for-prod/prebid.js +153 -147
  97. package/dist/oguryBidAdapter.js +1 -1
  98. package/dist/oneKeyIdSystem.js +1 -0
  99. package/dist/oneKeyRtdProvider.js +1 -0
  100. package/dist/onetagBidAdapter.js +1 -1
  101. package/dist/ooloAnalyticsAdapter.js +1 -1
  102. package/dist/openxAnalyticsAdapter.js +1 -1
  103. package/dist/outbrainBidAdapter.js +1 -1
  104. package/dist/parrableIdSystem.js +1 -1
  105. package/dist/permutiveRtdProvider.js +1 -1
  106. package/dist/pixfutureBidAdapter.js +1 -1
  107. package/dist/prebid-core.js +2 -2
  108. package/dist/publinkIdSystem.js +1 -1
  109. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  110. package/dist/pubmaticBidAdapter.js +1 -1
  111. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  112. package/dist/pxyzBidAdapter.js +1 -1
  113. package/dist/quantcastBidAdapter.js +1 -1
  114. package/dist/rasBidAdapter.js +1 -1
  115. package/dist/readpeakBidAdapter.js +1 -1
  116. package/dist/relaidoBidAdapter.js +1 -1
  117. package/dist/rhythmoneBidAdapter.js +1 -1
  118. package/dist/riseBidAdapter.js +1 -1
  119. package/dist/rtbhouseBidAdapter.js +1 -1
  120. package/dist/rubiconAnalyticsAdapter.js +1 -1
  121. package/dist/rubiconBidAdapter.js +1 -1
  122. package/dist/seedingAllianceBidAdapter.js +1 -1
  123. package/dist/seedtagBidAdapter.js +1 -1
  124. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  125. package/dist/sharethroughBidAdapter.js +1 -1
  126. package/dist/shinezBidAdapter.js +1 -1
  127. package/dist/smaatoBidAdapter.js +1 -1
  128. package/dist/smartadserverBidAdapter.js +1 -1
  129. package/dist/smartxBidAdapter.js +1 -1
  130. package/dist/smilewantedBidAdapter.js +1 -1
  131. package/dist/sonobiBidAdapter.js +1 -1
  132. package/dist/sovrnAnalyticsAdapter.js +1 -1
  133. package/dist/sovrnBidAdapter.js +1 -1
  134. package/dist/sspBCBidAdapter.js +1 -1
  135. package/dist/sublimeBidAdapter.js +1 -1
  136. package/dist/synacormediaBidAdapter.js +1 -1
  137. package/dist/tappxBidAdapter.js +1 -1
  138. package/dist/targetVideoBidAdapter.js +1 -1
  139. package/dist/teadsBidAdapter.js +1 -1
  140. package/dist/trionBidAdapter.js +1 -1
  141. package/dist/tripleliftBidAdapter.js +1 -1
  142. package/dist/trustpidSystem.js +1 -1
  143. package/dist/ttdBidAdapter.js +1 -1
  144. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  145. package/dist/underdogmediaBidAdapter.js +1 -1
  146. package/dist/undertoneBidAdapter.js +1 -1
  147. package/dist/userId.js +1 -1
  148. package/dist/vidazooBidAdapter.js +1 -1
  149. package/dist/videobyteBidAdapter.js +1 -1
  150. package/dist/viewability.js +1 -1
  151. package/dist/visxBidAdapter.js +1 -1
  152. package/dist/vuukleBidAdapter.js +1 -1
  153. package/dist/widespaceBidAdapter.js +1 -1
  154. package/dist/winrBidAdapter.js +1 -1
  155. package/dist/yahoosspBidAdapter.js +1 -1
  156. package/dist/yieldmoBidAdapter.js +1 -1
  157. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  158. package/dist/zeta_global_sspBidAdapter.js +1 -1
  159. package/integrationExamples/gpt/permutiveRtdProvider_example.html +1 -1
  160. package/karma.conf.maker.js +2 -13
  161. package/modules/.submodules.json +2 -0
  162. package/modules/acuityAdsBidAdapter.js +207 -0
  163. package/modules/acuityAdsBidAdapter.md +79 -0
  164. package/modules/adagioBidAdapter.js +2 -3
  165. package/modules/adgenerationBidAdapter.js +2 -2
  166. package/modules/adkernelBidAdapter.js +28 -12
  167. package/modules/admixerBidAdapter.js +1 -1
  168. package/modules/adnowBidAdapter.js +1 -1
  169. package/modules/adpod.js +1 -1
  170. package/modules/adrelevantisBidAdapter.js +2 -2
  171. package/modules/adriverBidAdapter.js +5 -12
  172. package/modules/adriverIdSystem.js +2 -1
  173. package/modules/adtargetBidAdapter.js +1 -1
  174. package/modules/adtelligentBidAdapter.js +6 -2
  175. package/modules/adtrgtmeBidAdapter.js +333 -0
  176. package/modules/adtrgtmeBidAdapter.md +69 -0
  177. package/modules/adtrueBidAdapter.js +1 -1
  178. package/modules/adxpremiumAnalyticsAdapter.js +1 -1
  179. package/modules/adyoulikeBidAdapter.js +1 -1
  180. package/modules/alkimiBidAdapter.js +2 -1
  181. package/modules/aniviewBidAdapter.js +1 -1
  182. package/modules/appnexusBidAdapter.js +13 -93
  183. package/modules/apstreamBidAdapter.js +2 -2
  184. package/modules/beopBidAdapter.js +4 -4
  185. package/modules/betweenBidAdapter.js +4 -4
  186. package/modules/bidwatchAnalyticsAdapter.js +112 -59
  187. package/modules/bizzclickBidAdapter.js +1 -1
  188. package/modules/brightMountainMediaBidAdapter.js +1 -1
  189. package/modules/browsiRtdProvider.js +24 -10
  190. package/modules/cleanmedianetBidAdapter.js +1 -1
  191. package/modules/consentManagement.js +1 -1
  192. package/modules/consentManagementUsp.js +1 -1
  193. package/modules/consumableBidAdapter.js +43 -3
  194. package/modules/cpmstarBidAdapter.js +23 -13
  195. package/modules/criteoBidAdapter.js +19 -13
  196. package/modules/currency.js +1 -0
  197. package/modules/cwireBidAdapter.js +1 -1
  198. package/modules/datablocksBidAdapter.js +1 -1
  199. package/modules/datawrkzBidAdapter.js +633 -0
  200. package/modules/datawrkzBidAdapter.md +160 -0
  201. package/modules/dfpAdServerVideo.js +2 -2
  202. package/modules/dgkeywordRtdProvider.js +10 -1
  203. package/modules/displayioBidAdapter.js +92 -97
  204. package/modules/dspxBidAdapter.js +1 -1
  205. package/modules/e_volutionBidAdapter.js +3 -3
  206. package/modules/ebdrBidAdapter.js +1 -1
  207. package/modules/emx_digitalBidAdapter.js +1 -1
  208. package/modules/enrichmentFpdModule.js +11 -0
  209. package/modules/fabrickIdSystem.js +2 -2
  210. package/modules/gamoshiBidAdapter.js +1 -1
  211. package/modules/getintentBidAdapter.js +1 -1
  212. package/modules/gjirafaBidAdapter.js +2 -2
  213. package/modules/goldbachBidAdapter.js +8 -8
  214. package/modules/gothamadsBidAdapter.js +2 -2
  215. package/modules/gumgumBidAdapter.js +3 -3
  216. package/modules/h12mediaBidAdapter.js +1 -1
  217. package/modules/id5AnalyticsAdapter.js +1 -1
  218. package/modules/id5IdSystem.js +160 -111
  219. package/modules/id5IdSystem.md +16 -14
  220. package/modules/imRtdProvider.js +20 -7
  221. package/modules/imRtdProvider.md +3 -1
  222. package/modules/impactifyBidAdapter.js +1 -1
  223. package/modules/improvedigitalBidAdapter.js +50 -28
  224. package/modules/inskinBidAdapter.js +1 -1
  225. package/modules/insticatorBidAdapter.js +1 -1
  226. package/modules/integr8BidAdapter.js +2 -2
  227. package/modules/intentIqIdSystem.js +2 -2
  228. package/modules/interactiveOffersBidAdapter.js +1 -1
  229. package/modules/iqmBidAdapter.js +1 -1
  230. package/modules/ixBidAdapter.js +21 -328
  231. package/modules/ixBidAdapter.md +1 -19
  232. package/modules/kargoBidAdapter.js +4 -5
  233. package/modules/krushmediaBidAdapter.js +2 -2
  234. package/modules/lassoBidAdapter.js +3 -3
  235. package/modules/lifestreetBidAdapter.js +143 -0
  236. package/modules/limelightDigitalBidAdapter.js +2 -1
  237. package/modules/livewrappedAnalyticsAdapter.js +3 -3
  238. package/modules/lkqdBidAdapter.js +3 -3
  239. package/modules/loganBidAdapter.js +2 -2
  240. package/modules/luponmediaBidAdapter.js +3 -3
  241. package/modules/mabidderBidAdapter.js +60 -0
  242. package/modules/mabidderBidAdapter.md +31 -0
  243. package/modules/malltvBidAdapter.js +2 -2
  244. package/modules/mediagoBidAdapter.js +462 -0
  245. package/modules/mediagoBidAdapter.md +34 -0
  246. package/modules/mediakeysBidAdapter.js +2 -2
  247. package/modules/mgidBidAdapter.js +2 -2
  248. package/modules/nextMillenniumBidAdapter.js +25 -6
  249. package/modules/nobidBidAdapter.js +2 -2
  250. package/modules/novatiqIdSystem.js +1 -1
  251. package/modules/oneKeyIdSystem.js +78 -0
  252. package/modules/oneKeyIdSystem.md +109 -0
  253. package/modules/oneKeyRtdProvider.js +98 -0
  254. package/modules/oneKeyRtdProvider.md +127 -0
  255. package/modules/open8BidAdapter.js +1 -1
  256. package/modules/openwebBidAdapter.js +1 -1
  257. package/modules/openxAnalyticsAdapter.js +5 -744
  258. package/modules/openxAnalyticsAdapter.md +4 -0
  259. package/modules/openxBidAdapter.js +3 -3
  260. package/modules/permutiveRtdProvider.js +55 -8
  261. package/modules/pixfutureBidAdapter.js +1 -1
  262. package/modules/prebidmanagerAnalyticsAdapter.js +1 -1
  263. package/modules/priceFloors.js +1 -1
  264. package/modules/pubmaticAnalyticsAdapter.js +1 -1
  265. package/modules/pubmaticBidAdapter.js +19 -1
  266. package/modules/pubwiseAnalyticsAdapter.js +1 -1
  267. package/modules/pubwiseBidAdapter.js +3 -3
  268. package/modules/pubxBidAdapter.js +1 -1
  269. package/modules/pubxaiAnalyticsAdapter.js +2 -2
  270. package/modules/quantcastIdSystem.js +1 -1
  271. package/modules/radsBidAdapter.js +1 -1
  272. package/modules/rasBidAdapter.js +8 -0
  273. package/modules/rasBidAdapter.md +14 -13
  274. package/modules/revcontentBidAdapter.js +1 -1
  275. package/modules/richaudienceBidAdapter.js +1 -1
  276. package/modules/rtbhouseBidAdapter.js +25 -1
  277. package/modules/schain.js +1 -1
  278. package/modules/seedtagBidAdapter.md +25 -56
  279. package/modules/showheroes-bsBidAdapter.js +1 -1
  280. package/modules/sizeMappingV2.js +1 -1
  281. package/modules/smaatoBidAdapter.js +2 -2
  282. package/modules/sonobiAnalyticsAdapter.js +1 -1
  283. package/modules/sonobiBidAdapter.js +4 -3
  284. package/modules/staqAnalyticsAdapter.js +1 -1
  285. package/modules/tappxBidAdapter.js +11 -2
  286. package/modules/targetVideoBidAdapter.js +1 -1
  287. package/modules/theAdxBidAdapter.js +2 -2
  288. package/modules/tpmnBidAdapter.js +1 -1
  289. package/modules/trionBidAdapter.js +2 -2
  290. package/modules/tripleliftBidAdapter.js +20 -1
  291. package/modules/trustpidSystem.js +6 -42
  292. package/modules/trustpidSystem.md +10 -10
  293. package/modules/underdogmediaBidAdapter.js +1 -1
  294. package/modules/userId/eids.js +26 -0
  295. package/modules/userId/userId.md +2 -2
  296. package/modules/vdoaiBidAdapter.js +1 -1
  297. package/modules/vidazooBidAdapter.js +7 -5
  298. package/modules/vidoomyBidAdapter.js +1 -1
  299. package/modules/viewability.js +14 -14
  300. package/modules/winrBidAdapter.js +1 -1
  301. package/modules/yahoosspBidAdapter.js +3 -3
  302. package/modules/yandexBidAdapter.js +1 -1
  303. package/modules/yieldmoBidAdapter.js +3 -3
  304. package/modules/yieldoneBidAdapter.js +2 -2
  305. package/modules/zeta_global_sspBidAdapter.js +24 -21
  306. package/package.json +3 -3
  307. package/src/Renderer.js +1 -1
  308. package/src/adloader.js +2 -1
  309. package/src/adserver.js +0 -56
  310. package/src/auction.js +60 -16
  311. package/src/bidfactory.js +1 -1
  312. package/src/native.js +75 -60
  313. package/src/refererDetection.js +12 -1
  314. package/src/sizeMapping.js +5 -7
  315. package/src/targeting.js +1 -1
  316. package/src/userSync.js +1 -1
  317. package/src/utils/promise.js +3 -1
  318. package/src/utils.js +27 -0
  319. package/src/video.js +5 -4
  320. package/src/videoCache.js +8 -2
  321. package/test/pages/instream.html +2 -2
  322. package/test/spec/modules/acuityAdsBidAdapter_spec.js +398 -0
  323. package/test/spec/modules/adagioBidAdapter_spec.js +2 -0
  324. package/test/spec/modules/adkernelBidAdapter_spec.js +11 -2
  325. package/test/spec/modules/adriverBidAdapter_spec.js +6 -13
  326. package/test/spec/modules/adriverIdSystem_spec.js +3 -8
  327. package/test/spec/modules/adtelligentBidAdapter_spec.js +2 -0
  328. package/test/spec/modules/adtrgtmeBidAdapter_spec.js +802 -0
  329. package/test/spec/modules/alkimiBidAdapter_spec.js +2 -1
  330. package/test/spec/modules/appnexusBidAdapter_spec.js +1 -0
  331. package/test/spec/modules/beopBidAdapter_spec.js +11 -0
  332. package/test/spec/modules/betweenBidAdapter_spec.js +17 -0
  333. package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +28 -12
  334. package/test/spec/modules/big-richmediaBidAdapter_spec.js +1 -0
  335. package/test/spec/modules/browsiRtdProvider_spec.js +40 -1
  336. package/test/spec/modules/consumableBidAdapter_spec.js +158 -0
  337. package/test/spec/modules/cpmstarBidAdapter_spec.js +1 -1
  338. package/test/spec/modules/criteoBidAdapter_spec.js +35 -26
  339. package/test/spec/modules/currency_spec.js +22 -0
  340. package/test/spec/modules/datawrkzBidAdapter_spec.js +656 -0
  341. package/test/spec/modules/dgkeywordRtdProvider_spec.js +1 -1
  342. package/test/spec/modules/displayioBidAdapter_spec.js +16 -52
  343. package/test/spec/modules/enrichmentFpdModule_spec.js +16 -1
  344. package/test/spec/modules/fpdModule_spec.js +2 -1
  345. package/test/spec/modules/id5IdSystem_spec.js +529 -172
  346. package/test/spec/modules/imRtdProvider_spec.js +10 -5
  347. package/test/spec/modules/improvedigitalBidAdapter_spec.js +9 -13
  348. package/test/spec/modules/ixBidAdapter_spec.js +216 -123
  349. package/test/spec/modules/kargoBidAdapter_spec.js +11 -2
  350. package/test/spec/modules/lifestreetBidAdapter_spec.js +232 -0
  351. package/test/spec/modules/limelightDigitalBidAdapter_spec.js +59 -7
  352. package/test/spec/modules/mabidderBidAdapter_spec.js +125 -0
  353. package/test/spec/modules/mediagoBidAdapter_spec.js +97 -0
  354. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +2 -7
  355. package/test/spec/modules/oneKeyIdSystem_spec.js +107 -0
  356. package/test/spec/modules/oneKeyRtdProvider_spec.js +152 -0
  357. package/test/spec/modules/openxAnalyticsAdapter_spec.js +6 -638
  358. package/test/spec/modules/permutiveRtdProvider_spec.js +152 -2
  359. package/test/spec/modules/pubmaticBidAdapter_spec.js +69 -4
  360. package/test/spec/modules/rasBidAdapter_spec.js +2 -0
  361. package/test/spec/modules/tripleliftBidAdapter_spec.js +18 -0
  362. package/test/spec/modules/trustpidSystem_spec.js +27 -45
  363. package/test/spec/modules/vidazooBidAdapter_spec.js +36 -23
  364. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +59 -0
  365. package/test/spec/native_spec.js +257 -2
  366. package/test/spec/videoCache_spec.js +37 -7
@@ -0,0 +1,69 @@
1
+ # Overview
2
+
3
+ **Module Name**: adtrgtme Bidder Adapter
4
+ **Module Type**: Bidder Adapter
5
+ **Maintainer**: info@adtarget.me
6
+
7
+ # Description
8
+ The Adtrgtme Bid Adapter is an OpenRTB interface that support display demand from Adtarget
9
+
10
+ # Supported Features:
11
+ * Media Types: Banner
12
+ * Multi-format adUnits
13
+ * Price floors module
14
+ * Advertiser domains
15
+
16
+ # Mandatory Bidder Parameters
17
+ The minimal requirements for the 'adtrgtme' bid adapter to generate an outbound bid-request to our Adtrgtme are:
18
+ 1. At least 1 banner adUnit
19
+ 2. Your Adtrgtme site id **bidder.params**.**sid**
20
+
21
+ ## Example:
22
+ ```javascript
23
+ const adUnits = [{
24
+ code: 'your-placement',
25
+ mediaTypes: {
26
+ banner: {
27
+ sizes: [[300, 250]]
28
+ }
29
+ },
30
+ bids: [
31
+ {
32
+ bidder: 'adtrgtme',
33
+ params: {
34
+ sid: 1220291391, // Site/App ID provided from SSP
35
+ }
36
+ }
37
+ ]
38
+ }];
39
+ ```
40
+
41
+ # Optional: Price floors module & bidfloor
42
+ The adtargerme adapter supports the Prebid.org Price Floors module and will use it to define the outbound bidfloor and currency.
43
+ By default the adapter will always check the existance of Module price floor.
44
+ If a module price floor does not exist you can set a custom bid floor for your impression using "params.bidOverride.imp.bidfloor".
45
+
46
+ ```javascript
47
+ const adUnits = [{
48
+ code: 'your-placement',
49
+ mediaTypes: {
50
+ banner: {
51
+ sizes: [
52
+ [300, 250]
53
+ ]
54
+ }
55
+ },
56
+ bids: [{
57
+ bidder: 'adtrgtme',
58
+ params: {
59
+ sid: 1220291391,
60
+ bidOverride :{
61
+ imp: {
62
+ bidfloor: 5.00 // bidOverride bidfloor
63
+ }
64
+ }
65
+ }
66
+ }
67
+ }]
68
+ }];
69
+ ```
@@ -45,7 +45,7 @@ const VIDEO_CUSTOM_PARAMS = {
45
45
  'placement': DATA_TYPES.NUMBER,
46
46
  'minbitrate': DATA_TYPES.NUMBER,
47
47
  'maxbitrate': DATA_TYPES.NUMBER
48
- }
48
+ };
49
49
 
50
50
  const NATIVE_ASSETS = {
51
51
  'TITLE': {ID: 1, KEY: 'title', TYPE: 0},
@@ -263,7 +263,7 @@ adxpremiumAnalyticsAdapter.enableAnalytics = function (config) {
263
263
  }
264
264
 
265
265
  adxpremiumAnalyticsAdapter.originEnableAnalytics(config); // call the base class function
266
- }
266
+ };
267
267
 
268
268
  adapterManager.registerAnalyticsAdapter({
269
269
  adapter: adxpremiumAnalyticsAdapter,
@@ -444,7 +444,7 @@ function getNativeAssets(response, nativeConfig) {
444
444
  /* Create bid from response */
445
445
  function createBid(response, bidRequests) {
446
446
  if (!response || (!response.Ad && !response.Native && !response.Vast)) {
447
- return
447
+ return;
448
448
  }
449
449
 
450
450
  const request = bidRequests && bidRequests[response.BidID];
@@ -31,7 +31,8 @@ export const spec = {
31
31
  bidFloor: bidRequest.params.bidFloor,
32
32
  width: sizes[0].width,
33
33
  height: sizes[0].height,
34
- impMediaType: getFormatType(bidRequest)
34
+ impMediaType: getFormatType(bidRequest),
35
+ adUnitCode: bidRequest.adUnitCode
35
36
  })
36
37
  bidIds.push(bidRequest.bidId)
37
38
  })
@@ -306,7 +306,7 @@ function getUserSyncs(syncOptions, serverResponses) {
306
306
  export const spec = {
307
307
  code: BIDDER_CODE,
308
308
  gvlid: GVLID,
309
- aliases: ['avantisvideo', 'selectmediavideo', 'vidcrunch', 'openwebvideo', 'didnavideo', 'ottadvisors'],
309
+ aliases: ['avantisvideo', 'selectmediavideo', 'vidcrunch', 'openwebvideo', 'didnavideo', 'ottadvisors', 'pgammedia'],
310
310
  supportedMediaTypes: [VIDEO, BANNER],
311
311
  isBidRequestValid,
312
312
  buildRequests,
@@ -10,6 +10,7 @@ import {
10
10
  getMaxValueFromArray,
11
11
  getMinValueFromArray,
12
12
  getParameterByName,
13
+ getUniqueIdentifierStr,
13
14
  isArray,
14
15
  isArrayOfNums,
15
16
  isEmpty,
@@ -444,16 +445,6 @@ export const spec = {
444
445
  }
445
446
 
446
447
  return params;
447
- },
448
-
449
- /**
450
- * Add element selector to javascript tracker to improve native viewability
451
- * @param {Bid} bid
452
- */
453
- onBidWon: function (bid) {
454
- if (FEATURES.NATIVE && bid.native) {
455
- reloadViewabilityScriptWithCorrectParameters(bid);
456
- }
457
448
  }
458
449
  };
459
450
 
@@ -467,58 +458,9 @@ function deleteValues(keyPairObj) {
467
458
  }
468
459
  }
469
460
 
470
- function reloadViewabilityScriptWithCorrectParameters(bid) {
471
- let viewJsPayload = getAppnexusViewabilityScriptFromJsTrackers(bid.native.javascriptTrackers);
472
-
473
- if (viewJsPayload) {
474
- let prebidParams = 'pbjs_adid=' + bid.adId + ';pbjs_auc=' + bid.adUnitCode;
475
-
476
- let jsTrackerSrc = getViewabilityScriptUrlFromPayload(viewJsPayload);
477
-
478
- let newJsTrackerSrc = jsTrackerSrc.replace('dom_id=%native_dom_id%', prebidParams);
479
-
480
- // find iframe containing script tag
481
- let frameArray = document.getElementsByTagName('iframe');
482
-
483
- // boolean var to modify only one script. That way if there are muliple scripts,
484
- // they won't all point to the same creative.
485
- let modifiedAScript = false;
486
-
487
- // first, loop on all ifames
488
- for (let i = 0; i < frameArray.length && !modifiedAScript; i++) {
489
- let currentFrame = frameArray[i];
490
- try {
491
- // IE-compatible, see https://stackoverflow.com/a/3999191/2112089
492
- let nestedDoc = currentFrame.contentDocument || currentFrame.contentWindow.document;
493
-
494
- if (nestedDoc) {
495
- // if the doc is present, we look for our jstracker
496
- let scriptArray = nestedDoc.getElementsByTagName('script');
497
- for (let j = 0; j < scriptArray.length && !modifiedAScript; j++) {
498
- let currentScript = scriptArray[j];
499
- if (currentScript.getAttribute('data-src') == jsTrackerSrc) {
500
- currentScript.setAttribute('src', newJsTrackerSrc);
501
- currentScript.setAttribute('data-src', '');
502
- if (currentScript.removeAttribute) {
503
- currentScript.removeAttribute('data-src');
504
- }
505
- modifiedAScript = true;
506
- }
507
- }
508
- }
509
- } catch (exception) {
510
- // trying to access a cross-domain iframe raises a SecurityError
511
- // this is expected and ignored
512
- if (!(exception instanceof DOMException && exception.name === 'SecurityError')) {
513
- // all other cases are raised again to be treated by the calling function
514
- throw exception;
515
- }
516
- }
517
- }
518
- }
519
- }
520
-
521
461
  function strIsAppnexusViewabilityScript(str) {
462
+ if (!str || str === '') return false;
463
+
522
464
  let regexMatchUrlStart = str.match(VIEWABILITY_URL_START);
523
465
  let viewUrlStartInStr = regexMatchUrlStart != null && regexMatchUrlStart.length >= 1;
524
466
 
@@ -528,30 +470,6 @@ function strIsAppnexusViewabilityScript(str) {
528
470
  return str.startsWith(SCRIPT_TAG_START) && fileNameInStr && viewUrlStartInStr;
529
471
  }
530
472
 
531
- function getAppnexusViewabilityScriptFromJsTrackers(jsTrackerArray) {
532
- let viewJsPayload;
533
- if (isStr(jsTrackerArray) && strIsAppnexusViewabilityScript(jsTrackerArray)) {
534
- viewJsPayload = jsTrackerArray;
535
- } else if (isArray(jsTrackerArray)) {
536
- for (let i = 0; i < jsTrackerArray.length; i++) {
537
- let currentJsTracker = jsTrackerArray[i];
538
- if (strIsAppnexusViewabilityScript(currentJsTracker)) {
539
- viewJsPayload = currentJsTracker;
540
- }
541
- }
542
- }
543
- return viewJsPayload;
544
- }
545
-
546
- function getViewabilityScriptUrlFromPayload(viewJsPayload) {
547
- // extracting the content of the src attribute
548
- // -> substring between src=" and "
549
- let indexOfFirstQuote = viewJsPayload.indexOf('src="') + 5; // offset of 5: the length of 'src=' + 1
550
- let indexOfSecondQuote = viewJsPayload.indexOf('"', indexOfFirstQuote);
551
- let jsTrackerSrc = viewJsPayload.substring(indexOfFirstQuote, indexOfSecondQuote);
552
- return jsTrackerSrc;
553
- }
554
-
555
473
  function formatRequest(payload, bidderRequest) {
556
474
  let request = [];
557
475
  let options = {
@@ -633,7 +551,9 @@ function newRenderer(adUnitCode, rtbBid, rendererOptions = {}) {
633
551
  */
634
552
  function newBid(serverBid, rtbBid, bidderRequest) {
635
553
  const bidRequest = getBidRequest(serverBid.uuid, [bidderRequest]);
554
+ const adId = getUniqueIdentifierStr();
636
555
  const bid = {
556
+ adId: adId,
637
557
  requestId: serverBid.uuid,
638
558
  cpm: rtbBid.cpm,
639
559
  creativeId: rtbBid.creative_id,
@@ -721,20 +641,20 @@ function newBid(serverBid, rtbBid, bidderRequest) {
721
641
  }
722
642
  } else if (FEATURES.NATIVE && rtbBid.rtb[NATIVE]) {
723
643
  const nativeAd = rtbBid.rtb[NATIVE];
644
+ let viewScript;
724
645
 
725
- // setting up the jsTracker:
726
- // we put it as a data-src attribute so that the tracker isn't called
727
- // until we have the adId (see onBidWon)
728
- let jsTrackerDisarmed = rtbBid.viewability.config.replace('src=', 'data-src=');
646
+ if (strIsAppnexusViewabilityScript(rtbBid.viewability.config)) {
647
+ let prebidParams = 'pbjs_adid=' + adId + ';pbjs_auc=' + bidRequest.adUnitCode;
648
+ viewScript = rtbBid.viewability.config.replace('dom_id=%native_dom_id%', prebidParams);
649
+ }
729
650
 
730
651
  let jsTrackers = nativeAd.javascript_trackers;
731
-
732
652
  if (jsTrackers == undefined) {
733
- jsTrackers = jsTrackerDisarmed;
653
+ jsTrackers = viewScript;
734
654
  } else if (isStr(jsTrackers)) {
735
- jsTrackers = [jsTrackers, jsTrackerDisarmed];
655
+ jsTrackers = [jsTrackers, viewScript];
736
656
  } else {
737
- jsTrackers.push(jsTrackerDisarmed);
657
+ jsTrackers.push(viewScript);
738
658
  }
739
659
 
740
660
  bid[NATIVE] = {
@@ -267,7 +267,7 @@ var dsuModule = (function() {
267
267
 
268
268
  return {
269
269
  readOrCreateDsu: readOrCreateDsu
270
- }
270
+ };
271
271
  })();
272
272
 
273
273
  function serializeSizes(sizes) {
@@ -343,7 +343,7 @@ function getBids(bids) {
343
343
  const bidId = bid.bidId;
344
344
 
345
345
  let mediaType = '';
346
- const mediaTypes = Object.keys(bid.mediaTypes)
346
+ const mediaTypes = Object.keys(bid.mediaTypes);
347
347
  switch (mediaTypes[0]) {
348
348
  case 'video':
349
349
  mediaType = 'v';
@@ -99,12 +99,12 @@ export const spec = {
99
99
  }
100
100
 
101
101
  function buildTrackingParams(data, info, value) {
102
- const accountId = data.params.accountId;
102
+ let params = Array.isArray(data.params) ? data.params[0] : data.params;
103
103
  const pageUrl = getPageUrl(null, window);
104
104
  return {
105
- pid: accountId === undefined ? data.ad.match(/account: \“([a-f\d]{24})\“/)[1] : accountId,
106
- nid: data.params.networkId,
107
- nptnid: data.params.networkPartnerId,
105
+ pid: params.accountId === undefined ? data.ad.match(/account: \“([a-f\d]{24})\“/)[1] : params.accountId,
106
+ nid: params.networkId,
107
+ nptnid: params.networkPartnerId,
108
108
  bid: data.bidId || data.requestId,
109
109
  sl_n: data.adUnitCode,
110
110
  aid: data.auctionId,
@@ -59,9 +59,9 @@ export const spec = {
59
59
  if (i.params.itu !== undefined) {
60
60
  params.itu = i.params.itu;
61
61
  }
62
- if (i.params.cur !== undefined) {
63
- params.cur = i.params.cur;
64
- }
62
+
63
+ params.cur = i.params.cur || 'USD';
64
+
65
65
  if (i.params.subid !== undefined) {
66
66
  params.subid = i.params.subid;
67
67
  }
@@ -90,7 +90,7 @@ export const spec = {
90
90
  }
91
91
  }
92
92
 
93
- requests.push({data: params})
93
+ requests.push({data: params});
94
94
  })
95
95
  return {
96
96
  method: 'POST',
@@ -12,6 +12,7 @@ const {
12
12
  BID_WON,
13
13
  BID_RESPONSE,
14
14
  BID_REQUESTED,
15
+ BID_TIMEOUT,
15
16
  }
16
17
  } = CONSTANTS;
17
18
 
@@ -20,80 +21,125 @@ let allEvents = {}
20
21
  let auctionEnd = {}
21
22
  let initOptions = {}
22
23
  let endpoint = 'https://default'
23
- let objectToSearchForBidderCode = ['bidderRequests', 'bidsReceived', 'noBids']
24
+ let requestsAttributes = ['adUnitCode', 'auctionId', 'bidder', 'bidderCode', 'bidId', 'cpm', 'creativeId', 'currency', 'width', 'height', 'mediaType', 'netRevenue', 'originalCpm', 'originalCurrency', 'requestId', 'size', 'source', 'status', 'timeToRespond', 'transactionId', 'ttl', 'sizes', 'mediaTypes', 'src', 'params', 'userId', 'labelAny', 'bids'];
24
25
 
25
26
  function getAdapterNameForAlias(aliasName) {
26
27
  return adapterManager.aliasRegistry[aliasName] || aliasName;
27
28
  }
28
29
 
29
- function cleanArgObject(arg, removead) {
30
- if (typeof arg['bidderCode'] == 'string') { arg['originalBidder'] = getAdapterNameForAlias(arg['bidderCode']); }
31
- if (typeof arg['creativeId'] == 'number') {
32
- arg['creativeId'] = arg['creativeId'].toString();
33
- }
34
- if (removead && typeof arg['ad'] != 'undefined') {
35
- arg['ad'] = 'emptied';
36
- }
37
- if (typeof arg['gdprConsent'] != 'undefined' && typeof arg['gdprConsent']['vendorData'] != 'undefined') {
38
- arg['gdprConsent']['vendorData'] = 'emptied';
30
+ function filterAttributes(arg, removead) {
31
+ let response = {};
32
+ if (typeof arg == 'object') {
33
+ if (typeof arg['bidderCode'] == 'string') {
34
+ response['originalBidder'] = getAdapterNameForAlias(arg['bidderCode']);
35
+ } else if (typeof arg['bidder'] == 'string') {
36
+ response['originalBidder'] = getAdapterNameForAlias(arg['bidder']);
37
+ }
38
+ if (!removead && typeof arg['ad'] != 'undefined') {
39
+ response['ad'] = arg['ad'];
40
+ }
41
+ if (typeof arg['gdprConsent'] != 'undefined') {
42
+ response['gdprConsent'] = {};
43
+ if (typeof arg['gdprConsent']['consentString'] != 'undefined') { response['gdprConsent']['consentString'] = arg['gdprConsent']['consentString']; }
44
+ }
45
+ requestsAttributes.forEach((attr) => {
46
+ if (typeof arg[attr] != 'undefined') { response[attr] = arg[attr]; }
47
+ });
48
+ if (typeof response['creativeId'] == 'number') { response['creativeId'] = response['creativeId'].toString(); }
39
49
  }
40
- return arg;
50
+ return response;
41
51
  }
42
52
 
43
- function cleanArgs(arg, removead) {
44
- Object.keys(arg).forEach(key => {
45
- arg[key] = cleanArgObject(arg[key], removead);
53
+ function cleanAuctionEnd(args) {
54
+ let response = {};
55
+ let filteredObj;
56
+ let objects = ['bidderRequests', 'bidsReceived', 'noBids'];
57
+ objects.forEach((attr) => {
58
+ if (Array.isArray(args[attr])) {
59
+ response[attr] = [];
60
+ args[attr].forEach((obj) => {
61
+ filteredObj = filterAttributes(obj, true);
62
+ if (typeof obj['bids'] == 'object') {
63
+ filteredObj['bids'] = [];
64
+ obj['bids'].forEach((bid) => {
65
+ filteredObj['bids'].push(filterAttributes(bid, true));
66
+ });
67
+ }
68
+ response[attr].push(filteredObj);
69
+ });
70
+ }
46
71
  });
47
- return arg
72
+ return response;
73
+ }
74
+
75
+ function cleanCreatives(args) {
76
+ return filterAttributes(args, false);
48
77
  }
49
78
 
50
- function checkBidderCode(args, removead) {
51
- if (typeof args == 'object') {
52
- for (let i = 0; i < objectToSearchForBidderCode.length; i++) {
53
- if (typeof args[objectToSearchForBidderCode[i]] == 'object') { args[objectToSearchForBidderCode[i]] = cleanArgs(args[objectToSearchForBidderCode[i]], removead) }
79
+ function enhanceMediaType(arg) {
80
+ saveEvents['bidRequested'].forEach((bidRequested) => {
81
+ if (bidRequested['auctionId'] == arg['auctionId'] && Array.isArray(bidRequested['bids'])) {
82
+ bidRequested['bids'].forEach((bid) => {
83
+ if (bid['transactionId'] == arg['transactionId'] && bid['bidId'] == arg['requestId']) { arg['mediaTypes'] = bid['mediaTypes']; }
84
+ });
54
85
  }
55
- }
56
- if (typeof args['bidderCode'] == 'string') { args['originalBidder'] = getAdapterNameForAlias(args['bidderCode']); } else if (typeof args['bidder'] == 'string') { args['originalBidder'] = getAdapterNameForAlias(args['bidder']); }
57
- if (typeof args['creativeId'] == 'number') { args['creativeId'] = args['creativeId'].toString(); }
86
+ });
87
+ return arg;
88
+ }
58
89
 
59
- return args
90
+ function addBidResponse(args) {
91
+ let eventType = BID_RESPONSE;
92
+ let argsCleaned = cleanCreatives(JSON.parse(JSON.stringify(args))); ;
93
+ if (allEvents[eventType] == undefined) { allEvents[eventType] = [] }
94
+ allEvents[eventType].push(argsCleaned);
60
95
  }
61
96
 
62
- function addEvent(eventType, args) {
63
- let argsCleaned;
64
- if (eventType && args) {
65
- if (allEvents[eventType] == undefined) { allEvents[eventType] = [] }
66
- if (saveEvents[eventType] == undefined) { saveEvents[eventType] = [] }
67
- argsCleaned = checkBidderCode(JSON.parse(JSON.stringify(args)), false);
68
- allEvents[eventType].push(argsCleaned);
69
- saveEvents[eventType].push(argsCleaned);
70
- argsCleaned = checkBidderCode(JSON.parse(JSON.stringify(args)), true);
71
- if (['auctionend', 'bidtimeout'].includes(eventType.toLowerCase())) {
72
- if (auctionEnd[eventType] == undefined) { auctionEnd[eventType] = [] }
73
- auctionEnd[eventType].push(argsCleaned);
74
- }
75
- }
97
+ function addBidRequested(args) {
98
+ let eventType = BID_REQUESTED;
99
+ let argsCleaned = filterAttributes(args, true);
100
+ if (saveEvents[eventType] == undefined) { saveEvents[eventType] = [] }
101
+ saveEvents[eventType].push(argsCleaned);
102
+ }
103
+
104
+ function addTimeout(args) {
105
+ let eventType = BID_TIMEOUT;
106
+ if (saveEvents[eventType] == undefined) { saveEvents[eventType] = [] }
107
+ saveEvents[eventType].push(args);
108
+ let argsCleaned = [];
109
+ let argsDereferenced = JSON.parse(JSON.stringify(args));
110
+ argsDereferenced.forEach((attr) => {
111
+ argsCleaned.push(filterAttributes(JSON.parse(JSON.stringify(attr)), false));
112
+ });
113
+ if (auctionEnd[eventType] == undefined) { auctionEnd[eventType] = [] }
114
+ auctionEnd[eventType].push(argsCleaned);
115
+ }
116
+
117
+ function addAuctionEnd(args) {
118
+ let eventType = AUCTION_END;
119
+ if (saveEvents[eventType] == undefined) { saveEvents[eventType] = [] }
120
+ saveEvents[eventType].push(args);
121
+ let argsCleaned = cleanAuctionEnd(JSON.parse(JSON.stringify(args)));
122
+ if (auctionEnd[eventType] == undefined) { auctionEnd[eventType] = [] }
123
+ auctionEnd[eventType].push(argsCleaned);
76
124
  }
77
125
 
78
126
  function handleBidWon(args) {
79
- args = cleanArgObject(JSON.parse(JSON.stringify(args)), true);
127
+ args = enhanceMediaType(filterAttributes(JSON.parse(JSON.stringify(args)), true));
80
128
  let increment = args['cpm'];
81
129
  if (typeof saveEvents['auctionEnd'] == 'object') {
82
- for (let i = 0; i < saveEvents['auctionEnd'].length; i++) {
83
- let tmpAuction = saveEvents['auctionEnd'][i];
84
- if (tmpAuction['auctionId'] == args['auctionId'] && typeof tmpAuction['bidsReceived'] == 'object') {
85
- for (let j = 0; j < tmpAuction['bidsReceived'].length; j++) {
86
- let tmpBid = tmpAuction['bidsReceived'][j];
87
- if (tmpBid['transactionId'] == args['transactionId'] && tmpBid['adId'] != args['adId']) {
88
- if (args['cpm'] < tmpBid['cpm']) {
130
+ saveEvents['auctionEnd'].forEach((auction) => {
131
+ if (auction['auctionId'] == args['auctionId'] && typeof auction['bidsReceived'] == 'object') {
132
+ auction['bidsReceived'].forEach((bid) => {
133
+ if (bid['transactionId'] == args['transactionId'] && bid['adId'] != args['adId']) {
134
+ if (args['cpm'] < bid['cpm']) {
89
135
  increment = 0;
90
- } else if (increment > args['cpm'] - tmpBid['cpm']) {
91
- increment = args['cpm'] - tmpBid['cpm'];
136
+ } else if (increment > args['cpm'] - bid['cpm']) {
137
+ increment = args['cpm'] - bid['cpm'];
92
138
  }
93
139
  }
94
- }
140
+ });
95
141
  }
96
- }
142
+ });
97
143
  }
98
144
  args['cpmIncrement'] = increment;
99
145
  if (typeof saveEvents.bidRequested == 'object' && saveEvents.bidRequested.length > 0 && saveEvents.bidRequested[0].gdprConsent) { args.gdpr = saveEvents.bidRequested[0].gdprConsent; }
@@ -101,12 +147,16 @@ function handleBidWon(args) {
101
147
  }
102
148
 
103
149
  function handleAuctionEnd() {
104
- ajax(endpoint + '.bidwatch.io/analytics/auctions', null, JSON.stringify(auctionEnd), {method: 'POST', withCredentials: true});
105
- auctionEnd = {}
106
- if (typeof allEvents['bidResponse'] != 'undefined') {
107
- for (let i = 0; i < allEvents['bidResponse'].length; i++) { ajax(endpoint + '.bidwatch.io/analytics/creatives', null, JSON.stringify(allEvents['bidResponse'][i]), {method: 'POST', withCredentials: true}); }
108
- }
109
- allEvents = {}
150
+ ajax(endpoint + '.bidwatch.io/analytics/auctions', function (data) {
151
+ let list = JSON.parse(data);
152
+ if (Array.isArray(list) && typeof allEvents['bidResponse'] != 'undefined') {
153
+ allEvents['bidResponse'].forEach((bidResponse) => {
154
+ if (list.includes(bidResponse['originalBidder'] + '_' + bidResponse['creativeId'])) { ajax(endpoint + '.bidwatch.io/analytics/creatives', null, JSON.stringify(bidResponse), {method: 'POST', withCredentials: true}); }
155
+ });
156
+ }
157
+ allEvents = {};
158
+ }, JSON.stringify(auctionEnd), {method: 'POST', withCredentials: true});
159
+ auctionEnd = {};
110
160
  }
111
161
 
112
162
  let bidwatchAnalytics = Object.assign(adapter({url, analyticsType}), {
@@ -116,17 +166,20 @@ let bidwatchAnalytics = Object.assign(adapter({url, analyticsType}), {
116
166
  }) {
117
167
  switch (eventType) {
118
168
  case AUCTION_END:
119
- addEvent(eventType, args);
169
+ addAuctionEnd(args);
120
170
  handleAuctionEnd();
121
171
  break;
122
172
  case BID_WON:
123
173
  handleBidWon(args);
124
174
  break;
125
175
  case BID_RESPONSE:
126
- addEvent(eventType, args);
176
+ addBidResponse(args);
127
177
  break;
128
178
  case BID_REQUESTED:
129
- addEvent(eventType, args);
179
+ addBidRequested(args);
180
+ break;
181
+ case BID_TIMEOUT:
182
+ addTimeout(args);
130
183
  break;
131
184
  }
132
185
  }});
@@ -256,7 +256,7 @@ const addNativeParameters = bidRequest => {
256
256
  wmin = sizes[0];
257
257
  hmin = sizes[1];
258
258
  }
259
- asset[props.name] = {}
259
+ asset[props.name] = {};
260
260
  if (bidParams.len) asset[props.name]['len'] = bidParams.len;
261
261
  if (props.type) asset[props.name]['type'] = props.type;
262
262
  if (wmin) asset[props.name]['wmin'] = wmin;
@@ -99,7 +99,7 @@ export const spec = {
99
99
  let response;
100
100
 
101
101
  try {
102
- response = serverResponse.body
102
+ response = serverResponse.body;
103
103
  bid = response.seatbid[0].bid[0];
104
104
  } catch (e) {
105
105
  response = null;
@@ -57,6 +57,16 @@ export function addBrowsiTag(data) {
57
57
  return script;
58
58
  }
59
59
 
60
+ export function sendPageviewEvent(eventType) {
61
+ if (eventType === 'PAGEVIEW') {
62
+ events.emit(CONSTANTS.EVENTS.BILLABLE_EVENT, {
63
+ vendor: 'browsi',
64
+ type: 'pageview',
65
+ billingId: generateUUID()
66
+ })
67
+ }
68
+ }
69
+
60
70
  /**
61
71
  * collect required data from page
62
72
  * send data to browsi server to get predictions
@@ -262,10 +272,11 @@ function getPredictionsFromServer(url) {
262
272
  try {
263
273
  const data = JSON.parse(response);
264
274
  if (data && data.p && data.kn) {
265
- setData({p: data.p, kn: data.kn, pmd: data.pmd});
275
+ setData({p: data.p, kn: data.kn, pmd: data.pmd, bet: data.bet});
266
276
  } else {
267
277
  setData({});
268
278
  }
279
+ sendPageviewEvent(data.bet);
269
280
  addBrowsiTag(data);
270
281
  } catch (err) {
271
282
  logError('unable to parse data');
@@ -336,19 +347,22 @@ export const browsiSubmodule = {
336
347
 
337
348
  function getTargetingData(uc, c, us, a) {
338
349
  const targetingData = getRTD(uc);
339
- const auctionId = a.auctionId
350
+ const auctionId = a.auctionId;
351
+ const sendAdRequestEvent = (_browsiData && _browsiData['bet'] === 'AD_REQUEST');
340
352
  uc.forEach(auc => {
341
353
  if (isNumber(_ic[auc])) {
342
354
  _ic[auc] = _ic[auc] + 1;
343
355
  }
344
- const transactionId = a.adUnits.find(adUnit => adUnit.code === auc).transactionId;
345
- events.emit(CONSTANTS.EVENTS.BILLABLE_EVENT, {
346
- vendor: 'browsi',
347
- type: 'adRequest',
348
- billingId: generateUUID(),
349
- transactionId: transactionId,
350
- auctionId: auctionId
351
- })
356
+ if (sendAdRequestEvent) {
357
+ const transactionId = a.adUnits.find(adUnit => adUnit.code === auc).transactionId;
358
+ events.emit(CONSTANTS.EVENTS.BILLABLE_EVENT, {
359
+ vendor: 'browsi',
360
+ type: 'adRequest',
361
+ billingId: generateUUID(),
362
+ transactionId: transactionId,
363
+ auctionId: auctionId
364
+ })
365
+ }
352
366
  });
353
367
  logInfo('Browsi RTD provider returned targeting data', targetingData, 'for', uc)
354
368
  return targetingData;
@@ -104,7 +104,7 @@ export const spec = {
104
104
  ext: {
105
105
  consent: bidderRequest.gdprConsent.consentString
106
106
  }
107
- }
107
+ };
108
108
  }
109
109
 
110
110
  const imp = {