prebid.js 7.29.0 → 7.30.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 (154) hide show
  1. package/dist/33acrossBidAdapter.js +1 -1
  2. package/dist/33acrossIdSystem.js +1 -1
  3. package/dist/adagioBidAdapter.js +1 -1
  4. package/dist/adbookpspBidAdapter.js +1 -1
  5. package/dist/adgenerationBidAdapter.js +1 -1
  6. package/dist/adrelevantisBidAdapter.js +1 -1
  7. package/dist/adtrgtmeBidAdapter.js +1 -1
  8. package/dist/adxcgBidAdapter.js +1 -1
  9. package/dist/ajaBidAdapter.js +1 -1
  10. package/dist/amxBidAdapter.js +1 -1
  11. package/dist/amxIdSystem.js +1 -1
  12. package/dist/appierAnalyticsAdapter.js +1 -1
  13. package/dist/appnexusBidAdapter.js +1 -1
  14. package/dist/asoBidAdapter.js +1 -1
  15. package/dist/axonixBidAdapter.js +1 -1
  16. package/dist/bidViewability.js +1 -1
  17. package/dist/bidglassBidAdapter.js +1 -1
  18. package/dist/big-richmediaBidAdapter.js +1 -1
  19. package/dist/bridgewellBidAdapter.js +1 -1
  20. package/dist/brightMountainMediaBidAdapter.js +1 -1
  21. package/dist/byDataAnalyticsAdapter.js +1 -1
  22. package/dist/carodaBidAdapter.js +1 -1
  23. package/dist/ccxBidAdapter.js +1 -1
  24. package/dist/chtnwBidAdapter.js +1 -1
  25. package/dist/colossussspBidAdapter.js +1 -1
  26. package/dist/concertBidAdapter.js +1 -1
  27. package/dist/connectadBidAdapter.js +1 -1
  28. package/dist/consentManagement.js +1 -1
  29. package/dist/consentManagementGpp.js +1 -0
  30. package/dist/consumableBidAdapter.js +1 -1
  31. package/dist/conversantBidAdapter.js +1 -1
  32. package/dist/craftBidAdapter.js +1 -1
  33. package/dist/criteoBidAdapter.js +1 -1
  34. package/dist/dfpAdServerVideo.js +1 -1
  35. package/dist/dspxBidAdapter.js +1 -1
  36. package/dist/eplanningBidAdapter.js +1 -1
  37. package/dist/finativeBidAdapter.js +1 -1
  38. package/dist/glimpseBidAdapter.js +1 -1
  39. package/dist/gmosspBidAdapter.js +1 -1
  40. package/dist/goldbachBidAdapter.js +1 -1
  41. package/dist/gridBidAdapter.js +1 -1
  42. package/dist/gridNMBidAdapter.js +1 -1
  43. package/dist/gumgumBidAdapter.js +1 -1
  44. package/dist/h12mediaBidAdapter.js +1 -1
  45. package/dist/id5IdSystem.js +1 -1
  46. package/dist/improvedigitalBidAdapter.js +1 -1
  47. package/dist/inmarBidAdapter.js +1 -1
  48. package/dist/insticatorBidAdapter.js +1 -1
  49. package/dist/ixBidAdapter.js +1 -1
  50. package/dist/justpremiumBidAdapter.js +1 -1
  51. package/dist/konduitAnalyticsAdapter.js +1 -1
  52. package/dist/kueezBidAdapter.js +1 -1
  53. package/dist/kueezRtbBidAdapter.js +1 -1
  54. package/dist/lassoBidAdapter.js +1 -1
  55. package/dist/lifestreetBidAdapter.js +1 -1
  56. package/dist/liveyieldAnalyticsAdapter.js +1 -1
  57. package/dist/logicadBidAdapter.js +1 -1
  58. package/dist/loglyliftBidAdapter.js +1 -1
  59. package/dist/magniteAnalyticsAdapter.js +1 -1
  60. package/dist/malltvAnalyticsAdapter.js +1 -1
  61. package/dist/marsmediaBidAdapter.js +1 -1
  62. package/dist/mediafuseBidAdapter.js +1 -1
  63. package/dist/mediasquareBidAdapter.js +1 -1
  64. package/dist/mgidBidAdapter.js +1 -1
  65. package/dist/minutemediaBidAdapter.js +1 -1
  66. package/dist/nexx360BidAdapter.js +1 -1
  67. package/dist/not-for-prod/prebid.js +122 -120
  68. package/dist/oguryBidAdapter.js +1 -1
  69. package/dist/onetagBidAdapter.js +1 -1
  70. package/dist/ooloAnalyticsAdapter.js +1 -1
  71. package/dist/outbrainBidAdapter.js +1 -1
  72. package/dist/parrableIdSystem.js +1 -1
  73. package/dist/pixfutureBidAdapter.js +1 -1
  74. package/dist/prebid-core.js +1 -1
  75. package/dist/prebidServerBidAdapter.js +1 -1
  76. package/dist/publinkIdSystem.js +1 -1
  77. package/dist/pubmaticBidAdapter.js +1 -1
  78. package/dist/pubwiseAnalyticsAdapter.js +1 -1
  79. package/dist/pxyzBidAdapter.js +1 -1
  80. package/dist/quantcastBidAdapter.js +1 -1
  81. package/dist/readpeakBidAdapter.js +1 -1
  82. package/dist/relaidoBidAdapter.js +1 -1
  83. package/dist/rhythmoneBidAdapter.js +1 -1
  84. package/dist/riseBidAdapter.js +1 -1
  85. package/dist/rtdModule.js +1 -1
  86. package/dist/rubiconAnalyticsAdapter.js +1 -1
  87. package/dist/rubiconBidAdapter.js +1 -1
  88. package/dist/seedingAllianceBidAdapter.js +1 -1
  89. package/dist/seedtagBidAdapter.js +1 -1
  90. package/dist/sharethroughAnalyticsAdapter.js +1 -1
  91. package/dist/sharethroughBidAdapter.js +1 -1
  92. package/dist/shinezBidAdapter.js +1 -1
  93. package/dist/smaatoBidAdapter.js +1 -1
  94. package/dist/smartadserverBidAdapter.js +1 -1
  95. package/dist/smartxBidAdapter.js +1 -1
  96. package/dist/smilewantedBidAdapter.js +1 -1
  97. package/dist/sonobiBidAdapter.js +1 -1
  98. package/dist/sovrnAnalyticsAdapter.js +1 -1
  99. package/dist/sovrnBidAdapter.js +1 -1
  100. package/dist/sspBCBidAdapter.js +1 -1
  101. package/dist/sublimeBidAdapter.js +1 -1
  102. package/dist/synacormediaBidAdapter.js +1 -1
  103. package/dist/targetVideoBidAdapter.js +1 -1
  104. package/dist/teadsBidAdapter.js +1 -1
  105. package/dist/trionBidAdapter.js +1 -1
  106. package/dist/tripleliftBidAdapter.js +1 -1
  107. package/dist/ttdBidAdapter.js +1 -1
  108. package/dist/ucfunnelAnalyticsAdapter.js +1 -1
  109. package/dist/uid2IdSystem.js +1 -1
  110. package/dist/underdogmediaBidAdapter.js +1 -1
  111. package/dist/undertoneBidAdapter.js +1 -1
  112. package/dist/vidazooBidAdapter.js +1 -1
  113. package/dist/videobyteBidAdapter.js +1 -1
  114. package/dist/viouslyBidAdapter.js +1 -0
  115. package/dist/visxBidAdapter.js +1 -1
  116. package/dist/vuukleBidAdapter.js +1 -1
  117. package/dist/widespaceBidAdapter.js +1 -1
  118. package/dist/winrBidAdapter.js +1 -1
  119. package/dist/yahoosspBidAdapter.js +1 -1
  120. package/dist/yieldmoBidAdapter.js +1 -1
  121. package/dist/yieldoneAnalyticsAdapter.js +1 -1
  122. package/integrationExamples/gpt/gpp_us_hello_world.html +124 -0
  123. package/integrationExamples/gpt/gpp_us_hello_world_iframe.html +12 -0
  124. package/integrationExamples/gpt/gpp_us_hello_world_iframe_subpage.html +140 -0
  125. package/karma.conf.maker.js +1 -1
  126. package/modules/appnexusBidAdapter.js +23 -2
  127. package/modules/bidViewability.js +6 -1
  128. package/modules/ccxBidAdapter.js +3 -2
  129. package/modules/colossussspBidAdapter.js +8 -0
  130. package/modules/consentManagement.js +4 -4
  131. package/modules/consentManagementGpp.js +386 -0
  132. package/modules/dfpAdServerVideo.js +6 -1
  133. package/modules/gridBidAdapter.js +1 -2
  134. package/modules/lassoBidAdapter.js +2 -2
  135. package/modules/magniteAnalyticsAdapter.js +9 -1
  136. package/modules/onetagBidAdapter.js +20 -29
  137. package/modules/prebidServerBidAdapter/index.js +19 -8
  138. package/modules/rtdModule/index.js +2 -1
  139. package/modules/viouslyBidAdapter.js +209 -0
  140. package/modules/viouslyBidAdapter.md +35 -0
  141. package/package.json +1 -1
  142. package/src/adapterManager.js +11 -10
  143. package/src/adapters/bidderFactory.js +5 -5
  144. package/src/consentHandler.js +11 -0
  145. package/src/prebid.js +2 -1
  146. package/test/helpers/hookSetup.js +5 -0
  147. package/test/spec/modules/ViouslyBidAdapter_spec.js +378 -0
  148. package/test/spec/modules/appnexusBidAdapter_spec.js +46 -0
  149. package/test/spec/modules/colossussspBidAdapter_spec.js +89 -2
  150. package/test/spec/modules/consentManagementGpp_spec.js +577 -0
  151. package/test/spec/modules/gridBidAdapter_spec.js +0 -18
  152. package/test/spec/modules/magniteAnalyticsAdapter_spec.js +36 -14
  153. package/test/spec/modules/onetagBidAdapter_spec.js +29 -23
  154. package/test/spec/modules/topicsFpdModule_spec.js +41 -22
