xypriss 1.1.4 → 1.2.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 (82) hide show
  1. package/dist/cjs/src/index.js +56 -0
  2. package/dist/cjs/src/index.js.map +1 -1
  3. package/dist/cjs/src/plugins/modules/index.js +304 -0
  4. package/dist/cjs/src/plugins/modules/index.js.map +1 -0
  5. package/dist/cjs/src/plugins/modules/network/builtin/CompressionPlugin.js +410 -0
  6. package/dist/cjs/src/plugins/modules/network/builtin/CompressionPlugin.js.map +1 -0
  7. package/dist/cjs/src/plugins/modules/network/builtin/ConnectionPlugin.js +797 -0
  8. package/dist/cjs/src/plugins/modules/network/builtin/ConnectionPlugin.js.map +1 -0
  9. package/dist/cjs/src/plugins/modules/network/builtin/ProxyPlugin.js +409 -0
  10. package/dist/cjs/src/plugins/modules/network/builtin/ProxyPlugin.js.map +1 -0
  11. package/dist/cjs/src/plugins/modules/network/builtin/RateLimitPlugin.js +606 -0
  12. package/dist/cjs/src/plugins/modules/network/builtin/RateLimitPlugin.js.map +1 -0
  13. package/dist/cjs/src/plugins/modules/network/core/NetworkPlugin.js +225 -0
  14. package/dist/cjs/src/plugins/modules/network/core/NetworkPlugin.js.map +1 -0
  15. package/dist/cjs/src/plugins/modules/network/core/NetworkPluginFactory.js +40 -0
  16. package/dist/cjs/src/plugins/modules/network/core/NetworkPluginFactory.js.map +1 -0
  17. package/dist/cjs/src/plugins/modules/network/index.js +120 -0
  18. package/dist/cjs/src/plugins/modules/network/index.js.map +1 -0
  19. package/dist/cjs/src/plugins/modules/network/types/NetworkTypes.js +24 -0
  20. package/dist/cjs/src/plugins/modules/network/types/NetworkTypes.js.map +1 -0
  21. package/dist/cjs/src/plugins/modules/network/utils/NetworkPluginUtils.js +63 -0
  22. package/dist/cjs/src/plugins/modules/network/utils/NetworkPluginUtils.js.map +1 -0
  23. package/dist/cjs/src/plugins/modules/types/PluginTypes.js +1 -0
  24. package/dist/cjs/src/plugins/modules/types/PluginTypes.js.map +1 -1
  25. package/dist/cjs/src/server/FastServer.js +111 -2
  26. package/dist/cjs/src/server/FastServer.js.map +1 -1
  27. package/dist/cjs/src/server/conf/networkConnectionConf.js +25 -0
  28. package/dist/cjs/src/server/conf/networkConnectionConf.js.map +1 -0
  29. package/dist/cjs/src/server/conf/proxyConfig.js +23 -0
  30. package/dist/cjs/src/server/conf/proxyConfig.js.map +1 -0
  31. package/dist/cjs/src/server/conf/rateLimitConfig.js +35 -0
  32. package/dist/cjs/src/server/conf/rateLimitConfig.js.map +1 -0
  33. package/dist/cjs/src/server/const/default.js +6 -0
  34. package/dist/cjs/src/server/const/default.js.map +1 -1
  35. package/dist/cjs/src/server/handlers/NotFoundHandler.js +217 -0
  36. package/dist/cjs/src/server/handlers/NotFoundHandler.js.map +1 -0
  37. package/dist/cjs/src/server/handlers/templates/notFoundTemp.js +163 -0
  38. package/dist/cjs/src/server/handlers/templates/notFoundTemp.js.map +1 -0
  39. package/dist/esm/mods/security/src/components/cache/UFSIMC.js +5 -5
  40. package/dist/esm/mods/security/src/components/cache/UFSIMC.js.map +1 -1
  41. package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js +3 -3
  42. package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js.map +1 -1
  43. package/dist/esm/src/index.js +18 -0
  44. package/dist/esm/src/index.js.map +1 -1
  45. package/dist/esm/src/plugins/modules/index.js +275 -0
  46. package/dist/esm/src/plugins/modules/index.js.map +1 -0
  47. package/dist/esm/src/plugins/modules/network/builtin/CompressionPlugin.js +389 -0
  48. package/dist/esm/src/plugins/modules/network/builtin/CompressionPlugin.js.map +1 -0
  49. package/dist/esm/src/plugins/modules/network/builtin/ConnectionPlugin.js +776 -0
  50. package/dist/esm/src/plugins/modules/network/builtin/ConnectionPlugin.js.map +1 -0
  51. package/dist/esm/src/plugins/modules/network/builtin/ProxyPlugin.js +407 -0
  52. package/dist/esm/src/plugins/modules/network/builtin/ProxyPlugin.js.map +1 -0
  53. package/dist/esm/src/plugins/modules/network/builtin/RateLimitPlugin.js +585 -0
  54. package/dist/esm/src/plugins/modules/network/builtin/RateLimitPlugin.js.map +1 -0
  55. package/dist/esm/src/plugins/modules/network/core/NetworkPlugin.js +223 -0
  56. package/dist/esm/src/plugins/modules/network/core/NetworkPlugin.js.map +1 -0
  57. package/dist/esm/src/plugins/modules/network/core/NetworkPluginFactory.js +38 -0
  58. package/dist/esm/src/plugins/modules/network/core/NetworkPluginFactory.js.map +1 -0
  59. package/dist/esm/src/plugins/modules/network/index.js +109 -0
  60. package/dist/esm/src/plugins/modules/network/index.js.map +1 -0
  61. package/dist/esm/src/plugins/modules/network/types/NetworkTypes.js +24 -0
  62. package/dist/esm/src/plugins/modules/network/types/NetworkTypes.js.map +1 -0
  63. package/dist/esm/src/plugins/modules/network/utils/NetworkPluginUtils.js +61 -0
  64. package/dist/esm/src/plugins/modules/network/utils/NetworkPluginUtils.js.map +1 -0
  65. package/dist/esm/src/plugins/modules/types/PluginTypes.js +1 -0
  66. package/dist/esm/src/plugins/modules/types/PluginTypes.js.map +1 -1
  67. package/dist/esm/src/server/FastServer.js +111 -2
  68. package/dist/esm/src/server/FastServer.js.map +1 -1
  69. package/dist/esm/src/server/conf/networkConnectionConf.js +23 -0
  70. package/dist/esm/src/server/conf/networkConnectionConf.js.map +1 -0
  71. package/dist/esm/src/server/conf/proxyConfig.js +21 -0
  72. package/dist/esm/src/server/conf/proxyConfig.js.map +1 -0
  73. package/dist/esm/src/server/conf/rateLimitConfig.js +33 -0
  74. package/dist/esm/src/server/conf/rateLimitConfig.js.map +1 -0
  75. package/dist/esm/src/server/const/default.js +6 -0
  76. package/dist/esm/src/server/const/default.js.map +1 -1
  77. package/dist/esm/src/server/handlers/NotFoundHandler.js +194 -0
  78. package/dist/esm/src/server/handlers/NotFoundHandler.js.map +1 -0
  79. package/dist/esm/src/server/handlers/templates/notFoundTemp.js +161 -0
  80. package/dist/esm/src/server/handlers/templates/notFoundTemp.js.map +1 -0
  81. package/dist/index.d.ts +5099 -14
  82. package/package.json +8 -7
