node-grecaptcha-verify
Version:
Simple reCAPTCHA verifier for node
77 lines • 3.42 kB
JavaScript
;
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