@bithumb-official/bithumb-cli 0.1.16 → 0.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/{chunk-AUQ7MB6O.js → chunk-3VWN4HON.js} +35 -8
  2. package/dist/chunk-3VWN4HON.js.map +1 -0
  3. package/dist/{chunk-YXIFBNEQ.js → chunk-HT2P7KTV.js} +67 -994
  4. package/dist/chunk-HT2P7KTV.js.map +1 -0
  5. package/dist/{deposit-HNUSMKX5.js → deposit-KAUQEY7H.js} +6 -6
  6. package/dist/deposit-KAUQEY7H.js.map +1 -0
  7. package/dist/{deposit-TCMLJ7MI.js → deposit-L3BBLG4X.js} +21 -13
  8. package/dist/deposit-L3BBLG4X.js.map +1 -0
  9. package/dist/index.d.ts +2 -1
  10. package/dist/index.js +99 -60
  11. package/dist/index.js.map +1 -1
  12. package/dist/{market-GLU62BWO.js → market-4IEKEJ4N.js} +8 -7
  13. package/dist/market-4IEKEJ4N.js.map +1 -0
  14. package/dist/{market-EEF3KI4T.js → market-C5ESTU3F.js} +6 -6
  15. package/dist/market-C5ESTU3F.js.map +1 -0
  16. package/dist/{setup-LAAVO63H.js → setup-NC3QC63P.js} +2 -3
  17. package/dist/setup-NC3QC63P.js.map +1 -0
  18. package/dist/{system-XRZ2KHXL.js → system-RVBNM3IX.js} +2 -2
  19. package/dist/{system-BRZY7PTZ.js → system-XK2EF5SQ.js} +3 -7
  20. package/dist/system-XK2EF5SQ.js.map +1 -0
  21. package/dist/{trade-H4G5P2W2.js → trade-RKL7RNME.js} +18 -8
  22. package/dist/trade-RKL7RNME.js.map +1 -0
  23. package/dist/{trade-FERR47DJ.js → trade-X5VBEQJE.js} +21 -10
  24. package/dist/trade-X5VBEQJE.js.map +1 -0
  25. package/dist/{twap-44UCVSIR.js → twap-FQJVPUWH.js} +12 -4
  26. package/dist/twap-FQJVPUWH.js.map +1 -0
  27. package/dist/{twap-4LRBUMTG.js → twap-MZ7ALPBC.js} +3 -3
  28. package/dist/twap-MZ7ALPBC.js.map +1 -0
  29. package/dist/{withdraw-TLGVRUBS.js → withdraw-65X3DXR5.js} +17 -9
  30. package/dist/withdraw-65X3DXR5.js.map +1 -0
  31. package/dist/{withdraw-IRMICBD2.js → withdraw-LDERU7T7.js} +6 -6
  32. package/dist/withdraw-LDERU7T7.js.map +1 -0
  33. package/package.json +1 -1
  34. package/dist/chunk-AUQ7MB6O.js.map +0 -1
  35. package/dist/chunk-YXIFBNEQ.js.map +0 -1
  36. package/dist/config-2P3Y3TQH.js +0 -182
  37. package/dist/config-2P3Y3TQH.js.map +0 -1
  38. package/dist/config-6BIS2PLC.js +0 -154
  39. package/dist/config-6BIS2PLC.js.map +0 -1
  40. package/dist/deposit-HNUSMKX5.js.map +0 -1
  41. package/dist/deposit-TCMLJ7MI.js.map +0 -1
  42. package/dist/market-EEF3KI4T.js.map +0 -1
  43. package/dist/market-GLU62BWO.js.map +0 -1
  44. package/dist/setup-LAAVO63H.js.map +0 -1
  45. package/dist/system-BRZY7PTZ.js.map +0 -1
  46. package/dist/trade-FERR47DJ.js.map +0 -1
  47. package/dist/trade-H4G5P2W2.js.map +0 -1
  48. package/dist/twap-44UCVSIR.js.map +0 -1
  49. package/dist/twap-4LRBUMTG.js.map +0 -1
  50. package/dist/withdraw-IRMICBD2.js.map +0 -1
  51. package/dist/withdraw-TLGVRUBS.js.map +0 -1
  52. /package/dist/{system-XRZ2KHXL.js.map → system-RVBNM3IX.js.map} +0 -0
