cbs-cainiao-merchant-cli 0.0.1
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/README.4px.md +90 -0
- package/README.cainiao.md +90 -0
- package/README.md +90 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +247 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.js +39 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/claim.d.ts +10 -0
- package/dist/commands/claim.js +69 -0
- package/dist/commands/claim.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.js +129 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/error-handler.d.ts +5 -0
- package/dist/commands/error-handler.js +57 -0
- package/dist/commands/error-handler.js.map +1 -0
- package/dist/commands/label.d.ts +2 -0
- package/dist/commands/label.js +54 -0
- package/dist/commands/label.js.map +1 -0
- package/dist/commands/order.d.ts +2 -0
- package/dist/commands/order.js +91 -0
- package/dist/commands/order.js.map +1 -0
- package/dist/commands/product.d.ts +10 -0
- package/dist/commands/product.js +74 -0
- package/dist/commands/product.js.map +1 -0
- package/dist/commands/track.d.ts +2 -0
- package/dist/commands/track.js +54 -0
- package/dist/commands/track.js.map +1 -0
- package/dist/commands/update.d.ts +27 -0
- package/dist/commands/update.js +304 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/errors.d.ts +31 -0
- package/dist/errors.js +58 -0
- package/dist/errors.js.map +1 -0
- package/dist/generated/site.d.ts +7 -0
- package/dist/generated/site.js +9 -0
- package/dist/generated/site.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/services/api-client.d.ts +20 -0
- package/dist/services/api-client.js +141 -0
- package/dist/services/api-client.js.map +1 -0
- package/dist/services/config-manager.d.ts +10 -0
- package/dist/services/config-manager.js +49 -0
- package/dist/services/config-manager.js.map +1 -0
- package/dist/services/install-detector.d.ts +17 -0
- package/dist/services/install-detector.js +54 -0
- package/dist/services/install-detector.js.map +1 -0
- package/dist/services/update-checker.d.ts +56 -0
- package/dist/services/update-checker.js +242 -0
- package/dist/services/update-checker.js.map +1 -0
- package/dist/types/index.d.ts +153 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/logger.d.ts +15 -0
- package/dist/utils/logger.js +47 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/output.d.ts +13 -0
- package/dist/utils/output.js +19 -0
- package/dist/utils/output.js.map +1 -0
- package/package.json +54 -0
- package/scripts/postinstall.js +184 -0
- package/site-meta.json +9 -0
- package/skill/SKILL.md +167 -0
- package/skill/reference/auth.md +62 -0
- package/skill/reference/claim.md +66 -0
- package/skill/reference/config.md +71 -0
- package/skill/reference/index.md +51 -0
- package/skill/reference/label.md +51 -0
- package/skill/reference/order.md +68 -0
- package/skill/reference/product.md +70 -0
- package/skill/reference/track.md +57 -0
- package/skill/reference/update.md +102 -0
package/README.4px.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# cbs-4px-merchant-cli
|
|
2
|
+
|
|
3
|
+
> 跨境物流商家命令行工具(4PX 站点),支持物流轨迹查询、面单获取、订单详情查询、产品推荐、理赔查询。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g cbs-4px-merchant-cli
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
安装后命令名为 **`fmc`**。
|
|
12
|
+
|
|
13
|
+
## 快速开始
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# 1. 获取 API Key
|
|
17
|
+
# https://b.4px.com/site/ak-manage
|
|
18
|
+
|
|
19
|
+
# 2. 配置认证
|
|
20
|
+
fmc auth login --api-key SK_xxxxx
|
|
21
|
+
|
|
22
|
+
# 3. 查询物流轨迹
|
|
23
|
+
fmc track get 4PX3000002316090CN
|
|
24
|
+
|
|
25
|
+
# 4. 查看订单详情
|
|
26
|
+
fmc order get 4PX3000002316090CN
|
|
27
|
+
|
|
28
|
+
# 5. 产品推荐
|
|
29
|
+
fmc product recommend --country US
|
|
30
|
+
|
|
31
|
+
# 6. 查询理赔
|
|
32
|
+
fmc claim list --biz-no 4PX3000002316090CN
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## 命令列表
|
|
36
|
+
|
|
37
|
+
| 命令 | 说明 |
|
|
38
|
+
|------|------|
|
|
39
|
+
| `fmc auth login --api-key <key>` | 配置 API Key |
|
|
40
|
+
| `fmc auth status` | 查看当前认证状态 |
|
|
41
|
+
| `fmc config set <key> <value>` | 设置配置项 |
|
|
42
|
+
| `fmc config list` | 查看当前配置 |
|
|
43
|
+
| `fmc track get <orderNo>` | 查询物流轨迹 |
|
|
44
|
+
| `fmc label get <orderNo>` | 获取面单打印信息(PDF 链接) |
|
|
45
|
+
| `fmc order get <orderNo>` | 获取订单详情 |
|
|
46
|
+
| `fmc product recommend --country <code>` | 产品推荐(按目的国查询) |
|
|
47
|
+
| `fmc claim list` | 查询理赔列表 |
|
|
48
|
+
| `fmc update` | 更新到最新版本 |
|
|
49
|
+
| `fmc update --check` | 检查是否有新版本 |
|
|
50
|
+
|
|
51
|
+
## 全局选项
|
|
52
|
+
|
|
53
|
+
| 选项 | 说明 |
|
|
54
|
+
|------|------|
|
|
55
|
+
| `--output <format>` | 输出格式:`text`(默认)/ `json` |
|
|
56
|
+
| `--verbose` | 打印请求详情 |
|
|
57
|
+
| `--dry-run` | 仅打印请求信息,不实际发送 |
|
|
58
|
+
| `--version` | 打印版本号 |
|
|
59
|
+
| `--help` | 查看帮助 |
|
|
60
|
+
|
|
61
|
+
## 认证
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# 方式一:通过命令配置(持久化到 ~/.bportal/config.json)
|
|
65
|
+
fmc auth login --api-key SK_xxxxx
|
|
66
|
+
|
|
67
|
+
# 方式二:通过环境变量
|
|
68
|
+
export BPORTAL_API_KEY=SK_xxxxx
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
获取 API Key:https://b.4px.com/site/ak-manage
|
|
72
|
+
|
|
73
|
+
## AI Agent 集成
|
|
74
|
+
|
|
75
|
+
安装后会自动注册 Skill 到本地 AI 编程工具(Claude Code / Cursor / Qoder 等),Agent 可直接调用 `fmc` 命令完成物流查询任务。
|
|
76
|
+
|
|
77
|
+
支持 JSON 输出模式,方便程序化调用:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
fmc track get FPX12345678 --output json
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 环境要求
|
|
84
|
+
|
|
85
|
+
- Node.js >= 18.0.0
|
|
86
|
+
- npm >= 8
|
|
87
|
+
|
|
88
|
+
## License
|
|
89
|
+
|
|
90
|
+
MIT
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# cbs-cainiao-merchant-cli
|
|
2
|
+
|
|
3
|
+
> 跨境物流商家命令行工具(菜鸟站点),支持物流轨迹查询、面单获取、订单详情查询、产品推荐、理赔查询。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g cbs-cainiao-merchant-cli
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
安装后命令名为 **`cmc`**。
|
|
12
|
+
|
|
13
|
+
## 快速开始
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# 1. 获取 API Key
|
|
17
|
+
# https://cainiao.4px.com/site/ak-manage
|
|
18
|
+
|
|
19
|
+
# 2. 配置认证
|
|
20
|
+
cmc auth login --api-key SK_xxxxx
|
|
21
|
+
|
|
22
|
+
# 3. 查询物流轨迹
|
|
23
|
+
cmc track get 4PX3000002316090CN
|
|
24
|
+
|
|
25
|
+
# 4. 查看订单详情
|
|
26
|
+
cmc order get 4PX3000002316090CN
|
|
27
|
+
|
|
28
|
+
# 5. 产品推荐
|
|
29
|
+
cmc product recommend --country US
|
|
30
|
+
|
|
31
|
+
# 6. 查询理赔
|
|
32
|
+
cmc claim list --biz-no 4PX3000002316090CN
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## 命令列表
|
|
36
|
+
|
|
37
|
+
| 命令 | 说明 |
|
|
38
|
+
|------|------|
|
|
39
|
+
| `cmc auth login --api-key <key>` | 配置 API Key |
|
|
40
|
+
| `cmc auth status` | 查看当前认证状态 |
|
|
41
|
+
| `cmc config set <key> <value>` | 设置配置项 |
|
|
42
|
+
| `cmc config list` | 查看当前配置 |
|
|
43
|
+
| `cmc track get <orderNo>` | 查询物流轨迹 |
|
|
44
|
+
| `cmc label get <orderNo>` | 获取面单打印信息(PDF 链接) |
|
|
45
|
+
| `cmc order get <orderNo>` | 获取订单详情 |
|
|
46
|
+
| `cmc product recommend --country <code>` | 产品推荐(按目的国查询) |
|
|
47
|
+
| `cmc claim list` | 查询理赔列表 |
|
|
48
|
+
| `cmc update` | 更新到最新版本 |
|
|
49
|
+
| `cmc update --check` | 检查是否有新版本 |
|
|
50
|
+
|
|
51
|
+
## 全局选项
|
|
52
|
+
|
|
53
|
+
| 选项 | 说明 |
|
|
54
|
+
|------|------|
|
|
55
|
+
| `--output <format>` | 输出格式:`text`(默认)/ `json` |
|
|
56
|
+
| `--verbose` | 打印请求详情 |
|
|
57
|
+
| `--dry-run` | 仅打印请求信息,不实际发送 |
|
|
58
|
+
| `--version` | 打印版本号 |
|
|
59
|
+
| `--help` | 查看帮助 |
|
|
60
|
+
|
|
61
|
+
## 认证
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# 方式一:通过命令配置(持久化到 ~/.bportal/config.json)
|
|
65
|
+
cmc auth login --api-key SK_xxxxx
|
|
66
|
+
|
|
67
|
+
# 方式二:通过环境变量
|
|
68
|
+
export BPORTAL_API_KEY=SK_xxxxx
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
获取 API Key:https://cainiao.4px.com/site/ak-manage
|
|
72
|
+
|
|
73
|
+
## AI Agent 集成
|
|
74
|
+
|
|
75
|
+
安装后会自动注册 Skill 到本地 AI 编程工具(Claude Code / Cursor / Qoder 等),Agent 可直接调用 `cmc` 命令完成物流查询任务。
|
|
76
|
+
|
|
77
|
+
支持 JSON 输出模式,方便程序化调用:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
cmc track get FPX12345678 --output json
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 环境要求
|
|
84
|
+
|
|
85
|
+
- Node.js >= 18.0.0
|
|
86
|
+
- npm >= 8
|
|
87
|
+
|
|
88
|
+
## License
|
|
89
|
+
|
|
90
|
+
MIT
|
package/README.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# cbs-cainiao-merchant-cli
|
|
2
|
+
|
|
3
|
+
> 跨境物流商家命令行工具(菜鸟站点),支持物流轨迹查询、面单获取、订单详情查询、产品推荐、理赔查询。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g cbs-cainiao-merchant-cli
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
安装后命令名为 **`cmc`**。
|
|
12
|
+
|
|
13
|
+
## 快速开始
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# 1. 获取 API Key
|
|
17
|
+
# https://cainiao.4px.com/site/ak-manage
|
|
18
|
+
|
|
19
|
+
# 2. 配置认证
|
|
20
|
+
cmc auth login --api-key SK_xxxxx
|
|
21
|
+
|
|
22
|
+
# 3. 查询物流轨迹
|
|
23
|
+
cmc track get 4PX3000002316090CN
|
|
24
|
+
|
|
25
|
+
# 4. 查看订单详情
|
|
26
|
+
cmc order get 4PX3000002316090CN
|
|
27
|
+
|
|
28
|
+
# 5. 产品推荐
|
|
29
|
+
cmc product recommend --country US
|
|
30
|
+
|
|
31
|
+
# 6. 查询理赔
|
|
32
|
+
cmc claim list --biz-no 4PX3000002316090CN
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## 命令列表
|
|
36
|
+
|
|
37
|
+
| 命令 | 说明 |
|
|
38
|
+
|------|------|
|
|
39
|
+
| `cmc auth login --api-key <key>` | 配置 API Key |
|
|
40
|
+
| `cmc auth status` | 查看当前认证状态 |
|
|
41
|
+
| `cmc config set <key> <value>` | 设置配置项 |
|
|
42
|
+
| `cmc config list` | 查看当前配置 |
|
|
43
|
+
| `cmc track get <orderNo>` | 查询物流轨迹 |
|
|
44
|
+
| `cmc label get <orderNo>` | 获取面单打印信息(PDF 链接) |
|
|
45
|
+
| `cmc order get <orderNo>` | 获取订单详情 |
|
|
46
|
+
| `cmc product recommend --country <code>` | 产品推荐(按目的国查询) |
|
|
47
|
+
| `cmc claim list` | 查询理赔列表 |
|
|
48
|
+
| `cmc update` | 更新到最新版本 |
|
|
49
|
+
| `cmc update --check` | 检查是否有新版本 |
|
|
50
|
+
|
|
51
|
+
## 全局选项
|
|
52
|
+
|
|
53
|
+
| 选项 | 说明 |
|
|
54
|
+
|------|------|
|
|
55
|
+
| `--output <format>` | 输出格式:`text`(默认)/ `json` |
|
|
56
|
+
| `--verbose` | 打印请求详情 |
|
|
57
|
+
| `--dry-run` | 仅打印请求信息,不实际发送 |
|
|
58
|
+
| `--version` | 打印版本号 |
|
|
59
|
+
| `--help` | 查看帮助 |
|
|
60
|
+
|
|
61
|
+
## 认证
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# 方式一:通过命令配置(持久化到 ~/.bportal/config.json)
|
|
65
|
+
cmc auth login --api-key SK_xxxxx
|
|
66
|
+
|
|
67
|
+
# 方式二:通过环境变量
|
|
68
|
+
export BPORTAL_API_KEY=SK_xxxxx
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
获取 API Key:https://cainiao.4px.com/site/ak-manage
|
|
72
|
+
|
|
73
|
+
## AI Agent 集成
|
|
74
|
+
|
|
75
|
+
安装后会自动注册 Skill 到本地 AI 编程工具(Claude Code / Cursor / Qoder 等),Agent 可直接调用 `cmc` 命令完成物流查询任务。
|
|
76
|
+
|
|
77
|
+
支持 JSON 输出模式,方便程序化调用:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
cmc track get FPX12345678 --output json
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 环境要求
|
|
84
|
+
|
|
85
|
+
- Node.js >= 18.0.0
|
|
86
|
+
- npm >= 8
|
|
87
|
+
|
|
88
|
+
## License
|
|
89
|
+
|
|
90
|
+
MIT
|
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { createRequire } from 'module';
|
|
4
|
+
import { existsSync, readFileSync } from 'fs';
|
|
5
|
+
import { join } from 'path';
|
|
6
|
+
import { homedir } from 'os';
|
|
7
|
+
import { authLogin, authStatus } from './commands/auth.js';
|
|
8
|
+
import { configSet, configList, configExportSchema } from './commands/config.js';
|
|
9
|
+
import { trackCommand } from './commands/track.js';
|
|
10
|
+
import { labelCommand } from './commands/label.js';
|
|
11
|
+
import { orderCommand } from './commands/order.js';
|
|
12
|
+
import { productCommand } from './commands/product.js';
|
|
13
|
+
import { claimCommand } from './commands/claim.js';
|
|
14
|
+
import { buildUpdateCommand } from './commands/update.js';
|
|
15
|
+
import { checkCachedSync, refreshCache } from './services/update-checker.js';
|
|
16
|
+
import { PACKAGE_NAME, BIN_NAME } from './generated/site.js';
|
|
17
|
+
const require = createRequire(import.meta.url);
|
|
18
|
+
const { version: VERSION } = require('../package.json');
|
|
19
|
+
/** Skill install dir name derived from package name (e.g. cbs-4px-merchant-cli). */
|
|
20
|
+
const SKILL_DIR_NAME = PACKAGE_NAME.replace(/^@[^/]+\//, '');
|
|
21
|
+
/** AI tool directories where skills may be installed. */
|
|
22
|
+
const SKILL_TARGET_DIRS = [
|
|
23
|
+
'.qoder', '.claude', '.cline', '.qwen', '.cursor',
|
|
24
|
+
'.qoderwork', '.codex', '.kilo', '.openclaw',
|
|
25
|
+
];
|
|
26
|
+
/**
|
|
27
|
+
* Emit a structured _notice.update banner to stderr when the local cache
|
|
28
|
+
* indicates a newer CLI version is available. Zero network I/O — relies on
|
|
29
|
+
* the background refresh seeded by `refreshCache()`.
|
|
30
|
+
* Suppressed in CI / non-TTY / when BPORTAL_NO_UPDATE_NOTIFIER is set.
|
|
31
|
+
*/
|
|
32
|
+
function checkUpdateAvailable() {
|
|
33
|
+
if (process.env['BPORTAL_NO_UPDATE_NOTIFIER'])
|
|
34
|
+
return;
|
|
35
|
+
if (process.env['CI'])
|
|
36
|
+
return;
|
|
37
|
+
if (!process.stderr.isTTY)
|
|
38
|
+
return;
|
|
39
|
+
const newer = checkCachedSync(VERSION);
|
|
40
|
+
if (!newer)
|
|
41
|
+
return;
|
|
42
|
+
const notice = {
|
|
43
|
+
_notice: {
|
|
44
|
+
type: 'update',
|
|
45
|
+
package: PACKAGE_NAME,
|
|
46
|
+
current: VERSION,
|
|
47
|
+
latest: newer,
|
|
48
|
+
hint: `Run: ${BIN_NAME} update to upgrade`,
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
process.stderr.write(JSON.stringify(notice) + '\n');
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if installed skill version matches current CLI version.
|
|
55
|
+
* Outputs structured _notice.skills to stderr when drift is detected.
|
|
56
|
+
* Never blocks execution — purely informational for AI Agents.
|
|
57
|
+
*/
|
|
58
|
+
function checkSkillDrift() {
|
|
59
|
+
const home = homedir();
|
|
60
|
+
let installedVersion = null;
|
|
61
|
+
for (const dir of SKILL_TARGET_DIRS) {
|
|
62
|
+
const versionFile = join(home, dir, 'skills', SKILL_DIR_NAME, '.skill-version');
|
|
63
|
+
if (existsSync(versionFile)) {
|
|
64
|
+
try {
|
|
65
|
+
installedVersion = readFileSync(versionFile, 'utf-8').trim();
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
catch { /* ignore unreadable files */ }
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Cold start: skill never installed — not an error
|
|
72
|
+
if (installedVersion === null)
|
|
73
|
+
return;
|
|
74
|
+
if (installedVersion !== VERSION) {
|
|
75
|
+
const notice = {
|
|
76
|
+
_notice: {
|
|
77
|
+
type: 'skills',
|
|
78
|
+
current: installedVersion,
|
|
79
|
+
expected: VERSION,
|
|
80
|
+
hint: `Run: ${BIN_NAME} skill install to sync skills with CLI v${VERSION}`,
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
process.stderr.write(JSON.stringify(notice) + '\n');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function printBanner() {
|
|
87
|
+
const c = chalk.bold.hex('#5B9BD5');
|
|
88
|
+
const d = chalk.hex('#4A82B0');
|
|
89
|
+
const banner = [
|
|
90
|
+
'',
|
|
91
|
+
` ${c('██████╗ ██████╗ ██████╗')}`,
|
|
92
|
+
` ${c('██╔═══╝ ██╔══██╗ ██╔═══╝')}`,
|
|
93
|
+
` ${c('██║ ██████╔╝ ╚████╗')}`,
|
|
94
|
+
` ${c('██║ ██╔══██╗ ╚══██║')}`,
|
|
95
|
+
` ${c('╚█████╗ ██████╔╝ █████╔╝')}`,
|
|
96
|
+
` ${c('╚═════╝ ╚═════╝ ╚════╝')}`,
|
|
97
|
+
` ${d('- - - - - - - - - - - - - - - - -')}`,
|
|
98
|
+
` ${chalk.bold.white('🌏 跨境物流 · 商家 CLI')} ${chalk.dim(`v${VERSION}`)}`,
|
|
99
|
+
` ${chalk.gray('Cross-Border Supply Chain')}`,
|
|
100
|
+
` ${chalk.dim('📦 轨迹查询 · 面单获取 · 订单管理 ...')}`,
|
|
101
|
+
'',
|
|
102
|
+
];
|
|
103
|
+
// Banner goes to stderr — stdout is reserved for JSON data only
|
|
104
|
+
process.stderr.write(banner.join('\n') + '\n');
|
|
105
|
+
}
|
|
106
|
+
/** Extract global options from the root program for sub-commands at any depth. */
|
|
107
|
+
function globals(cmd) {
|
|
108
|
+
let root = cmd;
|
|
109
|
+
while (root.parent) {
|
|
110
|
+
root = root.parent;
|
|
111
|
+
}
|
|
112
|
+
const rootOpts = root.opts();
|
|
113
|
+
return {
|
|
114
|
+
output: rootOpts.output,
|
|
115
|
+
verbose: rootOpts.verbose,
|
|
116
|
+
dryRun: rootOpts.dryRun,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
export function buildProgram() {
|
|
120
|
+
const program = new Command();
|
|
121
|
+
program
|
|
122
|
+
.name(BIN_NAME)
|
|
123
|
+
.description('Cbs Merchant CLI - 商家 CLI 工具')
|
|
124
|
+
.version(VERSION, '-v, --version')
|
|
125
|
+
.option('--output <format>', '输出格式: text | json(TTY 默认 text,管道默认 json)')
|
|
126
|
+
.option('--verbose', '打印请求详情(URL、Headers、状态码)')
|
|
127
|
+
.option('--dry-run', '仅打印请求信息,不实际发送')
|
|
128
|
+
.addHelpText('beforeAll', '')
|
|
129
|
+
.hook('preAction', (thisCmd, actionCmd) => {
|
|
130
|
+
checkSkillDrift();
|
|
131
|
+
// Skip the passive update banner when the user explicitly invokes
|
|
132
|
+
// `mc update ...` — the command itself owns its output.
|
|
133
|
+
if (actionCmd.parent?.name() !== 'update' && actionCmd.name() !== 'update') {
|
|
134
|
+
checkUpdateAvailable();
|
|
135
|
+
}
|
|
136
|
+
// Fire-and-forget background refresh; never blocks the command.
|
|
137
|
+
refreshCache(VERSION);
|
|
138
|
+
})
|
|
139
|
+
.configureOutput({
|
|
140
|
+
outputError: (str, write) => write(str),
|
|
141
|
+
});
|
|
142
|
+
// Print banner when running with --help or no arguments
|
|
143
|
+
const originalHelp = program.helpInformation.bind(program);
|
|
144
|
+
program.helpInformation = function () {
|
|
145
|
+
printBanner();
|
|
146
|
+
return originalHelp();
|
|
147
|
+
};
|
|
148
|
+
// mc auth login / mc auth status
|
|
149
|
+
const auth = new Command('auth').description('认证管理');
|
|
150
|
+
auth
|
|
151
|
+
.command('login')
|
|
152
|
+
.description('配置 API Key')
|
|
153
|
+
.requiredOption('--api-key <key>', 'API Key(格式:SK_xxx)')
|
|
154
|
+
.action(async (opts) => {
|
|
155
|
+
await authLogin(opts.apiKey);
|
|
156
|
+
});
|
|
157
|
+
auth
|
|
158
|
+
.command('status')
|
|
159
|
+
.description('查看当前认证状态')
|
|
160
|
+
.action(async (_opts, cmd) => {
|
|
161
|
+
await authStatus(globals(cmd));
|
|
162
|
+
});
|
|
163
|
+
program.addCommand(auth);
|
|
164
|
+
// mc config set / mc config list / mc config export-schema
|
|
165
|
+
const config = new Command('config').description('配置管理');
|
|
166
|
+
config
|
|
167
|
+
.command('set <key> <value>')
|
|
168
|
+
.description('设置配置项(key: baseUrl | apiKey)')
|
|
169
|
+
.action(async (key, value) => {
|
|
170
|
+
await configSet(key, value);
|
|
171
|
+
});
|
|
172
|
+
config
|
|
173
|
+
.command('list')
|
|
174
|
+
.description('查看当前配置')
|
|
175
|
+
.action(async () => {
|
|
176
|
+
await configList();
|
|
177
|
+
});
|
|
178
|
+
config
|
|
179
|
+
.command('export-schema')
|
|
180
|
+
.description('导出命令的 JSON tool schema(供 AI Agent 使用)')
|
|
181
|
+
.option('--command <name>', '仅导出指定命令的 schema')
|
|
182
|
+
.action((opts) => {
|
|
183
|
+
configExportSchema(opts.command);
|
|
184
|
+
});
|
|
185
|
+
program.addCommand(config);
|
|
186
|
+
// mc track get <orderNo>
|
|
187
|
+
const track = new Command('track').description('物流轨迹');
|
|
188
|
+
track
|
|
189
|
+
.command('get <orderNo>')
|
|
190
|
+
.description('查询物流轨迹')
|
|
191
|
+
.action(async (orderNo, _opts, cmd) => {
|
|
192
|
+
await trackCommand(orderNo, globals(cmd));
|
|
193
|
+
});
|
|
194
|
+
program.addCommand(track);
|
|
195
|
+
// mc label get <orderNo>
|
|
196
|
+
const label = new Command('label').description('面单管理');
|
|
197
|
+
label
|
|
198
|
+
.command('get <orderNo>')
|
|
199
|
+
.description('获取面单打印信息(PDF 链接)')
|
|
200
|
+
.action(async (orderNo, _opts, cmd) => {
|
|
201
|
+
await labelCommand(orderNo, globals(cmd));
|
|
202
|
+
});
|
|
203
|
+
program.addCommand(label);
|
|
204
|
+
// mc order get <orderNo>
|
|
205
|
+
const order = new Command('order').description('订单管理');
|
|
206
|
+
order
|
|
207
|
+
.command('get <orderNo>')
|
|
208
|
+
.description('获取订单详情')
|
|
209
|
+
.action(async (orderNo, _opts, cmd) => {
|
|
210
|
+
await orderCommand(orderNo, globals(cmd));
|
|
211
|
+
});
|
|
212
|
+
program.addCommand(order);
|
|
213
|
+
// mc product recommend --country <code> [--start-city] [--weight] ...
|
|
214
|
+
const product = new Command('product').description('产品推荐');
|
|
215
|
+
product
|
|
216
|
+
.command('recommend')
|
|
217
|
+
.description('根据条件获取推荐物流产品及报价')
|
|
218
|
+
.requiredOption('--country <code>', '目的国家二字码,如 US')
|
|
219
|
+
.option('--start-city <city>', '起运城市中文名,默认深圳')
|
|
220
|
+
.option('--weight <kg>', '重量(kg),默认 1')
|
|
221
|
+
.option('--post-code <code>', '目的地邮编')
|
|
222
|
+
.option('--is-battery <flag>', '是否带电:1-带电 2-普货')
|
|
223
|
+
.option('--declare-value <amount>', '申报总价值')
|
|
224
|
+
.action(async (opts, cmd) => {
|
|
225
|
+
await productCommand({ ...globals(cmd), ...opts });
|
|
226
|
+
});
|
|
227
|
+
program.addCommand(product);
|
|
228
|
+
// mc claim list [--biz-no] [--start-time] [--end-time] [--status] [--page] [--size]
|
|
229
|
+
const claim = new Command('claim').description('理赔管理');
|
|
230
|
+
claim
|
|
231
|
+
.command('list')
|
|
232
|
+
.description('查询理赔列表')
|
|
233
|
+
.option('--biz-no <nos>', '业务单号,多个用逗号分隔')
|
|
234
|
+
.option('--start-time <time>', '起始创建时间 (yyyy-MM-dd HH:mm:ss)')
|
|
235
|
+
.option('--end-time <time>', '结束创建时间 (yyyy-MM-dd HH:mm:ss)')
|
|
236
|
+
.option('--status <code>', '理赔状态:0 全部、1 待处理、2 受理中、3 已解决、4 已退回')
|
|
237
|
+
.option('--page <num>', '页码,默认 1')
|
|
238
|
+
.option('--size <num>', '每页数量,默认 10,最大 100')
|
|
239
|
+
.action(async (opts, cmd) => {
|
|
240
|
+
await claimCommand({ ...globals(cmd), ...opts });
|
|
241
|
+
});
|
|
242
|
+
program.addCommand(claim);
|
|
243
|
+
// mc update [--check] [--tag] [--force] [-y] [--output json]
|
|
244
|
+
program.addCommand(buildUpdateCommand());
|
|
245
|
+
return program;
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ConfigManager } from '../services/config-manager.js';
|
|
2
|
+
import * as logger from '../utils/logger.js';
|
|
3
|
+
import { detectOutputFormat, printJson } from '../utils/output.js';
|
|
4
|
+
export async function authLogin(apiKey) {
|
|
5
|
+
const config = new ConfigManager();
|
|
6
|
+
await config.set('apiKey', apiKey);
|
|
7
|
+
logger.success(`API Key 已保存(${maskApiKey(apiKey)})`);
|
|
8
|
+
}
|
|
9
|
+
export async function authStatus(opts) {
|
|
10
|
+
const config = new ConfigManager();
|
|
11
|
+
const format = detectOutputFormat(opts.output);
|
|
12
|
+
const envKey = process.env['BPORTAL_API_KEY'];
|
|
13
|
+
const fileKey = await config.get('apiKey');
|
|
14
|
+
const baseUrl = await config.resolveBaseUrl();
|
|
15
|
+
const authenticated = !!(envKey || fileKey);
|
|
16
|
+
const source = envKey ? 'BPORTAL_API_KEY (env)' : fileKey ? '~/.bportal/config.json' : 'none';
|
|
17
|
+
const maskedKey = envKey ? maskApiKey(envKey) : fileKey ? maskApiKey(fileKey) : '(未配置)';
|
|
18
|
+
if (format === 'json') {
|
|
19
|
+
printJson({ authenticated, source, key: maskedKey, baseUrl });
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
console.log('');
|
|
23
|
+
console.log('Authentication Status:');
|
|
24
|
+
console.log(` Status: ${authenticated ? '✔ 已认证' : '✖ 未认证'}`);
|
|
25
|
+
console.log(` Source: ${source}`);
|
|
26
|
+
console.log(` Key: ${maskedKey}`);
|
|
27
|
+
console.log(` Base URL: ${baseUrl}`);
|
|
28
|
+
if (!authenticated) {
|
|
29
|
+
console.log('');
|
|
30
|
+
console.log(' Run: mc auth login --api-key <SK_xxx>');
|
|
31
|
+
}
|
|
32
|
+
console.log('');
|
|
33
|
+
}
|
|
34
|
+
function maskApiKey(key) {
|
|
35
|
+
if (key.length <= 8)
|
|
36
|
+
return '****';
|
|
37
|
+
return key.slice(0, 4) + '*'.repeat(key.length - 8) + key.slice(-4);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGnE,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAc;IAC5C,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IACnC,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,CAAC,OAAO,CAAC,eAAe,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAmB;IAClD,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;IAE9C,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9F,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAExF,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,SAAS,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,eAAe,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;IAEtC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IACnC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { GlobalOptions } from '../types/index.js';
|
|
2
|
+
export interface ClaimCommandOptions extends GlobalOptions {
|
|
3
|
+
startTime?: string;
|
|
4
|
+
endTime?: string;
|
|
5
|
+
status?: string;
|
|
6
|
+
bizNo?: string;
|
|
7
|
+
page?: string;
|
|
8
|
+
size?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function claimCommand(opts: ClaimCommandOptions): Promise<void>;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { ConfigManager } from '../services/config-manager.js';
|
|
2
|
+
import { ApiClient } from '../services/api-client.js';
|
|
3
|
+
import { createSpinner } from '../utils/logger.js';
|
|
4
|
+
import { handleError } from './error-handler.js';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
export async function claimCommand(opts) {
|
|
7
|
+
const spinner = createSpinner('正在查询理赔列表...');
|
|
8
|
+
try {
|
|
9
|
+
spinner.start();
|
|
10
|
+
const client = new ApiClient(new ConfigManager(), opts);
|
|
11
|
+
const request = {
|
|
12
|
+
createdStartTime: opts.startTime,
|
|
13
|
+
createdEndTime: opts.endTime,
|
|
14
|
+
claimStatus: opts.status,
|
|
15
|
+
bizNoList: opts.bizNo,
|
|
16
|
+
pageNum: opts.page ? parseInt(opts.page, 10) : undefined,
|
|
17
|
+
pageSize: opts.size ? parseInt(opts.size, 10) : undefined,
|
|
18
|
+
};
|
|
19
|
+
const data = await client.listClaim(request);
|
|
20
|
+
spinner.stop();
|
|
21
|
+
if (opts.output === 'json') {
|
|
22
|
+
console.log(JSON.stringify(data, null, 2));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
printClaimList(data);
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
spinner.stop();
|
|
29
|
+
handleError(e);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function printClaimList(data) {
|
|
33
|
+
console.log('');
|
|
34
|
+
console.log(chalk.bold('理赔列表'));
|
|
35
|
+
console.log(chalk.gray('─'.repeat(50)));
|
|
36
|
+
console.log(` 页码 ${data.pageNum}/${Math.ceil(data.total / data.pageSize) || 1} 共 ${data.total} 条`);
|
|
37
|
+
if (data.list && data.list.length > 0) {
|
|
38
|
+
console.log('');
|
|
39
|
+
for (const item of data.list) {
|
|
40
|
+
printClaimItem(item);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
console.log('');
|
|
45
|
+
console.log(chalk.yellow(' 暂无理赔记录'));
|
|
46
|
+
}
|
|
47
|
+
console.log('');
|
|
48
|
+
}
|
|
49
|
+
function printClaimItem(item) {
|
|
50
|
+
const statusColor = item.claimStatus === '3' ? chalk.green : item.claimStatus === '4' ? chalk.red : chalk.yellow;
|
|
51
|
+
const statusText = item.claimStatusName ?? item.claimStatus ?? '-';
|
|
52
|
+
console.log(` ${chalk.bold(item.claimNo ?? item.claimId)} ${statusColor(statusText)}`);
|
|
53
|
+
if (item.bizNo)
|
|
54
|
+
console.log(` 业务单号 ${item.bizNo}`);
|
|
55
|
+
if (item.claimReasonName)
|
|
56
|
+
console.log(` 索赔原因 ${item.claimReasonName}`);
|
|
57
|
+
if (item.cargoPaymentCompensationAmount) {
|
|
58
|
+
console.log(` 货值赔偿 ${chalk.yellow(item.cargoPaymentCompensationAmount)} ${item.currency ?? ''}`);
|
|
59
|
+
}
|
|
60
|
+
if (item.servicePaymentCompensationAmount) {
|
|
61
|
+
console.log(` 服务赔偿 ${chalk.yellow(item.servicePaymentCompensationAmount)} ${item.currency ?? ''}`);
|
|
62
|
+
}
|
|
63
|
+
if (item.latestFeedback)
|
|
64
|
+
console.log(` 最新反馈 ${item.latestFeedback}`);
|
|
65
|
+
if (item.createdTime)
|
|
66
|
+
console.log(` 创建时间 ${chalk.gray(item.createdTime)}`);
|
|
67
|
+
console.log('');
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=claim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim.js","sourceRoot":"","sources":["../../src/commands/claim.ts"],"names":[],"mappings":"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"}
|