Rehydra provides several functions for anonymizing text, from simple one-off calls to reusable instances.
anonymizer.anonymize()
The primary method on an Anonymizer instance.
Signature
anonymize(
text: string,
locale?: string,
policy?: Partial<AnonymizationPolicy>
): Promise<AnonymizationResult>
Parameters
Locale hint (e.g., 'de-DE', 'en-US'). Helps with semantic enrichment.
policy
Partial<AnonymizationPolicy>
Policy override for this call. Merged with default policy.
Returns
interface AnonymizationResult {
anonymizedText: string;
entities: Array<{
type: PIIType;
id: number;
start: number;
end: number;
confidence: number;
source: 'REGEX' | 'NER';
gender?: 'male' | 'female' | 'neutral';
scope?: 'city' | 'country' | 'region';
}>;
piiMap: {
ciphertext: string;
iv: string;
authTag: string;
};
stats: {
countsByType: Record<PIIType, number>;
totalEntities: number;
processingTimeMs: number;
modelVersion: string;
leakScanPassed?: boolean;
};
}
Example
const anonymizer = createAnonymizer({
ner: { mode: 'quantized' }
});
await anonymizer.initialize();
const result = await anonymizer.anonymize(
'Contact John at [email protected]',
'en-US'
);
console.log(result.anonymizedText);
// "Contact <PII type="PERSON" id="1"/> at <PII type="EMAIL" id="1"/>"
console.log(result.entities);
// [
// { type: 'PERSON', id: 1, start: 8, end: 12, confidence: 0.95, source: 'NER' },
// { type: 'EMAIL', id: 1, start: 16, end: 32, confidence: 1.0, source: 'REGEX' }
// ]
console.log(result.stats);
// { totalEntities: 2, processingTimeMs: 150, ... }
anonymize()
Standalone function for one-off anonymization (regex-only by default).
Signature
function anonymize(
text: string,
locale?: string,
policy?: Partial<AnonymizationPolicy>
): Promise<AnonymizationResult>
Example
import { anonymize } from 'rehydra';
const result = await anonymize('Email: [email protected]');
console.log(result.anonymizedText);
// "Email: <PII type="EMAIL" id="1"/>"
Creates a temporary anonymizer for each call. For multiple texts, use createAnonymizer() instead.
anonymizeRegexOnly()
Fast regex-only anonymization without NER.
Signature
function anonymizeRegexOnly(
text: string,
policy?: Partial<AnonymizationPolicy>
): Promise<AnonymizationResult>
Example
import { anonymizeRegexOnly } from 'rehydra';
const result = await anonymizeRegexOnly(
'Card: 4111111111111111, IBAN: DE89370400440532013000'
);
console.log(result.anonymizedText);
// "Card: <PII type="CREDIT_CARD" id="1"/>, IBAN: <PII type="IBAN" id="2"/>"
| Function | Time (2K chars) |
|---|
anonymizeRegexOnly() | ~5-10 ms |
anonymize() with NER | ~150-200 ms |
anonymizeWithNER()
One-off anonymization with NER model.
Signature
function anonymizeWithNER(
text: string,
nerConfig: Omit<NERConfig, 'mode'> & { mode?: 'standard' | 'quantized' },
policy?: Partial<AnonymizationPolicy>
): Promise<AnonymizationResult>
Example
import { anonymizeWithNER } from 'rehydra';
const result = await anonymizeWithNER(
'Hello John Smith from Acme Corp!',
{
mode: 'quantized',
onStatus: console.log
}
);
console.log(result.anonymizedText);
// "Hello <PII type="PERSON" id="1"/> from <PII type="ORG" id="1"/>!"
Downloads and loads the NER model on each call. For multiple texts, use createAnonymizer() instead.
Policy Overrides
Override default policy for specific calls:
import { createAnonymizer, PIIType } from 'rehydra';
const anonymizer = createAnonymizer({
ner: { mode: 'quantized' }
});
await anonymizer.initialize();
// Default behavior
await anonymizer.anonymize('Email: [email protected]');
// Override for this call only
await anonymizer.anonymize('Email: [email protected]', undefined, {
enabledTypes: new Set([PIIType.PHONE]), // Only detect phones
allowlistTerms: new Set(['[email protected]']), // Ignore this email
});
Handling Results
Access Anonymized Text
const result = await anonymizer.anonymize(text);
console.log(result.anonymizedText);
Check Detection Stats
if (result.stats.totalEntities === 0) {
console.log('No PII detected');
}
console.log(`Found ${result.stats.countsByType['EMAIL'] || 0} emails`);
Validate Output
if (!result.stats.leakScanPassed) {
console.warn('Potential PII leak detected in output');
}