32 lines
838 B
TypeScript
32 lines
838 B
TypeScript
import { redirect } from "next/navigation";
|
|
|
|
export default function handleServerErrors(
|
|
response: Response,
|
|
retry: ((response: Response) => Promise<Response>) | null = null,
|
|
useCloud: boolean = false,
|
|
): Promise<Response> {
|
|
return new Promise((resolve, reject) => {
|
|
if ((response.status === 401 || response.status === 403) && !useCloud) {
|
|
if (retry) {
|
|
return retry(response)
|
|
.catch(() => {
|
|
return redirect("/auth/login");
|
|
});
|
|
} else {
|
|
return redirect("/auth/login");
|
|
}
|
|
}
|
|
if (!response.ok) {
|
|
return response.json().then(error => {
|
|
error.status = response.status;
|
|
reject(error);
|
|
});
|
|
}
|
|
|
|
if (response.status >= 200 && response.status < 300) {
|
|
return resolve(response);
|
|
}
|
|
|
|
return reject(response);
|
|
});
|
|
}
|