xypriss 1.1.2 → 1.1.4
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 +13 -13
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/mods/security/src/index.js +35 -12
- package/dist/cjs/mods/security/src/index.js.map +1 -1
- package/dist/cjs/src/plugins/modules/PluginEngine.js +378 -0
- package/dist/cjs/src/plugins/modules/PluginEngine.js.map +1 -0
- package/dist/cjs/src/plugins/modules/PluginRegistry.js +339 -0
- package/dist/cjs/src/plugins/modules/PluginRegistry.js.map +1 -0
- package/dist/cjs/src/plugins/modules/builtin/JWTAuthPlugin.js +591 -0
- package/dist/cjs/src/plugins/modules/builtin/JWTAuthPlugin.js.map +1 -0
- package/dist/cjs/src/plugins/modules/builtin/ResponseTimePlugin.js +413 -0
- package/dist/cjs/src/plugins/modules/builtin/ResponseTimePlugin.js.map +1 -0
- package/dist/cjs/src/plugins/modules/builtin/SmartCachePlugin.js +843 -0
- package/dist/cjs/src/plugins/modules/builtin/SmartCachePlugin.js.map +1 -0
- package/dist/cjs/src/plugins/modules/core/CachePlugin.js +1975 -0
- package/dist/cjs/src/plugins/modules/core/CachePlugin.js.map +1 -0
- package/dist/cjs/src/plugins/modules/core/PerformancePlugin.js +894 -0
- package/dist/cjs/src/plugins/modules/core/PerformancePlugin.js.map +1 -0
- package/dist/cjs/src/plugins/modules/core/SecurityPlugin.js +799 -0
- package/dist/cjs/src/plugins/modules/core/SecurityPlugin.js.map +1 -0
- package/dist/cjs/src/plugins/modules/types/PluginTypes.js +47 -0
- package/dist/cjs/src/plugins/modules/types/PluginTypes.js.map +1 -0
- package/dist/cjs/src/server/FastServer.js +22 -3
- package/dist/cjs/src/server/FastServer.js.map +1 -1
- package/dist/cjs/src/server/components/fastapi/PluginManager.js +5 -5
- package/dist/cjs/src/server/components/fastapi/PluginManager.js.map +1 -1
- package/dist/cjs/src/server/components/fastapi/RequestProcessor.js +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/mods/security/src/index.js +14 -10
- package/dist/esm/mods/security/src/index.js.map +1 -1
- package/dist/esm/src/plugins/modules/PluginEngine.js +376 -0
- package/dist/esm/src/plugins/modules/PluginEngine.js.map +1 -0
- package/dist/esm/src/plugins/modules/PluginRegistry.js +337 -0
- package/dist/esm/src/plugins/modules/PluginRegistry.js.map +1 -0
- package/dist/esm/src/plugins/modules/builtin/JWTAuthPlugin.js +589 -0
- package/dist/esm/src/plugins/modules/builtin/JWTAuthPlugin.js.map +1 -0
- package/dist/esm/src/plugins/modules/builtin/ResponseTimePlugin.js +411 -0
- package/dist/esm/src/plugins/modules/builtin/ResponseTimePlugin.js.map +1 -0
- package/dist/esm/src/plugins/modules/builtin/SmartCachePlugin.js +841 -0
- package/dist/esm/src/plugins/modules/builtin/SmartCachePlugin.js.map +1 -0
- package/dist/esm/src/plugins/modules/core/CachePlugin.js +1973 -0
- package/dist/esm/src/plugins/modules/core/CachePlugin.js.map +1 -0
- package/dist/esm/src/plugins/modules/core/PerformancePlugin.js +872 -0
- package/dist/esm/src/plugins/modules/core/PerformancePlugin.js.map +1 -0
- package/dist/esm/src/plugins/modules/core/SecurityPlugin.js +797 -0
- package/dist/esm/src/plugins/modules/core/SecurityPlugin.js.map +1 -0
- package/dist/esm/src/plugins/modules/types/PluginTypes.js +47 -0
- package/dist/esm/src/plugins/modules/types/PluginTypes.js.map +1 -0
- package/dist/esm/src/server/FastServer.js +22 -3
- package/dist/esm/src/server/FastServer.js.map +1 -1
- package/dist/esm/src/server/components/fastapi/PluginManager.js +5 -5
- package/dist/esm/src/server/components/fastapi/PluginManager.js.map +1 -1
- package/dist/esm/src/server/components/fastapi/RequestProcessor.js +1 -1
- package/dist/index.d.ts +5 -0
- package/package.json +4 -4
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { func } from '../../../mods/security/src/components/fortified-function/index.js';
|
|
3
|
+
import { PluginType, PluginEventType, PluginPriority } from './types/PluginTypes.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Ultra-Fast Plugin Registry
|
|
7
|
+
*
|
|
8
|
+
* Central registry for managing plugins with <0.1ms registration overhead
|
|
9
|
+
* and intelligent lifecycle management for optimal performance.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Ultra-fast plugin registry with intelligent management
|
|
13
|
+
*/
|
|
14
|
+
class PluginRegistry extends EventEmitter {
|
|
15
|
+
constructor(cache, cluster, config) {
|
|
16
|
+
super();
|
|
17
|
+
this.plugins = new Map();
|
|
18
|
+
this.pluginsByType = new Map();
|
|
19
|
+
this.pluginStats = new Map();
|
|
20
|
+
this.isInitialized = false;
|
|
21
|
+
// Performance optimization: Pre-sorted plugin arrays by priority
|
|
22
|
+
this.sortedPluginCache = new Map();
|
|
23
|
+
this.lastCacheUpdate = 0;
|
|
24
|
+
this.CACHE_TTL = 5000; // 5 seconds
|
|
25
|
+
this.cache = cache;
|
|
26
|
+
this.cluster = cluster;
|
|
27
|
+
this.config = {
|
|
28
|
+
maxPlugins: 100,
|
|
29
|
+
enableHotReload: true,
|
|
30
|
+
enableProfiling: true,
|
|
31
|
+
performanceThresholds: {
|
|
32
|
+
maxExecutionTime: 10, // 10ms max
|
|
33
|
+
maxMemoryUsage: 50 * 1024 * 1024, // 50MB
|
|
34
|
+
maxCpuUsage: 80, // 80%
|
|
35
|
+
},
|
|
36
|
+
...config,
|
|
37
|
+
};
|
|
38
|
+
this.logger = this.createLogger();
|
|
39
|
+
this.initializePluginTypes();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Initialize plugin type maps for ultra-fast lookups
|
|
43
|
+
*/
|
|
44
|
+
initializePluginTypes() {
|
|
45
|
+
Object.values(PluginType).forEach((type) => {
|
|
46
|
+
this.pluginsByType.set(type, []);
|
|
47
|
+
this.sortedPluginCache.set(type, []);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Create optimized logger for plugin operations
|
|
52
|
+
*/
|
|
53
|
+
createLogger() {
|
|
54
|
+
const fortifiedLogger = func((level, message, data) => {
|
|
55
|
+
new Date().toISOString();
|
|
56
|
+
if (level === "error") {
|
|
57
|
+
console.error(`[PluginRegistry] ${message}`, data);
|
|
58
|
+
}
|
|
59
|
+
else if (level === "warn") {
|
|
60
|
+
console.warn(`[PluginRegistry] ${message}`, data);
|
|
61
|
+
}
|
|
62
|
+
else if (level === "debug" &&
|
|
63
|
+
process.env.NODE_ENV === "development") {
|
|
64
|
+
console.debug(`[PluginRegistry] ${message}`, data);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.log(`[PluginRegistry] ${message}`, data);
|
|
68
|
+
}
|
|
69
|
+
}, { ultraFast: "maximum", auditLog: false });
|
|
70
|
+
return {
|
|
71
|
+
debug: (message, data) => fortifiedLogger("debug", message, data),
|
|
72
|
+
info: (message, data) => fortifiedLogger("info", message, data),
|
|
73
|
+
warn: (message, data) => fortifiedLogger("warn", message, data),
|
|
74
|
+
error: (message, error) => fortifiedLogger("error", message, error),
|
|
75
|
+
performance: (pluginId, executionTime) => {
|
|
76
|
+
if (this.config.enableProfiling) {
|
|
77
|
+
fortifiedLogger("performance", `Plugin ${pluginId} executed in ${executionTime}ms`);
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Register a plugin with ultra-fast registration (<0.1ms)
|
|
84
|
+
*/
|
|
85
|
+
async register(plugin) {
|
|
86
|
+
const startTime = performance.now();
|
|
87
|
+
try {
|
|
88
|
+
// Validate plugin
|
|
89
|
+
this.validatePlugin(plugin);
|
|
90
|
+
// Check if plugin already exists
|
|
91
|
+
if (this.plugins.has(plugin.id)) {
|
|
92
|
+
throw new Error(`Plugin ${plugin.id} is already registered`);
|
|
93
|
+
}
|
|
94
|
+
// Check plugin limit
|
|
95
|
+
if (this.plugins.size >= this.config.maxPlugins) {
|
|
96
|
+
throw new Error(`Maximum plugin limit (${this.config.maxPlugins}) reached`);
|
|
97
|
+
}
|
|
98
|
+
// Initialize plugin if needed
|
|
99
|
+
if (plugin.initialize) {
|
|
100
|
+
const initContext = {
|
|
101
|
+
cache: this.cache,
|
|
102
|
+
cluster: this.cluster,
|
|
103
|
+
config: {
|
|
104
|
+
maxExecutionTime: plugin.maxExecutionTime,
|
|
105
|
+
enableProfiling: this.config.enableProfiling,
|
|
106
|
+
enableCaching: plugin.isCacheable,
|
|
107
|
+
enableEncryption: false,
|
|
108
|
+
enableAuditLogging: false,
|
|
109
|
+
securityLevel: "basic",
|
|
110
|
+
customSettings: {},
|
|
111
|
+
},
|
|
112
|
+
logger: this.logger,
|
|
113
|
+
};
|
|
114
|
+
await plugin.initialize(initContext);
|
|
115
|
+
}
|
|
116
|
+
// Precompile plugin if supported
|
|
117
|
+
if (plugin.precompile) {
|
|
118
|
+
await plugin.precompile();
|
|
119
|
+
}
|
|
120
|
+
// Register plugin
|
|
121
|
+
this.plugins.set(plugin.id, plugin);
|
|
122
|
+
// Add to type-specific collection
|
|
123
|
+
const typePlugins = this.pluginsByType.get(plugin.type) || [];
|
|
124
|
+
typePlugins.push(plugin);
|
|
125
|
+
this.pluginsByType.set(plugin.type, typePlugins);
|
|
126
|
+
// Initialize stats
|
|
127
|
+
this.pluginStats.set(plugin.id, {
|
|
128
|
+
pluginId: plugin.id,
|
|
129
|
+
executionCount: 0,
|
|
130
|
+
totalExecutionTime: 0,
|
|
131
|
+
averageExecutionTime: 0,
|
|
132
|
+
errorCount: 0,
|
|
133
|
+
lastExecuted: new Date(),
|
|
134
|
+
performanceScore: 100,
|
|
135
|
+
});
|
|
136
|
+
// Invalidate sorted cache
|
|
137
|
+
this.invalidateSortedCache();
|
|
138
|
+
const registrationTime = performance.now() - startTime;
|
|
139
|
+
this.logger.info(`Plugin ${plugin.id} registered in ${registrationTime.toFixed(3)}ms`);
|
|
140
|
+
// Emit event
|
|
141
|
+
this.emitPluginEvent(PluginEventType.PLUGIN_REGISTERED, plugin.id, {
|
|
142
|
+
type: plugin.type,
|
|
143
|
+
priority: plugin.priority,
|
|
144
|
+
registrationTime,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
this.logger.error(`Failed to register plugin ${plugin.id}`, error);
|
|
149
|
+
throw error;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Unregister a plugin
|
|
154
|
+
*/
|
|
155
|
+
async unregister(pluginId) {
|
|
156
|
+
const plugin = this.plugins.get(pluginId);
|
|
157
|
+
if (!plugin) {
|
|
158
|
+
throw new Error(`Plugin ${pluginId} not found`);
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
// Cleanup plugin if supported
|
|
162
|
+
if (plugin.cleanup) {
|
|
163
|
+
// Create minimal context for cleanup
|
|
164
|
+
const cleanupContext = {
|
|
165
|
+
pluginData: new Map(),
|
|
166
|
+
security: {
|
|
167
|
+
isAuthenticated: false,
|
|
168
|
+
roles: [],
|
|
169
|
+
permissions: [],
|
|
170
|
+
},
|
|
171
|
+
metrics: {
|
|
172
|
+
requestStartTime: Date.now(),
|
|
173
|
+
pluginExecutionTimes: new Map(),
|
|
174
|
+
cacheHits: 0,
|
|
175
|
+
cacheMisses: 0,
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
await plugin.cleanup(cleanupContext);
|
|
179
|
+
}
|
|
180
|
+
// Remove from collections
|
|
181
|
+
this.plugins.delete(pluginId);
|
|
182
|
+
this.pluginStats.delete(pluginId);
|
|
183
|
+
// Remove from type-specific collection
|
|
184
|
+
const typePlugins = this.pluginsByType.get(plugin.type) || [];
|
|
185
|
+
const filteredPlugins = typePlugins.filter((p) => p.id !== pluginId);
|
|
186
|
+
this.pluginsByType.set(plugin.type, filteredPlugins);
|
|
187
|
+
// Invalidate sorted cache
|
|
188
|
+
this.invalidateSortedCache();
|
|
189
|
+
this.logger.info(`Plugin ${pluginId} unregistered`);
|
|
190
|
+
// Emit event
|
|
191
|
+
this.emitPluginEvent(PluginEventType.PLUGIN_UNREGISTERED, pluginId);
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
this.logger.error(`Failed to unregister plugin ${pluginId}`, error);
|
|
195
|
+
throw error;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Get plugins by type with ultra-fast sorted lookup
|
|
200
|
+
*/
|
|
201
|
+
getPluginsByType(type) {
|
|
202
|
+
const now = Date.now();
|
|
203
|
+
// Check if cache is valid
|
|
204
|
+
if (now - this.lastCacheUpdate < this.CACHE_TTL) {
|
|
205
|
+
return this.sortedPluginCache.get(type) || [];
|
|
206
|
+
}
|
|
207
|
+
// Rebuild sorted cache
|
|
208
|
+
const plugins = this.pluginsByType.get(type) || [];
|
|
209
|
+
const sortedPlugins = plugins.sort((a, b) => a.priority - b.priority);
|
|
210
|
+
this.sortedPluginCache.set(type, sortedPlugins);
|
|
211
|
+
this.lastCacheUpdate = now;
|
|
212
|
+
return sortedPlugins;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Get plugin by ID
|
|
216
|
+
*/
|
|
217
|
+
getPlugin(pluginId) {
|
|
218
|
+
return this.plugins.get(pluginId);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get all registered plugins
|
|
222
|
+
*/
|
|
223
|
+
getAllPlugins() {
|
|
224
|
+
return Array.from(this.plugins.values());
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Get plugin execution statistics
|
|
228
|
+
*/
|
|
229
|
+
getPluginStats(pluginId) {
|
|
230
|
+
return this.pluginStats.get(pluginId);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Get all plugin statistics
|
|
234
|
+
*/
|
|
235
|
+
getAllStats() {
|
|
236
|
+
return Array.from(this.pluginStats.values());
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Update plugin execution statistics
|
|
240
|
+
*/
|
|
241
|
+
updateStats(pluginId, executionTime, success) {
|
|
242
|
+
const stats = this.pluginStats.get(pluginId);
|
|
243
|
+
if (!stats)
|
|
244
|
+
return;
|
|
245
|
+
stats.executionCount++;
|
|
246
|
+
stats.totalExecutionTime += executionTime;
|
|
247
|
+
stats.averageExecutionTime =
|
|
248
|
+
stats.totalExecutionTime / stats.executionCount;
|
|
249
|
+
stats.lastExecuted = new Date();
|
|
250
|
+
if (!success) {
|
|
251
|
+
stats.errorCount++;
|
|
252
|
+
}
|
|
253
|
+
// Calculate performance score (0-100)
|
|
254
|
+
const errorRate = stats.errorCount / stats.executionCount;
|
|
255
|
+
const timeScore = Math.max(0, 100 - (stats.averageExecutionTime / 10) * 100);
|
|
256
|
+
const errorScore = Math.max(0, 100 - errorRate * 100);
|
|
257
|
+
stats.performanceScore = (timeScore + errorScore) / 2;
|
|
258
|
+
// Check performance thresholds
|
|
259
|
+
if (executionTime > this.config.performanceThresholds.maxExecutionTime) {
|
|
260
|
+
this.emitPluginEvent(PluginEventType.PERFORMANCE_THRESHOLD_EXCEEDED, pluginId, {
|
|
261
|
+
executionTime,
|
|
262
|
+
threshold: this.config.performanceThresholds.maxExecutionTime,
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Validate plugin before registration
|
|
268
|
+
*/
|
|
269
|
+
validatePlugin(plugin) {
|
|
270
|
+
if (!plugin.id || typeof plugin.id !== "string") {
|
|
271
|
+
throw new Error("Plugin must have a valid string ID");
|
|
272
|
+
}
|
|
273
|
+
if (!plugin.name || typeof plugin.name !== "string") {
|
|
274
|
+
throw new Error("Plugin must have a valid string name");
|
|
275
|
+
}
|
|
276
|
+
if (!plugin.version || typeof plugin.version !== "string") {
|
|
277
|
+
throw new Error("Plugin must have a valid string version");
|
|
278
|
+
}
|
|
279
|
+
if (!Object.values(PluginType).includes(plugin.type)) {
|
|
280
|
+
throw new Error(`Invalid plugin type: ${plugin.type}`);
|
|
281
|
+
}
|
|
282
|
+
if (!Object.values(PluginPriority).includes(plugin.priority)) {
|
|
283
|
+
throw new Error(`Invalid plugin priority: ${plugin.priority}`);
|
|
284
|
+
}
|
|
285
|
+
if (typeof plugin.execute !== "function") {
|
|
286
|
+
throw new Error("Plugin must have an execute method");
|
|
287
|
+
}
|
|
288
|
+
if (plugin.maxExecutionTime <= 0) {
|
|
289
|
+
throw new Error("Plugin maxExecutionTime must be positive");
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Invalidate sorted plugin cache
|
|
294
|
+
*/
|
|
295
|
+
invalidateSortedCache() {
|
|
296
|
+
this.lastCacheUpdate = 0;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Emit plugin event
|
|
300
|
+
*/
|
|
301
|
+
emitPluginEvent(type, pluginId, data) {
|
|
302
|
+
const event = {
|
|
303
|
+
type,
|
|
304
|
+
pluginId,
|
|
305
|
+
timestamp: new Date(),
|
|
306
|
+
data,
|
|
307
|
+
};
|
|
308
|
+
this.emit(type, event);
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Get registry statistics (ultra-fast optimized)
|
|
312
|
+
*/
|
|
313
|
+
getRegistryStats() {
|
|
314
|
+
const totalPlugins = this.plugins.size;
|
|
315
|
+
const pluginsByType = {};
|
|
316
|
+
let totalExecutions = 0;
|
|
317
|
+
let totalExecutionTime = 0;
|
|
318
|
+
// Ultra-fast: Only count plugins that actually exist (avoid iterating all enum values)
|
|
319
|
+
this.pluginsByType.forEach((plugins, type) => {
|
|
320
|
+
pluginsByType[type] = plugins.length;
|
|
321
|
+
});
|
|
322
|
+
// Ultra-fast: Single iteration through stats
|
|
323
|
+
this.pluginStats.forEach((stats) => {
|
|
324
|
+
totalExecutions += stats.executionCount;
|
|
325
|
+
totalExecutionTime += stats.totalExecutionTime;
|
|
326
|
+
});
|
|
327
|
+
return {
|
|
328
|
+
totalPlugins,
|
|
329
|
+
pluginsByType,
|
|
330
|
+
averageExecutionTime: totalExecutions > 0 ? totalExecutionTime / totalExecutions : 0,
|
|
331
|
+
totalExecutions,
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
export { PluginRegistry };
|
|
337
|
+
//# sourceMappingURL=PluginRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginRegistry.js","sources":["../../../../../src/plugins/modules/PluginRegistry.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|