dsh-provider-proxy 0.7.0 → 0.9.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/README.md CHANGED
@@ -35,7 +35,7 @@ dsh plugin --profile web add dsh-provider-proxy
35
35
  | 字段 | 说明 |
36
36
  | --- | --- |
37
37
  | 开关 | 该 provider 是否走代理 |
38
- | 使用默认代理 | 勾选后本卡片的传输字段整体取自页面顶部「默认代理」区块,无需逐个重填 |
38
+ | 端点来源 | 下拉框:`独立自定义配置` / `预设:默认预设 (127.0.0.1:7890)` / `预设:<名称> (<地址>)`。选中的端点整体提供本卡片的传输字段;选「默认预设」即原来的「使用默认代理」 |
39
39
  | 类型 | `HTTP` / `HTTPS` / `SOCKS5` |
40
40
  | IP / 主机 | 只填 IPv4、IPv6 或 ASCII 域名;不要带协议前缀、端口、路径或凭据。IDN 需先转 punycode |
41
41
  | 端口 | 1–65535 的整数 |
@@ -49,6 +49,67 @@ dsh plugin --profile web add dsh-provider-proxy
49
49
  勾了继承的卡片会被拒绝并说明原因(列在「连接诊断」里),卡片上也直接显示这条原因;默认块的「配置完整」
50
50
  状态与批量按钮用的是同一个判定,所以不会出现「亮着绿灯却一张卡也用不上」。
51
51
 
52
+ ### 多代理预设(0.9.0)
53
+
54
+ 不同厂商常需要不同出口(OpenAI / Claude 走美区或新加坡、DeepSeek 走直连或香港、企业中转走专线),
55
+ 所以除默认代理外还可以建**命名预设**:在页面顶部的 **代理预设** 折叠区里「添加预设」,填好端点后,
56
+ 每张卡片的 **端点来源** 下拉里就会出现 `预设:<名称>`。
57
+
58
+ - 预设与默认代理**是同一类东西**:`默认预设 (Default)` 就是上方的「默认代理」区块,只是显示成一个预设。
59
+ - 改预设 = 改所有绑定它的卡片:这些卡片的「最近调用」记录与自检结果会立即失效,不会拿旧节点的测试结果冒充新节点。
60
+ - 删除仍被使用的预设会先确认,并在提示里列出依赖它的 provider;删除后这些卡片显示「配置被拒」并说明是哪个预设不存在,
61
+ **不会**悄悄退回卡片自己的空字段。
62
+ - 重命名预设会同时改写所有绑定关系的 `profileId`。
63
+ - `profileId` 非空时优先于 `useDefault`;页面选择预设时会自动把 `useDefault` 置为 false。
64
+ - 端点来源始终是下拉框,每个选项都带上它将使用的地址;选「默认预设」等价于原来的勾选「使用默认代理」,
65
+ 写盘仍是 `useDefault: true`,旧配置与旧行为完全一致。
66
+
67
+ ### 一键导入(0.9.0)
68
+
69
+ 默认代理区块、每个预设行、以及每张卡片都提供一个 **常用客户端…** 下拉:
70
+
71
+ | 选项 | 填入 |
72
+ | --- | --- |
73
+ | Clash / Mihomo | `HTTP 127.0.0.1:7890` |
74
+ | Clash Verge / Meta | `HTTP 127.0.0.1:7897` |
75
+ | V2Ray / Xray HTTP | `HTTP 127.0.0.1:10809` |
76
+ | V2Ray / Xray SOCKS5 | `SOCKS5 127.0.0.1:10808` |
77
+ | 从环境变量 | Host 进程的 `HTTPS_PROXY` / `HTTP_PROXY` / `ALL_PROXY` |
78
+
79
+ 一次选择会**一次性**写入协议 / 主机 / 端口三项(不是三次写入),仍然走既有的地址与凭据校验,
80
+ 选完可以直接改。环境变量只取**地址**:凭据永远不进 `/dsh-provider-proxy/providers` 的响应,
81
+ 如果该变量带了用户名密码,页面会提示「请在下方补填」,而不是假装已经导入。
82
+ 没检测到可用的环境变量时,该项显示「未检测到」并禁用。
83
+
84
+ ### 官方上游域名模板(0.9.0)
85
+
86
+ 卡片「高级:目标域名规则 → 仅走代理」下方,若 provider id 的首段是已知厂商
87
+ (`openai` / `anthropic` / `google` / `deepseek`),会出现一个
88
+ **载入官方上游域名** 药丸,一次写入规范主机名:
89
+
90
+ | provider | 写入 `onlyHosts` |
91
+ | --- | --- |
92
+ | OpenAI | `api.openai.com, *.openai.com` |
93
+ | Anthropic | `api.anthropic.com` |
94
+ | Google | `generativelanguage.googleapis.com` |
95
+ | DeepSeek | `api.deepseek.com` |
96
+
97
+ 它是**追加**而不是覆盖:你自己加的中转主机不会被丢掉;已经存在的同名规则(含 `*.` 写法差异)不会重复写入。
98
+ 模板里的每一项都保证能通过死规则检查;未知 provider 不显示这个按钮,避免猜错主机名把流量限死。
99
+
100
+ ### 配置备份与恢复(0.9.0)
101
+
102
+ 页面顶部的 **备份配置 / 恢复配置**:
103
+
104
+ - **导出**会先问一次「是否包含代理密码?」——默认不含(取消即脱敏)。文件名为
105
+ `dsh-proxy-backup-<日期>.json`,内容包含 `providers`、`proxyProfiles`、`defaultProxy`、
106
+ `localDirect`、`testUrl`。
107
+ - **导入**先解析并校验类型,不合法会直接报错且**不改动现有配置**;合法则弹确认框显示将覆盖多少个
108
+ provider / 预设,确认后**一次**写入覆盖全部五段。缺字段按 schema 默认补齐,
109
+ 0.8.0 的旧备份(没有 `proxyProfiles`)也能导入。
110
+ - 脱敏导出把每个密码字段写成空字符串(而不是删掉),所以文件里能一眼看出「这里被脱敏了」;
111
+ 恢复脱敏备份后,代理密码需要重新填写。
112
+
52
113
  **端点输入不随开关变化**:关闭的卡片照样可以填写、也可以测试。这样就能**先验证再启用**,避开了
