{"version":3,"sources":["../../src/obfuscator/obfuscator.ts"],"sourcesContent":["export type ObfuscatorVersion = \"v1\" | \"v2\" | \"v3\" | \"v4\";\n\nexport interface ObfuscatorOptions {\n    version?: ObfuscatorVersion;\n    key?: string;\n}\n\nexport class Obfuscator {\n    private readonly _v4Prefix = \"cob:v4\";\n    private readonly _base64UrlAlphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n\n    private readonly _randomKey = (): string =>\n        (Date.now() / 1000 | 0).toString(16) +\n        \"xxxxxxxxxxxxxxxx\".replace(/x/g, () => (Math.random() * 16 | 0).toString(16)).toLowerCase();\n\n    /**\n     * Preferred obfuscation API. Defaults to V4.\n     */\n    public encode(inputStr: string, options: ObfuscatorOptions = {}): string {\n        const version = options.version ?? \"v4\";\n\n        switch (version) {\n            case \"v1\":\n                return options.key === undefined ? this.obfuscate(inputStr) : this.obfuscate(inputStr, options.key);\n            case \"v2\":\n                return this.obfuscatev2(inputStr);\n            case \"v3\":\n                return this.obfuscatev3(inputStr, this._requireKey(options.key, \"v3\"));\n            case \"v4\":\n                return this.obfuscatev4(inputStr, this._requireKey(options.key, \"v4\"));\n        }\n    }\n\n    /**\n     * Preferred deobfuscation API. V4 payloads are self-identifying.\n     */\n    public decode(inputStr: string, options: ObfuscatorOptions = {}): string {\n        const version = options.version ?? \"v4\";\n\n        switch (version) {\n            case \"v1\":\n                return this.deobfuscate(inputStr, this._requireKey(options.key, \"v1\"));\n            case \"v2\":\n                return this.deobfuscatev2(inputStr);\n            case \"v3\":\n                return this.deobfuscatev3(inputStr, this._requireKey(options.key, \"v3\"));\n            case \"v4\":\n                return this.deobfuscatev4(inputStr, this._requireKey(options.key, \"v4\"));\n        }\n    }\n\n    private _buildKeyValue(key: string): string {\n        let kv = \"\";\n        for (let i = 0; i < key.length; i++) kv += key.charCodeAt(i);\n        return \"l\" + kv.split(\"\").reverse().join(\"\") + \"l\";\n    }\n\n    /**\n     * V1 obfuscation - key-based character code encoding.\n     * If no key is provided, a random key is generated and you cannot deobfuscate.\n     * @param inputStr String to obfuscate.\n     * @param key Optional key for reversibility.\n     */\n    public obfuscate(inputStr: string, key: string = this._randomKey()): string {\n        const kv = this._buildKeyValue(key);\n        let result = \"\";\n        for (let i = 0; i < inputStr.length; i++) result += inputStr.charCodeAt(i) + kv;\n        return result;\n    }\n\n    /**\n     * V1 deobfuscation.\n     * @param inputStr String to deobfuscate.\n     * @param key Key used during obfuscation.\n     */\n    public deobfuscate(inputStr: string, key: string): string {\n        const kv = this._buildKeyValue(key);\n        const parts = inputStr.split(kv).filter((e) => e !== \"\");\n        return parts.map((e) => String.fromCharCode(Number(e))).join(\"\");\n    }\n\n    private _swapPairs(input: string): string {\n        let result = \"\";\n        for (let i = 0; i < input.length; i++) {\n            if (i % 2 === 1) result += input[i] + input[i - 1];\n            else if (i === input.length - 1) result += input[i];\n        }\n        return result;\n    }\n\n    /**\n     * V2 obfuscation - pair-swapping with incremental key shifting.\n     */\n    public obfuscatev2(inputStr: string): string {\n        const sortByLen = (a: string, b: string): string =>\n            a.length > b.length ? \"s\" + b + a : a + b;\n\n        const reformat = (text: string): string => {\n            let result = \"\";\n            for (let i = 0; i < text.length; i++) {\n                if (i % 2 === 1) {\n                    result += sortByLen(String(text.charCodeAt(i - 1)), String(text.charCodeAt(i)));\n                    if (i !== text.length - 1) result += \":\";\n                }\n                if (i % 2 === 0 && i === text.length - 1)\n                    result += \"e\" + String(text.charCodeAt(i));\n            }\n            return result;\n        };\n\n        const increment = (input: string): string[] => {\n            return input.split(\":\").map((e, i) => {\n                if (e[0] !== \"e\" && e[0] !== \"s\") return String(Number(e) + (i + i * 2));\n                return e;\n            });\n        };\n\n        return increment(reformat(this._swapPairs(inputStr))).reduce((f, l) => f + \":\" + l);\n    }\n\n    /**\n     * V2 deobfuscation.\n     */\n    public deobfuscatev2(inputStr: string): string {\n        try {\n            const split = (text: string): [string, string] => {\n                const len = text.length;\n                if (len <= 3) return [text.slice(0, 1), text.slice(1)];\n                if (len <= 5) return [text.slice(0, 2), text.slice(2)];\n                return [text.slice(0, 3), text.slice(3)];\n            };\n\n            let result = \"\";\n            inputStr.split(\":\").forEach((e, i) => {\n                if (e[0] === \"s\") {\n                    const [a, b] = split(e.slice(1));\n                    result += String.fromCharCode(Number(a)) + String.fromCharCode(Number(b));\n                } else if (e[0] === \"e\") {\n                    result += String.fromCharCode(Number(e.slice(1)));\n                } else {\n                    const [a, b] = split(String(Number(e) - (i + i * 2)));\n                    result += String.fromCharCode(Number(b)) + String.fromCharCode(Number(a));\n                }\n            });\n            return result;\n        } catch {\n            return \"Errored\";\n        }\n    }\n\n    /**\n     * V3 obfuscation - binary rotation with hex encoding.\n     * @param inputStr String to obfuscate.\n     * @param key Key used to determine rotation amounts.\n     */\n    public obfuscatev3(inputStr: string, key: string): string {\n        const keyValues = this._keyToValues(key);\n        let kIdx = 0;\n        let hex = \"\";\n        const next = (): void => { kIdx = (kIdx + 1) % keyValues.length; };\n\n        const rotr = (bits: string, n: number): string => {\n            for (let i = 0; i < n; i++) bits = bits[bits.length - 1] + bits.slice(0, bits.length - 1);\n            return bits;\n        };\n\n        for (let i = 0; i < inputStr.length; i++) {\n            const bin = inputStr.charCodeAt(i).toString(2).padStart(16, \"0\");\n            hex += parseInt(rotr(bin, keyValues[kIdx]), 2).toString(16).padStart(4, \"0\");\n            next();\n        }\n        return hex;\n    }\n\n    /**\n     * V3 deobfuscation.\n     */\n    public deobfuscatev3(inputStr: string, key: string): string {\n        const keyValues = this._keyToValues(key);\n        let kIdx = 0;\n        let result = \"\";\n        const next = (): void => { kIdx = (kIdx + 1) % keyValues.length; };\n\n        const rotl = (bits: string, n: number): string => {\n            for (let i = 0; i < n; i++) bits = bits.slice(1) + bits[0];\n            return bits;\n        };\n\n        const hex2bin = (hex: string): string =>\n            parseInt(hex, 16).toString(2).padStart(16, \"0\");\n\n        for (let i = 0; i < inputStr.length / 4; i++) {\n            const chunk = inputStr.slice(i * 4, i * 4 + 4);\n            result += String.fromCharCode(parseInt(rotl(hex2bin(chunk), keyValues[kIdx]), 2));\n            next();\n        }\n        return result;\n    }\n\n    /**\n     * V4 obfuscation - salted keyed byte-stream masking with base64url output.\n     * This is reversible obfuscation, not cryptographic encryption.\n     */\n    public obfuscatev4(inputStr: string, key: string): string {\n        this._requireKey(key, \"v4\");\n\n        const salt = this._randomSalt();\n        const bytes = new TextEncoder().encode(inputStr);\n        const payload = this._base64UrlEncode(this._applyV4(bytes, key, salt, \"encode\"));\n\n        return `${this._v4Prefix}:${salt}:${payload}`;\n    }\n\n    /**\n     * V4 deobfuscation.\n     */\n    public deobfuscatev4(inputStr: string, key: string): string {\n        this._requireKey(key, \"v4\");\n\n        const parts = inputStr.split(\":\");\n        if (parts.length !== 4 || `${parts[0]}:${parts[1]}` !== this._v4Prefix) {\n            throw new Error(\"Invalid V4 obfuscator payload\");\n        }\n\n        const [, , salt, payload] = parts;\n        const bytes = this._base64UrlDecode(payload);\n        const decoded = this._applyV4(bytes, key, salt, \"decode\");\n\n        return new TextDecoder().decode(decoded);\n    }\n\n    private _applyV4(bytes: Uint8Array, key: string, salt: string, mode: \"encode\" | \"decode\"): Uint8Array {\n        const prng = this._xorshift32(this._seedFromKey(key, salt));\n        const result = new Uint8Array(bytes.length);\n\n        for (let i = 0; i < bytes.length; i++) {\n            const random = prng();\n            const mask = random & 0xff;\n            const shift = ((random >>> 8) + i) & 7;\n\n            result[i] = mode === \"encode\"\n                ? this._rotateLeftByte(bytes[i] ^ mask, shift)\n                : this._rotateRightByte(bytes[i], shift) ^ mask;\n        }\n\n        return result;\n    }\n\n    private _seedFromKey(key: string, salt: string): number {\n        let hash = 0x811c9dc5;\n        const bytes = new TextEncoder().encode(`${salt}:${key}`);\n\n        for (const byte of bytes) {\n            hash ^= byte;\n            hash = Math.imul(hash, 0x01000193) >>> 0;\n        }\n\n        return hash || 0x6d2b79f5;\n    }\n\n    private _xorshift32(seed: number): () => number {\n        let state = seed >>> 0 || 0x6d2b79f5;\n\n        return (): number => {\n            state ^= state << 13;\n            state >>>= 0;\n            state ^= state >>> 17;\n            state >>>= 0;\n            state ^= state << 5;\n            return state >>> 0;\n        };\n    }\n\n    private _rotateLeftByte(value: number, shift: number): number {\n        return ((value << shift) | (value >>> (8 - shift))) & 0xff;\n    }\n\n    private _rotateRightByte(value: number, shift: number): number {\n        return ((value >>> shift) | (value << (8 - shift))) & 0xff;\n    }\n\n    private _randomSalt(): string {\n        const bytes = new Uint8Array(4);\n\n        if (globalThis.crypto?.getRandomValues) {\n            globalThis.crypto.getRandomValues(bytes);\n        } else {\n            for (let i = 0; i < bytes.length; i++) bytes[i] = Math.floor(Math.random() * 256);\n        }\n\n        return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n    }\n\n    private _base64UrlEncode(bytes: Uint8Array): string {\n        let output = \"\";\n\n        for (let i = 0; i < bytes.length; i += 3) {\n            const b0 = bytes[i];\n            const b1 = i + 1 < bytes.length ? bytes[i + 1] : 0;\n            const b2 = i + 2 < bytes.length ? bytes[i + 2] : 0;\n            const triplet = (b0 << 16) | (b1 << 8) | b2;\n\n            output += this._base64UrlAlphabet[(triplet >>> 18) & 63];\n            output += this._base64UrlAlphabet[(triplet >>> 12) & 63];\n            if (i + 1 < bytes.length) output += this._base64UrlAlphabet[(triplet >>> 6) & 63];\n            if (i + 2 < bytes.length) output += this._base64UrlAlphabet[triplet & 63];\n        }\n\n        return output;\n    }\n\n    private _base64UrlDecode(input: string): Uint8Array {\n        if (input.length % 4 === 1 || /[^A-Za-z0-9_-]/.test(input)) {\n            throw new Error(\"Invalid base64url payload\");\n        }\n\n        const bytes: number[] = [];\n\n        for (let i = 0; i < input.length; i += 4) {\n            const c0 = this._base64UrlValue(input[i]);\n            const c1 = this._base64UrlValue(input[i + 1]);\n            const c2 = i + 2 < input.length ? this._base64UrlValue(input[i + 2]) : 0;\n            const c3 = i + 3 < input.length ? this._base64UrlValue(input[i + 3]) : 0;\n            const triplet = (c0 << 18) | (c1 << 12) | (c2 << 6) | c3;\n\n            bytes.push((triplet >>> 16) & 0xff);\n            if (i + 2 < input.length) bytes.push((triplet >>> 8) & 0xff);\n            if (i + 3 < input.length) bytes.push(triplet & 0xff);\n        }\n\n        return new Uint8Array(bytes);\n    }\n\n    private _base64UrlValue(char: string | undefined): number {\n        if (char === undefined) throw new Error(\"Invalid base64url payload\");\n\n        const value = this._base64UrlAlphabet.indexOf(char);\n        if (value === -1) throw new Error(\"Invalid base64url payload\");\n\n        return value;\n    }\n\n    private _requireKey(key: string | undefined, version: ObfuscatorVersion): string {\n        if (typeof key !== \"string\" || key.length === 0) {\n            throw new Error(`${version.toUpperCase()} obfuscation requires a non-empty key`);\n        }\n\n        return key;\n    }\n\n    private _keyToValues(key: string): number[] {\n        return key.split(\"\").map((c) =>\n            String(c.charCodeAt(0)).split(\"\").map(Number).reduce((a, b) => a + b, 0)\n        );\n    }\n}\n\nexport const obfuscator = new Obfuscator();\n"],"mappings":"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","names":[]}