Gate TypeScript SDK example: ws-private-perp-futures.ts
Gate WebSocket websocket private perp futures example for the Siebly Gate SDK, with TypeScript source for exchange REST API and WebSocket integration, setup, and production SDK docs.
What This Example Covers
- Gate WebSocket stream example in TypeScript.
- Uses the Siebly Gate SDK package
gateio-apiinstead of hand-written WebSocket plumbing. - Source path:
Gate/Websocket/ws-private-perp-futures.ts. - Example category: WebSocket.
- Imports SDK symbols including
WebsocketClient. - Calls SDK methods such as
on(),subscribe().
How To Use This Example
- Start here for the specific request or stream pattern, then check the matching SDK guide for install, credentials, and operational notes.
- For WebSocket examples, keep reconnect, resubscribe, heartbeat, and event-handler behavior explicit in your service.
- Open the repository source when you need the latest committed version: GitHub source file.
Example Path
Gate/Websocket/ws-private-perp-futures.ts
Source Link
Repository source: https://github.com/sieblyio/crypto-api-examples/blob/master/examples/Gate/Websocket/ws-private-perp-futures.ts
Related SDK Docs
Example Source
/* eslint-disable @typescript-eslint/no-unused-vars */
import { LogParams, WebsocketClient, WsTopicRequest } from 'gateio-api';
const account = {
key: process.env.API_KEY || 'apiKeyHere',
secret: process.env.API_SECRET || 'apiSecretHere',
};
// Define a custom logger object to handle logging at different levels
const customLogger = {
// Trace level logging: used for detailed debugging information
trace: (...params: LogParams): void => {
// Uncomment the line below to enable trace logging
// console.log(new Date(), 'trace', ...params);
},
// Info level logging: used for general informational messages
info: (...params: LogParams): void => {
console.log(new Date(), 'info', ...params);
},
// Error level logging: used for error messages
error: (...params: LogParams): void => {
console.error(new Date(), 'error', ...params);
},
};
async function start() {
const client = new WebsocketClient(
{
apiKey: account.key,
apiSecret: account.secret,
},
customLogger,
);
// console.log('auth with: ', account);
client.on('open', (data) => {
console.log('connected ', data?.wsKey);
});
// Data received
client.on('update', (data) => {
console.info('data received: ', JSON.stringify(data));
});
// Something happened, attempting to reconnect
client.on('reconnect', (data) => {
console.log('reconnect: ', data);
});
// Reconnect successful
client.on('reconnected', (data) => {
console.log('reconnected: ', data);
});
// Connection closed. If unexpected, expect reconnect -> reconnected.
client.on('close', (data) => {
console.error('close: ', data);
});
// Reply to a request, e.g. "subscribe"/"unsubscribe"/"authenticate"
client.on('response', (data) => {
console.info('server reply: ', JSON.stringify(data), '\n');
});
client.on('exception', (data) => {
console.error('exception: ', data);
});
client.on('authenticated', (data) => {
console.error('authenticated: ', data);
});
try {
// TODO: many private topics use your user ID
const myUserID = '20011';
const userBalances: WsTopicRequest = {
topic: 'futures.balances',
payload: [myUserID],
};
const userTrades: WsTopicRequest = {
topic: 'futures.usertrades',
payload: [myUserID, '!all'],
};
const userLiquidates: WsTopicRequest = {
topic: 'futures.liquidates',
payload: [myUserID, '!all'],
};
/**
* Either send one topic (with params) at a time
*/
// client.subscribe({
// topic: 'futures.usertrades',
// payload: [myUserID, '!all'],
// }, 'perpFuturesUSDTV4');
/**
* Or send multiple topics in a batch (grouped by ws connection (WsKey))
* You can also use strings for topics that don't have any parameters, even if you mix multiple requests into one function call:
*/
client.subscribe(
[userBalances, userTrades, userLiquidates],
'perpFuturesUSDTV4',
);
} catch (e) {
console.error('Req error: ', e);
}
}
start();