UNPKG

dataveil

Version:

A robust TypeScript library for masking sensitive data including card numbers, emails, passwords, phone numbers, and more.

47 lines (46 loc) 1.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.maskPhoneNumber = maskPhoneNumber; function maskPhoneNumber(phone, options) { if (options === void 0) { options = {}; } if (!phone || typeof phone !== 'string') { throw new Error('Phone number must be a non-empty string'); } var _a = options.maskChar, maskChar = _a === void 0 ? "*" : _a, _b = options.unmaskedStartDigits, unmaskedStartDigits = _b === void 0 ? 0 : _b, _c = options.unmaskedEndDigits, unmaskedEndDigits = _c === void 0 ? 4 : _c; if (!maskChar || maskChar.length !== 1) { throw new Error('Mask character must be a single character'); } if (unmaskedStartDigits < 0 || unmaskedEndDigits < 0) { throw new Error('Unmasked digits cannot be negative'); } var prefix = ""; var workingPhone = phone; // Extract prefix if (phone.startsWith("+")) { prefix = "+"; workingPhone = phone.slice(1); } else if (phone.startsWith("00")) { prefix = "00"; workingPhone = phone.slice(2); } // Extract digits and their positions var digits = workingPhone.replace(/[^0-9]/g, ""); if (digits.length === 0) { throw new Error('Phone number must contain at least one digit'); } // Create mask pattern var startVisible = Math.min(unmaskedStartDigits, digits.length); var endVisible = Math.min(unmaskedEndDigits, digits.length - startVisible); var resultArray = (prefix + workingPhone).split(''); var digitIndex = 0; for (var i = prefix.length; i < resultArray.length; i++) { if (/[0-9]/.test(resultArray[i])) { if (digitIndex >= startVisible && digitIndex < digits.length - endVisible) { resultArray[i] = maskChar; } digitIndex++; } } return resultArray.join(''); }