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