filestack-js
Version:
Official JavaScript library for Filestack
140 lines (138 loc) • 12.5 kB
JavaScript
/*
* 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.
*/
import { trim } from './../utils';
var ignoreDuplicates = [
'expires',
'from',
'host',
'if-modified-since',
'if-unmodified-since',
'age',
'authorization',
'content-length',
'content-type',
'etag',
'last-modified',
'location',
'max-forwards',
'proxy-authorization',
'referer',
'retry-after',
'user-agent',
];
/**
* Parse response raw header (xhr)
*
* @param {string} headers - raw headers string
*/
export var parse = function (headers) {
var parsed = {};
var key;
var val;
var i;
if (!headers) {
return parsed;
}
headers.split('\n').forEach(function (line) {
i = line.indexOf(':');
key = trim(line.substr(0, i)).toLowerCase();
val = trim(line.substr(i + 1));
if (!key) {
return;
}
if (parsed[key] && ignoreDuplicates.indexOf(key) >= 0) {
return;
}
if (key === 'set-cookie') {
parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
}
else {
parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
}
});
return parsed;
};
/**
* Normalize input headers
*
* @param headers
*/
export var normalizeHeaders = function (headers) {
if (!headers) {
return {};
}
var toReturn = {};
for (var i in headers) {
toReturn[normalizeName(i)] = headers[i];
}
return toReturn;
};
// expect(set({}, 'set-cookies', 'value')).toEqual({ 'Set-Cookies': 'value' });
/**
* Set request headers
*
* @param headers - object containing headers
* @param name - header name
* @param value - header value
* @param setIFExists - determine if we should change header value if exists
*/
export var set = function (headers, name, value, setIFExists) {
if (setIFExists === void 0) { setIFExists = false; }
var normalizedName = normalizeName(name);
if (!headers) {
headers = {};
}
// cleanup headers from undefined vals
headers = JSON.parse(JSON.stringify(headers));
if (headers[name] === undefined && headers[normalizedName] === undefined) {
headers[normalizedName] = value;
}
else if (setIFExists) {
delete headers[name];
headers[normalizedName] = value;
}
return headers;
};
/**
* Normalize header names according to rfc spec
*
* @param {string} name - header name
*/
export var normalizeName = function (name) {
// the exceptions
var result = {
'content-md5': 'Content-MD5',
dnt: 'DNT',
etag: 'ETag',
'last-event-id': 'Last-Event-ID',
tcn: 'TCN',
te: 'TE',
'www-authenticate': 'WWW-Authenticate',
'x-dnsprefetch-control': 'X-DNSPrefetch-Control',
}[name.toLowerCase()];
if (result) {
return result;
}
// the default
return name
.split('-')
.map(function (text) {
return text.charAt(0).toUpperCase() + text.substr(1).toLowerCase();
})
.join('-');
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcmVxdWVzdC9oZWxwZXJzL2hlYWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUdsQyxJQUFNLGdCQUFnQixHQUFHO0lBQ3ZCLFNBQVM7SUFDVCxNQUFNO0lBQ04sTUFBTTtJQUNOLG1CQUFtQjtJQUNuQixxQkFBcUI7SUFDckIsS0FBSztJQUNMLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLE1BQU07SUFDTixlQUFlO0lBQ2YsVUFBVTtJQUNWLGNBQWM7SUFDZCxxQkFBcUI7SUFDckIsU0FBUztJQUNULGFBQWE7SUFDYixZQUFZO0NBQ2IsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsSUFBTSxLQUFLLEdBQUcsVUFBQSxPQUFPO0lBQzFCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLEdBQUcsQ0FBQztJQUNSLElBQUksR0FBRyxDQUFDO0lBQ1IsSUFBSSxDQUFDLENBQUM7SUFFTixJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ1osT0FBTyxNQUFNLENBQUM7S0FDZjtJQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsSUFBSTtRQUM5QixDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9CLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPO1NBQ1I7UUFFRCxJQUFJLE1BQU0s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LENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyRSxDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixDQUFDLENBQUMiLCJmaWxlIjoibGliL3JlcXVlc3QvaGVscGVycy9oZWFkZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOCBieSBGaWxlc3RhY2tcbiAqIFNvbWUgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgdHJpbSB9IGZyb20gJy4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRnNSZXF1ZXN0SGVhZGVycyB9IGZyb20gJy4vLi4vdHlwZXMnO1xuXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVzID0gW1xuICAnZXhwaXJlcycsXG4gICdmcm9tJyxcbiAgJ2hvc3QnLFxuICAnaWYtbW9kaWZpZWQtc2luY2UnLFxuICAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdhZ2UnLFxuICAnYXV0aG9yaXphdGlvbicsXG4gICdjb250ZW50LWxlbmd0aCcsXG4gICdjb250ZW50LXR5cGUnLFxuICAnZXRhZycsXG4gICdsYXN0LW1vZGlmaWVkJyxcbiAgJ2xvY2F0aW9uJyxcbiAgJ21heC1mb3J3YXJkcycsXG4gICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLFxuICAncmV0cnktYWZ0ZXInLFxuICAndXNlci1hZ2VudCcsXG5dO1xuXG4vKipcbiAqIFBhcnNlIHJlc3BvbnNlIHJhdyBoZWFkZXIgKHhocilcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVycyAtIHJhdyBoZWFkZXJzIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgcGFyc2UgPSBoZWFkZXJzID0+IHtcbiAgbGV0IHBhcnNlZCA9IHt9O1xuICBsZXQga2V5O1xuICBsZXQgdmFsO1xuICBsZXQgaTtcblxuICBpZiAoIWhlYWRlcnMpIHtcbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgaGVhZGVycy5zcGxpdCgnXFxuJykuZm9yRWFjaChsaW5lID0+IHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gdHJpbShsaW5lLnN1YnN0cigwLCBpKSkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSB0cmltKGxpbmUuc3Vic3RyKGkgKyAxKSk7XG5cbiAgICBpZiAoIWtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVzLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcblxuLyoqXG4gKiBOb3JtYWxpemUgaW5wdXQgaGVhZGVyc1xuICpcbiAqIEBwYXJhbSBoZWFkZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBub3JtYWxpemVIZWFkZXJzID0gKGhlYWRlcnM6IEZzUmVxdWVzdEhlYWRlcnMpOiBGc1JlcXVlc3RIZWFkZXJzID0+IHtcbiAgaWYgKCFoZWFkZXJzKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgdG9SZXR1cm4gPSB7fTtcblxuICBmb3IgKGxldCBpIGluIGhlYWRlcnMpIHtcbiAgICB0b1JldHVybltub3JtYWxpemVOYW1lKGkpXSA9ICBoZWFkZXJzW2ldO1xuICB9XG5cbiAgcmV0dXJuIHRvUmV0dXJuO1xufTtcblxuLy8gZXhwZWN0KHNldCh7fSwgJ3NldC1jb29raWVzJywgJ3ZhbHVlJykpLnRvRXF1YWwoeyAnU2V0LUNvb2tpZXMnOiAndmFsdWUnIH0pO1xuLyoqXG4gKiBTZXQgcmVxdWVzdCBoZWFkZXJzXG4gKlxuICogQHBhcmFtIGhlYWRlcnMgLSBvYmplY3QgY29udGFpbmluZyBoZWFkZXJzXG4gKiBAcGFyYW0gbmFtZSAtIGhlYWRlciBuYW1lXG4gKiBAcGFyYW0gdmFsdWUgLSBoZWFkZXIgdmFsdWVcbiAqIEBwYXJhbSBzZXRJRkV4aXN0cyAtIGRldGVybWluZSBpZiB3ZSBzaG91bGQgY2hhbmdlIGhlYWRlciB2YWx1ZSBpZiBleGlzdHNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldCA9IChoZWFkZXJzOiBGc1JlcXVlc3RIZWFkZXJzLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHNldElGRXhpc3RzID0gZmFsc2UpID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpO1xuXG4gIGlmICghaGVhZGVycykge1xuICAgIGhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIC8vIGNsZWFudXAgaGVhZGVycyBmcm9tIHVuZGVmaW5lZCB2YWxzXG4gIGhlYWRlcnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGhlYWRlcnMpKTtcbiAgaWYgKGhlYWRlcnNbbmFtZV0gPT09IHVuZGVmaW5lZCAmJiBoZWFkZXJzW25vcm1hbGl6ZWROYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgfSBlbHNlIGlmIChzZXRJRkV4aXN0cykge1xuICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gaGVhZGVycztcbn07XG5cbi8qKlxuICogTm9ybWFsaXplIGhlYWRlciBuYW1lcyBhY2NvcmRpbmcgdG8gcmZjIHNwZWNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIGhlYWRlciBuYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBub3JtYWxpemVOYW1lID0gKG5hbWU6IHN0cmluZykgPT4ge1xuICAvLyB0aGUgZXhjZXB0aW9uc1xuICBsZXQgcmVzdWx0ID0ge1xuICAgICdjb250ZW50LW1kNSc6ICdDb250ZW50LU1ENScsXG4gICAgZG50OiAnRE5UJyxcbiAgICBldGFnOiAnRVRhZycsXG4gICAgJ2xhc3QtZXZlbnQtaWQnOiAnTGFzdC1FdmVudC1JRCcsXG4gICAgdGNuOiAnVENOJyxcbiAgICB0ZTogJ1RFJyxcbiAgICAnd3d3LWF1dGhlbnRpY2F0ZSc6ICdXV1ctQXV0aGVudGljYXRlJyxcbiAgICAneC1kbnNwcmVmZXRjaC1jb250cm9sJzogJ1gtRE5TUHJlZmV0Y2gtQ29udHJvbCcsXG4gIH1bbmFtZS50b0xvd2VyQ2FzZSgpXTtcblxuICBpZiAocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIHRoZSBkZWZhdWx0XG4gIHJldHVybiBuYW1lXG4gICAgLnNwbGl0KCctJylcbiAgICAubWFwKGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgIHJldHVybiB0ZXh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4dC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKTtcbiAgICB9KVxuICAgIC5qb2luKCctJyk7XG59O1xuIl19