Example: ws-api-client.ts
Static snapshot for Gate/Websocket/WS-API/ws-api-client.ts.
Example Path
Gate/Websocket/WS-API/ws-api-client.ts
Source Link
Repository source: https://github.com/sieblyio/crypto-api-examples/blob/master/examples/Gate/Websocket/WS-API/ws-api-client.ts
Code Snapshot
import { WebsocketAPIClient, WS_KEY_MAP } from 'gateio-api';
const account = {
key: process.env.API_KEY || 'insert_key_here',
secret: process.env.API_SECRET || 'insert_secret_here',
};
async function start() {
const client = new WebsocketAPIClient({
apiKey: account.key,
apiSecret: account.secret,
reauthWSAPIOnReconnect: true,
});
try {
/**
* Optional: authenticate in advance. This will prepare and authenticate a connection.
* Useful to save time for the first request but completely optional. It will also happen automatically when you make your first request.
*/
// console.log(new Date(), 'Authenticating in advance...');
// await client.getWSClient().connectWSAPI('spotV4');
// console.log(new Date(), 'Authenticating in advance...OK!');
/* ============ SPOT TRADING EXAMPLES ============ */
// SPOT ORDER PLACE - Submit a new spot order
const newOrder = await client.submitNewSpotOrder({
text: 't-my-custom-id',
currency_pair: 'BTC_USDT',
type: 'limit',
account: 'spot',
side: 'buy',
amount: '1',
price: '10000',
});
console.log(new Date(), 'Result of the order:', newOrder.data);
// SPOT ORDER CANCEL - Cancel a specific spot order
const cancelOrder = await client.cancelSpotOrder({
order_id: '1700664330',
currency_pair: 'BTC_USDT',
account: 'spot',
});
console.log(new Date(), 'Cancel order result:', cancelOrder.data);
// SPOT ORDER CANCEL BY IDS - Cancel orders by ID list
const cancelOrdersByIds = await client.cancelSpotOrderById([
{
currency_pair: 'BTC_USDT',
id: '1700664343',
account: 'spot',
},
]);
console.log(
new Date(),
'Cancel orders by IDs result:',
cancelOrdersByIds.data,
);
// SPOT ORDER CANCEL BY CURRENCY PAIR - Cancel all orders for a currency pair
const cancelOrdersByCurrencyPair = await client.cancelSpotOrderForSymbol({
currency_pair: 'BTC_USDT',
side: 'buy',
account: 'spot',
});
console.log(
new Date(),
'Cancel orders by currency pair result:',
cancelOrdersByCurrencyPair.data,
);
// SPOT ORDER AMEND - Update an existing spot order
const amendOrder = await client.updateSpotOrder({
order_id: '1700664330',
currency_pair: 'BTC_USDT',
price: '12000',
amount: '0.002',
amend_text: 'price-update',
});
console.log(new Date(), 'Amend order result:', amendOrder.data);
// SPOT ORDER STATUS - Get status of a specific spot order
const orderStatus = await client.getSpotOrderStatus({
order_id: '1700664330',
currency_pair: 'BTC_USDT',
account: 'spot',
});
console.log(new Date(), 'Order status result:', orderStatus.data);
// SPOT ORDER LIST - Get list of spot orders
const getOrders = await client.getSpotOrders({
currency_pair: 'BTC_USDT',
status: 'open',
page: 1,
limit: 10,
account: 'spot',
side: 'buy',
});
console.log(new Date(), 'Result of the orders:', getOrders.data);
/* ============ FUTURES TRADING EXAMPLES ============ */
/**
* Gate has different websocket groups depending on the futures product.
*
* This affects which connection your command is sent to, so make sure to pass one matching your request. Look at WS_KEY_MAP (or the examples below) for details on the available product groups.
*/
const FUTURES_CONNECTION_GROUP_WS_KEY = WS_KEY_MAP.perpFuturesUSDTV4;
/**
* Also optional, as for spot. Keep in mind the first parameter (wsKey) might vary depending on which WS URL is needed.
*/
// console.log(new Date(), 'Authenticating in advance...');
// await client.getWSClient().connectWSAPI(futuresConnectionGroup);
// await client.getWSClient().connectWSAPI('perpFuturesUSDTV4');
// await client.getWSClient().connectWSAPI('perpFuturesBTCV4');
// await client.getWSClient().connectWSAPI('deliveryFuturesUSDTV4');
// await client.getWSClient().connectWSAPI('perpFuturesBTCV4');
// console.log(new Date(), 'Authenticating in advance...OK!');
// FUTURES ORDER PLACE - Submit a new futures order
const newFuturesOrder = await client.submitNewFuturesOrder(
{
contract: 'BTC_USDT',
size: 10,
price: '31503.28',
tif: 'gtc',
text: 't-my-custom-id',
iceberg: 0,
close: false,
reduce_only: false,
auto_size: undefined,
stp_act: 'cn',
},
FUTURES_CONNECTION_GROUP_WS_KEY,
);
console.log(new Date(), 'New futures order result:', newFuturesOrder.data);
// FUTURES ORDER BATCH PLACE - Submit multiple futures orders
const batchFuturesOrders = await client.submitNewFuturesBatchOrder(
[
{
contract: 'BTC_USDT',
size: 10,
price: '31403.18',
tif: 'gtc',
text: 't-my-custom-id-1',
},
{
contract: 'ETH_USDT',
size: 20,
price: '2500.50',
tif: 'gtc',
text: 't-my-custom-id-2',
},
],
FUTURES_CONNECTION_GROUP_WS_KEY,
);
console.log(
new Date(),
'Batch futures orders result:',
batchFuturesOrders.data,
);
// FUTURES ORDER CANCEL - Cancel a specific futures order
const cancelFuturesOrder = await client.cancelFuturesOrder(
{
order_id: '74046514',
},
FUTURES_CONNECTION_GROUP_WS_KEY,
);
console.log(
new Date(),
'Cancel futures order result:',
cancelFuturesOrder.data,
);
// FUTURES ORDER CANCEL BY IDS - Cancel futures orders by ID list
const cancelFuturesOrdersByIds = await client.cancelFuturesOrderById(
['1694883366', '123'],
FUTURES_CONNECTION_GROUP_WS_KEY,
);
console.log(
new Date(),
'Cancel futures orders by IDs result:',
cancelFuturesOrdersByIds.data,
);
// FUTURES ORDER CANCEL ALL - Cancel all open futures orders
const cancelAllFuturesOrders = await client.cancelFuturesAllOpenOrders(
{
contract: 'BTC_USDT',
side: 'bid',
},
FUTURES_CONNECTION_GROUP_WS_KEY,
);
console.log(
new Date(),
'Cancel all futures orders result:',
cancelAllFuturesOrders.data,
);
// FUTURES ORDER AMEND - Update an existing futures order
const amendFuturesOrder = await client.updateFuturesOrder(
{
order_id: '74046543',
price: '31303.18',
size: 15,
amend_text: 'price-and-size-update',
},
FUTURES_CONNECTION_GROUP_WS_KEY,
);
console.log(
new Date(),
'Amend futures order result:',
amendFuturesOrder.data,
);
// FUTURES ORDER LIST - Get list of futures orders
const getFuturesOrders = await client.getFuturesOrders(
{
contract: 'BTC_USDT',
status: 'open',
limit: 10,
offset: 0,
last_id: undefined,
count_total: 0,
},
FUTURES_CONNECTION_GROUP_WS_KEY,
);
console.log(
new Date(),
'Futures orders list result:',
getFuturesOrders.data,
);
// FUTURES ORDER STATUS - Get status of a specific futures order
const futuresOrderStatus = await client.getFuturesOrderStatus(
{
order_id: '74046543',
},
FUTURES_CONNECTION_GROUP_WS_KEY,
);
console.log(
new Date(),
'Futures order status result:',
futuresOrderStatus.data,
);
} catch (e) {
console.error(new Date(), 'Error:', e);
}
}
start();
This is a static, crawlable snapshot. The interactive app loads after JavaScript starts and can refresh live data.