@shgroup/dsh-serenity-hooks 1.57.0 → 1.57.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.md +23 -9
- package/dsh.plugin.json +1 -1
- package/lib/{ccc-roots-BC8mn8iM.js → ccc-roots-GIJ3A_tw.js} +79 -2
- package/lib/ccc-roots.d.ts +2 -1
- package/lib/client.js +43 -379
- package/lib/config-ops.d.ts +3 -34
- package/lib/face-host.d.ts +7 -5
- package/lib/index.d.ts +0 -31
- package/lib/index.js +114 -1046
- package/lib/{message-source-BcCRsEOh.js → message-source-B4P3Uw6D.js} +1 -1
- package/lib/output-guard-seam.d.ts +9 -2
- package/lib/ports.d.ts +6 -6
- package/lib/seams/lifecycle.d.ts +3 -3
- package/lib/{settings-section-xHABl8nk.js → settings-section-DQIVsTqE.js} +45 -30
- package/lib/settings-section.d.ts +3 -16
- package/lib/skiff-core.d.ts +6 -5
- package/lib/skiff-debug.d.ts +5 -4
- package/lib/skiff-role.d.ts +1 -1
- package/lib/tools/skiff-admin.d.ts +1 -1
- package/lib/unattended-ops.d.ts +3 -1
- package/lib/weixin-bridge.d.ts +9 -2
- package/lib/weixin-output-guard.d.ts +1 -1
- package/package.json +1 -1
- package/lib/access-CNccNtgf.js +0 -79
- package/lib/acp-core.d.ts +0 -80
- package/lib/acp-http.d.ts +0 -37
- package/lib/skiff-registry-BjIX_KD1.js +0 -43
package/lib/config-ops.d.ts
CHANGED
|
@@ -51,15 +51,9 @@ interface PersonaSettings {
|
|
|
51
51
|
/** 用户替换文本(替代 EAP 块 + MSM 原则段的原文) */
|
|
52
52
|
overrideText: string;
|
|
53
53
|
}
|
|
54
|
-
/** F4d 建议问答页(v1.26.1
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
interface PublicAskSettings {
|
|
58
|
-
/** 访问 key(空 = 未生成;首次启用时 ensurePublicAskKey 自动生成随机 key 写回固定) */
|
|
59
|
-
key: string;
|
|
60
|
-
/** 开放容器白名单(CCC 目录名,如 home-serenity);空数组 = 全部容器开放 */
|
|
61
|
-
allowed: string[];
|
|
62
|
-
}
|
|
54
|
+
/** F4d 建议问答页(v1.26.1)**已于 2026-10-15 整面退役**(owner 裁「砍掉外部问答」)
|
|
55
|
+
* ⇒ 原 `PublicAskSettings`(key + 容器白名单)连同 `AdvancedSettings.publicAsk` 一并删除。
|
|
56
|
+
* 旧配置文件残留 `publicAsk` 节 ⇒ **静默忽略**(`mergeWithDefaults` 不再读它,幂等安全)。 */
|
|
63
57
|
/**
|
|
64
58
|
* 高级设定全量(~/.dsh/serenity-hooks.json 持久化形态;passHash 含 hash)。
|
|
65
59
|
* review P2-3:**rebuild 已从高级配置删除**——rebuild 开关/阈值归"简单配置"
|
|
@@ -70,7 +64,6 @@ interface PublicAskSettings {
|
|
|
70
64
|
interface AdvancedSettings {
|
|
71
65
|
gateway: GatewaySettings;
|
|
72
66
|
persona: PersonaSettings;
|
|
73
|
-
publicAsk: PublicAskSettings;
|
|
74
67
|
/** 主动发送入口(v1.30.9):**只绑 127.0.0.1** 的独立监听器——CCC 的 MSM 用它发消息给指定用户 */
|
|
75
68
|
weixinApi: WeixinApiSettings;
|
|
76
69
|
}
|
|
@@ -99,26 +92,6 @@ export declare function writeAdvancedSettings(settings: AdvancedSettings): void;
|
|
|
99
92
|
* accounts 传入数组 → 整体替换;accounts 未传 → 保留现有。
|
|
100
93
|
*/
|
|
101
94
|
export declare function updateAdvancedSettings(patch: Partial<AdvancedSettings>): AdvancedSettings;
|
|
102
|
-
/**
|
|
103
|
-
* 确保问答页访问 key 存在(首次启用自动生成 + 写回固定,用户拍板"配置时生成"):
|
|
104
|
-
* 读取全局配置 publicAsk.key;为空 → 生成 32 字节随机 hex(64 字符)→ 写回持久化。
|
|
105
|
-
* @returns 当前固定 key(已生成则返回既有值——**幂等**,不会覆盖用户手改的 key)
|
|
106
|
-
*/
|
|
107
|
-
export declare function ensurePublicAskKey(): string;
|
|
108
|
-
/** 校验问答页访问 key(timing-safe;key 未生成 → 恒 false——没有 key 不工作) */
|
|
109
|
-
export declare function verifyPublicAskKey(provided: string | undefined): boolean;
|
|
110
|
-
/**
|
|
111
|
-
* 轮换问答页访问 key(v1.26.5,S142 用户:公网开放 + 不好说要换 key 呢):
|
|
112
|
-
* 生成新 32 字节随机 hex(64 字符)→ 覆盖写回(**强制替换**——旧 key 立即失效)。
|
|
113
|
-
* @returns 新 key(面板展示给管理员,重新分享给使用者)
|
|
114
|
-
*/
|
|
115
|
-
export declare function rotatePublicAskKey(): string;
|
|
116
|
-
/** 重置 IP 失败状态(测试/管理员解封) */
|
|
117
|
-
export declare function resetPublicAskIpFail(ip: string): void;
|
|
118
|
-
/** IP 当前是否锁定(到期自动解锁) */
|
|
119
|
-
export declare function isPublicAskIpLocked(ip: string): boolean;
|
|
120
|
-
/** 记录一次 key 校验失败;达到阈值 → 锁定(指数退避)。返回锁定剩余毫秒(0 = 未锁定) */
|
|
121
|
-
export declare function recordPublicAskFail(ip: string): number;
|
|
122
95
|
/**
|
|
123
96
|
* 一次性迁移(v1.21.x → v1.22):旧版把 `serenityAdvanced` 存在 CCC localstore.json;
|
|
124
97
|
* 新版归 plugin 全局文件。全局文件已存在 → 跳过(幂等);localstore 无旧节 → 跳过。
|
|
@@ -147,10 +120,6 @@ interface AdvancedSettingsWire {
|
|
|
147
120
|
totpEnabled: boolean;
|
|
148
121
|
};
|
|
149
122
|
persona: PersonaSettings;
|
|
150
|
-
publicAsk: {
|
|
151
|
-
/** 开放容器白名单(v1.26.2:容器名数组;空 = 全部开放) */
|
|
152
|
-
allowed: string[];
|
|
153
|
-
};
|
|
154
123
|
}
|
|
155
124
|
/** 持久化 → wire(剥离 passHash/totpSecret;只留布尔) */
|
|
156
125
|
export declare function toWire(settings: AdvancedSettings): AdvancedSettingsWire;
|
package/lib/face-host.d.ts
CHANGED
|
@@ -3,14 +3,16 @@
|
|
|
3
3
|
*
|
|
4
4
|
* ## 现状 → 本模块要收掉什么(取证:`…/acc-c4c5-current-state.md` §①/§③ 3.1)
|
|
5
5
|
*
|
|
6
|
-
* 插件自己 spawn
|
|
7
|
-
*
|
|
6
|
+
* 插件自己 spawn 了**三个** node:http 监听器(B 3081 网关 / C 3082 微信发送 / D 3099 Skiff 调试)。
|
|
7
|
+
* ⚠️ **2026-10-15 变更**:原为四个(含 **E 3100 ACP+问答**),E 已随 owner「砍掉外部问答」令**整面退役**
|
|
8
|
+
* ⇒ 仍保有面 B/C/D 三个;本段保留"当年是四个"的记述,因为下方"两套拆卸"的病史由它解释。
|
|
9
|
+
* 此前四处各写一份同款样板:`createServer` + `server.once('error')` +
|
|
8
10
|
* `listen(port, host)` + 模块级 `active` 变量 + `close()`;拆卸也分裂成**两套**——
|
|
9
11
|
* `seams/lifecycle.ts` 有一个聚合 disposer,而 `gateway.ts` 与 `weixin-send-api.ts`
|
|
10
12
|
* **各自另注册**一个(D/E 干脆没有自己的 disposer)。
|
|
11
13
|
*
|
|
12
14
|
* 本模块把"listener 生命周期"收成一处:**active 表 + 统一 listen/close + 统一错误与端口占用
|
|
13
|
-
*
|
|
15
|
+
* 处理**。各面各自只提供 `{ name, port, host, enabled, handler }`。
|
|
14
16
|
*
|
|
15
17
|
* ## 🔴 共享的是「生命周期与样板」,**绝不是**「路由 / 监听器 / 鉴权」
|
|
16
18
|
*
|
|
@@ -18,12 +20,12 @@
|
|
|
18
20
|
* · **A ↔ C 解耦**(`weixin-send-api.ts:4-7`):3080 会被 3081 原样反代(连请求头),
|
|
19
21
|
* 把 3082 的端点挂到 3080 上 = 已登录的外部家庭账号即可冒充 bot 发消息
|
|
20
22
|
* ⇒ 本模块**不提供**"把面挂到别的面"的能力,也不共享路由表;
|
|
21
|
-
* · **E ↔ D**
|
|
23
|
+
* · (原 **E ↔ D** 共用会话核心但各自独立 listener 一条,**随 E 退役删除**);
|
|
22
24
|
* · **B 是 A 的代理宿主**(把请求打到 `127.0.0.1:<主端口>`),不是另一个路由面。
|
|
23
25
|
*
|
|
24
26
|
* ## 面 A(3080)不在本模块之列
|
|
25
27
|
* 它是**宿主 DSH 主 WebUI**,插件只往上挂 `/serenity/*` 路由(`ctx.webServer.register`),
|
|
26
|
-
* **插件不起这个 listener** ⇒ 面宿主只持有 B/C/D
|
|
28
|
+
* **插件不起这个 listener** ⇒ 面宿主只持有 B/C/D 三个自起面。
|
|
27
29
|
*
|
|
28
30
|
* ## 两个入口的分工(这是本模块唯一的"抽象决策",别混)
|
|
29
31
|
* · {@link startFace} —— **机械启动**:把一个 handler 绑到 `host:port` 上。同名面若已在监听,
|
package/lib/index.d.ts
CHANGED
|
@@ -129,11 +129,6 @@ export interface Config {
|
|
|
129
129
|
enabled?: boolean;
|
|
130
130
|
debugPort?: number;
|
|
131
131
|
};
|
|
132
|
-
/** F4c ACP(实验性):HTTP JSON-RPC 端点启停(entry 默认值,运行时经 DSH settings) */
|
|
133
|
-
acp?: {
|
|
134
|
-
enabled?: boolean;
|
|
135
|
-
httpPort?: number;
|
|
136
|
-
};
|
|
137
132
|
/** v1.30.12 web_fetch provider 接管(fake-ip / TUN 网络:宿主内置 provider 判「非公网」恒拒) */
|
|
138
133
|
webFetch?: {
|
|
139
134
|
enabled?: boolean;
|
|
@@ -173,12 +168,6 @@ export interface Config {
|
|
|
173
168
|
skiffEnabled?: Volatile<boolean | undefined>;
|
|
174
169
|
/** F4 Skiff 调试端口(面板层;部署层同义键 = `skiff.debugPort`) */
|
|
175
170
|
skiffDebugPort?: Volatile<number | undefined>;
|
|
176
|
-
/** F4c ACP HTTP 端点总开关(面板层;部署层同义键 = `acp.enabled`) */
|
|
177
|
-
acpEnabled?: Volatile<boolean | undefined>;
|
|
178
|
-
/** F4c ACP HTTP 端口(面板层;部署层同义键 = `acp.httpPort`) */
|
|
179
|
-
acpHttpPort?: Volatile<number | undefined>;
|
|
180
|
-
/** F4d 建议问答页总开关(面板层;无部署层同义键) */
|
|
181
|
-
publicAskEnabled?: Volatile<boolean | undefined>;
|
|
182
171
|
/** CRO(轨迹自编程唤起)总闸(面板层;无部署层同义键;缺省开) */
|
|
183
172
|
croEnabled?: Volatile<boolean | undefined>;
|
|
184
173
|
/** 无人值守代理回复总闸(面板层;无部署层同义键;缺省关) */
|
|
@@ -221,13 +210,6 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
|
|
|
221
210
|
enabled: z<boolean, boolean, "defined">;
|
|
222
211
|
debugPort: z<number, number, "defined">;
|
|
223
212
|
}>>, "plain">;
|
|
224
|
-
acp: z<Schemastery.ObjectS<NoInfer<{
|
|
225
|
-
enabled: z<boolean, boolean, "defined">;
|
|
226
|
-
httpPort: z<number, number, "defined">;
|
|
227
|
-
}>>, Schemastery.ObjectT<NoInfer<{
|
|
228
|
-
enabled: z<boolean, boolean, "defined">;
|
|
229
|
-
httpPort: z<number, number, "defined">;
|
|
230
|
-
}>>, "plain">;
|
|
231
213
|
webFetch: z<Schemastery.ObjectS<NoInfer<{
|
|
232
214
|
enabled: z<boolean, boolean, "defined">;
|
|
233
215
|
}>>, Schemastery.ObjectT<NoInfer<{
|
|
@@ -279,9 +261,6 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
|
|
|
279
261
|
rebuildThresholdK: z<number, number, "volatile">;
|
|
280
262
|
skiffEnabled: z<boolean, boolean, "volatile">;
|
|
281
263
|
skiffDebugPort: z<number, number, "volatile">;
|
|
282
|
-
acpEnabled: z<boolean, boolean, "volatile">;
|
|
283
|
-
acpHttpPort: z<number, number, "volatile">;
|
|
284
|
-
publicAskEnabled: z<boolean, boolean, "volatile">;
|
|
285
264
|
croEnabled: z<boolean, boolean, "volatile">;
|
|
286
265
|
unattendedEnabled: z<boolean, boolean, "volatile">;
|
|
287
266
|
diagramEnabled: z<boolean, boolean, "volatile">;
|
|
@@ -314,13 +293,6 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
|
|
|
314
293
|
enabled: z<boolean, boolean, "defined">;
|
|
315
294
|
debugPort: z<number, number, "defined">;
|
|
316
295
|
}>>, "plain">;
|
|
317
|
-
acp: z<Schemastery.ObjectS<NoInfer<{
|
|
318
|
-
enabled: z<boolean, boolean, "defined">;
|
|
319
|
-
httpPort: z<number, number, "defined">;
|
|
320
|
-
}>>, Schemastery.ObjectT<NoInfer<{
|
|
321
|
-
enabled: z<boolean, boolean, "defined">;
|
|
322
|
-
httpPort: z<number, number, "defined">;
|
|
323
|
-
}>>, "plain">;
|
|
324
296
|
webFetch: z<Schemastery.ObjectS<NoInfer<{
|
|
325
297
|
enabled: z<boolean, boolean, "defined">;
|
|
326
298
|
}>>, Schemastery.ObjectT<NoInfer<{
|
|
@@ -372,9 +344,6 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
|
|
|
372
344
|
rebuildThresholdK: z<number, number, "volatile">;
|
|
373
345
|
skiffEnabled: z<boolean, boolean, "volatile">;
|
|
374
346
|
skiffDebugPort: z<number, number, "volatile">;
|
|
375
|
-
acpEnabled: z<boolean, boolean, "volatile">;
|
|
376
|
-
acpHttpPort: z<number, number, "volatile">;
|
|
377
|
-
publicAskEnabled: z<boolean, boolean, "volatile">;
|
|
378
347
|
croEnabled: z<boolean, boolean, "volatile">;
|
|
379
348
|
unattendedEnabled: z<boolean, boolean, "volatile">;
|
|
380
349
|
diagramEnabled: z<boolean, boolean, "volatile">;
|