tinkoff-invest-api
Version:
Node.js SDK for Tinkoff Invest API
77 lines • 3.53 kB
JavaScript
/**
* Tinkoff Invest API.
*/
import { createChannel, createClientFactory, Metadata, ChannelCredentials } from 'nice-grpc';
import { errorMiddleware, TinkoffApiError } from './api-error.js';
import { Helpers } from './helpers.js';
import { MarketStream } from './stream/market.js';
import { InstrumentsServiceDefinition } from './generated/instruments.js';
import { MarketDataServiceDefinition, MarketDataStreamServiceDefinition } from './generated/marketdata.js';
import { OperationsServiceDefinition } from './generated/operations.js';
import { OrdersServiceDefinition, OrdersStreamServiceDefinition } from './generated/orders.js';
import { SandboxServiceDefinition } from './generated/sandbox.js';
import { StopOrdersServiceDefinition } from './generated/stoporders.js';
import { UsersServiceDefinition } from './generated/users.js';
import { TradesStream } from './stream/trades.js';
export { TinkoffApiError };
const defaults = {
endpoint: 'invest-public-api.tinkoff.ru:443',
appName: '',
// See: https://github.com/vitalets/tinkoff-invest-api/issues/23
channelOptions: {
'grpc.max_receive_message_length': 1024 * 1024 * 100,
'grpc.max_send_message_length': 1024 * 1024 * 100,
}
};
export class TinkoffInvestApi {
constructor(options) {
this.clients = new Map();
this.helpers = Helpers;
this.isBacktest = false;
this.options = Object.assign({}, defaults, options);
this.channel = this.createChannel();
this.metadata = this.createDefaultMetadata();
}
get instruments() { return this.getOrCreateClient(InstrumentsServiceDefinition); }
get marketdata() { return this.getOrCreateClient(MarketDataServiceDefinition); }
get marketdataStream() { return this.getOrCreateClient(MarketDataStreamServiceDefinition); }
get operations() { return this.getOrCreateClient(OperationsServiceDefinition); }
get orders() { return this.getOrCreateClient(OrdersServiceDefinition); }
get ordersStream() { return this.getOrCreateClient(OrdersStreamServiceDefinition); }
get sandbox() { return this.getOrCreateClient(SandboxServiceDefinition); }
get stoporders() { return this.getOrCreateClient(StopOrdersServiceDefinition); }
get users() { return this.getOrCreateClient(UsersServiceDefinition); }
get stream() { return this.getOrCreateStream(); }
createChannel() {
const { endpoint, channelOptions } = this.options;
const credentials = /^localhost/i.test(endpoint)
? ChannelCredentials.createInsecure()
: ChannelCredentials.createSsl();
return createChannel(endpoint, credentials, channelOptions);
}
getOrCreateClient(service) {
let client = this.clients.get(service);
if (!client) {
const defaultCallOptions = { '*': { metadata: this.metadata } };
client = createClientFactory().use(errorMiddleware).create(service, this.channel, defaultCallOptions);
this.clients.set(service, client);
}
return client;
}
getOrCreateStream() {
if (!this.streamClients) {
this.streamClients = {
market: new MarketStream(this),
trades: new TradesStream(this),
};
}
return this.streamClients;
}
createDefaultMetadata() {
return new Metadata({
'Authorization': `Bearer ${this.options.token}`,
'x-app-name': this.options.appName,
});
}
}
//# sourceMappingURL=api.js.map