dataveil
Version:
A robust TypeScript library for masking sensitive data including card numbers, emails, passwords, phone numbers, and more.
209 lines (158 loc) • 5.28 kB
Markdown
# DataVeil
[](https://badge.fury.io/js/dataveil)
[](https://github.com/AmJaradat01/dataveil/actions)
[](https://github.com/AmJaradat01/dataveil)
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.
## Features
- 🔒 **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
## Installation
```bash
npm install dataveil
```
## Quick Start
```typescript
import { 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"
```
## API Reference
### Card Number Masking
```typescript
DataVeil.maskCardNumber('1234567812345678', {
maskChar: '#',
unmaskedStartDigits: 2,
unmaskedEndDigits: 4
}); // "12##########5678"
```
### Email Masking
```typescript
DataVeil.maskEmail('example@example.com', {
maskChar: '#',
emailMaskVisibleChars: 3
}); // "exa####@example.com"
```
### Phone Number Masking (Format Preserving)
```typescript
DataVeil.maskPhoneNumber('123-456-7890', {
maskChar: '#',
unmaskedStartDigits: 2,
unmaskedEndDigits: 1
}); // "12#-###-###0"
// International formats supported
DataVeil.maskPhoneNumber('+1-234-567-8900'); // "+*-***-***-8900"
```
### Password Masking
```typescript
DataVeil.maskPassword('supersecret', { maskChar: '#' }); // "###########"
```
### UUID Masking
```typescript
DataVeil.maskUUID('123e4567-e89b-12d3-a456-426614174000', {
maskChar: '#',
unmaskedStartDigits: 8,
unmaskedEndDigits: 4
}); // "123e4567########################4000"
```
### JWT Token Masking
```typescript
DataVeil.maskJWT('header.payload.signature', { maskChar: '#' });
// "######.#######.#########"
```
### Substring Masking
```typescript
DataVeil.maskSubstring('hello world world', 'world', {
maskChar: '#',
maskOnlyFirstOccurrence: true
}); // "hello ##### world"
```
### JSON Object Masking
#### Simple Field Masking
```typescript
const data = {
card: '1234567812345678',
email: 'user@example.com'
};
DataVeil.maskJSON(data, ['card', 'email']);
// { card: "************5678", email: "us**@example.com" }
```
#### Nested Field Masking
```typescript
const data = {
user: {
payment: { card: '1234567812345678' },
contact: { email: 'user@example.com' }
}
};
DataVeil.maskJSON(data, ['user.payment.card', 'user.contact.email']);
```
#### Advanced Field Configuration
```typescript
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 }
}
]);
```
## Configuration Options
| 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 |
## Field Types for JSON Masking
- `card` - Credit card numbers
- `email` - Email addresses
- `phone` - Phone numbers
- `uuid` - UUID strings
- `password` - Passwords
- `custom` - Generic string masking
## Error Handling
All functions include input validation and throw descriptive errors:
```typescript
try {
DataVeil.maskEmail('invalid-email');
} catch (error) {
console.error(error.message); // "Invalid email format"
}
```
## Development
```bash
# Install dependencies
npm install
# Run tests
npm test
# Run tests with coverage
npm run test:coverage
# Build the library
npm run build
```
## Contributing
Contributions 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.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Changelog
See [CHANGELOG.md](CHANGELOG.md) for detailed release notes and version history.