Files
captchalmpoc/node_modules/captchalm/dist/index.cjs.map

1 line
128 KiB
Plaintext

{"version":3,"sources":["../src/core/encoding.ts","../src/utils/crypto.ts","../src/functions/math.ts","../src/functions/string.ts","../src/functions/array.ts","../src/functions/composite.ts","../src/functions/index.ts","../src/core/generator.ts","../src/utils/rate-limiter.ts","../src/core/verifier.ts","../src/server/standalone.ts","../src/server/middleware.ts"],"names":["randomBytes","createHmac","timingSafeEqual","range","challenge"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Encoding utilities for CaptchaLM challenges\n */\n\nimport type { EncodingType } from './types';\n\n/**\n * Encode a value using the specified encoding\n */\nexport function encode(value: string, encoding: EncodingType): string {\n switch (encoding) {\n case 'plain':\n return value;\n case 'base64':\n return encodeBase64(value);\n case 'hex':\n return encodeHex(value);\n case 'rot13':\n return encodeRot13(value);\n default:\n throw new Error(`Unknown encoding type: ${encoding}`);\n }\n}\n\n/**\n * Decode a value using the specified encoding\n */\nexport function decode(value: string, encoding: EncodingType): string {\n switch (encoding) {\n case 'plain':\n return value;\n case 'base64':\n return decodeBase64(value);\n case 'hex':\n return decodeHex(value);\n case 'rot13':\n return decodeRot13(value); // ROT13 is symmetric\n default:\n throw new Error(`Unknown encoding type: ${encoding}`);\n }\n}\n\n/**\n * Base64 encode a string\n */\nexport function encodeBase64(value: string): string {\n return Buffer.from(value, 'utf-8').toString('base64');\n}\n\n/**\n * Base64 decode a string\n */\nexport function decodeBase64(value: string): string {\n return Buffer.from(value, 'base64').toString('utf-8');\n}\n\n/**\n * Hex encode a string\n */\nexport function encodeHex(value: string): string {\n return Buffer.from(value, 'utf-8').toString('hex');\n}\n\n/**\n * Hex decode a string\n */\nexport function decodeHex(value: string): string {\n return Buffer.from(value, 'hex').toString('utf-8');\n}\n\n/**\n * ROT13 encode/decode a string (symmetric cipher)\n */\nexport function encodeRot13(value: string): string {\n return value.replace(/[a-zA-Z]/g, (char) => {\n const base = char <= 'Z' ? 65 : 97;\n return String.fromCharCode(((char.charCodeAt(0) - base + 13) % 26) + base);\n });\n}\n\n/**\n * ROT13 decode (same as encode, symmetric)\n */\nexport function decodeRot13(value: string): string {\n return encodeRot13(value);\n}\n\n/**\n * Apply multiple encoding layers\n */\nexport function encodeChain(value: string, encodings: EncodingType[]): string {\n return encodings.reduce((acc, encoding) => encode(acc, encoding), value);\n}\n\n/**\n * Decode multiple encoding layers (in reverse order)\n */\nexport function decodeChain(value: string, encodings: EncodingType[]): string {\n return [...encodings].reverse().reduce((acc, encoding) => decode(acc, encoding), value);\n}\n","/**\n * Cryptographic utilities for CaptchaLM\n */\n\nimport { createHmac, randomBytes, timingSafeEqual } from 'crypto';\n\n/**\n * Generate a cryptographically secure random ID\n */\nexport function generateId(length: number = 32): string {\n return randomBytes(length).toString('hex');\n}\n\n/**\n * Create an HMAC signature for a challenge\n */\nexport function signChallenge(data: string, secret: string): string {\n return createHmac('sha256', secret)\n .update(data)\n .digest('hex');\n}\n\n/**\n * Verify an HMAC signature\n */\nexport function verifySignature(data: string, signature: string, secret: string): boolean {\n const expected = signChallenge(data, secret);\n\n // Use timing-safe comparison to prevent timing attacks\n try {\n return timingSafeEqual(\n Buffer.from(signature, 'hex'),\n Buffer.from(expected, 'hex')\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Hash a string using SHA-256\n */\nexport function sha256(data: string): string {\n return createHmac('sha256', '')\n .update(data)\n .digest('hex');\n}\n\n/**\n * Generate a simple hash for encoding purposes (first N characters of SHA-256)\n */\nexport function shortHash(data: string, length: number = 8): string {\n return sha256(data).substring(0, length);\n}\n\n/**\n * Constant-time string comparison\n */\nexport function safeCompare(a: string, b: string): boolean {\n if (a.length !== b.length) {\n return false;\n }\n\n try {\n return timingSafeEqual(Buffer.from(a), Buffer.from(b));\n } catch {\n return false;\n }\n}\n\n/**\n * Generate a random number within a range\n */\nexport function randomInt(min: number, max: number): number {\n const range = max - min + 1;\n const bytesNeeded = Math.ceil(Math.log2(range) / 8) || 1;\n const maxValid = Math.floor(256 ** bytesNeeded / range) * range - 1;\n\n let randomValue: number;\n do {\n const bytes = randomBytes(bytesNeeded);\n randomValue = bytes.reduce((acc, byte, i) => acc + byte * (256 ** i), 0);\n } while (randomValue > maxValid);\n\n return min + (randomValue % range);\n}\n\n/**\n * Select a random element from an array\n */\nexport function randomElement<T>(arr: T[]): T {\n if (arr.length === 0) {\n throw new Error('Cannot select from empty array');\n }\n return arr[randomInt(0, arr.length - 1)];\n}\n\n/**\n * Shuffle an array using Fisher-Yates algorithm\n */\nexport function shuffle<T>(arr: T[]): T[] {\n const result = [...arr];\n for (let i = result.length - 1; i > 0; i--) {\n const j = randomInt(0, i);\n [result[i], result[j]] = [result[j], result[i]];\n }\n return result;\n}\n","/**\n * Mathematical functions for CaptchaLM challenges\n */\n\nimport type { RegisteredFunction } from '../core/types';\n\n/**\n * Calculate the nth Fibonacci number\n */\nexport function fibonacci(n: number): number {\n if (n < 0) throw new Error('Fibonacci not defined for negative numbers');\n if (n <= 1) return n;\n\n let a = 0, b = 1;\n for (let i = 2; i <= n; i++) {\n const temp = a + b;\n a = b;\n b = temp;\n }\n return b;\n}\n\n/**\n * Check if a number is prime\n */\nexport function isPrime(n: number): boolean {\n if (n < 2) return false;\n if (n === 2) return true;\n if (n % 2 === 0) return false;\n\n for (let i = 3; i <= Math.sqrt(n); i += 2) {\n if (n % i === 0) return false;\n }\n return true;\n}\n\n/**\n * Calculate greatest common divisor\n */\nexport function gcd(a: number, b: number): number {\n a = Math.abs(a);\n b = Math.abs(b);\n while (b !== 0) {\n const temp = b;\n b = a % b;\n a = temp;\n }\n return a;\n}\n\n/**\n * Calculate least common multiple\n */\nexport function lcm(a: number, b: number): number {\n return Math.abs(a * b) / gcd(a, b);\n}\n\n/**\n * Calculate factorial\n */\nexport function factorial(n: number): number {\n if (n < 0) throw new Error('Factorial not defined for negative numbers');\n if (n <= 1) return 1;\n\n let result = 1;\n for (let i = 2; i <= n; i++) {\n result *= i;\n }\n return result;\n}\n\n/**\n * Modular exponentiation (base^exp mod mod)\n */\nexport function modPow(base: number, exp: number, mod: number): number {\n if (mod === 1) return 0;\n\n let result = 1;\n base = base % mod;\n\n while (exp > 0) {\n if (exp % 2 === 1) {\n result = (result * base) % mod;\n }\n exp = Math.floor(exp / 2);\n base = (base * base) % mod;\n }\n\n return result;\n}\n\n/**\n * Sum of digits\n */\nexport function digitSum(n: number): number {\n n = Math.abs(n);\n let sum = 0;\n while (n > 0) {\n sum += n % 10;\n n = Math.floor(n / 10);\n }\n return sum;\n}\n\n/**\n * Count digits in a number\n */\nexport function digitCount(n: number): number {\n if (n === 0) return 1;\n return Math.floor(Math.log10(Math.abs(n))) + 1;\n}\n\n/**\n * Check if a number is a perfect square\n */\nexport function isPerfectSquare(n: number): boolean {\n if (n < 0) return false;\n const sqrt = Math.sqrt(n);\n return sqrt === Math.floor(sqrt);\n}\n\n/**\n * Calculate the nth triangular number\n */\nexport function triangular(n: number): number {\n return (n * (n + 1)) / 2;\n}\n\n/**\n * Calculate sum of first n primes\n */\nexport function sumOfPrimes(n: number): number {\n let count = 0;\n let sum = 0;\n let num = 2;\n\n while (count < n) {\n if (isPrime(num)) {\n sum += num;\n count++;\n }\n num++;\n }\n\n return sum;\n}\n\n/**\n * Registry of math functions with metadata\n */\nexport const mathFunctions: RegisteredFunction[] = [\n {\n name: 'fibonacci',\n fn: fibonacci as (...args: unknown[]) => unknown,\n parameterTypes: ['number'],\n description: 'Calculate the nth Fibonacci number',\n difficulty: 'easy',\n },\n {\n name: 'isPrime',\n fn: isPrime as (...args: unknown[]) => unknown,\n parameterTypes: ['number'],\n description: 'Check if a number is prime',\n difficulty: 'easy',\n },\n {\n name: 'gcd',\n fn: gcd as (...args: unknown[]) => unknown,\n parameterTypes: ['number', 'number'],\n description: 'Calculate greatest common divisor of two numbers',\n difficulty: 'easy',\n },\n {\n name: 'lcm',\n fn: lcm as (...args: unknown[]) => unknown,\n parameterTypes: ['number', 'number'],\n description: 'Calculate least common multiple of two numbers',\n difficulty: 'medium',\n },\n {\n name: 'factorial',\n fn: factorial as (...args: unknown[]) => unknown,\n parameterTypes: ['number'],\n description: 'Calculate factorial of a number',\n difficulty: 'easy',\n },\n {\n name: 'modPow',\n fn: modPow as (...args: unknown[]) => unknown,\n parameterTypes: ['number', 'number', 'number'],\n description: 'Calculate modular exponentiation (base^exp mod mod)',\n difficulty: 'hard',\n },\n {\n name: 'digitSum',\n fn: digitSum as (...args: unknown[]) => unknown,\n parameterTypes: ['number'],\n description: 'Calculate sum of digits in a number',\n difficulty: 'easy',\n },\n {\n name: 'digitCount',\n fn: digitCount as (...args: unknown[]) => unknown,\n parameterTypes: ['number'],\n description: 'Count the number of digits',\n difficulty: 'easy',\n },\n {\n name: 'isPerfectSquare',\n fn: isPerfectSquare as (...args: unknown[]) => unknown,\n parameterTypes: ['number'],\n description: 'Check if a number is a perfect square',\n difficulty: 'easy',\n },\n {\n name: 'triangular',\n fn: triangular as (...args: unknown[]) => unknown,\n parameterTypes: ['number'],\n description: 'Calculate the nth triangular number',\n difficulty: 'easy',\n },\n {\n name: 'sumOfPrimes',\n fn: sumOfPrimes as (...args: unknown[]) => unknown,\n parameterTypes: ['number'],\n description: 'Calculate sum of first n prime numbers',\n difficulty: 'hard',\n },\n];\n","/**\n * String manipulation functions for CaptchaLM challenges\n */\n\nimport type { RegisteredFunction } from '../core/types';\n\n/**\n * Reverse the order of words in a string\n */\nexport function reverseWords(str: string): string {\n return str.split(' ').reverse().join(' ');\n}\n\n/**\n * Reverse a string character by character\n */\nexport function reverseString(str: string): string {\n return str.split('').reverse().join('');\n}\n\n/**\n * Count vowels in a string\n */\nexport function countVowels(str: string): number {\n const vowels = 'aeiouAEIOU';\n let count = 0;\n for (const char of str) {\n if (vowels.includes(char)) count++;\n }\n return count;\n}\n\n/**\n * Count consonants in a string\n */\nexport function countConsonants(str: string): number {\n const consonants = 'bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ';\n let count = 0;\n for (const char of str) {\n if (consonants.includes(char)) count++;\n }\n return count;\n}\n\n/**\n * Apply Caesar cipher with given shift\n */\nexport function caesarCipher(str: string, shift: number): string {\n shift = ((shift % 26) + 26) % 26; // Normalize shift\n\n return str.replace(/[a-zA-Z]/g, (char) => {\n const base = char <= 'Z' ? 65 : 97;\n return String.fromCharCode(((char.charCodeAt(0) - base + shift) % 26) + base);\n });\n}\n\n/**\n * Calculate Hamming distance between two strings\n */\nexport function hammingDistance(a: string, b: string): number {\n if (a.length !== b.length) {\n throw new Error('Strings must be of equal length');\n }\n\n let distance = 0;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) distance++;\n }\n return distance;\n}\n\n/**\n * Count occurrences of a substring\n */\nexport function countSubstring(str: string, sub: string): number {\n if (sub.length === 0) return 0;\n\n let count = 0;\n let pos = 0;\n\n while ((pos = str.indexOf(sub, pos)) !== -1) {\n count++;\n pos += 1;\n }\n\n return count;\n}\n\n/**\n * Get character at index (with wrapping)\n */\nexport function charAtWrapped(str: string, index: number): string {\n if (str.length === 0) return '';\n index = ((index % str.length) + str.length) % str.length;\n return str[index];\n}\n\n/**\n * Calculate the sum of ASCII values\n */\nexport function asciiSum(str: string): number {\n let sum = 0;\n for (const char of str) {\n sum += char.charCodeAt(0);\n }\n return sum;\n}\n\n/**\n * Remove all vowels from a string\n */\nexport function removeVowels(str: string): string {\n return str.replace(/[aeiouAEIOU]/g, '');\n}\n\n/**\n * Convert to alternating case\n */\nexport function alternatingCase(str: string): string {\n return str\n .split('')\n .map((char, i) => (i % 2 === 0 ? char.toLowerCase() : char.toUpperCase()))\n .join('');\n}\n\n/**\n * Count words in a string\n */\nexport function wordCount(str: string): number {\n return str.trim().split(/\\s+/).filter(w => w.length > 0).length;\n}\n\n/**\n * Get the longest word in a string\n */\nexport function longestWord(str: string): string {\n const words = str.split(/\\s+/).filter(w => w.length > 0);\n if (words.length === 0) return '';\n return words.reduce((a, b) => (a.length >= b.length ? a : b));\n}\n\n/**\n * Registry of string functions with metadata\n */\nexport const stringFunctions: RegisteredFunction[] = [\n {\n name: 'reverseWords',\n fn: reverseWords as (...args: unknown[]) => unknown,\n parameterTypes: ['string'],\n description: 'Reverse the order of words in a string',\n difficulty: 'easy',\n },\n {\n name: 'reverseString',\n fn: reverseString as (...args: unknown[]) => unknown,\n parameterTypes: ['string'],\n description: 'Reverse a string character by character',\n difficulty: 'easy',\n },\n {\n name: 'countVowels',\n fn: countVowels as (...args: unknown[]) => unknown,\n parameterTypes: ['string'],\n description: 'Count the number of vowels in a string',\n difficulty: 'easy',\n },\n {\n name: 'countConsonants',\n fn: countConsonants as (...args: unknown[]) => unknown,\n parameterTypes: ['string'],\n description: 'Count the number of consonants in a string',\n difficulty: 'easy',\n },\n {\n name: 'caesarCipher',\n fn: caesarCipher as (...args: unknown[]) => unknown,\n parameterTypes: ['string', 'number'],\n description: 'Apply Caesar cipher with given shift',\n difficulty: 'medium',\n },\n {\n name: 'hammingDistance',\n fn: hammingDistance as (...args: unknown[]) => unknown,\n parameterTypes: ['string', 'string'],\n description: 'Calculate Hamming distance between two equal-length strings',\n difficulty: 'medium',\n },\n {\n name: 'countSubstring',\n fn: countSubstring as (...args: unknown[]) => unknown,\n parameterTypes: ['string', 'string'],\n description: 'Count occurrences of a substring',\n difficulty: 'easy',\n },\n {\n name: 'charAtWrapped',\n fn: charAtWrapped as (...args: unknown[]) => unknown,\n parameterTypes: ['string', 'number'],\n description: 'Get character at index with wrapping',\n difficulty: 'easy',\n },\n {\n name: 'asciiSum',\n fn: asciiSum as (...args: unknown[]) => unknown,\n parameterTypes: ['string'],\n description: 'Calculate sum of ASCII values of all characters',\n difficulty: 'medium',\n },\n {\n name: 'removeVowels',\n fn: removeVowels as (...args: unknown[]) => unknown,\n parameterTypes: ['string'],\n description: 'Remove all vowels from a string',\n difficulty: 'easy',\n },\n {\n name: 'alternatingCase',\n fn: alternatingCase as (...args: unknown[]) => unknown,\n parameterTypes: ['string'],\n description: 'Convert to alternating case',\n difficulty: 'easy',\n },\n {\n name: 'wordCount',\n fn: wordCount as (...args: unknown[]) => unknown,\n parameterTypes: ['string'],\n description: 'Count words in a string',\n difficulty: 'easy',\n },\n {\n name: 'longestWord',\n fn: longestWord as (...args: unknown[]) => unknown,\n parameterTypes: ['string'],\n description: 'Get the longest word in a string',\n difficulty: 'easy',\n },\n];\n","/**\n * Array operation functions for CaptchaLM challenges\n */\n\nimport type { RegisteredFunction } from '../core/types';\n\n/**\n * Sum all even numbers in an array\n */\nexport function sumEvens(arr: number[]): number {\n return arr.filter(n => n % 2 === 0).reduce((a, b) => a + b, 0);\n}\n\n/**\n * Sum all odd numbers in an array\n */\nexport function sumOdds(arr: number[]): number {\n return arr.filter(n => n % 2 !== 0).reduce((a, b) => a + b, 0);\n}\n\n/**\n * Calculate the product of all elements\n */\nexport function product(arr: number[]): number {\n return arr.reduce((a, b) => a * b, 1);\n}\n\n/**\n * Rotate array by k positions to the right\n */\nexport function rotateArray(arr: number[], k: number): number[] {\n if (arr.length === 0) return [];\n k = ((k % arr.length) + arr.length) % arr.length;\n return [...arr.slice(-k), ...arr.slice(0, -k)];\n}\n\n/**\n * Find the median value\n */\nexport function findMedian(arr: number[]): number {\n if (arr.length === 0) throw new Error('Cannot find median of empty array');\n\n const sorted = [...arr].sort((a, b) => a - b);\n const mid = Math.floor(sorted.length / 2);\n\n if (sorted.length % 2 === 0) {\n return (sorted[mid - 1] + sorted[mid]) / 2;\n }\n return sorted[mid];\n}\n\n/**\n * Find the mode (most frequent element)\n */\nexport function findMode(arr: number[]): number {\n if (arr.length === 0) throw new Error('Cannot find mode of empty array');\n\n const counts = new Map<number, number>();\n for (const n of arr) {\n counts.set(n, (counts.get(n) || 0) + 1);\n }\n\n let maxCount = 0;\n let mode = arr[0];\n\n for (const [n, count] of counts) {\n if (count > maxCount) {\n maxCount = count;\n mode = n;\n }\n }\n\n return mode;\n}\n\n/**\n * Calculate the range (max - min)\n */\nexport function range(arr: number[]): number {\n if (arr.length === 0) return 0;\n return Math.max(...arr) - Math.min(...arr);\n}\n\n/**\n * Count elements greater than threshold\n */\nexport function countGreaterThan(arr: number[], threshold: number): number {\n return arr.filter(n => n > threshold).length;\n}\n\n/**\n * Count elements less than threshold\n */\nexport function countLessThan(arr: number[], threshold: number): number {\n return arr.filter(n => n < threshold).length;\n}\n\n/**\n * Find second largest element\n */\nexport function secondLargest(arr: number[]): number {\n if (arr.length < 2) throw new Error('Array must have at least 2 elements');\n\n const sorted = [...new Set(arr)].sort((a, b) => b - a);\n if (sorted.length < 2) throw new Error('Array must have at least 2 distinct elements');\n\n return sorted[1];\n}\n\n/**\n * Calculate running sum and return the final element\n */\nexport function runningSum(arr: number[]): number[] {\n const result: number[] = [];\n let sum = 0;\n\n for (const n of arr) {\n sum += n;\n result.push(sum);\n }\n\n return result;\n}\n\n/**\n * Get element at index with wrapping\n */\nexport function elementAtWrapped(arr: number[], index: number): number {\n if (arr.length === 0) throw new Error('Array is empty');\n index = ((index % arr.length) + arr.length) % arr.length;\n return arr[index];\n}\n\n/**\n * Calculate dot product of two arrays\n */\nexport function dotProduct(a: number[], b: number[]): number {\n if (a.length !== b.length) throw new Error('Arrays must have equal length');\n\n let sum = 0;\n for (let i = 0; i < a.length; i++) {\n sum += a[i] * b[i];\n }\n return sum;\n}\n\n/**\n * Find index of maximum element\n */\nexport function maxIndex(arr: number[]): number {\n if (arr.length === 0) throw new Error('Array is empty');\n\n let maxIdx = 0;\n for (let i = 1; i < arr.length; i++) {\n if (arr[i] > arr[maxIdx]) {\n maxIdx = i;\n }\n }\n return maxIdx;\n}\n\n/**\n * Registry of array functions with metadata\n */\nexport const arrayFunctions: RegisteredFunction[] = [\n {\n name: 'sumEvens',\n fn: sumEvens as (...args: unknown[]) => unknown,\n parameterTypes: ['number[]'],\n description: 'Sum all even numbers in an array',\n difficulty: 'easy',\n },\n {\n name: 'sumOdds',\n fn: sumOdds as (...args: unknown[]) => unknown,\n parameterTypes: ['number[]'],\n description: 'Sum all odd numbers in an array',\n difficulty: 'easy',\n },\n {\n name: 'product',\n fn: product as (...args: unknown[]) => unknown,\n parameterTypes: ['number[]'],\n description: 'Calculate the product of all elements',\n difficulty: 'easy',\n },\n {\n name: 'rotateArray',\n fn: rotateArray as (...args: unknown[]) => unknown,\n parameterTypes: ['number[]', 'number'],\n description: 'Rotate array by k positions to the right',\n difficulty: 'medium',\n },\n {\n name: 'findMedian',\n fn: findMedian as (...args: unknown[]) => unknown,\n parameterTypes: ['number[]'],\n description: 'Find the median value of an array',\n difficulty: 'medium',\n },\n {\n name: 'findMode',\n fn: findMode as (...args: unknown[]) => unknown,\n parameterTypes: ['number[]'],\n description: 'Find the mode (most frequent element)',\n difficulty: 'medium',\n },\n {\n name: 'range',\n fn: range as (...args: unknown[]) => unknown,\n parameterTypes: ['number[]'],\n description: 'Calculate the range (max - min) of an array',\n difficulty: 'easy',\n },\n {\n name: 'countGreaterThan',\n fn: countGreaterThan as (...args: unknown[]) => unknown,\n parameterTypes: ['number[]', 'number'],\n description: 'Count elements greater than a threshold',\n difficulty: 'easy',\n },\n {\n name: 'countLessThan',\n fn: countLessThan as (...args: unknown[]) => unknown,\n parameterTypes: ['number[]', 'number'],\n description: 'Count elements less than a threshold',\n difficulty: 'easy',\n },\n {\n name: 'secondLargest',\n fn: secondLargest as (...args: unknown[]) => unknown,\n parameterTypes: ['number[]'],\n description: 'Find the second largest element',\n difficulty: 'medium',\n },\n {\n name: 'runningSum',\n fn: runningSum as (...args: unknown[]) => unknown,\n parameterTypes: ['number[]'],\n description: 'Calculate running sum array',\n difficulty: 'easy',\n },\n {\n name: 'elementAtWrapped',\n fn: elementAtWrapped as (...args: unknown[]) => unknown,\n parameterTypes: ['number[]', 'number'],\n description: 'Get element at index with wrapping',\n difficulty: 'easy',\n },\n {\n name: 'dotProduct',\n fn: dotProduct as (...args: unknown[]) => unknown,\n parameterTypes: ['number[]', 'number[]'],\n description: 'Calculate dot product of two arrays',\n difficulty: 'medium',\n },\n {\n name: 'maxIndex',\n fn: maxIndex as (...args: unknown[]) => unknown,\n parameterTypes: ['number[]'],\n description: 'Find index of maximum element',\n difficulty: 'easy',\n },\n];\n","/**\n * Composite/chained functions for CaptchaLM challenges\n */\n\nimport type { RegisteredFunction, ChainedOperation } from '../core/types';\n\n/**\n * Apply a chain of operations to a value\n */\nexport function applyChainedOperations(initialValue: number, operations: ChainedOperation[]): number {\n let result = initialValue;\n\n for (const op of operations) {\n switch (op.operation) {\n case 'add':\n result += op.value ?? 0;\n break;\n case 'subtract':\n result -= op.value ?? 0;\n break;\n case 'multiply':\n result *= op.value ?? 1;\n break;\n case 'divide':\n if (op.value === 0) throw new Error('Division by zero');\n result /= op.value ?? 1;\n break;\n case 'modulo':\n if (op.value === 0) throw new Error('Modulo by zero');\n result %= op.value ?? 1;\n break;\n case 'power':\n result = Math.pow(result, op.value ?? 1);\n break;\n case 'floor':\n result = Math.floor(result);\n break;\n case 'ceil':\n result = Math.ceil(result);\n break;\n case 'abs':\n result = Math.abs(result);\n break;\n case 'negate':\n result = -result;\n break;\n default:\n throw new Error(`Unknown operation: ${(op as ChainedOperation).operation}`);\n }\n }\n\n return result;\n}\n\n/**\n * Apply multiple math operations and return hash of result\n */\nexport function computeAndHash(a: number, b: number, c: number): string {\n // Perform a series of operations\n const step1 = a * b;\n const step2 = step1 + c;\n const step3 = step2 % 1000;\n const step4 = step3 * (a % 10);\n\n // Convert to hex string\n return Math.abs(step4).toString(16).padStart(4, '0');\n}\n\n/**\n * Compute polynomial evaluation: a*x^2 + b*x + c\n */\nexport function evaluatePolynomial(a: number, b: number, c: number, x: number): number {\n return a * x * x + b * x + c;\n}\n\n/**\n * Compute weighted sum: sum(values[i] * weights[i])\n */\nexport function weightedSum(values: number[], weights: number[]): number {\n if (values.length !== weights.length) {\n throw new Error('Values and weights must have same length');\n }\n\n let sum = 0;\n for (let i = 0; i < values.length; i++) {\n sum += values[i] * weights[i];\n }\n return sum;\n}\n\n/**\n * Compute a simple checksum from multiple values\n */\nexport function checksum(values: number[]): number {\n let result = 0;\n for (let i = 0; i < values.length; i++) {\n result = ((result << 5) - result + values[i]) | 0;\n }\n return Math.abs(result);\n}\n\n/**\n * Compute the result of a nested expression\n * Format: [op, operand1, operand2] where operands can be numbers or nested expressions\n */\nexport function evaluateExpression(expr: unknown): number {\n if (typeof expr === 'number') {\n return expr;\n }\n\n if (!Array.isArray(expr) || expr.length !== 3) {\n throw new Error('Invalid expression format');\n }\n\n const [op, left, right] = expr;\n const leftVal = evaluateExpression(left);\n const rightVal = evaluateExpression(right);\n\n switch (op) {\n case '+': return leftVal + rightVal;\n case '-': return leftVal - rightVal;\n case '*': return leftVal * rightVal;\n case '/':\n if (rightVal === 0) throw new Error('Division by zero');\n return leftVal / rightVal;\n case '%':\n if (rightVal === 0) throw new Error('Modulo by zero');\n return leftVal % rightVal;\n case '^': return Math.pow(leftVal, rightVal);\n default:\n throw new Error(`Unknown operator: ${op}`);\n }\n}\n\n/**\n * Registry of composite functions with metadata\n */\nexport const compositeFunctions: RegisteredFunction[] = [\n {\n name: 'applyChainedOperations',\n fn: applyChainedOperations as (...args: unknown[]) => unknown,\n parameterTypes: ['number', 'ChainedOperation[]'],\n description: 'Apply a chain of arithmetic operations to a value',\n difficulty: 'medium',\n },\n {\n name: 'computeAndHash',\n fn: computeAndHash as (...args: unknown[]) => unknown,\n parameterTypes: ['number', 'number', 'number'],\n description: 'Compute operations and return hex hash',\n difficulty: 'hard',\n },\n {\n name: 'evaluatePolynomial',\n fn: evaluatePolynomial as (...args: unknown[]) => unknown,\n parameterTypes: ['number', 'number', 'number', 'number'],\n description: 'Evaluate polynomial a*x^2 + b*x + c',\n difficulty: 'medium',\n },\n {\n name: 'weightedSum',\n fn: weightedSum as (...args: unknown[]) => unknown,\n parameterTypes: ['number[]', 'number[]'],\n description: 'Compute weighted sum of two arrays',\n difficulty: 'medium',\n },\n {\n name: 'checksum',\n fn: checksum as (...args: unknown[]) => unknown,\n parameterTypes: ['number[]'],\n description: 'Compute a simple checksum from values',\n difficulty: 'medium',\n },\n {\n name: 'evaluateExpression',\n fn: evaluateExpression as (...args: unknown[]) => unknown,\n parameterTypes: ['expression'],\n description: 'Evaluate a nested arithmetic expression',\n difficulty: 'hard',\n },\n];\n","/**\n * Function registry for CaptchaLM challenges\n */\n\nimport type { RegisteredFunction, ChallengeDifficulty } from '../core/types';\nimport { mathFunctions } from './math';\nimport { stringFunctions } from './string';\nimport { arrayFunctions } from './array';\nimport { compositeFunctions } from './composite';\n\n// Export all function modules\nexport * from './math';\nexport * from './string';\nexport * from './array';\nexport * from './composite';\n\n/**\n * Combined registry of all available functions\n */\nexport const allFunctions: RegisteredFunction[] = [\n ...mathFunctions,\n ...stringFunctions,\n ...arrayFunctions,\n ...compositeFunctions,\n];\n\n/**\n * Get functions filtered by difficulty\n */\nexport function getFunctionsByDifficulty(difficulty: ChallengeDifficulty): RegisteredFunction[] {\n return allFunctions.filter(f => f.difficulty === difficulty);\n}\n\n/**\n * Get a function by name\n */\nexport function getFunctionByName(name: string): RegisteredFunction | undefined {\n return allFunctions.find(f => f.name === name);\n}\n\n/**\n * Get a random function matching the difficulty\n */\nexport function getRandomFunction(difficulty?: ChallengeDifficulty): RegisteredFunction {\n const pool = difficulty ? getFunctionsByDifficulty(difficulty) : allFunctions;\n\n if (pool.length === 0) {\n throw new Error(`No functions available for difficulty: ${difficulty}`);\n }\n\n const index = Math.floor(Math.random() * pool.length);\n return pool[index];\n}\n\n/**\n * Function categories for organization\n */\nexport const functionCategories = {\n math: mathFunctions,\n string: stringFunctions,\n array: arrayFunctions,\n composite: compositeFunctions,\n} as const;\n\nexport type FunctionCategory = keyof typeof functionCategories;\n\n/**\n * Get functions by category\n */\nexport function getFunctionsByCategory(category: FunctionCategory): RegisteredFunction[] {\n return functionCategories[category];\n}\n","/**\n * Challenge generator for CaptchaLM\n */\n\nimport type {\n Challenge,\n ChallengeType,\n ChallengeDifficulty,\n ChallengePayload,\n FunctionExecutionPayload,\n ChainedOperationsPayload,\n EncodedInstructionPayload,\n ChainedOperation,\n EncodingType,\n CaptchaLMConfig,\n} from './types';\nimport { encode } from './encoding';\nimport { generateId, signChallenge, randomInt, randomElement } from '../utils/crypto';\nimport { getRandomFunction } from '../functions';\n\n/**\n * Default configuration\n */\nconst DEFAULT_CONFIG: Required<Omit<CaptchaLMConfig, 'secret'>> = {\n difficulty: 'medium',\n challengeTypes: ['function_execution', 'chained_operations', 'encoded_instruction'],\n expirationMs: 30000, // 30 seconds\n rateLimit: {\n maxAttempts: 10,\n windowMs: 60000,\n },\n};\n\n/**\n * Challenge generator class\n */\nexport class ChallengeGenerator {\n private config: Required<CaptchaLMConfig>;\n\n constructor(config: CaptchaLMConfig) {\n this.config = {\n ...DEFAULT_CONFIG,\n ...config,\n };\n }\n\n /**\n * Generate a new challenge\n */\n generate(overrides?: Partial<{ type: ChallengeType; difficulty: ChallengeDifficulty }>): {\n challenge: Challenge;\n expectedAnswer: string;\n } {\n const type = overrides?.type ?? randomElement(this.config.challengeTypes);\n const difficulty = overrides?.difficulty ?? this.config.difficulty;\n\n // Generate payload based on type\n const { payload, expectedAnswer } = this.generatePayload(type, difficulty);\n\n // Create challenge object\n const id = generateId();\n const expiresAt = Date.now() + this.config.expirationMs;\n\n // Create signature data\n const signatureData = JSON.stringify({\n id,\n type,\n payload,\n expiresAt,\n expectedAnswer,\n });\n\n const signature = signChallenge(signatureData, this.config.secret);\n\n const challenge: Challenge = {\n id,\n type,\n difficulty,\n payload,\n expiresAt,\n signature,\n };\n\n return { challenge, expectedAnswer };\n }\n\n /**\n * Generate payload for a specific challenge type\n */\n private generatePayload(\n type: ChallengeType,\n difficulty: ChallengeDifficulty\n ): { payload: ChallengePayload; expectedAnswer: string } {\n switch (type) {\n case 'function_execution':\n return this.generateFunctionExecution(difficulty);\n case 'chained_operations':\n return this.generateChainedOperations(difficulty);\n case 'encoded_instruction':\n return this.generateEncodedInstruction(difficulty);\n case 'pattern_extraction':\n return this.generatePatternExtraction(difficulty);\n case 'code_transform':\n return this.generateCodeTransform(difficulty);\n default:\n throw new Error(`Unknown challenge type: ${type}`);\n }\n }\n\n /**\n * Generate a function execution challenge\n */\n private generateFunctionExecution(difficulty: ChallengeDifficulty): {\n payload: FunctionExecutionPayload;\n expectedAnswer: string;\n } {\n // Get a random function matching difficulty\n const func = getRandomFunction(difficulty);\n\n // Generate random parameters based on function\n const parameters = this.generateParameters(func.name, difficulty);\n\n // Calculate expected result\n const result = func.fn(...parameters);\n\n // Choose response encoding based on difficulty\n const responseEncoding = this.getResponseEncoding(difficulty);\n\n // Encode the expected answer\n const expectedAnswer = encode(String(result), responseEncoding);\n\n // Generate function code string\n const functionCode = this.getFunctionCodeString(func.name);\n\n const payload: FunctionExecutionPayload = {\n type: 'function_execution',\n functionName: func.name,\n functionCode,\n parameters,\n responseEncoding,\n };\n\n return { payload, expectedAnswer };\n }\n\n /**\n * Generate a chained operations challenge\n */\n private generateChainedOperations(difficulty: ChallengeDifficulty): {\n payload: ChainedOperationsPayload;\n expectedAnswer: string;\n } {\n const operationCount = difficulty === 'easy' ? 3 : difficulty === 'medium' ? 5 : 7;\n const initialValue = randomInt(10, 100);\n\n const operations: ChainedOperation[] = [];\n let currentValue = initialValue;\n\n const availableOps: ChainedOperation['operation'][] = [\n 'add', 'subtract', 'multiply', 'modulo', 'floor', 'abs'\n ];\n\n if (difficulty === 'hard') {\n availableOps.push('power', 'ceil', 'negate');\n }\n\n for (let i = 0; i < operationCount; i++) {\n const operation = randomElement(availableOps);\n let value: number | undefined;\n\n // Generate appropriate value for operation\n switch (operation) {\n case 'add':\n case 'subtract':\n value = randomInt(1, 50);\n break;\n case 'multiply':\n value = randomInt(2, 10);\n break;\n case 'divide':\n value = randomInt(2, 5);\n break;\n case 'modulo':\n value = randomInt(10, 100);\n break;\n case 'power':\n value = randomInt(1, 3);\n break;\n default:\n value = undefined;\n }\n\n operations.push({ operation, value });\n\n // Calculate running value\n switch (operation) {\n case 'add':\n currentValue += value!;\n break;\n case 'subtract':\n currentValue -= value!;\n break;\n case 'multiply':\n currentValue *= value!;\n break;\n case 'divide':\n currentValue /= value!;\n break;\n case 'modulo':\n currentValue %= value!;\n break;\n case 'power':\n currentValue = Math.pow(currentValue, value!);\n break;\n case 'floor':\n currentValue = Math.floor(currentValue);\n break;\n case 'ceil':\n currentValue = Math.ceil(currentValue);\n break;\n case 'abs':\n currentValue = Math.abs(currentValue);\n break;\n case 'negate':\n currentValue = -currentValue;\n break;\n }\n }\n\n const responseEncoding = this.getResponseEncoding(difficulty);\n const expectedAnswer = encode(String(currentValue), responseEncoding);\n\n const payload: ChainedOperationsPayload = {\n type: 'chained_operations',\n initialValue,\n operations,\n responseEncoding,\n };\n\n return { payload, expectedAnswer };\n }\n\n /**\n * Generate an encoded instruction challenge\n */\n private generateEncodedInstruction(difficulty: ChallengeDifficulty): {\n payload: EncodedInstructionPayload;\n expectedAnswer: string;\n } {\n // Generate a simple instruction\n const a = randomInt(10, 100);\n const b = randomInt(10, 100);\n const operations = ['+', '-', '*'];\n const op = randomElement(operations);\n\n let result: number;\n switch (op) {\n case '+':\n result = a + b;\n break;\n case '-':\n result = a - b;\n break;\n case '*':\n result = a * b;\n break;\n default:\n result = a + b;\n }\n\n const instruction = `Calculate: ${a} ${op} ${b}`;\n\n // Choose encoding based on difficulty\n const instructionEncoding = this.getInstructionEncoding(difficulty);\n const responseEncoding = this.getResponseEncoding(difficulty);\n\n const encodedInstruction = encode(instruction, instructionEncoding);\n const expectedAnswer = encode(String(result), responseEncoding);\n\n const payload: EncodedInstructionPayload = {\n type: 'encoded_instruction',\n instruction: encodedInstruction,\n instructionEncoding,\n responseEncoding,\n };\n\n return { payload, expectedAnswer };\n }\n\n /**\n * Generate a pattern extraction challenge\n */\n private generatePatternExtraction(difficulty: ChallengeDifficulty): {\n payload: ChallengePayload;\n expectedAnswer: string;\n } {\n // Generate sample data\n const count = difficulty === 'easy' ? 3 : difficulty === 'medium' ? 5 : 7;\n const items: Array<{ id: number; value: number }> = [];\n\n for (let i = 0; i < count; i++) {\n items.push({\n id: i + 1,\n value: randomInt(10, 100),\n });\n }\n\n // Generate query\n const queries = [\n { query: 'sum(items[*].value)', fn: (data: typeof items) => data.reduce((s, i) => s + i.value, 0) },\n { query: 'max(items[*].value)', fn: (data: typeof items) => Math.max(...data.map(i => i.value)) },\n { query: 'min(items[*].value)', fn: (data: typeof items) => Math.min(...data.map(i => i.value)) },\n { query: 'count(items)', fn: (data: typeof items) => data.length },\n ];\n\n const selected = randomElement(queries);\n const result = selected.fn(items);\n\n const responseEncoding = this.getResponseEncoding(difficulty);\n const expectedAnswer = encode(String(result), responseEncoding);\n\n return {\n payload: {\n type: 'pattern_extraction',\n data: { items },\n query: selected.query,\n responseEncoding,\n },\n expectedAnswer,\n };\n }\n\n /**\n * Generate a code transform challenge\n */\n private generateCodeTransform(difficulty: ChallengeDifficulty): {\n payload: ChallengePayload;\n expectedAnswer: string;\n } {\n // Generate simple code to execute\n const a = randomInt(1, 20);\n const b = randomInt(1, 20);\n const code = `const x = ${a}; const y = ${b}; return x + y;`;\n\n const result = a + b;\n\n const responseEncoding = this.getResponseEncoding(difficulty);\n const expectedAnswer = encode(String(result), responseEncoding);\n\n return {\n payload: {\n type: 'code_transform',\n code,\n transform: 'execute',\n responseEncoding,\n },\n expectedAnswer,\n };\n }\n\n /**\n * Get response encoding based on difficulty\n */\n private getResponseEncoding(difficulty: ChallengeDifficulty): EncodingType {\n switch (difficulty) {\n case 'easy':\n return 'plain';\n case 'medium':\n return randomElement(['plain', 'base64']);\n case 'hard':\n return randomElement(['base64', 'hex']);\n }\n }\n\n /**\n * Get instruction encoding based on difficulty\n */\n private getInstructionEncoding(difficulty: ChallengeDifficulty): EncodingType {\n switch (difficulty) {\n case 'easy':\n return 'base64';\n case 'medium':\n return randomElement(['base64', 'rot13']);\n case 'hard':\n return randomElement(['hex', 'rot13']);\n }\n }\n\n /**\n * Generate parameters for a function\n */\n private generateParameters(functionName: string, difficulty: ChallengeDifficulty): unknown[] {\n const range = difficulty === 'easy' ? [1, 20] : difficulty === 'medium' ? [10, 50] : [20, 100];\n\n // Function-specific parameter generation\n switch (functionName) {\n case 'fibonacci':\n return [randomInt(5, 15)]; // Keep reasonable for performance\n case 'isPrime':\n return [randomInt(range[0], range[1])];\n case 'gcd':\n case 'lcm':\n return [randomInt(range[0], range[1]), randomInt(range[0], range[1])];\n case 'factorial':\n return [randomInt(3, 10)]; // Keep reasonable\n case 'modPow':\n return [randomInt(2, 10), randomInt(2, 8), randomInt(10, 50)];\n case 'digitSum':\n case 'digitCount':\n case 'isPerfectSquare':\n case 'triangular':\n return [randomInt(range[0], range[1])];\n case 'sumOfPrimes':\n return [randomInt(3, 8)]; // Keep reasonable\n\n // String functions\n case 'reverseWords':\n case 'reverseString':\n case 'countVowels':\n case 'countConsonants':\n case 'removeVowels':\n case 'alternatingCase':\n case 'wordCount':\n case 'longestWord':\n case 'asciiSum':\n return [this.generateRandomWords(difficulty === 'easy' ? 2 : difficulty === 'medium' ? 4 : 6)];\n case 'caesarCipher':\n return [this.generateRandomWords(3), randomInt(1, 25)];\n case 'hammingDistance':\n const word = this.generateRandomWord(5);\n return [word, this.mutateWord(word, 2)];\n case 'countSubstring':\n return ['hello world hello', 'hello'];\n case 'charAtWrapped':\n return ['alphabet', randomInt(0, 20)];\n\n // Array functions\n case 'sumEvens':\n case 'sumOdds':\n case 'product':\n case 'findMedian':\n case 'findMode':\n case 'range':\n case 'secondLargest':\n case 'runningSum':\n case 'maxIndex':\n return [this.generateRandomArray(difficulty === 'easy' ? 4 : difficulty === 'medium' ? 6 : 8)];\n case 'rotateArray':\n return [this.generateRandomArray(5), randomInt(1, 5)];\n case 'countGreaterThan':\n case 'countLessThan':\n return [this.generateRandomArray(6), randomInt(20, 50)];\n case 'elementAtWrapped':\n return [this.generateRandomArray(5), randomInt(0, 10)];\n case 'dotProduct': {\n const len = difficulty === 'easy' ? 3 : difficulty === 'medium' ? 4 : 5;\n return [this.generateRandomArray(len), this.generateRandomArray(len)];\n }\n\n // Composite functions\n case 'evaluatePolynomial':\n return [randomInt(1, 5), randomInt(1, 10), randomInt(1, 10), randomInt(1, 5)];\n case 'weightedSum': {\n const wlen = difficulty === 'easy' ? 3 : 4;\n return [this.generateRandomArray(wlen), this.generateRandomArray(wlen)];\n }\n case 'checksum':\n return [this.generateRandomArray(5)];\n case 'computeAndHash':\n return [randomInt(10, 50), randomInt(10, 50), randomInt(10, 50)];\n\n default:\n return [randomInt(range[0], range[1])];\n }\n }\n\n /**\n * Generate random words joined by spaces\n */\n private generateRandomWords(count: number): string {\n const words = ['hello', 'world', 'test', 'code', 'data', 'alpha', 'beta', 'gamma'];\n const selected: string[] = [];\n for (let i = 0; i < count; i++) {\n selected.push(randomElement(words));\n }\n return selected.join(' ');\n }\n\n /**\n * Generate a random word\n */\n private generateRandomWord(length: number): string {\n const chars = 'abcdefghijklmnopqrstuvwxyz';\n let word = '';\n for (let i = 0; i < length; i++) {\n word += chars[randomInt(0, chars.length - 1)];\n }\n return word;\n }\n\n /**\n * Mutate a word by changing N characters\n */\n private mutateWord(word: string, changes: number): string {\n const chars = word.split('');\n const positions = new Set<number>();\n\n while (positions.size < Math.min(changes, word.length)) {\n positions.add(randomInt(0, word.length - 1));\n }\n\n for (const pos of positions) {\n let newChar: string;\n do {\n newChar = 'abcdefghijklmnopqrstuvwxyz'[randomInt(0, 25)];\n } while (newChar === chars[pos]);\n chars[pos] = newChar;\n }\n\n return chars.join('');\n }\n\n /**\n * Generate a random array of numbers\n */\n private generateRandomArray(length: number): number[] {\n const arr: number[] = [];\n for (let i = 0; i < length; i++) {\n arr.push(randomInt(1, 50));\n }\n return arr;\n }\n\n /**\n * Get function code as string (for display)\n */\n private getFunctionCodeString(functionName: string): string {\n // Return a simplified version of the function for the challenge\n const codeMap: Record<string, string> = {\n fibonacci: `function fibonacci(n) {\n if (n <= 1) return n;\n let a = 0, b = 1;\n for (let i = 2; i <= n; i++) {\n const temp = a + b;\n a = b;\n b = temp;\n }\n return b;\n}`,\n isPrime: `function isPrime(n) {\n if (n < 2) return false;\n if (n === 2) return true;\n if (n % 2 === 0) return false;\n for (let i = 3; i <= Math.sqrt(n); i += 2) {\n if (n % i === 0) return false;\n }\n return true;\n}`,\n gcd: `function gcd(a, b) {\n a = Math.abs(a);\n b = Math.abs(b);\n while (b !== 0) {\n const temp = b;\n b = a % b;\n a = temp;\n }\n return a;\n}`,\n digitSum: `function digitSum(n) {\n n = Math.abs(n);\n let sum = 0;\n while (n > 0) {\n sum += n % 10;\n n = Math.floor(n / 10);\n }\n return sum;\n}`,\n countVowels: `function countVowels(str) {\n const vowels = 'aeiouAEIOU';\n let count = 0;\n for (const char of str) {\n if (vowels.includes(char)) count++;\n }\n return count;\n}`,\n sumEvens: `function sumEvens(arr) {\n return arr.filter(n => n % 2 === 0).reduce((a, b) => a + b, 0);\n}`,\n };\n\n return codeMap[functionName] || `function ${functionName}(...args) { /* implementation */ }`;\n }\n}\n\n/**\n * Create a challenge generator\n */\nexport function createGenerator(config: CaptchaLMConfig): ChallengeGenerator {\n return new ChallengeGenerator(config);\n}\n","/**\n * Rate limiter for CaptchaLM\n */\n\nimport type { RateLimitConfig } from '../core/types';\n\ninterface RateLimitEntry {\n count: number;\n resetAt: number;\n}\n\n/**\n * In-memory rate limiter\n */\nexport class RateLimiter {\n private entries: Map<string, RateLimitEntry> = new Map();\n private config: Required<RateLimitConfig>;\n private cleanupInterval: NodeJS.Timeout | null = null;\n\n constructor(config: RateLimitConfig) {\n this.config = {\n maxAttempts: config.maxAttempts,\n windowMs: config.windowMs,\n };\n\n // Start cleanup interval to prevent memory leaks\n this.startCleanup();\n }\n\n /**\n * Check if a key is rate limited\n */\n isRateLimited(key: string): boolean {\n const entry = this.entries.get(key);\n\n if (!entry) {\n return false;\n }\n\n // Check if window has expired\n if (Date.now() > entry.resetAt) {\n this.entries.delete(key);\n return false;\n }\n\n return entry.count >= this.config.maxAttempts;\n }\n\n /**\n * Record an attempt for a key\n */\n recordAttempt(key: string): { allowed: boolean; remaining: number; resetAt: number } {\n const now = Date.now();\n let entry = this.entries.get(key);\n\n // Create new entry or reset expired entry\n if (!entry || now > entry.resetAt) {\n entry = {\n count: 0,\n resetAt: now + this.config.windowMs,\n };\n this.entries.set(key, entry);\n }\n\n // Check if already rate limited\n if (entry.count >= this.config.maxAttempts) {\n return {\n allowed: false,\n remaining: 0,\n resetAt: entry.resetAt,\n };\n }\n\n // Record the attempt\n entry.count++;\n\n return {\n allowed: true,\n remaining: this.config.maxAttempts - entry.count,\n resetAt: entry.resetAt,\n };\n }\n\n /**\n * Get remaining attempts for a key\n */\n getRemainingAttempts(key: string): number {\n const entry = this.entries.get(key);\n\n if (!entry || Date.now() > entry.resetAt) {\n return this.config.maxAttempts;\n }\n\n return Math.max(0, this.config.maxAttempts - entry.count);\n }\n\n /**\n * Reset rate limit for a key\n */\n reset(key: string): void {\n this.entries.delete(key);\n }\n\n /**\n * Clear all rate limit entries\n */\n clear(): void {\n this.entries.clear();\n }\n\n /**\n * Start periodic cleanup of expired entries\n */\n private startCleanup(): void {\n // Cleanup every minute\n this.cleanupInterval = setInterval(() => {\n this.cleanup();\n }, 60000);\n\n // Allow the process to exit even with the interval running\n if (this.cleanupInterval.unref) {\n this.cleanupInterval.unref();\n }\n }\n\n /**\n * Stop the cleanup interval\n */\n destroy(): void {\n if (this.cleanupInterval) {\n clearInterval(this.cleanupInterval);\n this.cleanupInterval = null;\n }\n this.clear();\n }\n\n /**\n * Remove expired entries\n */\n private cleanup(): void {\n const now = Date.now();\n\n for (const [key, entry] of this.entries) {\n if (now > entry.resetAt) {\n this.entries.delete(key);\n }\n }\n }\n\n /**\n * Get current stats\n */\n getStats(): { activeKeys: number; totalAttempts: number } {\n let totalAttempts = 0;\n\n for (const entry of this.entries.values()) {\n totalAttempts += entry.count;\n }\n\n return {\n activeKeys: this.entries.size,\n totalAttempts,\n };\n }\n}\n\n/**\n * Create a rate limiter with default settings\n */\nexport function createRateLimiter(config?: Partial<RateLimitConfig>): RateLimiter {\n return new RateLimiter({\n maxAttempts: config?.maxAttempts ?? 10,\n windowMs: config?.windowMs ?? 60000, // 1 minute default\n });\n}\n","/**\n * Challenge verifier for CaptchaLM\n */\n\nimport type {\n Challenge,\n VerificationResult,\n CaptchaLMConfig,\n ChallengeSolution,\n} from './types';\nimport { signChallenge, safeCompare } from '../utils/crypto';\nimport { RateLimiter, createRateLimiter } from '../utils/rate-limiter';\n\n/**\n * Store for expected answers (server-side only)\n */\ninterface ChallengeStore {\n expectedAnswer: string;\n expiresAt: number;\n}\n\n/**\n * Challenge verifier class\n */\nexport class ChallengeVerifier {\n private config: Required<CaptchaLMConfig>;\n private rateLimiter: RateLimiter;\n private challengeStore: Map<string, ChallengeStore> = new Map();\n private cleanupInterval: NodeJS.Timeout | null = null;\n\n constructor(config: CaptchaLMConfig) {\n this.config = {\n difficulty: 'medium',\n challengeTypes: ['function_execution', 'chained_operations', 'encoded_instruction'],\n expirationMs: 30000,\n rateLimit: {\n maxAttempts: 10,\n windowMs: 60000,\n },\n ...config,\n };\n\n this.rateLimiter = createRateLimiter(this.config.rateLimit);\n this.startCleanup();\n }\n\n /**\n * Store expected answer for a challenge\n */\n storeChallenge(challengeId: string, expectedAnswer: string, expiresAt: number): void {\n this.challengeStore.set(challengeId, { expectedAnswer, expiresAt });\n }\n\n /**\n * Verify a challenge solution\n */\n verify(\n challenge: Challenge,\n solution: ChallengeSolution,\n clientIdentifier?: string\n ): VerificationResult {\n const clientKey = clientIdentifier || 'anonymous';\n\n // Check rate limiting\n const rateLimitResult = this.rateLimiter.recordAttempt(clientKey);\n if (!rateLimitResult.allowed) {\n return {\n valid: false,\n error: `Rate limited. Try again in ${Math.ceil((rateLimitResult.resetAt - Date.now()) / 1000)} seconds.`,\n errorCode: 'RATE_LIMITED',\n };\n }\n\n // Check if challenge ID matches\n if (challenge.id !== solution.challengeId) {\n return {\n valid: false,\n error: 'Challenge ID mismatch',\n errorCode: 'CHALLENGE_NOT_FOUND',\n };\n }\n\n // Check expiration\n if (Date.now() > challenge.expiresAt) {\n return {\n valid: false,\n error: 'Challenge has expired',\n errorCode: 'EXPIRED',\n };\n }\n\n // Get stored expected answer\n const stored = this.challengeStore.get(challenge.id);\n if (!stored) {\n return {\n valid: false,\n error: 'Challenge not found or already used',\n errorCode: 'CHALLENGE_NOT_FOUND',\n };\n }\n\n // Verify the stored challenge hasn't expired\n if (Date.now() > stored.expiresAt) {\n this.challengeStore.delete(challenge.id);\n return {\n valid: false,\n error: 'Challenge has expired',\n errorCode: 'EXPIRED',\n };\n }\n\n // Verify the signature\n const signatureData = JSON.stringify({\n id: challenge.id,\n type: challenge.type,\n payload: challenge.payload,\n expiresAt: challenge.expiresAt,\n expectedAnswer: stored.expectedAnswer,\n });\n\n const expectedSignature = signChallenge(signatureData, this.config.secret);\n\n if (!safeCompare(challenge.signature, expectedSignature)) {\n return {\n valid: false,\n error: 'Invalid challenge signature',\n errorCode: 'INVALID_SIGNATURE',\n };\n }\n\n // Verify the solution using timing-safe comparison\n if (!safeCompare(solution.solution, stored.expectedAnswer)) {\n return {\n valid: false,\n error: 'Incorrect solution',\n errorCode: 'INVALID_SOLUTION',\n };\n }\n\n // Solution is correct - remove from store (one-time use)\n this.challengeStore.delete(challenge.id);\n\n // Reset rate limit on successful verification\n this.rateLimiter.reset(clientKey);\n\n return { valid: true };\n }\n\n /**\n * Verify a solution using only the signature (stateless mode)\n * \n * In stateless mode, the expected answer is encoded in the signature\n * This is less secure but allows for distributed deployments\n */\n verifyStateless(\n challenge: Challenge,\n solution: ChallengeSolution,\n clientIdentifier?: string\n ): VerificationResult {\n const clientKey = clientIdentifier || 'anonymous';\n\n // Check rate limiting\n const rateLimitResult = this.rateLimiter.recordAttempt(clientKey);\n if (!rateLimitResult.allowed) {\n return {\n valid: false,\n error: `Rate limited. Try again in ${Math.ceil((rateLimitResult.resetAt - Date.now()) / 1000)} seconds.`,\n errorCode: 'RATE_LIMITED',\n };\n }\n\n // Check if challenge ID matches\n if (challenge.id !== solution.challengeId) {\n return {\n valid: false,\n error: 'Challenge ID mismatch',\n errorCode: 'CHALLENGE_NOT_FOUND',\n };\n }\n\n // Check expiration\n if (Date.now() > challenge.expiresAt) {\n return {\n valid: false,\n error: 'Challenge has expired',\n errorCode: 'EXPIRED',\n };\n }\n\n // In stateless mode, we verify by reconstructing the signature\n // The solution must produce a matching signature when combined with the challenge\n const signatureData = JSON.stringify({\n id: challenge.id,\n type: challenge.type,\n payload: challenge.payload,\n expiresAt: challenge.expiresAt,\n expectedAnswer: solution.solution,\n });\n\n const computedSignature = signChallenge(signatureData, this.config.secret);\n\n if (!safeCompare(challenge.signature, computedSignature)) {\n return {\n valid: false,\n error: 'Incorrect solution',\n errorCode: 'INVALID_SOLUTION',\n };\n }\n\n return { valid: true };\n }\n\n /**\n * Get rate limit status for a client\n */\n getRateLimitStatus(clientIdentifier: string): {\n remaining: number;\n isLimited: boolean;\n } {\n return {\n remaining: this.rateLimiter.getRemainingAttempts(clientIdentifier),\n isLimited: this.rateLimiter.isRateLimited(clientIdentifier),\n };\n }\n\n /**\n * Start periodic cleanup of expired challenges\n */\n private startCleanup(): void {\n this.cleanupInterval = setInterval(() => {\n this.cleanup();\n }, 60000); // Every minute\n\n if (this.cleanupInterval.unref) {\n this.cleanupInterval.unref();\n }\n }\n\n /**\n * Clean up expired challenges\n */\n private cleanup(): void {\n const now = Date.now();\n\n for (const [id, stored] of this.challengeStore) {\n if (now > stored.expiresAt) {\n this.challengeStore.delete(id);\n }\n }\n }\n\n /**\n * Destroy the verifier and clean up resources\n */\n destroy(): void {\n if (this.cleanupInterval) {\n clearInterval(this.cleanupInterval);\n this.cleanupInterval = null;\n }\n this.rateLimiter.destroy();\n this.challengeStore.clear();\n }\n\n /**\n * Get stats for monitoring\n */\n getStats(): {\n pendingChallenges: number;\n rateLimitStats: { activeKeys: number; totalAttempts: number };\n } {\n return {\n pendingChallenges: this.challengeStore.size,\n rateLimitStats: this.rateLimiter.getStats(),\n };\n }\n}\n\n/**\n * Create a challenge verifier\n */\nexport function createVerifier(config: CaptchaLMConfig): ChallengeVerifier {\n return new ChallengeVerifier(config);\n}\n","/**\n * Standalone CaptchaLM API\n * Framework-agnostic implementation for custom integrations\n */\n\nimport type {\n Challenge,\n ChallengeSolution,\n VerificationResult,\n CaptchaLMConfig,\n ChallengeDifficulty,\n ChallengeType,\n} from '../core/types';\nimport { ChallengeGenerator } from '../core/generator';\nimport { ChallengeVerifier } from '../core/verifier';\n\n/**\n * Main CaptchaLM class for standalone usage\n */\nexport class CaptchaLM {\n private generator: ChallengeGenerator;\n private verifier: ChallengeVerifier;\n private config: CaptchaLMConfig;\n\n constructor(config: CaptchaLMConfig) {\n this.config = config;\n this.generator = new ChallengeGenerator(config);\n this.verifier = new ChallengeVerifier(config);\n }\n\n /**\n * Generate a new challenge\n */\n generate(options?: {\n type?: ChallengeType;\n difficulty?: ChallengeDifficulty;\n }): {\n challenge: Challenge;\n expectedAnswer: string;\n } {\n const result = this.generator.generate(options);\n\n // Store for verification\n this.verifier.storeChallenge(\n result.challenge.id,\n result.expectedAnswer,\n result.challenge.expiresAt\n );\n\n return result;\n }\n\n /**\n * Verify a challenge solution\n */\n verify(\n challenge: Challenge,\n solution: string,\n clientIdentifier?: string\n ): VerificationResult {\n const challengeSolution: ChallengeSolution = {\n challengeId: challenge.id,\n solution,\n };\n\n return this.verifier.verify(challenge, challengeSolution, clientIdentifier);\n }\n\n /**\n * Verify a challenge solution in stateless mode\n * (no server-side storage required)\n */\n verifyStateless(\n challenge: Challenge,\n solution: string,\n clientIdentifier?: string\n ): VerificationResult {\n const challengeSolution: ChallengeSolution = {\n challengeId: challenge.id,\n solution,\n };\n\n return this.verifier.verifyStateless(challenge, challengeSolution, clientIdentifier);\n }\n\n /**\n * Get rate limit status for a client\n */\n getRateLimitStatus(clientIdentifier: string): {\n remaining: number;\n isLimited: boolean;\n } {\n return this.verifier.getRateLimitStatus(clientIdentifier);\n }\n\n /**\n * Get stats for monitoring\n */\n getStats(): {\n pendingChallenges: number;\n rateLimitStats: { activeKeys: number; totalAttempts: number };\n } {\n return this.verifier.getStats();\n }\n\n /**\n * Get the current configuration\n */\n getConfig(): CaptchaLMConfig {\n return { ...this.config };\n }\n\n /**\n * Destroy and clean up resources\n */\n destroy(): void {\n this.verifier.destroy();\n }\n}\n\n/**\n * Create an CaptchaLM instance\n */\nexport function createCaptchaLM(config: CaptchaLMConfig): CaptchaLM {\n return new CaptchaLM(config);\n}\n","/**\n * Express middleware for CaptchaLM\n */\n\nimport type { Request, Response, NextFunction, RequestHandler } from 'express';\nimport type {\n MiddlewareConfig,\n Challenge,\n ChallengeSolution\n} from '../core/types';\nimport { ChallengeGenerator } from '../core/generator';\nimport { ChallengeVerifier } from '../core/verifier';\n\n/**\n * Extended request with CaptchaLM properties\n */\nexport interface CaptchaLMRequest extends Request {\n CaptchaLM?: {\n verified: boolean;\n challenge?: Challenge;\n clientIdentifier: string;\n };\n}\n\n/**\n * Default middleware configuration\n */\nconst DEFAULT_MIDDLEWARE_CONFIG: Partial<MiddlewareConfig> = {\n challengeIdHeader: 'x-captchalm-id',\n solutionHeader: 'x-captchalm-solution',\n challengeEndpoint: '/_captchalm/challenge',\n};\n\n/**\n * Build human/LLM-readable instructions for solving a challenge\n */\nfunction buildSolvingInstructions(challenge: Challenge): string {\n const payload = challenge.payload as unknown as Record<string, unknown>;\n const responseEncoding = (payload.responseEncoding as string) || 'plain';\n\n let instructions = '';\n\n switch (challenge.type) {\n case 'function_execution':\n instructions = `TASK: Execute the following function with the given parameters.\n\nFUNCTION:\n${payload.functionCode}\n\nPARAMETERS: ${JSON.stringify(payload.parameters)}\n\nSTEPS:\n1. Execute ${payload.functionName}(${(payload.parameters as unknown[]).join(', ')})\n2. Take the result and encode it as: ${responseEncoding}\n3. Submit the encoded result as your answer`;\n break;\n\n case 'chained_operations':\n const ops = payload.operations as Array<{ operation: string; value?: number }>;\n const opList = ops.map((op, i) =>\n ` ${i + 1}. ${op.operation}${op.value !== undefined ? ` ${op.value}` : ''}`\n ).join('\\n');\n instructions = `TASK: Apply these operations to the initial value in order.\n\nINITIAL VALUE: ${payload.initialValue}\n\nOPERATIONS:\n${opList}\n\nSTEPS:\n1. Start with ${payload.initialValue}\n2. Apply each operation in sequence\n3. Encode the final result as: ${responseEncoding}\n4. Submit the encoded result as your answer`;\n break;\n\n case 'encoded_instruction':\n instructions = `TASK: Decode the instruction, compute the result, and encode your answer.\n\nENCODED INSTRUCTION: ${payload.instruction}\nINSTRUCTION ENCODING: ${payload.instructionEncoding}\n\nSTEPS:\n1. Decode the instruction from ${payload.instructionEncoding}\n2. The decoded text will be a math expression like \"Calculate: X + Y\"\n3. Compute the result\n4. Encode your answer as: ${responseEncoding}\n5. Submit the encoded result`;\n break;\n\n case 'pattern_extraction':\n instructions = `TASK: Query the data and compute the result.\n\nDATA:\n${JSON.stringify(payload.data, null, 2)}\n\nQUERY: ${payload.query}\n\nSTEPS:\n1. Parse the query (e.g., \"sum(items[*].value)\" means sum all 'value' fields in 'items' array)\n2. Execute the query on the data\n3. Encode the result as: ${responseEncoding}\n4. Submit the encoded result`;\n break;\n\n case 'code_transform':\n instructions = `TASK: Execute the code and return the result.\n\nCODE:\n${payload.code}\n\nTRANSFORM: ${payload.transform}\n\nSTEPS:\n1. Execute the JavaScript code (it uses 'return' to return a value)\n2. Apply transform: ${payload.transform === 'execute' ? 'just use the result' : payload.transform}\n3. Encode the result as: ${responseEncoding}\n4. Submit the encoded result`;\n break;\n\n default:\n instructions = `TASK: Solve the challenge of type \"${challenge.type}\" using the payload data.`;\n }\n\n // Add encoding help\n instructions += `\n\nENCODING REFERENCE:\n- plain: Return the value as a string (e.g., 42 → \"42\")\n- base64: Base64 encode (e.g., 42 → \"NDI=\")\n- hex: Hex encode each character (e.g., 42 → \"3432\")\n- rot13: Shift each letter by 13 (e.g., \"abc\" → \"nop\")`;\n\n return instructions;\n}\n\n/**\n * Create Express middleware for CaptchaLM protection\n */\nexport function createExpressMiddleware(config: MiddlewareConfig): {\n protect: RequestHandler;\n challenge: RequestHandler;\n generator: ChallengeGenerator;\n verifier: ChallengeVerifier;\n} {\n const fullConfig = { ...DEFAULT_MIDDLEWARE_CONFIG, ...config } as Required<MiddlewareConfig>;\n\n const generator = new ChallengeGenerator(fullConfig);\n const verifier = new ChallengeVerifier(fullConfig);\n\n /**\n * Get client identifier from request\n */\n function getClientIdentifier(req: Request): string {\n // Try various headers for client identification\n const forwarded = req.headers['x-forwarded-for'];\n if (forwarded) {\n const ip = Array.isArray(forwarded) ? forwarded[0] : forwarded.split(',')[0];\n return ip.trim();\n }\n\n return req.ip || req.socket.remoteAddress || 'unknown';\n }\n\n /**\n * Challenge endpoint handler\n * Returns a new challenge for clients to solve\n */\n const challenge: RequestHandler = (_req: Request, res: Response): void => {\n try {\n const { challenge, expectedAnswer } = generator.generate();\n\n // Store the expected answer for verification\n verifier.storeChallenge(challenge.id, expectedAnswer, challenge.expiresAt);\n\n res.json({\n success: true,\n challenge: {\n id: challenge.id,\n type: challenge.type,\n difficulty: challenge.difficulty,\n payload: challenge.payload,\n expiresAt: challenge.expiresAt,\n signature: challenge.signature,\n },\n });\n } catch (error) {\n res.status(500).json({\n success: false,\n error: 'Failed to generate challenge',\n });\n }\n };\n\n /**\n * Protection middleware\n * Verifies that the request contains a valid challenge solution\n */\n const protect: RequestHandler = (\n req: CaptchaLMRequest,\n res: Response,\n next: NextFunction\n ): void => {\n const clientIdentifier = getClientIdentifier(req);\n\n // Initialize CaptchaLM context\n req.CaptchaLM = {\n verified: false,\n clientIdentifier,\n };\n\n // Get challenge ID and solution from headers\n const challengeId = req.headers[fullConfig.challengeIdHeader] as string | undefined;\n const solution = req.headers[fullConfig.solutionHeader] as string | undefined;\n\n if (!challengeId || !solution) {\n // Generate a challenge inline and return with solving instructions\n const { challenge, expectedAnswer } = generator.generate();\n verifier.storeChallenge(challenge.id, expectedAnswer, challenge.expiresAt);\n\n res.status(401).json({\n success: false,\n error: 'AI verification required',\n captchalm: {\n challenge: challenge,\n instructions: buildSolvingInstructions(challenge),\n howToSubmit: {\n headers: {\n [fullConfig.challengeIdHeader]: challenge.id,\n [fullConfig.solutionHeader]: '<your_computed_answer>'\n },\n body: {\n _CaptchaLMChallenge: challenge\n },\n note: 'Retry your original request with these headers and body field added'\n }\n }\n });\n return;\n }\n\n // Try to get challenge data from body or reconstruct\n let challengeData: Challenge | undefined;\n\n // Check if challenge data is in the request body\n if (req.body && req.body._CaptchaLMChallenge) {\n challengeData = req.body._CaptchaLMChallenge;\n } else {\n // For stateless verification, we need the challenge to be sent\n res.status(401).json({\n success: false,\n error: 'Challenge data required. Include _CaptchaLMChallenge in body or use stateless mode.',\n });\n return;\n }\n\n const challengeSolution: ChallengeSolution = {\n challengeId,\n solution,\n };\n\n // Verify the solution\n const result = verifier.verify(challengeData!, challengeSolution, clientIdentifier);\n\n if (!result.valid) {\n const statusCode = result.errorCode === 'RATE_LIMITED' ? 429 : 401;\n\n res.status(statusCode).json({\n success: false,\n error: result.error,\n errorCode: result.errorCode,\n });\n return;\n }\n\n // Mark as verified\n req.CaptchaLM.verified = true;\n req.CaptchaLM.challenge = challengeData;\n\n next();\n };\n\n return {\n protect,\n challenge,\n generator,\n verifier,\n };\n}\n\n/**\n * Create a simple verification endpoint\n */\nexport function createVerificationEndpoint(config: MiddlewareConfig): RequestHandler {\n const fullConfig = { ...DEFAULT_MIDDLEWARE_CONFIG, ...config } as Required<MiddlewareConfig>;\n const verifier = new ChallengeVerifier(fullConfig);\n\n return (req: Request, res: Response): void => {\n const clientIdentifier = req.ip || 'unknown';\n\n const { challenge, solution } = req.body;\n\n if (!challenge || !solution) {\n res.status(400).json({\n success: false,\n error: 'Missing challenge or solution in request body',\n });\n return;\n }\n\n const challengeSolution: ChallengeSolution = {\n challengeId: challenge.id,\n solution,\n };\n\n const result = verifier.verifyStateless(challenge, challengeSolution, clientIdentifier);\n\n res.json({\n success: result.valid,\n error: result.error,\n errorCode: result.errorCode,\n });\n };\n}\n"]}