import GetApiHost from "./GetApiHost"; // const { formatUrl } = GetApiHost(); type UrlRoutingFunction = (urlRouteArgs: UrlRouteArgs) => string; interface RequestHeaders { [name: string]: string; } interface RouteSetup { method: string; multipart?: boolean; routingFunction: UrlRoutingFunction; } const METHOD_OMITS_BODY: { [key: string]: boolean } = { DELETE: false, GET: true, OPTIONS: true, PATCH: false, POST: false, PUT: false, }; const MakeRequest = (routeSetup: RouteSetup) : (urlRouteArgs: UrlRouteArgs, request: Request, queries?: UrlParams) => Promise => { return async function(urlRouteArgs: UrlRouteArgs, request: Request, queries?: any) : Promise { const newQueries = queries ? Object.keys(queries).map((key, i) => { return `${ i ? "&" : "" }${ key }=${ Array.isArray(queries[key]) ? queries[key].join(`&${ key }=`) : queries[key] }` }).join("") : null; const endpoint = `${ routeSetup.routingFunction(urlRouteArgs) }${ newQueries ? "?" + newQueries : "" }`; const method = routeSetup.method; const methodOmitsBody = METHOD_OMITS_BODY[method] || false; // return fetch(formatUrl(endpoint), { return fetch(`https://api.fakeyou.com${ endpoint }`, { method, headers: { "Accept": "application/json", ...methodOmitsBody? {} : { "Content-Type": "application/json" } }, credentials: 'include', ...methodOmitsBody ? {} : { body: JSON.stringify(request) }, }) .then(res => res.json()) .then(res => { if (!res.success && res && (res.voice_token || res.dataset_token)) { return res; } else if (res && "success" in res) { return res; } else Promise.reject(); }) .catch(e => ({ success : false })); } }; export default MakeRequest;