xypriss 2.2.5 → 2.3.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 (83) hide show
  1. package/README.md +1 -3
  2. package/dist/cjs/mods/security/src/algorithms/hash-algorithms.js +9 -5
  3. package/dist/cjs/mods/security/src/algorithms/hash-algorithms.js.map +1 -1
  4. package/dist/cjs/mods/security/src/components/cache/cacheSys.utils.js +9 -5
  5. package/dist/cjs/mods/security/src/components/cache/cacheSys.utils.js.map +1 -1
  6. package/dist/cjs/mods/security/src/components/cache/index.js +9 -5
  7. package/dist/cjs/mods/security/src/components/cache/index.js.map +1 -1
  8. package/dist/cjs/mods/security/src/components/fortified-function/index.js +8 -4
  9. package/dist/cjs/mods/security/src/components/fortified-function/index.js.map +1 -1
  10. package/dist/cjs/mods/security/src/components/fortified-function/security/security-handler.js +9 -5
  11. package/dist/cjs/mods/security/src/components/fortified-function/security/security-handler.js.map +1 -1
  12. package/dist/cjs/mods/security/src/index.js +9 -5
  13. package/dist/cjs/mods/security/src/index.js.map +1 -1
  14. package/dist/cjs/src/cluster/modules/CrossPlatformMemory.js +31 -2
  15. package/dist/cjs/src/cluster/modules/CrossPlatformMemory.js.map +1 -1
  16. package/dist/cjs/src/middleware/XyPrissMiddlewareAPI.js +87 -30
  17. package/dist/cjs/src/middleware/XyPrissMiddlewareAPI.js.map +1 -1
  18. package/dist/cjs/src/middleware/built-in/BuiltInMiddleware.js +320 -0
  19. package/dist/cjs/src/middleware/built-in/BuiltInMiddleware.js.map +1 -0
  20. package/dist/cjs/src/middleware/built-in/security/CommandInjectionDetector.js +215 -0
  21. package/dist/cjs/src/middleware/built-in/security/CommandInjectionDetector.js.map +1 -0
  22. package/dist/cjs/src/middleware/built-in/security/LDAPInjectionDetector.js +96 -0
  23. package/dist/cjs/src/middleware/built-in/security/LDAPInjectionDetector.js.map +1 -0
  24. package/dist/cjs/src/middleware/built-in/security/PathTraversalDetector.js +212 -0
  25. package/dist/cjs/src/middleware/built-in/security/PathTraversalDetector.js.map +1 -0
  26. package/dist/cjs/src/middleware/built-in/security/SQLInjectionDetector.js +335 -0
  27. package/dist/cjs/src/middleware/built-in/security/SQLInjectionDetector.js.map +1 -0
  28. package/dist/cjs/src/middleware/built-in/security/XXEProtector.js +175 -0
  29. package/dist/cjs/src/middleware/built-in/security/XXEProtector.js.map +1 -0
  30. package/dist/cjs/src/middleware/security-middleware.js +249 -132
  31. package/dist/cjs/src/middleware/security-middleware.js.map +1 -1
  32. package/dist/cjs/src/plugins/modules/index.js +8 -4
  33. package/dist/cjs/src/plugins/modules/index.js.map +1 -1
  34. package/dist/cjs/src/server/FastServer.js +49 -32
  35. package/dist/cjs/src/server/FastServer.js.map +1 -1
  36. package/dist/cjs/src/server/ServerFactory.js +34 -1
  37. package/dist/cjs/src/server/ServerFactory.js.map +1 -1
  38. package/dist/cjs/src/server/components/multi-server/MultiServerManager.js +11 -2
  39. package/dist/cjs/src/server/components/multi-server/MultiServerManager.js.map +1 -1
  40. package/dist/cjs/src/server/const/default.js +15 -1
  41. package/dist/cjs/src/server/const/default.js.map +1 -1
  42. package/dist/esm/mods/security/src/algorithms/hash-algorithms.js +9 -5
  43. package/dist/esm/mods/security/src/algorithms/hash-algorithms.js.map +1 -1
  44. package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js +9 -5
  45. package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js.map +1 -1
  46. package/dist/esm/mods/security/src/components/cache/index.js +9 -5
  47. package/dist/esm/mods/security/src/components/cache/index.js.map +1 -1
  48. package/dist/esm/mods/security/src/components/fortified-function/index.js +8 -4
  49. package/dist/esm/mods/security/src/components/fortified-function/index.js.map +1 -1
  50. package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js +9 -5
  51. package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js.map +1 -1
  52. package/dist/esm/mods/security/src/index.js +9 -5
  53. package/dist/esm/mods/security/src/index.js.map +1 -1
  54. package/dist/esm/src/cluster/modules/CrossPlatformMemory.js +31 -2
  55. package/dist/esm/src/cluster/modules/CrossPlatformMemory.js.map +1 -1
  56. package/dist/esm/src/middleware/XyPrissMiddlewareAPI.js +75 -18
  57. package/dist/esm/src/middleware/XyPrissMiddlewareAPI.js.map +1 -1
  58. package/dist/esm/src/middleware/built-in/BuiltInMiddleware.js +318 -0
  59. package/dist/esm/src/middleware/built-in/BuiltInMiddleware.js.map +1 -0
  60. package/dist/esm/src/middleware/built-in/security/CommandInjectionDetector.js +213 -0
  61. package/dist/esm/src/middleware/built-in/security/CommandInjectionDetector.js.map +1 -0
  62. package/dist/esm/src/middleware/built-in/security/LDAPInjectionDetector.js +94 -0
  63. package/dist/esm/src/middleware/built-in/security/LDAPInjectionDetector.js.map +1 -0
  64. package/dist/esm/src/middleware/built-in/security/PathTraversalDetector.js +210 -0
  65. package/dist/esm/src/middleware/built-in/security/PathTraversalDetector.js.map +1 -0
  66. package/dist/esm/src/middleware/built-in/security/SQLInjectionDetector.js +333 -0
  67. package/dist/esm/src/middleware/built-in/security/SQLInjectionDetector.js.map +1 -0
  68. package/dist/esm/src/middleware/built-in/security/XXEProtector.js +173 -0
  69. package/dist/esm/src/middleware/built-in/security/XXEProtector.js.map +1 -0
  70. package/dist/esm/src/middleware/security-middleware.js +248 -131
  71. package/dist/esm/src/middleware/security-middleware.js.map +1 -1
  72. package/dist/esm/src/plugins/modules/index.js +8 -4
  73. package/dist/esm/src/plugins/modules/index.js.map +1 -1
  74. package/dist/esm/src/server/FastServer.js +50 -33
  75. package/dist/esm/src/server/FastServer.js.map +1 -1
  76. package/dist/esm/src/server/ServerFactory.js +34 -1
  77. package/dist/esm/src/server/ServerFactory.js.map +1 -1
  78. package/dist/esm/src/server/components/multi-server/MultiServerManager.js +11 -2
  79. package/dist/esm/src/server/components/multi-server/MultiServerManager.js.map +1 -1
  80. package/dist/esm/src/server/const/default.js +15 -1
  81. package/dist/esm/src/server/const/default.js.map +1 -1
  82. package/dist/index.d.ts +895 -39
  83. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./built-in/index.js');
