UNPKG

better-auth

Version:

The most comprehensive authentication framework for TypeScript.

1 lines 2.62 kB
{"version":3,"file":"google-recaptcha.mjs","names":[],"sources":["../../../../src/plugins/captcha/verify-handlers/google-recaptcha.ts"],"sourcesContent":["import { betterFetch } from \"@better-fetch/fetch\";\nimport { middlewareResponse } from \"../../../utils/middleware-response\";\nimport { EXTERNAL_ERROR_CODES, INTERNAL_ERROR_CODES } from \"../error-codes\";\nimport { encodeToURLParams } from \"../utils\";\n\ntype Params = {\n\tsiteVerifyURL: string;\n\tsecretKey: string;\n\tcaptchaResponse: string;\n\tminScore?: number | undefined;\n\tremoteIP?: string | undefined;\n};\n\ntype SiteVerifyResponse = {\n\tsuccess: boolean;\n\tchallenge_ts: string;\n\thostname: string;\n\t\"error-codes\":\n\t\t| Array<\n\t\t\t\t| \"missing-input-secret\"\n\t\t\t\t| \"invalid-input-secret\"\n\t\t\t\t| \"missing-input-response\"\n\t\t\t\t| \"invalid-input-response\"\n\t\t\t\t| \"bad-request\"\n\t\t\t\t| \"timeout-or-duplicate\"\n\t\t >\n\t\t| undefined;\n};\n\ntype SiteVerifyV3Response = SiteVerifyResponse & {\n\tscore: number;\n};\n\nconst isV3 = (\n\tresponse: SiteVerifyResponse | SiteVerifyV3Response,\n): response is SiteVerifyV3Response => {\n\treturn \"score\" in response && typeof response.score === \"number\";\n};\n\nexport const googleRecaptcha = async ({\n\tsiteVerifyURL,\n\tcaptchaResponse,\n\tsecretKey,\n\tminScore = 0.5,\n\tremoteIP,\n}: Params) => {\n\tconst response = await betterFetch<SiteVerifyResponse | SiteVerifyV3Response>(\n\t\tsiteVerifyURL,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n\t\t\tbody: encodeToURLParams({\n\t\t\t\tsecret: secretKey,\n\t\t\t\tresponse: captchaResponse,\n\t\t\t\t...(remoteIP && { remoteip: remoteIP }),\n\t\t\t}),\n\t\t},\n\t);\n\n\tif (!response.data || response.error) {\n\t\tthrow new Error(INTERNAL_ERROR_CODES.SERVICE_UNAVAILABLE);\n\t}\n\n\tif (\n\t\t!response.data.success ||\n\t\t(isV3(response.data) && response.data.score < minScore)\n\t) {\n\t\treturn middlewareResponse({\n\t\t\tmessage: EXTERNAL_ERROR_CODES.VERIFICATION_FAILED,\n\t\t\tstatus: 403,\n\t\t});\n\t}\n\n\treturn undefined;\n};\n"],"mappings":";;;;;;AAiCA,MAAM,QACL,aACsC;AACtC,QAAO,WAAW,YAAY,OAAO,SAAS,UAAU;;AAGzD,MAAa,kBAAkB,OAAO,EACrC,eACA,iBACA,WACA,WAAW,IACX,eACa;CACb,MAAM,WAAW,MAAM,YACtB,eACA;EACC,QAAQ;EACR,SAAS,EAAE,gBAAgB,qCAAqC;EAChE,MAAM,kBAAkB;GACvB,QAAQ;GACR,UAAU;GACV,GAAI,YAAY,EAAE,UAAU,UAAU;GACtC,CAAC;EACF,CACD;AAED,KAAI,CAAC,SAAS,QAAQ,SAAS,MAC9B,OAAM,IAAI,MAAM,qBAAqB,oBAAoB;AAG1D,KACC,CAAC,SAAS,KAAK,WACd,KAAK,SAAS,KAAK,IAAI,SAAS,KAAK,QAAQ,SAE9C,QAAO,mBAAmB;EACzB,SAAS,qBAAqB;EAC9B,QAAQ;EACR,CAAC"}