noscrape
Version:
obfuscate your content
26 lines (20 loc) • 713 B
text/typescript
import { includes, omitBy } from "lodash";
const puaRange = Array.from({ length: 0xf8ff - 0xe000 }, (_, i) => 0xe000 + i);
export const obfuscateString = (
text: string,
mapping: Record<string, number>,
) => {
const availableChars = omitBy(puaRange, (v) => includes(mapping, v));
let obfuscated = "";
for (const c of text) {
if (!mapping[c]) {
const keys = Object.keys(availableChars).map((k) => +k);
const randomKeyIndex = Math.floor(Math.random() * keys.length);
const randomKey = keys[randomKeyIndex];
mapping[c] = availableChars[randomKey];
delete availableChars[randomKey];
}
obfuscated += String.fromCharCode(mapping[c]);
}
return obfuscated;
};