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,189 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { ConfigError } from "../core/errors.js";
|
|
4
|
+
import { VERSION } from "../meta/version.js";
|
|
5
|
+
import { loadEffectiveConfig, printEffectiveConfig, requireUserContext } from "../core/config.js";
|
|
6
|
+
import { HyperliquidInfoClient } from "../core/hyperliquid/client.js";
|
|
7
|
+
import { attachTradingCli } from "./tradingCli.js";
|
|
8
|
+
import { attachStrategyCli } from "./strategyCli.js";
|
|
9
|
+
import { attachStateCli } from "./stateCli.js";
|
|
10
|
+
import { runPerpKlineCommand } from "./perpKline.js";
|
|
11
|
+
import { inferHlDexFromPrefixedCoin, readGlobalOptions, printJson, logVerbose } from "./util.js";
|
|
12
|
+
function mainWrapped() {
|
|
13
|
+
main().catch((e) => {
|
|
14
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
15
|
+
process.stderr.write(`${msg}\n`);
|
|
16
|
+
process.exitCode = 1;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
async function main() {
|
|
20
|
+
const program = new Command();
|
|
21
|
+
program.name("jcc_hyper_tool");
|
|
22
|
+
program.description("Hyperliquid perpetuals CLI (read-only queries + trading + strategies)");
|
|
23
|
+
program.version(VERSION, "-V, --version", "output the version number");
|
|
24
|
+
program
|
|
25
|
+
.option("--network <network>", "mainnet | testnet — selects HL API origin and /exchange signing (main=a, test=b); overrides JCC_HYPER_NETWORK when set", process.env.JCC_HYPER_NETWORK ?? "mainnet")
|
|
26
|
+
.option("--api-url <url>", "Override Hyperliquid API origin (https://host)")
|
|
27
|
+
.option("-v, --verbose", "verbose logging to stderr", false)
|
|
28
|
+
.option("--state-file <path>", "Default trade-state file (subcommand --state-file wins); env JCC_HYPER_STATE_FILE if set; else ~/.jcc_hyper_tool/trade-state.json")
|
|
29
|
+
.option("--no-state", "Disable reading/writing trade state for order/strategy placements (still rejected by `state` commands that manage local JSON)", false);
|
|
30
|
+
attachTradingCli(program);
|
|
31
|
+
attachStrategyCli(program);
|
|
32
|
+
attachStateCli(program);
|
|
33
|
+
program
|
|
34
|
+
.command("config")
|
|
35
|
+
.description("Configuration commands")
|
|
36
|
+
.addCommand(new Command("print")
|
|
37
|
+
.description("Print sanitized configuration (no secrets)")
|
|
38
|
+
.action((options, command) => {
|
|
39
|
+
logVerbose(command, "[config print]");
|
|
40
|
+
const globals = readGlobalOptions(command);
|
|
41
|
+
const cfg = loadEffectiveConfig({
|
|
42
|
+
network: globals.network,
|
|
43
|
+
apiUrl: globals.apiUrl,
|
|
44
|
+
});
|
|
45
|
+
process.stdout.write(`${printEffectiveConfig(cfg)}\n`);
|
|
46
|
+
}));
|
|
47
|
+
program
|
|
48
|
+
.command("wallet")
|
|
49
|
+
.description("Wallet helpers")
|
|
50
|
+
.addCommand(new Command("address")
|
|
51
|
+
.description("Print wallet address derived from env private key")
|
|
52
|
+
.action((_opts, command) => {
|
|
53
|
+
const globals = readGlobalOptions(command);
|
|
54
|
+
const cfg = loadEffectiveConfig({
|
|
55
|
+
network: globals.network,
|
|
56
|
+
apiUrl: globals.apiUrl,
|
|
57
|
+
});
|
|
58
|
+
if (!cfg.hasPrivateKey) {
|
|
59
|
+
throw new ConfigError("Missing HYPERLIQUID_PRIVATE_KEY or JCC_HYPER_WALLET_PRIVATE_KEY in the environment.");
|
|
60
|
+
}
|
|
61
|
+
if (!cfg.userAddress) {
|
|
62
|
+
throw new ConfigError("Unexpected: hasPrivateKey without userAddress.");
|
|
63
|
+
}
|
|
64
|
+
process.stdout.write(`${cfg.userAddress}\n`);
|
|
65
|
+
}));
|
|
66
|
+
const perp = program.command("perp").description("Perpetuals (read-only)");
|
|
67
|
+
perp
|
|
68
|
+
.command("meta")
|
|
69
|
+
.description("Fetch perp metadata (universe)")
|
|
70
|
+
.option("--dex <dex>", "Perp dex name (optional; default first perp dex)")
|
|
71
|
+
.action(async (opts, command) => {
|
|
72
|
+
const globals = readGlobalOptions(command);
|
|
73
|
+
const cfg = loadEffectiveConfig({ network: globals.network, apiUrl: globals.apiUrl });
|
|
74
|
+
const client = new HyperliquidInfoClient({ infoOrigin: cfg.infoOrigin });
|
|
75
|
+
logVerbose(command, `[perp meta] POST ${client.infoUrl}`);
|
|
76
|
+
const out = await client.meta(opts.dex);
|
|
77
|
+
printJson(out);
|
|
78
|
+
});
|
|
79
|
+
perp
|
|
80
|
+
.command("mid <coin>")
|
|
81
|
+
.description("Print mid price string for a coin (from allMids)")
|
|
82
|
+
.option("--dex <dex>", "HIP-3 perp dex for allMids (omit: infer from COIN when it looks like dex:ASSET, else default dex)")
|
|
83
|
+
.action(async (coin, opts, command) => {
|
|
84
|
+
const globals = readGlobalOptions(command);
|
|
85
|
+
const cfg = loadEffectiveConfig({ network: globals.network, apiUrl: globals.apiUrl });
|
|
86
|
+
const client = new HyperliquidInfoClient({ infoOrigin: cfg.infoOrigin });
|
|
87
|
+
const dex = opts.dex ?? inferHlDexFromPrefixedCoin(coin);
|
|
88
|
+
logVerbose(command, `[perp mid ${coin}] dex=${dex ?? "default"}`);
|
|
89
|
+
const mids = await client.allMids(dex);
|
|
90
|
+
if (typeof mids !== "object" || mids === null || Array.isArray(mids)) {
|
|
91
|
+
throw new ConfigError("Unexpected allMids response shape");
|
|
92
|
+
}
|
|
93
|
+
const v = mids[coin];
|
|
94
|
+
if (typeof v !== "string") {
|
|
95
|
+
throw new ConfigError(`Coin '${coin}' not found in allMids for dex '${dex ?? "default (first perp dex)"}'. ` +
|
|
96
|
+
`HIP-3 markets need the correct \`dex:\` (passed via --dex or inferred from COIN prefix). ` +
|
|
97
|
+
`If this came from the HL web app URL, the API \`coin\` may differ from the path (e.g. crude may be xyz:CL). ` +
|
|
98
|
+
`Cross-check with: perp meta --dex xyz`);
|
|
99
|
+
}
|
|
100
|
+
process.stdout.write(`${v}\n`);
|
|
101
|
+
});
|
|
102
|
+
perp
|
|
103
|
+
.command("book <coin>")
|
|
104
|
+
.description("Fetch L2 book snapshot (at most 20 levels per side)")
|
|
105
|
+
.action(async (coin, _opts, command) => {
|
|
106
|
+
const globals = readGlobalOptions(command);
|
|
107
|
+
const cfg = loadEffectiveConfig({ network: globals.network, apiUrl: globals.apiUrl });
|
|
108
|
+
const client = new HyperliquidInfoClient({ infoOrigin: cfg.infoOrigin });
|
|
109
|
+
const out = await client.l2Book(coin);
|
|
110
|
+
if (out === null) {
|
|
111
|
+
throw new ConfigError(`l2Book returned null for '${coin}'. Usually the API has no such market name — confirm the exact \`coin\` from perp meta / allMids (URLs like /trade/xyz:WTIOIL may differ from the REST \`coin\`; try e.g. \`xyz:CL\` for WTI-style crude on deployer \`xyz\`).`);
|
|
112
|
+
}
|
|
113
|
+
printJson(out);
|
|
114
|
+
});
|
|
115
|
+
perp
|
|
116
|
+
.command("kline <coin>")
|
|
117
|
+
.description("Fetch OHLCV candles (POST /info candleSnapshot; HIP-3 coin only — no separate dex field)")
|
|
118
|
+
.requiredOption("--interval <iv>", "Candle interval (e.g. 5m, 1h, 1d)")
|
|
119
|
+
.option("--dex <dex>", "When coin has no ':', prefix as dex:coin (e.g. CL --dex xyz → xyz:CL). Ignored / must match when coin is already deployer:ASSET.")
|
|
120
|
+
.option("--start-time <ms>", "Range start (unix ms, positive integer); omit with --end-time omitted for automatic window")
|
|
121
|
+
.option("--end-time <ms>", "Range end (unix ms); omit with --start-time omitted — defaults to now")
|
|
122
|
+
.action(async (coin, opts, command) => {
|
|
123
|
+
const globals = readGlobalOptions(command);
|
|
124
|
+
const cfg = loadEffectiveConfig({ network: globals.network, apiUrl: globals.apiUrl });
|
|
125
|
+
logVerbose(command, `[perp kline ${coin}] POST ${cfg.infoOrigin}/info candleSnapshot`);
|
|
126
|
+
const custom = (opts.startTime !== undefined && opts.startTime.trim() !== "") ||
|
|
127
|
+
(opts.endTime !== undefined && opts.endTime.trim() !== "");
|
|
128
|
+
if (!custom) {
|
|
129
|
+
logVerbose(command, `[perp kline ${coin}] using built-in default window for interval ${opts.interval} (--start-time/--end-time omitted)`);
|
|
130
|
+
}
|
|
131
|
+
await runPerpKlineCommand(coin, opts, cfg.infoOrigin);
|
|
132
|
+
});
|
|
133
|
+
program
|
|
134
|
+
.command("positions")
|
|
135
|
+
.description("Fetch clearinghouse/perp positions for the configured wallet")
|
|
136
|
+
.action(async (_opts, command) => {
|
|
137
|
+
const globals = readGlobalOptions(command);
|
|
138
|
+
const cfg = loadEffectiveConfig({ network: globals.network, apiUrl: globals.apiUrl });
|
|
139
|
+
const user = requireUserContext(cfg);
|
|
140
|
+
const client = new HyperliquidInfoClient({ infoOrigin: user.infoOrigin });
|
|
141
|
+
const out = await client.clearinghouseState(user.userAddress);
|
|
142
|
+
printJson(out);
|
|
143
|
+
});
|
|
144
|
+
const orders = program.command("orders").description("Order queries (read-only)");
|
|
145
|
+
orders
|
|
146
|
+
.command("list")
|
|
147
|
+
.description("List open orders for the configured wallet")
|
|
148
|
+
.option("--coin <coin>", "Filter to a single perp coin symbol (client-side filter)")
|
|
149
|
+
.action(async (opts, command) => {
|
|
150
|
+
const globals = readGlobalOptions(command);
|
|
151
|
+
const cfg = loadEffectiveConfig({ network: globals.network, apiUrl: globals.apiUrl });
|
|
152
|
+
const user = requireUserContext(cfg);
|
|
153
|
+
const client = new HyperliquidInfoClient({ infoOrigin: user.infoOrigin });
|
|
154
|
+
let out = await client.openOrders(user.userAddress);
|
|
155
|
+
if (opts.coin) {
|
|
156
|
+
if (!Array.isArray(out)) {
|
|
157
|
+
throw new ConfigError("Unexpected openOrders response shape");
|
|
158
|
+
}
|
|
159
|
+
out = out.filter((o) => {
|
|
160
|
+
if (typeof o !== "object" || o === null) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
const c = o.coin;
|
|
164
|
+
return c === opts.coin;
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
printJson(out);
|
|
168
|
+
});
|
|
169
|
+
program
|
|
170
|
+
.command("fills")
|
|
171
|
+
.description("Fetch recent perp fills for the configured wallet (<= 2000)")
|
|
172
|
+
.action(async (_opts, command) => {
|
|
173
|
+
const globals = readGlobalOptions(command);
|
|
174
|
+
const cfg = loadEffectiveConfig({ network: globals.network, apiUrl: globals.apiUrl });
|
|
175
|
+
const user = requireUserContext(cfg);
|
|
176
|
+
const client = new HyperliquidInfoClient({ infoOrigin: user.infoOrigin });
|
|
177
|
+
const out = await client.info({ type: "userFills", user: user.userAddress });
|
|
178
|
+
printJson(out);
|
|
179
|
+
});
|
|
180
|
+
const userArgs = process.argv.slice(2);
|
|
181
|
+
if (userArgs.length === 0) {
|
|
182
|
+
process.stdout.write(`${program.helpInformation()}`);
|
|
183
|
+
process.exitCode = 1;
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
await program.parseAsync(process.argv);
|
|
187
|
+
}
|
|
188
|
+
mainWrapped();
|
|
189
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { FetchLike } from "../core/hyperliquid/client.js";
|
|
2
|
+
export type PerpKlineCliOpts = {
|
|
3
|
+
interval: string;
|
|
4
|
+
startTime?: string;
|
|
5
|
+
endTime?: string;
|
|
6
|
+
dex?: string;
|
|
7
|
+
};
|
|
8
|
+
export type PerpKlineRunDeps = {
|
|
9
|
+
fetchImpl?: FetchLike;
|
|
10
|
+
/** Override stdout writer for tests (receives JSON.stringify result + newline) */
|
|
11
|
+
writeLine?: (line: string) => void;
|
|
12
|
+
/** Fixed "now" for default windows (tests) */
|
|
13
|
+
nowMs?: number;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Fetch candles for `perp kline` (mock-friendly via `deps.fetchImpl` / `deps.writeLine`).
|
|
17
|
+
*/
|
|
18
|
+
export declare function runPerpKlineCommand(coin: string, opts: PerpKlineCliOpts, infoOrigin: string, deps?: PerpKlineRunDeps): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=perpKline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perpKline.d.ts","sourceRoot":"","sources":["../../src/cli/perpKline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAW/D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,kFAAkF;IAClF,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,gBAAgB,GACtB,OAAO,CAAC,IAAI,CAAC,CAsCf"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { HyperliquidInfoClient } from "../core/hyperliquid/client.js";
|
|
2
|
+
import { resolveKlineRequest } from "../core/hyperliquid/candles.js";
|
|
3
|
+
import { assertPerpKlineCoinInMeta, resolvePerpKlineCoinArg, } from "../core/hyperliquid/klineCoin.js";
|
|
4
|
+
import { inferHlDexFromPrefixedPerpCoin } from "../core/hyperliquid/prefixedPerpCoin.js";
|
|
5
|
+
import { printJson } from "./util.js";
|
|
6
|
+
/**
|
|
7
|
+
* Fetch candles for `perp kline` (mock-friendly via `deps.fetchImpl` / `deps.writeLine`).
|
|
8
|
+
*/
|
|
9
|
+
export async function runPerpKlineCommand(coin, opts, infoOrigin, deps) {
|
|
10
|
+
const resolvedCoin = resolvePerpKlineCoinArg(coin, opts.dex);
|
|
11
|
+
const nowMs = deps?.nowMs ?? Date.now();
|
|
12
|
+
const { interval, startTime, endTime } = resolveKlineRequest(opts.interval, {
|
|
13
|
+
startTime: opts.startTime,
|
|
14
|
+
endTime: opts.endTime,
|
|
15
|
+
}, nowMs);
|
|
16
|
+
const client = new HyperliquidInfoClient({
|
|
17
|
+
infoOrigin,
|
|
18
|
+
fetchImpl: deps?.fetchImpl,
|
|
19
|
+
});
|
|
20
|
+
const dexForMeta = inferHlDexFromPrefixedPerpCoin(resolvedCoin);
|
|
21
|
+
if (dexForMeta) {
|
|
22
|
+
const meta = await client.meta(dexForMeta);
|
|
23
|
+
assertPerpKlineCoinInMeta(meta, resolvedCoin);
|
|
24
|
+
}
|
|
25
|
+
const out = await client.candleSnapshot({
|
|
26
|
+
coin: resolvedCoin,
|
|
27
|
+
interval,
|
|
28
|
+
startTime,
|
|
29
|
+
endTime,
|
|
30
|
+
});
|
|
31
|
+
const body = `${JSON.stringify(out, null, 2)}\n`;
|
|
32
|
+
if (deps?.writeLine) {
|
|
33
|
+
deps.writeLine(body);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
printJson(out);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=perpKline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perpKline.js","sourceRoot":"","sources":["../../src/cli/perpKline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EACL,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AAEzF,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAiBtC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAY,EACZ,IAAsB,EACtB,UAAkB,EAClB,IAAuB;IAEvB,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAE7D,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAExC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAC1D,IAAI,CAAC,QAAQ,EACb;QACE,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,EACD,KAAK,CACN,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,qBAAqB,CAAC;QACvC,UAAU;QACV,SAAS,EAAE,IAAI,EAAE,SAAS;KAC3B,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,8BAA8B,CAAC,YAAY,CAAC,CAAC;IAChE,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,yBAAyB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC;QACtC,IAAI,EAAE,YAAY;QAClB,QAAQ;QACR,SAAS;QACT,OAAO;KACR,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IACjD,IAAI,IAAI,EAAE,SAAS,EAAE,CAAC;QACpB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateCli.d.ts","sourceRoot":"","sources":["../../src/cli/stateCli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0LrD"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { loadEffectiveConfig } from "../core/config.js";
|
|
2
|
+
import { ConfigError } from "../core/errors.js";
|
|
3
|
+
import { formatStateList, summarizeIntent } from "../core/state/present.js";
|
|
4
|
+
import { runTradeReconcile } from "../core/state/runReconcile.js";
|
|
5
|
+
import { runStateCancelOpen } from "../core/state/runCancelOpen.js";
|
|
6
|
+
import { readOrCreateTradeStateFile, writeTradeStateFileAtomic } from "../core/state/store.js";
|
|
7
|
+
import { requireStdinYes } from "./confirm.js";
|
|
8
|
+
import { printJson, readGlobalOptions, requireStateCliEnabled, resolveTradeStatePath, } from "./util.js";
|
|
9
|
+
function requireRecordedStatePath(cmd, label, explicit) {
|
|
10
|
+
requireStateCliEnabled(cmd, label);
|
|
11
|
+
const path = resolveTradeStatePath(cmd, explicit);
|
|
12
|
+
if (!path) {
|
|
13
|
+
throw new ConfigError(`Unexpected: ${label}: state path resolution returned empty.`);
|
|
14
|
+
}
|
|
15
|
+
return path;
|
|
16
|
+
}
|
|
17
|
+
export function attachStateCli(program) {
|
|
18
|
+
const state = program
|
|
19
|
+
.command("state")
|
|
20
|
+
.description("Local JSON state: intents, reconcile, human-readable views");
|
|
21
|
+
state
|
|
22
|
+
.command("reconcile")
|
|
23
|
+
.description("Fetch open orders + positions, advance bracket/grid state, optionally LIVE act")
|
|
24
|
+
.option("--state-file <path>", "Trade state JSON path (omit: root/default ~/.jcc_hyper_tool/trade-state.json)")
|
|
25
|
+
.option("--intent <id>", "Only reconcile a single intent id")
|
|
26
|
+
.option("--live", "Execute generated exchange actions (requires private key env)", false)
|
|
27
|
+
.option("--assume-yes", "With --live: skip interactive confirmations", false)
|
|
28
|
+
.action(async (opts, command) => {
|
|
29
|
+
const globals = readGlobalOptions(command);
|
|
30
|
+
const cfg = loadEffectiveConfig({
|
|
31
|
+
network: globals.network,
|
|
32
|
+
apiUrl: globals.apiUrl,
|
|
33
|
+
});
|
|
34
|
+
const statePath = requireRecordedStatePath(command, "`state reconcile`", opts.stateFile);
|
|
35
|
+
const mode = opts.live ? "live" : "dry";
|
|
36
|
+
const out = await runTradeReconcile({
|
|
37
|
+
statePath,
|
|
38
|
+
cfg,
|
|
39
|
+
mode,
|
|
40
|
+
assumeYes: Boolean(opts.assumeYes),
|
|
41
|
+
intentFilter: opts.intent?.trim() || undefined,
|
|
42
|
+
confirmLive: (prompt) => requireStdinYes(prompt),
|
|
43
|
+
});
|
|
44
|
+
printJson({
|
|
45
|
+
mode,
|
|
46
|
+
actionsExecuted: out.actionsExecuted,
|
|
47
|
+
dryPlan: out.dryPlan,
|
|
48
|
+
tasks: formatStateList(out.state).tasks,
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
state
|
|
52
|
+
.command("cancel-open")
|
|
53
|
+
.description("Cancel resting orders referenced by trade state that are still visible in openOrders")
|
|
54
|
+
.option("--state-file <path>", "Trade state JSON path (omit: root/default ~/.jcc_hyper_tool/trade-state.json)")
|
|
55
|
+
.option("--intent <id>", "Only cancel oids originating from one intent row")
|
|
56
|
+
.option("--live", "sign + POST /exchange (requires private key)", false)
|
|
57
|
+
.option("--assume-yes", "with --live: skip stdin YES (dangerous)", false)
|
|
58
|
+
.action(async (opts, command) => {
|
|
59
|
+
readGlobalOptions(command);
|
|
60
|
+
const globals = readGlobalOptions(command);
|
|
61
|
+
const cfg = loadEffectiveConfig({ network: globals.network, apiUrl: globals.apiUrl });
|
|
62
|
+
const statePath = requireRecordedStatePath(command, "`state cancel-open`", opts.stateFile);
|
|
63
|
+
const out = await runStateCancelOpen({
|
|
64
|
+
statePath,
|
|
65
|
+
cfg,
|
|
66
|
+
mode: opts.live ? "live" : "dry",
|
|
67
|
+
assumeYes: Boolean(opts.assumeYes),
|
|
68
|
+
intentFilter: opts.intent?.trim() || undefined,
|
|
69
|
+
confirmLive: (p) => requireStdinYes(p),
|
|
70
|
+
});
|
|
71
|
+
printJson(out);
|
|
72
|
+
});
|
|
73
|
+
state
|
|
74
|
+
.command("list")
|
|
75
|
+
.description("Task-readable summary of all intents in state file")
|
|
76
|
+
.option("--state-file <path>", "Trade state JSON path (omit: root/default ~/.jcc_hyper_tool/trade-state.json)")
|
|
77
|
+
.action(async (opts, command) => {
|
|
78
|
+
readGlobalOptions(command);
|
|
79
|
+
const statePath = requireRecordedStatePath(command, "`state list`", opts.stateFile);
|
|
80
|
+
const file = await readOrCreateTradeStateFile(statePath, Date.now());
|
|
81
|
+
printJson(formatStateList(file));
|
|
82
|
+
});
|
|
83
|
+
state
|
|
84
|
+
.command("show")
|
|
85
|
+
.description("Show one intent (structured + summary)")
|
|
86
|
+
.argument("<intentId>", "Intent id (uuid)")
|
|
87
|
+
.option("--state-file <path>", "Trade state JSON path (omit: root/default ~/.jcc_hyper_tool/trade-state.json)")
|
|
88
|
+
.action(async (intentId, opts, command) => {
|
|
89
|
+
readGlobalOptions(command);
|
|
90
|
+
const statePath = requireRecordedStatePath(command, "`state show`", opts.stateFile);
|
|
91
|
+
const file = await readOrCreateTradeStateFile(statePath, Date.now());
|
|
92
|
+
const row = file.intents[intentId];
|
|
93
|
+
if (!row) {
|
|
94
|
+
throw new ConfigError(`Unknown intent id: ${intentId}`);
|
|
95
|
+
}
|
|
96
|
+
printJson({
|
|
97
|
+
summary: summarizeIntent(row),
|
|
98
|
+
intent: row,
|
|
99
|
+
recentEvents: file.events.filter((e) => e.intentId === intentId).slice(-12),
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
state
|
|
103
|
+
.command("events")
|
|
104
|
+
.description("Event log for an intent (newest last unless --newest-first)")
|
|
105
|
+
.argument("<intentId>", "Intent id (uuid)")
|
|
106
|
+
.option("--state-file <path>", "Trade state JSON path (omit: root/default ~/.jcc_hyper_tool/trade-state.json)")
|
|
107
|
+
.option("--tail <n>", "Only last N events", "50")
|
|
108
|
+
.option("--newest-first", "Print newest events first", false)
|
|
109
|
+
.action(async (intentId, opts, command) => {
|
|
110
|
+
readGlobalOptions(command);
|
|
111
|
+
const statePath = requireRecordedStatePath(command, "`state events`", opts.stateFile);
|
|
112
|
+
const file = await readOrCreateTradeStateFile(statePath, Date.now());
|
|
113
|
+
const tail = Number(opts.tail ?? "50");
|
|
114
|
+
if (!Number.isFinite(tail) || tail < 1) {
|
|
115
|
+
throw new ConfigError("--tail must be a positive number");
|
|
116
|
+
}
|
|
117
|
+
let ev = file.events.filter((e) => e.intentId === intentId);
|
|
118
|
+
if (opts.newestFirst) {
|
|
119
|
+
ev = [...ev].reverse().slice(0, tail);
|
|
120
|
+
}
|
|
121
|
+
else if (ev.length > tail) {
|
|
122
|
+
ev = ev.slice(-tail);
|
|
123
|
+
}
|
|
124
|
+
printJson({
|
|
125
|
+
intentId,
|
|
126
|
+
count: ev.length,
|
|
127
|
+
events: ev,
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
state
|
|
131
|
+
.command("request-cancel")
|
|
132
|
+
.description("Mark a bracket intent for graceful entry cancel on next reconcile")
|
|
133
|
+
.argument("<intentId>", "Bracket intent id")
|
|
134
|
+
.option("--state-file <path>", "Trade state JSON path (omit: root/default ~/.jcc_hyper_tool/trade-state.json)")
|
|
135
|
+
.action(async (intentId, opts, command) => {
|
|
136
|
+
readGlobalOptions(command);
|
|
137
|
+
const statePath = requireRecordedStatePath(command, "`state request-cancel`", opts.stateFile);
|
|
138
|
+
const now = Date.now();
|
|
139
|
+
const cur = await readOrCreateTradeStateFile(statePath, now);
|
|
140
|
+
const row = cur.intents[intentId];
|
|
141
|
+
if (!row || row.kind !== "bracket") {
|
|
142
|
+
throw new ConfigError(`Bracket intent not found: ${intentId}`);
|
|
143
|
+
}
|
|
144
|
+
const nextB = { ...row, cancelRequested: true, updatedAtMs: now };
|
|
145
|
+
const next = {
|
|
146
|
+
...cur,
|
|
147
|
+
updatedAtMs: now,
|
|
148
|
+
intents: { ...cur.intents, [intentId]: nextB },
|
|
149
|
+
events: [
|
|
150
|
+
...cur.events,
|
|
151
|
+
{ t: now, intentId, type: "user_cancel_request", message: "cancelRequested=true" },
|
|
152
|
+
],
|
|
153
|
+
};
|
|
154
|
+
await writeTradeStateFileAtomic(statePath, next);
|
|
155
|
+
printJson({ ok: true, intentId, phase: nextB.phase });
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=stateCli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateCli.js","sourceRoot":"","sources":["../../src/cli/stateCli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategyCli.d.ts","sourceRoot":"","sources":["../../src/cli/strategyCli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8CzC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+NxD"}
|