@@ -0,0 +1,389 @@
1
+ import { performance } from 'perf_hooks';
2
+ import * as zlib from 'zlib';
3
+ import compression from 'compression';
4
+ import { NetworkPlugin } from '../core/NetworkPlugin.js';
5
+ import { NetworkCategory } from '../types/NetworkTypes.js';
6
+
7
+ /**
8
+ * Compression Plugin
9
+ *
10
+ * Handles response compression with multiple algorithms (Gzip, Brotli, Deflate)
11
+ * Provides smart compression based on content type and size optimization
12
+ */
13
+ /**
14
+ * Response compression plugin for optimizing bandwidth usage
15
+ */
16
+ class CompressionPlugin extends NetworkPlugin {
17
+ constructor(config = {
18
+ enabled: true,
19
+ algorithms: ["gzip", "deflate"],
20
+ level: 6,
21
+ threshold: 1024,
22
+ contentTypes: ["text/*", "application/json"],
23
+ }) {
24
+ super(config);
25
+ this.id = "xypriss.network.compression";
26
+ this.name = "Response Compression Plugin";
27
+ this.version = "1.0.0";
28
+ this.networkCategory = NetworkCategory.COMPRESSION;
29
+ // Compression-specific state
30
+ this.compressionStats = {
31
+ totalRequests: 0,
32
+ compressedRequests: 0,
33
+ totalBytesOriginal: 0,
34
+ totalBytesCompressed: 0,
35
+ averageCompressionRatio: 0,
36
+ algorithmUsage: new Map(),
37
+ };
38
+ this.supportedAlgorithms = [];
39
+ this.initializeSupportedAlgorithms();
40
+ this.createCompressionMiddleware();
41
+ }
42
+ /**
43
+ * Initialize compression algorithms based on availability
44
+ */
45
+ initializeSupportedAlgorithms() {
46
+ const config = this.getCompressionConfig();
47
+ const requestedAlgorithms = config.algorithms || ["gzip", "deflate"];
48
+ // Check which algorithms are available
49
+ for (const algorithm of requestedAlgorithms) {
50
+ if (this.isAlgorithmSupported(algorithm)) {
51
+ this.supportedAlgorithms.push(algorithm);
52
+ this.compressionStats.algorithmUsage.set(algorithm, 0);
53
+ }
54
+ }
55
+ // Ensure at least gzip is available as fallback
56
+ if (this.supportedAlgorithms.length === 0) {
57
+ this.supportedAlgorithms.push("gzip");
58
+ this.compressionStats.algorithmUsage.set("gzip", 0);
59
+ }
60
+ }
61
+ /**
62
+ * Create compression middleware using the compression library
63
+ */
64
+ createCompressionMiddleware() {
65
+ const config = this.getCompressionConfig();
66
+ this.compressionMiddleware = compression({
67
+ level: config.level || 6,
68
+ threshold: config.threshold || 1024,
69
+ filter: (req, res) => {
70
+ // Use our custom filter logic
71
+ return this.shouldCompress(req, res);
72
+ },
73
+ });
74
+ }
75
+ /**
76
+ * Check if compression algorithm is supported
77
+ */
78
+ isAlgorithmSupported(algorithm) {
79
+ switch (algorithm) {
80
+ case "gzip":
81
+ case "deflate":
82
+ return true; // Always available in Node.js
83
+ case "brotli":
84
+ return typeof zlib.createBrotliCompress === "function";
85
+ default:
86
+ return false;
87
+ }
88
+ }
89
+ /**
90
+ * Execute compression logic
91
+ */
92
+ async executeNetwork(context) {
93
+ const startTime = performance.now();
94
+ const { req, res } = context;
95
+ try {
96
+ // Apply compression using the middleware
97
+ await new Promise((resolve, reject) => {
98
+ this.compressionMiddleware(req, res, (err) => {
99
+ if (err)
100
+ reject(err);
101
+ else
102
+ resolve();
103
+ });
104
+ });
105
+ // Update statistics
106
+ this.compressionStats.totalRequests++;
107
+ const wasCompressed = !!res.getHeader("content-encoding");
108
+ if (wasCompressed) {
109
+ this.compressionStats.compressedRequests++;
110
+ const algorithm = res.getHeader("content-encoding");
111
+ const currentUsage = this.compressionStats.algorithmUsage.get(algorithm) || 0;
112
+ this.compressionStats.algorithmUsage.set(algorithm, currentUsage + 1);
113
+ }
114
+ const executionTime = performance.now() - startTime;
115
+ return {
116
+ success: true,
117
+ executionTime,
118
+ shouldContinue: true,
119
+ data: {
120
+ compressed: wasCompressed,
121
+ algorithm: res.getHeader("content-encoding") || "none",
122
+ originalSize: context.networkMetrics.bytesReceived,
123
+ compressedSize: context.networkMetrics.bytesSent,
124
+ },
125
+ modifications: wasCompressed
126
+ ? {
127
+ headers: {
128
+ "Content-Encoding": res.getHeader("content-encoding"),
129
+ Vary: "Accept-Encoding",
130
+ },
131
+ compressed: true,
132
+ }
133
+ : undefined,
134
+ networkMetrics: {
135
+ processingTime: executionTime,
136
+ memoryUsage: process.memoryUsage().heapUsed,
137
+ cpuUsage: process.cpuUsage().user,
138
+ },
139
+ };
140
+ }
141
+ catch (error) {
142
+ return {
143
+ success: false,
144
+ executionTime: performance.now() - startTime,
145
+ shouldContinue: true,
146
+ error,
147
+ };
148
+ }
149
+ }
150
+ /**
151
+ * Check if response should be compressed
152
+ */
153
+ shouldCompress(req, res) {
154
+ const config = this.getCompressionConfig();
155
+ // Check if compression is enabled
156
+ if (!config.enabled) {
157
+ return false;
158
+ }
159
+ // Check if client accepts compression
160
+ const acceptEncoding = req.get("Accept-Encoding") || "";
161
+ if (!this.clientSupportsCompression(acceptEncoding)) {
162
+ return false;
163
+ }
164
+ // Check content type
165
+ const contentType = res.get("Content-Type") || "";
166
+ if (!this.shouldCompressContentType(contentType)) {
167
+ return false;
168
+ }
169
+ // Check if already compressed
170
+ if (res.get("Content-Encoding")) {
171
+ return false;
172
+ }
173
+ // Check content length threshold
174
+ const contentLength = parseInt(res.get("Content-Length") || "0");
175
+ if (contentLength > 0 && contentLength < (config.threshold || 1024)) {
176
+ return false;
177
+ }
178
+ return true;
179
+ }
180
+ /**
181
+ * Check if client supports compression
182
+ */
183
+ clientSupportsCompression(acceptEncoding) {
184
+ return this.supportedAlgorithms.some((algorithm) => acceptEncoding.toLowerCase().includes(algorithm));
185
+ }
186
+ /**
187
+ * Check if content type should be compressed
188
+ */
189
+ shouldCompressContentType(contentType) {
190
+ const config = this.getCompressionConfig();
191
+ const contentTypes = config.contentTypes || [
192
+ "text/*",
193
+ "application/json",
194
+ "application/javascript",
195
+ "application/xml",
196
+ "application/rss+xml",
197
+ "application/atom+xml",
198
+ ];
199
+ // Check exclude list first
200
+ if (config.excludeContentTypes) {
201
+ for (const excludeType of config.excludeContentTypes) {
202
+ if (this.matchesContentType(contentType, excludeType)) {
203
+ return false;
204
+ }
205
+ }
206
+ }
207
+ // Check include list
208
+ return contentTypes.some((type) => this.matchesContentType(contentType, type));
209
+ }
210
+ /**
211
+ * Match content type with pattern (supports wildcards)
212
+ */
213
+ matchesContentType(contentType, pattern) {
214
+ if (pattern.includes("*")) {
215
+ const regex = new RegExp(pattern.replace("*", ".*"), "i");
216
+ return regex.test(contentType);
217
+ }
218
+ return contentType.toLowerCase().includes(pattern.toLowerCase());
219
+ }
220
+ /**
221
+ * Select best compression algorithm based on client support and preferences
222
+ */
223
+ selectCompressionAlgorithm(req) {
224
+ const acceptEncoding = req.get("Accept-Encoding") || "";
225
+ const encodings = acceptEncoding.toLowerCase();
226
+ // Priority order: brotli > gzip > deflate
227
+ const priorityOrder = [
228
+ "brotli",
229
+ "gzip",
230
+ "deflate",
231
+ ];
232
+ for (const algorithm of priorityOrder) {
233
+ if (this.supportedAlgorithms.includes(algorithm) &&
234
+ encodings.includes(algorithm)) {
235
+ return algorithm;
236
+ }
237
+ }
238
+ return null;
239
+ }
240
+ /**
241
+ * Apply compression to response
242
+ */
243
+ async applyCompression(context, algorithm) {
244
+ const { res } = context;
245
+ const config = this.getCompressionConfig();
246
+ // Set compression headers
247
+ res.setHeader("Content-Encoding", algorithm);
248
+ res.setHeader("Vary", "Accept-Encoding");
249
+ // Remove content-length header as it will change
250
+ res.removeHeader("Content-Length");
251
+ // Create compression stream
252
+ const compressionStream = this.createCompressionStream(algorithm, config.level || 6);
253
+ // Intercept response write/end methods
254
+ this.interceptResponse(res, compressionStream, context);
255
+ }
256
+ /**
257
+ * Create compression stream for algorithm
258
+ */
259
+ createCompressionStream(algorithm, level) {
260
+ switch (algorithm) {
261
+ case "gzip":
262
+ return zlib.createGzip({ level });
263
+ case "deflate":
264
+ return zlib.createDeflate({ level });
265
+ case "brotli":
266
+ return zlib.createBrotliCompress({
267
+ params: {
268
+ [zlib.constants.BROTLI_PARAM_QUALITY]: level,
269
+ },
270
+ });
271
+ default:
272
+ throw new Error(`Unsupported compression algorithm: ${algorithm}`);
273
+ }
274
+ }
275
+ /**
276
+ * Intercept response to apply compression
277
+ */
278
+ interceptResponse(res, compressionStream, context) {
279
+ res.write.bind(res);
280
+ res.end.bind(res);
281
+ let originalSize = 0;
282
+ let compressedSize = 0;
283
+ // Track compressed data
284
+ compressionStream.on("data", (chunk) => {
285
+ compressedSize += chunk.length;
286
+ });
287
+ // Override write method
288
+ res.write = function (chunk, encoding, callback) {
289
+ if (chunk) {
290
+ originalSize += Buffer.isBuffer(chunk)
291
+ ? chunk.length
292
+ : Buffer.byteLength(chunk, encoding);
293
+ return compressionStream.write(chunk, encoding, callback);
294
+ }
295
+ return true;
296
+ };
297
+ // Override end method
298
+ res.end = function (chunk, encoding, callback) {
299
+ if (chunk) {
300
+ originalSize += Buffer.isBuffer(chunk)
301
+ ? chunk.length
302
+ : Buffer.byteLength(chunk, encoding);
303
+ }
304
+ compressionStream.end(chunk, encoding, () => {
305
+ // Update metrics
306
+ context.networkMetrics.bytesSent = compressedSize;
307
+ context.networkMetrics.compressionRatio =
308
+ originalSize > 0 ? compressedSize / originalSize : 1;
309
+ if (callback)
310
+ callback();
311
+ });
312
+ return this;
313
+ };
314
+ // Pipe compression stream to response
315
+ compressionStream.pipe(res, { end: false });
316
+ }
317
+ /**
318
+ * Update compression statistics
319
+ */
320
+ updateCompressionStats(algorithm) {
321
+ this.compressionStats.totalRequests++;
322
+ this.compressionStats.compressedRequests++;
323
+ const currentUsage = this.compressionStats.algorithmUsage.get(algorithm) || 0;
324
+ this.compressionStats.algorithmUsage.set(algorithm, currentUsage + 1);
325
+ }
326
+ /**
327
+ * Get compression configuration
328
+ */
329
+ getCompressionConfig() {
330
+ return this.config;
331
+ }
332
+ /**
333
+ * Validate compression configuration
334
+ */
335
+ validateNetworkConfig(config) {
336
+ if (config.level && (config.level < 1 || config.level > 9)) {
337
+ return false;
338
+ }
339
+ if (config.threshold && config.threshold < 0) {
340
+ return false;
341
+ }
342
+ if (config.algorithms && config.algorithms.length === 0) {
343
+ return false;
344
+ }
345
+ return true;
346
+ }
347
+ /**
348
+ * Check network health
349
+ */
350
+ async checkNetworkHealth() {
351
+ const errorRate = this.performanceMetrics.errorCount /
352
+ Math.max(this.performanceMetrics.totalExecutions, 1);
353
+ this.compressionStats.compressedRequests /
354
+ Math.max(this.compressionStats.totalRequests, 1);
355
+ return {
356
+ healthy: errorRate < 0.1 &&
357
+ this.performanceMetrics.averageExecutionTime <
358
+ this.maxExecutionTime,
359
+ status: errorRate < 0.05
360
+ ? "healthy"
361
+ : errorRate < 0.1
362
+ ? "degraded"
363
+ : "unhealthy",
364
+ metrics: {
365
+ responseTime: this.performanceMetrics.averageExecutionTime,
366
+ errorRate,
367
+ throughput: this.performanceMetrics.totalExecutions,
368
+ connections: 0, // Not applicable for compression
369
+ },
370
+ lastCheck: new Date(),
371
+ };
372
+ }
373
+ /**
374
+ * Get compression statistics
375
+ */
376
+ getCompressionStats() {
377
+ return {
378
+ ...this.compressionStats,
379
+ supportedAlgorithms: [...this.supportedAlgorithms],
380
+ averageCompressionRatio: this.compressionStats.totalBytesOriginal > 0
381
+ ? this.compressionStats.totalBytesCompressed /
382
+ this.compressionStats.totalBytesOriginal
383
+ : 0,
384
+ };
385
+ }
386
+ }
387
+
388
+ export { CompressionPlugin };
389
+ //# sourceMappingURL=CompressionPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompressionPlugin.js","sources":["../../../../../../../src/plugins/modules/network/builtin/CompressionPlugin.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}