UNPKG

filestack-js

Version:

Official JavaScript library for Filestack

126 lines (124 loc) 14.9 kB
"use strict"; 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=