UNPKG

recaptcha-node

Version:

A Node.js library to verify reCAPTCHA v2/v3 response tokens received from a client.

71 lines 2.52 kB
"use strict"; 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