53
114
  「必须先打开代理才能测,而配置是坏的」这个窗口。
54
115
 
@@ -64,6 +125,17 @@ Host catalog 是否列出某个 provider(`live`)不影响已保存路由的
64
125
 
65
126
  页面上的几处便利:
66
127
 
128
+ - **状态筛选标签**:卡片列表顶部提供「全部 / 走代理 / 直连 / 配置被拒」快捷筛选胶囊标签,实时统计各状态下的 provider 数量,方便运维巡检与故障排查。
129
+ - **紧凑与卡片双视图**:支持卡片视图(便于逐项配置与编辑)与紧凑视图(高密度列表呈现代理类型、端点、最近调用与自检状态),紧凑行支持点击就地展开/折叠对应卡片。
130
+ 紧凑行自 0.9.0 起分三行:第一行是名称 / id / 实际生效的端点 / 最近调用,第二行是开关、**端点来源下拉**与测试、编辑按钮,
131
+ 第三行只在自检有结果时出现,展示延迟、HTTP 状态、出口 IP(可一键复制)或失败原因。结果单独成行,
132
+ 所以测速进行中或报错时不会挤动上方的下拉与按钮。
133
+ 视图模式与状态筛选属于**查看偏好**,记在浏览器本地(`localStorage`),离开再回到本页仍保持上次选择;
134
+ 它们不会被写进 `cordis.patch.yml`——显示方式不是配置,也不该因为一次设置写入失败而丢失。
135
+ - **响应式双列表单**:端点配置(传输协议、主机、端口、用户名、密码)在卡片内采用响应式双列栅格排版,大幅缩减页面纵向高度与滚动频次。
136
+ - **一键批量自检**:搜索过滤栏右侧集成「全部测试」按钮,内置并发数为 3 的受控并发队列,批量验证所有已配置且已启用的端点,并实时显示已完成百分比进度。
137
+ - **结果一键复制**:自检回报的出口 IP、探测目标以及连接失败的错误信息旁均配有快捷复制按钮,点击即复制至剪贴板并提供微交互反馈。
138
+ - **提示文字视觉高亮**:输入框下方的辅助操作提示(如 IP 粘贴格式、认证口令说明等)采用醒目的提示色高亮显示,与常规字段标签清晰区分。
67
139
  - **过滤框**:provider 多时按 id 或名称筛掉不必看的卡片。它纯粹是视图,不写任何设置。
