jcc_hyper_tool 0.1.4 → 0.1.6

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 (179) hide show
  1. package/README.md +159 -21
  2. package/dist/advisor/actionRunner.d.ts +35 -0
  3. package/dist/advisor/actionRunner.d.ts.map +1 -0
  4. package/dist/advisor/actionRunner.js +194 -0
  5. package/dist/advisor/actionRunner.js.map +1 -0
  6. package/dist/advisor/actionSchema.d.ts +1551 -0
  7. package/dist/advisor/actionSchema.d.ts.map +1 -0
  8. package/dist/advisor/actionSchema.js +202 -0
  9. package/dist/advisor/actionSchema.js.map +1 -0
  10. package/dist/advisor/adviseDisplay.d.ts +26 -0
  11. package/dist/advisor/adviseDisplay.d.ts.map +1 -0
  12. package/dist/advisor/adviseDisplay.js +174 -0
  13. package/dist/advisor/adviseDisplay.js.map +1 -0
  14. package/dist/advisor/adviseEngine.d.ts +53 -0
  15. package/dist/advisor/adviseEngine.d.ts.map +1 -0
  16. package/dist/advisor/adviseEngine.js +172 -0
  17. package/dist/advisor/adviseEngine.js.map +1 -0
  18. package/dist/advisor/ambushPolicy.d.ts +47 -0
  19. package/dist/advisor/ambushPolicy.d.ts.map +1 -0
  20. package/dist/advisor/ambushPolicy.js +161 -0
  21. package/dist/advisor/ambushPolicy.js.map +1 -0
  22. package/dist/advisor/contextBuilder.d.ts +51 -0
  23. package/dist/advisor/contextBuilder.d.ts.map +1 -0
  24. package/dist/advisor/contextBuilder.js +153 -0
  25. package/dist/advisor/contextBuilder.js.map +1 -0
  26. package/dist/advisor/deepseekClient.d.ts +26 -0
  27. package/dist/advisor/deepseekClient.d.ts.map +1 -0
  28. package/dist/advisor/deepseekClient.js +96 -0
  29. package/dist/advisor/deepseekClient.js.map +1 -0
  30. package/dist/advisor/executionPolicy.d.ts +92 -0
  31. package/dist/advisor/executionPolicy.d.ts.map +1 -0
  32. package/dist/advisor/executionPolicy.js +273 -0
  33. package/dist/advisor/executionPolicy.js.map +1 -0
  34. package/dist/advisor/guards.d.ts +31 -0
  35. package/dist/advisor/guards.d.ts.map +1 -0
  36. package/dist/advisor/guards.js +198 -0
  37. package/dist/advisor/guards.js.map +1 -0
  38. package/dist/advisor/indicatorCompute.d.ts +45 -0
  39. package/dist/advisor/indicatorCompute.d.ts.map +1 -0
  40. package/dist/advisor/indicatorCompute.js +259 -0
  41. package/dist/advisor/indicatorCompute.js.map +1 -0
  42. package/dist/advisor/positionPlan.d.ts +33 -0
  43. package/dist/advisor/positionPlan.d.ts.map +1 -0
  44. package/dist/advisor/positionPlan.js +118 -0
  45. package/dist/advisor/positionPlan.js.map +1 -0
  46. package/dist/advisor/promptTemplate.d.ts +11 -0
  47. package/dist/advisor/promptTemplate.d.ts.map +1 -0
  48. package/dist/advisor/promptTemplate.js +230 -0
  49. package/dist/advisor/promptTemplate.js.map +1 -0
  50. package/dist/advisor/sessionLog.d.ts +41 -0
  51. package/dist/advisor/sessionLog.d.ts.map +1 -0
  52. package/dist/advisor/sessionLog.js +7 -0
  53. package/dist/advisor/sessionLog.js.map +1 -0
  54. package/dist/advisor/touchProbability.d.ts +54 -0
  55. package/dist/advisor/touchProbability.d.ts.map +1 -0
  56. package/dist/advisor/touchProbability.js +215 -0
  57. package/dist/advisor/touchProbability.js.map +1 -0
  58. package/dist/advisor/tpslPolicy.d.ts +22 -0
  59. package/dist/advisor/tpslPolicy.d.ts.map +1 -0
  60. package/dist/advisor/tpslPolicy.js +120 -0
  61. package/dist/advisor/tpslPolicy.js.map +1 -0
  62. package/dist/cli/advisorCli.d.ts +3 -0
  63. package/dist/cli/advisorCli.d.ts.map +1 -0
  64. package/dist/cli/advisorCli.js +706 -0
  65. package/dist/cli/advisorCli.js.map +1 -0
  66. package/dist/cli/index.js +6 -2
  67. package/dist/cli/index.js.map +1 -1
  68. package/dist/cli/riskCli.d.ts +3 -0
  69. package/dist/cli/riskCli.d.ts.map +1 -0
  70. package/dist/cli/riskCli.js +120 -0
  71. package/dist/cli/riskCli.js.map +1 -0
  72. package/dist/cli/strategyCli.d.ts.map +1 -1
  73. package/dist/cli/strategyCli.js +4 -2
  74. package/dist/cli/strategyCli.js.map +1 -1
  75. package/dist/cli/tradingCli.d.ts.map +1 -1
  76. package/dist/cli/tradingCli.js +34 -2
  77. package/dist/cli/tradingCli.js.map +1 -1
  78. package/dist/core/cliBin.d.ts +8 -0
  79. package/dist/core/cliBin.d.ts.map +1 -0
  80. package/dist/core/cliBin.js +15 -0
  81. package/dist/core/cliBin.js.map +1 -0
  82. package/dist/core/errorFormat.d.ts +7 -0
  83. package/dist/core/errorFormat.d.ts.map +1 -0
  84. package/dist/core/errorFormat.js +59 -0
  85. package/dist/core/errorFormat.js.map +1 -0
  86. package/dist/core/errors.d.ts +2 -1
  87. package/dist/core/errors.d.ts.map +1 -1
  88. package/dist/core/errors.js +3 -1
  89. package/dist/core/errors.js.map +1 -1
  90. package/dist/core/hyperliquid/asset.d.ts +2 -0
  91. package/dist/core/hyperliquid/asset.d.ts.map +1 -1
  92. package/dist/core/hyperliquid/asset.js +25 -0
  93. package/dist/core/hyperliquid/asset.js.map +1 -1
  94. package/dist/core/hyperliquid/client.d.ts +3 -0
  95. package/dist/core/hyperliquid/client.d.ts.map +1 -1
  96. package/dist/core/hyperliquid/client.js +31 -21
  97. package/dist/core/hyperliquid/client.js.map +1 -1
  98. package/dist/core/hyperliquid/exchange.d.ts +3 -0
  99. package/dist/core/hyperliquid/exchange.d.ts.map +1 -1
  100. package/dist/core/hyperliquid/exchange.js +31 -21
  101. package/dist/core/hyperliquid/exchange.js.map +1 -1
  102. package/dist/core/hyperliquid/exchangeParse.d.ts +3 -0
  103. package/dist/core/hyperliquid/exchangeParse.d.ts.map +1 -1
  104. package/dist/core/hyperliquid/exchangeParse.js +62 -0
  105. package/dist/core/hyperliquid/exchangeParse.js.map +1 -1
  106. package/dist/core/hyperliquid/httpRequest.d.ts +36 -0
  107. package/dist/core/hyperliquid/httpRequest.d.ts.map +1 -0
  108. package/dist/core/hyperliquid/httpRequest.js +171 -0
  109. package/dist/core/hyperliquid/httpRequest.js.map +1 -0
  110. package/dist/core/hyperliquid/orders.d.ts +5 -0
  111. package/dist/core/hyperliquid/orders.d.ts.map +1 -1
  112. package/dist/core/hyperliquid/orders.js +15 -5
  113. package/dist/core/hyperliquid/orders.js.map +1 -1
  114. package/dist/core/hyperliquid/rounding.d.ts +23 -0
  115. package/dist/core/hyperliquid/rounding.d.ts.map +1 -0
  116. package/dist/core/hyperliquid/rounding.js +53 -0
  117. package/dist/core/hyperliquid/rounding.js.map +1 -0
  118. package/dist/core/risk/isolatedTopUp.d.ts +112 -0
  119. package/dist/core/risk/isolatedTopUp.d.ts.map +1 -0
  120. package/dist/core/risk/isolatedTopUp.js +209 -0
  121. package/dist/core/risk/isolatedTopUp.js.map +1 -0
  122. package/dist/core/risk/isolatedTopUpHistory.d.ts +7 -0
  123. package/dist/core/risk/isolatedTopUpHistory.d.ts.map +1 -0
  124. package/dist/core/risk/isolatedTopUpHistory.js +26 -0
  125. package/dist/core/risk/isolatedTopUpHistory.js.map +1 -0
  126. package/dist/core/risk/isolatedTopUpParse.d.ts +16 -0
  127. package/dist/core/risk/isolatedTopUpParse.d.ts.map +1 -0
  128. package/dist/core/risk/isolatedTopUpParse.js +78 -0
  129. package/dist/core/risk/isolatedTopUpParse.js.map +1 -0
  130. package/dist/core/risk/runIsolatedTopUpReconcile.d.ts +28 -0
  131. package/dist/core/risk/runIsolatedTopUpReconcile.d.ts.map +1 -0
  132. package/dist/core/risk/runIsolatedTopUpReconcile.js +184 -0
  133. package/dist/core/risk/runIsolatedTopUpReconcile.js.map +1 -0
  134. package/dist/core/state/gcTradeState.js +1 -1
  135. package/dist/core/state/gcTradeState.js.map +1 -1
  136. package/dist/core/state/gridReconcile.d.ts +2 -0
  137. package/dist/core/state/gridReconcile.d.ts.map +1 -1
  138. package/dist/core/state/gridReconcile.js +42 -2
  139. package/dist/core/state/gridReconcile.js.map +1 -1
  140. package/dist/core/state/intentFactory.d.ts +1 -0
  141. package/dist/core/state/intentFactory.d.ts.map +1 -1
  142. package/dist/core/state/intentFactory.js +1 -0
  143. package/dist/core/state/intentFactory.js.map +1 -1
  144. package/dist/core/state/profileStore.d.ts +6 -0
  145. package/dist/core/state/profileStore.d.ts.map +1 -0
  146. package/dist/core/state/profileStore.js +26 -0
  147. package/dist/core/state/profileStore.js.map +1 -0
  148. package/dist/core/state/runReconcile.d.ts.map +1 -1
  149. package/dist/core/state/runReconcile.js +92 -30
  150. package/dist/core/state/runReconcile.js.map +1 -1
  151. package/dist/core/state/schema.d.ts +565 -124
  152. package/dist/core/state/schema.d.ts.map +1 -1
  153. package/dist/core/state/schema.js +62 -0
  154. package/dist/core/state/schema.js.map +1 -1
  155. package/dist/core/state/snapshot.d.ts +13 -0
  156. package/dist/core/state/snapshot.d.ts.map +1 -1
  157. package/dist/core/state/snapshot.js +36 -0
  158. package/dist/core/state/snapshot.js.map +1 -1
  159. package/dist/core/state/statePaths.d.ts +1 -0
  160. package/dist/core/state/statePaths.d.ts.map +1 -1
  161. package/dist/core/state/statePaths.js +4 -0
  162. package/dist/core/state/statePaths.js.map +1 -1
  163. package/dist/core/state/store.d.ts +21 -3
  164. package/dist/core/state/store.d.ts.map +1 -1
  165. package/dist/core/state/store.js +123 -14
  166. package/dist/core/state/store.js.map +1 -1
  167. package/dist/core/state/types.d.ts +13 -0
  168. package/dist/core/state/types.d.ts.map +1 -1
  169. package/dist/daemon/index.js +50 -5
  170. package/dist/daemon/index.js.map +1 -1
  171. package/dist/daemon/validateChild.d.ts +13 -0
  172. package/dist/daemon/validateChild.d.ts.map +1 -0
  173. package/dist/daemon/validateChild.js +77 -0
  174. package/dist/daemon/validateChild.js.map +1 -0
  175. package/dist/strategies/grid.d.ts +1 -0
  176. package/dist/strategies/grid.d.ts.map +1 -1
  177. package/dist/strategies/grid.js +1 -0
  178. package/dist/strategies/grid.js.map +1 -1
  179. package/package.json +3 -1
