filestack-js
Version:
Official JavaScript library for Filestack
126 lines (124 loc) • 14.9 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseResponse = exports.filestackHeaders = exports.prepareData = void 0;
var tslib_1 = require("tslib");
/*
* Copyright (c) 2018 by Filestack
* Some rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var utils_1 = require("./../utils");
var utils_2 = require("./../../utils");
var headers_1 = require("./headers");
var fast_xml_parser_1 = require("fast-xml-parser");
var debug_1 = tslib_1.__importDefault(require("debug"));
var debug = (0, debug_1.default)('fs:request:data');
/**
* Prepare request and set content-type header based on data
*
* @param headers
* @param data
*/
var prepareData = function (config) {
// set filestack debug headers first
config = (0, exports.filestackHeaders)(config);
if ((0, utils_1.isFormData)(config.data) || (0, utils_1.isBuffer)(config.data) || (0, utils_1.isStream)(config.data) || (0, utils_1.isFile)(config.data) || (0, utils_1.isBlob)(config.data)) {
return config;
}
// @todo convert it to ArrayBufferView for browser
if ((0, utils_1.isArrayBuffer)(config.data)) {
return config;
}
if ((0, utils_1.isURLSearchParams)(config.data)) {
config.headers = (0, headers_1.set)(config.headers, 'content-type', 'application/x-www-form-urlencoded;charset=utf-8');
config.data = config.data.toString();
}
else if ((0, utils_1.isObject)(config.data)) {
config.headers = (0, headers_1.set)(config.headers, 'content-type', 'application/json', true);
config.data = JSON.stringify(config.data);
}
return config;
};
exports.prepareData = prepareData;
/**
* Add filestack debug headers to request
*
* @param config
*/
var filestackHeaders = function (config) {
if (!config.filestackHeaders) {
return config;
}
config.headers = (0, headers_1.set)(config.headers, 'filestack-source', (0, utils_2.getVersion)());
config.headers = (0, headers_1.set)(config.headers, 'filestack-trace-id', "".concat(Math.floor(Date.now() / 1000), "-").concat((0, utils_2.uniqueId)()));
config.headers = (0, headers_1.set)(config.headers, 'filestack-trace-span', "jssdk-".concat((0, utils_2.uniqueId)()));
return config;
};
exports.filestackHeaders = filestackHeaders;
/**
* Prepare response data based on content type
*
* @param response
*/
var parseResponse = function (response) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var contentType, data;
return tslib_1.__generator(this, function (_a) {
if (!response.headers || !response.headers['content-type']) {
return [2 /*return*/, Promise.resolve(response)];
}
contentType = response.headers['content-type'];
if (/application\/json/.test(contentType)) {
try {
response.data = JSON.parse(response.data);
}
catch (e) {
debug('Cannot parse response %O - %O', response.data, response.headers);
}
}
else if (/text\/(plain|html)/.test(contentType)) {
if ((0, utils_1.isBuffer)(response.data)) {
response.data = bufferToString(response.data);
}
}
else if (/application\/xml/.test(contentType)) {
data = response.data;
if ((0, utils_1.isBuffer)(response.data)) {
data = bufferToString(response.data);
}
if (fast_xml_parser_1.XMLValidator.validate(data) === true) {
response.data = new fast_xml_parser_1.XMLParser({
ignoreDeclaration: true,
ignoreAttributes: true,
trimValues: true,
}).parse(data);
}
}
return [2 /*return*/, Promise.resolve(response)];
});
}); };
exports.parseResponse = parseResponse;
function bufferToString(buffer) {
var bufView = new Uint16Array(buffer);
var length = bufView.length;
var result = '';
var addition = Math.pow(2, 16) - 1;
for (var i = 0; i < length; i += addition) {
if (i + addition > length) {
addition = length - i;
}
result += String.fromCharCode.apply(null, bufView.subarray(i, i + addition));
}
return result;
}
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcmVxdWVzdC9oZWxwZXJzL2RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILG9DQUF3SDtBQUN4SCx1Q0FBcUQ7QUFFckQscUNBQWdDO0FBQ2hDLG1EQUEwRDtBQUMxRCx3REFBMEI7QUFFMUIsSUFBTSxLQUFLLEdBQUcsSUFBQSxlQUFLLEVBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUV2Qzs7Ozs7R0FLRztBQUNJLElBQU0sV0FBVyxHQUFHLFVBQUMsTUFBd0I7SUFDbEQsb0NBQW9DO0lBQ3BDLE1BQU0sR0FBRyxJQUFBLHdCQUFnQixFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWxDLElBQUksSUFBQSxrQkFBVSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFBLGdCQUFRLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUEsZ0JBQVEsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBQSxjQUFNLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUEsY0FBTSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMzSCxPQUFPLE1BQU0sQ0FBQztLQUNmO0lBRUQsa0RBQWtEO0lBQ2xELElBQUksSUFBQSxxQkFBYSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUM5QixPQUFPLE1BQU0sQ0FBQztLQUNmO0lBRUQsSUFBSSxJQUFBLHlCQUFpQixFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNsQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUEsYUFBRyxFQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLGlEQUFpRCxDQUFDLENBQUM7UUFDeEcsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0tBQ3RDO1NBQU0sSUFBSSxJQUFBLGdCQUFRLEVB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QUFFLElBQUk7aUJBQ2pCLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEI7U0FDRjtRQUVELHNCQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUM7O0tBQ2xDLENBQUM7QUFsQ1csUUFBQSxhQUFhLGlCQWtDeEI7QUFFRixTQUFTLGNBQWMsQ0FBQyxNQUFNO0lBQzVCLElBQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLElBQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFFOUIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVuQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxRQUFRLEVBQUU7UUFDekMsSUFBSSxDQUFDLEdBQUcsUUFBUSxHQUFHLE1BQU0sRUFBRTtZQUN6QixRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUN2QjtRQUNELE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7S0FDOUU7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwiZmlsZSI6ImxpYi9yZXF1ZXN0L2hlbHBlcnMvZGF0YS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggYnkgRmlsZXN0YWNrXG4gKiBTb21lIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGlzVVJMU2VhcmNoUGFyYW1zLCBpc09iamVjdCwgaXNTdHJlYW0sIGlzRm9ybURhdGEsIGlzQXJyYXlCdWZmZXIsIGlzRmlsZSwgaXNCbG9iLCBpc0J1ZmZlciB9IGZyb20gJy4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0VmVyc2lvbiwgdW5pcXVlSWQgfSBmcm9tICcuLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEZzUmVxdWVzdE9wdGlvbnMsIEZzUmVzcG9uc2UgfSBmcm9tICcuLy4uL3R5cGVzJztcbmltcG9ydCB7IHNldCB9IGZyb20gJy4vaGVhZGVycyc7XG5pbXBvcnQgeyBYTUxQYXJzZXIsIFhNTFZhbGlkYXRvciB9IGZyb20gJ2Zhc3QteG1sLXBhcnNlcic7XG5pbXBvcnQgRGVidWcgZnJvbSAnZGVidWcnO1xuXG5jb25zdCBkZWJ1ZyA9IERlYnVnKCdmczpyZXF1ZXN0OmRhdGEnKTtcblxuLyoqXG4gKiBQcmVwYXJlIHJlcXVlc3QgYW5kIHNldCBjb250ZW50LXR5cGUgaGVhZGVyIGJhc2VkIG9uIGRhdGFcbiAqXG4gKiBAcGFyYW0gaGVhZGVyc1xuICogQHBhcmFtIGRhdGFcbiAqL1xuZXhwb3J0IGNvbnN0IHByZXBhcmVEYXRhID0gKGNvbmZpZzogRnNSZXF1ZXN0T3B0aW9ucykgPT4ge1xuICAvLyBzZXQgZmlsZXN0YWNrIGRlYnVnIGhlYWRlcnMgZmlyc3RcbiAgY29uZmlnID0gZmlsZXN0YWNrSGVhZGVycyhjb25maWcpO1xuXG4gIGlmIChpc0Zvcm1EYXRhKGNvbmZpZy5kYXRhKSB8fCBpc0J1ZmZlcihjb25maWcuZGF0YSkgfHwgaXNTdHJlYW0oY29uZmlnLmRhdGEpIHx8IGlzRmlsZShjb25maWcuZGF0YSkgfHwgaXNCbG9iKGNvbmZpZy5kYXRhKSkge1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICAvLyBAdG9kbyBjb252ZXJ0IGl0IHRvIEFycmF5QnVmZmVyVmlldyBmb3IgYnJvd3NlclxuICBpZiAoaXNBcnJheUJ1ZmZlcihjb25maWcuZGF0YSkpIHtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgaWYgKGlzVVJMU2VhcmNoUGFyYW1zKGNvbmZpZy5kYXRhKSkge1xuICAgIGNvbmZpZy5oZWFkZXJzID0gc2V0KGNvbmZpZy5oZWFkZXJzLCAnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgY29uZmlnLmRhdGEgPSBjb25maWcuZGF0YS50b1N0cmluZygpO1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGNvbmZpZy5kYXRhKSkge1xuICAgIGNvbmZpZy5oZWFkZXJzID0gc2V0KGNvbmZpZy5oZWFkZXJzLCAnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nLCB0cnVlKTtcbiAgICBjb25maWcuZGF0YSA9IEpTT04uc3RyaW5naWZ5KGNvbmZpZy5kYXRhKTtcbiAgfVxuXG4gIHJldHVybiBjb25maWc7XG59O1xuXG4vKipcbiAqIEFkZCBmaWxlc3RhY2sgZGVidWcgaGVhZGVycyB0byByZXF1ZXN0XG4gKlxuICogQHBhcmFtIGNvbmZpZ1xuICovXG5leHBvcnQgY29uc3QgZmlsZXN0YWNrSGVhZGVycyA9IChjb25maWc6IEZzUmVxdWVzdE9wdGlvbnMpID0+IHtcbiAgaWYgKCFjb25maWcuZmlsZXN0YWNrSGVhZGVycykge1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICBjb25maWcuaGVhZGVycyA9IHNldChjb25maWcuaGVhZGVycywgJ2ZpbGVzdGFjay1zb3VyY2UnLCBnZXRWZXJzaW9uKCkpO1xuICBjb25maWcuaGVhZGVycyA9IHNldChjb25maWcuaGVhZGVycywgJ2ZpbGVzdGFjay10cmFjZS1pZCcsIGAke01hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApfS0ke3VuaXF1ZUlkKCl9YCk7XG4gIGNvbmZpZy5oZWFkZXJzID0gc2V0KGNvbmZpZy5oZWFkZXJzLCAnZmlsZXN0YWNrLXRyYWNlLXNwYW4nLCBganNzZGstJHt1bmlxdWVJZCgpfWApO1xuXG4gIHJldHVybiBjb25maWc7XG59O1xuXG4vKipcbiAqIFByZXBhcmUgcmVzcG9uc2UgZGF0YSBiYXNlZCBvbiBjb250ZW50IHR5cGVcbiAqXG4gKiBAcGFyYW0gcmVzcG9uc2VcbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlUmVzcG9uc2UgPSBhc3luYyAocmVzcG9uc2U6IEZzUmVzcG9uc2UpOiBQcm9taXNlPEZzUmVzcG9uc2U+ID0+IHtcbiAgaWYgKCFyZXNwb25zZS5oZWFkZXJzIHx8ICFyZXNwb25zZS5oZWFkZXJzWydjb250ZW50LXR5cGUnXSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xuICB9XG5cbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzWydjb250ZW50LXR5cGUnXTtcblxuICBpZiAoL2FwcGxpY2F0aW9uXFwvanNvbi8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICB0cnkge1xuICAgICAgcmVzcG9uc2UuZGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2UuZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZGVidWcoJ0Nhbm5vdCBwYXJzZSByZXNwb25zZSAlTyAtICVPJywgcmVzcG9uc2UuZGF0YSwgcmVzcG9uc2UuaGVhZGVycyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKC90ZXh0XFwvKHBsYWlufGh0bWwpLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgIGlmIChpc0J1ZmZlcihyZXNwb25zZS5kYXRhKSkge1xuICAgICAgcmVzcG9uc2UuZGF0YSA9IGJ1ZmZlclRvU3RyaW5nKHJlc3BvbnNlLmRhdGEpO1xuICAgIH1cbiAgfSBlbHNlIGlmICgvYXBwbGljYXRpb25cXC94bWwvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgbGV0IGRhdGEgPSByZXNwb25zZS5kYXRhO1xuXG4gICAgaWYgKGlzQnVmZmVyKHJlc3BvbnNlLmRhdGEpKSB7XG4gICAgICBkYXRhID0gYnVmZmVyVG9TdHJpbmcocmVzcG9uc2UuZGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKFhNTFZhbGlkYXRvci52YWxpZGF0ZShkYXRhKSA9PT0gdHJ1ZSkge1xuICAgICAgcmVzcG9uc2UuZGF0YSA9IG5ldyBYTUxQYXJzZXIoe1xuICAgICAgICBpZ25vcmVEZWNsYXJhdGlvbjogdHJ1ZSxcbiAgICAgICAgaWdub3JlQXR0cmlidXRlcyA6IHRydWUsXG4gICAgICAgIHRyaW1WYWx1ZXM6IHRydWUsXG4gICAgICB9KS5wYXJzZShkYXRhKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcbn07XG5cbmZ1bmN0aW9uIGJ1ZmZlclRvU3RyaW5nKGJ1ZmZlcikge1xuICBjb25zdCBidWZWaWV3ID0gbmV3IFVpbnQxNkFycmF5KGJ1ZmZlcik7XG4gIGNvbnN0IGxlbmd0aCA9IGJ1ZlZpZXcubGVuZ3RoO1xuXG4gIGxldCByZXN1bHQgPSAnJztcbiAgbGV0IGFkZGl0aW9uID0gTWF0aC5wb3coMiwgMTYpIC0gMTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSBhZGRpdGlvbikge1xuICAgIGlmIChpICsgYWRkaXRpb24gPiBsZW5ndGgpIHtcbiAgICAgIGFkZGl0aW9uID0gbGVuZ3RoIC0gaTtcbiAgICB9XG4gICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYnVmVmlldy5zdWJhcnJheShpLCBpICsgYWRkaXRpb24pKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
;