3
+ var BuiltInMiddleware = require('./built-in/BuiltInMiddleware.js');
4
4
  var Logger = require('../../shared/logger/Logger.js');
5
5
 
6
6
  /**
@@ -9,28 +9,94 @@ var Logger = require('../../shared/logger/Logger.js');
9
9
  */
10
10
  // Built-in security middleware using actual libraries
11
11
  class XyPrissMiddleware {
12
- constructor(app) {
12
+ constructor(app, securityConfig) {
13
13
  this.registeredMiddleware = [];
14
14
  this.middlewareCounter = 0;
15
+ this.securityConfig = null;
15
16
  this.app = app;
17
+ this.securityConfig = securityConfig || null;
16
18
  this.logger = new Logger.Logger({
17
19
  components: {
18
20
  middleware: true,
19
21
  },
20
22
  });
23
+ // DO NOT apply default middleware here - wait for explicit initialization
24
+ // This allows proper config merging before applying middleware
25
+ }
26
+ /**
27
+ * Initialize default middleware with security configuration
28
+ */
29
+ initializeWithConfig(securityConfig) {
30
+ if (securityConfig) {
31
+ this.securityConfig = securityConfig;
32
+ }
21
33
  // Enable default security middleware by default
22
34
  this.enableDefaultMiddleware();
23
35
  }
24
36
  /**
25
- * Enable default built-in middleware
37
+ * Enable default built-in middleware based on security configuration
26
38
  */
27
39
  enableDefaultMiddleware() {
28
40
  this.logger.debug("middleware", "🔧 Enabling default security middleware...");
29
- // Enable basic security middleware by default
30
- this.helmet({ hidePoweredBy: true });
31
- this.cors({ origin: true });
32
- this.compression({ threshold: 1024 });
33
- this.logger.debug("middleware", "✅ Default security middleware enabled");
41
+ // Apply middleware based on security configuration
42
+ const config = this.securityConfig;
43
+ // Helmet (always enabled by default unless explicitly disabled)
44
+ if (config?.helmet !== false) {
45
+ this.helmet({ hidePoweredBy: true });
46
+ }
47
+ // CORS (conditionally enabled based on config)
48
+ if (config?.cors !== false) {
49
+ const corsConfig = config?.cors === true || !config?.cors
50
+ ? { origin: true }
51
+ : config.cors;
52
+ this.cors(corsConfig);
53
+ }
54
+ // Compression (conditionally enabled)
55
+ if (config?.compression !== false) {
56
+ this.compression({ threshold: 1024 });
57
+ }
58
+ // HTTP Parameter Pollution protection (conditionally enabled)
59
+ if (config?.hpp !== false) {
60
+ this.hpp({ whitelist: ["tags", "categories"] });
61
+ }
62
+ // MongoDB sanitization (conditionally enabled)
63
+ if (config?.mongoSanitize !== false) {
64
+ this.mongoSanitize({ replaceWith: "_" });
65
+ }
66
+ // XSS protection (conditionally enabled)
67
+ if (config?.xss !== false) {
68
+ this.xss({ whiteList: { a: ["href", "title"] } });
69
+ }
70
+ // Morgan logging (conditionally enabled)
71
+ if (config?.morgan !== false) {
72
+ this.morgan({
73
+ skip: (_req, res) => res.statusCode < 400,
74
+ });
75
+ }
76
+ // Rate limiting (conditionally enabled)
77
+ if (config?.rateLimit !== false) {
78
+ this.rateLimit({
79
+ windowMs: 15 * 60 * 1000,
80
+ max: 100,
81
+ message: "Too many requests, please try again later.",
82
+ standardHeaders: true,
83
+ });
84
+ }
85
+ // Slow down middleware (conditionally enabled)
86
+ if (config?.slowDown !== false) {
87
+ this.slowDown({
88
+ windowMs: 15 * 60 * 1000,
89
+ delayAfter: 100,
90
+ delayMs: (used, req) => {
91
+ const delayAfter = req.slowDown.limit;
92
+ return (used - delayAfter) * 500;
93
+ },
94
+ });
95
+ }
96
+ if (config?.bruteForce !== false) {
97
+ this.brute();
98
+ }
99
+ this.logger.debug("middleware", "✅ Default security middleware enabled based on configuration");
34
100
  }
35
101
  register(middleware, // Accept any type for compatibility
36
102
  options = {}) {
@@ -72,44 +138,35 @@ class XyPrissMiddleware {
72
138
  }
73
139
  cors(config = {}) {
74
140
  const corsConfig = typeof config === "object" ? config : {};
75
- const corsMiddleware = index.BuiltInMiddleware.cors(corsConfig);
141
+ const corsMiddleware = BuiltInMiddleware.BuiltInMiddleware.cors(corsConfig);
76
142
  return this.registerBuiltIn("cors", corsMiddleware, "high");
77
143
  }
78
144
  rateLimit(config = {}) {
79
145
  const rateLimitConfig = typeof config === "object" ? config : {};
80
- const rateLimitMiddleware = index.BuiltInMiddleware.rateLimit(rateLimitConfig);
146
+ const rateLimitMiddleware = BuiltInMiddleware.BuiltInMiddleware.rateLimit(rateLimitConfig);
81
147
  return this.registerBuiltIn("rateLimit", rateLimitMiddleware, "high");
82
148
  }
83
149
  helmet(config = {}) {
84
150
  const helmetConfig = typeof config === "object" ? config : {};
85
- const helmetMiddleware = index.BuiltInMiddleware.helmet(helmetConfig);
151
+ const helmetMiddleware = BuiltInMiddleware.BuiltInMiddleware.helmet(helmetConfig);
86
152
  return this.registerBuiltIn("helmet", helmetMiddleware, "critical");
87
153
  }
88
154
  csrf(config = {}) {
89
155
  const csrfConfig = typeof config === "object" ? config : {};
90
- const csrfMiddleware = index.BuiltInMiddleware.csrf(csrfConfig);
156
+ const csrfMiddleware = BuiltInMiddleware.BuiltInMiddleware.csrf(csrfConfig);
91
157
  return this.registerBuiltIn("csrf", csrfMiddleware, "high");
92
158
  }
93
159
  compression(config = {}) {
94
160
  const compressionConfig = typeof config === "object" ? config : {};
95
- const compressionMiddleware = index.BuiltInMiddleware.compression(compressionConfig);
161
+ const compressionMiddleware = BuiltInMiddleware.BuiltInMiddleware.compression(compressionConfig);
96
162
  return this.registerBuiltIn("compression", compressionMiddleware, "low");
97
163
  }
98
- /**
99
- * Add Express Validator middleware
100
- */
101
- validator(config = {}) {
102
- const validatorConfig = typeof config === "object" ? config : {};
103
- const validatorMiddleware = index.BuiltInMiddleware.validator(validatorConfig);
104
- // Register the simplified validator middleware
105
- return this.registerBuiltIn("validator", validatorMiddleware, "high");
106
- }
107
164
  /**
108
165
  * Add HPP (HTTP Parameter Pollution) protection
109
166
  */
110
167
  hpp(config = {}) {
111
168
  const hppConfig = typeof config === "object" ? config : {};
112
- const hppMiddleware = index.BuiltInMiddleware.hpp(hppConfig);
169
+ const hppMiddleware = BuiltInMiddleware.BuiltInMiddleware.hpp(hppConfig);
113
170
  return this.registerBuiltIn("hpp", hppMiddleware, "high");
114
171
  }
115
172
  /**
@@ -117,7 +174,7 @@ class XyPrissMiddleware {
117
174
  */
118
175
  mongoSanitize(config = {}) {
119
176
  const mongoConfig = typeof config === "object" ? config : {};
120
- const mongoMiddleware = index.BuiltInMiddleware.mongoSanitize(mongoConfig);
177
+ const mongoMiddleware = BuiltInMiddleware.BuiltInMiddleware.mongoSanitize(mongoConfig);
121
178
  return this.registerBuiltIn("mongoSanitize", mongoMiddleware, "high");
122
179
  }
123
180
  /**
@@ -125,7 +182,7 @@ class XyPrissMiddleware {
125
182
  */
126
183
  xss(config = {}) {
127
184
  const xssConfig = typeof config === "object" ? config : {};
128
- const xssMiddleware = index.BuiltInMiddleware.xss(xssConfig);
185
+ const xssMiddleware = BuiltInMiddleware.BuiltInMiddleware.xss(xssConfig);
129
186
  return this.registerBuiltIn("xss", xssMiddleware, "high");
130
187
  }
131
188
  /**
@@ -133,7 +190,7 @@ class XyPrissMiddleware {
133
190
  */
134
191
  morgan(config = {}) {
135
192
  const morganConfig = typeof config === "object" ? config : {};
136
- const morganMiddleware = index.BuiltInMiddleware.morgan(morganConfig);
193
+ const morganMiddleware = BuiltInMiddleware.BuiltInMiddleware.morgan(morganConfig);
137
194
  return this.registerBuiltIn("morgan", morganMiddleware, "low");
138
195
  }
139
196
  /**
@@ -141,15 +198,15 @@ class XyPrissMiddleware {
141
198
  */
142
199
  slowDown(config = {}) {
143
200
  const slowDownConfig = typeof config === "object" ? config : {};
144
- const slowDownMiddleware = index.BuiltInMiddleware.slowDown(slowDownConfig);
201
+ const slowDownMiddleware = BuiltInMiddleware.BuiltInMiddleware.slowDown(slowDownConfig);
145
202
  return this.registerBuiltIn("slowDown", slowDownMiddleware, "high");
146
203
  }
147
204
  /**
148
205
  * Add Express Brute middleware for brute force protection
149
206
  */
150
- brute(config = {}) {
207
+ brute(config) {
151
208
  const bruteConfig = typeof config === "object" ? config : {};
152
- const bruteMiddleware = index.BuiltInMiddleware.brute(bruteConfig);
209
+ const bruteMiddleware = BuiltInMiddleware.BuiltInMiddleware.brute(bruteConfig);
153
210
  return this.registerBuiltIn("brute", bruteMiddleware, "critical");
154
211
  }
155
212
  /**
@@ -157,7 +214,7 @@ class XyPrissMiddleware {
157
214
  */
158
215
  multer(config = {}) {
159
216
  const multerConfig = typeof config === "object" ? config : {};
160
- const multerInstance = index.BuiltInMiddleware.multer(multerConfig);
217
+ const multerInstance = BuiltInMiddleware.BuiltInMiddleware.multer(multerConfig);
161
218
  // Use multer.any() as the default middleware
162
219
  return this.registerBuiltIn("multer", multerInstance.any(), "normal");
163
220
  }
@@ -1 +1 @@
1
- {"version":3,"file":"XyPrissMiddlewareAPI.js","sources":["../../../../src/middleware/XyPrissMiddlewareAPI.ts"],"sourcesContent":[null],"names":["Logger","BuiltInMiddleware"],"mappings":"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"}
1
+ {"version":3,"file":"XyPrissMiddlewareAPI.js","sources":["../../../../src/middleware/XyPrissMiddlewareAPI.ts"],"sourcesContent":[null],"names":["Logger","BuiltInMiddleware"],"mappings":";;;;;AAAA;;;AAGG;AAQH;MAca,iBAAiB,CAAA;IAS1B,WACI,CAAA,GAAQ,EACR,cAA+D,EAAA;QAT3D,IAAoB,CAAA,oBAAA,GAA2B,EAAE,CAAC;QAClD,IAAiB,CAAA,iBAAA,GAAG,CAAC,CAAC;QAEtB,IAAc,CAAA,cAAA,GAET,IAAI,CAAC;AAMd,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,IAAI,CAAC;AAC7C,QAAA,IAAI,CAAC,MAAM,GAAG,IAAIA,aAAM,CAAC;AACrB,YAAA,UAAU,EAAE;AACR,gBAAA,UAAU,EAAE,IAAI;AACnB,aAAA;AACJ,SAAA,CAAC,CAAC;;;KAIN;AAED;;AAEG;AACI,IAAA,oBAAoB,CACvB,cAA+D,EAAA;QAE/D,IAAI,cAAc,EAAE;AAChB,YAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;SACxC;;QAGD,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAClC;AAED;;AAEG;IACK,uBAAuB,GAAA;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,YAAY,EACZ,4CAA4C,CAC/C,CAAC;;AAGF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;;AAGnC,QAAA,IAAI,MAAM,EAAE,MAAM,KAAK,KAAK,EAAE;YAC1B,IAAI,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;SACxC;;AAGD,QAAA,IAAI,MAAM,EAAE,IAAI,KAAK,KAAK,EAAE;YACxB,MAAM,UAAU,GACZ,MAAM,EAAE,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI;AAClC,kBAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AAClB,kBAAE,MAAM,CAAC,IAAI,CAAC;AACtB,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACzB;;AAGD,QAAA,IAAI,MAAM,EAAE,WAAW,KAAK,KAAK,EAAE;YAC/B,IAAI,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;SACzC;;AAGD,QAAA,IAAI,MAAM,EAAE,GAAG,KAAK,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;SACnD;;AAGD,QAAA,IAAI,MAAM,EAAE,aAAa,KAAK,KAAK,EAAE;YACjC,IAAI,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;SAC5C;;AAGD,QAAA,IAAI,MAAM,EAAE,GAAG,KAAK,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;SACrD;;AAGD,QAAA,IAAI,MAAM,EAAE,MAAM,KAAK,KAAK,EAAE;YAC1B,IAAI,CAAC,MAAM,CAAC;AACR,gBAAA,IAAI,EAAE,CAAC,IAAS,EAAE,GAAQ,KAAK,GAAG,CAAC,UAAU,GAAG,GAAG;AACtD,aAAA,CAAC,CAAC;SACN;;AAGD,QAAA,IAAI,MAAM,EAAE,SAAS,KAAK,KAAK,EAAE;YAC7B,IAAI,CAAC,SAAS,CAAC;AACX,gBAAA,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;AACxB,gBAAA,GAAG,EAAE,GAAG;AACR,gBAAA,OAAO,EAAE,4CAA4C;AACrD,gBAAA,eAAe,EAAE,IAAI;AACxB,aAAA,CAAC,CAAC;SACN;;AAGD,QAAA,IAAI,MAAM,EAAE,QAAQ,KAAK,KAAK,EAAE;YAC5B,IAAI,CAAC,QAAQ,CAAC;AACV,gBAAA,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;AACxB,gBAAA,UAAU,EAAE,GAAG;AACf,gBAAA,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAI;AACnB,oBAAA,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtC,oBAAA,OAAO,CAAC,IAAI,GAAG,UAAU,IAAI,GAAG,CAAC;iBACpC;AACJ,aAAA,CAAC,CAAC;SACN;AACD,QAAA,IAAI,MAAM,EAAE,UAAU,KAAK,KAAK,EAAE;YAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;SAChB;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,YAAY,EACZ,8DAA8D,CACjE,CAAC;KACL;IAED,QAAQ,CACJ,UAAe;AACf,IAAA,OAAA,GAII,EAAE,EAAA;QAEN,MAAM,EAAE,GAAG,CAAc,WAAA,EAAA,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACpD,MAAM,IAAI,GACN,OAAO,CAAC,IAAI,IAAI,CAAA,kBAAA,EAAqB,IAAI,CAAC,iBAAiB,CAAA,CAAE,CAAC;AAElE,QAAA,MAAM,UAAU,GAAyB;YACrC,EAAE;YACF,IAAI;YACJ,UAAU;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,QAAQ;AACtC,YAAA,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,OAAO,CAAC,MAAM;SACzB,CAAC;AAEF,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AAEjC,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,YAAY,EACZ,CAA4B,yBAAA,EAAA,IAAI,eAAe,UAAU,CAAC,QAAQ,CAAA,CAAA,CAAG,CACxE,CAAC;AACF,QAAA,OAAO,IAAI,CAAC;KACf;IAED,QAAQ,CAAC,SAAmC,EAAE,EAAA;QAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,YAAY,EACZ,8CAA8C,CACjD,CAAC;;AAGF,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE;AACzB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAC9B;AACD,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC1B;AACD,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SACpC;AACD,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC1B;AACD,QAAA,IAAI,MAAM,CAAC,WAAW,KAAK,KAAK,EAAE;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;SACxC;AACD,QAAA,OAAO,IAAI,CAAC;KACf;IAED,IAAI,CAAC,SAA2C,EAAE,EAAA;AAC9C,QAAA,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;QAC5D,MAAM,cAAc,GAAGC,mCAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;KAC/D;IAED,SAAS,CACL,SAAgD,EAAE,EAAA;AAElD,QAAA,MAAM,eAAe,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;QACjE,MAAM,mBAAmB,GACrBA,mCAAiB,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAEjD,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC;KACzE;IAED,MAAM,CACF,SAA6C,EAAE,EAAA;AAE/C,QAAA,MAAM,YAAY,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;QAC9D,MAAM,gBAAgB,GAAGA,mCAAiB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAEhE,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;KACvE;IAED,IAAI,CAAC,SAA2C,EAAE,EAAA;AAC9C,QAAA,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;QAC5D,MAAM,cAAc,GAAGA,mCAAiB,CAAC,IAAI,CAAC,UAAiB,CAAC,CAAC;QAEjE,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;KAC/D;IAED,WAAW,CACP,SAAkD,EAAE,EAAA;AAEpD,QAAA,MAAM,iBAAiB,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;QACnE,MAAM,qBAAqB,GACvBA,mCAAiB,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAErD,OAAO,IAAI,CAAC,eAAe,CACvB,aAAa,EACb,qBAAqB,EACrB,KAAK,CACR,CAAC;KACL;AAED;;AAEG;IACH,GAAG,CACC,SAAsD,EAAE,EAAA;AAExD,QAAA,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;QAC3D,MAAM,aAAa,GAAGA,mCAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEvD,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;KAC7D;AAED;;AAEG;IACH,aAAa,CACT,SAAgE,EAAE,EAAA;AAElE,QAAA,MAAM,WAAW,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;QAC7D,MAAM,eAAe,GAAGA,mCAAiB,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAErE,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;KACzE;AAED;;AAEG;IACH,GAAG,CACC,SAAsD,EAAE,EAAA;AAExD,QAAA,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;QAC3D,MAAM,aAAa,GAAGA,mCAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEvD,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;KAC7D;AAED;;AAEG;IACH,MAAM,CACF,SAAyD,EAAE,EAAA;AAE3D,QAAA,MAAM,YAAY,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;QAC9D,MAAM,gBAAgB,GAAGA,mCAAiB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAEhE,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;KAClE;AAED;;AAEG;IACH,QAAQ,CACJ,SAA2D,EAAE,EAAA;AAE7D,QAAA,MAAM,cAAc,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;QAChE,MAAM,kBAAkB,GAAGA,mCAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAEtE,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;KACvE;AAED;;AAEG;AACH,IAAA,KAAK,CACD,MAAsD,EAAA;AAEtD,QAAA,MAAM,WAAW,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;QAC7D,MAAM,eAAe,GAAGA,mCAAiB,CAAC,KAAK,CAAC,WAAkB,CAAC,CAAC;QAEpE,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;KACrE;AAED;;AAEG;IACH,MAAM,CACF,SAAyD,EAAE,EAAA;AAE3D,QAAA,MAAM,YAAY,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;QAC9D,MAAM,cAAc,GAAGA,mCAAiB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;;AAG9D,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,cAAc,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;KACzE;IAED,KAAK,GAAA;AACD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;AAC/C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAC5C,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CACnB,CAAC,MAAM,CAAC;AACT,QAAA,MAAM,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;AACjC,QAAA,MAAM,MAAM,GAAG;AACX,YAAA,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;iBAC/D,MAAM;AACX,YAAA,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CACrC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,SAAS,CAC9B,CAAC,MAAM;SACX,CAAC;QAEF,OAAO;YACH,KAAK;YACL,OAAO;YACP,QAAQ;YACR,MAAM;AACN,YAAA,UAAU,EAAE;AACR,gBAAA,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CACtC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,UAAU,CACnC,CAAC,MAAM;AACR,gBAAA,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAClC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,MAAM,CAC/B,CAAC,MAAM;AACR,gBAAA,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CACpC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,QAAQ,CACjC,CAAC,MAAM;AACR,gBAAA,GAAG,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CACjC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,KAAK,CAC9B,CAAC,MAAM;AACX,aAAA;SACJ,CAAC;KACL;IAED,IAAI,GAAA;QACA,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;YACzC,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,IAAI,EAAE,CAAC,CAAC,IAAI;AACf,SAAA,CAAC,CAAC,CAAC;KACP;IAED,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,2BAA2B,CAAC,CAAC;AAC7D,QAAA,OAAO,IAAI,CAAC;KACf;IAED,QAAQ,GAAA;AACJ,QAAA,MAAM,aAAa,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAClE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAClE,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,YAAY,EACZ,0CAA0C,CAC7C,CAAC;AACF,QAAA,OAAO,IAAI,CAAC;KACf;;AAGD,IAAA,UAAU,CAAC,EAAU,EAAA;AACjB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACtE,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YACd,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,YAAY,EACZ,CAAgC,6BAAA,EAAA,EAAE,CAAE,CAAA,CACvC,CAAC;SACL;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,MAAM,CAAC,EAAU,EAAA;AACb,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,IAAI,UAAU,EAAE;AACZ,YAAA,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAyB,sBAAA,EAAA,EAAE,CAAE,CAAA,CAAC,CAAC;SAClE;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,OAAO,CAAC,EAAU,EAAA;AACd,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,IAAI,UAAU,EAAE;AACZ,YAAA,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAA0B,uBAAA,EAAA,EAAE,CAAE,CAAA,CAAC,CAAC;SACnE;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,OAAO,CAAC,EAAW,EAAA;QACf,IAAI,EAAE,EAAE;AACJ,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAC7C,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CACrB,CAAC;AACF,YAAA,OAAO,UAAU;AACb,kBAAE;oBACI,EAAE,EAAE,UAAU,CAAC,EAAE;oBACjB,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,QAAQ,EAAE,UAAU,CAAC,QAAQ;oBAC7B,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,MAAM,EAAE,UAAU,CAAC,MAAM;AAC5B,iBAAA;kBACD,IAAI,CAAC;SACd;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;KACtB;IAED,QAAQ,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;KACvB;IAED,SAAS,GAAA;QACL,OAAO;AACH,YAAA,eAAe,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM;AACjD,YAAA,iBAAiB,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAC/C,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CACnB,CAAC,MAAM;SACX,CAAC;KACL;;AAGO,IAAA,eAAe,CACnB,IAAY,EACZ,UAAoB,EACpB,QAA4B,EAAA;QAE5B,MAAM,EAAE,GAAG,CAAA,QAAA,EAAW,IAAI,CAAA,CAAA,EAAI,EAAE,IAAI,CAAC,iBAAiB,CAAA,CAAE,CAAC;AAEzD,QAAA,MAAM,UAAU,GAAyB;YACrC,EAAE;YACF,IAAI;YACJ,UAAU;AACV,YAAA,OAAO,EAAE,IAAI;YACb,QAAQ;AACR,YAAA,IAAI,EAAE,SAAS;SAClB,CAAC;AAEF,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AAEjC,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,YAAY,EACZ,CAAA,gCAAA,EAAmC,IAAI,CAAA,YAAA,EAAe,QAAQ,CAAA,CAAA,CAAG,CACpE,CAAC;AACF,QAAA,OAAO,IAAI,CAAC;KACf;AAEO,IAAA,eAAe,CAAC,UAAgC,EAAA;AACpD,QAAA,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE;YAChD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;SACvC;KACJ;AACJ;;;;"}
@@ -0,0 +1,320 @@
1
+ 'use strict';
2
+
3
+ var helmet = require('helmet');
4
+ var cors = require('cors');
5
+ var rateLimit = require('express-rate-limit');
6
+ var compression = require('compression');
7
+ var hpp = require('hpp');
8
+ var mongoSanitize = require('express-mongo-sanitize');
9
+ var xss = require('xss');
10
+ var morgan = require('morgan');
11
+ var slowDown = require('express-slow-down');
12
+ var ExpressBrute = require('express-brute');
13
+ var multer = require('multer');
14
+ var csrfCsrf = require('csrf-csrf');
15
+
16
+ /**
17
+ * XyPriss Built-in Middleware
18
+ * Wrappers around popular middleware libraries
19
+ */
20
+ class BuiltInMiddleware {
21
+ /**
22
+ * Get Helmet middleware for security headers
23
+ */
24
+ static helmet(options = {}) {
25
+ const defaultOptions = {
26
+ contentSecurityPolicy: {
27
+ directives: {
28
+ defaultSrc: ["'self'"],
29
+ scriptSrc: ["'self'"],
30
+ styleSrc: ["'self'", "'unsafe-inline'"],
31
+ imgSrc: ["'self'", "data:"],
32
+ fontSrc: ["'self'"],
33
+ },
34
+ },
35
+ crossOriginEmbedderPolicy: true,
36
+ crossOriginOpenerPolicy: true,
37
+ crossOriginResourcePolicy: { policy: "same-origin" },
38
+ dnsPrefetchControl: { allow: false },
39
+ frameguard: { action: "deny" },
40
+ hidePoweredBy: true,
41
+ hsts: {
42
+ maxAge: 31536000,
43
+ includeSubDomains: true,
44
+ preload: false,
45
+ },
46
+ ieNoOpen: true,
47
+ noSniff: true,
48
+ originAgentCluster: true,
49
+ permittedCrossDomainPolicies: false,
50
+ referrerPolicy: { policy: "strict-origin-when-cross-origin" },
51
+ xssFilter: true,
52
+ };
53
+ const config = { ...defaultOptions, ...options };
54
+ return helmet(config);
55
+ }
56
+ /**
57
+ * Get CORS middleware
58
+ *
59
+ * By default, allows all headers to be developer-friendly.
60
+ * Developers can restrict headers via config if needed for production.
61
+ */
62
+ static cors(options = {}) {
63
+ const defaultOptions = {
64
+ origin: true,
65
+ methods: ["GET", "HEAD", "PUT", "PATCH", "POST", "DELETE"],
66
+ // Allow all headers by default - developers can restrict via config
67
+ // This prevents CORS issues during development
68
+ credentials: false,
69
+ maxAge: 86400, // 24 hours
70
+ };
71
+ const config = { ...defaultOptions, ...options };
72
+ return cors(config);
73
+ }
74
+ /**
75
+ * Get Rate Limiting middleware
76
+ */
77
+ static rateLimit(options = {}) {
78
+ const defaultOptions = {
79
+ windowMs: 15 * 60 * 1000, // 15 minutes
80
+ max: 100, // limit each IP to 100 requests per windowMs
81
+ message: {
82
+ error: "Too many requests from this IP, please try again later.",
83
+ retryAfter: "Please try again later.",
84
+ },
85
+ standardHeaders: true,
86
+ legacyHeaders: false,
87
+ handler: (req, res, next, options) => {
88
+ const message = options?.message;
89
+ if (typeof message === 'string') {
90
+ res.status(429).json({
91
+ error: "Rate limit exceeded",
92
+ message: message,
93
+ retryAfter: Math.ceil((options?.windowMs || 60000) / 1000) || 900,
94
+ });
95
+ }
96
+ else if (typeof message === 'object' && message !== null) {
97
+ res.status(429).json({
98
+ ...message,
99
+ retryAfter: Math.ceil((options?.windowMs || 60000) / 1000) || 900,
100
+ });
101
+ }
102
+ else {
103
+ res.status(429).json({
104
+ error: "Too many requests",
105
+ message: "Rate limit exceeded. Please try again later.",
106
+ retryAfter: Math.ceil((options?.windowMs || 60000) / 1000) || 900,
107
+ });
108
+ }
109
+ },
110
+ };
111
+ const config = { ...defaultOptions, ...options };
112
+ return rateLimit(config);
113
+ }
114
+ /**
115
+ * Get Compression middleware
116
+ */
117
+ static compression(options = {}) {
118
+ const defaultOptions = {
119
+ level: 6,
120
+ threshold: 1024, // Only compress responses >= 1KB
121
+ filter: (req, res) => {
122
+ // Don't compress responses with this request header
123
+ if (req.headers["x-no-compression"]) {
124
+ return false;
125
+ }
126
+ // Fallback to standard filter function
127
+ return compression.filter(req, res);
128
+ },
129
+ };
130
+ const config = { ...defaultOptions, ...options };
131
+ return compression(config);
132
+ }
133
+ /**
134
+ * CSRF protection middleware using csrf-csrf library
135
+ */
136
+ static csrf(options = {
137
+ getSecret: () => "e6ac40fffc5e9399eab10f5b84fcba2c923e7f74a73b76b56c11b722671eea5e",
138
+ getSessionIdentifier: (req) => req.session.id,
139
+ }) {
140
+ const defaultOptions = {
141
+ cookieName: "__Host-psifi.x-csrf-token",
142
+ cookieOptions: {
143
+ httpOnly: true,
144
+ sameSite: "strict",
145
+ secure: process.env.NODE_ENV === "production",
146
+ maxAge: 3600000, // 1 hour
147
+ },
148
+ size: 64,
149
+ ignoredMethods: ["GET", "HEAD", "OPTIONS"],
150
+ getTokenFromRequest: (req) => {
151
+ return (req.headers["x-csrf-token"] ||
152
+ req.body?._csrf ||
153
+ req.query?._csrf);
154
+ },
155
+ };
156
+ const config = { ...defaultOptions, ...options };
157
+ const { doubleCsrfProtection } = csrfCsrf.doubleCsrf(config);
158
+ // Return the protection middleware
159
+ return doubleCsrfProtection;
160
+ }
161
+ /**
162
+ * Get HPP (HTTP Parameter Pollution) protection middleware
163
+ */
164
+ static hpp(options = {}) {
165
+ const defaultOptions = {
166
+ whitelist: ["tags", "categories"], // Allow arrays for these parameters
167
+ };
168
+ const config = { ...defaultOptions, ...options };
169
+ return hpp(config);
170
+ }
171
+ /**
172
+ * Get MongoDB injection protection middleware
173
+ */
174
+ static mongoSanitize(options = {}) {
175
+ const defaultOptions = {
176
+ replaceWith: "_",
177
+ onSanitize: (key, value) => {
178
+ console.warn(`[MongoSanitize] Sanitized key: ${key}, value: ${value}`);
179
+ },
180
+ };
181
+ const config = { ...defaultOptions, ...options };
182
+ return mongoSanitize(config);
183
+ }
184
+ /**
185
+ * Get XSS protection middleware
186
+ */
187
+ static xss(options = {}) {
188
+ const defaultOptions = {
189
+ whiteList: {
190
+ a: ["href", "title"],
191
+ b: [],
192
+ i: [],
193
+ strong: [],
194
+ em: [],
195
+ },
196
+ };
197
+ const config = { ...defaultOptions, ...options };
198
+ return (req, _res, next) => {
199
+ // Sanitize request body
200
+ if (req.body) {
201
+ req.body = this.sanitizeObject(req.body, config);
202
+ }
203
+ // Sanitize query parameters
204
+ if (req.query) {
205
+ req.query = this.sanitizeObject(req.query, config);
206
+ }
207
+ next();
208
+ };
209
+ }
210
+ /**
211
+ * Get Morgan logging middleware
212
+ */
213
+ static morgan(options = {}) {
214
+ const defaultFormat = options.format || "combined";
215
+ const defaultOptions = {
216
+ skip: (_req, res) => res.statusCode < 400, // Only log errors by default
217
+ stream: process.stdout,
218
+ };
219
+ const config = { ...defaultOptions, ...options };
220
+ return morgan(defaultFormat, config);
221
+ }
222
+ /**
223
+ * Get Slow Down middleware for progressive delays
224
+ */
225
+ static slowDown(options = {}) {
226
+ const defaultOptions = {
227
+ windowMs: 15 * 60 * 1000, // 15 minutes
228
+ delayAfter: 2, // Allow 2 requests per windowMs without delay
229
+ delayMs: 500, // Add 500ms delay per request after delayAfter
230
+ maxDelayMs: 20000, // Maximum delay of 20 seconds
231
+ skipFailedRequests: false,
232
+ skipSuccessfulRequests: false,
233
+ };
234
+ const config = { ...defaultOptions, ...options };
235
+ return slowDown(config);
236
+ }
237
+ /**
238
+ * Get Express Brute middleware for brute force protection
239
+ */
240
+ static brute(options = {
241
+ prefix: "nehonix.xypriss.brute",
242
+ }) {
243
+ const store = new ExpressBrute.MemoryStore();
244
+ const defaultOptions = {
245
+ freeRetries: 2,
246
+ minWait: 5 * 60 * 1000, // 5 minutes
247
+ maxWait: 60 * 60 * 1000, // 1 hour
248
+ lifetime: 24 * 60 * 60, // 1 day (in seconds)
249
+ failCallback: (_req, res, _next, nextValidRequestDate) => {
250
+ res.status(429).json({
251
+ error: "Too many failed attempts",
252
+ message: "Account temporarily locked due to too many failed attempts",
253
+ nextValidRequestDate: nextValidRequestDate,
254
+ });
255
+ },
256
+ };
257
+ const config = { ...defaultOptions, ...options };
258
+ const bruteforce = new ExpressBrute(store, config);
259
+ return bruteforce.prevent;
260
+ }
261
+ /**
262
+ * Get Multer middleware for file uploads
263
+ */
264
+ static multer(options = {}) {
265
+ const defaultOptions = {
266
+ limits: {
267
+ fileSize: 5 * 1024 * 1024, // 5MB limit
268
+ files: 5, // Maximum 5 files
269
+ },
270
+ fileFilter: (_req, file, cb) => {
271
+ // Allow only specific file types
272
+ const allowedTypes = /jpeg|jpg|png|gif|pdf|doc|docx/;
273
+ const extname = allowedTypes.test(file.originalname.toLowerCase());
274
+ const mimetype = allowedTypes.test(file.mimetype);
275
+ if (mimetype && extname) {
276
+ return cb(null, true);
277
+ }
278
+ else {
279
+ cb(new Error("Invalid file type. Only images and documents are allowed."));
280
+ }
281
+ },
282
+ };
283
+ const config = { ...defaultOptions, ...options };
284
+ return multer(config);
285
+ }
286
+ /**
287
+ * Get all default security middleware
288
+ */
289
+ static security(options = {}) {
290
+ return {
291
+ helmet: this.helmet(options.helmet),
292
+ cors: this.cors(options.cors),
293
+ rateLimit: this.rateLimit(options.rateLimit),
294
+ compression: this.compression(options.compression),
295
+ csrf: this.csrf(options.csrf),
296
+ };
297
+ }
298
+ // Helper method for XSS sanitization
299
+ static sanitizeObject(obj, config) {
300
+ if (typeof obj === "string") {
301
+ return xss(obj, config);
302
+ }
303
+ else if (Array.isArray(obj)) {
304
+ return obj.map((item) => this.sanitizeObject(item, config));
305
+ }
306
+ else if (obj && typeof obj === "object") {
307
+ const sanitized = {};
308
+ for (const key in obj) {
309
+ if (obj.hasOwnProperty(key)) {
310
+ sanitized[key] = this.sanitizeObject(obj[key], config);
311
+ }
312
+ }
313
+ return sanitized;
314
+ }
315
+ return obj;
316
+ }
317
+ }
318
+
319
+ exports.BuiltInMiddleware = BuiltInMiddleware;
320
+ //# sourceMappingURL=BuiltInMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuiltInMiddleware.js","sources":["../../../../../src/middleware/built-in/BuiltInMiddleware.ts"],"sourcesContent":[null],"names":["doubleCsrf"],"mappings":"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"}