export interface ErrorResponse {
[key: string]: unknown;
content: { type: 'text'; text: string }[];
structuredContent: {
ok: false;
error: { code: string; message: string };
result?: unknown;
};
isError: true;
}
function normalizeMessage(message: unknown): string | undefined {
if (typeof message !== 'string' || message.length === 0) return undefined;
return message;
}
function extractMessageObject(error: unknown): string | undefined {
if (!error || typeof error !== 'object' || !('message' in error))
return undefined;
return normalizeMessage((error as { message: unknown }).message);
}
export function getErrorMessage(error: unknown): string {
if (error instanceof Error) {
const message = normalizeMessage(error.message);
if (message) return message;
}
const directMessage = normalizeMessage(error);
if (directMessage) return directMessage;
return extractMessageObject(error) ?? 'Unknown error';
}
export function createErrorResponse(
code: string,
message: string,
result?: unknown
): ErrorResponse {
const structured: ErrorResponse['structuredContent'] = {
ok: false,
error: { code, message },
...(result === undefined ? {} : { result }),
};
return {
content: [{ type: 'text' as const, text: JSON.stringify(structured) }],
structuredContent: structured,
isError: true as const,
};
}