TypeScript SDK

← TypeScript SDK

Ashterix

docs: rewrite JsonRpcBundle docs, add SDK docs, move them under docs/api

uk/docs/api/sdk/ts.md новий файл +71 −0

TypeScript SDK

Пакет @ufotech/rpc-ts-sdk (npm)
Версія 1.0.4
Залежності немає; Node.js 18+ (вбудований fetch)
Код GitHub

Генератор TypeScript-інтерфейсів зі схем документа OpenRPC. Для сервера на JsonRpcBundle це DTO й enum з components.schemas відповіді GET /rpc — типи, які фронтенд отримує й надсилає.

Пакет генерує лише типи даних, а не клієнт з методами: запити надсилайте будь-яким HTTP-клієнтом, а згенеровані інтерфейси використовуйте для параметрів і результатів.

Встановлення

npm install -g @ufotech/rpc-ts-sdk     # або локально: npm install -D @ufotech/rpc-ts-sdk

Генерація з консолі

rpc-ts-sdk-gen -i https://api.example.com/rpc -o ./src/api/schemas.ts
rpc-ts-sdk-gen -i ./openrpc.json -o ./src/api/schemas.ts
Опція За замовчуванням Опис
-i, --input openrpc.json у поточному каталозі Шлях або URL документа OpenRPC
-o, --out schemas.ts у поточному каталозі Файл з інтерфейсами

Генерація з коду

import { generateSchemas } from '@ufotech/rpc-ts-sdk/generate-schemas';

await generateSchemas({
    input: 'https://api.example.com/rpc',
    output: './src/api/schemas.ts',
});

README пакета показує імпорт з @ufo-tech/rpc-ts-sdk, але пакет опубліковано як @ufotech/rpc-ts-sdk, а в exports є лише шлях ./generate-schemas. Імпортуйте саме @ufotech/rpc-ts-sdk/generate-schemas.

Що генерується

  • інтерфейс для кожної схеми з components.schemas;
  • enum → union-типи значень, oneOf / anyOf → union-типи, масиви, вкладені об'єкти, $ref, nullable-поля;
  • базовий інтерфейс помилки:
export interface RpcError {
    code: number;
    message: string;
    data?: any;
}

Якщо в документі немає components.schemas, генерація завершується помилкою No components.schemas found!.

Поради

  • Генеруйте типи на етапі збирання фронтенду — так вони завжди відповідають актуальній документації сервера.
  • Для різних версій чи груп API генеруйте окремі файли з відповідних адрес (/rpc/v2, /rpc/internal).
  • Захищену protected_doc документацію генератор отримати не може (запит без заголовків) — збережіть документ у файл і генеруйте з нього.