scraperapi-sdk
Version:
Node.js SDK for ScraperAPI.com
82 lines • 3.93 kB
JavaScript
;
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