Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions src/shared/responseHandler.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Request, Response as ExpressResponse, NextFunction } from 'express';
import { Config } from '../types';
import { BitGoRequest } from '../types/request';
import { EnclavedError } from '../errors';

// Extend Express Response to include sendEncoded
interface EncodedResponse extends ExpressResponse {
Expand Down Expand Up @@ -31,19 +32,26 @@ export function responseHandler<T extends Config = Config>(fn: ServiceFunction<T
const result = await fn(req as BitGoRequest<T>, res, next);
return res.sendEncoded(result.type, result.payload);
} catch (error) {
// Log the error
console.error('Error in service function:', error);

// If it's already a Response object (e.g. from Response.error)
if (error && typeof error === 'object' && 'type' in error && 'payload' in error) {
const apiError = error as ApiResponse;
return res.sendEncoded(apiError.type, apiError.payload);
}

// If it's an EnclavedError, use its status code
if (error instanceof EnclavedError) {
return res.sendEncoded(error.status, {
error: error.message,
name: error.name,
details: error.message,
});
}

// Default error response
return res.sendEncoded(500, {
error: 'Internal Server Error',
message: error instanceof Error ? error.message : 'An unexpected error occurred',
name: error instanceof Error ? error.name : 'Error',
details: error instanceof Error ? error.message : String(error),
});
}
};
Expand Down