Merge pull request #22645 from backstage/fix/response-error-status-code

Fix ResponseError HTTP status
This commit is contained in:
Vincenzo Scamporlino
2024-02-23 23:51:21 +01:00
committed by GitHub
11 changed files with 99 additions and 18 deletions
+4
View File
@@ -128,6 +128,10 @@ export class ResponseError extends Error {
},
): Promise<ResponseError>;
readonly response: ConsumedResponse;
// (undocumented)
readonly statusCode: number;
// (undocumented)
readonly statusText: string;
}
// @public
@@ -35,6 +35,8 @@ describe('ResponseError', () => {
const e = await ResponseError.fromResponse(response as Response);
expect(e.name).toEqual('ResponseError');
expect(e.message).toEqual('Request failed with 444 Fours');
expect(e.statusCode).toEqual(444);
expect(e.statusText).toEqual('Fours');
expect(e.cause.name).toEqual('Fours');
expect(e.cause.message).toEqual('Expected fives');
expect(e.cause.stack).toEqual('lines');
+18 -8
View File
@@ -53,6 +53,9 @@ export class ResponseError extends Error {
*/
readonly cause: Error;
readonly statusCode: number;
readonly statusText: string;
/**
* Constructs a ResponseError based on a failed response.
*
@@ -65,9 +68,9 @@ export class ResponseError extends Error {
): Promise<ResponseError> {
const data = await parseErrorResponseBody(response);
const status = data.response.statusCode || response.status;
const statusText = data.error.name || response.statusText;
const message = `Request failed with ${status} ${statusText}`;
const statusCode = data.response.statusCode || response.status;
const statusText = response.statusText;
const message = `Request failed with ${statusCode} ${statusText}`;
const cause = deserializeError(data.error);
return new ResponseError({
@@ -75,19 +78,26 @@ export class ResponseError extends Error {
response,
data,
cause,
statusCode,
statusText,
});
}
private constructor(props: {
private constructor(opts: {
message: string;
response: ConsumedResponse;
data: ErrorResponseBody;
cause: Error;
statusCode: number;
statusText: string;
}) {
super(props.message);
super(opts.message);
this.name = 'ResponseError';
this.response = props.response;
this.body = props.data;
this.cause = props.cause;
this.response = opts.response;
this.body = opts.data;
this.cause = opts.cause;
this.statusCode = opts.statusCode;
this.statusText = opts.statusText;
}
}