prebid.js 6.6.0 → 6.10.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/.eslintrc.js +8 -1
- package/allowedModules.js +4 -7
- package/integrationExamples/gpt/amp/creative.html +11 -33
- package/integrationExamples/gpt/{haloRtdProvider_example.html → hadronRtdProvider_example.html} +9 -9
- package/integrationExamples/gpt/idImportLibrary_example.html +2 -2
- package/integrationExamples/gpt/userId_example.html +2 -2
- package/integrationExamples/gpt/weboramaRtdProvider_example.html +154 -115
- package/integrationExamples/gpt/x-domain/creative.html +63 -29
- package/modules/.submodules.json +3 -0
- package/modules/adagioBidAdapter.js +1 -9
- package/modules/adagioBidAdapter.md +1 -1
- package/modules/adbookpspBidAdapter.js +29 -12
- package/modules/adhashBidAdapter.js +4 -4
- package/modules/adkernelBidAdapter.js +2 -2
- package/modules/adlooxAnalyticsAdapter.js +1 -1
- package/modules/adlooxRtdProvider.js +1 -1
- package/modules/adnowBidAdapter.js +1 -1
- package/modules/adnuntiusRtdProvider.js +96 -0
- package/modules/adnuntiusRtdProvider.md +41 -0
- package/modules/adomikAnalyticsAdapter.js +2 -2
- package/modules/adotBidAdapter.js +1 -1
- package/modules/adpod.js +14 -17
- package/modules/adrelevantisBidAdapter.js +2 -2
- package/modules/adtargetBidAdapter.js +1 -1
- package/modules/adtelligentBidAdapter.js +1 -1
- package/modules/advangelistsBidAdapter.js +2 -2
- package/modules/adxpremiumAnalyticsAdapter.js +1 -1
- package/modules/adyoulikeBidAdapter.js +1 -1
- package/modules/afpBidAdapter.js +1 -1
- package/modules/appnexusBidAdapter.js +16 -4
- package/modules/asealBidAdapter.js +58 -0
- package/modules/asealBidAdapter.md +52 -0
- package/modules/beachfrontBidAdapter.js +2 -2
- package/modules/betweenBidAdapter.js +1 -1
- package/modules/bidViewability.js +1 -1
- package/modules/bluebillywigBidAdapter.js +1 -1
- package/modules/brandmetricsRtdProvider.js +168 -0
- package/modules/brandmetricsRtdProvider.md +40 -0
- package/modules/bridgewellBidAdapter.js +1 -1
- package/modules/browsiRtdProvider.js +2 -2
- package/modules/cleanmedianetBidAdapter.js +1 -1
- package/modules/colossussspBidAdapter.js +12 -8
- package/modules/colossussspBidAdapter.md +15 -1
- package/modules/compassBidAdapter.js +1 -1
- package/modules/connectIdSystem.js +1 -1
- package/modules/consentManagement.js +2 -3
- package/modules/consumableBidAdapter.md +1 -1
- package/modules/conversantBidAdapter.js +7 -0
- package/modules/craftBidAdapter.js +2 -2
- package/modules/criteoBidAdapter.js +10 -1
- package/modules/currency.js +27 -5
- package/modules/cwireBidAdapter.js +1 -1
- package/modules/dailyhuntBidAdapter.js +1 -1
- package/modules/dchain.js +1 -1
- package/modules/displayioBidAdapter.js +157 -0
- package/modules/displayioBidAdapter.md +148 -0
- package/modules/dspxBidAdapter.js +69 -29
- package/modules/dspxBidAdapter.md +2 -1
- package/modules/e_volutionBidAdapter.js +158 -0
- package/modules/emx_digitalBidAdapter.js +2 -2
- package/modules/fluctBidAdapter.js +0 -1
- package/modules/gamoshiBidAdapter.js +1 -1
- package/modules/gdprEnforcement.js +2 -2
- package/modules/glomexBidAdapter.js +1 -1
- package/modules/gnetBidAdapter.js +3 -3
- package/modules/gnetBidAdapter.md +4 -4
- package/modules/goldbachBidAdapter.js +2 -2
- package/modules/gptPreAuction.js +1 -1
- package/modules/gridBidAdapter.js +15 -1
- package/modules/gumgumBidAdapter.js +57 -43
- package/modules/hadronIdSystem.js +96 -0
- package/modules/hadronIdSystem.md +35 -0
- package/modules/hadronRtdProvider.js +254 -0
- package/modules/hadronRtdProvider.md +126 -0
- package/modules/haloIdSystem.md +4 -35
- package/modules/haloRtdProvider.md +3 -126
- package/modules/hybridBidAdapter.js +1 -1
- package/modules/improvedigitalBidAdapter.js +6 -1
- package/modules/insticatorBidAdapter.js +1 -1
- package/modules/interactiveOffersBidAdapter.js +9 -6
- package/modules/intersectionRtdProvider.js +1 -1
- package/modules/ixBidAdapter.js +2 -2
- package/modules/jwplayerRtdProvider.js +72 -7
- package/modules/jwplayerRtdProvider.md +27 -11
- package/modules/kargoBidAdapter.js +2 -2
- package/modules/livewrappedBidAdapter.js +1 -1
- package/modules/lunamediahbBidAdapter.js +32 -4
- package/modules/malltvBidAdapter.js +7 -3
- package/modules/malltvBidAdapter.md +64 -51
- package/modules/mass.js +3 -5
- package/modules/mediakeysBidAdapter.js +2 -2
- package/modules/medianetAnalyticsAdapter.js +2 -2
- package/modules/medianetRtdProvider.js +1 -1
- package/modules/mediasquareBidAdapter.js +1 -0
- package/modules/nextMillenniumBidAdapter.js +1 -0
- package/modules/nextrollBidAdapter.js +1 -1
- package/modules/oguryBidAdapter.js +7 -14
- package/modules/onetagBidAdapter.js +1 -1
- package/modules/openwebBidAdapter.js +1 -1
- package/modules/openxAnalyticsAdapter.js +2 -2
- package/modules/openxBidAdapter.js +1 -1
- package/modules/parrableIdSystem.js +1 -1
- package/modules/permutiveRtdProvider.js +1 -1
- package/modules/pilotxBidAdapter.js +147 -0
- package/modules/pilotxBidAdapter.md +50 -0
- package/modules/pixfutureBidAdapter.js +2 -2
- package/modules/prebidServerBidAdapter/index.js +63 -41
- package/modules/priceFloors.js +15 -14
- package/modules/pubmaticBidAdapter.js +1 -1
- package/modules/quantcastBidAdapter.js +1 -1
- package/modules/reconciliationRtdProvider.js +1 -1
- package/modules/richaudienceBidAdapter.js +7 -2
- package/modules/riseBidAdapter.js +17 -6
- package/modules/roxotAnalyticsAdapter.js +1 -1
- package/modules/rtbhouseBidAdapter.js +1 -1
- package/modules/rtdModule/index.js +9 -11
- package/modules/rubiconAnalyticsAdapter.js +8 -2
- package/modules/rubiconBidAdapter.js +1 -1
- package/modules/saambaaBidAdapter.js +420 -420
- package/modules/seedingAllianceBidAdapter.js +3 -3
- package/modules/sharethroughBidAdapter.js +12 -17
- package/modules/sigmoidAnalyticsAdapter.js +1 -1
- package/modules/sirdataRtdProvider.js +1 -1
- package/modules/sizeMappingV2.js +2 -9
- package/modules/smarticoBidAdapter.js +1 -1
- package/modules/sortableAnalyticsAdapter.js +5 -4
- package/modules/sovrnAnalyticsAdapter.js +2 -2
- package/modules/sovrnBidAdapter.js +93 -18
- package/modules/sovrnBidAdapter.md +80 -2
- package/modules/sspBCBidAdapter.js +54 -21
- package/modules/synacormediaBidAdapter.js +32 -11
- package/modules/targetVideoBidAdapter.js +1 -1
- package/modules/telariaBidAdapter.js +22 -29
- package/modules/trustpidSystem.js +197 -0
- package/modules/trustpidSystem.md +45 -0
- package/modules/undertoneBidAdapter.js +17 -1
- package/modules/userId/eids.js +16 -1
- package/modules/userId/eids.md +10 -2
- package/modules/userId/index.js +2 -2
- package/modules/userId/userId.md +17 -2
- package/modules/ventesBidAdapter.js +1 -1
- package/modules/verizonMediaIdSystem.js +1 -1
- package/modules/vibrantmediaBidAdapter.js +220 -0
- package/modules/vibrantmediaBidAdapter.md +92 -0
- package/modules/viewability.js +177 -0
- package/modules/viewability.md +87 -0
- package/modules/viewdeosDXBidAdapter.js +1 -1
- package/modules/voxBidAdapter.js +1 -1
- package/modules/waardexBidAdapter.js +1 -1
- package/modules/weboramaRtdProvider.js +264 -34
- package/modules/weboramaRtdProvider.md +110 -40
- package/modules/widespaceBidAdapter.js +2 -2
- package/modules/winrBidAdapter.js +7 -7
- package/modules/yahoosspBidAdapter.js +3 -1
- package/modules/yieldlabBidAdapter.js +1 -1
- package/modules/yieldmoBidAdapter.js +2 -2
- package/modules/yieldoneBidAdapter.js +6 -0
- package/modules/yuktamediaAnalyticsAdapter.js +1 -1
- package/package.json +3 -1
- package/plugins/poly/arrayFrom.js +3 -0
- package/plugins/poly/find.js +3 -0
- package/plugins/poly/findIndex.js +3 -0
- package/plugins/poly/includes.js +3 -0
- package/plugins/poly/package.json +8 -0
- package/src/Renderer.js +1 -1
- package/src/adRendering.js +38 -0
- package/src/adapterManager.js +33 -28
- package/src/adapters/bidderFactory.js +13 -11
- package/src/adloader.js +3 -2
- package/src/auction.js +140 -117
- package/src/auctionIndex.js +85 -0
- package/src/auctionManager.js +4 -1
- package/src/bidderSettings.js +69 -0
- package/src/bidfactory.js +18 -6
- package/src/config.js +3 -4
- package/src/cpmBucketManager.js +1 -1
- package/src/native.js +30 -22
- package/src/prebid.js +4 -20
- package/src/secureCreatives.js +133 -49
- package/src/sizeMapping.js +1 -1
- package/src/storageManager.js +1 -1
- package/src/targeting.js +13 -4
- package/src/userSync.js +1 -1
- package/src/utils.js +16 -19
- package/src/video.js +11 -12
- package/src/videoCache.js +10 -9
- package/test/fixtures/fixtures.js +2 -1
- package/test/helpers/indexStub.js +28 -0
- package/test/helpers/syncPromise.js +71 -0
- package/test/spec/auctionmanager_spec.js +269 -90
- package/test/spec/config_spec.js +24 -1
- package/test/spec/e2e/longform/basic_w_bidderSettings.spec.js +1 -1
- package/test/spec/e2e/longform/basic_w_custom_adserver_translation.spec.js +1 -1
- package/test/spec/e2e/longform/basic_w_priceGran.spec.js +1 -1
- package/test/spec/e2e/longform/basic_w_requireExactDuration.spec.js +1 -1
- package/test/spec/e2e/longform/basic_wo_brandCategoryExclusion.spec.js +1 -1
- package/test/spec/e2e/longform/basic_wo_requireExactDuration.spec.js +1 -1
- package/test/spec/modules/adagioBidAdapter_spec.js +0 -10
- package/test/spec/modules/adbookpspBidAdapter_spec.js +17 -3
- package/test/spec/modules/adhashBidAdapter_spec.js +2 -2
- package/test/spec/modules/adnuntiusRtdProvider_spec.js +145 -0
- package/test/spec/modules/adpod_spec.js +91 -156
- package/test/spec/modules/afpBidAdapter_spec.js +1 -1
- package/test/spec/modules/appnexusBidAdapter_spec.js +27 -0
- package/test/spec/modules/asealBidAdapter_spec.js +144 -0
- package/test/spec/modules/brandmetricsRtdProvider_spec.js +191 -0
- package/test/spec/modules/colossussspBidAdapter_spec.js +5 -2
- package/test/spec/modules/conversantBidAdapter_spec.js +54 -2
- package/test/spec/modules/criteoBidAdapter_spec.js +21 -0
- package/test/spec/modules/currency_spec.js +36 -15
- package/test/spec/modules/deepintentDpesIdsystem_spec.js +1 -1
- package/test/spec/modules/displayioBidAdapter_spec.js +239 -0
- package/test/spec/modules/dspxBidAdapter_spec.js +20 -15
- package/test/spec/modules/e_volutionBidAdapter_spec.js +242 -0
- package/test/spec/modules/eids_spec.js +2 -2
- package/test/spec/modules/eplanningAnalyticsAdapter_spec.js +1 -1
- package/test/spec/modules/fintezaAnalyticsAdapter_spec.js +1 -1
- package/test/spec/modules/gnetBidAdapter_spec.js +6 -6
- package/test/spec/modules/gridBidAdapter_spec.js +18 -0
- package/test/spec/modules/gumgumBidAdapter_spec.js +49 -3
- package/test/spec/modules/hadronIdSystem_spec.js +57 -0
- package/test/spec/modules/hadronRtdProvider_spec.js +762 -0
- package/test/spec/modules/idxIdSystem_spec.js +1 -1
- package/test/spec/modules/improvedigitalBidAdapter_spec.js +19 -0
- package/test/spec/modules/jwplayerRtdProvider_spec.js +195 -2
- package/test/spec/modules/kargoBidAdapter_spec.js +1 -1
- package/test/spec/modules/lunamediahbBidAdapter_spec.js +27 -1
- package/test/spec/modules/mass_spec.js +2 -14
- package/test/spec/modules/mediakeysBidAdapter_spec.js +1 -1
- package/test/spec/modules/multibid_spec.js +1 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +63 -5
- package/test/spec/modules/onetagBidAdapter_spec.js +1 -1
- package/test/spec/modules/openxAnalyticsAdapter_spec.js +1 -1
- package/test/spec/modules/parrableIdSystem_spec.js +1 -1
- package/test/spec/modules/pilotxBidAdapter_spec.js +244 -0
- package/test/spec/modules/prebidServerBidAdapter_spec.js +43 -6
- package/test/spec/modules/priceFloors_spec.js +37 -24
- package/test/spec/modules/pubmaticBidAdapter_spec.js +40 -0
- package/test/spec/modules/realTimeDataModule_spec.js +51 -2
- package/test/spec/modules/riseBidAdapter_spec.js +30 -4
- package/test/spec/modules/rubiconAnalyticsAdapter_spec.js +61 -1
- package/test/spec/modules/rubiconBidAdapter_spec.js +1 -1
- package/test/spec/modules/sharethroughBidAdapter_spec.js +91 -6
- package/test/spec/modules/sortableAnalyticsAdapter_spec.js +2 -3
- package/test/spec/modules/sovrnBidAdapter_spec.js +413 -333
- package/test/spec/modules/sspBCBidAdapter_spec.js +7 -7
- package/test/spec/modules/stroeerCoreBidAdapter_spec.js +1 -1
- package/test/spec/modules/synacormediaBidAdapter_spec.js +70 -0
- package/test/spec/modules/telariaBidAdapter_spec.js +1 -3
- package/test/spec/modules/trustpidSystem_spec.js +232 -0
- package/test/spec/modules/undertoneBidAdapter_spec.js +55 -2
- package/test/spec/modules/userId_spec.js +40 -40
- package/test/spec/modules/vibrantmediaBidAdapter_spec.js +1237 -0
- package/test/spec/modules/viewability_spec.js +280 -0
- package/test/spec/modules/weboramaRtdProvider_spec.js +536 -20
- package/test/spec/modules/widespaceBidAdapter_spec.js +1 -1
- package/test/spec/modules/yahoosspBidAdapter_spec.js +10 -0
- package/test/spec/modules/yieldoneBidAdapter_spec.js +33 -0
- package/test/spec/modules/zeotapIdPlusIdSystem_spec.js +1 -1
- package/test/spec/native_spec.js +62 -40
- package/test/spec/sizeMapping_spec.js +1 -1
- package/test/spec/unit/core/adapterManager_spec.js +24 -2
- package/test/spec/unit/core/auctionIndex_spec.js +129 -0
- package/test/spec/unit/core/bidderFactory_spec.js +65 -12
- package/test/spec/unit/core/bidderSettings_spec.js +123 -0
- package/test/spec/unit/core/targeting_spec.js +93 -0
- package/test/spec/unit/pbjs_api_spec.js +81 -43
- package/test/spec/unit/secureCreatives_spec.js +143 -24
- package/test/spec/videoCache_spec.js +18 -19
- package/test/spec/video_spec.js +51 -61
- package/webpack.conf.js +1 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# Overview
|
|
2
2
|
|
|
3
3
|
```
|
|
4
|
-
Module Name: Gnet Bidder Adapter
|
|
4
|
+
Module Name: Gnet RTB Bidder Adapter
|
|
5
5
|
Module Type: Bidder Adapter
|
|
6
|
-
Maintainer:
|
|
6
|
+
Maintainer: bruno.bonanho@grumft.com
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
# Description
|
|
10
10
|
|
|
11
|
-
Connect to Gnet
|
|
11
|
+
Connect to Gnet RTB exchange for bids.
|
|
12
12
|
|
|
13
13
|
# Test Parameters
|
|
14
14
|
```
|
|
@@ -24,7 +24,7 @@ Connect to Gnet Project exchange for bids.
|
|
|
24
24
|
{
|
|
25
25
|
bidder: 'gnet',
|
|
26
26
|
params: {
|
|
27
|
-
websiteId: '
|
|
27
|
+
websiteId: '1', adunitId: '1'
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
]
|
|
@@ -27,8 +27,8 @@ import { config } from '../src/config.js';
|
|
|
27
27
|
import { registerBidder, getIabSubCategory } from '../src/adapters/bidderFactory.js';
|
|
28
28
|
import { BANNER, NATIVE, VIDEO, ADPOD } from '../src/mediaTypes.js';
|
|
29
29
|
import { auctionManager } from '../src/auctionManager.js';
|
|
30
|
-
import find from '
|
|
31
|
-
import includes from '
|
|
30
|
+
import find from 'prebidjs-polyfill/find.js';
|
|
31
|
+
import includes from 'prebidjs-polyfill/includes.js';
|
|
32
32
|
import { OUTSTREAM, INSTREAM } from '../src/video.js';
|
|
33
33
|
|
|
34
34
|
const BIDDER_CODE = 'goldbach';
|
package/modules/gptPreAuction.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isGptPubadsDefined, isAdUnitCodeMatchingSlot, deepAccess, pick, logInfo } from '../src/utils.js';
|
|
2
2
|
import { config } from '../src/config.js';
|
|
3
3
|
import { getHook } from '../src/hook.js';
|
|
4
|
-
import find from '
|
|
4
|
+
import find from 'prebidjs-polyfill/find.js';
|
|
5
5
|
|
|
6
6
|
const MODULE_NAME = 'GPT Pre-Auction';
|
|
7
7
|
export let _currentConfig = {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isEmpty, deepAccess, logError, parseGPTSingleSizeArrayToRtbSize, generateUUID, logWarn } from '../src/utils.js';
|
|
1
|
+
import { isEmpty, deepAccess, logError, parseGPTSingleSizeArrayToRtbSize, generateUUID, mergeDeep, logWarn } from '../src/utils.js';
|
|
2
2
|
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import { Renderer } from '../src/Renderer.js';
|
|
4
4
|
import { VIDEO, BANNER } from '../src/mediaTypes.js';
|
|
@@ -173,10 +173,24 @@ export const spec = {
|
|
|
173
173
|
};
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
+
const ortb2UserData = config.getConfig('ortb2.user.data');
|
|
177
|
+
if (ortb2UserData && ortb2UserData.length) {
|
|
178
|
+
if (!user) {
|
|
179
|
+
user = { data: [] };
|
|
180
|
+
}
|
|
181
|
+
user = mergeDeep(user, { data: ortb2UserData });
|
|
182
|
+
}
|
|
183
|
+
|
|
176
184
|
if (gdprConsent && gdprConsent.consentString) {
|
|
177
185
|
userExt = {consent: gdprConsent.consentString};
|
|
178
186
|
}
|
|
179
187
|
|
|
188
|
+
const ortb2UserExtDevice = config.getConfig('ortb2.user.ext.device');
|
|
189
|
+
if (ortb2UserExtDevice) {
|
|
190
|
+
userExt = userExt || {};
|
|
191
|
+
userExt.device = { ...ortb2UserExtDevice };
|
|
192
|
+
}
|
|
193
|
+
|
|
180
194
|
if (userIdAsEids && userIdAsEids.length) {
|
|
181
195
|
userExt = userExt || {};
|
|
182
196
|
userExt.eids = [...userIdAsEids];
|
|
@@ -3,7 +3,7 @@ import { _each, deepAccess, logError, logWarn, parseSizesInput } from '../src/ut
|
|
|
3
3
|
|
|
4
4
|
import { config } from '../src/config.js'
|
|
5
5
|
import { getStorageManager } from '../src/storageManager.js';
|
|
6
|
-
import includes from '
|
|
6
|
+
import includes from 'prebidjs-polyfill/includes.js';
|
|
7
7
|
import { registerBidder } from '../src/adapters/bidderFactory.js'
|
|
8
8
|
|
|
9
9
|
const storage = getStorageManager();
|
|
@@ -17,32 +17,48 @@ const TIME_TO_LIVE = 60
|
|
|
17
17
|
const DELAY_REQUEST_TIME = 1800000; // setting to 30 mins
|
|
18
18
|
|
|
19
19
|
let invalidRequestIds = {};
|
|
20
|
-
let browserParams = {};
|
|
21
20
|
let pageViewId = null;
|
|
22
21
|
|
|
23
22
|
// TODO: potential 0 values for browserParams sent to ad server
|
|
24
23
|
function _getBrowserParams(topWindowUrl) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
let
|
|
28
|
-
let
|
|
29
|
-
let
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
24
|
+
const paramRegex = paramName => new RegExp(`[?#&](${paramName}=(.*?))($|&)`, 'i');
|
|
25
|
+
|
|
26
|
+
let browserParams = {};
|
|
27
|
+
let topWindow;
|
|
28
|
+
let topScreen;
|
|
29
|
+
let topUrl;
|
|
30
|
+
let ggad;
|
|
31
|
+
let ggdeal;
|
|
32
|
+
let ns;
|
|
33
|
+
|
|
34
|
+
function getNetworkSpeed () {
|
|
35
|
+
const connection = window.navigator && (window.navigator.connection || window.navigator.mozConnection || window.navigator.webkitConnection);
|
|
36
|
+
const Mbps = connection && (connection.downlink || connection.bandwidth);
|
|
37
|
+
return Mbps ? Math.round(Mbps * 1024) : null;
|
|
34
38
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
|
|
40
|
+
function getOgURL () {
|
|
41
|
+
let ogURL = '';
|
|
42
|
+
const ogURLSelector = "meta[property='og:url']";
|
|
43
|
+
const head = document && document.getElementsByTagName('head')[0];
|
|
44
|
+
const ogURLElement = head.querySelector(ogURLSelector);
|
|
45
|
+
ogURL = ogURLElement ? ogURLElement.content : null;
|
|
46
|
+
return ogURL;
|
|
42
47
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
48
|
+
|
|
49
|
+
function stripGGParams (url) {
|
|
50
|
+
const params = [
|
|
51
|
+
'ggad',
|
|
52
|
+
'ggdeal'
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
return params.reduce((result, param) => {
|
|
56
|
+
const matches = url.match(paramRegex(param));
|
|
57
|
+
if (!matches) return result;
|
|
58
|
+
matches[1] && (result = result.replace(matches[1], ''));
|
|
59
|
+
matches[3] && (result = result.replace(matches[3], ''));
|
|
60
|
+
return result;
|
|
61
|
+
}, url);
|
|
46
62
|
}
|
|
47
63
|
|
|
48
64
|
try {
|
|
@@ -51,7 +67,7 @@ function _getBrowserParams(topWindowUrl) {
|
|
|
51
67
|
topUrl = topWindowUrl || '';
|
|
52
68
|
} catch (error) {
|
|
53
69
|
logError(error);
|
|
54
|
-
return browserParams
|
|
70
|
+
return browserParams;
|
|
55
71
|
}
|
|
56
72
|
|
|
57
73
|
browserParams = {
|
|
@@ -59,23 +75,25 @@ function _getBrowserParams(topWindowUrl) {
|
|
|
59
75
|
vh: topWindow.innerHeight,
|
|
60
76
|
sw: topScreen.width,
|
|
61
77
|
sh: topScreen.height,
|
|
62
|
-
pu: topUrl,
|
|
78
|
+
pu: stripGGParams(topUrl),
|
|
63
79
|
ce: storage.cookiesAreEnabled(),
|
|
64
80
|
dpr: topWindow.devicePixelRatio || 1,
|
|
65
81
|
jcsi: JSON.stringify(JCSI),
|
|
66
82
|
ogu: getOgURL()
|
|
67
|
-
}
|
|
83
|
+
};
|
|
68
84
|
|
|
69
|
-
ns = getNetworkSpeed()
|
|
85
|
+
ns = getNetworkSpeed();
|
|
70
86
|
if (ns) {
|
|
71
|
-
browserParams.ns = ns
|
|
87
|
+
browserParams.ns = ns;
|
|
72
88
|
}
|
|
73
89
|
|
|
74
|
-
ggad = (topUrl.match(
|
|
75
|
-
if (ggad)
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
90
|
+
ggad = (topUrl.match(paramRegex('ggad')) || [0, 0, 0])[2];
|
|
91
|
+
if (ggad) browserParams[isNaN(ggad) ? 'eAdBuyId' : 'adBuyId'] = ggad;
|
|
92
|
+
|
|
93
|
+
ggdeal = (topUrl.match(paramRegex('ggdeal')) || [0, 0, 0])[2];
|
|
94
|
+
if (ggdeal) browserParams.ggdeal = ggdeal;
|
|
95
|
+
|
|
96
|
+
return browserParams;
|
|
79
97
|
}
|
|
80
98
|
|
|
81
99
|
function getWrapperCode(wrapper, data) {
|
|
@@ -291,17 +309,17 @@ function buildRequests(validBidRequests, bidderRequest) {
|
|
|
291
309
|
} = bidRequest;
|
|
292
310
|
const { currency, floor } = _getFloor(mediaTypes, params.bidfloor, bidRequest);
|
|
293
311
|
const eids = getEids(userId);
|
|
312
|
+
const gpid = deepAccess(ortb2Imp, 'ext.data.pbadslot') || deepAccess(ortb2Imp, 'ext.data.adserver.adslot');
|
|
294
313
|
let sizes = [1, 1];
|
|
295
314
|
let data = {};
|
|
296
|
-
let gpid = '';
|
|
297
315
|
|
|
298
316
|
const date = new Date();
|
|
299
317
|
const lt = date.getTime();
|
|
300
318
|
const to = date.getTimezoneOffset();
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
319
|
+
|
|
320
|
+
// ADTS-174 Removed unnecessary checks to fix failing test
|
|
321
|
+
data.lt = lt;
|
|
322
|
+
data.to = to;
|
|
305
323
|
|
|
306
324
|
// ADTS-169 add adUnitCode to requests
|
|
307
325
|
if (adUnitCode) data.aun = adUnitCode
|
|
@@ -309,12 +327,8 @@ function buildRequests(validBidRequests, bidderRequest) {
|
|
|
309
327
|
// ADTS-134 Retrieve ID envelopes
|
|
310
328
|
for (const eid in eids) data[eid] = eids[eid];
|
|
311
329
|
|
|
312
|
-
// ADJS-1024 & ADSS-1297
|
|
313
|
-
|
|
314
|
-
gpid = deepAccess(ortb2Imp, 'ext.data.pbadslot')
|
|
315
|
-
} else if (deepAccess(ortb2Imp, 'ext.data.adserver.name')) {
|
|
316
|
-
gpid = ortb2Imp.ext.data.adserver.adslot
|
|
317
|
-
}
|
|
330
|
+
// ADJS-1024 & ADSS-1297 & ADTS-175
|
|
331
|
+
gpid && (data.gpid = gpid);
|
|
318
332
|
|
|
319
333
|
if (mediaTypes.banner) {
|
|
320
334
|
sizes = mediaTypes.banner.sizes;
|
|
@@ -384,7 +398,7 @@ function buildRequests(validBidRequests, bidderRequest) {
|
|
|
384
398
|
sizes,
|
|
385
399
|
url: BID_ENDPOINT,
|
|
386
400
|
method: 'GET',
|
|
387
|
-
data: Object.assign(data, _getBrowserParams(topWindowUrl), _getDigiTrustQueryParams(userId)
|
|
401
|
+
data: Object.assign(data, _getBrowserParams(topWindowUrl), _getDigiTrustQueryParams(userId))
|
|
388
402
|
})
|
|
389
403
|
});
|
|
390
404
|
return bids;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module adds HadronID to the User ID module
|
|
3
|
+
* The {@link module:modules/userId} module is required
|
|
4
|
+
* @module modules/hadronIdSystem
|
|
5
|
+
* @requires module:modules/userId
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import {ajax} from '../src/ajax.js';
|
|
9
|
+
import {getStorageManager} from '../src/storageManager.js';
|
|
10
|
+
import {submodule} from '../src/hook.js';
|
|
11
|
+
import { isFn, isStr, isPlainObject, logError } from '../src/utils.js';
|
|
12
|
+
|
|
13
|
+
const MODULE_NAME = 'hadronId';
|
|
14
|
+
const AU_GVLID = 561;
|
|
15
|
+
|
|
16
|
+
export const storage = getStorageManager(AU_GVLID, 'hadron');
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Param or default.
|
|
20
|
+
* @param {String} param
|
|
21
|
+
* @param {String} defaultVal
|
|
22
|
+
*/
|
|
23
|
+
function paramOrDefault(param, defaultVal, arg) {
|
|
24
|
+
if (isFn(param)) {
|
|
25
|
+
return param(arg);
|
|
26
|
+
} else if (isStr(param)) {
|
|
27
|
+
return param;
|
|
28
|
+
}
|
|
29
|
+
return defaultVal;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** @type {Submodule} */
|
|
33
|
+
export const hadronIdSubmodule = {
|
|
34
|
+
/**
|
|
35
|
+
* used to link submodule with config
|
|
36
|
+
* @type {string}
|
|
37
|
+
*/
|
|
38
|
+
name: MODULE_NAME,
|
|
39
|
+
/**
|
|
40
|
+
* decode the stored id value for passing to bid requests
|
|
41
|
+
* @function
|
|
42
|
+
* @param {{value:string}} value
|
|
43
|
+
* @returns {{hadronId:Object}}
|
|
44
|
+
*/
|
|
45
|
+
decode(value) {
|
|
46
|
+
let hadronId = storage.getDataFromLocalStorage('auHadronId');
|
|
47
|
+
if (isStr(hadronId)) {
|
|
48
|
+
return {hadronId: hadronId};
|
|
49
|
+
}
|
|
50
|
+
return (value && typeof value['hadronId'] === 'string') ? { 'hadronId': value['hadronId'] } : undefined;
|
|
51
|
+
},
|
|
52
|
+
/**
|
|
53
|
+
* performs action to obtain id and return a value in the callback's response argument
|
|
54
|
+
* @function
|
|
55
|
+
* @param {SubmoduleConfig} [config]
|
|
56
|
+
* @returns {IdResponse|undefined}
|
|
57
|
+
*/
|
|
58
|
+
getId(config) {
|
|
59
|
+
if (!isPlainObject(config.params)) {
|
|
60
|
+
config.params = {};
|
|
61
|
+
}
|
|
62
|
+
const url = paramOrDefault(config.params.url,
|
|
63
|
+
`https://id.hadron.ad.gt/api/v1/pbhid`,
|
|
64
|
+
config.params.urlArg);
|
|
65
|
+
|
|
66
|
+
const resp = function (callback) {
|
|
67
|
+
let hadronId = storage.getDataFromLocalStorage('auHadronId');
|
|
68
|
+
if (isStr(hadronId)) {
|
|
69
|
+
const responseObj = {hadronId: hadronId};
|
|
70
|
+
callback(responseObj);
|
|
71
|
+
} else {
|
|
72
|
+
const callbacks = {
|
|
73
|
+
success: response => {
|
|
74
|
+
let responseObj;
|
|
75
|
+
if (response) {
|
|
76
|
+
try {
|
|
77
|
+
responseObj = JSON.parse(response);
|
|
78
|
+
} catch (error) {
|
|
79
|
+
logError(error);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
callback(responseObj);
|
|
83
|
+
},
|
|
84
|
+
error: error => {
|
|
85
|
+
logError(`${MODULE_NAME}: ID fetch encountered an error`, error);
|
|
86
|
+
callback();
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
ajax(url, callbacks, undefined, {method: 'GET'});
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
return {callback: resp};
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
submodule('userId', hadronIdSubmodule);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
## Audigent Hadron User ID Submodule
|
|
2
|
+
|
|
3
|
+
Audigent Hadron ID Module. For assistance setting up your module please contact us at [prebid@audigent.com](prebid@audigent.com).
|
|
4
|
+
|
|
5
|
+
### Prebid Params
|
|
6
|
+
|
|
7
|
+
Individual params may be set for the Audigent Hadron ID Submodule. At least one identifier must be set in the params.
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
pbjs.setConfig({
|
|
11
|
+
usersync: {
|
|
12
|
+
userIds: [{
|
|
13
|
+
name: 'hadronId',
|
|
14
|
+
storage: {
|
|
15
|
+
name: 'hadronId',
|
|
16
|
+
type: 'html5'
|
|
17
|
+
}
|
|
18
|
+
}]
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
```
|
|
22
|
+
## Parameter Descriptions for the `usersync` Configuration Section
|
|
23
|
+
The below parameters apply only to the HadronID User ID Module integration.
|
|
24
|
+
|
|
25
|
+
| Param under usersync.userIds[] | Scope | Type | Description | Example |
|
|
26
|
+
| --- | --- | --- | --- | --- |
|
|
27
|
+
| name | Required | String | ID value for the HadronID module - `"hadronId"` | `"hadronId"` |
|
|
28
|
+
| storage | Required | Object | The publisher must specify the local storage in which to store the results of the call to get the user ID. This can be either cookie or HTML5 storage. | |
|
|
29
|
+
| storage.type | Required | String | This is where the results of the user ID will be stored. The recommended method is `localStorage` by specifying `html5`. | `"html5"` |
|
|
30
|
+
| storage.name | Required | String | The name of the cookie or html5 local storage where the user ID will be stored. | `"hadronid"` |
|
|
31
|
+
| storage.expires | Optional | Integer | How long (in days) the user ID information will be stored. | `365` |
|
|
32
|
+
| value | Optional | Object | Used only if the page has a separate mechanism for storing the Hadron ID. The value is an object containing the values to be sent to the adapters. In this scenario, no URL is called and nothing is added to local storage | `{"hadronId": "eb33b0cb-8d35-4722-b9c0-1a31d4064888"}` |
|
|
33
|
+
| params | Optional | Object | Used to store params for the id system |
|
|
34
|
+
| params.url | Optional | String | Set an alternate GET url for HadronId with this parameter |
|
|
35
|
+
| params.urlArg | Optional | Object | Optional url parameter for params.url |
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module adds the Audigent Hadron provider to the real time data module
|
|
3
|
+
* The {@link module:modules/realTimeData} module is required
|
|
4
|
+
* The module will fetch real-time data from Audigent
|
|
5
|
+
* @module modules/hadronRtdProvider
|
|
6
|
+
* @requires module:modules/realTimeData
|
|
7
|
+
*/
|
|
8
|
+
import {ajax} from '../src/ajax.js';
|
|
9
|
+
import {config} from '../src/config.js';
|
|
10
|
+
import {getGlobal} from '../src/prebidGlobal.js';
|
|
11
|
+
import {getStorageManager} from '../src/storageManager.js';
|
|
12
|
+
import {submodule} from '../src/hook.js';
|
|
13
|
+
import {isFn, isStr, isArray, deepEqual, isPlainObject, logError} from '../src/utils.js';
|
|
14
|
+
|
|
15
|
+
const MODULE_NAME = 'realTimeData';
|
|
16
|
+
const SUBMODULE_NAME = 'hadron';
|
|
17
|
+
const AU_GVLID = 561;
|
|
18
|
+
|
|
19
|
+
export const HALOID_LOCAL_NAME = 'auHadronId';
|
|
20
|
+
export const RTD_LOCAL_NAME = 'auHadronRtd';
|
|
21
|
+
export const storage = getStorageManager(AU_GVLID, SUBMODULE_NAME);
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Deep set an object unless value present.
|
|
25
|
+
* @param {Object} obj
|
|
26
|
+
* @param {String} path
|
|
27
|
+
* @param {Object} val
|
|
28
|
+
*/
|
|
29
|
+
function set(obj, path, val) {
|
|
30
|
+
const keys = path.split('.');
|
|
31
|
+
const lastKey = keys.pop();
|
|
32
|
+
const lastObj = keys.reduce((obj, key) => obj[key] = obj[key] || {}, obj);
|
|
33
|
+
lastObj[lastKey] = lastObj[lastKey] || val;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Deep object merging with array deduplication.
|
|
38
|
+
* @param {Object} target
|
|
39
|
+
* @param {Object} sources
|
|
40
|
+
*/
|
|
41
|
+
function mergeDeep(target, ...sources) {
|
|
42
|
+
if (!sources.length) return target;
|
|
43
|
+
const source = sources.shift();
|
|
44
|
+
|
|
45
|
+
if (isPlainObject(target) && isPlainObject(source)) {
|
|
46
|
+
for (const key in source) {
|
|
47
|
+
if (isPlainObject(source[key])) {
|
|
48
|
+
if (!target[key]) Object.assign(target, { [key]: {} });
|
|
49
|
+
mergeDeep(target[key], source[key]);
|
|
50
|
+
} else if (isArray(source[key])) {
|
|
51
|
+
if (!target[key]) {
|
|
52
|
+
Object.assign(target, { [key]: source[key] });
|
|
53
|
+
} else if (isArray(target[key])) {
|
|
54
|
+
source[key].forEach(obj => {
|
|
55
|
+
let e = 1;
|
|
56
|
+
for (let i = 0; i < target[key].length; i++) {
|
|
57
|
+
if (deepEqual(target[key][i], obj)) {
|
|
58
|
+
e = 0;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (e) {
|
|
63
|
+
target[key].push(obj);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
} else {
|
|
68
|
+
Object.assign(target, { [key]: source[key] });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return mergeDeep(target, ...sources);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Lazy merge objects.
|
|
78
|
+
* @param {Object} target
|
|
79
|
+
* @param {Object} source
|
|
80
|
+
*/
|
|
81
|
+
function mergeLazy(target, source) {
|
|
82
|
+
if (!isPlainObject(target)) {
|
|
83
|
+
target = {};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (!isPlainObject(source)) {
|
|
87
|
+
source = {};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return mergeDeep(target, source);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Param or default.
|
|
95
|
+
* @param {String} param
|
|
96
|
+
* @param {String} defaultVal
|
|
97
|
+
*/
|
|
98
|
+
function paramOrDefault(param, defaultVal, arg) {
|
|
99
|
+
if (isFn(param)) {
|
|
100
|
+
return param(arg);
|
|
101
|
+
} else if (isStr(param)) {
|
|
102
|
+
return param;
|
|
103
|
+
}
|
|
104
|
+
return defaultVal;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Add real-time data & merge segments.
|
|
109
|
+
* @param {Object} bidConfig
|
|
110
|
+
* @param {Object} rtd
|
|
111
|
+
* @param {Object} rtdConfig
|
|
112
|
+
*/
|
|
113
|
+
export function addRealTimeData(bidConfig, rtd, rtdConfig) {
|
|
114
|
+
if (rtdConfig.params && rtdConfig.params.handleRtd) {
|
|
115
|
+
rtdConfig.params.handleRtd(bidConfig, rtd, rtdConfig, config);
|
|
116
|
+
} else {
|
|
117
|
+
if (isPlainObject(rtd.ortb2)) {
|
|
118
|
+
let ortb2 = config.getConfig('ortb2') || {};
|
|
119
|
+
config.setConfig({ortb2: mergeLazy(ortb2, rtd.ortb2)});
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (isPlainObject(rtd.ortb2b)) {
|
|
123
|
+
let bidderConfig = config.getBidderConfig();
|
|
124
|
+
|
|
125
|
+
Object.keys(rtd.ortb2b).forEach(bidder => {
|
|
126
|
+
let rtdOptions = rtd.ortb2b[bidder] || {};
|
|
127
|
+
|
|
128
|
+
let bidderOptions = {};
|
|
129
|
+
if (isPlainObject(bidderConfig[bidder])) {
|
|
130
|
+
bidderOptions = bidderConfig[bidder];
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
config.setBidderConfig({
|
|
134
|
+
bidders: [bidder],
|
|
135
|
+
config: mergeLazy(bidderOptions, rtdOptions)
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Real-time data retrieval from Audigent
|
|
144
|
+
* @param {Object} reqBidsConfigObj
|
|
145
|
+
* @param {function} onDone
|
|
146
|
+
* @param {Object} rtdConfig
|
|
147
|
+
* @param {Object} userConsent
|
|
148
|
+
*/
|
|
149
|
+
export function getRealTimeData(bidConfig, onDone, rtdConfig, userConsent) {
|
|
150
|
+
if (rtdConfig && isPlainObject(rtdConfig.params) && rtdConfig.params.segmentCache) {
|
|
151
|
+
let jsonData = storage.getDataFromLocalStorage(RTD_LOCAL_NAME);
|
|
152
|
+
|
|
153
|
+
if (jsonData) {
|
|
154
|
+
let data = JSON.parse(jsonData);
|
|
155
|
+
|
|
156
|
+
if (data.rtd) {
|
|
157
|
+
addRealTimeData(bidConfig, data.rtd, rtdConfig);
|
|
158
|
+
onDone();
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const userIds = (getGlobal()).getUserIds();
|
|
165
|
+
|
|
166
|
+
let hadronId = storage.getDataFromLocalStorage(HALOID_LOCAL_NAME);
|
|
167
|
+
if (isStr(hadronId)) {
|
|
168
|
+
(getGlobal()).refreshUserIds({submoduleNames: 'hadronId'});
|
|
169
|
+
userIds.hadronId = hadronId;
|
|
170
|
+
getRealTimeDataAsync(bidConfig, onDone, rtdConfig, userConsent, userIds);
|
|
171
|
+
} else {
|
|
172
|
+
var script = document.createElement('script');
|
|
173
|
+
script.type = 'text/javascript';
|
|
174
|
+
|
|
175
|
+
window.pubHadronCb = (hadronId) => {
|
|
176
|
+
userIds.hadronId = hadronId;
|
|
177
|
+
getRealTimeDataAsync(bidConfig, onDone, rtdConfig, userConsent, userIds);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const hadronIdUrl = rtdConfig.params && rtdConfig.params.hadronIdUrl;
|
|
181
|
+
script.src = paramOrDefault(hadronIdUrl, 'https://id.hadron.ad.gt/api/v1/hadronid', userIds);
|
|
182
|
+
document.getElementsByTagName('head')[0].appendChild(script);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Async rtd retrieval from Audigent
|
|
188
|
+
* @param {function} onDone
|
|
189
|
+
* @param {Object} rtdConfig
|
|
190
|
+
* @param {Object} userConsent
|
|
191
|
+
* @param {Object} userIds
|
|
192
|
+
*/
|
|
193
|
+
export function getRealTimeDataAsync(bidConfig, onDone, rtdConfig, userConsent, userIds) {
|
|
194
|
+
let reqParams = {};
|
|
195
|
+
|
|
196
|
+
if (isPlainObject(rtdConfig)) {
|
|
197
|
+
set(rtdConfig, 'params.requestParams.ortb2', config.getConfig('ortb2'));
|
|
198
|
+
reqParams = rtdConfig.params.requestParams;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
if (isPlainObject(window.pubHadronPm)) {
|
|
202
|
+
reqParams.pubHadronPm = window.pubHadronPm;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
const url = `https://seg.hadron.ad.gt/api/v1/rtd`;
|
|
206
|
+
ajax(url, {
|
|
207
|
+
success: function (response, req) {
|
|
208
|
+
if (req.status === 200) {
|
|
209
|
+
try {
|
|
210
|
+
const data = JSON.parse(response);
|
|
211
|
+
if (data && data.rtd) {
|
|
212
|
+
addRealTimeData(bidConfig, data.rtd, rtdConfig);
|
|
213
|
+
onDone();
|
|
214
|
+
storage.setDataInLocalStorage(RTD_LOCAL_NAME, JSON.stringify(data));
|
|
215
|
+
} else {
|
|
216
|
+
onDone();
|
|
217
|
+
}
|
|
218
|
+
} catch (err) {
|
|
219
|
+
logError('unable to parse audigent segment data');
|
|
220
|
+
onDone();
|
|
221
|
+
}
|
|
222
|
+
} else if (req.status === 204) {
|
|
223
|
+
// unrecognized partner config
|
|
224
|
+
onDone();
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
error: function () {
|
|
228
|
+
onDone();
|
|
229
|
+
logError('unable to get audigent segment data');
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
JSON.stringify({'userIds': userIds, 'config': reqParams}),
|
|
233
|
+
{contentType: 'application/json'}
|
|
234
|
+
);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Module init
|
|
239
|
+
* @param {Object} provider
|
|
240
|
+
* @param {Objkect} userConsent
|
|
241
|
+
* @return {boolean}
|
|
242
|
+
*/
|
|
243
|
+
function init(provider, userConsent) {
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/** @type {RtdSubmodule} */
|
|
248
|
+
export const hadronSubmodule = {
|
|
249
|
+
name: SUBMODULE_NAME,
|
|
250
|
+
getBidRequestData: getRealTimeData,
|
|
251
|
+
init: init
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
submodule(MODULE_NAME, hadronSubmodule);
|