@@ -0,0 +1,171 @@
1
+ import { HyperliquidApiError } from "../errors.js";
2
+ import { formatHttpResponseBodyForDisplay } from "../errorFormat.js";
3
+ /** Hyperliquid REST IP weight budget (see HL rate-limits docs). */
4
+ export const HL_REST_WEIGHT_LIMIT_PER_MINUTE = 1200;
5
+ function readRetryEnv(name, fallback) {
6
+ const raw = process.env[name]?.trim();
7
+ if (!raw) {
8
+ return fallback;
9
+ }
10
+ const n = Number(raw);
11
+ return Number.isFinite(n) && n >= 0 ? n : fallback;
12
+ }
13
+ export function defaultHyperliquidHttpRetryOptions() {
14
+ return {
15
+ maxRetries: readRetryEnv("JCC_HL_MAX_RETRIES", 4),
16
+ retryBaseDelayMs: readRetryEnv("JCC_HL_RETRY_BASE_MS", 1000),
17
+ };
18
+ }
19
+ export function requestHintFromJsonBody(body) {
20
+ if (typeof body !== "object" || body === null) {
21
+ return undefined;
22
+ }
23
+ const type = body.type;
24
+ return typeof type === "string" ? type : undefined;
25
+ }
26
+ /** Unwrap Error.cause chains (Node fetch often surfaces only "fetch failed" at the top). */
27
+ export function formatErrorChain(error) {
28
+ const parts = [];
29
+ const seen = new Set();
30
+ let cur = error;
31
+ while (cur !== undefined && cur !== null && !seen.has(cur)) {
32
+ seen.add(cur);
33
+ if (cur instanceof Error) {
34
+ const code = "code" in cur && typeof cur.code === "string"
35
+ ? cur.code
36
+ : undefined;
37
+ parts.push(code ? `${cur.message} (${code})` : cur.message);
38
+ cur = cur.cause;
39
+ }
40
+ else {
41
+ parts.push(String(cur));
42
+ break;
43
+ }
44
+ }
45
+ return parts.join(" → ");
46
+ }
47
+ export function hyperliquidRateLimitHint() {
48
+ return [
49
+ `Hyperliquid REST IP weight limit: ${HL_REST_WEIGHT_LIMIT_PER_MINUTE}/minute.`,
50
+ "Typical info weights: candleSnapshot≈20 (+1 per 60 candles returned),",
51
+ "clearinghouseState/allMids/l2Book=2, most other info=20, userRole=60.",
52
+ "Exchange actions use separate address-based limits (not info); when throttled,",
53
+ "actions may be limited to about one request every 10 seconds.",
54
+ ].join(" ");
55
+ }
56
+ export function formatHyperliquidHttpError(params) {
57
+ const req = params.requestHint ? ` type=${params.requestHint}` : "";
58
+ const statusLabel = params.statusText && params.statusText.length > 0
59
+ ? `${params.status} ${params.statusText}`
60
+ : String(params.status);
61
+ const bodyDisplay = params.bodyText.length > 0 ? formatHttpResponseBodyForDisplay(params.bodyText) : "";
62
+ const retryNote = params.retriesAttempted !== undefined && params.retriesAttempted > 0
63
+ ? ` Retried ${params.retriesAttempted} time(s) before giving up.`
64
+ : "";
65
+ if (params.status === 429) {
66
+ return [
67
+ `Hyperliquid rate limited (HTTP 429) on ${params.method} ${params.url}${req}.${retryNote}`,
68
+ hyperliquidRateLimitHint(),
69
+ bodyDisplay ? `Response body:\n${bodyDisplay}` : undefined,
70
+ ]
71
+ .filter(Boolean)
72
+ .join("\n");
73
+ }
74
+ if (params.status === 0) {
75
+ return [
76
+ `Network error on ${params.method} ${params.url}${req}.${retryNote}`,
77
+ bodyDisplay || "(no additional detail)",
78
+ "Check DNS, TLS, proxy/firewall, and that the API host is reachable from this machine.",
79
+ ].join("\n");
80
+ }
81
+ return [
82
+ `HTTP ${statusLabel} on ${params.method} ${params.url}${req}.${retryNote}`,
83
+ bodyDisplay ? `Response body:\n${bodyDisplay}` : undefined,
84
+ ]
85
+ .filter(Boolean)
86
+ .join("\n");
87
+ }
88
+ function parseRetryAfterMs(headers) {
89
+ const raw = headers.get("retry-after")?.trim();
90
+ if (!raw) {
91
+ return undefined;
92
+ }
93
+ const seconds = Number(raw);
94
+ if (Number.isFinite(seconds) && seconds >= 0) {
95
+ return seconds * 1000;
96
+ }
97
+ const when = Date.parse(raw);
98
+ if (Number.isFinite(when)) {
99
+ return Math.max(0, when - Date.now());
100
+ }
101
+ return undefined;
102
+ }
103
+ function isRetryableHttpStatus(status) {
104
+ return status === 429 || status === 502 || status === 503 || status === 504;
105
+ }
106
+ function backoffDelayMs(attempt, baseMs, retryAfterMs) {
107
+ if (retryAfterMs !== undefined) {
108
+ return retryAfterMs;
109
+ }
110
+ const exp = Math.min(baseMs * 2 ** attempt, 30_000);
111
+ return exp + Math.floor(Math.random() * 250);
112
+ }
113
+ function sleep(ms) {
114
+ return new Promise((resolve) => {
115
+ setTimeout(resolve, ms);
116
+ });
117
+ }
118
+ export async function postJsonWithRetry(params) {
119
+ const retryOpts = { ...defaultHyperliquidHttpRetryOptions(), ...params.retry };
120
+ const bodyText = JSON.stringify(params.body);
121
+ const requestHint = requestHintFromJsonBody(params.body);
122
+ let lastNetworkDetail = "";
123
+ for (let attempt = 0; attempt <= retryOpts.maxRetries; attempt++) {
124
+ let res;
125
+ try {
126
+ res = await params.fetchImpl(params.url, {
127
+ method: "POST",
128
+ headers: {
129
+ Accept: "application/json",
130
+ "Content-Type": "application/json",
131
+ },
132
+ body: bodyText,
133
+ });
134
+ }
135
+ catch (e) {
136
+ lastNetworkDetail = formatErrorChain(e);
137
+ if (attempt >= retryOpts.maxRetries) {
138
+ throw new HyperliquidApiError(formatHyperliquidHttpError({
139
+ method: "POST",
140
+ url: params.url,
141
+ status: 0,
142
+ bodyText: lastNetworkDetail,
143
+ requestHint,
144
+ retriesAttempted: attempt,
145
+ }), 0, lastNetworkDetail, requestHint);
146
+ }
147
+ await sleep(backoffDelayMs(attempt, retryOpts.retryBaseDelayMs));
148
+ continue;
149
+ }
150
+ const text = await res.text();
151
+ if (res.ok || !isRetryableHttpStatus(res.status) || attempt >= retryOpts.maxRetries) {
152
+ return {
153
+ status: res.status,
154
+ statusText: res.statusText,
155
+ text,
156
+ headers: res.headers,
157
+ attemptsMade: attempt + 1,
158
+ };
159
+ }
160
+ await sleep(backoffDelayMs(attempt, retryOpts.retryBaseDelayMs, parseRetryAfterMs(res.headers)));
161
+ }
162
+ throw new HyperliquidApiError(formatHyperliquidHttpError({
163
+ method: "POST",
164
+ url: params.url,
165
+ status: 0,
166
+ bodyText: lastNetworkDetail || "retry loop exhausted",
167
+ requestHint,
168
+ retriesAttempted: retryOpts.maxRetries,
169
+ }), 0, lastNetworkDetail, requestHint);
170
+ }
171
+ //# sourceMappingURL=httpRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpRequest.js","sourceRoot":"","sources":["../../../src/core/hyperliquid/httpRequest.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ export declare function limitWireFromParams(params: {
17
17
  isBuy: boolean;
