@bithumb-official/bithumb-cli 0.1.16 → 0.1.17

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 (52) hide show
  1. package/dist/{chunk-AUQ7MB6O.js → chunk-3VWN4HON.js} +35 -8
  2. package/dist/chunk-3VWN4HON.js.map +1 -0
  3. package/dist/{chunk-YXIFBNEQ.js → chunk-HT2P7KTV.js} +67 -994
  4. package/dist/chunk-HT2P7KTV.js.map +1 -0
  5. package/dist/{deposit-HNUSMKX5.js → deposit-KAUQEY7H.js} +6 -6
  6. package/dist/deposit-KAUQEY7H.js.map +1 -0
  7. package/dist/{deposit-TCMLJ7MI.js → deposit-L3BBLG4X.js} +21 -13
  8. package/dist/deposit-L3BBLG4X.js.map +1 -0
  9. package/dist/index.d.ts +2 -1
  10. package/dist/index.js +99 -60
  11. package/dist/index.js.map +1 -1
  12. package/dist/{market-GLU62BWO.js → market-4IEKEJ4N.js} +8 -7
  13. package/dist/market-4IEKEJ4N.js.map +1 -0
  14. package/dist/{market-EEF3KI4T.js → market-C5ESTU3F.js} +6 -6
  15. package/dist/market-C5ESTU3F.js.map +1 -0
  16. package/dist/{setup-LAAVO63H.js → setup-NC3QC63P.js} +2 -3
  17. package/dist/setup-NC3QC63P.js.map +1 -0
  18. package/dist/{system-XRZ2KHXL.js → system-RVBNM3IX.js} +2 -2
  19. package/dist/{system-BRZY7PTZ.js → system-XK2EF5SQ.js} +3 -7
  20. package/dist/system-XK2EF5SQ.js.map +1 -0
  21. package/dist/{trade-H4G5P2W2.js → trade-RKL7RNME.js} +18 -8
  22. package/dist/trade-RKL7RNME.js.map +1 -0
  23. package/dist/{trade-FERR47DJ.js → trade-X5VBEQJE.js} +21 -10
  24. package/dist/trade-X5VBEQJE.js.map +1 -0
  25. package/dist/{twap-44UCVSIR.js → twap-FQJVPUWH.js} +12 -4
  26. package/dist/twap-FQJVPUWH.js.map +1 -0
  27. package/dist/{twap-4LRBUMTG.js → twap-MZ7ALPBC.js} +3 -3
  28. package/dist/twap-MZ7ALPBC.js.map +1 -0
  29. package/dist/{withdraw-TLGVRUBS.js → withdraw-65X3DXR5.js} +17 -9
  30. package/dist/withdraw-65X3DXR5.js.map +1 -0
  31. package/dist/{withdraw-IRMICBD2.js → withdraw-LDERU7T7.js} +6 -6
  32. package/dist/withdraw-LDERU7T7.js.map +1 -0
  33. package/package.json +1 -1
  34. package/dist/chunk-AUQ7MB6O.js.map +0 -1
  35. package/dist/chunk-YXIFBNEQ.js.map +0 -1
  36. package/dist/config-2P3Y3TQH.js +0 -182
  37. package/dist/config-2P3Y3TQH.js.map +0 -1
  38. package/dist/config-6BIS2PLC.js +0 -154
  39. package/dist/config-6BIS2PLC.js.map +0 -1
  40. package/dist/deposit-HNUSMKX5.js.map +0 -1
  41. package/dist/deposit-TCMLJ7MI.js.map +0 -1
  42. package/dist/market-EEF3KI4T.js.map +0 -1
  43. package/dist/market-GLU62BWO.js.map +0 -1
  44. package/dist/setup-LAAVO63H.js.map +0 -1
  45. package/dist/system-BRZY7PTZ.js.map +0 -1
  46. package/dist/trade-FERR47DJ.js.map +0 -1
  47. package/dist/trade-H4G5P2W2.js.map +0 -1
  48. package/dist/twap-44UCVSIR.js.map +0 -1
  49. package/dist/twap-4LRBUMTG.js.map +0 -1
  50. package/dist/withdraw-IRMICBD2.js.map +0 -1
  51. package/dist/withdraw-TLGVRUBS.js.map +0 -1
  52. /package/dist/{system-XRZ2KHXL.js.map → system-RVBNM3IX.js.map} +0 -0
@@ -16,7 +16,7 @@ Run bithumb trade <command> --help for command-specific options.
16
16
 
17
17
  Examples:
18
18
  bithumb trade orders --market KRW-BTC --state wait
19
- bithumb trade get --uuid abc-123
19
+ bithumb trade get --order-id abc-123
20
20
  bithumb trade place --market KRW-BTC --side bid --order-type limit --price 50000000 --volume 0.01
21
21
  bithumb trade cancel --order-id abc-123
22
22
  bithumb trade batch-place --file orders.json
@@ -33,30 +33,39 @@ Options:
33
33
  --market <market> Market identifier (e.g., KRW-BTC)
34
34
  --state <state> Filter by state: wait / watch / done / cancel (default: wait)
35
35
  --states <states> Filter by multiple states (comma-separated)
36
- --uuids <uuids> Filter by multiple UUIDs (comma-separated)
36
+ --order-ids <ids> Filter by multiple order IDs (comma-separated)
37
37
  --client-order-ids <ids> Filter by multiple client order IDs (comma-separated)
38
38
  --order-by <order> Sort order: asc / desc (default: desc)
39
39
  --page <n> Page number (default: 1)
40
40
  --limit <n> Results per page (default: 100)
41
41
 
42
+ Note:
43
+ The server defaults to state=wait when no state is given, so --order-ids /
44
+ --client-order-ids lookups of done or cancelled orders return empty unless
45
+ you widen the state. Pass --states wait,done,cancel to include them.
46
+ The auto-order state (watch) cannot be mixed with wait/done/cancel; query it
47
+ separately with --state watch. --state and --states cannot be used together.
48
+
42
49
  Examples:
43
50
  bithumb trade orders --market KRW-BTC --state wait
44
- bithumb trade orders --state wait --order-by desc --limit 50
51
+ bithumb trade orders --state done --order-by desc --limit 50
52
+ bithumb trade orders --order-ids id1,id2 --states wait,done,cancel
53
+ bithumb trade orders --state watch
45
54
  `;
46
55
  var GET_HELP = `
47
56
  Usage: bithumb trade get [options]
48
57
 
49
- Get details of a single order by UUID or client order ID.
58
+ Get details of a single order by order ID or client order ID.
50
59
 
51
60
  Required (provide one of):
52
- --uuid <uuid> Order UUID
61
+ --order-id <id> Order ID
53
62
  --client-order-id <id> Client-assigned order ID
54
63
 
55
64
  Options:
56
65
  (none)
57
66
 
58
67
  Examples:
59
- bithumb trade get --uuid abc-123
68
+ bithumb trade get --order-id abc-123
60
69
  bithumb trade get --client-order-id my-order-001
61
70
  `;
62
71
  var PLACE_HELP = `
