Официальный TypeScript SDK для Vilna API. Предоставляет полностью типизированный клиент, сгенерированный из OpenAPI-спецификации, поэтому каждый эндпоинт, тело запроса и ответ проверяются на этапе компиляции.
- Пакет:
@vilna/sdk - Лицензия: Apache-2.0
- Node.js: >= 18
npm install @vilna/sdkimport { createVilnaClient } from "@vilna/sdk";
const client = createVilnaClient({
apiKey: "your-api-key",
namespace: "your-namespace", // по умолчанию: "demo"
// baseUrl: "https://custom.vilna.app", // необязательное переопределение
// headers: { "Custom-Header": "value" }, // необязательные дополнительные заголовки
});Параметр namespace определяет базовый URL вашего API (https://{namespace}.vilna.app). Если вам нужен полностью кастомный URL, передайте baseUrl.
Под капотом SDK использует openapi-fetch и предоставляет те же методы GET, POST, PUT, DELETE с полным автодополнением путей.
const { data, error } = await client.GET("/blockchains");
if (data) {
for (const chain of data.items) {
console.log(chain.gid, chain.name, chain.is_active);
}
}const { data } = await client.GET("/addresses/{address}", {
params: {
path: { address: "0x742d35Cc6634C0532925a3b844Bc9e7595f7B123" },
},
});const { data } = await client.POST("/addresses/external", {
body: {
value: "0x742d35Cc6634C0532925a3b844Bc9e7595f7B123",
chainFamily: "evm",
label: "Treasury",
},
});const { data } = await client.GET("/balances", {
params: { query: { limit: 50 } },
});Эндпоинты списков возвращают ответы с пагинацией, содержащие items и meta. Используйте параметры page и limit для перебора всех страниц:
// Paginate through addresses
let page = 1;
let hasMore = true;
while (hasMore) {
const { data } = await client.GET("/addresses", {
params: { query: { page, limit: 100 } },
});
// process data.items
hasMore = page < data.meta.total_pages;
page++;
}const { data } = await client.POST("/notification_channels", {
body: {
name: "My Webhook",
config: {
kind: "webhook",
url: "https://example.com/webhook",
headers: {
Authorization: "Bearer secret",
},
},
},
});SDK реэкспортирует несколько псевдонимов типов для удобства:
| Экспорт | Описание |
|---|---|
VilnaClient | Тип экземпляра клиента, возвращаемого createVilnaClient |
VilnaPaths | Объединение всех строк путей API |
VilnaComponents | Все схемы компонентов из OpenAPI-спецификации |
CreateVilnaClientOptions | Опции, принимаемые createVilnaClient |
paths | Необработанные определения путей (то же, что VilnaPaths) |
components | Необработанные определения компонентов (то же, что VilnaComponents) |
operations | Типы на уровне операций для пар запрос/ответ |
Вы можете использовать VilnaComponents для ссылки на конкретные типы схем:
import type { VilnaComponents } from "@vilna/sdk";
type Address = VilnaComponents["schemas"]["Address"];
type Transaction = VilnaComponents["schemas"]["Transaction"];Каждый вызов возвращает { data, error }. При неудачном запросе error соответствует формату RFC 7807 Problem Details:
const { data, error } = await client.GET("/blockchains");
if (error) {
// error.type - URI типа проблемы
// error.title - краткое описание (например, "Not Found")
// error.status - HTTP-код статуса
// error.detail - человекочитаемое объяснение
console.error(error.title, error.detail);
}Для ошибок валидации (400) ответ включает массив fields с деталями по каждому полю:
const { data, error } = await client.POST("/addresses/external", {
body: { /* ... */ },
});
if (error && error.status === 400) {
for (const field of error.fields ?? []) {
console.error(`${field.name}: ${field.reason}`);
}
}Полный справочник по ошибкам см. в разделе Ошибки и устранение неполадок.
SDK также экспортирует два вспомогательных значения:
import { DEFAULT_NAMESPACE, API_KEY_HEADER, getVilnaBaseUrl } from "@vilna/sdk";
console.log(DEFAULT_NAMESPACE); // "demo"
console.log(API_KEY_HEADER); // "X-Api-Key"
console.log(getVilnaBaseUrl("acme")); // "https://acme.vilna.app"- Platform API — полная документация эндпоинтов
- Management API — управление рабочими пространствами, проектами и ключами
- Ошибки и устранение неполадок — формат ошибок и типичные проблемы
- Аутентификация — настройка API-ключей и верификация вебхуков