jcc_hyper_tool 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +394 -0
  3. package/dist/cli/confirm.d.ts +2 -0
  4. package/dist/cli/confirm.d.ts.map +1 -0
  5. package/dist/cli/confirm.js +22 -0
  6. package/dist/cli/confirm.js.map +1 -0
  7. package/dist/cli/index.d.ts +3 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +189 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/cli/perpKline.d.ts +19 -0
  12. package/dist/cli/perpKline.d.ts.map +1 -0
  13. package/dist/cli/perpKline.js +39 -0
  14. package/dist/cli/perpKline.js.map +1 -0
  15. package/dist/cli/stateCli.d.ts +3 -0
  16. package/dist/cli/stateCli.d.ts.map +1 -0
  17. package/dist/cli/stateCli.js +158 -0
  18. package/dist/cli/stateCli.js.map +1 -0
  19. package/dist/cli/strategyCli.d.ts +3 -0
  20. package/dist/cli/strategyCli.d.ts.map +1 -0
  21. package/dist/cli/strategyCli.js +198 -0
  22. package/dist/cli/strategyCli.js.map +1 -0
  23. package/dist/cli/tradingCli.d.ts +3 -0
  24. package/dist/cli/tradingCli.d.ts.map +1 -0
  25. package/dist/cli/tradingCli.js +587 -0
  26. package/dist/cli/tradingCli.js.map +1 -0
  27. package/dist/cli/util.d.ts +28 -0
  28. package/dist/cli/util.d.ts.map +1 -0
  29. package/dist/cli/util.js +62 -0
  30. package/dist/cli/util.js.map +1 -0
  31. package/dist/core/config.d.ts +32 -0
  32. package/dist/core/config.d.ts.map +1 -0
  33. package/dist/core/config.js +101 -0
  34. package/dist/core/config.js.map +1 -0
  35. package/dist/core/errors.d.ts +9 -0
  36. package/dist/core/errors.d.ts.map +1 -0
  37. package/dist/core/errors.js +17 -0
  38. package/dist/core/errors.js.map +1 -0
  39. package/dist/core/hyperliquid/asset.d.ts +24 -0
  40. package/dist/core/hyperliquid/asset.d.ts.map +1 -0
  41. package/dist/core/hyperliquid/asset.js +88 -0
  42. package/dist/core/hyperliquid/asset.js.map +1 -0
  43. package/dist/core/hyperliquid/candles.d.ts +24 -0
  44. package/dist/core/hyperliquid/candles.d.ts.map +1 -0
  45. package/dist/core/hyperliquid/candles.js +113 -0
  46. package/dist/core/hyperliquid/candles.js.map +1 -0
  47. package/dist/core/hyperliquid/client.d.ts +36 -0
  48. package/dist/core/hyperliquid/client.d.ts.map +1 -0
  49. package/dist/core/hyperliquid/client.js +92 -0
  50. package/dist/core/hyperliquid/client.js.map +1 -0
  51. package/dist/core/hyperliquid/exchange.d.ts +14 -0
  52. package/dist/core/hyperliquid/exchange.d.ts.map +1 -0
  53. package/dist/core/hyperliquid/exchange.js +42 -0
  54. package/dist/core/hyperliquid/exchange.js.map +1 -0
  55. package/dist/core/hyperliquid/exchangeParse.d.ts +7 -0
  56. package/dist/core/hyperliquid/exchangeParse.d.ts.map +1 -0
  57. package/dist/core/hyperliquid/exchangeParse.js +44 -0
  58. package/dist/core/hyperliquid/exchangeParse.js.map +1 -0
  59. package/dist/core/hyperliquid/float.d.ts +6 -0
  60. package/dist/core/hyperliquid/float.d.ts.map +1 -0
  61. package/dist/core/hyperliquid/float.js +24 -0
  62. package/dist/core/hyperliquid/float.js.map +1 -0
  63. package/dist/core/hyperliquid/klineCoin.d.ts +10 -0
  64. package/dist/core/hyperliquid/klineCoin.d.ts.map +1 -0
  65. package/dist/core/hyperliquid/klineCoin.js +90 -0
  66. package/dist/core/hyperliquid/klineCoin.js.map +1 -0
  67. package/dist/core/hyperliquid/orders.d.ts +91 -0
  68. package/dist/core/hyperliquid/orders.d.ts.map +1 -0
  69. package/dist/core/hyperliquid/orders.js +116 -0
  70. package/dist/core/hyperliquid/orders.js.map +1 -0
  71. package/dist/core/hyperliquid/prefixedPerpCoin.d.ts +3 -0
  72. package/dist/core/hyperliquid/prefixedPerpCoin.d.ts.map +1 -0
  73. package/dist/core/hyperliquid/prefixedPerpCoin.js +10 -0
  74. package/dist/core/hyperliquid/prefixedPerpCoin.js.map +1 -0
  75. package/dist/core/hyperliquid/signed-exchange.d.ts +10 -0
  76. package/dist/core/hyperliquid/signed-exchange.d.ts.map +1 -0
  77. package/dist/core/hyperliquid/signed-exchange.js +23 -0
  78. package/dist/core/hyperliquid/signed-exchange.js.map +1 -0
  79. package/dist/core/hyperliquid/signing.d.ts +23 -0
  80. package/dist/core/hyperliquid/signing.d.ts.map +1 -0
  81. package/dist/core/hyperliquid/signing.js +65 -0
  82. package/dist/core/hyperliquid/signing.js.map +1 -0
  83. package/dist/core/hyperliquid/types.d.ts +11 -0
  84. package/dist/core/hyperliquid/types.d.ts.map +1 -0
  85. package/dist/core/hyperliquid/types.js +2 -0
  86. package/dist/core/hyperliquid/types.js.map +1 -0
  87. package/dist/core/hyperliquid/watchOrders.d.ts +10 -0
  88. package/dist/core/hyperliquid/watchOrders.d.ts.map +1 -0
  89. package/dist/core/hyperliquid/watchOrders.js +38 -0
  90. package/dist/core/hyperliquid/watchOrders.js.map +1 -0
  91. package/dist/core/state/bracketReconcile.d.ts +23 -0
  92. package/dist/core/state/bracketReconcile.d.ts.map +1 -0
  93. package/dist/core/state/bracketReconcile.js +297 -0
  94. package/dist/core/state/bracketReconcile.js.map +1 -0
  95. package/dist/core/state/cancelOpenPlan.d.ts +23 -0
  96. package/dist/core/state/cancelOpenPlan.d.ts.map +1 -0
  97. package/dist/core/state/cancelOpenPlan.js +126 -0
  98. package/dist/core/state/cancelOpenPlan.js.map +1 -0
  99. package/dist/core/state/gcTradeState.d.ts +13 -0
  100. package/dist/core/state/gcTradeState.d.ts.map +1 -0
  101. package/dist/core/state/gcTradeState.js +48 -0
  102. package/dist/core/state/gcTradeState.js.map +1 -0
  103. package/dist/core/state/gridReconcile.d.ts +46 -0
  104. package/dist/core/state/gridReconcile.d.ts.map +1 -0
  105. package/dist/core/state/gridReconcile.js +307 -0
  106. package/dist/core/state/gridReconcile.js.map +1 -0
  107. package/dist/core/state/intentFactory.d.ts +58 -0
  108. package/dist/core/state/intentFactory.d.ts.map +1 -0
  109. package/dist/core/state/intentFactory.js +95 -0
  110. package/dist/core/state/intentFactory.js.map +1 -0
  111. package/dist/core/state/present.d.ts +17 -0
  112. package/dist/core/state/present.d.ts.map +1 -0
  113. package/dist/core/state/present.js +100 -0
  114. package/dist/core/state/present.js.map +1 -0
  115. package/dist/core/state/runCancelOpen.d.ts +32 -0
  116. package/dist/core/state/runCancelOpen.d.ts.map +1 -0
  117. package/dist/core/state/runCancelOpen.js +101 -0
  118. package/dist/core/state/runCancelOpen.js.map +1 -0
  119. package/dist/core/state/runReconcile.d.ts +20 -0
  120. package/dist/core/state/runReconcile.d.ts.map +1 -0
  121. package/dist/core/state/runReconcile.js +248 -0
  122. package/dist/core/state/runReconcile.js.map +1 -0
  123. package/dist/core/state/schema.d.ts +1161 -0
  124. package/dist/core/state/schema.d.ts.map +1 -0
  125. package/dist/core/state/schema.js +151 -0
  126. package/dist/core/state/schema.js.map +1 -0
  127. package/dist/core/state/snapshot.d.ts +22 -0
  128. package/dist/core/state/snapshot.d.ts.map +1 -0
  129. package/dist/core/state/snapshot.js +115 -0
  130. package/dist/core/state/snapshot.js.map +1 -0
  131. package/dist/core/state/statePaths.d.ts +2 -0
  132. package/dist/core/state/statePaths.d.ts.map +1 -0
  133. package/dist/core/state/statePaths.js +7 -0
  134. package/dist/core/state/statePaths.js.map +1 -0
  135. package/dist/core/state/store.d.ts +12 -0
  136. package/dist/core/state/store.d.ts.map +1 -0
  137. package/dist/core/state/store.js +95 -0
  138. package/dist/core/state/store.js.map +1 -0
  139. package/dist/core/state/types.d.ts +40 -0
  140. package/dist/core/state/types.d.ts.map +1 -0
  141. package/dist/core/state/types.js +2 -0
  142. package/dist/core/state/types.js.map +1 -0
  143. package/dist/core/trading.d.ts +8 -0
  144. package/dist/core/trading.d.ts.map +1 -0
  145. package/dist/core/trading.js +22 -0
  146. package/dist/core/trading.js.map +1 -0
  147. package/dist/core/wallet.d.ts +3 -0
  148. package/dist/core/wallet.d.ts.map +1 -0
  149. package/dist/core/wallet.js +14 -0
  150. package/dist/core/wallet.js.map +1 -0
  151. package/dist/daemon/index.d.ts +3 -0
  152. package/dist/daemon/index.d.ts.map +1 -0
  153. package/dist/daemon/index.js +104 -0
  154. package/dist/daemon/index.js.map +1 -0
  155. package/dist/meta/version.d.ts +2 -0
  156. package/dist/meta/version.d.ts.map +1 -0
  157. package/dist/meta/version.js +12 -0
  158. package/dist/meta/version.js.map +1 -0
  159. package/dist/strategies/grid.d.ts +46 -0
  160. package/dist/strategies/grid.d.ts.map +1 -0
  161. package/dist/strategies/grid.js +101 -0
  162. package/dist/strategies/grid.js.map +1 -0
  163. package/package.json +46 -0
