@anrmk/str-package 0.2.3 → 0.2.4
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/dist/{chunk-GAC2TIJ2.js → chunk-6BR57NUP.js} +11 -11
- package/dist/chunk-6BR57NUP.js.map +1 -0
- package/dist/{chunk-HIBB2SSL.js → chunk-F4CGZFA5.js} +7 -3
- package/dist/chunk-F4CGZFA5.js.map +1 -0
- package/dist/clients/index.cjs +58 -0
- package/dist/clients/index.cjs.map +1 -1
- package/dist/clients/index.d.cts +2 -1
- package/dist/clients/index.d.ts +2 -1
- package/dist/clients/index.js +2 -2
- package/dist/index.cjs +13 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/providers/bybit/index.cjs +9 -9
- package/dist/providers/bybit/index.cjs.map +1 -1
- package/dist/providers/bybit/index.d.cts +2 -2
- package/dist/providers/bybit/index.d.ts +2 -2
- package/dist/providers/bybit/index.js +1 -1
- package/dist/types/bybit/index.d.cts +50 -38
- package/dist/types/bybit/index.d.ts +50 -38
- package/dist/utils/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-GAC2TIJ2.js.map +0 -1
- package/dist/chunk-HIBB2SSL.js.map +0 -1
|
@@ -207,20 +207,20 @@ async function getClosedPnl(credentials, payload, timeOffset) {
|
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
// src/providers/bybit/get-position-info.ts
|
|
210
|
-
|
|
210
|
+
var DEFAULT_SETTLE_COIN = "USDT";
|
|
211
|
+
var DEFAULT_CATEGORY = "linear";
|
|
212
|
+
async function getPositionInfo(credentials, payload, timeOffset) {
|
|
211
213
|
const query = new URLSearchParams({
|
|
212
|
-
|
|
214
|
+
settleCoin: payload.settleCoin ?? DEFAULT_SETTLE_COIN,
|
|
215
|
+
category: payload.category ?? DEFAULT_CATEGORY,
|
|
213
216
|
limit: "50"
|
|
214
217
|
//default limit
|
|
215
218
|
});
|
|
216
|
-
if (typeof symbol === "string") {
|
|
217
|
-
query.set("symbol", String(symbol));
|
|
219
|
+
if (typeof payload?.symbol === "string") {
|
|
220
|
+
query.set("symbol", String(payload.symbol));
|
|
218
221
|
}
|
|
219
|
-
if (typeof
|
|
220
|
-
query.set("
|
|
221
|
-
}
|
|
222
|
-
if (typeof cursor === "string") {
|
|
223
|
-
query.set("cursor", String(cursor));
|
|
222
|
+
if (typeof payload?.cursor === "string") {
|
|
223
|
+
query.set("cursor", String(payload.cursor));
|
|
224
224
|
}
|
|
225
225
|
const queryString = query.toString();
|
|
226
226
|
const { signature, timestamp } = signBybitRequest({
|
|
@@ -337,5 +337,5 @@ async function getServerTime() {
|
|
|
337
337
|
}
|
|
338
338
|
|
|
339
339
|
export { applyDemoMoney, getAccountInfo, getApiKeyInfo, getBybitTimestamp, getClosedPnl, getPositionInfo, getServerTime, getWalletBalance, signBybitRequest, syncBybitServerTime };
|
|
340
|
-
//# sourceMappingURL=chunk-
|
|
341
|
-
//# sourceMappingURL=chunk-
|
|
340
|
+
//# sourceMappingURL=chunk-6BR57NUP.js.map
|
|
341
|
+
//# sourceMappingURL=chunk-6BR57NUP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/bybit/constants.ts","../src/utils/bybitHelper.ts","../src/providers/bybit/get-api-key-info.ts","../src/providers/bybit/get-account-info.ts","../src/providers/bybit/get-wallet-balance.ts","../src/providers/bybit/get-closed-pnl.ts","../src/providers/bybit/get-position-info.ts","../src/providers/bybit/apply-demo-money.ts","../src/providers/bybit/get-server-time.ts"],"names":[],"mappings":"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","file":"chunk-6BR57NUP.js","sourcesContent":["export const BYBIT_CONSTANTS = {\n baseUrl: process.env.BYBIT_BASE_URL || \"https://api-demo.bybit.com\",\n fetchTimeoutMs: Number(process.env.BYBIT_FETCH_TIMEOUT_MS) || 10000,\n recvWindowTimeoutMs: process.env.BYBIT_RECV_WINDOW_TIMEOUT_MS || \"5000\",\n}","import { createHmac } from \"crypto\";\nimport { env } from \"node:process\";\nimport { getServerTime } from \"../providers/bybit\";\nimport { BYBIT_CONSTANTS } from \"../providers/bybit/constants\";\nimport type { IBybitSignRequest } from \"../types/bybit\";\n\nexport function signBybitRequest(request: IBybitSignRequest) {\n const { credentials, queryString, timeOffset } = request;\n const { apiSecret, apiKey } = credentials;\n\n const timestamp = getBybitTimestamp(timeOffset);\n\n const payload = `${timestamp}${apiKey}${BYBIT_CONSTANTS.recvWindowTimeoutMs}${queryString ?? \"\"}`;\n const signature = createHmac(\"sha256\", apiSecret)\n .update(payload)\n .digest(\"hex\");\n\n return { signature, timestamp };\n}\n\nexport async function syncBybitServerTime(): Promise<number> {\n const localTimeBefore = Date.now();\n const { result } = await getServerTime();\n\n const serverTime = parseInt(result.timeNano, 10) / 1000000;\n const localTimeAfter = Date.now();\n\n // Estimate the local time at which Bybit generated\n // the response by using the midpoint.\n const estimatedLatency = (localTimeAfter - localTimeBefore) / 2;\n const timeOffset = Math.round(serverTime - (localTimeBefore + estimatedLatency));\n\n return timeOffset;\n}\n\nexport function getBybitTimestamp(timeOffset: number = 0): string {\n return String(Date.now() + timeOffset);\n}","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitCredentials, IBybitApiKeyInfo, IBybitApiResponse} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\nexport async function getApiKeyInfo(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiKeyInfo>> {\n const { signature, timestamp } = signBybitRequest({\n credentials,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/user/query-api`, {\n headers: {\n \"X-BAPI-API-KEY\": credentials.apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n //signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n });\n } catch (error) {\n console.error(\"ByBit API Key Info network error\", error);\n throw new Error(\"ByBit API Key Info network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit API Key Info request failed\", bybitRes);\n throw new Error(\"ByBit API Key Info request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitApiKeyInfo>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit API Key Info API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n if (!bybitJson) {\n console.error(\"Invalid ByBit API Key Info response\", bybitJson);\n throw new Error(\"Invalid ByBit API Key Info response\");\n }\n\n return bybitJson;\n}\n","import {\n IBybitCredentials,\n IBybitAccountInfo,\n IBybitApiResponse,\n} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\nimport { BYBIT_CONSTANTS } from \"./constants\";\n\nexport async function getAccountInfo(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitAccountInfo>> {\n const { apiKey, apiSecret } = credentials;\n const queryString = \"accountType=UNIFIED\";\n \n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/account/info`, {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n });\n } catch (error) {\n console.error(\"ByBit Account API network error\", error);\n throw new Error(\"ByBit Account API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Account API request failed\", bybitRes);\n throw new Error(\"ByBit Account API request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitAccountInfo>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Account API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n const raw = bybitJson.result?.list?.[0];\n\n if (!raw) {\n console.error(\"No account info returned\", bybitJson);\n throw new Error(\"No account info returned\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitApiResponse, IBybitWalletAccount, IBybitCredentials } from \"../../types/bybit\";\n\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// GET /api/bybit/wallet-balance?accountType=UNIFIED\nexport async function getWalletBalance(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitWalletAccount>> {\n const { apiKey } = credentials;\n\n const query = new URLSearchParams({\n accountType: \"UNIFIED\",\n coin: \"USDT\",\n });\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/account/wallet-balance?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n },\n );\n } catch (error) {\n console.error(\"ByBit Wallet API network error\", error);\n throw new Error(\"ByBit Wallet API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Wallet API request failed\", bybitRes);\n throw new Error(\"ByBit Wallet API request failed: \" + bybitRes.statusText);\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitWalletAccount>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Wallet API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitCredentials, IBybitApiResponse, IBybitApiResponseList, IBybitClosedPnl, IBybitClosedPnlRequest } from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// GET /api/bybit/wallet-balance?accountType=UNIFIED\nexport async function getClosedPnl(\n credentials: IBybitCredentials,\n payload: IBybitClosedPnlRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>> {\n const { apiKey } = credentials;\n const query = new URLSearchParams({\n category: \"linear\",\n //symbol: \"BTCUSDT\",\n limit: \"50\", //default limit\n });\n\n if (typeof payload.startTime === \"number\") {\n query.set(\"startTime\", String(payload.startTime));\n }\n\n if (typeof payload.endTime === \"number\") {\n query.set(\"endTime\", String(payload.endTime));\n }\n\n if (typeof payload.cursor === \"string\") {\n query.set(\"cursor\", String(payload.cursor));\n }\n\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/position/closed-pnl?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n },\n );\n } catch (error) {\n console.error(\"ByBit Closed PNL API network error\", error);\n throw new Error(\"ByBit Closed PNL API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Closed PNL API request failed\", bybitRes);\n throw new Error(\"ByBit Closed PNL API request failed\");\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Closed PNL API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport {\n IBybitCredentials,\n IBybitApiResponse,\n IBybitApiResponseList,\n IBybitPositionInfo,\n IBybitPositionInfoRequest,\n} from \"../../types/bybit\";\n\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\nconst DEFAULT_SETTLE_COIN = \"USDT\";\nconst DEFAULT_CATEGORY = \"linear\";\n\n// Query real-time position data, such as position size, cumulative realized PNL, etc.\nexport async function getPositionInfo(\n credentials: IBybitCredentials,\n payload: IBybitPositionInfoRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>> {\n const query = new URLSearchParams({\n settleCoin: payload.settleCoin ?? DEFAULT_SETTLE_COIN,\n category: payload.category ?? DEFAULT_CATEGORY,\n limit: \"50\", //default limit\n });\n\n if (typeof payload?.symbol === \"string\") {\n query.set(\"symbol\", String(payload.symbol));\n }\n\n if (typeof payload?.cursor === \"string\") {\n query.set(\"cursor\", String(payload.cursor));\n }\n\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/position/list?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": credentials.apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n },\n );\n } catch (error) {\n console.error(\"ByBit Position Info API network error\", { cause: error });\n throw new Error(\"ByBit Position Info API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Position Info API request failed\", bybitRes);\n throw new Error(\"ByBit Position Info API request failed\");\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>;\n \n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Position Info API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\n\nimport {\n IBybitCredentials,\n IBybitApiResponse,\n IBybitAccountInfo,\n IBybitDemoApplyMoneyRequest,\n} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\nimport { IBybitDemoApplyMoney } from \"../../types/bybit/IBybitDemoApplyMoney\";\n\n// POST /api/bybit/apply-money\nexport async function applyDemoMoney(\n credentials: IBybitCredentials,\n payload: IBybitDemoApplyMoneyRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitDemoApplyMoney>> {\n const { apiKey } = credentials;\n\n const requestBody = JSON.stringify(payload);\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString: requestBody,\n timeOffset \n });\n \n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/account/demo-apply-money`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n body: requestBody,\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n },\n );\n } catch (error) {\n throw new Error(\"ByBit Apply Money API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n throw new Error(\"ByBit Apply Money API request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitAccountInfo>;\n\n if (bybitJson.retCode !== 0) {\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitServerTime, IBybitApiResponse } from \"../../types/bybit\";\n\nexport async function getServerTime(): Promise<IBybitApiResponse<IBybitServerTime>> {\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/market/time`,\n {\n cache: \"no-store\",\n }\n );\n } catch (error) {\n console.error(\"ByBit Server Time network error\", error);\n throw new Error(\"ByBit Server Time network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Server Time request failed\", bybitRes.status, bybitRes.statusText);\n throw new Error(`ByBit Server Time request failed: ${bybitRes.status}`);\n }\n\n let bybitJson: IBybitApiResponse<IBybitServerTime>;\n\n try {\n bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitServerTime>;\n } catch (error) {\n console.error(\"Invalid ByBit Server Time response\", error);\n throw new Error(\"Invalid ByBit Server Time response\", { cause: error });\n }\n\n if (!bybitJson) {\n throw new Error(\"Invalid ByBit Server Time response\");\n }\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Server Time API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit server time error\");\n }\n\n return bybitJson;\n}"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { syncBybitServerTime, applyDemoMoney, getAccountInfo, getApiKeyInfo, getClosedPnl, getWalletBalance } from './chunk-
|
|
1
|
+
import { syncBybitServerTime, applyDemoMoney, getAccountInfo, getApiKeyInfo, getClosedPnl, getWalletBalance, getPositionInfo } from './chunk-6BR57NUP.js';
|
|
2
2
|
|
|
3
3
|
// src/clients/BybitClient.ts
|
|
4
4
|
var BybitClient = class {
|
|
@@ -41,8 +41,12 @@ var BybitClient = class {
|
|
|
41
41
|
await this.ready;
|
|
42
42
|
return await getWalletBalance(credentials, this.timeOffset);
|
|
43
43
|
}
|
|
44
|
+
async getPositionInfo(credentials, payload) {
|
|
45
|
+
await this.ready;
|
|
46
|
+
return await getPositionInfo(credentials, payload, this.timeOffset);
|
|
47
|
+
}
|
|
44
48
|
};
|
|
45
49
|
|
|
46
50
|
export { BybitClient };
|
|
47
|
-
//# sourceMappingURL=chunk-
|
|
48
|
-
//# sourceMappingURL=chunk-
|
|
51
|
+
//# sourceMappingURL=chunk-F4CGZFA5.js.map
|
|
52
|
+
//# sourceMappingURL=chunk-F4CGZFA5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/clients/BybitClient.ts"],"names":[],"mappings":";;;AAmBO,IAAM,cAAN,MAAkB;AAAA,EACf,UAAA,GAAa,CAAA;AAAA,EACJ,KAAA;AAAA,EAEjB,WAAA,GAAc;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,oBAAA,EAAqB;AAAA,EACzC;AAAA,EAEA,MAAc,oBAAA,GAAsC;AAClD,IAAA,MAAM,WAAA,GAAc,CAAA;AAEpB,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAW,WAAA,EAAa,WAAW,CAAA,EAAG;AAC1D,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,UAAA,GAAa,MAAM,mBAAA,EAAoB;AAC5C,QAAA;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,IAAI,YAAY,WAAA,EAAa;AAC3B,UAAA,MAAM,KAAA;AAAA,QACR;AAEA,QAAA,MAAM,IAAI,QAAQ,CAAC,OAAA,KAAY,WAAW,OAAA,EAAS,OAAA,GAAU,GAAK,CAAC,CAAA;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cAAA,CACJ,WAAA,EACA,OAAA,EACA;AACA,IAAA,MAAM,IAAA,CAAK,KAAA;AAEX,IAAA,OAAO,MAAM,cAAA,CAAe,WAAA,EAAa,OAAA,EAAS,KAAK,UAAU,CAAA;AAAA,EACnE;AAAA,EAEA,MAAM,eACJ,WAAA,EACA;AACA,IAAA,MAAM,IAAA,CAAK,KAAA;AACX,IAAA,OAAO,MAAM,cAAA,CAAe,WAAA,EAAa,IAAA,CAAK,UAAU,CAAA;AAAA,EAC1D;AAAA,EAEA,MAAM,cACJ,WAAA,EAC8C;AAC9C,IAAA,MAAM,IAAA,CAAK,KAAA;AACX,IAAA,OAAO,MAAM,aAAA,CAAc,WAAA,EAAa,IAAA,CAAK,UAAU,CAAA;AAAA,EACzD;AAAA,EAEA,MAAM,YAAA,CACJ,WAAA,EACA,OAAA,EACA;AACA,IAAA,MAAM,IAAA,CAAK,KAAA;AACX,IAAA,OAAO,MAAM,YAAA,CAAa,WAAA,EAAa,OAAA,EAAS,KAAK,UAAU,CAAA;AAAA,EACjE;AAAA,EAEA,MAAM,iBAAiB,WAAA,EAAgC;AACrD,IAAA,MAAM,IAAA,CAAK,KAAA;AACX,IAAA,OAAO,MAAM,gBAAA,CAAiB,WAAA,EAAa,IAAA,CAAK,UAAU,CAAA;AAAA,EAC5D;AAAA,EAEA,MAAM,eAAA,CACJ,WAAA,EACA,OAAA,EACA;AACA,IAAA,MAAM,IAAA,CAAK,KAAA;AACX,IAAA,OAAO,MAAM,eAAA,CAAgB,WAAA,EAAa,OAAA,EAAS,KAAK,UAAU,CAAA;AAAA,EACpE;AACF","file":"chunk-F4CGZFA5.js","sourcesContent":["import type {\n IBybitApiKeyInfo,\n IBybitApiResponse,\n IBybitClosedPnlRequest,\n IBybitCredentials,\n IBybitDemoApplyMoneyRequest,\n IBybitPositionInfoRequest,\n} from \"../types/bybit\";\nimport { syncBybitServerTime } from \"../utils/bybitHelper\";\n\nimport {\n getApiKeyInfo,\n getClosedPnl,\n getAccountInfo,\n getWalletBalance,\n applyDemoMoney,\n getPositionInfo\n} from \"../providers/bybit\";\n\nexport class BybitClient {\n private timeOffset = 0;\n private readonly ready: Promise<void>;\n\n constructor() {\n this.ready = this.initializeTimeOffset();\n }\n\n private async initializeTimeOffset(): Promise<void> {\n const maxAttempts = 3;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n this.timeOffset = await syncBybitServerTime();\n return;\n } catch (error) {\n if (attempt === maxAttempts) {\n throw error;\n }\n\n await new Promise((resolve) => setTimeout(resolve, attempt * 2_000));\n }\n }\n }\n\n async applyDemoMoney(\n credentials: IBybitCredentials,\n payload: IBybitDemoApplyMoneyRequest,\n ) {\n await this.ready;\n // Implement the logic to apply demo money to the Bybit account using the provided payload\n return await applyDemoMoney(credentials, payload, this.timeOffset);\n }\n\n async getAccountInfo(\n credentials: IBybitCredentials,\n ) {\n await this.ready;\n return await getAccountInfo(credentials, this.timeOffset);\n }\n\n async getApiKeyInfo(\n credentials: IBybitCredentials,\n ): Promise<IBybitApiResponse<IBybitApiKeyInfo>> {\n await this.ready;\n return await getApiKeyInfo(credentials, this.timeOffset);\n }\n\n async getClosedPnl(\n credentials: IBybitCredentials,\n payload: IBybitClosedPnlRequest\n ) {\n await this.ready;\n return await getClosedPnl(credentials, payload, this.timeOffset);\n }\n\n async getWalletBalance(credentials: IBybitCredentials) {\n await this.ready;\n return await getWalletBalance(credentials, this.timeOffset);\n }\n\n async getPositionInfo(\n credentials: IBybitCredentials, \n payload: IBybitPositionInfoRequest\n ) {\n await this.ready;\n return await getPositionInfo(credentials, payload, this.timeOffset);\n }\n}\n"]}
|
package/dist/clients/index.cjs
CHANGED
|
@@ -190,6 +190,60 @@ async function getClosedPnl(credentials, payload, timeOffset) {
|
|
|
190
190
|
return bybitJson;
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
+
// src/providers/bybit/get-position-info.ts
|
|
194
|
+
var DEFAULT_SETTLE_COIN = "USDT";
|
|
195
|
+
var DEFAULT_CATEGORY = "linear";
|
|
196
|
+
async function getPositionInfo(credentials, payload, timeOffset) {
|
|
197
|
+
const query = new URLSearchParams({
|
|
198
|
+
settleCoin: payload.settleCoin ?? DEFAULT_SETTLE_COIN,
|
|
199
|
+
category: payload.category ?? DEFAULT_CATEGORY,
|
|
200
|
+
limit: "50"
|
|
201
|
+
//default limit
|
|
202
|
+
});
|
|
203
|
+
if (typeof payload?.symbol === "string") {
|
|
204
|
+
query.set("symbol", String(payload.symbol));
|
|
205
|
+
}
|
|
206
|
+
if (typeof payload?.cursor === "string") {
|
|
207
|
+
query.set("cursor", String(payload.cursor));
|
|
208
|
+
}
|
|
209
|
+
const queryString = query.toString();
|
|
210
|
+
const { signature, timestamp } = signBybitRequest({
|
|
211
|
+
credentials,
|
|
212
|
+
queryString,
|
|
213
|
+
timeOffset
|
|
214
|
+
});
|
|
215
|
+
let bybitRes;
|
|
216
|
+
try {
|
|
217
|
+
bybitRes = await fetch(
|
|
218
|
+
`${BYBIT_CONSTANTS.baseUrl}/v5/position/list?${queryString}`,
|
|
219
|
+
{
|
|
220
|
+
headers: {
|
|
221
|
+
"X-BAPI-API-KEY": credentials.apiKey,
|
|
222
|
+
"X-BAPI-SIGN": signature,
|
|
223
|
+
"X-BAPI-SIGN-TYPE": "2",
|
|
224
|
+
"X-BAPI-TIMESTAMP": timestamp,
|
|
225
|
+
"X-BAPI-RECV-WINDOW": BYBIT_CONSTANTS.recvWindowTimeoutMs
|
|
226
|
+
},
|
|
227
|
+
signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),
|
|
228
|
+
cache: "no-store"
|
|
229
|
+
}
|
|
230
|
+
);
|
|
231
|
+
} catch (error) {
|
|
232
|
+
console.error("ByBit Position Info API network error", { cause: error });
|
|
233
|
+
throw new Error("ByBit Position Info API network error", { cause: error });
|
|
234
|
+
}
|
|
235
|
+
if (!bybitRes.ok) {
|
|
236
|
+
console.error("ByBit Position Info API request failed", bybitRes);
|
|
237
|
+
throw new Error("ByBit Position Info API request failed");
|
|
238
|
+
}
|
|
239
|
+
const bybitJson = await bybitRes.json();
|
|
240
|
+
if (bybitJson.retCode !== 0) {
|
|
241
|
+
console.error("ByBit Position Info API error", bybitJson);
|
|
242
|
+
throw new Error(bybitJson.retMsg ?? "ByBit error");
|
|
243
|
+
}
|
|
244
|
+
return bybitJson;
|
|
245
|
+
}
|
|
246
|
+
|
|
193
247
|
// src/providers/bybit/apply-demo-money.ts
|
|
194
248
|
async function applyDemoMoney(credentials, payload, timeOffset) {
|
|
195
249
|
const { apiKey } = credentials;
|
|
@@ -329,6 +383,10 @@ var BybitClient = class {
|
|
|
329
383
|
await this.ready;
|
|
330
384
|
return await getWalletBalance(credentials, this.timeOffset);
|
|
331
385
|
}
|
|
386
|
+
async getPositionInfo(credentials, payload) {
|
|
387
|
+
await this.ready;
|
|
388
|
+
return await getPositionInfo(credentials, payload, this.timeOffset);
|
|
389
|
+
}
|
|
332
390
|
};
|
|
333
391
|
|
|
334
392
|
exports.BybitClient = BybitClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/providers/bybit/constants.ts","../../src/providers/bybit/get-api-key-info.ts","../../src/providers/bybit/get-account-info.ts","../../src/providers/bybit/get-wallet-balance.ts","../../src/providers/bybit/get-closed-pnl.ts","../../src/providers/bybit/apply-demo-money.ts","../../src/providers/bybit/get-server-time.ts","../../src/utils/bybitHelper.ts","../../src/clients/BybitClient.ts"],"names":["createHmac"],"mappings":"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","file":"index.cjs","sourcesContent":["export const BYBIT_CONSTANTS = {\n baseUrl: process.env.BYBIT_BASE_URL || \"https://api-demo.bybit.com\",\n fetchTimeoutMs: Number(process.env.BYBIT_FETCH_TIMEOUT_MS) || 10000,\n recvWindowTimeoutMs: process.env.BYBIT_RECV_WINDOW_TIMEOUT_MS || \"5000\",\n}","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitCredentials, IBybitApiKeyInfo, IBybitApiResponse} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\nexport async function getApiKeyInfo(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiKeyInfo>> {\n const { signature, timestamp } = signBybitRequest({\n credentials,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/user/query-api`, {\n headers: {\n \"X-BAPI-API-KEY\": credentials.apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n //signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n });\n } catch (error) {\n console.error(\"ByBit API Key Info network error\", error);\n throw new Error(\"ByBit API Key Info network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit API Key Info request failed\", bybitRes);\n throw new Error(\"ByBit API Key Info request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitApiKeyInfo>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit API Key Info API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n if (!bybitJson) {\n console.error(\"Invalid ByBit API Key Info response\", bybitJson);\n throw new Error(\"Invalid ByBit API Key Info response\");\n }\n\n return bybitJson;\n}\n","import {\n IBybitCredentials,\n IBybitAccountInfo,\n IBybitApiResponse,\n} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\nimport { BYBIT_CONSTANTS } from \"./constants\";\n\nexport async function getAccountInfo(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitAccountInfo>> {\n const { apiKey, apiSecret } = credentials;\n const queryString = \"accountType=UNIFIED\";\n \n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/account/info`, {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n });\n } catch (error) {\n console.error(\"ByBit Account API network error\", error);\n throw new Error(\"ByBit Account API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Account API request failed\", bybitRes);\n throw new Error(\"ByBit Account API request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitAccountInfo>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Account API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n const raw = bybitJson.result?.list?.[0];\n\n if (!raw) {\n console.error(\"No account info returned\", bybitJson);\n throw new Error(\"No account info returned\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitApiResponse, IBybitWalletAccount, IBybitCredentials } from \"../../types/bybit\";\n\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// GET /api/bybit/wallet-balance?accountType=UNIFIED\nexport async function getWalletBalance(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitWalletAccount>> {\n const { apiKey } = credentials;\n\n const query = new URLSearchParams({\n accountType: \"UNIFIED\",\n coin: \"USDT\",\n });\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/account/wallet-balance?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n },\n );\n } catch (error) {\n console.error(\"ByBit Wallet API network error\", error);\n throw new Error(\"ByBit Wallet API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Wallet API request failed\", bybitRes);\n throw new Error(\"ByBit Wallet API request failed: \" + bybitRes.statusText);\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitWalletAccount>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Wallet API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitCredentials, IBybitApiResponse, IBybitApiResponseList, IBybitClosedPnl, IBybitClosedPnlRequest } from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// GET /api/bybit/wallet-balance?accountType=UNIFIED\nexport async function getClosedPnl(\n credentials: IBybitCredentials,\n payload: IBybitClosedPnlRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>> {\n const { apiKey } = credentials;\n const query = new URLSearchParams({\n category: \"linear\",\n //symbol: \"BTCUSDT\",\n limit: \"50\", //default limit\n });\n\n if (typeof payload.startTime === \"number\") {\n query.set(\"startTime\", String(payload.startTime));\n }\n\n if (typeof payload.endTime === \"number\") {\n query.set(\"endTime\", String(payload.endTime));\n }\n\n if (typeof payload.cursor === \"string\") {\n query.set(\"cursor\", String(payload.cursor));\n }\n\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/position/closed-pnl?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n },\n );\n } catch (error) {\n console.error(\"ByBit Closed PNL API network error\", error);\n throw new Error(\"ByBit Closed PNL API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Closed PNL API request failed\", bybitRes);\n throw new Error(\"ByBit Closed PNL API request failed\");\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Closed PNL API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\n\nimport {\n IBybitCredentials,\n IBybitApiResponse,\n IBybitAccountInfo,\n IBybitDemoApplyMoneyRequest,\n} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\nimport { IBybitDemoApplyMoney } from \"../../types/bybit/IBybitDemoApplyMoney\";\n\n// POST /api/bybit/apply-money\nexport async function applyDemoMoney(\n credentials: IBybitCredentials,\n payload: IBybitDemoApplyMoneyRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitDemoApplyMoney>> {\n const { apiKey } = credentials;\n\n const requestBody = JSON.stringify(payload);\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString: requestBody,\n timeOffset \n });\n \n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/account/demo-apply-money`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n body: requestBody,\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n },\n );\n } catch (error) {\n throw new Error(\"ByBit Apply Money API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n throw new Error(\"ByBit Apply Money API request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitAccountInfo>;\n\n if (bybitJson.retCode !== 0) {\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitServerTime, IBybitApiResponse } from \"../../types/bybit\";\n\nexport async function getServerTime(): Promise<IBybitApiResponse<IBybitServerTime>> {\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/market/time`,\n {\n cache: \"no-store\",\n }\n );\n } catch (error) {\n console.error(\"ByBit Server Time network error\", error);\n throw new Error(\"ByBit Server Time network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Server Time request failed\", bybitRes.status, bybitRes.statusText);\n throw new Error(`ByBit Server Time request failed: ${bybitRes.status}`);\n }\n\n let bybitJson: IBybitApiResponse<IBybitServerTime>;\n\n try {\n bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitServerTime>;\n } catch (error) {\n console.error(\"Invalid ByBit Server Time response\", error);\n throw new Error(\"Invalid ByBit Server Time response\", { cause: error });\n }\n\n if (!bybitJson) {\n throw new Error(\"Invalid ByBit Server Time response\");\n }\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Server Time API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit server time error\");\n }\n\n return bybitJson;\n}","import { createHmac } from \"crypto\";\nimport { env } from \"node:process\";\nimport { getServerTime } from \"../providers/bybit\";\nimport { BYBIT_CONSTANTS } from \"../providers/bybit/constants\";\nimport type { IBybitSignRequest } from \"../types/bybit\";\n\nexport function signBybitRequest(request: IBybitSignRequest) {\n const { credentials, queryString, timeOffset } = request;\n const { apiSecret, apiKey } = credentials;\n\n const timestamp = getBybitTimestamp(timeOffset);\n\n const payload = `${timestamp}${apiKey}${BYBIT_CONSTANTS.recvWindowTimeoutMs}${queryString ?? \"\"}`;\n const signature = createHmac(\"sha256\", apiSecret)\n .update(payload)\n .digest(\"hex\");\n\n return { signature, timestamp };\n}\n\nexport async function syncBybitServerTime(): Promise<number> {\n const localTimeBefore = Date.now();\n const { result } = await getServerTime();\n\n const serverTime = parseInt(result.timeNano, 10) / 1000000;\n const localTimeAfter = Date.now();\n\n // Estimate the local time at which Bybit generated\n // the response by using the midpoint.\n const estimatedLatency = (localTimeAfter - localTimeBefore) / 2;\n const timeOffset = Math.round(serverTime - (localTimeBefore + estimatedLatency));\n\n return timeOffset;\n}\n\nexport function getBybitTimestamp(timeOffset: number = 0): string {\n return String(Date.now() + timeOffset);\n}","import type {\n IBybitApiKeyInfo,\n IBybitApiResponse,\n IBybitClosedPnlRequest,\n IBybitCredentials,\n IBybitDemoApplyMoneyRequest,\n} from \"../types/bybit\";\nimport { syncBybitServerTime } from \"../utils/bybitHelper\";\n\nimport {\n getApiKeyInfo,\n getClosedPnl,\n getAccountInfo,\n getWalletBalance,\n applyDemoMoney,\n} from \"../providers/bybit\";\n\nexport class BybitClient {\n private timeOffset = 0;\n private readonly ready: Promise<void>;\n\n constructor() {\n this.ready = this.initializeTimeOffset();\n }\n\n private async initializeTimeOffset(): Promise<void> {\n const maxAttempts = 3;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n this.timeOffset = await syncBybitServerTime();\n return;\n } catch (error) {\n if (attempt === maxAttempts) {\n throw error;\n }\n\n await new Promise((resolve) => setTimeout(resolve, attempt * 2_000));\n }\n }\n }\n\n async applyDemoMoney(\n credentials: IBybitCredentials,\n payload: IBybitDemoApplyMoneyRequest,\n ) {\n await this.ready;\n // Implement the logic to apply demo money to the Bybit account using the provided payload\n return await applyDemoMoney(credentials, payload, this.timeOffset);\n }\n\n async getAccountInfo(\n credentials: IBybitCredentials,\n ) {\n await this.ready;\n return await getAccountInfo(credentials, this.timeOffset);\n }\n\n async getApiKeyInfo(\n credentials: IBybitCredentials,\n ): Promise<IBybitApiResponse<IBybitApiKeyInfo>> {\n await this.ready;\n return await getApiKeyInfo(credentials, this.timeOffset);\n }\n\n async getClosedPnl(\n credentials: IBybitCredentials,\n payload: IBybitClosedPnlRequest\n ) {\n await this.ready;\n return await getClosedPnl(credentials, payload, this.timeOffset);\n }\n\n async getWalletBalance(credentials: IBybitCredentials) {\n await this.ready;\n return await getWalletBalance(credentials, this.timeOffset);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/providers/bybit/constants.ts","../../src/providers/bybit/get-api-key-info.ts","../../src/providers/bybit/get-account-info.ts","../../src/providers/bybit/get-wallet-balance.ts","../../src/providers/bybit/get-closed-pnl.ts","../../src/providers/bybit/get-position-info.ts","../../src/providers/bybit/apply-demo-money.ts","../../src/providers/bybit/get-server-time.ts","../../src/utils/bybitHelper.ts","../../src/clients/BybitClient.ts"],"names":["createHmac"],"mappings":"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","file":"index.cjs","sourcesContent":["export const BYBIT_CONSTANTS = {\n baseUrl: process.env.BYBIT_BASE_URL || \"https://api-demo.bybit.com\",\n fetchTimeoutMs: Number(process.env.BYBIT_FETCH_TIMEOUT_MS) || 10000,\n recvWindowTimeoutMs: process.env.BYBIT_RECV_WINDOW_TIMEOUT_MS || \"5000\",\n}","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitCredentials, IBybitApiKeyInfo, IBybitApiResponse} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\nexport async function getApiKeyInfo(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiKeyInfo>> {\n const { signature, timestamp } = signBybitRequest({\n credentials,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/user/query-api`, {\n headers: {\n \"X-BAPI-API-KEY\": credentials.apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n //signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n });\n } catch (error) {\n console.error(\"ByBit API Key Info network error\", error);\n throw new Error(\"ByBit API Key Info network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit API Key Info request failed\", bybitRes);\n throw new Error(\"ByBit API Key Info request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitApiKeyInfo>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit API Key Info API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n if (!bybitJson) {\n console.error(\"Invalid ByBit API Key Info response\", bybitJson);\n throw new Error(\"Invalid ByBit API Key Info response\");\n }\n\n return bybitJson;\n}\n","import {\n IBybitCredentials,\n IBybitAccountInfo,\n IBybitApiResponse,\n} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\nimport { BYBIT_CONSTANTS } from \"./constants\";\n\nexport async function getAccountInfo(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitAccountInfo>> {\n const { apiKey, apiSecret } = credentials;\n const queryString = \"accountType=UNIFIED\";\n \n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/account/info`, {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n });\n } catch (error) {\n console.error(\"ByBit Account API network error\", error);\n throw new Error(\"ByBit Account API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Account API request failed\", bybitRes);\n throw new Error(\"ByBit Account API request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitAccountInfo>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Account API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n const raw = bybitJson.result?.list?.[0];\n\n if (!raw) {\n console.error(\"No account info returned\", bybitJson);\n throw new Error(\"No account info returned\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitApiResponse, IBybitWalletAccount, IBybitCredentials } from \"../../types/bybit\";\n\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// GET /api/bybit/wallet-balance?accountType=UNIFIED\nexport async function getWalletBalance(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitWalletAccount>> {\n const { apiKey } = credentials;\n\n const query = new URLSearchParams({\n accountType: \"UNIFIED\",\n coin: \"USDT\",\n });\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/account/wallet-balance?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n },\n );\n } catch (error) {\n console.error(\"ByBit Wallet API network error\", error);\n throw new Error(\"ByBit Wallet API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Wallet API request failed\", bybitRes);\n throw new Error(\"ByBit Wallet API request failed: \" + bybitRes.statusText);\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitWalletAccount>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Wallet API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitCredentials, IBybitApiResponse, IBybitApiResponseList, IBybitClosedPnl, IBybitClosedPnlRequest } from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// GET /api/bybit/wallet-balance?accountType=UNIFIED\nexport async function getClosedPnl(\n credentials: IBybitCredentials,\n payload: IBybitClosedPnlRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>> {\n const { apiKey } = credentials;\n const query = new URLSearchParams({\n category: \"linear\",\n //symbol: \"BTCUSDT\",\n limit: \"50\", //default limit\n });\n\n if (typeof payload.startTime === \"number\") {\n query.set(\"startTime\", String(payload.startTime));\n }\n\n if (typeof payload.endTime === \"number\") {\n query.set(\"endTime\", String(payload.endTime));\n }\n\n if (typeof payload.cursor === \"string\") {\n query.set(\"cursor\", String(payload.cursor));\n }\n\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/position/closed-pnl?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n },\n );\n } catch (error) {\n console.error(\"ByBit Closed PNL API network error\", error);\n throw new Error(\"ByBit Closed PNL API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Closed PNL API request failed\", bybitRes);\n throw new Error(\"ByBit Closed PNL API request failed\");\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Closed PNL API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport {\n IBybitCredentials,\n IBybitApiResponse,\n IBybitApiResponseList,\n IBybitPositionInfo,\n IBybitPositionInfoRequest,\n} from \"../../types/bybit\";\n\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\nconst DEFAULT_SETTLE_COIN = \"USDT\";\nconst DEFAULT_CATEGORY = \"linear\";\n\n// Query real-time position data, such as position size, cumulative realized PNL, etc.\nexport async function getPositionInfo(\n credentials: IBybitCredentials,\n payload: IBybitPositionInfoRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>> {\n const query = new URLSearchParams({\n settleCoin: payload.settleCoin ?? DEFAULT_SETTLE_COIN,\n category: payload.category ?? DEFAULT_CATEGORY,\n limit: \"50\", //default limit\n });\n\n if (typeof payload?.symbol === \"string\") {\n query.set(\"symbol\", String(payload.symbol));\n }\n\n if (typeof payload?.cursor === \"string\") {\n query.set(\"cursor\", String(payload.cursor));\n }\n\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/position/list?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": credentials.apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n },\n );\n } catch (error) {\n console.error(\"ByBit Position Info API network error\", { cause: error });\n throw new Error(\"ByBit Position Info API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Position Info API request failed\", bybitRes);\n throw new Error(\"ByBit Position Info API request failed\");\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>;\n \n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Position Info API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\n\nimport {\n IBybitCredentials,\n IBybitApiResponse,\n IBybitAccountInfo,\n IBybitDemoApplyMoneyRequest,\n} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\nimport { IBybitDemoApplyMoney } from \"../../types/bybit/IBybitDemoApplyMoney\";\n\n// POST /api/bybit/apply-money\nexport async function applyDemoMoney(\n credentials: IBybitCredentials,\n payload: IBybitDemoApplyMoneyRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitDemoApplyMoney>> {\n const { apiKey } = credentials;\n\n const requestBody = JSON.stringify(payload);\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString: requestBody,\n timeOffset \n });\n \n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/account/demo-apply-money`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n body: requestBody,\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n },\n );\n } catch (error) {\n throw new Error(\"ByBit Apply Money API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n throw new Error(\"ByBit Apply Money API request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitAccountInfo>;\n\n if (bybitJson.retCode !== 0) {\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitServerTime, IBybitApiResponse } from \"../../types/bybit\";\n\nexport async function getServerTime(): Promise<IBybitApiResponse<IBybitServerTime>> {\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/market/time`,\n {\n cache: \"no-store\",\n }\n );\n } catch (error) {\n console.error(\"ByBit Server Time network error\", error);\n throw new Error(\"ByBit Server Time network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Server Time request failed\", bybitRes.status, bybitRes.statusText);\n throw new Error(`ByBit Server Time request failed: ${bybitRes.status}`);\n }\n\n let bybitJson: IBybitApiResponse<IBybitServerTime>;\n\n try {\n bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitServerTime>;\n } catch (error) {\n console.error(\"Invalid ByBit Server Time response\", error);\n throw new Error(\"Invalid ByBit Server Time response\", { cause: error });\n }\n\n if (!bybitJson) {\n throw new Error(\"Invalid ByBit Server Time response\");\n }\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Server Time API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit server time error\");\n }\n\n return bybitJson;\n}","import { createHmac } from \"crypto\";\nimport { env } from \"node:process\";\nimport { getServerTime } from \"../providers/bybit\";\nimport { BYBIT_CONSTANTS } from \"../providers/bybit/constants\";\nimport type { IBybitSignRequest } from \"../types/bybit\";\n\nexport function signBybitRequest(request: IBybitSignRequest) {\n const { credentials, queryString, timeOffset } = request;\n const { apiSecret, apiKey } = credentials;\n\n const timestamp = getBybitTimestamp(timeOffset);\n\n const payload = `${timestamp}${apiKey}${BYBIT_CONSTANTS.recvWindowTimeoutMs}${queryString ?? \"\"}`;\n const signature = createHmac(\"sha256\", apiSecret)\n .update(payload)\n .digest(\"hex\");\n\n return { signature, timestamp };\n}\n\nexport async function syncBybitServerTime(): Promise<number> {\n const localTimeBefore = Date.now();\n const { result } = await getServerTime();\n\n const serverTime = parseInt(result.timeNano, 10) / 1000000;\n const localTimeAfter = Date.now();\n\n // Estimate the local time at which Bybit generated\n // the response by using the midpoint.\n const estimatedLatency = (localTimeAfter - localTimeBefore) / 2;\n const timeOffset = Math.round(serverTime - (localTimeBefore + estimatedLatency));\n\n return timeOffset;\n}\n\nexport function getBybitTimestamp(timeOffset: number = 0): string {\n return String(Date.now() + timeOffset);\n}","import type {\n IBybitApiKeyInfo,\n IBybitApiResponse,\n IBybitClosedPnlRequest,\n IBybitCredentials,\n IBybitDemoApplyMoneyRequest,\n IBybitPositionInfoRequest,\n} from \"../types/bybit\";\nimport { syncBybitServerTime } from \"../utils/bybitHelper\";\n\nimport {\n getApiKeyInfo,\n getClosedPnl,\n getAccountInfo,\n getWalletBalance,\n applyDemoMoney,\n getPositionInfo\n} from \"../providers/bybit\";\n\nexport class BybitClient {\n private timeOffset = 0;\n private readonly ready: Promise<void>;\n\n constructor() {\n this.ready = this.initializeTimeOffset();\n }\n\n private async initializeTimeOffset(): Promise<void> {\n const maxAttempts = 3;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n this.timeOffset = await syncBybitServerTime();\n return;\n } catch (error) {\n if (attempt === maxAttempts) {\n throw error;\n }\n\n await new Promise((resolve) => setTimeout(resolve, attempt * 2_000));\n }\n }\n }\n\n async applyDemoMoney(\n credentials: IBybitCredentials,\n payload: IBybitDemoApplyMoneyRequest,\n ) {\n await this.ready;\n // Implement the logic to apply demo money to the Bybit account using the provided payload\n return await applyDemoMoney(credentials, payload, this.timeOffset);\n }\n\n async getAccountInfo(\n credentials: IBybitCredentials,\n ) {\n await this.ready;\n return await getAccountInfo(credentials, this.timeOffset);\n }\n\n async getApiKeyInfo(\n credentials: IBybitCredentials,\n ): Promise<IBybitApiResponse<IBybitApiKeyInfo>> {\n await this.ready;\n return await getApiKeyInfo(credentials, this.timeOffset);\n }\n\n async getClosedPnl(\n credentials: IBybitCredentials,\n payload: IBybitClosedPnlRequest\n ) {\n await this.ready;\n return await getClosedPnl(credentials, payload, this.timeOffset);\n }\n\n async getWalletBalance(credentials: IBybitCredentials) {\n await this.ready;\n return await getWalletBalance(credentials, this.timeOffset);\n }\n\n async getPositionInfo(\n credentials: IBybitCredentials, \n payload: IBybitPositionInfoRequest\n ) {\n await this.ready;\n return await getPositionInfo(credentials, payload, this.timeOffset);\n }\n}\n"]}
|
package/dist/clients/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IBybitCredentials, IBybitDemoApplyMoneyRequest, IBybitApiResponse, IBybitDemoApplyMoneyResponse as IBybitDemoApplyMoney, IBybitAccountInfo, IBybitApiKeyInfo, IBybitClosedPnlRequest, IBybitApiResponseList, IBybitClosedPnl, IBybitWalletAccount } from '../types/bybit/index.cjs';
|
|
1
|
+
import { IBybitCredentials, IBybitDemoApplyMoneyRequest, IBybitApiResponse, IBybitDemoApplyMoneyResponse as IBybitDemoApplyMoney, IBybitAccountInfo, IBybitApiKeyInfo, IBybitClosedPnlRequest, IBybitApiResponseList, IBybitClosedPnl, IBybitWalletAccount, IBybitPositionInfoRequest, IBybitPositionInfo } from '../types/bybit/index.cjs';
|
|
2
2
|
import '../enums--bdw39rp.cjs';
|
|
3
3
|
|
|
4
4
|
declare class BybitClient {
|
|
@@ -11,6 +11,7 @@ declare class BybitClient {
|
|
|
11
11
|
getApiKeyInfo(credentials: IBybitCredentials): Promise<IBybitApiResponse<IBybitApiKeyInfo>>;
|
|
12
12
|
getClosedPnl(credentials: IBybitCredentials, payload: IBybitClosedPnlRequest): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>>;
|
|
13
13
|
getWalletBalance(credentials: IBybitCredentials): Promise<IBybitApiResponse<IBybitWalletAccount>>;
|
|
14
|
+
getPositionInfo(credentials: IBybitCredentials, payload: IBybitPositionInfoRequest): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>>;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
export { BybitClient };
|
package/dist/clients/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IBybitCredentials, IBybitDemoApplyMoneyRequest, IBybitApiResponse, IBybitDemoApplyMoneyResponse as IBybitDemoApplyMoney, IBybitAccountInfo, IBybitApiKeyInfo, IBybitClosedPnlRequest, IBybitApiResponseList, IBybitClosedPnl, IBybitWalletAccount } from '../types/bybit/index.js';
|
|
1
|
+
import { IBybitCredentials, IBybitDemoApplyMoneyRequest, IBybitApiResponse, IBybitDemoApplyMoneyResponse as IBybitDemoApplyMoney, IBybitAccountInfo, IBybitApiKeyInfo, IBybitClosedPnlRequest, IBybitApiResponseList, IBybitClosedPnl, IBybitWalletAccount, IBybitPositionInfoRequest, IBybitPositionInfo } from '../types/bybit/index.js';
|
|
2
2
|
import '../enums--bdw39rp.js';
|
|
3
3
|
|
|
4
4
|
declare class BybitClient {
|
|
@@ -11,6 +11,7 @@ declare class BybitClient {
|
|
|
11
11
|
getApiKeyInfo(credentials: IBybitCredentials): Promise<IBybitApiResponse<IBybitApiKeyInfo>>;
|
|
12
12
|
getClosedPnl(credentials: IBybitCredentials, payload: IBybitClosedPnlRequest): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>>;
|
|
13
13
|
getWalletBalance(credentials: IBybitCredentials): Promise<IBybitApiResponse<IBybitWalletAccount>>;
|
|
14
|
+
getPositionInfo(credentials: IBybitCredentials, payload: IBybitPositionInfoRequest): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>>;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
export { BybitClient };
|
package/dist/clients/index.js
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -191,20 +191,20 @@ async function getClosedPnl(credentials, payload, timeOffset) {
|
|
|
191
191
|
}
|
|
192
192
|
|
|
193
193
|
// src/providers/bybit/get-position-info.ts
|
|
194
|
-
|
|
194
|
+
var DEFAULT_SETTLE_COIN = "USDT";
|
|
195
|
+
var DEFAULT_CATEGORY = "linear";
|
|
196
|
+
async function getPositionInfo(credentials, payload, timeOffset) {
|
|
195
197
|
const query = new URLSearchParams({
|
|
196
|
-
|
|
198
|
+
settleCoin: payload.settleCoin ?? DEFAULT_SETTLE_COIN,
|
|
199
|
+
category: payload.category ?? DEFAULT_CATEGORY,
|
|
197
200
|
limit: "50"
|
|
198
201
|
//default limit
|
|
199
202
|
});
|
|
200
|
-
if (typeof symbol === "string") {
|
|
201
|
-
query.set("symbol", String(symbol));
|
|
203
|
+
if (typeof payload?.symbol === "string") {
|
|
204
|
+
query.set("symbol", String(payload.symbol));
|
|
202
205
|
}
|
|
203
|
-
if (typeof
|
|
204
|
-
query.set("
|
|
205
|
-
}
|
|
206
|
-
if (typeof cursor === "string") {
|
|
207
|
-
query.set("cursor", String(cursor));
|
|
206
|
+
if (typeof payload?.cursor === "string") {
|
|
207
|
+
query.set("cursor", String(payload.cursor));
|
|
208
208
|
}
|
|
209
209
|
const queryString = query.toString();
|
|
210
210
|
const { signature, timestamp } = signBybitRequest({
|
|
@@ -383,6 +383,10 @@ var BybitClient = class {
|
|
|
383
383
|
await this.ready;
|
|
384
384
|
return await getWalletBalance(credentials, this.timeOffset);
|
|
385
385
|
}
|
|
386
|
+
async getPositionInfo(credentials, payload) {
|
|
387
|
+
await this.ready;
|
|
388
|
+
return await getPositionInfo(credentials, payload, this.timeOffset);
|
|
389
|
+
}
|
|
386
390
|
};
|
|
387
391
|
|
|
388
392
|
// src/utils/helper.ts
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/providers/bybit/constants.ts","../src/providers/bybit/get-api-key-info.ts","../src/providers/bybit/get-account-info.ts","../src/providers/bybit/get-wallet-balance.ts","../src/providers/bybit/get-closed-pnl.ts","../src/providers/bybit/get-position-info.ts","../src/providers/bybit/apply-demo-money.ts","../src/providers/bybit/get-server-time.ts","../src/utils/bybitHelper.ts","../src/clients/BybitClient.ts","../src/utils/helper.ts","../src/utils/challengeHelper.ts"],"names":["createHmac"],"mappings":"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","file":"index.cjs","sourcesContent":["export const BYBIT_CONSTANTS = {\n baseUrl: process.env.BYBIT_BASE_URL || \"https://api-demo.bybit.com\",\n fetchTimeoutMs: Number(process.env.BYBIT_FETCH_TIMEOUT_MS) || 10000,\n recvWindowTimeoutMs: process.env.BYBIT_RECV_WINDOW_TIMEOUT_MS || \"5000\",\n}","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitCredentials, IBybitApiKeyInfo, IBybitApiResponse} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\nexport async function getApiKeyInfo(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiKeyInfo>> {\n const { signature, timestamp } = signBybitRequest({\n credentials,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/user/query-api`, {\n headers: {\n \"X-BAPI-API-KEY\": credentials.apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n //signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n });\n } catch (error) {\n console.error(\"ByBit API Key Info network error\", error);\n throw new Error(\"ByBit API Key Info network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit API Key Info request failed\", bybitRes);\n throw new Error(\"ByBit API Key Info request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitApiKeyInfo>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit API Key Info API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n if (!bybitJson) {\n console.error(\"Invalid ByBit API Key Info response\", bybitJson);\n throw new Error(\"Invalid ByBit API Key Info response\");\n }\n\n return bybitJson;\n}\n","import {\n IBybitCredentials,\n IBybitAccountInfo,\n IBybitApiResponse,\n} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\nimport { BYBIT_CONSTANTS } from \"./constants\";\n\nexport async function getAccountInfo(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitAccountInfo>> {\n const { apiKey, apiSecret } = credentials;\n const queryString = \"accountType=UNIFIED\";\n \n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/account/info`, {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n });\n } catch (error) {\n console.error(\"ByBit Account API network error\", error);\n throw new Error(\"ByBit Account API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Account API request failed\", bybitRes);\n throw new Error(\"ByBit Account API request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitAccountInfo>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Account API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n const raw = bybitJson.result?.list?.[0];\n\n if (!raw) {\n console.error(\"No account info returned\", bybitJson);\n throw new Error(\"No account info returned\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitApiResponse, IBybitWalletAccount, IBybitCredentials } from \"../../types/bybit\";\n\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// GET /api/bybit/wallet-balance?accountType=UNIFIED\nexport async function getWalletBalance(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitWalletAccount>> {\n const { apiKey } = credentials;\n\n const query = new URLSearchParams({\n accountType: \"UNIFIED\",\n coin: \"USDT\",\n });\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/account/wallet-balance?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n },\n );\n } catch (error) {\n console.error(\"ByBit Wallet API network error\", error);\n throw new Error(\"ByBit Wallet API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Wallet API request failed\", bybitRes);\n throw new Error(\"ByBit Wallet API request failed: \" + bybitRes.statusText);\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitWalletAccount>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Wallet API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitCredentials, IBybitApiResponse, IBybitApiResponseList, IBybitClosedPnl, IBybitClosedPnlRequest } from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// GET /api/bybit/wallet-balance?accountType=UNIFIED\nexport async function getClosedPnl(\n credentials: IBybitCredentials,\n payload: IBybitClosedPnlRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>> {\n const { apiKey } = credentials;\n const query = new URLSearchParams({\n category: \"linear\",\n //symbol: \"BTCUSDT\",\n limit: \"50\", //default limit\n });\n\n if (typeof payload.startTime === \"number\") {\n query.set(\"startTime\", String(payload.startTime));\n }\n\n if (typeof payload.endTime === \"number\") {\n query.set(\"endTime\", String(payload.endTime));\n }\n\n if (typeof payload.cursor === \"string\") {\n query.set(\"cursor\", String(payload.cursor));\n }\n\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/position/closed-pnl?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n },\n );\n } catch (error) {\n console.error(\"ByBit Closed PNL API network error\", error);\n throw new Error(\"ByBit Closed PNL API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Closed PNL API request failed\", bybitRes);\n throw new Error(\"ByBit Closed PNL API request failed\");\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Closed PNL API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport {\n IBybitCredentials,\n IBybitApiResponse,\n IBybitApiResponseList,\n IBybitPositionInfo,\n} from \"../../types/bybit\";\n\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// Query real-time position data, such as position size, cumulative realized PNL, etc.\nexport async function getPositionInfo(\n credentials: IBybitCredentials,\n category?: string,\n symbol?: string,\n settleCoin?: string,\n cursor?: string,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>> {\n const query = new URLSearchParams({\n category: category ?? \"linear\",\n limit: \"50\", //default limit\n });\n\n if (typeof symbol === \"string\") {\n query.set(\"symbol\", String(symbol));\n }\n\n if (typeof settleCoin === \"string\") {\n query.set(\"settleCoin\", String(settleCoin));\n }\n\n if (typeof cursor === \"string\") {\n query.set(\"cursor\", String(cursor));\n }\n\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/position/list?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": credentials.apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n },\n );\n } catch (error) {\n console.error(\"ByBit Position Info API network error\", { cause: error });\n throw new Error(\"ByBit Position Info API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Position Info API request failed\", bybitRes);\n throw new Error(\"ByBit Position Info API request failed\");\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>;\n \n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Position Info API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\n\nimport {\n IBybitCredentials,\n IBybitApiResponse,\n IBybitAccountInfo,\n IBybitDemoApplyMoneyRequest,\n} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\nimport { IBybitDemoApplyMoney } from \"../../types/bybit/IBybitDemoApplyMoney\";\n\n// POST /api/bybit/apply-money\nexport async function applyDemoMoney(\n credentials: IBybitCredentials,\n payload: IBybitDemoApplyMoneyRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitDemoApplyMoney>> {\n const { apiKey } = credentials;\n\n const requestBody = JSON.stringify(payload);\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString: requestBody,\n timeOffset \n });\n \n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/account/demo-apply-money`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n body: requestBody,\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n },\n );\n } catch (error) {\n throw new Error(\"ByBit Apply Money API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n throw new Error(\"ByBit Apply Money API request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitAccountInfo>;\n\n if (bybitJson.retCode !== 0) {\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitServerTime, IBybitApiResponse } from \"../../types/bybit\";\n\nexport async function getServerTime(): Promise<IBybitApiResponse<IBybitServerTime>> {\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/market/time`,\n {\n cache: \"no-store\",\n }\n );\n } catch (error) {\n console.error(\"ByBit Server Time network error\", error);\n throw new Error(\"ByBit Server Time network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Server Time request failed\", bybitRes.status, bybitRes.statusText);\n throw new Error(`ByBit Server Time request failed: ${bybitRes.status}`);\n }\n\n let bybitJson: IBybitApiResponse<IBybitServerTime>;\n\n try {\n bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitServerTime>;\n } catch (error) {\n console.error(\"Invalid ByBit Server Time response\", error);\n throw new Error(\"Invalid ByBit Server Time response\", { cause: error });\n }\n\n if (!bybitJson) {\n throw new Error(\"Invalid ByBit Server Time response\");\n }\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Server Time API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit server time error\");\n }\n\n return bybitJson;\n}","import { createHmac } from \"crypto\";\nimport { env } from \"node:process\";\nimport { getServerTime } from \"../providers/bybit\";\nimport { BYBIT_CONSTANTS } from \"../providers/bybit/constants\";\nimport type { IBybitSignRequest } from \"../types/bybit\";\n\nexport function signBybitRequest(request: IBybitSignRequest) {\n const { credentials, queryString, timeOffset } = request;\n const { apiSecret, apiKey } = credentials;\n\n const timestamp = getBybitTimestamp(timeOffset);\n\n const payload = `${timestamp}${apiKey}${BYBIT_CONSTANTS.recvWindowTimeoutMs}${queryString ?? \"\"}`;\n const signature = createHmac(\"sha256\", apiSecret)\n .update(payload)\n .digest(\"hex\");\n\n return { signature, timestamp };\n}\n\nexport async function syncBybitServerTime(): Promise<number> {\n const localTimeBefore = Date.now();\n const { result } = await getServerTime();\n\n const serverTime = parseInt(result.timeNano, 10) / 1000000;\n const localTimeAfter = Date.now();\n\n // Estimate the local time at which Bybit generated\n // the response by using the midpoint.\n const estimatedLatency = (localTimeAfter - localTimeBefore) / 2;\n const timeOffset = Math.round(serverTime - (localTimeBefore + estimatedLatency));\n\n return timeOffset;\n}\n\nexport function getBybitTimestamp(timeOffset: number = 0): string {\n return String(Date.now() + timeOffset);\n}","import type {\n IBybitApiKeyInfo,\n IBybitApiResponse,\n IBybitClosedPnlRequest,\n IBybitCredentials,\n IBybitDemoApplyMoneyRequest,\n} from \"../types/bybit\";\nimport { syncBybitServerTime } from \"../utils/bybitHelper\";\n\nimport {\n getApiKeyInfo,\n getClosedPnl,\n getAccountInfo,\n getWalletBalance,\n applyDemoMoney,\n} from \"../providers/bybit\";\n\nexport class BybitClient {\n private timeOffset = 0;\n private readonly ready: Promise<void>;\n\n constructor() {\n this.ready = this.initializeTimeOffset();\n }\n\n private async initializeTimeOffset(): Promise<void> {\n const maxAttempts = 3;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n this.timeOffset = await syncBybitServerTime();\n return;\n } catch (error) {\n if (attempt === maxAttempts) {\n throw error;\n }\n\n await new Promise((resolve) => setTimeout(resolve, attempt * 2_000));\n }\n }\n }\n\n async applyDemoMoney(\n credentials: IBybitCredentials,\n payload: IBybitDemoApplyMoneyRequest,\n ) {\n await this.ready;\n // Implement the logic to apply demo money to the Bybit account using the provided payload\n return await applyDemoMoney(credentials, payload, this.timeOffset);\n }\n\n async getAccountInfo(\n credentials: IBybitCredentials,\n ) {\n await this.ready;\n return await getAccountInfo(credentials, this.timeOffset);\n }\n\n async getApiKeyInfo(\n credentials: IBybitCredentials,\n ): Promise<IBybitApiResponse<IBybitApiKeyInfo>> {\n await this.ready;\n return await getApiKeyInfo(credentials, this.timeOffset);\n }\n\n async getClosedPnl(\n credentials: IBybitCredentials,\n payload: IBybitClosedPnlRequest\n ) {\n await this.ready;\n return await getClosedPnl(credentials, payload, this.timeOffset);\n }\n\n async getWalletBalance(credentials: IBybitCredentials) {\n await this.ready;\n return await getWalletBalance(credentials, this.timeOffset);\n }\n}\n","export const parseNumber = (\n value: number | string | null | undefined,\n): number | null => {\n if (value === null || value === undefined) {\n return null;\n }\n\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n};\n\nexport const toIsoDate = (\n value: string | number | null | undefined,\n): string | null => {\n const parsed = parseNumber(value);\n if (parsed === null || parsed <= 0) {\n return null;\n }\n\n const date = new Date(parsed);\n if (Number.isNaN(date.getTime())) {\n return null;\n }\n\n return date.toISOString();\n};\n\nexport const isSameUtcDay = (\n left: string | null | undefined,\n right: string | null | undefined,\n): boolean => {\n if (!left || !right) {\n return false;\n }\n\n const normalizedLeft = left.trim();\n const normalizedRight = right.trim();\n\n if (!normalizedLeft || !normalizedRight) {\n return false;\n }\n\n const leftDate = new Date(normalizedLeft);\n const rightDate = new Date(normalizedRight);\n\n if (Number.isNaN(leftDate.getTime()) || Number.isNaN(rightDate.getTime())) {\n return false;\n }\n\n return (\n leftDate.toISOString().slice(0, 10) === rightDate.toISOString().slice(0, 10)\n );\n};\n","import {\n TChallengeClosedPnl,\n TChallengeProgress,\n TChallengeWalletBalance,\n} from \"../types/challenge\";\nimport { IBybitAccountType, IBybitCoinType } from \"../types/bybit/enums\";\nimport { isSameUtcDay } from \"./helper\";\n\nexport const createDefaultWallet = (\n challengeId: string = \"\",\n capital: number = 0,\n): TChallengeWalletBalance =>\n ({\n challengeId,\n accountType: IBybitAccountType.UNIFIED,\n totalEquity: 0,\n totalPerpUpl: 0,\n totalWalletBalance: 0,\n totalAvailableBalance: 0,\n capital,\n\n equity: 0,\n usdValue: 0,\n unrealisedPnl: 0,\n walletBalance: 0,\n availableToWithdraw: 0,\n coin: IBybitCoinType.USDT,\n updatedAt: new Date().toISOString(),\n }) as TChallengeWalletBalance;\n\nexport const createDefaultProgress = (\n challengeId: string = \"\",\n currentEquity: number = 0,\n): TChallengeProgress =>\n ({\n id: new Date().getTime().toString(),\n challengeId,\n currentEquity,\n totalLoss: 0,\n tradingDays: 0,\n dailyDrawdown: 0,\n profitTarget: 0,\n dailyStartingEquity: 0,\n dailyStartingUpdatedAt: new Date().toISOString(),\n dailyMaxEquity: 0,\n dailyMinEquity: 0,\n dailyMaxUpdatedAt: new Date().toISOString(),\n dailyMinUpdatedAt: new Date().toISOString(),\n }) as TChallengeProgress;\n\n // A trading day counts if you open and close at least one trade \n// that day with a position size ≥ 5% of the initial balance and a PnL of ±1% or more.\nexport const tradingDaysCountCalculation = async (\n closedPnlData: TChallengeClosedPnl[] | null,\n minPositionSize: number,\n): Promise<number> => {\n if (!closedPnlData || closedPnlData.length === 0) {\n return 0;\n }\n\n const closedPnlGrouped = closedPnlData.reduce(\n (acc, trade) => {\n const day = trade.updatedTime.split(\"T\")[0];\n if (!acc[day]) {\n acc[day] = [];\n }\n acc[day].push(trade);\n return acc;\n },\n {} as Record<string, TChallengeClosedPnl[]>,\n );\n\n return await Object.values(closedPnlGrouped).reduce((count, dayTrades) => {\n // Check if any trade closed today met the minimum size requirement\n const hasQualifyingTrade = dayTrades.some((trade) => {\n const entryValue = trade.cumEntryValue;\n const closedPnL = trade.closedPnl;\n\n // 1. Position size must be >= 5% of initial balance\n const passesSize = entryValue >= minPositionSize;\n\n // 2. PnL must be >= 1% of the position size itself\n const minRequiredPnL = entryValue * 0.01;\n const passesPnL = Math.abs(closedPnL) >= minRequiredPnL;\n\n return passesSize && passesPnL;\n });\n\n return hasQualifyingTrade ? count + 1 : count;\n }, 0);\n};\n\nexport const currentDailyEquity = (\n wallet: TChallengeWalletBalance,\n progress: TChallengeProgress\n) => {\n const today = new Date().toISOString();\n const startDate = new Date().setUTCHours(0, 0, 0, 0);\n const startDateStr = new Date(startDate).toISOString();\n\n const { equity, unrealisedPnl } = wallet;\n const { dailyStartingEquity, dailyMaxEquity, dailyMinEquity, \n dailyStartingUpdatedAt, dailyMaxUpdatedAt, dailyMinUpdatedAt } = progress;\n \n // Determine if the daily starting equity should be updated based on whether it's a new day\n let isSameDay = isSameUtcDay(dailyStartingUpdatedAt, startDateStr)\n const newDailyStartingUpdatedAt = isSameDay ? dailyStartingUpdatedAt : startDateStr;\n const newDailyStartingEquity = isSameDay ? dailyStartingEquity : equity;\n\n // Determine if the max and min daily equity should be updated based on whether it's a new day\n isSameDay = isSameUtcDay(dailyMaxUpdatedAt, today);\n let newMaxUpdatedAt = isSameDay ? dailyMaxUpdatedAt : today;\n const newdailyMaxEquity = Math.max(isSameDay ? dailyMaxEquity : equity , equity);\n \n // Determine if the min daily equity should be updated based on whether it's a new day\n isSameDay = isSameUtcDay(dailyMinUpdatedAt, today);\n const newMinUpdatedAt = isSameDay ? dailyMinUpdatedAt : today;\n const newdailyMinEquity = Math.min(isSameDay ? dailyMinEquity : equity, equity);\n\n //Trailing Drawdown: The difference between the day’s highest equity and the lowest equity reached afterward, both including unrealized P&L.\n const dailyEquityDrawdown = equity - newdailyMaxEquity;\n \n return {\n currentEquity: equity,\n dailyDrawdown: dailyEquityDrawdown,\n\n dailyStartingEquity: newDailyStartingEquity,\n dailyStartingUpdatedAt: newDailyStartingUpdatedAt.slice(0, 10),\n\n dailyMaxEquity: newdailyMaxEquity,\n dailyMaxUpdatedAt: newMaxUpdatedAt,\n\n dailyMinEquity: newdailyMinEquity,\n dailyMinUpdatedAt: newMinUpdatedAt,\n };\n};"]}
|
|
1
|
+
{"version":3,"sources":["../src/providers/bybit/constants.ts","../src/providers/bybit/get-api-key-info.ts","../src/providers/bybit/get-account-info.ts","../src/providers/bybit/get-wallet-balance.ts","../src/providers/bybit/get-closed-pnl.ts","../src/providers/bybit/get-position-info.ts","../src/providers/bybit/apply-demo-money.ts","../src/providers/bybit/get-server-time.ts","../src/utils/bybitHelper.ts","../src/clients/BybitClient.ts","../src/utils/helper.ts","../src/utils/challengeHelper.ts"],"names":["createHmac"],"mappings":"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","file":"index.cjs","sourcesContent":["export const BYBIT_CONSTANTS = {\n baseUrl: process.env.BYBIT_BASE_URL || \"https://api-demo.bybit.com\",\n fetchTimeoutMs: Number(process.env.BYBIT_FETCH_TIMEOUT_MS) || 10000,\n recvWindowTimeoutMs: process.env.BYBIT_RECV_WINDOW_TIMEOUT_MS || \"5000\",\n}","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitCredentials, IBybitApiKeyInfo, IBybitApiResponse} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\nexport async function getApiKeyInfo(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiKeyInfo>> {\n const { signature, timestamp } = signBybitRequest({\n credentials,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/user/query-api`, {\n headers: {\n \"X-BAPI-API-KEY\": credentials.apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n //signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n });\n } catch (error) {\n console.error(\"ByBit API Key Info network error\", error);\n throw new Error(\"ByBit API Key Info network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit API Key Info request failed\", bybitRes);\n throw new Error(\"ByBit API Key Info request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitApiKeyInfo>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit API Key Info API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n if (!bybitJson) {\n console.error(\"Invalid ByBit API Key Info response\", bybitJson);\n throw new Error(\"Invalid ByBit API Key Info response\");\n }\n\n return bybitJson;\n}\n","import {\n IBybitCredentials,\n IBybitAccountInfo,\n IBybitApiResponse,\n} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\nimport { BYBIT_CONSTANTS } from \"./constants\";\n\nexport async function getAccountInfo(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitAccountInfo>> {\n const { apiKey, apiSecret } = credentials;\n const queryString = \"accountType=UNIFIED\";\n \n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/account/info`, {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n });\n } catch (error) {\n console.error(\"ByBit Account API network error\", error);\n throw new Error(\"ByBit Account API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Account API request failed\", bybitRes);\n throw new Error(\"ByBit Account API request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitAccountInfo>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Account API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n const raw = bybitJson.result?.list?.[0];\n\n if (!raw) {\n console.error(\"No account info returned\", bybitJson);\n throw new Error(\"No account info returned\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitApiResponse, IBybitWalletAccount, IBybitCredentials } from \"../../types/bybit\";\n\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// GET /api/bybit/wallet-balance?accountType=UNIFIED\nexport async function getWalletBalance(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitWalletAccount>> {\n const { apiKey } = credentials;\n\n const query = new URLSearchParams({\n accountType: \"UNIFIED\",\n coin: \"USDT\",\n });\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/account/wallet-balance?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n },\n );\n } catch (error) {\n console.error(\"ByBit Wallet API network error\", error);\n throw new Error(\"ByBit Wallet API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Wallet API request failed\", bybitRes);\n throw new Error(\"ByBit Wallet API request failed: \" + bybitRes.statusText);\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitWalletAccount>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Wallet API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitCredentials, IBybitApiResponse, IBybitApiResponseList, IBybitClosedPnl, IBybitClosedPnlRequest } from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// GET /api/bybit/wallet-balance?accountType=UNIFIED\nexport async function getClosedPnl(\n credentials: IBybitCredentials,\n payload: IBybitClosedPnlRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>> {\n const { apiKey } = credentials;\n const query = new URLSearchParams({\n category: \"linear\",\n //symbol: \"BTCUSDT\",\n limit: \"50\", //default limit\n });\n\n if (typeof payload.startTime === \"number\") {\n query.set(\"startTime\", String(payload.startTime));\n }\n\n if (typeof payload.endTime === \"number\") {\n query.set(\"endTime\", String(payload.endTime));\n }\n\n if (typeof payload.cursor === \"string\") {\n query.set(\"cursor\", String(payload.cursor));\n }\n\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/position/closed-pnl?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n },\n );\n } catch (error) {\n console.error(\"ByBit Closed PNL API network error\", error);\n throw new Error(\"ByBit Closed PNL API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Closed PNL API request failed\", bybitRes);\n throw new Error(\"ByBit Closed PNL API request failed\");\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Closed PNL API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport {\n IBybitCredentials,\n IBybitApiResponse,\n IBybitApiResponseList,\n IBybitPositionInfo,\n IBybitPositionInfoRequest,\n} from \"../../types/bybit\";\n\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\nconst DEFAULT_SETTLE_COIN = \"USDT\";\nconst DEFAULT_CATEGORY = \"linear\";\n\n// Query real-time position data, such as position size, cumulative realized PNL, etc.\nexport async function getPositionInfo(\n credentials: IBybitCredentials,\n payload: IBybitPositionInfoRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>> {\n const query = new URLSearchParams({\n settleCoin: payload.settleCoin ?? DEFAULT_SETTLE_COIN,\n category: payload.category ?? DEFAULT_CATEGORY,\n limit: \"50\", //default limit\n });\n\n if (typeof payload?.symbol === \"string\") {\n query.set(\"symbol\", String(payload.symbol));\n }\n\n if (typeof payload?.cursor === \"string\") {\n query.set(\"cursor\", String(payload.cursor));\n }\n\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/position/list?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": credentials.apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n },\n );\n } catch (error) {\n console.error(\"ByBit Position Info API network error\", { cause: error });\n throw new Error(\"ByBit Position Info API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Position Info API request failed\", bybitRes);\n throw new Error(\"ByBit Position Info API request failed\");\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>;\n \n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Position Info API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\n\nimport {\n IBybitCredentials,\n IBybitApiResponse,\n IBybitAccountInfo,\n IBybitDemoApplyMoneyRequest,\n} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\nimport { IBybitDemoApplyMoney } from \"../../types/bybit/IBybitDemoApplyMoney\";\n\n// POST /api/bybit/apply-money\nexport async function applyDemoMoney(\n credentials: IBybitCredentials,\n payload: IBybitDemoApplyMoneyRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitDemoApplyMoney>> {\n const { apiKey } = credentials;\n\n const requestBody = JSON.stringify(payload);\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString: requestBody,\n timeOffset \n });\n \n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/account/demo-apply-money`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n body: requestBody,\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n },\n );\n } catch (error) {\n throw new Error(\"ByBit Apply Money API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n throw new Error(\"ByBit Apply Money API request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitAccountInfo>;\n\n if (bybitJson.retCode !== 0) {\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitServerTime, IBybitApiResponse } from \"../../types/bybit\";\n\nexport async function getServerTime(): Promise<IBybitApiResponse<IBybitServerTime>> {\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/market/time`,\n {\n cache: \"no-store\",\n }\n );\n } catch (error) {\n console.error(\"ByBit Server Time network error\", error);\n throw new Error(\"ByBit Server Time network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Server Time request failed\", bybitRes.status, bybitRes.statusText);\n throw new Error(`ByBit Server Time request failed: ${bybitRes.status}`);\n }\n\n let bybitJson: IBybitApiResponse<IBybitServerTime>;\n\n try {\n bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitServerTime>;\n } catch (error) {\n console.error(\"Invalid ByBit Server Time response\", error);\n throw new Error(\"Invalid ByBit Server Time response\", { cause: error });\n }\n\n if (!bybitJson) {\n throw new Error(\"Invalid ByBit Server Time response\");\n }\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Server Time API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit server time error\");\n }\n\n return bybitJson;\n}","import { createHmac } from \"crypto\";\nimport { env } from \"node:process\";\nimport { getServerTime } from \"../providers/bybit\";\nimport { BYBIT_CONSTANTS } from \"../providers/bybit/constants\";\nimport type { IBybitSignRequest } from \"../types/bybit\";\n\nexport function signBybitRequest(request: IBybitSignRequest) {\n const { credentials, queryString, timeOffset } = request;\n const { apiSecret, apiKey } = credentials;\n\n const timestamp = getBybitTimestamp(timeOffset);\n\n const payload = `${timestamp}${apiKey}${BYBIT_CONSTANTS.recvWindowTimeoutMs}${queryString ?? \"\"}`;\n const signature = createHmac(\"sha256\", apiSecret)\n .update(payload)\n .digest(\"hex\");\n\n return { signature, timestamp };\n}\n\nexport async function syncBybitServerTime(): Promise<number> {\n const localTimeBefore = Date.now();\n const { result } = await getServerTime();\n\n const serverTime = parseInt(result.timeNano, 10) / 1000000;\n const localTimeAfter = Date.now();\n\n // Estimate the local time at which Bybit generated\n // the response by using the midpoint.\n const estimatedLatency = (localTimeAfter - localTimeBefore) / 2;\n const timeOffset = Math.round(serverTime - (localTimeBefore + estimatedLatency));\n\n return timeOffset;\n}\n\nexport function getBybitTimestamp(timeOffset: number = 0): string {\n return String(Date.now() + timeOffset);\n}","import type {\n IBybitApiKeyInfo,\n IBybitApiResponse,\n IBybitClosedPnlRequest,\n IBybitCredentials,\n IBybitDemoApplyMoneyRequest,\n IBybitPositionInfoRequest,\n} from \"../types/bybit\";\nimport { syncBybitServerTime } from \"../utils/bybitHelper\";\n\nimport {\n getApiKeyInfo,\n getClosedPnl,\n getAccountInfo,\n getWalletBalance,\n applyDemoMoney,\n getPositionInfo\n} from \"../providers/bybit\";\n\nexport class BybitClient {\n private timeOffset = 0;\n private readonly ready: Promise<void>;\n\n constructor() {\n this.ready = this.initializeTimeOffset();\n }\n\n private async initializeTimeOffset(): Promise<void> {\n const maxAttempts = 3;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n this.timeOffset = await syncBybitServerTime();\n return;\n } catch (error) {\n if (attempt === maxAttempts) {\n throw error;\n }\n\n await new Promise((resolve) => setTimeout(resolve, attempt * 2_000));\n }\n }\n }\n\n async applyDemoMoney(\n credentials: IBybitCredentials,\n payload: IBybitDemoApplyMoneyRequest,\n ) {\n await this.ready;\n // Implement the logic to apply demo money to the Bybit account using the provided payload\n return await applyDemoMoney(credentials, payload, this.timeOffset);\n }\n\n async getAccountInfo(\n credentials: IBybitCredentials,\n ) {\n await this.ready;\n return await getAccountInfo(credentials, this.timeOffset);\n }\n\n async getApiKeyInfo(\n credentials: IBybitCredentials,\n ): Promise<IBybitApiResponse<IBybitApiKeyInfo>> {\n await this.ready;\n return await getApiKeyInfo(credentials, this.timeOffset);\n }\n\n async getClosedPnl(\n credentials: IBybitCredentials,\n payload: IBybitClosedPnlRequest\n ) {\n await this.ready;\n return await getClosedPnl(credentials, payload, this.timeOffset);\n }\n\n async getWalletBalance(credentials: IBybitCredentials) {\n await this.ready;\n return await getWalletBalance(credentials, this.timeOffset);\n }\n\n async getPositionInfo(\n credentials: IBybitCredentials, \n payload: IBybitPositionInfoRequest\n ) {\n await this.ready;\n return await getPositionInfo(credentials, payload, this.timeOffset);\n }\n}\n","export const parseNumber = (\n value: number | string | null | undefined,\n): number | null => {\n if (value === null || value === undefined) {\n return null;\n }\n\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n};\n\nexport const toIsoDate = (\n value: string | number | null | undefined,\n): string | null => {\n const parsed = parseNumber(value);\n if (parsed === null || parsed <= 0) {\n return null;\n }\n\n const date = new Date(parsed);\n if (Number.isNaN(date.getTime())) {\n return null;\n }\n\n return date.toISOString();\n};\n\nexport const isSameUtcDay = (\n left: string | null | undefined,\n right: string | null | undefined,\n): boolean => {\n if (!left || !right) {\n return false;\n }\n\n const normalizedLeft = left.trim();\n const normalizedRight = right.trim();\n\n if (!normalizedLeft || !normalizedRight) {\n return false;\n }\n\n const leftDate = new Date(normalizedLeft);\n const rightDate = new Date(normalizedRight);\n\n if (Number.isNaN(leftDate.getTime()) || Number.isNaN(rightDate.getTime())) {\n return false;\n }\n\n return (\n leftDate.toISOString().slice(0, 10) === rightDate.toISOString().slice(0, 10)\n );\n};\n","import {\n TChallengeClosedPnl,\n TChallengeProgress,\n TChallengeWalletBalance,\n} from \"../types/challenge\";\nimport { IBybitAccountType, IBybitCoinType } from \"../types/bybit/enums\";\nimport { isSameUtcDay } from \"./helper\";\n\nexport const createDefaultWallet = (\n challengeId: string = \"\",\n capital: number = 0,\n): TChallengeWalletBalance =>\n ({\n challengeId,\n accountType: IBybitAccountType.UNIFIED,\n totalEquity: 0,\n totalPerpUpl: 0,\n totalWalletBalance: 0,\n totalAvailableBalance: 0,\n capital,\n\n equity: 0,\n usdValue: 0,\n unrealisedPnl: 0,\n walletBalance: 0,\n availableToWithdraw: 0,\n coin: IBybitCoinType.USDT,\n updatedAt: new Date().toISOString(),\n }) as TChallengeWalletBalance;\n\nexport const createDefaultProgress = (\n challengeId: string = \"\",\n currentEquity: number = 0,\n): TChallengeProgress =>\n ({\n id: new Date().getTime().toString(),\n challengeId,\n currentEquity,\n totalLoss: 0,\n tradingDays: 0,\n dailyDrawdown: 0,\n profitTarget: 0,\n dailyStartingEquity: 0,\n dailyStartingUpdatedAt: new Date().toISOString(),\n dailyMaxEquity: 0,\n dailyMinEquity: 0,\n dailyMaxUpdatedAt: new Date().toISOString(),\n dailyMinUpdatedAt: new Date().toISOString(),\n }) as TChallengeProgress;\n\n // A trading day counts if you open and close at least one trade \n// that day with a position size ≥ 5% of the initial balance and a PnL of ±1% or more.\nexport const tradingDaysCountCalculation = async (\n closedPnlData: TChallengeClosedPnl[] | null,\n minPositionSize: number,\n): Promise<number> => {\n if (!closedPnlData || closedPnlData.length === 0) {\n return 0;\n }\n\n const closedPnlGrouped = closedPnlData.reduce(\n (acc, trade) => {\n const day = trade.updatedTime.split(\"T\")[0];\n if (!acc[day]) {\n acc[day] = [];\n }\n acc[day].push(trade);\n return acc;\n },\n {} as Record<string, TChallengeClosedPnl[]>,\n );\n\n return await Object.values(closedPnlGrouped).reduce((count, dayTrades) => {\n // Check if any trade closed today met the minimum size requirement\n const hasQualifyingTrade = dayTrades.some((trade) => {\n const entryValue = trade.cumEntryValue;\n const closedPnL = trade.closedPnl;\n\n // 1. Position size must be >= 5% of initial balance\n const passesSize = entryValue >= minPositionSize;\n\n // 2. PnL must be >= 1% of the position size itself\n const minRequiredPnL = entryValue * 0.01;\n const passesPnL = Math.abs(closedPnL) >= minRequiredPnL;\n\n return passesSize && passesPnL;\n });\n\n return hasQualifyingTrade ? count + 1 : count;\n }, 0);\n};\n\nexport const currentDailyEquity = (\n wallet: TChallengeWalletBalance,\n progress: TChallengeProgress\n) => {\n const today = new Date().toISOString();\n const startDate = new Date().setUTCHours(0, 0, 0, 0);\n const startDateStr = new Date(startDate).toISOString();\n\n const { equity, unrealisedPnl } = wallet;\n const { dailyStartingEquity, dailyMaxEquity, dailyMinEquity, \n dailyStartingUpdatedAt, dailyMaxUpdatedAt, dailyMinUpdatedAt } = progress;\n \n // Determine if the daily starting equity should be updated based on whether it's a new day\n let isSameDay = isSameUtcDay(dailyStartingUpdatedAt, startDateStr)\n const newDailyStartingUpdatedAt = isSameDay ? dailyStartingUpdatedAt : startDateStr;\n const newDailyStartingEquity = isSameDay ? dailyStartingEquity : equity;\n\n // Determine if the max and min daily equity should be updated based on whether it's a new day\n isSameDay = isSameUtcDay(dailyMaxUpdatedAt, today);\n let newMaxUpdatedAt = isSameDay ? dailyMaxUpdatedAt : today;\n const newdailyMaxEquity = Math.max(isSameDay ? dailyMaxEquity : equity , equity);\n \n // Determine if the min daily equity should be updated based on whether it's a new day\n isSameDay = isSameUtcDay(dailyMinUpdatedAt, today);\n const newMinUpdatedAt = isSameDay ? dailyMinUpdatedAt : today;\n const newdailyMinEquity = Math.min(isSameDay ? dailyMinEquity : equity, equity);\n\n //Trailing Drawdown: The difference between the day’s highest equity and the lowest equity reached afterward, both including unrealized P&L.\n const dailyEquityDrawdown = equity - newdailyMaxEquity;\n \n return {\n currentEquity: equity,\n dailyDrawdown: dailyEquityDrawdown,\n\n dailyStartingEquity: newDailyStartingEquity,\n dailyStartingUpdatedAt: newDailyStartingUpdatedAt.slice(0, 10),\n\n dailyMaxEquity: newdailyMaxEquity,\n dailyMaxUpdatedAt: newMaxUpdatedAt,\n\n dailyMinEquity: newdailyMinEquity,\n dailyMinUpdatedAt: newMinUpdatedAt,\n };\n};"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -2,7 +2,7 @@ export { BybitClient } from './clients/index.cjs';
|
|
|
2
2
|
export { applyDemoMoney, getAccountInfo, getApiKeyInfo, getClosedPnl, getPositionInfo, getServerTime, getWalletBalance } from './providers/bybit/index.cjs';
|
|
3
3
|
export { createDefaultProgress, createDefaultWallet, currentDailyEquity, getBybitTimestamp, isSameUtcDay, parseNumber, signBybitRequest, syncBybitServerTime, toIsoDate, tradingDaysCountCalculation } from './utils/index.cjs';
|
|
4
4
|
export { TSyncResponse } from './types/index.cjs';
|
|
5
|
-
export { IBybitAccountInfo, IBybitApiKeyInfo, IBybitApiResponse, IBybitApiResponseList, IBybitClosedPnl, IBybitClosedPnlRequest, IBybitClosedPnlResponse, IBybitCoinBalance, IBybitCredentials, IBybitDemoApplyMoneyItem, IBybitDemoApplyMoneyPayload, IBybitDemoApplyMoneyRequest, IBybitDemoApplyMoneyResponse, IBybitPositionInfo, IBybitServerTime, IBybitSignRequest, IBybitWalletAccount, IBybitWalletResponse } from './types/bybit/index.cjs';
|
|
5
|
+
export { IBybitAccountInfo, IBybitApiKeyInfo, IBybitApiResponse, IBybitApiResponseList, IBybitClosedPnl, IBybitClosedPnlRequest, IBybitClosedPnlResponse, IBybitCoinBalance, IBybitCredentials, IBybitDemoApplyMoneyItem, IBybitDemoApplyMoneyPayload, IBybitDemoApplyMoneyRequest, IBybitDemoApplyMoneyResponse, IBybitPositionInfo, IBybitPositionInfoRequest, IBybitPositionInfoResponse, IBybitServerTime, IBybitSignRequest, IBybitWalletAccount, IBybitWalletResponse } from './types/bybit/index.cjs';
|
|
6
6
|
export { TChallengeAccountInfo, TChallengeApiKeyInfo, TChallengeCapital, TChallengeItem, TChallengeListItem, TChallengeMode, TChallengePositionInfo, TChallengeProvider, TChallengeRule, TChallengeRuleGroup, TChallengeStatistics, TChallengeStatus, TChallengeTier, TChallengeType, TDrawdownType, TTradingType } from './types/challenge/index.cjs';
|
|
7
7
|
export { T as TChallengeClosedPnl, a as TChallengeProgress, b as TChallengeWalletBalance } from './TChallengeProgress-C_DBsbUa.cjs';
|
|
8
8
|
export { I as IBybitAccountType, a as IBybitApiKeyVipLevel, b as IBybitCoinType } from './enums--bdw39rp.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { BybitClient } from './clients/index.js';
|
|
|
2
2
|
export { applyDemoMoney, getAccountInfo, getApiKeyInfo, getClosedPnl, getPositionInfo, getServerTime, getWalletBalance } from './providers/bybit/index.js';
|
|
3
3
|
export { createDefaultProgress, createDefaultWallet, currentDailyEquity, getBybitTimestamp, isSameUtcDay, parseNumber, signBybitRequest, syncBybitServerTime, toIsoDate, tradingDaysCountCalculation } from './utils/index.js';
|
|
4
4
|
export { TSyncResponse } from './types/index.js';
|
|
5
|
-
export { IBybitAccountInfo, IBybitApiKeyInfo, IBybitApiResponse, IBybitApiResponseList, IBybitClosedPnl, IBybitClosedPnlRequest, IBybitClosedPnlResponse, IBybitCoinBalance, IBybitCredentials, IBybitDemoApplyMoneyItem, IBybitDemoApplyMoneyPayload, IBybitDemoApplyMoneyRequest, IBybitDemoApplyMoneyResponse, IBybitPositionInfo, IBybitServerTime, IBybitSignRequest, IBybitWalletAccount, IBybitWalletResponse } from './types/bybit/index.js';
|
|
5
|
+
export { IBybitAccountInfo, IBybitApiKeyInfo, IBybitApiResponse, IBybitApiResponseList, IBybitClosedPnl, IBybitClosedPnlRequest, IBybitClosedPnlResponse, IBybitCoinBalance, IBybitCredentials, IBybitDemoApplyMoneyItem, IBybitDemoApplyMoneyPayload, IBybitDemoApplyMoneyRequest, IBybitDemoApplyMoneyResponse, IBybitPositionInfo, IBybitPositionInfoRequest, IBybitPositionInfoResponse, IBybitServerTime, IBybitSignRequest, IBybitWalletAccount, IBybitWalletResponse } from './types/bybit/index.js';
|
|
6
6
|
export { TChallengeAccountInfo, TChallengeApiKeyInfo, TChallengeCapital, TChallengeItem, TChallengeListItem, TChallengeMode, TChallengePositionInfo, TChallengeProvider, TChallengeRule, TChallengeRuleGroup, TChallengeStatistics, TChallengeStatus, TChallengeTier, TChallengeType, TDrawdownType, TTradingType } from './types/challenge/index.js';
|
|
7
7
|
export { T as TChallengeClosedPnl, a as TChallengeProgress, b as TChallengeWalletBalance } from './TChallengeProgress-UmIOnrHy.js';
|
|
8
8
|
export { I as IBybitAccountType, a as IBybitApiKeyVipLevel, b as IBybitCoinType } from './enums--bdw39rp.js';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { createDefaultProgress, createDefaultWallet, currentDailyEquity, isSameUtcDay, parseNumber, toIsoDate, tradingDaysCountCalculation } from './chunk-6R5UUXX4.js';
|
|
2
2
|
import './chunk-2KHIGJJV.js';
|
|
3
|
-
export { BybitClient } from './chunk-
|
|
4
|
-
export { applyDemoMoney, getAccountInfo, getApiKeyInfo, getBybitTimestamp, getClosedPnl, getPositionInfo, getServerTime, getWalletBalance, signBybitRequest, syncBybitServerTime } from './chunk-
|
|
3
|
+
export { BybitClient } from './chunk-F4CGZFA5.js';
|
|
4
|
+
export { applyDemoMoney, getAccountInfo, getApiKeyInfo, getBybitTimestamp, getClosedPnl, getPositionInfo, getServerTime, getWalletBalance, signBybitRequest, syncBybitServerTime } from './chunk-6BR57NUP.js';
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -200,20 +200,20 @@ async function getClosedPnl(credentials, payload, timeOffset) {
|
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
// src/providers/bybit/get-position-info.ts
|
|
203
|
-
|
|
203
|
+
var DEFAULT_SETTLE_COIN = "USDT";
|
|
204
|
+
var DEFAULT_CATEGORY = "linear";
|
|
205
|
+
async function getPositionInfo(credentials, payload, timeOffset) {
|
|
204
206
|
const query = new URLSearchParams({
|
|
205
|
-
|
|
207
|
+
settleCoin: payload.settleCoin ?? DEFAULT_SETTLE_COIN,
|
|
208
|
+
category: payload.category ?? DEFAULT_CATEGORY,
|
|
206
209
|
limit: "50"
|
|
207
210
|
//default limit
|
|
208
211
|
});
|
|
209
|
-
if (typeof symbol === "string") {
|
|
210
|
-
query.set("symbol", String(symbol));
|
|
212
|
+
if (typeof payload?.symbol === "string") {
|
|
213
|
+
query.set("symbol", String(payload.symbol));
|
|
211
214
|
}
|
|
212
|
-
if (typeof
|
|
213
|
-
query.set("
|
|
214
|
-
}
|
|
215
|
-
if (typeof cursor === "string") {
|
|
216
|
-
query.set("cursor", String(cursor));
|
|
215
|
+
if (typeof payload?.cursor === "string") {
|
|
216
|
+
query.set("cursor", String(payload.cursor));
|
|
217
217
|
}
|
|
218
218
|
const queryString = query.toString();
|
|
219
219
|
const { signature, timestamp } = signBybitRequest({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/providers/bybit/constants.ts","../../../src/utils/bybitHelper.ts","../../../src/providers/bybit/get-api-key-info.ts","../../../src/providers/bybit/get-account-info.ts","../../../src/providers/bybit/get-wallet-balance.ts","../../../src/providers/bybit/get-closed-pnl.ts","../../../src/providers/bybit/get-position-info.ts","../../../src/providers/bybit/apply-demo-money.ts","../../../src/providers/bybit/get-server-time.ts"],"names":["createHmac"],"mappings":"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","file":"index.cjs","sourcesContent":["export const BYBIT_CONSTANTS = {\n baseUrl: process.env.BYBIT_BASE_URL || \"https://api-demo.bybit.com\",\n fetchTimeoutMs: Number(process.env.BYBIT_FETCH_TIMEOUT_MS) || 10000,\n recvWindowTimeoutMs: process.env.BYBIT_RECV_WINDOW_TIMEOUT_MS || \"5000\",\n}","import { createHmac } from \"crypto\";\nimport { env } from \"node:process\";\nimport { getServerTime } from \"../providers/bybit\";\nimport { BYBIT_CONSTANTS } from \"../providers/bybit/constants\";\nimport type { IBybitSignRequest } from \"../types/bybit\";\n\nexport function signBybitRequest(request: IBybitSignRequest) {\n const { credentials, queryString, timeOffset } = request;\n const { apiSecret, apiKey } = credentials;\n\n const timestamp = getBybitTimestamp(timeOffset);\n\n const payload = `${timestamp}${apiKey}${BYBIT_CONSTANTS.recvWindowTimeoutMs}${queryString ?? \"\"}`;\n const signature = createHmac(\"sha256\", apiSecret)\n .update(payload)\n .digest(\"hex\");\n\n return { signature, timestamp };\n}\n\nexport async function syncBybitServerTime(): Promise<number> {\n const localTimeBefore = Date.now();\n const { result } = await getServerTime();\n\n const serverTime = parseInt(result.timeNano, 10) / 1000000;\n const localTimeAfter = Date.now();\n\n // Estimate the local time at which Bybit generated\n // the response by using the midpoint.\n const estimatedLatency = (localTimeAfter - localTimeBefore) / 2;\n const timeOffset = Math.round(serverTime - (localTimeBefore + estimatedLatency));\n\n return timeOffset;\n}\n\nexport function getBybitTimestamp(timeOffset: number = 0): string {\n return String(Date.now() + timeOffset);\n}","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitCredentials, IBybitApiKeyInfo, IBybitApiResponse} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\nexport async function getApiKeyInfo(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiKeyInfo>> {\n const { signature, timestamp } = signBybitRequest({\n credentials,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/user/query-api`, {\n headers: {\n \"X-BAPI-API-KEY\": credentials.apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n //signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n });\n } catch (error) {\n console.error(\"ByBit API Key Info network error\", error);\n throw new Error(\"ByBit API Key Info network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit API Key Info request failed\", bybitRes);\n throw new Error(\"ByBit API Key Info request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitApiKeyInfo>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit API Key Info API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n if (!bybitJson) {\n console.error(\"Invalid ByBit API Key Info response\", bybitJson);\n throw new Error(\"Invalid ByBit API Key Info response\");\n }\n\n return bybitJson;\n}\n","import {\n IBybitCredentials,\n IBybitAccountInfo,\n IBybitApiResponse,\n} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\nimport { BYBIT_CONSTANTS } from \"./constants\";\n\nexport async function getAccountInfo(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitAccountInfo>> {\n const { apiKey, apiSecret } = credentials;\n const queryString = \"accountType=UNIFIED\";\n \n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/account/info`, {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n });\n } catch (error) {\n console.error(\"ByBit Account API network error\", error);\n throw new Error(\"ByBit Account API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Account API request failed\", bybitRes);\n throw new Error(\"ByBit Account API request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitAccountInfo>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Account API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n const raw = bybitJson.result?.list?.[0];\n\n if (!raw) {\n console.error(\"No account info returned\", bybitJson);\n throw new Error(\"No account info returned\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitApiResponse, IBybitWalletAccount, IBybitCredentials } from \"../../types/bybit\";\n\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// GET /api/bybit/wallet-balance?accountType=UNIFIED\nexport async function getWalletBalance(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitWalletAccount>> {\n const { apiKey } = credentials;\n\n const query = new URLSearchParams({\n accountType: \"UNIFIED\",\n coin: \"USDT\",\n });\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/account/wallet-balance?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n },\n );\n } catch (error) {\n console.error(\"ByBit Wallet API network error\", error);\n throw new Error(\"ByBit Wallet API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Wallet API request failed\", bybitRes);\n throw new Error(\"ByBit Wallet API request failed: \" + bybitRes.statusText);\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitWalletAccount>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Wallet API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitCredentials, IBybitApiResponse, IBybitApiResponseList, IBybitClosedPnl, IBybitClosedPnlRequest } from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// GET /api/bybit/wallet-balance?accountType=UNIFIED\nexport async function getClosedPnl(\n credentials: IBybitCredentials,\n payload: IBybitClosedPnlRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>> {\n const { apiKey } = credentials;\n const query = new URLSearchParams({\n category: \"linear\",\n //symbol: \"BTCUSDT\",\n limit: \"50\", //default limit\n });\n\n if (typeof payload.startTime === \"number\") {\n query.set(\"startTime\", String(payload.startTime));\n }\n\n if (typeof payload.endTime === \"number\") {\n query.set(\"endTime\", String(payload.endTime));\n }\n\n if (typeof payload.cursor === \"string\") {\n query.set(\"cursor\", String(payload.cursor));\n }\n\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/position/closed-pnl?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n },\n );\n } catch (error) {\n console.error(\"ByBit Closed PNL API network error\", error);\n throw new Error(\"ByBit Closed PNL API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Closed PNL API request failed\", bybitRes);\n throw new Error(\"ByBit Closed PNL API request failed\");\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Closed PNL API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport {\n IBybitCredentials,\n IBybitApiResponse,\n IBybitApiResponseList,\n IBybitPositionInfo,\n} from \"../../types/bybit\";\n\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// Query real-time position data, such as position size, cumulative realized PNL, etc.\nexport async function getPositionInfo(\n credentials: IBybitCredentials,\n category?: string,\n symbol?: string,\n settleCoin?: string,\n cursor?: string,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>> {\n const query = new URLSearchParams({\n category: category ?? \"linear\",\n limit: \"50\", //default limit\n });\n\n if (typeof symbol === \"string\") {\n query.set(\"symbol\", String(symbol));\n }\n\n if (typeof settleCoin === \"string\") {\n query.set(\"settleCoin\", String(settleCoin));\n }\n\n if (typeof cursor === \"string\") {\n query.set(\"cursor\", String(cursor));\n }\n\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/position/list?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": credentials.apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n },\n );\n } catch (error) {\n console.error(\"ByBit Position Info API network error\", { cause: error });\n throw new Error(\"ByBit Position Info API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Position Info API request failed\", bybitRes);\n throw new Error(\"ByBit Position Info API request failed\");\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>;\n \n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Position Info API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\n\nimport {\n IBybitCredentials,\n IBybitApiResponse,\n IBybitAccountInfo,\n IBybitDemoApplyMoneyRequest,\n} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\nimport { IBybitDemoApplyMoney } from \"../../types/bybit/IBybitDemoApplyMoney\";\n\n// POST /api/bybit/apply-money\nexport async function applyDemoMoney(\n credentials: IBybitCredentials,\n payload: IBybitDemoApplyMoneyRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitDemoApplyMoney>> {\n const { apiKey } = credentials;\n\n const requestBody = JSON.stringify(payload);\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString: requestBody,\n timeOffset \n });\n \n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/account/demo-apply-money`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n body: requestBody,\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n },\n );\n } catch (error) {\n throw new Error(\"ByBit Apply Money API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n throw new Error(\"ByBit Apply Money API request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitAccountInfo>;\n\n if (bybitJson.retCode !== 0) {\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitServerTime, IBybitApiResponse } from \"../../types/bybit\";\n\nexport async function getServerTime(): Promise<IBybitApiResponse<IBybitServerTime>> {\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/market/time`,\n {\n cache: \"no-store\",\n }\n );\n } catch (error) {\n console.error(\"ByBit Server Time network error\", error);\n throw new Error(\"ByBit Server Time network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Server Time request failed\", bybitRes.status, bybitRes.statusText);\n throw new Error(`ByBit Server Time request failed: ${bybitRes.status}`);\n }\n\n let bybitJson: IBybitApiResponse<IBybitServerTime>;\n\n try {\n bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitServerTime>;\n } catch (error) {\n console.error(\"Invalid ByBit Server Time response\", error);\n throw new Error(\"Invalid ByBit Server Time response\", { cause: error });\n }\n\n if (!bybitJson) {\n throw new Error(\"Invalid ByBit Server Time response\");\n }\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Server Time API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit server time error\");\n }\n\n return bybitJson;\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/providers/bybit/constants.ts","../../../src/utils/bybitHelper.ts","../../../src/providers/bybit/get-api-key-info.ts","../../../src/providers/bybit/get-account-info.ts","../../../src/providers/bybit/get-wallet-balance.ts","../../../src/providers/bybit/get-closed-pnl.ts","../../../src/providers/bybit/get-position-info.ts","../../../src/providers/bybit/apply-demo-money.ts","../../../src/providers/bybit/get-server-time.ts"],"names":["createHmac"],"mappings":"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","file":"index.cjs","sourcesContent":["export const BYBIT_CONSTANTS = {\n baseUrl: process.env.BYBIT_BASE_URL || \"https://api-demo.bybit.com\",\n fetchTimeoutMs: Number(process.env.BYBIT_FETCH_TIMEOUT_MS) || 10000,\n recvWindowTimeoutMs: process.env.BYBIT_RECV_WINDOW_TIMEOUT_MS || \"5000\",\n}","import { createHmac } from \"crypto\";\nimport { env } from \"node:process\";\nimport { getServerTime } from \"../providers/bybit\";\nimport { BYBIT_CONSTANTS } from \"../providers/bybit/constants\";\nimport type { IBybitSignRequest } from \"../types/bybit\";\n\nexport function signBybitRequest(request: IBybitSignRequest) {\n const { credentials, queryString, timeOffset } = request;\n const { apiSecret, apiKey } = credentials;\n\n const timestamp = getBybitTimestamp(timeOffset);\n\n const payload = `${timestamp}${apiKey}${BYBIT_CONSTANTS.recvWindowTimeoutMs}${queryString ?? \"\"}`;\n const signature = createHmac(\"sha256\", apiSecret)\n .update(payload)\n .digest(\"hex\");\n\n return { signature, timestamp };\n}\n\nexport async function syncBybitServerTime(): Promise<number> {\n const localTimeBefore = Date.now();\n const { result } = await getServerTime();\n\n const serverTime = parseInt(result.timeNano, 10) / 1000000;\n const localTimeAfter = Date.now();\n\n // Estimate the local time at which Bybit generated\n // the response by using the midpoint.\n const estimatedLatency = (localTimeAfter - localTimeBefore) / 2;\n const timeOffset = Math.round(serverTime - (localTimeBefore + estimatedLatency));\n\n return timeOffset;\n}\n\nexport function getBybitTimestamp(timeOffset: number = 0): string {\n return String(Date.now() + timeOffset);\n}","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitCredentials, IBybitApiKeyInfo, IBybitApiResponse} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\nexport async function getApiKeyInfo(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiKeyInfo>> {\n const { signature, timestamp } = signBybitRequest({\n credentials,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/user/query-api`, {\n headers: {\n \"X-BAPI-API-KEY\": credentials.apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n //signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n });\n } catch (error) {\n console.error(\"ByBit API Key Info network error\", error);\n throw new Error(\"ByBit API Key Info network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit API Key Info request failed\", bybitRes);\n throw new Error(\"ByBit API Key Info request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitApiKeyInfo>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit API Key Info API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n if (!bybitJson) {\n console.error(\"Invalid ByBit API Key Info response\", bybitJson);\n throw new Error(\"Invalid ByBit API Key Info response\");\n }\n\n return bybitJson;\n}\n","import {\n IBybitCredentials,\n IBybitAccountInfo,\n IBybitApiResponse,\n} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\nimport { BYBIT_CONSTANTS } from \"./constants\";\n\nexport async function getAccountInfo(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitAccountInfo>> {\n const { apiKey, apiSecret } = credentials;\n const queryString = \"accountType=UNIFIED\";\n \n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/account/info`, {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n });\n } catch (error) {\n console.error(\"ByBit Account API network error\", error);\n throw new Error(\"ByBit Account API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Account API request failed\", bybitRes);\n throw new Error(\"ByBit Account API request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitAccountInfo>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Account API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n const raw = bybitJson.result?.list?.[0];\n\n if (!raw) {\n console.error(\"No account info returned\", bybitJson);\n throw new Error(\"No account info returned\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitApiResponse, IBybitWalletAccount, IBybitCredentials } from \"../../types/bybit\";\n\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// GET /api/bybit/wallet-balance?accountType=UNIFIED\nexport async function getWalletBalance(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitWalletAccount>> {\n const { apiKey } = credentials;\n\n const query = new URLSearchParams({\n accountType: \"UNIFIED\",\n coin: \"USDT\",\n });\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/account/wallet-balance?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n },\n );\n } catch (error) {\n console.error(\"ByBit Wallet API network error\", error);\n throw new Error(\"ByBit Wallet API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Wallet API request failed\", bybitRes);\n throw new Error(\"ByBit Wallet API request failed: \" + bybitRes.statusText);\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitWalletAccount>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Wallet API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitCredentials, IBybitApiResponse, IBybitApiResponseList, IBybitClosedPnl, IBybitClosedPnlRequest } from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// GET /api/bybit/wallet-balance?accountType=UNIFIED\nexport async function getClosedPnl(\n credentials: IBybitCredentials,\n payload: IBybitClosedPnlRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>> {\n const { apiKey } = credentials;\n const query = new URLSearchParams({\n category: \"linear\",\n //symbol: \"BTCUSDT\",\n limit: \"50\", //default limit\n });\n\n if (typeof payload.startTime === \"number\") {\n query.set(\"startTime\", String(payload.startTime));\n }\n\n if (typeof payload.endTime === \"number\") {\n query.set(\"endTime\", String(payload.endTime));\n }\n\n if (typeof payload.cursor === \"string\") {\n query.set(\"cursor\", String(payload.cursor));\n }\n\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/position/closed-pnl?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n },\n );\n } catch (error) {\n console.error(\"ByBit Closed PNL API network error\", error);\n throw new Error(\"ByBit Closed PNL API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Closed PNL API request failed\", bybitRes);\n throw new Error(\"ByBit Closed PNL API request failed\");\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Closed PNL API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport {\n IBybitCredentials,\n IBybitApiResponse,\n IBybitApiResponseList,\n IBybitPositionInfo,\n IBybitPositionInfoRequest,\n} from \"../../types/bybit\";\n\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\nconst DEFAULT_SETTLE_COIN = \"USDT\";\nconst DEFAULT_CATEGORY = \"linear\";\n\n// Query real-time position data, such as position size, cumulative realized PNL, etc.\nexport async function getPositionInfo(\n credentials: IBybitCredentials,\n payload: IBybitPositionInfoRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>> {\n const query = new URLSearchParams({\n settleCoin: payload.settleCoin ?? DEFAULT_SETTLE_COIN,\n category: payload.category ?? DEFAULT_CATEGORY,\n limit: \"50\", //default limit\n });\n\n if (typeof payload?.symbol === \"string\") {\n query.set(\"symbol\", String(payload.symbol));\n }\n\n if (typeof payload?.cursor === \"string\") {\n query.set(\"cursor\", String(payload.cursor));\n }\n\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/position/list?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": credentials.apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n },\n );\n } catch (error) {\n console.error(\"ByBit Position Info API network error\", { cause: error });\n throw new Error(\"ByBit Position Info API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Position Info API request failed\", bybitRes);\n throw new Error(\"ByBit Position Info API request failed\");\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>;\n \n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Position Info API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\n\nimport {\n IBybitCredentials,\n IBybitApiResponse,\n IBybitAccountInfo,\n IBybitDemoApplyMoneyRequest,\n} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\nimport { IBybitDemoApplyMoney } from \"../../types/bybit/IBybitDemoApplyMoney\";\n\n// POST /api/bybit/apply-money\nexport async function applyDemoMoney(\n credentials: IBybitCredentials,\n payload: IBybitDemoApplyMoneyRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitDemoApplyMoney>> {\n const { apiKey } = credentials;\n\n const requestBody = JSON.stringify(payload);\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString: requestBody,\n timeOffset \n });\n \n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/account/demo-apply-money`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n body: requestBody,\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n },\n );\n } catch (error) {\n throw new Error(\"ByBit Apply Money API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n throw new Error(\"ByBit Apply Money API request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitAccountInfo>;\n\n if (bybitJson.retCode !== 0) {\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitServerTime, IBybitApiResponse } from \"../../types/bybit\";\n\nexport async function getServerTime(): Promise<IBybitApiResponse<IBybitServerTime>> {\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/market/time`,\n {\n cache: \"no-store\",\n }\n );\n } catch (error) {\n console.error(\"ByBit Server Time network error\", error);\n throw new Error(\"ByBit Server Time network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Server Time request failed\", bybitRes.status, bybitRes.statusText);\n throw new Error(`ByBit Server Time request failed: ${bybitRes.status}`);\n }\n\n let bybitJson: IBybitApiResponse<IBybitServerTime>;\n\n try {\n bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitServerTime>;\n } catch (error) {\n console.error(\"Invalid ByBit Server Time response\", error);\n throw new Error(\"Invalid ByBit Server Time response\", { cause: error });\n }\n\n if (!bybitJson) {\n throw new Error(\"Invalid ByBit Server Time response\");\n }\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Server Time API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit server time error\");\n }\n\n return bybitJson;\n}"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IBybitCredentials, IBybitApiResponse, IBybitApiKeyInfo, IBybitAccountInfo, IBybitWalletAccount, IBybitClosedPnlRequest, IBybitApiResponseList, IBybitClosedPnl, IBybitPositionInfo, IBybitDemoApplyMoneyRequest, IBybitDemoApplyMoneyResponse as IBybitDemoApplyMoney, IBybitServerTime } from '../../types/bybit/index.cjs';
|
|
1
|
+
import { IBybitCredentials, IBybitApiResponse, IBybitApiKeyInfo, IBybitAccountInfo, IBybitWalletAccount, IBybitClosedPnlRequest, IBybitApiResponseList, IBybitClosedPnl, IBybitPositionInfoRequest, IBybitPositionInfo, IBybitDemoApplyMoneyRequest, IBybitDemoApplyMoneyResponse as IBybitDemoApplyMoney, IBybitServerTime } from '../../types/bybit/index.cjs';
|
|
2
2
|
import '../../enums--bdw39rp.cjs';
|
|
3
3
|
|
|
4
4
|
declare function getApiKeyInfo(credentials: IBybitCredentials, timeOffset?: number): Promise<IBybitApiResponse<IBybitApiKeyInfo>>;
|
|
@@ -9,7 +9,7 @@ declare function getWalletBalance(credentials: IBybitCredentials, timeOffset?: n
|
|
|
9
9
|
|
|
10
10
|
declare function getClosedPnl(credentials: IBybitCredentials, payload: IBybitClosedPnlRequest, timeOffset?: number): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>>;
|
|
11
11
|
|
|
12
|
-
declare function getPositionInfo(credentials: IBybitCredentials,
|
|
12
|
+
declare function getPositionInfo(credentials: IBybitCredentials, payload: IBybitPositionInfoRequest, timeOffset?: number): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>>;
|
|
13
13
|
|
|
14
14
|
declare function applyDemoMoney(credentials: IBybitCredentials, payload: IBybitDemoApplyMoneyRequest, timeOffset?: number): Promise<IBybitApiResponse<IBybitDemoApplyMoney>>;
|
|
15
15
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IBybitCredentials, IBybitApiResponse, IBybitApiKeyInfo, IBybitAccountInfo, IBybitWalletAccount, IBybitClosedPnlRequest, IBybitApiResponseList, IBybitClosedPnl, IBybitPositionInfo, IBybitDemoApplyMoneyRequest, IBybitDemoApplyMoneyResponse as IBybitDemoApplyMoney, IBybitServerTime } from '../../types/bybit/index.js';
|
|
1
|
+
import { IBybitCredentials, IBybitApiResponse, IBybitApiKeyInfo, IBybitAccountInfo, IBybitWalletAccount, IBybitClosedPnlRequest, IBybitApiResponseList, IBybitClosedPnl, IBybitPositionInfoRequest, IBybitPositionInfo, IBybitDemoApplyMoneyRequest, IBybitDemoApplyMoneyResponse as IBybitDemoApplyMoney, IBybitServerTime } from '../../types/bybit/index.js';
|
|
2
2
|
import '../../enums--bdw39rp.js';
|
|
3
3
|
|
|
4
4
|
declare function getApiKeyInfo(credentials: IBybitCredentials, timeOffset?: number): Promise<IBybitApiResponse<IBybitApiKeyInfo>>;
|
|
@@ -9,7 +9,7 @@ declare function getWalletBalance(credentials: IBybitCredentials, timeOffset?: n
|
|
|
9
9
|
|
|
10
10
|
declare function getClosedPnl(credentials: IBybitCredentials, payload: IBybitClosedPnlRequest, timeOffset?: number): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>>;
|
|
11
11
|
|
|
12
|
-
declare function getPositionInfo(credentials: IBybitCredentials,
|
|
12
|
+
declare function getPositionInfo(credentials: IBybitCredentials, payload: IBybitPositionInfoRequest, timeOffset?: number): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>>;
|
|
13
13
|
|
|
14
14
|
declare function applyDemoMoney(credentials: IBybitCredentials, payload: IBybitDemoApplyMoneyRequest, timeOffset?: number): Promise<IBybitApiResponse<IBybitDemoApplyMoney>>;
|
|
15
15
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { applyDemoMoney, getAccountInfo, getApiKeyInfo, getClosedPnl, getPositionInfo, getServerTime, getWalletBalance } from '../../chunk-
|
|
1
|
+
export { applyDemoMoney, getAccountInfo, getApiKeyInfo, getClosedPnl, getPositionInfo, getServerTime, getWalletBalance } from '../../chunk-6BR57NUP.js';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -67,6 +67,43 @@ type IBybitCredentials = {
|
|
|
67
67
|
apiSecret: string;
|
|
68
68
|
};
|
|
69
69
|
|
|
70
|
+
type IBybitPositionInfo = {
|
|
71
|
+
challengeId: string;
|
|
72
|
+
positionIdx: number;
|
|
73
|
+
riskId: number;
|
|
74
|
+
riskLimitValue: string;
|
|
75
|
+
symbol: string;
|
|
76
|
+
side: string;
|
|
77
|
+
size: string;
|
|
78
|
+
avgPrice: string;
|
|
79
|
+
positionValue: string;
|
|
80
|
+
tradeMode: number;
|
|
81
|
+
positionStatus: string;
|
|
82
|
+
autoAddMargin: number;
|
|
83
|
+
adlRankIndicator: number;
|
|
84
|
+
leverage: string;
|
|
85
|
+
positionBalance: string;
|
|
86
|
+
markPrice: string;
|
|
87
|
+
liqPrice: string;
|
|
88
|
+
bustPrice: string;
|
|
89
|
+
positionMM: string;
|
|
90
|
+
positionIM: string;
|
|
91
|
+
tpslMode: string;
|
|
92
|
+
takeProfit: string;
|
|
93
|
+
stopLoss: string;
|
|
94
|
+
trailingStop: string;
|
|
95
|
+
unrealisedPnl: string;
|
|
96
|
+
curRealisedPnl: string;
|
|
97
|
+
cumRealisedPnl: string;
|
|
98
|
+
seq: number;
|
|
99
|
+
isReduceOnly: boolean;
|
|
100
|
+
mmrSysUpdatedTime: string;
|
|
101
|
+
leverageSysUpdatedTime: string;
|
|
102
|
+
sessionAvgPrice: string;
|
|
103
|
+
createdTime: string;
|
|
104
|
+
updatedTime: string;
|
|
105
|
+
};
|
|
106
|
+
|
|
70
107
|
type IBybitApiKeyInfo = {
|
|
71
108
|
id: string;
|
|
72
109
|
note: string;
|
|
@@ -121,43 +158,6 @@ type IBybitAccountInfo = {
|
|
|
121
158
|
smpGroup?: number;
|
|
122
159
|
};
|
|
123
160
|
|
|
124
|
-
type IBybitPositionInfo = {
|
|
125
|
-
challengeId: string;
|
|
126
|
-
positionIdx: number;
|
|
127
|
-
riskId: number;
|
|
128
|
-
riskLimitValue: string;
|
|
129
|
-
symbol: string;
|
|
130
|
-
side: string;
|
|
131
|
-
size: string;
|
|
132
|
-
avgPrice: string;
|
|
133
|
-
positionValue: string;
|
|
134
|
-
tradeMode: number;
|
|
135
|
-
positionStatus: string;
|
|
136
|
-
autoAddMargin: number;
|
|
137
|
-
adlRankIndicator: number;
|
|
138
|
-
leverage: string;
|
|
139
|
-
positionBalance: string;
|
|
140
|
-
markPrice: string;
|
|
141
|
-
liqPrice: string;
|
|
142
|
-
bustPrice: string;
|
|
143
|
-
positionMM: string;
|
|
144
|
-
positionIM: string;
|
|
145
|
-
tpslMode: string;
|
|
146
|
-
takeProfit: string;
|
|
147
|
-
stopLoss: string;
|
|
148
|
-
trailingStop: string;
|
|
149
|
-
unrealisedPnl: string;
|
|
150
|
-
curRealisedPnl: string;
|
|
151
|
-
cumRealisedPnl: string;
|
|
152
|
-
seq: number;
|
|
153
|
-
isReduceOnly: boolean;
|
|
154
|
-
mmrSysUpdatedTime: string;
|
|
155
|
-
leverageSysUpdatedTime: string;
|
|
156
|
-
sessionAvgPrice: string;
|
|
157
|
-
createdTime: string;
|
|
158
|
-
updatedTime: string;
|
|
159
|
-
};
|
|
160
|
-
|
|
161
161
|
type IBybitDemoApplyMoneyItem = {
|
|
162
162
|
coin: IBybitCoinType;
|
|
163
163
|
amountStr: string;
|
|
@@ -218,5 +218,17 @@ type IBybitSignRequest = {
|
|
|
218
218
|
queryString?: string;
|
|
219
219
|
timeOffset?: number;
|
|
220
220
|
};
|
|
221
|
+
type IBybitPositionInfoRequest = {
|
|
222
|
+
credentials: IBybitCredentials;
|
|
223
|
+
category?: string;
|
|
224
|
+
symbol?: string;
|
|
225
|
+
settleCoin?: string;
|
|
226
|
+
cursor?: string;
|
|
227
|
+
};
|
|
228
|
+
type IBybitPositionInfoResponse = {
|
|
229
|
+
category: string;
|
|
230
|
+
list?: IBybitPositionInfo[];
|
|
231
|
+
nextPageCursor?: string;
|
|
232
|
+
};
|
|
221
233
|
|
|
222
|
-
export { type IBybitAccountInfo, IBybitAccountType, type IBybitApiKeyInfo, IBybitApiKeyVipLevel, type IBybitApiResponse, type IBybitApiResponseList, type IBybitClosedPnl, type IBybitClosedPnlRequest, type IBybitClosedPnlResponse, type IBybitCoinBalance, IBybitCoinType, type IBybitCredentials, type IBybitDemoApplyMoneyItem, type IBybitDemoApplyMoneyPayload, type IBybitDemoApplyMoneyRequest, type IBybitDemoApplyMoney as IBybitDemoApplyMoneyResponse, type IBybitPositionInfo, type IBybitServerTime, type IBybitSignRequest, type IBybitWalletAccount, type IBybitWalletResponse };
|
|
234
|
+
export { type IBybitAccountInfo, IBybitAccountType, type IBybitApiKeyInfo, IBybitApiKeyVipLevel, type IBybitApiResponse, type IBybitApiResponseList, type IBybitClosedPnl, type IBybitClosedPnlRequest, type IBybitClosedPnlResponse, type IBybitCoinBalance, IBybitCoinType, type IBybitCredentials, type IBybitDemoApplyMoneyItem, type IBybitDemoApplyMoneyPayload, type IBybitDemoApplyMoneyRequest, type IBybitDemoApplyMoney as IBybitDemoApplyMoneyResponse, type IBybitPositionInfo, type IBybitPositionInfoRequest, type IBybitPositionInfoResponse, type IBybitServerTime, type IBybitSignRequest, type IBybitWalletAccount, type IBybitWalletResponse };
|
|
@@ -67,6 +67,43 @@ type IBybitCredentials = {
|
|
|
67
67
|
apiSecret: string;
|
|
68
68
|
};
|
|
69
69
|
|
|
70
|
+
type IBybitPositionInfo = {
|
|
71
|
+
challengeId: string;
|
|
72
|
+
positionIdx: number;
|
|
73
|
+
riskId: number;
|
|
74
|
+
riskLimitValue: string;
|
|
75
|
+
symbol: string;
|
|
76
|
+
side: string;
|
|
77
|
+
size: string;
|
|
78
|
+
avgPrice: string;
|
|
79
|
+
positionValue: string;
|
|
80
|
+
tradeMode: number;
|
|
81
|
+
positionStatus: string;
|
|
82
|
+
autoAddMargin: number;
|
|
83
|
+
adlRankIndicator: number;
|
|
84
|
+
leverage: string;
|
|
85
|
+
positionBalance: string;
|
|
86
|
+
markPrice: string;
|
|
87
|
+
liqPrice: string;
|
|
88
|
+
bustPrice: string;
|
|
89
|
+
positionMM: string;
|
|
90
|
+
positionIM: string;
|
|
91
|
+
tpslMode: string;
|
|
92
|
+
takeProfit: string;
|
|
93
|
+
stopLoss: string;
|
|
94
|
+
trailingStop: string;
|
|
95
|
+
unrealisedPnl: string;
|
|
96
|
+
curRealisedPnl: string;
|
|
97
|
+
cumRealisedPnl: string;
|
|
98
|
+
seq: number;
|
|
99
|
+
isReduceOnly: boolean;
|
|
100
|
+
mmrSysUpdatedTime: string;
|
|
101
|
+
leverageSysUpdatedTime: string;
|
|
102
|
+
sessionAvgPrice: string;
|
|
103
|
+
createdTime: string;
|
|
104
|
+
updatedTime: string;
|
|
105
|
+
};
|
|
106
|
+
|
|
70
107
|
type IBybitApiKeyInfo = {
|
|
71
108
|
id: string;
|
|
72
109
|
note: string;
|
|
@@ -121,43 +158,6 @@ type IBybitAccountInfo = {
|
|
|
121
158
|
smpGroup?: number;
|
|
122
159
|
};
|
|
123
160
|
|
|
124
|
-
type IBybitPositionInfo = {
|
|
125
|
-
challengeId: string;
|
|
126
|
-
positionIdx: number;
|
|
127
|
-
riskId: number;
|
|
128
|
-
riskLimitValue: string;
|
|
129
|
-
symbol: string;
|
|
130
|
-
side: string;
|
|
131
|
-
size: string;
|
|
132
|
-
avgPrice: string;
|
|
133
|
-
positionValue: string;
|
|
134
|
-
tradeMode: number;
|
|
135
|
-
positionStatus: string;
|
|
136
|
-
autoAddMargin: number;
|
|
137
|
-
adlRankIndicator: number;
|
|
138
|
-
leverage: string;
|
|
139
|
-
positionBalance: string;
|
|
140
|
-
markPrice: string;
|
|
141
|
-
liqPrice: string;
|
|
142
|
-
bustPrice: string;
|
|
143
|
-
positionMM: string;
|
|
144
|
-
positionIM: string;
|
|
145
|
-
tpslMode: string;
|
|
146
|
-
takeProfit: string;
|
|
147
|
-
stopLoss: string;
|
|
148
|
-
trailingStop: string;
|
|
149
|
-
unrealisedPnl: string;
|
|
150
|
-
curRealisedPnl: string;
|
|
151
|
-
cumRealisedPnl: string;
|
|
152
|
-
seq: number;
|
|
153
|
-
isReduceOnly: boolean;
|
|
154
|
-
mmrSysUpdatedTime: string;
|
|
155
|
-
leverageSysUpdatedTime: string;
|
|
156
|
-
sessionAvgPrice: string;
|
|
157
|
-
createdTime: string;
|
|
158
|
-
updatedTime: string;
|
|
159
|
-
};
|
|
160
|
-
|
|
161
161
|
type IBybitDemoApplyMoneyItem = {
|
|
162
162
|
coin: IBybitCoinType;
|
|
163
163
|
amountStr: string;
|
|
@@ -218,5 +218,17 @@ type IBybitSignRequest = {
|
|
|
218
218
|
queryString?: string;
|
|
219
219
|
timeOffset?: number;
|
|
220
220
|
};
|
|
221
|
+
type IBybitPositionInfoRequest = {
|
|
222
|
+
credentials: IBybitCredentials;
|
|
223
|
+
category?: string;
|
|
224
|
+
symbol?: string;
|
|
225
|
+
settleCoin?: string;
|
|
226
|
+
cursor?: string;
|
|
227
|
+
};
|
|
228
|
+
type IBybitPositionInfoResponse = {
|
|
229
|
+
category: string;
|
|
230
|
+
list?: IBybitPositionInfo[];
|
|
231
|
+
nextPageCursor?: string;
|
|
232
|
+
};
|
|
221
233
|
|
|
222
|
-
export { type IBybitAccountInfo, IBybitAccountType, type IBybitApiKeyInfo, IBybitApiKeyVipLevel, type IBybitApiResponse, type IBybitApiResponseList, type IBybitClosedPnl, type IBybitClosedPnlRequest, type IBybitClosedPnlResponse, type IBybitCoinBalance, IBybitCoinType, type IBybitCredentials, type IBybitDemoApplyMoneyItem, type IBybitDemoApplyMoneyPayload, type IBybitDemoApplyMoneyRequest, type IBybitDemoApplyMoney as IBybitDemoApplyMoneyResponse, type IBybitPositionInfo, type IBybitServerTime, type IBybitSignRequest, type IBybitWalletAccount, type IBybitWalletResponse };
|
|
234
|
+
export { type IBybitAccountInfo, IBybitAccountType, type IBybitApiKeyInfo, IBybitApiKeyVipLevel, type IBybitApiResponse, type IBybitApiResponseList, type IBybitClosedPnl, type IBybitClosedPnlRequest, type IBybitClosedPnlResponse, type IBybitCoinBalance, IBybitCoinType, type IBybitCredentials, type IBybitDemoApplyMoneyItem, type IBybitDemoApplyMoneyPayload, type IBybitDemoApplyMoneyRequest, type IBybitDemoApplyMoney as IBybitDemoApplyMoneyResponse, type IBybitPositionInfo, type IBybitPositionInfoRequest, type IBybitPositionInfoResponse, type IBybitServerTime, type IBybitSignRequest, type IBybitWalletAccount, type IBybitWalletResponse };
|
package/dist/utils/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { createDefaultProgress, createDefaultWallet, currentDailyEquity, isSameUtcDay, parseNumber, toIsoDate, tradingDaysCountCalculation } from '../chunk-6R5UUXX4.js';
|
|
2
2
|
import '../chunk-2KHIGJJV.js';
|
|
3
|
-
export { getBybitTimestamp, signBybitRequest, syncBybitServerTime } from '../chunk-
|
|
3
|
+
export { getBybitTimestamp, signBybitRequest, syncBybitServerTime } from '../chunk-6BR57NUP.js';
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/providers/bybit/constants.ts","../src/utils/bybitHelper.ts","../src/providers/bybit/get-api-key-info.ts","../src/providers/bybit/get-account-info.ts","../src/providers/bybit/get-wallet-balance.ts","../src/providers/bybit/get-closed-pnl.ts","../src/providers/bybit/get-position-info.ts","../src/providers/bybit/apply-demo-money.ts","../src/providers/bybit/get-server-time.ts"],"names":[],"mappings":"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","file":"chunk-GAC2TIJ2.js","sourcesContent":["export const BYBIT_CONSTANTS = {\n baseUrl: process.env.BYBIT_BASE_URL || \"https://api-demo.bybit.com\",\n fetchTimeoutMs: Number(process.env.BYBIT_FETCH_TIMEOUT_MS) || 10000,\n recvWindowTimeoutMs: process.env.BYBIT_RECV_WINDOW_TIMEOUT_MS || \"5000\",\n}","import { createHmac } from \"crypto\";\nimport { env } from \"node:process\";\nimport { getServerTime } from \"../providers/bybit\";\nimport { BYBIT_CONSTANTS } from \"../providers/bybit/constants\";\nimport type { IBybitSignRequest } from \"../types/bybit\";\n\nexport function signBybitRequest(request: IBybitSignRequest) {\n const { credentials, queryString, timeOffset } = request;\n const { apiSecret, apiKey } = credentials;\n\n const timestamp = getBybitTimestamp(timeOffset);\n\n const payload = `${timestamp}${apiKey}${BYBIT_CONSTANTS.recvWindowTimeoutMs}${queryString ?? \"\"}`;\n const signature = createHmac(\"sha256\", apiSecret)\n .update(payload)\n .digest(\"hex\");\n\n return { signature, timestamp };\n}\n\nexport async function syncBybitServerTime(): Promise<number> {\n const localTimeBefore = Date.now();\n const { result } = await getServerTime();\n\n const serverTime = parseInt(result.timeNano, 10) / 1000000;\n const localTimeAfter = Date.now();\n\n // Estimate the local time at which Bybit generated\n // the response by using the midpoint.\n const estimatedLatency = (localTimeAfter - localTimeBefore) / 2;\n const timeOffset = Math.round(serverTime - (localTimeBefore + estimatedLatency));\n\n return timeOffset;\n}\n\nexport function getBybitTimestamp(timeOffset: number = 0): string {\n return String(Date.now() + timeOffset);\n}","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitCredentials, IBybitApiKeyInfo, IBybitApiResponse} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\nexport async function getApiKeyInfo(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiKeyInfo>> {\n const { signature, timestamp } = signBybitRequest({\n credentials,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/user/query-api`, {\n headers: {\n \"X-BAPI-API-KEY\": credentials.apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n //signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n });\n } catch (error) {\n console.error(\"ByBit API Key Info network error\", error);\n throw new Error(\"ByBit API Key Info network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit API Key Info request failed\", bybitRes);\n throw new Error(\"ByBit API Key Info request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitApiKeyInfo>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit API Key Info API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n if (!bybitJson) {\n console.error(\"Invalid ByBit API Key Info response\", bybitJson);\n throw new Error(\"Invalid ByBit API Key Info response\");\n }\n\n return bybitJson;\n}\n","import {\n IBybitCredentials,\n IBybitAccountInfo,\n IBybitApiResponse,\n} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\nimport { BYBIT_CONSTANTS } from \"./constants\";\n\nexport async function getAccountInfo(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitAccountInfo>> {\n const { apiKey, apiSecret } = credentials;\n const queryString = \"accountType=UNIFIED\";\n \n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/account/info`, {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n });\n } catch (error) {\n console.error(\"ByBit Account API network error\", error);\n throw new Error(\"ByBit Account API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Account API request failed\", bybitRes);\n throw new Error(\"ByBit Account API request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitAccountInfo>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Account API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n const raw = bybitJson.result?.list?.[0];\n\n if (!raw) {\n console.error(\"No account info returned\", bybitJson);\n throw new Error(\"No account info returned\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitApiResponse, IBybitWalletAccount, IBybitCredentials } from \"../../types/bybit\";\n\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// GET /api/bybit/wallet-balance?accountType=UNIFIED\nexport async function getWalletBalance(\n credentials: IBybitCredentials,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitWalletAccount>> {\n const { apiKey } = credentials;\n\n const query = new URLSearchParams({\n accountType: \"UNIFIED\",\n coin: \"USDT\",\n });\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/account/wallet-balance?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n },\n );\n } catch (error) {\n console.error(\"ByBit Wallet API network error\", error);\n throw new Error(\"ByBit Wallet API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Wallet API request failed\", bybitRes);\n throw new Error(\"ByBit Wallet API request failed: \" + bybitRes.statusText);\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitWalletAccount>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Wallet API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitCredentials, IBybitApiResponse, IBybitApiResponseList, IBybitClosedPnl, IBybitClosedPnlRequest } from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// GET /api/bybit/wallet-balance?accountType=UNIFIED\nexport async function getClosedPnl(\n credentials: IBybitCredentials,\n payload: IBybitClosedPnlRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>> {\n const { apiKey } = credentials;\n const query = new URLSearchParams({\n category: \"linear\",\n //symbol: \"BTCUSDT\",\n limit: \"50\", //default limit\n });\n\n if (typeof payload.startTime === \"number\") {\n query.set(\"startTime\", String(payload.startTime));\n }\n\n if (typeof payload.endTime === \"number\") {\n query.set(\"endTime\", String(payload.endTime));\n }\n\n if (typeof payload.cursor === \"string\") {\n query.set(\"cursor\", String(payload.cursor));\n }\n\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/position/closed-pnl?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n },\n );\n } catch (error) {\n console.error(\"ByBit Closed PNL API network error\", error);\n throw new Error(\"ByBit Closed PNL API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Closed PNL API request failed\", bybitRes);\n throw new Error(\"ByBit Closed PNL API request failed\");\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitApiResponseList<IBybitClosedPnl>>;\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Closed PNL API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport {\n IBybitCredentials,\n IBybitApiResponse,\n IBybitApiResponseList,\n IBybitPositionInfo,\n} from \"../../types/bybit\";\n\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\n\n// Query real-time position data, such as position size, cumulative realized PNL, etc.\nexport async function getPositionInfo(\n credentials: IBybitCredentials,\n category?: string,\n symbol?: string,\n settleCoin?: string,\n cursor?: string,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>> {\n const query = new URLSearchParams({\n category: category ?? \"linear\",\n limit: \"50\", //default limit\n });\n\n if (typeof symbol === \"string\") {\n query.set(\"symbol\", String(symbol));\n }\n\n if (typeof settleCoin === \"string\") {\n query.set(\"settleCoin\", String(settleCoin));\n }\n\n if (typeof cursor === \"string\") {\n query.set(\"cursor\", String(cursor));\n }\n\n const queryString = query.toString();\n\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString,\n timeOffset,\n });\n\n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/position/list?${queryString}`,\n {\n headers: {\n \"X-BAPI-API-KEY\": credentials.apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n },\n );\n } catch (error) {\n console.error(\"ByBit Position Info API network error\", { cause: error });\n throw new Error(\"ByBit Position Info API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Position Info API request failed\", bybitRes);\n throw new Error(\"ByBit Position Info API request failed\");\n }\n\n const bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitApiResponseList<IBybitPositionInfo>>;\n \n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Position Info API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\n\nimport {\n IBybitCredentials,\n IBybitApiResponse,\n IBybitAccountInfo,\n IBybitDemoApplyMoneyRequest,\n} from \"../../types/bybit\";\nimport { signBybitRequest } from \"../../utils/bybitHelper\";\nimport { IBybitDemoApplyMoney } from \"../../types/bybit/IBybitDemoApplyMoney\";\n\n// POST /api/bybit/apply-money\nexport async function applyDemoMoney(\n credentials: IBybitCredentials,\n payload: IBybitDemoApplyMoneyRequest,\n timeOffset?: number,\n): Promise<IBybitApiResponse<IBybitDemoApplyMoney>> {\n const { apiKey } = credentials;\n\n const requestBody = JSON.stringify(payload);\n const { signature, timestamp } = signBybitRequest({\n credentials,\n queryString: requestBody,\n timeOffset \n });\n \n let bybitRes: Response;\n try {\n bybitRes = await fetch(\n `${BYBIT_CONSTANTS.baseUrl}/v5/account/demo-apply-money`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-BAPI-API-KEY\": apiKey,\n \"X-BAPI-SIGN\": signature,\n \"X-BAPI-SIGN-TYPE\": \"2\",\n \"X-BAPI-TIMESTAMP\": timestamp,\n \"X-BAPI-RECV-WINDOW\": BYBIT_CONSTANTS.recvWindowTimeoutMs,\n },\n body: requestBody,\n signal: AbortSignal.timeout(BYBIT_CONSTANTS.fetchTimeoutMs),\n cache: \"no-store\",\n },\n );\n } catch (error) {\n throw new Error(\"ByBit Apply Money API network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n throw new Error(\"ByBit Apply Money API request failed\");\n }\n\n const bybitJson =\n (await bybitRes.json()) as IBybitApiResponse<IBybitAccountInfo>;\n\n if (bybitJson.retCode !== 0) {\n throw new Error(bybitJson.retMsg ?? \"ByBit error\");\n }\n\n return bybitJson;\n}\n","import { BYBIT_CONSTANTS } from \"./constants\";\nimport { IBybitServerTime, IBybitApiResponse } from \"../../types/bybit\";\n\nexport async function getServerTime(): Promise<IBybitApiResponse<IBybitServerTime>> {\n let bybitRes: Response;\n try {\n bybitRes = await fetch(`${BYBIT_CONSTANTS.baseUrl}/v5/market/time`,\n {\n cache: \"no-store\",\n }\n );\n } catch (error) {\n console.error(\"ByBit Server Time network error\", error);\n throw new Error(\"ByBit Server Time network error\", { cause: error });\n }\n\n if (!bybitRes.ok) {\n console.error(\"ByBit Server Time request failed\", bybitRes.status, bybitRes.statusText);\n throw new Error(`ByBit Server Time request failed: ${bybitRes.status}`);\n }\n\n let bybitJson: IBybitApiResponse<IBybitServerTime>;\n\n try {\n bybitJson = (await bybitRes.json()) as IBybitApiResponse<IBybitServerTime>;\n } catch (error) {\n console.error(\"Invalid ByBit Server Time response\", error);\n throw new Error(\"Invalid ByBit Server Time response\", { cause: error });\n }\n\n if (!bybitJson) {\n throw new Error(\"Invalid ByBit Server Time response\");\n }\n\n if (bybitJson.retCode !== 0) {\n console.error(\"ByBit Server Time API error\", bybitJson);\n throw new Error(bybitJson.retMsg ?? \"ByBit server time error\");\n }\n\n return bybitJson;\n}"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/clients/BybitClient.ts"],"names":[],"mappings":";;;AAiBO,IAAM,cAAN,MAAkB;AAAA,EACf,UAAA,GAAa,CAAA;AAAA,EACJ,KAAA;AAAA,EAEjB,WAAA,GAAc;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,oBAAA,EAAqB;AAAA,EACzC;AAAA,EAEA,MAAc,oBAAA,GAAsC;AAClD,IAAA,MAAM,WAAA,GAAc,CAAA;AAEpB,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAW,WAAA,EAAa,WAAW,CAAA,EAAG;AAC1D,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,UAAA,GAAa,MAAM,mBAAA,EAAoB;AAC5C,QAAA;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,IAAI,YAAY,WAAA,EAAa;AAC3B,UAAA,MAAM,KAAA;AAAA,QACR;AAEA,QAAA,MAAM,IAAI,QAAQ,CAAC,OAAA,KAAY,WAAW,OAAA,EAAS,OAAA,GAAU,GAAK,CAAC,CAAA;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cAAA,CACJ,WAAA,EACA,OAAA,EACA;AACA,IAAA,MAAM,IAAA,CAAK,KAAA;AAEX,IAAA,OAAO,MAAM,cAAA,CAAe,WAAA,EAAa,OAAA,EAAS,KAAK,UAAU,CAAA;AAAA,EACnE;AAAA,EAEA,MAAM,eACJ,WAAA,EACA;AACA,IAAA,MAAM,IAAA,CAAK,KAAA;AACX,IAAA,OAAO,MAAM,cAAA,CAAe,WAAA,EAAa,IAAA,CAAK,UAAU,CAAA;AAAA,EAC1D;AAAA,EAEA,MAAM,cACJ,WAAA,EAC8C;AAC9C,IAAA,MAAM,IAAA,CAAK,KAAA;AACX,IAAA,OAAO,MAAM,aAAA,CAAc,WAAA,EAAa,IAAA,CAAK,UAAU,CAAA;AAAA,EACzD;AAAA,EAEA,MAAM,YAAA,CACJ,WAAA,EACA,OAAA,EACA;AACA,IAAA,MAAM,IAAA,CAAK,KAAA;AACX,IAAA,OAAO,MAAM,YAAA,CAAa,WAAA,EAAa,OAAA,EAAS,KAAK,UAAU,CAAA;AAAA,EACjE;AAAA,EAEA,MAAM,iBAAiB,WAAA,EAAgC;AACrD,IAAA,MAAM,IAAA,CAAK,KAAA;AACX,IAAA,OAAO,MAAM,gBAAA,CAAiB,WAAA,EAAa,IAAA,CAAK,UAAU,CAAA;AAAA,EAC5D;AACF","file":"chunk-HIBB2SSL.js","sourcesContent":["import type {\n IBybitApiKeyInfo,\n IBybitApiResponse,\n IBybitClosedPnlRequest,\n IBybitCredentials,\n IBybitDemoApplyMoneyRequest,\n} from \"../types/bybit\";\nimport { syncBybitServerTime } from \"../utils/bybitHelper\";\n\nimport {\n getApiKeyInfo,\n getClosedPnl,\n getAccountInfo,\n getWalletBalance,\n applyDemoMoney,\n} from \"../providers/bybit\";\n\nexport class BybitClient {\n private timeOffset = 0;\n private readonly ready: Promise<void>;\n\n constructor() {\n this.ready = this.initializeTimeOffset();\n }\n\n private async initializeTimeOffset(): Promise<void> {\n const maxAttempts = 3;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n this.timeOffset = await syncBybitServerTime();\n return;\n } catch (error) {\n if (attempt === maxAttempts) {\n throw error;\n }\n\n await new Promise((resolve) => setTimeout(resolve, attempt * 2_000));\n }\n }\n }\n\n async applyDemoMoney(\n credentials: IBybitCredentials,\n payload: IBybitDemoApplyMoneyRequest,\n ) {\n await this.ready;\n // Implement the logic to apply demo money to the Bybit account using the provided payload\n return await applyDemoMoney(credentials, payload, this.timeOffset);\n }\n\n async getAccountInfo(\n credentials: IBybitCredentials,\n ) {\n await this.ready;\n return await getAccountInfo(credentials, this.timeOffset);\n }\n\n async getApiKeyInfo(\n credentials: IBybitCredentials,\n ): Promise<IBybitApiResponse<IBybitApiKeyInfo>> {\n await this.ready;\n return await getApiKeyInfo(credentials, this.timeOffset);\n }\n\n async getClosedPnl(\n credentials: IBybitCredentials,\n payload: IBybitClosedPnlRequest\n ) {\n await this.ready;\n return await getClosedPnl(credentials, payload, this.timeOffset);\n }\n\n async getWalletBalance(credentials: IBybitCredentials) {\n await this.ready;\n return await getWalletBalance(credentials, this.timeOffset);\n }\n}\n"]}
|