@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
39 lines (30 loc) • 992 B
text/typescript
// bloom-filters is supported on the following platforms:
// - Node.js: v4.0.0 or higher
// - Google Chrome: v41 or higher
// - Mozilla Firefox: v34 or higher
// - Microsoft Edge: v12 or higher
import { BloomFilter } from 'bloom-filters';
const EXPECTED_INSERTIONS = 10000000;
const ERROR_RATE = 0.01;
const REFRESH_RATE = 24 * 60 * 60000; // 24HS
export function bloomFilterFactory(expectedInsertions = EXPECTED_INSERTIONS, errorRate = ERROR_RATE, refreshRate = REFRESH_RATE) {
let filter = BloomFilter.create(expectedInsertions, errorRate);
return {
refreshRate: refreshRate,
add(key: string, value: string) {
const data = `${key}:${value}`;
if (filter.has(data)) {
return false;
}
filter.add(data);
return true;
},
contains(key: string, value: string) {
const data = `${key}:${value}`;
return filter.has(data);
},
clear() {
filter = BloomFilter.create(expectedInsertions, errorRate);
}
};
}