diff --git a/README.md b/README.md index cc83d5e..6b77069 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Node.js & Typescript Bybit API SDK +# Node.js & JavaScript SDK for Bybit REST API & WebSockets [![Tests](https://circleci.com/gh/tiagosiebler/bybit-api.svg?style=shield)](https://circleci.com/gh/tiagosiebler/bybit-api) [![npm version](https://img.shields.io/npm/v/bybit-api)][1] [![npm size](https://img.shields.io/bundlephobia/min/bybit-api/latest)][1] [![npm downloads](https://img.shields.io/npm/dt/bybit-api)][1] @@ -9,9 +9,9 @@ [1]: https://www.npmjs.com/package/bybit-api -Node.js SDK for the Bybit APIs and WebSockets: +Node.js & JavaScript SDK for the Bybit REST APIs and WebSockets: -- Complete integration with all Bybit APIs. +- Complete integration with all Bybit REST APIs & WebSockets. - TypeScript support (with type declarations for most API requests & responses). - Over 450 end-to-end tests making real API calls & WebSocket connections, validating any changes before they reach npm. - Robust WebSocket integration with configurable connection heartbeats & automatic reconnect then resubscribe workflows. @@ -329,15 +329,43 @@ In rare situations, you may want to see the raw HTTP requets being built as well ## Browser Usage +### Import + +This is the "modern" way, allowing the package to be directly imported into frontend projects with full typescript support. + +1. Install these dependencies + ```sh + npm install crypto-browserify stream-browserify + ``` +2. Add this to your `tsconfig.json` + ```json + { + "compilerOptions": { + "paths": { + "crypto": [ + "./node_modules/crypto-browserify" + ], + "stream": [ + "./node_modules/stream-browserify" + ] + } + ``` +3. Declare this in the global context of your application (ex: in polyfills for angular) + ```js + (window as any).global = window; + ``` + +### Webpack + +This is the "old" way of using this package on webpages. This will build a minified js bundle that can be pulled in using a script tag on a website. + Build a bundle using webpack: - `npm install` - `npm build` - `npm pack` -The bundle can be found in `dist/`. Altough usage should be largely consistent, smaller differences will exist. Documentation is still TODO. - -However, note that browser usage will lead to CORS errors due Bybit. See [issue #79](#79) for more information & alternative suggestions. +The bundle can be found in `dist/`. Altough usage should be largely consistent, smaller differences will exist. Documentation is still TODO - contributions welcome. --- diff --git a/package-lock.json b/package-lock.json index aae5929..e545031 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "bybit-api", - "version": "3.7.0", + "version": "3.7.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "bybit-api", - "version": "3.7.0", + "version": "3.7.1", "license": "MIT", "dependencies": { "axios": "^0.21.0", diff --git a/package.json b/package.json index 0ef2f1f..836d4df 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bybit-api", - "version": "3.7.0", + "version": "3.7.1", "description": "Complete & robust Node.js SDK for Bybit's REST APIs and WebSockets, with TypeScript & strong end to end tests.", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/src/rest-client-v5.ts b/src/rest-client-v5.ts index e521329..9653caa 100644 --- a/src/rest-client-v5.ts +++ b/src/rest-client-v5.ts @@ -46,8 +46,8 @@ import { FeeRateV5, FundingRateHistoryResponseV5, GetAccountCoinBalanceParamsV5, - GetAccountHistoricOrdersPArams, - GetAccountOrdersParams, + GetAccountHistoricOrdersParamsV5, + GetAccountOrdersParamsV5, GetAllCoinsBalanceParamsV5, GetAllowedDepositCoinInfoParamsV5, GetAssetInfoParamsV5, @@ -392,7 +392,7 @@ export class RestClientV5 extends BaseRestClient { * Query unfilled or partially filled orders in real-time. To query older order records, please use the order history interface. */ getActiveOrders( - params: GetAccountOrdersParams, + params: GetAccountOrdersParamsV5, ): Promise>> { return this.getPrivate('/v5/order/realtime', params); } @@ -409,7 +409,7 @@ export class RestClientV5 extends BaseRestClient { * If you want to get real-time order information, you could query this endpoint or rely on the websocket stream (recommended). */ getHistoricOrders( - params: GetAccountHistoricOrdersPArams, + params: GetAccountHistoricOrdersParamsV5, ): Promise>> { return this.getPrivate('/v5/order/history', params); } diff --git a/src/types/request/v5-trade.ts b/src/types/request/v5-trade.ts index f34f548..3751c38 100644 --- a/src/types/request/v5-trade.ts +++ b/src/types/request/v5-trade.ts @@ -67,7 +67,7 @@ export interface CancelOrderParamsV5 { orderFilter?: OrderFilterV5; } -export interface GetAccountOrdersParams { +export interface GetAccountOrdersParamsV5 { category: CategoryV5; symbol?: string; baseCoin?: string; @@ -81,7 +81,7 @@ export interface GetAccountOrdersParams { cursor?: string; } -export interface GetAccountHistoricOrdersPArams { +export interface GetAccountHistoricOrdersParamsV5 { category: CategoryV5; symbol?: string; baseCoin?: string; diff --git a/src/util/websocket-util.ts b/src/util/websocket-util.ts index ec69dfa..a2d27f8 100644 --- a/src/util/websocket-util.ts +++ b/src/util/websocket-util.ts @@ -1,4 +1,5 @@ import { APIMarket, CategoryV5, WsKey } from '../types'; +import { DefaultLogger } from './logger'; interface NetworkMapV3 { livenet: string; @@ -397,6 +398,7 @@ export function getWsUrl( wsKey: WsKey, wsUrl: string | undefined, isTestnet: boolean, + logger: typeof DefaultLogger, ): string { if (wsUrl) { return wsUrl; @@ -479,7 +481,7 @@ export function getWsUrl( return WS_BASE_URL_MAP.v5OptionPublic.public[networkKey]; } default: { - this.logger.error('getWsUrl(): Unhandled wsKey: ', { + logger.error('getWsUrl(): Unhandled wsKey: ', { category: 'bybit-ws', wsKey, }); diff --git a/src/websocket-client.ts b/src/websocket-client.ts index 3ecaa96..f48a847 100644 --- a/src/websocket-client.ts +++ b/src/websocket-client.ts @@ -621,7 +621,12 @@ export class WebsocketClient extends EventEmitter { } const authParams = await this.getAuthParams(wsKey); - const url = getWsUrl(wsKey, this.options.wsUrl, this.isTestnet()); + const url = getWsUrl( + wsKey, + this.options.wsUrl, + this.isTestnet(), + this.logger, + ); const ws = this.connectToWsUrl(url + authParams, wsKey); return this.wsStore.setWs(wsKey, ws); diff --git a/webpack/webpack.config.js b/webpack/webpack.config.js index f13eab8..75aefc3 100644 --- a/webpack/webpack.config.js +++ b/webpack/webpack.config.js @@ -21,6 +21,7 @@ function generateConfig(name) { alias: { [path.resolve(__dirname, "../lib/util/node-support.js")]: path.resolve(__dirname, "../lib/util/browser-support.js"), + process: "process/browser", } },