@anrmk/str-package 0.2.10 → 0.2.12

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.
Files changed (47) hide show
  1. package/README.md +0 -1
  2. package/dist/IBybitSignRequest-cA1RCbDS.d.cts +13 -0
  3. package/dist/IBybitSignRequest-cA1RCbDS.d.ts +13 -0
  4. package/dist/chunk-36QZINNQ.js +39 -0
  5. package/dist/chunk-36QZINNQ.js.map +1 -0
  6. package/dist/{chunk-F66ICNBF.js → chunk-A26C5LUZ.js} +3 -3
  7. package/dist/{chunk-F66ICNBF.js.map → chunk-A26C5LUZ.js.map} +1 -1
  8. package/dist/{chunk-UBUM5Z2U.js → chunk-T23XINGG.js} +48 -10
  9. package/dist/chunk-T23XINGG.js.map +1 -0
  10. package/dist/{chunk-AV3OIAHZ.js → chunk-V45RVFQE.js} +16 -3
  11. package/dist/chunk-V45RVFQE.js.map +1 -0
  12. package/dist/clients/index.cjs +5 -7
  13. package/dist/clients/index.cjs.map +1 -1
  14. package/dist/clients/index.d.cts +3 -2
  15. package/dist/clients/index.d.ts +3 -2
  16. package/dist/clients/index.js +3 -2
  17. package/dist/{enums-Dmg2vIi2.d.ts → enums-CFM0khJf.d.cts} +16 -1
  18. package/dist/{enums-Dmg2vIi2.d.cts → enums-CFM0khJf.d.ts} +16 -1
  19. package/dist/index.cjs +46 -105
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.d.cts +6 -6
  22. package/dist/index.d.ts +6 -6
  23. package/dist/index.js +4 -4
  24. package/dist/providers/bybit/index.cjs +46 -7
  25. package/dist/providers/bybit/index.cjs.map +1 -1
  26. package/dist/providers/bybit/index.d.cts +6 -3
  27. package/dist/providers/bybit/index.d.ts +6 -3
  28. package/dist/providers/bybit/index.js +2 -1
  29. package/dist/types/bybit/index.cjs +15 -0
  30. package/dist/types/bybit/index.cjs.map +1 -1
  31. package/dist/types/bybit/index.d.cts +137 -112
  32. package/dist/types/bybit/index.d.ts +137 -112
  33. package/dist/types/bybit/index.js +1 -1
  34. package/dist/types/challenge/index.d.cts +94 -46
  35. package/dist/types/challenge/index.d.ts +94 -46
  36. package/dist/utils/index.cjs +0 -98
  37. package/dist/utils/index.cjs.map +1 -1
  38. package/dist/utils/index.d.cts +2 -18
  39. package/dist/utils/index.d.ts +2 -18
  40. package/dist/utils/index.js +3 -3
  41. package/package.json +1 -6
  42. package/dist/TChallengeProgress-Cg8bg3uq.d.cts +0 -63
  43. package/dist/TChallengeProgress-DWLlui_L.d.ts +0 -63
  44. package/dist/chunk-6R5UUXX4.js +0 -133
  45. package/dist/chunk-6R5UUXX4.js.map +0 -1
  46. package/dist/chunk-AV3OIAHZ.js.map +0 -1
  47. package/dist/chunk-UBUM5Z2U.js.map +0 -1
@@ -1,6 +1,4 @@
1
- import { a as IBybitApiKeyVipLevel, b as IBybitCoinType } from '../../enums-Dmg2vIi2.js';
2
- import { a as TChallengeProgress, b as TChallengeWalletBalance } from '../../TChallengeProgress-DWLlui_L.js';
3
- export { T as TChallengeClosedPnl } from '../../TChallengeProgress-DWLlui_L.js';
1
+ import { a as IBybitApiKeyVipLevel, I as IBybitAccountType, c as IBybitCoinType } from '../../enums-CFM0khJf.js';
4
2
  export { TSyncResponse } from '../index.js';
5
3
 
6
4
  type TChallengeType = "ONE_STEP" | "TWO_STEPS" | "THREE_STEPS";
@@ -12,22 +10,23 @@ type TChallengeProvider = "BYBIT" | "CLEO" | "TEALSTREET" | "TIGER";
12
10
  type TChallengeStatus = "ACTIVE" | "EXPIRED" | "COMPLETED" | "FAILED";
