@broxus/js-core
Version:
MobX-based JavaScript Core library
43 lines (42 loc) • 1.64 kB
JavaScript
import { Route } from '../core/Route';
export class Endpoint extends Route {
async request(routeParams, requestInit, bodyData) {
const params = {
body: bodyData ? JSON.stringify(bodyData) : undefined,
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
method: 'GET',
mode: 'cors',
...requestInit,
};
if (requestInit?.timeout !== undefined && !requestInit.signal) {
const controller = new AbortController();
params.signal = controller.signal;
const req = fetch(this.url(routeParams), params);
setTimeout(() => controller.abort(new Error('The request was canceled because it timed out.')), requestInit?.timeout);
return req;
}
return fetch(this.url(routeParams), params);
}
async fetch(routeParams, requestInit, bodyData) {
const response = await this.request(routeParams, {
method: 'GET',
...requestInit,
}, bodyData);
if (!response.ok) {
throw response;
}
return response.json();
}
async post(routeParams, requestInit, bodyData) {
return this.fetch(routeParams, { ...requestInit, method: 'POST' }, bodyData);
}
async put(routeParams, requestInit, bodyData) {
return this.fetch(routeParams, { ...requestInit, method: 'PUT' }, bodyData);
}
async delete(routeParams, requestInit, bodyData) {
return this.fetch(routeParams, { ...requestInit, method: 'DELETE' }, bodyData);
}
}