prebid.js 7.33.0 → 7.35.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 (219) hide show
  1. package/.devcontainer/devcontainer.json +2 -1
  2. package/.github/workflows/issue_tracker.yml +27 -16
  3. package/dist/33acrossBidAdapter.js +1 -1
  4. package/dist/33acrossIdSystem.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/admaticBidAdapter.js +1 -1
  9. package/dist/admixerBidAdapter.js +1 -1
  10. package/dist/adnuntiusBidAdapter.js +1 -1
  11. package/dist/adrelevantisBidAdapter.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/ajaBidAdapter.js +1 -1
  16. package/dist/amxBidAdapter.js +1 -1
  17. package/dist/amxIdSystem.js +1 -1
  18. package/dist/appierAnalyticsAdapter.js +1 -1
  19. package/dist/appnexusBidAdapter.js +1 -1
  20. package/dist/arcspanRtdProvider.js +1 -0
  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/bliinkBidAdapter.js +1 -1
  26. package/dist/bridgewellBidAdapter.js +1 -1
  27. package/dist/brightMountainMediaBidAdapter.js +1 -1
  28. package/dist/carodaBidAdapter.js +1 -1
  29. package/dist/chtnwBidAdapter.js +1 -1
  30. package/dist/concertBidAdapter.js +1 -1
  31. package/dist/connectadBidAdapter.js +1 -1
  32. package/dist/consentManagement.js +1 -1
  33. package/dist/consumableBidAdapter.js +1 -1
  34. package/dist/conversantBidAdapter.js +1 -1
  35. package/dist/craftBidAdapter.js +1 -1
  36. package/dist/criteoBidAdapter.js +1 -1
  37. package/dist/cwireBidAdapter.js +1 -1
  38. package/dist/dspxBidAdapter.js +1 -1
  39. package/dist/emx_digitalBidAdapter.js +1 -1
  40. package/dist/eplanningBidAdapter.js +1 -1
  41. package/dist/feedadBidAdapter.js +1 -1
  42. package/dist/finativeBidAdapter.js +1 -1
  43. package/dist/glimpseBidAdapter.js +1 -1
  44. package/dist/gmosspBidAdapter.js +1 -1
  45. package/dist/goldbachBidAdapter.js +1 -1
  46. package/dist/gridBidAdapter.js +1 -1
  47. package/dist/gridNMBidAdapter.js +1 -1
  48. package/dist/gumgumBidAdapter.js +1 -1
  49. package/dist/h12mediaBidAdapter.js +1 -1
  50. package/dist/hadronIdSystem.js +1 -1
  51. package/dist/holidBidAdapter.js +1 -1
  52. package/dist/id5IdSystem.js +1 -1
  53. package/dist/improvedigitalBidAdapter.js +1 -1
  54. package/dist/inmarBidAdapter.js +1 -1
  55. package/dist/insticatorBidAdapter.js +1 -1
  56. package/dist/ixBidAdapter.js +1 -1
  57. package/dist/justpremiumBidAdapter.js +1 -1
  58. package/dist/kargoBidAdapter.js +1 -1
  59. package/dist/konduitAnalyticsAdapter.js +1 -1
  60. package/dist/kueezBidAdapter.js +1 -1
  61. package/dist/kueezRtbBidAdapter.js +1 -1
  62. package/dist/lassoBidAdapter.js +1 -1
  63. package/dist/lifestreetBidAdapter.js +1 -1
  64. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  65. package/dist/logicadBidAdapter.js +1 -1
  66. package/dist/loglyliftBidAdapter.js +1 -1
  67. package/dist/lotamePanoramaIdSystem.js +1 -1
  68. package/dist/magniteAnalyticsAdapter.js +1 -1
  69. package/dist/malltvAnalyticsAdapter.js +1 -1
  70. package/dist/marsmediaBidAdapter.js +1 -1
  71. package/dist/mediafuseBidAdapter.js +1 -1
  72. package/dist/mediasquareBidAdapter.js +1 -1
  73. package/dist/mgidBidAdapter.js +1 -1
  74. package/dist/minutemediaBidAdapter.js +1 -1
  75. package/dist/nextMillenniumBidAdapter.js +1 -1
  76. package/dist/nexx360BidAdapter.js +1 -1
  77. package/dist/not-for-prod/prebid.js +140 -149
  78. package/dist/oguryBidAdapter.js +1 -1
  79. package/dist/onetagBidAdapter.js +1 -1
  80. package/dist/ooloAnalyticsAdapter.js +1 -1
  81. package/dist/openxBidAdapter.js +1 -1
  82. package/dist/ortbConverter.js +1 -1
  83. package/dist/outbrainBidAdapter.js +1 -1
  84. package/dist/parrableIdSystem.js +1 -1
  85. package/dist/permutiveRtdProvider.js +1 -1
  86. package/dist/pixfutureBidAdapter.js +1 -1
  87. package/dist/prebid-core.js +1 -1
  88. package/dist/prebidServerBidAdapter.js +1 -1
  89. package/dist/priceFloors.js +1 -1
  90. package/dist/publinkIdSystem.js +1 -1
  91. package/dist/pubmaticBidAdapter.js +1 -1
  92. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  93. package/dist/pulsepointBidAdapter.js +1 -1
  94. package/dist/pxyzBidAdapter.js +1 -1
  95. package/dist/quantcastBidAdapter.js +1 -1
  96. package/dist/readpeakBidAdapter.js +1 -1
  97. package/dist/relaidoBidAdapter.js +1 -1
  98. package/dist/rhythmoneBidAdapter.js +1 -1
  99. package/dist/riseBidAdapter.js +1 -1
  100. package/dist/rubiconAnalyticsAdapter.js +1 -1
  101. package/dist/rubiconBidAdapter.js +1 -1
  102. package/dist/seedingAllianceBidAdapter.js +1 -1
  103. package/dist/seedtagBidAdapter.js +1 -1
  104. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  105. package/dist/sharethroughBidAdapter.js +1 -1
  106. package/dist/shinezBidAdapter.js +1 -1
  107. package/dist/smaatoBidAdapter.js +1 -1
  108. package/dist/smartadserverBidAdapter.js +1 -1
  109. package/dist/smartxBidAdapter.js +1 -1
  110. package/dist/smartytechBidAdapter.js +1 -1
  111. package/dist/smilewantedBidAdapter.js +1 -1
  112. package/dist/sonobiBidAdapter.js +1 -1
  113. package/dist/sovrnAnalyticsAdapter.js +1 -1
  114. package/dist/sovrnBidAdapter.js +1 -1
  115. package/dist/sspBCBidAdapter.js +1 -1
  116. package/dist/sublimeBidAdapter.js +1 -1
  117. package/dist/synacormediaBidAdapter.js +1 -1
  118. package/dist/taboolaBidAdapter.js +1 -1
  119. package/dist/targetVideoBidAdapter.js +1 -1
  120. package/dist/teadsBidAdapter.js +1 -1
  121. package/dist/trionBidAdapter.js +1 -1
  122. package/dist/tripleliftBidAdapter.js +1 -1
  123. package/dist/ttdBidAdapter.js +1 -1
  124. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  125. package/dist/uid2IdSystem.js +1 -1
  126. package/dist/underdogmediaBidAdapter.js +1 -1
  127. package/dist/undertoneBidAdapter.js +1 -1
  128. package/dist/vidazooBidAdapter.js +1 -1
  129. package/dist/videobyteBidAdapter.js +1 -1
  130. package/dist/visxBidAdapter.js +1 -1
  131. package/dist/vuukleBidAdapter.js +1 -1
  132. package/dist/widespaceBidAdapter.js +1 -1
  133. package/dist/winrBidAdapter.js +1 -1
  134. package/dist/yahoosspBidAdapter.js +1 -1
  135. package/dist/yieldmoBidAdapter.js +1 -1
  136. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  137. package/dist/zeta_global_sspBidAdapter.js +1 -1
  138. package/dist/zeusPrimeRtdProvider.js +4 -14
  139. package/integrationExamples/gpt/hello_world.html +0 -0
  140. package/libraries/ortbConverter/processors/default.js +19 -1
  141. package/modules/.submodules.json +1 -0
  142. package/modules/admaticBidAdapter.js +2 -1
  143. package/modules/admixerBidAdapter.js +26 -4
  144. package/modules/adnuntiusBidAdapter.js +36 -38
  145. package/modules/adyoulikeBidAdapter.js +2 -0
  146. package/modules/arcspanRtdProvider.js +73 -0
  147. package/modules/arcspanRtdProvider.md +11 -0
  148. package/modules/bliinkBidAdapter.js +1 -1
  149. package/modules/consentManagement.js +33 -5
  150. package/modules/consumableBidAdapter.js +20 -2
  151. package/modules/criteoBidAdapter.js +1 -1
  152. package/modules/cwireBidAdapter.js +169 -242
  153. package/modules/cwireBidAdapter.md +15 -14
  154. package/modules/emx_digitalBidAdapter.js +9 -2
  155. package/modules/hadronIdSystem.js +37 -32
  156. package/modules/holidBidAdapter.js +9 -4
  157. package/modules/kargoBidAdapter.js +5 -1
  158. package/modules/lotamePanoramaIdSystem.js +9 -1
  159. package/modules/nextMillenniumBidAdapter.js +19 -9
  160. package/modules/nexx360BidAdapter.js +1 -2
  161. package/modules/onetagBidAdapter.js +12 -1
  162. package/modules/openxBidAdapter.js +5 -0
  163. package/modules/outbrainBidAdapter.js +103 -6
  164. package/modules/permutiveRtdProvider.js +17 -12
  165. package/modules/prebidServerBidAdapter/index.js +14 -1
  166. package/modules/prebidServerBidAdapter/ortbConverter.js +1 -1
  167. package/modules/priceFloors.js +7 -8
  168. package/modules/pulsepointBidAdapter.js +2 -0
  169. package/modules/seedingAllianceBidAdapter.js +129 -116
  170. package/modules/smartadserverBidAdapter.js +39 -28
  171. package/modules/smartyadsBidAdapter.md +9 -0
  172. package/modules/smartytechBidAdapter.js +67 -10
  173. package/modules/smartytechBidAdapter.md +44 -33
  174. package/modules/sonobiBidAdapter.js +17 -10
  175. package/modules/taboolaBidAdapter.js +2 -1
  176. package/modules/tripleliftBidAdapter.js +4 -0
  177. package/modules/vidazooBidAdapter.js +56 -22
  178. package/modules/zeta_global_sspBidAdapter.js +15 -0
  179. package/modules/zeusPrimeRtdProvider.js +3 -323
  180. package/modules/zeusPrimeRtdProvider.md +3 -0
  181. package/package.json +1 -1
  182. package/src/adloader.js +2 -1
  183. package/src/auction.js +2 -11
  184. package/src/prebid.js +8 -0
  185. package/src/utils/cpm.js +17 -0
  186. package/test/spec/modules/admixerBidAdapter_spec.js +140 -60
  187. package/test/spec/modules/adnuntiusBidAdapter_spec.js +120 -120
  188. package/test/spec/modules/adyoulikeBidAdapter_spec.js +3 -0
  189. package/test/spec/modules/arcspanRtdProvider_spec.js +187 -0
  190. package/test/spec/modules/bliinkBidAdapter_spec.js +7 -7
  191. package/test/spec/modules/consentManagement_spec.js +49 -1
  192. package/test/spec/modules/consumableBidAdapter_spec.js +46 -0
  193. package/test/spec/modules/cwireBidAdapter_spec.js +249 -335
  194. package/test/spec/modules/emx_digitalBidAdapter_spec.js +30 -1
  195. package/test/spec/modules/hadronIdSystem_spec.js +4 -6
  196. package/test/spec/modules/holidBidAdapter_spec.js +29 -0
  197. package/test/spec/modules/kargoBidAdapter_spec.js +32 -0
  198. package/test/spec/modules/lotamePanoramaIdSystem_spec.js +16 -10
  199. package/test/spec/modules/nextMillenniumBidAdapter_spec.js +14 -2
  200. package/test/spec/modules/nexx360BidAdapter_spec.js +0 -4
  201. package/test/spec/modules/onetagBidAdapter_spec.js +43 -0
  202. package/test/spec/modules/openxBidAdapter_spec.js +41 -0
  203. package/test/spec/modules/openxOrtbBidAdapter_spec.js +41 -0
  204. package/test/spec/modules/outbrainBidAdapter_spec.js +182 -18
  205. package/test/spec/modules/prebidServerBidAdapter_spec.js +138 -0
  206. package/test/spec/modules/pulsepointBidAdapter_spec.js +11 -1
  207. package/test/spec/modules/seedingAllianceAdapter_spec.js +66 -23
  208. package/test/spec/modules/smartadserverBidAdapter_spec.js +116 -5
  209. package/test/spec/modules/smartytechBidAdapter_spec.js +172 -14
  210. package/test/spec/modules/sonobiBidAdapter_spec.js +2 -1
  211. package/test/spec/modules/taboolaBidAdapter_spec.js +12 -3
  212. package/test/spec/modules/tripleliftBidAdapter_spec.js +13 -0
  213. package/test/spec/modules/userId_spec.js +19 -14
  214. package/test/spec/modules/vidazooBidAdapter_spec.js +61 -22
  215. package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +8 -0
  216. package/test/spec/ortbConverter/default_processors_spec.js +23 -0
  217. package/test/spec/unit/pbjs_api_spec.js +14 -0
  218. package/test/spec/unit/utils/cpm_spec.js +64 -0
  219. package/test/spec/modules/zeusPrimeRtdProvider_spec.js +0 -410
