UNPKG

@lfai/egeria-js-commons

Version:

Common module for storing static data such as key value objects, SVGs, icon mappings, API urls.

63 lines (62 loc) 2.75 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { handleResponse, authHeader } from '../http'; import { API_URL, REQUEST_TIMEOUT } from '../commons/constants'; import { eNavigateTo } from '../events'; const egeriaFetch = (uri, method, headers, options) => { const controller = new AbortController(); const timeoutId = setTimeout(() => { controller.abort(); const event = new CustomEvent('EGERIA_API_ERROR', { 'detail': { 'message': 'Request timed out.' } }); document.dispatchEvent(event); }, REQUEST_TIMEOUT); const requestOptions = Object.assign({ method: method, headers: headers, signal: controller.signal }, options); return fetch(`${API_URL}${uri}`, requestOptions).then((response) => { clearTimeout(timeoutId); return handleResponse(response); }).catch((error) => { clearTimeout(timeoutId); switch (error.toString()) { case 'TypeError: Failed to fetch': { eNavigateTo('/server-unavailable'); const event = new CustomEvent('EGERIA_API_ERROR', { 'detail': { status: 500, statusText: `The server is unavailable at the moment.` } }); document.dispatchEvent(event); break; } default: { console.error(`Error:`, error); } } }); }; /* * @param uri is the full URL * @param method usual fetch methods such as 'GET', 'POST', etc. * @param callback this is an optional callback function that can be used * in a different context to get the response and manage it * in a custom manner * @returns */ const fetchData = (uri, method, callback) => __awaiter(void 0, void 0, void 0, function* () { const res = yield egeriaFetch(uri, method, Object.assign({}, authHeader()), {}); const data = (yield res) ? res.json() : null; if (callback) { callback(data); } else { return data; } }); export { egeriaFetch, fetchData };