prebid.js 5.14.0 → 5.18.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 (397) hide show
  1. package/.devcontainer/Dockerfile +11 -0
  2. package/.devcontainer/devcontainer.json +27 -0
  3. package/.devcontainer/postCreate.sh +6 -0
  4. package/allowedModules.js +2 -1
  5. package/integrationExamples/gpt/afpExample.html +242 -0
  6. package/integrationExamples/gpt/afpGamExample.html +152 -0
  7. package/integrationExamples/gpt/weboramaRtdProvider_example.html +126 -0
  8. package/modules/.submodules.json +29 -27
  9. package/modules/33acrossBidAdapter.js +23 -20
  10. package/modules/a4gBidAdapter.js +3 -3
  11. package/modules/ablidaBidAdapter.js +2 -2
  12. package/modules/adWMGBidAdapter.js +4 -4
  13. package/modules/adagioAnalyticsAdapter.js +4 -4
  14. package/modules/adagioBidAdapter.js +85 -82
  15. package/modules/adbookpspBidAdapter.js +56 -54
  16. package/modules/adfBidAdapter.js +24 -16
  17. package/modules/adgenerationBidAdapter.js +42 -18
  18. package/modules/adhashBidAdapter.js +105 -0
  19. package/modules/adhashBidAdapter.md +1 -1
  20. package/modules/adkernelAdnAnalyticsAdapter.js +6 -6
  21. package/modules/adkernelAdnBidAdapter.js +23 -23
  22. package/modules/adkernelBidAdapter.js +49 -44
  23. package/modules/adlooxAdServerVideo.js +26 -26
  24. package/modules/adlooxAnalyticsAdapter.js +38 -35
  25. package/modules/adlooxRtdProvider.js +49 -46
  26. package/modules/admanBidAdapter.js +4 -4
  27. package/modules/admixerBidAdapter.js +13 -2
  28. package/modules/admixerIdSystem.js +4 -4
  29. package/modules/adnowBidAdapter.js +4 -4
  30. package/modules/adnuntiusBidAdapter.js +6 -5
  31. package/modules/adoceanBidAdapter.js +10 -10
  32. package/modules/adpartnerBidAdapter.js +3 -3
  33. package/modules/adpod.js +45 -42
  34. package/modules/adprimeBidAdapter.js +4 -4
  35. package/modules/adqueryBidAdapter.js +204 -0
  36. package/modules/adqueryBidAdapter.md +32 -0
  37. package/modules/adrelevantisBidAdapter.js +30 -27
  38. package/modules/adriverBidAdapter.js +13 -13
  39. package/modules/adtargetBidAdapter.js +24 -24
  40. package/modules/adtelligentBidAdapter.js +29 -29
  41. package/modules/adtrueBidAdapter.js +35 -35
  42. package/modules/aduptechBidAdapter.js +10 -10
  43. package/modules/advangelistsBidAdapter.js +14 -14
  44. package/modules/adxcgAnalyticsAdapter.js +5 -5
  45. package/modules/adxcgBidAdapter.js +56 -56
  46. package/modules/adxpremiumAnalyticsAdapter.js +17 -17
  47. package/modules/adyoulikeBidAdapter.js +11 -11
  48. package/modules/afpBidAdapter.js +166 -0
  49. package/modules/afpBidAdapter.md +348 -0
  50. package/modules/ajaBidAdapter.js +12 -12
  51. package/modules/akamaiDAPIdSystem.js +9 -9
  52. package/modules/aniviewBidAdapter.js +2 -2
  53. package/modules/aolBidAdapter.js +15 -14
  54. package/modules/apacdexBidAdapter.js +16 -16
  55. package/modules/appnexusBidAdapter.js +59 -59
  56. package/modules/apstreamBidAdapter.js +5 -5
  57. package/modules/asoBidAdapter.js +30 -30
  58. package/modules/astraoneBidAdapter.js +2 -2
  59. package/modules/atsAnalyticsAdapter.js +35 -30
  60. package/modules/audiencerunBidAdapter.js +15 -15
  61. package/modules/automatadBidAdapter.js +2 -2
  62. package/modules/axonixBidAdapter.js +7 -7
  63. package/modules/beachfrontBidAdapter.js +23 -23
  64. package/modules/beopBidAdapter.js +22 -22
  65. package/modules/bidViewabilityIO.js +7 -7
  66. package/modules/bidglassBidAdapter.js +8 -8
  67. package/modules/bidscubeBidAdapter.js +3 -3
  68. package/modules/bizzclickBidAdapter.js +10 -10
  69. package/modules/bliinkBidAdapter.js +58 -32
  70. package/modules/bliinkBidAdapter.md +29 -6
  71. package/modules/bluebillywigBidAdapter.js +30 -30
  72. package/modules/boldwinBidAdapter.js +4 -4
  73. package/modules/braveBidAdapter.js +5 -5
  74. package/modules/bridgewellBidAdapter.js +5 -5
  75. package/modules/brightMountainMediaBidAdapter.js +10 -10
  76. package/modules/brightcomBidAdapter.js +18 -18
  77. package/modules/britepoolIdSystem.js +7 -7
  78. package/modules/browsiRtdProvider.js +8 -8
  79. package/modules/bucksenseBidAdapter.js +9 -9
  80. package/modules/buzzoolaBidAdapter.js +4 -4
  81. package/modules/byDataAnalyticsAdapter.js +12 -12
  82. package/modules/ccxBidAdapter.js +38 -38
  83. package/modules/cleanmedianetBidAdapter.js +9 -9
  84. package/modules/clickforceBidAdapter.js +4 -4
  85. package/modules/cointrafficBidAdapter.js +4 -4
  86. package/modules/coinzillaBidAdapter.js +2 -2
  87. package/modules/colossussspBidAdapter.js +7 -3
  88. package/modules/concertAnalyticsAdapter.js +3 -3
  89. package/modules/concertBidAdapter.js +16 -17
  90. package/modules/connectadBidAdapter.js +13 -13
  91. package/modules/consentManagement.js +29 -28
  92. package/modules/consentManagementUsp.js +14 -14
  93. package/modules/consumableBidAdapter.js +3 -3
  94. package/modules/contentexchangeBidAdapter.js +5 -5
  95. package/modules/conversantBidAdapter.js +32 -31
  96. package/modules/cpmstarBidAdapter.js +8 -9
  97. package/modules/craftBidAdapter.js +10 -10
  98. package/modules/criteoBidAdapter.js +16 -16
  99. package/modules/criteoIdSystem.js +5 -5
  100. package/modules/currency.js +18 -18
  101. package/modules/cwireBidAdapter.js +272 -0
  102. package/modules/cwireBidAdapter.md +43 -0
  103. package/modules/datablocksBidAdapter.js +12 -12
  104. package/modules/deepintentBidAdapter.js +13 -13
  105. package/modules/dgkeywordRtdProvider.js +10 -11
  106. package/modules/districtmDMXBidAdapter.js +15 -15
  107. package/modules/dmdIdSystem.js +5 -5
  108. package/modules/docereeBidAdapter.js +9 -9
  109. package/modules/dspxBidAdapter.js +5 -5
  110. package/modules/ebdrBidAdapter.js +9 -9
  111. package/modules/emx_digitalBidAdapter.js +23 -23
  112. package/modules/enrichmentFpdModule.js +10 -9
  113. package/modules/eplanningAnalyticsAdapter.js +2 -2
  114. package/modules/eplanningBidAdapter.js +10 -10
  115. package/modules/etargetBidAdapter.js +4 -4
  116. package/modules/express.js +9 -10
  117. package/modules/fabrickIdSystem.js +6 -6
  118. package/modules/feedadBidAdapter.js +5 -5
  119. package/modules/fintezaAnalyticsAdapter.js +4 -4
  120. package/modules/flocIdSystem.js +5 -5
  121. package/modules/fluctBidAdapter.js +6 -5
  122. package/modules/freewheel-sspBidAdapter.js +6 -6
  123. package/modules/gamoshiBidAdapter.js +22 -22
  124. package/modules/gdprEnforcement.js +13 -14
  125. package/modules/getintentBidAdapter.js +3 -4
  126. package/modules/glimpseBidAdapter.js +160 -48
  127. package/modules/glimpseBidAdapter.md +11 -74
  128. package/modules/gmosspBidAdapter.js +17 -17
  129. package/modules/gnetBidAdapter.js +5 -5
  130. package/modules/googleAnalyticsAdapter.js +6 -6
  131. package/modules/gothamadsBidAdapter.js +9 -9
  132. package/modules/gptPreAuction.js +7 -7
  133. package/modules/gridBidAdapter.js +15 -16
  134. package/modules/gridNMBidAdapter.js +214 -63
  135. package/modules/growadvertisingBidAdapter.js +7 -8
  136. package/modules/gumgumBidAdapter.js +19 -13
  137. package/modules/h12mediaBidAdapter.js +12 -12
  138. package/modules/haloIdSystem.js +8 -8
  139. package/modules/hybridBidAdapter.js +7 -7
  140. package/modules/iasRtdProvider.js +79 -63
  141. package/modules/id5IdSystem.js +24 -24
  142. package/modules/idImportLibrary.js +35 -35
  143. package/modules/idxIdSystem.js +3 -3
  144. package/modules/impactifyBidAdapter.js +10 -10
  145. package/modules/improvedigitalBidAdapter.js +36 -36
  146. package/modules/imuIdSystem.js +6 -6
  147. package/modules/inmarBidAdapter.js +2 -2
  148. package/modules/innityBidAdapter.js +3 -3
  149. package/modules/inskinBidAdapter.js +14 -2
  150. package/modules/inskinBidAdapter.md +5 -4
  151. package/modules/instreamTracking.js +5 -5
  152. package/modules/integr8BidAdapter.js +4 -4
  153. package/modules/intentIqIdSystem.js +7 -7
  154. package/modules/interactiveOffersBidAdapter.js +5 -5
  155. package/modules/invibesBidAdapter.js +53 -19
  156. package/modules/invisiblyAnalyticsAdapter.js +5 -5
  157. package/modules/iqmBidAdapter.js +19 -19
  158. package/modules/iqzoneBidAdapter.js +5 -5
  159. package/modules/ixBidAdapter.js +73 -73
  160. package/modules/jixieBidAdapter.js +6 -6
  161. package/modules/justpremiumBidAdapter.js +5 -1
  162. package/modules/kargoBidAdapter.js +16 -9
  163. package/modules/kargoBidAdapter.md +20 -0
  164. package/modules/kinessoIdSystem.js +8 -8
  165. package/modules/koblerBidAdapter.js +12 -12
  166. package/modules/konduitAnalyticsAdapter.js +4 -4
  167. package/modules/konduitWrapper.js +14 -14
  168. package/modules/krushmediaBidAdapter.js +4 -4
  169. package/modules/kubientBidAdapter.js +5 -5
  170. package/modules/limelightDigitalBidAdapter.js +4 -4
  171. package/modules/liveIntentIdSystem.js +4 -5
  172. package/modules/livewrappedAnalyticsAdapter.js +27 -15
  173. package/modules/livewrappedBidAdapter.js +7 -7
  174. package/modules/liveyieldAnalyticsAdapter.js +13 -13
  175. package/modules/lockerdomeBidAdapter.js +2 -2
  176. package/modules/loganBidAdapter.js +4 -4
  177. package/modules/lotamePanoramaIdSystem.js +13 -13
  178. package/modules/lunamediahbBidAdapter.js +2 -2
  179. package/modules/madvertiseBidAdapter.js +3 -3
  180. package/modules/marsmediaBidAdapter.js +26 -26
  181. package/modules/mathildeadsBidAdapter.js +5 -5
  182. package/modules/mediaforceBidAdapter.js +11 -11
  183. package/modules/mediakeysBidAdapter.js +444 -53
  184. package/modules/mediakeysBidAdapter.md +108 -0
  185. package/modules/medianetAnalyticsAdapter.js +48 -125
  186. package/modules/medianetBidAdapter.js +38 -33
  187. package/modules/medianetRtdProvider.js +7 -7
  188. package/modules/merkleIdSystem.js +19 -19
  189. package/modules/mgidBidAdapter.js +50 -50
  190. package/modules/microadBidAdapter.js +3 -3
  191. package/modules/multibid/index.js +15 -13
  192. package/modules/mwOpenLinkIdSystem.js +7 -7
  193. package/modules/mytargetBidAdapter.js +112 -0
  194. package/modules/nativoBidAdapter.js +46 -31
  195. package/modules/nativoBidAdapter.md +0 -1
  196. package/modules/naveggIdSystem.js +3 -3
  197. package/modules/nextMillenniumBidAdapter.js +6 -6
  198. package/modules/nextrollBidAdapter.js +375 -0
  199. package/modules/nobidBidAdapter.js +12 -11
  200. package/modules/novatiqIdSystem.js +8 -8
  201. package/modules/oguryBidAdapter.js +22 -6
  202. package/modules/oneVideoBidAdapter.js +20 -20
  203. package/modules/onomagicBidAdapter.js +16 -16
  204. package/modules/ooloAnalyticsAdapter.js +13 -13
  205. package/modules/openwebBidAdapter.js +26 -26
  206. package/modules/openxAnalyticsAdapter.js +33 -33
  207. package/modules/openxBidAdapter.js +29 -29
  208. package/modules/operaadsBidAdapter.js +53 -53
  209. package/modules/optimeraRtdProvider.js +9 -9
  210. package/modules/optoutBidAdapter.js +3 -3
  211. package/modules/orbidderBidAdapter.js +3 -3
  212. package/modules/outbrainBidAdapter.js +13 -13
  213. package/modules/ozoneBidAdapter.js +131 -131
  214. package/modules/padsquadBidAdapter.js +4 -4
  215. package/modules/parrableIdSystem.js +17 -17
  216. package/modules/pixfutureBidAdapter.js +45 -25
  217. package/modules/pixfutureBidAdapter.md +127 -0
  218. package/modules/prebidServerBidAdapter/index.js +109 -105
  219. package/modules/prebidmanagerAnalyticsAdapter.js +7 -7
  220. package/modules/priceFloors.js +47 -47
  221. package/modules/proxistoreBidAdapter.js +6 -8
  222. package/modules/pubCommonId.js +11 -11
  223. package/modules/pubProvidedIdSystem.js +3 -3
  224. package/modules/publinkIdSystem.js +23 -7
  225. package/modules/publinkIdSystem.md +7 -2
  226. package/modules/pubmaticAnalyticsAdapter.js +16 -16
  227. package/modules/pubmaticBidAdapter.js +109 -93
  228. package/modules/pubmaticBidAdapter.md +1 -1
  229. package/modules/pubperfAnalyticsAdapter.js +3 -3
  230. package/modules/pubwiseAnalyticsAdapter.js +6 -6
  231. package/modules/pubwiseBidAdapter.js +23 -23
  232. package/modules/pubxBidAdapter.js +2 -2
  233. package/modules/pubxaiAnalyticsAdapter.js +7 -7
  234. package/modules/pulsepointBidAdapter.js +13 -13
  235. package/modules/pxyzBidAdapter.js +7 -7
  236. package/modules/quantcastBidAdapter.js +16 -16
  237. package/modules/radsBidAdapter.js +5 -5
  238. package/modules/realvuAnalyticsAdapter.js +5 -7
  239. package/modules/reconciliationRtdProvider.js +6 -6
  240. package/modules/relaidoBidAdapter.js +44 -38
  241. package/modules/resetdigitalBidAdapter.js +3 -4
  242. package/modules/revcontentBidAdapter.js +9 -9
  243. package/modules/rhythmoneBidAdapter.js +17 -16
  244. package/modules/richaudienceBidAdapter.js +9 -9
  245. package/modules/riseBidAdapter.js +26 -26
  246. package/modules/riseBidAdapter.md +1 -3
  247. package/modules/roxotAnalyticsAdapter.js +14 -14
  248. package/modules/rtbhouseBidAdapter.js +7 -7
  249. package/modules/rtbsapeBidAdapter.js +3 -4
  250. package/modules/rtdModule/index.js +3 -3
  251. package/modules/rubiconAnalyticsAdapter.js +82 -82
  252. package/modules/rubiconBidAdapter.js +72 -68
  253. package/modules/scaleableAnalyticsAdapter.js +2 -2
  254. package/modules/seedingAllianceBidAdapter.js +231 -0
  255. package/modules/seedtagBidAdapter.js +10 -10
  256. package/modules/sharedIdSystem.js +11 -11
  257. package/modules/sharethroughAnalyticsAdapter.js +8 -8
  258. package/modules/sharethroughBidAdapter.js +20 -27
  259. package/modules/showheroes-bsBidAdapter.js +23 -23
  260. package/modules/sigmoidAnalyticsAdapter.js +4 -5
  261. package/modules/sirdataRtdProvider.js +34 -34
  262. package/modules/sizeMappingV2.js +39 -39
  263. package/modules/slimcutBidAdapter.js +121 -0
  264. package/modules/smaatoBidAdapter.js +44 -44
  265. package/modules/smartadserverBidAdapter.js +7 -7
  266. package/modules/smartxBidAdapter.js +72 -72
  267. package/modules/smartyadsBidAdapter.js +2 -2
  268. package/modules/smilewantedBidAdapter.js +6 -6
  269. package/modules/sonobiAnalyticsAdapter.js +23 -23
  270. package/modules/sortableAnalyticsAdapter.js +5 -5
  271. package/modules/sortableBidAdapter.js +28 -28
  272. package/modules/sovrnAnalyticsAdapter.js +5 -5
  273. package/modules/sovrnBidAdapter.js +22 -22
  274. package/modules/spotxBidAdapter.js +97 -83
  275. package/modules/sspBCBidAdapter.js +216 -21
  276. package/modules/sspBCBidAdapter.md +1 -1
  277. package/modules/staqAnalyticsAdapter.js +9 -9
  278. package/modules/stroeerCoreBidAdapter.js +16 -16
  279. package/modules/sublimeBidAdapter.js +6 -6
  280. package/modules/talkadsBidAdapter.js +129 -0
  281. package/modules/talkadsBidAdapter.md +60 -0
  282. package/modules/tapadIdSystem.js +3 -3
  283. package/modules/tappxBidAdapter.js +63 -64
  284. package/modules/teadsBidAdapter.js +20 -20
  285. package/modules/telariaBidAdapter.js +17 -17
  286. package/modules/temedyaBidAdapter.js +4 -4
  287. package/modules/terceptAnalyticsAdapter.js +4 -4
  288. package/modules/theAdxBidAdapter.js +16 -16
  289. package/modules/timeoutRtdProvider.js +15 -15
  290. package/modules/tpmnBidAdapter.js +3 -3
  291. package/modules/trionBidAdapter.js +15 -15
  292. package/modules/tripleliftBidAdapter.js +27 -24
  293. package/modules/truereachBidAdapter.js +4 -4
  294. package/modules/trustxBidAdapter.js +22 -18
  295. package/modules/ucfunnelBidAdapter.js +3 -3
  296. package/modules/uid2IdSystem.js +6 -6
  297. package/modules/underdogmediaBidAdapter.js +4 -4
  298. package/modules/unicornBidAdapter.js +15 -15
  299. package/modules/unifiedIdSystem.js +4 -4
  300. package/modules/unrulyBidAdapter.js +16 -16
  301. package/modules/userId/eids.js +9 -9
  302. package/modules/userId/index.js +37 -35
  303. package/modules/validationFpdModule/index.js +15 -15
  304. package/modules/vdoaiBidAdapter.js +2 -2
  305. package/modules/verizonMediaIdSystem.js +5 -5
  306. package/modules/vidazooBidAdapter.js +5 -5
  307. package/modules/videobyteBidAdapter.js +24 -24
  308. package/modules/videoreachBidAdapter.js +7 -7
  309. package/modules/vidoomyBidAdapter.js +105 -22
  310. package/modules/viewdeosDXBidAdapter.js +17 -17
  311. package/modules/visxBidAdapter.js +21 -29
  312. package/modules/voxBidAdapter.js +7 -7
  313. package/modules/vuukleBidAdapter.js +2 -2
  314. package/modules/waardexBidAdapter.js +26 -26
  315. package/modules/weboramaRtdProvider.js +174 -0
  316. package/modules/weboramaRtdProvider.md +70 -0
  317. package/modules/winrBidAdapter.js +27 -27
  318. package/modules/wipesBidAdapter.js +2 -2
  319. package/modules/yahoosspBidAdapter.js +637 -0
  320. package/modules/yahoosspBidAdapter.md +795 -0
  321. package/modules/yieldlabBidAdapter.js +57 -12
  322. package/modules/yieldlabBidAdapter.md +16 -1
  323. package/modules/yieldliftBidAdapter.js +9 -9
  324. package/modules/yieldmoBidAdapter.js +64 -50
  325. package/modules/yieldoneAnalyticsAdapter.js +6 -6
  326. package/modules/yieldoneBidAdapter.js +11 -11
  327. package/modules/yuktamediaAnalyticsAdapter.js +15 -15
  328. package/modules/zeotapIdPlusIdSystem.js +2 -2
  329. package/modules/zetaBidAdapter.js +6 -6
  330. package/modules/zeta_global_sspBidAdapter.js +14 -14
  331. package/package.json +1 -1
  332. package/src/AnalyticsAdapter.js +6 -6
  333. package/src/Renderer.js +10 -8
  334. package/src/adapterManager.js +45 -42
  335. package/src/adloader.js +6 -6
  336. package/src/ajax.js +8 -9
  337. package/src/auction.js +26 -23
  338. package/src/bidfactory.js +2 -2
  339. package/src/config.js +52 -50
  340. package/src/cpmBucketManager.js +2 -2
  341. package/src/prebid.js +85 -81
  342. package/src/storageManager.js +5 -5
  343. package/src/targeting.js +25 -26
  344. package/src/userSync.js +35 -22
  345. package/src/videoCache.js +2 -2
  346. package/test/.eslintrc.js +2 -1
  347. package/test/spec/modules/adfBidAdapter_spec.js +55 -0
  348. package/test/spec/modules/adgenerationBidAdapter_spec.js +121 -50
  349. package/test/spec/modules/adhashBidAdapter_spec.js +155 -0
  350. package/test/spec/modules/adnuntiusBidAdapter_spec.js +68 -0
  351. package/test/spec/modules/adqueryBidAdapter_spec.js +185 -0
  352. package/test/spec/modules/afpBidAdapter_spec.js +306 -0
  353. package/test/spec/modules/atsAnalyticsAdapter_spec.js +37 -2
  354. package/test/spec/modules/bliinkBidAdapter_spec.js +87 -36
  355. package/test/spec/modules/colossussspBidAdapter_spec.js +14 -6
  356. package/test/spec/modules/cwireBidAdapter_spec.js +246 -0
  357. package/test/spec/modules/eplanningBidAdapter_spec.js +3 -3
  358. package/test/spec/modules/glimpseBidAdapter_spec.js +302 -204
  359. package/test/spec/modules/gridBidAdapter_spec.js +38 -2
  360. package/test/spec/modules/gridNMBidAdapter_spec.js +121 -47
  361. package/test/spec/modules/gumgumBidAdapter_spec.js +27 -6
  362. package/test/spec/modules/iasRtdProvider_spec.js +71 -6
  363. package/test/spec/modules/inskinBidAdapter_spec.js +10 -1
  364. package/test/spec/modules/invibesBidAdapter_spec.js +114 -2
  365. package/test/spec/modules/justpremiumBidAdapter_spec.js +16 -2
  366. package/test/spec/modules/livewrappedAnalyticsAdapter_spec.js +33 -7
  367. package/test/spec/modules/mediakeysBidAdapter_spec.js +406 -51
  368. package/test/spec/modules/medianetAnalyticsAdapter_spec.js +39 -7
  369. package/test/spec/modules/medianetBidAdapter_spec.js +62 -1
  370. package/test/spec/modules/mytargetBidAdapter_spec.js +199 -0
  371. package/test/spec/modules/nativoBidAdapter_spec.js +50 -3
  372. package/test/spec/modules/nextrollBidAdapter_spec.js +290 -0
  373. package/test/spec/modules/nobidBidAdapter_spec.js +65 -1
  374. package/test/spec/modules/oguryBidAdapter_spec.js +120 -7
  375. package/test/spec/modules/publinkIdSystem_spec.js +42 -12
  376. package/test/spec/modules/pubmaticBidAdapter_spec.js +217 -1
  377. package/test/spec/modules/relaidoBidAdapter_spec.js +21 -20
  378. package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +100 -81
  379. package/test/spec/modules/rubiconAnalyticsSchema.json +5 -2
  380. package/test/spec/modules/seedingAllianceAdapter_spec.js +186 -0
  381. package/test/spec/modules/sharethroughBidAdapter_spec.js +156 -136
  382. package/test/spec/modules/slimcutBidAdapter_spec.js +200 -0
  383. package/test/spec/modules/spotxBidAdapter_spec.js +36 -0
  384. package/test/spec/modules/sspBCBidAdapter_spec.js +210 -62
  385. package/test/spec/modules/talkadsBidAdapter_spec.js +231 -0
  386. package/test/spec/modules/tappxBidAdapter_spec.js +39 -3
  387. package/test/spec/modules/tripleliftBidAdapter_spec.js +2 -0
  388. package/test/spec/modules/trustxBidAdapter_spec.js +35 -2
  389. package/test/spec/modules/unicornBidAdapter_spec.js +4 -4
  390. package/test/spec/modules/visxBidAdapter_spec.js +48 -4
  391. package/test/spec/modules/weboramaRtdProvider_spec.js +288 -0
  392. package/test/spec/modules/yahoosspBidAdapter_spec.js +1332 -0
  393. package/test/spec/modules/yieldlabBidAdapter_spec.js +65 -1
  394. package/test/spec/modules/yieldmoBidAdapter_spec.js +30 -9
  395. package/test/spec/unit/pbjs_api_spec.js +4 -0
  396. package/test/spec/userSync_spec.js +30 -2
  397. package/modules/turktelekomBidAdapter.md +0 -49
