UNPKG

node-grecaptcha-verify

Version:
77 lines 3.42 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const https = require("https"); const querystring = require("querystring"); class ReCAPTCHA { constructor(secretKey, minimumScore = 0.5) { this.secretKey = secretKey; this.minimumScore = minimumScore; } static createResponse(isHuman, score, action, errors) { return { isHuman, score, action, errors }; } verify(token, action) { return __awaiter(this, void 0, void 0, function* () { try { const response = yield this.callVerifyApi(token); if (true !== response.success) { return ReCAPTCHA.createResponse(false, 0, null, response["error-codes"]); } if (action && action !== response.action) { return ReCAPTCHA.createResponse(false, response.score, response.action, ["ACTION_DOES_NOT_MATCH"]); } if (this.minimumScore) { if (response.score < this.minimumScore) { return ReCAPTCHA.createResponse(false, response.score, response.action, ["SCORE_TOO_LOW"]); } } return ReCAPTCHA.createResponse(true, response.score, response.action, null); } catch (err) { return ReCAPTCHA.createResponse(false, 0, null, ["API_ERROR", err.message]); } }); } callVerifyApi(token) { return __awaiter(this, void 0, void 0, function* () { return new Promise((resolve, reject) => { const chunks = []; const data = querystring.stringify({ secret: this.secretKey, response: token, }); const url = process.env.GOOGLE_RECAPTCHA_V3_VERIFY_API_URL || ReCAPTCHA.DEFAULT_API_URL; const request = https.request(url, { method: "POST", headers: { "Content-type": "application/x-www-form-urlencoded", }, }, (res) => { res.setEncoding("utf8"); res.on("data", (chunk) => { chunks.push(chunk); }); res.on("end", () => { resolve(JSON.parse(chunks.join(""))); }); }); request.on("error", (err) => { reject(err); }); request.write(data); request.end(); }); }); } } ReCAPTCHA.DEFAULT_API_URL = "https://www.google.com/recaptcha/api/siteverify"; exports.ReCAPTCHA = ReCAPTCHA; //# sourceMappingURL=ReCAPTCHA.js.map