From 8d08540ead94e71bfbc015a67daf37398c656c07 Mon Sep 17 00:00:00 2001 From: tiagosiebler Date: Thu, 1 Jun 2023 14:36:37 +0100 Subject: [PATCH 1/2] feat(): add copy trading ws topic example --- examples/ws-private-copytrading-v3.ts | 61 +++++++++++++++++++++++++++ examples/ws-private.ts | 3 +- 2 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 examples/ws-private-copytrading-v3.ts diff --git a/examples/ws-private-copytrading-v3.ts b/examples/ws-private-copytrading-v3.ts new file mode 100644 index 0000000..a0736a7 --- /dev/null +++ b/examples/ws-private-copytrading-v3.ts @@ -0,0 +1,61 @@ +/* eslint-disable no-unused-vars */ +/* eslint-disable @typescript-eslint/no-unused-vars */ +/* eslint-disable @typescript-eslint/no-empty-function */ +import { DefaultLogger, WS_KEY_MAP, WebsocketClient } from '../src'; + +// or +// import { DefaultLogger, WS_KEY_MAP, WebsocketClient } from 'bybit-api'; + +const logger = { + ...DefaultLogger, + silly: (...params) => { + // console.log(params); + }, +}; + +const key = process.env.API_KEY; +const secret = process.env.API_SECRET; + +/** + * Copy trading api docs say that private topics should connect to: wss://stream.bybit.com/realtime_private + * + * Within this SDK, only the market `linear` uses this endpoint for private topics: + */ +const market = 'linear'; + +const wsClient = new WebsocketClient( + { + key: key, + secret: secret, + market: market, + }, + logger, +); + +wsClient.on('update', (data) => { + console.log('raw message received ', JSON.stringify(data, null, 2)); +}); + +wsClient.on('open', (data) => { + console.log('connection opened open:', data.wsKey); +}); +wsClient.on('response', (data) => { + console.log('ws response: ', JSON.stringify(data, null, 2)); +}); +wsClient.on('reconnect', ({ wsKey }) => { + console.log('ws automatically reconnecting.... ', wsKey); +}); +wsClient.on('reconnected', (data) => { + console.log('ws has reconnected ', data?.wsKey); +}); +wsClient.on('error', (data) => { + console.error('ws exception: ', data); +}); + +// copy trading topics from api docs: https://bybit-exchange.github.io/docs/copy-trade/ws-private/position +wsClient.subscribe([ + 'copyTradePosition', + 'copyTradeOrder', + 'copyTradeExecution', + 'copyTradeWallet', +]); diff --git a/examples/ws-private.ts b/examples/ws-private.ts index debc15b..b20235d 100644 --- a/examples/ws-private.ts +++ b/examples/ws-private.ts @@ -23,7 +23,6 @@ const secret = process.env.API_SECRET; const market = 'contractUSDT'; // const market = 'contractInverse'; -// Note: the WebsocketClient defaults to testnet. Set `livenet: true` to use live markets. const wsClient = new WebsocketClient( { key: key, @@ -34,7 +33,7 @@ const wsClient = new WebsocketClient( // enable_time_sync: true, }, }, - logger + logger, ); wsClient.on('update', (data) => { From ae8832bf7667ded94026bbf0f9c6d17dfd53303d Mon Sep 17 00:00:00 2001 From: tiagosiebler Date: Thu, 1 Jun 2023 14:40:19 +0100 Subject: [PATCH 2/2] feat(): update branding logo --- README.md | 2 +- docs/images/logo1.png | Bin 0 -> 15521 bytes package.json | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 docs/images/logo1.png diff --git a/README.md b/README.md index c84925f..cc83d5e 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![last commit](https://img.shields.io/github/last-commit/tiagosiebler/bybit-api)][1] [![CodeFactor](https://www.codefactor.io/repository/github/tiagosiebler/bybit-api/badge)](https://www.codefactor.io/repository/github/tiagosiebler/bybit-api) -[![connector logo](https://cdn.builder.io/api/v1/image/assets%2Ffddee401a9284ab792b271538c28932d%2F5190c99403ac474699a1959fdee1ab6c?format=webp&width=2000)][1] +[![connector logo](https://github.com/tiagosiebler/bybit-api/blob/master/docs/images/logo1.png?raw=true)][1] [1]: https://www.npmjs.com/package/bybit-api diff --git a/docs/images/logo1.png b/docs/images/logo1.png new file mode 100644 index 0000000000000000000000000000000000000000..9c668ac4378af27c0f47177a1ef821e93158d2ae GIT binary patch literal 15521 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