| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- 'use strict';
- let _Symbol$for;
- function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
- var id = 0;
- function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
- const fetchWithNetworkError = require("@uppy/utils/lib/fetchWithNetworkError");
- const ErrorWithCause = require("@uppy/utils/lib/ErrorWithCause");
- const AuthError = require("./AuthError.js");
- const packageJson = {
- "version": "2.2.2"
- }; // Remove the trailing slash so we can always safely append /xyz.
- function stripSlash(url) {
- return url.replace(/\/$/, '');
- }
- async function handleJSONResponse(res) {
- if (res.status === 401) {
- throw new AuthError();
- }
- const jsonPromise = res.json();
- if (res.status < 200 || res.status > 300) {
- let errMsg = `Failed request with status: ${res.status}. ${res.statusText}`;
- try {
- const errData = await jsonPromise;
- errMsg = errData.message ? `${errMsg} message: ${errData.message}` : errMsg;
- errMsg = errData.requestId ? `${errMsg} request-Id: ${errData.requestId}` : errMsg;
- } finally {
- // eslint-disable-next-line no-unsafe-finally
- throw new Error(errMsg);
- }
- }
- return jsonPromise;
- }
- var _companionHeaders = /*#__PURE__*/_classPrivateFieldLooseKey("companionHeaders");
- var _getPostResponseFunc = /*#__PURE__*/_classPrivateFieldLooseKey("getPostResponseFunc");
- var _getUrl = /*#__PURE__*/_classPrivateFieldLooseKey("getUrl");
- var _errorHandler = /*#__PURE__*/_classPrivateFieldLooseKey("errorHandler");
- _Symbol$for = Symbol.for('uppy test: getCompanionHeaders');
- class RequestClient {
- constructor(uppy, opts) {
- Object.defineProperty(this, _errorHandler, {
- value: _errorHandler2
- });
- Object.defineProperty(this, _getUrl, {
- value: _getUrl2
- });
- Object.defineProperty(this, _companionHeaders, {
- writable: true,
- value: void 0
- });
- Object.defineProperty(this, _getPostResponseFunc, {
- writable: true,
- value: skip => response => skip ? response : this.onReceiveResponse(response)
- });
- this.uppy = uppy;
- this.opts = opts;
- this.onReceiveResponse = this.onReceiveResponse.bind(this);
- this.allowedHeaders = ['accept', 'content-type', 'uppy-auth-token'];
- this.preflightDone = false;
- _classPrivateFieldLooseBase(this, _companionHeaders)[_companionHeaders] = opts == null ? void 0 : opts.companionHeaders;
- }
- setCompanionHeaders(headers) {
- _classPrivateFieldLooseBase(this, _companionHeaders)[_companionHeaders] = headers;
- }
- [_Symbol$for]() {
- return _classPrivateFieldLooseBase(this, _companionHeaders)[_companionHeaders];
- }
- get hostname() {
- const {
- companion
- } = this.uppy.getState();
- const host = this.opts.companionUrl;
- return stripSlash(companion && companion[host] ? companion[host] : host);
- }
- headers() {
- return Promise.resolve({ ...RequestClient.defaultHeaders,
- ..._classPrivateFieldLooseBase(this, _companionHeaders)[_companionHeaders]
- });
- }
- onReceiveResponse(response) {
- const state = this.uppy.getState();
- const companion = state.companion || {};
- const host = this.opts.companionUrl;
- const {
- headers
- } = response; // Store the self-identified domain name for the Companion instance we just hit.
- if (headers.has('i-am') && headers.get('i-am') !== companion[host]) {
- this.uppy.setState({
- companion: { ...companion,
- [host]: headers.get('i-am')
- }
- });
- }
- return response;
- }
- preflight(path) {
- if (this.preflightDone) {
- return Promise.resolve(this.allowedHeaders.slice());
- }
- return fetch(_classPrivateFieldLooseBase(this, _getUrl)[_getUrl](path), {
- method: 'OPTIONS'
- }).then(response => {
- if (response.headers.has('access-control-allow-headers')) {
- this.allowedHeaders = response.headers.get('access-control-allow-headers').split(',').map(headerName => headerName.trim().toLowerCase());
- }
- this.preflightDone = true;
- return this.allowedHeaders.slice();
- }).catch(err => {
- this.uppy.log(`[CompanionClient] unable to make preflight request ${err}`, 'warning');
- this.preflightDone = true;
- return this.allowedHeaders.slice();
- });
- }
- preflightAndHeaders(path) {
- return Promise.all([this.preflight(path), this.headers()]).then(_ref => {
- let [allowedHeaders, headers] = _ref;
- // filter to keep only allowed Headers
- Object.keys(headers).forEach(header => {
- if (!allowedHeaders.includes(header.toLowerCase())) {
- this.uppy.log(`[CompanionClient] excluding disallowed header ${header}`);
- delete headers[header]; // eslint-disable-line no-param-reassign
- }
- });
- return headers;
- });
- }
- get(path, skipPostResponse) {
- const method = 'get';
- return this.preflightAndHeaders(path).then(headers => fetchWithNetworkError(_classPrivateFieldLooseBase(this, _getUrl)[_getUrl](path), {
- method,
- headers,
- credentials: this.opts.companionCookiesRule || 'same-origin'
- })).then(_classPrivateFieldLooseBase(this, _getPostResponseFunc)[_getPostResponseFunc](skipPostResponse)).then(handleJSONResponse).catch(_classPrivateFieldLooseBase(this, _errorHandler)[_errorHandler](method, path));
- }
- post(path, data, skipPostResponse) {
- const method = 'post';
- return this.preflightAndHeaders(path).then(headers => fetchWithNetworkError(_classPrivateFieldLooseBase(this, _getUrl)[_getUrl](path), {
- method,
- headers,
- credentials: this.opts.companionCookiesRule || 'same-origin',
- body: JSON.stringify(data)
- })).then(_classPrivateFieldLooseBase(this, _getPostResponseFunc)[_getPostResponseFunc](skipPostResponse)).then(handleJSONResponse).catch(_classPrivateFieldLooseBase(this, _errorHandler)[_errorHandler](method, path));
- }
- delete(path, data, skipPostResponse) {
- const method = 'delete';
- return this.preflightAndHeaders(path).then(headers => fetchWithNetworkError(`${this.hostname}/${path}`, {
- method,
- headers,
- credentials: this.opts.companionCookiesRule || 'same-origin',
- body: data ? JSON.stringify(data) : null
- })).then(_classPrivateFieldLooseBase(this, _getPostResponseFunc)[_getPostResponseFunc](skipPostResponse)).then(handleJSONResponse).catch(_classPrivateFieldLooseBase(this, _errorHandler)[_errorHandler](method, path));
- }
- }
- function _getUrl2(url) {
- if (/^(https?:|)\/\//.test(url)) {
- return url;
- }
- return `${this.hostname}/${url}`;
- }
- function _errorHandler2(method, path) {
- return err => {
- var _err;
- if (!((_err = err) != null && _err.isAuthError)) {
- // eslint-disable-next-line no-param-reassign
- err = new ErrorWithCause(`Could not ${method} ${_classPrivateFieldLooseBase(this, _getUrl)[_getUrl](path)}`, {
- cause: err
- });
- }
- return Promise.reject(err);
- };
- }
- RequestClient.VERSION = packageJson.version;
- RequestClient.defaultHeaders = {
- Accept: 'application/json',
- 'Content-Type': 'application/json',
- 'Uppy-Versions': `@uppy/companion-client=${RequestClient.VERSION}`
- };
- module.exports = RequestClient;
|