xypriss 2.3.3 → 2.3.5

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 (105) hide show
  1. package/README.md +28 -1
  2. package/dist/cjs/mods/security/src/algorithms/hash-algorithms.js +1 -1
  3. package/dist/cjs/mods/security/src/components/attestation.js +1 -1
  4. package/dist/cjs/mods/security/src/components/cache/UFSIMC.js +1 -1
  5. package/dist/cjs/mods/security/src/components/cache/cacheSys.utils.js +1 -1
  6. package/dist/cjs/mods/security/src/components/cache/index.js +1 -1
  7. package/dist/cjs/mods/security/src/components/canary-tokens.js +1 -1
  8. package/dist/cjs/mods/security/src/components/fortified-function/index.js +1 -1
  9. package/dist/cjs/mods/security/src/components/fortified-function/security/security-handler.js +1 -1
  10. package/dist/cjs/mods/security/src/components/memory-hard.js +1 -1
  11. package/dist/cjs/mods/security/src/components/post-quantum.js +1 -1
  12. package/dist/cjs/mods/security/src/components/secure-array/crypto/ArrayCryptoHandler.js +1 -1
  13. package/dist/cjs/mods/security/src/components/secure-array/index.js +1 -1
  14. package/dist/cjs/mods/security/src/components/secure-array/types/index.js +1 -1
  15. package/dist/cjs/mods/security/src/components/secure-object/encryption/crypto-handler.js +1 -1
  16. package/dist/cjs/mods/security/src/components/secure-object/index.js +1 -1
  17. package/dist/cjs/mods/security/src/components/secure-serialization.js +1 -1
  18. package/dist/cjs/mods/security/src/components/secure-string/advanced/quantum-safe.js +1 -1
  19. package/dist/cjs/mods/security/src/components/tamper-evident-logging.js +1 -1
  20. package/dist/cjs/mods/security/src/core/crypto.js +1 -1
  21. package/dist/cjs/mods/security/src/core/hash/hash-core.js +1 -1
  22. package/dist/cjs/mods/security/src/core/hash/hash-security.js +1 -1
  23. package/dist/cjs/mods/security/src/core/keys/keys-core.js +1 -1
  24. package/dist/cjs/mods/security/src/core/password/index.js +1 -1
  25. package/dist/cjs/mods/security/src/core/password/password-algorithms.js +1 -1
  26. package/dist/cjs/mods/security/src/core/password/password-core.js +1 -1
  27. package/dist/cjs/mods/security/src/core/password/password-generator.js +1 -1
  28. package/dist/cjs/mods/security/src/core/password/password-utils.js +1 -1
  29. package/dist/cjs/mods/security/src/helpers/Uint8Array.js +2 -2
  30. package/dist/cjs/mods/security/src/helpers/Uint8Array.js.map +1 -1
  31. package/dist/cjs/mods/security/src/index.js +1 -1
  32. package/dist/cjs/mods/security/src/utils/dataConverter.js +2 -2
  33. package/dist/cjs/mods/security/src/utils/dataConverter.js.map +1 -1
  34. package/dist/cjs/src/cluster/modules/CrossPlatformMemory.js +11 -9
  35. package/dist/cjs/src/cluster/modules/CrossPlatformMemory.js.map +1 -1
  36. package/dist/cjs/src/encryption/EncryptionService.js +1 -1
  37. package/dist/cjs/src/index.js +2 -0
  38. package/dist/cjs/src/index.js.map +1 -1
  39. package/dist/cjs/src/middleware/built-in/BuiltInMiddleware.js +16 -0
  40. package/dist/cjs/src/middleware/built-in/BuiltInMiddleware.js.map +1 -1
  41. package/dist/cjs/src/plugins/modules/index.js +1 -1
  42. package/dist/cjs/src/server/FastServer.js +18 -1
  43. package/dist/cjs/src/server/FastServer.js.map +1 -1
  44. package/dist/cjs/src/server/core/HttpServer.js +16 -8
  45. package/dist/cjs/src/server/core/HttpServer.js.map +1 -1
  46. package/dist/cjs/src/server/core/XyprissApp.js +8 -0
  47. package/dist/cjs/src/server/core/XyprissApp.js.map +1 -1
  48. package/dist/cjs/src/server/handlers/templates/notFoundTemp.js +1 -1
  49. package/dist/cjs/src/server/utils/trustProxy.js +446 -0
  50. package/dist/cjs/src/server/utils/trustProxy.js.map +1 -0
  51. package/dist/cjs/src/server/utils/wildcardMatcher.js +92 -0
  52. package/dist/cjs/src/server/utils/wildcardMatcher.js.map +1 -0
  53. package/dist/esm/mods/security/src/algorithms/hash-algorithms.js +1 -1
  54. package/dist/esm/mods/security/src/components/attestation.js +1 -1
  55. package/dist/esm/mods/security/src/components/cache/UFSIMC.js +1 -1
  56. package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js +1 -1
  57. package/dist/esm/mods/security/src/components/cache/index.js +1 -1
  58. package/dist/esm/mods/security/src/components/canary-tokens.js +1 -1
  59. package/dist/esm/mods/security/src/components/fortified-function/index.js +1 -1
  60. package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js +1 -1
  61. package/dist/esm/mods/security/src/components/memory-hard.js +1 -1
  62. package/dist/esm/mods/security/src/components/post-quantum.js +1 -1
  63. package/dist/esm/mods/security/src/components/secure-array/crypto/ArrayCryptoHandler.js +1 -1
  64. package/dist/esm/mods/security/src/components/secure-array/index.js +1 -1
  65. package/dist/esm/mods/security/src/components/secure-array/types/index.js +1 -1
  66. package/dist/esm/mods/security/src/components/secure-object/encryption/crypto-handler.js +1 -1
  67. package/dist/esm/mods/security/src/components/secure-object/index.js +1 -1
  68. package/dist/esm/mods/security/src/components/secure-serialization.js +1 -1
  69. package/dist/esm/mods/security/src/components/secure-string/advanced/quantum-safe.js +1 -1
  70. package/dist/esm/mods/security/src/components/tamper-evident-logging.js +1 -1
  71. package/dist/esm/mods/security/src/core/crypto.js +1 -1
  72. package/dist/esm/mods/security/src/core/hash/hash-core.js +1 -1
  73. package/dist/esm/mods/security/src/core/hash/hash-security.js +1 -1
  74. package/dist/esm/mods/security/src/core/keys/keys-core.js +1 -1
  75. package/dist/esm/mods/security/src/core/password/index.js +1 -1
  76. package/dist/esm/mods/security/src/core/password/password-algorithms.js +1 -1
  77. package/dist/esm/mods/security/src/core/password/password-core.js +1 -1
  78. package/dist/esm/mods/security/src/core/password/password-generator.js +1 -1
  79. package/dist/esm/mods/security/src/core/password/password-utils.js +1 -1
  80. package/dist/esm/mods/security/src/helpers/Uint8Array.js +2 -2
  81. package/dist/esm/mods/security/src/helpers/Uint8Array.js.map +1 -1
  82. package/dist/esm/mods/security/src/index.js +1 -1
  83. package/dist/esm/mods/security/src/utils/dataConverter.js +2 -2
  84. package/dist/esm/mods/security/src/utils/dataConverter.js.map +1 -1
  85. package/dist/esm/src/cluster/modules/CrossPlatformMemory.js +11 -9
  86. package/dist/esm/src/cluster/modules/CrossPlatformMemory.js.map +1 -1
  87. package/dist/esm/src/encryption/EncryptionService.js +1 -1
  88. package/dist/esm/src/index.js +1 -0
  89. package/dist/esm/src/index.js.map +1 -1
  90. package/dist/esm/src/middleware/built-in/BuiltInMiddleware.js +16 -0
  91. package/dist/esm/src/middleware/built-in/BuiltInMiddleware.js.map +1 -1
  92. package/dist/esm/src/plugins/modules/index.js +1 -1
  93. package/dist/esm/src/server/FastServer.js +18 -1
  94. package/dist/esm/src/server/FastServer.js.map +1 -1
  95. package/dist/esm/src/server/core/HttpServer.js +16 -8
  96. package/dist/esm/src/server/core/HttpServer.js.map +1 -1
  97. package/dist/esm/src/server/core/XyprissApp.js +8 -0
  98. package/dist/esm/src/server/core/XyprissApp.js.map +1 -1
  99. package/dist/esm/src/server/handlers/templates/notFoundTemp.js +1 -1
  100. package/dist/esm/src/server/utils/trustProxy.js +444 -0
  101. package/dist/esm/src/server/utils/trustProxy.js.map +1 -0
  102. package/dist/esm/src/server/utils/wildcardMatcher.js +88 -0
  103. package/dist/esm/src/server/utils/wildcardMatcher.js.map +1 -0
  104. package/dist/index.d.ts +144 -4
  105. package/package.json +3 -3
