npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@woodger/t-invest-node-sdk

v0.5.7

Published

Node.js SDK for T-Invest API

Readme

Node.js SDK for T-Invest API

npm version node types license

Минималистичный TypeScript/Node.js SDK для работы с gRPC API T-Invest через nice-grpc.

Официальные ресурсы T-Invest:

Установка

Модуль @woodger/t-invest-node-sdk требует Node.js >=20.19.0. Установите его из npm:

npm install @woodger/t-invest-node-sdk

Архив npm содержит готовый JavaScript и объявления типов из dist. Установка по ссылке на Git-репозиторий не поддерживается: при ней npm запускает prepack и собирает исходный код.

Быстрый старт

Замените YOUR_TOKEN своим токеном доступа.

import { TInvestNodeSDK } from '@woodger/t-invest-node-sdk';

const sdk = new TInvestNodeSDK({
  token: 'YOUR_TOKEN',
  endpoint: 'invest-public-api.tbank.ru:443'
});

try {
  const { accounts } = await sdk.users.getAccounts({});
  console.log(accounts);
}
finally {
  sdk.close();
}

Более подробный пример с выбором доступного счёта и освобождением ресурсов: Первый SDK-вызов.

Документация

  • Примеры — запросы, потоки, ошибки и тестирование приложения.
  • Справочник CLI — команды, опции и коды завершения.
  • Все документы — настройки SDK, архитектура, разработка и политики проекта.

Опции TInvestNodeSDK

interface TInvestOptions {
  token: string;
  endpoint: string;
  appName?: string;
  useSsl?: boolean;
  tls?: TInvestTlsOptions;
  unaryLimiter?: TInvestUnaryLimiter;
  unaryLimits?: UnaryLimits;
}

interface TInvestTlsOptions {
  rootCertificates?: Buffer;
}

interface TInvestUnaryLimit {
  maxRequests: number;
  windowMs: number;
}

type UnaryLimits = Record<string, TInvestUnaryLimit>;
  • token - OAuth токен.
  • endpoint - gRPC endpoint в формате host:port.
  • appName - необязательное значение для заголовка x-app-name.
  • useSsl - использовать TLS, по умолчанию true.
  • tls.rootCertificates - содержимое собственных корневых сертификатов в формате PEM.
  • unaryLimiter - необязательный ограничитель частоты unary-запросов, которым управляет приложение. Без него SDK отправляет запросы сразу.
  • unaryLimits - переопределения квот для одного экземпляра SDK. Значения объединяются с defaultConfig.unaryLimits и передаются настроенному ограничителю.

Для подключения к T-Invest SDK использует встроенный корневой сертификат. Собственные сертификаты можно передать через tls.rootCertificates. Подробнее — в настройках TLS.

createInMemoryUnaryLimiter() создаёт ограничитель для одного процесса, а defineUnaryLimits() помогает сгруппировать переопределения квот по сервисам и методам. Примеры подключения и настройки — в руководстве по ограничению частоты запросов.

Опции defaultConfig

interface TInvestNodeSDKConfig {
  unaryLimits: UnaryLimits;
  requireSideEffectConfirmation: boolean;
}
  • unaryLimits - квоты unary-запросов по умолчанию, заданные по именам сервисов или полным путям gRPC-методов. Ограничение метода имеет приоритет над ограничением сервиса.
  • requireSideEffectConfirmation - требовать --confirm для CLI-команд, которые изменяют заявки, избранное или счета в песочнице; по умолчанию true.

Подробнее о квотах API и их настройке в SDK — в лимитной политике.

Политика gRPC-транспорта

SDK принимает входящие gRPC-сообщения размером не более 4 MiB. Лимит задан самим модулем; изменить его для отдельного экземпляра SDK нельзя.

CLI

Встроенный --help покажет актуальные домены, команды и опции:

npm exec -- t-invest-node-sdk --help

Подключение, правила передачи аргументов, список команд и коды завершения описаны в справочнике CLI.

Доступные сервисы

TInvestNodeSDK создаёт unary-клиенты по первому обращению:

  • sdk.instruments
  • sdk.marketData
  • sdk.operations
  • sdk.orders
  • sdk.sandbox
  • sdk.signals
  • sdk.stopOrders
  • sdk.users

Клиенты повторяют методы из сгенерированных gRPC-описаний.

Для потоковых RPC доступны клиенты:

  • sdk.marketdataStream
  • sdk.operationsStream
  • sdk.ordersStream

Все клиенты используют общий gRPC-канал. SDK добавляет заголовки отдельного вызова к заголовкам экземпляра, сохраняя собственные authorization и x-app-name. Вызов sdk.close() закрывает канал.

Lifecycle и отмена

sdk.close() можно вызывать повторно. После закрытия новые обращения к сервисам и вызовы через ранее полученные клиенты завершаются с SdkErrorCode.SdkClosed; ожидание локальной unary-квоты отменяется. Уже выполняющиеся unary-запросы и потоки можно отменить собственным AbortSignal: close() не ждёт их завершения.

TInvestCallOptions.signal действует на весь SDK-вызов. Если настроен unaryLimiter, SDK сначала передаёт ему сигнал для отмены ожидания, а затем использует тот же сигнал в gRPC-вызове.

onHeader и onTrailer — синхронные обработчики. Если обработчик выбрасывает исключение, SDK возвращает ту же ошибку из unary-вызова или при чтении следующего события потока и отменяет незавершённый gRPC-вызов.

Ошибки SDK

Корень модуля экспортирует SdkError, SdkErrorCode, SdkErrorSource и isSdkError(). Сначала проверьте неизвестную ошибку через isSdkError(), затем используйте сочетание code и source для классификации. path, details и cause доступны для диагностики.

Коды ошибок, их источники и условия повторного запроса описаны в руководстве Ошибки и завершение работы SDK.

Экспорты

Публичный API включает класс TInvestNodeSDK для unary- и потоковых запросов. Модуль также выборочно реэкспортирует:

  • Timestamp;
  • типы, перечисления и их JSON-конвертеры из common, instruments, marketdata, operations, orders, sandbox, signals, stoporders, users;
  • интерфейсы сервисов модуля UsersService, OrdersService, MarketDataService и т.п.
  • сгенерированные серверные контракты *ServiceDefinition и *ServiceImplementation для адаптеров nice-grpc.

Происхождение сгенерированных контрактов описано в разделе Сгенерированный код.

Сгенерированные *ServiceClient остаются внутренними транспортными контрактами и не входят в экспорты корня модуля.

Основная точка входа:

import {
  TInvestNodeSDK,
  CandleInterval,
  InstrumentsService,
  MarketDataStreamService,
} from '@woodger/t-invest-node-sdk';

Дисклеймер

Проект является независимой реализацией и не имеет никакого отношения к T-Invest, T-Банку или их аффилированным лицам. Названия продуктов и компаний используются только для обозначения совместимости с публичным API.

Собственный код SDK распространяется по MIT License. Для сторонних компонентов сохранены полный текст Apache License 2.0 и NOTICE с границами лицензий и необходимыми уведомлениями.