@aalis/runtime 0.15.0 → 0.16.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 +11 -2
- package/dist/config-store.d.ts +49 -12
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +419 -58
- package/dist/config-store.js.map +1 -1
- package/dist/config-sync.d.ts +19 -8
- package/dist/config-sync.d.ts.map +1 -1
- package/dist/config-sync.js +81 -58
- package/dist/config-sync.js.map +1 -1
- package/dist/console-sink.d.ts +1 -1
- package/dist/file-logger.d.ts +4 -4
- package/dist/file-logger.d.ts.map +1 -1
- package/dist/file-logger.js +6 -5
- package/dist/file-logger.js.map +1 -1
- package/dist/home.d.ts +64 -0
- package/dist/home.d.ts.map +1 -0
- package/dist/home.js +229 -0
- package/dist/home.js.map +1 -0
- package/dist/host-logs.d.ts +9 -0
- package/dist/host-logs.d.ts.map +1 -0
- package/dist/host-logs.js +104 -0
- package/dist/host-logs.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/instance-lock.d.ts +56 -0
- package/dist/instance-lock.d.ts.map +1 -0
- package/dist/instance-lock.js +281 -0
- package/dist/instance-lock.js.map +1 -0
- package/dist/node-modules-loader.d.ts +2 -2
- package/dist/node-modules-loader.d.ts.map +1 -1
- package/dist/node-modules-loader.js +8 -4
- package/dist/node-modules-loader.js.map +1 -1
- package/dist/plugin-discovery.d.ts +9 -4
- package/dist/plugin-discovery.d.ts.map +1 -1
- package/dist/plugin-discovery.js +28 -16
- package/dist/plugin-discovery.js.map +1 -1
- package/dist/providers.d.ts +38 -13
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +92 -216
- package/dist/providers.js.map +1 -1
- package/dist/secrets.d.ts +44 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +104 -0
- package/dist/secrets.js.map +1 -0
- package/dist/start.d.ts +19 -12
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +166 -43
- package/dist/start.js.map +1 -1
- package/dist/yaml-file.d.ts +35 -0
- package/dist/yaml-file.d.ts.map +1 -0
- package/dist/yaml-file.js +213 -0
- package/dist/yaml-file.js.map +1 -0
- package/package.json +13 -7
package/dist/config-store.js
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
// ============================================================
|
|
2
|
-
// config-store —— 宿主配置文档(内存态 + 危险键闸 +
|
|
2
|
+
// config-store —— 宿主配置文档(内存态 + 危险键闸 + 落盘委托)、密钥存储与 host-config 服务
|
|
3
3
|
//
|
|
4
4
|
// 运行态(实例配置、禁用态、服务偏好)在 core;本模块持「下次启动用什么」的文档:
|
|
5
|
-
// -
|
|
6
|
-
//
|
|
7
|
-
//
|
|
5
|
+
// - 启动:宿主从文档取每个实例的配置(解析密钥引用后)与禁用标记交给 app.pluginAll,偏好(全局与本插件)经根绑定
|
|
6
|
+
// services.prefer 应用,热重载时按改动前后的文档对账;
|
|
7
|
+
// - 运行:改插件配置经 host-config 的 applyPluginConfig 一步完成;启停、偏好等管理动作只改运行态,
|
|
8
|
+
// 要跨重启保留的调用方经 host-config 自己写文档并 save()。
|
|
9
|
+
// 文档是文档形态:schema 里 `secret: true` 的字段只放引用 `{ $secret: '<键>' }`,值在密钥存储里(见 secrets.ts)。
|
|
10
|
+
// 本模块不碰文件:持久化与外部变更监听由注入的 provider 完成。
|
|
8
11
|
// ============================================================
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
13
|
+
import { doctor } from '@aalis/api-doctor';
|
|
14
|
+
import { hostConfig, isConfigSaveRefused, } from '@aalis/api-host-config';
|
|
15
|
+
import { parseInstanceId, provide, services, } from '@aalis/core';
|
|
16
|
+
import { CORE_CONFIG_SCHEMA, cloneConfigObject, defaultsFrom, isUnsafeConfigKey, } from '@aalis/schema-config';
|
|
17
|
+
import { configToReload } from './config-sync.js';
|
|
18
|
+
import { moduleDefinitionOf } from './plugin-discovery.js';
|
|
19
|
+
import { describeDangling, plainSecretPaths, referencedKeys, resolveSecrets, splitSecrets, } from './secrets.js';
|
|
12
20
|
/**
|
|
13
21
|
* 插件 id 不得当 `plugins` / 禁用名单的对象键——那三条会落到原型链。
|
|
14
22
|
* 按 id 取放的入口共用这一抛错,文案给 WebUI 映射 400。
|
|
@@ -17,11 +25,35 @@ function assertSafePluginId(id) {
|
|
|
17
25
|
if (isUnsafeConfigKey(id))
|
|
18
26
|
throw new Error(`插件 id 不合法: ${id}`);
|
|
19
27
|
}
|
|
20
|
-
|
|
28
|
+
/**
|
|
29
|
+
* @param secrets 宿主的密钥存储;不给时没有密钥存储(嵌入式宿主、只在内存里的配置),密钥照旧以明文留在文档里
|
|
30
|
+
*/
|
|
31
|
+
export function createConfigStore(initial, provider, secrets) {
|
|
32
|
+
// 配置会落盘、密钥却不能:引用写进文件,值只在内存里,重启后全部落空
|
|
33
|
+
if (secrets && !secrets.provider?.save && provider?.save) {
|
|
34
|
+
throw new Error('配置文档会落盘、密钥存储却不能保存:引用会在重启后落空。给密钥存储一个能保存的 provider,或者不给密钥存储');
|
|
35
|
+
}
|
|
21
36
|
let config = normalize(initial);
|
|
22
|
-
|
|
37
|
+
// 配置文件上的那一份(最后读入或写出的):密钥文件拒写之后按文件对账时,文档退回这一份
|
|
38
|
+
let fileDoc = snapshot(config);
|
|
39
|
+
let values = secretMap(secrets?.values ?? {});
|
|
40
|
+
// 已提交、还没写进密钥文件的值:密钥文件在这期间被外部改动重新读入时并进新内容,文档里的引用可能正指着它们
|
|
41
|
+
const pending = new Map();
|
|
42
|
+
// 密钥文件拒写过:下一次密钥文件变更按文件对账,不再并进 pending(见 watch)。refusedGen 是拒写的代数:
|
|
43
|
+
// 写成的那次保存只在它写盘期间没有新的拒写时清标志,并发的另一次保存被拒时标志留着
|
|
44
|
+
let secretsRefused = false;
|
|
45
|
+
let refusedGen = 0;
|
|
46
|
+
// 宿主经自己的写入换掉、删掉或新建的键:文档落盘之后,不再被任何配置引用的就从密钥存储里删掉。
|
|
47
|
+
// 手改配置文件不经这里,不触发删除;手加进 secrets.yaml 还没被引用的键也不在其中
|
|
48
|
+
const orphanCandidates = new Set();
|
|
49
|
+
const unwatchFns = [];
|
|
23
50
|
let onChangeCallback = null;
|
|
51
|
+
const markReplaced = (instanceId) => {
|
|
52
|
+
if (Object.hasOwn(config.plugins, instanceId))
|
|
53
|
+
referencedKeys(config.plugins[instanceId], orphanCandidates);
|
|
54
|
+
};
|
|
24
55
|
const store = {
|
|
56
|
+
hasSecretStore: secrets !== undefined,
|
|
25
57
|
get: key => config[key],
|
|
26
58
|
getAll: () => config,
|
|
27
59
|
set: (key, value) => {
|
|
@@ -33,11 +65,13 @@ export function createConfigStore(initial, provider) {
|
|
|
33
65
|
},
|
|
34
66
|
setPluginConfig(instanceId, next) {
|
|
35
67
|
assertSafePluginId(instanceId);
|
|
68
|
+
markReplaced(instanceId);
|
|
36
69
|
// 值也过闸:外来对象(WebUI 请求体、工具参数)里 JSON 解出的 __proto__ 等键不进文档,调用方之后改它也写不穿
|
|
37
70
|
config.plugins[instanceId] = cloneConfigObject(next);
|
|
38
71
|
},
|
|
39
72
|
removePluginConfig(instanceId) {
|
|
40
73
|
assertSafePluginId(instanceId);
|
|
74
|
+
markReplaced(instanceId);
|
|
41
75
|
delete config.plugins[instanceId];
|
|
42
76
|
},
|
|
43
77
|
isPluginDisabled(instanceId) {
|
|
@@ -53,87 +87,408 @@ export function createConfigStore(initial, provider) {
|
|
|
53
87
|
else if (!enabled && idx < 0)
|
|
54
88
|
config.disabledPlugins.push(instanceId);
|
|
55
89
|
},
|
|
56
|
-
getServicePreferences:
|
|
57
|
-
setServicePreference(name, contextId) {
|
|
90
|
+
getServicePreferences: scope => preferencesIn(config, scope) ?? {},
|
|
91
|
+
setServicePreference(name, contextId, scope) {
|
|
58
92
|
if (isUnsafeConfigKey(name))
|
|
59
93
|
return;
|
|
60
|
-
config
|
|
61
|
-
|
|
94
|
+
let prefs = preferencesIn(config, scope);
|
|
95
|
+
if (!prefs) {
|
|
96
|
+
prefs = {};
|
|
97
|
+
if (scope?.for === undefined)
|
|
98
|
+
config.servicePreferences = prefs;
|
|
99
|
+
else
|
|
100
|
+
config.pluginServicePreferences = { ...config.pluginServicePreferences, [scope.for]: prefs };
|
|
101
|
+
}
|
|
102
|
+
prefs[name] = contextId;
|
|
62
103
|
},
|
|
63
|
-
removeServicePreference(name) {
|
|
64
|
-
|
|
104
|
+
removeServicePreference(name, scope) {
|
|
105
|
+
const prefs = preferencesIn(config, scope);
|
|
106
|
+
if (!prefs || isUnsafeConfigKey(name))
|
|
65
107
|
return;
|
|
66
|
-
delete
|
|
108
|
+
delete prefs[name];
|
|
109
|
+
// 本插件偏好删空了就整段去掉,文件里不留空段
|
|
110
|
+
if (scope?.for !== undefined && Object.keys(prefs).length === 0)
|
|
111
|
+
delete config.pluginServicePreferences?.[scope.for];
|
|
67
112
|
},
|
|
68
|
-
|
|
113
|
+
resolvePluginConfig(instanceId, schema, doc, staged) {
|
|
114
|
+
const source = doc ?? store.getPluginConfig(instanceId);
|
|
115
|
+
return resolveSecrets(schema, source, key => {
|
|
116
|
+
if (staged?.has(key))
|
|
117
|
+
return { value: staged.get(key) };
|
|
118
|
+
return values.has(key) ? { value: values.get(key) } : undefined;
|
|
119
|
+
});
|
|
120
|
+
},
|
|
121
|
+
splitPluginSecrets(instanceId, schema, submitted, base) {
|
|
122
|
+
if (!secrets)
|
|
123
|
+
return { doc: submitted, writes: new Map(), placed: [] };
|
|
124
|
+
const inUse = referencedKeys(config.plugins);
|
|
125
|
+
referencedKeys(submitted, inUse);
|
|
126
|
+
return splitSecrets(schema, instanceId, submitted, base ?? store.getPluginConfig(instanceId), key => {
|
|
127
|
+
return inUse.has(key) || values.has(key);
|
|
128
|
+
});
|
|
129
|
+
},
|
|
130
|
+
commitSecrets(writes) {
|
|
131
|
+
if (writes.size === 0)
|
|
132
|
+
return () => { };
|
|
133
|
+
const before = new Map();
|
|
134
|
+
for (const [key, value] of writes) {
|
|
135
|
+
before.set(key, {
|
|
136
|
+
stored: values.has(key) ? { value: values.get(key) } : undefined,
|
|
137
|
+
pending: pending.has(key) ? { value: pending.get(key) } : undefined,
|
|
138
|
+
});
|
|
139
|
+
values.set(key, value);
|
|
140
|
+
pending.set(key, value);
|
|
141
|
+
// 新写入的键同样是候选:落盘时还有人引用就留着,没人引用了(文件对账回退、被后来的写入顶掉)就删
|
|
142
|
+
orphanCandidates.add(key);
|
|
143
|
+
}
|
|
144
|
+
return () => {
|
|
145
|
+
for (const [key, prev] of before) {
|
|
146
|
+
if (prev.stored)
|
|
147
|
+
values.set(key, prev.stored.value);
|
|
148
|
+
else
|
|
149
|
+
values.delete(key);
|
|
150
|
+
if (prev.pending)
|
|
151
|
+
pending.set(key, prev.pending.value);
|
|
152
|
+
else
|
|
153
|
+
pending.delete(key);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
},
|
|
157
|
+
// async:同步 provider 的抛错也以拒绝传出,调用方统一经 Promise 接住。
|
|
158
|
+
// 先写密钥再写文档:文档里的引用落盘时,它指向的键已经在盘上
|
|
69
159
|
persist: async () => {
|
|
160
|
+
const secretProvider = secrets?.provider;
|
|
161
|
+
if (pending.size > 0 && secretProvider?.save) {
|
|
162
|
+
// 写盘途中可能有新的提交:写成后只清掉这次写出去、之后没再改过的
|
|
163
|
+
const flushing = new Map(pending);
|
|
164
|
+
const gen = refusedGen;
|
|
165
|
+
try {
|
|
166
|
+
await secretProvider.save(Object.fromEntries(values));
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
if (isConfigSaveRefused(err)) {
|
|
170
|
+
refusedGen++;
|
|
171
|
+
secretsRefused = true;
|
|
172
|
+
}
|
|
173
|
+
throw err;
|
|
174
|
+
}
|
|
175
|
+
// 写成了:盘上已是内存里的内容,不必再按文件对账(文件被原样改回后保存就会走到这里)
|
|
176
|
+
if (refusedGen === gen)
|
|
177
|
+
secretsRefused = false;
|
|
178
|
+
for (const [key, value] of flushing)
|
|
179
|
+
if (pending.get(key) === value)
|
|
180
|
+
pending.delete(key);
|
|
181
|
+
}
|
|
70
182
|
if (!provider?.save)
|
|
71
183
|
return false;
|
|
184
|
+
// 写出的这一份在交给 provider 时定格:落盘途中文档可能又被改过
|
|
185
|
+
const written = snapshot(config);
|
|
72
186
|
await provider.save(config);
|
|
187
|
+
fileDoc = written;
|
|
188
|
+
// 孤儿键在文档写成之后删:没写成时盘上的旧文档可能还引用着它们。主配置已经写成,这一步写密钥失败
|
|
189
|
+
// 不让保存报错,删掉的键放回去,下次保存再删
|
|
190
|
+
if (orphanCandidates.size > 0 && secretProvider?.save) {
|
|
191
|
+
const onDisk = referencedKeys(written.plugins);
|
|
192
|
+
const live = referencedKeys(config.plugins);
|
|
193
|
+
const removed = new Map();
|
|
194
|
+
for (const key of orphanCandidates) {
|
|
195
|
+
// 刚写出的文档与内存文档对它的引用不一致(落盘途中才去掉或才引用的):留作候选,下次落盘后再判
|
|
196
|
+
if (onDisk.has(key) !== live.has(key))
|
|
197
|
+
continue;
|
|
198
|
+
orphanCandidates.delete(key);
|
|
199
|
+
if (live.has(key) || !values.has(key))
|
|
200
|
+
continue;
|
|
201
|
+
removed.set(key, values.get(key));
|
|
202
|
+
values.delete(key);
|
|
203
|
+
}
|
|
204
|
+
if (removed.size > 0) {
|
|
205
|
+
try {
|
|
206
|
+
await secretProvider.save(Object.fromEntries(values));
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
for (const [key, value] of removed) {
|
|
210
|
+
values.set(key, value);
|
|
211
|
+
orphanCandidates.add(key);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
73
216
|
return true;
|
|
74
217
|
},
|
|
75
218
|
watch(onChange) {
|
|
76
219
|
if (onChangeCallback)
|
|
77
220
|
throw new Error('配置变更只支持一个订阅者,先 unwatch 再订阅');
|
|
78
221
|
onChangeCallback = onChange;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
222
|
+
const configWatch = provider?.watch?.(next => {
|
|
223
|
+
const previous = config;
|
|
224
|
+
config = normalize(next);
|
|
225
|
+
fileDoc = snapshot(config);
|
|
226
|
+
onChangeCallback?.(previous);
|
|
227
|
+
});
|
|
228
|
+
if (configWatch)
|
|
229
|
+
unwatchFns.push(configWatch);
|
|
230
|
+
const secretsWatch = secrets?.provider?.watch?.(next => {
|
|
231
|
+
const previous = config;
|
|
232
|
+
values = secretMap(next);
|
|
233
|
+
if (secretsRefused) {
|
|
234
|
+
// 拒写之后的这次变更按文件对账,同主配置拒写:没写成的密钥作废,与它们一起改的文档退回配置文件上那一份。
|
|
235
|
+
// 配置不落盘的宿主没有那一份,文档不动
|
|
236
|
+
secretsRefused = false;
|
|
237
|
+
pending.clear();
|
|
238
|
+
if (provider?.save)
|
|
239
|
+
config = snapshot(fileDoc);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
for (const [key, value] of pending)
|
|
243
|
+
values.set(key, value);
|
|
244
|
+
}
|
|
245
|
+
onChangeCallback?.(previous);
|
|
246
|
+
});
|
|
247
|
+
if (secretsWatch)
|
|
248
|
+
unwatchFns.push(secretsWatch);
|
|
84
249
|
return () => store.unwatch();
|
|
85
250
|
},
|
|
86
251
|
unwatch() {
|
|
87
|
-
|
|
88
|
-
|
|
252
|
+
for (const fn of unwatchFns.splice(0))
|
|
253
|
+
fn();
|
|
89
254
|
onChangeCallback = null;
|
|
90
255
|
},
|
|
91
256
|
};
|
|
92
257
|
return store;
|
|
93
258
|
}
|
|
94
259
|
/**
|
|
95
|
-
*
|
|
96
|
-
|
|
260
|
+
* 实例的定义:已登记的取它自己的;没登记的后缀实例取同模块在册实例的(见 moduleDefinitionOf),模块需声明 reusable
|
|
261
|
+
*/
|
|
262
|
+
function definitionOf(app, instanceId) {
|
|
263
|
+
const own = app.plugins.getPlugin(instanceId)?.definition;
|
|
264
|
+
if (own)
|
|
265
|
+
return own;
|
|
266
|
+
const { moduleName, suffix } = parseInstanceId(instanceId);
|
|
267
|
+
if (!suffix)
|
|
268
|
+
return undefined;
|
|
269
|
+
const found = moduleDefinitionOf(app, moduleName);
|
|
270
|
+
return found?.reusable ? found : undefined;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* 文档里引用了 `keys` 中任一键的已登记实例,按解析后的新值重载(解析结果与运行态相同的不动)。
|
|
274
|
+
* 改了被共用的密钥之后,共用它的实例跟着换上新值。
|
|
275
|
+
*/
|
|
276
|
+
async function reloadSecretSharers(app, store, keys, except) {
|
|
277
|
+
if (keys.size === 0)
|
|
278
|
+
return;
|
|
279
|
+
for (const status of app.plugins.getStatus()) {
|
|
280
|
+
if (status.instanceId === except)
|
|
281
|
+
continue;
|
|
282
|
+
const refs = referencedKeys(store.getPluginConfig(status.instanceId));
|
|
283
|
+
if (![...keys].some(key => refs.has(key)))
|
|
284
|
+
continue;
|
|
285
|
+
const next = configToReload(app, store, status.instanceId, '共用的密钥已更改');
|
|
286
|
+
if (next)
|
|
287
|
+
await app.plugins.updateConfig(status.instanceId, next);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* 把文档接到 App:以 host-config 服务独占登记在根激活上,应用文档里的服务偏好。
|
|
292
|
+
* 须在注册任何插件之前调用,偏好才先于全部提供者生效。
|
|
97
293
|
* `opts` 传交给配置同步(withPluginConfigSync / installConfigHotReload)的同一份:host-config 的
|
|
98
294
|
* `trimUnknownFields` 据此声明宿主的裁剪政策(缺省与配置同步一样按裁剪)。
|
|
99
295
|
*/
|
|
100
296
|
export function installHostConfig(app, store, opts) {
|
|
101
|
-
const host = app.bind({
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
297
|
+
const host = app.bind({ provide, services });
|
|
298
|
+
// 失败在这里记一笔并标记已处理:不 await 的调用方不会因一次落盘失败变成未处理拒绝、被宿主当致命错误退出
|
|
299
|
+
const save = () => {
|
|
300
|
+
const done = (async () => {
|
|
301
|
+
// 宿主不持久化时没有写盘,不记「已保存」
|
|
302
|
+
if (await store.persist())
|
|
303
|
+
app.logger.info('配置已保存');
|
|
304
|
+
})();
|
|
305
|
+
done.catch(err => {
|
|
306
|
+
try {
|
|
307
|
+
// 拒写是保护盘上外部修改的预期结果,调用方已收到拒绝:一行告警即可,不带栈
|
|
308
|
+
if (isConfigSaveRefused(err))
|
|
309
|
+
app.logger.warn(`配置未保存:${err.message}`);
|
|
310
|
+
else
|
|
311
|
+
app.logger.error('配置保存失败:', err);
|
|
312
|
+
}
|
|
313
|
+
catch {
|
|
314
|
+
/* 上报器自身失败不再外抛 */
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
return done;
|
|
318
|
+
};
|
|
319
|
+
const applyPluginConfig = async (instanceId, submitted) => {
|
|
320
|
+
assertSafePluginId(instanceId);
|
|
321
|
+
const entry = app.plugins.getPlugin(instanceId);
|
|
322
|
+
const definition = entry?.definition ?? definitionOf(app, instanceId);
|
|
323
|
+
if (!definition)
|
|
324
|
+
throw new Error(`插件 ${instanceId} 不存在,也没有可用来新建它的同模块定义(模块须已登记且声明 reusable)`);
|
|
325
|
+
const schema = definition.configSchema;
|
|
326
|
+
const { doc, writes, placed } = store.splitPluginSecrets(instanceId, schema, submitted);
|
|
327
|
+
const { config: resolved, dangling } = store.resolvePluginConfig(instanceId, schema, doc, writes);
|
|
328
|
+
if (dangling.length > 0) {
|
|
329
|
+
// 本次提交新引入的悬空引用(键既不在密钥存储里、也不是这次写入的)拒收,运行态与文档都不动;
|
|
330
|
+
// 提交前就悬空、原样带回的照常放行(插件仍会激活失败,并记 error)
|
|
331
|
+
const known = new Set(store.resolvePluginConfig(instanceId, schema).dangling.map(d => d.key));
|
|
332
|
+
const introduced = dangling.filter(d => !known.has(d.key));
|
|
333
|
+
if (introduced.length > 0) {
|
|
334
|
+
throw new Error(`${instanceId} 引用的密钥不在 secrets.yaml 里:${introduced.map(d => `${d.path}(键 ${d.key})`).join('、')};` +
|
|
335
|
+
'重新填写值,或先在 secrets.yaml 里补上这些键');
|
|
336
|
+
}
|
|
337
|
+
app.logger.error(describeDangling(instanceId, dangling));
|
|
338
|
+
}
|
|
339
|
+
let reloaded = true;
|
|
340
|
+
if (entry) {
|
|
341
|
+
// 解析出的配置与运行态相同、实例在 active:不重建(updateConfig 即 bounce,会连带重启依赖它所提供服务的下游),
|
|
342
|
+
// 只写文档与落盘。error 态的实例靠原样保存重试激活,照旧走 updateConfig
|
|
343
|
+
if (entry.state === 'active' && isDeepStrictEqual(resolved, entry.config))
|
|
344
|
+
reloaded = false;
|
|
345
|
+
else if (!(await app.plugins.updateConfig(instanceId, resolved)))
|
|
346
|
+
return { status: 'refused' };
|
|
347
|
+
store.commitSecrets(writes);
|
|
348
|
+
store.setPluginConfig(instanceId, doc);
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
// 后缀实例由配置段定义:先写文档再登记,免得登记途中的热重载按还没有这一段的文件把它卸掉
|
|
352
|
+
const previous = Object.hasOwn(store.getAll().plugins, instanceId)
|
|
353
|
+
? store.getPluginConfig(instanceId)
|
|
354
|
+
: undefined;
|
|
355
|
+
const undo = store.commitSecrets(writes);
|
|
356
|
+
store.setPluginConfig(instanceId, doc);
|
|
357
|
+
const registered = await app.plugins.register(definition, resolved, instanceId, {
|
|
358
|
+
disabled: store.isPluginDisabled(instanceId),
|
|
124
359
|
});
|
|
125
|
-
|
|
360
|
+
if (!registered) {
|
|
361
|
+
undo();
|
|
362
|
+
if (previous)
|
|
363
|
+
store.setPluginConfig(instanceId, previous);
|
|
364
|
+
else
|
|
365
|
+
store.removePluginConfig(instanceId);
|
|
366
|
+
return { status: 'refused' };
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
// 写进的若是被别处共用的已有键,共用它的实例跟着换上新值(新建的键没有别人引用)
|
|
370
|
+
await reloadSecretSharers(app, store, new Set(writes.keys()), instanceId);
|
|
371
|
+
try {
|
|
372
|
+
await save();
|
|
373
|
+
}
|
|
374
|
+
catch (saveError) {
|
|
375
|
+
return { status: 'applied', reloaded, saveError };
|
|
376
|
+
}
|
|
377
|
+
// 写成之后才记:落盘失败时值只在内存里
|
|
378
|
+
for (const { path, key } of placed)
|
|
379
|
+
app.logger.info(`已把 ${instanceId} 的 ${path} 写进 secrets.yaml(键 ${key})`);
|
|
380
|
+
return { status: 'applied', reloaded };
|
|
381
|
+
};
|
|
382
|
+
host.provide.use(hostConfig, {
|
|
383
|
+
get: store.get,
|
|
384
|
+
getAll: store.getAll,
|
|
385
|
+
// plugins 整块替换会绕过下面 setPluginConfig 的形态检查与孤儿键记账
|
|
386
|
+
set: (key, value) => {
|
|
387
|
+
if (key === 'plugins')
|
|
388
|
+
throw new Error('plugins 不能整块替换:改插件配置用 applyPluginConfig 或 setPluginConfig');
|
|
389
|
+
store.set(key, value);
|
|
390
|
+
},
|
|
391
|
+
getPluginConfig: store.getPluginConfig,
|
|
392
|
+
// 只收文档形态:查得到 schema 时,密钥字段上的明文(例如把 caps.config 原样写回)拒绝,不让原值进文档
|
|
393
|
+
setPluginConfig: (instanceId, next) => {
|
|
394
|
+
assertSafePluginId(instanceId);
|
|
395
|
+
const schema = store.hasSecretStore ? definitionOf(app, instanceId)?.configSchema : undefined;
|
|
396
|
+
const plain = plainSecretPaths(schema, next);
|
|
397
|
+
if (plain.length > 0) {
|
|
398
|
+
throw new Error(`setPluginConfig 只收文档形态:${instanceId} 的 ${plain.join('、')} 是密钥字段,不能写原值;改配置请用 applyPluginConfig`);
|
|
399
|
+
}
|
|
400
|
+
store.setPluginConfig(instanceId, next);
|
|
126
401
|
},
|
|
402
|
+
applyPluginConfig,
|
|
403
|
+
removePluginConfig: store.removePluginConfig,
|
|
404
|
+
isPluginDisabled: store.isPluginDisabled,
|
|
405
|
+
setPluginEnabled: store.setPluginEnabled,
|
|
406
|
+
getServicePreferences: store.getServicePreferences,
|
|
407
|
+
setServicePreference: store.setServicePreference,
|
|
408
|
+
removeServicePreference: store.removeServicePreference,
|
|
409
|
+
trimUnknownFields: opts?.trimUnknownFields ?? true,
|
|
410
|
+
save,
|
|
127
411
|
}, { exclusive: true });
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
412
|
+
// 悬空的密钥引用除了日志,也在诊断里报出来:不走 parseConfig 的第三方插件拿到引用对象不会激活失败,
|
|
413
|
+
// 只看日志的话这种情况没人发现。诊断插件没上线时登记排队,上线后生效
|
|
414
|
+
app.bind({ doctor }).doctor.use.registerCheck({
|
|
415
|
+
id: 'config.secrets',
|
|
416
|
+
category: 'config',
|
|
417
|
+
run: () => {
|
|
418
|
+
const results = [];
|
|
419
|
+
for (const status of app.plugins.getStatus()) {
|
|
420
|
+
const entry = app.plugins.getPlugin(status.instanceId);
|
|
421
|
+
if (!entry)
|
|
422
|
+
continue;
|
|
423
|
+
const { dangling } = store.resolvePluginConfig(status.instanceId, entry.definition.configSchema);
|
|
424
|
+
if (dangling.length === 0)
|
|
425
|
+
continue;
|
|
426
|
+
results.push({
|
|
427
|
+
id: `config.secrets.${status.instanceId}`,
|
|
428
|
+
category: 'config',
|
|
429
|
+
level: 'error',
|
|
430
|
+
message: describeDangling(status.instanceId, dangling),
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
return results.length > 0
|
|
434
|
+
? results
|
|
435
|
+
: { id: 'config.secrets', category: 'config', level: 'ok', message: '配置引用的密钥都在 secrets.yaml 里' };
|
|
436
|
+
},
|
|
134
437
|
});
|
|
438
|
+
applyServicePreferences(host.services.use, store.getAll());
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* 文档里的服务偏好(全局与本插件)对到运行态:`previous` 是改动前的文档(热重载时给),这一份没有、它有的撤回,
|
|
442
|
+
* 没变的不动;不给时(启动)全部应用
|
|
443
|
+
*/
|
|
444
|
+
export function applyServicePreferences(live, next, previous) {
|
|
445
|
+
const scopes = (doc) => doc ? [undefined, ...Object.keys(doc.pluginServicePreferences ?? {}).map(id => ({ for: id }))] : [];
|
|
446
|
+
const prefsOf = (doc, scope) => (doc && preferencesIn(doc, scope)) ?? {};
|
|
447
|
+
for (const scope of scopes(previous)) {
|
|
448
|
+
const kept = prefsOf(next, scope);
|
|
449
|
+
for (const name of Object.keys(prefsOf(previous, scope)))
|
|
450
|
+
if (!Object.hasOwn(kept, name))
|
|
451
|
+
live.unprefer(name, scope);
|
|
452
|
+
}
|
|
453
|
+
for (const scope of scopes(next)) {
|
|
454
|
+
const before = prefsOf(previous, scope);
|
|
455
|
+
for (const [name, contextId] of Object.entries(prefsOf(next, scope))) {
|
|
456
|
+
if (!Object.hasOwn(before, name) || before[name] !== contextId)
|
|
457
|
+
live.prefer(name, contextId, scope);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
135
460
|
}
|
|
136
461
|
// ----- helpers -----
|
|
462
|
+
/** 文档的拷贝:之后对文档的就地修改(禁用名单、服务偏好、插件配置里的子对象)不会改到它 */
|
|
463
|
+
function snapshot(doc) {
|
|
464
|
+
return cloneConfigObject(doc);
|
|
465
|
+
}
|
|
466
|
+
/** 一个范围里的偏好:不给 `for` 是全局偏好,给了是那个插件实例的本插件偏好;还没有时为 undefined */
|
|
467
|
+
function preferencesIn(doc, scope) {
|
|
468
|
+
if (scope?.for === undefined)
|
|
469
|
+
return doc.servicePreferences;
|
|
470
|
+
assertSafePluginId(scope.for);
|
|
471
|
+
const byPlugin = doc.pluginServicePreferences;
|
|
472
|
+
return byPlugin && Object.hasOwn(byPlugin, scope.for) ? byPlugin[scope.for] : undefined;
|
|
473
|
+
}
|
|
474
|
+
/** 密钥文件的键值:危险键不收 */
|
|
475
|
+
function secretMap(input) {
|
|
476
|
+
return new Map(Object.entries(input).filter(([key]) => !isUnsafeConfigKey(key)));
|
|
477
|
+
}
|
|
478
|
+
/** 本插件偏好:插件实例 id → 服务偏好,危险键不收,空段不留 */
|
|
479
|
+
function copyPluginPreferences(input) {
|
|
480
|
+
const out = {};
|
|
481
|
+
if (!input || typeof input !== 'object' || Array.isArray(input))
|
|
482
|
+
return out;
|
|
483
|
+
for (const id of Object.keys(input)) {
|
|
484
|
+
if (isUnsafeConfigKey(id))
|
|
485
|
+
continue;
|
|
486
|
+
const prefs = copyOwnSafeStringDict(input[id]);
|
|
487
|
+
if (Object.keys(prefs).length > 0)
|
|
488
|
+
out[id] = prefs;
|
|
489
|
+
}
|
|
490
|
+
return out;
|
|
491
|
+
}
|
|
137
492
|
function copyOwnSafeStringDict(input) {
|
|
138
493
|
const out = {};
|
|
139
494
|
if (!input || typeof input !== 'object' || Array.isArray(input))
|
|
@@ -148,9 +503,11 @@ function copyOwnSafeStringDict(input) {
|
|
|
148
503
|
return out;
|
|
149
504
|
}
|
|
150
505
|
function normalize(input) {
|
|
506
|
+
// 核心字段的缺省值取自 CORE_CONFIG_SCHEMA,与 WebUI 设置页显示、比较用的默认值同一来源
|
|
507
|
+
const coreDefaults = defaultsFrom(CORE_CONFIG_SCHEMA);
|
|
151
508
|
const merged = {
|
|
152
|
-
name: input.name ??
|
|
153
|
-
logLevel: input.logLevel ??
|
|
509
|
+
name: input.name ?? coreDefaults.name,
|
|
510
|
+
logLevel: input.logLevel ?? coreDefaults.logLevel,
|
|
154
511
|
// 键与值都过闸:JSON 解出的 plugins.__proto__ / 插件配置里的 __proto__ 都不能当自有键留下
|
|
155
512
|
plugins: cloneConfigObject((input.plugins ?? {})),
|
|
156
513
|
disabledPlugins: input.disabledPlugins ?? [],
|
|
@@ -164,6 +521,10 @@ function normalize(input) {
|
|
|
164
521
|
merged.servicePreferences = copyOwnSafeStringDict(value);
|
|
165
522
|
continue;
|
|
166
523
|
}
|
|
524
|
+
if (key === 'pluginServicePreferences') {
|
|
525
|
+
merged.pluginServicePreferences = copyPluginPreferences(value);
|
|
526
|
+
continue;
|
|
527
|
+
}
|
|
167
528
|
merged[key] = value;
|
|
168
529
|
}
|
|
169
530
|
return merged;
|
package/dist/config-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-store.js","sourceRoot":"","sources":["../src/config-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config-store.js","sourceRoot":"","sources":["../src/config-store.ts"],"names":[],"mappings":"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"}
|