@@ -0,0 +1,187 @@
1
+ import { arcspanSubmodule } from 'modules/arcspanRtdProvider.js';
2
+ import { expect } from 'chai';
3
+ import { loadExternalScript } from 'src/adloader.js';
4
+
5
+ describe('arcspanRtdProvider', function () {
6
+ describe('init', function () {
7
+ afterEach(function () {
8
+ window.arcobj1 = undefined;
9
+ window.arcobj2 = undefined;
10
+ });
11
+
12
+ it('successfully initializes with a valid silo ID', function () {
13
+ expect(arcspanSubmodule.init(getGoodConfig())).to.equal(true);
14
+ expect(loadExternalScript.called).to.be.ok;
15
+ expect(loadExternalScript.args[0][0]).to.deep.equal('https://silo13.p7cloud.net/as.js');
16
+ loadExternalScript.resetHistory();
17
+ });
18
+
19
+ it('fails to initialize with a missing silo ID', function () {
20
+ expect(arcspanSubmodule.init(getBadConfig())).to.equal(false);
21
+ expect(loadExternalScript.called).to.be.not.ok;
22
+ loadExternalScript.resetHistory();
23
+ });
24
+
25
+ it('drops localhost script for test silo', function () {
26
+ expect(arcspanSubmodule.init(getTestConfig())).to.equal(true);
27
+ expect(loadExternalScript.called).to.be.ok;
28
+ expect(loadExternalScript.args[0][0]).to.deep.equal('https://localhost:8080/as.js');
29
+ loadExternalScript.resetHistory();
30
+ });
31
+ });
32
+
33
+ describe('alterBidRequests', function () {
34
+ afterEach(function () {
35
+ window.arcobj1 = undefined;
36
+ window.arcobj2 = undefined;
37
+ });
38
+
39
+ it('alters the bid request 1', function () {
40
+ setIAB({
41
+ raw: {
42
+ images: [
43
+ 'Religion & Spirituality',
44
+ 'Medical Health>Substance Abuse',
45
+ 'Religion & Spirituality>Astrology',
46
+ 'Medical Health',
47
+ 'Events & Attractions',
48
+ ],
49
+ },
50
+ codes: {
51
+ images: ['IAB23-10', 'IAB7', 'IAB7-42', 'IAB15-1'],
52
+ },
53
+ newcodes: {
54
+ images: ['150', '453', '311', '456', '286'],
55
+ },
56
+ });
57
+
58
+ var reqBidsConfigObj = {};
59
+ reqBidsConfigObj.ortb2Fragments = {};
60
+ reqBidsConfigObj.ortb2Fragments.global = {};
61
+ arcspanSubmodule.getBidRequestData(reqBidsConfigObj, function () {
62
+ expect(reqBidsConfigObj.ortb2Fragments.global.site.name).to.equal(
63
+ 'arcspan'
64
+ );
65
+ expect(reqBidsConfigObj.ortb2Fragments.global.site.keywords).to.equal(
66
+ 'Religion & Spirituality,Medical Health>Substance Abuse,Religion & Spirituality>Astrology,Medical Health,Events & Attractions'
67
+ );
68
+ expect(reqBidsConfigObj.ortb2Fragments.global.site.content.data[0].ext.segtax).to.equal(6);
69
+ expect(reqBidsConfigObj.ortb2Fragments.global.site.cat).to.eql([
70
+ 'IAB23_10',
71
+ 'IAB7',
72
+ 'IAB7_42',
73
+ 'IAB15_1',
74
+ ]);
75
+ expect(reqBidsConfigObj.ortb2Fragments.global.site.sectioncat).to.eql([
76
+ 'IAB23_10',
77
+ 'IAB7',
78
+ 'IAB7_42',
79
+ 'IAB15_1'
80
+ ]);
81
+ expect(reqBidsConfigObj.ortb2Fragments.global.site.pagecat).to.eql([
82
+ 'IAB23_10',
83
+ 'IAB7',
84
+ 'IAB7_42',
85
+ 'IAB15_1',
86
+ ]);
87
+ expect(reqBidsConfigObj.ortb2Fragments.global.site.content.data[0].segment).to.eql([
88
+ { id: '150' },
89
+ { id: '453' },
90
+ { id: '311' },
91
+ { id: '456' },
92
+ { id: '286' }
93
+ ]);
94
+ });
95
+ });
96
+
97
+ it('alters the bid request 2', function () {
98
+ setIAB({
99
+ raw: { text: ['Sports', 'Sports>Soccer'] },
100
+ codes: { text: ['IAB17', 'IAB17-44'] },
101
+ newcodes: { text: ['483', '533'] },
102
+ });
103
+
104
+ var reqBidsConfigObj = {};
105
+ reqBidsConfigObj.ortb2Fragments = {};
106
+ reqBidsConfigObj.ortb2Fragments.global = {};
107
+ arcspanSubmodule.getBidRequestData(reqBidsConfigObj, function () {
108
+ expect(reqBidsConfigObj.ortb2Fragments.global.site.name).to.equal(
109
+ 'arcspan'
110
+ );
111
+ expect(reqBidsConfigObj.ortb2Fragments.global.site.keywords).to.equal(
112
+ 'Sports,Sports>Soccer'
113
+ );
114
+ expect(reqBidsConfigObj.ortb2Fragments.global.site.content.data[0].ext.segtax).to.equal(6);
115
+ expect(reqBidsConfigObj.ortb2Fragments.global.site.cat).to.eql([
116
+ 'IAB17',
117
+ 'IAB17_44',
118
+ ]);
119
+ expect(reqBidsConfigObj.ortb2Fragments.global.site.sectioncat).to.eql([
120
+ 'IAB17',
121
+ 'IAB17_44'
122
+ ]);
123
+ expect(reqBidsConfigObj.ortb2Fragments.global.site.pagecat).to.eql([
124
+ 'IAB17',
125
+ 'IAB17_44',
126
+ ]);
127
+ expect(reqBidsConfigObj.ortb2Fragments.global.site.content.data[0].segment).to.eql([
128
+ { id: '483' },
129
+ { id: '533' }
130
+ ]);
131
+ });
132
+ });
133
+ });
134
+ });
135
+
136
+ function getGoodConfig() {
137
+ return {
138
+ name: 'arcspan',
139
+ waitForIt: true,
140
+ params: {
141
+ silo: 13,
142
+ },
143
+ };
144
+ }
145
+
146
+ function getBadConfig() {
147
+ return {
148
+ name: 'arcspan',
149
+ waitForIt: true,
150
+ params: {
151
+ notasilo: 1,
152
+ },
153
+ };
154
+ }
155
+
156
+ function getTestConfig() {
157
+ return {
158
+ name: 'arcspan',
159
+ waitForIt: true,
160
+ params: {
161
+ silo: 'test',
162
+ },
163
+ };
164
+ }
165
+
166
+ function setIAB(vjson) {
167
+ window.arcobj2 = {};
168
+ window.arcobj2.cat = 0;
169
+ if (typeof vjson.codes != 'undefined') {
170
+ window.arcobj2.cat = 1;
171
+ if (typeof vjson.codes.images != 'undefined') {
172
+ vjson.codes.images.forEach(function f(e, i) {
173
+ vjson.codes.images[i] = e.replace('-', '_');
174
+ });
175
+ }
176
+ if (typeof vjson.codes.text != 'undefined') {
177
+ vjson.codes.text.forEach(function f(e, i) {
178
+ vjson.codes.text[i] = e.replace('-', '_');
179
+ });
180
+ }
181
+ window.arcobj2.sampled = 1;
182
+ window.arcobj1 = {};
183
+ window.arcobj1.page_iab_codes = vjson.codes;
184
+ window.arcobj1.page_iab = vjson.raw;
185
+ window.arcobj1.page_iab_newcodes = vjson.newcodes;
186
+ }
187
+ }
@@ -130,7 +130,7 @@ const getConfigCreative = () => {
130
130
  creativeId: '34567erty',
131
131
  width: 300,
132
132
  height: 250,
133
- ttl: 3600,
133
+ ttl: 300,
134
134
  netRevenue: true,
135
135
  }
