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.
Files changed (55) hide show
  1. package/README.md +13 -13
  2. package/dist/cjs/index.js +2 -0
  3. package/dist/cjs/mods/security/src/index.js +35 -12
  4. package/dist/cjs/mods/security/src/index.js.map +1 -1
  5. package/dist/cjs/src/plugins/modules/PluginEngine.js +378 -0
  6. package/dist/cjs/src/plugins/modules/PluginEngine.js.map +1 -0
  7. package/dist/cjs/src/plugins/modules/PluginRegistry.js +339 -0
  8. package/dist/cjs/src/plugins/modules/PluginRegistry.js.map +1 -0
  9. package/dist/cjs/src/plugins/modules/builtin/JWTAuthPlugin.js +591 -0
  10. package/dist/cjs/src/plugins/modules/builtin/JWTAuthPlugin.js.map +1 -0
  11. package/dist/cjs/src/plugins/modules/builtin/ResponseTimePlugin.js +413 -0
  12. package/dist/cjs/src/plugins/modules/builtin/ResponseTimePlugin.js.map +1 -0
  13. package/dist/cjs/src/plugins/modules/builtin/SmartCachePlugin.js +843 -0
  14. package/dist/cjs/src/plugins/modules/builtin/SmartCachePlugin.js.map +1 -0
  15. package/dist/cjs/src/plugins/modules/core/CachePlugin.js +1975 -0
  16. package/dist/cjs/src/plugins/modules/core/CachePlugin.js.map +1 -0
  17. package/dist/cjs/src/plugins/modules/core/PerformancePlugin.js +894 -0
  18. package/dist/cjs/src/plugins/modules/core/PerformancePlugin.js.map +1 -0
  19. package/dist/cjs/src/plugins/modules/core/SecurityPlugin.js +799 -0
  20. package/dist/cjs/src/plugins/modules/core/SecurityPlugin.js.map +1 -0
  21. package/dist/cjs/src/plugins/modules/types/PluginTypes.js +47 -0
  22. package/dist/cjs/src/plugins/modules/types/PluginTypes.js.map +1 -0
  23. package/dist/cjs/src/server/FastServer.js +22 -3
  24. package/dist/cjs/src/server/FastServer.js.map +1 -1
  25. package/dist/cjs/src/server/components/fastapi/PluginManager.js +5 -5
  26. package/dist/cjs/src/server/components/fastapi/PluginManager.js.map +1 -1
  27. package/dist/cjs/src/server/components/fastapi/RequestProcessor.js +1 -1
  28. package/dist/esm/index.js +2 -0
  29. package/dist/esm/mods/security/src/index.js +14 -10
  30. package/dist/esm/mods/security/src/index.js.map +1 -1
  31. package/dist/esm/src/plugins/modules/PluginEngine.js +376 -0
  32. package/dist/esm/src/plugins/modules/PluginEngine.js.map +1 -0
  33. package/dist/esm/src/plugins/modules/PluginRegistry.js +337 -0
  34. package/dist/esm/src/plugins/modules/PluginRegistry.js.map +1 -0
  35. package/dist/esm/src/plugins/modules/builtin/JWTAuthPlugin.js +589 -0
  36. package/dist/esm/src/plugins/modules/builtin/JWTAuthPlugin.js.map +1 -0
  37. package/dist/esm/src/plugins/modules/builtin/ResponseTimePlugin.js +411 -0
  38. package/dist/esm/src/plugins/modules/builtin/ResponseTimePlugin.js.map +1 -0
  39. package/dist/esm/src/plugins/modules/builtin/SmartCachePlugin.js +841 -0
  40. package/dist/esm/src/plugins/modules/builtin/SmartCachePlugin.js.map +1 -0
  41. package/dist/esm/src/plugins/modules/core/CachePlugin.js +1973 -0
  42. package/dist/esm/src/plugins/modules/core/CachePlugin.js.map +1 -0
  43. package/dist/esm/src/plugins/modules/core/PerformancePlugin.js +872 -0
  44. package/dist/esm/src/plugins/modules/core/PerformancePlugin.js.map +1 -0
  45. package/dist/esm/src/plugins/modules/core/SecurityPlugin.js +797 -0
  46. package/dist/esm/src/plugins/modules/core/SecurityPlugin.js.map +1 -0
  47. package/dist/esm/src/plugins/modules/types/PluginTypes.js +47 -0
  48. package/dist/esm/src/plugins/modules/types/PluginTypes.js.map +1 -0
  49. package/dist/esm/src/server/FastServer.js +22 -3
  50. package/dist/esm/src/server/FastServer.js.map +1 -1
  51. package/dist/esm/src/server/components/fastapi/PluginManager.js +5 -5
  52. package/dist/esm/src/server/components/fastapi/PluginManager.js.map +1 -1
  53. package/dist/esm/src/server/components/fastapi/RequestProcessor.js +1 -1
  54. package/dist/index.d.ts +5 -0
  55. 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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"}