UNPKG

@broxus/js-core

Version:

MobX-based JavaScript Core library

43 lines (42 loc) 1.64 kB
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); } }