prebid.js 8.26.0 → 8.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/dist/33acrossAnalyticsAdapter.js +1 -1
  2. package/dist/33acrossBidAdapter.js +1 -1
  3. package/dist/33acrossIdSystem.js +1 -1
  4. package/dist/adagioAnalyticsAdapter.js +1 -1
  5. package/dist/adagioBidAdapter.js +1 -1
  6. package/dist/adbookpspBidAdapter.js +1 -1
  7. package/dist/adgenerationBidAdapter.js +1 -1
  8. package/dist/adnuntiusBidAdapter.js +1 -1
  9. package/dist/adqueryBidAdapter.js +1 -1
  10. package/dist/adrelevantisBidAdapter.js +1 -1
  11. package/dist/adstirBidAdapter.js +1 -1
  12. package/dist/adtrgtmeBidAdapter.js +1 -1
  13. package/dist/adxcgBidAdapter.js +1 -1
  14. package/dist/adyoulikeBidAdapter.js +1 -1
  15. package/dist/agmaAnalyticsAdapter.js +1 -1
  16. package/dist/ajaBidAdapter.js +1 -1
  17. package/dist/amxBidAdapter.js +1 -1
  18. package/dist/amxIdSystem.js +1 -1
  19. package/dist/appierAnalyticsAdapter.js +1 -1
  20. package/dist/appnexusBidAdapter.js +1 -1
  21. package/dist/asoBidAdapter.js +1 -1
  22. package/dist/axonixBidAdapter.js +1 -1
  23. package/dist/bidglassBidAdapter.js +1 -1
  24. package/dist/big-richmediaBidAdapter.js +1 -1
  25. package/dist/bizzclickBidAdapter.js +1 -1
  26. package/dist/bridBidAdapter.js +1 -1
  27. package/dist/bridgewellBidAdapter.js +1 -1
  28. package/dist/brightMountainMediaBidAdapter.js +1 -1
  29. package/dist/browsiRtdProvider.js +1 -1
  30. package/dist/carodaBidAdapter.js +1 -1
  31. package/dist/chtnwBidAdapter.js +1 -1
  32. package/dist/concertBidAdapter.js +1 -1
  33. package/dist/connectadBidAdapter.js +1 -1
  34. package/dist/consumableBidAdapter.js +1 -1
  35. package/dist/conversantAnalyticsAdapter.js +1 -1
  36. package/dist/conversantBidAdapter.js +1 -1
  37. package/dist/craftBidAdapter.js +1 -1
  38. package/dist/criteoBidAdapter.js +1 -1
  39. package/dist/cwireBidAdapter.js +1 -1
  40. package/dist/deepintentBidAdapter.js +1 -1
  41. package/dist/dependencies.json +3 -0
  42. package/dist/dspxBidAdapter.js +1 -1
  43. package/dist/dxkultureBidAdapter.js +1 -1
  44. package/dist/eplanningBidAdapter.js +1 -1
  45. package/dist/euidIdSystem.js +1 -1
  46. package/dist/feedadBidAdapter.js +1 -1
  47. package/dist/finativeBidAdapter.js +1 -1
  48. package/dist/flippBidAdapter.js +1 -1
  49. package/dist/freewheel-sspBidAdapter.js +1 -1
  50. package/dist/geoedgeRtdProvider.js +1 -1
  51. package/dist/gmosspBidAdapter.js +1 -1
  52. package/dist/goldbachBidAdapter.js +1 -1
  53. package/dist/greenbidsAnalyticsAdapter.js +1 -1
  54. package/dist/greenbidsRtdProvider.js +1 -1
  55. package/dist/gridBidAdapter.js +1 -1
  56. package/dist/growthCodeRtdProvider.js +1 -1
  57. package/dist/gumgumBidAdapter.js +1 -1
  58. package/dist/h12mediaBidAdapter.js +1 -1
  59. package/dist/hypelabBidAdapter.js +1 -1
  60. package/dist/id5IdSystem.js +1 -1
  61. package/dist/identityLinkIdSystem.js +1 -1
  62. package/dist/illuminBidAdapter.js +1 -1
  63. package/dist/imdsBidAdapter.js +1 -1
  64. package/dist/improvedigitalBidAdapter.js +1 -1
  65. package/dist/insticatorBidAdapter.js +1 -1
  66. package/dist/invibesBidAdapter.js +1 -1
  67. package/dist/ixBidAdapter.js +1 -1
  68. package/dist/jixieBidAdapter.js +1 -1
  69. package/dist/justpremiumBidAdapter.js +1 -1
  70. package/dist/kargoBidAdapter.js +1 -1
  71. package/dist/konduitAnalyticsAdapter.js +1 -1
  72. package/dist/kueezBidAdapter.js +1 -1
  73. package/dist/kueezRtbBidAdapter.js +1 -1
  74. package/dist/lassoBidAdapter.js +1 -1
  75. package/dist/lifestreetBidAdapter.js +1 -1
  76. package/dist/liveIntentIdSystem.js +1 -1
  77. package/dist/logicadBidAdapter.js +1 -1
  78. package/dist/loglyliftBidAdapter.js +1 -1
  79. package/dist/magniteAnalyticsAdapter.js +1 -1
  80. package/dist/malltvAnalyticsAdapter.js +1 -1
  81. package/dist/marsmediaBidAdapter.js +1 -1
  82. package/dist/mediafuseBidAdapter.js +1 -1
  83. package/dist/mediagoBidAdapter.js +1 -1
  84. package/dist/mediasquareBidAdapter.js +1 -1
  85. package/dist/mgidBidAdapter.js +1 -1
  86. package/dist/mgidXBidAdapter.js +1 -1
  87. package/dist/minutemediaBidAdapter.js +1 -1
  88. package/dist/minutemediaplusBidAdapter.js +1 -1
  89. package/dist/nextMillenniumBidAdapter.js +1 -1
  90. package/dist/nexx360BidAdapter.js +1 -1
  91. package/dist/not-for-prod/prebid.js +156 -156
  92. package/dist/oguryBidAdapter.js +1 -1
  93. package/dist/onetagBidAdapter.js +1 -1
  94. package/dist/ooloAnalyticsAdapter.js +1 -1
  95. package/dist/openxBidAdapter.js +1 -1
  96. package/dist/optidigitalBidAdapter.js +1 -1
  97. package/dist/outbrainBidAdapter.js +1 -1
  98. package/dist/parrableIdSystem.js +1 -1
  99. package/dist/pgamsspBidAdapter.js +1 -1
  100. package/dist/pixfutureBidAdapter.js +1 -1
  101. package/dist/prebid-core.js +2 -2
  102. package/dist/publinkIdSystem.js +1 -1
  103. package/dist/pubmaticAnalyticsAdapter.js +1 -1
  104. package/dist/pubmaticBidAdapter.js +1 -1
  105. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  106. package/dist/pxyzBidAdapter.js +1 -1
  107. package/dist/quantcastBidAdapter.js +1 -1
  108. package/dist/readpeakBidAdapter.js +1 -1
  109. package/dist/relaidoBidAdapter.js +1 -1
  110. package/dist/retailspotBidAdapter.js +1 -1
  111. package/dist/rhythmoneBidAdapter.js +1 -1
  112. package/dist/riseBidAdapter.js +1 -1
  113. package/dist/rtdModule.js +1 -1
  114. package/dist/rubiconBidAdapter.js +1 -1
  115. package/dist/seedingAllianceBidAdapter.js +1 -1
  116. package/dist/seedtagBidAdapter.js +1 -1
  117. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  118. package/dist/sharethroughBidAdapter.js +1 -1
  119. package/dist/shinezBidAdapter.js +1 -1
  120. package/dist/shinezRtbBidAdapter.js +1 -1
  121. package/dist/smaatoBidAdapter.js +1 -1
  122. package/dist/smartadserverBidAdapter.js +1 -1
  123. package/dist/smartxBidAdapter.js +1 -1
  124. package/dist/smilewantedBidAdapter.js +1 -1
  125. package/dist/sonobiBidAdapter.js +1 -1
  126. package/dist/sovrnAnalyticsAdapter.js +1 -1
  127. package/dist/sovrnBidAdapter.js +1 -1
  128. package/dist/sparteoBidAdapter.js +1 -1
  129. package/dist/sspBCBidAdapter.js +1 -1
  130. package/dist/stvBidAdapter.js +1 -1
  131. package/dist/sublimeBidAdapter.js +1 -1
  132. package/dist/taboolaBidAdapter.js +1 -1
  133. package/dist/targetVideoBidAdapter.js +1 -1
  134. package/dist/teadsBidAdapter.js +1 -1
  135. package/dist/theAdxBidAdapter.js +1 -1
  136. package/dist/trionBidAdapter.js +1 -1
  137. package/dist/tripleliftBidAdapter.js +1 -1
  138. package/dist/ttdBidAdapter.js +1 -1
  139. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  140. package/dist/uid2IdSystem.js +1 -1
  141. package/dist/underdogmediaBidAdapter.js +1 -1
  142. package/dist/undertoneBidAdapter.js +1 -1
  143. package/dist/unrulyBidAdapter.js +1 -1
  144. package/dist/userId.js +1 -1
  145. package/dist/viantOrtbBidAdapter.js +1 -1
  146. package/dist/vidazooBidAdapter.js +1 -1
  147. package/dist/videobyteBidAdapter.js +1 -1
  148. package/dist/visxBidAdapter.js +1 -1
  149. package/dist/voxBidAdapter.js +1 -1
  150. package/dist/vuukleBidAdapter.js +1 -1
  151. package/dist/widespaceBidAdapter.js +1 -1
  152. package/dist/winrBidAdapter.js +1 -1
  153. package/dist/yahoosspBidAdapter.js +1 -1
  154. package/dist/yieldmoBidAdapter.js +1 -1
  155. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  156. package/modules/adagioAnalyticsAdapter.js +52 -6
  157. package/modules/adagioBidAdapter.js +25 -16
  158. package/modules/adnuntiusBidAdapter.js +25 -21
  159. package/modules/bizzclickBidAdapter.js +55 -300
  160. package/modules/bizzclickBidAdapter.md +94 -89
  161. package/modules/browsiRtdProvider.js +2 -2
  162. package/modules/criteoBidAdapter.js +1 -0
  163. package/modules/deepintentBidAdapter.js +2 -0
  164. package/modules/flippBidAdapter.js +1 -1
  165. package/modules/geoedgeRtdProvider.js +4 -2
  166. package/modules/growthCodeRtdProvider.js +2 -2
  167. package/modules/gumgumBidAdapter.js +3 -3
  168. package/modules/identityLinkIdSystem.js +1 -2
  169. package/modules/invibesBidAdapter.js +50 -6
  170. package/modules/liveIntentIdSystem.js +17 -1
  171. package/modules/mediagoBidAdapter.js +106 -34
  172. package/modules/mgidXBidAdapter.js +6 -1
  173. package/modules/minutemediaBidAdapter.js +9 -7
  174. package/modules/minutemediaBidAdapter.md +1 -0
  175. package/modules/nextMillenniumBidAdapter.js +170 -113
  176. package/modules/pgamsspBidAdapter.js +18 -1
  177. package/modules/pubmaticAnalyticsAdapter.js +30 -9
  178. package/modules/pubmaticBidAdapter.js +3 -1
  179. package/modules/riseBidAdapter.js +11 -8
  180. package/modules/riseBidAdapter.md +1 -0
  181. package/modules/rtdModule/index.js +2 -1
  182. package/modules/sovrnBidAdapter.js +5 -0
  183. package/modules/sparteoBidAdapter.js +10 -5
  184. package/modules/taboolaBidAdapter.js +8 -0
  185. package/modules/teadsBidAdapter.js +7 -0
  186. package/modules/theAdxBidAdapter.js +10 -2
  187. package/modules/theAdxBidAdapter.md +10 -9
  188. package/modules/unrulyBidAdapter.js +8 -1
  189. package/modules/userId/eids.js +2 -2
  190. package/modules/viantOrtbBidAdapter.js +1 -1
  191. package/modules/visxBidAdapter.js +23 -0
  192. package/modules/voxBidAdapter.js +2 -0
  193. package/package.json +1 -1
  194. package/src/auction.js +1 -1
  195. package/src/constants.json +5 -2
  196. package/src/events.js +1 -1
  197. package/test/spec/modules/adagioAnalyticsAdapter_spec.js +83 -26
  198. package/test/spec/modules/adagioBidAdapter_spec.js +0 -11
  199. package/test/spec/modules/adnuntiusBidAdapter_spec.js +1 -1
  200. package/test/spec/modules/bizzclickBidAdapter_spec.js +229 -340
  201. package/test/spec/modules/browsiRtdProvider_spec.js +0 -6
  202. package/test/spec/modules/criteoBidAdapter_spec.js +24 -0
  203. package/test/spec/modules/eids_spec.js +35 -2
  204. package/test/spec/modules/geoedgeRtdProvider_spec.js +10 -0
  205. package/test/spec/modules/gumgumBidAdapter_spec.js +8 -0
  206. package/test/spec/modules/identityLinkIdSystem_spec.js +0 -18
  207. package/test/spec/modules/invibesBidAdapter_spec.js +99 -0
  208. package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +5 -0
  209. package/test/spec/modules/liveIntentIdSystem_spec.js +5 -0
  210. package/test/spec/modules/mediagoBidAdapter_spec.js +107 -23
  211. package/test/spec/modules/mgidXBidAdapter_spec.js +9 -4
  212. package/test/spec/modules/minutemediaBidAdapter_spec.js +10 -0
  213. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +503 -80
  214. package/test/spec/modules/pgamsspBidAdapter_spec.js +1 -0
  215. package/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +51 -0
  216. package/test/spec/modules/pubmaticBidAdapter_spec.js +8 -0
  217. package/test/spec/modules/riseBidAdapter_spec.js +11 -1
  218. package/test/spec/modules/sovrnBidAdapter_spec.js +35 -0
  219. package/test/spec/modules/sparteoBidAdapter_spec.js +8 -2
  220. package/test/spec/modules/taboolaBidAdapter_spec.js +45 -1
  221. package/test/spec/modules/teadsBidAdapter_spec.js +58 -0
  222. package/test/spec/modules/theAdxBidAdapter_spec.js +72 -0
  223. package/test/spec/modules/unrulyBidAdapter_spec.js +7 -4
  224. package/test/spec/modules/userId_spec.js +19 -1
  225. package/test/spec/modules/viantOrtbBidAdapter_spec.js +1 -1
  226. package/test/spec/modules/visxBidAdapter_spec.js +39 -1
  227. package/test/spec/unit/core/events_spec.js +17 -2
  228. package/test/spec/unit/pbjs_api_spec.js +7 -0
