bybit-api 2.4.0-beta.1 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -41
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/inverse-client.d.ts +18 -126
- package/lib/inverse-client.js.map +1 -1
- package/lib/linear-client.d.ts +20 -142
- package/lib/linear-client.js.map +1 -1
- package/lib/spot-client-v3.d.ts +2 -6
- package/lib/spot-client-v3.js.map +1 -1
- package/lib/spot-client.js +1 -1
- package/lib/spot-client.js.map +1 -1
- package/lib/types/request/index.d.ts +2 -1
- package/lib/types/request/index.js +2 -1
- package/lib/types/request/index.js.map +1 -1
- package/lib/types/request/inverse.d.ts +120 -0
- package/lib/types/request/{usdt-perp.js → inverse.js} +1 -1
- package/lib/types/request/inverse.js.map +1 -0
- package/lib/types/request/linear.d.ts +160 -0
- package/lib/types/request/linear.js +3 -0
- package/lib/types/request/linear.js.map +1 -0
- package/lib/types/request/spot.d.ts +5 -0
- package/lib/types/shared.d.ts +4 -1
- package/lib/types/websockets.d.ts +6 -5
- package/lib/util/BaseRestClient.d.ts +4 -8
- package/lib/util/BaseRestClient.js +16 -23
- package/lib/util/BaseRestClient.js.map +1 -1
- package/lib/util/WsStore.d.ts +19 -16
- package/lib/util/WsStore.js +1 -0
- package/lib/util/WsStore.js.map +1 -1
- package/lib/util/node-support.d.ts +1 -0
- package/lib/util/node-support.js +1 -0
- package/lib/util/node-support.js.map +1 -1
- package/lib/util/requestUtils.d.ts +9 -5
- package/lib/util/requestUtils.js +21 -12
- package/lib/util/requestUtils.js.map +1 -1
- package/lib/util/websocket-util.d.ts +38 -8
- package/lib/util/websocket-util.js +252 -32
- package/lib/util/websocket-util.js.map +1 -1
- package/lib/websocket-client.d.ts +63 -30
- package/lib/websocket-client.js +343 -206
- package/lib/websocket-client.js.map +1 -1
- package/package.json +2 -2
- package/lib/types/request/usdt-perp.d.ts +0 -20
- package/lib/types/request/usdt-perp.js.map +0 -1
package/lib/util/WsStore.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import WebSocket from 'isomorphic-ws';
|
|
2
|
+
import { WsKey } from '../types';
|
|
2
3
|
import { DefaultLogger } from './logger';
|
|
3
4
|
export declare enum WsConnectionStateEnum {
|
|
4
5
|
INITIAL = 0,
|
|
@@ -11,7 +12,7 @@ export declare enum WsConnectionStateEnum {
|
|
|
11
12
|
declare type WsTopic = string;
|
|
12
13
|
/**
|
|
13
14
|
* A "Set" is used to ensure we only subscribe to a topic once (tracking a list of unique topics we're expected to be connected to)
|
|
14
|
-
*
|
|
15
|
+
* Note: Accurate duplicate tracking only works for plaintext topics. E.g. JSON objects may not be seen as duplicates if keys are in different orders. If that's needed, check the FTX implementation.
|
|
15
16
|
*/
|
|
16
17
|
declare type WsTopicList = Set<WsTopic>;
|
|
17
18
|
interface WsStoredState {
|
|
@@ -23,6 +24,8 @@ interface WsStoredState {
|
|
|
23
24
|
activePingTimer?: ReturnType<typeof setTimeout> | undefined;
|
|
24
25
|
/** A timer tracking that an upstream heartbeat was sent, expecting a reply before it expires */
|
|
25
26
|
activePongTimer?: ReturnType<typeof setTimeout> | undefined;
|
|
27
|
+
/** If a reconnection is in progress, this will have the timer for the delayed reconnect */
|
|
28
|
+
activeReconnectTimer?: ReturnType<typeof setTimeout> | undefined;
|
|
26
29
|
/**
|
|
27
30
|
* All the topics we are expected to be subscribed to (and we automatically resubscribe to if the connection drops)
|
|
28
31
|
*/
|
|
@@ -33,21 +36,21 @@ export default class WsStore {
|
|
|
33
36
|
private logger;
|
|
34
37
|
constructor(logger: typeof DefaultLogger);
|
|
35
38
|
/** Get WS stored state for key, optionally create if missing */
|
|
36
|
-
get(key:
|
|
37
|
-
get(key:
|
|
38
|
-
getKeys():
|
|
39
|
-
create(key:
|
|
40
|
-
delete(key:
|
|
41
|
-
hasExistingActiveConnection(key:
|
|
42
|
-
getWs(key:
|
|
43
|
-
setWs(key:
|
|
44
|
-
isWsOpen(key:
|
|
45
|
-
getConnectionState(key:
|
|
46
|
-
setConnectionState(key:
|
|
47
|
-
isConnectionState(key:
|
|
48
|
-
getTopics(key:
|
|
39
|
+
get(key: WsKey, createIfMissing?: true): WsStoredState;
|
|
40
|
+
get(key: WsKey, createIfMissing?: false): WsStoredState | undefined;
|
|
41
|
+
getKeys(): WsKey[];
|
|
42
|
+
create(key: WsKey): WsStoredState | undefined;
|
|
43
|
+
delete(key: WsKey): void;
|
|
44
|
+
hasExistingActiveConnection(key: WsKey): boolean;
|
|
45
|
+
getWs(key: WsKey): WebSocket | undefined;
|
|
46
|
+
setWs(key: WsKey, wsConnection: WebSocket): WebSocket;
|
|
47
|
+
isWsOpen(key: WsKey): boolean;
|
|
48
|
+
getConnectionState(key: WsKey): WsConnectionStateEnum;
|
|
49
|
+
setConnectionState(key: WsKey, state: WsConnectionStateEnum): void;
|
|
50
|
+
isConnectionState(key: WsKey, state: WsConnectionStateEnum): boolean;
|
|
51
|
+
getTopics(key: WsKey): WsTopicList;
|
|
49
52
|
getTopicsByKey(): Record<string, WsTopicList>;
|
|
50
|
-
addTopic(key:
|
|
51
|
-
deleteTopic(key:
|
|
53
|
+
addTopic(key: WsKey, topic: WsTopic): WsTopicList;
|
|
54
|
+
deleteTopic(key: WsKey, topic: WsTopic): boolean;
|
|
52
55
|
}
|
|
53
56
|
export {};
|
package/lib/util/WsStore.js
CHANGED
|
@@ -9,6 +9,7 @@ var WsConnectionStateEnum;
|
|
|
9
9
|
WsConnectionStateEnum[WsConnectionStateEnum["CONNECTED"] = 2] = "CONNECTED";
|
|
10
10
|
WsConnectionStateEnum[WsConnectionStateEnum["CLOSING"] = 3] = "CLOSING";
|
|
11
11
|
WsConnectionStateEnum[WsConnectionStateEnum["RECONNECTING"] = 4] = "RECONNECTING";
|
|
12
|
+
// ERROR = 5,
|
|
12
13
|
})(WsConnectionStateEnum = exports.WsConnectionStateEnum || (exports.WsConnectionStateEnum = {}));
|
|
13
14
|
class WsStore {
|
|
14
15
|
constructor(logger) {
|
package/lib/util/WsStore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WsStore.js","sourceRoot":"","sources":["../../src/util/WsStore.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"WsStore.js","sourceRoot":"","sources":["../../src/util/WsStore.ts"],"names":[],"mappings":"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"}
|
package/lib/util/node-support.js
CHANGED
|
@@ -11,6 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.signMessage = void 0;
|
|
13
13
|
const crypto_1 = require("crypto");
|
|
14
|
+
/** This is async because the browser version uses a promise (browser-support) */
|
|
14
15
|
function signMessage(message, secret) {
|
|
15
16
|
return __awaiter(this, void 0, void 0, function* () {
|
|
16
17
|
return crypto_1.createHmac('sha256', secret).update(message).digest('hex');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-support.js","sourceRoot":"","sources":["../../src/util/node-support.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAoC;AAEpC,SAAsB,WAAW,CAC/B,OAAe,EACf,MAAc;;QAEd,OAAO,mBAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;CAAA;AALD,kCAKC"}
|
|
1
|
+
{"version":3,"file":"node-support.js","sourceRoot":"","sources":["../../src/util/node-support.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAoC;AAEpC,iFAAiF;AACjF,SAAsB,WAAW,CAC/B,OAAe,EACf,MAAc;;QAEd,OAAO,mBAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;CAAA;AALD,kCAKC"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
export interface RestClientOptions {
|
|
2
|
+
/** Your API key */
|
|
3
|
+
key?: string;
|
|
4
|
+
/** Your API secret */
|
|
5
|
+
secret?: string;
|
|
6
|
+
/** Set to `true` to connect to testnet. Uses the live environment by default. */
|
|
7
|
+
testnet?: boolean;
|
|
2
8
|
/** Override the max size of the request window (in ms) */
|
|
3
9
|
recv_window?: number;
|
|
4
|
-
/** @deprecated Time sync is now disabled by default. To re-enable it, use enable_time_sync instead. */
|
|
5
|
-
disable_time_sync?: boolean;
|
|
6
10
|
/** Disabled by default. This can help on machines with consistent latency problems. */
|
|
7
11
|
enable_time_sync?: boolean;
|
|
8
12
|
/** How often to sync time drift with bybit servers */
|
|
@@ -18,9 +22,9 @@ export interface RestClientOptions {
|
|
|
18
22
|
parse_exceptions?: boolean;
|
|
19
23
|
}
|
|
20
24
|
export declare function serializeParams(params?: object, strict_validation?: boolean): string;
|
|
21
|
-
export declare function getRestBaseUrl(
|
|
22
|
-
export declare function isWsPong(
|
|
23
|
-
export declare const
|
|
25
|
+
export declare function getRestBaseUrl(useTestnet: boolean, restInverseOptions: RestClientOptions): string;
|
|
26
|
+
export declare function isWsPong(msg: any): boolean;
|
|
27
|
+
export declare const APIID = "bybitapinode";
|
|
24
28
|
/**
|
|
25
29
|
* Used to switch how authentication/requests work under the hood (primarily for SPOT since it's different there)
|
|
26
30
|
*/
|
package/lib/util/requestUtils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.REST_CLIENT_TYPE_ENUM = exports.
|
|
3
|
+
exports.REST_CLIENT_TYPE_ENUM = exports.APIID = exports.isWsPong = exports.getRestBaseUrl = exports.serializeParams = void 0;
|
|
4
4
|
function serializeParams(params = {}, strict_validation = false) {
|
|
5
5
|
return Object.keys(params)
|
|
6
6
|
.sort()
|
|
@@ -14,7 +14,7 @@ function serializeParams(params = {}, strict_validation = false) {
|
|
|
14
14
|
.join('&');
|
|
15
15
|
}
|
|
16
16
|
exports.serializeParams = serializeParams;
|
|
17
|
-
function getRestBaseUrl(
|
|
17
|
+
function getRestBaseUrl(useTestnet, restInverseOptions) {
|
|
18
18
|
const exchangeBaseUrls = {
|
|
19
19
|
livenet: 'https://api.bybit.com',
|
|
20
20
|
testnet: 'https://api-testnet.bybit.com',
|
|
@@ -22,23 +22,32 @@ function getRestBaseUrl(useLivenet, restInverseOptions) {
|
|
|
22
22
|
if (restInverseOptions.baseUrl) {
|
|
23
23
|
return restInverseOptions.baseUrl;
|
|
24
24
|
}
|
|
25
|
-
if (
|
|
26
|
-
return exchangeBaseUrls.
|
|
25
|
+
if (useTestnet) {
|
|
26
|
+
return exchangeBaseUrls.testnet;
|
|
27
27
|
}
|
|
28
|
-
return exchangeBaseUrls.
|
|
28
|
+
return exchangeBaseUrls.livenet;
|
|
29
29
|
}
|
|
30
30
|
exports.getRestBaseUrl = getRestBaseUrl;
|
|
31
|
-
function isWsPong(
|
|
32
|
-
if (
|
|
31
|
+
function isWsPong(msg) {
|
|
32
|
+
if (!msg) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
if (msg.pong || msg.ping) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
if (msg['op'] === 'pong') {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
if (msg['ret_msg'] === 'pong') {
|
|
33
42
|
return true;
|
|
34
43
|
}
|
|
35
|
-
return (
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
44
|
+
return (msg.request &&
|
|
45
|
+
msg.request.op === 'ping' &&
|
|
46
|
+
msg.ret_msg === 'pong' &&
|
|
47
|
+
msg.success === true);
|
|
39
48
|
}
|
|
40
49
|
exports.isWsPong = isWsPong;
|
|
41
|
-
exports.
|
|
50
|
+
exports.APIID = 'bybitapinode';
|
|
42
51
|
/**
|
|
43
52
|
* Used to switch how authentication/requests work under the hood (primarily for SPOT since it's different there)
|
|
44
53
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestUtils.js","sourceRoot":"","sources":["../../src/util/requestUtils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"requestUtils.js","sourceRoot":"","sources":["../../src/util/requestUtils.ts"],"names":[],"mappings":";;;AAgCA,SAAgB,eAAe,CAC7B,SAAiB,EAAE,EACnB,iBAAiB,GAAG,KAAK;IAEzB,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;SACvB,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,iBAAiB,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;YAC9D,MAAM,IAAI,KAAK,CACb,uDAAuD,CACxD,CAAC;SACH;QACD,OAAO,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;IAC3B,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAhBD,0CAgBC;AAED,SAAgB,cAAc,CAC5B,UAAmB,EACnB,kBAAqC;IAErC,MAAM,gBAAgB,GAAG;QACvB,OAAO,EAAE,uBAAuB;QAChC,OAAO,EAAE,+BAA+B;KACzC,CAAC;IAEF,IAAI,kBAAkB,CAAC,OAAO,EAAE;QAC9B,OAAO,kBAAkB,CAAC,OAAO,CAAC;KACnC;IAED,IAAI,UAAU,EAAE;QACd,OAAO,gBAAgB,CAAC,OAAO,CAAC;KACjC;IAED,OAAO,gBAAgB,CAAC,OAAO,CAAC;AAClC,CAAC;AAlBD,wCAkBC;AAED,SAAgB,QAAQ,CAAC,GAAQ;IAC/B,IAAI,CAAC,GAAG,EAAE;QACR,OAAO,KAAK,CAAC;KACd;IACD,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE;QACxB,OAAO,IAAI,CAAC;KACb;IAED,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE;QACxB,OAAO,IAAI,CAAC;KACb;IAED,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,MAAM,EAAE;QAC7B,OAAO,IAAI,CAAC;KACb;IAED,OAAO,CACL,GAAG,CAAC,OAAO;QACX,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,MAAM;QACzB,GAAG,CAAC,OAAO,KAAK,MAAM;QACtB,GAAG,CAAC,OAAO,KAAK,IAAI,CACrB,CAAC;AACJ,CAAC;AAtBD,4BAsBC;AAEY,QAAA,KAAK,GAAG,cAAc,CAAC;AAEpC;;GAEG;AACU,QAAA,qBAAqB,GAAG;IACnC,YAAY,EAAE,cAAc;IAC5B,OAAO,EAAE,SAAS;IAClB,cAAc,EAAE,gBAAgB;IAChC,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,IAAI;CACA,CAAC"}
|
|
@@ -1,8 +1,38 @@
|
|
|
1
|
-
import { WsKey } from '../types';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { APIMarket, WsKey } from '../types';
|
|
2
|
+
interface NetworkMapV3 {
|
|
3
|
+
livenet: string;
|
|
4
|
+
livenet2?: string;
|
|
5
|
+
testnet: string;
|
|
6
|
+
testnet2?: string;
|
|
7
|
+
}
|
|
8
|
+
declare type PublicPrivateNetwork = 'public' | 'private';
|
|
9
|
+
export declare const WS_BASE_URL_MAP: Record<APIMarket | 'unifiedPerpUSDT' | 'unifiedPerpUSDC', Record<PublicPrivateNetwork, NetworkMapV3>>;
|
|
10
|
+
export declare const WS_KEY_MAP: {
|
|
11
|
+
readonly inverse: "inverse";
|
|
12
|
+
readonly linearPrivate: "linearPrivate";
|
|
13
|
+
readonly linearPublic: "linearPublic";
|
|
14
|
+
readonly spotPrivate: "spotPrivate";
|
|
15
|
+
readonly spotPublic: "spotPublic";
|
|
16
|
+
readonly spotV3Private: "spotV3Private";
|
|
17
|
+
readonly spotV3Public: "spotV3Public";
|
|
18
|
+
readonly usdcOptionPrivate: "usdcOptionPrivate";
|
|
19
|
+
readonly usdcOptionPublic: "usdcOptionPublic";
|
|
20
|
+
readonly usdcPerpPrivate: "usdcPerpPrivate";
|
|
21
|
+
readonly usdcPerpPublic: "usdcPerpPublic";
|
|
22
|
+
readonly unifiedPrivate: "unifiedPrivate";
|
|
23
|
+
readonly unifiedOptionPublic: "unifiedOptionPublic";
|
|
24
|
+
readonly unifiedPerpUSDTPublic: "unifiedPerpUSDTPublic";
|
|
25
|
+
readonly unifiedPerpUSDCPublic: "unifiedPerpUSDCPublic";
|
|
26
|
+
};
|
|
27
|
+
export declare const WS_AUTH_ON_CONNECT_KEYS: WsKey[];
|
|
28
|
+
export declare const PUBLIC_WS_KEYS: string[];
|
|
29
|
+
export declare function getWsKeyForTopic(market: APIMarket, topic: string, isPrivate?: boolean): WsKey;
|
|
30
|
+
export declare function getUsdcWsKeyForTopic(topic: string, subGroup: 'option' | 'perp'): WsKey;
|
|
31
|
+
export declare const WS_ERROR_ENUM: {
|
|
32
|
+
NOT_AUTHENTICATED_SPOT_V3: string;
|
|
33
|
+
API_ERROR_GENERIC: string;
|
|
34
|
+
API_SIGN_AUTH_FAILED: string;
|
|
35
|
+
USDC_OPTION_AUTH_FAILED: string;
|
|
36
|
+
};
|
|
37
|
+
export declare function neverGuard(x: never, msg: string): Error;
|
|
38
|
+
export {};
|
|
@@ -1,39 +1,259 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
3
|
+
exports.neverGuard = exports.WS_ERROR_ENUM = exports.getUsdcWsKeyForTopic = exports.getWsKeyForTopic = exports.PUBLIC_WS_KEYS = exports.WS_AUTH_ON_CONNECT_KEYS = exports.WS_KEY_MAP = exports.WS_BASE_URL_MAP = void 0;
|
|
4
|
+
exports.WS_BASE_URL_MAP = {
|
|
5
|
+
inverse: {
|
|
6
|
+
public: {
|
|
7
|
+
livenet: 'wss://stream.bybit.com/realtime',
|
|
8
|
+
testnet: 'wss://stream-testnet.bybit.com/realtime',
|
|
9
|
+
},
|
|
10
|
+
private: {
|
|
11
|
+
livenet: 'wss://stream.bybit.com/realtime',
|
|
12
|
+
testnet: 'wss://stream-testnet.bybit.com/realtime',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
linear: {
|
|
16
|
+
public: {
|
|
17
|
+
livenet: 'wss://stream.bybit.com/realtime_public',
|
|
18
|
+
livenet2: 'wss://stream.bytick.com/realtime_public',
|
|
19
|
+
testnet: 'wss://stream-testnet.bybit.com/realtime_public',
|
|
20
|
+
},
|
|
21
|
+
private: {
|
|
22
|
+
livenet: 'wss://stream.bybit.com/realtime_private',
|
|
23
|
+
livenet2: 'wss://stream.bytick.com/realtime_private',
|
|
24
|
+
testnet: 'wss://stream-testnet.bybit.com/realtime_private',
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
spot: {
|
|
28
|
+
public: {
|
|
29
|
+
livenet: 'wss://stream.bybit.com/spot/quote/ws/v1',
|
|
30
|
+
livenet2: 'wss://stream.bybit.com/spot/quote/ws/v2',
|
|
31
|
+
testnet: 'wss://stream-testnet.bybit.com/spot/quote/ws/v1',
|
|
32
|
+
testnet2: 'wss://stream-testnet.bybit.com/spot/quote/ws/v2',
|
|
33
|
+
},
|
|
34
|
+
private: {
|
|
35
|
+
livenet: 'wss://stream.bybit.com/spot/ws',
|
|
36
|
+
testnet: 'wss://stream-testnet.bybit.com/spot/ws',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
spotv3: {
|
|
40
|
+
public: {
|
|
41
|
+
livenet: 'wss://stream.bybit.com/spot/public/v3',
|
|
42
|
+
testnet: 'wss://stream-testnet.bybit.com/spot/public/v3',
|
|
43
|
+
},
|
|
44
|
+
private: {
|
|
45
|
+
livenet: 'wss://stream.bybit.com/spot/private/v3',
|
|
46
|
+
testnet: 'wss://stream-testnet.bybit.com/spot/private/v3',
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
usdcOption: {
|
|
50
|
+
public: {
|
|
51
|
+
livenet: 'wss://stream.bybit.com/trade/option/usdc/public/v1',
|
|
52
|
+
livenet2: 'wss://stream.bytick.com/trade/option/usdc/public/v1',
|
|
53
|
+
testnet: 'wss://stream-testnet.bybit.com/trade/option/usdc/public/v1',
|
|
54
|
+
},
|
|
55
|
+
private: {
|
|
56
|
+
livenet: 'wss://stream.bybit.com/trade/option/usdc/private/v1',
|
|
57
|
+
livenet2: 'wss://stream.bytick.com/trade/option/usdc/private/v1',
|
|
58
|
+
testnet: 'wss://stream-testnet.bybit.com/trade/option/usdc/private/v1',
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
usdcPerp: {
|
|
62
|
+
public: {
|
|
63
|
+
livenet: 'wss://stream.bybit.com/perpetual/ws/v1/realtime_public',
|
|
64
|
+
livenet2: 'wss://stream.bytick.com/perpetual/ws/v1/realtime_public',
|
|
65
|
+
testnet: 'wss://stream-testnet.bybit.com/perpetual/ws/v1/realtime_public',
|
|
66
|
+
},
|
|
67
|
+
private: {
|
|
68
|
+
livenet: 'wss://stream.bybit.com/trade/option/usdc/private/v1',
|
|
69
|
+
livenet2: 'wss://stream.bytick.com/trade/option/usdc/private/v1',
|
|
70
|
+
testnet: 'wss://stream-testnet.bybit.com/trade/option/usdc/private/v1',
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
unifiedOption: {
|
|
74
|
+
public: {
|
|
75
|
+
livenet: 'wss://stream.bybit.com/option/usdc/public/v3',
|
|
76
|
+
testnet: 'wss://stream-testnet.bybit.com/option/usdc/public/v3',
|
|
77
|
+
},
|
|
78
|
+
private: {
|
|
79
|
+
livenet: 'wss://stream.bybit.com/unified/private/v3',
|
|
80
|
+
testnet: 'wss://stream-testnet.bybit.com/unified/private/v3',
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
unifiedPerp: {
|
|
84
|
+
public: {
|
|
85
|
+
livenet: 'useBaseSpecificEndpoint',
|
|
86
|
+
testnet: 'useBaseSpecificEndpoint',
|
|
87
|
+
},
|
|
88
|
+
private: {
|
|
89
|
+
livenet: 'wss://stream.bybit.com/unified/private/v3',
|
|
90
|
+
testnet: 'wss://stream-testnet.bybit.com/unified/private/v3',
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
unifiedPerpUSDT: {
|
|
94
|
+
public: {
|
|
95
|
+
livenet: 'wss://stream.bybit.com/contract/usdt/public/v3',
|
|
96
|
+
testnet: 'wss://stream-testnet.bybit.com/contract/usdt/public/v3',
|
|
97
|
+
},
|
|
98
|
+
private: {
|
|
99
|
+
livenet: 'useUnifiedEndpoint',
|
|
100
|
+
testnet: 'useUnifiedEndpoint',
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
unifiedPerpUSDC: {
|
|
104
|
+
public: {
|
|
105
|
+
livenet: 'wss://stream.bybit.com/contract/usdc/public/v3',
|
|
106
|
+
testnet: 'wss://stream-testnet.bybit.com/contract/usdc/public/v3',
|
|
107
|
+
},
|
|
108
|
+
private: {
|
|
109
|
+
livenet: 'useUnifiedEndpoint',
|
|
110
|
+
testnet: 'useUnifiedEndpoint',
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
exports.WS_KEY_MAP = {
|
|
115
|
+
inverse: 'inverse',
|
|
116
|
+
linearPrivate: 'linearPrivate',
|
|
117
|
+
linearPublic: 'linearPublic',
|
|
118
|
+
spotPrivate: 'spotPrivate',
|
|
119
|
+
spotPublic: 'spotPublic',
|
|
120
|
+
spotV3Private: 'spotV3Private',
|
|
121
|
+
spotV3Public: 'spotV3Public',
|
|
122
|
+
usdcOptionPrivate: 'usdcOptionPrivate',
|
|
123
|
+
usdcOptionPublic: 'usdcOptionPublic',
|
|
124
|
+
usdcPerpPrivate: 'usdcPerpPrivate',
|
|
125
|
+
usdcPerpPublic: 'usdcPerpPublic',
|
|
126
|
+
unifiedPrivate: 'unifiedPrivate',
|
|
127
|
+
unifiedOptionPublic: 'unifiedOptionPublic',
|
|
128
|
+
unifiedPerpUSDTPublic: 'unifiedPerpUSDTPublic',
|
|
129
|
+
unifiedPerpUSDCPublic: 'unifiedPerpUSDCPublic',
|
|
130
|
+
};
|
|
131
|
+
exports.WS_AUTH_ON_CONNECT_KEYS = [
|
|
132
|
+
exports.WS_KEY_MAP.spotV3Private,
|
|
133
|
+
exports.WS_KEY_MAP.usdcOptionPrivate,
|
|
134
|
+
exports.WS_KEY_MAP.usdcPerpPrivate,
|
|
135
|
+
];
|
|
136
|
+
exports.PUBLIC_WS_KEYS = [
|
|
137
|
+
exports.WS_KEY_MAP.linearPublic,
|
|
138
|
+
exports.WS_KEY_MAP.spotPublic,
|
|
139
|
+
exports.WS_KEY_MAP.spotV3Public,
|
|
140
|
+
exports.WS_KEY_MAP.usdcOptionPublic,
|
|
141
|
+
exports.WS_KEY_MAP.usdcPerpPublic,
|
|
142
|
+
exports.WS_KEY_MAP.unifiedOptionPublic,
|
|
143
|
+
exports.WS_KEY_MAP.unifiedPerpUSDTPublic,
|
|
144
|
+
exports.WS_KEY_MAP.unifiedPerpUSDCPublic,
|
|
145
|
+
];
|
|
146
|
+
/** Used to automatically determine if a sub request should be to the public or private ws (when there's two) */
|
|
147
|
+
const PRIVATE_TOPICS = [
|
|
148
|
+
'position',
|
|
149
|
+
'execution',
|
|
150
|
+
'order',
|
|
151
|
+
'stop_order',
|
|
152
|
+
'wallet',
|
|
153
|
+
'outboundAccountInfo',
|
|
154
|
+
'executionReport',
|
|
155
|
+
'ticketInfo',
|
|
156
|
+
// copy trading apis
|
|
157
|
+
'copyTradePosition',
|
|
158
|
+
'copyTradeOrder',
|
|
159
|
+
'copyTradeExecution',
|
|
160
|
+
'copyTradeWallet',
|
|
161
|
+
// usdc options
|
|
162
|
+
'user.openapi.option.position',
|
|
163
|
+
'user.openapi.option.trade',
|
|
164
|
+
'user.order',
|
|
165
|
+
'user.openapi.option.order',
|
|
166
|
+
'user.service',
|
|
167
|
+
'user.openapi.greeks',
|
|
168
|
+
'user.mmp.event',
|
|
169
|
+
// usdc perps
|
|
170
|
+
'user.openapi.perp.position',
|
|
171
|
+
'user.openapi.perp.trade',
|
|
172
|
+
'user.openapi.perp.order',
|
|
173
|
+
'user.service',
|
|
174
|
+
// unified margin
|
|
175
|
+
'user.position.unifiedAccount',
|
|
176
|
+
'user.execution.unifiedAccount',
|
|
177
|
+
'user.order.unifiedAccount',
|
|
178
|
+
'user.wallet.unifiedAccount',
|
|
179
|
+
'user.greeks.unifiedAccount',
|
|
180
|
+
];
|
|
181
|
+
function getWsKeyForTopic(market, topic, isPrivate) {
|
|
182
|
+
const isPrivateTopic = isPrivate === true || PRIVATE_TOPICS.includes(topic);
|
|
183
|
+
switch (market) {
|
|
184
|
+
case 'inverse': {
|
|
185
|
+
return exports.WS_KEY_MAP.inverse;
|
|
186
|
+
}
|
|
187
|
+
case 'linear': {
|
|
188
|
+
return isPrivateTopic
|
|
189
|
+
? exports.WS_KEY_MAP.linearPrivate
|
|
190
|
+
: exports.WS_KEY_MAP.linearPublic;
|
|
191
|
+
}
|
|
192
|
+
case 'spot': {
|
|
193
|
+
return isPrivateTopic ? exports.WS_KEY_MAP.spotPrivate : exports.WS_KEY_MAP.spotPublic;
|
|
194
|
+
}
|
|
195
|
+
case 'spotv3': {
|
|
196
|
+
return isPrivateTopic
|
|
197
|
+
? exports.WS_KEY_MAP.spotV3Private
|
|
198
|
+
: exports.WS_KEY_MAP.spotV3Public;
|
|
199
|
+
}
|
|
200
|
+
case 'usdcOption': {
|
|
201
|
+
return isPrivateTopic
|
|
202
|
+
? exports.WS_KEY_MAP.usdcOptionPrivate
|
|
203
|
+
: exports.WS_KEY_MAP.usdcOptionPublic;
|
|
204
|
+
}
|
|
205
|
+
case 'usdcPerp': {
|
|
206
|
+
return isPrivateTopic
|
|
207
|
+
? exports.WS_KEY_MAP.usdcPerpPrivate
|
|
208
|
+
: exports.WS_KEY_MAP.usdcPerpPublic;
|
|
209
|
+
}
|
|
210
|
+
case 'unifiedOption': {
|
|
211
|
+
return isPrivateTopic
|
|
212
|
+
? exports.WS_KEY_MAP.unifiedPrivate
|
|
213
|
+
: exports.WS_KEY_MAP.unifiedOptionPublic;
|
|
214
|
+
}
|
|
215
|
+
case 'unifiedPerp': {
|
|
216
|
+
if (isPrivateTopic) {
|
|
217
|
+
return exports.WS_KEY_MAP.unifiedPrivate;
|
|
218
|
+
}
|
|
219
|
+
const upperTopic = topic.toUpperCase();
|
|
220
|
+
if (upperTopic.indexOf('USDT') !== -1) {
|
|
221
|
+
return exports.WS_KEY_MAP.unifiedPerpUSDTPublic;
|
|
222
|
+
}
|
|
223
|
+
if (upperTopic.indexOf('USDC') !== -1) {
|
|
224
|
+
return exports.WS_KEY_MAP.unifiedPerpUSDCPublic;
|
|
225
|
+
}
|
|
226
|
+
throw new Error(`Failed to determine wskey for unified perps topic: "${topic}`);
|
|
227
|
+
}
|
|
228
|
+
default: {
|
|
229
|
+
throw neverGuard(market, `getWsKeyForTopic(): Unhandled market`);
|
|
230
|
+
}
|
|
19
231
|
}
|
|
20
|
-
return exports.wsKeyLinearPublic;
|
|
21
232
|
}
|
|
22
|
-
exports.
|
|
23
|
-
function
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
'outboundAccountInfo',
|
|
30
|
-
'executionReport',
|
|
31
|
-
'ticketInfo',
|
|
32
|
-
];
|
|
33
|
-
if (privateLinearTopics.includes(topic)) {
|
|
34
|
-
return exports.wsKeySpotPrivate;
|
|
233
|
+
exports.getWsKeyForTopic = getWsKeyForTopic;
|
|
234
|
+
function getUsdcWsKeyForTopic(topic, subGroup) {
|
|
235
|
+
const isPrivateTopic = PRIVATE_TOPICS.includes(topic);
|
|
236
|
+
if (subGroup === 'option') {
|
|
237
|
+
return isPrivateTopic
|
|
238
|
+
? exports.WS_KEY_MAP.usdcOptionPrivate
|
|
239
|
+
: exports.WS_KEY_MAP.usdcOptionPublic;
|
|
35
240
|
}
|
|
36
|
-
return
|
|
241
|
+
return isPrivateTopic
|
|
242
|
+
? exports.WS_KEY_MAP.usdcOptionPrivate
|
|
243
|
+
: exports.WS_KEY_MAP.usdcOptionPublic;
|
|
244
|
+
// return isPrivateTopic
|
|
245
|
+
// ? WS_KEY_MAP.usdcPerpPrivate
|
|
246
|
+
// : WS_KEY_MAP.usdcPerpPublic;
|
|
37
247
|
}
|
|
38
|
-
exports.
|
|
248
|
+
exports.getUsdcWsKeyForTopic = getUsdcWsKeyForTopic;
|
|
249
|
+
exports.WS_ERROR_ENUM = {
|
|
250
|
+
NOT_AUTHENTICATED_SPOT_V3: '-1004',
|
|
251
|
+
API_ERROR_GENERIC: '10001',
|
|
252
|
+
API_SIGN_AUTH_FAILED: '10003',
|
|
253
|
+
USDC_OPTION_AUTH_FAILED: '3303006',
|
|
254
|
+
};
|
|
255
|
+
function neverGuard(x, msg) {
|
|
256
|
+
return new Error(`Unhandled value exception "x", ${msg}`);
|
|
257
|
+
}
|
|
258
|
+
exports.neverGuard = neverGuard;
|
|
39
259
|
//# sourceMappingURL=websocket-util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-util.js","sourceRoot":"","sources":["../../src/util/websocket-util.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"websocket-util.js","sourceRoot":"","sources":["../../src/util/websocket-util.ts"],"names":[],"mappings":"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"}
|