@@ -2,8 +2,15 @@
2
2
 
3
3
  // src/parser.ts
4
4
  import { parseArgs } from "util";
5
+ var CliUsageError = class extends Error {
6
+ constructor(message) {
7
+ super(message);
8
+ this.name = "CliUsageError";
9
+ }
10
+ };
5
11
  var CLI_OPTIONS = {
6
- profile: { type: "string" },
12
+ "access-key": { type: "string" },
13
+ "secret-key": { type: "string" },
7
14
  json: { type: "boolean", default: false },
8
15
  help: { type: "boolean", short: "h", default: false },
9
16
  version: { type: "boolean", short: "v", default: false },
@@ -16,7 +23,6 @@ var CLI_OPTIONS = {
16
23
  to: { type: "string" },
17
24
  "is-details": { type: "boolean", default: false },
18
25
  market: { type: "string" },
19
- uuid: { type: "string" },
20
26
  "client-order-id": { type: "string" },
21
27
  side: { type: "string" },
22
28
  "ord-type": { type: "string" },
@@ -25,7 +31,6 @@ var CLI_OPTIONS = {
25
31
  volume: { type: "string" },
26
32
  state: { type: "string" },
27
33
  states: { type: "string" },
28
- uuids: { type: "string" },
29
34
  "order-id": { type: "string" },
30
35
  "order-ids": { type: "string" },
31
36
  "client-order-ids": { type: "string" },
@@ -52,6 +57,9 @@ var CLI_OPTIONS = {
52
57
  "two-factor-type": { type: "string" },
53
58
  txids: { type: "string" },
54
59
  "withdrawal-id": { type: "string" },
60
+ "withdrawal-ids": { type: "string" },
61
+ "deposit-id": { type: "string" },
62
+ "deposit-ids": { type: "string" },
55
63
  duration: { type: "string" },
56
64
  frequency: { type: "string" },
57
65
  "algo-order-id": { type: "string" },
@@ -59,6 +67,11 @@ var CLI_OPTIONS = {
59
67
  file: { type: "string" }
60
68
  };
61
69
  function parseCli(argv) {
70
+ for (const token of argv) {
71
+ if (token.startsWith("-") && !token.startsWith("--") && token.length >= 3) {
72
+ throw new CliUsageError(`unknown option: '${token}'`);
73
+ }
74
+ }
62
75
  const { values: raw, positionals } = parseArgs({
63
76
  args: argv,
64
77
  options: CLI_OPTIONS,
@@ -66,7 +79,8 @@ function parseCli(argv) {
66
79
  strict: false
67
80
  });
68
81
  const values = {
69
- profile: raw.profile,
82
+ accessKey: raw["access-key"],
83
+ secretKey: raw["secret-key"],
70
84
  json: raw.json,
71
85
  help: raw.help,
72
86
  version: raw.version,
@@ -79,7 +93,6 @@ function parseCli(argv) {
79
93
  to: raw.to,
80
94
  isDetails: raw["is-details"],
81
95
  market: raw.market,
82
- uuid: raw.uuid,
83
96
  clientOrderId: raw["client-order-id"],
84
97
  side: raw.side,
85
98
  // Canonical: --order-type. Deprecated alias: --ord-type. Prefer canonical.
@@ -90,7 +103,6 @@ function parseCli(argv) {
90
103
  volume: raw.volume,
91
104
  state: raw.state,
92
105
  states: raw.states,
93
- uuids: raw.uuids,
94
106
  orderId: raw["order-id"],
95
107
  orderIds: raw["order-ids"],
96
108
  clientOrderIds: raw["client-order-ids"],
@@ -117,6 +129,9 @@ function parseCli(argv) {
117
129
  twoFactorType: raw["two-factor-type"],
118
130
  txids: raw.txids,
119
131
  withdrawalId: raw["withdrawal-id"],
132
+ withdrawalIds: raw["withdrawal-ids"],
133
+ depositId: raw["deposit-id"],
134
+ depositIds: raw["deposit-ids"],
120
135
  duration: raw.duration,
121
136
  frequency: raw.frequency,
122
137
  algoOrderId: raw["algo-order-id"],
@@ -134,10 +149,22 @@ function toNumber(value) {
134
149
  const n = Number(value);
135
150
  return Number.isNaN(n) ? void 0 : n;
136
151
  }
152
+ var TIMEZONE_OFFSET_PATTERN = /(?:Z|[+\-]\d{2}:?\d{2})$/;
153
+ function parseKstDatetime(value) {
154
+ if (value === void 0 || value === "") return value;
155
+ if (TIMEZONE_OFFSET_PATTERN.test(value)) {
156
+ throw new CliUsageError(
157
+ "Invalid --to: timezone offset is not supported. Bithumb API requires KST naive datetime (no offset). Use YYYY-MM-DDTHH:MM:SS, e.g. 2026-01-01T00:00:00"
158
+ );
159
+ }
160
+ return value;
161
+ }
137
162
 
138
163
  export {
164
+ CliUsageError,
139
165
  parseCli,
140
166
  toArray,
141
- toNumber
167
+ toNumber,
168
+ parseKstDatetime
142
169
  };
143
- //# sourceMappingURL=chunk-AUQ7MB6O.js.map
170
+ //# sourceMappingURL=chunk-3VWN4HON.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/parser.ts"],"sourcesContent":["import { parseArgs } from \"node:util\";\n\nexport class CliUsageError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CliUsageError\";\n }\n}\n\nexport interface CliValues {\n // Global\n accessKey?: string;\n secretKey?: string;\n json?: boolean;\n help?: boolean;\n version?: boolean;\n verbose?: boolean;\n // Setup\n client?: string;\n modules?: string;\n readOnly?: boolean;\n // Market\n unit?: string;\n count?: string;\n to?: string;\n isDetails?: boolean;\n // Trade / Account\n market?: string;\n clientOrderId?: string;\n side?: string;\n ordType?: string;\n // Deprecated alias indicator: true if user passed --ord-type instead of --order-type\n ordTypeFromDeprecatedAlias?: boolean;\n // True when both --order-type and --ord-type are provided. Used to block\n // silent-loss of one flag's value (the deprecated alias was previously dropped).\n ordTypeConflict?: boolean;\n price?: string;\n volume?: string;\n state?: string;\n states?: string;\n orderId?: string;\n orderIds?: string;\n clientOrderIds?: string;\n orderBy?: string;\n cursor?: string;\n daysAgo?: string;\n convertingPriceUnit?: string;\n page?: string;\n // Audit\n limit?: string;\n tool?: string;\n since?: string;\n level?: string;\n // Withdraw / Deposit\n currency?: string;\n netType?: string;\n address?: string;\n secondaryAddress?: string;\n exchangeName?: string;\n receiverType?: string;\n receiverKoName?: string;\n receiverEnName?: string;\n receiverCorpKoName?: string;\n receiverCorpEnName?: string;\n amount?: string;\n twoFactorType?: string;\n txids?: string;\n withdrawalId?: string;\n withdrawalIds?: string;\n depositId?: string;\n depositIds?: string;\n // TWAP\n duration?: string;\n frequency?: string;\n algoOrderId?: string;\n nextKey?: string;\n // Batch\n file?: string;\n}\n\nconst CLI_OPTIONS: Record<string, { type: \"string\" | \"boolean\"; short?: string; default?: string | boolean }> = {\n \"access-key\": { type: \"string\" },\n \"secret-key\": { type: \"string\" },\n json: { type: \"boolean\", default: false },\n help: { type: \"boolean\", short: \"h\", default: false },\n version: { type: \"boolean\", short: \"v\", default: false },\n verbose: { type: \"boolean\", default: false },\n client: { type: \"string\" },\n modules: { type: \"string\" },\n \"read-only\": { type: \"boolean\", default: false },\n unit: { type: \"string\" },\n count: { type: \"string\" },\n to: { type: \"string\" },\n \"is-details\": { type: \"boolean\", default: false },\n market: { type: \"string\" },\n \"client-order-id\": { type: \"string\" },\n side: { type: \"string\" },\n \"ord-type\": { type: \"string\" },\n \"order-type\": { type: \"string\" },\n price: { type: \"string\" },\n volume: { type: \"string\" },\n state: { type: \"string\" },\n states: { type: \"string\" },\n \"order-id\": { type: \"string\" },\n \"order-ids\": { type: \"string\" },\n \"client-order-ids\": { type: \"string\" },\n \"order-by\": { type: \"string\" },\n cursor: { type: \"string\" },\n \"days-ago\": { type: \"string\" },\n \"converting-price-unit\": { type: \"string\" },\n page: { type: \"string\" },\n limit: { type: \"string\" },\n tool: { type: \"string\" },\n since: { type: \"string\" },\n level: { type: \"string\" },\n currency: { type: \"string\" },\n \"net-type\": { type: \"string\" },\n address: { type: \"string\" },\n \"secondary-address\": { type: \"string\" },\n \"exchange-name\": { type: \"string\" },\n \"receiver-type\": { type: \"string\" },\n \"receiver-ko-name\": { type: \"string\" },\n \"receiver-en-name\": { type: \"string\" },\n \"receiver-corp-ko-name\": { type: \"string\" },\n \"receiver-corp-en-name\": { type: \"string\" },\n amount: { type: \"string\" },\n \"two-factor-type\": { type: \"string\" },\n txids: { type: \"string\" },\n \"withdrawal-id\": { type: \"string\" },\n \"withdrawal-ids\": { type: \"string\" },\n \"deposit-id\": { type: \"string\" },\n \"deposit-ids\": { type: \"string\" },\n duration: { type: \"string\" },\n frequency: { type: \"string\" },\n \"algo-order-id\": { type: \"string\" },\n \"next-key\": { type: \"string\" },\n file: { type: \"string\" },\n};\n\nexport function parseCli(argv: string[]): { values: CliValues; positionals: string[] } {\n for (const token of argv) {\n if (token.startsWith(\"-\") && !token.startsWith(\"--\") && token.length >= 3) {\n throw new CliUsageError(`unknown option: '${token}'`);\n }\n }\n\n const { values: raw, positionals } = parseArgs({\n args: argv,\n options: CLI_OPTIONS,\n allowPositionals: true,\n strict: false,\n });\n\n // Map kebab-case to camelCase\n const values: CliValues = {\n accessKey: raw[\"access-key\"] as string | undefined,\n secretKey: raw[\"secret-key\"] as string | undefined,\n json: raw.json as boolean | undefined,\n help: raw.help as boolean | undefined,\n version: raw.version as boolean | undefined,\n verbose: raw.verbose as boolean | undefined,\n client: raw.client as string | undefined,\n modules: raw.modules as string | undefined,\n readOnly: raw[\"read-only\"] as boolean | undefined,\n unit: raw.unit as string | undefined,\n count: raw.count as string | undefined,\n to: raw.to as string | undefined,\n isDetails: raw[\"is-details\"] as boolean | undefined,\n market: raw.market as string | undefined,\n clientOrderId: raw[\"client-order-id\"] as string | undefined,\n side: raw.side as string | undefined,\n // Canonical: --order-type. Deprecated alias: --ord-type. Prefer canonical.\n ordType:\n (raw[\"order-type\"] as string | undefined) ??\n (raw[\"ord-type\"] as string | undefined),\n ordTypeFromDeprecatedAlias:\n (raw[\"order-type\"] as string | undefined) === undefined &&\n (raw[\"ord-type\"] as string | undefined) !== undefined,\n ordTypeConflict:\n (raw[\"order-type\"] as string | undefined) !== undefined &&\n (raw[\"ord-type\"] as string | undefined) !== undefined,\n price: raw.price as string | undefined,\n volume: raw.volume as string | undefined,\n state: raw.state as string | undefined,\n states: raw.states as string | undefined,\n orderId: raw[\"order-id\"] as string | undefined,\n orderIds: raw[\"order-ids\"] as string | undefined,\n clientOrderIds: raw[\"client-order-ids\"] as string | undefined,\n orderBy: raw[\"order-by\"] as string | undefined,\n cursor: raw.cursor as string | undefined,\n daysAgo: raw[\"days-ago\"] as string | undefined,\n convertingPriceUnit: raw[\"converting-price-unit\"] as string | undefined,\n page: raw.page as string | undefined,\n limit: raw.limit as string | undefined,\n tool: raw.tool as string | undefined,\n since: raw.since as string | undefined,\n level: raw.level as string | undefined,\n currency: raw.currency as string | undefined,\n netType: raw[\"net-type\"] as string | undefined,\n address: raw.address as string | undefined,\n secondaryAddress: raw[\"secondary-address\"] as string | undefined,\n exchangeName: raw[\"exchange-name\"] as string | undefined,\n receiverType: raw[\"receiver-type\"] as string | undefined,\n receiverKoName: raw[\"receiver-ko-name\"] as string | undefined,\n receiverEnName: raw[\"receiver-en-name\"] as string | undefined,\n receiverCorpKoName: raw[\"receiver-corp-ko-name\"] as string | undefined,\n receiverCorpEnName: raw[\"receiver-corp-en-name\"] as string | undefined,\n amount: raw.amount as string | undefined,\n twoFactorType: raw[\"two-factor-type\"] as string | undefined,\n txids: raw.txids as string | undefined,\n withdrawalId: raw[\"withdrawal-id\"] as string | undefined,\n withdrawalIds: raw[\"withdrawal-ids\"] as string | undefined,\n depositId: raw[\"deposit-id\"] as string | undefined,\n depositIds: raw[\"deposit-ids\"] as string | undefined,\n duration: raw.duration as string | undefined,\n frequency: raw.frequency as string | undefined,\n algoOrderId: raw[\"algo-order-id\"] as string | undefined,\n nextKey: raw[\"next-key\"] as string | undefined,\n file: raw.file as string | undefined,\n };\n\n return { values, positionals };\n}\n\n// Helper: convert comma-separated string to array\nexport function toArray(value?: string): string[] | undefined {\n if (!value) return undefined;\n return value.split(\",\").map((s) => s.trim()).filter(Boolean);\n}\n\n// Helper: convert string to number or undefined\nexport function toNumber(value?: string): number | undefined {\n if (value === undefined || value === null) return undefined;\n const n = Number(value);\n return Number.isNaN(n) ? undefined : n;\n}\n\n// Helper: guard against ISO 8601 timezone offsets in candle/trade --to values.\n// Bithumb's candle and trade endpoints reject offset-bearing datetimes\n// (e.g. \"2026-05-29T00:00:00+09:00\") with HTTP 400 Invalid parameter.\n// LLMs that consume the bithumb-market skill default to attaching offsets,\n// so we surface a friendly CliUsageError before the request leaves the CLI.\n// Non-offset values (undefined, empty, naive datetime, free-form text) are\n// returned unchanged — Bithumb still owns format validation for those.\nconst TIMEZONE_OFFSET_PATTERN = /(?:Z|[+\\-]\\d{2}:?\\d{2})$/;\n\nexport function parseKstDatetime(value: string | undefined): string | undefined {\n if (value === undefined || value === \"\") return value;\n if (TIMEZONE_OFFSET_PATTERN.test(value)) {\n throw new CliUsageError(\n \"Invalid --to: timezone offset is not supported. \" +\n \"Bithumb API requires KST naive datetime (no offset). \" +\n \"Use YYYY-MM-DDTHH:MM:SS, e.g. 2026-01-01T00:00:00\",\n );\n }\n return value;\n}\n"],"mappings":"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","names":[]}