UNPKG

@tyrads.com/tyrads-sdk-iframe

Version:

Official TyrAds SDK for NodeJS

69 lines (68 loc) 2.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateAuthenticationRequest = validateAuthenticationRequest; exports.getParsedAuthenticationRequestData = getParsedAuthenticationRequestData; /** * Validates an AuthenticationRequest object. * Throws an error if validation fails. */ function validateAuthenticationRequest(request) { if (!request.publisherUserId || typeof request.publisherUserId !== 'string') { throw new Error('Publisher User ID cannot be empty and must be a string.'); } if (request.age !== null && request.age !== undefined && (!Number.isInteger(request.age) || request.age < 0)) { throw new Error('Age must be a non-negative integer.'); } if (request.gender !== null && request.gender !== undefined && request.gender !== 1 && request.gender !== 2) { throw new Error('Gender must be either 1 (male) or 2 (female).'); } if (request.email) { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(request.email)) { throw new Error('Invalid email format.'); } } if (request.phoneNumber) { const phoneRegex = /^\+?[0-9\- ]{7,20}$/; if (!phoneRegex.test(request.phoneNumber)) { throw new Error('Invalid phone number format.'); } } const stringFields = [ 'sub1', 'sub2', 'sub3', 'sub4', 'sub5', 'userGroup', 'mediaSourceName', 'mediaSourceId', 'mediaSubSourceId', 'mediaAdsetName', 'mediaAdsetId', 'mediaCreativeName', 'mediaCreativeId', 'mediaCampaignName' ]; stringFields.forEach(field => { const value = request[field]; if (value !== undefined && typeof value !== 'string') { throw new Error(`${field} must be a string.`); } }); if (request.incentivized !== undefined && typeof request.incentivized !== 'boolean') { throw new Error('incentivized must be a boolean.'); } } /** * Returns a parsed data object containing the authentication request data. * Only includes fields that are defined and non-empty. */ function getParsedAuthenticationRequestData(request) { const data = { publisherUserId: request.publisherUserId, }; const optionalFields = [ 'age', 'gender', 'email', 'phoneNumber', 'sub1', 'sub2', 'sub3', 'sub4', 'sub5', 'userGroup', 'mediaSourceName', 'mediaSourceId', 'mediaSubSourceId', 'incentivized', 'mediaAdsetName', 'mediaAdsetId', 'mediaCreativeName', 'mediaCreativeId', 'mediaCampaignName' ]; optionalFields.forEach(field => { const value = request[field]; if (value !== undefined && (typeof value === 'string' ? value !== '' : true)) { data[field] = value; } }); return data; }