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.
- package/LICENSE +21 -0
- package/README.md +394 -0
- package/dist/cli/confirm.d.ts +2 -0
- package/dist/cli/confirm.d.ts.map +1 -0
- package/dist/cli/confirm.js +22 -0
- package/dist/cli/confirm.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +189 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/perpKline.d.ts +19 -0
- package/dist/cli/perpKline.d.ts.map +1 -0
- package/dist/cli/perpKline.js +39 -0
- package/dist/cli/perpKline.js.map +1 -0
- package/dist/cli/stateCli.d.ts +3 -0
- package/dist/cli/stateCli.d.ts.map +1 -0
- package/dist/cli/stateCli.js +158 -0
- package/dist/cli/stateCli.js.map +1 -0
- package/dist/cli/strategyCli.d.ts +3 -0
- package/dist/cli/strategyCli.d.ts.map +1 -0
- package/dist/cli/strategyCli.js +198 -0
- package/dist/cli/strategyCli.js.map +1 -0
- package/dist/cli/tradingCli.d.ts +3 -0
- package/dist/cli/tradingCli.d.ts.map +1 -0
- package/dist/cli/tradingCli.js +587 -0
- package/dist/cli/tradingCli.js.map +1 -0
- package/dist/cli/util.d.ts +28 -0
- package/dist/cli/util.d.ts.map +1 -0
- package/dist/cli/util.js +62 -0
- package/dist/cli/util.js.map +1 -0
- package/dist/core/config.d.ts +32 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +101 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/errors.d.ts +9 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +17 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/hyperliquid/asset.d.ts +24 -0
- package/dist/core/hyperliquid/asset.d.ts.map +1 -0
- package/dist/core/hyperliquid/asset.js +88 -0
- package/dist/core/hyperliquid/asset.js.map +1 -0
- package/dist/core/hyperliquid/candles.d.ts +24 -0
- package/dist/core/hyperliquid/candles.d.ts.map +1 -0
- package/dist/core/hyperliquid/candles.js +113 -0
- package/dist/core/hyperliquid/candles.js.map +1 -0
- package/dist/core/hyperliquid/client.d.ts +36 -0
- package/dist/core/hyperliquid/client.d.ts.map +1 -0
- package/dist/core/hyperliquid/client.js +92 -0
- package/dist/core/hyperliquid/client.js.map +1 -0
- package/dist/core/hyperliquid/exchange.d.ts +14 -0
- package/dist/core/hyperliquid/exchange.d.ts.map +1 -0
- package/dist/core/hyperliquid/exchange.js +42 -0
- package/dist/core/hyperliquid/exchange.js.map +1 -0
- package/dist/core/hyperliquid/exchangeParse.d.ts +7 -0
- package/dist/core/hyperliquid/exchangeParse.d.ts.map +1 -0
- package/dist/core/hyperliquid/exchangeParse.js +44 -0
- package/dist/core/hyperliquid/exchangeParse.js.map +1 -0
- package/dist/core/hyperliquid/float.d.ts +6 -0
- package/dist/core/hyperliquid/float.d.ts.map +1 -0
- package/dist/core/hyperliquid/float.js +24 -0
- package/dist/core/hyperliquid/float.js.map +1 -0
- package/dist/core/hyperliquid/klineCoin.d.ts +10 -0
- package/dist/core/hyperliquid/klineCoin.d.ts.map +1 -0
- package/dist/core/hyperliquid/klineCoin.js +90 -0
- package/dist/core/hyperliquid/klineCoin.js.map +1 -0
- package/dist/core/hyperliquid/orders.d.ts +91 -0
- package/dist/core/hyperliquid/orders.d.ts.map +1 -0
- package/dist/core/hyperliquid/orders.js +116 -0
- package/dist/core/hyperliquid/orders.js.map +1 -0
- package/dist/core/hyperliquid/prefixedPerpCoin.d.ts +3 -0
- package/dist/core/hyperliquid/prefixedPerpCoin.d.ts.map +1 -0
- package/dist/core/hyperliquid/prefixedPerpCoin.js +10 -0
- package/dist/core/hyperliquid/prefixedPerpCoin.js.map +1 -0
- package/dist/core/hyperliquid/signed-exchange.d.ts +10 -0
- package/dist/core/hyperliquid/signed-exchange.d.ts.map +1 -0
- package/dist/core/hyperliquid/signed-exchange.js +23 -0
- package/dist/core/hyperliquid/signed-exchange.js.map +1 -0
- package/dist/core/hyperliquid/signing.d.ts +23 -0
- package/dist/core/hyperliquid/signing.d.ts.map +1 -0
- package/dist/core/hyperliquid/signing.js +65 -0
- package/dist/core/hyperliquid/signing.js.map +1 -0
- package/dist/core/hyperliquid/types.d.ts +11 -0
- package/dist/core/hyperliquid/types.d.ts.map +1 -0
- package/dist/core/hyperliquid/types.js +2 -0
- package/dist/core/hyperliquid/types.js.map +1 -0
- package/dist/core/hyperliquid/watchOrders.d.ts +10 -0
- package/dist/core/hyperliquid/watchOrders.d.ts.map +1 -0
- package/dist/core/hyperliquid/watchOrders.js +38 -0
- package/dist/core/hyperliquid/watchOrders.js.map +1 -0
- package/dist/core/state/bracketReconcile.d.ts +23 -0
- package/dist/core/state/bracketReconcile.d.ts.map +1 -0
- package/dist/core/state/bracketReconcile.js +297 -0
- package/dist/core/state/bracketReconcile.js.map +1 -0
- package/dist/core/state/cancelOpenPlan.d.ts +23 -0
- package/dist/core/state/cancelOpenPlan.d.ts.map +1 -0
- package/dist/core/state/cancelOpenPlan.js +126 -0
- package/dist/core/state/cancelOpenPlan.js.map +1 -0
- package/dist/core/state/gcTradeState.d.ts +13 -0
- package/dist/core/state/gcTradeState.d.ts.map +1 -0
- package/dist/core/state/gcTradeState.js +48 -0
- package/dist/core/state/gcTradeState.js.map +1 -0
- package/dist/core/state/gridReconcile.d.ts +46 -0
- package/dist/core/state/gridReconcile.d.ts.map +1 -0
- package/dist/core/state/gridReconcile.js +307 -0
- package/dist/core/state/gridReconcile.js.map +1 -0
- package/dist/core/state/intentFactory.d.ts +58 -0
- package/dist/core/state/intentFactory.d.ts.map +1 -0
- package/dist/core/state/intentFactory.js +95 -0
- package/dist/core/state/intentFactory.js.map +1 -0
- package/dist/core/state/present.d.ts +17 -0
- package/dist/core/state/present.d.ts.map +1 -0
- package/dist/core/state/present.js +100 -0
- package/dist/core/state/present.js.map +1 -0
- package/dist/core/state/runCancelOpen.d.ts +32 -0
- package/dist/core/state/runCancelOpen.d.ts.map +1 -0
- package/dist/core/state/runCancelOpen.js +101 -0
- package/dist/core/state/runCancelOpen.js.map +1 -0
- package/dist/core/state/runReconcile.d.ts +20 -0
- package/dist/core/state/runReconcile.d.ts.map +1 -0
- package/dist/core/state/runReconcile.js +248 -0
- package/dist/core/state/runReconcile.js.map +1 -0
- package/dist/core/state/schema.d.ts +1161 -0
- package/dist/core/state/schema.d.ts.map +1 -0
- package/dist/core/state/schema.js +151 -0
- package/dist/core/state/schema.js.map +1 -0
- package/dist/core/state/snapshot.d.ts +22 -0
- package/dist/core/state/snapshot.d.ts.map +1 -0
- package/dist/core/state/snapshot.js +115 -0
- package/dist/core/state/snapshot.js.map +1 -0
- package/dist/core/state/statePaths.d.ts +2 -0
- package/dist/core/state/statePaths.d.ts.map +1 -0
- package/dist/core/state/statePaths.js +7 -0
- package/dist/core/state/statePaths.js.map +1 -0
- package/dist/core/state/store.d.ts +12 -0
- package/dist/core/state/store.d.ts.map +1 -0
- package/dist/core/state/store.js +95 -0
- package/dist/core/state/store.js.map +1 -0
- package/dist/core/state/types.d.ts +40 -0
- package/dist/core/state/types.d.ts.map +1 -0
- package/dist/core/state/types.js +2 -0
- package/dist/core/state/types.js.map +1 -0
- package/dist/core/trading.d.ts +8 -0
- package/dist/core/trading.d.ts.map +1 -0
- package/dist/core/trading.js +22 -0
- package/dist/core/trading.js.map +1 -0
- package/dist/core/wallet.d.ts +3 -0
- package/dist/core/wallet.d.ts.map +1 -0
- package/dist/core/wallet.js +14 -0
- package/dist/core/wallet.js.map +1 -0
- package/dist/daemon/index.d.ts +3 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +104 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/meta/version.d.ts +2 -0
- package/dist/meta/version.d.ts.map +1 -0
- package/dist/meta/version.js +12 -0
- package/dist/meta/version.js.map +1 -0
- package/dist/strategies/grid.d.ts +46 -0
- package/dist/strategies/grid.d.ts.map +1 -0
- package/dist/strategies/grid.js +101 -0
- package/dist/strategies/grid.js.map +1 -0
- 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 @@
|
|
|
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":"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"}
|
|
@@ -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 @@
|
|
|
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"}
|