README.ru.md
August 20, 2026 · View on GitHub
English · Русский
Почему trello.js
- 🔒 Полная типизация. Тип есть у каждого эндпоинта, параметра и ответа,
anyне остаётся нигде. - ✅ Runtime-валидация. Ответы проверяются через Zod 4: расхождение между документацией и тем, что реально присылает Trello, ловится там, где приходит ответ.
- 🌳 Tree-shakable. Subpath-экспорты на каждый namespace (
trello.js/boards,trello.js/cards, …), плюсtrello.js/modelsиtrello.js/parameters. Вы платите только за то, что импортируете. - 📦 Только ESM. Node.js 22 и новее, работает в браузере через любой сборщик.
- 🧪 Полное покрытие API. 17 namespace и 250+ методов, генерируется из официального swagger Trello.
- ⚡ Встроенный retry. 429-ответы ретраятся сами, с экспоненциальным backoff.
- 📐 Одна runtime-зависимость. Только
zod.
Установка
Требуется Node.js 22+ и ESM-проект (
"type": "module"или сборщик).
pnpm add trello.js
# или
npm install trello.js
# или
yarn add trello.js
Быстрый старт
- Получите API key и token от Trello.
- Создайте клиент и сделайте первый запрос:
import { createTrelloClient } from 'trello.js';
const trello = createTrelloClient({
apiKey: process.env.TRELLO_KEY!,
apiToken: process.env.TRELLO_TOKEN!,
});
const board = await trello.boards.createBoard({
name: 'Моя первая доска',
desc: 'From trello.js with love',
});
console.log(board.url);
Рецепты
Доски
const board = await trello.boards.getBoard({ id: boardId });
const lists = await trello.boards.getBoardLists({ id: boardId });
await trello.boards.updateBoard({ id: boardId, closed: true });
Карточки
const card = await trello.cards.createCard({
idList: listId,
name: 'Написать release notes',
pos: 'top',
});
await trello.cards.updateCard({ id: card.id, idList: targetListId });
await trello.cards.createCardComment({ id: card.id, text: 'Готово.' });
Поиск
const result = await trello.search.search({
query: 'release',
modelTypes: 'cards,boards',
cards_limit: 20,
});
result.cards?.forEach((c) => console.log(c.name));
Webhooks
const webhook = await trello.webhooks.createWebhook({
idModel: boardId,
callbackURL: 'https://my-app.example.com/trello/hook',
description: 'Стрим активности',
});
callbackURLдолжен отвечать200наHEAD-запрос. Trello проверяет это в момент создания.
Tree-shaking-импорты
Чтобы бандл был минимальным, импортируйте функции namespace'ов напрямую:
import { createClient } from 'trello.js/core';
import { getBoard } from 'trello.js/boards';
import { createCard } from 'trello.js/cards';
const client = createClient({ apiKey, apiToken });
const board = await getBoard(client, { id });
const card = await createCard(client, { idList: board.idLists?.[0], name: 'Hi' });
Сборщики выкидывают неиспользуемые namespace. Те 15+ namespace'ов, которые вы не импортируете, в бандл не попадут.
TypeScript и схемы
Типы возвращаемых значений приходят вместе с методами:
const board = await trello.boards.getBoard({ id });
// ^? Board
У каждой модели есть runtime Zod-схема. Импортировать её можно из корня или из отдельного subpath:
import { BoardSchema, type Board } from 'trello.js';
const board: Board = BoardSchema.parse(payload);
Чтобы полностью отключить парсинг, передайте skipParsing: true при создании клиента. Тогда schema.parse() не вызывается: ZodError не бросается, трансформации схемы тоже не применяются, поэтому даты остаются строками, а не становятся объектами Date. Это размен рантайм-типобезопасности на скорость и устойчивость к дрейфу схем, так что оставляйте false (значение по умолчанию), если нет причин менять.
const trello = createTrelloClient({ apiKey, apiToken, skipParsing: true });
Обработка ошибок
Non-2xx ответы бросают Error('Request failed: <status> <statusText> - <body>'), несовпадения схемы — ZodError. Ответы 429 от рейт-лимита ретраятся автоматически: сначала пауза 2 с, потом 4 с, потом 8 с.
try {
await trello.boards.getBoard({ id: 'bad' });
} catch (err) {
if (err instanceof Error && err.message.includes('404')) {
// обработка not-found
}
}
Подробности — в гайде по обработке ошибок.
Документация
- 📖 Полная документация: гайды, рецепты, миграция.
- 📚 API reference: каждый метод, генерируется из исходников (только на английском).
- 🇬🇧 English version.
Совместимость
- Node.js ≥ 22 (только ESM)
- TypeScript ≥ 6.0 рекомендуется
- Современные сборщики: Vite, webpack 5+, Rollup, esbuild
Мигрируете с v1?
См. гайд миграции v1 → v2. Главные изменения: new TrelloClient заменён на createTrelloClient, key/token — на apiKey/apiToken, пакет стал только-ESM и требует Node 22+.
Contributing
См. CONTRIBUTING.md. Большая часть src/ генерируется из swagger Trello, поэтому, пожалуйста, не редактируйте вручную src/api/, src/models/ и src/parameters/.
Лицензия
MIT © Vladislav Tupikin