зеркало из https://github.com/mozilla/fleet.git
105 строки
2.6 KiB
JavaScript
105 строки
2.6 KiB
JavaScript
import fetch from 'isomorphic-fetch';
|
|
|
|
import local from '../utilities/local';
|
|
|
|
const REQUEST_METHODS = {
|
|
DELETE: 'DELETE',
|
|
GET: 'GET',
|
|
PATCH: 'PATCH',
|
|
POST: 'POST',
|
|
};
|
|
|
|
class Base {
|
|
constructor () {
|
|
const { host, origin } = global.window.location;
|
|
|
|
this.baseURL = `${origin}/api`;
|
|
this.websocketBaseURL = `wss://${host}/api`;
|
|
this.bearerToken = local.getItem('auth_token');
|
|
}
|
|
|
|
static _request (method, endpoint, body, overrideHeaders) {
|
|
const credentials = 'same-origin';
|
|
const { GET } = REQUEST_METHODS;
|
|
const headers = {
|
|
Accept: 'application/json',
|
|
'Content-Type': 'application/json',
|
|
...overrideHeaders,
|
|
};
|
|
const requestAttrs = method === GET
|
|
? { credentials, method, headers }
|
|
: { credentials, method, body, headers };
|
|
|
|
return fetch(endpoint, requestAttrs)
|
|
.then((response) => {
|
|
return response.json()
|
|
.then((jsonResponse) => {
|
|
if (response.ok) {
|
|
return jsonResponse;
|
|
}
|
|
|
|
const error = new Error(response.statusText);
|
|
error.response = jsonResponse;
|
|
error.message = jsonResponse;
|
|
error.error = jsonResponse.error;
|
|
|
|
throw error;
|
|
});
|
|
});
|
|
}
|
|
|
|
static post (endpoint, body = {}, overrideHeaders = {}) {
|
|
const { POST } = REQUEST_METHODS;
|
|
|
|
return Base._request(POST, endpoint, body, overrideHeaders);
|
|
}
|
|
|
|
endpoint (pathname) {
|
|
return this.baseURL + pathname;
|
|
}
|
|
|
|
setBearerToken (bearerToken) {
|
|
this.bearerToken = bearerToken;
|
|
}
|
|
|
|
authenticatedDelete (endpoint, overrideHeaders = {}) {
|
|
const { DELETE } = REQUEST_METHODS;
|
|
|
|
return this._authenticatedRequest(DELETE, endpoint, {}, overrideHeaders);
|
|
}
|
|
|
|
authenticatedGet (endpoint, overrideHeaders = {}) {
|
|
const { GET } = REQUEST_METHODS;
|
|
|
|
return this._authenticatedRequest(GET, endpoint, {}, overrideHeaders);
|
|
}
|
|
|
|
authenticatedPatch (endpoint, body = {}, overrideHeaders = {}) {
|
|
const { PATCH } = REQUEST_METHODS;
|
|
|
|
return this._authenticatedRequest(PATCH, endpoint, body, overrideHeaders);
|
|
}
|
|
|
|
authenticatedPost (endpoint, body = JSON.stringify({}), overrideHeaders = {}) {
|
|
const { POST } = REQUEST_METHODS;
|
|
|
|
return this._authenticatedRequest(POST, endpoint, body, overrideHeaders);
|
|
}
|
|
|
|
_authenticatedHeaders = (headers) => {
|
|
return {
|
|
...headers,
|
|
Authorization: `Bearer ${this.bearerToken}`,
|
|
};
|
|
}
|
|
|
|
_authenticatedRequest(method, endpoint, body, overrideHeaders) {
|
|
const headers = this._authenticatedHeaders(overrideHeaders);
|
|
|
|
return Base._request(method, endpoint, body, headers);
|
|
}
|
|
}
|
|
|
|
export default Base;
|
|
|