UNPKG

mk9-prebid

Version:

Header Bidding Management Library

106 lines (96 loc) 3.2 kB
/** * This module adds verizonMediaId to the User ID module * The {@link module:modules/userId} module is required * @module modules/verizonMediaIdSystem * @requires module:modules/userId */ import {ajax} from '../src/ajax.js'; import {submodule} from '../src/hook.js'; import * as utils from '../src/utils.js'; import includes from 'core-js-pure/features/array/includes.js'; const MODULE_NAME = 'verizonMediaId'; const VENDOR_ID = 25; const PLACEHOLDER = '__PIXEL_ID__'; const VMCID_ENDPOINT = `https://ups.analytics.yahoo.com/ups/${PLACEHOLDER}/fed`; function isEUConsentRequired(consentData) { return !!(consentData && consentData.gdpr && consentData.gdpr.gdprApplies); } /** @type {Submodule} */ export const verizonMediaIdSubmodule = { /** * used to link submodule with config * @type {string} */ name: MODULE_NAME, /** * Vendor id of Verizon Media EMEA Limited * @type {Number} */ gvlid: VENDOR_ID, /** * decode the stored id value for passing to bid requests * @function * @returns {{connectid: string} | undefined} */ decode(value) { return (typeof value === 'object' && (value.connectid || value.vmuid)) ? {connectid: value.connectid || value.vmuid} : undefined; }, /** * Gets the Verizon Media Connect ID * @function * @param {SubmoduleConfig} [config] * @param {ConsentData} [consentData] * @returns {IdResponse|undefined} */ getId(config, consentData) { const params = config.params || {}; if (!params || typeof params.he !== 'string' || (typeof params.pixelId === 'undefined' && typeof params.endpoint === 'undefined')) { utils.logError('The verizonMediaId submodule requires the \'he\' and \'pixelId\' parameters to be defined.'); return; } const data = { '1p': includes([1, '1', true], params['1p']) ? '1' : '0', he: params.he, gdpr: isEUConsentRequired(consentData) ? '1' : '0', gdpr_consent: isEUConsentRequired(consentData) ? consentData.gdpr.consentString : '', us_privacy: consentData && consentData.uspConsent ? consentData.uspConsent : '' }; if (params.pixelId) { data.pixelId = params.pixelId } const resp = function (callback) { const callbacks = { success: response => { let responseObj; if (response) { try { responseObj = JSON.parse(response); } catch (error) { utils.logError(error); } } callback(responseObj); }, error: error => { utils.logError(`${MODULE_NAME}: ID fetch encountered an error`, error); callback(); } }; const endpoint = VMCID_ENDPOINT.replace(PLACEHOLDER, params.pixelId); let url = `${params.endpoint || endpoint}?${utils.formatQS(data)}`; verizonMediaIdSubmodule.getAjaxFn()(url, callbacks, null, {method: 'GET', withCredentials: true}); }; return {callback: resp}; }, /** * Return the function used to perform XHR calls. * Utilised for each of testing. * @returns {Function} */ getAjaxFn() { return ajax; } }; submodule('userId', verizonMediaIdSubmodule);