prebid.js 9.1.0 → 9.3.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 (362) hide show
  1. package/browsers.json +3 -3
  2. package/dist/33acrossAnalyticsAdapter.js +1 -1
  3. package/dist/33acrossBidAdapter.js +1 -1
  4. package/dist/33acrossIdSystem.js +1 -1
  5. package/dist/BTBidAdapter.js +1 -1
  6. package/dist/acuityadsBidAdapter.js +1 -1
  7. package/dist/adagioAnalyticsAdapter.js +1 -1
  8. package/dist/adagioBidAdapter.js +1 -1
  9. package/dist/adagioRtdProvider.js +1 -1
  10. package/dist/adagioUtils.js +1 -0
  11. package/dist/addefendBidAdapter.js +1 -1
  12. package/dist/adgenerationBidAdapter.js +1 -1
  13. package/dist/adlooxRtdProvider.js +1 -1
  14. package/dist/admanBidAdapter.js +1 -1
  15. package/dist/adnuntiusBidAdapter.js +1 -1
  16. package/dist/adpod.js +1 -1
  17. package/dist/adprimeBidAdapter.js +1 -1
  18. package/dist/adqueryBidAdapter.js +1 -1
  19. package/dist/adrelevantisBidAdapter.js +1 -1
  20. package/dist/adstirBidAdapter.js +1 -1
  21. package/dist/adtrgtmeBidAdapter.js +1 -1
  22. package/dist/adxcgAnalyticsAdapter.js +1 -1
  23. package/dist/adxcgBidAdapter.js +1 -1
  24. package/dist/adyoulikeBidAdapter.js +1 -1
  25. package/dist/agmaAnalyticsAdapter.js +1 -1
  26. package/dist/ajaBidAdapter.js +1 -1
  27. package/dist/amxBidAdapter.js +1 -1
  28. package/dist/amxIdSystem.js +1 -1
  29. package/dist/appierAnalyticsAdapter.js +1 -1
  30. package/dist/appnexusBidAdapter.js +1 -1
  31. package/dist/appnexusUtils.js +1 -1
  32. package/dist/asoBidAdapter.js +1 -1
  33. package/dist/autoplayDetection.js +1 -1
  34. package/dist/axisBidAdapter.js +1 -1
  35. package/dist/axonixBidAdapter.js +1 -1
  36. package/dist/beyondmediaBidAdapter.js +1 -1
  37. package/dist/bidglassBidAdapter.js +1 -1
  38. package/dist/big-richmediaBidAdapter.js +1 -1
  39. package/dist/bliinkBidAdapter.js +1 -1
  40. package/dist/boldwinBidAdapter.js +1 -1
  41. package/dist/bridBidAdapter.js +1 -1
  42. package/dist/bridgewellBidAdapter.js +1 -1
  43. package/dist/brightMountainMediaBidAdapter.js +1 -1
  44. package/dist/carodaBidAdapter.js +1 -1
  45. package/dist/chtnwBidAdapter.js +1 -1
  46. package/dist/chunk-core.js +1 -1
  47. package/dist/compassBidAdapter.js +1 -1
  48. package/dist/concertBidAdapter.js +1 -1
  49. package/dist/connectadBidAdapter.js +1 -1
  50. package/dist/consentManagement.js +1 -0
  51. package/dist/consentManagementGpp.js +1 -1
  52. package/dist/consentManagementTcf.js +1 -1
  53. package/dist/consumableBidAdapter.js +1 -1
  54. package/dist/contentexchangeBidAdapter.js +1 -1
  55. package/dist/conversantAnalyticsAdapter.js +1 -1
  56. package/dist/conversantBidAdapter.js +1 -1
  57. package/dist/copper6sspBidAdapter.js +1 -0
  58. package/dist/craftBidAdapter.js +1 -1
  59. package/dist/criteoBidAdapter.js +1 -1
  60. package/dist/cwireBidAdapter.js +1 -1
  61. package/dist/dailymotionBidAdapter.js +1 -1
  62. package/dist/dependencies.json +96 -6
  63. package/dist/dspxBidAdapter.js +1 -1
  64. package/dist/dxkultureBidAdapter.js +1 -1
  65. package/dist/e_volutionBidAdapter.js +1 -1
  66. package/dist/emtvBidAdapter.js +1 -1
  67. package/dist/eplanningBidAdapter.js +1 -1
  68. package/dist/euidIdSystem.js +1 -1
  69. package/dist/exadsBidAdapter.js +1 -1
  70. package/dist/feedadBidAdapter.js +1 -1
  71. package/dist/finativeBidAdapter.js +1 -1
  72. package/dist/freewheel-sspBidAdapter.js +1 -1
  73. package/dist/globalsunBidAdapter.js +1 -1
  74. package/dist/gmosspBidAdapter.js +1 -1
  75. package/dist/goldbachBidAdapter.js +1 -1
  76. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  77. package/dist/greenbidsRtdProvider.js +1 -1
  78. package/dist/gridBidAdapter.js +1 -1
  79. package/dist/gumgumBidAdapter.js +1 -1
  80. package/dist/h12mediaBidAdapter.js +1 -1
  81. package/dist/hypelabBidAdapter.js +1 -1
  82. package/dist/id5AnalyticsAdapter.js +1 -1
  83. package/dist/id5IdSystem.js +1 -1
  84. package/dist/illuminBidAdapter.js +1 -1
  85. package/dist/imdsBidAdapter.js +1 -1
  86. package/dist/improvedigitalBidAdapter.js +1 -1
  87. package/dist/insticatorBidAdapter.js +1 -1
  88. package/dist/intentIqIdSystem.js +1 -1
  89. package/dist/iqzoneBidAdapter.js +1 -1
  90. package/dist/ixBidAdapter.js +1 -1
  91. package/dist/jixieBidAdapter.js +1 -1
  92. package/dist/justpremiumBidAdapter.js +1 -1
  93. package/dist/kargoBidAdapter.js +1 -1
  94. package/dist/kimberliteBidAdapter.js +1 -1
  95. package/dist/kiviadsBidAdapter.js +1 -1
  96. package/dist/konduitAnalyticsAdapter.js +1 -1
  97. package/dist/krushmediaBidAdapter.js +1 -1
  98. package/dist/kueezBidAdapter.js +1 -1
  99. package/dist/kueezRtbBidAdapter.js +1 -1
  100. package/dist/lassoBidAdapter.js +1 -1
  101. package/dist/lifestreetBidAdapter.js +1 -1
  102. package/dist/liveIntentIdSystem.js +1 -1
  103. package/dist/logicadBidAdapter.js +1 -1
  104. package/dist/loglyliftBidAdapter.js +1 -1
  105. package/dist/loyalBidAdapter.js +1 -1
  106. package/dist/luceadBidAdapter.js +1 -1
  107. package/dist/lunamediahbBidAdapter.js +1 -1
  108. package/dist/mabidderBidAdapter.js +1 -1
  109. package/dist/magniteAnalyticsAdapter.js +1 -1
  110. package/dist/malltvAnalyticsAdapter.js +1 -1
  111. package/dist/marsmediaBidAdapter.js +1 -1
  112. package/dist/mathildeadsBidAdapter.js +1 -1
  113. package/dist/mediafuseBidAdapter.js +1 -1
  114. package/dist/medianetAnalyticsAdapter.js +1 -1
  115. package/dist/medianetBidAdapter.js +1 -1
  116. package/dist/mediasquareBidAdapter.js +1 -1
  117. package/dist/mgidBidAdapter.js +1 -1
  118. package/dist/mgidXBidAdapter.js +1 -1
  119. package/dist/minutemediaBidAdapter.js +1 -1
  120. package/dist/missenaBidAdapter.js +1 -1
  121. package/dist/mobfoxpbBidAdapter.js +1 -1
  122. package/dist/mobianRtdProvider.js +1 -1
  123. package/dist/nexx360BidAdapter.js +1 -1
  124. package/dist/nobidAnalyticsAdapter.js +1 -1
  125. package/dist/nobidBidAdapter.js +1 -1
  126. package/dist/not-for-prod/prebid.js +211 -204
  127. package/dist/oguryBidAdapter.js +1 -1
  128. package/dist/onetagBidAdapter.js +1 -1
  129. package/dist/ooloAnalyticsAdapter.js +1 -1
  130. package/dist/openwebBidAdapter.js +1 -1
  131. package/dist/openxBidAdapter.js +1 -1
  132. package/dist/optidigitalBidAdapter.js +1 -1
  133. package/dist/orakiBidAdapter.js +1 -0
  134. package/dist/orbidderBidAdapter.js +1 -1
  135. package/dist/ortbConverter.js +1 -1
  136. package/dist/outbrainBidAdapter.js +1 -1
  137. package/dist/ozoneBidAdapter.js +1 -1
  138. package/dist/paapi.js +1 -1
  139. package/dist/pairIdSystem.js +1 -1
  140. package/dist/pgamsspBidAdapter.js +1 -1
  141. package/dist/pixfutureBidAdapter.js +1 -1
  142. package/dist/playdigoBidAdapter.js +1 -1
  143. package/dist/prebidServerBidAdapter.js +1 -1
  144. package/dist/pubCircleBidAdapter.js +1 -1
  145. package/dist/publinkIdSystem.js +1 -1
  146. package/dist/publirBidAdapter.js +1 -1
  147. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  148. package/dist/pubmaticBidAdapter.js +1 -1
  149. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  150. package/dist/pubxaiAnalyticsAdapter.js +1 -1
  151. package/dist/pxyzBidAdapter.js +1 -1
  152. package/dist/qtBidAdapter.js +1 -1
  153. package/dist/quantcastBidAdapter.js +1 -1
  154. package/dist/raynRtdProvider.js +1 -1
  155. package/dist/readpeakBidAdapter.js +1 -1
  156. package/dist/relaidoBidAdapter.js +1 -1
  157. package/dist/retailspotBidAdapter.js +1 -1
  158. package/dist/rhythmoneBidAdapter.js +1 -1
  159. package/dist/riseBidAdapter.js +1 -1
  160. package/dist/rubiconBidAdapter.js +1 -1
  161. package/dist/seedingAllianceBidAdapter.js +1 -1
  162. package/dist/seedtagBidAdapter.js +1 -1
  163. package/dist/setupadBidAdapter.js +1 -1
  164. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  165. package/dist/sharethroughBidAdapter.js +1 -1
  166. package/dist/shinezBidAdapter.js +1 -1
  167. package/dist/shinezRtbBidAdapter.js +1 -1
  168. package/dist/smaatoBidAdapter.js +1 -1
  169. package/dist/smartadserverBidAdapter.js +1 -1
  170. package/dist/smartxBidAdapter.js +1 -1
  171. package/dist/smartyadsBidAdapter.js +1 -1
  172. package/dist/smartyadsUtils.js +1 -0
  173. package/dist/smartytechBidAdapter.js +1 -1
  174. package/dist/smilewantedBidAdapter.js +1 -1
  175. package/dist/snigelBidAdapter.js +1 -1
  176. package/dist/sonobiBidAdapter.js +1 -1
  177. package/dist/sovrnBidAdapter.js +1 -1
  178. package/dist/sspBCBidAdapter.js +1 -1
  179. package/dist/stnBidAdapter.js +1 -1
  180. package/dist/stvBidAdapter.js +1 -1
  181. package/dist/sublimeBidAdapter.js +1 -1
  182. package/dist/taboolaBidAdapter.js +1 -1
  183. package/dist/tagorasBidAdapter.js +1 -1
  184. package/dist/tappxBidAdapter.js +1 -1
  185. package/dist/targetVideoBidAdapter.js +1 -1
  186. package/dist/teadsBidAdapter.js +1 -1
  187. package/dist/teqblazeUtils.js +1 -0
  188. package/dist/terceptAnalyticsAdapter.js +1 -1
  189. package/dist/themoneytizerBidAdapter.js +1 -1
  190. package/dist/topicsFpdModule.js +1 -1
  191. package/dist/trionBidAdapter.js +1 -1
  192. package/dist/tripleliftBidAdapter.js +1 -1
  193. package/dist/ttdBidAdapter.js +1 -1
  194. package/dist/twistDigitalBidAdapter.js +1 -1
  195. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  196. package/dist/uid2IdSystem.js +1 -1
  197. package/dist/underdogmediaBidAdapter.js +1 -1
  198. package/dist/undertoneBidAdapter.js +1 -1
  199. package/dist/unrulyBidAdapter.js +1 -1
  200. package/dist/userId.js +1 -1
  201. package/dist/vidazooBidAdapter.js +1 -1
  202. package/dist/vidazooUtils.js +1 -0
  203. package/dist/videobyteBidAdapter.js +1 -1
  204. package/dist/visiblemeasuresBidAdapter.js +1 -1
  205. package/dist/visxBidAdapter.js +1 -1
  206. package/dist/vuukleBidAdapter.js +1 -1
  207. package/dist/widespaceBidAdapter.js +1 -1
  208. package/dist/winrBidAdapter.js +1 -1
  209. package/dist/yahooAdsBidAdapter.js +1 -1
  210. package/dist/yieldmoBidAdapter.js +1 -1
  211. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  212. package/dist/yuktamediaAnalyticsAdapter.js +1 -1
  213. package/integrationExamples/gpt/raynRtdProvider_example.html +1 -0
  214. package/libraries/adagioUtils/adagioUtils.js +35 -0
  215. package/libraries/appnexusUtils/anUtils.js +1 -0
  216. package/libraries/autoplayDetection/autoplay.js +8 -1
  217. package/libraries/consentManagement/cmUtils.js +38 -0
  218. package/libraries/ortbConverter/converter.js +1 -1
  219. package/libraries/smartyadsUtils/getAdUrlByRegion.js +32 -0
  220. package/libraries/teqblazeUtils/bidderUtils.js +253 -0
  221. package/libraries/vidazooUtils/bidderUtils.js +481 -0
  222. package/libraries/vidazooUtils/constants.js +7 -0
  223. package/modules/.submodules.json +1 -0
  224. package/modules/acuityadsBidAdapter.js +5 -203
  225. package/modules/adagioBidAdapter.js +1 -17
  226. package/modules/adagioRtdProvider.js +41 -51
  227. package/modules/adagioRtdProvider.md +1 -0
  228. package/modules/addefendBidAdapter.js +1 -2
  229. package/modules/adlooxRtdProvider.js +1 -1
  230. package/modules/admanBidAdapter.js +31 -188
  231. package/modules/adnuntiusBidAdapter.js +1 -0
  232. package/modules/adprimeBidAdapter.js +28 -165
  233. package/modules/adxcgAnalyticsAdapter.js +1 -2
  234. package/modules/axisBidAdapter.js +33 -165
  235. package/modules/beyondmediaBidAdapter.js +5 -189
  236. package/modules/bliinkBidAdapter.js +3 -31
  237. package/modules/boldwinBidAdapter.js +21 -159
  238. package/modules/ceeIdSystem.js +1 -1
  239. package/modules/compassBidAdapter.js +5 -198
  240. package/modules/consentManagementGpp.js +2 -38
  241. package/modules/consentManagementTcf.js +7 -38
  242. package/modules/contentexchangeBidAdapter.js +5 -200
  243. package/modules/conversantAnalyticsAdapter.js +1 -2
  244. package/modules/conversantBidAdapter.js +1 -0
  245. package/modules/copper6sspBidAdapter.js +19 -0
  246. package/modules/copper6sspBidAdapter.md +79 -0
  247. package/modules/criteoBidAdapter.js +10 -3
  248. package/modules/e_volutionBidAdapter.js +4 -186
  249. package/modules/emtvBidAdapter.js +5 -198
  250. package/modules/globalsunBidAdapter.js +5 -199
  251. package/modules/id5AnalyticsAdapter.js +1 -2
  252. package/modules/id5IdSystem.js +31 -2
  253. package/modules/id5IdSystem.md +67 -2
  254. package/modules/intentIqIdSystem.js +408 -50
  255. package/modules/intentIqIdSystem.md +92 -0
  256. package/modules/iqzoneBidAdapter.js +5 -224
  257. package/modules/kiviadsBidAdapter.js +5 -199
  258. package/modules/krushmediaBidAdapter.js +25 -143
  259. package/modules/liveIntentIdSystem.js +2 -2
  260. package/modules/loyalBidAdapter.js +4 -178
  261. package/modules/lunamediahbBidAdapter.js +5 -118
  262. package/modules/mabidderBidAdapter.js +1 -2
  263. package/modules/mathildeadsBidAdapter.js +5 -198
  264. package/modules/medianetAnalyticsAdapter.js +1 -2
  265. package/modules/medianetBidAdapter.js +1 -1
  266. package/modules/mgidXBidAdapter.js +14 -207
  267. package/modules/mobfoxpbBidAdapter.js +4 -135
  268. package/modules/mobianRtdProvider.js +2 -2
  269. package/modules/nobidAnalyticsAdapter.js +2 -3
  270. package/modules/orakiBidAdapter.js +19 -0
  271. package/modules/orakiBidAdapter.md +79 -0
  272. package/modules/orbidderBidAdapter.js +4 -2
  273. package/modules/ozoneBidAdapter.js +117 -58
  274. package/modules/paapi.js +2 -1
  275. package/modules/pairIdSystem.js +27 -10
  276. package/modules/pgamsspBidAdapter.js +5 -240
  277. package/modules/pixfutureBidAdapter.js +1 -2
  278. package/modules/playdigoBidAdapter.js +4 -186
  279. package/modules/prebidServerBidAdapter/index.js +10 -3
  280. package/modules/pubCircleBidAdapter.js +5 -218
  281. package/modules/pubmaticAnalyticsAdapter.js +21 -8
  282. package/modules/pubxaiAnalyticsAdapter.js +1 -5
  283. package/modules/qtBidAdapter.js +5 -224
  284. package/modules/raynRtdProvider.js +36 -3
  285. package/modules/seedtagBidAdapter.js +5 -0
  286. package/modules/setupadBidAdapter.js +58 -140
  287. package/modules/smartadserverBidAdapter.js +3 -0
  288. package/modules/smartyadsBidAdapter.js +6 -110
  289. package/modules/smartytechBidAdapter.js +7 -2
  290. package/modules/snigelBidAdapter.js +1 -2
  291. package/modules/tappxBidAdapter.js +1 -2
  292. package/modules/terceptAnalyticsAdapter.js +1 -2
  293. package/modules/topicsFpdModule.js +1 -1
  294. package/modules/twistDigitalBidAdapter.js +1 -12
  295. package/modules/uid2IdSystem.js +0 -1
  296. package/modules/uid2IdSystem_shared.js +0 -1
  297. package/modules/userId/index.js +31 -21
  298. package/modules/vidazooBidAdapter.js +26 -468
  299. package/modules/visiblemeasuresBidAdapter.js +5 -199
  300. package/modules/yahooAdsBidAdapter.js +4 -1
  301. package/modules/yuktamediaAnalyticsAdapter.js +1 -2
  302. package/package.json +1 -1
  303. package/src/auction.js +5 -63
  304. package/src/utils/focusTimeout.js +41 -0
  305. package/src/utils/ttlCollection.js +2 -1
  306. package/src/utils.js +42 -0
  307. package/src/videoCache.js +72 -0
  308. package/test/mocks/videoCacheStub.js +1 -1
  309. package/test/spec/auctionmanager_spec.js +16 -1
  310. package/test/spec/fpd/gdpr_spec.js +24 -2
  311. package/test/spec/libraries/teqblazeUtils/bidderUtils_spec.js +519 -0
  312. package/test/spec/modules/acuityadsBidAdapter_spec.js +79 -43
  313. package/test/spec/modules/adagioRtdProvider_spec.js +62 -1
  314. package/test/spec/modules/admanBidAdapter_spec.js +370 -247
  315. package/test/spec/modules/adnuntiusBidAdapter_spec.js +6 -3
  316. package/test/spec/modules/adprimeBidAdapter_spec.js +225 -78
  317. package/test/spec/modules/axisBidAdapter_spec.js +78 -14
  318. package/test/spec/modules/beyondmediaBidAdapter_spec.js +80 -18
  319. package/test/spec/modules/bliinkBidAdapter_spec.js +8 -2
  320. package/test/spec/modules/boldwinBidAdapter_spec.js +221 -75
  321. package/test/spec/modules/compassBidAdapter_spec.js +130 -16
  322. package/test/spec/modules/contentexchangeBidAdapter_spec.js +134 -21
  323. package/test/spec/modules/conversantAnalyticsAdapter_spec.js +1 -1
  324. package/test/spec/modules/conversantBidAdapter_spec.js +7 -0
  325. package/test/spec/modules/copper6sspBidAdapter_spec.js +514 -0
  326. package/test/spec/modules/e_volutionBidAdapter_spec.js +65 -3
  327. package/test/spec/modules/emtvBidAdapter_spec.js +131 -16
  328. package/test/spec/modules/globalsunBidAdapter_spec.js +130 -16
  329. package/test/spec/modules/id5IdSystem_spec.js +79 -3
  330. package/test/spec/modules/intentIqIdSystem_spec.js +264 -36
  331. package/test/spec/modules/iqzoneBidAdapter_spec.js +66 -12
  332. package/test/spec/modules/kiviadsBidAdapter_spec.js +131 -20
  333. package/test/spec/modules/krushmediaBidAdapter_spec.js +272 -90
  334. package/test/spec/modules/loyalBidAdapter_spec.js +114 -14
  335. package/test/spec/modules/lunamediahbBidAdapter_spec.js +221 -87
  336. package/test/spec/modules/mathildeadsBidAdapter_spec.js +87 -18
  337. package/test/spec/modules/mgidXBidAdapter_spec.js +11 -3
  338. package/test/spec/modules/mobfoxpbBidAdapter_spec.js +229 -91
  339. package/test/spec/modules/orakiBidAdapter_spec.js +510 -0
  340. package/test/spec/modules/ozoneBidAdapter_spec.js +192 -22
  341. package/test/spec/modules/paapi_spec.js +5 -5
  342. package/test/spec/modules/pgamsspBidAdapter_spec.js +83 -16
  343. package/test/spec/modules/playdigoBidAdapter_spec.js +38 -9
  344. package/test/spec/modules/prebidServerBidAdapter_spec.js +14 -0
  345. package/test/spec/modules/pubCircleBidAdapter_spec.js +82 -17
  346. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +52 -5
  347. package/test/spec/modules/qtBidAdapter_spec.js +15 -3
  348. package/test/spec/modules/raynRtdProvider_spec.js +25 -0
  349. package/test/spec/modules/seedtagBidAdapter_spec.js +29 -0
  350. package/test/spec/modules/setupadBidAdapter_spec.js +124 -97
  351. package/test/spec/modules/smartadserverBidAdapter_spec.js +7 -0
  352. package/test/spec/modules/smartyadsBidAdapter_spec.js +6 -83
  353. package/test/spec/modules/smartytechBidAdapter_spec.js +5 -1
  354. package/test/spec/modules/topicsFpdModule_spec.js +43 -59
  355. package/test/spec/modules/twistDigitalBidAdapter_spec.js +5 -3
  356. package/test/spec/modules/userId_spec.js +86 -47
  357. package/test/spec/modules/vidazooBidAdapter_spec.js +21 -23
  358. package/test/spec/modules/visiblemeasuresBidAdapter_spec.js +130 -16
  359. package/test/spec/modules/yahooAdsBidAdapter_spec.js +1 -1
  360. package/test/spec/ortbConverter/converter_spec.js +7 -3
  361. package/test/spec/unit/utils/focusTimeout_spec.js +60 -0
  362. package/test/spec/videoCache_spec.js +56 -53