18
18
  limitPx: number;
19
19
  sz: number;
20
+ szDecimals: number;
20
21
  reduceOnly: boolean;
21
22
  tif: TifName;
22
23
  cloidHex?: string;
@@ -24,6 +25,7 @@ export declare function limitWireFromParams(params: {
24
25
  export declare function limitsToOrderAction(wires: LimitOrderWire[]): Record<string, unknown>;
25
26
  export declare function batchLimitOrdersFromPrimitives(opts: {
26
27
  assetIndex: number;
28
+ szDecimals: number;
27
29
  rows: Array<{
28
30
  px: number;
29
31
  isBuy: boolean;
@@ -37,6 +39,7 @@ export declare function buildPlaceOrderAction(params: {
37
39
  isBuy: boolean;
38
40
  limitPx: number;
39
41
  sz: number;
42
+ szDecimals: number;
40
43
  reduceOnly: boolean;
41
44
  tif: TifName;
42
45
  cloidHex?: string;
@@ -62,6 +65,7 @@ export declare function triggerWireFromParams(params: {
62
65
  assetIndex: number;
63
66
  isBuy: boolean;
64
67
  sz: number;
68
+ szDecimals: number;
65
69
  reduceOnly: boolean;
66
70
  triggerPx: number;
67
71
  isMarket: boolean;
@@ -77,6 +81,7 @@ export declare function buildTpslTriggerOrderAction(params: Parameters<typeof tr
77
81
  /** Two trigger wires (TP + SL) in a single batch `order` action. */
78
82
  export declare function buildBracketProtectionOrderAction(params: {
79
83
  assetIndex: number;
84
+ szDecimals: number;
80
85
  /** Closing side: long exit is sell -> isBuy false */
81
86
  closeIsBuy: boolean;
82
87
  sz: number;
@@ -1 +1 @@
1
- {"version":3,"file":"orders.d.ts","sourceRoot":"","sources":["../../../src/core/hyperliquid/orders.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orders.d.ts","sourceRoot":"","sources":["../../../src/core/hyperliquid/orders.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,13 @@
1
1
  import { floatToWire } from "./float.js";
2
+ import { roundHyperliquidPerpPrice, roundHyperliquidPerpSize } from "./rounding.js";
2
3
  export function limitWireFromParams(params) {
4
+ const limitPx = roundHyperliquidPerpPrice(params.limitPx, params.szDecimals);
5
+ const sz = roundHyperliquidPerpSize(params.sz, params.szDecimals);
3
6
  const wire = {
4
7
  a: params.assetIndex,
5
8
  b: params.isBuy,
6
- p: floatToWire(params.limitPx),
7
- s: floatToWire(params.sz),
9
+ p: floatToWire(limitPx),
10
+ s: floatToWire(sz),
8
11
  r: params.reduceOnly,
9
12
  t: {
10
13
  limit: {
@@ -33,6 +36,7 @@ export function batchLimitOrdersFromPrimitives(opts) {
33
36
  isBuy: r.isBuy,
34
37
  limitPx: r.px,
35
38
  sz: r.sz,
39
+ szDecimals: opts.szDecimals,
36
40
  reduceOnly: opts.reduceOnly,
37
41
  tif: opts.tif,
38
42
  }));
@@ -44,6 +48,7 @@ export function buildPlaceOrderAction(params) {
44
48
  isBuy: params.isBuy,
45
49
  limitPx: params.limitPx,
46
50
  sz: params.sz,
51
+ szDecimals: params.szDecimals,
47
52
  reduceOnly: params.reduceOnly,
48
53
  tif: params.tif,
49
54
  cloidHex: params.cloidHex,
@@ -57,16 +62,19 @@ export function buildCancelOrdersAction(assetIndex, oids) {
57
62
  };
58
63
  }
59
64
  export function triggerWireFromParams(params) {
65
+ const wireLimitPx = roundHyperliquidPerpPrice(params.wireLimitPx, params.szDecimals);
66
+ const triggerPx = roundHyperliquidPerpPrice(params.triggerPx, params.szDecimals);
67
+ const sz = roundHyperliquidPerpSize(params.sz, params.szDecimals);
60
68
  const wire = {
61
69
  a: params.assetIndex,
62
70
  b: params.isBuy,
63
- p: floatToWire(params.wireLimitPx),
64
- s: floatToWire(params.sz),
71
+ p: floatToWire(wireLimitPx),
72
+ s: floatToWire(sz),
65
73
  r: params.reduceOnly,
66
74
  t: {
67
75
  trigger: {
68
76
  isMarket: params.isMarket,
69
- triggerPx: floatToWire(params.triggerPx),
77
+ triggerPx: floatToWire(triggerPx),
70
78
  tpsl: params.tpsl,
71
79
  },
72
80
  },
@@ -91,6 +99,7 @@ export function buildBracketProtectionOrderAction(params) {
91
99
  assetIndex: params.assetIndex,
92
100
  isBuy: params.closeIsBuy,
93
101
  sz: params.sz,
102
+ szDecimals: params.szDecimals,
94
103
  reduceOnly: params.reduceOnly,
95
104
  triggerPx: params.tpTriggerPx,
96
105
  isMarket: params.isMarket,
@@ -101,6 +110,7 @@ export function buildBracketProtectionOrderAction(params) {
101
110
  assetIndex: params.assetIndex,
102
111
  isBuy: params.closeIsBuy,
103
112
  sz: params.sz,
113
+ szDecimals: params.szDecimals,
104
114
  reduceOnly: params.reduceOnly,
105
115
  triggerPx: params.slTriggerPx,
106
116
  isMarket: params.isMarket,
@@ -1 +1 @@
1
- {"version":3,"file":"orders.js","sourceRoot":"","sources":["../../../src/core/hyperliquid/orders.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orders.js","sourceRoot":"","sources":["../../../src/core/hyperliquid/orders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAcpF,MAAM,UAAU,mBAAmB,CAAC,MASnC;IACC,MAAM,OAAO,GAAG,yBAAyB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7E,MAAM,EAAE,GAAG,wBAAwB,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAClE,MAAM,IAAI,GAAmB;QAC3B,CAAC,EAAE,MAAM,CAAC,UAAU;QACpB,CAAC,EAAE,MAAM,CAAC,KAAK;QACf,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC;QACvB,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;QAClB,CAAC,EAAE,MAAM,CAAC,UAAU;QACpB,CAAC,EAAE;YACD,KAAK,EAAE;gBACL,GAAG,EAAE,MAAM,CAAC,GAAG;aAChB;SACF;KACF,CAAC;IACF,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAuB;IACzD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,IAAI;KACf,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,IAM9C;IACC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACzB,mBAAmB,CAAC;QAClB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,OAAO,EAAE,CAAC,CAAC,EAAE;QACb,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MASrC;IACC,OAAO,mBAAmB,CAAC;QACzB,mBAAmB,CAAC;YAClB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;KACH,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,UAAkB,EAClB,IAAc;IAEd,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;KACjD,CAAC;AACJ,CAAC;AAcD,MAAM,UAAU,qBAAqB,CAAC,MAYrC;IACC,MAAM,WAAW,GAAG,yBAAyB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACrF,MAAM,SAAS,GAAG,yBAAyB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACjF,MAAM,EAAE,GAAG,wBAAwB,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAClE,MAAM,IAAI,GAAqB;QAC7B,CAAC,EAAE,MAAM,CAAC,UAAU;QACpB,CAAC,EAAE,MAAM,CAAC,KAAK;QACf,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC;QAC3B,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;QAClB,CAAC,EAAE,MAAM,CAAC,UAAU;QACpB,CAAC,EAAE;YACD,OAAO,EAAE;gBACP,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC;gBACjC,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB;SACF;KACF,CAAC;IACF,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAID,MAAM,UAAU,2BAA2B,CACzC,MAAmD,EACnD,MAAqC;IAErC,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC;IAC1C,OAAO;QACL,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACvC,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,iCAAiC,CAAC,MAajD;IACC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;IACzC,MAAM,EAAE,GAAG,qBAAqB,CAAC;QAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,KAAK,EAAE,MAAM,CAAC,UAAU;QACxB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,WAAW;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,WAAW,EAAE,MAAM,CAAC,aAAa;QACjC,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,qBAAqB,CAAC;QAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,KAAK,EAAE,MAAM,CAAC,UAAU;QACxB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,WAAW;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,WAAW,EAAE,MAAM,CAAC,aAAa;QACjC,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;IACH,OAAO;QACL,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QAChB,QAAQ;KACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Hyperliquid perp price/size rounding (see HL docs: tick-and-lot-size, python-sdk examples/rounding.py).
3
+ * Perp prices: max 5 significant figures and at most (6 - szDecimals) decimal places.
4
+ */
5
+ export declare const HL_PERP_MAX_DECIMALS = 6;
6
+ /** Round perp limit/trigger price to exchange-accepted precision for the asset. */
7
+ export declare function roundHyperliquidPerpPrice(px: number, szDecimals: number): number;
8
+ /** Round perp order size to the asset's szDecimals. */
9
+ export declare function roundHyperliquidPerpSize(sz: number, szDecimals: number): number;
10
+ /** Hyperliquid perp minimum order notional (USD). */
11
+ export declare const HL_MIN_ORDER_NOTIONAL_USD = 10;
12
+ /** Order notional in USD: `sz × px` (HL `Ntl`). */
13
+ export declare function perpOrderNotionalUsd(sz: number, px: number): number;
14
+ /** Smallest `sz` (rounded up to lot size) with notional ≥ `minNotionalUsd` at `px`. */
15
+ export declare function minPerpOrderSzForNotional(px: number, szDecimals: number, minNotionalUsd?: number): number;
16
+ export declare function assertMinPerpOrderNotional(params: {
17
+ sz: number;
18
+ px: number;
19
+ szDecimals: number;
20
+ label?: string;
21
+ minNotionalUsd?: number;
22
+ }): void;
23
+ //# sourceMappingURL=rounding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rounding.d.ts","sourceRoot":"","sources":["../../../src/core/hyperliquid/rounding.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,mFAAmF;AACnF,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAWhF;AAED,uDAAuD;AACvD,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAM/E;AAED,qDAAqD;AACrD,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,mDAAmD;AACnD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,uFAAuF;AACvF,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,cAAc,SAA4B,GACzC,MAAM,CAOR;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,IAAI,CAWP"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Hyperliquid perp price/size rounding (see HL docs: tick-and-lot-size, python-sdk examples/rounding.py).
3
+ * Perp prices: max 5 significant figures and at most (6 - szDecimals) decimal places.
4
+ */
5
+ import { ConfigError } from "../errors.js";
6
+ export const HL_PERP_MAX_DECIMALS = 6;
7
+ /** Round perp limit/trigger price to exchange-accepted precision for the asset. */
8
+ export function roundHyperliquidPerpPrice(px, szDecimals) {
9
+ if (!Number.isFinite(px)) {
10
+ return px;
11
+ }
12
+ if (px > 100_000) {
13
+ return Math.round(px);
14
+ }
15
+ const maxPriceDecimals = HL_PERP_MAX_DECIMALS - szDecimals;
16
+ const sig5 = Number.parseFloat(px.toPrecision(5));
17
+ const factor = 10 ** maxPriceDecimals;
18
+ return Math.round(sig5 * factor) / factor;
19
+ }
20
+ /** Round perp order size to the asset's szDecimals. */
21
+ export function roundHyperliquidPerpSize(sz, szDecimals) {
22
+ if (!Number.isFinite(sz)) {
23
+ return sz;
24
+ }
25
+ const factor = 10 ** szDecimals;
26
+ return Math.round(sz * factor) / factor;
27
+ }
28
+ /** Hyperliquid perp minimum order notional (USD). */
29
+ export const HL_MIN_ORDER_NOTIONAL_USD = 10;
30
+ /** Order notional in USD: `sz × px` (HL `Ntl`). */
31
+ export function perpOrderNotionalUsd(sz, px) {
32
+ return sz * px;
33
+ }
34
+ /** Smallest `sz` (rounded up to lot size) with notional ≥ `minNotionalUsd` at `px`. */
35
+ export function minPerpOrderSzForNotional(px, szDecimals, minNotionalUsd = HL_MIN_ORDER_NOTIONAL_USD) {
36
+ if (!Number.isFinite(px) || px <= 0) {
37
+ return minNotionalUsd;
38
+ }
39
+ const minRaw = minNotionalUsd / px;
40
+ const factor = 10 ** szDecimals;
41
+ return Math.ceil(minRaw * factor - 1e-12) / factor;
42
+ }
43
+ export function assertMinPerpOrderNotional(params) {
44
+ const min = params.minNotionalUsd ?? HL_MIN_ORDER_NOTIONAL_USD;
45
+ const roundedSz = roundHyperliquidPerpSize(params.sz, params.szDecimals);
46
+ const notional = perpOrderNotionalUsd(roundedSz, params.px);
47
+ if (!Number.isFinite(notional) || notional + 1e-9 < min) {
48
+ const minSz = minPerpOrderSzForNotional(params.px, params.szDecimals, min);
49
+ const prefix = params.label ? `${params.label}: ` : "";
50
+ throw new ConfigError(`${prefix}order notional $${notional.toFixed(2)} below Hyperliquid minimum $${min} (sz ${roundedSz} × px ${params.px}); need sz ≥ ${minSz}.`);
51
+ }
52
+ }
53
+ //# sourceMappingURL=rounding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rounding.js","sourceRoot":"","sources":["../../../src/core/hyperliquid/rounding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ import { z } from "zod";
2
+ export declare const IsolatedTopUpConfigSchema: z.ZodObject<{
3
+ enabled: z.ZodDefault<z.ZodBoolean>;
4
+ safeDistancePct: z.ZodDefault<z.ZodNumber>;
5
+ safetyFactor: z.ZodDefault<z.ZodNumber>;
6
+ reserveUsd: z.ZodDefault<z.ZodNumber>;
7
+ minTopUpUsd: z.ZodDefault<z.ZodNumber>;
8
+ minPartialUsd: z.ZodDefault<z.ZodNumber>;
9
+ maxSingleTopUpUsd: z.ZodDefault<z.ZodNumber>;
10
+ maxDailyTopUpUsd: z.ZodDefault<z.ZodNumber>;
11
+ cooldownSec: z.ZodDefault<z.ZodNumber>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ enabled: boolean;
14
+ safeDistancePct: number;
15
+ safetyFactor: number;
16
+ reserveUsd: number;
17
+ minTopUpUsd: number;
18
+ minPartialUsd: number;
19
+ maxSingleTopUpUsd: number;
20
+ maxDailyTopUpUsd: number;
21
+ cooldownSec: number;
22
+ }, {
23
+ enabled?: boolean | undefined;
24
+ safeDistancePct?: number | undefined;
25
+ safetyFactor?: number | undefined;
26
+ reserveUsd?: number | undefined;
27
+ minTopUpUsd?: number | undefined;
28
+ minPartialUsd?: number | undefined;
29
+ maxSingleTopUpUsd?: number | undefined;
30
+ maxDailyTopUpUsd?: number | undefined;
31
+ cooldownSec?: number | undefined;
32
+ }>;
33
+ export type IsolatedTopUpConfig = z.infer<typeof IsolatedTopUpConfigSchema>;
34
+ export declare const DEFAULT_ISOLATED_TOP_UP_CONFIG: IsolatedTopUpConfig;
35
+ export type IsolatedTopUpSkipReason = "disabled" | "not_isolated" | "no_position" | "invalid_prices" | "already_safe" | "needed_below_min" | "partial_insufficient" | "add_below_min" | "cooldown" | "daily_cap";
36
+ export type IsolatedTopUpTopUpReason = "full_top_up" | "partial_top_up";
37
+ export type IsolatedTopUpReport = {
38
+ coin: string;
39
+ szi: number;
40
+ markPx: number;
41
+ liquidationPx: number;
42
+ distancePct: number;
43
+ safeDistancePct: number;
44
+ targetLiqPx: number;
45
+ gapPx: number;
46
+ neededUsdRaw: number;
47
+ neededUsd: number;
48
+ safetyFactor: number;
49
+ withdrawable: number;
50
+ reserveUsd: number;
51
+ availableToAdd: number;
52
+ };
53
+ export type IsolatedTopUpPlan = {
54
+ action: "skip";
55
+ reason: IsolatedTopUpSkipReason;
56
+ report: Partial<IsolatedTopUpReport>;
57
+ } | {
58
+ action: "top_up";
59
+ reason: IsolatedTopUpTopUpReason;
60
+ partial: boolean;
61
+ addUsd: number;
62
+ neededUsd: number;
63
+ report: IsolatedTopUpReport;
64
+ };
65
+ export type IsolatedTopUpInput = {
66
+ coin: string;
67
+ szi: number;
68
+ leverageType: "isolated" | "cross";
69
+ markPx: number;
70
+ liquidationPx: number;
71
+ withdrawable: number;
72
+ config?: Partial<IsolatedTopUpConfig>;
73
+ nowMs?: number;
74
+ lastTopUpAtMs?: number;
75
+ dailyTopUpSumUsd?: number;
76
+ };
77
+ export declare function calcSafeDistancePct(params: {
78
+ markPx: number;
79
+ liquidationPx: number;
80
+ }): number;
81
+ export declare function calcTargetLiqPx(params: {
82
+ szi: number;
83
+ markPx: number;
84
+ safeDistancePct: number;
85
+ }): number;
86
+ export declare function calcGapPx(params: {
87
+ szi: number;
88
+ markPx: number;
89
+ liquidationPx: number;
90
+ safeDistancePct: number;
91
+ }): number;
92
+ export declare function calcNeededUsd(params: {
93
+ szi: number;
94
+ markPx: number;
95
+ liquidationPx: number;
96
+ safeDistancePct: number;
97
+ safetyFactor: number;
98
+ }): {
99
+ targetLiqPx: number;
100
+ gapPx: number;
101
+ neededUsdRaw: number;
102
+ neededUsd: number;
103
+ };
104
+ export declare function planIsolatedTopUp(input: IsolatedTopUpInput): IsolatedTopUpPlan;
105
+ /** Hyperliquid `updateIsolatedMargin` ntli uses 6-decimal USDC (positive = add). */
106
+ export declare function usdToIsolatedMarginNtli(addUsd: number): number;
107
+ export declare function buildUpdateIsolatedMarginAction(params: {
108
+ assetIndex: number;
109
+ isBuy: boolean;
110
+ addUsd: number;
111
+ }): Record<string, unknown>;
112
+ //# sourceMappingURL=isolatedTopUp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isolatedTopUp.d.ts","sourceRoot":"","sources":["../../../src/core/risk/isolatedTopUp.ts"],"names":[],"mappings":"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"}