Обработка ошибок
Из вызова trello.js может прилететь три типа ошибок. Каждая — обычный Error, никаких кастомных классов импортировать не надо.
1. HTTP-ошибки (non-2xx)
При 4xx или 5xx от Trello клиент бросает:
Request failed: <status> <statusText> - <body>Пример:
try {
await trello.boards.getBoard({ id: 'does-not-exist' });
} catch (err) {
if (err instanceof Error && err.message.startsWith('Request failed: 404')) {
// доска не найдена
} else {
throw err;
}
}Текст тела ответа добавляется к сообщению — там обычно человекочитаемая причина от Trello.
2. Ошибки валидации схемы (ZodError)
Если форма ответа отличается от ожидаемой клиентом — Zod бросает ZodError:
import { ZodError } from 'zod';
try {
await trello.boards.getBoard({ id });
} catch (err) {
if (err instanceof ZodError) {
console.error('API вернул неожиданную форму:', err.issues);
}
}Schema-ошибки обычно означают, что Trello swagger разошёлся с реальностью, или вы попали на beta-эндпоинт. Заведите issue с упавшим payload.
3. Сетевые ошибки
Всё, что кидает fetch (DNS-сбой, connection refused, timeout) — пробрасывается как есть. Обрабатывайте как любую другую ошибку fetch.
Автоматический retry на 429
Rate-limit-ответы (HTTP 429 Too Many Requests) автоматически ретраятся с экспоненциальным backoff: 2 с, 4 с, 8 с, и финальная попытка. После четырёх попыток последний 429 бросается как обычная HTTP-ошибка.
Оборачивать вызовы в retry-цикл не нужно. Если 429 случаются часто — снижайте частоту запросов или используйте batch-эндпоинт.
Паттерн: типизированный handler
import { ZodError } from 'zod';
async function safeGetBoard(trello, id: string) {
try {
return { ok: true, board: await trello.boards.getBoard({ id }) } as const;
} catch (err) {
if (err instanceof ZodError) return { ok: false, kind: 'schema', issues: err.issues } as const;
if (err instanceof Error && err.message.includes('404')) return { ok: false, kind: 'not_found' } as const;
if (err instanceof Error) return { ok: false, kind: 'http', message: err.message } as const;
throw err;
}
}