apcore-js 0.18.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.
Files changed (241) hide show
  1. package/README.md +112 -9
  2. package/dist/acl-handlers.d.ts +14 -0
  3. package/dist/acl-handlers.d.ts.map +1 -1
  4. package/dist/acl-handlers.js +37 -4
  5. package/dist/acl-handlers.js.map +1 -1
  6. package/dist/acl.d.ts +22 -1
  7. package/dist/acl.d.ts.map +1 -1
  8. package/dist/acl.js +90 -34
  9. package/dist/acl.js.map +1 -1
  10. package/dist/async-task.d.ts +70 -16
  11. package/dist/async-task.d.ts.map +1 -1
  12. package/dist/async-task.js +212 -72
  13. package/dist/async-task.js.map +1 -1
  14. package/dist/bindings.d.ts.map +1 -1
  15. package/dist/bindings.js +113 -11
  16. package/dist/bindings.js.map +1 -1
  17. package/dist/builtin-steps.d.ts +33 -8
  18. package/dist/builtin-steps.d.ts.map +1 -1
  19. package/dist/builtin-steps.js +119 -47
  20. package/dist/builtin-steps.js.map +1 -1
  21. package/dist/client.d.ts +1 -0
  22. package/dist/client.d.ts.map +1 -1
  23. package/dist/client.js.map +1 -1
  24. package/dist/config.d.ts +38 -0
  25. package/dist/config.d.ts.map +1 -1
  26. package/dist/config.js +163 -33
  27. package/dist/config.js.map +1 -1
  28. package/dist/context.d.ts +34 -7
  29. package/dist/context.d.ts.map +1 -1
  30. package/dist/context.js +108 -40
  31. package/dist/context.js.map +1 -1
  32. package/dist/decorator.d.ts +3 -0
  33. package/dist/decorator.d.ts.map +1 -1
  34. package/dist/decorator.js +3 -0
  35. package/dist/decorator.js.map +1 -1
  36. package/dist/errors.d.ts +88 -2
  37. package/dist/errors.d.ts.map +1 -1
  38. package/dist/errors.js +231 -56
  39. package/dist/errors.js.map +1 -1
  40. package/dist/events/circuit-breaker.d.ts +45 -0
  41. package/dist/events/circuit-breaker.d.ts.map +1 -0
  42. package/dist/events/circuit-breaker.js +115 -0
  43. package/dist/events/circuit-breaker.js.map +1 -0
  44. package/dist/events/emitter.d.ts +24 -1
  45. package/dist/events/emitter.d.ts.map +1 -1
  46. package/dist/events/emitter.js +86 -12
  47. package/dist/events/emitter.js.map +1 -1
  48. package/dist/events/index.d.ts +4 -2
  49. package/dist/events/index.d.ts.map +1 -1
  50. package/dist/events/index.js +3 -2
  51. package/dist/events/index.js.map +1 -1
  52. package/dist/events/subscribers.d.ts +33 -1
  53. package/dist/events/subscribers.d.ts.map +1 -1
  54. package/dist/events/subscribers.js +124 -1
  55. package/dist/events/subscribers.js.map +1 -1
  56. package/dist/executor.d.ts +14 -3
  57. package/dist/executor.d.ts.map +1 -1
  58. package/dist/executor.js +155 -48
  59. package/dist/executor.js.map +1 -1
  60. package/dist/generated/version.d.ts +1 -1
  61. package/dist/generated/version.js +1 -1
  62. package/dist/index.d.ts +47 -25
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +35 -18
  65. package/dist/index.js.map +1 -1
  66. package/dist/middleware/base.d.ts +25 -3
  67. package/dist/middleware/base.d.ts.map +1 -1
  68. package/dist/middleware/base.js +24 -0
  69. package/dist/middleware/base.js.map +1 -1
  70. package/dist/middleware/circuit-breaker.d.ts +54 -0
  71. package/dist/middleware/circuit-breaker.d.ts.map +1 -0
  72. package/dist/middleware/circuit-breaker.js +168 -0
  73. package/dist/middleware/circuit-breaker.js.map +1 -0
  74. package/dist/middleware/context-namespace.d.ts +30 -0
  75. package/dist/middleware/context-namespace.d.ts.map +1 -0
  76. package/dist/middleware/context-namespace.js +38 -0
  77. package/dist/middleware/context-namespace.js.map +1 -0
  78. package/dist/middleware/index.d.ts +8 -2
  79. package/dist/middleware/index.d.ts.map +1 -1
  80. package/dist/middleware/index.js +5 -2
  81. package/dist/middleware/index.js.map +1 -1
  82. package/dist/middleware/logging.d.ts +6 -0
  83. package/dist/middleware/logging.d.ts.map +1 -1
  84. package/dist/middleware/logging.js +13 -3
  85. package/dist/middleware/logging.js.map +1 -1
  86. package/dist/middleware/manager.d.ts +11 -4
  87. package/dist/middleware/manager.d.ts.map +1 -1
  88. package/dist/middleware/manager.js +26 -9
  89. package/dist/middleware/manager.js.map +1 -1
  90. package/dist/middleware/platform-notify.d.ts +8 -4
  91. package/dist/middleware/platform-notify.d.ts.map +1 -1
  92. package/dist/middleware/platform-notify.js +15 -7
  93. package/dist/middleware/platform-notify.js.map +1 -1
  94. package/dist/middleware/retry.d.ts +16 -7
  95. package/dist/middleware/retry.d.ts.map +1 -1
  96. package/dist/middleware/retry.js +21 -15
  97. package/dist/middleware/retry.js.map +1 -1
  98. package/dist/middleware/tracing.d.ts +50 -0
  99. package/dist/middleware/tracing.d.ts.map +1 -0
  100. package/dist/middleware/tracing.js +89 -0
  101. package/dist/middleware/tracing.js.map +1 -0
  102. package/dist/observability/batch-span-processor.d.ts +48 -0
  103. package/dist/observability/batch-span-processor.d.ts.map +1 -0
  104. package/dist/observability/batch-span-processor.js +89 -0
  105. package/dist/observability/batch-span-processor.js.map +1 -0
  106. package/dist/observability/context-logger.d.ts +54 -1
  107. package/dist/observability/context-logger.d.ts.map +1 -1
  108. package/dist/observability/context-logger.js +287 -10
  109. package/dist/observability/context-logger.js.map +1 -1
  110. package/dist/observability/error-history.d.ts +36 -7
  111. package/dist/observability/error-history.d.ts.map +1 -1
  112. package/dist/observability/error-history.js +169 -50
  113. package/dist/observability/error-history.js.map +1 -1
  114. package/dist/observability/index.d.ts +16 -5
  115. package/dist/observability/index.d.ts.map +1 -1
  116. package/dist/observability/index.js +8 -3
  117. package/dist/observability/index.js.map +1 -1
  118. package/dist/observability/metrics-utils.d.ts.map +1 -1
  119. package/dist/observability/metrics-utils.js +3 -5
  120. package/dist/observability/metrics-utils.js.map +1 -1
  121. package/dist/observability/metrics.d.ts +15 -1
  122. package/dist/observability/metrics.d.ts.map +1 -1
  123. package/dist/observability/metrics.js +37 -3
  124. package/dist/observability/metrics.js.map +1 -1
  125. package/dist/observability/prometheus-exporter.d.ts +37 -0
  126. package/dist/observability/prometheus-exporter.d.ts.map +1 -0
  127. package/dist/observability/prometheus-exporter.js +135 -0
  128. package/dist/observability/prometheus-exporter.js.map +1 -0
  129. package/dist/observability/storage.d.ts +43 -0
  130. package/dist/observability/storage.d.ts.map +1 -0
  131. package/dist/observability/storage.js +58 -0
  132. package/dist/observability/storage.js.map +1 -0
  133. package/dist/observability/store.d.ts +29 -0
  134. package/dist/observability/store.d.ts.map +1 -0
  135. package/dist/observability/store.js +36 -0
  136. package/dist/observability/store.js.map +1 -0
  137. package/dist/observability/tracing.d.ts +2 -0
  138. package/dist/observability/tracing.d.ts.map +1 -1
  139. package/dist/observability/tracing.js +12 -2
  140. package/dist/observability/tracing.js.map +1 -1
  141. package/dist/observability/usage-exporter.d.ts +58 -0
  142. package/dist/observability/usage-exporter.d.ts.map +1 -0
  143. package/dist/observability/usage-exporter.js +86 -0
  144. package/dist/observability/usage-exporter.js.map +1 -0
  145. package/dist/observability/usage.d.ts +18 -1
  146. package/dist/observability/usage.d.ts.map +1 -1
  147. package/dist/observability/usage.js +35 -4
  148. package/dist/observability/usage.js.map +1 -1
  149. package/dist/pipeline-config.d.ts +24 -7
  150. package/dist/pipeline-config.d.ts.map +1 -1
  151. package/dist/pipeline-config.js +113 -19
  152. package/dist/pipeline-config.js.map +1 -1
  153. package/dist/pipeline.d.ts +123 -2
  154. package/dist/pipeline.d.ts.map +1 -1
  155. package/dist/pipeline.js +249 -50
  156. package/dist/pipeline.js.map +1 -1
  157. package/dist/registry/conflicts.d.ts +2 -2
  158. package/dist/registry/conflicts.d.ts.map +1 -1
  159. package/dist/registry/conflicts.js +10 -11
  160. package/dist/registry/conflicts.js.map +1 -1
  161. package/dist/registry/dependencies.d.ts +1 -1
  162. package/dist/registry/dependencies.d.ts.map +1 -1
  163. package/dist/registry/dependencies.js +69 -20
  164. package/dist/registry/dependencies.js.map +1 -1
  165. package/dist/registry/index.d.ts +2 -0
  166. package/dist/registry/index.d.ts.map +1 -1
  167. package/dist/registry/index.js +1 -0
  168. package/dist/registry/index.js.map +1 -1
  169. package/dist/registry/multi-class.d.ts +57 -0
  170. package/dist/registry/multi-class.d.ts.map +1 -0
  171. package/dist/registry/multi-class.js +120 -0
  172. package/dist/registry/multi-class.js.map +1 -0
  173. package/dist/registry/registry.d.ts +99 -4
  174. package/dist/registry/registry.d.ts.map +1 -1
  175. package/dist/registry/registry.js +291 -33
  176. package/dist/registry/registry.js.map +1 -1
  177. package/dist/registry/scanner.d.ts.map +1 -1
  178. package/dist/registry/scanner.js +6 -0
  179. package/dist/registry/scanner.js.map +1 -1
  180. package/dist/registry/version.d.ts +1 -0
  181. package/dist/registry/version.d.ts.map +1 -1
  182. package/dist/registry/version.js +33 -4
  183. package/dist/registry/version.js.map +1 -1
  184. package/dist/schema/constants.d.ts +9 -0
  185. package/dist/schema/constants.d.ts.map +1 -0
  186. package/dist/schema/constants.js +9 -0
  187. package/dist/schema/constants.js.map +1 -0
  188. package/dist/schema/extractor.d.ts +69 -0
  189. package/dist/schema/extractor.d.ts.map +1 -0
  190. package/dist/schema/extractor.js +142 -0
  191. package/dist/schema/extractor.js.map +1 -0
  192. package/dist/schema/index.d.ts +3 -1
  193. package/dist/schema/index.d.ts.map +1 -1
  194. package/dist/schema/index.js +2 -1
  195. package/dist/schema/index.js.map +1 -1
  196. package/dist/schema/loader.d.ts +27 -3
  197. package/dist/schema/loader.d.ts.map +1 -1
  198. package/dist/schema/loader.js +137 -32
  199. package/dist/schema/loader.js.map +1 -1
  200. package/dist/schema/ref-resolver.d.ts.map +1 -1
  201. package/dist/schema/ref-resolver.js +10 -1
  202. package/dist/schema/ref-resolver.js.map +1 -1
  203. package/dist/schema/types.d.ts +4 -0
  204. package/dist/schema/types.d.ts.map +1 -1
  205. package/dist/schema/types.js.map +1 -1
  206. package/dist/schema/validator.d.ts +9 -0
  207. package/dist/schema/validator.d.ts.map +1 -1
  208. package/dist/schema/validator.js +153 -4
  209. package/dist/schema/validator.js.map +1 -1
  210. package/dist/sys-modules/audit.d.ts +50 -0
  211. package/dist/sys-modules/audit.d.ts.map +1 -0
  212. package/dist/sys-modules/audit.js +89 -0
  213. package/dist/sys-modules/audit.js.map +1 -0
  214. package/dist/sys-modules/control.d.ts +32 -4
  215. package/dist/sys-modules/control.d.ts.map +1 -1
  216. package/dist/sys-modules/control.js +197 -23
  217. package/dist/sys-modules/control.js.map +1 -1
  218. package/dist/sys-modules/index.d.ts +7 -2
  219. package/dist/sys-modules/index.d.ts.map +1 -1
  220. package/dist/sys-modules/index.js +3 -1
  221. package/dist/sys-modules/index.js.map +1 -1
  222. package/dist/sys-modules/overrides.d.ts +58 -0
  223. package/dist/sys-modules/overrides.d.ts.map +1 -0
  224. package/dist/sys-modules/overrides.js +106 -0
  225. package/dist/sys-modules/overrides.js.map +1 -0
  226. package/dist/sys-modules/registration.d.ts +18 -1
  227. package/dist/sys-modules/registration.d.ts.map +1 -1
  228. package/dist/sys-modules/registration.js +115 -11
  229. package/dist/sys-modules/registration.js.map +1 -1
  230. package/dist/sys-modules/toggle.d.ts +7 -2
  231. package/dist/sys-modules/toggle.d.ts.map +1 -1
  232. package/dist/sys-modules/toggle.js +61 -5
  233. package/dist/sys-modules/toggle.js.map +1 -1
  234. package/dist/trace-context.d.ts +47 -9
  235. package/dist/trace-context.d.ts.map +1 -1
  236. package/dist/trace-context.js +139 -16
  237. package/dist/trace-context.js.map +1 -1
  238. package/dist/utils/index.d.ts.map +1 -1
  239. package/dist/utils/index.js +2 -1
  240. package/dist/utils/index.js.map +1 -1
  241. 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 { ConfigError, InvalidInputError, ModuleNotFoundError, ReloadFailedError } from '../errors.js';
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
- constructor(config, eventEmitter) {
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, _context) {
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._emitter.emit(createEvent('apcore.config.updated', 'system.control.update_config', 'info', {
51
- key, old_value: safeOld, new_value: safeNew,
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: ['module_id', 'reason'],
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', 'module_id', 'previous_version', 'new_version', 'reload_duration_ms'],
176
+ required: ['success'],
91
177
  };
92
178
  _registry;
93
179
  _emitter;
94
- constructor(registry, eventEmitter) {
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, _context) {
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,22 +208,19 @@ export class ReloadModule {
114
208
  }
115
209
  }
116
210
  const start = performance.now();
117
- this._registry.unregister(moduleId);
211
+ await this._registry.safeUnregister(moduleId);
118
212
  try {
119
213
  await this._registry.discover();
120
214
  }
121
215
  catch (err) {
122
- // Restore original module on discover failure
123
216
  this._registry.registerInternal(moduleId, existing);
124
217
  throw new ReloadFailedError(moduleId, String(err));
125
218
  }
126
219
  const reloaded = this._registry.get(moduleId);
127
220
  if (reloaded === null) {
128
- // Restore original module if not found after re-discovery
129
221
  this._registry.registerInternal(moduleId, existing);
130
222
  throw new ReloadFailedError(moduleId, `Module '${moduleId}' was not found after re-discovery`);
131
223
  }
132
- // Resume state on new module (if state was captured and onResume is defined)
133
224
  const reloadedObj = reloaded;
134
225
  if (suspendedState !== null && typeof reloadedObj['onResume'] === 'function') {
135
226
  try {
@@ -141,10 +232,24 @@ export class ReloadModule {
141
232
  }
142
233
  const elapsedMs = performance.now() - start;
143
234
  const newVersion = String(reloadedObj['version'] ?? '1.0.0');
144
- this._emitter.emit(createEvent('apcore.module.reloaded', moduleId, 'info', {
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,
145
246
  previous_version: previousVersion,
146
247
  new_version: newVersion,
147
- }));
248
+ caller_id,
249
+ };
250
+ if (identity !== null)
251
+ reloadedPayload['identity'] = identity;
252
+ this._emitter.emit(createEvent('apcore.module.reloaded', moduleId, 'info', reloadedPayload));
148
253
  console.warn(`[apcore:control] Module reloaded: module_id=${moduleId} previous_version=${previousVersion} new_version=${newVersion} reason=${reason}`);
149
254
  return {
150
255
  success: true,
@@ -154,16 +259,85 @@ export class ReloadModule {
154
259
  reload_duration_ms: elapsedMs,
155
260
  };
156
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
+ }
157
313
  _validateInputs(inputs) {
158
314
  const moduleId = inputs['module_id'];
159
- if (typeof moduleId !== 'string' || !moduleId) {
160
- throw new InvalidInputError("'module_id' is required and must be a non-empty string");
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
+ }
161
331
  }
162
332
  const reason = inputs['reason'];
163
333
  if (typeof reason !== 'string' || !reason) {
164
334
  throw new InvalidInputError("'reason' is required and must be a non-empty string");
165
335
  }
166
- return { moduleId, reason };
336
+ return {
337
+ moduleId: moduleId,
338
+ pathFilter: pathFilter,
339
+ reason,
340
+ };
167
341
  }
168
342
  }
169
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;AAClI,YAAY,EAAE,iBAAiB,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;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.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":"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"}
@@ -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,9 +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;
17
+ /** Register a custom subscriber type for config-driven instantiation. */
15
18
  export declare function registerSubscriberType(typeName: string, factory: SubscriberFactory): void;
19
+ /** Remove a previously registered subscriber type. */
16
20
  export declare function unregisterSubscriberType(typeName: string): void;
21
+ /** Reset the registry to built-in types only. Intended for test teardown. */
17
22
  export declare function resetSubscriberRegistry(): void;
23
+ /**
24
+ * Instantiate a single subscriber from a config object.
25
+ * The `type` field selects the factory; all other fields are passed as config.
26
+ */
27
+ export declare function createSubscriberFromConfig(config: Record<string, unknown>): EventSubscriber;
18
28
  /**
19
29
  * Instantiate subscribers from config and subscribe them to the emitter.
20
30
  */
@@ -27,9 +37,16 @@ export interface SysModulesContext {
27
37
  eventEmitter?: EventEmitter;
28
38
  platformNotifyMiddleware?: PlatformNotifyMiddleware;
29
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
+ }
30
47
  /**
31
48
  * Auto-register all sys.* modules and middleware based on config.
32
49
  */
33
- 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;
34
51
  export {};
35
52
  //# sourceMappingURL=registration.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registration.d.ts","sourceRoot":"","sources":["../../src/sys-modules/registration.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AA+C5E,KAAK,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,eAAe,CAAC;AAwB9E,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,GACzB,IAAI,CAEN;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAK/D;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAG9C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAW,GAC5C,IAAI,CAwBN;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;CACrD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,GACzC,iBAAiB,CA0EnB"}
1
+ {"version":3,"file":"registration.d.ts","sourceRoot":"","sources":["../../src/sys-modules/registration.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAkB,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AA+C5E,KAAK,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,eAAe,CAAC;AAyD9E,yEAAyE;AACzE,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,GACzB,IAAI,CAEN;AAED,sDAAsD;AACtD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAK/D;AAED,6EAA6E;AAC7E,wBAAgB,uBAAuB,IAAI,IAAI,CAG9C;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAU3F;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAW,GAC5C,IAAI,CAwBN;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;CACrD;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,EAC1C,OAAO,CAAC,EAAE,yBAAyB,GAClC,iBAAiB,CAmJnB"}