136
136
  }
@@ -145,7 +145,7 @@ const getConfigCreativeVideo = (isNoVast) => {
145
145
  requestId: '6a204ce130280d',
146
146
  width: 300,
147
147
  height: 250,
148
- ttl: 3600,
148
+ ttl: 300,
149
149
  netRevenue: true,
150
150
  }
151
151
  }
@@ -395,7 +395,7 @@ const testsInterpretResponse = [
395
395
  mediaType: 'video',
396
396
  netRevenue: true,
397
397
  requestId: '2def0c5b2a7f6e',
398
- ttl: 3600,
398
+ ttl: 300,
399
399
  vastXml,
400
400
  vastUrl: 'data:text/xml;charset=utf-8;base64,' + btoa(vastXml.replace(/\\"/g, '"'))
401
401
  }]
@@ -421,7 +421,7 @@ const testsInterpretResponse = [
421
421
  mediaType: 'banner',
422
422
  netRevenue: true,
423
423
  requestId: '2def0c5b2a7f6e',
424
- ttl: 3600,
424
+ ttl: 300,
425
425
  width: 300
426
426
  }]
427
427
  },
@@ -505,7 +505,7 @@ const testsBuildBid = [
505
505
  netRevenue: true,
506
506
  vastXml: getConfigCreativeVideo().vastXml,
507
507
  vastUrl: 'data:text/xml;charset=utf-8;base64,' + btoa(getConfigCreativeVideo().vastXml.replace(/\\"/g, '"')),
508
- ttl: 3600,
508
+ ttl: 300,
509
509
  }
510
510
  },
511
511
  {
@@ -535,7 +535,7 @@ const testsBuildBid = [
535
535
  netRevenue: true,
536
536
  vastXml: getConfigCreativeVideo().vastXml,
537
537
  vastUrl: 'data:text/xml;charset=utf-8;base64,' + btoa(getConfigCreativeVideo().vastXml.replace(/\\"/g, '"')),
538
- ttl: 3600,
538
+ ttl: 300,
539
539
  }
540
540
  },
541
541
  {
@@ -552,7 +552,7 @@ const testsBuildBid = [
552
552
  height: 250,
553
553
  creativeId: getConfigCreative().creativeId,
554
554
  ad: getConfigBannerBid().creative.banner.adm,
555
- ttl: 3600,
555
+ ttl: 300,
556
556
  netRevenue: true,
557
557
  }
558
558
  }
@@ -1,4 +1,15 @@
1
- import { setConsentConfig, requestBidsHook, resetConsentData, userCMP, consentTimeout, staticConsentData, gdprScope } from 'modules/consentManagement.js';
1
+ import {
2
+ setConsentConfig,
3
+ requestBidsHook,
4
+ resetConsentData,
5
+ userCMP,
6
+ consentTimeout,
7
+ actionTimeout,
8
+ staticConsentData,
9
+ gdprScope,
10
+ loadConsentData,
11
+ setActionTimeout
12
+ } from 'modules/consentManagement.js';
2
13
  import { gdprDataHandler } from 'src/adapterManager.js';
3
14
  import * as utils from 'src/utils.js';
4
15
  import { config } from 'src/config.js';
@@ -726,4 +737,41 @@ describe('consentManagement', function () {
726
737
  });
727
738
  });
728
739
  });
