Skip to content

Commit e0dd472

Browse files
authored
feat: add FederationRequestError class for improved error handling in FederationRequestService (#316)
1 parent 60d21d9 commit e0dd472

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

packages/federation-sdk/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import { DatabaseConnectionService } from './services/database-connection.servic
2121
import { EventEmitterService } from './services/event-emitter.service';
2222
import { EventService } from './services/event.service';
2323

24+
export { FederationRequestError } from './services/federation-request.service';
25+
2426
export type {
2527
Pdu,
2628
PduForType,

packages/federation-sdk/src/services/federation-request.service.ts

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,20 @@ interface SignedRequest {
2626
}
2727

2828
type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';
29+
export class FederationRequestError extends Error {
30+
constructor(
31+
readonly response: FetchResponse<unknown>,
32+
errorText: string,
33+
) {
34+
let errorDetail = errorText;
35+
try {
36+
errorDetail = JSON.stringify(JSON.parse(errorText || ''));
37+
} catch {
38+
/* use raw text if parsing fails */
39+
}
40+
super(`Federation request failed: ${response.status} ${errorDetail}`);
41+
}
42+
}
2943

3044
@singleton()
3145
export class FederationRequestService {
@@ -99,25 +113,18 @@ export class FederationRequestService {
99113

100114
if (!response.ok) {
101115
const errorText = await response.text();
102-
116+
const error = new FederationRequestError(response, errorText);
103117
this.logger.error({
104118
msg: 'Federation request failed',
105119
url,
106120
status: response.status,
107121
errorText,
122+
errorMessage: error.message,
108123
sentHeaders: headers,
109124
responseHeaders: response.headers,
110125
});
111126

112-
let errorDetail = errorText;
113-
try {
114-
errorDetail = JSON.stringify(JSON.parse(errorText || ''));
115-
} catch {
116-
/* use raw text if parsing fails */
117-
}
118-
throw new Error(
119-
`Federation request failed: ${response.status} ${errorDetail}`,
120-
);
127+
throw error;
121128
}
122129

123130
return response;

0 commit comments

Comments
 (0)