1
0
mirror of https://github.com/SomboChea/ui synced 2024-11-13 09:44:30 +07:00
verdaccio-ui/src/utils/api.ts
Juan Picado @jotadeveloper 5c484bba9a
fix: proxy webpack setting
- it allows download tarballls in the same origin
- update webpack dev server
- add scenario for blob
2019-07-28 11:53:23 +02:00

73 lines
2.0 KiB
TypeScript

import storage from './storage';
import '../../types';
/**
* Handles response according to content type
* @param {object} response
* @returns {promise}
*/
function handleResponseType(response: Response): Promise<[boolean, Blob | string]> | Promise<void> {
if (response.headers) {
const contentType = response.headers.get('Content-Type') as string;
if (contentType.includes('application/pdf')) {
return Promise.all([response.ok, response.blob()]);
}
if (contentType.includes('application/json')) {
return Promise.all([response.ok, response.json()]);
}
// it includes all text types
if (contentType.includes('text/')) {
return Promise.all([response.ok, response.text()]);
}
// unfortunatelly on download files there is no header available
if (response.url.match(/tgz/).length > 0) {
return Promise.all([response.ok, response.blob()]);
}
}
return Promise.resolve();
}
class API {
public request<T>(url: string, method = 'GET', options: RequestInit = { headers: {} }): Promise<T> {
if (!window.VERDACCIO_API_URL) {
throw new Error('VERDACCIO_API_URL is not defined!');
}
const token = storage.getItem('token');
if (token && options.headers && typeof options.headers['Authorization'] === 'undefined') {
options.headers = Object.assign({}, options.headers, {
['Authorization']: `Bearer ${token}`,
});
}
if (!['http://', 'https://', '//'].some(prefix => url.startsWith(prefix))) {
// @ts-ignore
url = window.VERDACCIO_API_URL + url;
}
return new Promise((resolve, reject) => {
fetch(url, {
method,
credentials: 'same-origin',
...options,
})
// @ts-ignore
.then(handleResponseType)
.then(response => {
if (response[0]) {
resolve(response[1]);
} else {
reject(new Error('something went wrong'));
}
})
.catch(error => {
reject(error);
});
});
}
}
export default new API();