gangtise-openapi-cli 0.1.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 gangtiser
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,173 @@
1
+ # Gangtise OpenAPI CLI
2
+
3
+ 一个可直接调用 Gangtise OpenAPI 的命令行工具。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ npm install
9
+ npm run build
10
+ npm link
11
+ ```
12
+
13
+ 安装后可直接使用:
14
+
15
+ ```bash
16
+ gangtise --help
17
+ ```
18
+
19
+ 也可以本地开发运行:
20
+
21
+ ```bash
22
+ npm run dev -- --help
23
+ ```
24
+
25
+ ## 配置
26
+
27
+ 优先读取以下环境变量:
28
+
29
+ ```bash
30
+ export GANGTISE_ACCESS_KEY="your-ak"
31
+ export GANGTISE_SECRET_KEY="your-sk"
32
+ export GANGTISE_BASE_URL="https://open.gangtise.com"
33
+ export GANGTISE_TOKEN="Bearer xxx"
34
+ ```
35
+
36
+ 如果没有 `GANGTISE_TOKEN`,CLI 会自动调用 token 接口并缓存到本地。
37
+
38
+ ## 命令概览
39
+
40
+ - `gangtise auth ...`
41
+ - `gangtise lookup ...`
42
+ - `gangtise insight ...`
43
+ - `gangtise quote ...`
44
+ - `gangtise ai ...`
45
+ - `gangtise raw call ...`
46
+
47
+ 其中 `lookup` 下的研究方向、机构、行业枚举已内置在项目中,无需额外本地文档文件。
48
+
49
+ ## 推荐工作流
50
+
51
+ 先查枚举/参数:
52
+
53
+ ```bash
54
+ gangtise lookup research-area list
55
+ gangtise lookup broker-org list
56
+ gangtise lookup meeting-org list
57
+ gangtise lookup industry list
58
+ ```
59
+
60
+ 再调用业务命令:
61
+
62
+ ```bash
63
+ gangtise insight opinion list --industry 104710000
64
+ gangtise insight summary list --institution C100000017
65
+ gangtise quote day-kline --security 600519.SH --start-date 2025-03-01 --end-date 2025-03-12
66
+ gangtise ai knowledge-batch --query 比亚迪 --query 最近热门概念
67
+ ```
68
+
69
+ ## 自动翻页
70
+
71
+ 以下列表接口会自动翻页:
72
+ - `insight opinion list`
73
+ - `insight summary list`
74
+ - `insight roadshow list`
75
+ - `insight site-visit list`
76
+ - `insight strategy list`
77
+ - `insight forum list`
78
+ - `insight research list`
79
+ - `insight foreign-report list`
80
+ - `insight announcement list`
81
+ - `ai security-clue`
82
+ - `ai cloud-disk-list`
83
+
84
+ 规则:
85
+ - `--from` 表示起始偏移量
86
+ - `--size` 表示最终最多返回多少条记录
87
+ - 如果未传 `--size`,CLI 会根据返回里的 `total` 自动翻页,把从 `from` 开始的全部数据查全
88
+ - 如果传了 `--size`,即使超过接口单次上限,CLI 也会自动翻页,直到累计记录数达到 `size` 或数据取完
89
+
90
+ ## 常用示例
91
+
92
+ ### 认证
93
+
94
+ ```bash
95
+ gangtise auth login
96
+ gangtise auth status
97
+ ```
98
+
99
+ ### Insight
100
+
101
+ ```bash
102
+ # 只取前 120 条,CLI 内部自动翻页
103
+ gangtise insight research list --start-time "2026-04-04 00:00:00" --end-time "2026-04-04 23:59:59" --size 120
104
+
105
+ # 不传 size,自动查全
106
+ gangtise insight research list --start-time "2026-04-04 00:00:00" --end-time "2026-04-04 23:59:59"
107
+
108
+ gangtise insight opinion list --keyword AI
109
+ gangtise insight summary list --keyword 算力
110
+ gangtise insight summary download --summary-id 1831171109967 --output ./summary.pdf
111
+ gangtise insight roadshow list --institution C100000017
112
+ gangtise insight research download --report-id 12345 --output ./report.pdf
113
+ ```
114
+
115
+ ### Quote
116
+
117
+ ```bash
118
+ gangtise quote income-statement --security-code 600519.SH --fiscal-year 2025 --period q3 --field netProfit
119
+ gangtise quote main-business --security-code 600519.SH
120
+ gangtise quote valuation-analysis --security-code 600519.SH --indicator peTtm
121
+ ```
122
+
123
+ ### AI
124
+
125
+ ```bash
126
+ gangtise ai knowledge-batch --query 比亚迪 --query 最近热门概念
127
+ gangtise ai security-clue --start-time "2026-03-01 00:00:00" --end-time "2026-03-23 23:59:59" --query-mode bySecurity --gts-code 000001.SZ --size 800
128
+ gangtise ai one-pager --security-code 600519.SH
129
+ gangtise ai investment-logic --security-code 600519.SH
130
+ gangtise ai peer-comparison --security-code 600519.SH
131
+ gangtise ai cloud-disk-list --keyword 部门文档
132
+ gangtise ai cloud-disk-download --file-id 43319 --output ./file.bin
133
+ gangtise ai knowledge-resource-download --resource-type 60 --source-id 3052524 --output ./resource.txt
134
+ # 若接口返回外链 URL,也会直接输出 URL 或按 --output 保存
135
+ ```
136
+
137
+ ### Raw
138
+
139
+ ```bash
140
+ gangtise raw call insight.opinion.list --body '{"from":0,"size":120}'
141
+ ```
142
+
143
+ 说明:对已标记为自动翻页的 endpoint,`raw call` 也会复用同一套 client 翻页逻辑;这里的 `size` 仍表示最终希望返回的记录数。
144
+
145
+ ## 已验证的真实联调
146
+
147
+ 已真实跑通:
148
+ - auth: `login`
149
+ - lookup: `research-area list` / `broker-org list` / `meeting-org list` / `industry list`
150
+ - insight: `opinion list` / `summary list` / `summary download` / `roadshow list` / `site-visit list` / `strategy list` / `forum list` / `research list` / `research download` / `foreign-report list` / `foreign-report download` / `announcement list` / `announcement download`
151
+ - quote: `day-kline` / `income-statement` / `main-business` / `valuation-analysis`
152
+ - ai: `knowledge-batch` / `knowledge-resource-download` / `security-clue` / `cloud-disk-list` / `one-pager` / `investment-logic` / `peer-comparison`
153
+
154
+ 注意:`knowledge-resource-download` 依赖正确的 `resourceType + sourceId` 组合;错误组合会返回 `433007 不支持该数据源`。
155
+
156
+ ## 输出格式
157
+
158
+ 支持:
159
+
160
+ - `table`
161
+ - `json`
162
+ - `jsonl`
163
+ - `csv`
164
+ - `markdown`
165
+
166
+ ## 常见错误
167
+
168
+ - `8000014`: `GANGTISE_ACCESS_KEY` 错误
169
+ - `8000015`: `GANGTISE_SECRET_KEY` 错误
170
+ - `999997`: 未开通接口权限
171
+ - `999995`: 积分不足
172
+ - `903301`: 今日调用次数达到上限
173
+ - `433007`: 不支持该数据源(常见于知识资源下载参数不匹配)
@@ -0,0 +1,271 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { collectKeyValue, collectList, collectNumberList, maybeArray } from "./core/args.js";
4
+ import { readTokenCache } from "./core/auth.js";
5
+ import { GangtiseClient } from "./core/client.js";
6
+ import { loadConfig } from "./core/config.js";
7
+ import { ApiError, ConfigError, DownloadError } from "./core/errors.js";
8
+ import { renderOutput, saveOutputIfNeeded } from "./core/output.js";
9
+ import { normalizeRows } from "./core/normalize.js";
10
+ function parseFormat(value) {
11
+ const format = value ?? "table";
12
+ if (["table", "json", "jsonl", "csv", "markdown"].includes(format)) {
13
+ return format;
14
+ }
15
+ throw new ConfigError(`Unsupported format: ${format}`);
16
+ }
17
+ async function printData(data, format, output) {
18
+ const normalized = normalizeRows(data);
19
+ const content = renderOutput(normalized, format);
20
+ if (output) {
21
+ await saveOutputIfNeeded(content, output);
22
+ process.stdout.write(`${output}\n`);
23
+ return;
24
+ }
25
+ process.stdout.write(`${content}\n`);
26
+ }
27
+ async function saveDownloadResult(result, fallbackName, output) {
28
+ if (!(result && typeof result === "object")) {
29
+ throw new DownloadError("Unexpected download response");
30
+ }
31
+ const file = result;
32
+ if (file.data instanceof Uint8Array) {
33
+ const outputPath = output ?? file.filename ?? fallbackName;
34
+ await saveOutputIfNeeded(file.data, outputPath);
35
+ process.stdout.write(`${outputPath}\n`);
36
+ return;
37
+ }
38
+ if (typeof file.text === 'string') {
39
+ const outputPath = output ?? `${fallbackName}.txt`;
40
+ await saveOutputIfNeeded(file.text, outputPath);
41
+ process.stdout.write(`${outputPath}\n`);
42
+ return;
43
+ }
44
+ if (typeof file.url === 'string') {
45
+ if (output) {
46
+ await saveOutputIfNeeded(file.url, output);
47
+ process.stdout.write(`${output}\n`);
48
+ return;
49
+ }
50
+ process.stdout.write(`${file.url}\n`);
51
+ return;
52
+ }
53
+ throw new DownloadError("Unexpected download response");
54
+ }
55
+ function addTimeFilters(command) {
56
+ return command
57
+ .option("--from <number>", "Starting offset", "0")
58
+ .option("--size <number>", "Total rows to return; omit to fetch all")
59
+ .option("--start-time <datetime>", "Start time")
60
+ .option("--end-time <datetime>", "End time")
61
+ .option("--keyword <keyword>", "Keyword");
62
+ }
63
+ const program = new Command();
64
+ program.name("gangtise").description("Gangtise OpenAPI CLI").version("0.1.0");
65
+ program
66
+ .command("auth")
67
+ .description("Authentication commands")
68
+ .addCommand(new Command("login")
69
+ .option("--format <format>", "Output format", "json")
70
+ .action(async (options) => {
71
+ const client = new GangtiseClient(loadConfig());
72
+ await printData(await client.login(), parseFormat(options.format));
73
+ }))
74
+ .addCommand(new Command("status")
75
+ .option("--format <format>", "Output format", "json")
76
+ .action(async (options) => {
77
+ const config = loadConfig();
78
+ const cache = await readTokenCache(config.tokenCachePath);
79
+ await printData({ hasEnvToken: Boolean(config.token), hasCachedToken: Boolean(cache?.accessToken), cache }, parseFormat(options.format));
80
+ }));
81
+ const lookup = new Command("lookup").description("Lookup helper APIs");
82
+ lookup
83
+ .addCommand(new Command("research-area").addCommand(new Command("list").option("--format <format>", "Output format", "table").action(async (options) => {
84
+ const client = new GangtiseClient(loadConfig());
85
+ await printData(await client.call("lookup.research-areas.list"), parseFormat(options.format));
86
+ })))
87
+ .addCommand(new Command("broker-org").addCommand(new Command("list").option("--format <format>", "Output format", "table").action(async (options) => {
88
+ const client = new GangtiseClient(loadConfig());
89
+ await printData(await client.call("lookup.broker-orgs.list"), parseFormat(options.format));
90
+ })))
91
+ .addCommand(new Command("meeting-org").addCommand(new Command("list").option("--format <format>", "Output format", "table").action(async (options) => {
92
+ const client = new GangtiseClient(loadConfig());
93
+ await printData(await client.call("lookup.meeting-orgs.list"), parseFormat(options.format));
94
+ })))
95
+ .addCommand(new Command("industry").addCommand(new Command("list").option("--format <format>", "Output format", "table").action(async (options) => {
96
+ const client = new GangtiseClient(loadConfig());
97
+ await printData(await client.call("lookup.industries.list"), parseFormat(options.format));
98
+ })));
99
+ program.addCommand(lookup);
100
+ const insight = new Command("insight").description("Insight APIs");
101
+ const opinion = new Command("opinion");
102
+ const summary = new Command("summary");
103
+ const roadshow = new Command("roadshow");
104
+ const siteVisit = new Command("site-visit");
105
+ const strategy = new Command("strategy");
106
+ const forum = new Command("forum");
107
+ const research = new Command("research");
108
+ const foreignReport = new Command("foreign-report");
109
+ const announcement = new Command("announcement");
110
+ addTimeFilters(opinion.command("list").option("--rank-type <number>", "Rank type", "1").option("--research-area <id>", "Research area ID", collectList, []).option("--chief <id>", "Chief ID", collectList, []).option("--security <code>", "Security code", collectList, []).option("--broker <id>", "Broker ID", collectList, []).option("--industry <id>", "Industry ID", collectList, []).option("--concept <id>", "Concept ID", collectList, []).option("--llm-tag <tag>", "Semantic tag", collectList, []).option("--source <source>", "Source", collectList, []).option("--format <format>", "Output format", "table").option("--output <path>", "Output path")).action(async (options) => {
111
+ const client = new GangtiseClient(loadConfig());
112
+ await printData(await client.call("insight.opinion.list", {
113
+ from: Number(options.from), size: options.size === undefined ? undefined : Number(options.size), startTime: options.startTime, endTime: options.endTime,
114
+ rankType: Number(options.rankType), keyword: options.keyword, researchAreaList: maybeArray(options.researchArea), chiefList: maybeArray(options.chief),
115
+ securityList: maybeArray(options.security), brokerList: maybeArray(options.broker), industryList: maybeArray(options.industry), conceptList: maybeArray(options.concept),
116
+ llmTagList: maybeArray(options.llmTag), sourceList: maybeArray(options.source),
117
+ }), parseFormat(options.format), options.output);
118
+ });
119
+ addTimeFilters(summary.command("list").option("--search-type <number>", "Search type", "1").option("--rank-type <number>", "Rank type", "1").option("--source <number>", "Source type", collectNumberList, []).option("--research-area <id>", "Research area", collectList, []).option("--security <code>", "Security code", collectList, []).option("--institution <id>", "Institution ID", collectList, []).option("--category <name>", "Category", collectList, []).option("--market <name>", "Market", collectList, []).option("--participant-role <name>", "Participant role", collectList, []).option("--format <format>", "Output format", "table").option("--output <path>", "Output path")).action(async (options) => {
120
+ const client = new GangtiseClient(loadConfig());
121
+ await printData(await client.call("insight.summary.list", {
122
+ from: Number(options.from), size: options.size === undefined ? undefined : Number(options.size), startTime: options.startTime, endTime: options.endTime,
123
+ searchType: Number(options.searchType), rankType: Number(options.rankType), keyword: options.keyword, sourceList: options.source.length ? options.source : undefined,
124
+ researchAreaList: maybeArray(options.researchArea), securityList: maybeArray(options.security), institutionList: maybeArray(options.institution),
125
+ categoryList: maybeArray(options.category), marketList: maybeArray(options.market), participantRoleList: maybeArray(options.participantRole),
126
+ }), parseFormat(options.format), options.output);
127
+ });
128
+ summary.command("download").requiredOption("--summary-id <id>").option("--output <path>").action(async (options) => {
129
+ const client = new GangtiseClient(loadConfig());
130
+ await saveDownloadResult(await client.call("insight.summary.download", undefined, { summaryId: options.summaryId }), `summary-${options.summaryId}`, options.output);
131
+ });
132
+ const addScheduleList = (command, endpointKey) => addTimeFilters(command.command("list").option("--research-area <id>", "Research area", collectList, []).option("--institution <id>", "Institution ID", collectList, []).option("--security <code>", "Security code", collectList, []).option("--category <name>", "Category", collectList, []).option("--market <name>", "Market", collectList, []).option("--participant-role <name>", "Participant role", collectList, []).option("--broker-type <name>", "Broker type", collectList, []).option("--permission <number>", "Permission", collectNumberList, []).option("--format <format>", "Output format", "table").option("--output <path>", "Output path")).action(async (options) => {
133
+ const client = new GangtiseClient(loadConfig());
134
+ await printData(await client.call(endpointKey, {
135
+ from: Number(options.from), size: options.size === undefined ? undefined : Number(options.size), startTime: options.startTime, endTime: options.endTime, keyword: options.keyword,
136
+ researchAreaList: maybeArray(options.researchArea), institutionList: maybeArray(options.institution), securityList: maybeArray(options.security),
137
+ categoryList: maybeArray(options.category), marketList: maybeArray(options.market), participantRoleList: maybeArray(options.participantRole),
138
+ brokerTypeList: maybeArray(options.brokerType), permission: options.permission.length ? options.permission : undefined,
139
+ }), parseFormat(options.format), options.output);
140
+ });
141
+ addScheduleList(roadshow, "insight.roadshow.list");
142
+ addScheduleList(siteVisit, "insight.site-visit.list");
143
+ addScheduleList(strategy, "insight.strategy.list");
144
+ addScheduleList(forum, "insight.forum.list");
145
+ addTimeFilters(research.command("list").option("--broker <id>", "Broker ID", collectList, []).option("--security <code>", "Security code", collectList, []).option("--industry <id>", "Industry ID", collectList, []).option("--format <format>", "Output format", "table").option("--output <path>", "Output path")).action(async (options) => {
146
+ const client = new GangtiseClient(loadConfig());
147
+ await printData(await client.call("insight.research.list", {
148
+ from: Number(options.from), size: options.size === undefined ? undefined : Number(options.size), startTime: options.startTime, endTime: options.endTime, keyword: options.keyword,
149
+ brokerList: maybeArray(options.broker), securityList: maybeArray(options.security), industryList: maybeArray(options.industry),
150
+ }), parseFormat(options.format), options.output);
151
+ });
152
+ research.command("download").requiredOption("--report-id <id>").option("--output <path>").action(async (options) => {
153
+ const client = new GangtiseClient(loadConfig());
154
+ await saveDownloadResult(await client.call("insight.research.download", undefined, { reportId: options.reportId }), `research-${options.reportId}`, options.output);
155
+ });
156
+ addTimeFilters(foreignReport.command("list").option("--security <code>", "Security code", collectList, []).option("--format <format>", "Output format", "table").option("--output <path>", "Output path")).action(async (options) => {
157
+ const client = new GangtiseClient(loadConfig());
158
+ await printData(await client.call("insight.foreign-report.list", {
159
+ from: Number(options.from), size: options.size === undefined ? undefined : Number(options.size), startTime: options.startTime, endTime: options.endTime, keyword: options.keyword,
160
+ securityList: maybeArray(options.security),
161
+ }), parseFormat(options.format), options.output);
162
+ });
163
+ foreignReport.command("download").requiredOption("--report-id <id>").option("--output <path>").action(async (options) => {
164
+ const client = new GangtiseClient(loadConfig());
165
+ await saveDownloadResult(await client.call("insight.foreign-report.download", undefined, { reportId: options.reportId }), `foreign-report-${options.reportId}`, options.output);
166
+ });
167
+ addTimeFilters(announcement.command("list").option("--security <code>", "Security code", collectList, []).option("--announcement-type <type>", "Announcement type", collectList, []).option("--format <format>", "Output format", "table").option("--output <path>", "Output path")).action(async (options) => {
168
+ const client = new GangtiseClient(loadConfig());
169
+ await printData(await client.call("insight.announcement.list", {
170
+ from: Number(options.from), size: options.size === undefined ? undefined : Number(options.size), startTime: options.startTime, endTime: options.endTime, keyword: options.keyword,
171
+ securityList: maybeArray(options.security), announcementTypeList: maybeArray(options.announcementType),
172
+ }), parseFormat(options.format), options.output);
173
+ });
174
+ announcement.command("download").requiredOption("--announcement-id <id>").option("--output <path>").action(async (options) => {
175
+ const client = new GangtiseClient(loadConfig());
176
+ await saveDownloadResult(await client.call("insight.announcement.download", undefined, { announcementId: options.announcementId }), `announcement-${options.announcementId}`, options.output);
177
+ });
178
+ insight.addCommand(opinion);
179
+ insight.addCommand(summary);
180
+ insight.addCommand(roadshow);
181
+ insight.addCommand(siteVisit);
182
+ insight.addCommand(strategy);
183
+ insight.addCommand(forum);
184
+ insight.addCommand(research);
185
+ insight.addCommand(foreignReport);
186
+ insight.addCommand(announcement);
187
+ program.addCommand(insight);
188
+ const quote = new Command("quote").description("Quote APIs");
189
+ quote.command("day-kline").option("--security <code>", "Security code", collectList, []).option("--start-date <date>").option("--end-date <date>").option("--limit <number>").option("--field <field>", "Field", collectList, []).option("--format <format>", "Output format", "table").option("--output <path>").action(async (options) => {
190
+ const client = new GangtiseClient(loadConfig());
191
+ await printData(await client.call("quote.day-kline", { securityList: maybeArray(options.security), startDate: options.startDate, endDate: options.endDate, limit: options.limit ? Number(options.limit) : undefined, fieldList: maybeArray(options.field) }), parseFormat(options.format), options.output);
192
+ });
193
+ quote.command("income-statement").requiredOption("--security-code <code>").option("--start-date <date>").option("--end-date <date>").option("--fiscal-year <year>", "Fiscal year", collectList, []).option("--period <period>", "Period", collectList, []).option("--report-type <type>", "Report type", collectList, []).option("--field <field>", "Field", collectList, []).option("--format <format>", "Output format", "table").option("--output <path>").action(async (options) => {
194
+ const client = new GangtiseClient(loadConfig());
195
+ await printData(await client.call("quote.income-statement", { securityCode: options.securityCode, startDate: options.startDate, endDate: options.endDate, fiscalYear: maybeArray(options.fiscalYear), period: options.period.length ? options.period : ["latest"], reportType: options.reportType.length ? options.reportType : ["consolidated"], fieldList: options.field }), parseFormat(options.format), options.output);
196
+ });
197
+ quote.command("main-business").requiredOption("--security-code <code>").option("--start-date <date>").option("--end-date <date>").option("--fiscal-year <year>", "Fiscal year", collectList, []).option("--field <field>", "Field", collectList, []).option("--format <format>", "Output format", "table").option("--output <path>").action(async (options) => {
198
+ const client = new GangtiseClient(loadConfig());
199
+ await printData(await client.call("quote.main-business", { securityCode: options.securityCode, startDate: options.startDate, endDate: options.endDate, fiscalYear: maybeArray(options.fiscalYear), fieldList: maybeArray(options.field) }), parseFormat(options.format), options.output);
200
+ });
201
+ quote.command("valuation-analysis").requiredOption("--security-code <code>").requiredOption("--indicator <name>", "Indicator like peTtm/pbMrq/peg/psTtm/pcfTtm/em").option("--start-date <date>").option("--end-date <date>").option("--limit <number>").option("--field <field>", "Field", collectList, []).option("--format <format>", "Output format", "table").option("--output <path>").action(async (options) => {
202
+ const client = new GangtiseClient(loadConfig());
203
+ await printData(await client.call("quote.valuation-analysis", { securityCode: options.securityCode, indicator: options.indicator, startDate: options.startDate, endDate: options.endDate, limit: options.limit ? Number(options.limit) : undefined, fieldList: maybeArray(options.field) }), parseFormat(options.format), options.output);
204
+ });
205
+ program.addCommand(quote);
206
+ const ai = new Command("ai").description("AI APIs");
207
+ ai.command("knowledge-batch").requiredOption("--query <text>", "Query", collectList, []).option("--top <number>", "Top", "10").option("--resource-type <number>", "Resource type", collectNumberList, []).option("--knowledge-name <name>", "Knowledge name", collectList, []).option("--start-time <ms>").option("--end-time <ms>").option("--format <format>", "Output format", "json").option("--output <path>").action(async (options) => {
208
+ const client = new GangtiseClient(loadConfig());
209
+ await printData(await client.call("ai.knowledge-batch", { queries: options.query, top: Number(options.top), resourceTypes: options.resourceType.length ? options.resourceType : undefined, knowledgeNames: maybeArray(options.knowledgeName), startTime: options.startTime ? Number(options.startTime) : undefined, endTime: options.endTime ? Number(options.endTime) : undefined }), parseFormat(options.format), options.output);
210
+ });
211
+ ai.command("knowledge-resource-download").requiredOption("--resource-type <number>").requiredOption("--source-id <id>").option("--output <path>").action(async (options) => {
212
+ const client = new GangtiseClient(loadConfig());
213
+ await saveDownloadResult(await client.call("ai.knowledge-resource.download", undefined, { resourceType: Number(options.resourceType), sourceId: options.sourceId }), `resource-${options.sourceId}`, options.output);
214
+ });
215
+ ai.command("security-clue").option("--from <number>", "Starting offset", "0").option("--size <number>", "Total rows to return; omit to fetch all").requiredOption("--start-time <datetime>").requiredOption("--end-time <datetime>").requiredOption("--query-mode <mode>").option("--gts-code <code>", "GTS code", collectList, []).option("--source <name>", "Source", collectList, []).option("--format <format>", "Output format", "table").option("--output <path>").action(async (options) => {
216
+ const client = new GangtiseClient(loadConfig());
217
+ await printData(await client.call("ai.security-clue.list", { from: Number(options.from), size: options.size === undefined ? undefined : Number(options.size), startTime: options.startTime, endTime: options.endTime, queryMode: options.queryMode, gtsCodeList: maybeArray(options.gtsCode), source: maybeArray(options.source) }), parseFormat(options.format), options.output);
218
+ });
219
+ ai.command("one-pager").requiredOption("--security-code <code>").option("--format <format>", "Output format", "json").option("--output <path>").action(async (options) => {
220
+ const client = new GangtiseClient(loadConfig());
221
+ await printData(await client.call("ai.one-pager", { securityCode: options.securityCode }), parseFormat(options.format), options.output);
222
+ });
223
+ ai.command("investment-logic").requiredOption("--security-code <code>").option("--format <format>", "Output format", "json").option("--output <path>").action(async (options) => {
224
+ const client = new GangtiseClient(loadConfig());
225
+ await printData(await client.call("ai.investment-logic", { securityCode: options.securityCode }), parseFormat(options.format), options.output);
226
+ });
227
+ ai.command("peer-comparison").requiredOption("--security-code <code>").option("--format <format>", "Output format", "json").option("--output <path>").action(async (options) => {
228
+ const client = new GangtiseClient(loadConfig());
229
+ await printData(await client.call("ai.peer-comparison", { securityCode: options.securityCode }), parseFormat(options.format), options.output);
230
+ });
231
+ ai.command("cloud-disk-list").option("--from <number>", "Starting offset", "0").option("--size <number>", "Total rows to return; omit to fetch all").option("--start-time <datetime>").option("--end-time <datetime>").option("--keyword <text>").option("--file-type <number>", "File type", collectNumberList, []).option("--space-type <number>", "Space type", collectNumberList, []).option("--format <format>", "Output format", "table").option("--output <path>").action(async (options) => {
232
+ const client = new GangtiseClient(loadConfig());
233
+ await printData(await client.call("ai.cloud-disk.list", { from: Number(options.from), size: options.size === undefined ? undefined : Number(options.size), startTime: options.startTime, endTime: options.endTime, keyword: options.keyword, fileTypeList: options.fileType.length ? options.fileType : undefined, spaceTypeList: options.spaceType.length ? options.spaceType : undefined }), parseFormat(options.format), options.output);
234
+ });
235
+ ai.command("cloud-disk-download").requiredOption("--file-id <id>").option("--output <path>").action(async (options) => {
236
+ const client = new GangtiseClient(loadConfig());
237
+ await saveDownloadResult(await client.call("ai.cloud-disk.download", undefined, { fileId: options.fileId }), `file-${options.fileId}`, options.output);
238
+ });
239
+ program.addCommand(ai);
240
+ program.command("raw").description("Raw API calls").addCommand(new Command("call").argument("<endpointKey>").option("--body <json>").option("--query <key=value>", "Query string pair", collectKeyValue, {}).option("--format <format>", "Output format", "json").option("--output <path>").action(async (endpointKey, options) => {
241
+ const client = new GangtiseClient(loadConfig());
242
+ const body = options.body ? JSON.parse(options.body) : undefined;
243
+ const data = await client.call(endpointKey, body, options.query);
244
+ if (data && typeof data === "object" && "data" in data && data.data instanceof Uint8Array) {
245
+ await saveDownloadResult(data, "download.bin", options.output);
246
+ return;
247
+ }
248
+ await printData(data, parseFormat(options.format), options.output);
249
+ }));
250
+ async function main() {
251
+ try {
252
+ await program.parseAsync(process.argv);
253
+ }
254
+ catch (error) {
255
+ if (error instanceof ApiError) {
256
+ const hint = error.hint ? ` ${error.hint}` : "";
257
+ process.stderr.write(`API error${error.code ? ` (${error.code})` : ""}: ${error.message}${hint}\n`);
258
+ process.exitCode = 1;
259
+ return;
260
+ }
261
+ if (error instanceof Error) {
262
+ process.stderr.write(`${error.name}: ${error.message}\n`);
263
+ process.exitCode = 1;
264
+ return;
265
+ }
266
+ process.stderr.write("Unknown error\n");
267
+ process.exitCode = 1;
268
+ }
269
+ }
270
+ void main();
271
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export function splitCsv(value) {
2
+ return value
3
+ .split(",")
4
+ .map((item) => item.trim())
5
+ .filter(Boolean);
6
+ }
7
+ export function collectList(value, previous = []) {
8
+ return [...previous, ...splitCsv(value)];
9
+ }
10
+ export function collectNumberList(value, previous = []) {
11
+ return [
12
+ ...previous,
13
+ ...splitCsv(value).map((item) => Number(item)).filter((item) => !Number.isNaN(item)),
14
+ ];
15
+ }
16
+ export function collectKeyValue(value, previous = {}) {
17
+ const index = value.indexOf("=");
18
+ if (index === -1) {
19
+ throw new Error(`Invalid key=value pair: ${value}`);
20
+ }
21
+ const key = value.slice(0, index).trim();
22
+ const rawValue = value.slice(index + 1).trim();
23
+ if (!key) {
24
+ throw new Error(`Invalid key=value pair: ${value}`);
25
+ }
26
+ return {
27
+ ...previous,
28
+ [key]: rawValue,
29
+ };
30
+ }
31
+ export function maybeArray(value) {
32
+ return value.length > 0 ? value : undefined;
33
+ }
34
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../../src/core/args.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,WAAqB,EAAE;IAChE,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,WAAqB,EAAE;IACtE,OAAO;QACL,GAAG,QAAQ;QACX,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KACrF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,WAAmC,EAAE;IAClF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAA;IACrD,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;IACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAE9C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAA;IACrD,CAAC;IAED,OAAO;QACL,GAAG,QAAQ;QACX,CAAC,GAAG,CAAC,EAAE,QAAQ;KAChB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAI,KAAU;IACtC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AAC7C,CAAC"}
@@ -0,0 +1,36 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { ConfigError } from "./errors.js";
4
+ export async function readTokenCache(filePath) {
5
+ try {
6
+ const content = await fs.readFile(filePath, "utf8");
7
+ return JSON.parse(content);
8
+ }
9
+ catch (error) {
10
+ if (error.code === "ENOENT") {
11
+ return null;
12
+ }
13
+ throw error;
14
+ }
15
+ }
16
+ export async function writeTokenCache(filePath, cache) {
17
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
18
+ await fs.writeFile(filePath, JSON.stringify(cache, null, 2), "utf8");
19
+ }
20
+ export function isTokenCacheValid(cache, bufferSeconds = 300) {
21
+ if (!cache?.accessToken || !cache.expiresAt) {
22
+ return false;
23
+ }
24
+ const now = Math.floor(Date.now() / 1000);
25
+ return cache.expiresAt - bufferSeconds > now;
26
+ }
27
+ export function normalizeToken(token) {
28
+ return token.startsWith("Bearer ") ? token : `Bearer ${token}`;
29
+ }
30
+ export function requireAccessCredentials(accessKey, secretKey) {
31
+ if (!accessKey || !secretKey) {
32
+ throw new ConfigError("Missing GANGTISE_ACCESS_KEY or GANGTISE_SECRET_KEY");
33
+ }
34
+ return { accessKey, secretKey };
35
+ }
36
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/core/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAYzC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe,CAAA;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,KAAiB;IACvE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;AACtE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAwB,EAAE,aAAa,GAAG,GAAG;IAC7E,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IACzC,OAAO,KAAK,CAAC,SAAS,GAAG,aAAa,GAAG,GAAG,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAA;AAChE,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,SAAkB,EAAE,SAAkB;IAC7E,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,WAAW,CAAC,oDAAoD,CAAC,CAAA;IAC7E,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAA;AACjC,CAAC"}