Habibi is a TypeScript library for encrypting and decrypting Personally Identifiable Information (PII) fields with customizable functions. It allows you to define your own encryption, decryption, and hashing methods, as well as the fields that should be treated as PII.
You can install the package via npm:
npm install @zakyyudha/habibi
First, import the Habibi class and the necessary types:
import { Habibi, Config } from 'habibi';
Here's an example of how to use the Habibi class:
const config: Config = {
piiFields: ['nik', 'phoneNumber', 'email'],
encryptFn: (str: string) => 'ENCRYPTED_' + str,
decryptFn: (str: string) => str.replace('ENCRYPTED_', ''),
hashFn: (str: string) => 'HASHED_' + str,
logger: (err: Error | any, key: string) => {
console.log(err, 'Error while processing fields ' + key);
},
stopOnError: false
};
const habibi = new Habibi(config);
const data = {
nik: '123456',
phoneNumber: '555-555-5555',
email: '[email protected]',
};
const encryptedData = habibi.encryptPIIFields(data);
console.log(encryptedData);
const decryptedData = habibi.decryptPIIFields(encryptedData);
console.log(decryptedData);
The Habibi class allows you to create an instance with customizable PII fields, encryption, decryption, and hashing functions.
constructor(config: Config = {})
config
(optional): An object containing:piiFields
(string[]): An array of field names to be treated as PII.encryptFn
(EncryptDecryptFunction): A function to encrypt PII fields.decryptFn
(EncryptDecryptFunction): A function to decrypt PII fields.hashFn
(EncryptDecryptFunction): A function to hash PII fields.logger
(Logger): A function to log errors.stopOnError
(boolean): A flag to stop processing on error.
encryptPIIFields(obj: any): any
Encrypts the PII fields in the given object.
obj
: The object containing PII fields to be encrypted.- Returns: A new object with encrypted PII fields.
decryptPIIFields(obj: any): any
Decrypts the PII fields in the given object.
obj
: The object containing PII fields to be decrypted.- Returns: A new object with decrypted PII fields.
A type alias for a function that takes a string and returns a string.
type EncryptDecryptFunction = (str: string) => string;
An interface for the configuration object.
interface Config {
piiFields?: string[];
encryptFn?: EncryptDecryptFunction;
decryptFn?: EncryptDecryptFunction;
hashFn?: EncryptDecryptFunction;
logger?: Logger;
stopOnError?: boolean;
}
The Habibi class can be configured with the following options:
piiFields
: An array of strings representing the fields that need to be encrypted or decrypted. Defaults to ['nik', 'phoneNumber', 'email'].encryptFn
: A function that takes a string and returns its encrypted version. Defaults tostr => 'ENCRYPTED_' + str
.decryptFn
: A function that takes a string and returns its decrypted version. Defaults tostr => str.replace('ENCRYPTED_', '')
.hashFn
: A function that takes a string and returns its hashed version. Defaults to str => 'HASHED_' + str.logger
: A function that logs errors encountered during processing. Defaults toconsole.log
.stopOnError
: A boolean that determines whether to stop processing when an error is encountered. Defaults tofalse