UNPKG

scraperapi-sdk

Version:
82 lines 3.93 kB
"use strict"; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var https_1 = __importDefault(require("https")); var getContentCharset_1 = __importDefault(require("./getContentCharset")); var getHeaderValue_1 = __importDefault(require("./getHeaderValue")); function fetch(apiPath, apiOptions, method, headers, body) { /** * To ensure a safe URL encoding, we always need to place the url parameter at the very end (if exists). * * Body and headers are also a special options, that are here for backward compatibility, and we need to extract them and use them * as post/put body and request headers, if provided. */ var optionsBody = apiOptions.body, optionsHeaders = apiOptions.headers, url = apiOptions.url, options = __rest(apiOptions, ["body", "headers", "url"]); var bodyToUse = optionsBody !== null && optionsBody !== void 0 ? optionsBody : body; var headersToUse = typeof optionsHeaders === 'object' ? optionsHeaders : headers; /** * Set some default or calculated options. */ options.scaper_sdk = 'node2'; if (headersToUse !== undefined) { options.keep_headers = true; } var paramString = Object.entries(options).map(function (_a) { var key = _a[0], value = _a[1]; return "".concat(key, "=").concat(encodeURIComponent((value !== null && value !== void 0 ? value : ''))); }).join('&'); if (url !== undefined) { paramString = "".concat(paramString, "&url=").concat(encodeURIComponent(url.trim())); } var apiUrl = "https://api.scraperapi.com".concat(apiPath.startsWith('/') ? '' : '/').concat(apiPath, "?").concat(paramString); return new Promise(function (resolve, reject) { var request = https_1.default.request(apiUrl, { headers: headersToUse, method: method !== null && method !== void 0 ? method : 'GET' }, function (response) { var responseHeaders = response.headers, statusCode = response.statusCode; var responseLengthHeader = (0, getHeaderValue_1.default)(responseHeaders, 'content-length'); var responseLength = parseInt(typeof responseLengthHeader === 'string' ? responseLengthHeader : '0', 10); var responseBody = Buffer.alloc(responseLength); var charset = (0, getContentCharset_1.default)(responseHeaders); var writeOffset = 0; response.on('data', function (data) { if (typeof data === 'string') { writeOffset += responseBody.write(data, writeOffset); } else { writeOffset += responseBody.write(data.toString(charset), writeOffset); } }); response.on('end', function () { resolve({ body: responseBody.toString(charset), headers: responseHeaders, statusCode: statusCode }); }); }); request.on('error', function (error) { reject(error); }); if (['POST', 'PUT'].includes(method) && bodyToUse !== undefined) { request.write(bodyToUse); } request.end(); }); } exports.default = fetch; //# sourceMappingURL=fetch.js.map