prebid.js 7.44.0 → 7.46.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/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/acuityAdsBidAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/admaticBidAdapter.js +1 -1
- package/dist/adnuntiusBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/appushBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/beyondmediaBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/bidwatchAnalyticsAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/braveBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/brightcomBidAdapter.js +1 -1
- package/dist/brightcomSSPBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/coinzillaBidAdapter.js +1 -1
- package/dist/compassBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectIdSystem.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/contentexchangeBidAdapter.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/cwireBidAdapter.js +1 -1
- package/dist/debugging-standalone.js +1 -1
- package/dist/dependencies.json +15 -0
- package/dist/domainOverrideToRootDomain.js +1 -0
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/eskimiBidAdapter.js +1 -0
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/globalsunBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/growthCodeIdSystem.js +1 -1
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/iqzoneBidAdapter.js +1 -1
- package/dist/ivsBidAdapter.js +1 -0
- package/dist/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/jwplayerVideoProvider.js +1 -1
- package/dist/kargoBidAdapter.js +1 -1
- package/dist/koblerBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/kueezRtbBidAdapter.js +1 -1
- package/dist/kulturemediaBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/luponmediaBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mathildeadsBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/medianetBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/minutemediaplusBidAdapter.js +1 -1
- package/dist/nativoBidAdapter.js +1 -1
- package/dist/neuwoRtdProvider.js +1 -1
- package/dist/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +165 -162
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/onomagicBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/openxBidAdapter.js +1 -1
- package/dist/openxOrtbBidAdapter.js +1 -1
- package/dist/operaadsBidAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/ortbConverter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/pairIdSystem.js +1 -0
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pubxBidAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.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/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smarthubBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.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/stvBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/truereachBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/uid2IdSystem.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/videoheroesBidAdapter.js +1 -1
- package/dist/vidoomyBidAdapter.js +1 -1
- package/dist/visiblemeasuresBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vrtcalBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/yieldoneBidAdapter.js +1 -1
- package/integrationExamples/gpt/fledge_example.html +103 -0
- package/integrationExamples/gpt/prebidServer_fledge_example.html +111 -0
- package/libraries/domainOverrideToRootDomain/index.js +39 -0
- package/libraries/ortbConverter/processors/video.js +1 -0
- package/modules/acuityAdsBidAdapter.js +1 -1
- package/modules/admaticBidAdapter.js +7 -2
- package/modules/adnuntiusBidAdapter.js +3 -1
- package/modules/amxBidAdapter.js +1 -1
- package/modules/amxIdSystem.js +23 -20
- package/modules/amxIdSystem.md +7 -7
- package/modules/appnexusBidAdapter.js +108 -102
- package/modules/appushBidAdapter.js +1 -1
- package/modules/beyondmediaBidAdapter.js +1 -1
- package/modules/bidwatchAnalyticsAdapter.js +2 -0
- package/modules/braveBidAdapter.js +1 -1
- package/modules/brightcomBidAdapter.js +1 -1
- package/modules/brightcomSSPBidAdapter.js +1 -1
- package/modules/coinzillaBidAdapter.js +1 -2
- package/modules/compassBidAdapter.js +1 -1
- package/modules/connectIdSystem.js +96 -21
- package/modules/connectIdSystem.md +6 -5
- package/modules/contentexchangeBidAdapter.js +1 -1
- package/modules/conversantBidAdapter.js +3 -0
- package/modules/criteoBidAdapter.js +5 -1
- package/modules/eskimiBidAdapter.js +72 -0
- package/modules/eskimiBidAdapter.md +34 -0
- package/modules/freewheel-sspBidAdapter.js +8 -0
- package/modules/glimpseBidAdapter.js +1 -2
- package/modules/globalsunBidAdapter.js +1 -1
- package/modules/gridBidAdapter.js +43 -20
- package/modules/growthCodeIdSystem.js +18 -15
- package/modules/gumgumBidAdapter.js +1 -1
- package/modules/iqzoneBidAdapter.js +1 -1
- package/modules/ivsBidAdapter.js +85 -0
- package/modules/ivsBidAdapter.md +34 -0
- package/modules/ixBidAdapter.js +72 -105
- package/modules/jwplayerVideoProvider.js +25 -32
- package/modules/kargoBidAdapter.js +473 -246
- package/modules/koblerBidAdapter.js +1 -2
- package/modules/kueezBidAdapter.js +1 -1
- package/modules/kueezRtbBidAdapter.js +16 -4
- package/modules/liveIntentIdSystem.js +8 -0
- package/modules/luponmediaBidAdapter.js +1 -1
- package/modules/magniteAnalyticsAdapter.js +76 -3
- package/modules/mathildeadsBidAdapter.js +1 -1
- package/modules/medianetBidAdapter.js +1 -1
- package/modules/mediasquareBidAdapter.js +2 -1
- package/modules/mgidBidAdapter.js +178 -26
- package/modules/minutemediaBidAdapter.js +1 -1
- package/modules/minutemediaplusBidAdapter.js +16 -4
- package/modules/nativoBidAdapter.js +110 -21
- package/modules/neuwoRtdProvider.js +0 -2
- package/modules/oguryBidAdapter.js +3 -2
- package/modules/onomagicBidAdapter.js +1 -2
- package/modules/openxBidAdapter.js +192 -563
- package/modules/openxBidAdapter.md +22 -20
- package/modules/openxOrtbBidAdapter.js +13 -11
- package/modules/openxOrtbBidAdapter.md +5 -3
- package/modules/operaadsBidAdapter.js +1 -1
- package/modules/pairIdSystem.js +79 -0
- package/modules/pubmaticBidAdapter.js +13 -10
- package/modules/pubxBidAdapter.js +5 -2
- package/modules/riseBidAdapter.js +1 -1
- package/modules/sharedIdSystem.js +4 -27
- package/modules/sharethroughBidAdapter.js +1 -1
- package/modules/shinezBidAdapter.js +1 -1
- package/modules/smarthubBidAdapter.js +1 -1
- package/modules/synacormediaBidAdapter.js +1 -3
- package/modules/truereachBidAdapter.js +1 -2
- package/modules/userId/eids.js +24 -0
- package/modules/userId/eids.md +16 -0
- package/modules/videoheroesBidAdapter.js +1 -1
- package/modules/vidoomyBidAdapter.js +33 -4
- package/modules/visiblemeasuresBidAdapter.js +1 -1
- package/modules/vrtcalBidAdapter.js +1 -1
- package/modules/yieldmoBidAdapter.js +15 -5
- package/modules/yieldoneBidAdapter.js +1 -1
- package/package.json +1 -1
- package/src/Renderer.js +2 -1
- package/src/config.js +78 -127
- package/src/native.js +5 -1
- package/test/spec/auctionmanager_spec.js +2 -2
- package/test/spec/libraries/domainOverrideToRootDomain/index_spec.js +77 -0
- package/test/spec/modules/1plusXRtdProvider_spec.js +8 -7
- package/test/spec/modules/acuityAdsBidAdapter_spec.js +2 -1
- package/test/spec/modules/adagioBidAdapter_spec.js +0 -25
- package/test/spec/modules/admaticBidAdapter_spec.js +1 -1
- package/test/spec/modules/adnuntiusBidAdapter_spec.js +2 -1
- package/test/spec/modules/amxIdSystem_spec.js +13 -26
- package/test/spec/modules/appnexusBidAdapter_spec.js +464 -448
- package/test/spec/modules/appushBidAdapter_spec.js +2 -1
- package/test/spec/modules/axonixBidAdapter_spec.js +0 -27
- package/test/spec/modules/beyondmediaBidAdapter_spec.js +2 -1
- package/test/spec/modules/big-richmediaBidAdapter_spec.js +68 -64
- package/test/spec/modules/compassBidAdapter_spec.js +2 -1
- package/test/spec/modules/connectIdSystem_spec.js +420 -242
- package/test/spec/modules/contentexchangeBidAdapter_spec.js +2 -1
- package/test/spec/modules/conversantBidAdapter_spec.js +1 -0
- package/test/spec/modules/criteoBidAdapter_spec.js +33 -1
- package/test/spec/modules/eids_spec.js +30 -0
- package/test/spec/modules/eskimiBidAdapter_spec.js +155 -0
- package/test/spec/modules/freewheel-sspBidAdapter_spec.js +37 -0
- package/test/spec/modules/globalsunBidAdapter_spec.js +2 -1
- package/test/spec/modules/gridBidAdapter_spec.js +8 -0
- package/test/spec/modules/iqzoneBidAdapter_spec.js +2 -1
- package/test/spec/modules/ivsBidAdapter_spec.js +197 -0
- package/test/spec/modules/ixBidAdapter_spec.js +141 -71
- package/test/spec/modules/kargoBidAdapter_spec.js +297 -140
- package/test/spec/modules/koblerBidAdapter_spec.js +0 -20
- package/test/spec/modules/kueezRtbBidAdapter_spec.js +22 -2
- package/test/spec/modules/liveIntentIdSystem_spec.js +10 -0
- package/test/spec/modules/luponmediaBidAdapter_spec.js +1 -1
- package/test/spec/modules/magniteAnalyticsAdapter_spec.js +129 -1
- package/test/spec/modules/mathildeadsBidAdapter_spec.js +2 -1
- package/test/spec/modules/mgidBidAdapter_spec.js +184 -36
- package/test/spec/modules/minutemediaplusBidAdapter_spec.js +22 -2
- package/test/spec/modules/nativoBidAdapter_spec.js +101 -0
- package/test/spec/modules/neuwoRtdProvider_spec.js +0 -1
- package/test/spec/modules/oguryBidAdapter_spec.js +19 -4
- package/test/spec/modules/ooloAnalyticsAdapter_spec.js +1 -1
- package/test/spec/modules/openxBidAdapter_spec.js +1157 -1936
- package/test/spec/modules/openxOrtbBidAdapter_spec.js +12 -39
- package/test/spec/modules/pairIdSystem_spec.js +68 -0
- package/test/spec/modules/pubCommonId_spec.js +0 -17
- package/test/spec/modules/pubmaticBidAdapter_spec.js +868 -867
- package/test/spec/modules/pubxBidAdapter_spec.js +10 -2
- package/test/spec/modules/realvuAnalyticsAdapter_spec.js +0 -5
- package/test/spec/modules/sharedIdSystem_spec.js +0 -46
- package/test/spec/modules/sharethroughBidAdapter_spec.js +2 -1
- package/test/spec/modules/smarthubBidAdapter_spec.js +2 -1
- package/test/spec/modules/synacormediaBidAdapter_spec.js +0 -26
- package/test/spec/modules/videoModule/submodules/jwplayerVideoProvider_spec.js +17 -4
- package/test/spec/modules/vidoomyBidAdapter_spec.js +58 -0
- package/test/spec/modules/visiblemeasuresBidAdapter_spec.js +2 -1
- package/test/spec/modules/vrtcalBidAdapter_spec.js +3 -2
- package/test/spec/modules/yieldmoBidAdapter_spec.js +19 -1
- package/test/spec/renderer_spec.js +1 -2
- package/test/spec/unit/pbjs_api_spec.js +19 -3
- package/test/test_index.js +13 -3
- package/dist/gridNMBidAdapter.js +0 -1
- package/modules/gridNMBidAdapter.js +0 -422
- package/modules/gridNMBidAdapter.md +0 -39
- package/test/spec/modules/gridNMBidAdapter_spec.js +0 -636
package/modules/amxIdSystem.js
CHANGED
|
@@ -10,28 +10,25 @@ import {ajaxBuilder} from '../src/ajax.js';
|
|
|
10
10
|
import {submodule} from '../src/hook.js';
|
|
11
11
|
import {getRefererInfo} from '../src/refererDetection.js';
|
|
12
12
|
import {deepAccess, logError} from '../src/utils.js';
|
|
13
|
+
import {getStorageManager} from '../src/storageManager.js';
|
|
14
|
+
import {MODULE_TYPE_UID} from '../src/activities/modules.js';
|
|
15
|
+
import {domainOverrideToRootDomain} from '../libraries/domainOverrideToRootDomain/index.js';
|
|
13
16
|
|
|
14
17
|
const NAME = 'amxId';
|
|
15
18
|
const GVL_ID = 737;
|
|
16
19
|
const ID_KEY = NAME;
|
|
17
|
-
const version = '
|
|
20
|
+
const version = '2.0';
|
|
18
21
|
const SYNC_URL = 'https://id.a-mx.com/sync/';
|
|
19
22
|
const AJAX_TIMEOUT = 300;
|
|
23
|
+
const AJAX_OPTIONS = {method: 'GET', withCredentials: true, contentType: 'text/plain'};
|
|
20
24
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
if (config.storage.type !== 'html5') {
|
|
28
|
-
logError(
|
|
29
|
-
`${NAME} only supports storage.type "html5". ${config.storage.type} was provided`
|
|
30
|
-
);
|
|
31
|
-
return false;
|
|
32
|
-
}
|
|
25
|
+
export const storage = getStorageManager({moduleName: NAME, moduleType: MODULE_TYPE_UID});
|
|
26
|
+
const AMUID_KEY = '__amuidpb';
|
|
27
|
+
const getBidAdapterID = () => storage.localStorageIsEnabled() ? storage.getDataFromLocalStorage(AMUID_KEY) : null;
|
|
33
28
|
|
|
29
|
+
function validateConfig(config) {
|
|
34
30
|
if (
|
|
31
|
+
config.storage != null &&
|
|
35
32
|
typeof config.storage.expires === 'number' &&
|
|
36
33
|
config.storage.expires > 30
|
|
37
34
|
) {
|
|
@@ -44,7 +41,7 @@ function validateConfig(config) {
|
|
|
44
41
|
return true;
|
|
45
42
|
}
|
|
46
43
|
|
|
47
|
-
function handleSyncResponse(client, response, callback) {
|
|
44
|
+
function handleSyncResponse(client, response, params, callback) {
|
|
48
45
|
if (response.id != null && response.id.length > 0) {
|
|
49
46
|
callback(response.id);
|
|
50
47
|
return;
|
|
@@ -72,7 +69,7 @@ function handleSyncResponse(client, response, callback) {
|
|
|
72
69
|
logError(`${NAME} invalid value`, complete);
|
|
73
70
|
callback(null);
|
|
74
71
|
},
|
|
75
|
-
});
|
|
72
|
+
}, params, AJAX_OPTIONS);
|
|
76
73
|
}
|
|
77
74
|
|
|
78
75
|
export const amxIdSubmodule = {
|
|
@@ -97,6 +94,8 @@ export const amxIdSubmodule = {
|
|
|
97
94
|
? { [ID_KEY]: value }
|
|
98
95
|
: undefined,
|
|
99
96
|
|
|
97
|
+
domainOverride: domainOverrideToRootDomain(storage, NAME),
|
|
98
|
+
|
|
100
99
|
getId(config, consentData, _extant) {
|
|
101
100
|
if (!validateConfig(config)) {
|
|
102
101
|
return undefined;
|
|
@@ -109,12 +108,18 @@ export const amxIdSubmodule = {
|
|
|
109
108
|
|
|
110
109
|
const params = {
|
|
111
110
|
tagId: deepAccess(config, 'params.tagId', ''),
|
|
112
|
-
|
|
111
|
+
|
|
113
112
|
ref: ref.ref,
|
|
114
113
|
u: ref.location,
|
|
114
|
+
tl: ref.topmostLocation,
|
|
115
|
+
nf: ref.numIframes,
|
|
116
|
+
rt: ref.reachedTop,
|
|
117
|
+
|
|
115
118
|
v: '$prebid.version$',
|
|
119
|
+
av: version,
|
|
116
120
|
vg: '$$PREBID_GLOBAL$$',
|
|
117
121
|
us_privacy: usp,
|
|
122
|
+
am: getBidAdapterID(),
|
|
118
123
|
gdpr: consent.gdprApplies ? 1 : 0,
|
|
119
124
|
gdpr_consent: consent.consentString,
|
|
120
125
|
};
|
|
@@ -131,7 +136,7 @@ export const amxIdSubmodule = {
|
|
|
131
136
|
if (responseText != null && responseText.length > 0) {
|
|
132
137
|
try {
|
|
133
138
|
const parsed = JSON.parse(responseText);
|
|
134
|
-
handleSyncResponse(client, parsed, done);
|
|
139
|
+
handleSyncResponse(client, parsed, params, done);
|
|
135
140
|
return;
|
|
136
141
|
} catch (e) {
|
|
137
142
|
logError(`${NAME} invalid response`, responseText);
|
|
@@ -142,9 +147,7 @@ export const amxIdSubmodule = {
|
|
|
142
147
|
},
|
|
143
148
|
},
|
|
144
149
|
params,
|
|
145
|
-
|
|
146
|
-
method: 'GET'
|
|
147
|
-
}
|
|
150
|
+
AJAX_OPTIONS
|
|
148
151
|
);
|
|
149
152
|
|
|
150
153
|
return { callback };
|
package/modules/amxIdSystem.md
CHANGED
|
@@ -29,15 +29,15 @@ pbjs.setConfig({
|
|
|
29
29
|
| Param under `userSync.userIds[]` | Scope | Type | Description | Example |
|
|
30
30
|
| -------------------------------- | -------- | ------ | --------------------------- | ----------------------------------------- |
|
|
31
31
|
| name | Required | string | ID for the amxId module | `"amxId"` |
|
|
32
|
-
| storage |
|
|
32
|
+
| storage | Optional | Object | Settings for amxId storage | See [storage settings](#storage-settings) |
|
|
33
33
|
| params | Optional | Object | Parameters for amxId module | See [params](#params) |
|
|
34
34
|
|
|
35
35
|
### Storage Settings
|
|
36
36
|
|
|
37
|
-
The following settings are
|
|
37
|
+
The following settings are suggested for the `storage` property in the `userSync.userIds[]` object:
|
|
38
38
|
|
|
39
|
-
| Param under `storage` |
|
|
40
|
-
| --------------------- |
|
|
41
|
-
| name |
|
|
42
|
-
| type |
|
|
43
|
-
| expires |
|
|
39
|
+
| Param under `storage` | Type | Description | Example |
|
|
40
|
+
| --------------------- | ------------ | -------------------------------------------------------------------------------- | --------- |
|
|
41
|
+
| name | String | Where the ID will be stored | `"amxId"` |
|
|
42
|
+
| type | String | For best performance, this should be `"html5"` | `"html5"` |
|
|
43
|
+
| expires | Number <= 30 | number of days until the stored ID expires. **Must be less than or equal to 30** | `14` |
|
|
@@ -333,14 +333,16 @@ export const spec = {
|
|
|
333
333
|
payload.referrer_detection = refererinfo;
|
|
334
334
|
}
|
|
335
335
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
336
|
+
if (FEATURES.VIDEO) {
|
|
337
|
+
const hasAdPodBid = find(bidRequests, hasAdPod);
|
|
338
|
+
if (hasAdPodBid) {
|
|
339
|
+
bidRequests.filter(hasAdPod).forEach(adPodBid => {
|
|
340
|
+
const adPodTags = createAdPodRequest(tags, adPodBid);
|
|
341
|
+
// don't need the original adpod placement because it's in adPodTags
|
|
342
|
+
const nonPodTags = payload.tags.filter(tag => tag.uuid !== adPodBid.bidId);
|
|
343
|
+
payload.tags = [...nonPodTags, ...adPodTags];
|
|
344
|
+
});
|
|
345
|
+
}
|
|
344
346
|
}
|
|
345
347
|
|
|
346
348
|
if (bidRequests[0].userId) {
|
|
@@ -653,7 +655,7 @@ function newBid(serverBid, rtbBid, bidderRequest) {
|
|
|
653
655
|
bid.meta = Object.assign({}, bid.meta, { brandId: rtbBid.brand_id });
|
|
654
656
|
}
|
|
655
657
|
|
|
656
|
-
if (rtbBid.rtb.video) {
|
|
658
|
+
if (FEATURES.VIDEO && rtbBid.rtb.video) {
|
|
657
659
|
// shared video properties used for all 3 contexts
|
|
658
660
|
Object.assign(bid, {
|
|
659
661
|
width: rtbBid.rtb.video.player_width,
|
|
@@ -865,107 +867,111 @@ function bidToTag(bid) {
|
|
|
865
867
|
}
|
|
866
868
|
}
|
|
867
869
|
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
if (videoMediaType && context === 'adpod') {
|
|
872
|
-
tag.hb_source = 7;
|
|
873
|
-
} else {
|
|
874
|
-
tag.hb_source = 1;
|
|
875
|
-
}
|
|
876
|
-
if (bid.mediaType === VIDEO || videoMediaType) {
|
|
877
|
-
tag.ad_types.push(VIDEO);
|
|
878
|
-
}
|
|
879
|
-
|
|
880
|
-
// instream gets vastUrl, outstream gets vastXml
|
|
881
|
-
if (bid.mediaType === VIDEO || (videoMediaType && context !== 'outstream')) {
|
|
882
|
-
tag.require_asset_url = true;
|
|
883
|
-
}
|
|
870
|
+
if (FEATURES.VIDEO) {
|
|
871
|
+
const videoMediaType = deepAccess(bid, `mediaTypes.${VIDEO}`);
|
|
872
|
+
const context = deepAccess(bid, 'mediaTypes.video.context');
|
|
884
873
|
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
case 'playback_method':
|
|
894
|
-
let type = bid.params.video[param];
|
|
895
|
-
type = (isArray(type)) ? type[0] : type;
|
|
896
|
-
tag.video[param] = VIDEO_MAPPING[param][type];
|
|
897
|
-
break;
|
|
898
|
-
// Deprecating tags[].video.frameworks in favor of tags[].video_frameworks
|
|
899
|
-
case 'frameworks':
|
|
900
|
-
break;
|
|
901
|
-
default:
|
|
902
|
-
tag.video[param] = bid.params.video[param];
|
|
903
|
-
}
|
|
904
|
-
});
|
|
874
|
+
if (videoMediaType && context === 'adpod') {
|
|
875
|
+
tag.hb_source = 7;
|
|
876
|
+
} else {
|
|
877
|
+
tag.hb_source = 1;
|
|
878
|
+
}
|
|
879
|
+
if (bid.mediaType === VIDEO || videoMediaType) {
|
|
880
|
+
tag.ad_types.push(VIDEO);
|
|
881
|
+
}
|
|
905
882
|
|
|
906
|
-
|
|
907
|
-
|
|
883
|
+
// instream gets vastUrl, outstream gets vastXml
|
|
884
|
+
if (bid.mediaType === VIDEO || (videoMediaType && context !== 'outstream')) {
|
|
885
|
+
tag.require_asset_url = true;
|
|
908
886
|
}
|
|
909
|
-
}
|
|
910
887
|
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
break;
|
|
922
|
-
case 'skip':
|
|
923
|
-
if (typeof tag.video['skippable'] !== 'boolean') tag.video['skippable'] = (videoMediaType[param] === 1);
|
|
924
|
-
break;
|
|
925
|
-
case 'skipafter':
|
|
926
|
-
if (typeof tag.video['skipoffset'] !== 'number') tag.video['skippoffset'] = videoMediaType[param];
|
|
927
|
-
break;
|
|
928
|
-
case 'playbackmethod':
|
|
929
|
-
if (typeof tag.video['playback_method'] !== 'number') {
|
|
930
|
-
let type = videoMediaType[param];
|
|
888
|
+
if (bid.params.video) {
|
|
889
|
+
tag.video = {};
|
|
890
|
+
// place any valid video params on the tag
|
|
891
|
+
Object.keys(bid.params.video)
|
|
892
|
+
.filter(param => includes(VIDEO_TARGETING, param))
|
|
893
|
+
.forEach(param => {
|
|
894
|
+
switch (param) {
|
|
895
|
+
case 'context':
|
|
896
|
+
case 'playback_method':
|
|
897
|
+
let type = bid.params.video[param];
|
|
931
898
|
type = (isArray(type)) ? type[0] : type;
|
|
899
|
+
tag.video[param] = VIDEO_MAPPING[param][type];
|
|
900
|
+
break;
|
|
901
|
+
// Deprecating tags[].video.frameworks in favor of tags[].video_frameworks
|
|
902
|
+
case 'frameworks':
|
|
903
|
+
break;
|
|
904
|
+
default:
|
|
905
|
+
tag.video[param] = bid.params.video[param];
|
|
906
|
+
}
|
|
907
|
+
});
|
|
932
908
|
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
909
|
+
if (bid.params.video.frameworks && isArray(bid.params.video.frameworks)) {
|
|
910
|
+
tag['video_frameworks'] = bid.params.video.frameworks;
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
// use IAB ORTB values if the corresponding values weren't already set by bid.params.video
|
|
915
|
+
if (videoMediaType) {
|
|
916
|
+
tag.video = tag.video || {};
|
|
917
|
+
Object.keys(videoMediaType)
|
|
918
|
+
.filter(param => includes(VIDEO_RTB_TARGETING, param))
|
|
919
|
+
.forEach(param => {
|
|
920
|
+
switch (param) {
|
|
921
|
+
case 'minduration':
|
|
922
|
+
case 'maxduration':
|
|
923
|
+
if (typeof tag.video[param] !== 'number') tag.video[param] = videoMediaType[param];
|
|
924
|
+
break;
|
|
925
|
+
case 'skip':
|
|
926
|
+
if (typeof tag.video['skippable'] !== 'boolean') tag.video['skippable'] = (videoMediaType[param] === 1);
|
|
927
|
+
break;
|
|
928
|
+
case 'skipafter':
|
|
929
|
+
if (typeof tag.video['skipoffset'] !== 'number') tag.video['skippoffset'] = videoMediaType[param];
|
|
930
|
+
break;
|
|
931
|
+
case 'playbackmethod':
|
|
932
|
+
if (typeof tag.video['playback_method'] !== 'number') {
|
|
933
|
+
let type = videoMediaType[param];
|
|
934
|
+
type = (isArray(type)) ? type[0] : type;
|
|
935
|
+
|
|
936
|
+
// we only support iab's options 1-4 at this time.
|
|
937
|
+
if (type >= 1 && type <= 4) {
|
|
938
|
+
tag.video['playback_method'] = type;
|
|
947
939
|
}
|
|
948
|
-
}
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
940
|
+
}
|
|
941
|
+
break;
|
|
942
|
+
case 'api':
|
|
943
|
+
if (!tag['video_frameworks'] && isArray(videoMediaType[param])) {
|
|
944
|
+
// need to read thru array; remove 6 (we don't support it), swap 4 <> 5 if found (to match our adserver mapping for these specific values)
|
|
945
|
+
let apiTmp = videoMediaType[param].map(val => {
|
|
946
|
+
let v = (val === 4) ? 5 : (val === 5) ? 4 : val;
|
|
947
|
+
|
|
948
|
+
if (v >= 1 && v <= 5) {
|
|
949
|
+
return v;
|
|
950
|
+
}
|
|
951
|
+
}).filter(v => v);
|
|
952
|
+
tag['video_frameworks'] = apiTmp;
|
|
953
|
+
}
|
|
954
|
+
break;
|
|
955
|
+
|
|
956
|
+
case 'startdelay':
|
|
957
|
+
case 'placement':
|
|
958
|
+
const contextKey = 'context';
|
|
959
|
+
if (typeof tag.video[contextKey] !== 'number') {
|
|
960
|
+
const placement = videoMediaType['placement'];
|
|
961
|
+
const startdelay = videoMediaType['startdelay'];
|
|
962
|
+
const context = getContextFromPlacement(placement) || getContextFromStartDelay(startdelay);
|
|
963
|
+
tag.video[contextKey] = VIDEO_MAPPING[contextKey][context];
|
|
964
|
+
}
|
|
965
|
+
break;
|
|
966
|
+
}
|
|
967
|
+
});
|
|
968
|
+
}
|
|
966
969
|
|
|
967
|
-
|
|
968
|
-
|
|
970
|
+
if (bid.renderer) {
|
|
971
|
+
tag.video = Object.assign({}, tag.video, { custom_renderer_present: true });
|
|
972
|
+
}
|
|
973
|
+
} else {
|
|
974
|
+
tag.hb_source = 1;
|
|
969
975
|
}
|
|
970
976
|
|
|
971
977
|
if (bid.params.frameworks && isArray(bid.params.frameworks)) {
|
|
@@ -154,7 +154,7 @@ export const spec = {
|
|
|
154
154
|
coppa: config.getConfig('coppa') === true ? 1 : 0,
|
|
155
155
|
ccpa: bidderRequest.uspConsent || undefined,
|
|
156
156
|
gdpr: bidderRequest.gdprConsent || undefined,
|
|
157
|
-
tmax:
|
|
157
|
+
tmax: bidderRequest.timeout
|
|
158
158
|
};
|
|
159
159
|
|
|
160
160
|
const len = validBidRequests.length;
|
|
@@ -145,7 +145,7 @@ export const spec = {
|
|
|
145
145
|
coppa: config.getConfig('coppa') === true ? 1 : 0,
|
|
146
146
|
ccpa: bidderRequest.uspConsent || undefined,
|
|
147
147
|
gdpr: bidderRequest.gdprConsent || undefined,
|
|
148
|
-
tmax:
|
|
148
|
+
tmax: bidderRequest.timeout
|
|
149
149
|
};
|
|
150
150
|
|
|
151
151
|
const len = validBidRequests.length;
|
|
@@ -2,6 +2,7 @@ import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
|
|
|
2
2
|
import adapterManager from '../src/adapterManager.js';
|
|
3
3
|
import CONSTANTS from '../src/constants.json';
|
|
4
4
|
import { ajax } from '../src/ajax.js';
|
|
5
|
+
import { getRefererInfo } from '../src/refererDetection.js';
|
|
5
6
|
|
|
6
7
|
const analyticsType = 'endpoint';
|
|
7
8
|
const url = 'URL_TO_SERVER_ENDPOINT';
|
|
@@ -145,6 +146,7 @@ function handleBidWon(args) {
|
|
|
145
146
|
});
|
|
146
147
|
}
|
|
147
148
|
args['cpmIncrement'] = increment;
|
|
149
|
+
args['referer'] = encodeURIComponent(getRefererInfo().page || getRefererInfo().topmostLocation);
|
|
148
150
|
if (typeof saveEvents.bidRequested == 'object' && saveEvents.bidRequested.length > 0 && saveEvents.bidRequested[0].gdprConsent) { args.gdpr = saveEvents.bidRequested[0].gdprConsent; }
|
|
149
151
|
ajax(endpoint + '.bidwatch.io/analytics/bid_won', null, JSON.stringify(args), {method: 'POST', withCredentials: true});
|
|
150
152
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { parseSizesInput } from '../src/utils.js';
|
|
2
|
-
import {config} from '../src/config.js';
|
|
3
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
4
3
|
|
|
5
4
|
const BIDDER_CODE = 'coinzilla';
|
|
@@ -78,7 +77,7 @@ export const spec = {
|
|
|
78
77
|
dealId: dealId,
|
|
79
78
|
currency: currency,
|
|
80
79
|
netRevenue: netRevenue,
|
|
81
|
-
ttl:
|
|
80
|
+
ttl: bidRequest.timeout,
|
|
82
81
|
referrer: referrer,
|
|
83
82
|
ad: response.ad,
|
|
84
83
|
mediaType: response.mediaType,
|
|
@@ -155,7 +155,7 @@ export const spec = {
|
|
|
155
155
|
coppa: config.getConfig('coppa') === true ? 1 : 0,
|
|
156
156
|
ccpa: bidderRequest.uspConsent || undefined,
|
|
157
157
|
gdpr: bidderRequest.gdprConsent || undefined,
|
|
158
|
-
tmax:
|
|
158
|
+
tmax: bidderRequest.timeout
|
|
159
159
|
};
|
|
160
160
|
|
|
161
161
|
const len = validBidRequests.length;
|
|
@@ -8,14 +8,86 @@
|
|
|
8
8
|
import {ajax} from '../src/ajax.js';
|
|
9
9
|
import {submodule} from '../src/hook.js';
|
|
10
10
|
import {includes} from '../src/polyfill.js';
|
|
11
|
-
import {
|
|
11
|
+
import {getRefererInfo} from '../src/refererDetection.js';
|
|
12
|
+
import {getStorageManager} from '../src/storageManager.js';
|
|
13
|
+
import {formatQS, isPlainObject, logError, parseUrl} from '../src/utils.js';
|
|
14
|
+
import {uspDataHandler} from '../src/adapterManager.js';
|
|
15
|
+
import {MODULE_TYPE_UID} from '../src/activities/modules.js';
|
|
12
16
|
|
|
13
17
|
const MODULE_NAME = 'connectId';
|
|
18
|
+
const STORAGE_EXPIRY_DAYS = 14;
|
|
14
19
|
const VENDOR_ID = 25;
|
|
15
20
|
const PLACEHOLDER = '__PIXEL_ID__';
|
|
16
21
|
const UPS_ENDPOINT = `https://ups.analytics.yahoo.com/ups/${PLACEHOLDER}/fed`;
|
|
17
22
|
const OVERRIDE_OPT_OUT_KEY = 'connectIdOptOut';
|
|
18
23
|
const INPUT_PARAM_KEYS = ['pixelId', 'he', 'puid'];
|
|
24
|
+
export const storage = getStorageManager({moduleType: MODULE_TYPE_UID, moduleName: MODULE_NAME});
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @function
|
|
28
|
+
* @param {Object} obj
|
|
29
|
+
*/
|
|
30
|
+
function storeObject(obj) {
|
|
31
|
+
const expires = Date.now() + (60 * 60 * 24 * 1000 * STORAGE_EXPIRY_DAYS);
|
|
32
|
+
if (storage.cookiesAreEnabled()) {
|
|
33
|
+
setEtldPlusOneCookie(MODULE_NAME, JSON.stringify(obj), new Date(expires), getSiteHostname());
|
|
34
|
+
} else if (storage.localStorageIsEnabled()) {
|
|
35
|
+
obj.__expires = expires;
|
|
36
|
+
storage.setDataInLocalStorage(MODULE_NAME, obj);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Attempts to store a cookie on eTLD + 1
|
|
42
|
+
*
|
|
43
|
+
* @function
|
|
44
|
+
* @param {String} key
|
|
45
|
+
* @param {String} value
|
|
46
|
+
* @param {Date} expirationDate
|
|
47
|
+
* @param {String} hostname
|
|
48
|
+
*/
|
|
49
|
+
function setEtldPlusOneCookie(key, value, expirationDate, hostname) {
|
|
50
|
+
const subDomains = hostname.split('.');
|
|
51
|
+
for (let i = 0; i < subDomains.length; ++i) {
|
|
52
|
+
const domain = subDomains.slice(subDomains.length - i - 1, subDomains.length).join('.');
|
|
53
|
+
try {
|
|
54
|
+
storage.setCookie(key, value, expirationDate.toUTCString(), null, '.' + domain);
|
|
55
|
+
const storedCookie = storage.getCookie(key);
|
|
56
|
+
if (storedCookie && storedCookie === value) {
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
} catch (error) {}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function getIdFromCookie() {
|
|
64
|
+
if (storage.cookiesAreEnabled()) {
|
|
65
|
+
try {
|
|
66
|
+
return JSON.parse(storage.getCookie(MODULE_NAME));
|
|
67
|
+
} catch {}
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function getIdFromLocalStorage() {
|
|
73
|
+
if (storage.localStorageIsEnabled()) {
|
|
74
|
+
const storedIdData = storage.getDataFromLocalStorage(MODULE_NAME);
|
|
75
|
+
if (storedIdData) {
|
|
76
|
+
if (isPlainObject(storedIdData) && storedIdData.__expires &&
|
|
77
|
+
storedIdData.__expires <= Date.now()) {
|
|
78
|
+
storage.removeDataFromLocalStorage(MODULE_NAME);
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
return storedIdData;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function getSiteHostname() {
|
|
88
|
+
const pageInfo = parseUrl(getRefererInfo().page);
|
|
89
|
+
return pageInfo.hostname;
|
|
90
|
+
}
|
|
19
91
|
|
|
20
92
|
/** @type {Submodule} */
|
|
21
93
|
export const connectIdSubmodule = {
|
|
@@ -37,8 +109,8 @@ export const connectIdSubmodule = {
|
|
|
37
109
|
if (connectIdSubmodule.userHasOptedOut()) {
|
|
38
110
|
return undefined;
|
|
39
111
|
}
|
|
40
|
-
return (
|
|
41
|
-
? {connectId: value.connectid} : undefined;
|
|
112
|
+
return (isPlainObject(value) && (value.connectId || value.connectid))
|
|
113
|
+
? {connectId: value.connectId || value.connectid} : undefined;
|
|
42
114
|
},
|
|
43
115
|
/**
|
|
44
116
|
* Gets the Yahoo ConnectID
|
|
@@ -54,21 +126,28 @@ export const connectIdSubmodule = {
|
|
|
54
126
|
const params = config.params || {};
|
|
55
127
|
if (!params || (typeof params.he !== 'string' && typeof params.puid !== 'string') ||
|
|
56
128
|
(typeof params.pixelId === 'undefined' && typeof params.endpoint === 'undefined')) {
|
|
57
|
-
logError(
|
|
58
|
-
|
|
129
|
+
logError(`${MODULE_NAME} module: configurataion requires the 'pixelId' and at ` +
|
|
130
|
+
`least one of the 'he' or 'puid' parameters to be defined.`);
|
|
59
131
|
return;
|
|
60
132
|
}
|
|
61
133
|
|
|
134
|
+
const storedId = getIdFromCookie() || getIdFromLocalStorage();
|
|
135
|
+
if (storedId) {
|
|
136
|
+
return {id: storedId};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const uspString = uspDataHandler.getConsentData() || '';
|
|
62
140
|
const data = {
|
|
141
|
+
v: '1',
|
|
63
142
|
'1p': includes([1, '1', true], params['1p']) ? '1' : '0',
|
|
64
143
|
gdpr: connectIdSubmodule.isEUConsentRequired(consentData) ? '1' : '0',
|
|
65
|
-
gdpr_consent: connectIdSubmodule.isEUConsentRequired(consentData) ? consentData.
|
|
66
|
-
us_privacy:
|
|
144
|
+
gdpr_consent: connectIdSubmodule.isEUConsentRequired(consentData) ? consentData.consentString : '',
|
|
145
|
+
us_privacy: uspString
|
|
67
146
|
};
|
|
68
147
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
data.
|
|
148
|
+
let topmostLocation = getRefererInfo().topmostLocation;
|
|
149
|
+
if (typeof topmostLocation === 'string') {
|
|
150
|
+
data.url = topmostLocation.split('?')[0];
|
|
72
151
|
}
|
|
73
152
|
|
|
74
153
|
INPUT_PARAM_KEYS.forEach(key => {
|
|
@@ -84,6 +163,11 @@ export const connectIdSubmodule = {
|
|
|
84
163
|
if (response) {
|
|
85
164
|
try {
|
|
86
165
|
responseObj = JSON.parse(response);
|
|
166
|
+
if (isPlainObject(responseObj) && Object.keys(responseObj).length > 0) {
|
|
167
|
+
storeObject(responseObj);
|
|
168
|
+
} else {
|
|
169
|
+
logError(`${MODULE_NAME} module: UPS response returned an invalid payload ${response}`);
|
|
170
|
+
}
|
|
87
171
|
} catch (error) {
|
|
88
172
|
logError(error);
|
|
89
173
|
}
|
|
@@ -91,7 +175,7 @@ export const connectIdSubmodule = {
|
|
|
91
175
|
callback(responseObj);
|
|
92
176
|
},
|
|
93
177
|
error: error => {
|
|
94
|
-
logError(`${MODULE_NAME}: ID fetch encountered an error`, error);
|
|
178
|
+
logError(`${MODULE_NAME} module: ID fetch encountered an error`, error);
|
|
95
179
|
callback();
|
|
96
180
|
}
|
|
97
181
|
};
|
|
@@ -108,16 +192,7 @@ export const connectIdSubmodule = {
|
|
|
108
192
|
* @returns {Boolean}
|
|
109
193
|
*/
|
|
110
194
|
isEUConsentRequired(consentData) {
|
|
111
|
-
return !!(consentData
|
|
112
|
-
},
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Utility function that returns a boolean flag indicating if the opportunity
|
|
116
|
-
* is subject to GPP jurisdiction.
|
|
117
|
-
* @returns {Boolean}
|
|
118
|
-
*/
|
|
119
|
-
isUnderGPPJurisdiction(consentData) {
|
|
120
|
-
return !!(consentData && consentData.gppConsent && consentData.gppConsent.gppString);
|
|
195
|
+
return !!(consentData?.gdprApplies);
|
|
121
196
|
},
|
|
122
197
|
|
|
123
198
|
/**
|
|
@@ -27,8 +27,9 @@ The below parameters apply only to the Yahoo ConnectID user ID Module.
|
|
|
27
27
|
|
|
28
28
|
| Param under usersync.userIds[] | Scope | Type | Description | Example |
|
|
29
29
|
| --- | --- | --- | --- | --- |
|
|
30
|
-
| name | Required | String |
|
|
31
|
-
| params | Required | Object |
|
|
32
|
-
| params.pixelId | Required | Number |
|
|
33
|
-
|
|
34
|
-
| params.
|
|
30
|
+
| name | Required | String | The name of this module. | `"connectId"` |
|
|
31
|
+
| params | Required | Object | Container of all module params. ||
|
|
32
|
+
| params.pixelId | Required | Number |
|
|
33
|
+
The Yahoo-supplied publisher-specific pixel ID. | `"0000"` |
|
|
34
|
+
| params.he | Optional | String | The SHA-256 hashed user email address which has been lowercased prior to hashing. Pass both `he` and `puid` params if present, otherwise pass either of the two that is available. |`"ed8ddbf5a171981db8ef938596ca297d5e3f84bcc280041c5880dba3baf9c1d4"`|
|
|
35
|
+
| params.puid | Optional | String | The publisher supplied user identifier such as a first-party cookie. Pass both `he` and `puid` params if present, otherwise pass either of the two that is available. | `"ab9iibf5a231ii1db8ef911596ca297d5e3f84biii00041c5880dba3baf9c1da"` |
|