apcore-js 0.19.0 → 0.20.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 +110 -9
- package/dist/acl.d.ts +18 -0
- package/dist/acl.d.ts.map +1 -1
- package/dist/acl.js +54 -17
- package/dist/acl.js.map +1 -1
- package/dist/async-task.d.ts +70 -16
- package/dist/async-task.d.ts.map +1 -1
- package/dist/async-task.js +212 -72
- package/dist/async-task.js.map +1 -1
- package/dist/builtin-steps.d.ts +16 -5
- package/dist/builtin-steps.d.ts.map +1 -1
- package/dist/builtin-steps.js +45 -28
- package/dist/builtin-steps.js.map +1 -1
- package/dist/config.d.ts +38 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +163 -33
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +12 -1
- package/dist/context.js.map +1 -1
- package/dist/errors.d.ts +32 -10
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +55 -16
- package/dist/errors.js.map +1 -1
- package/dist/events/circuit-breaker.d.ts +45 -0
- package/dist/events/circuit-breaker.d.ts.map +1 -0
- package/dist/events/circuit-breaker.js +115 -0
- package/dist/events/circuit-breaker.js.map +1 -0
- package/dist/events/emitter.d.ts +22 -1
- package/dist/events/emitter.d.ts.map +1 -1
- package/dist/events/emitter.js +66 -2
- package/dist/events/emitter.js.map +1 -1
- package/dist/events/index.d.ts +4 -2
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +3 -2
- package/dist/events/index.js.map +1 -1
- package/dist/events/subscribers.d.ts +33 -1
- package/dist/events/subscribers.d.ts.map +1 -1
- package/dist/events/subscribers.js +124 -1
- package/dist/events/subscribers.js.map +1 -1
- package/dist/executor.d.ts +10 -2
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +134 -51
- package/dist/executor.js.map +1 -1
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/index.d.ts +35 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -17
- package/dist/index.js.map +1 -1
- package/dist/middleware/base.d.ts +25 -3
- package/dist/middleware/base.d.ts.map +1 -1
- package/dist/middleware/base.js +24 -0
- package/dist/middleware/base.js.map +1 -1
- package/dist/middleware/circuit-breaker.d.ts +54 -0
- package/dist/middleware/circuit-breaker.d.ts.map +1 -0
- package/dist/middleware/circuit-breaker.js +168 -0
- package/dist/middleware/circuit-breaker.js.map +1 -0
- package/dist/middleware/context-namespace.d.ts +30 -0
- package/dist/middleware/context-namespace.d.ts.map +1 -0
- package/dist/middleware/context-namespace.js +38 -0
- package/dist/middleware/context-namespace.js.map +1 -0
- package/dist/middleware/index.d.ts +7 -1
- package/dist/middleware/index.d.ts.map +1 -1
- package/dist/middleware/index.js +4 -1
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/manager.d.ts +11 -4
- package/dist/middleware/manager.d.ts.map +1 -1
- package/dist/middleware/manager.js +25 -9
- package/dist/middleware/manager.js.map +1 -1
- package/dist/middleware/platform-notify.d.ts +8 -4
- package/dist/middleware/platform-notify.d.ts.map +1 -1
- package/dist/middleware/platform-notify.js +11 -7
- package/dist/middleware/platform-notify.js.map +1 -1
- package/dist/middleware/tracing.d.ts +50 -0
- package/dist/middleware/tracing.d.ts.map +1 -0
- package/dist/middleware/tracing.js +89 -0
- package/dist/middleware/tracing.js.map +1 -0
- package/dist/observability/batch-span-processor.d.ts +48 -0
- package/dist/observability/batch-span-processor.d.ts.map +1 -0
- package/dist/observability/batch-span-processor.js +89 -0
- package/dist/observability/batch-span-processor.js.map +1 -0
- package/dist/observability/context-logger.d.ts +54 -1
- package/dist/observability/context-logger.d.ts.map +1 -1
- package/dist/observability/context-logger.js +270 -6
- package/dist/observability/context-logger.js.map +1 -1
- package/dist/observability/error-history.d.ts +36 -7
- package/dist/observability/error-history.d.ts.map +1 -1
- package/dist/observability/error-history.js +169 -50
- package/dist/observability/error-history.js.map +1 -1
- package/dist/observability/index.d.ts +16 -5
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +8 -3
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/metrics.d.ts +14 -1
- package/dist/observability/metrics.d.ts.map +1 -1
- package/dist/observability/metrics.js +23 -2
- package/dist/observability/metrics.js.map +1 -1
- package/dist/observability/prometheus-exporter.d.ts +37 -0
- package/dist/observability/prometheus-exporter.d.ts.map +1 -0
- package/dist/observability/prometheus-exporter.js +135 -0
- package/dist/observability/prometheus-exporter.js.map +1 -0
- package/dist/observability/storage.d.ts +43 -0
- package/dist/observability/storage.d.ts.map +1 -0
- package/dist/observability/storage.js +58 -0
- package/dist/observability/storage.js.map +1 -0
- package/dist/observability/store.d.ts +29 -0
- package/dist/observability/store.d.ts.map +1 -0
- package/dist/observability/store.js +36 -0
- package/dist/observability/store.js.map +1 -0
- package/dist/observability/usage-exporter.d.ts +58 -0
- package/dist/observability/usage-exporter.d.ts.map +1 -0
- package/dist/observability/usage-exporter.js +86 -0
- package/dist/observability/usage-exporter.js.map +1 -0
- package/dist/observability/usage.d.ts +18 -1
- package/dist/observability/usage.d.ts.map +1 -1
- package/dist/observability/usage.js +25 -3
- package/dist/observability/usage.js.map +1 -1
- package/dist/pipeline-config.d.ts +11 -0
- package/dist/pipeline-config.d.ts.map +1 -1
- package/dist/pipeline-config.js +36 -10
- package/dist/pipeline-config.js.map +1 -1
- package/dist/pipeline.d.ts +123 -2
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +249 -50
- package/dist/pipeline.js.map +1 -1
- package/dist/registry/index.d.ts +2 -0
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -0
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/multi-class.d.ts +57 -0
- package/dist/registry/multi-class.d.ts.map +1 -0
- package/dist/registry/multi-class.js +120 -0
- package/dist/registry/multi-class.js.map +1 -0
- package/dist/registry/registry.d.ts +91 -3
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +181 -11
- package/dist/registry/registry.js.map +1 -1
- package/dist/schema/constants.d.ts +9 -0
- package/dist/schema/constants.d.ts.map +1 -0
- package/dist/schema/constants.js +9 -0
- package/dist/schema/constants.js.map +1 -0
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +1 -1
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/loader.d.ts +27 -3
- package/dist/schema/loader.d.ts.map +1 -1
- package/dist/schema/loader.js +137 -32
- package/dist/schema/loader.js.map +1 -1
- package/dist/schema/types.d.ts +4 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js.map +1 -1
- package/dist/schema/validator.d.ts +9 -0
- package/dist/schema/validator.d.ts.map +1 -1
- package/dist/schema/validator.js +153 -4
- package/dist/schema/validator.js.map +1 -1
- package/dist/sys-modules/audit.d.ts +50 -0
- package/dist/sys-modules/audit.d.ts.map +1 -0
- package/dist/sys-modules/audit.js +89 -0
- package/dist/sys-modules/audit.js.map +1 -0
- package/dist/sys-modules/control.d.ts +32 -4
- package/dist/sys-modules/control.d.ts.map +1 -1
- package/dist/sys-modules/control.js +196 -25
- package/dist/sys-modules/control.js.map +1 -1
- package/dist/sys-modules/index.d.ts +7 -2
- package/dist/sys-modules/index.d.ts.map +1 -1
- package/dist/sys-modules/index.js +3 -1
- package/dist/sys-modules/index.js.map +1 -1
- package/dist/sys-modules/overrides.d.ts +58 -0
- package/dist/sys-modules/overrides.d.ts.map +1 -0
- package/dist/sys-modules/overrides.js +106 -0
- package/dist/sys-modules/overrides.js.map +1 -0
- package/dist/sys-modules/registration.d.ts +17 -12
- package/dist/sys-modules/registration.d.ts.map +1 -1
- package/dist/sys-modules/registration.js +115 -23
- package/dist/sys-modules/registration.js.map +1 -1
- package/dist/sys-modules/toggle.d.ts +7 -2
- package/dist/sys-modules/toggle.d.ts.map +1 -1
- package/dist/sys-modules/toggle.js +61 -5
- package/dist/sys-modules/toggle.js.map +1 -1
- package/dist/trace-context.d.ts +47 -9
- package/dist/trace-context.d.ts.map +1 -1
- package/dist/trace-context.js +139 -16
- package/dist/trace-context.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* System control modules -- runtime config update and hot-reload.
|
|
3
3
|
*/
|
|
4
|
-
import
|
|
4
|
+
import * as fs from 'node:fs';
|
|
5
|
+
import * as yaml from 'js-yaml';
|
|
6
|
+
import { ConfigError, InvalidInputError, ModuleNotFoundError, ReloadFailedError, ModuleReloadConflictError } from '../errors.js';
|
|
5
7
|
import { createEvent } from '../events/emitter.js';
|
|
8
|
+
import { buildAuditEntry, extractAuditIdentity } from './audit.js';
|
|
9
|
+
import { matchPattern } from '../utils/pattern.js';
|
|
6
10
|
const RESTRICTED_KEYS = new Set(['sys_modules.enabled']);
|
|
7
11
|
const SENSITIVE_SEGMENTS = ['token', 'secret', 'key', 'password', 'auth', 'credential'];
|
|
8
12
|
/** Match exact segments or underscore-compound segments (api_key, auth_token). */
|
|
@@ -33,12 +37,19 @@ export class UpdateConfigModule {
|
|
|
33
37
|
};
|
|
34
38
|
_config;
|
|
35
39
|
_emitter;
|
|
36
|
-
|
|
40
|
+
_auditStore;
|
|
41
|
+
_overridesPath;
|
|
42
|
+
_overridesStore;
|
|
43
|
+
constructor(config, eventEmitter, options) {
|
|
37
44
|
this._config = config;
|
|
38
45
|
this._emitter = eventEmitter;
|
|
46
|
+
this._auditStore = options?.auditStore ?? null;
|
|
47
|
+
this._overridesPath = options?.overridesPath ?? null;
|
|
48
|
+
this._overridesStore = options?.overridesStore ?? null;
|
|
39
49
|
}
|
|
40
|
-
execute(inputs,
|
|
50
|
+
execute(inputs, context) {
|
|
41
51
|
const { key, value, reason } = this._validateInputs(inputs);
|
|
52
|
+
const ctx = context;
|
|
42
53
|
if (RESTRICTED_KEYS.has(key)) {
|
|
43
54
|
throw new ConfigError(`Configuration key '${key}' cannot be changed at runtime`);
|
|
44
55
|
}
|
|
@@ -47,12 +58,84 @@ export class UpdateConfigModule {
|
|
|
47
58
|
const isSensitive = isSensitiveKey(key);
|
|
48
59
|
const safeOld = isSensitive ? '***' : oldValue;
|
|
49
60
|
const safeNew = isSensitive ? '***' : value;
|
|
50
|
-
this.
|
|
51
|
-
key,
|
|
52
|
-
}
|
|
61
|
+
if (this._overridesPath !== null) {
|
|
62
|
+
this._persistOverride(key, value);
|
|
63
|
+
}
|
|
64
|
+
if (this._overridesStore !== null) {
|
|
65
|
+
this._persistOverrideToStore(key, value);
|
|
66
|
+
}
|
|
67
|
+
const entry = buildAuditEntry('update_config', 'system.control.update_config', ctx, { before: safeOld, after: safeNew });
|
|
68
|
+
if (this._auditStore !== null) {
|
|
69
|
+
this._auditStore.append(entry);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
console.warn(`[apcore:audit] update_config key=${key} actor=${entry.actorId} reason=${reason}`);
|
|
73
|
+
}
|
|
74
|
+
// Issue #45.2: Audit events carry requester identity so subscribers can
|
|
75
|
+
// attribute the change. caller_id defaults to "@external" when absent.
|
|
76
|
+
// When identity is null the field is OMITTED from the payload (not
|
|
77
|
+
// emitted as null).
|
|
78
|
+
const { caller_id, identity } = extractAuditIdentity(ctx);
|
|
79
|
+
const updatedPayload = {
|
|
80
|
+
key, old_value: safeOld, new_value: safeNew, caller_id,
|
|
81
|
+
};
|
|
82
|
+
if (identity !== null)
|
|
83
|
+
updatedPayload['identity'] = identity;
|
|
84
|
+
this._emitter.emit(createEvent('apcore.config.updated', 'system.control.update_config', 'info', updatedPayload));
|
|
53
85
|
console.warn(`[apcore:control] Config updated: key=${key} old_value=${safeOld} new_value=${safeNew} reason=${reason}`);
|
|
54
86
|
return { success: true, key, old_value: safeOld, new_value: safeNew };
|
|
55
87
|
}
|
|
88
|
+
_persistOverrideToStore(key, value) {
|
|
89
|
+
try {
|
|
90
|
+
const store = this._overridesStore;
|
|
91
|
+
const loaded = store.load();
|
|
92
|
+
if (loaded !== null && typeof loaded.then === 'function') {
|
|
93
|
+
// Async store — fire-and-forget the read-modify-write so execute() stays sync.
|
|
94
|
+
loaded
|
|
95
|
+
.then((existing) => {
|
|
96
|
+
existing[key] = value;
|
|
97
|
+
return store.save(existing);
|
|
98
|
+
})
|
|
99
|
+
.catch((err) => {
|
|
100
|
+
console.warn(`[apcore:control] Failed to persist override for key '${key}' via OverridesStore:`, err);
|
|
101
|
+
});
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const existing = loaded;
|
|
105
|
+
existing[key] = value;
|
|
106
|
+
const saveResult = store.save(existing);
|
|
107
|
+
if (saveResult !== undefined && typeof saveResult.then === 'function') {
|
|
108
|
+
saveResult.catch((err) => {
|
|
109
|
+
console.warn(`[apcore:control] Failed to persist override for key '${key}' via OverridesStore:`, err);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
console.warn(`[apcore:control] Failed to persist override for key '${key}' via OverridesStore:`, err);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
_persistOverride(key, value) {
|
|
118
|
+
let overrides = {};
|
|
119
|
+
if (fs.existsSync(this._overridesPath)) {
|
|
120
|
+
try {
|
|
121
|
+
const content = fs.readFileSync(this._overridesPath, 'utf-8');
|
|
122
|
+
const parsed = yaml.load(content);
|
|
123
|
+
if (typeof parsed === 'object' && parsed !== null) {
|
|
124
|
+
overrides = parsed;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// Start fresh if parse fails
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
overrides[key] = value;
|
|
132
|
+
try {
|
|
133
|
+
fs.writeFileSync(this._overridesPath, yaml.dump(overrides), 'utf-8');
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
console.warn(`[apcore:control] Failed to persist override for key '${key}':`, err);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
56
139
|
_validateInputs(inputs) {
|
|
57
140
|
const key = inputs['key'];
|
|
58
141
|
if (typeof key !== 'string' || !key) {
|
|
@@ -73,37 +156,48 @@ export class ReloadModule {
|
|
|
73
156
|
inputSchema = {
|
|
74
157
|
type: 'object',
|
|
75
158
|
properties: {
|
|
76
|
-
module_id: { type: 'string', description: 'ID of the module to reload' },
|
|
159
|
+
module_id: { type: 'string', description: 'ID of the module to reload (mutually exclusive with path_filter)' },
|
|
160
|
+
path_filter: { type: 'string', description: 'Glob pattern to bulk-reload matching modules (mutually exclusive with module_id)' },
|
|
161
|
+
reload_dependents: { type: 'boolean', description: 'When true, also reload modules that depend on matched modules' },
|
|
77
162
|
reason: { type: 'string', description: 'Audit reason for the reload' },
|
|
78
163
|
},
|
|
79
|
-
required: ['
|
|
164
|
+
required: ['reason'],
|
|
80
165
|
};
|
|
81
166
|
outputSchema = {
|
|
82
167
|
type: 'object',
|
|
83
168
|
properties: {
|
|
84
169
|
success: { type: 'boolean', description: 'Whether the reload succeeded' },
|
|
85
|
-
module_id: { type: 'string', description: 'ID of the reloaded module' },
|
|
170
|
+
module_id: { type: 'string', description: 'ID of the reloaded module (single-module mode)' },
|
|
171
|
+
reloaded_modules: { type: 'array', description: 'IDs of reloaded modules (path_filter mode)' },
|
|
86
172
|
previous_version: { type: 'string', description: 'Version before reload' },
|
|
87
173
|
new_version: { type: 'string', description: 'Version after reload' },
|
|
88
174
|
reload_duration_ms: { type: 'number', description: 'Reload duration in milliseconds' },
|
|
89
175
|
},
|
|
90
|
-
required: ['success'
|
|
176
|
+
required: ['success'],
|
|
91
177
|
};
|
|
92
178
|
_registry;
|
|
93
179
|
_emitter;
|
|
94
|
-
|
|
180
|
+
_auditStore;
|
|
181
|
+
constructor(registry, eventEmitter, auditStore) {
|
|
95
182
|
this._registry = registry;
|
|
96
183
|
this._emitter = eventEmitter;
|
|
184
|
+
this._auditStore = auditStore ?? null;
|
|
97
185
|
}
|
|
98
|
-
async execute(inputs,
|
|
99
|
-
const { moduleId, reason } = this._validateInputs(inputs);
|
|
186
|
+
async execute(inputs, context) {
|
|
187
|
+
const { moduleId, pathFilter, reason } = this._validateInputs(inputs);
|
|
188
|
+
const ctx = context;
|
|
189
|
+
if (pathFilter !== undefined) {
|
|
190
|
+
return this._reloadWithPathFilter(pathFilter, reason, ctx);
|
|
191
|
+
}
|
|
192
|
+
return this._reloadSingleModule(moduleId, reason, ctx);
|
|
193
|
+
}
|
|
194
|
+
async _reloadSingleModule(moduleId, reason, ctx) {
|
|
100
195
|
const existing = this._registry.get(moduleId);
|
|
101
196
|
if (existing === null) {
|
|
102
197
|
throw new ModuleNotFoundError(moduleId);
|
|
103
198
|
}
|
|
104
199
|
const existingObj = existing;
|
|
105
200
|
const previousVersion = String(existingObj['version'] ?? '1.0.0');
|
|
106
|
-
// Capture suspend state from old module (if onSuspend is defined)
|
|
107
201
|
let suspendedState = null;
|
|
108
202
|
if (typeof existingObj['onSuspend'] === 'function') {
|
|
109
203
|
try {
|
|
@@ -114,25 +208,19 @@ export class ReloadModule {
|
|
|
114
208
|
}
|
|
115
209
|
}
|
|
116
210
|
const start = performance.now();
|
|
117
|
-
// Use safeUnregister so in-flight executions finish (or time out) before
|
|
118
|
-
// the module disappears. Bare unregister() lets a caller land between
|
|
119
|
-
// unregister and re-discovery and see ModuleNotFoundError.
|
|
120
211
|
await this._registry.safeUnregister(moduleId);
|
|
121
212
|
try {
|
|
122
213
|
await this._registry.discover();
|
|
123
214
|
}
|
|
124
215
|
catch (err) {
|
|
125
|
-
// Restore original module on discover failure
|
|
126
216
|
this._registry.registerInternal(moduleId, existing);
|
|
127
217
|
throw new ReloadFailedError(moduleId, String(err));
|
|
128
218
|
}
|
|
129
219
|
const reloaded = this._registry.get(moduleId);
|
|
130
220
|
if (reloaded === null) {
|
|
131
|
-
// Restore original module if not found after re-discovery
|
|
132
221
|
this._registry.registerInternal(moduleId, existing);
|
|
133
222
|
throw new ReloadFailedError(moduleId, `Module '${moduleId}' was not found after re-discovery`);
|
|
134
223
|
}
|
|
135
|
-
// Resume state on new module (if state was captured and onResume is defined)
|
|
136
224
|
const reloadedObj = reloaded;
|
|
137
225
|
if (suspendedState !== null && typeof reloadedObj['onResume'] === 'function') {
|
|
138
226
|
try {
|
|
@@ -144,10 +232,24 @@ export class ReloadModule {
|
|
|
144
232
|
}
|
|
145
233
|
const elapsedMs = performance.now() - start;
|
|
146
234
|
const newVersion = String(reloadedObj['version'] ?? '1.0.0');
|
|
147
|
-
|
|
235
|
+
const entry = buildAuditEntry('reload_module', moduleId, ctx, { before: previousVersion, after: newVersion });
|
|
236
|
+
if (this._auditStore !== null) {
|
|
237
|
+
this._auditStore.append(entry);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
console.warn(`[apcore:audit] reload_module ${moduleId} actor=${entry.actorId} reason=${reason}`);
|
|
241
|
+
}
|
|
242
|
+
// Issue #45.2: include requester identity in reload audit event payload.
|
|
243
|
+
const { caller_id, identity } = extractAuditIdentity(ctx);
|
|
244
|
+
const reloadedPayload = {
|
|
245
|
+
module_id: moduleId,
|
|
148
246
|
previous_version: previousVersion,
|
|
149
247
|
new_version: newVersion,
|
|
150
|
-
|
|
248
|
+
caller_id,
|
|
249
|
+
};
|
|
250
|
+
if (identity !== null)
|
|
251
|
+
reloadedPayload['identity'] = identity;
|
|
252
|
+
this._emitter.emit(createEvent('apcore.module.reloaded', moduleId, 'info', reloadedPayload));
|
|
151
253
|
console.warn(`[apcore:control] Module reloaded: module_id=${moduleId} previous_version=${previousVersion} new_version=${newVersion} reason=${reason}`);
|
|
152
254
|
return {
|
|
153
255
|
success: true,
|
|
@@ -157,16 +259,85 @@ export class ReloadModule {
|
|
|
157
259
|
reload_duration_ms: elapsedMs,
|
|
158
260
|
};
|
|
159
261
|
}
|
|
262
|
+
async _reloadWithPathFilter(pathFilter, reason, ctx) {
|
|
263
|
+
const allIds = this._registry.list();
|
|
264
|
+
const matchingIds = allIds.filter((id) => matchPattern(pathFilter, id)).sort();
|
|
265
|
+
// Capture existing modules and versions before unregistering
|
|
266
|
+
const existingModules = new Map();
|
|
267
|
+
const previousVersions = new Map();
|
|
268
|
+
for (const id of matchingIds) {
|
|
269
|
+
const mod = this._registry.get(id);
|
|
270
|
+
if (mod !== null) {
|
|
271
|
+
existingModules.set(id, mod);
|
|
272
|
+
previousVersions.set(id, String(mod['version'] ?? '1.0.0'));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// Unregister all matching modules
|
|
276
|
+
for (const id of matchingIds) {
|
|
277
|
+
await this._registry.safeUnregister(id);
|
|
278
|
+
}
|
|
279
|
+
// Re-discover
|
|
280
|
+
try {
|
|
281
|
+
await this._registry.discover();
|
|
282
|
+
}
|
|
283
|
+
catch (err) {
|
|
284
|
+
for (const [id, mod] of existingModules) {
|
|
285
|
+
this._registry.registerInternal(id, mod);
|
|
286
|
+
}
|
|
287
|
+
throw new ReloadFailedError(pathFilter, String(err));
|
|
288
|
+
}
|
|
289
|
+
// Collect successfully reloaded modules
|
|
290
|
+
const reloadedModules = [];
|
|
291
|
+
for (const id of matchingIds) {
|
|
292
|
+
const reloaded = this._registry.get(id);
|
|
293
|
+
if (reloaded === null) {
|
|
294
|
+
const orig = existingModules.get(id);
|
|
295
|
+
if (orig !== undefined) {
|
|
296
|
+
this._registry.registerInternal(id, orig);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
reloadedModules.push(id);
|
|
301
|
+
const entry = buildAuditEntry('reload_module', id, ctx, {
|
|
302
|
+
before: previousVersions.get(id) ?? '1.0.0',
|
|
303
|
+
after: String(reloaded['version'] ?? '1.0.0'),
|
|
304
|
+
});
|
|
305
|
+
if (this._auditStore !== null) {
|
|
306
|
+
this._auditStore.append(entry);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
console.warn(`[apcore:control] Bulk reload: path_filter=${pathFilter} reloaded=${reloadedModules.length} reason=${reason}`);
|
|
311
|
+
return { success: true, reloaded_modules: reloadedModules };
|
|
312
|
+
}
|
|
160
313
|
_validateInputs(inputs) {
|
|
161
314
|
const moduleId = inputs['module_id'];
|
|
162
|
-
|
|
163
|
-
|
|
315
|
+
const pathFilter = inputs['path_filter'];
|
|
316
|
+
if (moduleId !== undefined && pathFilter !== undefined) {
|
|
317
|
+
throw new ModuleReloadConflictError();
|
|
318
|
+
}
|
|
319
|
+
if (moduleId === undefined && pathFilter === undefined) {
|
|
320
|
+
throw new InvalidInputError("either 'module_id' or 'path_filter' is required");
|
|
321
|
+
}
|
|
322
|
+
if (moduleId !== undefined) {
|
|
323
|
+
if (typeof moduleId !== 'string' || !moduleId) {
|
|
324
|
+
throw new InvalidInputError("'module_id' is required and must be a non-empty string");
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
if (pathFilter !== undefined) {
|
|
328
|
+
if (typeof pathFilter !== 'string' || !pathFilter) {
|
|
329
|
+
throw new InvalidInputError("'path_filter' must be a non-empty string");
|
|
330
|
+
}
|
|
164
331
|
}
|
|
165
332
|
const reason = inputs['reason'];
|
|
166
333
|
if (typeof reason !== 'string' || !reason) {
|
|
167
334
|
throw new InvalidInputError("'reason' is required and must be a non-empty string");
|
|
168
335
|
}
|
|
169
|
-
return {
|
|
336
|
+
return {
|
|
337
|
+
moduleId: moduleId,
|
|
338
|
+
pathFilter: pathFilter,
|
|
339
|
+
reason,
|
|
340
|
+
};
|
|
170
341
|
}
|
|
171
342
|
}
|
|
172
343
|
//# sourceMappingURL=control.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/sys-modules/control.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/sys-modules/control.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,12 @@ export { ToggleState, ToggleFeatureModule, DEFAULT_TOGGLE_STATE, isModuleDisable
|
|
|
2
2
|
export { HealthSummaryModule, HealthModule, classifyHealthStatus } from './health.js';
|
|
3
3
|
export { ManifestModule, ManifestFullModule } from './manifest.js';
|
|
4
4
|
export { UpdateConfigModule, ReloadModule } from './control.js';
|
|
5
|
+
export type { UpdateConfigOptions } from './control.js';
|
|
5
6
|
export { UsageSummaryModule, UsageModule } from './usage.js';
|
|
6
|
-
export { registerSysModules, registerSubscriberType, unregisterSubscriberType, resetSubscriberRegistry } from './registration.js';
|
|
7
|
-
export type { SysModulesContext } from './registration.js';
|
|
7
|
+
export { registerSysModules, registerSubscriberType, unregisterSubscriberType, resetSubscriberRegistry, createSubscriberFromConfig } from './registration.js';
|
|
8
|
+
export type { SysModulesContext, RegisterSysModulesOptions } from './registration.js';
|
|
9
|
+
export { InMemoryAuditStore, buildAuditEntry, extractAuditIdentity } from './audit.js';
|
|
10
|
+
export type { AuditEntry, AuditStore, AuditFilter, AuditAction } from './audit.js';
|
|
11
|
+
export { FileOverridesStore, InMemoryOverridesStore } from './overrides.js';
|
|
12
|
+
export type { OverridesStore } from './overrides.js';
|
|
8
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sys-modules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC5H,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sys-modules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC5H,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAChE,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC9J,YAAY,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvF,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -3,5 +3,7 @@ export { HealthSummaryModule, HealthModule, classifyHealthStatus } from './healt
|
|
|
3
3
|
export { ManifestModule, ManifestFullModule } from './manifest.js';
|
|
4
4
|
export { UpdateConfigModule, ReloadModule } from './control.js';
|
|
5
5
|
export { UsageSummaryModule, UsageModule } from './usage.js';
|
|
6
|
-
export { registerSysModules, registerSubscriberType, unregisterSubscriberType, resetSubscriberRegistry } from './registration.js';
|
|
6
|
+
export { registerSysModules, registerSubscriberType, unregisterSubscriberType, resetSubscriberRegistry, createSubscriberFromConfig } from './registration.js';
|
|
7
|
+
export { InMemoryAuditStore, buildAuditEntry, extractAuditIdentity } from './audit.js';
|
|
8
|
+
export { FileOverridesStore, InMemoryOverridesStore } from './overrides.js';
|
|
7
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sys-modules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC5H,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sys-modules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC5H,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAE9J,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvF,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent runtime override store (Issue #45.1).
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the Python `_load_overrides` / `_write_overrides` flow and the
|
|
5
|
+
* Rust `load_overrides` / `write_override` helpers, but exposed as a
|
|
6
|
+
* pluggable interface so embeddings (tests, multi-tenant deployments,
|
|
7
|
+
* remote config services) can swap the storage layer without forking
|
|
8
|
+
* `registerSysModules` or `UpdateConfigModule`.
|
|
9
|
+
*
|
|
10
|
+
* Each override is a flat `key → value` mapping where `key` is the
|
|
11
|
+
* dot-path config key (e.g. `"app.timeout"` or `"toggle.module.id"`).
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Pluggable persistence for runtime config & toggle overrides.
|
|
15
|
+
*
|
|
16
|
+
* Implementations must be safe to call from multiple call sites in sequence;
|
|
17
|
+
* the `FileOverridesStore` reference implementation uses an atomic
|
|
18
|
+
* tempfile + rename to prevent partial-write corruption.
|
|
19
|
+
*/
|
|
20
|
+
export interface OverridesStore {
|
|
21
|
+
/**
|
|
22
|
+
* Load all overrides from the backing store. Returns `{}` if empty/missing.
|
|
23
|
+
*
|
|
24
|
+
* Implementations may return synchronously or asynchronously — async stores
|
|
25
|
+
* (e.g. remote config services) cannot be applied at startup by the
|
|
26
|
+
* synchronous `registerSysModules`, so prefer sync stores there or
|
|
27
|
+
* pre-load and pass results into `Config` directly.
|
|
28
|
+
*/
|
|
29
|
+
load(): Promise<Record<string, unknown>> | Record<string, unknown>;
|
|
30
|
+
/** Replace the entire override set with the given mapping. */
|
|
31
|
+
save(overrides: Record<string, unknown>): Promise<void> | void;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* In-memory store, intended primarily for tests and embeddings that do not
|
|
35
|
+
* require disk persistence.
|
|
36
|
+
*/
|
|
37
|
+
export declare class InMemoryOverridesStore implements OverridesStore {
|
|
38
|
+
private _data;
|
|
39
|
+
constructor(initial?: Record<string, unknown>);
|
|
40
|
+
load(): Record<string, unknown>;
|
|
41
|
+
save(overrides: Record<string, unknown>): void;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* YAML-file-backed override store with atomic write semantics.
|
|
45
|
+
*
|
|
46
|
+
* Each `save()` writes to a sibling tempfile and `fs.renameSync`-es it into
|
|
47
|
+
* place so an interrupted process cannot leave a half-written overrides file
|
|
48
|
+
* behind (matches Python's `os.replace` and Rust's `std::fs::rename` flow).
|
|
49
|
+
*/
|
|
50
|
+
export declare class FileOverridesStore implements OverridesStore {
|
|
51
|
+
private readonly _path;
|
|
52
|
+
constructor(filePath: string);
|
|
53
|
+
/** Path of the underlying YAML file. */
|
|
54
|
+
get path(): string;
|
|
55
|
+
load(): Record<string, unknown>;
|
|
56
|
+
save(overrides: Record<string, unknown>): void;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=overrides.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../../src/sys-modules/overrides.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;;OAOG;IACH,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnE,8DAA8D;IAC9D,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAChE;AAED;;;GAGG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,KAAK,CAA0B;gBAE3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI7C,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI/B,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAG/C;AAED;;;;;;GAMG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,QAAQ,EAAE,MAAM;IAI5B,wCAAwC;IACxC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAuB/B,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CA8B/C"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent runtime override store (Issue #45.1).
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the Python `_load_overrides` / `_write_overrides` flow and the
|
|
5
|
+
* Rust `load_overrides` / `write_override` helpers, but exposed as a
|
|
6
|
+
* pluggable interface so embeddings (tests, multi-tenant deployments,
|
|
7
|
+
* remote config services) can swap the storage layer without forking
|
|
8
|
+
* `registerSysModules` or `UpdateConfigModule`.
|
|
9
|
+
*
|
|
10
|
+
* Each override is a flat `key → value` mapping where `key` is the
|
|
11
|
+
* dot-path config key (e.g. `"app.timeout"` or `"toggle.module.id"`).
|
|
12
|
+
*/
|
|
13
|
+
import * as fs from 'node:fs';
|
|
14
|
+
import * as path from 'node:path';
|
|
15
|
+
import * as yaml from 'js-yaml';
|
|
16
|
+
/**
|
|
17
|
+
* In-memory store, intended primarily for tests and embeddings that do not
|
|
18
|
+
* require disk persistence.
|
|
19
|
+
*/
|
|
20
|
+
export class InMemoryOverridesStore {
|
|
21
|
+
_data;
|
|
22
|
+
constructor(initial) {
|
|
23
|
+
this._data = initial !== undefined ? { ...initial } : {};
|
|
24
|
+
}
|
|
25
|
+
load() {
|
|
26
|
+
return { ...this._data };
|
|
27
|
+
}
|
|
28
|
+
save(overrides) {
|
|
29
|
+
this._data = { ...overrides };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* YAML-file-backed override store with atomic write semantics.
|
|
34
|
+
*
|
|
35
|
+
* Each `save()` writes to a sibling tempfile and `fs.renameSync`-es it into
|
|
36
|
+
* place so an interrupted process cannot leave a half-written overrides file
|
|
37
|
+
* behind (matches Python's `os.replace` and Rust's `std::fs::rename` flow).
|
|
38
|
+
*/
|
|
39
|
+
export class FileOverridesStore {
|
|
40
|
+
_path;
|
|
41
|
+
constructor(filePath) {
|
|
42
|
+
this._path = filePath;
|
|
43
|
+
}
|
|
44
|
+
/** Path of the underlying YAML file. */
|
|
45
|
+
get path() {
|
|
46
|
+
return this._path;
|
|
47
|
+
}
|
|
48
|
+
load() {
|
|
49
|
+
if (!fs.existsSync(this._path))
|
|
50
|
+
return {};
|
|
51
|
+
let raw;
|
|
52
|
+
try {
|
|
53
|
+
raw = fs.readFileSync(this._path, 'utf-8');
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
console.warn(`[apcore:overrides] Failed to read overrides file '${this._path}':`, err);
|
|
57
|
+
return {};
|
|
58
|
+
}
|
|
59
|
+
if (raw.length === 0)
|
|
60
|
+
return {};
|
|
61
|
+
try {
|
|
62
|
+
const parsed = yaml.load(raw);
|
|
63
|
+
if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
|
|
64
|
+
return { ...parsed };
|
|
65
|
+
}
|
|
66
|
+
console.warn(`[apcore:overrides] Overrides file '${this._path}' root is not a mapping; skipping`);
|
|
67
|
+
return {};
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
console.warn(`[apcore:overrides] Overrides file '${this._path}' is not valid YAML; skipping`, err);
|
|
71
|
+
return {};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
save(overrides) {
|
|
75
|
+
const dir = path.dirname(this._path) || '.';
|
|
76
|
+
try {
|
|
77
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
console.error(`[apcore:overrides] Failed to create parent directory '${dir}':`, err);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// Sort keys for stable on-disk layout.
|
|
84
|
+
const ordered = {};
|
|
85
|
+
for (const key of Object.keys(overrides).sort()) {
|
|
86
|
+
ordered[key] = overrides[key];
|
|
87
|
+
}
|
|
88
|
+
const yamlText = yaml.dump(ordered, { sortKeys: true });
|
|
89
|
+
const base = path.basename(this._path);
|
|
90
|
+
const tmp = path.join(dir, `.${base}.${process.pid}.${Date.now()}.tmp`);
|
|
91
|
+
try {
|
|
92
|
+
fs.writeFileSync(tmp, yamlText, 'utf-8');
|
|
93
|
+
fs.renameSync(tmp, this._path);
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
console.error(`[apcore:overrides] Failed to write overrides file '${this._path}':`, err);
|
|
97
|
+
try {
|
|
98
|
+
fs.unlinkSync(tmp);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
/* ignore */
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=overrides.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/sys-modules/overrides.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAwBhC;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IACzB,KAAK,CAA0B;IAEvC,YAAY,OAAiC;QAC3C,IAAI,CAAC,KAAK,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,CAAC;IAED,IAAI;QACF,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,SAAkC;QACrC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;IAChC,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,OAAO,kBAAkB;IACZ,KAAK,CAAS;IAE/B,YAAY,QAAgB;QAC1B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;IACxB,CAAC;IAED,wCAAwC;IACxC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAI;QACF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC1C,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,qDAAqD,IAAI,CAAC,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC;YACvF,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5E,OAAO,EAAE,GAAI,MAAkC,EAAE,CAAC;YACpD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,sCAAsC,IAAI,CAAC,KAAK,mCAAmC,CAAC,CAAC;YAClG,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,sCAAsC,IAAI,CAAC,KAAK,+BAA+B,EAAE,GAAG,CAAC,CAAC;YACnG,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,IAAI,CAAC,SAAkC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;QAC5C,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,yDAAyD,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;YACrF,OAAO;QACT,CAAC;QAED,uCAAuC;QACvC,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAExD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxE,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACzC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,sDAAsD,IAAI,CAAC,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC;YACzF,IAAI,CAAC;gBACH,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -5,6 +5,8 @@ import type { Registry } from '../registry/registry.js';
|
|
|
5
5
|
import type { Executor } from '../executor.js';
|
|
6
6
|
import type { Config } from '../config.js';
|
|
7
7
|
import type { MetricsCollector } from '../observability/metrics.js';
|
|
8
|
+
import type { AuditStore } from './audit.js';
|
|
9
|
+
import type { OverridesStore } from './overrides.js';
|
|
8
10
|
import { ErrorHistory } from '../observability/error-history.js';
|
|
9
11
|
import { ErrorHistoryMiddleware } from '../middleware/error-history.js';
|
|
10
12
|
import { UsageCollector, UsageMiddleware } from '../observability/usage.js';
|
|
@@ -12,21 +14,17 @@ import type { EventSubscriber } from '../events/emitter.js';
|
|
|
12
14
|
import { EventEmitter } from '../events/emitter.js';
|
|
13
15
|
import { PlatformNotifyMiddleware } from '../middleware/platform-notify.js';
|
|
14
16
|
type SubscriberFactory = (config: Record<string, unknown>) => EventSubscriber;
|
|
15
|
-
/**
|
|
16
|
-
* @deprecated Internal use only. This function is not part of the public API
|
|
17
|
-
* and will be removed in a future release. Use the built-in webhook and a2a
|
|
18
|
-
* subscriber types, or contact the maintainers to add a new built-in type.
|
|
19
|
-
*/
|
|
17
|
+
/** Register a custom subscriber type for config-driven instantiation. */
|
|
20
18
|
export declare function registerSubscriberType(typeName: string, factory: SubscriberFactory): void;
|
|
21
|
-
/**
|
|
22
|
-
* @deprecated Internal use only. See {@link registerSubscriberType}.
|
|
23
|
-
*/
|
|
19
|
+
/** Remove a previously registered subscriber type. */
|
|
24
20
|
export declare function unregisterSubscriberType(typeName: string): void;
|
|
21
|
+
/** Reset the registry to built-in types only. Intended for test teardown. */
|
|
22
|
+
export declare function resetSubscriberRegistry(): void;
|
|
25
23
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
24
|
+
* Instantiate a single subscriber from a config object.
|
|
25
|
+
* The `type` field selects the factory; all other fields are passed as config.
|
|
28
26
|
*/
|
|
29
|
-
export declare function
|
|
27
|
+
export declare function createSubscriberFromConfig(config: Record<string, unknown>): EventSubscriber;
|
|
30
28
|
/**
|
|
31
29
|
* Instantiate subscribers from config and subscribe them to the emitter.
|
|
32
30
|
*/
|
|
@@ -39,9 +37,16 @@ export interface SysModulesContext {
|
|
|
39
37
|
eventEmitter?: EventEmitter;
|
|
40
38
|
platformNotifyMiddleware?: PlatformNotifyMiddleware;
|
|
41
39
|
}
|
|
40
|
+
export interface RegisterSysModulesOptions {
|
|
41
|
+
failOnError?: boolean;
|
|
42
|
+
overridesPath?: string;
|
|
43
|
+
/** Pluggable persistent override store (Issue #45.1). */
|
|
44
|
+
overridesStore?: OverridesStore;
|
|
45
|
+
auditStore?: AuditStore;
|
|
46
|
+
}
|
|
42
47
|
/**
|
|
43
48
|
* Auto-register all sys.* modules and middleware based on config.
|
|
44
49
|
*/
|
|
45
|
-
export declare function registerSysModules(registry: Registry, executor: Executor, config: Config, metricsCollector?: MetricsCollector | null): SysModulesContext;
|
|
50
|
+
export declare function registerSysModules(registry: Registry, executor: Executor, config: Config, metricsCollector?: MetricsCollector | null, options?: RegisterSysModulesOptions): SysModulesContext;
|
|
46
51
|
export {};
|
|
47
52
|
//# sourceMappingURL=registration.d.ts.map
|