Files
artcraft/app/api/MakeRequest.ts
T
wilandwil a2c82badbc went through every file to rid of session token (#487)
- changed env to not go through proxy
- some logging states need updates to accommodate the change

Co-authored-by: wil <wil@storyteller.ai>
2024-06-17 21:55:01 -04:00

67 lines
1.9 KiB
TypeScript

import { environmentVariables } from "~/signals";
type UrlRoutingFunction<UrlRouteArgs> = (urlRouteArgs: UrlRouteArgs) => string;
interface RouteSetup<UrlRouteArgs> {
method: string;
multipart?: boolean;
routingFunction: UrlRoutingFunction<UrlRouteArgs>;
}
const METHOD_OMITS_BODY: { [key: string]: boolean } = {
DELETE: false,
GET: true,
OPTIONS: true,
PATCH: false,
POST: false,
PUT: false,
};
const MakeRequest = <UrlRouteArgs, Request, Response, UrlParams>(
routeSetup: RouteSetup<UrlRouteArgs>,
): ((
urlRouteArgs: UrlRouteArgs,
request: Request,
queries?: UrlParams,
) => Promise<Response>) => {
return async function (
urlRouteArgs: UrlRouteArgs,
request: Request,
queries?: any,
): Promise<Response> {
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(`${environmentVariables.value.BASE_API}${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(() => ({ success: false }));
};
};
export default MakeRequest;