@@ -2,31 +2,61 @@ import { expect } from 'chai';
2
2
  import { intentIqIdSubmodule, storage } from 'modules/intentIqIdSystem.js';
3
3
  import * as utils from 'src/utils.js';
4
4
  import { server } from 'test/mocks/xhr.js';
5
- import {clearAllCookies} from '../../helpers/cookies.js';
5
+ import { CLIENT_HINTS_KEY, FIRST_PARTY_KEY, decryptData, detectBrowserFromUserAgent, detectBrowserFromUserAgentData, handleClientHints, handleGPPData, readData } from '../../../modules/intentIqIdSystem';
6
+ import { gppDataHandler, uspDataHandler } from '../../../src/consentHandler';
7
+ import { clearAllCookies } from '../../helpers/cookies';
6
8
 
7
9
  const partner = 10;
8
10
  const pai = '11';
9
11
  const pcid = '12';
10
- const enableCookieStorage = true;
11
12
  const defaultConfigParams = { params: { partner: partner } };
12
13
  const paiConfigParams = { params: { partner: partner, pai: pai } };
13
14
  const pcidConfigParams = { params: { partner: partner, pcid: pcid } };
14
- const enableCookieConfigParams = { params: { partner: partner, enableCookieStorage: enableCookieStorage } };
15
- const allConfigParams = { params: { partner: partner, pai: pai, pcid: pcid, enableCookieStorage: enableCookieStorage } };
15
+ const allConfigParams = { params: { partner: partner, pai: pai, pcid: pcid } };
16
16
  const responseHeader = { 'Content-Type': 'application/json' }