13
11
  type TChallengeRule = {
14
12
  readonly id: string;
13
+ readonly nextRuleId: string | null;
15
14
  name: string;
16
15
  type: TChallengeType;
17
16
  mode: TChallengeMode;
18
17
  tradingPeriod: string;
19
18
  minTradingDays: number;
20
- stopLossPct: number;
19
+ positionDrawdownPct: number;
21
20
  maxLossPct: number;
22
21
  minLossPct: number;
23
22
  dailyDrawdownPct: number;
24
23
  profitTargetPct: number;
25
24
  feePolicy: string;
26
25
  prohibitedActions: string[];
27
- isActive: boolean;
26
+ tiers?: TChallengeTier[];
27
+ readonly isActive: boolean;
28
28
  readonly createdAt: string;
29
29
  readonly updatedAt: string;
30
- tiers?: TChallengeTier[];
31
30
  };
32
31
  interface TChallengeRuleGroup {
33
32
  label: string;
@@ -36,16 +35,16 @@ interface TChallengeRuleGroup {
36
35
  }
37
36
 
38
37
  type TChallengeAccountInfo = {
39
- challengeId: string;
38
+ readonly challengeId: string;
40
39
  unifiedMarginStatus: number;
41
40
  marginMode: string;
42
41
  isMasterTrader: boolean;
43
42
  spotHedgingStatus: "ON" | "OFF";
44
- updatedAt: string;
43
+ readonly updatedAt: string;
45
44
  };
46
45
 
47
46
  type TChallengeApiKeyInfo = {
48
- challengeId: string;
47
+ readonly challengeId: string;
49
48
  bybitApiKeyId: string;
50
49
  note: string;
51
50
  apiKey: string;
@@ -55,8 +54,6 @@ type TChallengeApiKeyInfo = {
55
54
  ips: string[];
56
55
  type: number;
57
56
  deadlineDay: number;
58
- expiredAt: string;
59
- createdAt: string;
60
57
  uta: string;
61
58
  userId: string;
62
59
  inviterId: string;
@@ -69,11 +66,78 @@ type TChallengeApiKeyInfo = {
69
66
  kycLevel: number;
70
67
  kycRegion: string;
71
68
  hasCredentials: boolean;
69
+ readonly expiredAt: string;
70
+ readonly createdAt: string;
71
+ readonly updatedAt: string;
72
+ };
73
+
74
+ type TChallengeClosedPnl = {
75
+ readonly id: string;
76
+ readonly challengeId: string;
77
+ symbol: string;
78
+ orderId: string;
79
+ side: string;
80
+ qty: number;
81
+ orderPrice: string;
82
+ orderType: string;
83
+ execType: string;
84
+ closedSize: number;
85
+ cumEntryValue: number;
86
+ avgEntryPrice: number;
87
+ cumExitValue: number;
88
+ avgExitPrice: number;
89
+ closedPnl: number;
90
+ fillCount: number;
91
+ leverage: number;
92
+ createdTime: string;
93
+ updatedTime: string;
94
+ readonly isTradingDayRecord: boolean;
95
+ readonly createdAt: string;
96
+ readonly updatedAt: string;
97
+ };
98
+
99
+ type TChallengeWalletBalance = {
100
+ readonly challengeId: string;
101
+ accountType: IBybitAccountType;
102
+ totalEquity: number;
103
+ totalPerpUpl: number;
104
+ totalWalletBalance: number;
105
+ totalAvailableBalance: number;
106
+ capital: number;
107
+ /** Coin-specific balance details */
108
+ equity: number;
109
+ totalPositionMm?: number;
110
+ totalPositionIm?: number;
111
+ usdValue: number;
112
+ unrealisedPnl: number;
113
+ walletBalance: number;
114
+ availableToWithdraw: number;
115
+ cumRealisedPnl?: number;
116
+ bonus?: number;
117
+ coin: string;
118
+ readonly createdAt: string;
119
+ readonly updatedAt: string;
120
+ };
121
+
122
+ type TChallengeProgress = {
123
+ readonly challengeId: string;
124
+ totalLoss: number;
125
+ tradingDays: number;
126
+ dailyDrawdown: number;
127
+ profitTarget: number;
128
+ dailyStartingEquity: number;
129
+ dailyStartingUpdatedAt: string;
130
+ dailyMaxEquity: number;
131
+ dailyMinEquity: number;
132
+ dailyMaxUpdatedAt: string;
133
+ dailyMinUpdatedAt: string;
134
+ readonly createdAt: string;
72
135
  readonly updatedAt: string;
73
136
  };
74
137
 
75
138
  type TChallengePositionInfo = {
76
- challengeId: string;
139
+ readonly id: string;
140
+ readonly challengeId: string;
77
141
  positionIdx: number;
78
142
  riskId: number;
79
143
  riskLimitValue: number;
@@ -107,57 +171,40 @@ type TChallengePositionInfo = {
107
171
  isReduceOnly: boolean;
108
172
  mmrSysUpdatedTime: string | null;
109
173
  leverageSysUpdatedTime: string | null;
110
- updatedAt: string;
174
+ readonly updatedAt: string;
111
175
  };
112
176
 
113
- type TChallengeItem = {
114
- id?: string;
115
- challengeId: string;
116
- ctype: TChallengeType;
117
- capital: number;
118
- currency: string;
119
- ttype: TTradingType;
120
- ddtype: TDrawdownType;
177
+ type TChallengeBase = {
178
+ readonly id: string;
121
179
  readonly status: TChallengeStatus;
122
180
  readonly statusDescription: string;
123
181
  provider: string;
182
+ capital: number;
183
+ currency: string;
124
184
  startDate: string;
125
185
  endDate: string;
126
- apiKey: string;
127
- apiSecret: string;
128
- daysActive: number;
129
- daysRemaining: number;
130
- hasCredentials: boolean;
131
- apiKeyHint?: string;
186
+ readonly createdAt: string;
187
+ readonly updatedAt: string;
188
+ };
189
+ type TChallengeItem = TChallengeBase & {
132
190
  apiKeyInfo?: TChallengeApiKeyInfo;
133
191
  statistics?: TChallengeStatistics;
134
192
  progress?: TChallengeProgress;
135
193
  rule?: TChallengeRule;
136
194
  wallet?: TChallengeWalletBalance;
137
195
  };
138
- type TChallengeListItem = {
139
- id: string;
140
- capital: number | null;
141
- currency: string | null;
142
- ttype: TTradingType | null;
143
- ddtype: TDrawdownType | null;
144
- readonly status: TChallengeStatus;
145
- readonly statusDescription: string;
146
- provider: string;
147
- startDate: string;
148
- endDate: string | null;
196
+ type TChallengeListItem = TChallengeBase & {
197
+ statistics?: TChallengeStatistics;
198
+ progress?: TChallengeProgress;
199
+ rule?: TChallengeRule;
200
+ wallet?: TChallengeWalletBalance;
149
201
  daysActive: number | null;
150
202
  daysRemaining: number | null;
151
203
  apiKeyHint?: string;
152
204
  hasCredentials: boolean;
153
- statistics?: TChallengeStatistics | null;
154
- progress?: TChallengeProgress | null;
155
- rule?: TChallengeRule | null;
156
- wallet?: TChallengeWalletBalance | null;
157
205
  };
158
206
 
159
207
  type TChallengeStatistics = {
160
- readonly id: string | null;
161
208
  readonly challengeId: string;
162
209
  totalClosedTradesCount: number;
163
210
  totalClosedTrades: number;
@@ -170,10 +217,11 @@ type TChallengeStatistics = {
170
217
  totalLongWins: number;
171
218
  totalShortTrades: number;
172
219
  totalShortWins: number;
173
- readonly updatedAt: string;
174
220
  loosesRate?: number;
175
221
  totalCumEntryValue?: number;
176
222
  totalCumExitValue?: number;
223
+ readonly createdAt: string;
224
+ readonly updatedAt: string;
177
225
  };
178
226
 
179
227
  type TChallengeTier = {
@@ -182,9 +230,9 @@ type TChallengeTier = {
182
230
  capital: TChallengeCapital;
183
231
  currency: IBybitCoinType;
184
232
  priceUsd: number;
185
- isActive: boolean;
233
+ readonly isActive: boolean;
186
234
  readonly createdAt: string;
187
235
  readonly updatedAt: string;
188
236
  };
189
237
 
190
- export { type TChallengeAccountInfo, type TChallengeApiKeyInfo, type TChallengeCapital, type TChallengeItem, type TChallengeListItem, type TChallengeMode, type TChallengePositionInfo, TChallengeProgress, type TChallengeProvider, type TChallengeRule, type TChallengeRuleGroup, type TChallengeStatistics, type TChallengeStatus, type TChallengeTier, type TChallengeType, TChallengeWalletBalance, type TDrawdownType, type TTradingType };
238
+ export type { TChallengeAccountInfo, TChallengeApiKeyInfo, TChallengeCapital, TChallengeClosedPnl, TChallengeItem, TChallengeListItem, TChallengeMode, TChallengePositionInfo, TChallengeProgress, TChallengeProvider, TChallengeRule, TChallengeRuleGroup, TChallengeStatistics, TChallengeStatus, TChallengeTier, TChallengeType, TChallengeWalletBalance, TDrawdownType, TTradingType };
@@ -105,109 +105,11 @@ var isSameUtcDay = (left, right) => {
105
105
  return leftDate.toISOString().slice(0, 10) === rightDate.toISOString().slice(0, 10);
106
106
  };
107
107
 
108
- // src/utils/challengeHelper.ts
109
- var createDefaultWallet = (challengeId = "", capital = 0) => ({
110
- challengeId,
111
- accountType: "UNIFIED" /* UNIFIED */,
112
- totalEquity: 0,
113
- totalPerpUpl: 0,
114
- totalWalletBalance: 0,
115
- totalAvailableBalance: 0,
116
- capital,
117
- equity: 0,
118
- usdValue: 0,
119
- unrealisedPnl: 0,
120
- walletBalance: 0,
121
- availableToWithdraw: 0,
122
- coin: "USDT" /* USDT */,
123
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
124
- });
125
- var createDefaultProgress = (challengeId = "", currentEquity = 0) => ({
126
- id: (/* @__PURE__ */ new Date()).getTime().toString(),
127
- challengeId,
128
- currentEquity,
129
- totalLoss: 0,
130
- tradingDays: 0,
131
- dailyDrawdown: 0,
132
- profitTarget: 0,
133
- dailyStartingEquity: 0,
134
- dailyStartingUpdatedAt: (/* @__PURE__ */ new Date()).toISOString(),
135
- dailyMaxEquity: 0,
136
- dailyMinEquity: 0,
137
- dailyMaxUpdatedAt: (/* @__PURE__ */ new Date()).toISOString(),
138
- dailyMinUpdatedAt: (/* @__PURE__ */ new Date()).toISOString()
139
- });
140
- var tradingDaysCountCalculation = async (closedPnlData, minPositionSize) => {
141
- if (!closedPnlData || closedPnlData.length === 0) {
142
- return 0;
143
- }
144
- const closedPnlGrouped = closedPnlData.reduce(
145
- (acc, trade) => {
146
- const day = trade.updatedTime.split("T")[0];
147
- if (!acc[day]) {
148
- acc[day] = [];
149
- }
150
- acc[day].push(trade);
151
- return acc;
152
- },
153
- {}
154
- );
155
- return await Object.values(closedPnlGrouped).reduce((count, dayTrades) => {
156
- const hasQualifyingTrade = dayTrades.some((trade) => {
157
- const entryValue = trade.cumEntryValue;
158
- const closedPnL = trade.closedPnl;
159
- const passesSize = entryValue >= minPositionSize;
160
- const minRequiredPnL = entryValue * 0.01;
161
- const passesPnL = Math.abs(closedPnL) >= minRequiredPnL;
162
- return passesSize && passesPnL;
163
- });
164
- return hasQualifyingTrade ? count + 1 : count;
165
- }, 0);
166
- };
167
- var currentDailyEquity = (wallet, progress) => {
168
- const today = (/* @__PURE__ */ new Date()).toISOString();
169
- const startDate = (/* @__PURE__ */ new Date()).setUTCHours(0, 0, 0, 0);
170
- const startDateStr = new Date(startDate).toISOString();
171
- const { equity, unrealisedPnl } = wallet;
172
- const {
173
- dailyStartingEquity,
174
- dailyMaxEquity,
175
- dailyMinEquity,
176
- dailyStartingUpdatedAt,
177
- dailyMaxUpdatedAt,
178
- dailyMinUpdatedAt
179
- } = progress;
180
- let isSameDay = isSameUtcDay(dailyStartingUpdatedAt, startDateStr);
181
- const newDailyStartingUpdatedAt = isSameDay ? dailyStartingUpdatedAt : startDateStr;
182
- const newDailyStartingEquity = isSameDay ? dailyStartingEquity : equity;
183
- isSameDay = isSameUtcDay(dailyMaxUpdatedAt, today);
184
- let newMaxUpdatedAt = isSameDay ? dailyMaxUpdatedAt : today;
185
- const newdailyMaxEquity = Math.max(isSameDay ? dailyMaxEquity : equity, equity);
186
- isSameDay = isSameUtcDay(dailyMinUpdatedAt, today);
187
- const newMinUpdatedAt = isSameDay ? dailyMinUpdatedAt : today;
188
- const newdailyMinEquity = Math.min(isSameDay ? dailyMinEquity : equity, equity);
189
- const dailyEquityDrawdown = equity - newdailyMaxEquity;
190
- return {
191
- currentEquity: equity,
192
- dailyDrawdown: dailyEquityDrawdown,
193
- dailyStartingEquity: newDailyStartingEquity,
194
- dailyStartingUpdatedAt: newDailyStartingUpdatedAt.slice(0, 10),
195
- dailyMaxEquity: newdailyMaxEquity,
196
- dailyMaxUpdatedAt: newMaxUpdatedAt,
197
- dailyMinEquity: newdailyMinEquity,
198
- dailyMinUpdatedAt: newMinUpdatedAt
199
- };
200
- };
201
-
202
- exports.createDefaultProgress = createDefaultProgress;
203
- exports.createDefaultWallet = createDefaultWallet;
204
- exports.currentDailyEquity = currentDailyEquity;
205
108
  exports.getBybitTimestamp = getBybitTimestamp;
206
109
  exports.isSameUtcDay = isSameUtcDay;
207
110
  exports.parseNumber = parseNumber;
208
111
  exports.signBybitRequest = signBybitRequest;
209
112
  exports.syncBybitServerTime = syncBybitServerTime;
210
113
  exports.toIsoDate = toIsoDate;
211
- exports.tradingDaysCountCalculation = tradingDaysCountCalculation;
212
114
  //# sourceMappingURL=index.cjs.map
213
115
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/bybit/constants.ts","../../src/providers/bybit/get-server-time.ts","../../src/utils/bybitHelper.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 defaultCoin : \"USDT\"\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}","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-server-time.ts","../../src/utils/bybitHelper.ts","../../src/utils/helper.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 defaultCoin : \"USDT\"\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 { 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}","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"]}
@@ -1,6 +1,4 @@
1
- import { IBybitSignRequest } from '../types/bybit/index.cjs';
2
- import { a as TChallengeProgress, b as TChallengeWalletBalance, T as TChallengeClosedPnl } from '../TChallengeProgress-Cg8bg3uq.cjs';
3
- import '../enums-Dmg2vIi2.cjs';
1
+ import { a as IBybitSignRequest } from '../IBybitSignRequest-cA1RCbDS.cjs';
4
2
 
5
3
  declare function signBybitRequest(request: IBybitSignRequest): {
6
4
  signature: string;
@@ -9,22 +7,8 @@ declare function signBybitRequest(request: IBybitSignRequest): {
9
7
  declare function syncBybitServerTime(): Promise<number>;
10
8
  declare function getBybitTimestamp(timeOffset?: number): string;
11
9
 
12
- declare const createDefaultWallet: (challengeId?: string, capital?: number) => TChallengeWalletBalance;
13
- declare const createDefaultProgress: (challengeId?: string, currentEquity?: number) => TChallengeProgress;
14
- declare const tradingDaysCountCalculation: (closedPnlData: TChallengeClosedPnl[] | null, minPositionSize: number) => Promise<number>;
15
- declare const currentDailyEquity: (wallet: TChallengeWalletBalance, progress: TChallengeProgress) => {
16
- currentEquity: number;
17
- dailyDrawdown: number;
18
- dailyStartingEquity: number;
19
- dailyStartingUpdatedAt: string;
20
- dailyMaxEquity: number;
21
- dailyMaxUpdatedAt: string;
22
- dailyMinEquity: number;
23
- dailyMinUpdatedAt: string;
24
- };
25
-
26
10
  declare const parseNumber: (value: number | string | null | undefined) => number | null;
27
11
  declare const toIsoDate: (value: string | number | null | undefined) => string | null;
28
12
  declare const isSameUtcDay: (left: string | null | undefined, right: string | null | undefined) => boolean;
29
13
 
30
- export { createDefaultProgress, createDefaultWallet, currentDailyEquity, getBybitTimestamp, isSameUtcDay, parseNumber, signBybitRequest, syncBybitServerTime, toIsoDate, tradingDaysCountCalculation };
14
+ export { getBybitTimestamp, isSameUtcDay, parseNumber, signBybitRequest, syncBybitServerTime, toIsoDate };
@@ -1,6 +1,4 @@
1
- import { IBybitSignRequest } from '../types/bybit/index.js';
2
- import { a as TChallengeProgress, b as TChallengeWalletBalance, T as TChallengeClosedPnl } from '../TChallengeProgress-DWLlui_L.js';
3
- import '../enums-Dmg2vIi2.js';
1
+ import { a as IBybitSignRequest } from '../IBybitSignRequest-cA1RCbDS.js';
4
2
 
5
3
  declare function signBybitRequest(request: IBybitSignRequest): {
6
4
  signature: string;
@@ -9,22 +7,8 @@ declare function signBybitRequest(request: IBybitSignRequest): {
9
7
  declare function syncBybitServerTime(): Promise<number>;
10
8
  declare function getBybitTimestamp(timeOffset?: number): string;
11
9
 
12
- declare const createDefaultWallet: (challengeId?: string, capital?: number) => TChallengeWalletBalance;
13
- declare const createDefaultProgress: (challengeId?: string, currentEquity?: number) => TChallengeProgress;
14
- declare const tradingDaysCountCalculation: (closedPnlData: TChallengeClosedPnl[] | null, minPositionSize: number) => Promise<number>;
15
- declare const currentDailyEquity: (wallet: TChallengeWalletBalance, progress: TChallengeProgress) => {
16
- currentEquity: number;
17
- dailyDrawdown: number;
18
- dailyStartingEquity: number;
19
- dailyStartingUpdatedAt: string;
20
- dailyMaxEquity: number;
21
- dailyMaxUpdatedAt: string;
22
- dailyMinEquity: number;
23
- dailyMinUpdatedAt: string;
24
- };
25
-
26
10
  declare const parseNumber: (value: number | string | null | undefined) => number | null;
27
11
  declare const toIsoDate: (value: string | number | null | undefined) => string | null;
28
12
  declare const isSameUtcDay: (left: string | null | undefined, right: string | null | undefined) => boolean;
29
13
 
30
- export { createDefaultProgress, createDefaultWallet, currentDailyEquity, getBybitTimestamp, isSameUtcDay, parseNumber, signBybitRequest, syncBybitServerTime, toIsoDate, tradingDaysCountCalculation };
14
+ export { getBybitTimestamp, isSameUtcDay, parseNumber, signBybitRequest, syncBybitServerTime, toIsoDate };
@@ -1,5 +1,5 @@
1
- export { createDefaultProgress, createDefaultWallet, currentDailyEquity, isSameUtcDay, parseNumber, toIsoDate, tradingDaysCountCalculation } from '../chunk-6R5UUXX4.js';
2
- import '../chunk-AV3OIAHZ.js';
3
- export { getBybitTimestamp, signBybitRequest, syncBybitServerTime } from '../chunk-UBUM5Z2U.js';
1
+ export { isSameUtcDay, parseNumber, toIsoDate } from '../chunk-36QZINNQ.js';
2
+ export { getBybitTimestamp, signBybitRequest, syncBybitServerTime } from '../chunk-T23XINGG.js';
3
+ import '../chunk-V45RVFQE.js';
4
4
  //# sourceMappingURL=index.js.map
5
5
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anrmk/str-package",
3
- "version": "0.2.10",
3
+ "version": "0.2.12",
4
4
  "description": "Shared providers, types, and utils for STR services",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -56,11 +56,6 @@
56
56
  "import": "./dist/utils/bybitHelper.js",
57
57
  "require": "./dist/utils/bybitHelper.cjs"
58
58
  },
59
- "./utils/challengeHelper": {
60
- "types": "./dist/utils/challengeHelper.d.ts",
61
- "import": "./dist/utils/challengeHelper.js",
62
- "require": "./dist/utils/challengeHelper.cjs"
63
- },
64
59
  "./utils/helper": {
65
60
  "types": "./dist/utils/helper.d.ts",
66
61
  "import": "./dist/utils/helper.js",
@@ -1,63 +0,0 @@
1
- import { I as IBybitAccountType } from './enums-Dmg2vIi2.cjs';
2
-
3
- type TChallengeClosedPnl = {
4
- challengeId: string;
5
- symbol: string;
6
- orderId: string;
7
- side: string;
8
- qty: number;
9
- orderPrice: string;
10
- orderType: string;
11
- execType: string;
12
- closedSize: number;
13
- cumEntryValue: number;
14
- avgEntryPrice: number;
15
- cumExitValue: number;
16
- avgExitPrice: number;
17
- closedPnl: number;
18
- fillCount: number;
19
- leverage: number;
20
- createdTime: string;
21
- updatedTime: string;
22
- updatedAt: string;
23
- isTradingDayRecord: boolean;
24
- };
25
-
26
- type TChallengeWalletBalance = {
27
- challengeId: string;
28
- accountType: IBybitAccountType;
29
- totalEquity: number;
30
- totalPerpUpl: number;
31
- totalWalletBalance: number;
32
- totalAvailableBalance: number;
33
- capital: number;
34
- /** Coin-specific balance details */
35
- equity: number;
36
- totalPositionMm?: number;
37
- totalPositionIm?: number;
38
- usdValue: number;
39
- unrealisedPnl: number;
40
- walletBalance: number;
41
- availableToWithdraw: number;
42
- cumRealisedPnl?: number;
43
- bonus?: number;
44
- coin: string;
45
- updatedAt: string;
46
- };
47
-
48
- type TChallengeProgress = {
49
- id: string | null;
50
- challengeId: string;
51
- totalLoss: number;
52
- tradingDays: number;
53
- dailyDrawdown: number;
54
- profitTarget: number;
55
- dailyStartingEquity: number;
56
- dailyStartingUpdatedAt: string;
57
- dailyMaxEquity: number;
58
- dailyMinEquity: number;
59
- dailyMaxUpdatedAt: string;
60
- dailyMinUpdatedAt: string;
61
- };
62
-
63
- export type { TChallengeClosedPnl as T, TChallengeProgress as a, TChallengeWalletBalance as b };
@@ -1,63 +0,0 @@
1
- import { I as IBybitAccountType } from './enums-Dmg2vIi2.js';
2
-
3
- type TChallengeClosedPnl = {
4
- challengeId: string;
5
- symbol: string;
6
- orderId: string;
7
- side: string;
8
- qty: number;
9
- orderPrice: string;
10
- orderType: string;
11
- execType: string;
12
- closedSize: number;
13
- cumEntryValue: number;
14
- avgEntryPrice: number;
15
- cumExitValue: number;
16
- avgExitPrice: number;
17
- closedPnl: number;
18
- fillCount: number;
19
- leverage: number;
20
- createdTime: string;
21
- updatedTime: string;
22
- updatedAt: string;
23
- isTradingDayRecord: boolean;
24
- };
25
-
26
- type TChallengeWalletBalance = {
27
- challengeId: string;
28
- accountType: IBybitAccountType;
29
- totalEquity: number;
30
- totalPerpUpl: number;
31
- totalWalletBalance: number;
32
- totalAvailableBalance: number;
33
- capital: number;
34
- /** Coin-specific balance details */
35
- equity: number;
36
- totalPositionMm?: number;
37
- totalPositionIm?: number;
38
- usdValue: number;
39
- unrealisedPnl: number;
40
- walletBalance: number;
41
- availableToWithdraw: number;
42
- cumRealisedPnl?: number;
43
- bonus?: number;
44
- coin: string;
45
- updatedAt: string;
46
- };
47
-
48
- type TChallengeProgress = {
49
- id: string | null;
50
- challengeId: string;
51
- totalLoss: number;
52
- tradingDays: number;
53
- dailyDrawdown: number;
54
- profitTarget: number;
55
- dailyStartingEquity: number;
56
- dailyStartingUpdatedAt: string;
57
- dailyMaxEquity: number;
58
- dailyMinEquity: number;
59
- dailyMaxUpdatedAt: string;
60
- dailyMinUpdatedAt: string;
61
- };
62
-
63
- export type { TChallengeClosedPnl as T, TChallengeProgress as a, TChallengeWalletBalance as b };