{"version":3,"sources":["../../src/utils/valid.ts"],"sourcesContent":["import type { ZodType, output } from 'zod';\nimport type { ZodMiniType, output as outputMini } from 'zod/mini';\n\ntype ErrorBody = {\n  error: {\n    code: number;\n    status: string;\n    message: string;\n    details: unknown[];\n  };\n};\n\nexport function invalidArgument(reason: string): ErrorBody {\n  return {\n    error: {\n      code: 400,\n      status: 'INVALID_ARGUMENT',\n      message: 'Invalid verification code',\n      details: [{ '@type': 'type.googleapis.com/google.rpc.ErrorInfo', reason }],\n    },\n  };\n}\n\ntype Result<S extends ZodType | ZodMiniType> =\n  | { error: null; data: S extends ZodType ? output<S> : outputMini<S> }\n  | { error: ErrorBody; data: null };\n\nexport function valid<S extends ZodType | ZodMiniType>(schema: S, json: unknown): Result<S> {\n  const result = schema.safeParse(json);\n  if (result.success) {\n    return {\n      error: null,\n      data: result.data as S extends ZodType ? output<S> : outputMini<S>,\n    };\n  }\n\n  const fieldViolations = result.error.issues.map(({ code, path, message }) => ({\n    field: path.join('.'),\n    description: message,\n    reason: code?.toUpperCase() ?? 'INVALID_ARGUMENT',\n    localizedMessage: { locale: 'en-US', message: message },\n  }));\n\n  const error = {\n    error: {\n      code: 400,\n      status: 'INVALID_ARGUMENT',\n      message: 'Invalid request',\n      details: [{ '@type': 'type.googleapis.com/google.rpc.BadRequest', fieldViolations }],\n    },\n  };\n\n  return { error, data: null };\n}\n\nexport async function verifyTurnstileToken(secret: string, token: string) {\n  const response = await fetch('https://challenges.cloudflare.com/turnstile/v0/siteverify', {\n    method: 'POST',\n    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n    body: new URLSearchParams({ secret, response: token }),\n  });\n\n  const data = (await response.json()) as { success: boolean };\n  if (data.success) return { error: null };\n  return { error: invalidArgument('TURNSTILE_VERIFICATION_FAILED') };\n}\n"],"mappings":";AAYO,SAAS,gBAAgB,QAA2B;AACzD,SAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,SAAS,CAAC,EAAE,SAAS,4CAA4C,OAAO,CAAC;AAAA,IAC3E;AAAA,EACF;AACF;AAMO,SAAS,MAAuC,QAAW,MAA0B;AAC1F,QAAM,SAAS,OAAO,UAAU,IAAI;AACpC,MAAI,OAAO,SAAS;AAClB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,MAAM,OAAO;AAAA,IACf;AAAA,EACF;AAEA,QAAM,kBAAkB,OAAO,MAAM,OAAO,IAAI,CAAC,EAAE,MAAM,MAAM,QAAQ,OAAO;AAAA,IAC5E,OAAO,KAAK,KAAK,GAAG;AAAA,IACpB,aAAa;AAAA,IACb,QAAQ,MAAM,YAAY,KAAK;AAAA,IAC/B,kBAAkB,EAAE,QAAQ,SAAS,QAAiB;AAAA,EACxD,EAAE;AAEF,QAAM,QAAQ;AAAA,IACZ,OAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,SAAS,CAAC,EAAE,SAAS,6CAA6C,gBAAgB,CAAC;AAAA,IACrF;AAAA,EACF;AAEA,SAAO,EAAE,OAAO,MAAM,KAAK;AAC7B;AAEA,eAAsB,qBAAqB,QAAgB,OAAe;AACxE,QAAM,WAAW,MAAM,MAAM,6DAA6D;AAAA,IACxF,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,oCAAoC;AAAA,IAC/D,MAAM,IAAI,gBAAgB,EAAE,QAAQ,UAAU,MAAM,CAAC;AAAA,EACvD,CAAC;AAED,QAAM,OAAQ,MAAM,SAAS,KAAK;AAClC,MAAI,KAAK,QAAS,QAAO,EAAE,OAAO,KAAK;AACvC,SAAO,EAAE,OAAO,gBAAgB,+BAA+B,EAAE;AACnE;","names":[]}