prebid.js 7.51.0 → 7.53.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/1plusXRtdProvider.js +1 -1
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/33acrossIdSystem.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adkernelBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adriverIdSystem.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/airgridRtdProvider.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/allowActivities.js +1 -0
- 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/asoBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/beopBidAdapter.js +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/chtnwBidAdapter.js +1 -1
- package/dist/conceptxBidAdapter.js +1 -0
- 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/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/dependencies.json +6 -0
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/eskimiBidAdapter.js +1 -1
- package/dist/euidIdSystem.js +1 -0
- package/dist/feedadBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/freepassIdSystem.js +1 -0
- package/dist/freewheel-sspBidAdapter.js +1 -1
- package/dist/gdprEnforcement.js +1 -1
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/greenbidsAnalyticsAdapter.js +1 -1
- package/dist/greenbidsRtdProvider.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/growthCodeRtdProvider.js +1 -0
- 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/ixBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/kargoBidAdapter.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/limelightDigitalBidAdapter.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/magniteAnalyticsAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.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/nexx360BidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +154 -146
- package/dist/objectGuard.js +1 -0
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/optidigitalBidAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/oxxionAnalyticsAdapter.js +1 -0
- package/dist/pairIdSystem.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/proxistoreBidAdapter.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.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/retailspotBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/richaudienceBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rtdModule.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/schain.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/sirdataRtdProvider.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/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/stroeerCoreBidAdapter.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/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/uid2IdSystem.js +1 -1
- package/dist/uid2IdSystem_shared.js +1 -0
- 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/viouslyBidAdapter.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/yieldlabBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/dist/zeta_global_sspBidAdapter.js +1 -1
- package/integrationExamples/gpt/growthcode.html +20 -9
- package/integrationExamples/gpt/userId_example.html +20 -6
- package/libraries/objectGuard/objectGuard.js +108 -0
- package/libraries/objectGuard/ortbGuard.js +88 -0
- package/modules/.submodules.json +3 -1
- package/modules/1plusXRtdProvider.js +31 -60
- package/modules/adagioBidAdapter.js +86 -24
- package/modules/adgenerationBidAdapter.js +14 -5
- package/modules/adkernelBidAdapter.js +2 -2
- package/modules/adriverIdSystem.js +1 -1
- package/modules/airgridRtdProvider.js +11 -12
- package/modules/allowActivities.js +74 -0
- package/modules/asoBidAdapter.js +2 -1
- package/modules/beopBidAdapter.js +6 -0
- package/modules/conceptxBidAdapter.js +70 -0
- package/modules/conceptxBidAdapter.md +36 -0
- package/modules/connectIdSystem.js +89 -13
- package/modules/connectIdSystem.md +4 -7
- package/modules/criteoBidAdapter.js +18 -2
- package/modules/eskimiBidAdapter.js +171 -41
- package/modules/eskimiBidAdapter.md +35 -16
- package/modules/euidIdSystem.js +121 -0
- package/modules/euidIdSystem.md +131 -0
- package/modules/freepassIdSystem.js +61 -0
- package/modules/freepassIdSystem.md +47 -0
- package/modules/gdprEnforcement.js +98 -169
- package/modules/greenbidsAnalyticsAdapter.js +1 -1
- package/modules/growthCodeRtdProvider.js +131 -0
- package/modules/growthCodeRtdProvider.md +55 -0
- package/modules/id5IdSystem.js +3 -5
- package/modules/ixBidAdapter.js +17 -3
- package/modules/limelightDigitalBidAdapter.js +1 -1
- package/modules/logicadBidAdapter.js +14 -1
- package/modules/mediasquareBidAdapter.js +13 -5
- package/modules/nexx360BidAdapter.js +1 -0
- package/modules/oxxionAnalyticsAdapter.js +212 -0
- package/modules/oxxionAnalyticsAdapter.md +33 -0
- package/modules/pairIdSystem.js +16 -11
- package/modules/proxistoreBidAdapter.js +11 -14
- package/modules/richaudienceBidAdapter.js +10 -1
- package/modules/riseBidAdapter.js +1 -1
- package/modules/rtdModule/index.js +12 -1
- package/modules/schain.js +2 -2
- package/modules/sharethroughBidAdapter.js +2 -2
- package/modules/sirdataRtdProvider.js +73 -146
- package/modules/smartadserverBidAdapter.js +5 -0
- package/modules/sovrnBidAdapter.js +4 -1
- package/modules/stroeerCoreBidAdapter.js +55 -6
- package/modules/stvBidAdapter.js +34 -1
- package/modules/uid2IdSystem.js +27 -210
- package/modules/uid2IdSystem.md +104 -23
- package/modules/uid2IdSystem_shared.js +232 -0
- package/modules/undertoneBidAdapter.js +9 -1
- package/modules/userId/eids.js +8 -0
- package/modules/userId/index.js +69 -41
- package/modules/userId/userId.md +2 -1
- package/modules/viouslyBidAdapter.js +2 -2
- package/modules/weboramaRtdProvider.js +25 -95
- package/modules/weboramaRtdProvider.md +4 -4
- package/modules/yahoosspBidAdapter.js +45 -3
- package/modules/yahoosspBidAdapter.md +1 -1
- package/modules/yieldlabBidAdapter.js +23 -14
- package/modules/zeta_global_sspBidAdapter.js +28 -22
- package/package.json +1 -1
- package/src/activities/activities.js +47 -0
- package/src/activities/activityParams.js +8 -0
- package/src/activities/modules.js +1 -1
- package/src/activities/params.js +59 -0
- package/src/activities/redactor.js +157 -0
- package/src/activities/rules.js +95 -0
- package/src/adapterManager.js +45 -8
- package/src/adloader.js +1 -0
- package/src/fpd/rootDomain.js +1 -1
- package/src/prebid.js +1 -1
- package/src/storageManager.js +57 -44
- package/src/userSync.js +35 -18
- package/test/spec/activities/allowActivites_spec.js +138 -0
- package/test/spec/activities/objectGuard_spec.js +144 -0
- package/test/spec/activities/ortbGuard_spec.js +140 -0
- package/test/spec/activities/params_spec.js +25 -0
- package/test/spec/activities/redactor_spec.js +296 -0
- package/test/spec/activities/rules_spec.js +135 -0
- package/test/spec/modules/1plusXRtdProvider_spec.js +98 -149
- package/test/spec/modules/adagioBidAdapter_spec.js +46 -17
- package/test/spec/modules/adgenerationBidAdapter_spec.js +52 -12
- package/test/spec/modules/airgridRtdProvider_spec.js +2 -0
- package/test/spec/modules/beopBidAdapter_spec.js +24 -0
- package/test/spec/modules/conceptxBidAdapter_spec.js +136 -0
- package/test/spec/modules/connectIdSystem_spec.js +291 -23
- package/test/spec/modules/criteoBidAdapter_spec.js +85 -1
- package/test/spec/modules/eids_spec.js +15 -0
- package/test/spec/modules/eskimiBidAdapter_spec.js +264 -112
- package/test/spec/modules/euidIdSystem_spec.js +130 -0
- package/test/spec/modules/freepassIdSystem_spec.js +186 -0
- package/test/spec/modules/gdprEnforcement_spec.js +127 -414
- package/test/spec/modules/growthCodeRtdProvider_spec.js +127 -0
- package/test/spec/modules/id5IdSystem_spec.js +10 -3
- package/test/spec/modules/ixBidAdapter_spec.js +32 -1
- package/test/spec/modules/logicadBidAdapter_spec.js +122 -2
- package/test/spec/modules/mediasquareBidAdapter_spec.js +4 -0
- package/test/spec/modules/oxxionAnalyticsAdapter_spec.js +324 -0
- package/test/spec/modules/pairIdSystem_spec.js +16 -3
- package/test/spec/modules/realTimeDataModule_spec.js +1 -1
- package/test/spec/modules/richaudienceBidAdapter_spec.js +44 -0
- package/test/spec/modules/schain_spec.js +9 -0
- package/test/spec/modules/sharethroughBidAdapter_spec.js +1 -1
- package/test/spec/modules/sirdataRtdProvider_spec.js +110 -17
- package/test/spec/modules/smartadserverBidAdapter_spec.js +42 -0
- package/test/spec/modules/sovrnBidAdapter_spec.js +13 -0
- package/test/spec/modules/stroeerCoreBidAdapter_spec.js +151 -6
- package/test/spec/modules/stvBidAdapter_spec.js +13 -1
- package/test/spec/modules/uid2IdSystem_helpers.js +70 -0
- package/test/spec/modules/uid2IdSystem_spec.js +131 -86
- package/test/spec/modules/undertoneBidAdapter_spec.js +57 -1
- package/test/spec/modules/userId_spec.js +96 -33
- package/test/spec/modules/weboramaRtdProvider_spec.js +331 -205
- package/test/spec/modules/yahoosspBidAdapter_spec.js +103 -51
- package/test/spec/modules/yieldlabBidAdapter_spec.js +42 -2
- package/test/spec/modules/zeta_global_sspBidAdapter_spec.js +204 -4
- package/test/spec/unit/core/adapterManager_spec.js +181 -1
- package/test/spec/unit/core/storageManager_spec.js +76 -68
- package/test/spec/unit/pbjs_api_spec.js +15 -25
- package/test/spec/userSync_spec.js +45 -16
|
@@ -44,7 +44,11 @@ const ADAGIO_TAG_URL = 'https://script.4dex.io/localstore.js';
|
|
|
44
44
|
const ADAGIO_LOCALSTORAGE_KEY = 'adagioScript';
|
|
45
45
|
const GVLID = 617;
|
|
46
46
|
export const storage = getStorageManager({bidderCode: BIDDER_CODE});
|
|
47
|
-
|
|
47
|
+
|
|
48
|
+
const BB_PUBLICATION = 'adagio';
|
|
49
|
+
const BB_RENDERER_DEFAULT = 'renderer';
|
|
50
|
+
export const BB_RENDERER_URL = `https://${BB_PUBLICATION}.bbvms.com/r/$RENDERER.js`;
|
|
51
|
+
|
|
48
52
|
const MAX_SESS_DURATION = 30 * 60 * 1000;
|
|
49
53
|
const ADAGIO_PUBKEY = 'AL16XT44Sfp+8SHVF1UdC7hydPSMVLMhsYknKDdwqq+0ToDSJrP0+Qh0ki9JJI2uYm/6VEYo8TJED9WfMkiJ4vf02CW3RvSWwc35bif2SK1L8Nn/GfFYr/2/GG/Rm0vUsv+vBHky6nuuYls20Og0HDhMgaOlXoQ/cxMuiy5QSktp';
|
|
50
54
|
const ADAGIO_PUBKEY_E = 65537;
|
|
@@ -62,7 +66,7 @@ export const ORTB_VIDEO_PARAMS = {
|
|
|
62
66
|
'startdelay': (value) => isInteger(value),
|
|
63
67
|
'placement': (value) => isInteger(value),
|
|
64
68
|
'linearity': (value) => isInteger(value),
|
|
65
|
-
'skip': (value) =>
|
|
69
|
+
'skip': (value) => [1, 0].includes(value),
|
|
66
70
|
'skipmin': (value) => isInteger(value),
|
|
67
71
|
'skipafter': (value) => isInteger(value),
|
|
68
72
|
'sequence': (value) => isInteger(value),
|
|
@@ -443,16 +447,6 @@ function _buildVideoBidRequest(bidRequest) {
|
|
|
443
447
|
});
|
|
444
448
|
}
|
|
445
449
|
|
|
446
|
-
function _renderer(bid) {
|
|
447
|
-
bid.renderer.push(() => {
|
|
448
|
-
if (typeof window.ADAGIO.outstreamPlayer === 'function') {
|
|
449
|
-
window.ADAGIO.outstreamPlayer(bid);
|
|
450
|
-
} else {
|
|
451
|
-
logError(`${LOG_PREFIX} Adagio outstream player is not defined`);
|
|
452
|
-
}
|
|
453
|
-
});
|
|
454
|
-
}
|
|
455
|
-
|
|
456
450
|
function _parseNativeBidResponse(bid) {
|
|
457
451
|
if (!bid.admNative || !Array.isArray(bid.admNative.assets)) {
|
|
458
452
|
logError(`${LOG_PREFIX} Invalid native response`);
|
|
@@ -881,6 +875,77 @@ function storeRequestInAdagioNS(bidRequest) {
|
|
|
881
875
|
};
|
|
882
876
|
}
|
|
883
877
|
|
|
878
|
+
// See https://support.bluebillywig.com/developers/vast-renderer/
|
|
879
|
+
const OUTSTREAM_RENDERER = {
|
|
880
|
+
bootstrapPlayer: function(bid) {
|
|
881
|
+
const rendererCode = bid.outstreamRendererCode;
|
|
882
|
+
|
|
883
|
+
const config = {
|
|
884
|
+
code: bid.adUnitCode,
|
|
885
|
+
};
|
|
886
|
+
|
|
887
|
+
if (bid.vastXml) {
|
|
888
|
+
config.vastXml = bid.vastXml;
|
|
889
|
+
} else if (bid.vastUrl) {
|
|
890
|
+
config.vastUrl = bid.vastUrl;
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
if (!bid.vastXml && !bid.vastUrl) {
|
|
894
|
+
logError(`${LOG_PREFIX} no vastXml or vastUrl on bid`);
|
|
895
|
+
return;
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
if (!window.bluebillywig || !window.bluebillywig.renderers || !window.bluebillywig.renderers.length) {
|
|
899
|
+
logError(`${LOG_PREFIX} no BlueBillywig renderers found!`);
|
|
900
|
+
return;
|
|
901
|
+
}
|
|
902
|
+
|
|
903
|
+
const rendererId = this.getRendererId(BB_PUBLICATION, rendererCode);
|
|
904
|
+
|
|
905
|
+
const override = {}
|
|
906
|
+
if (bid.skipOffset) {
|
|
907
|
+
override.skipOffset = bid.skipOffset.toString()
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
const renderer = window.bluebillywig.renderers.find(bbr => bbr._id === rendererId);
|
|
911
|
+
if (!renderer) {
|
|
912
|
+
logError(`${LOG_PREFIX} couldn't find a renderer with ID ${rendererId}`);
|
|
913
|
+
return;
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
const el = document.getElementById(bid.adUnitCode);
|
|
917
|
+
|
|
918
|
+
renderer.bootstrap(config, el, override);
|
|
919
|
+
},
|
|
920
|
+
newRenderer: function(adUnitCode, rendererCode) {
|
|
921
|
+
const rendererUrl = BB_RENDERER_URL.replace('$RENDERER', rendererCode);
|
|
922
|
+
|
|
923
|
+
const renderer = Renderer.install({
|
|
924
|
+
url: rendererUrl,
|
|
925
|
+
loaded: false,
|
|
926
|
+
adUnitCode
|
|
927
|
+
});
|
|
928
|
+
|
|
929
|
+
try {
|
|
930
|
+
renderer.setRender(this.outstreamRender);
|
|
931
|
+
} catch (err) {
|
|
932
|
+
logError(`${LOG_PREFIX} error trying to setRender`, err);
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
return renderer;
|
|
936
|
+
},
|
|
937
|
+
outstreamRender: function(bid) {
|
|
938
|
+
bid.renderer.push(() => {
|
|
939
|
+
OUTSTREAM_RENDERER.bootstrapPlayer(bid)
|
|
940
|
+
});
|
|
941
|
+
},
|
|
942
|
+
getRendererId: function(publication, renderer) {
|
|
943
|
+
// By convention, the RENDERER_ID is always the publication name (adagio) and the ad unit code (eg. renderer)
|
|
944
|
+
// joined together by a dash. It's used to identify the correct renderer instance on the page in case there's multiple.
|
|
945
|
+
return `${publication}-${renderer}`;
|
|
946
|
+
}
|
|
947
|
+
};
|
|
948
|
+
|
|
884
949
|
export const spec = {
|
|
885
950
|
code: BIDDER_CODE,
|
|
886
951
|
gvlid: GVLID,
|
|
@@ -1110,21 +1175,18 @@ export const spec = {
|
|
|
1110
1175
|
const mediaTypeContext = deepAccess(bidReq, 'mediaTypes.video.context');
|
|
1111
1176
|
// Adagio SSP returns a `vastXml` only. No `vastUrl` nor `videoCacheKey`.
|
|
1112
1177
|
if (!bidObj.vastUrl && bidObj.vastXml) {
|
|
1113
|
-
bidObj.vastUrl = 'data:text/xml;charset=utf-8;base64,' + btoa(bidObj.vastXml.replace(/\\"/g, '"'));
|
|
1178
|
+
bidObj.vastUrl = 'data:text/xml;charset=utf-8;base64,' + window.btoa(bidObj.vastXml.replace(/\\"/g, '"'));
|
|
1114
1179
|
}
|
|
1115
1180
|
|
|
1116
1181
|
if (mediaTypeContext === OUTSTREAM) {
|
|
1117
|
-
bidObj.
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
});
|
|
1126
|
-
|
|
1127
|
-
bidObj.renderer.setRender(_renderer);
|
|
1182
|
+
bidObj.outstreamRendererCode = deepAccess(bidReq, 'params.rendererCode', BB_RENDERER_DEFAULT)
|
|
1183
|
+
|
|
1184
|
+
if (deepAccess(bidReq, 'mediaTypes.video.skip')) {
|
|
1185
|
+
const skipOffset = deepAccess(bidReq, 'mediaTypes.video.skipafter', 5) // default 5s.
|
|
1186
|
+
bidObj.skipOffset = skipOffset
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1189
|
+
bidObj.renderer = OUTSTREAM_RENDERER.newRenderer(bidObj.adUnitCode, bidObj.outstreamRendererCode);
|
|
1128
1190
|
}
|
|
1129
1191
|
}
|
|
1130
1192
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {tryAppendQueryString, getBidIdParameter, escapeUnsafeChars} from '../src/utils.js';
|
|
1
|
+
import {tryAppendQueryString, getBidIdParameter, escapeUnsafeChars, deepAccess} from '../src/utils.js';
|
|
2
2
|
import {registerBidder} from '../src/adapters/bidderFactory.js';
|
|
3
3
|
import {BANNER, NATIVE} from '../src/mediaTypes.js';
|
|
4
4
|
import {config} from '../src/config.js';
|
|
5
|
-
import {
|
|
5
|
+
import {convertOrtbRequestToProprietaryNative} from '../src/native.js';
|
|
6
6
|
|
|
7
7
|
const ADG_BIDDER_CODE = 'adgeneration';
|
|
8
8
|
|
|
@@ -21,14 +21,14 @@ export const spec = {
|
|
|
21
21
|
},
|
|
22
22
|
/**
|
|
23
23
|
* Make a server request from the list of BidRequests.
|
|
24
|
-
*
|
|
25
|
-
* @param
|
|
24
|
+
* @param validBidRequests
|
|
25
|
+
* @param bidderRequest
|
|
26
26
|
* @return ServerRequest Info describing the request to the server.
|
|
27
27
|
*/
|
|
28
28
|
buildRequests: function (validBidRequests, bidderRequest) {
|
|
29
29
|
// convert Native ORTB definition to old-style prebid native definition
|
|
30
30
|
validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests);
|
|
31
|
-
const ADGENE_PREBID_VERSION = '1.
|
|
31
|
+
const ADGENE_PREBID_VERSION = '1.6.0';
|
|
32
32
|
let serverRequests = [];
|
|
33
33
|
for (let i = 0, len = validBidRequests.length; i < len; i++) {
|
|
34
34
|
const validReq = validBidRequests[i];
|
|
@@ -38,6 +38,9 @@ export const spec = {
|
|
|
38
38
|
const criteoId = getCriteoId(validReq);
|
|
39
39
|
const id5id = getId5Id(validReq);
|
|
40
40
|
const id5LinkType = getId5LinkType(validReq);
|
|
41
|
+
const imuid = deepAccess(validReq, 'userId.imuid');
|
|
42
|
+
const gpid = deepAccess(validReq, 'ortb2Imp.ext.gpid');
|
|
43
|
+
const sua = deepAccess(validReq, 'ortb2.device.sua');
|
|
41
44
|
let data = ``;
|
|
42
45
|
data = tryAppendQueryString(data, 'posall', 'SSPLOC');
|
|
43
46
|
const id = getBidIdParameter('id', validReq.params);
|
|
@@ -54,6 +57,12 @@ export const spec = {
|
|
|
54
57
|
data = tryAppendQueryString(data, 'adgext_criteo_id', criteoId);
|
|
55
58
|
data = tryAppendQueryString(data, 'adgext_id5_id', id5id);
|
|
56
59
|
data = tryAppendQueryString(data, 'adgext_id5_id_link_type', id5LinkType);
|
|
60
|
+
data = tryAppendQueryString(data, 'adgext_imuid', imuid);
|
|
61
|
+
data = tryAppendQueryString(data, 'adgext_uid2', validReq.userId ? validReq.userId.uid2 : null);
|
|
62
|
+
data = tryAppendQueryString(data, 'gpid', gpid ? encodeURIComponent(gpid) : null);
|
|
63
|
+
data = tryAppendQueryString(data, 'uach', sua ? JSON.stringify(sua) : null);
|
|
64
|
+
data = tryAppendQueryString(data, 'schain', validReq.schain ? encodeURIComponent(JSON.stringify(validReq.schain)) : null);
|
|
65
|
+
|
|
57
66
|
// native以外にvideo等の対応が入った場合は要修正
|
|
58
67
|
if (!validReq.mediaTypes || !validReq.mediaTypes.native) {
|
|
59
68
|
data = tryAppendQueryString(data, 'imark', '1');
|
|
@@ -90,7 +90,6 @@ export const spec = {
|
|
|
90
90
|
{code: 'denakop'},
|
|
91
91
|
{code: 'rtbanalytica'},
|
|
92
92
|
{code: 'unibots'},
|
|
93
|
-
{code: 'catapultx'},
|
|
94
93
|
{code: 'ergadx'},
|
|
95
94
|
{code: 'turktelekom'},
|
|
96
95
|
{code: 'felixads'},
|
|
@@ -100,7 +99,8 @@ export const spec = {
|
|
|
100
99
|
{code: 'rtbdemand_com'},
|
|
101
100
|
{code: 'bidbuddy'},
|
|
102
101
|
{code: 'adliveconnect'},
|
|
103
|
-
{code: 'didnadisplay'}
|
|
102
|
+
{code: 'didnadisplay'},
|
|
103
|
+
{code: 'qortex'}
|
|
104
104
|
],
|
|
105
105
|
supportedMediaTypes: [BANNER, VIDEO, NATIVE],
|
|
106
106
|
|
|
@@ -42,7 +42,7 @@ export const adriverIdSubmodule = {
|
|
|
42
42
|
if (!isPlainObject(config.params)) {
|
|
43
43
|
config.params = {};
|
|
44
44
|
}
|
|
45
|
-
const url = 'https://ad.adriver.ru/cgi-bin/json.cgi?sid=1&ad=719473&bt=55&pid=3198680&bid=7189165&bn=7189165&tuid=1';
|
|
45
|
+
const url = 'https://ad.adriver.ru/cgi-bin/json.cgi?sid=1&ad=719473&bt=55&pid=3198680&bid=7189165&bn=7189165&tuid=1&cfa=1';
|
|
46
46
|
const resp = function (callback) {
|
|
47
47
|
let creationDate = storage.getDataFromLocalStorage('adrcid_cd') || storage.getCookie('adrcid_cd');
|
|
48
48
|
let cookie = storage.getDataFromLocalStorage('adrcid') || storage.getCookie('adrcid');
|
|
@@ -12,8 +12,9 @@ import {
|
|
|
12
12
|
deepAccess,
|
|
13
13
|
} from '../src/utils.js';
|
|
14
14
|
import { getGlobal } from '../src/prebidGlobal.js';
|
|
15
|
-
import {getStorageManager} from '../src/storageManager.js';
|
|
16
|
-
import {
|
|
15
|
+
import { getStorageManager } from '../src/storageManager.js';
|
|
16
|
+
import { loadExternalScript } from '../src/adloader.js';
|
|
17
|
+
import { MODULE_TYPE_RTD } from '../src/activities/modules.js';
|
|
17
18
|
|
|
18
19
|
const MODULE_NAME = 'realTimeData';
|
|
19
20
|
const SUBMODULE_NAME = 'airgrid';
|
|
@@ -25,6 +26,11 @@ export const storage = getStorageManager({
|
|
|
25
26
|
moduleName: SUBMODULE_NAME,
|
|
26
27
|
});
|
|
27
28
|
|
|
29
|
+
function getModuleUrl(accountId) {
|
|
30
|
+
const path = accountId ?? 'sdk';
|
|
31
|
+
return `https://cdn.edkt.io/${path}/edgekit.min.js`;
|
|
32
|
+
}
|
|
33
|
+
|
|
28
34
|
/**
|
|
29
35
|
* Attach script tag to DOM
|
|
30
36
|
* @param {Object} rtdConfig
|
|
@@ -33,19 +39,12 @@ export const storage = getStorageManager({
|
|
|
33
39
|
export function attachScriptTagToDOM(rtdConfig) {
|
|
34
40
|
var edktInitializor = (window.edktInitializor = window.edktInitializor || {});
|
|
35
41
|
if (!edktInitializor.invoked) {
|
|
36
|
-
edktInitializor.invoked = true;
|
|
37
42
|
edktInitializor.accountId = rtdConfig.params.accountId;
|
|
38
43
|
edktInitializor.publisherId = rtdConfig.params.publisherId;
|
|
39
44
|
edktInitializor.apiKey = rtdConfig.params.apiKey;
|
|
40
|
-
edktInitializor.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
n.type = 'module';
|
|
44
|
-
n.async = true;
|
|
45
|
-
n.src = 'https://cdn.edkt.io/' + p + '/edgekit.min.js';
|
|
46
|
-
document.getElementsByTagName('head')[0].appendChild(n);
|
|
47
|
-
};
|
|
48
|
-
edktInitializor.load(edktInitializor.accountId);
|
|
45
|
+
edktInitializor.invoked = true;
|
|
46
|
+
const moduleSrc = getModuleUrl(rtdConfig.params.accountId);
|
|
47
|
+
loadExternalScript(moduleSrc, SUBMODULE_NAME);
|
|
49
48
|
}
|
|
50
49
|
}
|
|
51
50
|
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import {config} from '../src/config.js';
|
|
2
|
+
import {registerActivityControl} from '../src/activities/rules.js';
|
|
3
|
+
|
|
4
|
+
const CFG_NAME = 'allowActivities';
|
|
5
|
+
const RULE_NAME = `${CFG_NAME} config`;
|
|
6
|
+
const DEFAULT_PRIORITY = 1;
|
|
7
|
+
|
|
8
|
+
export function updateRulesFromConfig(registerRule) {
|
|
9
|
+
const activeRuleHandles = new Map();
|
|
10
|
+
const defaultRuleHandles = new Map();
|
|
11
|
+
const rulesByActivity = new Map();
|
|
12
|
+
|
|
13
|
+
function clearAllRules() {
|
|
14
|
+
rulesByActivity.clear();
|
|
15
|
+
Array.from(activeRuleHandles.values())
|
|
16
|
+
.flatMap(ruleset => Array.from(ruleset.values()))
|
|
17
|
+
.forEach(fn => fn());
|
|
18
|
+
activeRuleHandles.clear();
|
|
19
|
+
Array.from(defaultRuleHandles.values()).forEach(fn => fn());
|
|
20
|
+
defaultRuleHandles.clear();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function cleanParams(params) {
|
|
24
|
+
// remove private parameters for publisher condition checks
|
|
25
|
+
return Object.fromEntries(Object.entries(params).filter(([k]) => !k.startsWith('_')))
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function setupRule(activity, priority) {
|
|
29
|
+
if (!activeRuleHandles.has(activity)) {
|
|
30
|
+
activeRuleHandles.set(activity, new Map())
|
|
31
|
+
}
|
|
32
|
+
const handles = activeRuleHandles.get(activity);
|
|
33
|
+
if (!handles.has(priority)) {
|
|
34
|
+
handles.set(priority, registerRule(activity, RULE_NAME, function (params) {
|
|
35
|
+
for (const rule of rulesByActivity.get(activity).get(priority)) {
|
|
36
|
+
if (!rule.condition || rule.condition(cleanParams(params))) {
|
|
37
|
+
return {allow: rule.allow, reason: rule}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}, priority));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function setupDefaultRule(activity) {
|
|
45
|
+
if (!defaultRuleHandles.has(activity)) {
|
|
46
|
+
defaultRuleHandles.set(activity, registerRule(activity, RULE_NAME, function () {
|
|
47
|
+
return {allow: false, reason: 'activity denied by default'}
|
|
48
|
+
}, Number.POSITIVE_INFINITY))
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
config.getConfig(CFG_NAME, (cfg) => {
|
|
53
|
+
clearAllRules();
|
|
54
|
+
Object.entries(cfg[CFG_NAME]).forEach(([activity, activityCfg]) => {
|
|
55
|
+
if (activityCfg.default === false) {
|
|
56
|
+
setupDefaultRule(activity);
|
|
57
|
+
}
|
|
58
|
+
const rules = new Map();
|
|
59
|
+
rulesByActivity.set(activity, rules);
|
|
60
|
+
|
|
61
|
+
(activityCfg.rules || []).forEach(rule => {
|
|
62
|
+
const priority = rule.priority == null ? DEFAULT_PRIORITY : rule.priority;
|
|
63
|
+
if (!rules.has(priority)) {
|
|
64
|
+
rules.set(priority, [])
|
|
65
|
+
}
|
|
66
|
+
rules.get(priority).push(rule);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
Array.from(rules.keys()).forEach(priority => setupRule(activity, priority));
|
|
70
|
+
});
|
|
71
|
+
})
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
updateRulesFromConfig(registerActivityControl);
|
package/modules/asoBidAdapter.js
CHANGED
|
@@ -37,6 +37,8 @@ export const spec = {
|
|
|
37
37
|
*/
|
|
38
38
|
buildRequests: function(validBidRequests, bidderRequest) {
|
|
39
39
|
const slots = validBidRequests.map(beOpRequestSlotsMaker);
|
|
40
|
+
const firstPartyData = bidderRequest.ortb2;
|
|
41
|
+
const psegs = (firstPartyData && firstPartyData.user && firstPartyData.user.ext && firstPartyData.user.ext.data) ? firstPartyData.user.ext.data.permutive : undefined;
|
|
40
42
|
const pageUrl = getPageUrl(bidderRequest.refererInfo, window);
|
|
41
43
|
const gdpr = bidderRequest.gdprConsent;
|
|
42
44
|
const firstSlot = slots[0];
|
|
@@ -68,6 +70,10 @@ export const spec = {
|
|
|
68
70
|
tc_string: (gdpr && gdpr.gdprApplies) ? gdpr.consentString : null,
|
|
69
71
|
};
|
|
70
72
|
|
|
73
|
+
if (psegs) {
|
|
74
|
+
Object.assign(payloadObject, {psegs: psegs});
|
|
75
|
+
}
|
|
76
|
+
|
|
71
77
|
const payloadString = JSON.stringify(payloadObject);
|
|
72
78
|
return {
|
|
73
79
|
method: 'POST',
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { registerBidder } from '../src/adapters/bidderFactory.js';
|
|
2
|
+
import { BANNER } from '../src/mediaTypes.js';
|
|
3
|
+
// import { logError, logInfo, logWarn, parseUrl } from '../src/utils.js';
|
|
4
|
+
|
|
5
|
+
const BIDDER_CODE = 'conceptx';
|
|
6
|
+
let ENDPOINT_URL = 'https://conceptx.cncpt-central.com/openrtb';
|
|
7
|
+
// const LOG_PREFIX = 'ConceptX: ';
|
|
8
|
+
|
|
9
|
+
export const spec = {
|
|
10
|
+
code: BIDDER_CODE,
|
|
11
|
+
supportedMediaTypes: [BANNER],
|
|
12
|
+
isBidRequestValid: function (bid) {
|
|
13
|
+
return !!(bid.bidId);
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
buildRequests: function (validBidRequests, bidderRequest) {
|
|
17
|
+
// logWarn(LOG_PREFIX + 'all native assets containing URL should be sent as placeholders with sendId(icon, image, clickUrl, displayUrl, privacyLink, privacyIcon)');
|
|
18
|
+
const requests = [];
|
|
19
|
+
|
|
20
|
+
if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies) {
|
|
21
|
+
ENDPOINT_URL += '?gdpr_applies=' + bidderRequest.gdprConsent.gdprApplies;
|
|
22
|
+
ENDPOINT_URL += '&consentString=' + bidderRequest.gdprConsent.consentString;
|
|
23
|
+
}
|
|
24
|
+
for (var i = 0; i < validBidRequests.length; i++) {
|
|
25
|
+
const requestParent = { adUnits: [], meta: {} };
|
|
26
|
+
const bid = validBidRequests[i]
|
|
27
|
+
const { adUnitCode, auctionId, bidId, bidder, bidderRequestId, ortb2 } = bid
|
|
28
|
+
requestParent.meta = { adUnitCode, auctionId, bidId, bidder, bidderRequestId, ortb2 }
|
|
29
|
+
|
|
30
|
+
const { site, adunit } = bid.params
|
|
31
|
+
const adUnit = { site, adunit, targetId: bid.bidId }
|
|
32
|
+
if (bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes) adUnit.dimensions = bid.mediaTypes.banner.sizes
|
|
33
|
+
requestParent.adUnits.push(adUnit);
|
|
34
|
+
requests.push({
|
|
35
|
+
method: 'POST',
|
|
36
|
+
url: ENDPOINT_URL,
|
|
37
|
+
options: {
|
|
38
|
+
withCredentials: false,
|
|
39
|
+
},
|
|
40
|
+
data: JSON.stringify(requestParent),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return requests;
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
interpretResponse: function (serverResponse, bidRequest) {
|
|
48
|
+
const bidResponsesFromServer = serverResponse.body.bidResponses;
|
|
49
|
+
const firstDummy = bidResponsesFromServer[0]
|
|
50
|
+
const firstSeat = firstDummy.ads[0]
|
|
51
|
+
const bidResponses = [];
|
|
52
|
+
const bidResponse = {
|
|
53
|
+
requestId: firstSeat.requestId,
|
|
54
|
+
cpm: firstSeat.cpm,
|
|
55
|
+
width: firstSeat.width,
|
|
56
|
+
height: firstSeat.height,
|
|
57
|
+
creativeId: firstSeat.creativeId,
|
|
58
|
+
dealId: firstSeat.dealId,
|
|
59
|
+
currency: firstSeat.currency,
|
|
60
|
+
netRevenue: true,
|
|
61
|
+
ttl: firstSeat.ttl,
|
|
62
|
+
referrer: firstSeat.referrer,
|
|
63
|
+
ad: firstSeat.html
|
|
64
|
+
};
|
|
65
|
+
bidResponses.push(bidResponse);
|
|
66
|
+
return bidResponses;
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
registerBidder(spec);
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
Module Name: ConceptX Bidder Adapter
|
|
5
|
+
Module Type: Bidder Adapter
|
|
6
|
+
Maintainer: info@concept.dk
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
# Description
|
|
10
|
+
|
|
11
|
+
ConceptX Bidder Adapter for Prebid.js.
|
|
12
|
+
Only Banner format is supported.
|
|
13
|
+
|
|
14
|
+
# Test Parameters
|
|
15
|
+
```
|
|
16
|
+
var adUnits = [
|
|
17
|
+
{
|
|
18
|
+
code: "test-div",
|
|
19
|
+
mediaTypes: {
|
|
20
|
+
banner: {
|
|
21
|
+
sizes: [[980, 180]]
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
bids: [
|
|
25
|
+
{
|
|
26
|
+
bidder: "conceptx",
|
|
27
|
+
params: {
|
|
28
|
+
site: "example",
|
|
29
|
+
adunit: "some-id-3",
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
];
|
|
36
|
+
```
|
|
@@ -11,11 +11,16 @@ import {includes} from '../src/polyfill.js';
|
|
|
11
11
|
import {getRefererInfo} from '../src/refererDetection.js';
|
|
12
12
|
import {getStorageManager} from '../src/storageManager.js';
|
|
13
13
|
import {formatQS, isPlainObject, logError, parseUrl} from '../src/utils.js';
|
|
14
|
-
import {uspDataHandler} from '../src/adapterManager.js';
|
|
14
|
+
import {uspDataHandler, gppDataHandler} from '../src/adapterManager.js';
|
|
15
15
|
import {MODULE_TYPE_UID} from '../src/activities/modules.js';
|
|
16
16
|
|
|
17
17
|
const MODULE_NAME = 'connectId';
|
|
18
|
-
const STORAGE_EXPIRY_DAYS =
|
|
18
|
+
const STORAGE_EXPIRY_DAYS = 365;
|
|
19
|
+
const STORAGE_DURATION = 60 * 60 * 24 * 1000 * STORAGE_EXPIRY_DAYS;
|
|
20
|
+
const ID_EXPIRY_DAYS = 14;
|
|
21
|
+
const VALID_ID_DURATION = 60 * 60 * 24 * 1000 * ID_EXPIRY_DAYS;
|
|
22
|
+
const PUID_EXPIRY_DAYS = 30;
|
|
23
|
+
const PUID_EXPIRY = 60 * 60 * 24 * 1000 * PUID_EXPIRY_DAYS;
|
|
19
24
|
const VENDOR_ID = 25;
|
|
20
25
|
const PLACEHOLDER = '__PIXEL_ID__';
|
|
21
26
|
const UPS_ENDPOINT = `https://ups.analytics.yahoo.com/ups/${PLACEHOLDER}/fed`;
|
|
@@ -28,11 +33,11 @@ export const storage = getStorageManager({moduleType: MODULE_TYPE_UID, moduleNam
|
|
|
28
33
|
* @param {Object} obj
|
|
29
34
|
*/
|
|
30
35
|
function storeObject(obj) {
|
|
31
|
-
const expires = Date.now() +
|
|
36
|
+
const expires = Date.now() + STORAGE_DURATION;
|
|
32
37
|
if (storage.cookiesAreEnabled()) {
|
|
33
38
|
setEtldPlusOneCookie(MODULE_NAME, JSON.stringify(obj), new Date(expires), getSiteHostname());
|
|
34
|
-
}
|
|
35
|
-
|
|
39
|
+
}
|
|
40
|
+
if (storage.localStorageIsEnabled()) {
|
|
36
41
|
storage.setDataInLocalStorage(MODULE_NAME, JSON.stringify(obj));
|
|
37
42
|
}
|
|
38
43
|
}
|
|
@@ -75,7 +80,9 @@ function getIdFromLocalStorage() {
|
|
|
75
80
|
if (storedIdData) {
|
|
76
81
|
try {
|
|
77
82
|
storedIdData = JSON.parse(storedIdData);
|
|
78
|
-
} catch {
|
|
83
|
+
} catch (e) {
|
|
84
|
+
logError(`${MODULE_NAME} module: error while reading the local storage data.`);
|
|
85
|
+
}
|
|
79
86
|
if (isPlainObject(storedIdData) && storedIdData.__expires &&
|
|
80
87
|
storedIdData.__expires <= Date.now()) {
|
|
81
88
|
storage.removeDataFromLocalStorage(MODULE_NAME);
|
|
@@ -87,6 +94,34 @@ function getIdFromLocalStorage() {
|
|
|
87
94
|
return null;
|
|
88
95
|
}
|
|
89
96
|
|
|
97
|
+
function syncLocalStorageToCookie() {
|
|
98
|
+
if (!storage.cookiesAreEnabled()) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const value = getIdFromLocalStorage();
|
|
102
|
+
const newCookieExpireTime = Date.now() + STORAGE_DURATION;
|
|
103
|
+
setEtldPlusOneCookie(MODULE_NAME, JSON.stringify(value), new Date(newCookieExpireTime), getSiteHostname());
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function isStale(storedIdData) {
|
|
107
|
+
if (isPlainObject(storedIdData) && storedIdData.lastSynced &&
|
|
108
|
+
(storedIdData.lastSynced + VALID_ID_DURATION) <= Date.now()) {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function getStoredId() {
|
|
115
|
+
let storedId = getIdFromCookie();
|
|
116
|
+
if (!storedId) {
|
|
117
|
+
storedId = getIdFromLocalStorage();
|
|
118
|
+
if (storedId && !isStale(storedId)) {
|
|
119
|
+
syncLocalStorageToCookie();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return storedId;
|
|
123
|
+
}
|
|
124
|
+
|
|
90
125
|
function getSiteHostname() {
|
|
91
126
|
const pageInfo = parseUrl(getRefererInfo().page);
|
|
92
127
|
return pageInfo.hostname;
|
|
@@ -127,16 +162,31 @@ export const connectIdSubmodule = {
|
|
|
127
162
|
return;
|
|
128
163
|
}
|
|
129
164
|
const params = config.params || {};
|
|
130
|
-
if (!params ||
|
|
165
|
+
if (!params ||
|
|
131
166
|
(typeof params.pixelId === 'undefined' && typeof params.endpoint === 'undefined')) {
|
|
132
|
-
logError(`${MODULE_NAME} module:
|
|
133
|
-
`least one of the 'he' or 'puid' parameters to be defined.`);
|
|
167
|
+
logError(`${MODULE_NAME} module: configuration requires the 'pixelId'.`);
|
|
134
168
|
return;
|
|
135
169
|
}
|
|
136
170
|
|
|
137
|
-
const storedId =
|
|
171
|
+
const storedId = getStoredId();
|
|
172
|
+
|
|
173
|
+
let shouldResync = isStale(storedId);
|
|
174
|
+
|
|
138
175
|
if (storedId) {
|
|
139
|
-
|
|
176
|
+
if (isPlainObject(storedId) && storedId.puid && storedId.lastUsed && !params.puid &&
|
|
177
|
+
(storedId.lastUsed + PUID_EXPIRY) <= Date.now()) {
|
|
178
|
+
delete storedId.puid;
|
|
179
|
+
shouldResync = true;
|
|
180
|
+
}
|
|
181
|
+
if ((params.he && params.he !== storedId.he) ||
|
|
182
|
+
(params.puid && params.puid !== storedId.puid)) {
|
|
183
|
+
shouldResync = true;
|
|
184
|
+
}
|
|
185
|
+
if (!shouldResync) {
|
|
186
|
+
storedId.lastUsed = Date.now();
|
|
187
|
+
storeObject(storedId);
|
|
188
|
+
return {id: storedId};
|
|
189
|
+
}
|
|
140
190
|
}
|
|
141
191
|
|
|
142
192
|
const uspString = uspDataHandler.getConsentData() || '';
|
|
@@ -148,6 +198,14 @@ export const connectIdSubmodule = {
|
|
|
148
198
|
us_privacy: uspString
|
|
149
199
|
};
|
|
150
200
|
|
|
201
|
+
const gppConsent = gppDataHandler.getConsentData();
|
|
202
|
+
if (gppConsent) {
|
|
203
|
+
data.gpp = `${gppConsent.gppString ? gppConsent.gppString : ''}`;
|
|
204
|
+
if (Array.isArray(gppConsent.applicableSections)) {
|
|
205
|
+
data.gpp_sid = gppConsent.applicableSections.join(',');
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
151
209
|
let topmostLocation = getRefererInfo().topmostLocation;
|
|
152
210
|
if (typeof topmostLocation === 'string') {
|
|
153
211
|
data.url = topmostLocation.split('?')[0];
|
|
@@ -159,6 +217,14 @@ export const connectIdSubmodule = {
|
|
|
159
217
|
}
|
|
160
218
|
});
|
|
161
219
|
|
|
220
|
+
const hashedEmail = params.he || storedId?.he;
|
|
221
|
+
if (hashedEmail) {
|
|
222
|
+
data.he = hashedEmail;
|
|
223
|
+
}
|
|
224
|
+
if (!data.puid && storedId?.puid) {
|
|
225
|
+
data.puid = storedId.puid;
|
|
226
|
+
}
|
|
227
|
+
|
|
162
228
|
const resp = function (callback) {
|
|
163
229
|
const callbacks = {
|
|
164
230
|
success: response => {
|
|
@@ -166,7 +232,12 @@ export const connectIdSubmodule = {
|
|
|
166
232
|
if (response) {
|
|
167
233
|
try {
|
|
168
234
|
responseObj = JSON.parse(response);
|
|
169
|
-
if (isPlainObject(responseObj) && Object.keys(responseObj).length > 0
|
|
235
|
+
if (isPlainObject(responseObj) && Object.keys(responseObj).length > 0 &&
|
|
236
|
+
(!!responseObj.connectId || !!responseObj.connectid)) {
|
|
237
|
+
responseObj.he = params.he;
|
|
238
|
+
responseObj.puid = params.puid || responseObj.puid;
|
|
239
|
+
responseObj.lastSynced = Date.now();
|
|
240
|
+
responseObj.lastUsed = Date.now();
|
|
170
241
|
storeObject(responseObj);
|
|
171
242
|
} else {
|
|
172
243
|
logError(`${MODULE_NAME} module: UPS response returned an invalid payload ${response}`);
|
|
@@ -186,7 +257,12 @@ export const connectIdSubmodule = {
|
|
|
186
257
|
let url = `${params.endpoint || endpoint}?${formatQS(data)}`;
|
|
187
258
|
connectIdSubmodule.getAjaxFn()(url, callbacks, null, {method: 'GET', withCredentials: true});
|
|
188
259
|
};
|
|
189
|
-
|
|
260
|
+
const result = {callback: resp};
|
|
261
|
+
if (shouldResync && storedId) {
|
|
262
|
+
result.id = storedId;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
return result;
|
|
190
266
|
},
|
|
191
267
|
|
|
192
268
|
/**
|