740
+
741
+ describe('actionTimeout', function () {
742
+ afterEach(function () {
743
+ config.resetConfig();
744
+ resetConsentData();
745
+ });
746
+
747
+ it('should set actionTimeout if present', () => {
748
+ setConsentConfig({
749
+ gdpr: { timeout: 5000, actionTimeout: 5500 }
750
+ });
751
+
752
+ expect(userCMP).to.be.equal('iab');
753
+ expect(consentTimeout).to.be.equal(5000);
754
+ expect(actionTimeout).to.be.equal(5500);
755
+ });
756
+
757
+ it('should utilize actionTimeout duration on initial user visit when user action is pending', () => {
758
+ const cb = () => {};
759
+ const cmpCallMap = {
760
+ 'iab': () => {},
761
+ 'static': () => {}
762
+ };
763
+ const timeout = sinon.spy();
764
+
765
+ setConsentConfig({
766
+ gdpr: { timeout: 5000, actionTimeout: 5500 }
767
+ });
768
+ loadConsentData(cb, cmpCallMap, timeout);
769
+
770
+ sinon.assert.calledWith(timeout, sinon.match.any, 5000);
771
+
772
+ setActionTimeout();
773
+
774
+ timeout.lastCall.lastArg === 5500;
775
+ });
776
+ });
729
777
  });