@@ -0,0 +1,209 @@
1
+ import { deepAccess, logError, parseUrl, parseSizesInput, triggerPixel } from '../src/utils.js';
2
+ import { registerBidder } from '../src/adapters/bidderFactory.js';
3
+ import { config } from '../src/config.js';
4
+ import { VIDEO } from '../src/mediaTypes.js';
5
+ import find from 'core-js-pure/features/array/find.js'; // eslint-disable-line prebid/validate-imports
6
+
7
+ const BIDDER_CODE = 'viously';
8
+ // const GVLID = 1028;
9
+ const CURRENCY = 'EUR';
10
+ const TTL = 60;
11
+ const HTTP_METHOD = 'POST';
12
+ const REQUEST_URL = 'https://bidder.viously.com/bid';
13
+ const REQUIRED_VIDEO_PARAMS = ['context', 'playbackmethod', 'playerSize'];
14
+ const REQUIRED_VIOUSLY_PARAMS = ['pid'];
15
+
16
+ export const spec = {
17
+ code: BIDDER_CODE,
18
+ // gvlid: GVLID,
19
+ supportedMediaTypes: [VIDEO],
20
+
21
+ /**
22
+ * Determines whether or not the given bid request is valid.
23
+ *
24
+ * @param {BidRequest} bid The bid params to validate.
25
+ * @return boolean True if this is a valid bid, and false otherwise.
26
+ */
27
+ isBidRequestValid: function(bid) {
28
+ let videoParams = deepAccess(bid, 'mediaTypes.video');
29
+
30
+ if (!bid.params) {
31
+ logError('The bid params are missing');
32
+ return false;
33
+ }
34
+
35
+ if (!videoParams) {
36
+ logError('The placement must be of video type');
37
+ return false;
38
+ }
39
+
40
+ /**
41
+ * VIDEO checks
42
+ */
43
+
44
+ let areParamsValid = true;
45
+
46
+ REQUIRED_VIDEO_PARAMS.forEach(function(videoParam) {
47
+ if (typeof videoParams[videoParam] === 'undefined') {
48
+ logError('mediaTypes.video.' + videoParam + ' must be set for video placement.');
49
+ areParamsValid = false;
50
+ }
51
+ });
52
+
53
+ if (parseSizesInput(videoParams.playerSize).length === 0) {
54
+ logError('mediaTypes.video.playerSize must be set for video placement at the right format.');
55
+ return false;
56
+ }
57
+
58
+ /**
59
+ * Viously checks
60
+ */
61
+
62
+ REQUIRED_VIOUSLY_PARAMS.forEach(function(viouslyParam) {
63
+ if (typeof bid.params[viouslyParam] === 'undefined') {
64
+ logError('The ' + viouslyParam + ' is missing.');
65
+ areParamsValid = false;
66
+ }
67
+ });
68
+
69
+ if (!areParamsValid) {
70
+ return false;
71
+ }
72
+
73
+ return true;
74
+ },
75
+
76
+ buildRequests: function(validBidRequests, bidderRequest) {
77
+ let payload = {};
78
+
79
+ /** Viously Publisher ID */
80
+ if (validBidRequests[0].params.pid) {
81
+ payload.pid = validBidRequests[0].params.pid;
82
+ }
83
+
84
+ // Referer Info
85
+ if (config.getConfig('pageUrl')) {
86
+ let parsedUrl = parseUrl(config.getConfig('pageUrl'));
87
+
88
+ payload.domain = parsedUrl.hostname;
89
+ payload.page_domain = config.getConfig('pageUrl');
90
+ } else if (bidderRequest && bidderRequest.refererInfo) {
91
+ let parsedUrl = parseUrl(bidderRequest.refererInfo.page);
92
+
93
+ payload.domain = parsedUrl.hostname;
94
+ payload.page_domain = bidderRequest.refererInfo.page;
95
+ }
96
+ if (payload.domain) {
97
+ /** Make sur that the scheme is not part of the domain */
98
+ payload.domain = payload.domain.replace(/(^\w+:|^)\/\//, '');
99
+ payload.domain = payload.domain.replace(/\/$/, '');
100
+ }
101
+
102
+ // Handle GDPR
103
+ if (bidderRequest && bidderRequest.gdprConsent) {
104
+ payload.gdpr = bidderRequest.gdprConsent.gdprApplies;
105
+ payload.gdpr_consent = bidderRequest.gdprConsent.consentString;
106
+ if (bidderRequest.gdprConsent.addtlConsent && bidderRequest.gdprConsent.addtlConsent.indexOf('~') !== -1) {
107
+ payload.addtl_consent = bidderRequest.gdprConsent.addtlConsent;
108
+ }
109
+ }
110
+
111
+ // US Privacy
112
+ if (bidderRequest && bidderRequest.uspConsent) {
113
+ payload.us_privacy = bidderRequest.uspConsent;
114
+ }
115
+
116
+ // Schain
117
+ if (validBidRequests[0].schain) {
118
+ payload.schain = validBidRequests[0].schain;
119
+ }
120
+ // Currency
121
+ payload.currency_code = CURRENCY;
122
+
123
+ // User IDs
124
+ if (validBidRequests[0].userIdAsEids) {
125
+ payload.users_uid = validBidRequests[0].userIdAsEids;
126
+ }
127
+
128
+ // Placements
129
+ payload.placements = validBidRequests.map(bidRequest => {
130
+ let request = {
131
+ id: bidRequest.adUnitCode,
132
+ bid_id: bidRequest.bidId
133
+ };
134
+
135
+ request.video_params = {
136
+ context: deepAccess(bidRequest, 'mediaTypes.video.context'),
137
+ playbackmethod: deepAccess(bidRequest, 'mediaTypes.video.playbackmethod'),
138
+ size: parseSizesInput(deepAccess(bidRequest, 'mediaTypes.video.playerSize'))
139
+ };
140
+
141
+ return request;
142
+ });
143
+
144
+ return {
145
+ method: HTTP_METHOD,
146
+ url: validBidRequests[0].params.endpoint ? validBidRequests[0].params.endpoint : REQUEST_URL,
147
+ data: payload
148
+ };
149
+ },
150
+
151
+ interpretResponse: function(serverResponse, requests) {
152
+ const bidResponses = [];
153
+ const responseBody = serverResponse.body;
154
+
155
+ if (responseBody.ads && responseBody.ads.length > 0) {
156
+ responseBody.ads.forEach(function(bidResponse) {
157
+ if (bidResponse.bid) {
158
+ let bidRequest = find(requests.data.placements, bid => bid.bid_id === bidResponse.bid_id);
159
+
160
+ if (bidRequest) {
161
+ let sizes = bidResponse.size.split('x');
162
+
163
+ const bid = {
164
+ requestId: bidRequest.bid_id,
165
+ id: bidResponse.id,
166
+ cpm: bidResponse.cpm,
167
+ width: sizes[0],
168
+ height: sizes[1],
169
+ creativeId: bidResponse.creative_id || '',
170
+ currency: CURRENCY,
171
+ netRevenue: true,
172
+ ttl: TTL,
173
+ mediaType: 'video',
174
+ meta: {},
175
+ // Tracking data
176
+ nurl: bidResponse.nurl ? bidResponse.nurl : []
177
+ };
178
+
179
+ if (bidResponse.ad_url) {
180
+ bid.vastUrl = bidResponse.ad_url;
181
+ } else {
182
+ bid.vastXml = bidResponse.ad;
183
+ }
184
+
185
+ bidResponses.push(bid);
186
+ }
187
+ }
188
+ });
189
+ }
190
+
191
+ return bidResponses;
192
+ },
193
+
194
+ getUserSyncs: function(syncOptions, serverResponses, gdprConsent, uspConsent) {},
195
+
196
+ onTimeout: function(timeoutData) {},
197
+
198
+ onBidWon: function(bid) {
199
+ if (bid && bid.nurl && bid.nurl.length > 0) {
200
+ bid.nurl.forEach(function(winUrl) {
201
+ triggerPixel(winUrl, null);
202
+ });
203
+ }
204
+ },
205
+
206
+ onSetTargeting: function(bid) {}
207
+ };
208
+
209
+ registerBidder(spec);
@@ -0,0 +1,35 @@
1
+ # Overview
2
+
3
+ ```
4
+ Module Name: Viously Bidder Adapter
5
+ Module Type: Bidder Adapter
6
+ Maintainer: prebid@viously.com
7
+ ```
8
+
9
+ # Description
10
+
11
+ Module that connects to Viously's demand sources
12
+
13
+ # Test Parameters
14
+ ```
15
+ var adUnits = [
16
+ {
17
+ code: 'test-div',
18
+ mediaTypes: {
19
+ video: {
20
+ playerSize: [640, 360],
21
+ context: 'instream',
22
+ playbackmethod: [1, 2, 3, 4, 5, 6]
23
+ }
24
+ },
25
+ bids: [
26
+ {
27
+ bidder: 'viously',
28
+ params: {
29
+ pid: '20d30b78-43ec-11ed-b878-0242ac120002'
30
+ }
31
+ }
32
+ ]
33
+ }
34
+ ];
35
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prebid.js",
3
- "version": "7.29.0",
3
+ "version": "7.30.0",
4
4
  "description": "Header Bidding Management Library",
5
5
  "main": "src/prebid.js",
6
6
  "scripts": {
@@ -31,7 +31,7 @@ import {hook} from './hook.js';
31
31
  import {find, includes} from './polyfill.js';
32
32
  import {adunitCounter} from './adUnits.js';
33
33
  import {getRefererInfo} from './refererDetection.js';
34
- import {GdprConsentHandler, UspConsentHandler} from './consentHandler.js';
34
+ import {GdprConsentHandler, UspConsentHandler, GppConsentHandler} from './consentHandler.js';
35
35
  import * as events from './events.js';
36
36
  import CONSTANTS from './constants.json';
37
37
  import {useMetrics} from './utils/perfMetrics.js';
@@ -161,6 +161,7 @@ function getAdUnitCopyForClientAdapters(adUnits) {
161
161
 
162
162
  export let gdprDataHandler = new GdprConsentHandler();
163
163
  export let uspDataHandler = new UspConsentHandler();
164
+ export let gppDataHandler = new GppConsentHandler();
164
165
 
165
166
  export let coppaDataHandler = {
166
167
  getCoppa: function() {
@@ -309,17 +310,17 @@ adapterManager.makeBidRequests = hook('sync', function (adUnits, auctionStart, a
309
310
  }
310
311
  });
311
312
 
312
- if (gdprDataHandler.getConsentData()) {
313
- bidRequests.forEach(bidRequest => {
313
+ bidRequests.forEach(bidRequest => {
314
+ if (gdprDataHandler.getConsentData()) {
314
315
  bidRequest['gdprConsent'] = gdprDataHandler.getConsentData();
315
- });
316
- }
317
-
318
- if (uspDataHandler.getConsentData()) {
319
- bidRequests.forEach(bidRequest => {
316
+ }
317
+ if (uspDataHandler.getConsentData()) {
320
318
  bidRequest['uspConsent'] = uspDataHandler.getConsentData();
321
- });
322
- }
319
+ }
320
+ if (gppDataHandler.getConsentData()) {
321
+ bidRequest['gppConsent'] = gppDataHandler.getConsentData();
322
+ }
323
+ });
323
324
 
324
325
  bidRequests.forEach(bidRequest => {
325
326
  config.runWithBidder(bidRequest.bidderCode, () => {
@@ -214,7 +214,7 @@ export function newBidder(spec) {
214
214
  done();
215
215
  config.runWithBidder(spec.code, () => {
216
216
  events.emit(CONSTANTS.EVENTS.BIDDER_DONE, bidderRequest);
217
- registerSyncs(responses, bidderRequest.gdprConsent, bidderRequest.uspConsent);
217
+ registerSyncs(responses, bidderRequest.gdprConsent, bidderRequest.uspConsent, bidderRequest.gppConsent);
218
218
  });
219
219
  }
220
220
 
@@ -295,8 +295,8 @@ export function newBidder(spec) {
295
295
  return false;
296
296
  }
297
297
 
298
- function registerSyncs(responses, gdprConsent, uspConsent) {
299
- registerSyncInner(spec, responses, gdprConsent, uspConsent);
298
+ function registerSyncs(responses, gdprConsent, uspConsent, gppConsent) {
299
+ registerSyncInner(spec, responses, gdprConsent, uspConsent, gppConsent);
300
300
  }
301
301
 
302
302
  function filterAndWarn(bid) {
@@ -448,14 +448,14 @@ export const processBidderRequests = hook('sync', function (spec, bids, bidderRe
448
448
  })
449
449
  }, 'processBidderRequests')
450
450
 
451
- export const registerSyncInner = hook('async', function(spec, responses, gdprConsent, uspConsent) {
451
+ export const registerSyncInner = hook('async', function(spec, responses, gdprConsent, uspConsent, gppConsent) {
452
452
  const aliasSyncEnabled = config.getConfig('userSync.aliasSyncEnabled');
453
453
  if (spec.getUserSyncs && (aliasSyncEnabled || !adapterManager.aliasRegistry[spec.code])) {
454
454
  let filterConfig = config.getConfig('userSync.filterSettings');
455
455
  let syncs = spec.getUserSyncs({
456
456
  iframeEnabled: !!(filterConfig && (filterConfig.iframe || filterConfig.all)),
457
457
  pixelEnabled: !!(filterConfig && (filterConfig.image || filterConfig.all)),
458
- }, responses, gdprConsent, uspConsent);
458
+ }, responses, gdprConsent, uspConsent, gppConsent);
459
459
  if (syncs) {
460
460
  if (!Array.isArray(syncs)) {
461
461
  syncs = [syncs];
@@ -107,3 +107,14 @@ export class GdprConsentHandler extends ConsentHandler {
107
107
  }
108
108
  }
109
109
  }
110
+
111
+ export class GppConsentHandler extends ConsentHandler {
112
+ getConsentMeta() {
113
+ const consentData = this.getConsentData();
114
+ if (consentData && this.generatedTime) {
115
+ return {
116
+ generatedAt: this.generatedTime,
117
+ }
118
+ }
119
+ }
120
+ }
package/src/prebid.js CHANGED
@@ -45,7 +45,7 @@ import {executeRenderer, isRendererRequired} from './Renderer.js';
45
45
  import {createBid} from './bidfactory.js';
46
46
  import {storageCallbacks} from './storageManager.js';
47
47
  import {emitAdRenderFail, emitAdRenderSucceeded} from './adRendering.js';
48
- import {default as adapterManager, gdprDataHandler, getS2SBidderSet, uspDataHandler} from './adapterManager.js';
48
+ import {default as adapterManager, gdprDataHandler, getS2SBidderSet, gppDataHandler, uspDataHandler} from './adapterManager.js';
49
49
  import CONSTANTS from './constants.json';
50
50
  import * as events from './events.js';
51
51
  import {newMetrics, useMetrics} from './utils/perfMetrics.js';
@@ -336,6 +336,7 @@ function getConsentMetadata() {
336
336
  return {
337
337
  gdpr: gdprDataHandler.getConsentMeta(),
338
338
  usp: uspDataHandler.getConsentMeta(),
339
+ gpp: gppDataHandler.getConsentMeta(),
339
340
  coppa: !!(config.getConfig('coppa'))
340
341
  }
341
342
  }
@@ -0,0 +1,5 @@
1
+ import {hook} from '../../src/hook.js';
2
+
3
+ before(() => {
4
+ hook.ready();
5
+ });