@@ -0,0 +1,446 @@
1
+ 'use strict';
2
+
3
+ var net = require('net');
4
+
5
+ /**
6
+ * Advanced Trust Proxy Implementation for XyPriss
7
+ *
8
+ * Supports Express-like trust proxy configurations including:
9
+ * - Boolean values (true/false)
10
+ * - String values ('loopback', 'linklocal', 'uniquelocal')
11
+ * - CIDR notation ('192.168.0.0/16')
12
+ * - IP addresses ('127.0.0.1')
13
+ * - Arrays of the above
14
+ * - Custom functions
15
+ */
16
+ /**
17
+ * Predefined network ranges
18
+ */
19
+ const PREDEFINED_RANGES = {
20
+ loopback: ["127.0.0.0/8", "::1/128"],
21
+ linklocal: ["169.254.0.0/16", "fe80::/10"],
22
+ uniquelocal: ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "fc00::/7"],
23
+ };
24
+ class TrustProxy {
25
+ constructor(config) {
26
+ this.trustProxyFn = this.createTrustProxyFunction(config);
27
+ }
28
+ /**
29
+ * Validate and normalize IP address string
30
+ */
31
+ normalizeIP(ip) {
32
+ if (!ip || typeof ip !== "string")
33
+ return null;
34
+ const trimmed = ip.trim();
35
+ if (!trimmed)
36
+ return null;
37
+ // Handle IPv4-mapped IPv6 addresses (::ffff:192.168.1.1)
38
+ if (trimmed.startsWith("::ffff:") && trimmed.includes(".")) {
39
+ const ipv4Part = trimmed.substring(7);
40
+ if (net.isIP(ipv4Part) === 4) {
41
+ return ipv4Part;
42
+ }
43
+ }
44
+ // Validate it's a proper IP
45
+ const ipVersion = net.isIP(trimmed);
46
+ if (ipVersion === 0)
47
+ return null;
48
+ return trimmed;
49
+ }
50
+ /**
51
+ * Convert IPv4 address to number for comparison
52
+ */
53
+ ipv4ToNumber(ip) {
54
+ try {
55
+ const parts = ip.split(".");
56
+ if (parts.length !== 4)
57
+ return null;
58
+ const nums = parts.map((p) => {
59
+ const num = parseInt(p, 10);
60
+ if (isNaN(num) || num < 0 || num > 255)
61
+ throw new Error("Invalid octet");
62
+ return num;
63
+ });
64
+ return (nums[0] << 24) + (nums[1] << 16) + (nums[2] << 8) + nums[3];
65
+ }
66
+ catch {
67
+ return null;
68
+ }
69
+ }
70
+ /**
71
+ * Check if IPv4 address is in CIDR range
72
+ */
73
+ isIPv4InCIDR(ip, cidr) {
74
+ try {
75
+ const parts = cidr.split("/");
76
+ if (parts.length !== 2)
77
+ return false;
78
+ const [network, prefixLength] = parts;
79
+ const prefixLen = parseInt(prefixLength, 10);
80
+ if (isNaN(prefixLen) || prefixLen < 0 || prefixLen > 32)
81
+ return false;
82
+ const ipNum = this.ipv4ToNumber(ip);
83
+ const networkNum = this.ipv4ToNumber(network);
84
+ if (ipNum === null || networkNum === null)
85
+ return false;
86
+ // Handle edge cases
87
+ if (prefixLen === 0)
88
+ return true; // 0.0.0.0/0 matches everything
89
+ if (prefixLen === 32)
90
+ return ipNum === networkNum; // Exact match
91
+ const mask = (0xffffffff << (32 - prefixLen)) >>> 0;
92
+ return (ipNum & mask) === (networkNum & mask);
93
+ }
94
+ catch {
95
+ return false;
96
+ }
97
+ }
98
+ /**
99
+ * Expand IPv6 address to full form
100
+ */
101
+ expandIPv6(ip) {
102
+ try {
103
+ if (!ip.includes(":"))
104
+ return null;
105
+ // Handle :: compression
106
+ if (ip.includes("::")) {
107
+ const parts = ip.split("::");
108
+ if (parts.length > 2)
109
+ return null; // Invalid: multiple ::
110
+ const left = parts[0] ? parts[0].split(":") : [];
111
+ const right = parts[1] ? parts[1].split(":") : [];
112
+ const missing = 8 - left.length - right.length;
113
+ if (missing < 0)
114
+ return null; // Too many parts
115
+ const middle = Array(missing).fill("0000");
116
+ const allParts = [...left, ...middle, ...right];
117
+ // Pad each part to 4 hex digits
118
+ return allParts.map((p) => p.padStart(4, "0")).join(":");
119
+ }
120
+ // No compression
121
+ const parts = ip.split(":");
122
+ if (parts.length !== 8)
123
+ return null;
124
+ return parts.map((p) => p.padStart(4, "0")).join(":");
125
+ }
126
+ catch {
127
+ return null;
128
+ }
129
+ }
130
+ /**
131
+ * Convert IPv6 address to BigInt for comparison
132
+ */
133
+ ipv6ToBigInt(ip) {
134
+ try {
135
+ const expanded = this.expandIPv6(ip);
136
+ if (!expanded)
137
+ return null;
138
+ const parts = expanded.split(":");
139
+ if (parts.length !== 8)
140
+ return null;
141
+ let result = 0n;
142
+ for (let i = 0; i < 8; i++) {
143
+ const val = parseInt(parts[i], 16);
144
+ if (isNaN(val) || val < 0 || val > 0xffff)
145
+ return null;
146
+ result = (result << 16n) + BigInt(val);
147
+ }
148
+ return result;
149
+ }
150
+ catch {
151
+ return null;
152
+ }
153
+ }
154
+ /**
155
+ * Check if IPv6 address is in CIDR range
156
+ */
157
+ isIPv6InCIDR(ip, cidr) {
158
+ try {
159
+ const parts = cidr.split("/");
160
+ if (parts.length !== 2)
161
+ return false;
162
+ const [network, prefixLength] = parts;
163
+ const prefixLen = parseInt(prefixLength, 10);
164
+ if (isNaN(prefixLen) || prefixLen < 0 || prefixLen > 128)
165
+ return false;
166
+ const ipNum = this.ipv6ToBigInt(ip);
167
+ const networkNum = this.ipv6ToBigInt(network);
168
+ if (ipNum === null || networkNum === null)
169
+ return false;
170
+ // Handle edge cases
171
+ if (prefixLen === 0)
172
+ return true; // ::/0 matches everything
173
+ if (prefixLen === 128)
174
+ return ipNum === networkNum; // Exact match
175
+ const mask = (BigInt(2) ** BigInt(128) - BigInt(1)) <<
176
+ BigInt(128 - prefixLen);
177
+ return (ipNum & mask) === (networkNum & mask);
178
+ }
179
+ catch {
180
+ return false;
181
+ }
182
+ }
183
+ /**
184
+ * Check if IP address is in CIDR range
185
+ */
186
+ isIPInCIDR(ip, cidr) {
187
+ if (!ip || !cidr)
188
+ return false;
189
+ const ipVersion = net.isIP(ip);
190
+ if (ipVersion === 0)
191
+ return false;
192
+ // Determine CIDR type
193
+ const isCIDRv4 = cidr.includes(".") && cidr.includes("/");
194
+ const isCIDRv6 = cidr.includes(":") && cidr.includes("/");
195
+ if (ipVersion === 4 && isCIDRv4) {
196
+ return this.isIPv4InCIDR(ip, cidr);
197
+ }
198
+ else if (ipVersion === 6 && isCIDRv6) {
199
+ return this.isIPv6InCIDR(ip, cidr);
200
+ }
201
+ return false;
202
+ }
203
+ /**
204
+ * Check if IP matches a single trust proxy rule
205
+ */
206
+ matchesTrustRule(ip, rule) {
207
+ if (!ip || !rule)
208
+ return false;
209
+ try {
210
+ // Handle predefined ranges
211
+ if (rule in PREDEFINED_RANGES) {
212
+ const ranges = PREDEFINED_RANGES[rule];
213
+ return ranges.some((range) => this.isIPInCIDR(ip, range));
214
+ }
215
+ // Handle CIDR notation
216
+ if (rule.includes("/")) {
217
+ return this.isIPInCIDR(ip, rule);
218
+ }
219
+ // Handle exact IP match (normalize both for comparison)
220
+ const normalizedIP = this.normalizeIP(ip);
221
+ const normalizedRule = this.normalizeIP(rule);
222
+ if (!normalizedIP || !normalizedRule)
223
+ return false;
224
+ return normalizedIP === normalizedRule;
225
+ }
226
+ catch {
227
+ return false;
228
+ }
229
+ }
230
+ /**
231
+ * Create a trust proxy function from configuration
232
+ */
233
+ createTrustProxyFunction(config) {
234
+ // Handle boolean values
235
+ if (typeof config === "boolean") {
236
+ return () => config;
237
+ }
238
+ // Handle number values (trust first N hops)
239
+ if (typeof config === "number") {
240
+ if (!Number.isInteger(config) || config < 0) {
241
+ throw new Error("Trust proxy number must be a non-negative integer");
242
+ }
243
+ return (_ip, hopIndex) => hopIndex < config;
244
+ }
245
+ // Handle function values
246
+ if (typeof config === "function") {
247
+ return (ip, hopIndex) => {
248
+ try {
249
+ return Boolean(config(ip, hopIndex));
250
+ }
251
+ catch {
252
+ return false; // Safe default on function error
253
+ }
254
+ };
255
+ }
256
+ // Handle string values
257
+ if (typeof config === "string") {
258
+ const trimmed = config.trim();
259
+ if (!trimmed)
260
+ return () => false;
261
+ return (ip) => this.matchesTrustRule(ip, trimmed);
262
+ }
263
+ // Handle array values
264
+ if (Array.isArray(config)) {
265
+ const validRules = config.filter((rule) => typeof rule === "string" && rule.trim());
266
+ if (validRules.length === 0)
267
+ return () => false;
268
+ return (ip) => validRules.some((rule) => this.matchesTrustRule(ip, rule));
269
+ }
270
+ // Default: don't trust
271
+ return () => false;
272
+ }
273
+ /**
274
+ * Safely parse X-Forwarded-For header
275
+ */
276
+ parseForwardedFor(header) {
277
+ if (!header)
278
+ return [];
279
+ // Handle array form (shouldn't happen but be defensive)
280
+ const headerStr = Array.isArray(header) ? header.join(",") : header;
281
+ if (typeof headerStr !== "string")
282
+ return [];
283
+ return headerStr
284
+ .split(",")
285
+ .map((ip) => this.normalizeIP(ip))
286
+ .filter((ip) => ip !== null);
287
+ }
288
+ /**
289
+ * Get remote address with fallback
290
+ */
291
+ getRemoteAddress(req) {
292
+ const remoteAddr = req.socket?.remoteAddress;
293
+ if (!remoteAddr)
294
+ return "127.0.0.1";
295
+ const normalized = this.normalizeIP(remoteAddr);
296
+ return normalized || "127.0.0.1";
297
+ }
298
+ /**
299
+ * Extract client IP considering trust proxy configuration
300
+ */
301
+ extractClientIP(req) {
302
+ try {
303
+ const forwardedFor = req.headers["x-forwarded-for"];
304
+ const ips = this.parseForwardedFor(forwardedFor);
305
+ if (ips.length === 0) {
306
+ // No forwarded headers, return direct connection IP
307
+ return this.getRemoteAddress(req);
308
+ }
309
+ // Start from the rightmost IP (closest to server) and work backwards
310
+ const directIP = this.getRemoteAddress(req);
311
+ let trustedIP = directIP;
312
+ // Process IPs from right to left (closest to server first)
313
+ for (let i = ips.length - 1; i >= 0; i--) {
314
+ const hopIndex = ips.length - 1 - i;
315
+ const currentIP = ips[i];
316
+ // Check if we trust this hop
317
+ if (this.trustProxyFn(trustedIP, hopIndex)) {
318
+ trustedIP = currentIP;
319
+ }
320
+ else {
321
+ // Stop at first untrusted hop
322
+ break;
323
+ }
324
+ }
325
+ return trustedIP;
326
+ }
327
+ catch {
328
+ // On any error, return the direct connection IP as safe default
329
+ return this.getRemoteAddress(req);
330
+ }
331
+ }
332
+ /**
333
+ * Extract all IPs in the proxy chain
334
+ */
335
+ extractProxyChain(req) {
336
+ try {
337
+ const forwardedFor = req.headers["x-forwarded-for"];
338
+ const ips = this.parseForwardedFor(forwardedFor);
339
+ const directIP = this.getRemoteAddress(req);
340
+ if (ips.length === 0) {
341
+ return [directIP];
342
+ }
343
+ const trustedIPs = [directIP];
344
+ // Process IPs from right to left
345
+ for (let i = ips.length - 1; i >= 0; i--) {
346
+ const hopIndex = ips.length - 1 - i;
347
+ const currentIP = ips[i];
348
+ const previousIP = trustedIPs[trustedIPs.length - 1];
349
+ if (this.trustProxyFn(previousIP, hopIndex)) {
350
+ trustedIPs.push(currentIP);
351
+ }
352
+ else {
353
+ break;
354
+ }
355
+ }
356
+ return trustedIPs.reverse(); // Return in client -> server order
357
+ }
358
+ catch {
359
+ return [this.getRemoteAddress(req)];
360
+ }
361
+ }
362
+ /**
363
+ * Determine if connection is secure based on trust proxy
364
+ */
365
+ isSecureConnection(req) {
366
+ try {
367
+ // Check if we have a direct TLS connection
368
+ const socket = req.socket;
369
+ if (socket?.encrypted === true) {
370
+ return true;
371
+ }
372
+ // Check X-Forwarded-Proto header if we trust the proxy
373
+ const forwardedProto = req.headers["x-forwarded-proto"];
374
+ if (!forwardedProto)
375
+ return false;
376
+ const directIP = this.getRemoteAddress(req);
377
+ if (!this.trustProxyFn(directIP, 0))
378
+ return false;
379
+ // Handle both string and array forms
380
+ const protoStr = Array.isArray(forwardedProto)
381
+ ? forwardedProto[0]
382
+ : forwardedProto;
383
+ if (typeof protoStr !== "string")
384
+ return false;
385
+ // Take first value if comma-separated
386
+ const proto = protoStr.split(",")[0].trim().toLowerCase();
387
+ return proto === "https";
388
+ }
389
+ catch {
390
+ return false;
391
+ }
392
+ }
393
+ /**
394
+ * Get protocol considering trust proxy
395
+ */
396
+ getProtocol(req) {
397
+ return this.isSecureConnection(req) ? "https" : "http";
398
+ }
399
+ /**
400
+ * Get hostname considering trust proxy
401
+ */
402
+ getHostname(req) {
403
+ try {
404
+ const directIP = this.getRemoteAddress(req);
405
+ // Check X-Forwarded-Host if we trust the proxy
406
+ const forwardedHost = req.headers["x-forwarded-host"];
407
+ if (forwardedHost && this.trustProxyFn(directIP, 0)) {
408
+ const hostStr = Array.isArray(forwardedHost)
409
+ ? forwardedHost[0]
410
+ : forwardedHost;
411
+ if (typeof hostStr === "string" && hostStr.trim()) {
412
+ // Take first host if comma-separated, remove port
413
+ const hostname = hostStr.split(",")[0].trim().split(":")[0];
414
+ if (hostname)
415
+ return hostname;
416
+ }
417
+ }
418
+ // Fallback to Host header
419
+ const host = req.headers.host;
420
+ if (host && typeof host === "string") {
421
+ const hostname = host.split(":")[0];
422
+ if (hostname)
423
+ return hostname;
424
+ }
425
+ return "localhost";
426
+ }
427
+ catch {
428
+ return "localhost";
429
+ }
430
+ }
431
+ /**
432
+ * Validate trust proxy configuration
433
+ */
434
+ static validate(config) {
435
+ try {
436
+ new TrustProxy(config);
437
+ return true;
438
+ }
439
+ catch {
440
+ return false;
441
+ }
442
+ }
443
+ }
444
+
445
+ exports.TrustProxy = TrustProxy;
446
+ //# sourceMappingURL=trustProxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trustProxy.js","sources":["../../../../../src/server/utils/trustProxy.ts"],"sourcesContent":[null],"names":["isIP"],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Wildcard pattern matching utility for CORS origins
5
+ *
6
+ * Supports patterns like:
7
+ * - "localhost:*" matches "localhost:3000", "localhost:8080", etc.
8
+ * - "*.example.com" matches "api.example.com", "app.example.com", etc.
9
+ * - "127.0.0.1:*" matches "127.0.0.1:3000", "127.0.0.1:8080", etc.
10
+ * - "::1:*" matches "::1:3000", "::1:8080", etc.
11
+ */
12
+ /**
13
+ * Converts a wildcard pattern to a regular expression
14
+ * @param pattern - The wildcard pattern (e.g., "localhost:*", "*.example.com")
15
+ * @returns RegExp object for matching
16
+ */
17
+ function patternToRegex(pattern) {
18
+ // Escape special regex characters except for *
19
+ const escaped = pattern
20
+ .replace(/[.+?^${}()|[\]\\]/g, '\\$&') // Escape special chars
21
+ .replace(/\*/g, '.*'); // Replace * with .*
22
+ // Ensure exact match with ^ and $
23
+ return new RegExp(`^${escaped}$`, 'i'); // Case insensitive
24
+ }
25
+ /**
26
+ * Checks if an origin matches a wildcard pattern
27
+ * @param origin - The origin to check (e.g., "http://localhost:3000")
28
+ * @param pattern - The wildcard pattern (e.g., "localhost:*")
29
+ * @returns true if the origin matches the pattern
30
+ */
31
+ function matchesWildcardPattern(origin, pattern) {
32
+ // Handle exact matches first (no wildcards)
33
+ if (!pattern.includes('*')) {
34
+ return origin === pattern || origin.includes(pattern);
35
+ }
36
+ // Extract the host:port part from the origin URL
37
+ let originHost;
38
+ try {
39
+ const url = new URL(origin);
40
+ originHost = url.host; // This includes both hostname and port
41
+ // Special handling for default ports
42
+ if (url.protocol === 'https:' && url.port === '' && url.hostname === 'localhost') {
43
+ originHost = 'localhost:443';
44
+ }
45
+ else if (url.protocol === 'http:' && url.port === '' && url.hostname === 'localhost') {
46
+ originHost = 'localhost:80';
47
+ }
48
+ // Handle IPv6 addresses - remove brackets for pattern matching
49
+ if (url.hostname.startsWith('[') && url.hostname.endsWith(']')) {
50
+ const ipv6Host = url.hostname.slice(1, -1); // Remove brackets
51
+ originHost = url.port ? `${ipv6Host}:${url.port}` : ipv6Host;
52
+ }
53
+ }
54
+ catch {
55
+ // If it's not a valid URL, treat it as a host:port string
56
+ originHost = origin;
57
+ }
58
+ const regex = patternToRegex(pattern);
59
+ return regex.test(originHost);
60
+ }
61
+ /**
62
+ * Checks if an origin is allowed based on an array of patterns
63
+ * @param origin - The origin to check
64
+ * @param allowedOrigins - Array of allowed origins (can include wildcards)
65
+ * @returns true if the origin is allowed
66
+ */
67
+ function isOriginAllowed(origin, allowedOrigins) {
68
+ if (!origin || !allowedOrigins || allowedOrigins.length === 0) {
69
+ return false;
70
+ }
71
+ return allowedOrigins.some(pattern => matchesWildcardPattern(origin, pattern));
72
+ }
73
+ /**
74
+ * Creates a CORS origin function that supports wildcard patterns
75
+ * @param allowedOrigins - Array of allowed origins (can include wildcards)
76
+ * @returns Function compatible with cors middleware
77
+ */
78
+ function createWildcardOriginFunction(allowedOrigins) {
79
+ return (origin, callback) => {
80
+ // Allow requests with no origin (like mobile apps or curl requests)
81
+ if (!origin) {
82
+ return callback(null, true);
83
+ }
84
+ const allowed = isOriginAllowed(origin, allowedOrigins);
85
+ callback(null, allowed);
86
+ };
87
+ }
88
+
89
+ exports.createWildcardOriginFunction = createWildcardOriginFunction;
90
+ exports.isOriginAllowed = isOriginAllowed;
91
+ exports.matchesWildcardPattern = matchesWildcardPattern;
92
+ //# sourceMappingURL=wildcardMatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wildcardMatcher.js","sources":["../../../../../src/server/utils/wildcardMatcher.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;;;;AAQG;AAEH;;;;AAIG;AACH,SAAS,cAAc,CAAC,OAAe,EAAA;;IAEnC,MAAM,OAAO,GAAG,OAAO;AAClB,SAAA,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC;AACrC,SAAA,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;;IAG1B,OAAO,IAAI,MAAM,CAAC,CAAI,CAAA,EAAA,OAAO,CAAG,CAAA,CAAA,EAAE,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;AAKG;AACa,SAAA,sBAAsB,CAAC,MAAc,EAAE,OAAe,EAAA;;IAElE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QACxB,OAAO,MAAM,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACzD;;AAGD,IAAA,IAAI,UAAkB,CAAC;AACvB,IAAA,IAAI;AACA,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;AAC5B,QAAA,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC;;AAGtB,QAAA,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE;YAC9E,UAAU,GAAG,eAAe,CAAC;SAChC;AAAM,aAAA,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE;YACpF,UAAU,GAAG,cAAc,CAAC;SAC/B;;AAGD,QAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5D,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3C,YAAA,UAAU,GAAG,GAAG,CAAC,IAAI,GAAG,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,GAAG,CAAC,IAAI,CAAA,CAAE,GAAG,QAAQ,CAAC;SAChE;KACJ;AAAC,IAAA,MAAM;;QAEJ,UAAU,GAAG,MAAM,CAAC;KACvB;AAED,IAAA,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;AACtC,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC;AAED;;;;;AAKG;AACa,SAAA,eAAe,CAAC,MAAc,EAAE,cAAwB,EAAA;AACpE,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3D,QAAA,OAAO,KAAK,CAAC;KAChB;AAED,IAAA,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,IAAI,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACnF,CAAC;AAED;;;;AAIG;AACG,SAAU,4BAA4B,CAAC,cAAwB,EAAA;AACjE,IAAA,OAAO,CAAC,MAA0B,EAAE,QAAsD,KAAI;;QAE1F,IAAI,CAAC,MAAM,EAAE;AACT,YAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SAC/B;QAED,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AACxD,QAAA,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,KAAC,CAAC;AACN;;;;;;"}
@@ -12,7 +12,7 @@ import '../core/keys/algorithms/mods/PBKDF2Algo.js';
12
12
  import { SecureRandom } from '../core/random/random-core.js';
