import { Either, type IEither } from '@emprespresso/pengueno'; export interface HCaptchaResponse { success: boolean; challenge_ts?: string; hostname?: string; 'error-codes'?: string[]; } export async function verifyHCaptcha(token: string, secret: string): Promise> { try { const response = await fetch('https://hcaptcha.com/siteverify', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: new URLSearchParams({ secret, response: token, }), }); if (!response.ok) { return Either.left(new Error(`hCaptcha verification failed: ${response.statusText}`)); } const result = (await response.json()) as HCaptchaResponse; return Either.right(result.success); } catch (err) { return Either.left(err instanceof Error ? err : new Error(String(err))); } }