Display formatted HTTP errors

This commit is contained in:
Andras Schmelczer 2025-01-02 11:24:22 +00:00
parent fb729b7d89
commit dae8a9cc89
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C
2 changed files with 104 additions and 45 deletions

View file

@ -23,6 +23,18 @@ export class SyncService {
});
}
private static formatError(
error: components["schemas"]["SerializedError"]
): string {
let result = error.message;
if (error.causes.length > 0) {
const causes = error.causes.join(", ");
result += ` caused by: ${causes}`;
}
return result;
}
public async ping(): Promise<components["schemas"]["PingResponse"]> {
const response = await this.client.GET("/ping", {
params: {
@ -39,7 +51,11 @@ export class SyncService {
);
if (!response.data) {
throw new Error(`Failed to ping server: ${response.error}`);
throw new Error(
`Failed to ping server: ${SyncService.formatError(
response.error
)}`
);
}
return response.data;
@ -76,7 +92,11 @@ export class SyncService {
);
if (!response.data) {
throw new Error(`Failed to create document: ${response.error}`);
throw new Error(
`Failed to create document: ${SyncService.formatError(
response.error
)}`
);
}
Logger.getInstance().debug(
@ -125,7 +145,11 @@ export class SyncService {
);
if (!response.data) {
throw new Error(`Failed to update document: ${response.error}`);
throw new Error(
`Failed to update document: ${SyncService.formatError(
response.error
)}`
);
}
Logger.getInstance().debug(
@ -199,7 +223,11 @@ export class SyncService {
);
if (!response.data) {
throw new Error(`Failed to get document: ${response.error}`);
throw new Error(
`Failed to get document: ${SyncService.formatError(
response.error
)}`
);
}
Logger.getInstance().debug(
@ -230,7 +258,11 @@ export class SyncService {
const { error } = response;
if (error) {
throw new Error(`Failed to get documents: ${error}`);
throw new Error(
`Failed to get documents: ${SyncService.formatError(
response.error
)}`
);
}
Logger.getInstance().debug(

View file

@ -23,11 +23,21 @@ export interface paths {
requestBody?: never;
responses: {
200: {
headers: Record<string, unknown>;
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["PingResponse"];
};
};
default: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["SerializedError"];
};
};
};
};
put?: never;
@ -61,11 +71,21 @@ export interface paths {
requestBody?: never;
responses: {
200: {
headers: Record<string, unknown>;
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["FetchLatestDocumentsResponse"];
};
};
default: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["SerializedError"];
};
};
};
};
put?: never;
@ -87,11 +107,21 @@ export interface paths {
};
responses: {
200: {
headers: Record<string, unknown>;
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DocumentVersion"];
};
};
default: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["SerializedError"];
};
};
};
};
delete?: never;
@ -122,11 +152,21 @@ export interface paths {
requestBody?: never;
responses: {
200: {
headers: Record<string, unknown>;
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DocumentVersion"];
};
};
default: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["SerializedError"];
};
};
};
};
put: {
@ -148,11 +188,21 @@ export interface paths {
};
responses: {
200: {
headers: Record<string, unknown>;
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DocumentVersion"];
};
};
default: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["SerializedError"];
};
};
};
};
post?: never;
@ -176,48 +226,21 @@ export interface paths {
responses: {
/** @description no content */
200: {
headers: Record<string, unknown>;
content?: never;
};
};
};
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/ws": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description websocket upgrade */
101: {
headers: {
connection?: "upgrade";
upgrade?: "websocket";
"sec-websocket-key"?: string;
"sec-websocket-protocol"?: string;
[name: string]: unknown;
};
content?: never;
};
default: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["SerializedError"];
};
};
};
};
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
@ -299,6 +322,10 @@ export interface components {
/** Format: int64 */
since_update_id?: number | null;
};
SerializedError: {
causes: string[];
message: string;
};
UpdateDocumentVersion: {
contentBase64: string;
/** Format: date-time */