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 +21 -0
- package/README.md +173 -0
- package/dist/src/cli.js +271 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/core/args.js +34 -0
- package/dist/src/core/args.js.map +1 -0
- package/dist/src/core/auth.js +36 -0
- package/dist/src/core/auth.js.map +1 -0
- package/dist/src/core/client.js +247 -0
- package/dist/src/core/client.js.map +1 -0
- package/dist/src/core/config.js +18 -0
- package/dist/src/core/config.js.map +1 -0
- package/dist/src/core/endpoints.js +228 -0
- package/dist/src/core/endpoints.js.map +1 -0
- package/dist/src/core/errors.js +38 -0
- package/dist/src/core/errors.js.map +1 -0
- package/dist/src/core/lookupData.js +1668 -0
- package/dist/src/core/lookupData.js.map +1 -0
- package/dist/src/core/normalize.js +24 -0
- package/dist/src/core/normalize.js.map +1 -0
- package/dist/src/core/output.js +89 -0
- package/dist/src/core/output.js.map +1 -0
- package/package.json +42 -0
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`: 不支持该数据源(常见于知识资源下载参数不匹配)
|
package/dist/src/cli.js
ADDED
|
@@ -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"}
|