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