@tyrads.com/tyrads-sdk-iframe
Version:
Official TyrAds SDK for NodeJS
69 lines (68 loc) • 2.81 kB
JavaScript
;
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;
}