A robust TypeScript library for masking sensitive data including card numbers, email addresses, passwords, phone numbers, UUIDs, JWT tokens, and JSON objects. Perfect for GDPR compliance and data privacy protection.
- π Comprehensive Data Masking: Support for cards, emails, phones, passwords, UUIDs, JWTs
- π― Flexible Configuration: Customizable mask characters and visibility options
- ποΈ TypeScript First: Full type safety and IntelliSense support
- π± Format Preservation: Maintains original formatting (dashes, spaces, etc.)
- π³ Nested JSON Support: Deep object masking with dot notation
- π Unicode Support: Full Unicode character support
- β Input Validation: Built-in validation for all data types
- π‘οΈ Security Hardened: Protection against injection and DoS attacks
- π Zero Dependencies: Lightweight and fast
- π¦ Dual Module Support: CommonJS and ES modules
npm install dataveilimport { DataVeil } from 'dataveil';
// Basic usage with default options
DataVeil.maskCardNumber('1234567812345678'); // "************5678"
DataVeil.maskEmail('user@example.com'); // "us**@example.com"
DataVeil.maskPhoneNumber('123-456-7890'); // "***-***-7890"DataVeil.maskCardNumber('1234567812345678', {
maskChar: '#',
unmaskedStartDigits: 2,
unmaskedEndDigits: 4
}); // "12##########5678"DataVeil.maskEmail('example@example.com', {
maskChar: '#',
emailMaskVisibleChars: 3
}); // "exa####@example.com"DataVeil.maskPhoneNumber('123-456-7890', {
maskChar: '#',
unmaskedStartDigits: 2,
unmaskedEndDigits: 1
}); // "12#-###-###0"
// International formats supported
DataVeil.maskPhoneNumber('+1-234-567-8900'); // "+*-***-***-8900"DataVeil.maskPassword('supersecret', { maskChar: '#' }); // "###########"DataVeil.maskUUID('123e4567-e89b-12d3-a456-426614174000', {
maskChar: '#',
unmaskedStartDigits: 8,
unmaskedEndDigits: 4
}); // "123e4567########################4000"DataVeil.maskJWT('header.payload.signature', { maskChar: '#' });
// "######.#######.#########"DataVeil.maskSubstring('hello world world', 'world', {
maskChar: '#',
maskOnlyFirstOccurrence: true
}); // "hello ##### world"const data = {
card: '1234567812345678',
email: 'user@example.com'
};
DataVeil.maskJSON(data, ['card', 'email']);
// { card: "************5678", email: "us**@example.com" }const data = {
user: {
payment: { card: '1234567812345678' },
contact: { email: 'user@example.com' }
}
};
DataVeil.maskJSON(data, ['user.payment.card', 'user.contact.email']);const data = {
creditCard: '1234567812345678',
userEmail: 'user@example.com'
};
DataVeil.maskJSON(data, [
{
path: 'creditCard',
type: 'card',
options: { maskChar: '#', unmaskedStartDigits: 4 }
},
{
path: 'userEmail',
type: 'email',
options: { emailMaskVisibleChars: 1 }
}
]);| Option | Type | Default | Description |
|---|---|---|---|
maskChar |
string | "*" |
Character used for masking |
unmaskedStartDigits |
number | 0 |
Number of digits to show at start |
unmaskedEndDigits |
number | 4 |
Number of digits to show at end |
emailMaskVisibleChars |
number | 2 |
Visible characters in email username |
maskOnlyFirstOccurrence |
boolean | false |
Mask only first occurrence in substring |
card- Credit card numbersemail- Email addressesphone- Phone numbersuuid- UUID stringspassword- Passwordscustom- Generic string masking
All functions include input validation and throw descriptive errors:
try {
DataVeil.maskEmail('invalid-email');
} catch (error) {
console.error(error.message); // "Invalid email format"
}# Install dependencies
npm install
# Run tests
npm test
# Run tests with coverage
npm run test:coverage
# Build the library
npm run buildContributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
This project is licensed under the MIT License - see the LICENSE file for details.
See CHANGELOG.md for detailed release notes and version history.