@@ -625,6 +625,52 @@ describe('Consumable BidAdapter', function () {
625
625
  expect(opts.length).to.equal(1);
626
626
  });
627
627
 
628
+ it('should return a sync url if iframe syncs are enabled and GDPR applies', function () {
629
+ let gdprConsent = {
630
+ consentString: 'GDPR_CONSENT_STRING',
631
+ gdprApplies: true,
632
+ }
633
+ let opts = spec.getUserSyncs(syncOptions, [AD_SERVER_RESPONSE], gdprConsent);
634
+
635
+ expect(opts.length).to.equal(1);
636
+ expect(opts[0].url).to.equal('https://sync.serverbid.com/ss/730181.html?gdpr=1&gdpr_consent=GDPR_CONSENT_STRING');
637
+ })
638
+
639
+ it('should return a sync url if iframe syncs are enabled and GDPR is undefined', function () {
640
+ let gdprConsent = {
641
+ consentString: 'GDPR_CONSENT_STRING',
642
+ gdprApplies: undefined,
643
+ }
644
+ let opts = spec.getUserSyncs(syncOptions, [AD_SERVER_RESPONSE], gdprConsent);
645
+
646
+ expect(opts.length).to.equal(1);
647
+ expect(opts[0].url).to.equal('https://sync.serverbid.com/ss/730181.html?gdpr=0&gdpr_consent=GDPR_CONSENT_STRING');
648
+ })
649
+
650
+ it('should return a sync url if iframe syncs are enabled and USP applies', function () {
651
+ let uspConsent = {
652
+ consentString: 'USP_CONSENT_STRING',
653
+ }
654
+ let opts = spec.getUserSyncs(syncOptions, [AD_SERVER_RESPONSE], {}, uspConsent);
655
+
656
+ expect(opts.length).to.equal(1);
657
+ expect(opts[0].url).to.equal('https://sync.serverbid.com/ss/730181.html?us_privacy=USP_CONSENT_STRING');
658
+ })
659
+
660
+ it('should return a sync url if iframe syncs are enabled, GDPR and USP applies', function () {
661
+ let gdprConsent = {
662
+ consentString: 'GDPR_CONSENT_STRING',
663
+ gdprApplies: true,
664
+ }
665
+ let uspConsent = {
666
+ consentString: 'USP_CONSENT_STRING',
667
+ }
668
+ let opts = spec.getUserSyncs(syncOptions, [AD_SERVER_RESPONSE], gdprConsent, uspConsent);
669
+
670
+ expect(opts.length).to.equal(1);
671
+ expect(opts[0].url).to.equal('https://sync.serverbid.com/ss/730181.html?gdpr=1&gdpr_consent=GDPR_CONSENT_STRING&us_privacy=USP_CONSENT_STRING');
672
+ })
673
+
628
674
  it('should return a sync url if pixel syncs are enabled and some are returned from the server', function () {
629
675
  let syncOptions = {'pixelEnabled': true};
630
676
  let opts = spec.getUserSyncs(syncOptions, [AD_SERVER_RESPONSE]);