13
13
  import '../core/random/random-types.js';
14
14
  import '../core/random/random-sources.js';
15
- import 'nehonix-uri-processor';
15
+ import 'strulink';
16
16
  import '../utils/memory/index.js';
17
17
  import '../types.js';
18
18
  import '../core/password/index.js';
@@ -2,7 +2,7 @@ import { SecureRandom } from '../core/random/random-core.js';
2
2
  import '../core/random/random-types.js';
3
3
  import 'crypto';
4
4
  import '../core/random/random-sources.js';
5
- import 'nehonix-uri-processor';
5
+ import 'strulink';
6
6
  import { bufferToHex, bufferToBase64, base64ToBuffer, hexToBuffer } from '../utils/encoding.js';
7
7
  import '../utils/memory/index.js';
8
8
  import '../types.js';
@@ -5,7 +5,7 @@ import { EventEmitter } from 'events';
5
5
  import { SecureRandom } from '../../core/random/random-core.js';
6
6
  import '../../core/random/random-types.js';
7
7
  import '../../core/random/random-sources.js';
8
- import 'nehonix-uri-processor';
8
+ import 'strulink';
9
9
  import '../../utils/memory/index.js';
10
10
  import '../../types.js';
11
11
  import { CONFIG } from './config/cache.config.js';
