prebid.js 7.26.0 → 7.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.
- package/.github/workflows/issue_tracker.yml +1 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/adWMGAnalyticsAdapter.js +1 -1
- package/dist/adagioAnalyticsAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adhashBidAdapter.js +1 -1
- package/dist/adkernelAdnAnalyticsAdapter.js +1 -1
- package/dist/adlooxAdServerVideo.js +1 -1
- package/dist/adlooxAnalyticsAdapter.js +1 -1
- package/dist/adlooxRtdProvider.js +1 -1
- package/dist/admaticBidAdapter.js +1 -1
- package/dist/admixerBidAdapter.js +1 -1
- package/dist/adomikAnalyticsAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgAnalyticsAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adxpremiumAnalyticsAdapter.js +1 -1
- package/dist/aidemBidAdapter.js +1 -0
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/analyticsAdapter.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/atsAnalyticsAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/bidViewability.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/bidwatchAnalyticsAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/browsiRtdProvider.js +1 -1
- package/dist/bucksenseBidAdapter.js +1 -1
- package/dist/byDataAnalyticsAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/concertAnalyticsAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consentManagement.js +1 -1
- package/dist/consentManagementUsp.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -1
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/datablocksAnalyticsAdapter.js +1 -1
- package/dist/dependencies.json +6 -0
- package/dist/dfpAdServerVideo.js +1 -1
- package/dist/discoveryBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningAnalyticsAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/fintezaAnalyticsAdapter.js +1 -1
- package/dist/fluctBidAdapter.js +1 -1
- package/dist/ftrackIdSystem.js +1 -1
- package/dist/gdprEnforcement.js +1 -1
- package/dist/genericAnalyticsAdapter.js +1 -0
- package/dist/geoedgeRtdProvider.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/glomexBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/googleAnalyticsAdapter.js +1 -1
- package/dist/gravitoIdSystem.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/growthCodeAnalyticsAdapter.js +1 -0
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/hadronAnalyticsAdapter.js +1 -1
- package/dist/id5AnalyticsAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/impactifyBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/invisiblyAnalyticsAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/jwplayerRtdProvider.js +1 -1
- package/dist/kargoAnalyticsAdapter.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/kinessoIdSystem.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/limelightDigitalBidAdapter.js +1 -1
- package/dist/liveIntentAnalyticsAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/livewrappedAnalyticsAdapter.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/lotamePanoramaIdSystem.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediagoBidAdapter.js +1 -1
- package/dist/medianetAnalyticsAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +206 -202
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxAnalyticsAdapter.js +1 -1
- package/dist/optimonAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pbsExtensions.js +1 -1
- package/dist/pianoDmpAnalyticsAdapter.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +2 -2
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/prebidmanagerAnalyticsAdapter.js +1 -1
- package/dist/pubCommonId.js +1 -1
- package/dist/pubProvidedIdSystem.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticAnalyticsAdapter.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubperfAnalyticsAdapter.js +1 -1
- package/dist/pubstackAnalyticsAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxaiAnalyticsAdapter.js +1 -1
- package/dist/pulsepointAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/quantcastIdSystem.js +1 -1
- package/dist/rasBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/realvuAnalyticsAdapter.js +1 -1
- package/dist/redtramBidAdapter.js +1 -0
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/relevantAnalyticsAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rivrAnalyticsAdapter.js +1 -1
- package/dist/roxotAnalyticsAdapter.js +1 -1
- package/dist/rtbhouseBidAdapter.js +1 -1
- package/dist/rtdModule.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/s2sTesting.js +1 -1
- package/dist/scaleableAnalyticsAdapter.js +1 -1
- package/dist/schain.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharedIdSystem.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/sigmoidAnalyticsAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiAnalyticsAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/staqAnalyticsAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/tapadIdSystem.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/teadsIdSystem.js +1 -1
- package/dist/terceptAnalyticsAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/weboramaRtdProvider.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yandexBidAdapter.js +1 -1
- package/dist/yieldlabBidAdapter.js +1 -1
- package/dist/yieldliftBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/yuktamediaAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspAnalyticsAdapter.js +1 -1
- package/integrationExamples/gpt/growthcode.html +134 -0
- package/libraries/analyticsAdapter/AnalyticsAdapter.js +95 -102
- package/libraries/ortb2.5StrictTranslator/dsl.js +54 -0
- package/libraries/ortb2.5StrictTranslator/spec.js +81 -0
- package/libraries/ortb2.5StrictTranslator/translator.js +37 -0
- package/libraries/ortb2.5Translator/translator.js +82 -0
- package/modules/33acrossIdSystem.js +3 -0
- package/modules/adhashBidAdapter.js +115 -30
- package/modules/adhashBidAdapter.md +1 -3
- package/modules/admaticBidAdapter.js +10 -1
- package/modules/admixerBidAdapter.js +1 -1
- package/modules/aidemBidAdapter.js +492 -0
- package/modules/aidemBidAdapter.md +187 -0
- package/modules/browsiRtdProvider.js +6 -4
- package/modules/bucksenseBidAdapter.js +1 -1
- package/modules/criteoBidAdapter.js +3 -3
- package/modules/discoveryBidAdapter.js +3 -0
- package/modules/eplanningBidAdapter.js +2 -6
- package/modules/fluctBidAdapter.js +5 -0
- package/modules/gdprEnforcement.js +26 -24
- package/modules/genericAnalyticsAdapter.js +157 -0
- package/modules/geoedgeRtdProvider.js +22 -0
- package/modules/glomexBidAdapter.js +2 -0
- package/modules/gravitoIdSystem.js +3 -4
- package/modules/gridBidAdapter.js +1 -1
- package/modules/gridNMBidAdapter.js +1 -1
- package/modules/growthCodeAnalyticsAdapter.js +176 -0
- package/modules/growthCodeAnalyticsAdapter.md +41 -0
- package/modules/impactifyBidAdapter.js +19 -1
- package/modules/jwplayerRtdProvider.js +1 -2
- package/modules/kargoBidAdapter.js +1 -1
- package/modules/lassoBidAdapter.js +8 -4
- package/modules/limelightDigitalBidAdapter.js +1 -1
- package/modules/liveIntentIdSystem.js +1 -2
- package/modules/mediagoBidAdapter.js +2 -1
- package/modules/minutemediaBidAdapter.md +3 -3
- package/modules/nexx360BidAdapter.js +264 -138
- package/modules/openxBidAdapter.md +15 -14
- package/modules/pubCommonId.js +2 -1
- package/modules/pubProvidedIdSystem.js +2 -0
- package/modules/rasBidAdapter.js +8 -3
- package/modules/rasBidAdapter.md +16 -15
- package/modules/redtramBidAdapter.js +155 -0
- package/modules/redtramBidAdapter.md +33 -0
- package/modules/riseBidAdapter.js +15 -0
- package/modules/riseBidAdapter.md +3 -3
- package/modules/rtbhouseBidAdapter.js +90 -29
- package/modules/rubiconBidAdapter.js +2 -1
- package/modules/seedtagBidAdapter.js +67 -56
- package/modules/seedtagBidAdapter.md +60 -0
- package/modules/sharedIdSystem.js +3 -1
- package/modules/smartxBidAdapter.js +1 -1
- package/modules/smnBidAdapter.md +52 -0
- package/modules/taboolaBidAdapter.js +20 -7
- package/modules/tripleliftBidAdapter.js +1 -1
- package/modules/ttdBidAdapter.js +4 -0
- package/modules/vidazooBidAdapter.js +31 -8
- package/modules/yandexBidAdapter.js +85 -19
- package/modules/yandexBidAdapter.md +7 -7
- package/modules/yieldlabBidAdapter.js +10 -4
- package/modules/yieldliftBidAdapter.js +3 -3
- package/package.json +2 -2
- package/src/auction.js +30 -4
- package/src/consentHandler.js +8 -0
- package/src/constants.json +2 -1
- package/src/events.js +4 -0
- package/src/native.js +31 -20
- package/src/refererDetection.js +6 -1
- package/src/storageManager.js +6 -3
- package/test/helpers/analytics.js +34 -0
- package/test/helpers/refererDetectionHelper.js +88 -0
- package/test/mocks/analyticsStub.js +3 -1
- package/test/spec/AnalyticsAdapter_spec.js +119 -116
- package/test/spec/auctionmanager_spec.js +119 -1
- package/test/spec/modules/33acrossIdSystem_spec.js +4 -1
- package/test/spec/modules/adWMGAnalyticsAdapter_spec.js +10 -8
- package/test/spec/modules/adagioAnalyticsAdapter_spec.js +18 -25
- package/test/spec/modules/adhashBidAdapter_spec.js +65 -11
- package/test/spec/modules/aidemBidAdapter_spec.js +664 -0
- package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +0 -2
- package/test/spec/modules/browsiRtdProvider_spec.js +2 -1
- package/test/spec/modules/concertAnalyticsAdapter_spec.js +2 -4
- package/test/spec/modules/enrichmentFpdModule_spec.js +3 -2
- package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +0 -3
- package/test/spec/modules/eplanningBidAdapter_spec.js +4 -4
- package/test/spec/modules/fluctBidAdapter_spec.js +37 -1
- package/test/spec/modules/fpdModule_spec.js +1 -1
- package/test/spec/modules/gdprEnforcement_spec.js +115 -68
- package/test/spec/modules/genericAnalyticsAdapter_spec.js +284 -0
- package/test/spec/modules/geoedgeRtdProvider_spec.js +15 -0
- package/test/spec/modules/glomexBidAdapter_spec.js +4 -0
- package/test/spec/modules/gravitoIdSystem_spec.js +1 -1
- package/test/spec/modules/growthCodeAnalyticsAdapter_spec.js +70 -0
- package/test/spec/modules/impactifyBidAdapter_spec.js +13 -0
- package/test/spec/modules/invisiblyAnalyticsAdapter_spec.js +17 -27
- package/test/spec/modules/jwplayerRtdProvider_spec.js +3 -3
- package/test/spec/modules/konduitAnalyticsAdapter_spec.js +0 -2
- package/test/spec/modules/liveIntentAnalyticsAdapter_spec.js +3 -6
- package/test/spec/modules/medianetAnalyticsAdapter_spec.js +7 -1
- package/test/spec/modules/nexx360BidAdapter_spec.js +441 -221
- package/test/spec/modules/optimonAnalyticsAdapter_spec.js +3 -11
- package/test/spec/modules/pianoDmpAnalyticsAdapter_spec.js +4 -11
- package/test/spec/modules/prebidmanagerAnalyticsAdapter_spec.js +3 -12
- package/test/spec/modules/pubperfAnalyticsAdapter_spec.js +6 -19
- package/test/spec/modules/pubstackAnalyticsAdapter_spec.js +3 -17
- package/test/spec/modules/pubwiseAnalyticsAdapter_spec.js +13 -19
- package/test/spec/modules/rasBidAdapter_spec.js +5 -1
- package/test/spec/modules/redtramBidAdapter_spec.js +256 -0
- package/test/spec/modules/riseBidAdapter_spec.js +24 -0
- package/test/spec/modules/rtbhouseBidAdapter_spec.js +79 -0
- package/test/spec/modules/seedtagBidAdapter_spec.js +65 -92
- package/test/spec/modules/sigmoidAnalyticsAdapter_spec.js +4 -8
- package/test/spec/modules/sovrnAnalyticsAdapter_spec.js +6 -18
- package/test/spec/modules/taboolaBidAdapter_spec.js +39 -0
- package/test/spec/modules/tripleliftBidAdapter_spec.js +3 -10
- package/test/spec/modules/ttdBidAdapter_spec.js +50 -9
- package/test/spec/modules/vidazooBidAdapter_spec.js +173 -27
- package/test/spec/modules/yandexBidAdapter_spec.js +22 -13
- package/test/spec/modules/yieldlabBidAdapter_spec.js +49 -20
- package/test/spec/modules/yieldliftBidAdapter_spec.js +1 -1
- package/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +5 -2
- package/test/spec/native_spec.js +68 -56
- package/test/spec/ortb2.5StrictTranslator/dsl_spec.js +137 -0
- package/test/spec/ortb2.5StrictTranslator/spec_spec.js +358 -0
- package/test/spec/ortb2.5StrictTranslator/translator_spec.js +16 -0
- package/test/spec/ortb2.5Translator/translator_spec.js +64 -0
- package/test/spec/refererDetection_spec.js +46 -95
- package/test/spec/unit/core/storageManager_spec.js +2 -1
|
@@ -12,10 +12,11 @@ Yandex Bidder Adapter for Prebid.js.
|
|
|
12
12
|
|
|
13
13
|
# Parameters
|
|
14
14
|
|
|
15
|
-
| Name |
|
|
16
|
-
|
|
17
|
-
| `
|
|
18
|
-
| `
|
|
15
|
+
| Name | Required? | Description | Example | Type |
|
|
16
|
+
|---------------|--------------------------------------------|-------------|---------|-----------|
|
|
17
|
+
| `placementId` | Yes | Block ID | `123-1` | `String` |
|
|
18
|
+
| `pageId` | No<br>Deprecated. Please use `placementId` | Page ID | `123` | `Integer` |
|
|
19
|
+
| `impId` | No<br>Deprecated. Please use `placementId` | Imp ID | `1` | `Integer` |
|
|
19
20
|
|
|
20
21
|
# Test Parameters
|
|
21
22
|
|
|
@@ -24,15 +25,14 @@ var adUnits = [{
|
|
|
24
25
|
code: 'banner-1',
|
|
25
26
|
mediaTypes: {
|
|
26
27
|
banner: {
|
|
27
|
-
sizes: [[240, 400]],
|
|
28
|
+
sizes: [[240, 400], [300, 600]],
|
|
28
29
|
}
|
|
29
30
|
},
|
|
30
31
|
bids: [{
|
|
31
32
|
{
|
|
32
33
|
bidder: 'yandex',
|
|
33
34
|
params: {
|
|
34
|
-
|
|
35
|
-
impId: 143,
|
|
35
|
+
placementId: '346580-1'
|
|
36
36
|
},
|
|
37
37
|
}
|
|
38
38
|
}]
|
|
@@ -41,6 +41,7 @@ export const spec = {
|
|
|
41
41
|
|
|
42
42
|
const adslotIds = []
|
|
43
43
|
const adslotSizes = [];
|
|
44
|
+
const adslotFloors = [];
|
|
44
45
|
const timestamp = Date.now()
|
|
45
46
|
const query = {
|
|
46
47
|
ts: timestamp,
|
|
@@ -77,7 +78,7 @@ export const spec = {
|
|
|
77
78
|
}
|
|
78
79
|
const floor = getBidFloor(bid, sizes)
|
|
79
80
|
if (floor) {
|
|
80
|
-
|
|
81
|
+
adslotFloors.push(bid.params.adslotId + ':' + floor);
|
|
81
82
|
}
|
|
82
83
|
})
|
|
83
84
|
|
|
@@ -99,6 +100,11 @@ export const spec = {
|
|
|
99
100
|
if (adslotSizes.length > 0) {
|
|
100
101
|
query.sizes = adslotSizes.join(',')
|
|
101
102
|
}
|
|
103
|
+
|
|
104
|
+
if (adslotFloors.length > 0) {
|
|
105
|
+
query.floor = adslotFloors.join(',')
|
|
106
|
+
}
|
|
107
|
+
|
|
102
108
|
const queryString = createQueryString(query)
|
|
103
109
|
|
|
104
110
|
return {
|
|
@@ -463,7 +469,7 @@ function extractSizes(bid) {
|
|
|
463
469
|
*
|
|
464
470
|
* @param {Object} bid
|
|
465
471
|
* @param {string[]} sizes
|
|
466
|
-
* @returns The floor CPM of a matched rule based on the rule selection process (mediaType, size and currency),
|
|
472
|
+
* @returns The floor CPM in cents of a matched rule based on the rule selection process (mediaType, size and currency),
|
|
467
473
|
* using the getFloor() inputs. Multi sizes and unsupported media types will default to '*'
|
|
468
474
|
*/
|
|
469
475
|
function getBidFloor(bid, sizes) {
|
|
@@ -475,10 +481,10 @@ function getBidFloor(bid, sizes) {
|
|
|
475
481
|
const floor = bid.getFloor({
|
|
476
482
|
currency: CURRENCY_CODE,
|
|
477
483
|
mediaType: mediaType !== undefined && spec.supportedMediaTypes.includes(mediaType) ? mediaType : '*',
|
|
478
|
-
size: sizes.length !== 1 ? '*' :
|
|
484
|
+
size: sizes.length !== 1 ? '*' : sizes[0].split(DIMENSION_SIGN)
|
|
479
485
|
});
|
|
480
486
|
if (floor.currency === CURRENCY_CODE) {
|
|
481
|
-
return floor.floor;
|
|
487
|
+
return (floor.floor * 100).toFixed(0);
|
|
482
488
|
}
|
|
483
489
|
return undefined;
|
|
484
490
|
}
|
|
@@ -2,9 +2,9 @@ import {deepSetValue, logInfo, deepAccess} from '../src/utils.js';
|
|
|
2
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import {BANNER} from '../src/mediaTypes.js';
|
|
4
4
|
|
|
5
|
-
const ENDPOINT_URL = 'https://x.yieldlift.com/
|
|
5
|
+
const ENDPOINT_URL = 'https://x.yieldlift.com/pbjs';
|
|
6
6
|
|
|
7
|
-
const DEFAULT_BID_TTL =
|
|
7
|
+
const DEFAULT_BID_TTL = 300;
|
|
8
8
|
const DEFAULT_CURRENCY = 'USD';
|
|
9
9
|
const DEFAULT_NET_REVENUE = true;
|
|
10
10
|
|
|
@@ -98,7 +98,7 @@ export const spec = {
|
|
|
98
98
|
width: bid.w,
|
|
99
99
|
height: bid.h,
|
|
100
100
|
ad: bid.adm,
|
|
101
|
-
ttl: DEFAULT_BID_TTL,
|
|
101
|
+
ttl: typeof bid.exp === 'number' ? bid.exp : DEFAULT_BID_TTL,
|
|
102
102
|
creativeId: bid.crid,
|
|
103
103
|
netRevenue: DEFAULT_NET_REVENUE,
|
|
104
104
|
currency: DEFAULT_CURRENCY,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prebid.js",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.28.0",
|
|
4
4
|
"description": "Header Bidding Management Library",
|
|
5
5
|
"main": "src/prebid.js",
|
|
6
6
|
"scripts": {
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
"express": "^4.15.4",
|
|
131
131
|
"fun-hooks": "^0.9.9",
|
|
132
132
|
"just-clone": "^1.0.2",
|
|
133
|
-
"live-connect-js": "
|
|
133
|
+
"live-connect-js": "3.0.1"
|
|
134
134
|
},
|
|
135
135
|
"optionalDependencies": {
|
|
136
136
|
"fsevents": "^2.3.2"
|
package/src/auction.js
CHANGED
|
@@ -76,7 +76,7 @@ import {
|
|
|
76
76
|
timestamp
|
|
77
77
|
} from './utils.js';
|
|
78
78
|
import {getPriceBucketString} from './cpmBucketManager.js';
|
|
79
|
-
import {getNativeTargeting} from './native.js';
|
|
79
|
+
import {getNativeTargeting, toLegacyResponse} from './native.js';
|
|
80
80
|
import {getCacheUrl, store} from './videoCache.js';
|
|
81
81
|
import {Renderer} from './Renderer.js';
|
|
82
82
|
import {config} from './config.js';
|
|
@@ -462,9 +462,14 @@ export function auctionCallbacks(auctionDone, auctionInstance, {index = auctionM
|
|
|
462
462
|
handleBidResponse(adUnitCode, bid, (done) => {
|
|
463
463
|
let bidResponse = getPreparedBidForAuction(bid);
|
|
464
464
|
|
|
465
|
-
if (bidResponse.mediaType ===
|
|
465
|
+
if (bidResponse.mediaType === VIDEO) {
|
|
466
466
|
tryAddVideoBid(auctionInstance, bidResponse, done);
|
|
467
467
|
} else {
|
|
468
|
+
if (FEATURES.NATIVE && bidResponse.native != null && typeof bidResponse.native === 'object') {
|
|
469
|
+
// NOTE: augment bidResponse.native even if bidResponse.mediaType !== NATIVE; it's possible
|
|
470
|
+
// to treat banner responses as native
|
|
471
|
+
addLegacyFieldsIfNeeded(bidResponse);
|
|
472
|
+
}
|
|
468
473
|
addBidToAuction(auctionInstance, bidResponse);
|
|
469
474
|
done();
|
|
470
475
|
}
|
|
@@ -593,6 +598,17 @@ function tryAddVideoBid(auctionInstance, bidResponse, afterBidAdded, {index = au
|
|
|
593
598
|
}
|
|
594
599
|
}
|
|
595
600
|
|
|
601
|
+
// Native bid response might be in ortb2 format - adds legacy field for backward compatibility
|
|
602
|
+
const addLegacyFieldsIfNeeded = (bidResponse) => {
|
|
603
|
+
const nativeOrtbRequest = auctionManager.index.getAdUnit(bidResponse)?.nativeOrtbRequest;
|
|
604
|
+
const nativeOrtbResponse = bidResponse.native?.ortb
|
|
605
|
+
|
|
606
|
+
if (nativeOrtbRequest && nativeOrtbResponse) {
|
|
607
|
+
const legacyResponse = toLegacyResponse(nativeOrtbResponse, nativeOrtbRequest);
|
|
608
|
+
Object.assign(bidResponse.native, legacyResponse);
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
|
|
596
612
|
const storeInCache = (batch) => {
|
|
597
613
|
store(batch.map(entry => entry.bidResponse), function (error, cacheIds) {
|
|
598
614
|
cacheIds.forEach((cacheId, i) => {
|
|
@@ -672,7 +688,7 @@ function addCommonResponseProperties(bidResponse, adUnitCode, {index = auctionMa
|
|
|
672
688
|
Object.assign(bidResponse, {
|
|
673
689
|
responseTimestamp: bidResponse.responseTimestamp || timestamp(),
|
|
674
690
|
requestTimestamp: bidResponse.requestTimestamp || start,
|
|
675
|
-
cpm:
|
|
691
|
+
cpm: parseFloat(bidResponse.cpm) || 0,
|
|
676
692
|
bidder: bidResponse.bidder || bidResponse.bidderCode,
|
|
677
693
|
adUnitCode
|
|
678
694
|
});
|
|
@@ -812,6 +828,16 @@ export const getAdvertiserDomain = () => {
|
|
|
812
828
|
}
|
|
813
829
|
}
|
|
814
830
|
|
|
831
|
+
/**
|
|
832
|
+
* This function returns a function to get the primary category id from bid response meta
|
|
833
|
+
* @returns {function}
|
|
834
|
+
*/
|
|
835
|
+
export const getPrimaryCatId = () => {
|
|
836
|
+
return (bid) => {
|
|
837
|
+
return (bid.meta && bid.meta.primaryCatId) ? bid.meta.primaryCatId : '';
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
|
|
815
841
|
// factory for key value objs
|
|
816
842
|
function createKeyVal(key, value) {
|
|
817
843
|
return {
|
|
@@ -837,6 +863,7 @@ function defaultAdserverTargeting() {
|
|
|
837
863
|
createKeyVal(TARGETING_KEYS.SOURCE, 'source'),
|
|
838
864
|
createKeyVal(TARGETING_KEYS.FORMAT, 'mediaType'),
|
|
839
865
|
createKeyVal(TARGETING_KEYS.ADOMAIN, getAdvertiserDomain()),
|
|
866
|
+
createKeyVal(TARGETING_KEYS.ACAT, getPrimaryCatId()),
|
|
840
867
|
]
|
|
841
868
|
}
|
|
842
869
|
|
|
@@ -849,7 +876,6 @@ function defaultAdserverTargeting() {
|
|
|
849
876
|
export function getStandardBidderSettings(mediaType, bidderCode) {
|
|
850
877
|
const TARGETING_KEYS = CONSTANTS.TARGETING_KEYS;
|
|
851
878
|
const standardSettings = Object.assign({}, bidderSettings.settingsFor(null));
|
|
852
|
-
|
|
853
879
|
if (!standardSettings[CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING]) {
|
|
854
880
|
standardSettings[CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING] = defaultAdserverTargeting();
|
|
855
881
|
}
|
package/src/consentHandler.js
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import {isStr, timestamp} from './utils.js';
|
|
2
2
|
import {defer, GreedyPromise} from './utils/promise.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Placeholder gvlid for when vendor consent is not required. When this value is used as gvlid, the gdpr
|
|
6
|
+
* enforcement module will take it to mean "vendor consent was given".
|
|
7
|
+
*
|
|
8
|
+
* see https://github.com/prebid/Prebid.js/issues/8161
|
|
9
|
+
*/
|
|
10
|
+
export const VENDORLESS_GVLID = Object.freeze({});
|
|
11
|
+
|
|
4
12
|
export class ConsentHandler {
|
|
5
13
|
#enabled;
|
|
6
14
|
#data;
|
package/src/constants.json
CHANGED
package/src/events.js
CHANGED
package/src/native.js
CHANGED
|
@@ -23,7 +23,7 @@ export const NATIVE_TARGETING_KEYS = Object.keys(CONSTANTS.NATIVE_KEYS).map(
|
|
|
23
23
|
key => CONSTANTS.NATIVE_KEYS[key]
|
|
24
24
|
);
|
|
25
25
|
|
|
26
|
-
const IMAGE = {
|
|
26
|
+
export const IMAGE = {
|
|
27
27
|
ortb: {
|
|
28
28
|
ver: '1.2',
|
|
29
29
|
assets: [
|
|
@@ -385,26 +385,14 @@ export function getNativeTargeting(bid, {index = auctionManager.index} = {}) {
|
|
|
385
385
|
return keyValues;
|
|
386
386
|
}
|
|
387
387
|
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
function assetsMessage(data, adObject, keys, {getNativeReq = getNativeRequest} = {}) {
|
|
388
|
+
function assetsMessage(data, adObject, keys) {
|
|
391
389
|
const message = {
|
|
392
390
|
message: 'assetResponse',
|
|
393
391
|
adId: data.adId,
|
|
394
392
|
};
|
|
395
393
|
|
|
396
|
-
// Pass to Prebid Universal Creative all assets, the legacy ones + the ortb ones (under ortb property)
|
|
397
|
-
const ortbRequest = getNativeReq(adObject);
|
|
398
394
|
let nativeResp = adObject.native;
|
|
399
|
-
|
|
400
|
-
let legacyResponse = {};
|
|
401
|
-
if (ortbRequest && ortbResponse) {
|
|
402
|
-
legacyResponse = toLegacyResponse(ortbResponse, ortbRequest);
|
|
403
|
-
nativeResp = {
|
|
404
|
-
...adObject.native,
|
|
405
|
-
...legacyResponse
|
|
406
|
-
};
|
|
407
|
-
}
|
|
395
|
+
|
|
408
396
|
if (adObject.native.ortb) {
|
|
409
397
|
message.ortb = adObject.native.ortb;
|
|
410
398
|
}
|
|
@@ -435,13 +423,13 @@ function assetsMessage(data, adObject, keys, {getNativeReq = getNativeRequest} =
|
|
|
435
423
|
* Constructs a message object containing asset values for each of the
|
|
436
424
|
* requested data keys.
|
|
437
425
|
*/
|
|
438
|
-
export function getAssetMessage(data, adObject
|
|
426
|
+
export function getAssetMessage(data, adObject) {
|
|
439
427
|
const keys = data.assets.map((k) => getKeyByValue(CONSTANTS.NATIVE_KEYS, k));
|
|
440
|
-
return assetsMessage(data, adObject, keys
|
|
428
|
+
return assetsMessage(data, adObject, keys);
|
|
441
429
|
}
|
|
442
430
|
|
|
443
|
-
export function getAllAssetsMessage(data, adObject
|
|
444
|
-
return assetsMessage(data, adObject, null
|
|
431
|
+
export function getAllAssetsMessage(data, adObject) {
|
|
432
|
+
return assetsMessage(data, adObject, null);
|
|
445
433
|
}
|
|
446
434
|
|
|
447
435
|
/**
|
|
@@ -749,7 +737,7 @@ export function toOrtbNativeResponse(legacyResponse, ortbRequest) {
|
|
|
749
737
|
* @param {*} ortbRequest the ortb request, useful to match ids.
|
|
750
738
|
* @returns an object containing the response in legacy native format: { title: "this is a title", image: ... }
|
|
751
739
|
*/
|
|
752
|
-
function toLegacyResponse(ortbResponse, ortbRequest) {
|
|
740
|
+
export function toLegacyResponse(ortbResponse, ortbRequest) {
|
|
753
741
|
const legacyResponse = {};
|
|
754
742
|
const requestAssets = ortbRequest?.assets || [];
|
|
755
743
|
legacyResponse.clickUrl = ortbResponse.link.url;
|
|
@@ -764,6 +752,29 @@ function toLegacyResponse(ortbResponse, ortbRequest) {
|
|
|
764
752
|
legacyResponse[PREBID_NATIVE_DATA_KEYS_TO_ORTB_INVERSE[NATIVE_ASSET_TYPES_INVERSE[requestAsset.data.type]]] = asset.data.value;
|
|
765
753
|
}
|
|
766
754
|
}
|
|
755
|
+
|
|
756
|
+
// Handle trackers
|
|
757
|
+
legacyResponse.impressionTrackers = [];
|
|
758
|
+
let jsTrackers = [];
|
|
759
|
+
|
|
760
|
+
if (ortbRequest?.imptrackers) {
|
|
761
|
+
legacyResponse.impressionTrackers.push(...ortbRequest.imptrackers);
|
|
762
|
+
}
|
|
763
|
+
for (const eventTracker of ortbResponse?.eventtrackers || []) {
|
|
764
|
+
if (eventTracker.event === TRACKER_EVENTS.impression && eventTracker.method === TRACKER_METHODS.img) {
|
|
765
|
+
legacyResponse.impressionTrackers.push(eventTracker.url);
|
|
766
|
+
}
|
|
767
|
+
if (eventTracker.event === TRACKER_EVENTS.impression && eventTracker.method === TRACKER_METHODS.js) {
|
|
768
|
+
jsTrackers.push(eventTracker.url);
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
jsTrackers = jsTrackers.map(url => `<script async src="${url}"></script>`);
|
|
773
|
+
if (ortbResponse?.jstracker) { jsTrackers.push(ortbResponse.jstracker); }
|
|
774
|
+
if (jsTrackers.length) {
|
|
775
|
+
legacyResponse.javascriptTrackers = jsTrackers.join('\n');
|
|
776
|
+
}
|
|
777
|
+
|
|
767
778
|
return legacyResponse;
|
|
768
779
|
}
|
|
769
780
|
|
package/src/refererDetection.js
CHANGED
|
@@ -120,6 +120,7 @@ export function detectReferer(win) {
|
|
|
120
120
|
const stack = [];
|
|
121
121
|
const ancestors = getAncestorOrigins(win);
|
|
122
122
|
const maxNestedIframes = config.getConfig('maxNestedIframes');
|
|
123
|
+
|
|
123
124
|
let currentWindow;
|
|
124
125
|
let bestLocation;
|
|
125
126
|
let bestCanonicalUrl;
|
|
@@ -226,7 +227,11 @@ export function detectReferer(win) {
|
|
|
226
227
|
|
|
227
228
|
const location = reachedTop || hasTopLocation ? bestLocation : null;
|
|
228
229
|
const canonicalUrl = config.getConfig('pageUrl') || bestCanonicalUrl || null;
|
|
229
|
-
|
|
230
|
+
let page = config.getConfig('pageUrl') || location || ensureProtocol(canonicalUrl, win);
|
|
231
|
+
|
|
232
|
+
if (location && location.indexOf('?') > -1 && page.indexOf('?') === -1) {
|
|
233
|
+
page = `${page}${location.substring(location.indexOf('?'))}`;
|
|
234
|
+
}
|
|
230
235
|
|
|
231
236
|
return {
|
|
232
237
|
reachedTop,
|
package/src/storageManager.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {hook} from './hook.js';
|
|
2
2
|
import {hasDeviceAccess, checkCookieSupport, logError, logInfo, isPlainObject} from './utils.js';
|
|
3
3
|
import {bidderSettings as defaultBidderSettings} from './bidderSettings.js';
|
|
4
|
+
import {VENDORLESS_GVLID} from './consentHandler.js';
|
|
4
5
|
|
|
5
6
|
const moduleTypeWhiteList = ['core', 'prebid-module'];
|
|
6
7
|
|
|
@@ -33,7 +34,9 @@ export function newStorageManager({gvlid, moduleName, bidderCode, moduleType} =
|
|
|
33
34
|
return storageAllowed == null ? false : storageAllowed;
|
|
34
35
|
}
|
|
35
36
|
|
|
36
|
-
|
|
37
|
+
if (moduleTypeWhiteList.includes(moduleType)) {
|
|
38
|
+
gvlid = gvlid || VENDORLESS_GVLID;
|
|
39
|
+
}
|
|
37
40
|
|
|
38
41
|
function isValid(cb) {
|
|
39
42
|
if (!isBidderAllowed()) {
|
|
@@ -45,7 +48,7 @@ export function newStorageManager({gvlid, moduleName, bidderCode, moduleType} =
|
|
|
45
48
|
let hookDetails = {
|
|
46
49
|
hasEnforcementHook: false
|
|
47
50
|
}
|
|
48
|
-
validateStorageEnforcement(
|
|
51
|
+
validateStorageEnforcement(gvlid, bidderCode || moduleName, hookDetails, function(result) {
|
|
49
52
|
if (result && result.hasEnforcementHook) {
|
|
50
53
|
value = cb(result);
|
|
51
54
|
} else {
|
|
@@ -296,7 +299,7 @@ export function newStorageManager({gvlid, moduleName, bidderCode, moduleType} =
|
|
|
296
299
|
/**
|
|
297
300
|
* This hook validates the storage enforcement if gdprEnforcement module is included
|
|
298
301
|
*/
|
|
299
|
-
export const validateStorageEnforcement = hook('async', function(
|
|
302
|
+
export const validateStorageEnforcement = hook('async', function(gvlid, moduleName, hookDetails, callback) {
|
|
300
303
|
callback(hookDetails);
|
|
301
304
|
}, 'validateStorageEnforcement');
|
|
302
305
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as pbEvents from 'src/events.js';
|
|
2
|
+
import constants from '../../src/constants.json';
|
|
3
|
+
|
|
4
|
+
export function fireEvents(events = [
|
|
5
|
+
constants.EVENTS.AUCTION_INIT,
|
|
6
|
+
constants.EVENTS.AUCTION_END,
|
|
7
|
+
constants.EVENTS.BID_REQUESTED,
|
|
8
|
+
constants.EVENTS.BID_RESPONSE,
|
|
9
|
+
constants.EVENTS.BID_WON
|
|
10
|
+
]) {
|
|
11
|
+
return events.map((ev, i) => {
|
|
12
|
+
ev = Array.isArray(ev) ? ev : [ev, {i: i}];
|
|
13
|
+
pbEvents.emit.apply(null, ev)
|
|
14
|
+
return ev;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function expectEvents(events) {
|
|
19
|
+
events = fireEvents(events);
|
|
20
|
+
return {
|
|
21
|
+
to: {
|
|
22
|
+
beTrackedBy(trackFn) {
|
|
23
|
+
events.forEach(([eventType, args]) => {
|
|
24
|
+
sinon.assert.calledWithMatch(trackFn, sinon.match({eventType, args}));
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
beBundledTo(bundleFn) {
|
|
28
|
+
events.forEach(([eventType, args]) => {
|
|
29
|
+
sinon.assert.calledWithMatch(bundleFn, sinon.match.any, eventType, sinon.match(args))
|
|
30
|
+
});
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build a walkable linked list of window-like objects for testing.
|
|
3
|
+
*
|
|
4
|
+
* @param {Array} urls Array of URL strings starting from the top window.
|
|
5
|
+
* @param {string} [topReferrer]
|
|
6
|
+
* @param {string} [canonicalUrl]
|
|
7
|
+
* @param {boolean} [ancestorOrigins]
|
|
8
|
+
* @returns {Object}
|
|
9
|
+
*/
|
|
10
|
+
export function buildWindowTree(urls, topReferrer = null, canonicalUrl = null, ancestorOrigins = false) {
|
|
11
|
+
/**
|
|
12
|
+
* Find the origin from a given fully-qualified URL.
|
|
13
|
+
*
|
|
14
|
+
* @param {string} url The fully qualified URL
|
|
15
|
+
* @returns {string|null}
|
|
16
|
+
*/
|
|
17
|
+
function getOrigin(url) {
|
|
18
|
+
const originRegex = new RegExp('^(https?://[^/]+/?)');
|
|
19
|
+
|
|
20
|
+
const result = originRegex.exec(url);
|
|
21
|
+
|
|
22
|
+
if (result && result[0]) {
|
|
23
|
+
return result[0];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const inaccessibles = [];
|
|
30
|
+
|
|
31
|
+
let previousWindow, topWindow;
|
|
32
|
+
const topOrigin = getOrigin(urls[0]);
|
|
33
|
+
|
|
34
|
+
const windowList = urls.map((url, index) => {
|
|
35
|
+
const thisOrigin = getOrigin(url),
|
|
36
|
+
sameOriginAsPrevious = index === 0 ? true : (getOrigin(urls[index - 1]) === thisOrigin),
|
|
37
|
+
sameOriginAsTop = thisOrigin === topOrigin;
|
|
38
|
+
|
|
39
|
+
const win = {
|
|
40
|
+
location: {
|
|
41
|
+
href: url,
|
|
42
|
+
},
|
|
43
|
+
document: {
|
|
44
|
+
referrer: index === 0 ? topReferrer : urls[index - 1]
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
if (topWindow == null) {
|
|
49
|
+
topWindow = win;
|
|
50
|
+
win.document.querySelector = function (selector) {
|
|
51
|
+
if (selector === 'link[rel=\'canonical\']') {
|
|
52
|
+
return {
|
|
53
|
+
href: canonicalUrl
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (sameOriginAsPrevious) {
|
|
61
|
+
win.parent = previousWindow;
|
|
62
|
+
} else {
|
|
63
|
+
win.parent = inaccessibles[inaccessibles.length - 1];
|
|
64
|
+
}
|
|
65
|
+
if (ancestorOrigins) {
|
|
66
|
+
win.location.ancestorOrigins = urls.slice(0, index).reverse().map(getOrigin);
|
|
67
|
+
}
|
|
68
|
+
win.top = sameOriginAsTop ? topWindow : inaccessibles[0];
|
|
69
|
+
|
|
70
|
+
const inWin = {parent: inaccessibles[inaccessibles.length - 1], top: inaccessibles[0]};
|
|
71
|
+
if (index === 0) {
|
|
72
|
+
inWin.top = inWin;
|
|
73
|
+
}
|
|
74
|
+
['document', 'location'].forEach((prop) => {
|
|
75
|
+
Object.defineProperty(inWin, prop, {
|
|
76
|
+
get: function () {
|
|
77
|
+
throw new Error('cross-origin access');
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
inaccessibles.push(inWin);
|
|
82
|
+
previousWindow = win;
|
|
83
|
+
|
|
84
|
+
return win;
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
return windowList[windowList.length - 1];
|
|
88
|
+
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import {_internal} from '../../libraries/analyticsAdapter/AnalyticsAdapter.js';
|
|
1
|
+
import {_internal, setDebounceDelay} from '../../libraries/analyticsAdapter/AnalyticsAdapter.js';
|
|
2
2
|
|
|
3
3
|
before(() => {
|
|
4
4
|
// stub out analytics networking to avoid random events polluting the global xhr mock
|
|
5
5
|
disableAjaxForAnalytics();
|
|
6
|
+
// make analytics event handling synchronous
|
|
7
|
+
setDebounceDelay(0);
|
|
6
8
|
})
|
|
7
9
|
|
|
8
10
|
export function disableAjaxForAnalytics() {
|