@nuno1026/bithumb-cli 0.1.3 → 0.1.5

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.
@@ -30,7 +30,7 @@ async function handleAccountCommand(run, action, v, json) {
30
30
  case "api-keys":
31
31
  return cmdApiKeys(run, json);
32
32
  default:
33
- errorLine(`Unknown account command: ${action}. Run 'bithumb-trade account --help' for usage.`);
33
+ errorLine(`Unknown account command: ${action}. Run 'bithumb account --help' for usage.`);
34
34
  process.exitCode = 1;
35
35
  }
36
36
  }
@@ -52,7 +52,7 @@ async function cmdBalance(run, json) {
52
52
  }
53
53
  async function cmdOrderChance(run, market, json) {
54
54
  if (!market) {
55
- errorLine("Error: --market is required. Example: bithumb-trade account order-chance --market KRW-BTC");
55
+ errorLine("Error: --market is required. Example: bithumb account order-chance --market KRW-BTC");
56
56
  process.exitCode = 1;
57
57
  return;
58
58
  }
@@ -107,4 +107,4 @@ async function cmdApiKeys(run, json) {
107
107
  export {
108
108
  handleAccountCommand
109
109
  };
110
- //# sourceMappingURL=account-QQC3UZDP.js.map
110
+ //# sourceMappingURL=account-PM4UQZGC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/account.ts"],"sourcesContent":["import type { ToolRunner } from \"@bithumb-tradekit/core\";\nimport type { CliValues } from \"../parser.js\";\nimport { toNumber } from \"../parser.js\";\nimport { outputLine, errorLine, printJson, printTable, printKv } from \"../formatter.js\";\n\nexport async function handleAccountCommand(\n run: ToolRunner,\n action: string,\n v: CliValues,\n json: boolean,\n): Promise<void> {\n switch (action) {\n case \"balance\":\n return cmdBalance(run, json);\n case \"order-chance\":\n return cmdOrderChance(run, v.market, json);\n case \"audit\":\n return cmdAudit(run, {\n limit: toNumber(v.limit),\n tool: v.tool,\n since: v.since,\n level: v.level,\n json,\n });\n case \"wallet-status\":\n return cmdWalletStatus(run, json);\n case \"api-keys\":\n return cmdApiKeys(run, json);\n default:\n errorLine(`Unknown account command: ${action}. Run 'bithumb account --help' for usage.`);\n process.exitCode = 1;\n }\n}\n\nasync function cmdBalance(run: ToolRunner, json: boolean): Promise<void> {\n const result = await run(\"account_get_balance\", {});\n const items = result.data as Record<string, unknown>[];\n if (json) return printJson(items);\n if (!items?.length) { outputLine(\"No balances found\"); return; }\n printTable(items.map((b) => ({\n currency: b[\"currency\"],\n balance: b[\"balance\"],\n locked: b[\"locked\"],\n avg_buy_price: b[\"avg_buy_price\"],\n unit_currency: b[\"unit_currency\"],\n })));\n}\n\nasync function cmdOrderChance(run: ToolRunner, market: string | undefined, json: boolean): Promise<void> {\n if (!market) {\n errorLine(\"Error: --market is required. Example: bithumb account order-chance --market KRW-BTC\");\n process.exitCode = 1;\n return;\n }\n const result = await run(\"account_get_order_chance\", { market });\n const data = result.data as Record<string, unknown>;\n if (json) return printJson(data);\n printKv(data);\n}\n\nasync function cmdAudit(\n run: ToolRunner,\n opts: { limit?: number; tool?: string; since?: string; level?: string; json: boolean },\n): Promise<void> {\n const args: Record<string, unknown> = {};\n if (opts.limit !== undefined) args.limit = opts.limit;\n if (opts.tool !== undefined) args.tool = opts.tool;\n if (opts.since !== undefined) args.since = opts.since;\n if (opts.level !== undefined) args.level = opts.level;\n const result = await run(\"trade_get_history\", args);\n const items = result.data as Record<string, unknown>[];\n if (opts.json) return printJson(items);\n if (!items?.length) { outputLine(\"No audit entries found\"); return; }\n printTable(items.map((entry) => ({\n timestamp: entry[\"ts\"],\n level: entry[\"level\"],\n tool: entry[\"tool\"],\n message: entry[\"message\"],\n elapsed_ms: entry[\"elapsed\"],\n })));\n}\n\nasync function cmdWalletStatus(run: ToolRunner, json: boolean): Promise<void> {\n const result = await run(\"account_get_wallet_status\", {});\n const data = result.data;\n if (json) return printJson(data);\n const items = data as Record<string, unknown>[];\n if (!items?.length) { outputLine(\"No wallet status data\"); return; }\n printTable(items);\n}\n\nasync function cmdApiKeys(run: ToolRunner, json: boolean): Promise<void> {\n const result = await run(\"account_get_api_keys\", {});\n const data = result.data;\n if (json) return printJson(data);\n const items = data as Record<string, unknown>[];\n if (!items?.length) { outputLine(\"No API keys found\"); return; }\n printTable(items);\n}\n"],"mappings":"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","names":[]}
@@ -51,7 +51,7 @@ function cmdConfigShow(json) {
51
51
  outputLine("");
52
52
  const profileNames = Object.keys(config.profiles);
53
53
  if (profileNames.length === 0) {
54
- outputLine("No profiles configured. Run 'bithumb-trade config init' to create one.");
54
+ outputLine("No profiles configured. Run 'bithumb config init' to create one.");
55
55
  return;
56
56
  }
57
57
  for (const name of profileNames) {
@@ -70,7 +70,7 @@ function cmdConfigInit() {
70
70
  const path = configFilePath();
71
71
  if (existsSync(path)) {
72
72
  outputLine(`Config file already exists: ${path}`);
73
- outputLine("Use 'bithumb-trade config add-profile' to add a new profile.");
73
+ outputLine("Use 'bithumb config add-profile' to add a new profile.");
74
74
  return;
75
75
  }
76
76
  const dir = dirname(path);
@@ -92,7 +92,7 @@ function cmdConfigInit() {
92
92
  }
93
93
  function cmdConfigSet(key, value, profileName) {
94
94
  if (!key || value === void 0) {
95
- errorLine("Usage: bithumb-trade config set <key> <value> [--profile <name>]");
95
+ errorLine("Usage: bithumb config set <key> <value> [--profile <name>]");
96
96
  errorLine("Keys: access_key, secret_key, base_url, timeout_ms");
97
97
  process.exitCode = 1;
98
98
  return;
@@ -119,7 +119,7 @@ function cmdConfigSet(key, value, profileName) {
119
119
  function cmdConfigAddProfile(rest, _v) {
120
120
  const name = rest[0];
121
121
  if (!name) {
122
- errorLine("Usage: bithumb-trade config add-profile <name>");
122
+ errorLine("Usage: bithumb config add-profile <name>");
123
123
  process.exitCode = 1;
124
124
  return;
125
125
  }
@@ -152,13 +152,13 @@ function cmdConfigListProfiles(json) {
152
152
  }
153
153
  function cmdConfigUse(profileName) {
154
154
  if (!profileName) {
155
- errorLine("Usage: bithumb-trade config use <profile-name>");
155
+ errorLine("Usage: bithumb config use <profile-name>");
156
156
  process.exitCode = 1;
157
157
  return;
158
158
  }
159
159
  const config = readFullConfig();
160
160
  if (!config.profiles[profileName]) {
161
- errorLine(`Profile '${profileName}' not found. Run 'bithumb-trade config list-profiles' to see available profiles.`);
161
+ errorLine(`Profile '${profileName}' not found. Run 'bithumb config list-profiles' to see available profiles.`);
162
162
  process.exitCode = 1;
163
163
  return;
164
164
  }
@@ -169,4 +169,4 @@ function cmdConfigUse(profileName) {
169
169
  export {
170
170
  handleConfigCommand
171
171
  };
172
- //# sourceMappingURL=config-5T2Z7X5D.js.map
172
+ //# sourceMappingURL=config-3DKXMP6T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/config.ts"],"sourcesContent":["import {\n configFilePath,\n readFullConfig,\n writeFullConfig,\n} from \"@bithumb-tradekit/core\";\nimport type { BithumbTomlConfig } from \"@bithumb-tradekit/core\";\nimport type { CliValues } from \"../parser.js\";\nimport { outputLine, errorLine, printJson, printKv, printTable } from \"../formatter.js\";\nimport { existsSync, mkdirSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\n\nexport function handleConfigCommand(\n action: string,\n rest: string[],\n v: CliValues,\n): void {\n const json = v.json ?? false;\n switch (action) {\n case \"show\":\n return cmdConfigShow(json);\n case \"init\":\n return cmdConfigInit();\n case \"set\":\n return cmdConfigSet(rest[0], rest[1], v.profile);\n case \"add-profile\":\n return cmdConfigAddProfile(rest, v);\n case \"list-profiles\":\n return cmdConfigListProfiles(json);\n case \"use\":\n return cmdConfigUse(rest[0]);\n case \"path\":\n outputLine(configFilePath());\n return;\n default:\n if (!action) {\n return cmdConfigShow(json);\n }\n errorLine(`Unknown config command: ${action}. Available: show, init, set, add-profile, list-profiles, use, path`);\n process.exitCode = 1;\n }\n}\n\nfunction cmdConfigShow(json: boolean): void {\n const config = readFullConfig();\n if (json) return printJson(config);\n outputLine(`Config file: ${configFilePath()}`);\n if (config.default_profile) {\n outputLine(`Default profile: ${config.default_profile}`);\n }\n outputLine(\"\");\n const profileNames = Object.keys(config.profiles);\n if (profileNames.length === 0) {\n outputLine(\"No profiles configured. Run 'bithumb config init' to create one.\");\n return;\n }\n for (const name of profileNames) {\n const p = config.profiles[name];\n outputLine(`[${name}]`);\n printKv({\n access_key: p.access_key ? `${p.access_key.slice(0, 8)}...` : \"(not set)\",\n secret_key: p.secret_key ? \"***\" : \"(not set)\",\n ...(p.base_url ? { base_url: p.base_url } : {}),\n ...(p.timeout_ms ? { timeout_ms: p.timeout_ms } : {}),\n });\n outputLine(\"\");\n }\n}\n\nfunction cmdConfigInit(): void {\n const path = configFilePath();\n if (existsSync(path)) {\n outputLine(`Config file already exists: ${path}`);\n outputLine(\"Use 'bithumb config add-profile' to add a new profile.\");\n return;\n }\n const dir = dirname(path);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n const config: BithumbTomlConfig = {\n default_profile: \"default\",\n profiles: {\n default: {\n access_key: \"\",\n secret_key: \"\",\n },\n },\n };\n writeFullConfig(config);\n outputLine(`Config file created: ${path}`);\n outputLine(\"Edit it to add your API credentials.\");\n}\n\nfunction cmdConfigSet(key: string | undefined, value: string | undefined, profileName?: string): void {\n if (!key || value === undefined) {\n errorLine(\"Usage: bithumb config set <key> <value> [--profile <name>]\");\n errorLine(\"Keys: access_key, secret_key, base_url, timeout_ms\");\n process.exitCode = 1;\n return;\n }\n const validKeys = new Set([\"access_key\", \"secret_key\", \"base_url\", \"timeout_ms\"]);\n if (!validKeys.has(key)) {\n errorLine(`Invalid key: ${key}. Valid keys: ${[...validKeys].join(\", \")}`);\n process.exitCode = 1;\n return;\n }\n const config = readFullConfig();\n const name = profileName ?? config.default_profile ?? \"default\";\n if (!config.profiles[name]) {\n config.profiles[name] = {};\n }\n if (key === \"timeout_ms\") {\n (config.profiles[name] as Record<string, unknown>)[key] = Number(value);\n } else {\n (config.profiles[name] as Record<string, unknown>)[key] = value;\n }\n writeFullConfig(config);\n outputLine(`Set ${name}.${key}`);\n}\n\nfunction cmdConfigAddProfile(rest: string[], _v: CliValues): void {\n const name = rest[0];\n if (!name) {\n errorLine(\"Usage: bithumb config add-profile <name>\");\n process.exitCode = 1;\n return;\n }\n const config = readFullConfig();\n if (config.profiles[name]) {\n errorLine(`Profile '${name}' already exists.`);\n process.exitCode = 1;\n return;\n }\n config.profiles[name] = {\n access_key: \"\",\n secret_key: \"\",\n };\n writeFullConfig(config);\n outputLine(`Profile '${name}' added. Edit ${configFilePath()} to set credentials.`);\n}\n\nfunction cmdConfigListProfiles(json: boolean): void {\n const config = readFullConfig();\n const profiles = Object.entries(config.profiles).map(([name, p]) => ({\n name,\n default: name === (config.default_profile ?? \"default\") ? \"*\" : \"\",\n has_credentials: p.access_key && p.secret_key ? \"yes\" : \"no\",\n }));\n if (json) return printJson(profiles);\n if (profiles.length === 0) {\n outputLine(\"No profiles configured.\");\n return;\n }\n printTable(profiles);\n}\n\nfunction cmdConfigUse(profileName: string | undefined): void {\n if (!profileName) {\n errorLine(\"Usage: bithumb config use <profile-name>\");\n process.exitCode = 1;\n return;\n }\n const config = readFullConfig();\n if (!config.profiles[profileName]) {\n errorLine(`Profile '${profileName}' not found. Run 'bithumb config list-profiles' to see available profiles.`);\n process.exitCode = 1;\n return;\n }\n config.default_profile = profileName;\n writeFullConfig(config);\n outputLine(`Default profile set to '${profileName}'`);\n}\n"],"mappings":"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","names":[]}
@@ -32,25 +32,25 @@ async function handleDepositCommand(run, action, v, json) {
32
32
  case "address":
33
33
  return cmdAddress(run, v, json);
34
34
  default:
35
- errorLine(`Unknown deposit command: ${action}. Run 'bithumb-trade deposit --help' for usage.`);
35
+ errorLine(`Unknown deposit command: ${action}. Run 'bithumb deposit --help' for usage.`);
36
36
  process.exitCode = 1;
37
37
  }
38
38
  }
39
39
  async function cmdGet(run, v, json) {
40
40
  if (v.txids) {
41
41
  errorLine("Error: 'deposit get' supports --uuid only. For txid lookup use:");
42
- errorLine(" bithumb-trade deposit list --txids <txid1,txid2>");
42
+ errorLine(" bithumb deposit list --txids <txid1,txid2>");
43
43
  process.exitCode = 1;
44
44
  return;
45
45
  }
46
46
  if (!v.currency) {
47
- errorLine("Error: --currency required. Example: bithumb-trade deposit get --currency BTC --uuid abc-123");
47
+ errorLine("Error: --currency required. Example: bithumb deposit get --currency BTC --uuid abc-123");
48
48
  process.exitCode = 1;
49
49
  return;
50
50
  }
51
51
  if (!v.uuid) {
52
- errorLine("Error: --uuid required for 'deposit get'. Example: bithumb-trade deposit get --currency BTC --uuid abc-123");
53
- errorLine("Tip: To search by txid, use 'bithumb-trade deposit list --txids <txid>'.");
52
+ errorLine("Error: --uuid required for 'deposit get'. Example: bithumb deposit get --currency BTC --uuid abc-123");
53
+ errorLine("Tip: To search by txid, use 'bithumb deposit list --txids <txid>'.");
54
54
  process.exitCode = 1;
55
55
  return;
56
56
  }
@@ -133,7 +133,7 @@ async function cmdKrw(run, v, json) {
133
133
  }
134
134
  async function cmdGenerateAddress(run, v, json) {
135
135
  if (!v.currency || !v.netType) {
136
- errorLine("Error: --currency and --net-type required. Example: bithumb-trade deposit generate-address --currency BTC --net-type BTC");
136
+ errorLine("Error: --currency and --net-type required. Example: bithumb deposit generate-address --currency BTC --net-type BTC");
137
137
  process.exitCode = 1;
138
138
  return;
139
139
  }
@@ -154,7 +154,7 @@ async function cmdAddresses(run, json) {
154
154
  }
155
155
  async function cmdAddress(run, v, json) {
156
156
  if (!v.currency || !v.netType) {
157
- errorLine("Error: --currency and --net-type required. Example: bithumb-trade deposit address --currency BTC --net-type BTC");
157
+ errorLine("Error: --currency and --net-type required. Example: bithumb deposit address --currency BTC --net-type BTC");
158
158
  process.exitCode = 1;
159
159
  return;
160
160
  }
@@ -166,4 +166,4 @@ async function cmdAddress(run, v, json) {
166
166
  export {
167
167
  handleDepositCommand
168
168
  };
169
- //# sourceMappingURL=deposit-PBP2KDXP.js.map
169
+ //# sourceMappingURL=deposit-2DPI346C.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/deposit.ts"],"sourcesContent":["import type { ToolRunner } from \"@bithumb-tradekit/core\";\nimport { BithumbApiError } from \"@bithumb-tradekit/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 handleDepositCommand(\n run: ToolRunner,\n action: string,\n v: CliValues,\n json: boolean,\n): Promise<void> {\n switch (action) {\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 \"krw\":\n return cmdKrw(run, v, json);\n case \"generate-address\":\n return cmdGenerateAddress(run, v, json);\n case \"addresses\":\n return cmdAddresses(run, json);\n case \"address\":\n return cmdAddress(run, v, json);\n default:\n errorLine(`Unknown deposit command: ${action}. Run 'bithumb deposit --help' for usage.`);\n process.exitCode = 1;\n }\n}\n\nasync function cmdGet(run: ToolRunner, v: CliValues, json: boolean): Promise<void> {\n if (v.txids) {\n errorLine(\"Error: 'deposit get' supports --uuid only. For txid lookup use:\");\n errorLine(\" bithumb deposit list --txids <txid1,txid2>\");\n process.exitCode = 1;\n return;\n }\n if (!v.currency) {\n errorLine(\"Error: --currency required. Example: bithumb deposit get --currency BTC --uuid abc-123\");\n process.exitCode = 1;\n return;\n }\n if (!v.uuid) {\n errorLine(\"Error: --uuid required for 'deposit get'. Example: bithumb deposit get --currency BTC --uuid abc-123\");\n errorLine(\"Tip: To search by txid, use 'bithumb deposit list --txids <txid>'.\");\n process.exitCode = 1;\n return;\n }\n const args: Record<string, unknown> = { currency: v.currency, uuid: v.uuid };\n try {\n const result = await run(\"deposit_get\", args);\n const data = result.data as Record<string, unknown> | undefined;\n if (!data || (typeof data === \"object\" && Object.keys(data).length === 0)) {\n outputLine(\"No deposit found.\");\n return;\n }\n if (json) return printJson(data);\n printKv(data);\n } catch (err) {\n // Bithumb API may return 4xx for unknown UUID; render gracefully without the `Fatal:` prefix.\n if (err instanceof BithumbApiError) {\n const codeNum = Number(err.code);\n const codeStr = err.code ?? \"\";\n const errNamePattern = /not.?found|invalid|forbidden|unauthorized|bad.?request/i;\n const messagePattern = /not.?found|invalid/i;\n const isClientError =\n (Number.isFinite(codeNum) && codeNum >= 400 && codeNum < 500) ||\n errNamePattern.test(codeStr) ||\n messagePattern.test(err.message);\n if (isClientError) {\n errorLine(`Error: deposit not found or invalid request (${err.code}). ${err.message}`);\n process.exitCode = 1;\n return;\n }\n // Other Bithumb API errors (5xx, unknown code): still graceful, not Fatal.\n errorLine(`Error: ${err.message}`);\n process.exitCode = 1;\n return;\n }\n throw err;\n }\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.uuids) args.uuids = toArray(v.uuids);\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(\"deposit_get_list\", args);\n const items = result.data as Record<string, unknown>[];\n if (json) return printJson(items);\n if (!items?.length) { outputLine(\"No deposits found\"); return; }\n printTable(items);\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.uuids) args.uuids = toArray(v.uuids);\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(\"deposit_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 deposits found\"); return; }\n printTable(items);\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 deposit request!\");\n process.exitCode = 1;\n return;\n }\n outputLine(\"WARNING: Initiating KRW deposit request.\");\n const result = await run(\"deposit_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 cmdGenerateAddress(run: ToolRunner, v: CliValues, json: boolean): Promise<void> {\n if (!v.currency || !v.netType) {\n errorLine(\"Error: --currency and --net-type required. Example: bithumb deposit generate-address --currency BTC --net-type BTC\");\n process.exitCode = 1;\n return;\n }\n const result = await run(\"deposit_generate_address\", { 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 cmdAddresses(run: ToolRunner, json: boolean): Promise<void> {\n const result = await run(\"deposit_get_addresses\", {});\n const items = result.data as Record<string, unknown>[];\n if (json) return printJson(items);\n if (!items?.length) { outputLine(\"No deposit addresses found\"); return; }\n printTable(items);\n}\n\nasync function cmdAddress(run: ToolRunner, v: CliValues, json: boolean): Promise<void> {\n if (!v.currency || !v.netType) {\n errorLine(\"Error: --currency and --net-type required. Example: bithumb deposit address --currency BTC --net-type BTC\");\n process.exitCode = 1;\n return;\n }\n const result = await run(\"deposit_get_address\", { 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"],"mappings":"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","names":[]}
package/dist/index.js CHANGED
@@ -20,13 +20,13 @@ import {
20
20
  } from "./chunk-FYO6WLZI.js";
21
21
 
22
22
  // src/constants.ts
23
- var CLI_VERSION = "0.1.0";
23
+ var CLI_VERSION = "0.1.5";
24
24
 
25
25
  // src/help.ts
26
26
  var GLOBAL_HELP = `
27
- bithumb-trade v${CLI_VERSION} \u2014 Bithumb Trade CLI
27
+ bithumb v${CLI_VERSION} \u2014 Bithumb Trade CLI
28
28
 
29
- Usage: bithumb-trade <module> <command> [options]
29
+ Usage: bithumb <module> <command> [options]
30
30
 
31
31
  Modules:
32
32
  market Market data (ticker, orderbook, candles, trades)
@@ -50,10 +50,10 @@ Global Options:
50
50
  -h, --help Show help
51
51
  -v, --version Show version
52
52
 
53
- Run 'bithumb-trade <module> --help' for module-specific commands.
53
+ Run 'bithumb <module> --help' for module-specific commands.
54
54
  `;
55
55
  var MARKET_HELP = `
56
- Usage: bithumb-trade market <command> [options]
56
+ Usage: bithumb market <command> [options]
57
57
 
58
58
  Commands:
59
59
  markets List all available markets
@@ -78,13 +78,13 @@ Market Options:
78
78
  --converting-price-unit <unit> Price unit: KRW (candles-days only)
79
79
 
80
80
  Examples:
81
- bithumb-trade market markets
82
- bithumb-trade market ticker KRW-BTC
83
- bithumb-trade market orderbook KRW-BTC --json
84
- bithumb-trade market candles-minutes KRW-BTC --unit 5 --count 10
81
+ bithumb market markets
82
+ bithumb market ticker KRW-BTC
83
+ bithumb market orderbook KRW-BTC --json
84
+ bithumb market candles-minutes KRW-BTC --unit 5 --count 10
85
85
  `;
86
86
  var ACCOUNT_HELP = `
87
- Usage: bithumb-trade account <command> [options]
87
+ Usage: bithumb account <command> [options]
88
88
 
89
89
  Commands:
90
90
  balance Get account balances
@@ -104,12 +104,12 @@ Audit Options:
104
104
  --level <level> Filter by log level (INFO, WARN, ERROR, DEBUG)
105
105
 
106
106
  Examples:
107
- bithumb-trade account balance
108
- bithumb-trade account order-chance --market KRW-BTC
109
- bithumb-trade account audit --limit 10
107
+ bithumb account balance
108
+ bithumb account order-chance --market KRW-BTC
109
+ bithumb account audit --limit 10
110
110
  `;
111
111
  var TRADE_HELP = `
112
- Usage: bithumb-trade trade <command> [options]
112
+ Usage: bithumb trade <command> [options]
113
113
 
114
114
  Commands:
115
115
  orders List orders
@@ -138,14 +138,14 @@ Trade Options:
138
138
  --file <path> JSON file path (batch-place only)
139
139
 
140
140
  Examples:
141
- bithumb-trade trade orders --market KRW-BTC --state wait
142
- bithumb-trade trade get --uuid abc-123
143
- bithumb-trade trade place --market KRW-BTC --side bid --order-type limit --price 50000000 --volume 0.01
144
- bithumb-trade trade cancel --uuid abc-123
145
- bithumb-trade trade batch-place --file orders.json
141
+ bithumb trade orders --market KRW-BTC --state wait
142
+ bithumb trade get --uuid abc-123
143
+ bithumb trade place --market KRW-BTC --side bid --order-type limit --price 50000000 --volume 0.01
144
+ bithumb trade cancel --uuid abc-123
145
+ bithumb trade batch-place --file orders.json
146
146
  `;
147
147
  var SETUP_HELP = `
148
- Usage: bithumb-trade setup --client <client> [--profile <name>] [--modules <list>]
148
+ Usage: bithumb setup --client <client> [--profile <name>] [--modules <list>]
149
149
 
150
150
  Configure MCP client integration for supported AI coding tools.
151
151
 
@@ -155,11 +155,11 @@ Options:
155
155
  --modules <list> Comma-separated modules to enable
156
156
 
157
157
  Examples:
158
- bithumb-trade setup --client claude-desktop
159
- bithumb-trade setup --client cursor --modules market,account
158
+ bithumb setup --client claude-desktop
159
+ bithumb setup --client cursor --modules market,account
160
160
  `;
161
161
  var TWAP_HELP = `
162
- Usage: bithumb-trade twap <command> [options]
162
+ Usage: bithumb twap <command> [options]
163
163
 
164
164
  Commands:
165
165
  place Place a TWAP order
@@ -181,12 +181,12 @@ TWAP Options:
181
181
  --order-by <order> Sort order: asc / desc
182
182
 
183
183
  Examples:
184
- bithumb-trade twap place --market KRW-BTC --side bid --duration 3600 --frequency 60 --price 50000000
185
- bithumb-trade twap orders --market KRW-BTC
186
- bithumb-trade twap cancel --algo-order-id abc-123
184
+ bithumb twap place --market KRW-BTC --side bid --duration 3600 --frequency 60 --price 50000000
185
+ bithumb twap orders --market KRW-BTC
186
+ bithumb twap cancel --algo-order-id abc-123
187
187
  `;
188
188
  var WITHDRAW_HELP = `
189
- Usage: bithumb-trade withdraw <command> [options]
189
+ Usage: bithumb withdraw <command> [options]
190
190
 
191
191
  Commands:
192
192
  chance Get withdrawal availability info
@@ -221,12 +221,12 @@ Withdraw Options:
221
221
  --order-by <order> Sort order: asc / desc
222
222
 
223
223
  Examples:
224
- bithumb-trade withdraw chance --currency BTC --net-type BTC
225
- bithumb-trade withdraw list --currency BTC
226
- bithumb-trade withdraw addresses
224
+ bithumb withdraw chance --currency BTC --net-type BTC
225
+ bithumb withdraw list --currency BTC
226
+ bithumb withdraw addresses
227
227
  `;
228
228
  var DEPOSIT_HELP = `
229
- Usage: bithumb-trade deposit <command> [options]
229
+ Usage: bithumb deposit <command> [options]
230
230
 
231
231
  Commands:
232
232
  get Get specific deposit
@@ -251,12 +251,12 @@ Deposit Options:
251
251
  --order-by <order> Sort order: asc / desc
252
252
 
253
253
  Examples:
254
- bithumb-trade deposit list --currency BTC
255
- bithumb-trade deposit address --currency BTC --net-type BTC
256
- bithumb-trade deposit addresses
254
+ bithumb deposit list --currency BTC
255
+ bithumb deposit address --currency BTC --net-type BTC
256
+ bithumb deposit addresses
257
257
  `;
258
258
  var SYSTEM_HELP = `
259
- Usage: bithumb-trade system <command> [options]
259
+ Usage: bithumb system <command> [options]
260
260
 
261
261
  Commands:
262
262
  capabilities Server capabilities and module availability for agent planning
@@ -265,15 +265,15 @@ System Options:
265
265
  --json Output as JSON
266
266
 
267
267
  Examples:
268
- bithumb-trade system capabilities
269
- bithumb-trade system capabilities --json
268
+ bithumb system capabilities
269
+ bithumb system capabilities --json
270
270
 
271
271
  Notes:
272
- - 'bithumb-trade account capabilities' is an alias for 'bithumb-trade system capabilities'.
272
+ - 'bithumb account capabilities' is an alias for 'bithumb system capabilities'.
273
273
  - Use this command to discover which modules are enabled and which require auth.
274
274
  `;
275
275
  var CONFIG_HELP = `
276
- Usage: bithumb-trade config <command> [options]
276
+ Usage: bithumb config <command> [options]
277
277
 
278
278
  Commands:
279
279
  show Show current configuration
@@ -288,10 +288,10 @@ Options:
288
288
  --profile <name> Target profile (default: current default)
289
289
 
290
290
  Examples:
291
- bithumb-trade config init
292
- bithumb-trade config set access_key your_key --profile trading
293
- bithumb-trade config use trading
294
- bithumb-trade config list-profiles
291
+ bithumb config init
292
+ bithumb config set access_key your_key --profile trading
293
+ bithumb config use trading
294
+ bithumb config list-profiles
295
295
  `;
296
296
  function printHelp(positionals) {
297
297
  const module = positionals[0];
@@ -386,7 +386,7 @@ async function main() {
386
386
  const [module, action, ...rest] = positionals;
387
387
  const json = v.json ?? false;
388
388
  if (module === "config") {
389
- const { handleConfigCommand } = await import("./config-5T2Z7X5D.js");
389
+ const { handleConfigCommand } = await import("./config-3DKXMP6T.js");
390
390
  return handleConfigCommand(action, rest, v);
391
391
  }
392
392
  const config = loadConfig({
@@ -416,36 +416,36 @@ async function main() {
416
416
  const privateModules = /* @__PURE__ */ new Set(["account", "trade", "twap", "withdraw", "deposit"]);
417
417
  if (privateModules.has(module) && !config.hasAuth) {
418
418
  errorLine(
419
- "Error: API credentials required. Run 'bithumb-trade setup' or configure ~/.bithumb/config.toml"
419
+ "Error: API credentials required. Run 'bithumb setup' or configure ~/.bithumb/config.toml"
420
420
  );
421
421
  process.exitCode = 1;
422
422
  return;
423
423
  }
424
424
  if (module === "market") {
425
- const { handleMarketCommand } = await import("./market-B32IKWHH.js");
425
+ const { handleMarketCommand } = await import("./market-V7L36QN3.js");
426
426
  return handleMarketCommand(run, action, rest, v, json);
427
427
  }
428
428
  if (module === "account") {
429
- const { handleAccountCommand } = await import("./account-QQC3UZDP.js");
429
+ const { handleAccountCommand } = await import("./account-PM4UQZGC.js");
430
430
  return handleAccountCommand(run, action, v, json);
431
431
  }
432
432
  if (module === "trade") {
433
- const { handleTradeCommand } = await import("./trade-ZZU6PXJL.js");
433
+ const { handleTradeCommand } = await import("./trade-MDOYZ5BW.js");
434
434
  return handleTradeCommand(run, action, v, json);
435
435
  }
436
436
  if (module === "twap") {
437
- const { handleTwapCommand } = await import("./twap-U3LDHACU.js");
437
+ const { handleTwapCommand } = await import("./twap-QGTXCV3U.js");
438
438
  return handleTwapCommand(run, action, v, json);
439
439
  }
440
440
  if (module === "withdraw") {
441
- const { handleWithdrawCommand } = await import("./withdraw-7C657PEC.js");
441
+ const { handleWithdrawCommand } = await import("./withdraw-PLP3ZC4Q.js");
442
442
  return handleWithdrawCommand(run, action, v, json);
443
443
  }
444
444
  if (module === "deposit") {
445
- const { handleDepositCommand } = await import("./deposit-PBP2KDXP.js");
445
+ const { handleDepositCommand } = await import("./deposit-2DPI346C.js");
446
446
  return handleDepositCommand(run, action, v, json);
447
447
  }
448
- errorLine(`Unknown command: ${module}. Run 'bithumb-trade --help' for usage.`);
448
+ errorLine(`Unknown command: ${module}. Run 'bithumb --help' for usage.`);
449
449
  process.exitCode = 1;
450
450
  }
451
451
  main().catch((err) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants.ts","../src/help.ts","../src/index.ts"],"sourcesContent":["export const CLI_VERSION = \"0.1.0\";\n","import { outputLine } from \"./formatter.js\";\nimport { CLI_VERSION } from \"./constants.js\";\n\nconst GLOBAL_HELP = `\nbithumb-trade v${CLI_VERSION} — Bithumb Trade CLI\n\nUsage: bithumb-trade <module> <command> [options]\n\nModules:\n market Market data (ticker, orderbook, candles, trades)\n account Account balance, wallet status, API keys\n trade Order management (list, place, cancel, batch)\n twap TWAP (Time-Weighted Average Price) orders\n withdraw Cryptocurrency and KRW withdrawals\n deposit Cryptocurrency and KRW deposits\n system Server capabilities and module availability for agent planning\n\nUtility:\n setup Configure MCP client integration\n config Manage CLI configuration profiles\n diagnose Run connectivity diagnostics\n\nGlobal Options:\n --profile <name> Config profile (default: \"default\")\n --json Output as JSON\n --verbose Enable verbose logging\n --read-only Read-only mode (setup only, disables write operations)\n -h, --help Show help\n -v, --version Show version\n\nRun 'bithumb-trade <module> --help' for module-specific commands.\n`;\n\nconst MARKET_HELP = `\nUsage: bithumb-trade market <command> [options]\n\nCommands:\n markets List all available markets\n ticker <market> Get ticker for market(s) (comma-separated)\n orderbook <market> Get orderbook for market(s) (comma-separated)\n trades <market> Get recent trades\n candles-minutes <market> Get minute candles\n candles-days <market> Get daily candles\n candles-weeks <market> Get weekly candles\n candles-months <market> Get monthly candles\n warnings Get virtual asset warning markets\n notices Get notice list\n fee-inout <currency> Get deposit/withdrawal fees\n\nMarket Options:\n --is-details Include detailed market info (markets only)\n --count <n> Number of results to return\n --to <timestamp> Return results before this timestamp\n --unit <n> Minute unit: 1,3,5,10,15,30,60,240 (candles-minutes only)\n --cursor <cursor> Pagination cursor (trades only)\n --days-ago <n> Filter trades by days ago (trades only)\n --converting-price-unit <unit> Price unit: KRW (candles-days only)\n\nExamples:\n bithumb-trade market markets\n bithumb-trade market ticker KRW-BTC\n bithumb-trade market orderbook KRW-BTC --json\n bithumb-trade market candles-minutes KRW-BTC --unit 5 --count 10\n`;\n\nconst ACCOUNT_HELP = `\nUsage: bithumb-trade account <command> [options]\n\nCommands:\n balance Get account balances\n order-chance --market <market> Get order chance for a market\n audit View trade audit log\n wallet-status Get wallet deposit/withdrawal status\n api-keys Get API key list\n capabilities (alias) Server capabilities for agent planning (same as 'system capabilities')\n\nAccount Options:\n --market <market> Market identifier (e.g., KRW-BTC)\n\nAudit Options:\n --limit <n> Number of log entries (default: 20)\n --tool <name> Filter by tool name\n --since <date> Show entries since date (ISO format)\n --level <level> Filter by log level (INFO, WARN, ERROR, DEBUG)\n\nExamples:\n bithumb-trade account balance\n bithumb-trade account order-chance --market KRW-BTC\n bithumb-trade account audit --limit 10\n`;\n\nconst TRADE_HELP = `\nUsage: bithumb-trade 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 --file <path> Place multiple orders from JSON file (max 20)\n batch-cancel Cancel multiple orders (max 30)\n\nTrade Options:\n --market <market> Market identifier (e.g., KRW-BTC)\n --uuid <uuid> Order UUID\n --client-order-id <id> Client-assigned order ID\n --side <side> Order side: bid (buy) / ask (sell)\n --order-type <type> Order type: limit / price / market (canonical)\n --ord-type <type> (deprecated alias of --order-type)\n --price <price> Order price\n --volume <volume> Order volume\n --state <state> Filter by state: wait / watch / done / cancel\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\n --page <n> Page number\n --limit <n> Results per page\n --file <path> JSON file path (batch-place only)\n\nExamples:\n bithumb-trade trade orders --market KRW-BTC --state wait\n bithumb-trade trade get --uuid abc-123\n bithumb-trade trade place --market KRW-BTC --side bid --order-type limit --price 50000000 --volume 0.01\n bithumb-trade trade cancel --uuid abc-123\n bithumb-trade trade batch-place --file orders.json\n`;\n\nconst SETUP_HELP = `\nUsage: bithumb-trade setup --client <client> [--profile <name>] [--modules <list>]\n\nConfigure MCP client integration for supported AI coding tools.\n\nOptions:\n --client <client> Target client: claude-desktop, cursor, windsurf, vscode, claude-code\n --profile <name> Config profile to use (default: \"default\")\n --modules <list> Comma-separated modules to enable\n\nExamples:\n bithumb-trade setup --client claude-desktop\n bithumb-trade setup --client cursor --modules market,account\n`;\n\nconst TWAP_HELP = `\nUsage: bithumb-trade twap <command> [options]\n\nCommands:\n place Place a TWAP order\n orders List TWAP orders\n cancel Cancel a TWAP order\n\nTWAP Options:\n --market <market> Market identifier (e.g., KRW-BTC)\n --side <side> Order side: bid / ask\n --duration <seconds> Duration in seconds (300-43200)\n --frequency <seconds> Frequency: 5,15,20,30,60,120\n --price <price> Order price (required for bid)\n --volume <volume> Order volume (required for ask)\n --algo-order-id <id> TWAP order ID (for cancel)\n --state <state> Order state filter\n --next-key <key> Pagination cursor\n --limit <n> Results per page\n --uuids <uuids> Filter by TWAP order IDs (comma-separated)\n --order-by <order> Sort order: asc / desc\n\nExamples:\n bithumb-trade twap place --market KRW-BTC --side bid --duration 3600 --frequency 60 --price 50000000\n bithumb-trade twap orders --market KRW-BTC\n bithumb-trade twap cancel --algo-order-id abc-123\n`;\n\nconst WITHDRAW_HELP = `\nUsage: bithumb-trade 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\nWithdraw Options:\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 --secondary-address <addr> Secondary address (tag/memo)\n --exchange-name <name> Exchange name\n --receiver-type <type> Receiver type: personal / corporation\n --receiver-ko-name <name> Receiver Korean name\n --receiver-en-name <name> Receiver English name\n --receiver-corp-ko-name <name> Corporation Korean name\n --receiver-corp-en-name <name> Corporation English name\n --two-factor-type <type> 2FA type (kakao)\n --uuid <uuid> Withdrawal UUID\n --txids <txids> Transaction ID(s) (comma-separated for list)\n --uuids <uuids> Filter by UUIDs (comma-separated, for list)\n --withdrawal-id <id> Withdrawal ID (for cancel)\n --state <state> State filter (for list)\n --limit <n> Results per page (max 100)\n --page <n> Page number\n --order-by <order> Sort order: asc / desc\n\nExamples:\n bithumb-trade withdraw chance --currency BTC --net-type BTC\n bithumb-trade withdraw list --currency BTC\n bithumb-trade withdraw addresses\n`;\n\nconst DEPOSIT_HELP = `\nUsage: bithumb-trade deposit <command> [options]\n\nCommands:\n get Get specific deposit\n list List coin deposits\n list-krw List KRW deposits\n krw Request KRW deposit (CAUTION)\n generate-address Generate deposit address\n addresses List all deposit addresses\n address Get specific deposit address\n\nDeposit Options:\n --currency <code> Currency code (e.g., BTC)\n --net-type <type> Network type (e.g., BTC)\n --amount <amount> Deposit amount\n --two-factor-type <type> 2FA type (kakao)\n --uuid <uuid> Deposit UUID\n --txids <txids> Transaction ID(s) (comma-separated for list)\n --uuids <uuids> Filter by UUIDs (comma-separated, for list)\n --state <state> State filter (for list)\n --limit <n> Results per page (max 100)\n --page <n> Page number\n --order-by <order> Sort order: asc / desc\n\nExamples:\n bithumb-trade deposit list --currency BTC\n bithumb-trade deposit address --currency BTC --net-type BTC\n bithumb-trade deposit addresses\n`;\n\nconst SYSTEM_HELP = `\nUsage: bithumb-trade system <command> [options]\n\nCommands:\n capabilities Server capabilities and module availability for agent planning\n\nSystem Options:\n --json Output as JSON\n\nExamples:\n bithumb-trade system capabilities\n bithumb-trade system capabilities --json\n\nNotes:\n - 'bithumb-trade account capabilities' is an alias for 'bithumb-trade system capabilities'.\n - Use this command to discover which modules are enabled and which require auth.\n`;\n\nconst CONFIG_HELP = `\nUsage: bithumb-trade config <command> [options]\n\nCommands:\n show Show current configuration\n init Create config file\n set <key> <value> Set a config value (access_key, secret_key, base_url, timeout_ms)\n add-profile <name> Add a new profile\n list-profiles List all profiles\n use <name> Set default profile\n path Show config file path\n\nOptions:\n --profile <name> Target profile (default: current default)\n\nExamples:\n bithumb-trade config init\n bithumb-trade config set access_key your_key --profile trading\n bithumb-trade config use trading\n bithumb-trade config list-profiles\n`;\n\nexport function printHelp(positionals: string[]): void {\n const module = positionals[0];\n switch (module) {\n case \"market\":\n outputLine(MARKET_HELP.trim());\n break;\n case \"account\":\n outputLine(ACCOUNT_HELP.trim());\n break;\n case \"trade\":\n outputLine(TRADE_HELP.trim());\n break;\n case \"twap\":\n outputLine(TWAP_HELP.trim());\n break;\n case \"withdraw\":\n outputLine(WITHDRAW_HELP.trim());\n break;\n case \"deposit\":\n outputLine(DEPOSIT_HELP.trim());\n break;\n case \"system\":\n outputLine(SYSTEM_HELP.trim());\n break;\n case \"setup\":\n outputLine(SETUP_HELP.trim());\n break;\n case \"config\":\n outputLine(CONFIG_HELP.trim());\n break;\n default:\n outputLine(GLOBAL_HELP.trim());\n break;\n }\n}\n","import {\n loadConfig,\n BithumbRestClient,\n createToolRunner,\n TradeLogger,\n checkForUpdates,\n runSetup,\n printSetupUsage,\n SUPPORTED_CLIENTS,\n} from \"@bithumb-tradekit/core\";\nimport type { ToolRunner, ClientId } from \"@bithumb-tradekit/core\";\nimport { parseCli } from \"./parser.js\";\nimport type { CliValues } from \"./parser.js\";\nimport { outputLine, errorLine, printJson, printKv } from \"./formatter.js\";\nimport { printHelp } from \"./help.js\";\nimport { CLI_VERSION } from \"./constants.js\";\n\nfunction wrapRunnerWithLogger(\n baseRunner: ToolRunner,\n logger: TradeLogger,\n): ToolRunner {\n return async (toolName, args) => {\n const start = Date.now();\n try {\n const result = await baseRunner(toolName, args);\n logger.logTool(\"info\", toolName, args, { status: \"ok\" }, Date.now() - start);\n return result;\n } catch (error) {\n logger.logTool(\"error\", toolName, args, error, Date.now() - start);\n throw error;\n }\n };\n}\n\nfunction handleSetup(argv: string[]): void {\n const idx = argv.indexOf(\"setup\");\n const rest = argv.slice(idx + 1);\n\n let client: string | undefined;\n let profile: string | undefined;\n let modules: string | undefined;\n\n for (let i = 0; i < rest.length; i++) {\n if (rest[i] === \"--client\" && rest[i + 1]) {\n client = rest[++i];\n } else if (rest[i] === \"--profile\" && rest[i + 1]) {\n profile = rest[++i];\n } else if (rest[i] === \"--modules\" && rest[i + 1]) {\n modules = rest[++i];\n } else if (rest[i] === \"--help\" || rest[i] === \"-h\") {\n printSetupUsage();\n return;\n }\n }\n\n if (!client || !SUPPORTED_CLIENTS.includes(client as ClientId)) {\n errorLine(`Error: --client is required. Supported: ${SUPPORTED_CLIENTS.join(\", \")}`);\n process.exitCode = 1;\n return;\n }\n\n runSetup({ client: client as ClientId, profile, modules });\n}\n\nasync function main(): Promise<void> {\n checkForUpdates(\"@bithumb-tradekit/cli\", CLI_VERSION);\n\n // 1. Setup subcommand (before parseCli)\n if (process.argv[2] === \"setup\") {\n handleSetup(process.argv);\n return;\n }\n\n // 2. Parse arguments\n const { values: v, positionals } = parseCli(process.argv.slice(2));\n\n if (v.version) {\n outputLine(CLI_VERSION);\n return;\n }\n\n if (v.help || positionals.length === 0) {\n printHelp(positionals);\n return;\n }\n\n const [module, action, ...rest] = positionals;\n const json = v.json ?? false;\n\n // 3. Config command (no auth needed, no runner needed)\n if (module === \"config\") {\n const { handleConfigCommand } = await import(\"./commands/config.js\");\n return handleConfigCommand(action, rest, v);\n }\n\n // 4. Load config + create runner\n const config = loadConfig({\n modules: v.modules,\n readOnly: v.readOnly,\n verbose: v.verbose,\n profile: v.profile,\n });\n const client = new BithumbRestClient(config);\n const baseRunner = createToolRunner(client, config);\n const logger = new TradeLogger(v.verbose ? \"debug\" : \"info\");\n const run = wrapRunnerWithLogger(baseRunner, logger);\n\n // 5. Diagnose (needs config but no auth)\n if (module === \"diagnose\") {\n const result = await run(\"system_diagnose\", {});\n const data = result.data ?? result;\n if (json) return printJson(data);\n printKv(data as Record<string, unknown>);\n return;\n }\n\n // 5b. System capabilities (no auth needed)\n // Accept both `system capabilities` (canonical) and `account capabilities` (alias)\n if (\n (module === \"system\" && action === \"capabilities\") ||\n (module === \"account\" && action === \"capabilities\")\n ) {\n const result = await run(\"system_get_capabilities\", {});\n const data = result.data ?? result;\n if (json) return printJson(data);\n printKv(data as Record<string, unknown>);\n return;\n }\n\n // 6. Private API auth guard\n const privateModules = new Set([\"account\", \"trade\", \"twap\", \"withdraw\", \"deposit\"]);\n if (privateModules.has(module) && !config.hasAuth) {\n errorLine(\n \"Error: API credentials required. Run 'bithumb-trade setup' or configure ~/.bithumb/config.toml\",\n );\n process.exitCode = 1;\n return;\n }\n\n // 7. Module routing\n if (module === \"market\") {\n const { handleMarketCommand } = await import(\"./commands/market.js\");\n return handleMarketCommand(run, action, rest, v, json);\n }\n if (module === \"account\") {\n const { handleAccountCommand } = await import(\"./commands/account.js\");\n return handleAccountCommand(run, action, v, json);\n }\n if (module === \"trade\") {\n const { handleTradeCommand } = await import(\"./commands/trade.js\");\n return handleTradeCommand(run, action, v, json);\n }\n if (module === \"twap\") {\n const { handleTwapCommand } = await import(\"./commands/twap.js\");\n return handleTwapCommand(run, action, v, json);\n }\n if (module === \"withdraw\") {\n const { handleWithdrawCommand } = await import(\"./commands/withdraw.js\");\n return handleWithdrawCommand(run, action, v, json);\n }\n if (module === \"deposit\") {\n const { handleDepositCommand } = await import(\"./commands/deposit.js\");\n return handleDepositCommand(run, action, v, json);\n }\n\n errorLine(`Unknown command: ${module}. Run 'bithumb-trade --help' for usage.`);\n process.exitCode = 1;\n}\n\nmain().catch((err) => {\n errorLine(`Fatal: ${err instanceof Error ? err.message : String(err)}`);\n process.exitCode = 1;\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/constants.ts","../src/help.ts","../src/index.ts"],"sourcesContent":["export const CLI_VERSION = \"0.1.5\";\n","import { outputLine } from \"./formatter.js\";\nimport { CLI_VERSION } from \"./constants.js\";\n\nconst GLOBAL_HELP = `\nbithumb v${CLI_VERSION} — Bithumb Trade CLI\n\nUsage: bithumb <module> <command> [options]\n\nModules:\n market Market data (ticker, orderbook, candles, trades)\n account Account balance, wallet status, API keys\n trade Order management (list, place, cancel, batch)\n twap TWAP (Time-Weighted Average Price) orders\n withdraw Cryptocurrency and KRW withdrawals\n deposit Cryptocurrency and KRW deposits\n system Server capabilities and module availability for agent planning\n\nUtility:\n setup Configure MCP client integration\n config Manage CLI configuration profiles\n diagnose Run connectivity diagnostics\n\nGlobal Options:\n --profile <name> Config profile (default: \"default\")\n --json Output as JSON\n --verbose Enable verbose logging\n --read-only Read-only mode (setup only, disables write operations)\n -h, --help Show help\n -v, --version Show version\n\nRun 'bithumb <module> --help' for module-specific commands.\n`;\n\nconst MARKET_HELP = `\nUsage: bithumb market <command> [options]\n\nCommands:\n markets List all available markets\n ticker <market> Get ticker for market(s) (comma-separated)\n orderbook <market> Get orderbook for market(s) (comma-separated)\n trades <market> Get recent trades\n candles-minutes <market> Get minute candles\n candles-days <market> Get daily candles\n candles-weeks <market> Get weekly candles\n candles-months <market> Get monthly candles\n warnings Get virtual asset warning markets\n notices Get notice list\n fee-inout <currency> Get deposit/withdrawal fees\n\nMarket Options:\n --is-details Include detailed market info (markets only)\n --count <n> Number of results to return\n --to <timestamp> Return results before this timestamp\n --unit <n> Minute unit: 1,3,5,10,15,30,60,240 (candles-minutes only)\n --cursor <cursor> Pagination cursor (trades only)\n --days-ago <n> Filter trades by days ago (trades only)\n --converting-price-unit <unit> Price unit: KRW (candles-days only)\n\nExamples:\n bithumb market markets\n bithumb market ticker KRW-BTC\n bithumb market orderbook KRW-BTC --json\n bithumb market candles-minutes KRW-BTC --unit 5 --count 10\n`;\n\nconst ACCOUNT_HELP = `\nUsage: bithumb account <command> [options]\n\nCommands:\n balance Get account balances\n order-chance --market <market> Get order chance for a market\n audit View trade audit log\n wallet-status Get wallet deposit/withdrawal status\n api-keys Get API key list\n capabilities (alias) Server capabilities for agent planning (same as 'system capabilities')\n\nAccount Options:\n --market <market> Market identifier (e.g., KRW-BTC)\n\nAudit Options:\n --limit <n> Number of log entries (default: 20)\n --tool <name> Filter by tool name\n --since <date> Show entries since date (ISO format)\n --level <level> Filter by log level (INFO, WARN, ERROR, DEBUG)\n\nExamples:\n bithumb account balance\n bithumb account order-chance --market KRW-BTC\n bithumb account audit --limit 10\n`;\n\nconst TRADE_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 --file <path> Place multiple orders from JSON file (max 20)\n batch-cancel Cancel multiple orders (max 30)\n\nTrade Options:\n --market <market> Market identifier (e.g., KRW-BTC)\n --uuid <uuid> Order UUID\n --client-order-id <id> Client-assigned order ID\n --side <side> Order side: bid (buy) / ask (sell)\n --order-type <type> Order type: limit / price / market (canonical)\n --ord-type <type> (deprecated alias of --order-type)\n --price <price> Order price\n --volume <volume> Order volume\n --state <state> Filter by state: wait / watch / done / cancel\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\n --page <n> Page number\n --limit <n> Results per page\n --file <path> JSON file path (batch-place only)\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 --uuid abc-123\n bithumb trade batch-place --file orders.json\n`;\n\nconst SETUP_HELP = `\nUsage: bithumb setup --client <client> [--profile <name>] [--modules <list>]\n\nConfigure MCP client integration for supported AI coding tools.\n\nOptions:\n --client <client> Target client: claude-desktop, cursor, windsurf, vscode, claude-code\n --profile <name> Config profile to use (default: \"default\")\n --modules <list> Comma-separated modules to enable\n\nExamples:\n bithumb setup --client claude-desktop\n bithumb setup --client cursor --modules market,account\n`;\n\nconst TWAP_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\nTWAP Options:\n --market <market> Market identifier (e.g., KRW-BTC)\n --side <side> Order side: bid / ask\n --duration <seconds> Duration in seconds (300-43200)\n --frequency <seconds> Frequency: 5,15,20,30,60,120\n --price <price> Order price (required for bid)\n --volume <volume> Order volume (required for ask)\n --algo-order-id <id> TWAP order ID (for cancel)\n --state <state> Order state filter\n --next-key <key> Pagination cursor\n --limit <n> Results per page\n --uuids <uuids> Filter by TWAP order IDs (comma-separated)\n --order-by <order> Sort order: asc / desc\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 WITHDRAW_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\nWithdraw Options:\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 --secondary-address <addr> Secondary address (tag/memo)\n --exchange-name <name> Exchange name\n --receiver-type <type> Receiver type: personal / corporation\n --receiver-ko-name <name> Receiver Korean name\n --receiver-en-name <name> Receiver English name\n --receiver-corp-ko-name <name> Corporation Korean name\n --receiver-corp-en-name <name> Corporation English name\n --two-factor-type <type> 2FA type (kakao)\n --uuid <uuid> Withdrawal UUID\n --txids <txids> Transaction ID(s) (comma-separated for list)\n --uuids <uuids> Filter by UUIDs (comma-separated, for list)\n --withdrawal-id <id> Withdrawal ID (for cancel)\n --state <state> State filter (for list)\n --limit <n> Results per page (max 100)\n --page <n> Page number\n --order-by <order> Sort order: asc / desc\n\nExamples:\n bithumb withdraw chance --currency BTC --net-type BTC\n bithumb withdraw list --currency BTC\n bithumb withdraw addresses\n`;\n\nconst DEPOSIT_HELP = `\nUsage: bithumb deposit <command> [options]\n\nCommands:\n get Get specific deposit\n list List coin deposits\n list-krw List KRW deposits\n krw Request KRW deposit (CAUTION)\n generate-address Generate deposit address\n addresses List all deposit addresses\n address Get specific deposit address\n\nDeposit Options:\n --currency <code> Currency code (e.g., BTC)\n --net-type <type> Network type (e.g., BTC)\n --amount <amount> Deposit amount\n --two-factor-type <type> 2FA type (kakao)\n --uuid <uuid> Deposit UUID\n --txids <txids> Transaction ID(s) (comma-separated for list)\n --uuids <uuids> Filter by UUIDs (comma-separated, for list)\n --state <state> State filter (for list)\n --limit <n> Results per page (max 100)\n --page <n> Page number\n --order-by <order> Sort order: asc / desc\n\nExamples:\n bithumb deposit list --currency BTC\n bithumb deposit address --currency BTC --net-type BTC\n bithumb deposit addresses\n`;\n\nconst SYSTEM_HELP = `\nUsage: bithumb system <command> [options]\n\nCommands:\n capabilities Server capabilities and module availability for agent planning\n\nSystem Options:\n --json Output as JSON\n\nExamples:\n bithumb system capabilities\n bithumb system capabilities --json\n\nNotes:\n - 'bithumb account capabilities' is an alias for 'bithumb system capabilities'.\n - Use this command to discover which modules are enabled and which require auth.\n`;\n\nconst CONFIG_HELP = `\nUsage: bithumb config <command> [options]\n\nCommands:\n show Show current configuration\n init Create config file\n set <key> <value> Set a config value (access_key, secret_key, base_url, timeout_ms)\n add-profile <name> Add a new profile\n list-profiles List all profiles\n use <name> Set default profile\n path Show config file path\n\nOptions:\n --profile <name> Target profile (default: current default)\n\nExamples:\n bithumb config init\n bithumb config set access_key your_key --profile trading\n bithumb config use trading\n bithumb config list-profiles\n`;\n\nexport function printHelp(positionals: string[]): void {\n const module = positionals[0];\n switch (module) {\n case \"market\":\n outputLine(MARKET_HELP.trim());\n break;\n case \"account\":\n outputLine(ACCOUNT_HELP.trim());\n break;\n case \"trade\":\n outputLine(TRADE_HELP.trim());\n break;\n case \"twap\":\n outputLine(TWAP_HELP.trim());\n break;\n case \"withdraw\":\n outputLine(WITHDRAW_HELP.trim());\n break;\n case \"deposit\":\n outputLine(DEPOSIT_HELP.trim());\n break;\n case \"system\":\n outputLine(SYSTEM_HELP.trim());\n break;\n case \"setup\":\n outputLine(SETUP_HELP.trim());\n break;\n case \"config\":\n outputLine(CONFIG_HELP.trim());\n break;\n default:\n outputLine(GLOBAL_HELP.trim());\n break;\n }\n}\n","import {\n loadConfig,\n BithumbRestClient,\n createToolRunner,\n TradeLogger,\n checkForUpdates,\n runSetup,\n printSetupUsage,\n SUPPORTED_CLIENTS,\n} from \"@bithumb-tradekit/core\";\nimport type { ToolRunner, ClientId } from \"@bithumb-tradekit/core\";\nimport { parseCli } from \"./parser.js\";\nimport type { CliValues } from \"./parser.js\";\nimport { outputLine, errorLine, printJson, printKv } from \"./formatter.js\";\nimport { printHelp } from \"./help.js\";\nimport { CLI_VERSION } from \"./constants.js\";\n\nfunction wrapRunnerWithLogger(\n baseRunner: ToolRunner,\n logger: TradeLogger,\n): ToolRunner {\n return async (toolName, args) => {\n const start = Date.now();\n try {\n const result = await baseRunner(toolName, args);\n logger.logTool(\"info\", toolName, args, { status: \"ok\" }, Date.now() - start);\n return result;\n } catch (error) {\n logger.logTool(\"error\", toolName, args, error, Date.now() - start);\n throw error;\n }\n };\n}\n\nfunction handleSetup(argv: string[]): void {\n const idx = argv.indexOf(\"setup\");\n const rest = argv.slice(idx + 1);\n\n let client: string | undefined;\n let profile: string | undefined;\n let modules: string | undefined;\n\n for (let i = 0; i < rest.length; i++) {\n if (rest[i] === \"--client\" && rest[i + 1]) {\n client = rest[++i];\n } else if (rest[i] === \"--profile\" && rest[i + 1]) {\n profile = rest[++i];\n } else if (rest[i] === \"--modules\" && rest[i + 1]) {\n modules = rest[++i];\n } else if (rest[i] === \"--help\" || rest[i] === \"-h\") {\n printSetupUsage();\n return;\n }\n }\n\n if (!client || !SUPPORTED_CLIENTS.includes(client as ClientId)) {\n errorLine(`Error: --client is required. Supported: ${SUPPORTED_CLIENTS.join(\", \")}`);\n process.exitCode = 1;\n return;\n }\n\n runSetup({ client: client as ClientId, profile, modules });\n}\n\nasync function main(): Promise<void> {\n checkForUpdates(\"@bithumb-tradekit/cli\", CLI_VERSION);\n\n // 1. Setup subcommand (before parseCli)\n if (process.argv[2] === \"setup\") {\n handleSetup(process.argv);\n return;\n }\n\n // 2. Parse arguments\n const { values: v, positionals } = parseCli(process.argv.slice(2));\n\n if (v.version) {\n outputLine(CLI_VERSION);\n return;\n }\n\n if (v.help || positionals.length === 0) {\n printHelp(positionals);\n return;\n }\n\n const [module, action, ...rest] = positionals;\n const json = v.json ?? false;\n\n // 3. Config command (no auth needed, no runner needed)\n if (module === \"config\") {\n const { handleConfigCommand } = await import(\"./commands/config.js\");\n return handleConfigCommand(action, rest, v);\n }\n\n // 4. Load config + create runner\n const config = loadConfig({\n modules: v.modules,\n readOnly: v.readOnly,\n verbose: v.verbose,\n profile: v.profile,\n });\n const client = new BithumbRestClient(config);\n const baseRunner = createToolRunner(client, config);\n const logger = new TradeLogger(v.verbose ? \"debug\" : \"info\");\n const run = wrapRunnerWithLogger(baseRunner, logger);\n\n // 5. Diagnose (needs config but no auth)\n if (module === \"diagnose\") {\n const result = await run(\"system_diagnose\", {});\n const data = result.data ?? result;\n if (json) return printJson(data);\n printKv(data as Record<string, unknown>);\n return;\n }\n\n // 5b. System capabilities (no auth needed)\n // Accept both `system capabilities` (canonical) and `account capabilities` (alias)\n if (\n (module === \"system\" && action === \"capabilities\") ||\n (module === \"account\" && action === \"capabilities\")\n ) {\n const result = await run(\"system_get_capabilities\", {});\n const data = result.data ?? result;\n if (json) return printJson(data);\n printKv(data as Record<string, unknown>);\n return;\n }\n\n // 6. Private API auth guard\n const privateModules = new Set([\"account\", \"trade\", \"twap\", \"withdraw\", \"deposit\"]);\n if (privateModules.has(module) && !config.hasAuth) {\n errorLine(\n \"Error: API credentials required. Run 'bithumb setup' or configure ~/.bithumb/config.toml\",\n );\n process.exitCode = 1;\n return;\n }\n\n // 7. Module routing\n if (module === \"market\") {\n const { handleMarketCommand } = await import(\"./commands/market.js\");\n return handleMarketCommand(run, action, rest, v, json);\n }\n if (module === \"account\") {\n const { handleAccountCommand } = await import(\"./commands/account.js\");\n return handleAccountCommand(run, action, v, json);\n }\n if (module === \"trade\") {\n const { handleTradeCommand } = await import(\"./commands/trade.js\");\n return handleTradeCommand(run, action, v, json);\n }\n if (module === \"twap\") {\n const { handleTwapCommand } = await import(\"./commands/twap.js\");\n return handleTwapCommand(run, action, v, json);\n }\n if (module === \"withdraw\") {\n const { handleWithdrawCommand } = await import(\"./commands/withdraw.js\");\n return handleWithdrawCommand(run, action, v, json);\n }\n if (module === \"deposit\") {\n const { handleDepositCommand } = await import(\"./commands/deposit.js\");\n return handleDepositCommand(run, action, v, json);\n }\n\n errorLine(`Unknown command: ${module}. Run 'bithumb --help' for usage.`);\n process.exitCode = 1;\n}\n\nmain().catch((err) => {\n errorLine(`Fatal: ${err instanceof Error ? err.message : String(err)}`);\n process.exitCode = 1;\n});\n"],"mappings":"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","names":[]}
@@ -59,7 +59,7 @@ async function handleMarketCommand(run, action, rest, v, json) {
59
59
  case "fee-inout":
60
60
  return cmdFeeInout(run, rest[0] ?? v.currency, json);
61
61
  default:
62
- errorLine(`Unknown market command: ${action}. Run 'bithumb-trade market --help' for usage.`);
62
+ errorLine(`Unknown market command: ${action}. Run 'bithumb market --help' for usage.`);
63
63
  process.exitCode = 1;
64
64
  }
65
65
  }
@@ -82,7 +82,7 @@ async function cmdMarkets(run, opts) {
82
82
  }
83
83
  async function cmdTicker(run, markets, json) {
84
84
  if (!markets) {
85
- errorLine("Error: market argument required. Example: bithumb-trade market ticker KRW-BTC");
85
+ errorLine("Error: market argument required. Example: bithumb market ticker KRW-BTC");
86
86
  process.exitCode = 1;
87
87
  return;
88
88
  }
@@ -104,7 +104,7 @@ async function cmdTicker(run, markets, json) {
104
104
  }
105
105
  async function cmdOrderbook(run, markets, json) {
106
106
  if (!markets) {
107
- errorLine("Error: market argument required. Example: bithumb-trade market orderbook KRW-BTC");
107
+ errorLine("Error: market argument required. Example: bithumb market orderbook KRW-BTC");
108
108
  process.exitCode = 1;
109
109
  return;
110
110
  }
@@ -133,7 +133,7 @@ async function cmdOrderbook(run, markets, json) {
133
133
  }
134
134
  async function cmdTrades(run, market, opts) {
135
135
  if (!market) {
136
- errorLine("Error: market argument required. Example: bithumb-trade market trades KRW-BTC");
136
+ errorLine("Error: market argument required. Example: bithumb market trades KRW-BTC");
137
137
  process.exitCode = 1;
138
138
  return;
139
139
  }
@@ -284,7 +284,7 @@ async function cmdNotices(run, opts) {
284
284
  }
285
285
  async function cmdFeeInout(run, currency, json) {
286
286
  if (!currency) {
287
- errorLine("Error: currency argument required. Example: bithumb-trade market fee-inout BTC");
287
+ errorLine("Error: currency argument required. Example: bithumb market fee-inout BTC");
288
288
  process.exitCode = 1;
289
289
  return;
290
290
  }
@@ -301,4 +301,4 @@ async function cmdFeeInout(run, currency, json) {
301
301
  export {
302
302
  handleMarketCommand
303
303
  };
304
- //# sourceMappingURL=market-B32IKWHH.js.map
304
+ //# sourceMappingURL=market-V7L36QN3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/market.ts"],"sourcesContent":["import type { ToolRunner } from \"@bithumb-tradekit/core\";\nimport type { CliValues } from \"../parser.js\";\nimport { toNumber } from \"../parser.js\";\nimport { outputLine, errorLine, printJson, printTable, printKv } from \"../formatter.js\";\n\nexport async function handleMarketCommand(\n run: ToolRunner,\n action: string,\n rest: string[],\n v: CliValues,\n json: boolean,\n): Promise<void> {\n switch (action) {\n case \"markets\":\n return cmdMarkets(run, { isDetails: v.isDetails, json });\n case \"ticker\":\n return cmdTicker(run, rest[0] ?? v.market, json);\n case \"orderbook\":\n return cmdOrderbook(run, rest[0] ?? v.market, json);\n case \"trades\":\n return cmdTrades(run, rest[0] ?? v.market, {\n count: toNumber(v.count),\n to: v.to,\n cursor: v.cursor,\n daysAgo: toNumber(v.daysAgo),\n json,\n });\n case \"candles-minutes\":\n return cmdCandlesMinutes(run, rest[0] ?? v.market, {\n unit: toNumber(v.unit) ?? 1,\n count: toNumber(v.count),\n to: v.to,\n json,\n });\n case \"candles-days\":\n return cmdCandlesDays(run, rest[0] ?? v.market, {\n count: toNumber(v.count),\n to: v.to,\n convertingPriceUnit: v.convertingPriceUnit,\n json,\n });\n case \"candles-weeks\":\n return cmdCandlesWeeks(run, rest[0] ?? v.market, {\n count: toNumber(v.count),\n to: v.to,\n json,\n });\n case \"candles-months\":\n return cmdCandlesMonths(run, rest[0] ?? v.market, {\n count: toNumber(v.count),\n to: v.to,\n json,\n });\n case \"warnings\":\n return cmdWarnings(run, json);\n case \"notices\":\n return cmdNotices(run, { count: toNumber(v.count), json });\n case \"fee-inout\":\n return cmdFeeInout(run, rest[0] ?? v.currency, json);\n default:\n errorLine(`Unknown market command: ${action}. Run 'bithumb market --help' for usage.`);\n process.exitCode = 1;\n }\n}\n\nasync function cmdMarkets(\n run: ToolRunner,\n opts: { isDetails?: boolean; json: boolean },\n): Promise<void> {\n const result = await run(\"market_get_markets\", {\n ...(opts.isDetails !== undefined && { isDetails: opts.isDetails }),\n });\n const items = result.data as Record<string, unknown>[];\n if (opts.json) return printJson(items);\n if (!items?.length) { outputLine(\"No markets found\"); return; }\n printTable(items.map((m) => ({\n market: m[\"market\"],\n korean_name: m[\"korean_name\"],\n english_name: m[\"english_name\"],\n ...(opts.isDetails ? { market_warning: m[\"market_warning\"] ?? \"\" } : {}),\n })));\n}\n\nasync function cmdTicker(run: ToolRunner, markets: string | undefined, json: boolean): Promise<void> {\n if (!markets) { errorLine(\"Error: market argument required. Example: bithumb market ticker KRW-BTC\"); process.exitCode = 1; return; }\n const result = await run(\"market_get_ticker\", { markets });\n const items = result.data as Record<string, unknown>[];\n if (json) return printJson(items);\n if (!items?.length) { outputLine(\"No ticker data\"); return; }\n printTable(items.map((t) => ({\n market: t[\"market\"],\n trade_price: t[\"trade_price\"],\n signed_change_rate: t[\"signed_change_rate\"],\n acc_trade_volume_24h: t[\"acc_trade_volume_24h\"],\n high_price: t[\"high_price\"],\n low_price: t[\"low_price\"],\n })));\n}\n\nasync function cmdOrderbook(run: ToolRunner, markets: string | undefined, json: boolean): Promise<void> {\n if (!markets) { errorLine(\"Error: market argument required. Example: bithumb market orderbook KRW-BTC\"); process.exitCode = 1; return; }\n const result = await run(\"market_get_orderbook\", { markets });\n const items = result.data as Record<string, unknown>[];\n if (json) return printJson(items);\n if (!items?.length) { outputLine(\"No orderbook data\"); return; }\n for (const book of items) {\n outputLine(`\\n--- ${book[\"market\"]} ---`);\n outputLine(`Total Ask Size: ${book[\"total_ask_size\"]}`);\n outputLine(`Total Bid Size: ${book[\"total_bid_size\"]}`);\n const units = book[\"orderbook_units\"] as Record<string, unknown>[];\n if (units?.length) {\n printTable(units.slice(0, 10).map((u) => ({\n ask_price: u[\"ask_price\"],\n ask_size: u[\"ask_size\"],\n bid_price: u[\"bid_price\"],\n bid_size: u[\"bid_size\"],\n })));\n }\n }\n}\n\nasync function cmdTrades(\n run: ToolRunner,\n market: string | undefined,\n opts: { count?: number; to?: string; cursor?: string; daysAgo?: number; json: boolean },\n): Promise<void> {\n if (!market) { errorLine(\"Error: market argument required. Example: bithumb market trades KRW-BTC\"); process.exitCode = 1; return; }\n const args: Record<string, unknown> = { market };\n if (opts.count !== undefined) args.count = opts.count;\n if (opts.to !== undefined) args.to = opts.to;\n if (opts.cursor !== undefined) args.cursor = opts.cursor;\n if (opts.daysAgo !== undefined) args.daysAgo = opts.daysAgo;\n const result = await run(\"market_get_trades\", args);\n const items = result.data as Record<string, unknown>[];\n if (opts.json) return printJson(items);\n if (!items?.length) { outputLine(\"No trades found\"); return; }\n printTable(items.map((t) => ({\n trade_date_utc: t[\"trade_date_utc\"],\n trade_time_utc: t[\"trade_time_utc\"],\n trade_price: t[\"trade_price\"],\n trade_volume: t[\"trade_volume\"],\n ask_bid: t[\"ask_bid\"],\n })));\n}\n\nasync function cmdCandlesMinutes(\n run: ToolRunner,\n market: string | undefined,\n opts: { unit: number; count?: number; to?: string; json: boolean },\n): Promise<void> {\n if (!market) { errorLine(\"Error: market argument required\"); process.exitCode = 1; return; }\n const args: Record<string, unknown> = { market, unit: opts.unit };\n if (opts.count !== undefined) args.count = opts.count;\n if (opts.to !== undefined) args.to = opts.to;\n const result = await run(\"market_get_candles_minutes\", args);\n const items = result.data as Record<string, unknown>[];\n if (opts.json) return printJson(items);\n if (!items?.length) { outputLine(\"No candle data\"); return; }\n printTable(items.map((c) => ({\n candle_date_time_kst: c[\"candle_date_time_kst\"],\n opening_price: c[\"opening_price\"],\n high_price: c[\"high_price\"],\n low_price: c[\"low_price\"],\n trade_price: c[\"trade_price\"],\n candle_acc_trade_volume: c[\"candle_acc_trade_volume\"],\n })));\n}\n\nasync function cmdCandlesDays(\n run: ToolRunner,\n market: string | undefined,\n opts: { count?: number; to?: string; convertingPriceUnit?: string; json: boolean },\n): Promise<void> {\n if (!market) { errorLine(\"Error: market argument required\"); process.exitCode = 1; return; }\n const args: Record<string, unknown> = { market };\n if (opts.count !== undefined) args.count = opts.count;\n if (opts.to !== undefined) args.to = opts.to;\n if (opts.convertingPriceUnit !== undefined) args.convertingPriceUnit = opts.convertingPriceUnit;\n const result = await run(\"market_get_candles_days\", args);\n const items = result.data as Record<string, unknown>[];\n if (opts.json) return printJson(items);\n if (!items?.length) { outputLine(\"No candle data\"); return; }\n printTable(items.map((c) => ({\n candle_date_time_kst: c[\"candle_date_time_kst\"],\n opening_price: c[\"opening_price\"],\n high_price: c[\"high_price\"],\n low_price: c[\"low_price\"],\n trade_price: c[\"trade_price\"],\n candle_acc_trade_volume: c[\"candle_acc_trade_volume\"],\n })));\n}\n\nasync function cmdCandlesWeeks(\n run: ToolRunner,\n market: string | undefined,\n opts: { count?: number; to?: string; json: boolean },\n): Promise<void> {\n if (!market) { errorLine(\"Error: market argument required\"); process.exitCode = 1; return; }\n const args: Record<string, unknown> = { market };\n if (opts.count !== undefined) args.count = opts.count;\n if (opts.to !== undefined) args.to = opts.to;\n const result = await run(\"market_get_candles_weeks\", args);\n const items = result.data as Record<string, unknown>[];\n if (opts.json) return printJson(items);\n if (!items?.length) { outputLine(\"No candle data\"); return; }\n printTable(items.map((c) => ({\n candle_date_time_kst: c[\"candle_date_time_kst\"],\n opening_price: c[\"opening_price\"],\n high_price: c[\"high_price\"],\n low_price: c[\"low_price\"],\n trade_price: c[\"trade_price\"],\n candle_acc_trade_volume: c[\"candle_acc_trade_volume\"],\n })));\n}\n\nasync function cmdCandlesMonths(\n run: ToolRunner,\n market: string | undefined,\n opts: { count?: number; to?: string; json: boolean },\n): Promise<void> {\n if (!market) { errorLine(\"Error: market argument required\"); process.exitCode = 1; return; }\n const args: Record<string, unknown> = { market };\n if (opts.count !== undefined) args.count = opts.count;\n if (opts.to !== undefined) args.to = opts.to;\n const result = await run(\"market_get_candles_months\", args);\n const items = result.data as Record<string, unknown>[];\n if (opts.json) return printJson(items);\n if (!items?.length) { outputLine(\"No candle data\"); return; }\n printTable(items.map((c) => ({\n candle_date_time_kst: c[\"candle_date_time_kst\"],\n opening_price: c[\"opening_price\"],\n high_price: c[\"high_price\"],\n low_price: c[\"low_price\"],\n trade_price: c[\"trade_price\"],\n candle_acc_trade_volume: c[\"candle_acc_trade_volume\"],\n })));\n}\n\nasync function cmdWarnings(run: ToolRunner, json: boolean): Promise<void> {\n const result = await run(\"market_get_warnings\", {});\n const data = result.data;\n if (json) return printJson(data);\n const items = data as Record<string, unknown>[];\n if (!items?.length) { outputLine(\"No warnings found\"); return; }\n printTable(items);\n}\n\nasync function cmdNotices(run: ToolRunner, opts: { count?: number; json: boolean }): Promise<void> {\n const args: Record<string, unknown> = {};\n if (opts.count !== undefined) args.count = opts.count;\n const result = await run(\"market_get_notices\", args);\n const data = result.data;\n if (opts.json) return printJson(data);\n const items = data as Record<string, unknown>[];\n if (!items?.length) { outputLine(\"No notices found\"); return; }\n printTable(items);\n}\n\nasync function cmdFeeInout(run: ToolRunner, currency: string | undefined, json: boolean): Promise<void> {\n if (!currency) { errorLine(\"Error: currency argument required. Example: bithumb market fee-inout BTC\"); process.exitCode = 1; return; }\n const result = await run(\"market_get_fee_inout\", { currency });\n const data = result.data;\n if (json) return printJson(data);\n const items = data as Record<string, unknown>[];\n if (Array.isArray(items) && items.length) { printTable(items); return; }\n printJson(data);\n}\n"],"mappings":"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","names":[]}
@@ -56,7 +56,7 @@ async function handleTradeCommand(run, action, v, json) {
56
56
  case "batch-cancel":
57
57
  return cmdBatchCancel(run, v, json);
58
58
  default:
59
- errorLine(`Unknown trade command: ${action}. Run 'bithumb-trade trade --help' for usage.`);
59
+ errorLine(`Unknown trade command: ${action}. Run 'bithumb trade --help' for usage.`);
60
60
  process.exitCode = 1;
61
61
  }
62
62
  }
@@ -90,7 +90,7 @@ async function cmdOrders(run, opts) {
90
90
  }
91
91
  async function cmdGet(run, opts) {
92
92
  if (!opts.uuid && !opts.clientOrderId) {
93
- errorLine("Error: --uuid or --client-order-id is required. Example: bithumb-trade trade get --uuid abc-123");
93
+ errorLine("Error: --uuid or --client-order-id is required. Example: bithumb trade get --uuid abc-123");
94
94
  process.exitCode = 1;
95
95
  return;
96
96
  }
@@ -105,7 +105,7 @@ async function cmdGet(run, opts) {
105
105
  async function cmdPlace(run, opts) {
106
106
  if (!opts.market || !opts.side || !opts.ordType) {
107
107
  errorLine("Error: --market, --side, and --order-type are required.");
108
- errorLine("Example: bithumb-trade trade place --market KRW-BTC --side bid --order-type limit --price 50000000 --volume 0.01");
108
+ errorLine("Example: bithumb trade place --market KRW-BTC --side bid --order-type limit --price 50000000 --volume 0.01");
109
109
  errorLine("Note: --ord-type is accepted as a deprecated alias of --order-type.");
110
110
  process.exitCode = 1;
111
111
  return;
@@ -126,7 +126,7 @@ async function cmdPlace(run, opts) {
126
126
  }
127
127
  async function cmdCancel(run, opts) {
128
128
  if (!opts.uuid && !opts.clientOrderId) {
129
- errorLine("Error: --uuid or --client-order-id is required. Example: bithumb-trade trade cancel --uuid abc-123");
129
+ errorLine("Error: --uuid or --client-order-id is required. Example: bithumb trade cancel --uuid abc-123");
130
130
  process.exitCode = 1;
131
131
  return;
132
132
  }
@@ -142,7 +142,7 @@ async function cmdCancel(run, opts) {
142
142
  async function cmdBatchPlace(run, v, json) {
143
143
  if (!v.file) {
144
144
  errorLine("Error: --file is required. Provide a JSON file with batch orders.");
145
- errorLine("Example: bithumb-trade trade batch-place --file orders.json");
145
+ errorLine("Example: bithumb trade batch-place --file orders.json");
146
146
  errorLine('File format: [{"market":"KRW-BTC","side":"bid","order_type":"limit","price":"50000000","volume":"0.01"}]');
147
147
  process.exitCode = 1;
148
148
  return;
@@ -218,7 +218,7 @@ async function cmdBatchCancel(run, v, json) {
218
218
  if (v.uuids) args.order_ids = toArray(v.uuids);
219
219
  if (v.clientOrderIds) args.client_order_ids = toArray(v.clientOrderIds);
220
220
  if (!args.order_ids && !args.client_order_ids) {
221
- errorLine("Error: --uuids or --client-order-ids required. Example: bithumb-trade trade batch-cancel --uuids id1,id2");
221
+ errorLine("Error: --uuids or --client-order-ids required. Example: bithumb trade batch-cancel --uuids id1,id2");
222
222
  process.exitCode = 1;
223
223
  return;
224
224
  }
@@ -230,4 +230,4 @@ async function cmdBatchCancel(run, v, json) {
230
230
  export {
231
231
  handleTradeCommand
232
232
  };
233
- //# sourceMappingURL=trade-ZZU6PXJL.js.map
233
+ //# sourceMappingURL=trade-MDOYZ5BW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/trade.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type { ToolRunner } from \"@bithumb-tradekit/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, { uuid: v.uuid, 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[\"uuid\"]}`);\n printKv(data);\n}\n\nasync function cmdCancel(\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 cancel --uuid abc-123\");\n process.exitCode = 1;\n return;\n }\n const args: Record<string, unknown> = {};\n if (opts.uuid) args.order_id = opts.uuid;\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[\"uuid\"] ?? opts.uuid ?? 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.uuids) args.order_ids = toArray(v.uuids);\n if (v.clientOrderIds) args.client_order_ids = toArray(v.clientOrderIds);\n if (!args.order_ids && !args.client_order_ids) {\n errorLine(\"Error: --uuids or --client-order-ids required. Example: bithumb trade batch-cancel --uuids 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":[]}
@@ -21,7 +21,7 @@ async function handleTwapCommand(run, action, v, json) {
21
21
  case "cancel":
22
22
  return cmdCancel(run, v, json);
23
23
  default:
24
- errorLine(`Unknown twap command: ${action}. Run 'bithumb-trade twap --help' for usage.`);
24
+ errorLine(`Unknown twap command: ${action}. Run 'bithumb twap --help' for usage.`);
25
25
  process.exitCode = 1;
26
26
  }
27
27
  }
@@ -63,7 +63,7 @@ async function cmdOrders(run, v, json) {
63
63
  }
64
64
  async function cmdCancel(run, v, json) {
65
65
  if (!v.algoOrderId) {
66
- errorLine("Error: --algo-order-id required. Example: bithumb-trade twap cancel --algo-order-id abc-123");
66
+ errorLine("Error: --algo-order-id required. Example: bithumb twap cancel --algo-order-id abc-123");
67
67
  process.exitCode = 1;
68
68
  return;
69
69
  }
@@ -75,4 +75,4 @@ async function cmdCancel(run, v, json) {
75
75
  export {
76
76
  handleTwapCommand
77
77
  };
78
- //# sourceMappingURL=twap-U3LDHACU.js.map
78
+ //# sourceMappingURL=twap-QGTXCV3U.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/twap.ts"],"sourcesContent":["import type { ToolRunner } from \"@bithumb-tradekit/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 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 const items = result.data as Record<string, unknown>[];\n if (json) return printJson(items);\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,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;AAChD,QAAM,QAAQ,OAAO;AACrB,MAAI,KAAM,QAAO,UAAU,KAAK;AAChC,MAAI,CAAC,OAAO,QAAQ;AAAE,eAAW,sBAAsB;AAAG;AAAA,EAAQ;AAClE,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":[]}
@@ -31,13 +31,13 @@ async function handleWithdrawCommand(run, action, v, json) {
31
31
  case "addresses":
32
32
  return cmdAddresses(run, json);
33
33
  default:
34
- errorLine(`Unknown withdraw command: ${action}. Run 'bithumb-trade withdraw --help' for usage.`);
34
+ errorLine(`Unknown withdraw command: ${action}. Run 'bithumb withdraw --help' for usage.`);
35
35
  process.exitCode = 1;
36
36
  }
37
37
  }
38
38
  async function cmdChance(run, v, json) {
39
39
  if (!v.currency || !v.netType) {
40
- errorLine("Error: --currency and --net-type required. Example: bithumb-trade withdraw chance --currency BTC --net-type BTC");
40
+ errorLine("Error: --currency and --net-type required. Example: bithumb withdraw chance --currency BTC --net-type BTC");
41
41
  process.exitCode = 1;
42
42
  return;
43
43
  }
@@ -48,7 +48,7 @@ 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-trade withdraw get --currency BTC --uuid abc-123");
51
+ errorLine("Error: --currency required. Example: bithumb withdraw get --currency BTC --uuid abc-123");
52
52
  process.exitCode = 1;
53
53
  return;
54
54
  }
@@ -136,7 +136,7 @@ async function cmdKrw(run, v, json) {
136
136
  }
137
137
  async function cmdCancel(run, v, json) {
138
138
  if (!v.withdrawalId) {
139
- errorLine("Error: --withdrawal-id required. Example: bithumb-trade withdraw cancel --withdrawal-id abc-123");
139
+ errorLine("Error: --withdrawal-id required. Example: bithumb withdraw cancel --withdrawal-id abc-123");
140
140
  process.exitCode = 1;
141
141
  return;
142
142
  }
@@ -158,4 +158,4 @@ async function cmdAddresses(run, json) {
158
158
  export {
159
159
  handleWithdrawCommand
160
160
  };
161
- //# sourceMappingURL=withdraw-7C657PEC.js.map
161
+ //# sourceMappingURL=withdraw-PLP3ZC4Q.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/withdraw.ts"],"sourcesContent":["import type { ToolRunner } from \"@bithumb-tradekit/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 --uuid abc-123\");\n process.exitCode = 1;\n return;\n }\n const args: Record<string, unknown> = { currency: v.currency };\n if (v.uuid) args.uuid = v.uuid;\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 printKv(data);\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.uuids) args.uuids = toArray(v.uuids);\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);\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.uuids) args.uuids = toArray(v.uuids);\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);\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":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuno1026/bithumb-cli",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Bithumb Trade CLI",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/account.ts"],"sourcesContent":["import type { ToolRunner } from \"@bithumb-tradekit/core\";\nimport type { CliValues } from \"../parser.js\";\nimport { toNumber } from \"../parser.js\";\nimport { outputLine, errorLine, printJson, printTable, printKv } from \"../formatter.js\";\n\nexport async function handleAccountCommand(\n run: ToolRunner,\n action: string,\n v: CliValues,\n json: boolean,\n): Promise<void> {\n switch (action) {\n case \"balance\":\n return cmdBalance(run, json);\n case \"order-chance\":\n return cmdOrderChance(run, v.market, json);\n case \"audit\":\n return cmdAudit(run, {\n limit: toNumber(v.limit),\n tool: v.tool,\n since: v.since,\n level: v.level,\n json,\n });\n case \"wallet-status\":\n return cmdWalletStatus(run, json);\n case \"api-keys\":\n return cmdApiKeys(run, json);\n default:\n errorLine(`Unknown account command: ${action}. Run 'bithumb-trade account --help' for usage.`);\n process.exitCode = 1;\n }\n}\n\nasync function cmdBalance(run: ToolRunner, json: boolean): Promise<void> {\n const result = await run(\"account_get_balance\", {});\n const items = result.data as Record<string, unknown>[];\n if (json) return printJson(items);\n if (!items?.length) { outputLine(\"No balances found\"); return; }\n printTable(items.map((b) => ({\n currency: b[\"currency\"],\n balance: b[\"balance\"],\n locked: b[\"locked\"],\n avg_buy_price: b[\"avg_buy_price\"],\n unit_currency: b[\"unit_currency\"],\n })));\n}\n\nasync function cmdOrderChance(run: ToolRunner, market: string | undefined, json: boolean): Promise<void> {\n if (!market) {\n errorLine(\"Error: --market is required. Example: bithumb-trade account order-chance --market KRW-BTC\");\n process.exitCode = 1;\n return;\n }\n const result = await run(\"account_get_order_chance\", { market });\n const data = result.data as Record<string, unknown>;\n if (json) return printJson(data);\n printKv(data);\n}\n\nasync function cmdAudit(\n run: ToolRunner,\n opts: { limit?: number; tool?: string; since?: string; level?: string; json: boolean },\n): Promise<void> {\n const args: Record<string, unknown> = {};\n if (opts.limit !== undefined) args.limit = opts.limit;\n if (opts.tool !== undefined) args.tool = opts.tool;\n if (opts.since !== undefined) args.since = opts.since;\n if (opts.level !== undefined) args.level = opts.level;\n const result = await run(\"trade_get_history\", args);\n const items = result.data as Record<string, unknown>[];\n if (opts.json) return printJson(items);\n if (!items?.length) { outputLine(\"No audit entries found\"); return; }\n printTable(items.map((entry) => ({\n timestamp: entry[\"ts\"],\n level: entry[\"level\"],\n tool: entry[\"tool\"],\n message: entry[\"message\"],\n elapsed_ms: entry[\"elapsed\"],\n })));\n}\n\nasync function cmdWalletStatus(run: ToolRunner, json: boolean): Promise<void> {\n const result = await run(\"account_get_wallet_status\", {});\n const data = result.data;\n if (json) return printJson(data);\n const items = data as Record<string, unknown>[];\n if (!items?.length) { outputLine(\"No wallet status data\"); return; }\n printTable(items);\n}\n\nasync function cmdApiKeys(run: ToolRunner, json: boolean): Promise<void> {\n const result = await run(\"account_get_api_keys\", {});\n const data = result.data;\n if (json) return printJson(data);\n const items = data as Record<string, unknown>[];\n if (!items?.length) { outputLine(\"No API keys found\"); return; }\n printTable(items);\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/config.ts"],"sourcesContent":["import {\n configFilePath,\n readFullConfig,\n writeFullConfig,\n} from \"@bithumb-tradekit/core\";\nimport type { BithumbTomlConfig } from \"@bithumb-tradekit/core\";\nimport type { CliValues } from \"../parser.js\";\nimport { outputLine, errorLine, printJson, printKv, printTable } from \"../formatter.js\";\nimport { existsSync, mkdirSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\n\nexport function handleConfigCommand(\n action: string,\n rest: string[],\n v: CliValues,\n): void {\n const json = v.json ?? false;\n switch (action) {\n case \"show\":\n return cmdConfigShow(json);\n case \"init\":\n return cmdConfigInit();\n case \"set\":\n return cmdConfigSet(rest[0], rest[1], v.profile);\n case \"add-profile\":\n return cmdConfigAddProfile(rest, v);\n case \"list-profiles\":\n return cmdConfigListProfiles(json);\n case \"use\":\n return cmdConfigUse(rest[0]);\n case \"path\":\n outputLine(configFilePath());\n return;\n default:\n if (!action) {\n return cmdConfigShow(json);\n }\n errorLine(`Unknown config command: ${action}. Available: show, init, set, add-profile, list-profiles, use, path`);\n process.exitCode = 1;\n }\n}\n\nfunction cmdConfigShow(json: boolean): void {\n const config = readFullConfig();\n if (json) return printJson(config);\n outputLine(`Config file: ${configFilePath()}`);\n if (config.default_profile) {\n outputLine(`Default profile: ${config.default_profile}`);\n }\n outputLine(\"\");\n const profileNames = Object.keys(config.profiles);\n if (profileNames.length === 0) {\n outputLine(\"No profiles configured. Run 'bithumb-trade config init' to create one.\");\n return;\n }\n for (const name of profileNames) {\n const p = config.profiles[name];\n outputLine(`[${name}]`);\n printKv({\n access_key: p.access_key ? `${p.access_key.slice(0, 8)}...` : \"(not set)\",\n secret_key: p.secret_key ? \"***\" : \"(not set)\",\n ...(p.base_url ? { base_url: p.base_url } : {}),\n ...(p.timeout_ms ? { timeout_ms: p.timeout_ms } : {}),\n });\n outputLine(\"\");\n }\n}\n\nfunction cmdConfigInit(): void {\n const path = configFilePath();\n if (existsSync(path)) {\n outputLine(`Config file already exists: ${path}`);\n outputLine(\"Use 'bithumb-trade config add-profile' to add a new profile.\");\n return;\n }\n const dir = dirname(path);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n const config: BithumbTomlConfig = {\n default_profile: \"default\",\n profiles: {\n default: {\n access_key: \"\",\n secret_key: \"\",\n },\n },\n };\n writeFullConfig(config);\n outputLine(`Config file created: ${path}`);\n outputLine(\"Edit it to add your API credentials.\");\n}\n\nfunction cmdConfigSet(key: string | undefined, value: string | undefined, profileName?: string): void {\n if (!key || value === undefined) {\n errorLine(\"Usage: bithumb-trade config set <key> <value> [--profile <name>]\");\n errorLine(\"Keys: access_key, secret_key, base_url, timeout_ms\");\n process.exitCode = 1;\n return;\n }\n const validKeys = new Set([\"access_key\", \"secret_key\", \"base_url\", \"timeout_ms\"]);\n if (!validKeys.has(key)) {\n errorLine(`Invalid key: ${key}. Valid keys: ${[...validKeys].join(\", \")}`);\n process.exitCode = 1;\n return;\n }\n const config = readFullConfig();\n const name = profileName ?? config.default_profile ?? \"default\";\n if (!config.profiles[name]) {\n config.profiles[name] = {};\n }\n if (key === \"timeout_ms\") {\n (config.profiles[name] as Record<string, unknown>)[key] = Number(value);\n } else {\n (config.profiles[name] as Record<string, unknown>)[key] = value;\n }\n writeFullConfig(config);\n outputLine(`Set ${name}.${key}`);\n}\n\nfunction cmdConfigAddProfile(rest: string[], _v: CliValues): void {\n const name = rest[0];\n if (!name) {\n errorLine(\"Usage: bithumb-trade config add-profile <name>\");\n process.exitCode = 1;\n return;\n }\n const config = readFullConfig();\n if (config.profiles[name]) {\n errorLine(`Profile '${name}' already exists.`);\n process.exitCode = 1;\n return;\n }\n config.profiles[name] = {\n access_key: \"\",\n secret_key: \"\",\n };\n writeFullConfig(config);\n outputLine(`Profile '${name}' added. Edit ${configFilePath()} to set credentials.`);\n}\n\nfunction cmdConfigListProfiles(json: boolean): void {\n const config = readFullConfig();\n const profiles = Object.entries(config.profiles).map(([name, p]) => ({\n name,\n default: name === (config.default_profile ?? \"default\") ? \"*\" : \"\",\n has_credentials: p.access_key && p.secret_key ? \"yes\" : \"no\",\n }));\n if (json) return printJson(profiles);\n if (profiles.length === 0) {\n outputLine(\"No profiles configured.\");\n return;\n }\n printTable(profiles);\n}\n\nfunction cmdConfigUse(profileName: string | undefined): void {\n if (!profileName) {\n errorLine(\"Usage: bithumb-trade config use <profile-name>\");\n process.exitCode = 1;\n return;\n }\n const config = readFullConfig();\n if (!config.profiles[profileName]) {\n errorLine(`Profile '${profileName}' not found. Run 'bithumb-trade config list-profiles' to see available profiles.`);\n process.exitCode = 1;\n return;\n }\n config.default_profile = profileName;\n writeFullConfig(config);\n outputLine(`Default profile set to '${profileName}'`);\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/deposit.ts"],"sourcesContent":["import type { ToolRunner } from \"@bithumb-tradekit/core\";\nimport { BithumbApiError } from \"@bithumb-tradekit/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 handleDepositCommand(\n run: ToolRunner,\n action: string,\n v: CliValues,\n json: boolean,\n): Promise<void> {\n switch (action) {\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 \"krw\":\n return cmdKrw(run, v, json);\n case \"generate-address\":\n return cmdGenerateAddress(run, v, json);\n case \"addresses\":\n return cmdAddresses(run, json);\n case \"address\":\n return cmdAddress(run, v, json);\n default:\n errorLine(`Unknown deposit command: ${action}. Run 'bithumb-trade deposit --help' for usage.`);\n process.exitCode = 1;\n }\n}\n\nasync function cmdGet(run: ToolRunner, v: CliValues, json: boolean): Promise<void> {\n if (v.txids) {\n errorLine(\"Error: 'deposit get' supports --uuid only. For txid lookup use:\");\n errorLine(\" bithumb-trade deposit list --txids <txid1,txid2>\");\n process.exitCode = 1;\n return;\n }\n if (!v.currency) {\n errorLine(\"Error: --currency required. Example: bithumb-trade deposit get --currency BTC --uuid abc-123\");\n process.exitCode = 1;\n return;\n }\n if (!v.uuid) {\n errorLine(\"Error: --uuid required for 'deposit get'. Example: bithumb-trade deposit get --currency BTC --uuid abc-123\");\n errorLine(\"Tip: To search by txid, use 'bithumb-trade deposit list --txids <txid>'.\");\n process.exitCode = 1;\n return;\n }\n const args: Record<string, unknown> = { currency: v.currency, uuid: v.uuid };\n try {\n const result = await run(\"deposit_get\", args);\n const data = result.data as Record<string, unknown> | undefined;\n if (!data || (typeof data === \"object\" && Object.keys(data).length === 0)) {\n outputLine(\"No deposit found.\");\n return;\n }\n if (json) return printJson(data);\n printKv(data);\n } catch (err) {\n // Bithumb API may return 4xx for unknown UUID; render gracefully without the `Fatal:` prefix.\n if (err instanceof BithumbApiError) {\n const codeNum = Number(err.code);\n const codeStr = err.code ?? \"\";\n const errNamePattern = /not.?found|invalid|forbidden|unauthorized|bad.?request/i;\n const messagePattern = /not.?found|invalid/i;\n const isClientError =\n (Number.isFinite(codeNum) && codeNum >= 400 && codeNum < 500) ||\n errNamePattern.test(codeStr) ||\n messagePattern.test(err.message);\n if (isClientError) {\n errorLine(`Error: deposit not found or invalid request (${err.code}). ${err.message}`);\n process.exitCode = 1;\n return;\n }\n // Other Bithumb API errors (5xx, unknown code): still graceful, not Fatal.\n errorLine(`Error: ${err.message}`);\n process.exitCode = 1;\n return;\n }\n throw err;\n }\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.uuids) args.uuids = toArray(v.uuids);\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(\"deposit_get_list\", args);\n const items = result.data as Record<string, unknown>[];\n if (json) return printJson(items);\n if (!items?.length) { outputLine(\"No deposits found\"); return; }\n printTable(items);\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.uuids) args.uuids = toArray(v.uuids);\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(\"deposit_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 deposits found\"); return; }\n printTable(items);\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 deposit request!\");\n process.exitCode = 1;\n return;\n }\n outputLine(\"WARNING: Initiating KRW deposit request.\");\n const result = await run(\"deposit_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 cmdGenerateAddress(run: ToolRunner, v: CliValues, json: boolean): Promise<void> {\n if (!v.currency || !v.netType) {\n errorLine(\"Error: --currency and --net-type required. Example: bithumb-trade deposit generate-address --currency BTC --net-type BTC\");\n process.exitCode = 1;\n return;\n }\n const result = await run(\"deposit_generate_address\", { 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 cmdAddresses(run: ToolRunner, json: boolean): Promise<void> {\n const result = await run(\"deposit_get_addresses\", {});\n const items = result.data as Record<string, unknown>[];\n if (json) return printJson(items);\n if (!items?.length) { outputLine(\"No deposit addresses found\"); return; }\n printTable(items);\n}\n\nasync function cmdAddress(run: ToolRunner, v: CliValues, json: boolean): Promise<void> {\n if (!v.currency || !v.netType) {\n errorLine(\"Error: --currency and --net-type required. Example: bithumb-trade deposit address --currency BTC --net-type BTC\");\n process.exitCode = 1;\n return;\n }\n const result = await run(\"deposit_get_address\", { 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"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/market.ts"],"sourcesContent":["import type { ToolRunner } from \"@bithumb-tradekit/core\";\nimport type { CliValues } from \"../parser.js\";\nimport { toNumber } from \"../parser.js\";\nimport { outputLine, errorLine, printJson, printTable, printKv } from \"../formatter.js\";\n\nexport async function handleMarketCommand(\n run: ToolRunner,\n action: string,\n rest: string[],\n v: CliValues,\n json: boolean,\n): Promise<void> {\n switch (action) {\n case \"markets\":\n return cmdMarkets(run, { isDetails: v.isDetails, json });\n case \"ticker\":\n return cmdTicker(run, rest[0] ?? v.market, json);\n case \"orderbook\":\n return cmdOrderbook(run, rest[0] ?? v.market, json);\n case \"trades\":\n return cmdTrades(run, rest[0] ?? v.market, {\n count: toNumber(v.count),\n to: v.to,\n cursor: v.cursor,\n daysAgo: toNumber(v.daysAgo),\n json,\n });\n case \"candles-minutes\":\n return cmdCandlesMinutes(run, rest[0] ?? v.market, {\n unit: toNumber(v.unit) ?? 1,\n count: toNumber(v.count),\n to: v.to,\n json,\n });\n case \"candles-days\":\n return cmdCandlesDays(run, rest[0] ?? v.market, {\n count: toNumber(v.count),\n to: v.to,\n convertingPriceUnit: v.convertingPriceUnit,\n json,\n });\n case \"candles-weeks\":\n return cmdCandlesWeeks(run, rest[0] ?? v.market, {\n count: toNumber(v.count),\n to: v.to,\n json,\n });\n case \"candles-months\":\n return cmdCandlesMonths(run, rest[0] ?? v.market, {\n count: toNumber(v.count),\n to: v.to,\n json,\n });\n case \"warnings\":\n return cmdWarnings(run, json);\n case \"notices\":\n return cmdNotices(run, { count: toNumber(v.count), json });\n case \"fee-inout\":\n return cmdFeeInout(run, rest[0] ?? v.currency, json);\n default:\n errorLine(`Unknown market command: ${action}. Run 'bithumb-trade market --help' for usage.`);\n process.exitCode = 1;\n }\n}\n\nasync function cmdMarkets(\n run: ToolRunner,\n opts: { isDetails?: boolean; json: boolean },\n): Promise<void> {\n const result = await run(\"market_get_markets\", {\n ...(opts.isDetails !== undefined && { isDetails: opts.isDetails }),\n });\n const items = result.data as Record<string, unknown>[];\n if (opts.json) return printJson(items);\n if (!items?.length) { outputLine(\"No markets found\"); return; }\n printTable(items.map((m) => ({\n market: m[\"market\"],\n korean_name: m[\"korean_name\"],\n english_name: m[\"english_name\"],\n ...(opts.isDetails ? { market_warning: m[\"market_warning\"] ?? \"\" } : {}),\n })));\n}\n\nasync function cmdTicker(run: ToolRunner, markets: string | undefined, json: boolean): Promise<void> {\n if (!markets) { errorLine(\"Error: market argument required. Example: bithumb-trade market ticker KRW-BTC\"); process.exitCode = 1; return; }\n const result = await run(\"market_get_ticker\", { markets });\n const items = result.data as Record<string, unknown>[];\n if (json) return printJson(items);\n if (!items?.length) { outputLine(\"No ticker data\"); return; }\n printTable(items.map((t) => ({\n market: t[\"market\"],\n trade_price: t[\"trade_price\"],\n signed_change_rate: t[\"signed_change_rate\"],\n acc_trade_volume_24h: t[\"acc_trade_volume_24h\"],\n high_price: t[\"high_price\"],\n low_price: t[\"low_price\"],\n })));\n}\n\nasync function cmdOrderbook(run: ToolRunner, markets: string | undefined, json: boolean): Promise<void> {\n if (!markets) { errorLine(\"Error: market argument required. Example: bithumb-trade market orderbook KRW-BTC\"); process.exitCode = 1; return; }\n const result = await run(\"market_get_orderbook\", { markets });\n const items = result.data as Record<string, unknown>[];\n if (json) return printJson(items);\n if (!items?.length) { outputLine(\"No orderbook data\"); return; }\n for (const book of items) {\n outputLine(`\\n--- ${book[\"market\"]} ---`);\n outputLine(`Total Ask Size: ${book[\"total_ask_size\"]}`);\n outputLine(`Total Bid Size: ${book[\"total_bid_size\"]}`);\n const units = book[\"orderbook_units\"] as Record<string, unknown>[];\n if (units?.length) {\n printTable(units.slice(0, 10).map((u) => ({\n ask_price: u[\"ask_price\"],\n ask_size: u[\"ask_size\"],\n bid_price: u[\"bid_price\"],\n bid_size: u[\"bid_size\"],\n })));\n }\n }\n}\n\nasync function cmdTrades(\n run: ToolRunner,\n market: string | undefined,\n opts: { count?: number; to?: string; cursor?: string; daysAgo?: number; json: boolean },\n): Promise<void> {\n if (!market) { errorLine(\"Error: market argument required. Example: bithumb-trade market trades KRW-BTC\"); process.exitCode = 1; return; }\n const args: Record<string, unknown> = { market };\n if (opts.count !== undefined) args.count = opts.count;\n if (opts.to !== undefined) args.to = opts.to;\n if (opts.cursor !== undefined) args.cursor = opts.cursor;\n if (opts.daysAgo !== undefined) args.daysAgo = opts.daysAgo;\n const result = await run(\"market_get_trades\", args);\n const items = result.data as Record<string, unknown>[];\n if (opts.json) return printJson(items);\n if (!items?.length) { outputLine(\"No trades found\"); return; }\n printTable(items.map((t) => ({\n trade_date_utc: t[\"trade_date_utc\"],\n trade_time_utc: t[\"trade_time_utc\"],\n trade_price: t[\"trade_price\"],\n trade_volume: t[\"trade_volume\"],\n ask_bid: t[\"ask_bid\"],\n })));\n}\n\nasync function cmdCandlesMinutes(\n run: ToolRunner,\n market: string | undefined,\n opts: { unit: number; count?: number; to?: string; json: boolean },\n): Promise<void> {\n if (!market) { errorLine(\"Error: market argument required\"); process.exitCode = 1; return; }\n const args: Record<string, unknown> = { market, unit: opts.unit };\n if (opts.count !== undefined) args.count = opts.count;\n if (opts.to !== undefined) args.to = opts.to;\n const result = await run(\"market_get_candles_minutes\", args);\n const items = result.data as Record<string, unknown>[];\n if (opts.json) return printJson(items);\n if (!items?.length) { outputLine(\"No candle data\"); return; }\n printTable(items.map((c) => ({\n candle_date_time_kst: c[\"candle_date_time_kst\"],\n opening_price: c[\"opening_price\"],\n high_price: c[\"high_price\"],\n low_price: c[\"low_price\"],\n trade_price: c[\"trade_price\"],\n candle_acc_trade_volume: c[\"candle_acc_trade_volume\"],\n })));\n}\n\nasync function cmdCandlesDays(\n run: ToolRunner,\n market: string | undefined,\n opts: { count?: number; to?: string; convertingPriceUnit?: string; json: boolean },\n): Promise<void> {\n if (!market) { errorLine(\"Error: market argument required\"); process.exitCode = 1; return; }\n const args: Record<string, unknown> = { market };\n if (opts.count !== undefined) args.count = opts.count;\n if (opts.to !== undefined) args.to = opts.to;\n if (opts.convertingPriceUnit !== undefined) args.convertingPriceUnit = opts.convertingPriceUnit;\n const result = await run(\"market_get_candles_days\", args);\n const items = result.data as Record<string, unknown>[];\n if (opts.json) return printJson(items);\n if (!items?.length) { outputLine(\"No candle data\"); return; }\n printTable(items.map((c) => ({\n candle_date_time_kst: c[\"candle_date_time_kst\"],\n opening_price: c[\"opening_price\"],\n high_price: c[\"high_price\"],\n low_price: c[\"low_price\"],\n trade_price: c[\"trade_price\"],\n candle_acc_trade_volume: c[\"candle_acc_trade_volume\"],\n })));\n}\n\nasync function cmdCandlesWeeks(\n run: ToolRunner,\n market: string | undefined,\n opts: { count?: number; to?: string; json: boolean },\n): Promise<void> {\n if (!market) { errorLine(\"Error: market argument required\"); process.exitCode = 1; return; }\n const args: Record<string, unknown> = { market };\n if (opts.count !== undefined) args.count = opts.count;\n if (opts.to !== undefined) args.to = opts.to;\n const result = await run(\"market_get_candles_weeks\", args);\n const items = result.data as Record<string, unknown>[];\n if (opts.json) return printJson(items);\n if (!items?.length) { outputLine(\"No candle data\"); return; }\n printTable(items.map((c) => ({\n candle_date_time_kst: c[\"candle_date_time_kst\"],\n opening_price: c[\"opening_price\"],\n high_price: c[\"high_price\"],\n low_price: c[\"low_price\"],\n trade_price: c[\"trade_price\"],\n candle_acc_trade_volume: c[\"candle_acc_trade_volume\"],\n })));\n}\n\nasync function cmdCandlesMonths(\n run: ToolRunner,\n market: string | undefined,\n opts: { count?: number; to?: string; json: boolean },\n): Promise<void> {\n if (!market) { errorLine(\"Error: market argument required\"); process.exitCode = 1; return; }\n const args: Record<string, unknown> = { market };\n if (opts.count !== undefined) args.count = opts.count;\n if (opts.to !== undefined) args.to = opts.to;\n const result = await run(\"market_get_candles_months\", args);\n const items = result.data as Record<string, unknown>[];\n if (opts.json) return printJson(items);\n if (!items?.length) { outputLine(\"No candle data\"); return; }\n printTable(items.map((c) => ({\n candle_date_time_kst: c[\"candle_date_time_kst\"],\n opening_price: c[\"opening_price\"],\n high_price: c[\"high_price\"],\n low_price: c[\"low_price\"],\n trade_price: c[\"trade_price\"],\n candle_acc_trade_volume: c[\"candle_acc_trade_volume\"],\n })));\n}\n\nasync function cmdWarnings(run: ToolRunner, json: boolean): Promise<void> {\n const result = await run(\"market_get_warnings\", {});\n const data = result.data;\n if (json) return printJson(data);\n const items = data as Record<string, unknown>[];\n if (!items?.length) { outputLine(\"No warnings found\"); return; }\n printTable(items);\n}\n\nasync function cmdNotices(run: ToolRunner, opts: { count?: number; json: boolean }): Promise<void> {\n const args: Record<string, unknown> = {};\n if (opts.count !== undefined) args.count = opts.count;\n const result = await run(\"market_get_notices\", args);\n const data = result.data;\n if (opts.json) return printJson(data);\n const items = data as Record<string, unknown>[];\n if (!items?.length) { outputLine(\"No notices found\"); return; }\n printTable(items);\n}\n\nasync function cmdFeeInout(run: ToolRunner, currency: string | undefined, json: boolean): Promise<void> {\n if (!currency) { errorLine(\"Error: currency argument required. Example: bithumb-trade market fee-inout BTC\"); process.exitCode = 1; return; }\n const result = await run(\"market_get_fee_inout\", { currency });\n const data = result.data;\n if (json) return printJson(data);\n const items = data as Record<string, unknown>[];\n if (Array.isArray(items) && items.length) { printTable(items); return; }\n printJson(data);\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/trade.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type { ToolRunner } from \"@bithumb-tradekit/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, { uuid: v.uuid, 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 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 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 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[\"uuid\"]}`);\n printKv(data);\n}\n\nasync function cmdCancel(\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 trade cancel --uuid abc-123\");\n process.exitCode = 1;\n return;\n }\n const args: Record<string, unknown> = {};\n if (opts.uuid) args.order_id = opts.uuid;\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[\"uuid\"] ?? opts.uuid ?? 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 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.uuids) args.order_ids = toArray(v.uuids);\n if (v.clientOrderIds) args.client_order_ids = toArray(v.clientOrderIds);\n if (!args.order_ids && !args.client_order_ids) {\n errorLine(\"Error: --uuids or --client-order-ids required. Example: bithumb-trade trade batch-cancel --uuids 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":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/twap.ts"],"sourcesContent":["import type { ToolRunner } from \"@bithumb-tradekit/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-trade 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 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 const items = result.data as Record<string, unknown>[];\n if (json) return printJson(items);\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-trade 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,8CAA8C;AACvF,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,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;AAChD,QAAM,QAAQ,OAAO;AACrB,MAAI,KAAM,QAAO,UAAU,KAAK;AAChC,MAAI,CAAC,OAAO,QAAQ;AAAE,eAAW,sBAAsB;AAAG;AAAA,EAAQ;AAClE,aAAW,KAAK;AAClB;AAEA,eAAe,UAAU,KAAiB,GAAc,MAA8B;AACpF,MAAI,CAAC,EAAE,aAAa;AAClB,cAAU,6FAA6F;AACvG,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":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/withdraw.ts"],"sourcesContent":["import type { ToolRunner } from \"@bithumb-tradekit/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-trade 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-trade 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-trade withdraw get --currency BTC --uuid abc-123\");\n process.exitCode = 1;\n return;\n }\n const args: Record<string, unknown> = { currency: v.currency };\n if (v.uuid) args.uuid = v.uuid;\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 printKv(data);\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.uuids) args.uuids = toArray(v.uuids);\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);\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.uuids) args.uuids = toArray(v.uuids);\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);\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-trade 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":"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","names":[]}