@@ -16,7 +16,7 @@ import '../../core/keys/algorithms/mods/PBKDF2Algo.js';
16
16
  import { SecureRandom } from '../../core/random/random-core.js';
17
17
  import '../../core/random/random-types.js';
18
18
  import '../../core/random/random-sources.js';
19
- import 'nehonix-uri-processor';
19
+ import 'strulink';
20
20
  import '../../utils/memory/index.js';
21
21
  import '../../types.js';
22
22
  import '../../core/password/index.js';
@@ -12,7 +12,7 @@ import '../../core/keys/keys-utils.js';
12
12
  import '../../core/keys/algorithms/mods/PBKDF2Algo.js';
13
13
  import '../../core/random/random-types.js';
14
14
  import '../../core/random/random-sources.js';
15
- import 'nehonix-uri-processor';
15
+ import 'strulink';
16
16
  import '../../utils/memory/index.js';
17
17
  import '../../types.js';
18
18
  import '../../core/password/index.js';
@@ -2,7 +2,7 @@ import { SecureRandom } from '../core/random/random-core.js';
2
2
  import '../core/random/random-types.js';
3
3
  import 'crypto';
4
4
  import '../core/random/random-sources.js';
5
- import 'nehonix-uri-processor';
5
+ import 'strulink';
6
6
  import { bufferToHex, hexToBuffer } from '../utils/encoding.js';
