recaptcha-node
Version:
A Node.js library to verify reCAPTCHA v2/v3 response tokens received from a client.
71 lines • 2.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.request = void 0;
const errors = require("./errors");
const https = require("https");
const http = require("http");
const BASE_REQUEST_OPTIONS = {
method: 'POST',
};
function request(options) {
return new Promise((resolve, reject) => {
const requestData = options.data;
const requestHeaders = {
'content-length': requestData === null || requestData === void 0 ? void 0 : requestData.length,
'content-type': requestData
? 'application/x-www-form-urlencoded'
: undefined,
};
const requestClient = options.protocol === 'https' ? https.request : http.request;
const requestOptions = Object.assign({}, BASE_REQUEST_OPTIONS, options, { headers: requestHeaders });
delete requestOptions.protocol;
const request = requestClient(requestOptions, response => {
const data = [];
response
.on('data', (chunk) => {
data.push(chunk);
})
.on('end', () => {
if (response.statusCode &&
response.statusCode >= 400 &&
response.statusCode <= 499) {
reject(new errors.RecaptchaInvalidRequestError());
}
else {
const rawData = parseResponseData(data);
if (rawData instanceof Error) {
reject(new errors.RecaptchaAPIError({
original: rawData,
message: "The server's response was not understandable.",
}));
}
else {
resolve(rawData);
}
}
});
});
if (options.timeout) {
request.setTimeout(options.timeout, () => {
reject(new errors.RecaptchaConnectionError());
});
}
if (requestData)
request.write(requestData);
request.on('error', error => {
reject(new errors.RecaptchaConnectionError(error));
});
request.end();
});
}
exports.request = request;
function parseResponseData(data) {
const buffer = Buffer.concat(data);
try {
return JSON.parse(buffer.toString());
}
catch (error) {
return error;
}
}
//# sourceMappingURL=client.js.map