bitget-api
Version:
Node.js & JavaScript SDK for Bitget REST APIs & WebSockets, with TypeScript & end-to-end tests.
104 lines • 3.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.WebsocketClientV2 = void 0;
const util_1 = require("./util");
const BaseWSClient_1 = require("./util/BaseWSClient");
const LOGGER_CATEGORY = { category: 'bitget-ws' };
const COIN_CHANNELS = [
'account',
'account-crossed',
'account-isolated',
];
class WebsocketClientV2 extends BaseWSClient_1.BaseWebsocketClient {
getWsKeyForTopic(subscribeEvent, isPrivate) {
return isPrivate || (0, util_1.isPrivateChannel)(subscribeEvent.channel)
? util_1.WS_KEY_MAP.v2Private
: util_1.WS_KEY_MAP.v2Public;
}
isPrivateChannel(subscribeEvent) {
return (0, util_1.isPrivateChannel)(subscribeEvent.channel);
}
shouldAuthOnConnect(wsKey) {
return util_1.WS_AUTH_ON_CONNECT_KEYS.includes(wsKey);
}
getWsUrl(wsKey) {
if (this.options.wsUrl) {
return this.options.wsUrl;
}
const networkKey = 'livenet';
switch (wsKey) {
case util_1.WS_KEY_MAP.spotv1:
case util_1.WS_KEY_MAP.mixv1: {
throw new Error('Use the WebsocketClient instead of WebsocketClientV2 for V1 websockets');
}
case util_1.WS_KEY_MAP.v2Private: {
return util_1.WS_BASE_URL_MAP.v2Private.all[networkKey];
}
case util_1.WS_KEY_MAP.v2Public: {
return util_1.WS_BASE_URL_MAP.v2Public.all[networkKey];
}
default: {
this.logger.error('getWsUrl(): Unhandled wsKey: ', Object.assign(Object.assign({}, LOGGER_CATEGORY), { wsKey }));
throw (0, util_1.neverGuard)(wsKey, 'getWsUrl(): Unhandled wsKey');
}
}
}
getMaxTopicsPerSubscribeEvent(wsKey) {
return (0, util_1.getMaxTopicsPerSubscribeEvent)(wsKey);
}
/**
* Request connection of all dependent (public & private) websockets, instead of waiting for automatic connection by library
*/
connectAll() {
return [
this.connect(util_1.WS_KEY_MAP.v2Private),
this.connect(util_1.WS_KEY_MAP.v2Public),
];
}
/** Some private channels use `coin` instead of `instId`. This method handles building the sub/unsub request */
getSubRequest(instType, topic, coin = 'default') {
if ((0, util_1.isPrivateChannel)(topic)) {
if (COIN_CHANNELS.includes(topic)) {
const subscribeRequest = {
instType,
channel: topic,
coin,
};
return subscribeRequest;
}
const subscribeRequest = {
instType,
channel: topic,
instId: coin,
};
return subscribeRequest;
}
return {
instType,
channel: topic,
instId: coin,
};
}
/**
* Subscribe to a PUBLIC topic
* @param instType instrument type (refer to API docs).
* @param topic topic name (e.g. "ticker").
* @param instId instrument ID (e.g. "BTCUSDT"). Use "default" for private topics.
*/
subscribeTopic(instType, topic, coin = 'default') {
const subRequest = this.getSubRequest(instType, topic, coin);
return this.subscribe(subRequest);
}
/**
* Unsubscribe from a topic
* @param instType instrument type (refer to API docs).
* @param topic topic name (e.g. "ticker").
* @param instId instrument ID (e.g. "BTCUSDT"). Use "default" for private topics to get all symbols.
*/
unsubscribeTopic(instType, topic, coin = 'default') {
const subRequest = this.getSubRequest(instType, topic, coin);
return this.unsubscribe(subRequest);
}
}
exports.WebsocketClientV2 = WebsocketClientV2;
//# sourceMappingURL=websocket-client-v2.js.map