7
7
  import '../utils/memory/index.js';
8
8
  import '../types.js';
@@ -17,7 +17,7 @@ import '../../core/hash/hash-advanced.js';
17
17
  import '../../algorithms/hash-algorithms.js';
18
18
  import '../../core/random/random-types.js';
19
19
  import '../../core/random/random-sources.js';
20
- import 'nehonix-uri-processor';
20
+ import 'strulink';
21
21
  import '../../types.js';
22
22
  import '../secure-array/utils/id-generator.js';
23
23
  import '../../index.js';
@@ -2,7 +2,7 @@ import { SecureRandom } from '../../../core/random/random-core.js';
2
2
  import '../../../core/random/random-types.js';
3
3
  import 'crypto';
4
4
  import '../../../core/random/random-sources.js';
5
- import 'nehonix-uri-processor';
5
+ import 'strulink';
6
6
  import '../../../utils/memory/index.js';
7
7
  import '../../../types.js';
8
8
  import { Hash } from '../../../core/hash/hash-core.js';
@@ -2,7 +2,7 @@ import { SecureRandom } from '../core/random/random-core.js';
2
2
  import '../core/random/random-types.js';
3
3
  import 'crypto';
4
4
  import '../core/random/random-sources.js';
5
- import 'nehonix-uri-processor';
5
+ import 'strulink';
6
6
  import { bufferToHex } from '../utils/encoding.js';
7
7
  import { StatsTracker } from '../utils/stats.js';
8
8
  import '../utils/memory/index.js';
@@ -2,7 +2,7 @@ import { SecureRandom } from '../core/random/random-core.js';
2
2
  import '../core/random/random-types.js';
3
3
  import 'crypto';
4
4
  import '../core/random/random-sources.js';
5
- import 'nehonix-uri-processor';
5
+ import 'strulink';
6
6
  import { hexToBuffer, bufferToHex } from '../utils/encoding.js';
7
7
  import '../utils/memory/index.js';
8
8
  import '../types.js';