Object redaction with whitelist and blacklist. Blacklist items have higher priority and will always supercede the whitelist.
-
whitelist
(Array): The whitelist array. -
blacklist
(Array): The blacklist array. -
options
(Object): An object with optional options.options.replacement
(Function): A function that allows customizing the replacement value (default implementation is--REDACTED--
).options.serializers
(List[Object]): A list with serializers to apply. Each serializers must contain two properties:path
(path for the value to be serialized, must be astring
) andserializer
(function to be called on the path's value).options.trim
(Boolean): A flag that enables trimming all redacted values, saving their keys to a__redacted__
list (default value isfalse
).
const { anonymizer } = require('@uphold/anonymizer');
const whitelist = ['foo.key', 'foo.depth.*', 'bar.*', 'toAnonymize.baz', 'toAnonymizeSuperString'];
const blacklist = ['foo.depth.innerBlacklist', 'toAnonymize.*'];
const anonymize = anonymizer({ blacklist, whitelist });
const data = {
foo: { key: 'public', another: 'bar', depth: { bar: 10, innerBlacklist: 11 } },
bar: { foo: 1, bar: 2 },
toAnonymize: { baz: 11, bar: 12 },
toAnonymizeSuperString: 'foo'
};
anonymize(data);
// {
// foo: {
// key: 'public',
// another: '--REDACTED--',
// depth: { bar: 10, innerBlacklist: '--REDACTED--' }
// },
// bar: { foo: 1, bar: 2 },
// toAnonymize: { baz: '--REDACTED--', bar: '--REDACTED--' },
// toAnonymizeSuperString: '--REDACTED--'
// }
const { anonymizer } = require('@uphold/anonymizer');
const whitelist = ['foo.key', 'foo.depth.*', 'bar.*', 'toAnonymize.baz'];
const blacklist = ['foo.depth.innerBlacklist'];
const serializers = [
{ path: 'foo.key', serializer: () => 'biz' },
{ path: 'toAnonymize', serializer: () => ({ baz: 'baz' }) }
]
const anonymize = anonymizer({ blacklist, whitelist }, { serializers });
const data = {
foo: { key: 'public', another: 'bar', depth: { bar: 10, innerBlacklist: 11 } },
bar: { foo: 1, bar: 2 },
toAnonymize: {}
};
anonymize(data);
// {
// foo: {
// key: 'biz',
// another: '--REDACTED--',
// depth: { bar: 10, innerBlacklist: '--REDACTED--' }
// },
// bar: { foo: 1, bar: 2 },
// toAnonymize: { baz: 'baz' }
// }
The introduction of serializers also added the possibility of using serializer functions exported by our module. The list of default serializers is presented below:
- error
const { anonymizer, defaultSerializers } = require('@uphold/anonymizer');
const serializers = [
{ path: 'foo', serializer: defaultSerializers.error }
];
const anonymize = anonymizer({}, { serializers });
const data = { foo: new Error('Foobar') };
anonymize(data);
// {
// foo: {
// name: '--REDACTED--',
// message: '--REDACTED--',
// stack: '--REDACTED--'
// }
// }
The release of a version is automated via the release GitHub workflow. Run it by clicking the "Run workflow" button.
MIT