17
17
 
18
+ export const testClientHints = {
19
+ architecture: 'x86',
20
+ bitness: '64',
21
+ brands: [
22
+ {
23
+ brand: 'Not(A:Brand',
24
+ version: '24'
25
+ },
26
+ {
27
+ brand: 'Chromium',
28
+ version: '122'
29
+ }
30
+ ],
31
+ fullVersionList: [
32
+ {
33
+ brand: 'Not(A:Brand',
34
+ version: '24.0.0.0'
35
+ },
36
+ {
37
+ brand: 'Chromium',
38
+ version: '122.0.6261.128'
39
+ }
40
+ ],
41
+ mobile: false,
42
+ model: '',
43
+ platform: 'Linux',
44
+ platformVersion: '6.5.0',
45
+ wow64: false
46
+ };
47
+
18
48
  describe('IntentIQ tests', function () {
19
49
  let logErrorStub;
20
50
  let testLSValue = {
21
- 'date': 1651945280759,
51
+ 'date': Date.now(),
22
52
  'cttl': 2000,
23
53
  'rrtt': 123
24
54
  }
25
55
  let testLSValueWithData = {
26
- 'date': 1651945280759,
56
+ 'date': Date.now(),
27
57
  'cttl': 9999999999999,
28
58
  'rrtt': 123,
29
- 'data': 'previousTestData'
59
+ 'data': 'U2FsdGVkX18AKRyhEPdiL9kuxSigBrlqLaDJWvwSird2O5TdBW67gX+xbL4nYxHDjdS5G5FpdhtpouZiBFw2FBjyUyobZheM857G5q4BapdiA8z3K6j0W+r0im30Ak2SSn2NBfFwxcCgP/UAF5/ddxIIaeWl1yBMZBO+Gic6us2JUg86paAtp3Sk4unCvg1G+4myYYSKgGi/Vrw51ye/jAGn4AdAbFOCojENhV+Ts/XyVK0AQGdC3wqnQUId9MZpB2VoTA9wgXeYEzjpDDJmcKQ18V3WTKnK/H1FBVZa1vovOj13ZUeuMUZbZL83NFE/PkCrzJjRy14orcdnGbDUaxXUBBulDCr21gNnc0mLbYj7b18OQQ75/GhX80HroxbMEyc5tiECBrE/JsW+2sQ4MwoqePPPj/f5Bf4wJ4z3UphjK6maypoWaXsZCZTp2mJYmsf0XsNHLpt1MUrBeAmy6Bewkb+WEAeVe6/b53DQDlo2LQXpSzDPVucMn3CQOWFv1Bvz5cLIZRD8/NtDjgYzWNXHRRAGhhN19yew0ZyeS09x3UBiwER6A6ppv2qQVGs8QNsif3z7pkhkNoETcXQKyv1xa5X87tLvXkO4FYDQQvXEGInyPuNmkFtsZS5FJl+TYrdyaEiCOwRgkshwCU4s93WrfRUtPHtd4zNiA1LWAKGKeBEK6woeFn1YU1YIqsvx9wXfkCbqNkHTi2mD1Eb85a2niSK9BzDdbxwv6EzZ+f9j6esEVdBUIiYmsUuOfTp/ftOHKjBKi1lbeC5imAzZfV/AKvqS5opAVGp7Y9pq976sYblCrPBQ0PYI+Cm2ZNhG1vKc2Pa0rjwJwvusZp2Wvw9zSbnoZUeBi1O+XGYqGhkqYVvH3rXvrFiSmA7pk5Buz6vPd6YV1d55PVahv/4u3jksEI/ZN8QNshrM0foJ4tE/q4x8EKx22txb6433QQybwFfExdmA/XaPqM0rwqTm4qyK0mbX984A8niQka5T5pPkEfL4ALqlIgJ2Fo7X/s6FRU/sZq72JWKcVET4edebD0w5mjeotsjUz5EGT0jRSWRba0yxe4myNaAyY7Y0NTNY9J9Q0JLDFh9Hb05Ejt0Jeoq4Olv8/zFWObBoQtkQyeeRB8L7XIari/xgl191J6euhe5+8vu3ta3tX+XGk+gqdfip1R11tEYpW/XPsV+6DBEfS/8icDHiwK7sPpAgTx7GuJGL1U3Hbg7P/2zUU6xMSR5In/Oa5i1B9FtayGd+utiqrGJsqg8IyFlAt1B9B11k/wJFnWWevMly+y+Ko75ShF7UzfcNR2s41doov+2DEz/YiKH1qHjVOXjslBTYjceB3xqa8sSPDt/vQDDUIX5CPLyVBZj7AeeB/IKDFjZVovBDH92Xl8JTNILRuDHsWmSwNI1DUzgus6ox4u9Mi439caK6KnpNYso+ksLXNEQCm0m15WV2NC+fjkEwLV6hGNbz'
30
60
  }
31
61
  let testResponseWithValues = {
32
62
  'abPercentage': 90,
@@ -40,6 +70,10 @@ describe('IntentIQ tests', function () {
40
70
  }
41
71
 
42
72
  beforeEach(function () {
73
+ localStorage.clear();
74
+ const expiredDate = new Date(0).toUTCString();
75
+ storage.setCookie(FIRST_PARTY_KEY, '', expiredDate, 'Lax');
76
+ storage.setCookie(FIRST_PARTY_KEY + '_' + partner, '', expiredDate, 'Lax');
43
77
  logErrorStub = sinon.stub(utils, 'logError');
44
78
  });
45
79
 
@@ -67,7 +101,7 @@ describe('IntentIQ tests', function () {
67
101
  expect(submodule).to.be.undefined;
68
102
  });
69
103
 
70
- it('should not save data in cookie if enableCookieStorage configParam not set', function () {
104
+ it('should not save data in cookie if relevant type not set', function () {
71
105
  let callBackSpy = sinon.spy();
72
106
  let submoduleCallback = intentIqIdSubmodule.getId(defaultConfigParams).callback;
73
107
  submoduleCallback(callBackSpy);
@@ -82,9 +116,9 @@ describe('IntentIQ tests', function () {
82
116
  expect(storage.getCookie('_iiq_fdata_' + partner)).to.equal(null);
83
117
  });
84
118
 
85
- it('should save data in cookie if enableCookieStorage configParam set to true', function () {
119
+ it('should save data in cookie if storage type is "cookie"', function () {
86
120
  let callBackSpy = sinon.spy();
87
- let submoduleCallback = intentIqIdSubmodule.getId(allConfigParams).callback;
121
+ let submoduleCallback = intentIqIdSubmodule.getId({ ...allConfigParams, enabledStorageTypes: ['cookie'] }).callback;
88
122
  submoduleCallback(callBackSpy);
89
123
  let request = server.requests[0];
90
124
  expect(request.url).to.contain('https://api.intentiq.com/profiles_engine/ProfilesEngineServlet?at=39&mi=10&dpi=10&pt=17&dpn=1&pcid=12&pai=11&iiqidtype=2&iiqpcid=');
@@ -94,9 +128,10 @@ describe('IntentIQ tests', function () {
94
128
  JSON.stringify({ pid: 'test_pid', data: 'test_personid', ls: true })
95
129
  );
96
130
  expect(callBackSpy.calledOnce).to.be.true;
97
- const cookieValue = storage.getCookie('_iiq_fdata_' + partner)
98
- expect(cookieValue).to.not.equal(null)
99
- expect(JSON.parse(cookieValue).data).to.be.equal('test_personid');
131
+ const cookieValue = storage.getCookie('_iiq_fdata_' + partner);
132
+ expect(cookieValue).to.not.equal(null);
133
+ const decryptedData = JSON.parse(decryptData(JSON.parse(cookieValue).data));
134
+ expect(decryptedData).to.deep.equal(['test_personid']);
100
135
  });
101
136
 
102
137
  it('should call the IntentIQ endpoint with only partner', function () {
@@ -114,8 +149,6 @@ describe('IntentIQ tests', function () {
114
149
  });
115
150
 
116
151
  it('should ignore INVALID_ID and invalid responses in decode', function () {
117
- // let resp = JSON.stringify({'RESULT': 'NA'});
118
- // expect(intentIqIdSubmodule.decode(resp)).to.equal(undefined);
119
152
  expect(intentIqIdSubmodule.decode('INVALID_ID')).to.equal(undefined);
120
153
  expect(intentIqIdSubmodule.decode('')).to.equal(undefined);
121
154
  expect(intentIqIdSubmodule.decode(undefined)).to.equal(undefined);
@@ -202,7 +235,7 @@ describe('IntentIQ tests', function () {
202
235
  JSON.stringify({ pid: 'test_pid', data: 'test_personid', ls: true })
203
236
  );
204
237
  expect(callBackSpy.calledOnce).to.be.true;
205
- expect(callBackSpy.args[0][0]).to.be.eq('test_personid');
238
+ expect(callBackSpy.args[0][0]).to.deep.equal(['test_personid']);
206
239
  });
207
240
 
208
241
  it('dont save result if ls=false', function () {
@@ -220,21 +253,6 @@ describe('IntentIQ tests', function () {
220
253
  expect(callBackSpy.args[0][0]).to.be.undefined;
221
254
  });
222
255
 
223
- it('save result as INVALID_ID on empty data and ls=true ', function () {
224
- let callBackSpy = sinon.spy();
225
- let submoduleCallback = intentIqIdSubmodule.getId(allConfigParams).callback;
226
- submoduleCallback(callBackSpy);
227
- let request = server.requests[0];
228
- expect(request.url).to.contain('https://api.intentiq.com/profiles_engine/ProfilesEngineServlet?at=39&mi=10&dpi=10&pt=17&dpn=1&pcid=12&pai=11&iiqidtype=2&iiqpcid=');
229
- request.respond(
230
- 200,
231
- responseHeader,
232
- JSON.stringify({ pid: 'test_pid', data: '', ls: true })
233
- );
234
- expect(callBackSpy.calledOnce).to.be.true;
235
- expect(callBackSpy.args[0][0]).to.be.eq('INVALID_ID');
236
- });
237
-
238
256
  it('send addition parameters if were found in localstorage', function () {
239
257
  localStorage.setItem('_iiq_fdata_' + partner, JSON.stringify(testLSValue))
240
258
  let callBackSpy = sinon.spy();
@@ -251,16 +269,226 @@ describe('IntentIQ tests', function () {
251
269
  JSON.stringify(testResponseWithValues)
252
270
  );
253
271
  expect(callBackSpy.calledOnce).to.be.true;
254
- expect(callBackSpy.args[0][0]).to.be.eq(testResponseWithValues.data);
272
+ expect(callBackSpy.args[0][0]).to.deep.equal([testResponseWithValues.data]);
255
273
  });
256
274
 
257
275
  it('return data stored in local storage ', function () {
258
- localStorage.setItem('_iiq_fdata_' + partner, JSON.stringify(testLSValueWithData))
276
+ localStorage.setItem('_iiq_fdata_' + partner, JSON.stringify(testLSValueWithData));
277
+ let returnedValue = intentIqIdSubmodule.getId(allConfigParams);
278
+ expect(JSON.stringify(returnedValue.id)).to.equal(decryptData(testLSValueWithData.data));
279
+ });
280
+
281
+ it('should handle browser blacklisting', function () {
282
+ let configParamsWithBlacklist = {
283
+ params: { partner: partner, browserBlackList: 'chrome' }
284
+ };
285
+ sinon.stub(navigator, 'userAgent').value('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36');
286
+ let submoduleCallback = intentIqIdSubmodule.getId(configParamsWithBlacklist);
287
+ expect(logErrorStub.calledOnce).to.be.true;
288
+ expect(submoduleCallback).to.be.undefined;
289
+ });
290
+
291
+ it('should handle invalid JSON in readData', function () {
292
+ localStorage.setItem('_iiq_fdata_' + partner, 'invalid_json');
259
293
  let callBackSpy = sinon.spy();
260
- let submoduleCallback = intentIqIdSubmodule.getId(allConfigParams).callback;
294
+ let submoduleCallback = intentIqIdSubmodule.getId(defaultConfigParams).callback;
261
295
  submoduleCallback(callBackSpy);
262
- expect(server.requests.length).to.be.equal(0);
296
+ let request = server.requests[0];
297
+ expect(request.url).to.contain('https://api.intentiq.com/profiles_engine/ProfilesEngineServlet?at=39&mi=10&dpi=10&pt=17&dpn=1&iiqidtype=2&iiqpcid=');
298
+ request.respond(
299
+ 200,
300
+ responseHeader,
301
+ JSON.stringify({})
302
+ );
263
303
  expect(callBackSpy.calledOnce).to.be.true;
264
- expect(callBackSpy.args[0][0]).to.be.equal(testLSValueWithData.data);
304
+ expect(logErrorStub.called).to.be.true;
305
+ });
306
+
307
+ describe('handleGPPData', function () {
308
+ it('should convert array of objects to a single JSON string', function () {
309
+ const input = [
310
+ { key1: 'value1' },
311
+ { key2: 'value2' }
312
+ ];
313
+ const expectedOutput = JSON.stringify({ key1: 'value1', key2: 'value2' });
314
+ const result = handleGPPData(input);
315
+ expect(result).to.equal(expectedOutput);
316
+ });
317
+
318
+ it('should convert a single object to a JSON string', function () {
319
+ const input = { key1: 'value1', key2: 'value2' };
320
+ const expectedOutput = JSON.stringify(input);
321
+ const result = handleGPPData(input);
322
+ expect(result).to.equal(expectedOutput);
323
+ });
324
+
325
+ it('should handle empty object', function () {
326
+ const input = {};
327
+ const expectedOutput = JSON.stringify(input);
328
+ const result = handleGPPData(input);
329
+ expect(result).to.equal(expectedOutput);
330
+ });
331
+
332
+ it('should handle empty array', function () {
333
+ const input = [];
334
+ const expectedOutput = JSON.stringify({});
335
+ const result = handleGPPData(input);
336
+ expect(result).to.equal(expectedOutput);
337
+ });
338
+ });
339
+
340
+ describe('detectBrowserFromUserAgent', function () {
341
+ it('should detect Chrome browser', function () {
342
+ const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36';
343
+ const result = detectBrowserFromUserAgent(userAgent);
344
+ expect(result).to.equal('chrome');
345
+ });
346
+
347
+ it('should detect Safari browser', function () {
348
+ const userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15';
349
+ const result = detectBrowserFromUserAgent(userAgent);
350
+ expect(result).to.equal('safari');
351
+ });
352
+
353
+ it('should detect Firefox browser', function () {
354
+ const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0';
355
+ const result = detectBrowserFromUserAgent(userAgent);
356
+ expect(result).to.equal('firefox');
357
+ });
358
+ });
359
+
360
+ describe('detectBrowserFromUserAgentData', function () {
361
+ it('should detect Microsoft Edge browser', function () {
362
+ const userAgentData = {
363
+ brands: [
364
+ { brand: 'Microsoft Edge', version: '91' },
365
+ { brand: 'Chromium', version: '91' }
366
+ ]
367
+ };
368
+ const result = detectBrowserFromUserAgentData(userAgentData);
369
+ expect(result).to.equal('edge');
370
+ });
371
+
372
+ it('should detect Chrome browser', function () {
373
+ const userAgentData = {
374
+ brands: [
375
+ { brand: 'Google Chrome', version: '91' },
376
+ { brand: 'Chromium', version: '91' }
377
+ ]
378
+ };
379
+ const result = detectBrowserFromUserAgentData(userAgentData);
380
+ expect(result).to.equal('chrome');
381
+ });
382
+
383
+ it('should return unknown for unrecognized user agent data', function () {
384
+ const userAgentData = {
385
+ brands: [
386
+ { brand: 'Unknown Browser', version: '1.0' }
387
+ ]
388
+ };
389
+ const result = detectBrowserFromUserAgentData(userAgentData);
390
+ expect(result).to.equal('unknown');
391
+ });
392
+ });
393
+
394
+ describe('IntentIQ consent management within getId', function () {
395
+ let uspDataHandlerStub;
396
+ let gppDataHandlerStub;
397
+
398
+ beforeEach(function () {
399
+ localStorage.clear();
400
+ const expiredDate = new Date(0).toUTCString();
401
+ storage.setCookie(FIRST_PARTY_KEY, '', expiredDate, 'Lax');
402
+ storage.setCookie(FIRST_PARTY_KEY + '_' + partner, '', expiredDate, 'Lax');
403
+ uspDataHandlerStub = sinon.stub(uspDataHandler, 'getConsentData');
404
+ gppDataHandlerStub = sinon.stub(gppDataHandler, 'getConsentData');
405
+ });
406
+
407
+ afterEach(function () {
408
+ uspDataHandlerStub.restore();
409
+ gppDataHandlerStub.restore();
410
+ });
411
+
412
+ it('should set cmpData.us_privacy if uspData exists', function () {
413
+ const uspData = '1NYN';
414
+ uspDataHandlerStub.returns(uspData);
415
+ let callBackSpy = sinon.spy();
416
+ let submoduleCallback = intentIqIdSubmodule.getId(defaultConfigParams).callback;
417
+ submoduleCallback(callBackSpy);
418
+ let request = server.requests[0];
419
+ expect(request.url).to.contain('https://api.intentiq.com/profiles_engine/ProfilesEngineServlet?at=39&mi=10&dpi=10&pt=17&dpn=1&iiqidtype=2&iiqpcid=');
420
+ request.respond(
421
+ 200,
422
+ responseHeader,
423
+ JSON.stringify({ pid: 'test_pid', data: 'test_personid', ls: false, isOptedOut: false })
424
+ );
425
+ expect(callBackSpy.calledOnce).to.be.true;
426
+
427
+ // Check the local storage directly to see if cmpData.us_privacy was set correctly
428
+ const firstPartyData = JSON.parse(localStorage.getItem(FIRST_PARTY_KEY));
429
+ expect(firstPartyData.uspapi_value).to.equal(uspData);
430
+ });
431
+
432
+ it('should set cmpData.gpp and cmpData.gpp_sid if gppData exists and has parsedSections with usnat', function () {
433
+ const gppData = {
434
+ parsedSections: {
435
+ usnat: { key1: 'value1', key2: 'value2' }
436
+ },
437
+ applicableSections: ['usnat']
438
+ };
439
+ gppDataHandlerStub.returns(gppData);
440
+
441
+ let callBackSpy = sinon.spy();
442
+ let submoduleCallback = intentIqIdSubmodule.getId(defaultConfigParams).callback;
443
+ submoduleCallback(callBackSpy);
444
+ let request = server.requests[0];
445
+ expect(request.url).to.contain('https://api.intentiq.com/profiles_engine/ProfilesEngineServlet?at=39&mi=10&dpi=10&pt=17&dpn=1&iiqidtype=2&iiqpcid=');
446
+ request.respond(
447
+ 200,
448
+ responseHeader,
449
+ JSON.stringify({ pid: 'test_pid', data: 'test_personid', ls: false, isOptedOut: false })
450
+ );
451
+ expect(callBackSpy.calledOnce).to.be.true;
452
+
453
+ const firstPartyData = JSON.parse(localStorage.getItem(FIRST_PARTY_KEY));
454
+ expect(firstPartyData.gpp_value).to.equal(JSON.stringify({ key1: 'value1', key2: 'value2' }));
455
+ });
456
+
457
+ it('should handle gppData without usnat in parsedSections', function () {
458
+ const gppData = {
459
+ parsedSections: {
460
+ euconsent: { key1: 'value1' }
461
+ },
462
+ applicableSections: ['euconsent']
463
+ };
464
+ gppDataHandlerStub.returns(gppData);
465
+
466
+ let callBackSpy = sinon.spy();
467
+ let submoduleCallback = intentIqIdSubmodule.getId(defaultConfigParams).callback;
468
+ submoduleCallback(callBackSpy);
469
+ let request = server.requests[0];
470
+ expect(request.url).to.contain('https://api.intentiq.com/profiles_engine/ProfilesEngineServlet?at=39&mi=10&dpi=10&pt=17&dpn=1&iiqidtype=2&iiqpcid=');
471
+ request.respond(
472
+ 200,
473
+ responseHeader,
474
+ JSON.stringify({ pid: 'test_pid', data: 'test_personid', ls: false, isOptedOut: true })
475
+ );
476
+ expect(callBackSpy.calledOnce).to.be.true;
477
+
478
+ const firstPartyData = JSON.parse(localStorage.getItem(FIRST_PARTY_KEY));
479
+ expect(firstPartyData.gpp_value).to.equal('');
480
+ });
481
+ });
482
+
483
+ it('should get and save client hints to storge', async () => {
484
+ // Client hints are async function, thats why async/await is using
485
+ localStorage.clear();
486
+ Object.defineProperty(navigator, 'userAgentData', {
487
+ value: { getHighEntropyValues: async () => testClientHints },
488
+ configurable: true
489
+ });
490
+ await intentIqIdSubmodule.getId(defaultConfigParams);
491
+ const savedClientHints = readData(CLIENT_HINTS_KEY, ['html5']);
492
+ expect(savedClientHints).to.equal(handleClientHints(testClientHints));
265
493
  });
266
494
  });
@@ -3,7 +3,7 @@ import { spec } from '../../../modules/iqzoneBidAdapter.js';
3
3
  import { BANNER, VIDEO, NATIVE } from '../../../src/mediaTypes.js';
4
4
  import { getUniqueIdentifierStr } from '../../../src/utils.js';
5
5
 
6
- const bidder = 'iqzone'
6
+ const bidder = 'iqzone';
7
7
 
8
8
  describe('IQZoneBidAdapter', function () {
9
9
  const userIdAsEids = [{
@@ -26,7 +26,7 @@ describe('IQZoneBidAdapter', function () {
26
26
  }
27
27
  },
28
28
  params: {
29
- placementId: 'testBanner',
29
+ placementId: 'testBanner'
30
30
  },
31
31
  userIdAsEids
32
32
  },
@@ -41,7 +41,7 @@ describe('IQZoneBidAdapter', function () {
41
41
  }
42
42
  },
43
43
  params: {
44
- placementId: 'testVideo',
44
+ placementId: 'testVideo'
45
45
  },
46
46
  userIdAsEids
47
47
  },
@@ -65,7 +65,7 @@ describe('IQZoneBidAdapter', function () {
65
65
  }
66
66
  },
67
67
  params: {
68
- placementId: 'testNative',
68
+ placementId: 'testNative'
69
69
  },
70
70
  userIdAsEids
71
71
  }
@@ -87,10 +87,19 @@ describe('IQZoneBidAdapter', function () {
87
87
  const bidderRequest = {
88
88
  uspConsent: '1---',
89
89
  gdprConsent: {
90
- consentString: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw'
90
+ consentString: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw',
91
+ vendorData: {}
91
92
  },
92
93
  refererInfo: {
93
- referer: 'https://test.com'
94
+ referer: 'https://test.com',
95
+ page: 'https://test.com'
96
+ },
97
+ ortb2: {
98
+ device: {
99
+ w: 1512,
100
+ h: 982,
101
+ language: 'en-UK'
102
+ }
94
103
  },
95
104
  timeout: 500
96
105
  };
@@ -181,12 +190,63 @@ describe('IQZoneBidAdapter', function () {
181
190
  }
182
191
  });
183
192
 
193
+ it('Returns valid endpoints', function () {
194
+ const bids = [
195
+ {
196
+ bidId: getUniqueIdentifierStr(),
197
+ bidder: bidder,
198
+ mediaTypes: {
199
+ [BANNER]: {
200
+ sizes: [[300, 250]]
201
+ }
202
+ },
203
+ params: {
204
+ endpointId: 'testBanner',
205
+ },
206
+ userIdAsEids
207
+ }
208
+ ];
209
+
210
+ let serverRequest = spec.buildRequests(bids, bidderRequest);
211
+
212
+ const { placements } = serverRequest.data;
213
+ for (let i = 0, len = placements.length; i < len; i++) {
214
+ const placement = placements[i];
215
+ expect(placement.endpointId).to.be.oneOf(['testBanner', 'testVideo', 'testNative']);
216
+ expect(placement.adFormat).to.be.oneOf([BANNER, VIDEO, NATIVE]);
217
+ expect(placement.bidId).to.be.a('string');
218
+ expect(placement.schain).to.be.an('object');
219
+ expect(placement.bidfloor).to.exist.and.to.equal(0);
220
+ expect(placement.type).to.exist.and.to.equal('network');
221
+ expect(placement.eids).to.exist.and.to.be.deep.equal(userIdAsEids);
222
+
223
+ if (placement.adFormat === BANNER) {
224
+ expect(placement.sizes).to.be.an('array');
225
+ }
226
+ switch (placement.adFormat) {
227
+ case BANNER:
228
+ expect(placement.sizes).to.be.an('array');
229
+ break;
230
+ case VIDEO:
231
+ expect(placement.playerSize).to.be.an('array');
232
+ expect(placement.minduration).to.be.an('number');
233
+ expect(placement.maxduration).to.be.an('number');
234
+ break;
235
+ case NATIVE:
236
+ expect(placement.native).to.be.an('object');
237
+ break;
238
+ }
239
+ }
240
+ });
241
+
184
242
  it('Returns data with gdprConsent and without uspConsent', function () {
185
243
  delete bidderRequest.uspConsent;
186
244
  serverRequest = spec.buildRequests(bids, bidderRequest);
187
245
  let data = serverRequest.data;
188
246
  expect(data.gdpr).to.exist;
189
247
  expect(data.gdpr).to.be.a('object');
248
+ expect(data.gdpr).to.have.property('consentString');
249
+ expect(data.gdpr).to.not.have.property('vendorData');
190
250
  expect(data.gdpr.consentString).to.equal(bidderRequest.gdprConsent.consentString);
191
251
  expect(data.ccpa).to.not.exist;
192
252
  delete bidderRequest.gdprConsent;
@@ -202,12 +262,6 @@ describe('IQZoneBidAdapter', function () {
202
262
  expect(data.ccpa).to.equal(bidderRequest.uspConsent);
203
263
  expect(data.gdpr).to.not.exist;
204
264
  });
205
-
206
- it('Returns empty data if no valid requests are passed', function () {
207
- serverRequest = spec.buildRequests([], bidderRequest);
208
- let data = serverRequest.data;
209
- expect(data.placements).to.be.an('array').that.is.empty;
210
- });
211
265
  });
212
266
 
213
267
  describe('gpp consent', function () {