68
140
  - **粘贴完整代理 URL**:把 `socks5://user:pass@host:1080` 粘进任一「IP / 主机」输入框,会自动拆成
69
141
  协议 / 主机 / 端口 / 用户名 / 密码,并且是**一次**写入(不是五个字段各写一次)。显式写出的 `:80` / `:443`
@@ -85,14 +157,19 @@ Host catalog 是否列出某个 provider(`live`)不影响已保存路由的
85
157
  写回新配置;删除后重新添加同名 provider 同样视为一条新路由。`hits` 命中计数是历史累计,
86
158
  上述配置变化都不会清空它。
87
159
 
88
- 页面顶部与顶层还有三项整页设置(写在 `cordis.patch.yml`,也可以直接编辑):
160
+ 页面顶部与顶层还有这几项整页设置(写在 `cordis.patch.yml`,也可以直接编辑):
89
161
 
90
162
  | 顶层设置 | 默认 | 说明 |
91
163
  | --- | --- | --- |
92
164
  | `defaultProxy` | 未配置 | 供勾选「使用默认代理」的卡片复用的端点 |
165
+ | `proxyProfiles` | `{}` | 命名预设字典(名称 → 端点,与 `defaultProxy` 同结构);由卡片上的 `profileId` 引用 |
93
166
  | `localDirect` | `true` | 本机 / 内网目标是否直连(见「目标域名规则」一节) |
94
167
  | `testUrl` | `https://api.ipify.org?format=json` | 自检的最后兜底目标;可写多个(逗号或空格分隔,上限 5 个),按序回退 |
95
168
 
169
+ 每个 `providers.<id>` 除原有的 `enabled` / `useDefault` 等字段外,0.9.0 起还接受 `profileId`(默认 `''`)。
170
+ `profileId` 非空时该路由的传输字段整体取自 `proxyProfiles[profileId]`,并优先于 `useDefault`;
171
+ 目标域名规则与自检目标始终是卡片自己的。
172
+
96
173
  其中的 `localDirect` 与 `testUrl` 也可以在默认代理区块下方的 **全局设置(高级)** 折叠块里修改:
97
174
  `testUrl` 留空时 Host 使用内置默认值,非法候选或超过 5 项只会提示、不会阻止保存;
98
175
  `localDirect` 默认勾选。修改任一项都会清空页面上所有自检结果,并且点「测试」前会把待写设置先落盘。
@@ -206,7 +283,7 @@ catalog 的 `live` 只影响未配置 provider 是否出现在列表里,不参
206
283
 
207
284
  ```sh
208
285
  npm run build # 构建 lib/index.js 与 lib/client.js
209
- npm test # 274 个用例,跑的是构建产物
286
+ npm test # 392 个用例,跑的是构建产物
210
287
  npm run typecheck # 类型检查(仅覆盖 src/)
211
288
  npm run verify # 上面三件事,按顺序
212
289
  ```
@@ -220,8 +297,11 @@ npm run verify # 上面三件事,按顺序
220
297
  ## 发布
221
298
 
222
299
  ```sh
223
- npm run verify # 先确认全绿
224
- npm version patch # 0.2.0 -> 0.2.1
300
+ npm run verify # 先确认全绿
301
+ npm pack --dry-run # 核对包内容(9 个文件)
302
+ npm version patch # 0.9.0 -> 0.9.1
225
303
  npm publish
226
304
  git push --follow-tags
227
305
  ```
306
+
307
+ 发布说明放在 `release_notes/`,文件名形如 `RELEASE_NOTES_090.md`。