@@ -1,207 +1,305 @@
1
- import { expect } from 'chai';
2
- import { spec } from 'modules/glimpseBidAdapter.js';
3
- import { newBidder } from 'src/adapters/bidderFactory.js';
4
-
5
- /**
6
- * Test Helpers
7
- */
8
-
9
- const API = 'https://api.glimpseprotocol.io/cloud/v1/vault/prebid';
10
-
11
- const templateBidRequest = {
12
- bidder: 'glimpse',
13
- params: {
14
- placementId: 'glimpse-demo-300x250',
1
+ import { expect } from 'chai'
2
+ import { newBidder } from 'src/adapters/bidderFactory.js'
3
+ import { spec } from 'modules/glimpseBidAdapter.js'
4
+
5
+ const ENDPOINT = 'https://api.glimpsevault.io/ads/serving/public/v1/prebid'
6
+
7
+ const mock = {
8
+ bidRequest: {
9
+ bidder: 'glimpse',
10
+ bidId: '26a80b71cfd671',
11
+ bidderRequestId: '133baeded6ac94',
12
+ auctionId: '96692a73-307b-44b8-8e4f-ddfb40341570',
13
+ adUnitCode: 'banner-div-a',
14
+ sizes: [[300, 250]],
15
+ params: {
16
+ placementId: 'glimpse-demo-300x250',
17
+ },
15
18
  },
16
- adUnitCode: 'banner-div-a',
17
- sizes: [[300, 250]],
18
- bidId: '26a80b71cfd671',
19
- bidderRequestId: '133baeded6ac94',
20
- auctionId: '96692a73-307b-44b8-8e4f-ddfb40341570',
21
- };
22
-
23
- const templateBidderRequest = {
24
- bidderCode: 'glimpse',
25
- auctionId: '96692a73-307b-44b8-8e4f-ddfb40341570',
26
- bidderRequestId: '133baeded6ac94',
27
- timeout: 3000,
28
- gdprConsent: {
29
- apiVersion: 2,
30
- consentString:
31
- 'COzP517OzP517AcABBENAlCsAP_AAAAAAAwIF8NX-T5eL2vju2Zdt7JEaYwfZxyigOgThgQIsW8NwIeFbBoGP2EgHBG4JCQAGBAkkgCBAQMsHGBcCQAAgIgRiRKMYE2MjzNKBJJAigkbc0FACDVunsHS2ZCY70-8O__bPAviADAvUC-AAAAA.YAAAAAAAAAAA',
32
- gdprApplies: true,
33
- vendorData: {},
19
+ bidderRequest: {
20
+ bidderCode: 'glimpse',
21
+ bidderRequestId: '133baeded6ac94',
22
+ auctionId: '96692a73-307b-44b8-8e4f-ddfb40341570',
23
+ timeout: 3000,
24
+ gdprConsent: {
25
+ consentString: 'COzP517OzP517AcABBENAlCsAP_AAAAAAAwIF8NX-T5eL2vju2Zdt7JEaYwfZxyigOgThgQIsW8NwIeFbBoGP2EgHBG4JCQAGBAkkgCBAQMsHGBcCQAAgIgRiRKMYE2MjzNKBJJAigkbc0FACDVunsHS2ZCY70-8O__bPAviADAvUC-AAAAA.YAAAAAAAAAAA',
26
+ vendorData: {},
27
+ gdprApplies: true,
28
+ },
29
+ refererInfo: {
30
+ numIframes: 0,
31
+ reachedTop: true,
32
+ referer: 'https://demo.glimpseprotocol.io/prebid/desktop',
33
+ stack: ['https://demo.glimpseprotocol.io/prebid/desktop'],
34
+ },
34
35
  },
35
- refererInfo: {
36
- referer: 'https://demo.glimpseprotocol.io/prebid/desktop',
37
- reachedTop: true,
38
- numIframes: 0,
39
- stack: ['https://demo.glimpseprotocol.io/prebid/desktop'],
36
+ bidResponse: {
37
+ auth: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJoZWxsbyI6IndvcmxkISJ9.1p6T0ORhJ6riLprhXBGdzRhG3Q1egM27uFhPGNapPxs',
38
+ data: {
39
+ bids: [
40
+ {
41
+ bidder: 'glimpse',
42
+ requestId: '133baeded6ac94',
43
+ creativeId: 'glimpse-demo-300x250',
44
+ adUnitCode: 'banner-div-a',
45
+ currency: 'GBP',
46
+ ad: '<div>Hello, World!</div>',
47
+ width: 300,
48
+ height: 250,
49
+ cpm: 1.04,
50
+ pbAg: '1.04',
51
+ pbDg: '1.04',
52
+ pbHg: '1.04',
53
+ pbLg: '1.00',
54
+ pbMg: '1.05',
55
+ netRevenue: true,
56
+ mediaType: 'banner',
57
+ ttl: 300,
58
+ }
59
+ ],
60
+ },
40
61
  },
41
- };
42
-
43
- const templateBidResponse = {
44
- ad: '<div>HelloWorld</div>',
45
- adUnitCode: 'banner-div-a',
46
- bidder: 'glimpse',
47
- cpm: 1.04,
48
- creativeId: 'glimpse-demo-300x250',
49
- currency: 'GBP',
50
- height: 250,
51
- mediaType: 'banner',
52
- netRevenue: true,
53
- pbAg: '1.04',
54
- pbDg: '1.04',
55
- pbHg: '1.04',
56
- pbLg: '1.00',
57
- pbMg: '1.05',
58
- requestId: '133baeded6ac94',
59
- ttl: 60,
60
- width: 300,
61
- };
62
-
63
- const copyBidResponse = () => ({ ...templateBidResponse });
64
- const copyBidderRequest = () => ({
65
- ...templateBidderRequest,
66
- bids: copyBidRequests(),
67
- });
68
- const copyBidRequest = () => ({ ...templateBidRequest });
69
-
70
- const copyBidRequests = () => [copyBidRequest()];
71
- const copyBidResponses = () => ({
72
- body: [copyBidResponse()],
73
- });
74
-
75
- /**
76
- * Tests
77
- */
78
-
79
- describe('GlimpseProtocolAdapter', function () {
80
- const adapter = newBidder(spec);
81
-
82
- describe('inherited functions', function () {
83
- it('exists and is a function', function () {
84
- expect(adapter.callBids).to.exist.and.to.be.a('function');
85
- expect(adapter.getSpec).to.exist.and.to.be.a('function');
86
- });
87
- });
88
-
89
- describe('isBidRequestValid', function () {
90
- it('should return true when params.placementId is valid', function () {
91
- expect(spec.isBidRequestValid(templateBidRequest)).to.equal(true);
92
- });
93
-
94
- it('should return false when params.placementId is invalid', function () {
95
- let bid = copyBidRequest();
96
- delete bid.params;
97
- bid.params = {
98
- placementId: 0,
99
- };
100
- expect(spec.isBidRequestValid(bid)).to.equal(false);
101
- });
102
-
103
- it('should return false when params is not passed', function () {
104
- let bid = copyBidRequest();
105
- delete bid.params;
106
- expect(spec.isBidRequestValid(bid)).to.equal(false);
107
- });
108
-
109
- it('should return false when params.placementId is not passed', function () {
110
- let bid = copyBidRequest();
111
- delete bid.params.placementId;
112
- expect(spec.isBidRequestValid(bid)).to.equal(false);
113
- });
114
- });
115
-
116
- describe('buildRequests', function () {
117
- const bidRequest = copyBidRequest();
118
- const bidRequests = [bidRequest];
119
-
120
- it('should add version and source information', function () {
121
- const request = spec.buildRequests(bidRequests);
122
- const payload = JSON.parse(request.data);
123
-
124
- expect(payload.sdk).to.exist;
125
- expect(payload.sdk).to.deep.equal({
126
- source: 'pbjs',
127
- version: '$prebid.version$',
128
- });
129
- });
130
-
131
- it('should send request to API via POST', function () {
132
- const request = spec.buildRequests(bidRequests);
133
- expect(request.url).to.equal(API);
134
- expect(request.method).to.equal('POST');
135
- });
136
-
137
- it('should add GDPR consent', function () {
138
- const bidderRequest = copyBidderRequest();
139
- const request = spec.buildRequests(bidRequests, bidderRequest);
140
- const payload = JSON.parse(request.data);
141
-
142
- expect(payload.gdprConsent).to.exist;
143
- const { gdprConsent } = payload;
144
- expect(gdprConsent.gdprApplies).to.be.true;
145
- expect(gdprConsent.consentString).to.equal(
146
- bidderRequest.gdprConsent.consentString
147
- );
148
- });
149
-
150
- it('should add referer info', function () {
151
- const bidderRequest = copyBidderRequest();
152
- const request = spec.buildRequests(bidRequests, bidderRequest);
153
- const payload = JSON.parse(request.data);
154
-
155
- expect(payload.refererInfo.referer).to.equal(
156
- templateBidderRequest.refererInfo.referer
157
- );
158
- });
159
- });
160
-
161
- describe('interpretResponse', function () {
162
- it('should handle valid bid responses', function () {
163
- const response = copyBidResponses();
164
-
165
- const bids = spec.interpretResponse(response);
166
- expect(bids).to.have.length(1);
167
- expect(bids[0].adUnitCode).to.equal(templateBidRequest.adUnitCode);
168
- });
169
-
170
- it('should handle no bid responses', function () {
171
- const response = copyBidResponses();
172
- response.body = [];
173
-
174
- const bids = spec.interpretResponse(response);
175
- expect(bids).to.have.length(0);
176
- });
177
-
178
- it('should return no bid on an invalid response', function () {
179
- const response = copyBidResponses();
180
- delete response.body;
181
-
182
- const bids = spec.interpretResponse(response);
183
- expect(bids).to.have.length(0);
184
- });
185
-
186
- it('should include advertiserDomains field in the response', function () {
187
- const response = copyBidResponses();
188
-
189
- const bids = spec.interpretResponse(response);
190
- expect(bids[0].meta.advertiserDomains).to.be.an('array').that.is.empty;
191
- });
192
-
193
- it('should reflect the value of the OpenRTB adomain field', function () {
194
- const advertiserDomainsMock = ['http://example.com'];
195
- let response = copyBidResponses();
196
- response.body = response.body.map((bid) => {
197
- return {
198
- ...bid,
199
- adomain: advertiserDomainsMock,
200
- };
201
- });
202
-
203
- const bids = spec.interpretResponse(response);
204
- expect(bids[0].meta.advertiserDomains).to.equal(advertiserDomainsMock);
205
- });
206
- });
207
- });
62
+ }
63
+
64
+ const getBidRequest = () => getDeepCopy(mock.bidRequest)
65
+ const getBidderRequest = () => ({
66
+ bids: [getBidRequest()],
67
+ ...getDeepCopy(mock.bidderRequest),
68
+ })
69
+
70
+ const getBidResponseHelper = () => getDeepCopy(mock.bidResponse)
71
+ const getBidResponse = () => ({
72
+ body: getBidResponseHelper(),
73
+ })
74
+
75
+ function getDeepCopy(object) {
76
+ return JSON.parse(JSON.stringify(object))
77
+ }
78
+
79
+ describe('GlimpseProtocolAdapter', () => {
80
+ const glimpseAdapter = newBidder(spec)
81
+
82
+ describe('Inherited functions', () => {
83
+ it('Functions exist and are valid types', () => {
84
+ expect(glimpseAdapter.callBids).to.exist.and.to.be.a('function')
85
+ expect(glimpseAdapter.getSpec).to.exist.and.to.be.a('function')
86
+ })
87
+ })
88
+
89
+ describe('isBidRequestValid', () => {
90
+ it('Returns true when a bid request has a valid placement id', () => {
91
+ const bidRequest = getBidRequest()
92
+
93
+ const isValidBidRequest = spec.isBidRequestValid(bidRequest)
94
+ expect(isValidBidRequest).to.be.true
95
+ })
96
+
97
+ it('Returns false when params are empty', () => {
98
+ const bidRequest = getBidRequest()
99
+ bidRequest.params = {}
100
+
101
+ const isValidBidRequest = spec.isBidRequestValid(bidRequest)
102
+ expect(isValidBidRequest).to.be.false
103
+ })
104
+
105
+ it('Returns false when params are null', () => {
106
+ const bidRequest = getBidRequest()
107
+ bidRequest.params = null
108
+
109
+ const isValidBidRequest = spec.isBidRequestValid(bidRequest)
110
+ expect(isValidBidRequest).to.be.false
111
+ })
112
+
113
+ it('Returns false when params are undefined', () => {
114
+ const bidRequest = getBidRequest()
115
+ delete bidRequest.params
116
+
117
+ const isValidBidRequest = spec.isBidRequestValid(bidRequest)
118
+ expect(isValidBidRequest).to.be.false
119
+ })
120
+
121
+ it('Returns false when params are invalid type', () => {
122
+ const bidRequest = getBidRequest()
123
+ bidRequest.params = 123
124
+
125
+ const isValidBidRequest = spec.isBidRequestValid(bidRequest)
126
+ expect(isValidBidRequest).to.be.false
127
+ })
128
+
129
+ it('Returns false when placement id is empty', () => {
130
+ const bidRequest = getBidRequest()
131
+ bidRequest.params.placementId = ''
132
+
133
+ const isValidBidRequest = spec.isBidRequestValid(bidRequest)
134
+ expect(isValidBidRequest).to.be.false
135
+ })
136
+
137
+ it('Returns false when placement id is null', () => {
138
+ const bidRequest = getBidRequest()
139
+ bidRequest.params.placementId = null
140
+
141
+ const isValidBidRequest = spec.isBidRequestValid(bidRequest)
142
+ expect(isValidBidRequest).to.be.false
143
+ })
144
+
145
+ it('Returns false when placement id is undefined', () => {
146
+ const bidRequest = getBidRequest()
147
+ delete bidRequest.params.placementId
148
+
149
+ const isValidBidRequest = spec.isBidRequestValid(bidRequest)
150
+ expect(isValidBidRequest).to.be.false
151
+ })
152
+
153
+ it('Returns false when placement id has an invalid type', () => {
154
+ const bidRequest = getBidRequest()
155
+ bidRequest.params.placementId = 123
156
+
157
+ const isValidBidRequest = spec.isBidRequestValid(bidRequest)
158
+ expect(isValidBidRequest).to.be.false
159
+ })
160
+ })
161
+
162
+ describe('buildRequests', () => {
163
+ const bidRequests = [getBidRequest()]
164
+ const bidderRequest = getBidderRequest()
165
+
166
+ it('Adds GDPR consent', () => {
167
+ const request = spec.buildRequests(bidRequests, bidderRequest)
168
+ const payload = JSON.parse(request.data)
169
+ const expected = bidderRequest.gdprConsent.consentString
170
+
171
+ expect(payload.data.gdprConsent).to.exist
172
+ expect(payload.data.gdprConsent.gdprApplies).to.be.true
173
+ expect(payload.data.gdprConsent.consentString).to.equal(expected)
174
+ })
175
+
176
+ it('Adds referer information', () => {
177
+ const request = spec.buildRequests(bidRequests, bidderRequest)
178
+ const payload = JSON.parse(request.data)
179
+ const expected = mock.bidderRequest.refererInfo.referer
180
+
181
+ expect(payload.data.referer).to.equal(expected)
182
+ })
183
+
184
+ it('Sends a POST request to the Glimpse server', () => {
185
+ const request = spec.buildRequests(bidRequests)
186
+
187
+ expect(request.url).to.equal(ENDPOINT)
188
+ expect(request.method).to.equal('POST')
189
+ })
190
+ })
191
+
192
+ describe('interpretResponse', () => {
193
+ it('Handles valid bid responses', () => {
194
+ const bidResponse = getBidResponse()
195
+ const bids = spec.interpretResponse(bidResponse)
196
+
197
+ expect(bids).to.have.lengthOf(1)
198
+ expect(bids[0].adUnitCode).to.equal(mock.bidRequest.adUnitCode)
199
+ })
200
+
201
+ it('Handles no bid responses', () => {
202
+ const bidResponse = getBidResponse()
203
+ bidResponse.body.data.bids = []
204
+
205
+ const bids = spec.interpretResponse(bidResponse)
206
+ expect(bids).to.have.lengthOf(0)
207
+ })
208
+
209
+ it('Returns no bids if body is empty', () => {
210
+ const bidResponse = getBidResponse()
211
+ bidResponse.body = {}
212
+
213
+ const bids = spec.interpretResponse(bidResponse)
214
+ expect(bids).to.have.lengthOf(0)
215
+ })
216
+
217
+ it('Returns no bids if body is null', () => {
218
+ const bidResponse = getBidResponse()
219
+ bidResponse.body = null
220
+
221
+ const bids = spec.interpretResponse(bidResponse)
222
+ expect(bids).to.have.lengthOf(0)
223
+ })
224
+
225
+ it('Returns no bids if body is undefined', () => {
226
+ const bidResponse = getBidResponse()
227
+ delete bidResponse.body
228
+
229
+ const bids = spec.interpretResponse(bidResponse)
230
+ expect(bids).to.have.lengthOf(0)
231
+ })
232
+
233
+ it('Returns no bids if body is invalid type', () => {
234
+ const bidResponse = getBidResponse()
235
+ bidResponse.body = 123
236
+
237
+ const bids = spec.interpretResponse(bidResponse)
238
+ expect(bids).to.have.lengthOf(0)
239
+ })
240
+
241
+ it('Returns no bids if auth is empty', () => {
242
+ const bidResponse = getBidResponse()
243
+ bidResponse.body.auth = ''
244
+
245
+ const bids = spec.interpretResponse(bidResponse)
246
+ expect(bids).to.have.lengthOf(0)
247
+ })
248
+
249
+ it('Returns no bids if auth is null', () => {
250
+ const bidResponse = getBidResponse()
251
+ bidResponse.body.auth = null
252
+
253
+ const bids = spec.interpretResponse(bidResponse)
254
+ expect(bids).to.have.lengthOf(0)
255
+ })
256
+
257
+ it('Returns no bids if auth is undefined', () => {
258
+ const bidResponse = getBidResponse()
259
+ delete bidResponse.body.auth
260
+
261
+ const bids = spec.interpretResponse(bidResponse)
262
+ expect(bids).to.have.lengthOf(0)
263
+ })
264
+
265
+ it('Returns no bids if auth is invalid type', () => {
266
+ const bidResponse = getBidResponse()
267
+ bidResponse.body.auth = 123
268
+
269
+ const bids = spec.interpretResponse(bidResponse)
270
+ expect(bids).to.have.lengthOf(0)
271
+ })
272
+
273
+ it('Returns no bid if data is empty', () => {
274
+ const bidResponse = getBidResponse()
275
+ bidResponse.body.data = {}
276
+
277
+ const bids = spec.interpretResponse(bidResponse)
278
+ expect(bids).to.have.lengthOf(0)
279
+ })
280
+
281
+ it('Returns no bid if data is null', () => {
282
+ const bidResponse = getBidResponse()
283
+ bidResponse.body.data = null
284
+
285
+ const bids = spec.interpretResponse(bidResponse)
286
+ expect(bids).to.have.lengthOf(0)
287
+ })
288
+
289
+ it('Returns no bid if data is undefined', () => {
290
+ const bidResponse = getBidResponse()
291
+ delete bidResponse.body.data
292
+
293
+ const bids = spec.interpretResponse(bidResponse)
294
+ expect(bids).to.have.lengthOf(0)
295
+ })
296
+
297
+ it('Returns no bid if data is invalid type', () => {
298
+ const bidResponse = getBidResponse()
299
+ bidResponse.body.data = "This shouldn't be a string"
300
+
301
+ const bids = spec.interpretResponse(bidResponse)
302
+ expect(bids).to.have.lengthOf(0)
303
+ })
304
+ })
305
+ })
@@ -874,6 +874,22 @@ describe('TheMediaGrid Adapter', function () {
874
874
  },
875
875
  'adUnitCode': 'adunit-code-2',
876
876
  'sizes': [[300, 250], [300, 600]],
877
+ 'bidId': '112432ab4f34',
878
+ 'bidderRequestId': '5f2009617a7c0a',
879
+ 'auctionId': '1cbd2feafe5e8b',
880
+ 'mediaTypes': {
881
+ 'video': {
882
+ 'context': 'instream'
883
+ }
884
+ }
885
+ },
886
+ {
887
+ 'bidder': 'grid',
888
+ 'params': {
889
+ 'uid': '15'
890
+ },
891
+ 'adUnitCode': 'adunit-code-2',
892
+ 'sizes': [[300, 250], [300, 600]],
877
893
  'bidId': 'a74b342f8cd',
878
894
  'bidderRequestId': '5f2009617a7c0a',
879
895
  'auctionId': '1cbd2feafe5e8b',
@@ -888,7 +904,8 @@ describe('TheMediaGrid Adapter', function () {
888
904
  {'bid': [{'impid': '659423fff799cb', 'price': 1.15, 'adm': '<VAST version=\"3.0\">\n<Ad id=\"21341234\"><\/Ad>\n<\/VAST>', 'auid': 11, content_type: 'video', w: 300, h: 600}], 'seat': '2'},
889
905
  {'bid': [{'impid': '2bc598e42b6a', 'price': 1.00, 'adm': '<VAST version=\"3.0\">\n<Ad id=\"21331274\"><\/Ad>\n<\/VAST>', 'auid': 12, content_type: 'video'}], 'seat': '2'},
890
906
  {'bid': [{'impid': '23312a43bc42', 'price': 2.00, 'nurl': 'https://some_test_vast_url.com', 'auid': 13, content_type: 'video', 'adomain': ['example.com'], w: 300, h: 600}], 'seat': '2'},
891
- {'bid': [{'impid': 'a74b342f8cd', 'price': 1.50, 'nurl': '', 'auid': 14, content_type: 'video'}], 'seat': '2'}
907
+ {'bid': [{'impid': '112432ab4f34', 'price': 1.80, 'adm': '<VAST version=\"3.0\">\n<Ad id=\"32115432\"><\/Ad>\n<\/VAST>', 'nurl': 'https://wrong_url.com', 'auid': 14, content_type: 'video', 'adomain': ['example.com'], w: 300, h: 600}], 'seat': '2'},
908
+ {'bid': [{'impid': 'a74b342f8cd', 'price': 1.50, 'nurl': '', 'auid': 15, content_type: 'video'}], 'seat': '2'}
892
909
  ];
893
910
  const request = spec.buildRequests(bidRequests);
894
911
  const expectedResponse = [
@@ -945,7 +962,26 @@ describe('TheMediaGrid Adapter', function () {
945
962
  advertiserDomains: ['example.com']
946
963
  },
947
964
  'vastUrl': 'https://some_test_vast_url.com',
948
- }
965
+ },
966
+ {
967
+ 'requestId': '112432ab4f34',
968
+ 'cpm': 1.80,
969
+ 'creativeId': 14,
970
+ 'dealId': undefined,
971
+ 'width': 300,
972
+ 'height': 600,
973
+ 'currency': 'USD',
974
+ 'mediaType': 'video',
975
+ 'netRevenue': true,
976
+ 'ttl': 360,
977
+ 'meta': {
978
+ advertiserDomains: ['example.com']
979
+ },
980
+ 'vastXml': '<VAST version=\"3.0\">\n<Ad id=\"32115432\"><\/Ad>\n<\/VAST>',
981
+ 'adResponse': {
982
+ 'content': '<VAST version=\"3.0\">\n<Ad id=\"32115432\"><\/Ad>\n<\/VAST>'
983
+ }
984
+ },
949
985
  ];
950
986
 
951
987
  const result = spec.interpretResponse({'body': {'seatbid': response}}, request);