mirror of
https://github.com/immich-app/immich.git
synced 2025-01-21 00:52:43 -05:00
fix(web): fetch error reporting (#7391)
This commit is contained in:
parent
8a05ff51e9
commit
c8bdeb8fec
4 changed files with 43 additions and 32 deletions
15
open-api/typescript-sdk/fetch-errors.ts
Normal file
15
open-api/typescript-sdk/fetch-errors.ts
Normal file
|
@ -0,0 +1,15 @@
|
|||
import { HttpError } from '@oazapfts/runtime';
|
||||
|
||||
export interface ApiExceptionResponse {
|
||||
message: string;
|
||||
error?: string;
|
||||
statusCode: number;
|
||||
}
|
||||
|
||||
export interface ApiHttpError extends HttpError {
|
||||
data: ApiExceptionResponse;
|
||||
}
|
||||
|
||||
export function isHttpError(error: unknown): error is ApiHttpError {
|
||||
return error instanceof HttpError;
|
||||
}
|
|
@ -1 +1,2 @@
|
|||
export * from './fetch-client';
|
||||
export * from './fetch-errors';
|
||||
|
|
|
@ -1,34 +1,22 @@
|
|||
import { isHttpError } from '@immich/sdk';
|
||||
import type { HandleClientError } from '@sveltejs/kit';
|
||||
import type { AxiosError, AxiosResponse } from 'axios';
|
||||
|
||||
const LOG_PREFIX = '[hooks.client.ts]';
|
||||
const DEFAULT_MESSAGE = 'Hmm, not sure about that. Check the logs or open a ticket?';
|
||||
|
||||
const parseError = (error: unknown) => {
|
||||
const httpError = error as AxiosError;
|
||||
const request = httpError?.request as Request & { path: string };
|
||||
const response = httpError?.response as AxiosResponse<{
|
||||
message: string;
|
||||
statusCode: number;
|
||||
error: string;
|
||||
}>;
|
||||
const httpError = isHttpError(error) ? error : undefined;
|
||||
const statusCode = httpError?.status || httpError?.data?.statusCode || 500;
|
||||
const message = httpError?.data?.message || (httpError?.data && String(httpError.data)) || httpError?.message;
|
||||
|
||||
let code = response?.data?.statusCode || response?.status || httpError.code || '500';
|
||||
if (response) {
|
||||
code += ` - ${response.data?.error || response.statusText}`;
|
||||
}
|
||||
|
||||
if (request && response) {
|
||||
console.log({
|
||||
status: response.status,
|
||||
url: `${request.method} ${request.path}`,
|
||||
response: response.data || 'No data',
|
||||
status: statusCode,
|
||||
response: httpError?.data || 'No data',
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
message: response?.data?.message || httpError?.message || DEFAULT_MESSAGE,
|
||||
code,
|
||||
message: message || DEFAULT_MESSAGE,
|
||||
code: statusCode,
|
||||
stack: httpError?.stack,
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,8 +1,14 @@
|
|||
import type { HttpError } from '@sveltejs/kit';
|
||||
import { isHttpError } from '@immich/sdk';
|
||||
import { isAxiosError } from 'axios';
|
||||
import { notificationController, NotificationType } from '../components/shared-components/notification/notification';
|
||||
|
||||
export async function getServerErrorMessage(error: unknown) {
|
||||
let data = (error as HttpError)?.body;
|
||||
if (isHttpError(error)) {
|
||||
return error.data?.message || error.data;
|
||||
}
|
||||
|
||||
if (isAxiosError(error)) {
|
||||
let data = error.response?.data;
|
||||
if (data instanceof Blob) {
|
||||
const response = await data.text();
|
||||
try {
|
||||
|
@ -12,7 +18,8 @@ export async function getServerErrorMessage(error: unknown) {
|
|||
}
|
||||
}
|
||||
|
||||
return data?.message || null;
|
||||
return data?.message;
|
||||
}
|
||||
}
|
||||
|
||||
export async function handleError(error: unknown, message: string) {
|
||||
|
|
Loading…
Add table
Reference in a new issue