@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.
- package/dist/{chunk-AUQ7MB6O.js → chunk-3VWN4HON.js} +35 -8
- package/dist/chunk-3VWN4HON.js.map +1 -0
- package/dist/{chunk-YXIFBNEQ.js → chunk-HT2P7KTV.js} +67 -994
- package/dist/chunk-HT2P7KTV.js.map +1 -0
- package/dist/{deposit-HNUSMKX5.js → deposit-KAUQEY7H.js} +6 -6
- package/dist/deposit-KAUQEY7H.js.map +1 -0
- package/dist/{deposit-TCMLJ7MI.js → deposit-L3BBLG4X.js} +21 -13
- package/dist/deposit-L3BBLG4X.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +99 -60
- package/dist/index.js.map +1 -1
- package/dist/{market-GLU62BWO.js → market-4IEKEJ4N.js} +8 -7
- package/dist/market-4IEKEJ4N.js.map +1 -0
- package/dist/{market-EEF3KI4T.js → market-C5ESTU3F.js} +6 -6
- package/dist/market-C5ESTU3F.js.map +1 -0
- package/dist/{setup-LAAVO63H.js → setup-NC3QC63P.js} +2 -3
- package/dist/setup-NC3QC63P.js.map +1 -0
- package/dist/{system-XRZ2KHXL.js → system-RVBNM3IX.js} +2 -2
- package/dist/{system-BRZY7PTZ.js → system-XK2EF5SQ.js} +3 -7
- package/dist/system-XK2EF5SQ.js.map +1 -0
- package/dist/{trade-H4G5P2W2.js → trade-RKL7RNME.js} +18 -8
- package/dist/trade-RKL7RNME.js.map +1 -0
- package/dist/{trade-FERR47DJ.js → trade-X5VBEQJE.js} +21 -10
- package/dist/trade-X5VBEQJE.js.map +1 -0
- package/dist/{twap-44UCVSIR.js → twap-FQJVPUWH.js} +12 -4
- package/dist/twap-FQJVPUWH.js.map +1 -0
- package/dist/{twap-4LRBUMTG.js → twap-MZ7ALPBC.js} +3 -3
- package/dist/twap-MZ7ALPBC.js.map +1 -0
- package/dist/{withdraw-TLGVRUBS.js → withdraw-65X3DXR5.js} +17 -9
- package/dist/withdraw-65X3DXR5.js.map +1 -0
- package/dist/{withdraw-IRMICBD2.js → withdraw-LDERU7T7.js} +6 -6
- package/dist/withdraw-LDERU7T7.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-AUQ7MB6O.js.map +0 -1
- package/dist/chunk-YXIFBNEQ.js.map +0 -1
- package/dist/config-2P3Y3TQH.js +0 -182
- package/dist/config-2P3Y3TQH.js.map +0 -1
- package/dist/config-6BIS2PLC.js +0 -154
- package/dist/config-6BIS2PLC.js.map +0 -1
- package/dist/deposit-HNUSMKX5.js.map +0 -1
- package/dist/deposit-TCMLJ7MI.js.map +0 -1
- package/dist/market-EEF3KI4T.js.map +0 -1
- package/dist/market-GLU62BWO.js.map +0 -1
- package/dist/setup-LAAVO63H.js.map +0 -1
- package/dist/system-BRZY7PTZ.js.map +0 -1
- package/dist/trade-FERR47DJ.js.map +0 -1
- package/dist/trade-H4G5P2W2.js.map +0 -1
- package/dist/twap-44UCVSIR.js.map +0 -1
- package/dist/twap-4LRBUMTG.js.map +0 -1
- package/dist/withdraw-IRMICBD2.js.map +0 -1
- package/dist/withdraw-TLGVRUBS.js.map +0 -1
- /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
|
-
|
|
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
|
-
|
|
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-
|
|
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":[]}
|