{"version":3,"sources":["../../src/utils/timingSafe.ts"],"names":[],"mappings":";;;AAgBA,SAAS,oBAAoB,KAAA,EAIpB;AACP,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC/B,EAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,CAAM,CAAC,CAAA,EAAG,OAAA,EAAS,KAAA,CAAM,CAAC,CAAA,EAAG,SAAA,EAAW,KAAA,CAAM,CAAC,CAAA,EAAE;AACpE;AAEA,SAAS,oBAAoB,GAAA,EAA4B;AACvD,EAAA,IAAI;AACF,IAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAO,IAAA;AACpC,IAAA,IAAI,MAAA,GAAS,GAAA;AACb,IAAA,MAAM,OAAA,GAAU,CAAA,GAAK,GAAA,CAAI,MAAA,GAAS,CAAA;AAClC,IAAA,IAAI,WAAW,OAAA,KAAY,CAAA,WAAY,GAAA,GAAM,GAAA,CAAI,OAAO,OAAO,CAAA;AAC/D,IAAA,OAAO,OAAO,IAAA,CAAK,MAAA,EAAQ,QAAQ,CAAA,CAAE,SAAS,OAAO,CAAA;AAAA,GACvD,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA;AAEX;AAEO,SAAS,sBAAsB,KAAA,EAAwB;AAC5D,EAAA,MAAM,MAAA,GAAS,oBAAoB,KAAK,CAAA;AACxC,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AAEpB,EAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,MAAA,CAAO,OAAO,CAAA;AAClD,EAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AAErB,EAAA,IAAI;AACF,IAAA,IAAA,CAAK,MAAM,OAAO,CAAA;AAClB,IAAA,OAAO,IAAA;AAAA,GACT,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA;AAEX","file":"timingSafe.cjs","sourcesContent":["function timingSafeEqual(a: string, b: string): boolean {\r\n  if (typeof a !== \"string\" || typeof b !== \"string\") return false;\r\n  if (a.length !== b.length) return false;\r\n\r\n  try {\r\n    const crypto = require(\"crypto\");\r\n    return crypto.timingSafeEqual(Buffer.from(a), Buffer.from(b));\r\n  } catch {\r\n    let result = 0;\r\n    for (let i = 0; i < a.length; i++) {\r\n      result |= a.charCodeAt(i) ^ b.charCodeAt(i);\r\n    }\r\n    return result === 0;\r\n  }\r\n}\r\n\r\nfunction parseTokenStructure(token: string): {\r\n  header: string;\r\n  payload: string;\r\n  signature: string;\r\n} | null {\r\n  if (typeof token !== \"string\") return null;\r\n  const parts = token.split(\".\");\r\n  if (parts.length !== 3) return null;\r\n  return { header: parts[0], payload: parts[1], signature: parts[2] };\r\n}\r\n\r\nfunction safeBase64UrlDecode(str: string): string | null {\r\n  try {\r\n    if (typeof str !== \"string\") return null;\r\n    let padded = str;\r\n    const padding = 4 - (str.length % 4);\r\n    if (padding && padding !== 4) padded = str + \"=\".repeat(padding);\r\n    return Buffer.from(padded, \"base64\").toString(\"utf-8\");\r\n  } catch {\r\n    return null;\r\n  }\r\n}\r\n\r\nexport function isValidTokenStructure(token: string): boolean {\r\n  const parsed = parseTokenStructure(token);\r\n  if (!parsed) return false;\r\n\r\n  const payload = safeBase64UrlDecode(parsed.payload);\r\n  if (!payload) return false;\r\n\r\n  try {\r\n    JSON.parse(payload);\r\n    return true;\r\n  } catch {\r\n    return false;\r\n  }\r\n}\r\n"]}