@@ -108,12 +117,13 @@ Options:
108
117
 
109
118
  JSON file format:
110
119
  {
111
- "orders": [
120
+ "batch_orders": [
112
121
  { "market": "KRW-BTC", "side": "bid", "order_type": "limit", "price": "50000000", "volume": "0.01" },
113
122
  ...
114
123
  ]
115
124
  }
116
125
  Each element: market, side (bid/ask), order_type (limit/price/market), price, volume.
126
+ A bare JSON array is also accepted.
117
127
 
118
128
  Examples:
119
129
  bithumb trade batch-place --file orders.json
@@ -156,4 +166,4 @@ export {
156
166
  ACTION_HELP,
157
167
  MODULE_HELP
158
168
  };
159
- //# sourceMappingURL=trade-H4G5P2W2.js.map
169
+ //# sourceMappingURL=trade-RKL7RNME.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 --order-id 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 --order-ids <ids> Filter by multiple order IDs (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\nNote:\n The server defaults to state=wait when no state is given, so --order-ids /\n --client-order-ids lookups of done or cancelled orders return empty unless\n you widen the state. Pass --states wait,done,cancel to include them.\n The auto-order state (watch) cannot be mixed with wait/done/cancel; query it\n separately with --state watch. --state and --states cannot be used together.\n\nExamples:\n bithumb trade orders --market KRW-BTC --state wait\n bithumb trade orders --state done --order-by desc --limit 50\n bithumb trade orders --order-ids id1,id2 --states wait,done,cancel\n bithumb trade orders --state watch\n`;\n\nconst GET_HELP = `\nUsage: bithumb trade get [options]\n\nGet details of a single 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 get --order-id 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 \"batch_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 A bare JSON array is also accepted.\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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCpB,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;AAAA;AA8BzB,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":[]}
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  toArray,
4
4
  toNumber
5
- } from "./chunk-AUQ7MB6O.js";
5
+ } from "./chunk-3VWN4HON.js";
6
6
  import {
7
7
  errorLine,
8
8
  outputLine,
@@ -20,7 +20,7 @@ async function handleTradeCommand(run, action, v, json) {
20
20
  market: v.market,
21
21
  state: v.state,
22
22
  states: toArray(v.states),
23
- uuids: toArray(v.uuids),
23
+ orderIds: toArray(v.orderIds),
24
24
  clientOrderIds: toArray(v.clientOrderIds),
25
25
  orderBy: v.orderBy,
26
26
  page: toNumber(v.page),
@@ -28,7 +28,7 @@ async function handleTradeCommand(run, action, v, json) {
28
28
  json
29
29
  });
30
30
  case "get":
31
- return cmdGet(run, { uuid: v.uuid, clientOrderId: v.clientOrderId, json });
31
+ return cmdGet(run, { orderId: v.orderId, clientOrderId: v.clientOrderId, json });
32
32
  case "place":
33
33
  if (v.ordTypeConflict) {
34
34
  errorLine(
@@ -65,7 +65,7 @@ async function cmdOrders(run, opts) {
65
65
  if (opts.market) args.market = opts.market;
66
66
  if (opts.state) args.state = opts.state;
67
67
  if (opts.states) args.states = opts.states;
68
- if (opts.uuids) args.uuids = opts.uuids;
68
+ if (opts.orderIds) args.order_ids = opts.orderIds;
69
69
  if (opts.clientOrderIds) args.client_order_ids = opts.clientOrderIds;
70
70
  if (opts.orderBy) args.order_by = opts.orderBy;
71
71
  if (opts.page !== void 0) args.page = opts.page;
@@ -78,7 +78,9 @@ async function cmdOrders(run, opts) {
78
78
  return;
79
79
  }
80
80
  printTable(items.map((o) => ({
81
- uuid: o["uuid"],
81
+ // Display the identifier as `order_id` for consistency with the input flag;
82
+ // the API response carries it in the legacy `uuid` field.
83
+ order_id: o["uuid"],
82
84
  market: o["market"],
83
85
  side: o["side"],
84
86
  ord_type: o["ord_type"],
@@ -89,18 +91,27 @@ async function cmdOrders(run, opts) {
89
91
  })));
90
92
  }
91
93
  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
+ if (!opts.orderId && !opts.clientOrderId) {
95
+ errorLine("Error: --order-id or --client-order-id is required. Example: bithumb trade get --order-id abc-123");
94
96
  process.exitCode = 1;
95
97
  return;
96
98
  }
97
99
  const args = {};
98
- if (opts.uuid) args.uuid = opts.uuid;
100
+ if (opts.orderId) args.order_id = opts.orderId;
99
101
  if (opts.clientOrderId) args.client_order_id = opts.clientOrderId;
100
102
  const result = await run("trade_get_order", args);
101
103
  const data = result.data;
102
104
  if (opts.json) return printJson(data);
103
- printKv(data);
105
+ const display = renameKey(data, "uuid", "order_id");
106
+ printKv(display);
107
+ }
108
+ function renameKey(obj, from, to) {
109
+ if (!(from in obj)) return obj;
110
+ const out = {};
111
+ for (const [k, v] of Object.entries(obj)) {
112
+ out[k === from ? to : k] = v;
113
+ }
114
+ return out;
104
115
  }
105
116
  async function cmdPlace(run, opts) {
106
117
  if (!opts.market || !opts.side || !opts.ordType) {
@@ -230,4 +241,4 @@ async function cmdBatchCancel(run, v, json) {
230
241
  export {
231
242
  handleTradeCommand
232
243
  };
233
- //# sourceMappingURL=trade-FERR47DJ.js.map
244
+ //# sourceMappingURL=trade-X5VBEQJE.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 orderIds: toArray(v.orderIds),\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, { orderId: v.orderId, 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 orderIds?: 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.orderIds) args.order_ids = opts.orderIds;\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 // Display the identifier as `order_id` for consistency with the input flag;\n // the API response carries it in the legacy `uuid` field.\n order_id: 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: { 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 get --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_get_order\", args);\n const data = result.data as Record<string, unknown>;\n if (opts.json) return printJson(data);\n // Relabel the response's legacy `uuid` field as `order_id` for display\n // consistency with the input flag. Raw JSON (--json) keeps the original field.\n const display = renameKey(data, \"uuid\", \"order_id\");\n printKv(display);\n}\n\n// Return a shallow copy of `obj` with key `from` renamed to `to`, preserving\n// insertion order. If `from` is absent, returns the object unchanged.\nfunction renameKey(\n obj: Record<string, unknown>,\n from: string,\n to: string,\n): Record<string, unknown> {\n if (!(from in obj)) return obj;\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n out[k === from ? to : k] = v;\n }\n return out;\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":[]}
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  toArray,
4
4
  toNumber
5
- } from "./chunk-AUQ7MB6O.js";
5
+ } from "./chunk-3VWN4HON.js";
6
6
  import {
7
7
  errorLine,
8
8
  outputLine,
@@ -60,7 +60,7 @@ async function cmdOrders(run, v, json) {
60
60
  const args = {};
61
61
  if (v.market) args.market = v.market;
62
62
  if (v.state) args.state = v.state;
63
- if (v.uuids) args.uuids = toArray(v.uuids);
63
+ if (v.orderIds) args.order_ids = toArray(v.orderIds);
64
64
  if (v.nextKey) args.next_key = v.nextKey;
65
65
  if (v.limit) args.limit = toNumber(v.limit);
66
66
  if (v.orderBy) args.order_by = v.orderBy;
@@ -72,7 +72,15 @@ async function cmdOrders(run, v, json) {
72
72
  outputLine("No TWAP orders found");
73
73
  return;
74
74
  }
75
- printTable(items);
75
+ printTable(items.map((o) => renameKey(o, "uuid", "order_id")));
76
+ }
77
+ function renameKey(obj, from, to) {
78
+ if (!(from in obj)) return obj;
79
+ const out = {};
80
+ for (const [k, v] of Object.entries(obj)) {
81
+ out[k === from ? to : k] = v;
82
+ }
83
+ return out;
76
84
  }
77
85
  async function cmdCancel(run, v, json) {
78
86
  if (!v.algoOrderId) {
@@ -88,4 +96,4 @@ async function cmdCancel(run, v, json) {
88
96
  export {
89
97
  handleTwapCommand
90
98
  };
91
- //# sourceMappingURL=twap-44UCVSIR.js.map
99
+ //# sourceMappingURL=twap-FQJVPUWH.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.orderIds) args.order_ids = toArray(v.orderIds);\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 // Relabel each row's legacy `uuid` field as `order_id` for display\n // consistency with the input flag. Raw JSON (--json) keeps the original field.\n printTable(items.map((o) => renameKey(o, \"uuid\", \"order_id\")));\n}\n\n// Return a shallow copy of `obj` with key `from` renamed to `to`, preserving\n// insertion order. If `from` is absent, returns the object unchanged.\nfunction renameKey(\n obj: Record<string, unknown>,\n from: string,\n to: string,\n): Record<string, unknown> {\n if (!(from in obj)) return obj;\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n out[k === from ? to : k] = v;\n }\n return out;\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,SAAU,MAAK,YAAY,QAAQ,EAAE,QAAQ;AACnD,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;AAGjE,aAAW,MAAM,IAAI,CAAC,MAAM,UAAU,GAAG,QAAQ,UAAU,CAAC,CAAC;AAC/D;AAIA,SAAS,UACP,KACA,MACA,IACyB;AACzB,MAAI,EAAE,QAAQ,KAAM,QAAO;AAC3B,QAAM,MAA+B,CAAC;AACtC,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,GAAG,GAAG;AACxC,QAAI,MAAM,OAAO,KAAK,CAAC,IAAI;AAAA,EAC7B;AACA,SAAO;AACT;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":[]}
@@ -26,7 +26,7 @@ Required:
26
26
  --market <market> Market identifier (e.g., KRW-BTC)
27
27
  --side <side> Order side: bid / ask
28
28
  --duration <seconds> Total duration in seconds (300-43200)
29
- --frequency <seconds> Slice frequency: 5, 15, 20, 30, 60, 120
29
+ --frequency <seconds> Slice frequency: 15, 20, 30, 60, 120
30
30
 
31
31
  Options:
32
32
  --price <price> Order price (required for bid)
@@ -47,7 +47,7 @@ Required:
47
47
  Options:
48
48
  --market <market> Market identifier (e.g., KRW-BTC)
49
49
  --state <state> Order state: progress / done / cancel (default: progress)
50
- --uuids <uuids> Filter by TWAP order IDs (comma-separated)
50
+ --order-ids <ids> Filter by TWAP order IDs (comma-separated)
51
51
  --order-by <order> Sort order: asc / desc (default: desc)
52
52
  --next-key <key> Pagination cursor
53
53
  --limit <n> Results per page (default: 100)
@@ -79,4 +79,4 @@ export {
79
79
  ACTION_HELP,
80
80
  MODULE_HELP
81
81
  };
82
- //# sourceMappingURL=twap-4LRBUMTG.js.map
82
+ //# sourceMappingURL=twap-MZ7ALPBC.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: 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 --order-ids <ids> 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":[]}
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  toArray,
4
4
  toNumber
5
- } from "./chunk-AUQ7MB6O.js";
5
+ } from "./chunk-3VWN4HON.js";
6
6
  import {
7
7
  errorLine,
8
8
  outputLine,
@@ -48,23 +48,23 @@ async function cmdChance(run, v, json) {
48
48
  }
49
49
  async function cmdGet(run, v, json) {
50
50
  if (!v.currency) {
51
- errorLine("Error: --currency required. Example: bithumb withdraw get --currency BTC --uuid abc-123");
51
+ errorLine("Error: --currency required. Example: bithumb withdraw get --currency BTC --withdrawal-id abc-123");
52
52
  process.exitCode = 1;
53
53
  return;
54
54
  }
55
55
  const args = { currency: v.currency };
56
- if (v.uuid) args.uuid = v.uuid;
56
+ if (v.withdrawalId) args.withdrawal_id = v.withdrawalId;
57
57
  if (v.txids) args.txid = v.txids;
58
58
  const result = await run("withdraw_get", args);
59
59
  const data = result.data;
60
60
  if (json) return printJson(data);
61
- printKv(data);
61
+ printKv(renameKey(data, "uuid", "withdrawal_id"));
62
62
  }
63
63
  async function cmdList(run, v, json) {
64
64
  const args = {};
65
65
  if (v.currency) args.currency = v.currency;
66
66
  if (v.state) args.state = v.state;
67
- if (v.uuids) args.uuids = toArray(v.uuids);
67
+ if (v.withdrawalIds) args.withdrawal_ids = toArray(v.withdrawalIds);
68
68
  if (v.txids) args.txids = toArray(v.txids);
69
69
  if (v.limit) args.limit = toNumber(v.limit);
70
70
  if (v.page) args.page = toNumber(v.page);
@@ -76,12 +76,12 @@ async function cmdList(run, v, json) {
76
76
  outputLine("No withdrawals found");
77
77
  return;
78
78
  }
79
- printTable(items);
79
+ printTable(items.map((o) => renameKey(o, "uuid", "withdrawal_id")));
80
80
  }
81
81
  async function cmdListKrw(run, v, json) {
82
82
  const args = {};
83
83
  if (v.state) args.state = v.state;
84
- if (v.uuids) args.uuids = toArray(v.uuids);
84
+ if (v.withdrawalIds) args.withdrawal_ids = toArray(v.withdrawalIds);
85
85
  if (v.txids) args.txids = toArray(v.txids);
86
86
  if (v.limit) args.limit = toNumber(v.limit);
87
87
  if (v.page) args.page = toNumber(v.page);
@@ -93,7 +93,15 @@ async function cmdListKrw(run, v, json) {
93
93
  outputLine("No KRW withdrawals found");
94
94
  return;
95
95
  }
96
- printTable(items);
96
+ printTable(items.map((o) => renameKey(o, "uuid", "withdrawal_id")));
97
+ }
98
+ function renameKey(obj, from, to) {
99
+ if (!(from in obj)) return obj;
100
+ const out = {};
101
+ for (const [k, val] of Object.entries(obj)) {
102
+ out[k === from ? to : k] = val;
103
+ }
104
+ return out;
97
105
  }
98
106
  async function cmdCoin(run, v, json) {
99
107
  if (!v.currency || !v.netType || !v.amount || !v.address) {
@@ -158,4 +166,4 @@ async function cmdAddresses(run, json) {
158
166
  export {
159
167
  handleWithdrawCommand
160
168
  };
161
- //# sourceMappingURL=withdraw-TLGVRUBS.js.map
169
+ //# sourceMappingURL=withdraw-65X3DXR5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/withdraw.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 handleWithdrawCommand(\n run: ToolRunner,\n action: string,\n v: CliValues,\n json: boolean,\n): Promise<void> {\n switch (action) {\n case \"chance\":\n return cmdChance(run, v, json);\n case \"get\":\n return cmdGet(run, v, json);\n case \"list\":\n return cmdList(run, v, json);\n case \"list-krw\":\n return cmdListKrw(run, v, json);\n case \"coin\":\n return cmdCoin(run, v, json);\n case \"krw\":\n return cmdKrw(run, v, json);\n case \"cancel\":\n return cmdCancel(run, v, json);\n case \"addresses\":\n return cmdAddresses(run, json);\n default:\n errorLine(`Unknown withdraw command: ${action}. Run 'bithumb withdraw --help' for usage.`);\n process.exitCode = 1;\n }\n}\n\nasync function cmdChance(run: ToolRunner, v: CliValues, json: boolean): Promise<void> {\n if (!v.currency || !v.netType) {\n errorLine(\"Error: --currency and --net-type required. Example: bithumb withdraw chance --currency BTC --net-type BTC\");\n process.exitCode = 1;\n return;\n }\n const result = await run(\"withdraw_get_chance\", { currency: v.currency, net_type: v.netType });\n const data = result.data as Record<string, unknown>;\n if (json) return printJson(data);\n printKv(data);\n}\n\nasync function cmdGet(run: ToolRunner, v: CliValues, json: boolean): Promise<void> {\n if (!v.currency) {\n errorLine(\"Error: --currency required. Example: bithumb withdraw get --currency BTC --withdrawal-id abc-123\");\n process.exitCode = 1;\n return;\n }\n const args: Record<string, unknown> = { currency: v.currency };\n if (v.withdrawalId) args.withdrawal_id = v.withdrawalId;\n if (v.txids) args.txid = v.txids;\n const result = await run(\"withdraw_get\", args);\n const data = result.data as Record<string, unknown>;\n if (json) return printJson(data);\n // Relabel the response's legacy `uuid` field as `withdrawal_id` for display\n // consistency with the input flag. Raw JSON (--json) keeps the original field.\n printKv(renameKey(data, \"uuid\", \"withdrawal_id\"));\n}\n\nasync function cmdList(run: ToolRunner, v: CliValues, json: boolean): Promise<void> {\n const args: Record<string, unknown> = {};\n if (v.currency) args.currency = v.currency;\n if (v.state) args.state = v.state;\n if (v.withdrawalIds) args.withdrawal_ids = toArray(v.withdrawalIds);\n if (v.txids) args.txids = toArray(v.txids);\n if (v.limit) args.limit = toNumber(v.limit);\n if (v.page) args.page = toNumber(v.page);\n if (v.orderBy) args.order_by = v.orderBy;\n const result = await run(\"withdraw_get_list\", args);\n const items = result.data as Record<string, unknown>[];\n if (json) return printJson(items);\n if (!items?.length) { outputLine(\"No withdrawals found\"); return; }\n printTable(items.map((o) => renameKey(o, \"uuid\", \"withdrawal_id\")));\n}\n\nasync function cmdListKrw(run: ToolRunner, v: CliValues, json: boolean): Promise<void> {\n const args: Record<string, unknown> = {};\n if (v.state) args.state = v.state;\n if (v.withdrawalIds) args.withdrawal_ids = toArray(v.withdrawalIds);\n if (v.txids) args.txids = toArray(v.txids);\n if (v.limit) args.limit = toNumber(v.limit);\n if (v.page) args.page = toNumber(v.page);\n if (v.orderBy) args.order_by = v.orderBy;\n const result = await run(\"withdraw_get_list_krw\", args);\n const items = result.data as Record<string, unknown>[];\n if (json) return printJson(items);\n if (!items?.length) { outputLine(\"No KRW withdrawals found\"); return; }\n printTable(items.map((o) => renameKey(o, \"uuid\", \"withdrawal_id\")));\n}\n\n// Return a shallow copy of `obj` with key `from` renamed to `to`, preserving\n// insertion order. If `from` is absent, returns the object unchanged.\nfunction renameKey(\n obj: Record<string, unknown>,\n from: string,\n to: string,\n): Record<string, unknown> {\n if (!(from in obj)) return obj;\n const out: Record<string, unknown> = {};\n for (const [k, val] of Object.entries(obj)) {\n out[k === from ? to : k] = val;\n }\n return out;\n}\n\nasync function cmdCoin(run: ToolRunner, v: CliValues, json: boolean): Promise<void> {\n if (!v.currency || !v.netType || !v.amount || !v.address) {\n errorLine(\"Error: --currency, --net-type, --amount, --address required.\");\n errorLine(\"CAUTION: This will initiate a real cryptocurrency withdrawal!\");\n process.exitCode = 1;\n return;\n }\n outputLine(\"WARNING: Initiating cryptocurrency withdrawal. This action is irreversible.\");\n const args: Record<string, unknown> = {\n currency: v.currency,\n net_type: v.netType,\n amount: v.amount,\n address: v.address,\n };\n if (v.secondaryAddress) args.secondary_address = v.secondaryAddress;\n if (v.exchangeName) args.exchange_name = v.exchangeName;\n if (v.receiverType) args.receiver_type = v.receiverType;\n if (v.receiverKoName) args.receiver_ko_name = v.receiverKoName;\n if (v.receiverEnName) args.receiver_en_name = v.receiverEnName;\n if (v.receiverCorpKoName) args.receiver_corp_ko_name = v.receiverCorpKoName;\n if (v.receiverCorpEnName) args.receiver_corp_en_name = v.receiverCorpEnName;\n const result = await run(\"withdraw_coin\", args);\n const data = result.data as Record<string, unknown>;\n if (json) return printJson(data);\n printKv(data);\n}\n\nasync function cmdKrw(run: ToolRunner, v: CliValues, json: boolean): Promise<void> {\n if (!v.amount || !v.twoFactorType) {\n errorLine(\"Error: --amount and --two-factor-type required.\");\n errorLine(\"CAUTION: This will initiate a real KRW withdrawal!\");\n process.exitCode = 1;\n return;\n }\n outputLine(\"WARNING: Initiating KRW withdrawal. This action is irreversible.\");\n const result = await run(\"withdraw_krw\", { amount: v.amount, two_factor_type: v.twoFactorType });\n const data = result.data as Record<string, unknown>;\n if (json) return printJson(data);\n printKv(data);\n}\n\nasync function cmdCancel(run: ToolRunner, v: CliValues, json: boolean): Promise<void> {\n if (!v.withdrawalId) {\n errorLine(\"Error: --withdrawal-id required. Example: bithumb withdraw cancel --withdrawal-id abc-123\");\n process.exitCode = 1;\n return;\n }\n const result = await run(\"withdraw_cancel_coin\", { withdrawal_id: v.withdrawalId });\n const data = result.data as Record<string, unknown>;\n if (json) return printJson(data);\n printKv(data);\n}\n\nasync function cmdAddresses(run: ToolRunner, json: boolean): Promise<void> {\n const result = await run(\"withdraw_get_addresses\", {});\n const items = result.data as Record<string, unknown>[];\n if (json) return printJson(items);\n if (!items?.length) { outputLine(\"No withdrawal addresses found\"); return; }\n printTable(items);\n}\n"],"mappings":";;;;;;;;;;;;;;AAKA,eAAsB,sBACpB,KACA,QACA,GACA,MACe;AACf,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO,UAAU,KAAK,GAAG,IAAI;AAAA,IAC/B,KAAK;AACH,aAAO,OAAO,KAAK,GAAG,IAAI;AAAA,IAC5B,KAAK;AACH,aAAO,QAAQ,KAAK,GAAG,IAAI;AAAA,IAC7B,KAAK;AACH,aAAO,WAAW,KAAK,GAAG,IAAI;AAAA,IAChC,KAAK;AACH,aAAO,QAAQ,KAAK,GAAG,IAAI;AAAA,IAC7B,KAAK;AACH,aAAO,OAAO,KAAK,GAAG,IAAI;AAAA,IAC5B,KAAK;AACH,aAAO,UAAU,KAAK,GAAG,IAAI;AAAA,IAC/B,KAAK;AACH,aAAO,aAAa,KAAK,IAAI;AAAA,IAC/B;AACE,gBAAU,6BAA6B,MAAM,4CAA4C;AACzF,cAAQ,WAAW;AAAA,EACvB;AACF;AAEA,eAAe,UAAU,KAAiB,GAAc,MAA8B;AACpF,MAAI,CAAC,EAAE,YAAY,CAAC,EAAE,SAAS;AAC7B,cAAU,2GAA2G;AACrH,YAAQ,WAAW;AACnB;AAAA,EACF;AACA,QAAM,SAAS,MAAM,IAAI,uBAAuB,EAAE,UAAU,EAAE,UAAU,UAAU,EAAE,QAAQ,CAAC;AAC7F,QAAM,OAAO,OAAO;AACpB,MAAI,KAAM,QAAO,UAAU,IAAI;AAC/B,UAAQ,IAAI;AACd;AAEA,eAAe,OAAO,KAAiB,GAAc,MAA8B;AACjF,MAAI,CAAC,EAAE,UAAU;AACf,cAAU,kGAAkG;AAC5G,YAAQ,WAAW;AACnB;AAAA,EACF;AACA,QAAM,OAAgC,EAAE,UAAU,EAAE,SAAS;AAC7D,MAAI,EAAE,aAAc,MAAK,gBAAgB,EAAE;AAC3C,MAAI,EAAE,MAAO,MAAK,OAAO,EAAE;AAC3B,QAAM,SAAS,MAAM,IAAI,gBAAgB,IAAI;AAC7C,QAAM,OAAO,OAAO;AACpB,MAAI,KAAM,QAAO,UAAU,IAAI;AAG/B,UAAQ,UAAU,MAAM,QAAQ,eAAe,CAAC;AAClD;AAEA,eAAe,QAAQ,KAAiB,GAAc,MAA8B;AAClF,QAAM,OAAgC,CAAC;AACvC,MAAI,EAAE,SAAU,MAAK,WAAW,EAAE;AAClC,MAAI,EAAE,MAAO,MAAK,QAAQ,EAAE;AAC5B,MAAI,EAAE,cAAe,MAAK,iBAAiB,QAAQ,EAAE,aAAa;AAClE,MAAI,EAAE,MAAO,MAAK,QAAQ,QAAQ,EAAE,KAAK;AACzC,MAAI,EAAE,MAAO,MAAK,QAAQ,SAAS,EAAE,KAAK;AAC1C,MAAI,EAAE,KAAM,MAAK,OAAO,SAAS,EAAE,IAAI;AACvC,MAAI,EAAE,QAAS,MAAK,WAAW,EAAE;AACjC,QAAM,SAAS,MAAM,IAAI,qBAAqB,IAAI;AAClD,QAAM,QAAQ,OAAO;AACrB,MAAI,KAAM,QAAO,UAAU,KAAK;AAChC,MAAI,CAAC,OAAO,QAAQ;AAAE,eAAW,sBAAsB;AAAG;AAAA,EAAQ;AAClE,aAAW,MAAM,IAAI,CAAC,MAAM,UAAU,GAAG,QAAQ,eAAe,CAAC,CAAC;AACpE;AAEA,eAAe,WAAW,KAAiB,GAAc,MAA8B;AACrF,QAAM,OAAgC,CAAC;AACvC,MAAI,EAAE,MAAO,MAAK,QAAQ,EAAE;AAC5B,MAAI,EAAE,cAAe,MAAK,iBAAiB,QAAQ,EAAE,aAAa;AAClE,MAAI,EAAE,MAAO,MAAK,QAAQ,QAAQ,EAAE,KAAK;AACzC,MAAI,EAAE,MAAO,MAAK,QAAQ,SAAS,EAAE,KAAK;AAC1C,MAAI,EAAE,KAAM,MAAK,OAAO,SAAS,EAAE,IAAI;AACvC,MAAI,EAAE,QAAS,MAAK,WAAW,EAAE;AACjC,QAAM,SAAS,MAAM,IAAI,yBAAyB,IAAI;AACtD,QAAM,QAAQ,OAAO;AACrB,MAAI,KAAM,QAAO,UAAU,KAAK;AAChC,MAAI,CAAC,OAAO,QAAQ;AAAE,eAAW,0BAA0B;AAAG;AAAA,EAAQ;AACtE,aAAW,MAAM,IAAI,CAAC,MAAM,UAAU,GAAG,QAAQ,eAAe,CAAC,CAAC;AACpE;AAIA,SAAS,UACP,KACA,MACA,IACyB;AACzB,MAAI,EAAE,QAAQ,KAAM,QAAO;AAC3B,QAAM,MAA+B,CAAC;AACtC,aAAW,CAAC,GAAG,GAAG,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC1C,QAAI,MAAM,OAAO,KAAK,CAAC,IAAI;AAAA,EAC7B;AACA,SAAO;AACT;AAEA,eAAe,QAAQ,KAAiB,GAAc,MAA8B;AAClF,MAAI,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE,SAAS;AACxD,cAAU,8DAA8D;AACxE,cAAU,+DAA+D;AACzE,YAAQ,WAAW;AACnB;AAAA,EACF;AACA,aAAW,6EAA6E;AACxF,QAAM,OAAgC;AAAA,IACpC,UAAU,EAAE;AAAA,IACZ,UAAU,EAAE;AAAA,IACZ,QAAQ,EAAE;AAAA,IACV,SAAS,EAAE;AAAA,EACb;AACA,MAAI,EAAE,iBAAkB,MAAK,oBAAoB,EAAE;AACnD,MAAI,EAAE,aAAc,MAAK,gBAAgB,EAAE;AAC3C,MAAI,EAAE,aAAc,MAAK,gBAAgB,EAAE;AAC3C,MAAI,EAAE,eAAgB,MAAK,mBAAmB,EAAE;AAChD,MAAI,EAAE,eAAgB,MAAK,mBAAmB,EAAE;AAChD,MAAI,EAAE,mBAAoB,MAAK,wBAAwB,EAAE;AACzD,MAAI,EAAE,mBAAoB,MAAK,wBAAwB,EAAE;AACzD,QAAM,SAAS,MAAM,IAAI,iBAAiB,IAAI;AAC9C,QAAM,OAAO,OAAO;AACpB,MAAI,KAAM,QAAO,UAAU,IAAI;AAC/B,UAAQ,IAAI;AACd;AAEA,eAAe,OAAO,KAAiB,GAAc,MAA8B;AACjF,MAAI,CAAC,EAAE,UAAU,CAAC,EAAE,eAAe;AACjC,cAAU,iDAAiD;AAC3D,cAAU,oDAAoD;AAC9D,YAAQ,WAAW;AACnB;AAAA,EACF;AACA,aAAW,kEAAkE;AAC7E,QAAM,SAAS,MAAM,IAAI,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,iBAAiB,EAAE,cAAc,CAAC;AAC/F,QAAM,OAAO,OAAO;AACpB,MAAI,KAAM,QAAO,UAAU,IAAI;AAC/B,UAAQ,IAAI;AACd;AAEA,eAAe,UAAU,KAAiB,GAAc,MAA8B;AACpF,MAAI,CAAC,EAAE,cAAc;AACnB,cAAU,2FAA2F;AACrG,YAAQ,WAAW;AACnB;AAAA,EACF;AACA,QAAM,SAAS,MAAM,IAAI,wBAAwB,EAAE,eAAe,EAAE,aAAa,CAAC;AAClF,QAAM,OAAO,OAAO;AACpB,MAAI,KAAM,QAAO,UAAU,IAAI;AAC/B,UAAQ,IAAI;AACd;AAEA,eAAe,aAAa,KAAiB,MAA8B;AACzE,QAAM,SAAS,MAAM,IAAI,0BAA0B,CAAC,CAAC;AACrD,QAAM,QAAQ,OAAO;AACrB,MAAI,KAAM,QAAO,UAAU,KAAK;AAChC,MAAI,CAAC,OAAO,QAAQ;AAAE,eAAW,+BAA+B;AAAG;AAAA,EAAQ;AAC3E,aAAW,KAAK;AAClB;","names":[]}
@@ -40,17 +40,17 @@ Examples:
40
40
  var GET_HELP = `
41
41
  Usage: bithumb withdraw get [options]
42
42
 
43
- Get details of a single withdrawal by UUID or txid for a specific currency.
43
+ Get details of a single withdrawal by withdrawal ID or txid for a specific currency.
44
44
 
45
45
  Required:
46
46
  --currency <code> Currency code (e.g., BTC)
47
47
 
48
48
  Options (provide one of):
49
- --uuid <uuid> Withdrawal UUID
49
+ --withdrawal-id <id> Withdrawal ID
50
50
  --txids <txid> Transaction ID
51
51
 
52
52
  Examples:
53
- bithumb withdraw get --currency BTC --uuid abc-123
53
+ bithumb withdraw get --currency BTC --withdrawal-id abc-123
54
54
  bithumb withdraw get --currency BTC --txids 0xabcdef
55
55
  `;
56
56
  var LIST_HELP = `
@@ -64,7 +64,7 @@ Required:
64
64
  Options:
65
65
  --currency <code> Currency code (e.g., BTC)
66
66
  --state <state> State filter (e.g., done / processing)
67
- --uuids <uuids> Filter by UUIDs (comma-separated)
67
+ --withdrawal-ids <ids> Filter by withdrawal IDs (comma-separated)
68
68
  --txids <txids> Filter by transaction IDs (comma-separated)
69
69
  --limit <n> Results per page (max 100) (default: 100)
70
70
  --page <n> Page number (default: 1)
@@ -84,7 +84,7 @@ Required:
84
84
 
85
85
  Options:
86
86
  --state <state> State filter (e.g., done / processing)
87
- --uuids <uuids> Filter by UUIDs (comma-separated)
87
+ --withdrawal-ids <ids> Filter by withdrawal IDs (comma-separated)
88
88
  --txids <txids> Filter by transaction IDs (comma-separated)
89
89
  --limit <n> Results per page (max 100) (default: 100)
90
90
  --page <n> Page number (default: 1)
@@ -200,4 +200,4 @@ export {
200
200
  ACTION_HELP,
201
201
  MODULE_HELP
202
202
  };
203
- //# sourceMappingURL=withdraw-IRMICBD2.js.map
203
+ //# sourceMappingURL=withdraw-LDERU7T7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/help/withdraw.ts"],"sourcesContent":["export const MODULE_HELP = `\nUsage: bithumb withdraw <command> [options]\n\nCommands:\n chance Get withdrawal availability info\n get Get specific withdrawal\n list List coin withdrawals\n list-krw List KRW withdrawals\n coin Withdraw cryptocurrency (CAUTION)\n krw Withdraw KRW (CAUTION)\n cancel Cancel coin withdrawal\n addresses List allowed withdrawal addresses\n\nRun bithumb withdraw <command> --help for command-specific options.\n\nExamples:\n bithumb withdraw chance --currency BTC --net-type BTC\n bithumb withdraw list --currency BTC\n bithumb withdraw addresses\n`;\n\nconst CHANCE_HELP = `\nUsage: bithumb withdraw chance [options]\n\nGet withdrawal availability info (limits, fee, network status) for a currency.\n\nRequired:\n --currency <code> Currency code (e.g., BTC)\n --net-type <type> Network type (e.g., BTC)\n\nOptions:\n (none)\n\nExamples:\n bithumb withdraw chance --currency BTC --net-type BTC\n bithumb withdraw chance --currency USDT --net-type TRX\n`;\n\nconst GET_HELP = `\nUsage: bithumb withdraw get [options]\n\nGet details of a single withdrawal by withdrawal ID or txid for a specific currency.\n\nRequired:\n --currency <code> Currency code (e.g., BTC)\n\nOptions (provide one of):\n --withdrawal-id <id> Withdrawal ID\n --txids <txid> Transaction ID\n\nExamples:\n bithumb withdraw get --currency BTC --withdrawal-id abc-123\n bithumb withdraw get --currency BTC --txids 0xabcdef\n`;\n\nconst LIST_HELP = `\nUsage: bithumb withdraw list [options]\n\nList coin withdrawals, optionally filtered by currency, state, or identifiers.\n\nRequired:\n (none — all filters are optional)\n\nOptions:\n --currency <code> Currency code (e.g., BTC)\n --state <state> State filter (e.g., done / processing)\n --withdrawal-ids <ids> Filter by withdrawal IDs (comma-separated)\n --txids <txids> Filter by transaction IDs (comma-separated)\n --limit <n> Results per page (max 100) (default: 100)\n --page <n> Page number (default: 1)\n --order-by <order> Sort order: asc / desc (default: desc)\n\nExamples:\n bithumb withdraw list --currency BTC\n bithumb withdraw list --state done --limit 50 --order-by desc\n`;\n\nconst LIST_KRW_HELP = `\nUsage: bithumb withdraw list-krw [options]\n\nList KRW withdrawals, optionally filtered by state or identifiers.\n\nRequired:\n (none — all filters are optional)\n\nOptions:\n --state <state> State filter (e.g., done / processing)\n --withdrawal-ids <ids> Filter by withdrawal IDs (comma-separated)\n --txids <txids> Filter by transaction IDs (comma-separated)\n --limit <n> Results per page (max 100) (default: 100)\n --page <n> Page number (default: 1)\n --order-by <order> Sort order: asc / desc (default: desc)\n\nExamples:\n bithumb withdraw list-krw\n bithumb withdraw list-krw --state done --limit 50\n`;\n\nconst COIN_HELP = `\nUsage: bithumb withdraw coin [options]\n\nWithdraw cryptocurrency to an external address. Initiates a real, irreversible\nfunds movement.\n\nRequired:\n --currency <code> Currency code (e.g., BTC)\n --net-type <type> Network type (e.g., BTC)\n --amount <amount> Withdrawal amount\n --address <addr> Withdrawal address\n\nOptions:\n --secondary-address <addr> Secondary address (tag/memo) — required for\n networks that need a destination tag\n --exchange-name <name> Destination exchange name (travel rule)\n --receiver-type <type> Receiver type: personal / corporation\n --receiver-ko-name <name> Receiver Korean name (personal)\n --receiver-en-name <name> Receiver English name (personal)\n --receiver-corp-ko-name <name> Corporation Korean name (corporation)\n --receiver-corp-en-name <name> Corporation English name (corporation)\n\nExamples:\n bithumb withdraw coin --currency BTC --net-type BTC --amount 0.01 \\\\\n --address bc1q...\n bithumb withdraw coin --currency XRP --net-type XRP --amount 10 \\\\\n --address rXXXX --secondary-address 12345\n\nCaution:\n - Cryptocurrency withdrawals are IRREVERSIBLE. Once broadcast on-chain, funds\n cannot be recalled — verify the destination --address (and --secondary-address\n where applicable) character-by-character before submitting.\n - Strongly recommended: pre-register the destination as an allowed address\n (see 'bithumb withdraw addresses') and dry-run with 'bithumb withdraw chance'\n to confirm fees, limits, and network status before initiating.\n - Travel-rule fields (--exchange-name, --receiver-*) may be required by Bithumb\n depending on amount/destination; missing fields will surface as API errors.\n`;\n\nconst KRW_HELP = `\nUsage: bithumb withdraw krw [options]\n\nWithdraw KRW to your registered bank account. Initiates a real, irreversible\nfunds movement.\n\nRequired:\n --amount <amount> Withdrawal amount (KRW)\n --two-factor-type <type> 2FA type (e.g., kakao)\n\nOptions:\n (none)\n\nExamples:\n bithumb withdraw krw --amount 1000000 --two-factor-type kakao\n\nCaution:\n - KRW withdrawal is IRREVERSIBLE once submitted — funds are sent to the bank\n account registered under your Bithumb identity. Confirm the registered\n bank/account information on the Bithumb site BEFORE invoking this command.\n - 2FA (--two-factor-type) is mandatory. The request will fail without it.\n - The destination account cannot be overridden via CLI flags by design — to\n change it, update the registered account through Bithumb's official channels.\n`;\n\nconst CANCEL_HELP = `\nUsage: bithumb withdraw cancel [options]\n\nCancel a pending coin withdrawal by withdrawal ID. Only effective while the\nwithdrawal is still cancellable (not yet broadcast).\n\nRequired:\n --withdrawal-id <id> Withdrawal ID to cancel\n\nOptions:\n (none)\n\nExamples:\n bithumb withdraw cancel --withdrawal-id abc-123\n`;\n\nconst ADDRESSES_HELP = `\nUsage: bithumb withdraw addresses [options]\n\nList the withdrawal addresses pre-registered (allow-listed) on your Bithumb\naccount. Pre-registration is recommended before invoking 'bithumb withdraw coin'.\n\nRequired:\n (none)\n\nOptions:\n (none)\n\nExamples:\n bithumb withdraw addresses\n`;\n\nexport const ACTION_HELP: Record<string, string> = {\n chance: CHANCE_HELP,\n get: GET_HELP,\n list: LIST_HELP,\n \"list-krw\": LIST_KRW_HELP,\n coin: COIN_HELP,\n krw: KRW_HELP,\n cancel: CANCEL_HELP,\n addresses: ADDRESSES_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;AAiBpB,IAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBjB,IAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBlB,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBtB,IAAM,YAAY;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuClB,IAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBjB,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBpB,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBhB,IAAM,cAAsC;AAAA,EACjD,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,WAAW;AACb;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bithumb-official/bithumb-cli",
3
- "version": "0.1.16",
3
+ "version": "0.1.17",
4
4
  "description": "Bithumb Trade CLI",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/parser.ts"],"sourcesContent":["import { parseArgs } from \"node:util\";\n\nexport interface CliValues {\n // Global\n profile?: string;\n json?: boolean;\n help?: boolean;\n version?: boolean;\n verbose?: boolean;\n // Setup\n client?: string;\n modules?: string;\n readOnly?: boolean;\n // Market\n unit?: string;\n count?: string;\n to?: string;\n isDetails?: boolean;\n // Trade / Account\n market?: string;\n uuid?: string;\n clientOrderId?: string;\n side?: string;\n ordType?: string;\n // Deprecated alias indicator: true if user passed --ord-type instead of --order-type\n ordTypeFromDeprecatedAlias?: boolean;\n // True when both --order-type and --ord-type are provided. Used to block\n // silent-loss of one flag's value (the deprecated alias was previously dropped).\n ordTypeConflict?: boolean;\n price?: string;\n volume?: string;\n state?: string;\n states?: string;\n uuids?: string;\n orderId?: string;\n orderIds?: string;\n clientOrderIds?: string;\n orderBy?: string;\n cursor?: string;\n daysAgo?: string;\n convertingPriceUnit?: string;\n page?: string;\n // Audit\n limit?: string;\n tool?: string;\n since?: string;\n level?: string;\n // Withdraw / Deposit\n currency?: string;\n netType?: string;\n address?: string;\n secondaryAddress?: string;\n exchangeName?: string;\n receiverType?: string;\n receiverKoName?: string;\n receiverEnName?: string;\n receiverCorpKoName?: string;\n receiverCorpEnName?: string;\n amount?: string;\n twoFactorType?: string;\n txids?: string;\n withdrawalId?: string;\n // TWAP\n duration?: string;\n frequency?: string;\n algoOrderId?: string;\n nextKey?: string;\n // Batch\n file?: string;\n}\n\nconst CLI_OPTIONS: Record<string, { type: \"string\" | \"boolean\"; short?: string; default?: string | boolean }> = {\n profile: { type: \"string\" },\n json: { type: \"boolean\", default: false },\n help: { type: \"boolean\", short: \"h\", default: false },\n version: { type: \"boolean\", short: \"v\", default: false },\n verbose: { type: \"boolean\", default: false },\n client: { type: \"string\" },\n modules: { type: \"string\" },\n \"read-only\": { type: \"boolean\", default: false },\n unit: { type: \"string\" },\n count: { type: \"string\" },\n to: { type: \"string\" },\n \"is-details\": { type: \"boolean\", default: false },\n market: { type: \"string\" },\n uuid: { type: \"string\" },\n \"client-order-id\": { type: \"string\" },\n side: { type: \"string\" },\n \"ord-type\": { type: \"string\" },\n \"order-type\": { type: \"string\" },\n price: { type: \"string\" },\n volume: { type: \"string\" },\n state: { type: \"string\" },\n states: { type: \"string\" },\n uuids: { type: \"string\" },\n \"order-id\": { type: \"string\" },\n \"order-ids\": { type: \"string\" },\n \"client-order-ids\": { type: \"string\" },\n \"order-by\": { type: \"string\" },\n cursor: { type: \"string\" },\n \"days-ago\": { type: \"string\" },\n \"converting-price-unit\": { type: \"string\" },\n page: { type: \"string\" },\n limit: { type: \"string\" },\n tool: { type: \"string\" },\n since: { type: \"string\" },\n level: { type: \"string\" },\n currency: { type: \"string\" },\n \"net-type\": { type: \"string\" },\n address: { type: \"string\" },\n \"secondary-address\": { type: \"string\" },\n \"exchange-name\": { type: \"string\" },\n \"receiver-type\": { type: \"string\" },\n \"receiver-ko-name\": { type: \"string\" },\n \"receiver-en-name\": { type: \"string\" },\n \"receiver-corp-ko-name\": { type: \"string\" },\n \"receiver-corp-en-name\": { type: \"string\" },\n amount: { type: \"string\" },\n \"two-factor-type\": { type: \"string\" },\n txids: { type: \"string\" },\n \"withdrawal-id\": { type: \"string\" },\n duration: { type: \"string\" },\n frequency: { type: \"string\" },\n \"algo-order-id\": { type: \"string\" },\n \"next-key\": { type: \"string\" },\n file: { type: \"string\" },\n};\n\nexport function parseCli(argv: string[]): { values: CliValues; positionals: string[] } {\n const { values: raw, positionals } = parseArgs({\n args: argv,\n options: CLI_OPTIONS,\n allowPositionals: true,\n strict: false,\n });\n\n // Map kebab-case to camelCase\n const values: CliValues = {\n profile: raw.profile as string | undefined,\n json: raw.json as boolean | undefined,\n help: raw.help as boolean | undefined,\n version: raw.version as boolean | undefined,\n verbose: raw.verbose as boolean | undefined,\n client: raw.client as string | undefined,\n modules: raw.modules as string | undefined,\n readOnly: raw[\"read-only\"] as boolean | undefined,\n unit: raw.unit as string | undefined,\n count: raw.count as string | undefined,\n to: raw.to as string | undefined,\n isDetails: raw[\"is-details\"] as boolean | undefined,\n market: raw.market as string | undefined,\n uuid: raw.uuid as string | undefined,\n clientOrderId: raw[\"client-order-id\"] as string | undefined,\n side: raw.side as string | undefined,\n // Canonical: --order-type. Deprecated alias: --ord-type. Prefer canonical.\n ordType:\n (raw[\"order-type\"] as string | undefined) ??\n (raw[\"ord-type\"] as string | undefined),\n ordTypeFromDeprecatedAlias:\n (raw[\"order-type\"] as string | undefined) === undefined &&\n (raw[\"ord-type\"] as string | undefined) !== undefined,\n ordTypeConflict:\n (raw[\"order-type\"] as string | undefined) !== undefined &&\n (raw[\"ord-type\"] as string | undefined) !== undefined,\n price: raw.price as string | undefined,\n volume: raw.volume as string | undefined,\n state: raw.state as string | undefined,\n states: raw.states as string | undefined,\n uuids: raw.uuids as string | undefined,\n orderId: raw[\"order-id\"] as string | undefined,\n orderIds: raw[\"order-ids\"] as string | undefined,\n clientOrderIds: raw[\"client-order-ids\"] as string | undefined,\n orderBy: raw[\"order-by\"] as string | undefined,\n cursor: raw.cursor as string | undefined,\n daysAgo: raw[\"days-ago\"] as string | undefined,\n convertingPriceUnit: raw[\"converting-price-unit\"] as string | undefined,\n page: raw.page as string | undefined,\n limit: raw.limit as string | undefined,\n tool: raw.tool as string | undefined,\n since: raw.since as string | undefined,\n level: raw.level as string | undefined,\n currency: raw.currency as string | undefined,\n netType: raw[\"net-type\"] as string | undefined,\n address: raw.address as string | undefined,\n secondaryAddress: raw[\"secondary-address\"] as string | undefined,\n exchangeName: raw[\"exchange-name\"] as string | undefined,\n receiverType: raw[\"receiver-type\"] as string | undefined,\n receiverKoName: raw[\"receiver-ko-name\"] as string | undefined,\n receiverEnName: raw[\"receiver-en-name\"] as string | undefined,\n receiverCorpKoName: raw[\"receiver-corp-ko-name\"] as string | undefined,\n receiverCorpEnName: raw[\"receiver-corp-en-name\"] as string | undefined,\n amount: raw.amount as string | undefined,\n twoFactorType: raw[\"two-factor-type\"] as string | undefined,\n txids: raw.txids as string | undefined,\n withdrawalId: raw[\"withdrawal-id\"] as string | undefined,\n duration: raw.duration as string | undefined,\n frequency: raw.frequency as string | undefined,\n algoOrderId: raw[\"algo-order-id\"] as string | undefined,\n nextKey: raw[\"next-key\"] as string | undefined,\n file: raw.file as string | undefined,\n };\n\n return { values, positionals };\n}\n\n// Helper: convert comma-separated string to array\nexport function toArray(value?: string): string[] | undefined {\n if (!value) return undefined;\n return value.split(\",\").map((s) => s.trim()).filter(Boolean);\n}\n\n// Helper: convert string to number or undefined\nexport function toNumber(value?: string): number | undefined {\n if (value === undefined || value === null) return undefined;\n const n = Number(value);\n return Number.isNaN(n) ? undefined : n;\n}\n"],"mappings":"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","names":[]}