{"version":3,"sources":["../src/config.ts","../src/utils/index.ts","../src/crypto/index.ts","../src/fingerprint/data.ts","../src/fingerprint/helpers.ts","../src/fingerprint/generator.ts","../src/xs-common.ts","../src/client.ts","../src/utils/cookie.ts"],"names":["randomBytes","createHash","RC4","Latin1"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\r\n * 配置常量\r\n * 移植自 xhshow-go/xhshow/config.go\r\n */\r\n\r\nexport const MAX_32BIT = 0xffffffff;\r\nexport const MAX_SIGNED_32BIT = 0x7fffffff;\r\nexport const MAX_BYTE = 255;\r\n\r\n// Base64 字母表\r\nexport const STANDARD_BASE64_ALPHABET =\r\n  'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\r\nexport const CUSTOM_BASE64_ALPHABET =\r\n  'ZmserbBoHQtNP+wOcza/LpngG8yJq42KWYj0DSfdikx3VT16IlUAFM97hECvuRX5';\r\nexport const X3_BASE64_ALPHABET =\r\n  'MfgqrsbcyzPQRStuvC7mn501HIJBo2DEFTKdeNOwxWXYZap89+/A4UVLhijkl63G';\r\n\r\n// HEX Key 用于 XOR 变换\r\nexport const HEX_KEY =\r\n  '71a302257793271ddd273bcee3e4b98d9d7935e1da33f5765e2ea8afb6dc77a51a499d23b67c20660025860cbf13d4540d92497f58686c574e508f46e1956344f39139bf4faf22a3eef120b79258145b2feb5193b6478669961298e79bedca646e1a693a926154a5a7a1bd1cf0dedb742f917a747a1e388b234f2277';\r\n\r\n// 序列值范围\r\nexport const SEQUENCE_VALUE_MIN = 15;\r\nexport const SEQUENCE_VALUE_MAX = 50;\r\n\r\n// 窗口属性长度范围\r\nexport const WINDOW_PROPS_LENGTH_MIN = 900;\r\nexport const WINDOW_PROPS_LENGTH_MAX = 1200;\r\n\r\n// 校验和配置\r\nexport const CHECKSUM_VERSION = 1;\r\nexport const CHECKSUM_XOR_KEY = 115;\r\n\r\n// 环境指纹配置\r\nexport const ENV_FINGERPRINT_XOR_KEY = 41;\r\nexport const ENV_FINGERPRINT_TIME_OFFSET_MIN = 10;\r\nexport const ENV_FINGERPRINT_TIME_OFFSET_MAX = 50;\r\n\r\n// 前缀\r\nexport const X3_PREFIX = 'mns0301_';\r\nexport const XYS_PREFIX = 'XYS_';\r\n\r\n// Hex 字符集\r\nexport const HEX_CHARS = 'abcdef0123456789';\r\n\r\n// Xray TraceId 配置\r\nexport const XRAY_TRACEID_SEQ_MAX = 8388607;\r\nexport const XRAY_TRACEID_TIMESTAMP_SHIFT = 23;\r\nexport const XRAY_TRACEID_PART1_LENGTH = 16;\r\nexport const XRAY_TRACEID_PART2_LENGTH = 16;\r\nexport const B3_TRACEID_LENGTH = 16;\r\n\r\n// 版本字节\r\nexport const VERSION_BYTES = [119, 104, 96, 41];\r\n\r\n// 校验和固定尾部\r\nexport const CHECKSUM_FIXED_TAIL = [249, 65, 103, 103, 201, 181, 131, 99, 94, 7, 68, 250, 132, 21];\r\n\r\n// 默认签名数据结构\r\nexport function newSignatureData(): {\r\n  x0: string;\r\n  x1: string;\r\n  x2: string;\r\n  x3: string;\r\n  x4: string;\r\n} {\r\n  return {\r\n    x0: '4.2.6',\r\n    x1: 'xhs-pc-web',\r\n    x2: 'Windows',\r\n    x3: '',\r\n    x4: '',\r\n  };\r\n}\r\n\r\n// B1 密钥\r\nexport const B1_SECRET_KEY = 'xhswebmplfbt';\r\n\r\n// 公共 User-Agent\r\nexport const PUBLIC_USER_AGENT =\r\n  'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 Edg/142.0.0.0';\r\n","/**\r\n * 工具函数模块\r\n * 移植自 xhshow-go/xhshow/utils.go\r\n */\r\n\r\nimport {\r\n  CUSTOM_BASE64_ALPHABET,\r\n  X3_BASE64_ALPHABET,\r\n  MAX_32BIT,\r\n  HEX_CHARS,\r\n  B3_TRACEID_LENGTH,\r\n  XRAY_TRACEID_SEQ_MAX,\r\n  XRAY_TRACEID_TIMESTAMP_SHIFT,\r\n} from '../config.js';\r\n\r\n/**\r\n * 自定义 Base64 编码\r\n */\r\nexport function encodeCustomBase64(data: Uint8Array): string {\r\n  return encodeBase64WithAlphabet(data, CUSTOM_BASE64_ALPHABET);\r\n}\r\n\r\n/**\r\n * 自定义 Base64 解码\r\n */\r\nexport function decodeCustomBase64(data: string): Uint8Array {\r\n  return decodeBase64WithAlphabet(data, CUSTOM_BASE64_ALPHABET);\r\n}\r\n\r\n/**\r\n * X3 Base64 编码\r\n */\r\nexport function encodeX3Base64(data: Uint8Array): string {\r\n  return encodeBase64WithAlphabet(data, X3_BASE64_ALPHABET);\r\n}\r\n\r\n/**\r\n * X3 Base64 解码\r\n */\r\nexport function decodeX3Base64(data: string): Uint8Array {\r\n  return decodeBase64WithAlphabet(data, X3_BASE64_ALPHABET);\r\n}\r\n\r\n/**\r\n * 使用自定义字母表进行 Base64 编码\r\n */\r\nfunction encodeBase64WithAlphabet(data: Uint8Array, alphabet: string): string {\r\n  const standardAlphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\r\n\r\n  // 先使用标准 Base64 编码\r\n  let binary = '';\r\n  for (let i = 0; i < data.length; i++) {\r\n    binary += String.fromCharCode(data[i]);\r\n  }\r\n  let base64 = btoa(binary);\r\n\r\n  // 字符替换\r\n  let result = '';\r\n  for (let i = 0; i < base64.length; i++) {\r\n    const char = base64[i];\r\n    const idx = standardAlphabet.indexOf(char);\r\n    if (idx !== -1) {\r\n      result += alphabet[idx];\r\n    } else {\r\n      result += char; // 保留 '=' 填充字符\r\n    }\r\n  }\r\n  return result;\r\n}\r\n\r\n/**\r\n * 使用自定义字母表进行 Base64 解码\r\n */\r\nfunction decodeBase64WithAlphabet(data: string, alphabet: string): Uint8Array {\r\n  const standardAlphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\r\n\r\n  // 字符还原\r\n  let standardBase64 = '';\r\n  for (let i = 0; i < data.length; i++) {\r\n    const char = data[i];\r\n    const idx = alphabet.indexOf(char);\r\n    if (idx !== -1) {\r\n      standardBase64 += standardAlphabet[idx];\r\n    } else {\r\n      standardBase64 += char; // 保留 '=' 填充字符\r\n    }\r\n  }\r\n\r\n  // 使用标准 Base64 解码\r\n  const binary = atob(standardBase64);\r\n  const bytes = new Uint8Array(binary.length);\r\n  for (let i = 0; i < binary.length; i++) {\r\n    bytes[i] = binary.charCodeAt(i);\r\n  }\r\n  return bytes;\r\n}\r\n\r\n/**\r\n * 生成随机整数（0 到 MAX_32BIT）\r\n */\r\nexport function generateRandomInt(): number {\r\n  return Math.floor(Math.random() * (MAX_32BIT + 1));\r\n}\r\n\r\n/**\r\n * 在范围内生成随机整数\r\n */\r\nexport function generateRandomByteInRange(minVal: number, maxVal: number): number {\r\n  return Math.floor(Math.random() * (maxVal - minVal + 1)) + minVal;\r\n}\r\n\r\n/**\r\n * 生成 B3 TraceId\r\n */\r\nexport function generateB3TraceId(): string {\r\n  let result = '';\r\n  for (let i = 0; i < B3_TRACEID_LENGTH; i++) {\r\n    result += HEX_CHARS[Math.floor(Math.random() * HEX_CHARS.length)];\r\n  }\r\n  return result;\r\n}\r\n\r\n/**\r\n * 生成 Xray TraceId\r\n */\r\nexport function generateXrayTraceId(timestamp?: number, seq?: number): string {\r\n  const ts = timestamp || Date.now();\r\n  const s =\r\n    seq !== undefined && seq !== -1 ? seq : Math.floor(Math.random() * (XRAY_TRACEID_SEQ_MAX + 1));\r\n\r\n  // 计算 part1\r\n  const part1Val = (BigInt(ts) << BigInt(XRAY_TRACEID_TIMESTAMP_SHIFT)) | BigInt(s);\r\n  const part1 = part1Val.toString(16).padStart(16, '0');\r\n\r\n  // 生成 part2\r\n  let part2 = '';\r\n  for (let i = 0; i < 16; i++) {\r\n    part2 += HEX_CHARS[Math.floor(Math.random() * HEX_CHARS.length)];\r\n  }\r\n\r\n  return part1 + part2;\r\n}\r\n\r\n/**\r\n * 整数转小端字节数组\r\n */\r\nexport function intToLeBytes(val: number, length: number): number[] {\r\n  const arr: number[] = [];\r\n  for (let i = 0; i < length; i++) {\r\n    arr.push(val & 0xff);\r\n    val >>= 8;\r\n  }\r\n  return arr;\r\n}\r\n\r\n/**\r\n * 小端字节数组转整数\r\n */\r\nexport function leBytesToInt(bytes: number[]): number {\r\n  let result = 0;\r\n  for (let i = bytes.length - 1; i >= 0; i--) {\r\n    result = (result << 8) | (bytes[i] & 0xff);\r\n  }\r\n  return result;\r\n}\r\n\r\n/**\r\n * 从 Buffer/Uint8Array 读取小端 uint32\r\n */\r\nexport function readUInt32LE(buffer: Uint8Array, offset: number): number {\r\n  return (\r\n    (buffer[offset] |\r\n      (buffer[offset + 1] << 8) |\r\n      (buffer[offset + 2] << 16) |\r\n      (buffer[offset + 3] << 24)) >>>\r\n    0\r\n  );\r\n}\r\n\r\n/**\r\n * 从 Buffer/Uint8Array 读取小端 uint64（返回 BigInt）\r\n */\r\nexport function readUInt64LE(buffer: Uint8Array, offset: number): bigint {\r\n  const low =\r\n    buffer[offset] |\r\n    (buffer[offset + 1] << 8) |\r\n    (buffer[offset + 2] << 16) |\r\n    (buffer[offset + 3] << 24);\r\n  const high =\r\n    buffer[offset + 4] |\r\n    (buffer[offset + 5] << 8) |\r\n    (buffer[offset + 6] << 16) |\r\n    (buffer[offset + 7] << 24);\r\n  return (BigInt(high) << 32n) | BigInt(low >>> 0);\r\n}\r\n","/**\r\n * 加密模块\r\n * 移植自 xhshow-go/xhshow/crypto.go\r\n */\r\nimport {\r\n  HEX_KEY,\r\n  VERSION_BYTES,\r\n  ENV_FINGERPRINT_XOR_KEY,\r\n  ENV_FINGERPRINT_TIME_OFFSET_MIN,\r\n  ENV_FINGERPRINT_TIME_OFFSET_MAX,\r\n  SEQUENCE_VALUE_MIN,\r\n  SEQUENCE_VALUE_MAX,\r\n  WINDOW_PROPS_LENGTH_MIN,\r\n  WINDOW_PROPS_LENGTH_MAX,\r\n  CHECKSUM_VERSION,\r\n  CHECKSUM_XOR_KEY,\r\n  CHECKSUM_FIXED_TAIL,\r\n} from '../config.js';\r\nimport { generateRandomInt, generateRandomByteInRange, intToLeBytes } from '../utils/index.js';\r\n\r\n/**\r\n * XOR 变换数组\r\n */\r\nexport function xorTransformArray(sourceIntegers: number[]): Uint8Array {\r\n  const resultBytes = new Uint8Array(sourceIntegers.length);\r\n  const keyBytes = Buffer.from(HEX_KEY, 'hex');\r\n  const keyLength = keyBytes.length;\r\n\r\n  for (let index = 0; index < sourceIntegers.length; index++) {\r\n    if (index < keyLength) {\r\n      resultBytes[index] = (sourceIntegers[index] ^ keyBytes[index]) & 0xff;\r\n    } else {\r\n      resultBytes[index] = sourceIntegers[index] & 0xff;\r\n    }\r\n  }\r\n\r\n  return resultBytes;\r\n}\r\n\r\n/**\r\n * 环境指纹 A (带校验和)\r\n */\r\nexport function envFingerprintA(ts: number, xorKey: number): number[] {\r\n  const buf = Buffer.allocUnsafe(8);\r\n  buf.writeBigUInt64LE(BigInt(ts));\r\n\r\n  let sum1 = 0;\r\n  for (let i = 1; i < 5; i++) {\r\n    sum1 += buf[i];\r\n  }\r\n\r\n  let sum2 = 0;\r\n  for (let i = 5; i < 8; i++) {\r\n    sum2 += buf[i];\r\n  }\r\n\r\n  const mark = ((sum1 & 0xff) + sum2) & 0xff;\r\n  buf[0] = mark;\r\n\r\n  const res: number[] = [];\r\n  for (let i = 0; i < 8; i++) {\r\n    res.push(buf[i] ^ xorKey);\r\n  }\r\n\r\n  return res;\r\n}\r\n\r\n/**\r\n * 环境指纹 B (无加密)\r\n */\r\nexport function envFingerprintB(ts: number): number[] {\r\n  const buf = Buffer.allocUnsafe(8);\r\n  buf.writeBigUInt64LE(BigInt(ts));\r\n\r\n  const res: number[] = [];\r\n  for (let i = 0; i < 8; i++) {\r\n    res.push(buf[i]);\r\n  }\r\n\r\n  return res;\r\n}\r\n\r\n/**\r\n * 构建 Payload 数组\r\n */\r\nexport function buildPayloadArray(\r\n  hexParameter: string,\r\n  a1Value: string,\r\n  appIdentifier: string,\r\n  stringParam: string,\r\n  timestamp: number\r\n): number[] {\r\n  const payload: number[] = [];\r\n\r\n  // 1. 版本字节\r\n  payload.push(...VERSION_BYTES);\r\n\r\n  // 2. 随机种子\r\n  const seed = generateRandomInt();\r\n  const seedBytes = intToLeBytes(seed, 4);\r\n  payload.push(...seedBytes);\r\n  const seedByte0 = seedBytes[0];\r\n\r\n  // 3. 时间戳处理\r\n  const ts = timestamp || Date.now();\r\n  const tsMillis = Math.floor(ts);\r\n\r\n  // 环境指纹 A\r\n  const fpA = envFingerprintA(tsMillis, ENV_FINGERPRINT_XOR_KEY);\r\n  payload.push(...fpA);\r\n\r\n  // 4. 环境指纹 B (时间偏移)\r\n  const timeOffset = generateRandomByteInRange(\r\n    ENV_FINGERPRINT_TIME_OFFSET_MIN,\r\n    ENV_FINGERPRINT_TIME_OFFSET_MAX\r\n  );\r\n  const tsOffsetMillis = Math.floor(ts - timeOffset);\r\n  const fpB = envFingerprintB(tsOffsetMillis);\r\n  payload.push(...fpB);\r\n\r\n  // 5. 序列值\r\n  const seqVal = generateRandomByteInRange(SEQUENCE_VALUE_MIN, SEQUENCE_VALUE_MAX);\r\n  const seqBytes = intToLeBytes(seqVal, 4);\r\n  payload.push(...seqBytes);\r\n\r\n  // 6. 窗口属性长度\r\n  const winLen = generateRandomByteInRange(WINDOW_PROPS_LENGTH_MIN, WINDOW_PROPS_LENGTH_MAX);\r\n  const winBytes = intToLeBytes(winLen, 4);\r\n  payload.push(...winBytes);\r\n\r\n  // 7. URI 长度\r\n  const uriLen = stringParam.length;\r\n  const uriLenBytes = intToLeBytes(uriLen, 4);\r\n  payload.push(...uriLenBytes);\r\n\r\n  // 8. MD5 XOR 段\r\n  const md5Bytes = Buffer.from(hexParameter, 'hex');\r\n  for (let i = 0; i < 8; i++) {\r\n    payload.push(md5Bytes[i] ^ seedByte0);\r\n  }\r\n\r\n  // 9. A1 长度\r\n  payload.push(52);\r\n\r\n  // 10. A1 内容\r\n  const a1Bytes = Buffer.from(a1Value, 'utf8');\r\n  const a1Padded = Buffer.alloc(52);\r\n  a1Bytes.copy(a1Padded, 0, 0, Math.min(a1Bytes.length, 52));\r\n  for (let i = 0; i < 52; i++) {\r\n    payload.push(a1Padded[i]);\r\n  }\r\n\r\n  // 11. 来源长度\r\n  payload.push(10);\r\n\r\n  // 12. 来源内容\r\n  const srcBytes = Buffer.from(appIdentifier, 'utf8');\r\n  const srcPadded = Buffer.alloc(10);\r\n  srcBytes.copy(srcPadded, 0, 0, Math.min(srcBytes.length, 10));\r\n  for (let i = 0; i < 10; i++) {\r\n    payload.push(srcPadded[i]);\r\n  }\r\n\r\n  // 13. 固定值 1\r\n  payload.push(1);\r\n\r\n  // 14. 校验和版本\r\n  payload.push(CHECKSUM_VERSION);\r\n\r\n  // 15. 校验和 XOR\r\n  payload.push(seedByte0 ^ CHECKSUM_XOR_KEY);\r\n\r\n  // 16. 校验和固定尾部\r\n  payload.push(...CHECKSUM_FIXED_TAIL);\r\n\r\n  return payload;\r\n}\r\n\r\n/**\r\n * CRC32 自定义实现（用于 x-s-common）\r\n */\r\nexport function crc32JsInt(data: Buffer): number {\r\n  // 标准 CRC32 IEEE\r\n  let crc = 0xffffffff;\r\n  for (let i = 0; i < data.length; i++) {\r\n    crc ^= data[i];\r\n    for (let j = 0; j < 8; j++) {\r\n      crc = (crc >>> 1) ^ (0xedb88320 & -(crc & 1));\r\n    }\r\n  }\r\n  const c = (crc ^ 0xffffffff) >>> 0;\r\n\r\n  // 自定义公式: ((0xFFFFFFFF ^ c) ^ 0xEDB88320)\r\n  const poly = 0xedb88320;\r\n  const u = (0xffffffff ^ c ^ poly) >>> 0;\r\n\r\n  // 转为有符号 int32\r\n  return u | 0;\r\n}\r\n","/**\r\n * 指纹数据配置\r\n * 移植自 xhshow-go/xhshow/fp_data.go\r\n */\r\n\r\n// GPU 供应商列表\r\nexport const GPU_VENDORS = [\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 400 (0x00000166) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 4400 (0x00001112) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 4600 (0x00000412) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 520 (0x1912) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 530 (0x00001912) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 550 (0x00001512) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 6000 (0x1606) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(TM) Graphics 540 (0x1912) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(TM) Graphics 550 (0x1913) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(TM) Plus Graphics 640 (0x161C) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 600 (0x3E80) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 620 (0x00003EA0) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 630 (0x00003E9B) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 655 (0x00009BC8) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(R) Xe Graphics (0x000046A8) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(R) Xe Graphics (0x00009A49) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(R) Xe MAX Graphics (0x00009BC0) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel Arc A370M (0x0000AF51) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel Arc A380 (0x0000AF41) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel Arc A380M (0x0000AF5E) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel Arc A550 (0x0000AF42) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel Arc A770 (0x0000AF43) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel Arc A770M (0x0000AF50) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) Graphics (RPL‑P GT1) (0x0000A702) OpenGL 4.6)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) UHD Graphics 770 (0x00004680) OpenGL 4.6)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) HD Graphics 4400 (0x00001122) OpenGL 4.6)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) Graphics (ADL‑S GT1) (0x0000A0A1) OpenGL 4.6)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) Graphics (RKL GT1) (0x0000A9A1) OpenGL 4.6)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) UHD Graphics (CML GT2) (0x00009A14) OpenGL 4.6)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 3000 (0x00001022) Direct3D9Ex vs_3_0 ps_3_0, igdumd64.dll)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics Family (0x00000A16) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris Pro OpenGL Engine, OpenGL 4.1)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(TM) Plus Graphics 645 (0x1616) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(TM) Plus Graphics 655 (0x161E) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 730 (0x0000A100) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 805 (0x0000B0A0) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Vega 3 Graphics (0x000015E0) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Vega 8 Graphics (0x000015D8) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Vega 11 Graphics (0x000015DD) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Graphics (0x00001636) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 5500 XT Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 560 (0x000067EF) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 570 (0x000067DF) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 580 2048SP (0x00006FDF) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 590 (0x000067FF) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6600 (0x000073FF) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6600 XT (0x000073FF) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6650 XT Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6700 XT (0x000073DF) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6800 (0x000073BF) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6900 XT (0x000073C2) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 7700 XT Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Pro 5300M OpenGL Engine, OpenGL 4.1)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Pro 5500 XT OpenGL Engine, OpenGL 4.1)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, AMD Radeon R7 370 Series (0x00006811) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (AMD)|ANGLE (AMD, ATI Technologies Inc. AMD Radeon RX Vega 64 OpenGL Engine, OpenGL 4.1)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce GTX 1050 (0x00001C81) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce GTX 1050 Ti (0x00001C8C) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce GTX 1060 6GB (0x000010DE) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce GTX 1070 (0x00001B81) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce GTX 1080 (0x00001B80) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 2060 (0x00001F06) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 2060 SUPER (0x00001F06) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 2070 (0x00001F10) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 2070 SUPER (0x00001F10) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 (0x0000250F) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 Ti (0x00002489) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3070 (0x00002488) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3070 Ti (0x000028A5) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3080 (0x00002206) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3080 Ti (0x00002208) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3090 (0x00002204) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4060 (0x00002882) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4060 Ti (0x00002803) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4070 (0x00002786) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4070 Ti (0x00002857) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4080 (0x00002819) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4090 (0x00002684) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA Quadro RTX 5000 Ada Generation (0x000026B2) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA Quadro P400 (0x00001CB3) Direct3D11 vs_5_0 ps_5_0, D3D11)',\r\n  'Google Inc. (Google)|ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)',\r\n  'Google Inc. (Google)|ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero)), SwiftShader driver)',\r\n  'Google Inc. (Google)|ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device), SwiftShader driver)',\r\n];\r\n\r\n// 屏幕分辨率配置（带权重）\r\nexport const SCREEN_RESOLUTIONS = {\r\n  resolutions: ['1366;768', '1600;900', '1920;1080', '2560;1440', '3840;2160', '7680;4320'],\r\n  weights: [0.25, 0.15, 0.35, 0.15, 0.08, 0.02],\r\n};\r\n\r\n// 颜色深度选项（带权重）\r\nexport const COLOR_DEPTH_OPTIONS = {\r\n  values: [16, 24, 30, 32],\r\n  weights: [0.05, 0.6, 0.05, 0.3],\r\n};\r\n\r\n// 设备内存选项（带权重）\r\nexport const DEVICE_MEMORY_OPTIONS = {\r\n  values: [1, 2, 4, 8, 12, 16],\r\n  weights: [0.1, 0.25, 0.4, 0.2, 0.03, 0.01],\r\n};\r\n\r\n// CPU 核心数选项（带权重）\r\nexport const CORE_OPTIONS = {\r\n  values: [2, 4, 6, 8, 12, 16, 24, 32],\r\n  weights: [0.1, 0.4, 0.2, 0.15, 0.08, 0.04, 0.02, 0.01],\r\n};\r\n\r\n// 浏览器插件\r\nexport const BROWSER_PLUGINS =\r\n  'PDF Viewer,Chrome PDF Viewer,Chromium PDF Viewer,Microsoft Edge PDF Viewer,WebKit built-in PDF';\r\n\r\n// Canvas 哈希\r\nexport const CANVAS_HASH = '742cc32c';\r\n\r\n// Voice 哈希选项\r\nexport const VOICE_HASH_OPTIONS = '10311144241322244122';\r\n\r\n// 字体列表\r\nexport const FONTS =\r\n  'system-ui, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\", -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif, BlinkMacSystemFont, \"Helvetica Neue\", Arial, \"PingFang SC\", \"PingFang TC\", \"PingFang HK\", \"Microsoft Yahei\", \"Microsoft JhengHei\"';\r\n","/**\r\n * 指纹辅助函数\r\n * 移植自 xhshow-go/xhshow/fp_helpers.go\r\n */\r\n\r\nimport { createHash, randomBytes } from 'crypto';\r\nimport { GPU_VENDORS, SCREEN_RESOLUTIONS, CANVAS_HASH } from './data.js';\r\nimport type { ScreenConfig } from '../types/index.js';\r\n\r\n/**\r\n * 加权随机选择\r\n */\r\nexport function weightedRandomChoice<T extends string | number>(\r\n  options: T[],\r\n  weights: number[]\r\n): T {\r\n  const totalWeight = weights.reduce((sum, w) => sum + w, 0);\r\n  let r = Math.random() * totalWeight;\r\n\r\n  let idx = -1;\r\n  let currentWeight = 0;\r\n  for (let i = 0; i < weights.length; i++) {\r\n    currentWeight += weights[i];\r\n    if (r <= currentWeight) {\r\n      idx = i;\r\n      break;\r\n    }\r\n  }\r\n\r\n  // 如果因为舍入误差未设置 idx，则回退到最后一项\r\n  if (idx === -1) {\r\n    idx = weights.length - 1;\r\n  }\r\n\r\n  return options[idx];\r\n}\r\n\r\n/**\r\n * 获取渲染器信息\r\n */\r\nexport function getRendererInfo(): { vendor: string; renderer: string } {\r\n  const rendererStr = GPU_VENDORS[Math.floor(Math.random() * GPU_VENDORS.length)];\r\n  const parts = rendererStr.split('|');\r\n  return {\r\n    vendor: parts[0],\r\n    renderer: parts.length >= 2 ? parts[1] : '',\r\n  };\r\n}\r\n\r\n/**\r\n * 获取屏幕配置\r\n */\r\nexport function getScreenConfig(): ScreenConfig {\r\n  const resStr = weightedRandomChoice(SCREEN_RESOLUTIONS.resolutions, SCREEN_RESOLUTIONS.weights);\r\n  const parts = resStr.split(';');\r\n  const width = parseInt(parts[0], 10);\r\n  const height = parseInt(parts[1], 10);\r\n\r\n  let availWidth: number;\r\n  let availHeight: number;\r\n\r\n  // 随机选择 True/False\r\n  if (Math.random() < 0.5) {\r\n    // True 分支 - 减少宽度\r\n    const deduction = weightedRandomChoice([0, 30, 60, 80], [0.1, 0.4, 0.3, 0.2]);\r\n    availWidth = width - deduction;\r\n    availHeight = height;\r\n  } else {\r\n    // False 分支 - 减少高度\r\n    const deduction = weightedRandomChoice([30, 60, 80, 100], [0.2, 0.5, 0.2, 0.1]);\r\n    availWidth = width;\r\n    availHeight = height - deduction;\r\n  }\r\n\r\n  return {\r\n    width,\r\n    height,\r\n    availWidth,\r\n    availHeight,\r\n  };\r\n}\r\n\r\n/**\r\n * 生成 Canvas 哈希\r\n */\r\nexport function generateCanvasHash(): string {\r\n  return CANVAS_HASH;\r\n}\r\n\r\n/**\r\n * 生成 WebGL 哈希\r\n */\r\nexport function generateWebglHash(): string {\r\n  const bytes = randomBytes(32);\r\n  const hash = createHash('md5').update(bytes).digest('hex');\r\n  return hash;\r\n}\r\n","/**\r\n * 指纹生成器\r\n * 移植自 xhshow-go/xhshow/fingerprint.go\r\n */\r\n\r\nimport { createHash, randomBytes } from 'crypto';\r\nimport RC4 from 'crypto-js/rc4.js';\r\nimport Latin1 from 'crypto-js/enc-latin1.js';\r\nimport { encodeCustomBase64 } from '../utils/index.js';\r\nimport { B1_SECRET_KEY } from '../config.js';\r\nimport {\r\n  COLOR_DEPTH_OPTIONS,\r\n  DEVICE_MEMORY_OPTIONS,\r\n  CORE_OPTIONS,\r\n  BROWSER_PLUGINS,\r\n  VOICE_HASH_OPTIONS,\r\n  FONTS,\r\n} from './data.js';\r\nimport {\r\n  weightedRandomChoice,\r\n  getRendererInfo,\r\n  getScreenConfig,\r\n  generateCanvasHash,\r\n  generateWebglHash,\r\n} from './helpers.js';\r\nimport type { FingerprintData, CookieDict } from '../types/index.js';\r\n\r\nexport class FingerprintGenerator {\r\n  constructor() {\r\n    // B1 密钥在 generateB1 方法中使用\r\n  }\r\n\r\n  /**\r\n   * 自定义 URL 编码 (实现 urllib.parse.quote(s, safe=\"!*'()~_-\"))\r\n   */\r\n  private customQuote(s: string): string {\r\n    const safeChars = \"!*'()~_-\";\r\n    let buf = '';\r\n    for (let i = 0; i < s.length; i++) {\r\n      const b = s.charCodeAt(i);\r\n      const char = s[i];\r\n      if (\r\n        (b >= 97 && b <= 122) || // a-z\r\n        (b >= 65 && b <= 90) || // A-Z\r\n        (b >= 48 && b <= 57) || // 0-9\r\n        char === '.'\r\n      ) {\r\n        buf += char;\r\n      } else if (safeChars.includes(char)) {\r\n        buf += char;\r\n      } else {\r\n        buf += '%' + b.toString(16).toUpperCase().padStart(2, '0');\r\n      }\r\n    }\r\n    return buf;\r\n  }\r\n\r\n  /**\r\n   * 生成 B1 签名\r\n   */\r\n  generateB1(fp: FingerprintData): string {\r\n    // 提取 B1 所需的特定字段\r\n    const keys = [\r\n      'x33',\r\n      'x34',\r\n      'x35',\r\n      'x36',\r\n      'x37',\r\n      'x38',\r\n      'x39',\r\n      'x42',\r\n      'x43',\r\n      'x44',\r\n      'x45',\r\n      'x46',\r\n      'x48',\r\n      'x49',\r\n      'x50',\r\n      'x51',\r\n      'x52',\r\n      'x82',\r\n    ];\r\n    const b1Fp: Record<string, any> = {};\r\n    for (const k of keys) {\r\n      if (k in fp) {\r\n        b1Fp[k] = fp[k];\r\n      }\r\n    }\r\n\r\n    // JSON 序列化（不转义HTML字符）\r\n    const jsonStr = JSON.stringify(b1Fp);\r\n\r\n    // RC4 加密 (使用 crypto-js)\r\n    const encrypted = RC4.encrypt(jsonStr, B1_SECRET_KEY);\r\n    const ciphertext = encrypted.ciphertext;\r\n\r\n    // 转换为字节数组（Latin-1 编码）\r\n    const ciphertextStr = Latin1.stringify(ciphertext);\r\n\r\n    // Quote (将字节视为 latin1 字符)\r\n    const encodedUrl = this.customQuote(ciphertextStr);\r\n\r\n    // 重建循环 (Python 逻辑的拆分还原)\r\n    const parts = encodedUrl.split('%');\r\n    const b: number[] = [];\r\n\r\n    // 跳过第一部分（索引 0）\r\n    for (let i = 1; i < parts.length; i++) {\r\n      const part = parts[i];\r\n      if (part.length < 2) {\r\n        continue;\r\n      }\r\n\r\n      // 解析前两个字符为十六进制\r\n      const hexStr = part.substring(0, 2);\r\n      const val = parseInt(hexStr, 16);\r\n      if (!isNaN(val)) {\r\n        b.push(val);\r\n      }\r\n\r\n      // 追加剩余部分作为字节\r\n      for (let j = 2; j < part.length; j++) {\r\n        b.push(part.charCodeAt(j));\r\n      }\r\n    }\r\n\r\n    return encodeCustomBase64(new Uint8Array(b));\r\n  }\r\n\r\n  /**\r\n   * 生成完整指纹\r\n   */\r\n  generate(cookies: CookieDict, userAgent: string): FingerprintData {\r\n    // 构建 Cookie 字符串\r\n    const cookieParts: string[] = [];\r\n    for (const [k, v] of Object.entries(cookies)) {\r\n      cookieParts.push(`${k}=${v}`);\r\n    }\r\n    const cookieString = cookieParts.join('; ');\r\n\r\n    const screen = getScreenConfig();\r\n\r\n    // 加权随机选择是否无痕模式\r\n    const isIncognito = weightedRandomChoice(['true', 'false'], [0.95, 0.05]);\r\n\r\n    const { vendor, renderer } = getRendererInfo();\r\n\r\n    const x78_y = Math.floor(Math.random() * 101) + 2350; // 2350 到 2450\r\n\r\n    // 生成 x53 (32 字节随机数的 MD5)\r\n    const token = randomBytes(32);\r\n    const x53Hash = createHash('md5').update(token).digest('hex');\r\n    const x53 = x53Hash;\r\n\r\n    // x36 随机整数 1-20\r\n    const x36 = (Math.floor(Math.random() * 20) + 1).toString();\r\n\r\n    // x44 时间戳\r\n    const x44 = Date.now().toString();\r\n\r\n    const fp: FingerprintData = {\r\n      x1: userAgent,\r\n      x2: 'false',\r\n      x3: 'zh-CN',\r\n      x4: weightedRandomChoice(COLOR_DEPTH_OPTIONS.values, COLOR_DEPTH_OPTIONS.weights),\r\n      x5: weightedRandomChoice(DEVICE_MEMORY_OPTIONS.values, DEVICE_MEMORY_OPTIONS.weights),\r\n      x6: '24',\r\n      x7: `${vendor},${renderer}`,\r\n      x8: weightedRandomChoice(CORE_OPTIONS.values, CORE_OPTIONS.weights),\r\n      x9: `${screen.width};${screen.height}`,\r\n      x10: `${screen.availWidth};${screen.availHeight}`,\r\n      x11: '-480',\r\n      x12: 'Asia/Shanghai',\r\n      x13: isIncognito,\r\n      x14: isIncognito,\r\n      x15: isIncognito,\r\n      x16: 'false',\r\n      x17: 'false',\r\n      x18: 'un',\r\n      x19: 'Win32',\r\n      x20: '',\r\n      x21: BROWSER_PLUGINS,\r\n      x22: generateWebglHash(),\r\n      x23: 'false',\r\n      x24: 'false',\r\n      x25: 'false',\r\n      x26: 'false',\r\n      x27: 'false',\r\n      x28: '0,false,false',\r\n      x29: '4,7,8',\r\n      x30: 'swf object not loaded',\r\n      x33: '0',\r\n      x34: '0',\r\n      x35: '0',\r\n      x36: x36,\r\n      x37: '0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|1|0|0|0|0|0',\r\n      x38: '0|0|1|0|1|0|0|0|0|0|1|0|1|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0',\r\n      x39: 0,\r\n      x40: '0',\r\n      x41: '0',\r\n      x42: '3.4.4',\r\n      x43: generateCanvasHash(),\r\n      x44: x44,\r\n      x45: '__SEC_CAV__1-1-1-1-1|__SEC_WSA__|',\r\n      x46: 'false',\r\n      x47: '1|0|0|0|0|0',\r\n      x48: '',\r\n      x49: '{list:[],type:}',\r\n      x50: '',\r\n      x51: '',\r\n      x52: '',\r\n      x55: '380,380,360,400,380,400,420,380,400,400,360,360,440,420',\r\n      x56: `${vendor}|${renderer}|${generateWebglHash()}|35`,\r\n      x57: cookieString,\r\n      x58: '180',\r\n      x59: '2',\r\n      x60: '63',\r\n      x61: '1291',\r\n      x62: '2047',\r\n      x63: '0',\r\n      x64: '0',\r\n      x65: '0',\r\n      x66: {\r\n        referer: '',\r\n        location: 'https://www.xiaohongshu.com/explore',\r\n        frame: 0,\r\n      },\r\n      x67: '1|0',\r\n      x68: '0',\r\n      x69: '326|1292|30',\r\n      x70: ['location'],\r\n      x71: 'true',\r\n      x72: 'complete',\r\n      x73: '1191',\r\n      x74: '0|0|0',\r\n      x75: 'Google Inc.',\r\n      x76: 'true',\r\n      x77: '1|1|1|1|1|1|1|1|1|1',\r\n      x78: {\r\n        x: 0,\r\n        y: x78_y,\r\n        left: 0,\r\n        right: 290.828125,\r\n        bottom: x78_y + 18,\r\n        height: 18,\r\n        top: x78_y,\r\n        width: 290.828125,\r\n        font: FONTS,\r\n      },\r\n      x82: '_0x17a2|_0x1954',\r\n      x31: '124.04347527516074',\r\n      x79: '144|599565058866',\r\n      x53: x53,\r\n      x54: VOICE_HASH_OPTIONS,\r\n      x80: '1|[object FileSystemDirectoryHandle]',\r\n    };\r\n\r\n    return fp;\r\n  }\r\n}\r\n","/**\r\n * XS-Common 签名器\r\n * 移植自 xhshow-go/xhshow/xs_common.go\r\n */\r\n\r\nimport { PUBLIC_USER_AGENT } from './config.js';\r\nimport { encodeCustomBase64 } from './utils/index.js';\r\nimport { crc32JsInt } from './crypto/index.js';\r\nimport { FingerprintGenerator } from './fingerprint/generator.js';\r\nimport type { CookieDict } from './types/index.js';\r\n\r\nexport class XsCommonSigner {\r\n  private fpGenerator: FingerprintGenerator;\r\n\r\n  constructor() {\r\n    this.fpGenerator = new FingerprintGenerator();\r\n  }\r\n\r\n  /**\r\n   * 生成 x-s-common 签名\r\n   */\r\n  sign(cookieDict: CookieDict): string {\r\n    // 1. 生成指纹\r\n    const fp = this.fpGenerator.generate(cookieDict, PUBLIC_USER_AGENT);\r\n\r\n    // 2. 生成 b1\r\n    const b1 = this.fpGenerator.generateB1(fp);\r\n\r\n    // 3. 计算 b1 的 CRC32\r\n    const x9 = crc32JsInt(Buffer.from(b1, 'utf8'));\r\n\r\n    // 4. 构建签名 Map\r\n    if (!cookieDict.a1) {\r\n      throw new Error(\"missing 'a1' in cookieDict\");\r\n    }\r\n    const a1Str = String(cookieDict.a1);\r\n\r\n    const sig = {\r\n      s0: 5,\r\n      s1: '',\r\n      x0: '1',\r\n      x1: '4.2.6',\r\n      x2: 'Windows',\r\n      x3: 'xhs-pc-web',\r\n      x4: '4.86.0',\r\n      x5: a1Str,\r\n      x6: '',\r\n      x7: '',\r\n      x8: b1,\r\n      x9: x9,\r\n      x10: 0,\r\n      x11: 'normal',\r\n    };\r\n\r\n    // 5. 编码\r\n    const jsonBytes = Buffer.from(JSON.stringify(sig), 'utf8');\r\n\r\n    return encodeCustomBase64(jsonBytes);\r\n  }\r\n}\r\n","/**\r\n * 主客户端类\r\n * 移植自 xhshow-go/xhshow/client.go\r\n */\r\n\r\nimport { createHash } from 'crypto';\r\nimport { newSignatureData, XYS_PREFIX, X3_PREFIX } from './config.js';\r\nimport {\r\n  encodeCustomBase64,\r\n  encodeX3Base64,\r\n  decodeCustomBase64,\r\n  decodeX3Base64,\r\n  generateB3TraceId,\r\n  generateXrayTraceId,\r\n  readUInt32LE,\r\n  readUInt64LE,\r\n} from './utils/index.js';\r\nimport { xorTransformArray, buildPayloadArray } from './crypto/index.js';\r\nimport { XsCommonSigner } from './xs-common.js';\r\nimport type { CookieDict, RequestPayload, SignatureData, X3Payload } from './types/index.js';\r\n\r\nexport class Client {\r\n  private xsCommonSigner: XsCommonSigner;\r\n\r\n  constructor() {\r\n    this.xsCommonSigner = new XsCommonSigner();\r\n  }\r\n\r\n  /**\r\n   * 获取 x-t 头部值（毫秒级 Unix 时间戳）\r\n   */\r\n  getXT(timestamp?: number): number {\r\n    const ts = timestamp !== undefined ? timestamp : Date.now() / 1000;\r\n    return Math.floor(ts * 1000);\r\n  }\r\n\r\n  /**\r\n   * 获取 x-b3-traceid\r\n   */\r\n  getB3TraceId(): string {\r\n    return generateB3TraceId();\r\n  }\r\n\r\n  /**\r\n   * 获取 x-xray-traceid\r\n   */\r\n  getXrayTraceId(timestamp?: number, seq?: number): string {\r\n    return generateXrayTraceId(timestamp, seq);\r\n  }\r\n\r\n  /**\r\n   * 生成 x-s-common 签名\r\n   */\r\n  signXSCommon(cookies: CookieDict): string {\r\n    return this.xsCommonSigner.sign(cookies);\r\n  }\r\n\r\n  /**\r\n   * 生成请求签名 (x-s)\r\n   */\r\n  signXS(\r\n    method: string,\r\n    uri: string,\r\n    a1Value: string,\r\n    xsecAppId: string = 'xhs-pc-web',\r\n    payload: RequestPayload = {},\r\n    timestamp?: number\r\n  ): string {\r\n    const cleanUri = this.extractUri(uri);\r\n    const contentString = this.buildContentString(method, cleanUri, payload);\r\n    const dValue = this.generateDValue(contentString);\r\n\r\n    const ts = timestamp !== undefined ? timestamp : Date.now();\r\n    const sig = this.buildSignature(dValue, a1Value, xsecAppId, contentString, ts);\r\n\r\n    const sigData = newSignatureData();\r\n    sigData.x3 = X3_PREFIX + sig;\r\n\r\n    // JSON 序列化（不转义 HTML）\r\n    const jsonBytes = Buffer.from(JSON.stringify(sigData), 'utf8');\r\n    const finalSig = XYS_PREFIX + encodeCustomBase64(jsonBytes);\r\n\r\n    return finalSig;\r\n  }\r\n\r\n  /**\r\n   * 构建内容字符串\r\n   */\r\n  private buildContentString(method: string, uri: string, payload: RequestPayload): string {\r\n    method = method.toUpperCase();\r\n\r\n    if (method === 'POST') {\r\n      const jsonStr = JSON.stringify(payload);\r\n      return uri + jsonStr;\r\n    } else {\r\n      if (Object.keys(payload).length === 0) {\r\n        return uri;\r\n      }\r\n\r\n      // 对键进行排序\r\n      const keys = Object.keys(payload).sort();\r\n      const params: string[] = [];\r\n\r\n      for (const k of keys) {\r\n        const val = payload[k];\r\n        let valStr: string;\r\n\r\n        if (Array.isArray(val)) {\r\n          // 用逗号连接\r\n          valStr = val.map((v) => String(v)).join(',');\r\n        } else {\r\n          valStr = String(val);\r\n        }\r\n\r\n        // URL 编码（保留逗号）\r\n        const encodedVal = this.pythonQuote(valStr);\r\n        params.push(`${k}=${encodedVal}`);\r\n      }\r\n\r\n      return `${uri}?${params.join('&')}`;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 生成 D 值（MD5 哈希）\r\n   */\r\n  private generateDValue(content: string): string {\r\n    const hash = createHash('md5').update(content, 'utf8').digest('hex');\r\n    return hash;\r\n  }\r\n\r\n  /**\r\n   * 构建签名\r\n   */\r\n  private buildSignature(\r\n    dValue: string,\r\n    a1Value: string,\r\n    xsecAppId: string,\r\n    stringParam: string,\r\n    timestamp: number\r\n  ): string {\r\n    const payloadArray = buildPayloadArray(dValue, a1Value, xsecAppId, stringParam, timestamp);\r\n    const xorResult = xorTransformArray(payloadArray);\r\n\r\n    // 截断至 124 字节\r\n    const truncated = xorResult.length > 124 ? xorResult.slice(0, 124) : xorResult;\r\n\r\n    return encodeX3Base64(truncated);\r\n  }\r\n\r\n  /**\r\n   * 提取 URI 路径\r\n   */\r\n  private extractUri(u: string): string {\r\n    u = u.trim();\r\n\r\n    // 如果以 / 开头，直接处理\r\n    if (u.startsWith('/')) {\r\n      const idx = u.indexOf('?');\r\n      if (idx !== -1) {\r\n        return u.substring(0, idx);\r\n      }\r\n      return u;\r\n    }\r\n\r\n    // 尝试解析 URL\r\n    try {\r\n      const url = new URL(u);\r\n      return url.pathname || '/';\r\n    } catch (e) {\r\n      throw new Error(`cannot extract valid URI path from URL: ${u}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Python 风格的 quote (safe=\",\")\r\n   */\r\n  private pythonQuote(s: string): string {\r\n    let res = encodeURIComponent(s);\r\n    // encodeURIComponent 会把空格变成 %20，逗号变成 %2C\r\n    // Python 保留逗号\r\n    res = res.replace(/%2C/g, ',');\r\n    return res;\r\n  }\r\n\r\n  /**\r\n   * 解密完整的 XYS 签名\r\n   */\r\n  decodeXS(xsSignature: string): SignatureData {\r\n    let sig = xsSignature;\r\n    if (sig.startsWith(XYS_PREFIX)) {\r\n      sig = sig.substring(XYS_PREFIX.length);\r\n    }\r\n\r\n    const jsonBytes = decodeCustomBase64(sig);\r\n    const sigData: SignatureData = JSON.parse(Buffer.from(jsonBytes).toString('utf8'));\r\n\r\n    return sigData;\r\n  }\r\n\r\n  /**\r\n   * 解密 x3 签名\r\n   */\r\n  decodeX3(x3Signature: string): Uint8Array {\r\n    let sig = x3Signature;\r\n    if (sig.startsWith(X3_PREFIX)) {\r\n      sig = sig.substring(X3_PREFIX.length);\r\n    }\r\n\r\n    const decodedBytes = decodeX3Base64(sig);\r\n\r\n    // XOR 变换\r\n    const intArr = Array.from(decodedBytes);\r\n    const xorResult = xorTransformArray(intArr);\r\n\r\n    return xorResult;\r\n  }\r\n\r\n  /**\r\n   * 解析 X3 Payload\r\n   */\r\n  parseX3Payload(payload: Uint8Array): X3Payload {\r\n    if (payload.length < 124) {\r\n      throw new Error(`payload too short: ${payload.length} < 124`);\r\n    }\r\n\r\n    const res: X3Payload = {\r\n      version: [],\r\n      seed: 0,\r\n      timestampRaw: 0,\r\n      sequence: 0,\r\n      windowPropsLen: 0,\r\n      uriLen: 0,\r\n      md5Hex: '',\r\n      a1: '',\r\n      source: '',\r\n    };\r\n\r\n    // 1. 版本 (4 字节)\r\n    res.version = Array.from(payload.slice(0, 4));\r\n\r\n    // 2. 随机种子 (4 字节小端序)\r\n    res.seed = readUInt32LE(payload, 4);\r\n    const seedByte0 = payload[4];\r\n\r\n    // 4. 环境指纹 B (8 字节) - payload[16:24]\r\n    res.timestampRaw = Number(readUInt64LE(payload, 16));\r\n\r\n    // 5. 序列号 (4 字节) - payload[24:28]\r\n    res.sequence = readUInt32LE(payload, 24);\r\n\r\n    // 6. 窗口属性长度 (4 字节) - payload[28:32]\r\n    res.windowPropsLen = readUInt32LE(payload, 28);\r\n\r\n    // 7. URI 长度 (4 字节) - payload[32:36]\r\n    res.uriLen = readUInt32LE(payload, 32);\r\n\r\n    // 8. MD5 XOR 段 (8 字节) - payload[36:44]\r\n    const md5Bytes = new Uint8Array(8);\r\n    for (let i = 0; i < 8; i++) {\r\n      md5Bytes[i] = payload[36 + i] ^ seedByte0;\r\n    }\r\n    res.md5Hex = Buffer.from(md5Bytes).toString('hex');\r\n\r\n    // 10. A1 内容 (52 字节) - payload[45:97]\r\n    const a1Bytes = payload.slice(45, 97);\r\n    // 去除尾部的 null 字节\r\n    const a1End = a1Bytes.indexOf(0);\r\n    res.a1 = Buffer.from(a1Bytes.slice(0, a1End === -1 ? a1Bytes.length : a1End)).toString('utf8');\r\n\r\n    // 12. 来源内容 (10 字节) - payload[98:108]\r\n    const srcBytes = payload.slice(98, 108);\r\n    const srcEnd = srcBytes.indexOf(0);\r\n    res.source = Buffer.from(srcBytes.slice(0, srcEnd === -1 ? srcBytes.length : srcEnd)).toString(\r\n      'utf8'\r\n    );\r\n\r\n    return res;\r\n  }\r\n}\r\n","/**\r\n * Cookie 生成模块\r\n * 移植自 xhshow-go/xhshow/cookie_gen.go\r\n */\r\n\r\nconst CHARSET = 'abcdefghijklmnopqrstuvwxyz1234567890';\r\n\r\n/**\r\n * 生成随机字符串\r\n */\r\nexport function generateRandomString(length: number): string {\r\n  let result = '';\r\n  for (let i = 0; i < length; i++) {\r\n    result += CHARSET[Math.floor(Math.random() * CHARSET.length)];\r\n  }\r\n  return result;\r\n}\r\n\r\n/**\r\n * 生成 WebId (32 字符的十六进制字符串)\r\n */\r\nexport function registerId(): string {\r\n  const hexChars = 'abcdef0123456789';\r\n  let result = '';\r\n  for (let i = 0; i < 32; i++) {\r\n    result += hexChars[Math.floor(Math.random() * hexChars.length)];\r\n  }\r\n  return result;\r\n}\r\n\r\n/**\r\n * 生成 A1 Cookie 值\r\n */\r\nexport function generateA1(): string {\r\n  const a = 5;\r\n\r\n  // 当前时间戳（毫秒）转十六进制\r\n  const ts = Date.now();\r\n  const o = ts.toString(16);\r\n\r\n  const n = o + generateRandomString(30);\r\n  const r = n + a.toString();\r\n  const e = r + '0';\r\n  const u = e + '000';\r\n\r\n  // 计算 CRC32\r\n  const crc32Value = crc32(Buffer.from(u));\r\n\r\n  let result = u + crc32Value.toString();\r\n\r\n  // 截断到 52 字符\r\n  if (result.length > 52) {\r\n    result = result.substring(0, 52);\r\n  }\r\n\r\n  return result;\r\n}\r\n\r\n/**\r\n * 获取加载时间戳（毫秒）\r\n */\r\nexport function getLoadTs(): string {\r\n  return Date.now().toString();\r\n}\r\n\r\n/**\r\n * CRC32 计算（标准 IEEE 多项式）\r\n */\r\nfunction crc32(buffer: Buffer): number {\r\n  let crc = 0xffffffff;\r\n  for (let i = 0; i < buffer.length; i++) {\r\n    crc ^= buffer[i];\r\n    for (let j = 0; j < 8; j++) {\r\n      crc = (crc >>> 1) ^ (0xedb88320 & -(crc & 1));\r\n    }\r\n  }\r\n  return (crc ^ 0xffffffff) >>> 0;\r\n}\r\n"]}