@@ -0,0 +1,92 @@
1
+ import { HyperliquidApiError } from "../errors.js";
2
+ export class HyperliquidInfoClient {
3
+ fetchImpl;
4
+ infoUrl;
5
+ constructor(opts) {
6
+ const origin = opts.infoOrigin.replace(/\/+$/, "");
7
+ this.infoUrl = `${origin}/info`;
8
+ this.fetchImpl = opts.fetchImpl ?? fetch;
9
+ }
10
+ async info(body) {
11
+ let res;
12
+ try {
13
+ res = await this.fetchImpl(this.infoUrl, {
14
+ method: "POST",
15
+ headers: {
16
+ Accept: "application/json",
17
+ "Content-Type": "application/json",
18
+ },
19
+ body: JSON.stringify(body),
20
+ });
21
+ }
22
+ catch (e) {
23
+ const msg = e instanceof Error ? e.message : String(e);
24
+ throw new HyperliquidApiError(`Network error calling POST ${this.infoUrl}: ${msg}`, 0, "");
25
+ }
26
+ const text = await res.text();
27
+ let parsed;
28
+ if (text.length > 0) {
29
+ try {
30
+ parsed = JSON.parse(text);
31
+ }
32
+ catch {
33
+ throw new HyperliquidApiError(`Non-JSON response (${res.status})`, res.status, text);
34
+ }
35
+ }
36
+ if (!res.ok) {
37
+ throw new HyperliquidApiError(`HTTP ${res.status} POST ${this.infoUrl}`, res.status, text);
38
+ }
39
+ return parsed ?? null;
40
+ }
41
+ meta(dex) {
42
+ return this.info(dex !== undefined ? { type: "meta", dex } : { type: "meta" });
43
+ }
44
+ perpDexs() {
45
+ return this.info({ type: "perpDexs" });
46
+ }
47
+ allMids(dex) {
48
+ return this.info(dex !== undefined ? { type: "allMids", dex } : { type: "allMids" });
49
+ }
50
+ clearinghouseState(user, dex) {
51
+ return this.info(dex !== undefined
52
+ ? { type: "clearinghouseState", user, dex }
53
+ : { type: "clearinghouseState", user });
54
+ }
55
+ openOrders(user, dex) {
56
+ return this.info(dex !== undefined ? { type: "openOrders", user, dex } : { type: "openOrders", user });
57
+ }
58
+ /** Recent user fills (per HL API caps). Optional `aggregateByTime` merges partials. */
59
+ userFills(user, opts) {
60
+ const body = { type: "userFills", user };
61
+ if (opts?.aggregateByTime !== undefined) {
62
+ body.aggregateByTime = opts.aggregateByTime;
63
+ }
64
+ return this.info(body);
65
+ }
66
+ l2Book(coin, opts) {
67
+ const body = { type: "l2Book", coin };
68
+ if (opts?.nSigFigs !== undefined) {
69
+ body.nSigFigs = opts.nSigFigs;
70
+ }
71
+ if (opts?.mantissa !== undefined) {
72
+ body.mantissa = opts.mantissa;
73
+ }
74
+ return this.info(body);
75
+ }
76
+ /**
77
+ * OHLCV candle snapshot. Response shape is API-defined (typically array of objects with
78
+ * `t,T,s,i,o,h,l,c,v,n`); numeric precision is preserved when those fields are strings.
79
+ */
80
+ candleSnapshot(params) {
81
+ return this.info({
82
+ type: "candleSnapshot",
83
+ req: {
84
+ coin: params.coin,
85
+ interval: params.interval,
86
+ startTime: params.startTime,
87
+ endTime: params.endTime,
88
+ },
89
+ });
90
+ }
91
+ }
92
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/core/hyperliquid/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { JsonValue } from "./types.js";
2
+ import type { FetchLike } from "./client.js";
3
+ export type SignedExchangeEnvelope = Record<string, unknown>;
4
+ export type ExchangePostBody = SignedExchangeEnvelope;
5
+ export declare class HyperliquidExchangeClient {
6
+ private readonly fetchImpl;
7
+ readonly exchangeUrl: string;
8
+ constructor(opts: {
9
+ apiOrigin: string;
10
+ fetchImpl?: FetchLike;
11
+ });
12
+ exchange(body: ExchangePostBody): Promise<JsonValue>;
13
+ }
14
+ //# sourceMappingURL=exchange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchange.d.ts","sourceRoot":"","sources":["../../../src/core/hyperliquid/exchange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAEtD,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAEjB,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE;IAMxD,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC;CAyC3D"}
@@ -0,0 +1,42 @@
1
+ import { HyperliquidApiError } from "../errors.js";
2
+ export class HyperliquidExchangeClient {
3
+ fetchImpl;
4
+ exchangeUrl;
5
+ constructor(opts) {
6
+ const origin = opts.apiOrigin.replace(/\/+$/, "");
7
+ this.exchangeUrl = `${origin}/exchange`;
8
+ this.fetchImpl = opts.fetchImpl ?? fetch;
9
+ }
10
+ async exchange(body) {
11
+ let res;
12
+ try {
13
+ res = await this.fetchImpl(this.exchangeUrl, {
14
+ method: "POST",
15
+ headers: {
16
+ Accept: "application/json",
17
+ "Content-Type": "application/json",
18
+ },
19
+ body: JSON.stringify(body),
20
+ });
21
+ }
22
+ catch (e) {
23
+ const msg = e instanceof Error ? e.message : String(e);
24
+ throw new HyperliquidApiError(`Network error POST ${this.exchangeUrl}: ${msg}`, 0, "");
25
+ }
26
+ const text = await res.text();
27
+ let parsed;
28
+ if (text.length > 0) {
29
+ try {
30
+ parsed = JSON.parse(text);
31
+ }
32
+ catch {
33
+ throw new HyperliquidApiError(`Non-JSON exchange response (${res.status})`, res.status, text);
34
+ }
35
+ }
36
+ if (!res.ok) {
37
+ throw new HyperliquidApiError(`HTTP ${res.status} POST ${this.exchangeUrl}`, res.status, text);
38
+ }
39
+ return parsed ?? null;
40
+ }
41
+ }
42
+ //# sourceMappingURL=exchange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchange.js","sourceRoot":"","sources":["../../../src/core/hyperliquid/exchange.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAMnD,MAAM,OAAO,yBAAyB;IACnB,SAAS,CAAY;IAC7B,WAAW,CAAS;IAE7B,YAAY,IAAkD;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,GAAG,MAAM,WAAW,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAsB;QACnC,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE;gBAC3C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,MAAM,EAAE,kBAAkB;oBAC1B,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,MAAM,IAAI,mBAAmB,CAAC,sBAAsB,IAAI,CAAC,WAAW,KAAK,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAE9B,IAAI,MAA6B,CAAC;QAClC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;YACzC,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,mBAAmB,CAC3B,+BAA+B,GAAG,CAAC,MAAM,GAAG,EAC5C,GAAG,CAAC,MAAM,EACV,IAAI,CACL,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,mBAAmB,CAC3B,QAAQ,GAAG,CAAC,MAAM,SAAS,IAAI,CAAC,WAAW,EAAE,EAC7C,GAAG,CAAC,MAAM,EACV,IAAI,CACL,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import type { JsonValue } from "./types.js";
2
+ /**
3
+ * Best-effort extraction of HL order ids from /exchange JSON responses.
4
+ * Shapes vary; callers should reconcile with openOrders when unsure.
5
+ */
6
+ export declare function extractOrderOidsFromExchangeResponse(resp: JsonValue): number[];
7
+ //# sourceMappingURL=exchangeParse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchangeParse.d.ts","sourceRoot":"","sources":["../../../src/core/hyperliquid/exchangeParse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAkB5C;;;GAGG;AACH,wBAAgB,oCAAoC,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,EAAE,CAuB9E"}
@@ -0,0 +1,44 @@
1
+ function collectOidsFromStatusEntry(entry, out) {
2
+ if (typeof entry !== "object" || entry === null) {
3
+ return;
4
+ }
5
+ const rec = entry;
6
+ for (const k of ["resting", "filled", "triggered"]) {
7
+ const inner = rec[k];
8
+ if (typeof inner === "object" && inner !== null) {
9
+ const oid = inner.oid;
10
+ if (typeof oid === "number" && Number.isFinite(oid)) {
11
+ out.push(oid);
12
+ }
13
+ }
14
+ }
15
+ }
16
+ /**
17
+ * Best-effort extraction of HL order ids from /exchange JSON responses.
18
+ * Shapes vary; callers should reconcile with openOrders when unsure.
19
+ */
20
+ export function extractOrderOidsFromExchangeResponse(resp) {
21
+ const out = [];
22
+ if (typeof resp !== "object" || resp === null) {
23
+ return out;
24
+ }
25
+ const root = resp;
26
+ const response = root.response;
27
+ if (typeof response !== "object" || response === null) {
28
+ return out;
29
+ }
30
+ const type = response.type;
31
+ const data = response.data;
32
+ if (type !== "order" || typeof data !== "object" || data === null) {
33
+ return out;
34
+ }
35
+ const statuses = data.statuses;
36
+ if (!Array.isArray(statuses)) {
37
+ return out;
38
+ }
39
+ for (const s of statuses) {
40
+ collectOidsFromStatusEntry(s, out);
41
+ }
42
+ return out;
43
+ }
44
+ //# sourceMappingURL=exchangeParse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchangeParse.js","sourceRoot":"","sources":["../../../src/core/hyperliquid/exchangeParse.ts"],"names":[],"mappings":"AAEA,SAAS,0BAA0B,CAAC,KAAc,EAAE,GAAa;IAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAChD,MAAM,GAAG,GAAI,KAAiC,CAAC,GAAG,CAAC;YACnD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oCAAoC,CAAC,IAAe;IAClE,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,IAAI,GAAG,IAA+B,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,IAAI,GAAI,QAAoC,CAAC,IAAI,CAAC;IACxD,MAAM,IAAI,GAAI,QAAoC,CAAC,IAAI,CAAC;IACxD,IAAI,IAAI,KAAK,OAAO,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClE,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,QAAQ,GAAI,IAAgC,CAAC,QAAQ,CAAC;IAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,0BAA0B,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Mirrors hyperliquid-python-sdk `float_to_wire` reasonably closely:
3
+ * `f"{x:.8f}"`, reject drift, trim trailing zeros without scientific notation.
4
+ */
5
+ export declare function floatToWire(x: number): string;
6
+ //# sourceMappingURL=float.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"float.d.ts","sourceRoot":"","sources":["../../../src/core/hyperliquid/float.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAwB7C"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Mirrors hyperliquid-python-sdk `float_to_wire` reasonably closely:
3
+ * `f"{x:.8f}"`, reject drift, trim trailing zeros without scientific notation.
4
+ */
5
+ export function floatToWire(x) {
6
+ let rounded = x.toFixed(8);
7
+ if (Math.abs(parseFloat(rounded) - x) >= 1e-12) {
8
+ throw new Error(`float_to_wire causes rounding (${x})`);
9
+ }
10
+ if (rounded === "-0.00000000") {
11
+ rounded = "0.00000000";
12
+ }
13
+ let s = rounded;
14
+ if (!s.includes(".")) {
15
+ return s;
16
+ }
17
+ s = s.replace(/(\.\d*?[1-9])0+$/, "$1");
18
+ s = s.replace(/\.0+$/, "");
19
+ if (s === "" || s === "-0") {
20
+ return "0";
21
+ }
22
+ return s;
23
+ }
24
+ //# sourceMappingURL=float.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"float.js","sourceRoot":"","sources":["../../../src/core/hyperliquid/float.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,IAAI,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC9B,OAAO,GAAG,YAAY,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,GAAG,OAAO,CAAC;IAEhB,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAE3B,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `/info` candleSnapshot has no separate `dex` field — only `req.coin`. Combine `--dex` with an unprefixed HIP-3 ticker.
3
+ */
4
+ export declare function resolvePerpKlineCoinArg(rawCoin: string, dexOpt?: string): string;
5
+ /**
6
+ * Ensures `coin` exists in `meta.universe` for HIP-3 (`deployer:...`) names before candleSnapshot
7
+ * (bad tickers otherwise yield HTTP 200 with JSON `null`).
8
+ */
9
+ export declare function assertPerpKlineCoinInMeta(meta: unknown, resolvedCoin: string): void;
10
+ //# sourceMappingURL=klineCoin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"klineCoin.d.ts","sourceRoot":"","sources":["../../../src/core/hyperliquid/klineCoin.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CA0BhF;AA4CD;;;GAGG;AAEH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAqBnF"}
@@ -0,0 +1,90 @@
1
+ import { ConfigError } from "../errors.js";
2
+ import { extractPerpUniverseCoinNames, perpCoinToAssetIndex } from "./asset.js";
3
+ import { inferHlDexFromPrefixedPerpCoin } from "./prefixedPerpCoin.js";
4
+ /**
5
+ * `/info` candleSnapshot has no separate `dex` field — only `req.coin`. Combine `--dex` with an unprefixed HIP-3 ticker.
6
+ */
7
+ export function resolvePerpKlineCoinArg(rawCoin, dexOpt) {
8
+ const coin = rawCoin.trim();
9
+ const dex = dexOpt?.trim();
10
+ if (!coin) {
11
+ throw new ConfigError("coin argument must be non-empty.");
12
+ }
13
+ if (dex) {
14
+ if (coin.includes(":")) {
15
+ const inferred = inferHlDexFromPrefixedPerpCoin(coin);
16
+ if (!inferred) {
17
+ throw new ConfigError(`Coin '${coin}' is not a valid deployer-prefixed symbol; omit --dex or fix the name.`);
18
+ }
19
+ if (inferred !== dex) {
20
+ throw new ConfigError(`Coin '${coin}' implies dex '${inferred}' but --dex '${dex}' was passed — remove --dex or pass an unprefixed ticker with --dex.`);
21
+ }
22
+ return coin;
23
+ }
24
+ return `${dex}:${coin}`;
25
+ }
26
+ return coin;
27
+ }
28
+ function scoreSymbolSimilarity(wrongSuffix, candidateSuffix) {
29
+ const a = wrongSuffix.toUpperCase();
30
+ const b = candidateSuffix.toUpperCase();
31
+ if (a === b) {
32
+ return 100;
33
+ }
34
+ if (a.includes(b) || b.includes(a)) {
35
+ return 50;
36
+ }
37
+ let best = 0;
38
+ const minLen = Math.min(a.length, b.length);
39
+ for (let len = minLen; len >= 3; len--) {
40
+ for (let i = 0; i <= a.length - len; i++) {
41
+ const sub = a.slice(i, i + len);
42
+ if (b.includes(sub)) {
43
+ best = Math.max(best, len);
44
+ }
45
+ }
46
+ }
47
+ return best;
48
+ }
49
+ function suggestPerpNames(allNames, wrongCoin) {
50
+ const colon = wrongCoin.indexOf(":");
51
+ const deployer = colon >= 0 ? wrongCoin.slice(0, colon) : "";
52
+ const suffix = colon >= 0 ? wrongCoin.slice(colon + 1) : wrongCoin;
53
+ const pool = deployer.length > 0 ? allNames.filter((n) => n.startsWith(`${deployer}:`)) : allNames;
54
+ const ranked = pool.map((n) => {
55
+ const nc = n.indexOf(":");
56
+ const ns = nc >= 0 ? n.slice(nc + 1) : n;
57
+ return { n, score: scoreSymbolSimilarity(suffix, ns) };
58
+ });
59
+ return ranked
60
+ .filter((x) => x.score > 0)
61
+ .sort((a, b) => b.score - a.score)
62
+ .slice(0, 12)
63
+ .map((x) => x.n);
64
+ }
65
+ /**
66
+ * Ensures `coin` exists in `meta.universe` for HIP-3 (`deployer:...`) names before candleSnapshot
67
+ * (bad tickers otherwise yield HTTP 200 with JSON `null`).
68
+ */
69
+ export function assertPerpKlineCoinInMeta(meta, resolvedCoin) {
70
+ const dex = inferHlDexFromPrefixedPerpCoin(resolvedCoin);
71
+ if (!dex) {
72
+ return;
73
+ }
74
+ try {
75
+ perpCoinToAssetIndex(meta, resolvedCoin);
76
+ }
77
+ catch (e) {
78
+ if (!(e instanceof ConfigError)) {
79
+ throw e;
80
+ }
81
+ const names = extractPerpUniverseCoinNames(meta);
82
+ const hints = suggestPerpNames(names, resolvedCoin);
83
+ const hintLine = hints.length > 0 ? ` Similar REST names: ${hints.join(", ")}.` : "";
84
+ const wtioil = /WTIOIL/i.test(resolvedCoin) && dex === "xyz"
85
+ ? " On dex xyz, WTI-style crude is usually `xyz:CL` (see `perp meta --dex xyz`), not WTIOIL."
86
+ : "";
87
+ throw new ConfigError(`${e.message}${hintLine}${wtioil}`);
88
+ }
89
+ }
90
+ //# sourceMappingURL=klineCoin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"klineCoin.js","sourceRoot":"","sources":["../../../src/core/hyperliquid/klineCoin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AAEvE;;GAEG;AAEH,MAAM,UAAU,uBAAuB,CAAC,OAAe,EAAE,MAAe;IACtE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,WAAW,CAAC,kCAAkC,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,8BAA8B,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,WAAW,CACnB,SAAS,IAAI,wEAAwE,CACtF,CAAC;YACJ,CAAC;YACD,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACrB,MAAM,IAAI,WAAW,CACnB,SAAS,IAAI,kBAAkB,QAAQ,gBAAgB,GAAG,sEAAsE,CACjI,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,qBAAqB,CAAC,WAAmB,EAAE,eAAuB;IACzE,MAAM,CAAC,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,CAAC,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;IACxC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACZ,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,IAAI,GAAG,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;YAChC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAkB,EAAE,SAAiB;IAC7D,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,MAAM,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,IAAI,GACR,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAExF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC5B,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM;SACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;SAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC;AAED;;;GAGG;AAEH,MAAM,UAAU,yBAAyB,CAAC,IAAa,EAAE,YAAoB;IAC3E,MAAM,GAAG,GAAG,8BAA8B,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,oBAAoB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,CAAC,CAAC,YAAY,WAAW,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,CAAC;QACV,CAAC;QACD,MAAM,KAAK,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,wBAAwB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,MAAM,MAAM,GACV,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,KAAK,KAAK;YAC3C,CAAC,CAAC,2FAA2F;YAC7F,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,QAAQ,GAAG,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC"}
@@ -0,0 +1,91 @@
1
+ export type TifName = "Gtc" | "Ioc" | "Alo";
2
+ export type LimitOrderWire = {
3
+ a: number;
4
+ b: boolean;
5
+ p: string;
6
+ s: string;
7
+ r: boolean;
8
+ t: {
9
+ limit: {
10
+ tif: TifName;
11
+ };
12
+ };
13
+ c?: string;
14
+ };
15
+ export declare function limitWireFromParams(params: {
16
+ assetIndex: number;
17
+ isBuy: boolean;
18
+ limitPx: number;
19
+ sz: number;
20
+ reduceOnly: boolean;
21
+ tif: TifName;
22
+ cloidHex?: string;
23
+ }): LimitOrderWire;
24
+ export declare function limitsToOrderAction(wires: LimitOrderWire[]): Record<string, unknown>;
25
+ export declare function batchLimitOrdersFromPrimitives(opts: {
26
+ assetIndex: number;
27
+ rows: Array<{
28
+ px: number;
29
+ isBuy: boolean;
30
+ sz: number;
31
+ }>;
32
+ reduceOnly: boolean;
33
+ tif: TifName;
34
+ }): LimitOrderWire[];
35
+ export declare function buildPlaceOrderAction(params: {
36
+ assetIndex: number;
37
+ isBuy: boolean;
38
+ limitPx: number;
39
+ sz: number;
40
+ reduceOnly: boolean;
41
+ tif: TifName;
42
+ cloidHex?: string;
43
+ }): Record<string, unknown>;
44
+ export declare function buildCancelOrdersAction(assetIndex: number, oids: number[]): Record<string, unknown>;
45
+ export type TpslKind = "tp" | "sl";
46
+ export type TriggerOrderWire = {
47
+ a: number;
48
+ b: boolean;
49
+ p: string;
50
+ s: string;
51
+ r: boolean;
52
+ t: {
53
+ trigger: {
54
+ isMarket: boolean;
55
+ triggerPx: string;
56
+ tpsl: TpslKind;
57
+ };
58
+ };
59
+ c?: string;
60
+ };
61
+ export declare function triggerWireFromParams(params: {
62
+ assetIndex: number;
63
+ isBuy: boolean;
64
+ sz: number;
65
+ reduceOnly: boolean;
66
+ triggerPx: number;
67
+ isMarket: boolean;
68
+ /** Price field `p` on the wire (limit after trigger, or fallback when market trigger). */
69
+ wireLimitPx: number;
70
+ tpsl: TpslKind;
71
+ cloidHex?: string;
72
+ }): TriggerOrderWire;
73
+ export type OrderGrouping = "na" | "normalTpsl" | "positionTpsl";
74
+ export declare function buildTpslTriggerOrderAction(params: Parameters<typeof triggerWireFromParams>[0], extras?: {
75
+ grouping?: OrderGrouping;
76
+ }): Record<string, unknown>;
77
+ /** Two trigger wires (TP + SL) in a single batch `order` action. */
78
+ export declare function buildBracketProtectionOrderAction(params: {
79
+ assetIndex: number;
80
+ /** Closing side: long exit is sell -> isBuy false */
81
+ closeIsBuy: boolean;
82
+ sz: number;
83
+ reduceOnly: boolean;
84
+ tpTriggerPx: number;
85
+ slTriggerPx: number;
86
+ isMarket: boolean;
87
+ wireLimitPxTp: number;
88
+ wireLimitPxSl: number;
89
+ grouping?: OrderGrouping;
90
+ }): Record<string, unknown>;
91
+ //# sourceMappingURL=orders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orders.d.ts","sourceRoot":"","sources":["../../../src/core/hyperliquid/orders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ import { floatToWire } from "./float.js";
2
+ export function limitWireFromParams(params) {
3
+ const wire = {
4
+ a: params.assetIndex,
5
+ b: params.isBuy,
6
+ p: floatToWire(params.limitPx),
7
+ s: floatToWire(params.sz),
8
+ r: params.reduceOnly,
9
+ t: {
10
+ limit: {
11
+ tif: params.tif,
12
+ },
13
+ },
14
+ };
15
+ if (params.cloidHex !== undefined) {
16
+ wire.c = params.cloidHex;
17
+ }
18
+ return wire;
19
+ }
20
+ export function limitsToOrderAction(wires) {
21
+ if (wires.length === 0) {
22
+ throw new Error("limitsToOrderAction: empty wires");
23
+ }
24
+ return {
25
+ type: "order",
26
+ orders: wires,
27
+ grouping: "na",
28
+ };
29
+ }
30
+ export function batchLimitOrdersFromPrimitives(opts) {
31
+ return opts.rows.map((r) => limitWireFromParams({
32
+ assetIndex: opts.assetIndex,
33
+ isBuy: r.isBuy,
34
+ limitPx: r.px,
35
+ sz: r.sz,
36
+ reduceOnly: opts.reduceOnly,
37
+ tif: opts.tif,
38
+ }));
39
+ }
40
+ export function buildPlaceOrderAction(params) {
41
+ return limitsToOrderAction([
42
+ limitWireFromParams({
43
+ assetIndex: params.assetIndex,
44
+ isBuy: params.isBuy,
45
+ limitPx: params.limitPx,
46
+ sz: params.sz,
47
+ reduceOnly: params.reduceOnly,
48
+ tif: params.tif,
49
+ cloidHex: params.cloidHex,
50
+ }),
51
+ ]);
52
+ }
53
+ export function buildCancelOrdersAction(assetIndex, oids) {
54
+ return {
55
+ type: "cancel",
56
+ cancels: oids.map((o) => ({ a: assetIndex, o })),
57
+ };
58
+ }
59
+ export function triggerWireFromParams(params) {
60
+ const wire = {
61
+ a: params.assetIndex,
62
+ b: params.isBuy,
63
+ p: floatToWire(params.wireLimitPx),
64
+ s: floatToWire(params.sz),
65
+ r: params.reduceOnly,
66
+ t: {
67
+ trigger: {
68
+ isMarket: params.isMarket,
69
+ triggerPx: floatToWire(params.triggerPx),
70
+ tpsl: params.tpsl,
71
+ },
72
+ },
73
+ };
74
+ if (params.cloidHex !== undefined) {
75
+ wire.c = params.cloidHex;
76
+ }
77
+ return wire;
78
+ }
79
+ export function buildTpslTriggerOrderAction(params, extras) {
80
+ const grouping = extras?.grouping ?? "na";
81
+ return {
82
+ type: "order",
83
+ orders: [triggerWireFromParams(params)],
84
+ grouping,
85
+ };
86
+ }
87
+ /** Two trigger wires (TP + SL) in a single batch `order` action. */
88
+ export function buildBracketProtectionOrderAction(params) {
89
+ const grouping = params.grouping ?? "na";
90
+ const tp = triggerWireFromParams({
91
+ assetIndex: params.assetIndex,
92
+ isBuy: params.closeIsBuy,
93
+ sz: params.sz,
94
+ reduceOnly: params.reduceOnly,
95
+ triggerPx: params.tpTriggerPx,
96
+ isMarket: params.isMarket,
97
+ wireLimitPx: params.wireLimitPxTp,
98
+ tpsl: "tp",
99
+ });
100
+ const sl = triggerWireFromParams({
101
+ assetIndex: params.assetIndex,
102
+ isBuy: params.closeIsBuy,
103
+ sz: params.sz,
104
+ reduceOnly: params.reduceOnly,
105
+ triggerPx: params.slTriggerPx,
106
+ isMarket: params.isMarket,
107
+ wireLimitPx: params.wireLimitPxSl,
108
+ tpsl: "sl",
109
+ });
110
+ return {
111
+ type: "order",
112
+ orders: [tp, sl],
113
+ grouping,
114
+ };
115
+ }
116
+ //# sourceMappingURL=orders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orders.js","sourceRoot":"","sources":["../../../src/core/hyperliquid/orders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** HIP-3 perp symbols use `deployer:ASSET`. Infer `dex` for `/info` meta from the substring before `:`. */
2
+ export declare function inferHlDexFromPrefixedPerpCoin(coin: string): string | undefined;
3
+ //# sourceMappingURL=prefixedPerpCoin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefixedPerpCoin.d.ts","sourceRoot":"","sources":["../../../src/core/hyperliquid/prefixedPerpCoin.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAE3G,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO/E"}
@@ -0,0 +1,10 @@
1
+ /** HIP-3 perp symbols use `deployer:ASSET`. Infer `dex` for `/info` meta from the substring before `:`. */
2
+ export function inferHlDexFromPrefixedPerpCoin(coin) {
3
+ const idx = coin.indexOf(":");
4
+ if (idx <= 0) {
5
+ return undefined;
6
+ }
7
+ const dex = coin.slice(0, idx).trim();
8
+ return dex.length === 0 ? undefined : dex;
9
+ }
10
+ //# sourceMappingURL=prefixedPerpCoin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefixedPerpCoin.js","sourceRoot":"","sources":["../../../src/core/hyperliquid/prefixedPerpCoin.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAE3G,MAAM,UAAU,8BAA8B,CAAC,IAAY;IACzD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Wallet } from "ethers";
2
+ export declare function buildSignedExchangePayload(wallet: Wallet, action: Record<string, unknown>, opts: {
3
+ /** Main Hyperliquid environment uses `"a"`; testnet uses `"b"`. */
4
+ isMainnet: boolean;
5
+ vaultAddress?: `0x${string}`;
6
+ expiresAfter?: bigint;
7
+ /** Defaults to `Date.now()` ms. */
8
+ nonce?: bigint;
9
+ }): Promise<Record<string, unknown>>;
10
+ //# sourceMappingURL=signed-exchange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signed-exchange.d.ts","sourceRoot":"","sources":["../../../src/core/hyperliquid/signed-exchange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,EAAE;IACJ,mEAAmE;IACnE,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAwBlC"}