smh-mongoose-utils
is a lightweight and flexible Mongoose plugin utility that allows you to easily add field-level encryption and decryption to your schemas using your own encrypt
and decrypt
functions. It works seamlessly with your schema definitions and preserves all Mongoose options like required
, default
, etc.
Perfect for securing sensitive fields like PAN, Aadhaar, contact numbers, or any personally identifiable information (PII).
# Using NPM
npm install smh-mongoose-utils
# Using Yarn
yarn add smh-mongoose-utils
- 🔐 Plug-and-play encryption support for string fields
- 📦 Works with any custom
encrypt
anddecrypt
functions - ✅ Keeps Mongoose field options like
default
,required
, etc. - 🔁 Supports both
toJSON
andtoObject
getters - 📄 Clean and modular design for easy integration
import { Schema } from 'mongoose';
const CustomerSchema = new Schema({
pan: { type: String, required: true },
aadhaar: { type: String },
contactNumber: { type: String, default: null },
});
export const encryptText = (text: string): string => {
// your encryption logic
return 'encrypted-' + text;
};
export const decryptText = (text: string): string => {
// your decryption logic
return text.replace('encrypted-', '');
};
import { applyEncryptedFields } from 'smh-mongoose-utils';
import { CustomerSchema } from './models';
import { encryptText, decryptText } from './crypto';
applyEncryptedFields({
schema: CustomerSchema,
encryptedFields: ['pan', 'aadhaar', 'contactNumber'],
options:{
encrypt: encryptText,
decrypt: decryptText,
}
});
Option | Type | Description |
---|---|---|
schema |
Schema |
The Mongoose schema to apply encryption to. |
encryptedFields |
string[] |
Array of field names to encrypt/decrypt. |
encrypt |
(value: string) => string |
Your encryption function (not mandatory defaults to AES-256-GCM) - But not recommended to use the default, but, default is also very secure. |
decrypt |
(value: string) => string |
Your decryption function (not mandatory defaults to AES-256-GCM) - But not recommended to use the default, but, default is also very secure. |
📝 Note: Fields should be of type
String
. For optional fields, nulls are preserved.
const encryptedFields = ['pan', 'aadhaar', 'email'];
applyEncryptedFields({
schema: UserSchema,
encryptedFields,
options:{
encrypt: encryptText,
decrypt: decryptText,
}
});
Contributions are welcome! Feel free to open issues or submit pull requests. Let's make data security easier together 💪
Made with ❤️ by S MUNI HARISH
Apache-2.0 License – see LICENSE