@bithumb-official/bithumb-cli 0.1.16
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/dist/account-UVDNQRB7.js +78 -0
- package/dist/account-UVDNQRB7.js.map +1 -0
- package/dist/account-YNPFEHQT.js +90 -0
- package/dist/account-YNPFEHQT.js.map +1 -0
- package/dist/chunk-AUQ7MB6O.js +143 -0
- package/dist/chunk-AUQ7MB6O.js.map +1 -0
- package/dist/chunk-FYO6WLZI.js +72 -0
- package/dist/chunk-FYO6WLZI.js.map +1 -0
- package/dist/chunk-YXIFBNEQ.js +3488 -0
- package/dist/chunk-YXIFBNEQ.js.map +1 -0
- package/dist/config-2P3Y3TQH.js +182 -0
- package/dist/config-2P3Y3TQH.js.map +1 -0
- package/dist/config-6BIS2PLC.js +154 -0
- package/dist/config-6BIS2PLC.js.map +1 -0
- package/dist/deposit-HNUSMKX5.js +161 -0
- package/dist/deposit-HNUSMKX5.js.map +1 -0
- package/dist/deposit-TCMLJ7MI.js +169 -0
- package/dist/deposit-TCMLJ7MI.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +211 -0
- package/dist/index.js.map +1 -0
- package/dist/market-EEF3KI4T.js +219 -0
- package/dist/market-EEF3KI4T.js.map +1 -0
- package/dist/market-GLU62BWO.js +304 -0
- package/dist/market-GLU62BWO.js.map +1 -0
- package/dist/setup-LAAVO63H.js +21 -0
- package/dist/setup-LAAVO63H.js.map +1 -0
- package/dist/system-BRZY7PTZ.js +98 -0
- package/dist/system-BRZY7PTZ.js.map +1 -0
- package/dist/system-XRZ2KHXL.js +69 -0
- package/dist/system-XRZ2KHXL.js.map +1 -0
- package/dist/trade-FERR47DJ.js +233 -0
- package/dist/trade-FERR47DJ.js.map +1 -0
- package/dist/trade-H4G5P2W2.js +159 -0
- package/dist/trade-H4G5P2W2.js.map +1 -0
- package/dist/twap-44UCVSIR.js +91 -0
- package/dist/twap-44UCVSIR.js.map +1 -0
- package/dist/twap-4LRBUMTG.js +82 -0
- package/dist/twap-4LRBUMTG.js.map +1 -0
- package/dist/withdraw-IRMICBD2.js +203 -0
- package/dist/withdraw-IRMICBD2.js.map +1 -0
- package/dist/withdraw-TLGVRUBS.js +161 -0
- package/dist/withdraw-TLGVRUBS.js.map +1 -0
- package/package.json +25 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
toArray,
|
|
4
|
+
toNumber
|
|
5
|
+
} from "./chunk-AUQ7MB6O.js";
|
|
6
|
+
import {
|
|
7
|
+
errorLine,
|
|
8
|
+
outputLine,
|
|
9
|
+
printJson,
|
|
10
|
+
printKv,
|
|
11
|
+
printTable
|
|
12
|
+
} from "./chunk-FYO6WLZI.js";
|
|
13
|
+
|
|
14
|
+
// src/commands/trade.ts
|
|
15
|
+
import { readFileSync } from "fs";
|
|
16
|
+
async function handleTradeCommand(run, action, v, json) {
|
|
17
|
+
switch (action) {
|
|
18
|
+
case "orders":
|
|
19
|
+
return cmdOrders(run, {
|
|
20
|
+
market: v.market,
|
|
21
|
+
state: v.state,
|
|
22
|
+
states: toArray(v.states),
|
|
23
|
+
uuids: toArray(v.uuids),
|
|
24
|
+
clientOrderIds: toArray(v.clientOrderIds),
|
|
25
|
+
orderBy: v.orderBy,
|
|
26
|
+
page: toNumber(v.page),
|
|
27
|
+
limit: toNumber(v.limit),
|
|
28
|
+
json
|
|
29
|
+
});
|
|
30
|
+
case "get":
|
|
31
|
+
return cmdGet(run, { uuid: v.uuid, clientOrderId: v.clientOrderId, json });
|
|
32
|
+
case "place":
|
|
33
|
+
if (v.ordTypeConflict) {
|
|
34
|
+
errorLine(
|
|
35
|
+
"Error: Both --order-type and --ord-type were provided. Use only --order-type (--ord-type is a deprecated alias)."
|
|
36
|
+
);
|
|
37
|
+
process.exitCode = 1;
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (v.ordTypeFromDeprecatedAlias) {
|
|
41
|
+
errorLine("[deprecated] --ord-type is deprecated; use --order-type (same values).");
|
|
42
|
+
}
|
|
43
|
+
return cmdPlace(run, {
|
|
44
|
+
market: v.market,
|
|
45
|
+
side: v.side,
|
|
46
|
+
ordType: v.ordType,
|
|
47
|
+
price: v.price,
|
|
48
|
+
volume: v.volume,
|
|
49
|
+
clientOrderId: v.clientOrderId,
|
|
50
|
+
json
|
|
51
|
+
});
|
|
52
|
+
case "cancel":
|
|
53
|
+
return cmdCancel(run, { orderId: v.orderId, clientOrderId: v.clientOrderId, json });
|
|
54
|
+
case "batch-place":
|
|
55
|
+
return cmdBatchPlace(run, v, json);
|
|
56
|
+
case "batch-cancel":
|
|
57
|
+
return cmdBatchCancel(run, v, json);
|
|
58
|
+
default:
|
|
59
|
+
errorLine(`Unknown trade command: ${action}. Run 'bithumb trade --help' for usage.`);
|
|
60
|
+
process.exitCode = 1;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async function cmdOrders(run, opts) {
|
|
64
|
+
const args = {};
|
|
65
|
+
if (opts.market) args.market = opts.market;
|
|
66
|
+
if (opts.state) args.state = opts.state;
|
|
67
|
+
if (opts.states) args.states = opts.states;
|
|
68
|
+
if (opts.uuids) args.uuids = opts.uuids;
|
|
69
|
+
if (opts.clientOrderIds) args.client_order_ids = opts.clientOrderIds;
|
|
70
|
+
if (opts.orderBy) args.order_by = opts.orderBy;
|
|
71
|
+
if (opts.page !== void 0) args.page = opts.page;
|
|
72
|
+
if (opts.limit !== void 0) args.limit = opts.limit;
|
|
73
|
+
const result = await run("trade_get_orders", args);
|
|
74
|
+
const items = result.data;
|
|
75
|
+
if (opts.json) return printJson(items);
|
|
76
|
+
if (!items?.length) {
|
|
77
|
+
outputLine("No orders found");
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
printTable(items.map((o) => ({
|
|
81
|
+
uuid: o["uuid"],
|
|
82
|
+
market: o["market"],
|
|
83
|
+
side: o["side"],
|
|
84
|
+
ord_type: o["ord_type"],
|
|
85
|
+
price: o["price"],
|
|
86
|
+
volume: o["volume"],
|
|
87
|
+
state: o["state"],
|
|
88
|
+
created_at: o["created_at"]
|
|
89
|
+
})));
|
|
90
|
+
}
|
|
91
|
+
async function cmdGet(run, opts) {
|
|
92
|
+
if (!opts.uuid && !opts.clientOrderId) {
|
|
93
|
+
errorLine("Error: --uuid or --client-order-id is required. Example: bithumb trade get --uuid abc-123");
|
|
94
|
+
process.exitCode = 1;
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const args = {};
|
|
98
|
+
if (opts.uuid) args.uuid = opts.uuid;
|
|
99
|
+
if (opts.clientOrderId) args.client_order_id = opts.clientOrderId;
|
|
100
|
+
const result = await run("trade_get_order", args);
|
|
101
|
+
const data = result.data;
|
|
102
|
+
if (opts.json) return printJson(data);
|
|
103
|
+
printKv(data);
|
|
104
|
+
}
|
|
105
|
+
async function cmdPlace(run, opts) {
|
|
106
|
+
if (!opts.market || !opts.side || !opts.ordType) {
|
|
107
|
+
errorLine("Error: --market, --side, and --order-type are required.");
|
|
108
|
+
errorLine("Example: bithumb trade place --market KRW-BTC --side bid --order-type limit --price 50000000 --volume 0.01");
|
|
109
|
+
errorLine("Note: --ord-type is accepted as a deprecated alias of --order-type.");
|
|
110
|
+
process.exitCode = 1;
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const args = {
|
|
114
|
+
market: opts.market,
|
|
115
|
+
side: opts.side,
|
|
116
|
+
order_type: opts.ordType
|
|
117
|
+
};
|
|
118
|
+
if (opts.price) args.price = opts.price;
|
|
119
|
+
if (opts.volume) args.volume = opts.volume;
|
|
120
|
+
if (opts.clientOrderId) args.client_order_id = opts.clientOrderId;
|
|
121
|
+
const result = await run("trade_place_order", args);
|
|
122
|
+
const data = result.data;
|
|
123
|
+
if (opts.json) return printJson(data);
|
|
124
|
+
outputLine(`Order placed: ${data["order_id"]}`);
|
|
125
|
+
printKv(data);
|
|
126
|
+
}
|
|
127
|
+
async function cmdCancel(run, opts) {
|
|
128
|
+
if (!opts.orderId && !opts.clientOrderId) {
|
|
129
|
+
errorLine("Error: --order-id or --client-order-id is required. Example: bithumb trade cancel --order-id abc-123");
|
|
130
|
+
process.exitCode = 1;
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const args = {};
|
|
134
|
+
if (opts.orderId) args.order_id = opts.orderId;
|
|
135
|
+
if (opts.clientOrderId) args.client_order_id = opts.clientOrderId;
|
|
136
|
+
const result = await run("trade_cancel_order", args);
|
|
137
|
+
const data = result.data;
|
|
138
|
+
if (opts.json) return printJson(data);
|
|
139
|
+
outputLine(`Order cancelled: ${data["order_id"] ?? opts.orderId ?? opts.clientOrderId}`);
|
|
140
|
+
printKv(data);
|
|
141
|
+
}
|
|
142
|
+
async function cmdBatchPlace(run, v, json) {
|
|
143
|
+
if (!v.file) {
|
|
144
|
+
errorLine("Error: --file is required. Provide a JSON file with batch orders.");
|
|
145
|
+
errorLine("Example: bithumb trade batch-place --file orders.json");
|
|
146
|
+
errorLine('File format: [{"market":"KRW-BTC","side":"bid","order_type":"limit","price":"50000000","volume":"0.01"}]');
|
|
147
|
+
process.exitCode = 1;
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
let raw;
|
|
151
|
+
try {
|
|
152
|
+
raw = readFileSync(v.file, "utf-8");
|
|
153
|
+
} catch {
|
|
154
|
+
errorLine(`Error: File not found: ${v.file}`);
|
|
155
|
+
process.exitCode = 1;
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
let parsed;
|
|
159
|
+
try {
|
|
160
|
+
parsed = JSON.parse(raw);
|
|
161
|
+
} catch {
|
|
162
|
+
errorLine(`Error: Invalid JSON in file: ${v.file}`);
|
|
163
|
+
process.exitCode = 1;
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const rawBatch = Array.isArray(parsed) ? parsed : parsed?.batch_orders;
|
|
167
|
+
if (!Array.isArray(rawBatch)) {
|
|
168
|
+
errorLine(
|
|
169
|
+
"Error: batch file must be a JSON array, or an object with 'batch_orders' that is an array."
|
|
170
|
+
);
|
|
171
|
+
errorLine(
|
|
172
|
+
'Example: [{"market":"KRW-BTC","side":"bid","order_type":"limit","price":"50000000","volume":"0.01"}]'
|
|
173
|
+
);
|
|
174
|
+
process.exitCode = 1;
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
let normalizedAny = false;
|
|
178
|
+
const batchOrders = [];
|
|
179
|
+
for (let i = 0; i < rawBatch.length; i++) {
|
|
180
|
+
const o = rawBatch[i];
|
|
181
|
+
if (o && typeof o === "object" && !Array.isArray(o)) {
|
|
182
|
+
const obj = o;
|
|
183
|
+
const hasCanonical = "order_type" in obj;
|
|
184
|
+
const hasDeprecated = "ord_type" in obj;
|
|
185
|
+
if (hasCanonical && hasDeprecated) {
|
|
186
|
+
errorLine(
|
|
187
|
+
`Error: batch order at index ${i} has both 'order_type' and 'ord_type'. Use only 'order_type' ('ord_type' is a deprecated alias).`
|
|
188
|
+
);
|
|
189
|
+
process.exitCode = 1;
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
if (!hasCanonical && hasDeprecated) {
|
|
193
|
+
normalizedAny = true;
|
|
194
|
+
const { ord_type, ...rest } = obj;
|
|
195
|
+
batchOrders.push({ ...rest, order_type: ord_type });
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
batchOrders.push(o);
|
|
200
|
+
}
|
|
201
|
+
if (normalizedAny) {
|
|
202
|
+
errorLine(
|
|
203
|
+
"[notice] batch JSON used 'ord_type'; normalized to canonical 'order_type'. Update your file to use 'order_type'."
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
const result = await run("trade_batch_place", { batch_orders: batchOrders });
|
|
207
|
+
const data = result.data;
|
|
208
|
+
if (json) return printJson(data);
|
|
209
|
+
const items = data;
|
|
210
|
+
if (Array.isArray(items)) {
|
|
211
|
+
printTable(items);
|
|
212
|
+
} else {
|
|
213
|
+
printKv(data);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
async function cmdBatchCancel(run, v, json) {
|
|
217
|
+
const args = {};
|
|
218
|
+
if (v.orderIds) args.order_ids = toArray(v.orderIds);
|
|
219
|
+
if (v.clientOrderIds) args.client_order_ids = toArray(v.clientOrderIds);
|
|
220
|
+
if (!args.order_ids && !args.client_order_ids) {
|
|
221
|
+
errorLine("Error: --order-ids or --client-order-ids required. Example: bithumb trade batch-cancel --order-ids id1,id2");
|
|
222
|
+
process.exitCode = 1;
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
const result = await run("trade_batch_cancel", args);
|
|
226
|
+
const data = result.data;
|
|
227
|
+
if (json) return printJson(data);
|
|
228
|
+
printKv(data);
|
|
229
|
+
}
|
|
230
|
+
export {
|
|
231
|
+
handleTradeCommand
|
|
232
|
+
};
|
|
233
|
+
//# sourceMappingURL=trade-FERR47DJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/trade.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type { ToolRunner } from \"@bithumb-official/bithumb-core\";\nimport type { CliValues } from \"../parser.js\";\nimport { toArray, toNumber } from \"../parser.js\";\nimport { outputLine, errorLine, printJson, printTable, printKv } from \"../formatter.js\";\n\nexport async function handleTradeCommand(\n run: ToolRunner,\n action: string,\n v: CliValues,\n json: boolean,\n): Promise<void> {\n switch (action) {\n case \"orders\":\n return cmdOrders(run, {\n market: v.market,\n state: v.state,\n states: toArray(v.states),\n uuids: toArray(v.uuids),\n clientOrderIds: toArray(v.clientOrderIds),\n orderBy: v.orderBy,\n page: toNumber(v.page),\n limit: toNumber(v.limit),\n json,\n });\n case \"get\":\n return cmdGet(run, { uuid: v.uuid, clientOrderId: v.clientOrderId, json });\n case \"place\":\n if (v.ordTypeConflict) {\n errorLine(\n \"Error: Both --order-type and --ord-type were provided. Use only --order-type (--ord-type is a deprecated alias).\",\n );\n process.exitCode = 1;\n return;\n }\n if (v.ordTypeFromDeprecatedAlias) {\n errorLine(\"[deprecated] --ord-type is deprecated; use --order-type (same values).\");\n }\n return cmdPlace(run, {\n market: v.market,\n side: v.side,\n ordType: v.ordType,\n price: v.price,\n volume: v.volume,\n clientOrderId: v.clientOrderId,\n json,\n });\n case \"cancel\":\n return cmdCancel(run, { orderId: v.orderId, clientOrderId: v.clientOrderId, json });\n case \"batch-place\":\n return cmdBatchPlace(run, v, json);\n case \"batch-cancel\":\n return cmdBatchCancel(run, v, json);\n default:\n errorLine(`Unknown trade command: ${action}. Run 'bithumb trade --help' for usage.`);\n process.exitCode = 1;\n }\n}\n\nasync function cmdOrders(\n run: ToolRunner,\n opts: {\n market?: string;\n state?: string;\n states?: string[];\n uuids?: string[];\n clientOrderIds?: string[];\n orderBy?: string;\n page?: number;\n limit?: number;\n json: boolean;\n },\n): Promise<void> {\n const args: Record<string, unknown> = {};\n if (opts.market) args.market = opts.market;\n if (opts.state) args.state = opts.state;\n if (opts.states) args.states = opts.states;\n if (opts.uuids) args.uuids = opts.uuids;\n if (opts.clientOrderIds) args.client_order_ids = opts.clientOrderIds;\n if (opts.orderBy) args.order_by = opts.orderBy;\n if (opts.page !== undefined) args.page = opts.page;\n if (opts.limit !== undefined) args.limit = opts.limit;\n const result = await run(\"trade_get_orders\", args);\n const items = result.data as Record<string, unknown>[];\n if (opts.json) return printJson(items);\n if (!items?.length) { outputLine(\"No orders found\"); return; }\n printTable(items.map((o) => ({\n uuid: o[\"uuid\"],\n market: o[\"market\"],\n side: o[\"side\"],\n ord_type: o[\"ord_type\"],\n price: o[\"price\"],\n volume: o[\"volume\"],\n state: o[\"state\"],\n created_at: o[\"created_at\"],\n })));\n}\n\nasync function cmdGet(\n run: ToolRunner,\n opts: { uuid?: string; clientOrderId?: string; json: boolean },\n): Promise<void> {\n if (!opts.uuid && !opts.clientOrderId) {\n errorLine(\"Error: --uuid or --client-order-id is required. Example: bithumb trade get --uuid abc-123\");\n process.exitCode = 1;\n return;\n }\n const args: Record<string, unknown> = {};\n if (opts.uuid) args.uuid = opts.uuid;\n if (opts.clientOrderId) args.client_order_id = opts.clientOrderId;\n const result = await run(\"trade_get_order\", args);\n const data = result.data as Record<string, unknown>;\n if (opts.json) return printJson(data);\n printKv(data);\n}\n\nasync function cmdPlace(\n run: ToolRunner,\n opts: {\n market?: string;\n side?: string;\n ordType?: string;\n price?: string;\n volume?: string;\n clientOrderId?: string;\n json: boolean;\n },\n): Promise<void> {\n if (!opts.market || !opts.side || !opts.ordType) {\n errorLine(\"Error: --market, --side, and --order-type are required.\");\n errorLine(\"Example: bithumb trade place --market KRW-BTC --side bid --order-type limit --price 50000000 --volume 0.01\");\n errorLine(\"Note: --ord-type is accepted as a deprecated alias of --order-type.\");\n process.exitCode = 1;\n return;\n }\n const args: Record<string, unknown> = {\n market: opts.market,\n side: opts.side,\n order_type: opts.ordType,\n };\n if (opts.price) args.price = opts.price;\n if (opts.volume) args.volume = opts.volume;\n if (opts.clientOrderId) args.client_order_id = opts.clientOrderId;\n const result = await run(\"trade_place_order\", args);\n const data = result.data as Record<string, unknown>;\n if (opts.json) return printJson(data);\n outputLine(`Order placed: ${data[\"order_id\"]}`);\n printKv(data);\n}\n\nasync function cmdCancel(\n run: ToolRunner,\n opts: { orderId?: string; clientOrderId?: string; json: boolean },\n): Promise<void> {\n if (!opts.orderId && !opts.clientOrderId) {\n errorLine(\"Error: --order-id or --client-order-id is required. Example: bithumb trade cancel --order-id abc-123\");\n process.exitCode = 1;\n return;\n }\n const args: Record<string, unknown> = {};\n if (opts.orderId) args.order_id = opts.orderId;\n if (opts.clientOrderId) args.client_order_id = opts.clientOrderId;\n const result = await run(\"trade_cancel_order\", args);\n const data = result.data as Record<string, unknown>;\n if (opts.json) return printJson(data);\n outputLine(`Order cancelled: ${data[\"order_id\"] ?? opts.orderId ?? opts.clientOrderId}`);\n printKv(data);\n}\n\nasync function cmdBatchPlace(\n run: ToolRunner,\n v: CliValues,\n json: boolean,\n): Promise<void> {\n if (!v.file) {\n errorLine(\"Error: --file is required. Provide a JSON file with batch orders.\");\n errorLine(\"Example: bithumb trade batch-place --file orders.json\");\n errorLine('File format: [{\"market\":\"KRW-BTC\",\"side\":\"bid\",\"order_type\":\"limit\",\"price\":\"50000000\",\"volume\":\"0.01\"}]');\n process.exitCode = 1;\n return;\n }\n\n let raw: string;\n try {\n raw = readFileSync(v.file, \"utf-8\");\n } catch {\n errorLine(`Error: File not found: ${v.file}`);\n process.exitCode = 1;\n return;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n errorLine(`Error: Invalid JSON in file: ${v.file}`);\n process.exitCode = 1;\n return;\n }\n\n const rawBatch = Array.isArray(parsed)\n ? parsed\n : (parsed as Record<string, unknown>)?.batch_orders;\n\n if (!Array.isArray(rawBatch)) {\n errorLine(\n \"Error: batch file must be a JSON array, or an object with 'batch_orders' that is an array.\",\n );\n errorLine(\n 'Example: [{\"market\":\"KRW-BTC\",\"side\":\"bid\",\"order_type\":\"limit\",\"price\":\"50000000\",\"volume\":\"0.01\"}]',\n );\n process.exitCode = 1;\n return;\n }\n\n // Normalize legacy `ord_type` field → canonical `order_type`.\n // Bithumb API expects `order_type`; some agents send `ord_type` (response-field name).\n // If both are present we refuse to guess which the user meant — silently dropping\n // one would risk an unintended order.\n let normalizedAny = false;\n const batchOrders: unknown[] = [];\n for (let i = 0; i < rawBatch.length; i++) {\n const o = rawBatch[i];\n if (o && typeof o === \"object\" && !Array.isArray(o)) {\n const obj = o as Record<string, unknown>;\n const hasCanonical = \"order_type\" in obj;\n const hasDeprecated = \"ord_type\" in obj;\n if (hasCanonical && hasDeprecated) {\n errorLine(\n `Error: batch order at index ${i} has both 'order_type' and 'ord_type'. Use only 'order_type' ('ord_type' is a deprecated alias).`,\n );\n process.exitCode = 1;\n return;\n }\n if (!hasCanonical && hasDeprecated) {\n normalizedAny = true;\n const { ord_type, ...rest } = obj;\n batchOrders.push({ ...rest, order_type: ord_type });\n continue;\n }\n }\n batchOrders.push(o);\n }\n\n if (normalizedAny) {\n errorLine(\n \"[notice] batch JSON used 'ord_type'; normalized to canonical 'order_type'. Update your file to use 'order_type'.\",\n );\n }\n\n const result = await run(\"trade_batch_place\", { batch_orders: batchOrders });\n const data = result.data;\n if (json) return printJson(data);\n const items = data as Record<string, unknown>[];\n if (Array.isArray(items)) {\n printTable(items);\n } else {\n printKv(data as Record<string, unknown>);\n }\n}\n\nasync function cmdBatchCancel(\n run: ToolRunner,\n v: CliValues,\n json: boolean,\n): Promise<void> {\n const args: Record<string, unknown> = {};\n if (v.orderIds) args.order_ids = toArray(v.orderIds);\n if (v.clientOrderIds) args.client_order_ids = toArray(v.clientOrderIds);\n if (!args.order_ids && !args.client_order_ids) {\n errorLine(\"Error: --order-ids or --client-order-ids required. Example: bithumb trade batch-cancel --order-ids id1,id2\");\n process.exitCode = 1;\n return;\n }\n const result = await run(\"trade_batch_cancel\", args);\n const data = result.data as Record<string, unknown>;\n if (json) return printJson(data);\n printKv(data);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/help/trade.ts
|
|
4
|
+
var MODULE_HELP = `
|
|
5
|
+
Usage: bithumb trade <command> [options]
|
|
6
|
+
|
|
7
|
+
Commands:
|
|
8
|
+
orders List orders
|
|
9
|
+
get Get order details
|
|
10
|
+
place Place a new order
|
|
11
|
+
cancel Cancel an order
|
|
12
|
+
batch-place Place multiple orders from JSON file (max 20)
|
|
13
|
+
batch-cancel Cancel multiple orders (max 30)
|
|
14
|
+
|
|
15
|
+
Run bithumb trade <command> --help for command-specific options.
|
|
16
|
+
|
|
17
|
+
Examples:
|
|
18
|
+
bithumb trade orders --market KRW-BTC --state wait
|
|
19
|
+
bithumb trade get --uuid abc-123
|
|
20
|
+
bithumb trade place --market KRW-BTC --side bid --order-type limit --price 50000000 --volume 0.01
|
|
21
|
+
bithumb trade cancel --order-id abc-123
|
|
22
|
+
bithumb trade batch-place --file orders.json
|
|
23
|
+
`;
|
|
24
|
+
var ORDERS_HELP = `
|
|
25
|
+
Usage: bithumb trade orders [options]
|
|
26
|
+
|
|
27
|
+
List orders, optionally filtered by market, state, or identifiers.
|
|
28
|
+
|
|
29
|
+
Required:
|
|
30
|
+
(none \u2014 all filters are optional)
|
|
31
|
+
|
|
32
|
+
Options:
|
|
33
|
+
--market <market> Market identifier (e.g., KRW-BTC)
|
|
34
|
+
--state <state> Filter by state: wait / watch / done / cancel (default: wait)
|
|
35
|
+
--states <states> Filter by multiple states (comma-separated)
|
|
36
|
+
--uuids <uuids> Filter by multiple UUIDs (comma-separated)
|
|
37
|
+
--client-order-ids <ids> Filter by multiple client order IDs (comma-separated)
|
|
38
|
+
--order-by <order> Sort order: asc / desc (default: desc)
|
|
39
|
+
--page <n> Page number (default: 1)
|
|
40
|
+
--limit <n> Results per page (default: 100)
|
|
41
|
+
|
|
42
|
+
Examples:
|
|
43
|
+
bithumb trade orders --market KRW-BTC --state wait
|
|
44
|
+
bithumb trade orders --state wait --order-by desc --limit 50
|
|
45
|
+
`;
|
|
46
|
+
var GET_HELP = `
|
|
47
|
+
Usage: bithumb trade get [options]
|
|
48
|
+
|
|
49
|
+
Get details of a single order by UUID or client order ID.
|
|
50
|
+
|
|
51
|
+
Required (provide one of):
|
|
52
|
+
--uuid <uuid> Order UUID
|
|
53
|
+
--client-order-id <id> Client-assigned order ID
|
|
54
|
+
|
|
55
|
+
Options:
|
|
56
|
+
(none)
|
|
57
|
+
|
|
58
|
+
Examples:
|
|
59
|
+
bithumb trade get --uuid abc-123
|
|
60
|
+
bithumb trade get --client-order-id my-order-001
|
|
61
|
+
`;
|
|
62
|
+
var PLACE_HELP = `
|
|
63
|
+
Usage: bithumb trade place [options]
|
|
64
|
+
|
|
65
|
+
Place a new order on the specified market.
|
|
66
|
+
|
|
67
|
+
Required:
|
|
68
|
+
--market <market> Market identifier (e.g., KRW-BTC)
|
|
69
|
+
--side <side> Order side: bid (buy) / ask (sell)
|
|
70
|
+
--order-type <type> Order type: limit / price / market
|
|
71
|
+
--price <price> Order price (required for limit / price orders)
|
|
72
|
+
--volume <volume> Order volume (required for limit / market orders)
|
|
73
|
+
|
|
74
|
+
Options:
|
|
75
|
+
--client-order-id <id> Client-assigned order ID for idempotency
|
|
76
|
+
--ord-type <type> (deprecated alias of --order-type)
|
|
77
|
+
|
|
78
|
+
Examples:
|
|
79
|
+
bithumb trade place --market KRW-BTC --side bid --order-type limit --price 50000000 --volume 0.01
|
|
80
|
+
bithumb trade place --market KRW-BTC --side ask --order-type market --volume 0.01
|
|
81
|
+
`;
|
|
82
|
+
var CANCEL_HELP = `
|
|
83
|
+
Usage: bithumb trade cancel [options]
|
|
84
|
+
|
|
85
|
+
Cancel an existing order by order ID or client order ID.
|
|
86
|
+
|
|
87
|
+
Required (provide one of):
|
|
88
|
+
--order-id <id> Order ID
|
|
89
|
+
--client-order-id <id> Client-assigned order ID
|
|
90
|
+
|
|
91
|
+
Options:
|
|
92
|
+
(none)
|
|
93
|
+
|
|
94
|
+
Examples:
|
|
95
|
+
bithumb trade cancel --order-id abc-123
|
|
96
|
+
bithumb trade cancel --client-order-id my-order-001
|
|
97
|
+
`;
|
|
98
|
+
var BATCH_PLACE_HELP = `
|
|
99
|
+
Usage: bithumb trade batch-place --file <path>
|
|
100
|
+
|
|
101
|
+
Place multiple orders in a single batch from a JSON file (max 20 per call).
|
|
102
|
+
|
|
103
|
+
Required:
|
|
104
|
+
--file <path> Path to a JSON file containing the orders array
|
|
105
|
+
|
|
106
|
+
Options:
|
|
107
|
+
(none)
|
|
108
|
+
|
|
109
|
+
JSON file format:
|
|
110
|
+
{
|
|
111
|
+
"orders": [
|
|
112
|
+
{ "market": "KRW-BTC", "side": "bid", "order_type": "limit", "price": "50000000", "volume": "0.01" },
|
|
113
|
+
...
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
Each element: market, side (bid/ask), order_type (limit/price/market), price, volume.
|
|
117
|
+
|
|
118
|
+
Examples:
|
|
119
|
+
bithumb trade batch-place --file orders.json
|
|
120
|
+
|
|
121
|
+
Caution:
|
|
122
|
+
- Maximum 20 orders per batch \u2014 requests exceeding this will be rejected.
|
|
123
|
+
- All orders are submitted; partial failures are reported per-order in the response.
|
|
124
|
+
- Validate the JSON file locally before submitting to avoid wasted requests.
|
|
125
|
+
`;
|
|
126
|
+
var BATCH_CANCEL_HELP = `
|
|
127
|
+
Usage: bithumb trade batch-cancel [options]
|
|
128
|
+
|
|
129
|
+
Cancel multiple orders in a single batch (max 30 per call).
|
|
130
|
+
|
|
131
|
+
Required (provide one of):
|
|
132
|
+
--order-ids <ids> Comma-separated list of order IDs
|
|
133
|
+
--client-order-ids <ids> Comma-separated list of client order IDs
|
|
134
|
+
|
|
135
|
+
Options:
|
|
136
|
+
(none)
|
|
137
|
+
|
|
138
|
+
Examples:
|
|
139
|
+
bithumb trade batch-cancel --order-ids abc-123,def-456,ghi-789
|
|
140
|
+
bithumb trade batch-cancel --client-order-ids ord-1,ord-2
|
|
141
|
+
|
|
142
|
+
Caution:
|
|
143
|
+
- Maximum 30 orders per batch \u2014 requests exceeding this will be rejected.
|
|
144
|
+
- Cancellation is best-effort; per-order results are reported in the response.
|
|
145
|
+
- Already-filled or already-cancelled orders are skipped without error.
|
|
146
|
+
`;
|
|
147
|
+
var ACTION_HELP = {
|
|
148
|
+
orders: ORDERS_HELP,
|
|
149
|
+
get: GET_HELP,
|
|
150
|
+
place: PLACE_HELP,
|
|
151
|
+
cancel: CANCEL_HELP,
|
|
152
|
+
"batch-place": BATCH_PLACE_HELP,
|
|
153
|
+
"batch-cancel": BATCH_CANCEL_HELP
|
|
154
|
+
};
|
|
155
|
+
export {
|
|
156
|
+
ACTION_HELP,
|
|
157
|
+
MODULE_HELP
|
|
158
|
+
};
|
|
159
|
+
//# sourceMappingURL=trade-H4G5P2W2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/help/trade.ts"],"sourcesContent":["export const MODULE_HELP = `\nUsage: bithumb trade <command> [options]\n\nCommands:\n orders List orders\n get Get order details\n place Place a new order\n cancel Cancel an order\n batch-place Place multiple orders from JSON file (max 20)\n batch-cancel Cancel multiple orders (max 30)\n\nRun bithumb trade <command> --help for command-specific options.\n\nExamples:\n bithumb trade orders --market KRW-BTC --state wait\n bithumb trade get --uuid abc-123\n bithumb trade place --market KRW-BTC --side bid --order-type limit --price 50000000 --volume 0.01\n bithumb trade cancel --order-id abc-123\n bithumb trade batch-place --file orders.json\n`;\n\nconst ORDERS_HELP = `\nUsage: bithumb trade orders [options]\n\nList orders, optionally filtered by market, state, or identifiers.\n\nRequired:\n (none — all filters are optional)\n\nOptions:\n --market <market> Market identifier (e.g., KRW-BTC)\n --state <state> Filter by state: wait / watch / done / cancel (default: wait)\n --states <states> Filter by multiple states (comma-separated)\n --uuids <uuids> Filter by multiple UUIDs (comma-separated)\n --client-order-ids <ids> Filter by multiple client order IDs (comma-separated)\n --order-by <order> Sort order: asc / desc (default: desc)\n --page <n> Page number (default: 1)\n --limit <n> Results per page (default: 100)\n\nExamples:\n bithumb trade orders --market KRW-BTC --state wait\n bithumb trade orders --state wait --order-by desc --limit 50\n`;\n\nconst GET_HELP = `\nUsage: bithumb trade get [options]\n\nGet details of a single order by UUID or client order ID.\n\nRequired (provide one of):\n --uuid <uuid> Order UUID\n --client-order-id <id> Client-assigned order ID\n\nOptions:\n (none)\n\nExamples:\n bithumb trade get --uuid abc-123\n bithumb trade get --client-order-id my-order-001\n`;\n\nconst PLACE_HELP = `\nUsage: bithumb trade place [options]\n\nPlace a new order on the specified market.\n\nRequired:\n --market <market> Market identifier (e.g., KRW-BTC)\n --side <side> Order side: bid (buy) / ask (sell)\n --order-type <type> Order type: limit / price / market\n --price <price> Order price (required for limit / price orders)\n --volume <volume> Order volume (required for limit / market orders)\n\nOptions:\n --client-order-id <id> Client-assigned order ID for idempotency\n --ord-type <type> (deprecated alias of --order-type)\n\nExamples:\n bithumb trade place --market KRW-BTC --side bid --order-type limit --price 50000000 --volume 0.01\n bithumb trade place --market KRW-BTC --side ask --order-type market --volume 0.01\n`;\n\nconst CANCEL_HELP = `\nUsage: bithumb trade cancel [options]\n\nCancel an existing order by order ID or client order ID.\n\nRequired (provide one of):\n --order-id <id> Order ID\n --client-order-id <id> Client-assigned order ID\n\nOptions:\n (none)\n\nExamples:\n bithumb trade cancel --order-id abc-123\n bithumb trade cancel --client-order-id my-order-001\n`;\n\nconst BATCH_PLACE_HELP = `\nUsage: bithumb trade batch-place --file <path>\n\nPlace multiple orders in a single batch from a JSON file (max 20 per call).\n\nRequired:\n --file <path> Path to a JSON file containing the orders array\n\nOptions:\n (none)\n\nJSON file format:\n {\n \"orders\": [\n { \"market\": \"KRW-BTC\", \"side\": \"bid\", \"order_type\": \"limit\", \"price\": \"50000000\", \"volume\": \"0.01\" },\n ...\n ]\n }\n Each element: market, side (bid/ask), order_type (limit/price/market), price, volume.\n\nExamples:\n bithumb trade batch-place --file orders.json\n\nCaution:\n - Maximum 20 orders per batch — requests exceeding this will be rejected.\n - All orders are submitted; partial failures are reported per-order in the response.\n - Validate the JSON file locally before submitting to avoid wasted requests.\n`;\n\nconst BATCH_CANCEL_HELP = `\nUsage: bithumb trade batch-cancel [options]\n\nCancel multiple orders in a single batch (max 30 per call).\n\nRequired (provide one of):\n --order-ids <ids> Comma-separated list of order IDs\n --client-order-ids <ids> Comma-separated list of client order IDs\n\nOptions:\n (none)\n\nExamples:\n bithumb trade batch-cancel --order-ids abc-123,def-456,ghi-789\n bithumb trade batch-cancel --client-order-ids ord-1,ord-2\n\nCaution:\n - Maximum 30 orders per batch — requests exceeding this will be rejected.\n - Cancellation is best-effort; per-order results are reported in the response.\n - Already-filled or already-cancelled orders are skipped without error.\n`;\n\nexport const ACTION_HELP: Record<string, string> = {\n orders: ORDERS_HELP,\n get: GET_HELP,\n place: PLACE_HELP,\n cancel: CANCEL_HELP,\n \"batch-place\": BATCH_PLACE_HELP,\n \"batch-cancel\": BATCH_CANCEL_HELP,\n};\n"],"mappings":";;;AAAO,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqB3B,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBpB,IAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBjB,IAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBnB,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBpB,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BzB,IAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBnB,IAAM,cAAsC;AAAA,EACjD,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,gBAAgB;AAClB;","names":[]}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
toArray,
|
|
4
|
+
toNumber
|
|
5
|
+
} from "./chunk-AUQ7MB6O.js";
|
|
6
|
+
import {
|
|
7
|
+
errorLine,
|
|
8
|
+
outputLine,
|
|
9
|
+
printJson,
|
|
10
|
+
printKv,
|
|
11
|
+
printTable
|
|
12
|
+
} from "./chunk-FYO6WLZI.js";
|
|
13
|
+
|
|
14
|
+
// src/commands/twap.ts
|
|
15
|
+
async function handleTwapCommand(run, action, v, json) {
|
|
16
|
+
switch (action) {
|
|
17
|
+
case "place":
|
|
18
|
+
return cmdPlace(run, v, json);
|
|
19
|
+
case "orders":
|
|
20
|
+
return cmdOrders(run, v, json);
|
|
21
|
+
case "cancel":
|
|
22
|
+
return cmdCancel(run, v, json);
|
|
23
|
+
default:
|
|
24
|
+
errorLine(`Unknown twap command: ${action}. Run 'bithumb twap --help' for usage.`);
|
|
25
|
+
process.exitCode = 1;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async function cmdPlace(run, v, json) {
|
|
29
|
+
if (!v.market || !v.side || !v.duration || !v.frequency) {
|
|
30
|
+
errorLine("Error: --market, --side, --duration, --frequency required.");
|
|
31
|
+
process.exitCode = 1;
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (v.side === "bid" && !v.price) {
|
|
35
|
+
errorLine("Error: --price is required for bid.");
|
|
36
|
+
errorLine("Example: bithumb twap place --market KRW-BTC --side bid --duration 3600 --frequency 60 --price 50000000");
|
|
37
|
+
process.exitCode = 1;
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (v.side === "ask" && !v.volume) {
|
|
41
|
+
errorLine("Error: --volume is required for ask.");
|
|
42
|
+
errorLine("Example: bithumb twap place --market KRW-BTC --side ask --duration 1800 --frequency 30 --volume 0.5");
|
|
43
|
+
process.exitCode = 1;
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const args = {
|
|
47
|
+
market: v.market,
|
|
48
|
+
side: v.side,
|
|
49
|
+
duration: v.duration,
|
|
50
|
+
frequency: v.frequency
|
|
51
|
+
};
|
|
52
|
+
if (v.price) args.price = v.price;
|
|
53
|
+
if (v.volume) args.volume = v.volume;
|
|
54
|
+
const result = await run("twap_place_order", args);
|
|
55
|
+
const data = result.data;
|
|
56
|
+
if (json) return printJson(data);
|
|
57
|
+
printKv(data);
|
|
58
|
+
}
|
|
59
|
+
async function cmdOrders(run, v, json) {
|
|
60
|
+
const args = {};
|
|
61
|
+
if (v.market) args.market = v.market;
|
|
62
|
+
if (v.state) args.state = v.state;
|
|
63
|
+
if (v.uuids) args.uuids = toArray(v.uuids);
|
|
64
|
+
if (v.nextKey) args.next_key = v.nextKey;
|
|
65
|
+
if (v.limit) args.limit = toNumber(v.limit);
|
|
66
|
+
if (v.orderBy) args.order_by = v.orderBy;
|
|
67
|
+
const result = await run("twap_get_orders", args);
|
|
68
|
+
const envelope = result.data;
|
|
69
|
+
const items = envelope?.orders ?? [];
|
|
70
|
+
if (json) return printJson(envelope);
|
|
71
|
+
if (!items.length) {
|
|
72
|
+
outputLine("No TWAP orders found");
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
printTable(items);
|
|
76
|
+
}
|
|
77
|
+
async function cmdCancel(run, v, json) {
|
|
78
|
+
if (!v.algoOrderId) {
|
|
79
|
+
errorLine("Error: --algo-order-id required. Example: bithumb twap cancel --algo-order-id abc-123");
|
|
80
|
+
process.exitCode = 1;
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const result = await run("twap_cancel_order", { algo_order_id: v.algoOrderId });
|
|
84
|
+
const data = result.data;
|
|
85
|
+
if (json) return printJson(data);
|
|
86
|
+
printKv(data);
|
|
87
|
+
}
|
|
88
|
+
export {
|
|
89
|
+
handleTwapCommand
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=twap-44UCVSIR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/twap.ts"],"sourcesContent":["import type { ToolRunner } from \"@bithumb-official/bithumb-core\";\nimport type { CliValues } from \"../parser.js\";\nimport { toNumber, toArray } from \"../parser.js\";\nimport { outputLine, errorLine, printJson, printTable, printKv } from \"../formatter.js\";\n\nexport async function handleTwapCommand(\n run: ToolRunner,\n action: string,\n v: CliValues,\n json: boolean,\n): Promise<void> {\n switch (action) {\n case \"place\":\n return cmdPlace(run, v, json);\n case \"orders\":\n return cmdOrders(run, v, json);\n case \"cancel\":\n return cmdCancel(run, v, json);\n default:\n errorLine(`Unknown twap command: ${action}. Run 'bithumb twap --help' for usage.`);\n process.exitCode = 1;\n }\n}\n\nasync function cmdPlace(run: ToolRunner, v: CliValues, json: boolean): Promise<void> {\n if (!v.market || !v.side || !v.duration || !v.frequency) {\n errorLine(\"Error: --market, --side, --duration, --frequency required.\");\n process.exitCode = 1;\n return;\n }\n if (v.side === \"bid\" && !v.price) {\n errorLine(\"Error: --price is required for bid.\");\n errorLine(\"Example: bithumb twap place --market KRW-BTC --side bid --duration 3600 --frequency 60 --price 50000000\");\n process.exitCode = 1;\n return;\n }\n if (v.side === \"ask\" && !v.volume) {\n errorLine(\"Error: --volume is required for ask.\");\n errorLine(\"Example: bithumb twap place --market KRW-BTC --side ask --duration 1800 --frequency 30 --volume 0.5\");\n process.exitCode = 1;\n return;\n }\n const args: Record<string, unknown> = {\n market: v.market,\n side: v.side,\n duration: v.duration,\n frequency: v.frequency,\n };\n if (v.price) args.price = v.price;\n if (v.volume) args.volume = v.volume;\n const result = await run(\"twap_place_order\", args);\n const data = result.data as Record<string, unknown>;\n if (json) return printJson(data);\n printKv(data);\n}\n\nasync function cmdOrders(run: ToolRunner, v: CliValues, json: boolean): Promise<void> {\n const args: Record<string, unknown> = {};\n if (v.market) args.market = v.market;\n if (v.state) args.state = v.state;\n if (v.uuids) args.uuids = toArray(v.uuids);\n if (v.nextKey) args.next_key = v.nextKey;\n if (v.limit) args.limit = toNumber(v.limit);\n if (v.orderBy) args.order_by = v.orderBy;\n const result = await run(\"twap_get_orders\", args);\n // /v1/twap 응답은 envelope: { orders: [...], has_next, next_key }\n const envelope = result.data as { orders?: Record<string, unknown>[] } | undefined;\n const items = envelope?.orders ?? [];\n if (json) return printJson(envelope);\n if (!items.length) { outputLine(\"No TWAP orders found\"); return; }\n printTable(items);\n}\n\nasync function cmdCancel(run: ToolRunner, v: CliValues, json: boolean): Promise<void> {\n if (!v.algoOrderId) {\n errorLine(\"Error: --algo-order-id required. Example: bithumb twap cancel --algo-order-id abc-123\");\n process.exitCode = 1;\n return;\n }\n const result = await run(\"twap_cancel_order\", { algo_order_id: v.algoOrderId });\n const data = result.data as Record<string, unknown>;\n if (json) return printJson(data);\n printKv(data);\n}\n"],"mappings":";;;;;;;;;;;;;;AAKA,eAAsB,kBACpB,KACA,QACA,GACA,MACe;AACf,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO,SAAS,KAAK,GAAG,IAAI;AAAA,IAC9B,KAAK;AACH,aAAO,UAAU,KAAK,GAAG,IAAI;AAAA,IAC/B,KAAK;AACH,aAAO,UAAU,KAAK,GAAG,IAAI;AAAA,IAC/B;AACE,gBAAU,yBAAyB,MAAM,wCAAwC;AACjF,cAAQ,WAAW;AAAA,EACvB;AACF;AAEA,eAAe,SAAS,KAAiB,GAAc,MAA8B;AACnF,MAAI,CAAC,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW;AACvD,cAAU,4DAA4D;AACtE,YAAQ,WAAW;AACnB;AAAA,EACF;AACA,MAAI,EAAE,SAAS,SAAS,CAAC,EAAE,OAAO;AAChC,cAAU,qCAAqC;AAC/C,cAAU,yGAAyG;AACnH,YAAQ,WAAW;AACnB;AAAA,EACF;AACA,MAAI,EAAE,SAAS,SAAS,CAAC,EAAE,QAAQ;AACjC,cAAU,sCAAsC;AAChD,cAAU,qGAAqG;AAC/G,YAAQ,WAAW;AACnB;AAAA,EACF;AACA,QAAM,OAAgC;AAAA,IACpC,QAAQ,EAAE;AAAA,IACV,MAAM,EAAE;AAAA,IACR,UAAU,EAAE;AAAA,IACZ,WAAW,EAAE;AAAA,EACf;AACA,MAAI,EAAE,MAAO,MAAK,QAAQ,EAAE;AAC5B,MAAI,EAAE,OAAQ,MAAK,SAAS,EAAE;AAC9B,QAAM,SAAS,MAAM,IAAI,oBAAoB,IAAI;AACjD,QAAM,OAAO,OAAO;AACpB,MAAI,KAAM,QAAO,UAAU,IAAI;AAC/B,UAAQ,IAAI;AACd;AAEA,eAAe,UAAU,KAAiB,GAAc,MAA8B;AACpF,QAAM,OAAgC,CAAC;AACvC,MAAI,EAAE,OAAQ,MAAK,SAAS,EAAE;AAC9B,MAAI,EAAE,MAAO,MAAK,QAAQ,EAAE;AAC5B,MAAI,EAAE,MAAO,MAAK,QAAQ,QAAQ,EAAE,KAAK;AACzC,MAAI,EAAE,QAAS,MAAK,WAAW,EAAE;AACjC,MAAI,EAAE,MAAO,MAAK,QAAQ,SAAS,EAAE,KAAK;AAC1C,MAAI,EAAE,QAAS,MAAK,WAAW,EAAE;AACjC,QAAM,SAAS,MAAM,IAAI,mBAAmB,IAAI;AAEhD,QAAM,WAAW,OAAO;AACxB,QAAM,QAAQ,UAAU,UAAU,CAAC;AACnC,MAAI,KAAM,QAAO,UAAU,QAAQ;AACnC,MAAI,CAAC,MAAM,QAAQ;AAAE,eAAW,sBAAsB;AAAG;AAAA,EAAQ;AACjE,aAAW,KAAK;AAClB;AAEA,eAAe,UAAU,KAAiB,GAAc,MAA8B;AACpF,MAAI,CAAC,EAAE,aAAa;AAClB,cAAU,uFAAuF;AACjG,YAAQ,WAAW;AACnB;AAAA,EACF;AACA,QAAM,SAAS,MAAM,IAAI,qBAAqB,EAAE,eAAe,EAAE,YAAY,CAAC;AAC9E,QAAM,OAAO,OAAO;AACpB,MAAI,KAAM,QAAO,UAAU,IAAI;AAC/B,UAAQ,IAAI;AACd;","names":[]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/help/twap.ts
|
|
4
|
+
var MODULE_HELP = `
|
|
5
|
+
Usage: bithumb twap <command> [options]
|
|
6
|
+
|
|
7
|
+
Commands:
|
|
8
|
+
place Place a TWAP order
|
|
9
|
+
orders List TWAP orders
|
|
10
|
+
cancel Cancel a TWAP order
|
|
11
|
+
|
|
12
|
+
Run bithumb twap <command> --help for command-specific options.
|
|
13
|
+
|
|
14
|
+
Examples:
|
|
15
|
+
bithumb twap place --market KRW-BTC --side bid --duration 3600 --frequency 60 --price 50000000
|
|
16
|
+
bithumb twap orders --market KRW-BTC
|
|
17
|
+
bithumb twap cancel --algo-order-id abc-123
|
|
18
|
+
`;
|
|
19
|
+
var PLACE_HELP = `
|
|
20
|
+
Usage: bithumb twap place [options]
|
|
21
|
+
|
|
22
|
+
Place a TWAP (Time-Weighted Average Price) order, splitting execution over a
|
|
23
|
+
duration at a fixed frequency.
|
|
24
|
+
|
|
25
|
+
Required:
|
|
26
|
+
--market <market> Market identifier (e.g., KRW-BTC)
|
|
27
|
+
--side <side> Order side: bid / ask
|
|
28
|
+
--duration <seconds> Total duration in seconds (300-43200)
|
|
29
|
+
--frequency <seconds> Slice frequency: 5, 15, 20, 30, 60, 120
|
|
30
|
+
|
|
31
|
+
Options:
|
|
32
|
+
--price <price> Order price (required for bid)
|
|
33
|
+
--volume <volume> Order volume (required for ask)
|
|
34
|
+
|
|
35
|
+
Examples:
|
|
36
|
+
bithumb twap place --market KRW-BTC --side bid --duration 3600 --frequency 60 --price 50000000
|
|
37
|
+
bithumb twap place --market KRW-BTC --side ask --duration 1800 --frequency 30 --volume 0.5
|
|
38
|
+
`;
|
|
39
|
+
var ORDERS_HELP = `
|
|
40
|
+
Usage: bithumb twap orders [options]
|
|
41
|
+
|
|
42
|
+
List TWAP orders, optionally filtered by market or state.
|
|
43
|
+
|
|
44
|
+
Required:
|
|
45
|
+
(none)
|
|
46
|
+
|
|
47
|
+
Options:
|
|
48
|
+
--market <market> Market identifier (e.g., KRW-BTC)
|
|
49
|
+
--state <state> Order state: progress / done / cancel (default: progress)
|
|
50
|
+
--uuids <uuids> Filter by TWAP order IDs (comma-separated)
|
|
51
|
+
--order-by <order> Sort order: asc / desc (default: desc)
|
|
52
|
+
--next-key <key> Pagination cursor
|
|
53
|
+
--limit <n> Results per page (default: 100)
|
|
54
|
+
|
|
55
|
+
Examples:
|
|
56
|
+
bithumb twap orders --market KRW-BTC
|
|
57
|
+
bithumb twap orders --state done --order-by desc --limit 20
|
|
58
|
+
`;
|
|
59
|
+
var CANCEL_HELP = `
|
|
60
|
+
Usage: bithumb twap cancel [options]
|
|
61
|
+
|
|
62
|
+
Cancel a TWAP order by its algo-order-id.
|
|
63
|
+
|
|
64
|
+
Required:
|
|
65
|
+
--algo-order-id <id> TWAP order ID
|
|
66
|
+
|
|
67
|
+
Options:
|
|
68
|
+
(none)
|
|
69
|
+
|
|
70
|
+
Examples:
|
|
71
|
+
bithumb twap cancel --algo-order-id abc-123
|
|
72
|
+
`;
|
|
73
|
+
var ACTION_HELP = {
|
|
74
|
+
place: PLACE_HELP,
|
|
75
|
+
orders: ORDERS_HELP,
|
|
76
|
+
cancel: CANCEL_HELP
|
|
77
|
+
};
|
|
78
|
+
export {
|
|
79
|
+
ACTION_HELP,
|
|
80
|
+
MODULE_HELP
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=twap-4LRBUMTG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/help/twap.ts"],"sourcesContent":["export const MODULE_HELP = `\nUsage: bithumb twap <command> [options]\n\nCommands:\n place Place a TWAP order\n orders List TWAP orders\n cancel Cancel a TWAP order\n\nRun bithumb twap <command> --help for command-specific options.\n\nExamples:\n bithumb twap place --market KRW-BTC --side bid --duration 3600 --frequency 60 --price 50000000\n bithumb twap orders --market KRW-BTC\n bithumb twap cancel --algo-order-id abc-123\n`;\n\nconst PLACE_HELP = `\nUsage: bithumb twap place [options]\n\nPlace a TWAP (Time-Weighted Average Price) order, splitting execution over a\nduration at a fixed frequency.\n\nRequired:\n --market <market> Market identifier (e.g., KRW-BTC)\n --side <side> Order side: bid / ask\n --duration <seconds> Total duration in seconds (300-43200)\n --frequency <seconds> Slice frequency: 5, 15, 20, 30, 60, 120\n\nOptions:\n --price <price> Order price (required for bid)\n --volume <volume> Order volume (required for ask)\n\nExamples:\n bithumb twap place --market KRW-BTC --side bid --duration 3600 --frequency 60 --price 50000000\n bithumb twap place --market KRW-BTC --side ask --duration 1800 --frequency 30 --volume 0.5\n`;\n\nconst ORDERS_HELP = `\nUsage: bithumb twap orders [options]\n\nList TWAP orders, optionally filtered by market or state.\n\nRequired:\n (none)\n\nOptions:\n --market <market> Market identifier (e.g., KRW-BTC)\n --state <state> Order state: progress / done / cancel (default: progress)\n --uuids <uuids> Filter by TWAP order IDs (comma-separated)\n --order-by <order> Sort order: asc / desc (default: desc)\n --next-key <key> Pagination cursor\n --limit <n> Results per page (default: 100)\n\nExamples:\n bithumb twap orders --market KRW-BTC\n bithumb twap orders --state done --order-by desc --limit 20\n`;\n\nconst CANCEL_HELP = `\nUsage: bithumb twap cancel [options]\n\nCancel a TWAP order by its algo-order-id.\n\nRequired:\n --algo-order-id <id> TWAP order ID\n\nOptions:\n (none)\n\nExamples:\n bithumb twap cancel --algo-order-id abc-123\n`;\n\nexport const ACTION_HELP: Record<string, string> = {\n place: PLACE_HELP,\n orders: ORDERS_HELP,\n cancel: CANCEL_HELP,\n};\n"],"mappings":";;;AAAO,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgB3B,IAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBnB,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBpB,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeb,IAAM,cAAsC;AAAA,EACjD,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AACV;","names":[]}
|