UNPKG

@tyrads.com/tyrads-sdk-iframe

Version:

Official TyrAds SDK for NodeJS

85 lines (84 loc) 3.69 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', 'mediaSourceName', 'mediaSourceId', 'mediaSubSourceId', 'mediaAdsetName', 'mediaAdsetId', 'mediaCreativeName', 'mediaCreativeId', 'mediaCampaignName' ]; stringFields.forEach(field => { const value = request[field]; if (value !== undefined && value !== null && typeof value !== 'string') { throw new Error(`${field} must be a string.`); } }); if (request.userGroup !== undefined && request.userGroup !== null) { const isPlainObject = typeof request.userGroup === 'object' && !Array.isArray(request.userGroup); if (typeof request.userGroup !== 'string' && !isPlainObject) { throw new Error('userGroup must be a string or an object.'); } } if (request.incentivized !== undefined && request.incentivized !== null && typeof request.incentivized !== 'boolean') { throw new Error('incentivized must be a boolean.'); } if (request.engagementId !== undefined && request.engagementId !== null) { if (typeof request.engagementId !== 'number' || !Number.isInteger(request.engagementId) || request.engagementId <= 0) { throw new Error('engagementId must be a positive integer.'); } } } /** * 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', 'engagementId' ]; optionalFields.forEach(field => { const value = request[field]; if (value !== undefined && (typeof value === 'string' ? value !== '' : true)) { if (field === 'userGroup' && value !== null && typeof value === 'object') { data[field] = JSON.stringify(value); } else { data[field] = value; } } }); return data; }