fix #29 & process recent api deprecations

This commit is contained in:
tiagosiebler
2020-11-10 22:14:34 +00:00
parent 4d93e5f14e
commit dc4491e1a7
4 changed files with 98 additions and 33 deletions

View File

@@ -5,20 +5,27 @@
[1]: https://www.npmjs.com/package/bybit-api
An light node.js wrapper for the Bybit Cryptocurrency Derivative exchange API. Forked & adapted from [@pxtrn/bybit-api](https://github.com/pixtron/bybit-api).
A production-ready Node.js connector for the Bybit APIs and WebSockets.
## Installation
`npm install --save bybit-api`
## Usage
Create API credentials at bybit (obviously you need to be logged in):
Create API credentials at Bybit
- [Livenet](https://bybit.com/app/user/api-management?affiliate_id=9410&language=en-US&group_id=0&group_type=1)
- [Testnet](https://testnet.bybit.com/app/user/api-management)
## Documentation
Most of the documentation is in [Bybit's official API docs](https://bybit-exchange.github.io/docs/inverse/#t-introduction). Most of this library's methods accept objects that directly correspond to expectations from Bybit's API docs.
## Issues & Discussion
- Issues? Check the [issues tab](https://github.com/tiagosiebler/bybit-api/issues).
- Discuss & collaborate with other node devs? Join our [Node.js Algo Traders](https://t.me/nodetraders) engineering community on telegram.
### Rest client
## Documentation
Most methods accept JS objects. These can be populated using parameters specified by Bybit's API documentation.
- [Bybit API Inverse Documentation](https://bybit-exchange.github.io/docs/inverse/#t-introduction).
- [Bybit API Linear Documentation (not supported yet)](https://bybit-exchange.github.io/docs/linear/#t-introduction)
### Inverse Contracts
#### Rest client
```javascript
const {RestClient} = require('bybit-api');
@@ -36,9 +43,9 @@ client.changeUserLeverage({leverage: 4, symbol: 'ETHUSD'})
});
```
See rest client [api docs](./doc/rest-client.md) for further information.
See inverse [rest-client.js](./master/lib/rest-client.js) for further information.
### Websocket client
#### Websocket client
```javascript
const {WebsocketClient} = require('bybit-api');
@@ -70,8 +77,7 @@ ws.on('error', function(err) {
console.error('ERR', err);
});
```
See websocket client [api docs](./doc/websocket-client.md) for further information.
See inverse [websocket-client.js](./master/lib/websocket-client.js) & [ws api docs](./doc/websocket-client.md) for further information.
### Customise Logging
Pass a custom logger which supports the log methods `silly`, `debug`, `notice`, `info`, `warning` and `error`, or override methods from the default logger as desired:
@@ -82,20 +88,11 @@ const { RestClient, WebsocketClient, DefaultLogger } = require('bybit-api');
// Disable all logging on the silly level
DefaultLogger.silly = () => {};
const API_KEY = 'xxx';
const PRIVATE_KEY = 'yyy';
const ws = new WebsocketClient({key: API_KEY, secret: PRIVATE_KEY}, DefaultLogger);
const ws = new WebsocketClient({key: 'xxx', secret: 'yyy'}, DefaultLogger);
```
## Contributions & Thanks
### Donations
#### pixtron
This library was started by @pixtron. If this library helps you to trade better on bybit, feel free to donate a coffee to @pixtron:
- BTC `1Fh1158pXXudfM6ZrPJJMR7Y5SgZUz4EdF`
- ETH `0x21aEdeC53ab7593b77C9558942f0c9E78131e8d7`
- LTC `LNdHSVtG6UWsriMYLJR3qLdfVNKwJ6GSLF`
#### tiagosiebler
If you found this project interesting or useful, create accounts with my referral links:
- [Bybit](https://www.bybit.com/en-US/register?affiliate_id=9410&language=en-US&group_id=0&group_type=1)
@@ -105,5 +102,11 @@ Or buy me a coffee using any of these:
- BTC: `1C6GWZL1XW3jrjpPTS863XtZiXL1aTK7Jk`
- ETH (ERC20): `0xd773d8e6a50758e1ada699bb6c4f98bb4abf82da`
#### pixtron
The original library was started by @pixtron. If this library helps you to trade better on bybit, feel free to donate a coffee to @pixtron:
- BTC `1Fh1158pXXudfM6ZrPJJMR7Y5SgZUz4EdF`
- ETH `0x21aEdeC53ab7593b77C9558942f0c9E78131e8d7`
- LTC `LNdHSVtG6UWsriMYLJR3qLdfVNKwJ6GSLF`
### Contributions & Pull Requests
Contributions are encouraged, I will review any incoming pull requests. See the issues tab for todo items.

View File

@@ -6,6 +6,7 @@
"exclude": [
"node_modules",
"**/node_modules/*",
"coverage"
"coverage",
"doc"
]
}

View File

@@ -1,6 +1,4 @@
const assert = require('assert');
const RequestWrapper = require('./util/requestWrapper');
module.exports = class RestClient {
@@ -54,6 +52,17 @@ module.exports = class RestClient {
assert(params.order_id || params.order_link_id, 'Parameter order_id OR order_link_id is required');
assert(params.symbol, 'Parameter symbol is required');
return await this.request.post('v2/private/order/replace', params);
}
/**
* @deprecated use replaceActiveOrder()
*/
async replaceActiveOrderOld(params) {
assert(params, 'No params passed');
assert(params.order_id || params.order_link_id, 'Parameter order_id OR order_link_id is required');
assert(params.symbol, 'Parameter symbol is required');
return await this.request.post('open-api/order/replace', params);
}
@@ -66,6 +75,24 @@ module.exports = class RestClient {
}
async placeConditionalOrder(params) {
assert(params, 'No params passed');
assert(params.side, 'Parameter side is required');
assert(params.symbol, 'Parameter symbol is required');
assert(params.order_type, 'Parameter order_type is required');
assert(params.qty, 'Parameter qty is required');
assert(params.base_price, 'Parameter base_price is required');
assert(params.stop_px, 'Parameter stop_px is required');
assert(params.time_in_force, 'Parameter time_in_force is required');
if (params.order_type === 'Limit') assert(params.price, 'Parameter price is required for limit orders');
return await this.request.post('v2/private/stop-order/create', params);
}
/**
* @deprecated use placeConditionalOrder
*/
async placeConditionalOrderOld(params) {
assert(params, 'No params passed');
assert(params.side, 'Parameter side is required');
assert(params.symbol, 'Parameter symbol is required');
@@ -81,10 +108,28 @@ module.exports = class RestClient {
}
async getConditionalOrder(params) {
assert(params.symbol, 'Parameter symbol is required');
return await this.request.get('v2/private/stop-order/list', params);
}
/**
* @deprecated use placeConditionalOrder
*/
async getConditionalOrderOld(params) {
return await this.request.get('open-api/stop-order/list', params);
}
async cancelConditionalOrder(params) {
assert(params, 'No params passed');
assert(params.stop_order_id || params.order_link_id, 'Parameter stop_order_id OR order_link_id is required');
return await this.request.post('v2/private/stop-order/cancel', params);
}
/**
* @deprecated use cancelConditionalOrder
*/
async cancelConditionalOrderOld(params) {
assert(params, 'No params passed');
assert(params.stop_order_id, 'Parameter stop_order_id is required');
@@ -99,6 +144,17 @@ module.exports = class RestClient {
}
async replaceConditionalOrder(params) {
assert(params, 'No params passed');
assert(params.stop_order_id || params.order_link_id, 'Parameter stop_order_id OR order_link_id is required');
assert(params.symbol, 'Parameter symbol is required');
return await this.request.post('v2/private/stop-order/replace', params);
}
/**
* @deprecated use replaceConditionalOrder
*/
async replaceConditionalOrderOld(params) {
assert(params, 'No params passed');
assert(params.stop_order_id, 'Parameter stop_order_id is required');
assert(params.symbol, 'Parameter symbol is required');
@@ -114,10 +170,17 @@ module.exports = class RestClient {
return await this.request.get('v2/private/stop-order', params);
}
/**
* @deprecated use getPosition() instead
*/
async getUserLeverage() {
return await this.request.get('user/leverage');
}
async getPosition(params) {
return await this.request.get('v2/private/position/list', params);
}
async changeUserLeverage(params) {
assert(params, 'No params passed');
assert(params.leverage, 'Parameter leverage is required');
@@ -126,13 +189,9 @@ module.exports = class RestClient {
return await this.request.post('user/leverage/save', params);
}
async getPosition(params) {
assert(params, 'No params passed');
assert(params.symbol, 'Parameter symbol is required');
return await this.request.get('v2/private/position/list', params);
}
/**
* @deprecated use getPosition() instead
*/
async getPositions() {
return await this.request.get('position/list');
}

View File

@@ -1,7 +1,7 @@
{
"name": "bybit-api",
"version": "1.2.1",
"description": "A node.js wrapper for the Bybit Cryptocurrency Derivative exchange APIs",
"description": "A production-ready Node.js connector for the Bybit APIs and WebSockets",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
@@ -18,13 +18,15 @@
"rest api",
"inverse",
"nodejs",
"node",
"trading",
"cryptocurrency",
"bitcoin"
"bitcoin",
"best"
],
"author": "Stefan Aebischer <os@pixtron.ch> (https://pixtron.ch)",
"author": "Tiago Siebler (https://github.com/tiagosiebler)",
"contributors": [
"Tiago Siebler (https://github.com/tiagosiebler)"
"Stefan Aebischer <os@pixtron.ch> (https://pixtron.ch)"
],
"license": "MIT",
"bugs": {