<!-- .github/pull_request_template.md --> ## Description <!-- Please provide a clear, human-generated description of the changes in this PR. DO NOT use AI-generated descriptions. We want to understand your thought process and reasoning. --> ## Type of Change <!-- Please check the relevant option --> - [x] Bug fix (non-breaking change that fixes an issue) - [x] New feature (non-breaking change that adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [ ] Documentation update - [ ] Code refactoring - [ ] Performance improvement - [ ] Other (please specify): ## Changes Made <!-- List the specific changes made in this PR --> - - - ## Testing <!-- Describe how you tested your changes --> ## Screenshots/Videos (if applicable) <!-- Add screenshots or videos to help explain your changes --> ## Pre-submission Checklist <!-- Please check all boxes that apply before submitting your PR --> - [ ] **I have tested my changes thoroughly before submitting this PR** - [ ] **This PR contains minimal changes necessary to address the issue/feature** - [ ] My code follows the project's coding standards and style guidelines - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I have added necessary documentation (if applicable) - [ ] All new and existing tests pass - [ ] I have searched existing PRs to ensure this change hasn't been submitted already - [ ] I have linked any relevant issues in the description - [ ] My commits have clear and descriptive messages ## Related Issues <!-- Link any related issues using "Fixes #issue_number" or "Relates to #issue_number" --> ## Additional Notes <!-- Add any additional notes, concerns, or context for reviewers --> ## DCO Affirmation I affirm that all code in every commit of this pull request conforms to the terms of the Topoteretes Developer Certificate of Origin.
28 lines
778 B
TypeScript
28 lines
778 B
TypeScript
import { redirect } from "next/navigation";
|
|
|
|
export default function handleServerErrors(response: Response, retry?: (response: Response) => Promise<Response>, useCloud?: boolean): Promise<Response> {
|
|
return new Promise((resolve, reject) => {
|
|
if (response.status === 401 && !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);
|
|
});
|
|
}
|