@@ -1,32 +1,510 @@
1
1
  import { expect } from 'chai';
2
- import { spec } from 'modules/nextMillenniumBidAdapter.js';
2
+ import {
3
+ getImp,
4
+ replaceUsersyncMacros,
5
+ setConsentStrings,
6
+ setOrtb2Parameters,
7
+ setEids,
8
+ spec,
9
+ } from 'modules/nextMillenniumBidAdapter.js';
10
+
11
+ describe('nextMillenniumBidAdapterTests', () => {
12
+ describe('function getImp', () => {
13
+ const dataTests = [
14
+ {
15
+ title: 'imp - banner',
16
+ data: {
17
+ id: '123',
18
+ bid: {
19
+ mediaTypes: {banner: {sizes: [[300, 250], [320, 250]]}},
20
+ adUnitCode: 'test-banner-1',
21
+ },
22
+ },
3
23
 
4
- describe('nextMillenniumBidAdapterTests', function() {
5
- const bidRequestData = [
6
- {
7
- adUnitCode: 'test-div',
8
- bidId: 'bid1234',
9
- auctionId: 'b06c5141-fe8f-4cdf-9d7d-54415490a917',
10
- bidder: 'nextMillennium',
11
- params: { placement_id: '-1' },
12
- sizes: [[300, 250]],
13
- uspConsent: '1---',
14
- gdprConsent: {
15
- consentString: 'kjfdniwjnifwenrif3',
16
- gdprApplies: true
24
+ expected: {
25
+ id: 'test-banner-1',
26
+ ext: {prebid: {storedrequest: {id: '123'}}},
27
+ banner: {format: [{w: 300, h: 250}, {w: 320, h: 250}]},
28
+ },
17
29
  },
18
- ortb2: {
19
- device: {
20
- w: 1500,
21
- h: 1000
30
+
31
+ {
32
+ title: 'imp - video',
33
+ data: {
34
+ id: '234',
35
+ bid: {
36
+ mediaTypes: {video: {playerSize: [400, 300]}},
37
+ adUnitCode: 'test-video-1',
38
+ },
22
39
  },
23
- site: {
24
- domain: 'example.com',
25
- page: 'http://example.com'
26
- }
40
+
41
+ expected: {
42
+ id: 'test-video-1',
43
+ ext: {prebid: {storedrequest: {id: '234'}}},
44
+ video: {w: 400, h: 300},
45
+ },
46
+ },
47
+ ];
48
+
49
+ for (let {title, data, expected} of dataTests) {
50
+ it(title, () => {
51
+ const {bid, id} = data;
52
+ const imp = getImp(bid, id);
53
+ expect(imp).to.deep.equal(expected);
54
+ });
55
+ }
56
+ });
57
+
58
+ describe('function setConsentStrings', () => {
59
+ const dataTests = [
60
+ {
61
+ title: 'full: uspConsent, gdprConsent and gppConsent',
62
+ data: {
63
+ postBody: {},
64
+ bidderRequest: {
65
+ uspConsent: '1---',
66
+ gppConsent: {gppString: 'DBACNYA~CPXxRfAPXxR', applicableSections: [7]},
67
+ gdprConsent: {consentString: 'kjfdniwjnifwenrif3', gdprApplies: true},
68
+ ortb2: {regs: {gpp: 'DSFHFHWEUYVDC', gpp_sid: [8, 9, 10]}},
69
+ },
70
+ },
71
+
72
+ expected: {
73
+ user: {ext: {consent: 'kjfdniwjnifwenrif3'}},
74
+ regs: {
75
+ gpp: 'DBACNYA~CPXxRfAPXxR',
76
+ gpp_sid: [7],
77
+ ext: {gdpr: 1, us_privacy: '1---'},
78
+ },
79
+ },
80
+ },
81
+
82
+ {
83
+ title: 'gdprConsent(false) and ortb2(gpp)',
84
+ data: {
85
+ postBody: {},
86
+ bidderRequest: {
87
+ gdprConsent: {consentString: 'ewtewbefbawyadexv', gdprApplies: false},
88
+ ortb2: {regs: {gpp: 'DSFHFHWEUYVDC', gpp_sid: [8, 9, 10]}},
89
+ },
90
+ },
91
+
92
+ expected: {
93
+ user: {ext: {consent: 'ewtewbefbawyadexv'}},
94
+ regs: {
95
+ gpp: 'DSFHFHWEUYVDC',
96
+ gpp_sid: [8, 9, 10],
97
+ ext: {gdpr: 0},
98
+ },
99
+ },
100
+ },
101
+
102
+ {
103
+ title: 'gdprConsent(false)',
104
+ data: {
105
+ postBody: {},
106
+ bidderRequest: {gdprConsent: {gdprApplies: false}},
107
+ },
108
+
109
+ expected: {
110
+ regs: {ext: {gdpr: 0}},
111
+ },
112
+ },
113
+
114
+ {
115
+ title: 'empty',
116
+ data: {
117
+ postBody: {},
118
+ bidderRequest: {},
119
+ },
120
+
121
+ expected: {},
122
+ },
123
+ ];
124
+
125
+ for (let {title, data, expected} of dataTests) {
126
+ it(title, () => {
127
+ const {postBody, bidderRequest} = data;
128
+ setConsentStrings(postBody, bidderRequest);
129
+ expect(postBody).to.deep.equal(expected);
130
+ });
131
+ }
132
+ });
133
+
134
+ describe('function replaceUsersyncMacros', () => {
135
+ const dataTests = [
136
+ {
137
+ title: 'url with all macroses - consents full: uspConsent, gdprConsent and gppConsent',
138
+ data: {
139
+ url: 'https://some.url?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}&type={{.TYPE_PIXEL}}',
140
+ uspConsent: '1---',
141
+ gppConsent: {gppString: 'DBACNYA~CPXxRfAPXxR', applicableSections: [7, 8]},
142
+ gdprConsent: {consentString: 'kjfdniwjnifwenrif3', gdprApplies: true},
143
+ type: 'image',
144
+ },
145
+
146
+ expected: 'https://some.url?gdpr=1&gdpr_consent=kjfdniwjnifwenrif3&us_privacy=1---&gpp=DBACNYA~CPXxRfAPXxR&gpp_sid=7,8&type=image',
147
+ },
148
+
149
+ {
150
+ title: 'url with some macroses - consents full: uspConsent, gdprConsent and gppConsent',
151
+ data: {
152
+ url: 'https://some.url?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&type={{.TYPE_PIXEL}}',
153
+ uspConsent: '1---',
154
+ gppConsent: {gppString: 'DBACNYA~CPXxRfAPXxR', applicableSections: [7, 8]},
155
+ gdprConsent: {consentString: 'kjfdniwjnifwenrif3', gdprApplies: false},
156
+ type: 'iframe',
157
+ },
158
+
159
+ expected: 'https://some.url?gdpr=0&gdpr_consent=kjfdniwjnifwenrif3&type=iframe',
160
+ },
161
+
162
+ {
163
+ title: 'url without macroses - consents full: uspConsent, gdprConsent and gppConsent',
164
+ data: {
165
+ url: 'https://some.url?param1=value1&param2=value2',
166
+ uspConsent: '1---',
167
+ gppConsent: {gppString: 'DBACNYA~CPXxRfAPXxR', applicableSections: [7, 8]},
168
+ gdprConsent: {consentString: 'kjfdniwjnifwenrif3', gdprApplies: false},
169
+ type: 'iframe',
170
+ },
171
+
172
+ expected: 'https://some.url?param1=value1&param2=value2',
173
+ },
174
+
175
+ {
176
+ title: 'url with all macroses - consents are empty',
177
+ data: {
178
+ url: 'https://some.url?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}&type={{.TYPE_PIXEL}}',
179
+ },
180
+
181
+ expected: 'https://some.url?gdpr=0&gdpr_consent=&us_privacy=&gpp=&gpp_sid=&type=',
182
+ },
183
+ ];
184
+
185
+ for (let {title, data, expected} of dataTests) {
186
+ it(title, () => {
187
+ const {url, gdprConsent, uspConsent, gppConsent, type} = data;
188
+ const newUrl = replaceUsersyncMacros(url, gdprConsent, uspConsent, gppConsent, type);
189
+ expect(newUrl).to.equal(expected);
190
+ });
191
+ }
192
+ });
193
+
194
+ describe('function spec.getUserSyncs', () => {
195
+ const dataTests = [
196
+ {
197
+ title: 'pixels from responses ({iframeEnabled: true, pixelEnabled: true})',
198
+ data: {
199
+ syncOptions: {iframeEnabled: true, pixelEnabled: true},
200
+ responses: [
201
+ {body: {ext: {sync: {
202
+ image: [
203
+ 'https://some.1.url?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}',
204
+ 'https://some.2.url?us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}',
205
+ 'https://some.3.url?param=1234',
206
+ ],
207
+
208
+ iframe: [
209
+ 'https://some.4.url?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}',
210
+ 'https://some.5.url?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}',
211
+ ],
212
+ }}}},
213
+
214
+ {body: {ext: {sync: {
215
+ iframe: [
216
+ 'https://some.6.url?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}',
217
+ 'https://some.7.url?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}',
218
+ ],
219
+ }}}},
220
+
221
+ {body: {ext: {sync: {
222
+ image: [
223
+ 'https://some.8.url?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}',
224
+ ],
225
+ }}}},
226
+ ],
227
+
228
+ uspConsent: '1---',
229
+ gppConsent: {gppString: 'DBACNYA~CPXxRfAPXxR', applicableSections: [7, 8]},
230
+ gdprConsent: {consentString: 'kjfdniwjnifwenrif3', gdprApplies: true},
231
+ },
232
+
233
+ expected: [
234
+ {type: 'image', url: 'https://some.1.url?gdpr=1&gdpr_consent=kjfdniwjnifwenrif3&us_privacy=1---&gpp=DBACNYA~CPXxRfAPXxR&gpp_sid=7,8'},
235
+ {type: 'image', url: 'https://some.2.url?us_privacy=1---&gpp=DBACNYA~CPXxRfAPXxR&gpp_sid=7,8'},
236
+ {type: 'image', url: 'https://some.3.url?param=1234'},
237
+ {type: 'iframe', url: 'https://some.4.url?gdpr=1&gdpr_consent=kjfdniwjnifwenrif3&gpp=DBACNYA~CPXxRfAPXxR&gpp_sid=7,8'},
238
+ {type: 'iframe', url: 'https://some.5.url?gdpr=1&gdpr_consent=kjfdniwjnifwenrif3&us_privacy=1---'},
239
+ {type: 'iframe', url: 'https://some.6.url?gdpr=1&gdpr_consent=kjfdniwjnifwenrif3&gpp=DBACNYA~CPXxRfAPXxR&gpp_sid=7,8'},
240
+ {type: 'iframe', url: 'https://some.7.url?gdpr=1&gdpr_consent=kjfdniwjnifwenrif3&us_privacy=1---'},
241
+ {type: 'image', url: 'https://some.8.url?gdpr=1&gdpr_consent=kjfdniwjnifwenrif3&us_privacy=1---&gpp=DBACNYA~CPXxRfAPXxR&gpp_sid=7,8'},
242
+ ],
243
+ },
244
+
245
+ {
246
+ title: 'pixels from responses ({iframeEnabled: true, pixelEnabled: false})',
247
+ data: {
248
+ syncOptions: {iframeEnabled: true, pixelEnabled: false},
249
+ responses: [
250
+ {body: {ext: {sync: {
251
+ image: [
252
+ 'https://some.1.url?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}',
253
+ 'https://some.2.url?us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}',
254
+ 'https://some.3.url?param=1234',
255
+ ],
256
+
257
+ iframe: [
258
+ 'https://some.4.url?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}',
259
+ 'https://some.5.url?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}',
260
+ ],
261
+ }}}},
262
+ ],
263
+
264
+ uspConsent: '1---',
265
+ gppConsent: {gppString: 'DBACNYA~CPXxRfAPXxR', applicableSections: [7, 8]},
266
+ gdprConsent: {consentString: 'kjfdniwjnifwenrif3', gdprApplies: true},
267
+ },
268
+
269
+ expected: [
270
+ {type: 'iframe', url: 'https://some.4.url?gdpr=1&gdpr_consent=kjfdniwjnifwenrif3&gpp=DBACNYA~CPXxRfAPXxR&gpp_sid=7,8'},
271
+ {type: 'iframe', url: 'https://some.5.url?gdpr=1&gdpr_consent=kjfdniwjnifwenrif3&us_privacy=1---'},
272
+ ],
273
+ },
274
+
275
+ {
276
+ title: 'pixels from responses ({iframeEnabled: false, pixelEnabled: true})',
277
+ data: {
278
+ syncOptions: {iframeEnabled: false, pixelEnabled: true},
279
+ responses: [
280
+ {body: {ext: {sync: {
281
+ image: [
282
+ 'https://some.1.url?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}',
283
+ 'https://some.2.url?us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}',
284
+ 'https://some.3.url?param=1234',
285
+ ],
286
+
287
+ iframe: [
288
+ 'https://some.4.url?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}',
289
+ 'https://some.5.url?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}',
290
+ ],
291
+ }}}},
292
+ ],
293
+
294
+ uspConsent: '1---',
295
+ gppConsent: {gppString: 'DBACNYA~CPXxRfAPXxR', applicableSections: [7, 8]},
296
+ gdprConsent: {consentString: 'kjfdniwjnifwenrif3', gdprApplies: true},
297
+ },
298
+
299
+ expected: [
300
+ {type: 'image', url: 'https://some.1.url?gdpr=1&gdpr_consent=kjfdniwjnifwenrif3&us_privacy=1---&gpp=DBACNYA~CPXxRfAPXxR&gpp_sid=7,8'},
301
+ {type: 'image', url: 'https://some.2.url?us_privacy=1---&gpp=DBACNYA~CPXxRfAPXxR&gpp_sid=7,8'},
302
+ {type: 'image', url: 'https://some.3.url?param=1234'},
303
+ ],
304
+ },
305
+
306
+ {
307
+ title: 'pixels - responses is empty ({iframeEnabled: true, pixelEnabled: true})',
308
+ data: {
309
+ syncOptions: {iframeEnabled: true, pixelEnabled: true},
310
+ responses: [],
311
+ uspConsent: '1---',
312
+ gppConsent: {gppString: 'DBACNYA~CPXxRfAPXxR', applicableSections: [7, 8]},
313
+ gdprConsent: {consentString: 'kjfdniwjnifwenrif3', gdprApplies: true},
314
+ },
315
+
316
+ expected: [
317
+ {type: 'image', url: 'https://cookies.nextmillmedia.com/sync?gdpr=1&gdpr_consent=kjfdniwjnifwenrif3&us_privacy=1---&gpp=DBACNYA~CPXxRfAPXxR&gpp_sid=7,8&type=image'},
318
+ {type: 'iframe', url: 'https://cookies.nextmillmedia.com/sync?gdpr=1&gdpr_consent=kjfdniwjnifwenrif3&us_privacy=1---&gpp=DBACNYA~CPXxRfAPXxR&gpp_sid=7,8&type=iframe'},
319
+ ],
320
+ },
321
+
322
+ {
323
+ title: 'pixels - responses is empty ({iframeEnabled: true, pixelEnabled: false})',
324
+ data: {
325
+ syncOptions: {iframeEnabled: true, pixelEnabled: false},
326
+ uspConsent: '1---',
327
+ gppConsent: {gppString: 'DBACNYA~CPXxRfAPXxR', applicableSections: [7, 8]},
328
+ gdprConsent: {consentString: 'kjfdniwjnifwenrif3', gdprApplies: true},
329
+ },
330
+
331
+ expected: [
332
+ {type: 'iframe', url: 'https://cookies.nextmillmedia.com/sync?gdpr=1&gdpr_consent=kjfdniwjnifwenrif3&us_privacy=1---&gpp=DBACNYA~CPXxRfAPXxR&gpp_sid=7,8&type=iframe'},
333
+ ],
334
+ },
335
+
336
+ {
337
+ title: 'pixels - responses is empty ({iframeEnabled: false, pixelEnabled: false})',
338
+ data: {
339
+ syncOptions: {iframeEnabled: false, pixelEnabled: false},
340
+ uspConsent: '1---',
341
+ gppConsent: {gppString: 'DBACNYA~CPXxRfAPXxR', applicableSections: [7, 8]},
342
+ gdprConsent: {consentString: 'kjfdniwjnifwenrif3', gdprApplies: true},
343
+ },
344
+
345
+ expected: [],
346
+ },
347
+ ];
348
+
349
+ for (let {title, data, expected} of dataTests) {
350
+ it(title, () => {
351
+ const {syncOptions, responses, gdprConsent, uspConsent, gppConsent} = data;
352
+ const pixels = spec.getUserSyncs(syncOptions, responses, gdprConsent, uspConsent, gppConsent);
353
+ expect(pixels).to.deep.equal(expected);
354
+ });
355
+ }
356
+ });
357
+
358
+ describe('function setOrtb2Parameters', () => {
359
+ const dataTests = [
360
+ {
361
+ title: 'site.pagecat, site.content.cat and site.content.language',
362
+ data: {
363
+ postBody: {},
364
+ ortb2: {site: {
365
+ pagecat: ['IAB2-11', 'IAB2-12', 'IAB2-14'],
366
+ content: {cat: ['IAB2-11', 'IAB2-12', 'IAB2-14'], language: 'EN'},
367
+ }},
368
+ },
369
+
370
+ expected: {site: {
371
+ pagecat: ['IAB2-11', 'IAB2-12', 'IAB2-14'],
372
+ content: {cat: ['IAB2-11', 'IAB2-12', 'IAB2-14'], language: 'EN'},
373
+ }},
374
+ },
375
+
376
+ {
377
+ title: 'only site.content.language',
378
+ data: {
379
+ postBody: {site: {domain: 'some.domain'}},
380
+ ortb2: {site: {
381
+ content: {language: 'EN'},
382
+ }},
383
+ },
384
+
385
+ expected: {site: {
386
+ domain: 'some.domain',
387
+ content: {language: 'EN'},
388
+ }},
389
+ },
390
+
391
+ {
392
+ title: 'object ortb2 is empty',
393
+ data: {
394
+ postBody: {imp: []},
395
+ },
396
+
397
+ expected: {imp: []},
398
+ },
399
+ ];
400
+
401
+ for (let {title, data, expected} of dataTests) {
402
+ it(title, () => {
403
+ const {postBody, ortb2} = data;
404
+ setOrtb2Parameters(postBody, ortb2);
405
+ expect(postBody).to.deep.equal(expected);
406
+ });
407
+ };
408
+ });
409
+
410
+ describe('function setEids', () => {
411
+ const dataTests = [
412
+ {
413
+ title: 'setEids - userIdAsEids is empty',
414
+ data: {
415
+ postBody: {},
416
+ bid: {
417
+ userIdAsEids: undefined,
418
+ },
419
+ },
420
+
421
+ expected: {},
422
+ },
423
+
424
+ {
425
+ title: 'setEids - userIdAsEids - array is empty',
426
+ data: {
427
+ postBody: {},
428
+ bid: {
429
+ userIdAsEids: [],
430
+ },
431
+ },
432
+
433
+ expected: {},
434
+ },
435
+
436
+ {
437
+ title: 'setEids - userIdAsEids is',
438
+ data: {
439
+ postBody: {},
440
+ bid: {
441
+ userIdAsEids: [
442
+ {
443
+ source: '33across.com',
444
+ uids: [{id: 'some-random-id-value', atype: 1}],
445
+ },
446
+
447
+ {
448
+ source: 'utiq.com',
449
+ uids: [{id: 'some-random-id-value', atype: 1}],
450
+ },
451
+ ],
452
+ },
453
+ },
454
+
455
+ expected: {
456
+ user: {
457
+ eids: [
458
+ {
459
+ source: '33across.com',
460
+ uids: [{id: 'some-random-id-value', atype: 1}],
461
+ },
462
+
463
+ {
464
+ source: 'utiq.com',
465
+ uids: [{id: 'some-random-id-value', atype: 1}],
466
+ },
467
+ ],
468
+ },
469
+ },
470
+ },
471
+ ];
472
+
473
+ for (let { title, data, expected } of dataTests) {
474
+ it(title, () => {
475
+ const { postBody, bid } = data;
476
+ setEids(postBody, bid);
477
+ expect(postBody).to.deep.equal(expected);
478
+ });
479
+ }
480
+ });
481
+
482
+ const bidRequestData = [{
483
+ adUnitCode: 'test-div',
484
+ bidId: 'bid1234',
485
+ auctionId: 'b06c5141-fe8f-4cdf-9d7d-54415490a917',
486
+ bidder: 'nextMillennium',
487
+ params: { placement_id: '-1' },
488
+ sizes: [[300, 250]],
489
+ uspConsent: '1---',
490
+ gppConsent: {gppString: 'DBACNYA~CPXxRfAPXxR', applicableSections: [7]},
491
+ gdprConsent: {
492
+ consentString: 'kjfdniwjnifwenrif3',
493
+ gdprApplies: true
494
+ },
495
+
496
+ ortb2: {
497
+ device: {
498
+ w: 1500,
499
+ h: 1000
500
+ },
501
+
502
+ site: {
503
+ domain: 'example.com',
504
+ page: 'http://example.com'
27
505
  }
28
506
  }
29
- ];
507
+ }];
30
508
 
31
509
  const serverResponse = {
32
510
  body: {
@@ -49,7 +527,7 @@ describe('nextMillenniumBidAdapterTests', function() {
49
527
  cur: 'USD',
50
528
  ext: {
51
529
  sync: {
52
- image: ['urlA?gdpr={{.GDPR}}'],
530
+ image: ['urlA?gdpr={{.GDPR}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}'],
53
531
  iframe: ['urlB'],
54
532
  }
55
533
  }
@@ -117,61 +595,6 @@ describe('nextMillenniumBidAdapterTests', function() {
117
595
  },
118
596
  ];
119
597
 
120
- it('Request params check with GDPR and USP Consent', function () {
121
- const request = spec.buildRequests(bidRequestData, bidRequestData[0]);
122
- expect(JSON.parse(request[0].data).user.ext.consent).to.equal('kjfdniwjnifwenrif3');
123
- expect(JSON.parse(request[0].data).regs.ext.us_privacy).to.equal('1---');
124
- expect(JSON.parse(request[0].data).regs.ext.gdpr).to.equal(1);
125
- });
126
-
127
- it('Test getUserSyncs function', function () {
128
- const syncOptions = {
129
- 'iframeEnabled': false,
130
- 'pixelEnabled': true
131
- }
132
- let userSync = spec.getUserSyncs(syncOptions, [serverResponse], bidRequestData[0].gdprConsent, bidRequestData[0].uspConsent);
133
- expect(userSync).to.be.an('array').with.lengthOf(1);
134
- expect(userSync[0].type).to.equal('image');
135
- expect(userSync[0].url).to.equal('urlA?gdpr=1');
136
-
137
- syncOptions.iframeEnabled = true;
138
- syncOptions.pixelEnabled = false;
139
- userSync = spec.getUserSyncs(syncOptions, [serverResponse], bidRequestData[0].gdprConsent, bidRequestData[0].uspConsent);
140
- expect(userSync).to.be.an('array').with.lengthOf(1);
141
- expect(userSync[0].type).to.equal('iframe');
142
- expect(userSync[0].url).to.equal('urlB');
143
- });
144
-
145
- it('Test getUserSyncs with no response', function () {
146
- const syncOptions = {
147
- 'iframeEnabled': true,
148
- 'pixelEnabled': false
149
- }
150
- let userSync = spec.getUserSyncs(syncOptions, [], bidRequestData[0].gdprConsent, bidRequestData[0].uspConsent);
151
- expect(userSync).to.be.an('array')
152
- expect(userSync[0].type).to.equal('iframe')
153
- expect(userSync[0].url).to.equal('https://cookies.nextmillmedia.com/sync?gdpr=1&gdpr_consent=kjfdniwjnifwenrif3&us_privacy=1---&type=iframe')
154
- })
155
-
156
- it('Test getUserSyncs function if GDPR is undefined', function () {
157
- const syncOptions = {
158
- 'iframeEnabled': false,
159
- 'pixelEnabled': true
160
- }
161
-
162
- let userSync = spec.getUserSyncs(syncOptions, [serverResponse], undefined, bidRequestData[0].uspConsent);
163
- expect(userSync).to.be.an('array').with.lengthOf(1);
164
- expect(userSync[0].type).to.equal('image');
165
- expect(userSync[0].url).to.equal('urlA?gdpr=0');
166
- });
167
-
168
- it('Request params check without GDPR Consent', function () {
169
- delete bidRequestData[0].gdprConsent
170
- const request = spec.buildRequests(bidRequestData, bidRequestData[0]);
171
- expect(JSON.parse(request[0].data).regs.ext.gdpr).to.be.undefined;
172
- expect(JSON.parse(request[0].data).regs.ext.us_privacy).to.equal('1---');
173
- });
174
-
175
598
  it('validate_generated_params', function() {
176
599
  const request = spec.buildRequests(bidRequestData, {bidderRequestId: 'mock-uuid'});
177
600
  expect(request[0].bidId).to.equal('bid1234');
@@ -190,7 +613,7 @@ describe('nextMillenniumBidAdapterTests', function() {
190
613
 
191
614
  it('Check if refresh_count param is incremented', function() {
192
615
  const request = spec.buildRequests(bidRequestData);
193
- expect(JSON.parse(request[0].data).ext.nextMillennium.refresh_count).to.equal(3);
616
+ expect(JSON.parse(request[0].data).ext.nextMillennium.refresh_count).to.equal(1);
194
617
  });
195
618
 
196
619
  it('Check if domain was added', function() {
@@ -145,6 +145,7 @@ describe('PGAMBidAdapter', function () {
145
145
  expect(placement.schain).to.be.an('object');
146
146
  expect(placement.bidfloor).to.exist.and.to.equal(0);
147
147
  expect(placement.type).to.exist.and.to.equal('publisher');
148
+ expect(placement.eids).to.exist.and.to.be.an('array');
148
149
 
149
150
  if (placement.adFormat === BANNER) {
150
151
  expect(placement.sizes).to.be.an('array');