@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.
Files changed (44) hide show
  1. package/dist/account-UVDNQRB7.js +78 -0
  2. package/dist/account-UVDNQRB7.js.map +1 -0
  3. package/dist/account-YNPFEHQT.js +90 -0
  4. package/dist/account-YNPFEHQT.js.map +1 -0
  5. package/dist/chunk-AUQ7MB6O.js +143 -0
  6. package/dist/chunk-AUQ7MB6O.js.map +1 -0
  7. package/dist/chunk-FYO6WLZI.js +72 -0
  8. package/dist/chunk-FYO6WLZI.js.map +1 -0
  9. package/dist/chunk-YXIFBNEQ.js +3488 -0
  10. package/dist/chunk-YXIFBNEQ.js.map +1 -0
  11. package/dist/config-2P3Y3TQH.js +182 -0
  12. package/dist/config-2P3Y3TQH.js.map +1 -0
  13. package/dist/config-6BIS2PLC.js +154 -0
  14. package/dist/config-6BIS2PLC.js.map +1 -0
  15. package/dist/deposit-HNUSMKX5.js +161 -0
  16. package/dist/deposit-HNUSMKX5.js.map +1 -0
  17. package/dist/deposit-TCMLJ7MI.js +169 -0
  18. package/dist/deposit-TCMLJ7MI.js.map +1 -0
  19. package/dist/index.d.ts +2 -0
  20. package/dist/index.js +211 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/market-EEF3KI4T.js +219 -0
  23. package/dist/market-EEF3KI4T.js.map +1 -0
  24. package/dist/market-GLU62BWO.js +304 -0
  25. package/dist/market-GLU62BWO.js.map +1 -0
  26. package/dist/setup-LAAVO63H.js +21 -0
  27. package/dist/setup-LAAVO63H.js.map +1 -0
  28. package/dist/system-BRZY7PTZ.js +98 -0
  29. package/dist/system-BRZY7PTZ.js.map +1 -0
  30. package/dist/system-XRZ2KHXL.js +69 -0
  31. package/dist/system-XRZ2KHXL.js.map +1 -0
  32. package/dist/trade-FERR47DJ.js +233 -0
  33. package/dist/trade-FERR47DJ.js.map +1 -0
  34. package/dist/trade-H4G5P2W2.js +159 -0
  35. package/dist/trade-H4G5P2W2.js.map +1 -0
  36. package/dist/twap-44UCVSIR.js +91 -0
  37. package/dist/twap-44UCVSIR.js.map +1 -0
  38. package/dist/twap-4LRBUMTG.js +82 -0
  39. package/dist/twap-4LRBUMTG.js.map +1 -0
  40. package/dist/withdraw-IRMICBD2.js +203 -0
  41. package/dist/withdraw-IRMICBD2.js.map +1 -0
  42. package/dist/withdraw-TLGVRUBS.js +161 -0
  43. package/dist/withdraw-TLGVRUBS.js.map +1 -0
  44. 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":[]}