TypeScript SDK

TypeScript SDK

Версія Завантаження Зірки

npm install -D @ufotech/rpc-ts-sdk
  • Node.js 18+
  • Залежності немає
  • Протокол OpenRPC
  • Тип npm-пакет · CLI rpc-ts-sdk-gen
  • Категорія SDK
  • Ліцензія MIT

GitHub npm Огляд SDK

Генератор 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 документацію генератор отримати не може (запит без заголовків) — збережіть документ у файл і генеруйте з нього.