{
  "version": 3,
  "sources": ["../dist/index.js", "../dist/core/index.js", "../dist/core/challengeFetcher.js", "../dist/utils/constants.js", "../dist/utils/helpers.js", "../dist/core/webPoClient.js", "../dist/core/botGuardClient.js", "../dist/core/webPoMinter.js"],
  "sourcesContent": ["import * as BG from './core/index.js';\nexport { BG };\nexport default BG;\nexport * from './utils/index.js';\n", "export * as Challenge from './challengeFetcher.js';\nexport * as PoToken from './webPoClient.js';\nexport { default as WebPoMinter } from './webPoMinter.js';\nexport { default as BotGuardClient } from './botGuardClient.js';\n", "import { base64ToU8, BGError, buildURL, getHeaders } from '../utils/index.js';\n/**\n * Creates a challenge.\n * @param bgConfig - The config.\n * @param interpreterHash - The ID of the challenge script. If provided, the server will assume that\n * the client already has the script and will not return it.\n * @returns The challenge data.\n */\nexport async function create(bgConfig, interpreterHash) {\n    const requestKey = bgConfig.requestKey;\n    if (!bgConfig.fetch)\n        throw new BGError('BAD_CONFIG', 'No fetch function provided');\n    const payload = [requestKey];\n    if (interpreterHash)\n        payload.push(interpreterHash);\n    const response = await bgConfig.fetch(buildURL('Create', bgConfig.useYouTubeAPI), {\n        method: 'POST',\n        headers: getHeaders(),\n        body: JSON.stringify(payload)\n    });\n    if (!response.ok)\n        throw new BGError('REQUEST_FAILED', 'Failed to fetch challenge', { status: response.status });\n    const rawData = await response.json();\n    return parseChallengeData(rawData);\n}\n/**\n * Parses the challenge data from the provided response data.\n */\nexport function parseChallengeData(rawData) {\n    let challengeData = [];\n    if (rawData.length > 1 && typeof rawData[1] === 'string') {\n        const descrambled = descramble(rawData[1]);\n        challengeData = JSON.parse(descrambled || '[]');\n    }\n    else if (rawData.length && typeof rawData[0] === 'object') {\n        challengeData = rawData[0];\n    }\n    const [messageId, wrappedScript, wrappedUrl, interpreterHash, program, globalName, , clientExperimentsStateBlob] = challengeData;\n    const privateDoNotAccessOrElseSafeScriptWrappedValue = Array.isArray(wrappedScript) ? wrappedScript.find((value) => value && typeof value === 'string') : null;\n    const privateDoNotAccessOrElseTrustedResourceUrlWrappedValue = Array.isArray(wrappedUrl) ? wrappedUrl.find((value) => value && typeof value === 'string') : null;\n    return {\n        messageId,\n        interpreterJavascript: {\n            privateDoNotAccessOrElseSafeScriptWrappedValue,\n            privateDoNotAccessOrElseTrustedResourceUrlWrappedValue\n        },\n        interpreterHash,\n        program,\n        globalName,\n        clientExperimentsStateBlob\n    };\n}\n/**\n * Descrambles the given challenge data.\n */\nexport function descramble(scrambledChallenge) {\n    const buffer = base64ToU8(scrambledChallenge);\n    if (buffer.length)\n        return new TextDecoder().decode(buffer.map((b) => b + 97));\n}\n", "export const GOOG_BASE_URL = 'https://jnn-pa.googleapis.com';\nexport const YT_BASE_URL = 'https://www.youtube.com';\nexport const GOOG_API_KEY = 'AIzaSyDyT5W0Jh49F30Pqqtyfdf7pDLFKLJoAnw';\nexport const USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36(KHTML, like Gecko)';\n", "import { GOOG_API_KEY, GOOG_BASE_URL, USER_AGENT, YT_BASE_URL } from './constants.js';\nconst base64urlCharRegex = /[-_.]/g;\nconst base64urlToBase64Map = {\n    '-': '+',\n    _: '/',\n    '.': '='\n};\nexport class DeferredPromise {\n    constructor() {\n        this.promise = new Promise((resolve, reject) => {\n            this.resolve = resolve;\n            this.reject = reject;\n        });\n    }\n}\nexport class BGError extends TypeError {\n    constructor(code, message, info) {\n        super(message);\n        this.name = 'BGError';\n        this.code = code;\n        if (info)\n            this.info = info;\n    }\n}\nexport function base64ToU8(base64) {\n    let base64Mod;\n    if (base64urlCharRegex.test(base64)) {\n        base64Mod = base64.replace(base64urlCharRegex, function (match) {\n            return base64urlToBase64Map[match];\n        });\n    }\n    else {\n        base64Mod = base64;\n    }\n    base64Mod = atob(base64Mod);\n    return new Uint8Array([...base64Mod].map((char) => char.charCodeAt(0)));\n}\nexport function u8ToBase64(u8, base64url = false) {\n    const result = btoa(String.fromCharCode(...u8));\n    if (base64url) {\n        return result\n            .replace(/\\+/g, '-')\n            .replace(/\\//g, '_');\n    }\n    return result;\n}\nexport function isBrowser() {\n    const isBrowser = typeof window !== 'undefined'\n        && typeof window.document !== 'undefined'\n        && typeof window.document.createElement !== 'undefined'\n        && typeof window.HTMLElement !== 'undefined'\n        && typeof window.navigator !== 'undefined'\n        && typeof window.getComputedStyle === 'function'\n        && typeof window.requestAnimationFrame === 'function'\n        && typeof window.matchMedia === 'function';\n    const hasValidWindow = Object.getOwnPropertyDescriptor(globalThis, 'window')?.get?.toString().includes('[native code]') ?? false;\n    return isBrowser && hasValidWindow;\n}\nexport function getHeaders() {\n    const headers = {\n        'content-type': 'application/json+protobuf',\n        'x-goog-api-key': GOOG_API_KEY,\n        'x-user-agent': 'grpc-web-javascript/0.1'\n    };\n    if (!isBrowser()) {\n        headers['user-agent'] = USER_AGENT;\n    }\n    return headers;\n}\nexport function buildURL(endpointName, useYouTubeAPI) {\n    return `${useYouTubeAPI ? YT_BASE_URL : GOOG_BASE_URL}/${useYouTubeAPI ? 'api/jnn/v1' : '$rpc/google.internal.waa.v1.Waa'}/${endpointName}`;\n}\n", "import BotGuardClient from './botGuardClient.js';\nimport WebPoMinter from './webPoMinter.js';\nimport { base64ToU8, buildURL, u8ToBase64, getHeaders, BGError } from '../utils/index.js';\n/**\n * Generates a Proof of Origin Token.\n * @param args - The arguments for generating the token.\n */\nexport async function generate(args) {\n    const { program, bgConfig, globalName } = args;\n    const { identifier } = bgConfig;\n    const botguard = await BotGuardClient.create({ program, globalName, globalObj: bgConfig.globalObj });\n    const webPoSignalOutput = [];\n    const botguardResponse = await botguard.snapshot({ webPoSignalOutput });\n    const payload = [bgConfig.requestKey, botguardResponse];\n    const integrityTokenResponse = await bgConfig.fetch(buildURL('GenerateIT', bgConfig.useYouTubeAPI), {\n        method: 'POST',\n        headers: getHeaders(),\n        body: JSON.stringify(payload)\n    });\n    const integrityTokenJson = await integrityTokenResponse.json();\n    const [integrityToken, estimatedTtlSecs, mintRefreshThreshold, websafeFallbackToken] = integrityTokenJson;\n    const integrityTokenData = {\n        integrityToken,\n        estimatedTtlSecs,\n        mintRefreshThreshold,\n        websafeFallbackToken\n    };\n    const webPoMinter = await WebPoMinter.create(integrityTokenData, webPoSignalOutput);\n    const poToken = await webPoMinter.mintAsWebsafeString(identifier);\n    return { poToken, integrityTokenData };\n}\n/**\n * Creates a cold start token. This can be used while `sps` (StreamProtectionStatus) is 2, but will not work once it changes to 3.\n * @param identifier - Visitor ID or Data Sync ID.\n * @param clientState - The client state.\n */\nexport function generateColdStartToken(identifier, clientState) {\n    const encodedIdentifier = new TextEncoder().encode(identifier);\n    if (encodedIdentifier.length > 118)\n        throw new BGError('BAD_INPUT', 'Content binding is too long.', { identifierLength: encodedIdentifier.length });\n    const timestamp = Math.floor(Date.now() / 1000);\n    const randomKeys = [Math.floor(Math.random() * 256), Math.floor(Math.random() * 256)];\n    // NOTE: The \"0\" value before the client state is supposed to be someVal & 0xFF.\n    // It is always 0 though, so I didn't bother investigating further.\n    const header = randomKeys.concat([\n        0, (clientState ?? 1)\n    ], [\n        (timestamp >> 24) & 0xFF,\n        (timestamp >> 16) & 0xFF,\n        (timestamp >> 8) & 0xFF,\n        timestamp & 0xFF\n    ]);\n    const packet = new Uint8Array(2 + header.length + encodedIdentifier.length);\n    packet[0] = 34;\n    packet[1] = header.length + encodedIdentifier.length;\n    packet.set(header, 2);\n    packet.set(encodedIdentifier, 2 + header.length);\n    const payload = packet.subarray(2);\n    const keyLength = randomKeys.length;\n    for (let i = keyLength; i < payload.length; i++) {\n        payload[i] ^= payload[i % keyLength];\n    }\n    return u8ToBase64(packet, true);\n}\n/**\n * @deprecated Use `generateColdStartToken` instead.\n */\nexport function generatePlaceholder(identifier, clientState) {\n    return generateColdStartToken(identifier, clientState);\n}\n/**\n * Decodes a cold start webpo token.\n * @throws Error if the packet length is invalid.\n */\nexport function decodeColdStartToken(token) {\n    const packet = base64ToU8(token);\n    const payloadLength = packet[1];\n    const totalPacketLength = 2 + payloadLength;\n    if (packet.length !== totalPacketLength)\n        throw new BGError('BAD_INPUT', 'Invalid packet length.', { packetLength: packet.length, expectedLength: totalPacketLength });\n    const payload = packet.subarray(2);\n    // Decrypt the payload by reversing the XOR operation\n    const keyLength = 2;\n    for (let i = keyLength; i < payload.length; ++i) {\n        payload[i] ^= payload[i % keyLength];\n    }\n    const keys = [payload[0], payload[1]];\n    const unknownVal = payload[2]; // The masked property I mentioned in the function above\n    const clientState = payload[3];\n    const timestamp = (payload[4] << 24) |\n        (payload[5] << 16) |\n        (payload[6] << 8) |\n        payload[7];\n    const date = new Date(timestamp * 1000);\n    const identifier = new TextDecoder().decode(payload.subarray(8));\n    return {\n        identifier,\n        timestamp,\n        unknownVal,\n        clientState,\n        keys,\n        date\n    };\n}\n", "import { BGError, DeferredPromise } from '../utils/index.js';\nexport default class BotGuardClient {\n    constructor(options) {\n        this.deferredVmFunctions = new DeferredPromise();\n        this.defaultTimeout = 3000;\n        this.userInteractionElement = options.userInteractionElement;\n        this.vm = options.globalObj[options.globalName];\n        this.program = options.program;\n    }\n    /**\n     * Factory method to create and load a BotGuardClient instance.\n     * @param options - Configuration options for the BotGuardClient.\n     * @returns A promise that resolves to a loaded BotGuardClient instance.\n     */\n    static async create(options) {\n        return await new BotGuardClient(options).load();\n    }\n    async load() {\n        if (!this.vm)\n            throw new BGError('VM_INIT', 'VM not found');\n        if (!this.vm.a)\n            throw new BGError('VM_INIT', 'VM init function not found');\n        const vmFunctionsCallback = (asyncSnapshotFunction, shutdownFunction, passEventFunction, checkCameraFunction) => {\n            this.deferredVmFunctions.resolve({\n                asyncSnapshotFunction,\n                shutdownFunction,\n                passEventFunction,\n                checkCameraFunction\n            });\n        };\n        try {\n            this.syncSnapshotFunction = await this.vm.a(this.program, vmFunctionsCallback, true, this.userInteractionElement, () => { }, [[], []])[0];\n        }\n        catch (error) {\n            throw new BGError('VM_ERROR', 'Could not load program', { error });\n        }\n        return this;\n    }\n    /**\n     * Takes a snapshot asynchronously.\n     * @returns The snapshot result.\n     * @example\n     * ```ts\n     * const result = await botguard.snapshot({\n     *   contentBinding: {\n     *     c: \"a=6&a2=10&b=SZWDwKVIuixOp7Y4euGTgwckbJA&c=1729143849&d=1&t=7200&c1a=1&c6a=1&c6b=1&hh=HrMb5mRWTyxGJphDr0nW2Oxonh0_wl2BDqWuLHyeKLo\",\n     *     e: \"ENGAGEMENT_TYPE_VIDEO_LIKE\",\n     *     encryptedVideoId: \"P-vC09ZJcnM\"\n     *    }\n     * });\n     *\n     * console.log(result);\n     * ```\n     */\n    async snapshot(args, timeout = 3000) {\n        return await Promise.race([\n            new Promise(async (resolve, reject) => {\n                const vmFunctions = await this.deferredVmFunctions.promise;\n                if (!vmFunctions.asyncSnapshotFunction)\n                    return reject(new BGError('ASYNC_SNAPSHOT', 'Asynchronous snapshot function not found'));\n                await vmFunctions.asyncSnapshotFunction((response) => resolve(response), [\n                    args.contentBinding,\n                    args.signedTimestamp,\n                    args.webPoSignalOutput,\n                    args.skipPrivacyBuffer\n                ]);\n            }),\n            new Promise((_, reject) => setTimeout(() => reject(new BGError('TIMEOUT', 'VM operation timed out')), timeout))\n        ]);\n    }\n    /**\n     * Passes an event to the VM.\n     * @throws Error Throws an error if the pass event function is not found.\n     */\n    async passEvent(args, timeout = this.defaultTimeout) {\n        return await Promise.race([\n            (async () => {\n                const vmFunctions = await this.deferredVmFunctions.promise;\n                if (!vmFunctions.passEventFunction)\n                    throw new BGError('PASS_EVENT', 'Pass event function not found');\n                vmFunctions.passEventFunction(args);\n            })(),\n            new Promise((_, reject) => setTimeout(() => reject(new BGError('TIMEOUT', 'VM operation timed out')), timeout))\n        ]);\n    }\n    /**\n     * Checks the \"camera\".\n     * @throws Error Throws an error if the check camera function is not found.\n     */\n    async checkCamera(args, timeout = this.defaultTimeout) {\n        return await Promise.race([\n            (async () => {\n                const vmFunctions = await this.deferredVmFunctions.promise;\n                if (!vmFunctions.checkCameraFunction)\n                    throw new BGError('CHECK_CAMERA', 'Check camera function not found');\n                vmFunctions.checkCameraFunction(args);\n            })(),\n            new Promise((_, reject) => setTimeout(() => reject(new BGError('TIMEOUT', 'VM operation timed out')), timeout))\n        ]);\n    }\n    /**\n     * Shuts down the VM. Taking a snapshot after this will throw an error.\n     * @throws Error Throws an error if the shutdown function is not found.\n     */\n    async shutdown(timeout = this.defaultTimeout) {\n        return await Promise.race([\n            (async () => {\n                const vmFunctions = await this.deferredVmFunctions.promise;\n                if (!vmFunctions.shutdownFunction)\n                    throw new BGError('SHUTDOWN', 'Shutdown function not found');\n                vmFunctions.shutdownFunction();\n            })(),\n            new Promise((_, reject) => setTimeout(() => reject(new BGError('TIMEOUT', 'VM operation timed out')), timeout))\n        ]);\n    }\n    /**\n     * Takes a snapshot synchronously.\n     * @returns The snapshot result.\n     * @throws Error Throws an error if the synchronous snapshot function is not found.\n     */\n    async snapshotSynchronous(args) {\n        if (!this.syncSnapshotFunction)\n            throw new BGError('SYNC_SNAPSHOT', 'Synchronous snapshot function not found');\n        return this.syncSnapshotFunction([\n            args.contentBinding,\n            args.signedTimestamp,\n            args.webPoSignalOutput,\n            args.skipPrivacyBuffer\n        ]);\n    }\n}\n", "import { base64ToU8, BGError, u8ToBase64 } from '../utils/helpers.js';\nexport default class WebPoMinter {\n    constructor(mintCallback) {\n        this.mintCallback = mintCallback;\n    }\n    static async create(integrityTokenResponse, webPoSignalOutput) {\n        const getMinter = webPoSignalOutput[0];\n        if (!getMinter)\n            throw new BGError('VM_ERROR', 'PMD:Undefined');\n        if (!integrityTokenResponse.integrityToken)\n            throw new BGError('INTEGRITY_ERROR', 'No integrity token provided', { integrityTokenResponse });\n        const mintCallback = await getMinter(base64ToU8(integrityTokenResponse.integrityToken));\n        if (!(mintCallback instanceof Function))\n            throw new BGError('VM_ERROR', 'APF:Failed');\n        return new WebPoMinter(mintCallback);\n    }\n    async mintAsWebsafeString(identifier) {\n        const result = await this.mint(identifier);\n        return u8ToBase64(result, true);\n    }\n    async mint(identifier) {\n        const result = await this.mintCallback(new TextEncoder().encode(identifier));\n        if (!result)\n            throw new BGError('VM_ERROR', 'YNJ:Undefined');\n        if (!(result instanceof Uint8Array))\n            throw new BGError('VM_ERROR', 'ODM:Invalid');\n        return result;\n    }\n}\n"],
  "mappings": "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",
  "names": ["isBrowser"]
}
