@arcis/node 1.2.0 → 1.4.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 (122) hide show
  1. package/dist/core/{index.d.mts → constants.d.ts} +21 -70
  2. package/dist/core/constants.d.ts.map +1 -0
  3. package/dist/core/errors.d.ts +53 -0
  4. package/dist/core/errors.d.ts.map +1 -0
  5. package/dist/core/index.d.ts +6 -168
  6. package/dist/core/index.d.ts.map +1 -0
  7. package/dist/{types-CsOFHoD9.d.mts → core/types.d.ts} +38 -31
  8. package/dist/core/types.d.ts.map +1 -0
  9. package/dist/index.d.ts +71 -166
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +151 -4
  12. package/dist/index.js.map +1 -1
  13. package/dist/index.mjs +145 -5
  14. package/dist/index.mjs.map +1 -1
  15. package/dist/logging/index.d.ts +4 -36
  16. package/dist/logging/index.d.ts.map +1 -0
  17. package/dist/logging/{index.d.mts → redactor.d.ts} +5 -9
  18. package/dist/logging/redactor.d.ts.map +1 -0
  19. package/dist/middleware/bot-detection.d.ts +86 -0
  20. package/dist/middleware/bot-detection.d.ts.map +1 -0
  21. package/dist/middleware/cookies.d.ts +48 -0
  22. package/dist/middleware/cookies.d.ts.map +1 -0
  23. package/dist/middleware/cors.d.ts +65 -0
  24. package/dist/middleware/cors.d.ts.map +1 -0
  25. package/dist/middleware/csrf.d.ts +109 -0
  26. package/dist/middleware/csrf.d.ts.map +1 -0
  27. package/dist/middleware/error-handler.d.ts +43 -0
  28. package/dist/middleware/error-handler.d.ts.map +1 -0
  29. package/dist/middleware/headers.d.ts +29 -0
  30. package/dist/middleware/headers.d.ts.map +1 -0
  31. package/dist/middleware/hpp.d.ts +56 -0
  32. package/dist/middleware/hpp.d.ts.map +1 -0
  33. package/dist/middleware/index.d.ts +16 -3
  34. package/dist/middleware/index.d.ts.map +1 -0
  35. package/dist/middleware/index.js +28 -3
  36. package/dist/middleware/index.js.map +1 -1
  37. package/dist/middleware/index.mjs +28 -3
  38. package/dist/middleware/index.mjs.map +1 -1
  39. package/dist/middleware/main.d.ts +40 -0
  40. package/dist/middleware/main.d.ts.map +1 -0
  41. package/dist/middleware/rate-limit-sliding.d.ts +46 -0
  42. package/dist/middleware/rate-limit-sliding.d.ts.map +1 -0
  43. package/dist/middleware/rate-limit-token.d.ts +51 -0
  44. package/dist/middleware/rate-limit-token.d.ts.map +1 -0
  45. package/dist/middleware/rate-limit.d.ts +34 -0
  46. package/dist/middleware/rate-limit.d.ts.map +1 -0
  47. package/dist/sanitizers/command.d.ts +28 -0
  48. package/dist/sanitizers/command.d.ts.map +1 -0
  49. package/dist/sanitizers/encode.d.ts +46 -0
  50. package/dist/sanitizers/encode.d.ts.map +1 -0
  51. package/dist/sanitizers/headers.d.ts +46 -0
  52. package/dist/sanitizers/headers.d.ts.map +1 -0
  53. package/dist/sanitizers/index.d.ts +17 -22
  54. package/dist/sanitizers/index.d.ts.map +1 -0
  55. package/dist/sanitizers/index.js +72 -0
  56. package/dist/sanitizers/index.js.map +1 -1
  57. package/dist/sanitizers/index.mjs +68 -1
  58. package/dist/sanitizers/index.mjs.map +1 -1
  59. package/dist/sanitizers/jsonp.d.ts +34 -0
  60. package/dist/sanitizers/jsonp.d.ts.map +1 -0
  61. package/dist/sanitizers/nosql.d.ts +31 -0
  62. package/dist/sanitizers/nosql.d.ts.map +1 -0
  63. package/dist/sanitizers/path.d.ts +28 -0
  64. package/dist/sanitizers/path.d.ts.map +1 -0
  65. package/dist/sanitizers/pii.d.ts +80 -0
  66. package/dist/sanitizers/pii.d.ts.map +1 -0
  67. package/dist/sanitizers/prototype.d.ts +34 -0
  68. package/dist/sanitizers/prototype.d.ts.map +1 -0
  69. package/dist/sanitizers/sanitize.d.ts +51 -0
  70. package/dist/sanitizers/sanitize.d.ts.map +1 -0
  71. package/dist/sanitizers/sql.d.ts +28 -0
  72. package/dist/sanitizers/sql.d.ts.map +1 -0
  73. package/dist/sanitizers/ssti.d.ts +20 -0
  74. package/dist/sanitizers/ssti.d.ts.map +1 -0
  75. package/dist/sanitizers/utils.d.ts +19 -0
  76. package/dist/sanitizers/utils.d.ts.map +1 -0
  77. package/dist/sanitizers/xss.d.ts +35 -0
  78. package/dist/sanitizers/xss.d.ts.map +1 -0
  79. package/dist/sanitizers/xxe.d.ts +20 -0
  80. package/dist/sanitizers/xxe.d.ts.map +1 -0
  81. package/dist/stores/index.d.ts +6 -104
  82. package/dist/stores/index.d.ts.map +1 -0
  83. package/dist/stores/memory.d.ts +35 -0
  84. package/dist/stores/memory.d.ts.map +1 -0
  85. package/dist/stores/{index.d.mts → redis.d.ts} +6 -45
  86. package/dist/stores/redis.d.ts.map +1 -0
  87. package/dist/utils/duration.d.ts +34 -0
  88. package/dist/utils/duration.d.ts.map +1 -0
  89. package/dist/utils/fingerprint.d.ts +64 -0
  90. package/dist/utils/fingerprint.d.ts.map +1 -0
  91. package/dist/utils/index.d.ts +10 -0
  92. package/dist/utils/index.d.ts.map +1 -0
  93. package/dist/utils/index.js +188 -0
  94. package/dist/utils/index.js.map +1 -0
  95. package/dist/utils/index.mjs +182 -0
  96. package/dist/utils/index.mjs.map +1 -0
  97. package/dist/utils/ip.d.ts +70 -0
  98. package/dist/utils/ip.d.ts.map +1 -0
  99. package/dist/validation/email.d.ts +82 -0
  100. package/dist/validation/email.d.ts.map +1 -0
  101. package/dist/validation/file.d.ts +90 -0
  102. package/dist/validation/file.d.ts.map +1 -0
  103. package/dist/validation/index.d.ts +10 -3
  104. package/dist/validation/index.d.ts.map +1 -0
  105. package/dist/validation/redirect.d.ts +64 -0
  106. package/dist/validation/redirect.d.ts.map +1 -0
  107. package/dist/validation/schema.d.ts +36 -0
  108. package/dist/validation/schema.d.ts.map +1 -0
  109. package/dist/validation/url.d.ts +65 -0
  110. package/dist/validation/url.d.ts.map +1 -0
  111. package/package.json +8 -6
  112. package/dist/index-A-m-pPeW.d.mts +0 -340
  113. package/dist/index-CgK94hY_.d.mts +0 -532
  114. package/dist/index-Co5kPRZz.d.ts +0 -340
  115. package/dist/index-D_bdJcF0.d.ts +0 -532
  116. package/dist/index.d.mts +0 -175
  117. package/dist/middleware/index.d.mts +0 -3
  118. package/dist/pii-CXcHMlnX.d.mts +0 -438
  119. package/dist/pii-DhNpl7M3.d.ts +0 -438
  120. package/dist/sanitizers/index.d.mts +0 -24
  121. package/dist/types-CsOFHoD9.d.ts +0 -269
  122. package/dist/validation/index.d.mts +0 -3
@@ -1,69 +1,14 @@
1
- export { A as ArcisFunction, a as ArcisMiddleware, b as ArcisOptions, E as ErrorHandlerOptions, F as FieldValidator, H as HeaderOptions, c as HstsOptions, d as HttpError, L as LogOptions, R as RateLimitEntry, e as RateLimitOptions, f as RateLimitResult, g as RateLimitStore, h as RateLimiterMiddleware, S as SafeLogger, i as SanitizeOptions, j as SanitizeResult, T as ThreatInfo, k as ThreatType, V as ValidationConfig, l as ValidationError, m as ValidationResult, n as ValidationSchema } from '../types-CsOFHoD9.mjs';
2
- import 'express';
3
-
4
- /**
5
- * @module @arcis/node/core/errors
6
- * Custom error classes for Arcis
7
- */
8
- /**
9
- * Base class for all Arcis errors
10
- */
11
- declare class ArcisError extends Error {
12
- readonly statusCode: number;
13
- readonly code: string;
14
- /** Whether the error message is safe to expose to API clients. */
15
- readonly expose: boolean;
16
- constructor(message: string, statusCode?: number, code?: string);
17
- }
18
- /**
19
- * Error thrown when input validation fails
20
- */
21
- declare class ValidationError extends ArcisError {
22
- readonly errors: string[];
23
- constructor(errors: string[]);
24
- }
25
-
26
- /**
27
- * Error thrown when rate limit is exceeded
28
- */
29
- declare class RateLimitError extends ArcisError {
30
- readonly retryAfter: number;
31
- constructor(message: string, retryAfter: number);
32
- }
33
- /**
34
- * Error thrown when input is too large
35
- */
36
- declare class InputTooLargeError extends ArcisError {
37
- readonly maxSize: number;
38
- readonly actualSize: number;
39
- constructor(maxSize: number, actualSize: number);
40
- }
41
- /**
42
- * Error thrown when security threat is detected
43
- */
44
- declare class SecurityThreatError extends ArcisError {
45
- readonly threatType: string;
46
- readonly pattern: string;
47
- constructor(threatType: string, pattern: string);
48
- }
49
- /**
50
- * Error thrown when sanitization fails
51
- */
52
- declare class SanitizationError extends ArcisError {
53
- constructor(message: string);
54
- }
55
-
56
1
  /**
57
2
  * @module @arcis/node/core/constants
58
3
  * Named constants for Arcis - no magic numbers
59
4
  */
60
- declare const INPUT: {
5
+ export declare const INPUT: {
61
6
  /** Default maximum input size (1MB) */
62
7
  readonly DEFAULT_MAX_SIZE: 1000000;
63
8
  /** Maximum recursion depth for nested objects */
64
9
  readonly MAX_RECURSION_DEPTH: 10;
65
10
  };
66
- declare const RATE_LIMIT: {
11
+ export declare const RATE_LIMIT: {
67
12
  /** Default window size (1 minute) */
68
13
  readonly DEFAULT_WINDOW_MS: 60000;
69
14
  /** Default max requests per window */
@@ -77,7 +22,7 @@ declare const RATE_LIMIT: {
77
22
  /** Maximum window size (24 hours) */
78
23
  readonly MAX_WINDOW_MS: 86400000;
79
24
  };
80
- declare const HEADERS: {
25
+ export declare const HEADERS: {
81
26
  /** Default Content Security Policy */
82
27
  readonly DEFAULT_CSP: string;
83
28
  /** Default HSTS max age (1 year in seconds) */
@@ -97,10 +42,17 @@ declare const HEADERS: {
97
42
  * Detection patterns — used to flag whether a string contains XSS payloads.
98
43
  * Must stay in sync with XSS_REMOVE_PATTERNS below.
99
44
  */
100
- declare const XSS_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
101
- declare const SQL_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
102
- declare const PATH_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
103
- declare const COMMAND_PATTERNS: readonly [RegExp, RegExp, RegExp];
45
+ export declare const XSS_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
46
+ /**
47
+ * Removal patterns used by sanitizeXss() to strip dangerous content.
48
+ * More targeted than XSS_PATTERNS: each pattern captures the full dangerous
49
+ * substring (tag, attribute + value, protocol) so it can be replaced safely.
50
+ * Must stay in sync with XSS_PATTERNS above.
51
+ */
52
+ export declare const XSS_REMOVE_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
53
+ export declare const SQL_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
54
+ export declare const PATH_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
55
+ export declare const COMMAND_PATTERNS: readonly [RegExp, RegExp, RegExp];
104
56
  /**
105
57
  * Prototype pollution keys to block.
106
58
  * Stored lowercase — always compare with key.toLowerCase().
@@ -112,10 +64,10 @@ declare const COMMAND_PATTERNS: readonly [RegExp, RegExp, RegExp];
112
64
  * - __defineGetter__/__defineSetter__: legacy property definition (can override getters/setters)
113
65
  * - __lookupGetter__/__lookupSetter__: legacy property introspection
114
66
  */
115
- declare const DANGEROUS_PROTO_KEYS: Set<string>;
67
+ export declare const DANGEROUS_PROTO_KEYS: Set<string>;
116
68
  /** MongoDB operators to block */
117
- declare const NOSQL_DANGEROUS_KEYS: Set<string>;
118
- declare const REDACTION: {
69
+ export declare const NOSQL_DANGEROUS_KEYS: Set<string>;
70
+ export declare const REDACTION: {
119
71
  /** Replacement text for redacted values */
120
72
  readonly REPLACEMENT: "[REDACTED]";
121
73
  /** Truncation indicator */
@@ -127,7 +79,7 @@ declare const REDACTION: {
127
79
  /** Default sensitive keys to redact */
128
80
  readonly SENSITIVE_KEYS: Set<string>;
129
81
  };
130
- declare const VALIDATION: {
82
+ export declare const VALIDATION: {
131
83
  /**
132
84
  * Email regex pattern.
133
85
  * Rejects consecutive dots in local part (e.g. test..foo@example.com),
@@ -143,7 +95,7 @@ declare const VALIDATION: {
143
95
  /** UUID regex pattern (v4) */
144
96
  readonly UUID: RegExp;
145
97
  };
146
- declare const ERRORS: {
98
+ export declare const ERRORS: {
147
99
  /** Generic error message (production) */
148
100
  readonly INTERNAL_SERVER_ERROR: "Internal Server Error";
149
101
  /** Input too large error */
@@ -165,6 +117,5 @@ declare const ERRORS: {
165
117
  readonly MAX_ITEMS: (field: string, max: number) => string;
166
118
  };
167
119
  };
168
- declare const BLOCKED: "[BLOCKED]";
169
-
170
- export { ArcisError, ValidationError as ArcisValidationError, BLOCKED, COMMAND_PATTERNS, DANGEROUS_PROTO_KEYS, ERRORS, HEADERS, INPUT, InputTooLargeError, NOSQL_DANGEROUS_KEYS, PATH_PATTERNS, RATE_LIMIT, REDACTION, RateLimitError, SQL_PATTERNS, SanitizationError, SecurityThreatError, VALIDATION, XSS_PATTERNS };
120
+ export declare const BLOCKED: "[BLOCKED]";
121
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,eAAO,MAAM,KAAK;IAChB,uCAAuC;;IAEvC,iDAAiD;;CAEzC,CAAC;AAKX,eAAO,MAAM,UAAU;IACrB,qCAAqC;;IAErC,sCAAsC;;IAEtC,0DAA0D;;IAE1D,4BAA4B;;IAE5B,qCAAqC;;IAErC,qCAAqC;;CAE7B,CAAC;AAKX,eAAO,MAAM,OAAO;IAClB,sCAAsC;;IAUtC,+CAA+C;;IAE/C,oCAAoC;;IAEpC,2CAA2C;;IAE3C,oCAAoC;;IAEpC,uCAAuC;;IAEvC,+CAA+C;;CAEvC,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,YAAY,2FAqBf,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,2HA0BtB,CAAC;AAKX,eAAO,MAAM,YAAY,mHAyBf,CAAC;AAKX,eAAO,MAAM,aAAa,mGAsBhB,CAAC;AAKX,eAAO,MAAM,gBAAgB,mCAenB,CAAC;AAMX;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,aAQ/B,CAAC;AAEH,iCAAiC;AACjC,eAAO,MAAM,oBAAoB,aAc/B,CAAC;AAKH,eAAO,MAAM,SAAS;IACpB,2CAA2C;;IAE3C,2BAA2B;;IAE3B,0BAA0B;;IAE1B,iCAAiC;;IAEjC,uCAAuC;;CAS/B,CAAC;AAKX,eAAO,MAAM,UAAU;IACrB;;;;OAIG;;IAEH;;;;OAIG;;IAEH,8BAA8B;;CAEtB,CAAC;AAKX,eAAO,MAAM,MAAM;IACjB,yCAAyC;;IAEzC,4BAA4B;wCACD,MAAM;IACjC,gCAAgC;;mCAEZ,MAAM;uCACF,MAAM,QAAQ,MAAM;qCACtB,MAAM,OAAO,MAAM;qCACnB,MAAM,OAAO,MAAM;oCACpB,MAAM,OAAO,MAAM;oCACnB,MAAM,OAAO,MAAM;yCACd,MAAM;wCACP,MAAM;sCACR,MAAM;uCACL,MAAM;uCACN,MAAM,UAAU,OAAO,EAAE;oCAC5B,MAAM,OAAO,MAAM;oCACnB,MAAM,OAAO,MAAM;;CAEhC,CAAC;AAKX,eAAO,MAAM,OAAO,EAAG,WAAoB,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @module @arcis/node/core/errors
3
+ * Custom error classes for Arcis
4
+ */
5
+ /**
6
+ * Base class for all Arcis errors
7
+ */
8
+ export declare class ArcisError extends Error {
9
+ readonly statusCode: number;
10
+ readonly code: string;
11
+ /** Whether the error message is safe to expose to API clients. */
12
+ readonly expose: boolean;
13
+ constructor(message: string, statusCode?: number, code?: string);
14
+ }
15
+ /**
16
+ * Error thrown when input validation fails
17
+ */
18
+ export declare class ValidationError extends ArcisError {
19
+ readonly errors: string[];
20
+ constructor(errors: string[]);
21
+ }
22
+ /** Alias for ValidationError (backwards compatibility) */
23
+ export { ValidationError as ArcisValidationError };
24
+ /**
25
+ * Error thrown when rate limit is exceeded
26
+ */
27
+ export declare class RateLimitError extends ArcisError {
28
+ readonly retryAfter: number;
29
+ constructor(message: string, retryAfter: number);
30
+ }
31
+ /**
32
+ * Error thrown when input is too large
33
+ */
34
+ export declare class InputTooLargeError extends ArcisError {
35
+ readonly maxSize: number;
36
+ readonly actualSize: number;
37
+ constructor(maxSize: number, actualSize: number);
38
+ }
39
+ /**
40
+ * Error thrown when security threat is detected
41
+ */
42
+ export declare class SecurityThreatError extends ArcisError {
43
+ readonly threatType: string;
44
+ readonly pattern: string;
45
+ constructor(threatType: string, pattern: string);
46
+ }
47
+ /**
48
+ * Error thrown when sanitization fails
49
+ */
50
+ export declare class SanitizationError extends ArcisError {
51
+ constructor(message: string);
52
+ }
53
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,SAAgB,MAAM,EAAE,OAAO,CAAC;gBAEpB,OAAO,EAAE,MAAM,EAAE,UAAU,SAAM,EAAE,IAAI,SAAgB;CAcpE;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,SAAgB,MAAM,EAAE,MAAM,EAAE,CAAC;gBAErB,MAAM,EAAE,MAAM,EAAE;CAK7B;AAED,0DAA0D;AAC1D,OAAO,EAAE,eAAe,IAAI,oBAAoB,EAAE,CAAC;AAEnD;;GAEG;AACH,qBAAa,cAAe,SAAQ,UAAU;IAC5C,SAAgB,UAAU,EAAE,MAAM,CAAC;gBAEvB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAKhD;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,UAAU;IAChD,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,UAAU,EAAE,MAAM,CAAC;gBAEvB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAMhD;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAMhD;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,UAAU;gBACnC,OAAO,EAAE,MAAM;CAI5B"}
@@ -1,170 +1,8 @@
1
- export { A as ArcisFunction, a as ArcisMiddleware, b as ArcisOptions, E as ErrorHandlerOptions, F as FieldValidator, H as HeaderOptions, c as HstsOptions, d as HttpError, L as LogOptions, R as RateLimitEntry, e as RateLimitOptions, f as RateLimitResult, g as RateLimitStore, h as RateLimiterMiddleware, S as SafeLogger, i as SanitizeOptions, j as SanitizeResult, T as ThreatInfo, k as ThreatType, V as ValidationConfig, l as ValidationError, m as ValidationResult, n as ValidationSchema } from '../types-CsOFHoD9.js';
2
- import 'express';
3
-
4
1
  /**
5
- * @module @arcis/node/core/errors
6
- * Custom error classes for Arcis
2
+ * @module @arcis/node/core
3
+ * Core types, constants, and errors for Arcis
7
4
  */
8
- /**
9
- * Base class for all Arcis errors
10
- */
11
- declare class ArcisError extends Error {
12
- readonly statusCode: number;
13
- readonly code: string;
14
- /** Whether the error message is safe to expose to API clients. */
15
- readonly expose: boolean;
16
- constructor(message: string, statusCode?: number, code?: string);
17
- }
18
- /**
19
- * Error thrown when input validation fails
20
- */
21
- declare class ValidationError extends ArcisError {
22
- readonly errors: string[];
23
- constructor(errors: string[]);
24
- }
25
-
26
- /**
27
- * Error thrown when rate limit is exceeded
28
- */
29
- declare class RateLimitError extends ArcisError {
30
- readonly retryAfter: number;
31
- constructor(message: string, retryAfter: number);
32
- }
33
- /**
34
- * Error thrown when input is too large
35
- */
36
- declare class InputTooLargeError extends ArcisError {
37
- readonly maxSize: number;
38
- readonly actualSize: number;
39
- constructor(maxSize: number, actualSize: number);
40
- }
41
- /**
42
- * Error thrown when security threat is detected
43
- */
44
- declare class SecurityThreatError extends ArcisError {
45
- readonly threatType: string;
46
- readonly pattern: string;
47
- constructor(threatType: string, pattern: string);
48
- }
49
- /**
50
- * Error thrown when sanitization fails
51
- */
52
- declare class SanitizationError extends ArcisError {
53
- constructor(message: string);
54
- }
55
-
56
- /**
57
- * @module @arcis/node/core/constants
58
- * Named constants for Arcis - no magic numbers
59
- */
60
- declare const INPUT: {
61
- /** Default maximum input size (1MB) */
62
- readonly DEFAULT_MAX_SIZE: 1000000;
63
- /** Maximum recursion depth for nested objects */
64
- readonly MAX_RECURSION_DEPTH: 10;
65
- };
66
- declare const RATE_LIMIT: {
67
- /** Default window size (1 minute) */
68
- readonly DEFAULT_WINDOW_MS: 60000;
69
- /** Default max requests per window */
70
- readonly DEFAULT_MAX_REQUESTS: 100;
71
- /** Default HTTP status code for rate limited responses */
72
- readonly DEFAULT_STATUS_CODE: 429;
73
- /** Default error message */
74
- readonly DEFAULT_MESSAGE: "Too many requests, please try again later.";
75
- /** Minimum window size (1 second) */
76
- readonly MIN_WINDOW_MS: 1000;
77
- /** Maximum window size (24 hours) */
78
- readonly MAX_WINDOW_MS: 86400000;
79
- };
80
- declare const HEADERS: {
81
- /** Default Content Security Policy */
82
- readonly DEFAULT_CSP: string;
83
- /** Default HSTS max age (1 year in seconds) */
84
- readonly HSTS_MAX_AGE: 31536000;
85
- /** Default X-Frame-Options value */
86
- readonly FRAME_OPTIONS: "DENY";
87
- /** Default X-Content-Type-Options value */
88
- readonly CONTENT_TYPE_OPTIONS: "nosniff";
89
- /** Default Referrer-Policy value */
90
- readonly REFERRER_POLICY: "strict-origin-when-cross-origin";
91
- /** Default Permissions-Policy value */
92
- readonly PERMISSIONS_POLICY: "geolocation=(), microphone=(), camera=()";
93
- /** Default Cache-Control value for security */
94
- readonly CACHE_CONTROL: "no-store, no-cache, must-revalidate, proxy-revalidate";
95
- };
96
- /**
97
- * Detection patterns — used to flag whether a string contains XSS payloads.
98
- * Must stay in sync with XSS_REMOVE_PATTERNS below.
99
- */
100
- declare const XSS_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
101
- declare const SQL_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
102
- declare const PATH_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
103
- declare const COMMAND_PATTERNS: readonly [RegExp, RegExp, RegExp];
104
- /**
105
- * Prototype pollution keys to block.
106
- * Stored lowercase — always compare with key.toLowerCase().
107
- *
108
- * Includes:
109
- * - __proto__: direct prototype assignment
110
- * - constructor: access to constructor.prototype chain
111
- * - prototype: direct prototype property
112
- * - __defineGetter__/__defineSetter__: legacy property definition (can override getters/setters)
113
- * - __lookupGetter__/__lookupSetter__: legacy property introspection
114
- */
115
- declare const DANGEROUS_PROTO_KEYS: Set<string>;
116
- /** MongoDB operators to block */
117
- declare const NOSQL_DANGEROUS_KEYS: Set<string>;
118
- declare const REDACTION: {
119
- /** Replacement text for redacted values */
120
- readonly REPLACEMENT: "[REDACTED]";
121
- /** Truncation indicator */
122
- readonly TRUNCATED: "[TRUNCATED]";
123
- /** Max depth indicator */
124
- readonly MAX_DEPTH: "[MAX_DEPTH]";
125
- /** Default max message length */
126
- readonly DEFAULT_MAX_LENGTH: 10000;
127
- /** Default sensitive keys to redact */
128
- readonly SENSITIVE_KEYS: Set<string>;
129
- };
130
- declare const VALIDATION: {
131
- /**
132
- * Email regex pattern.
133
- * Rejects consecutive dots in local part (e.g. test..foo@example.com),
134
- * leading/trailing dots, and other common invalid forms.
135
- */
136
- readonly EMAIL: RegExp;
137
- /**
138
- * URL regex pattern.
139
- * Only allows http:// and https:// — explicitly rejects javascript:,
140
- * data:, vbscript:, and other dangerous URI schemes.
141
- */
142
- readonly URL: RegExp;
143
- /** UUID regex pattern (v4) */
144
- readonly UUID: RegExp;
145
- };
146
- declare const ERRORS: {
147
- /** Generic error message (production) */
148
- readonly INTERNAL_SERVER_ERROR: "Internal Server Error";
149
- /** Input too large error */
150
- readonly INPUT_TOO_LARGE: (maxSize: number) => string;
151
- /** Validation error messages */
152
- readonly VALIDATION: {
153
- readonly REQUIRED: (field: string) => string;
154
- readonly INVALID_TYPE: (field: string, type: string) => string;
155
- readonly MIN_LENGTH: (field: string, min: number) => string;
156
- readonly MAX_LENGTH: (field: string, max: number) => string;
157
- readonly MIN_VALUE: (field: string, min: number) => string;
158
- readonly MAX_VALUE: (field: string, max: number) => string;
159
- readonly INVALID_FORMAT: (field: string) => string;
160
- readonly INVALID_EMAIL: (field: string) => string;
161
- readonly INVALID_URL: (field: string) => string;
162
- readonly INVALID_UUID: (field: string) => string;
163
- readonly INVALID_ENUM: (field: string, values: unknown[]) => string;
164
- readonly MIN_ITEMS: (field: string, min: number) => string;
165
- readonly MAX_ITEMS: (field: string, max: number) => string;
166
- };
167
- };
168
- declare const BLOCKED: "[BLOCKED]";
169
-
170
- export { ArcisError, ValidationError as ArcisValidationError, BLOCKED, COMMAND_PATTERNS, DANGEROUS_PROTO_KEYS, ERRORS, HEADERS, INPUT, InputTooLargeError, NOSQL_DANGEROUS_KEYS, PATH_PATTERNS, RATE_LIMIT, REDACTION, RateLimitError, SQL_PATTERNS, SanitizationError, SecurityThreatError, VALIDATION, XSS_PATTERNS };
5
+ export type { ArcisOptions, ArcisFunction, ArcisMiddleware, SanitizeOptions, SanitizeResult, ThreatInfo, ThreatType, RateLimitOptions, RateLimitStore, RateLimitEntry, RateLimitResult, RateLimiterMiddleware, HeaderOptions, HstsOptions, ValidationConfig, ValidationSchema, FieldValidator, ValidationResult, ValidationError, LogOptions, SafeLogger, ErrorHandlerOptions, HttpError, } from './types';
6
+ export { INPUT, RATE_LIMIT, HEADERS, XSS_PATTERNS, SQL_PATTERNS, PATH_PATTERNS, COMMAND_PATTERNS, DANGEROUS_PROTO_KEYS, NOSQL_DANGEROUS_KEYS, REDACTION, VALIDATION, ERRORS, BLOCKED, } from './constants';
7
+ export { ArcisError, ValidationError as ArcisValidationError, RateLimitError, InputTooLargeError, SecurityThreatError, SanitizationError, } from './errors';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EAEV,YAAY,EACZ,aAAa,EACb,eAAe,EAEf,eAAe,EACf,cAAc,EACd,UAAU,EACV,UAAU,EAEV,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,eAAe,EACf,qBAAqB,EAErB,aAAa,EACb,WAAW,EAEX,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,eAAe,EAEf,UAAU,EACV,UAAU,EAEV,mBAAmB,EACnB,SAAS,GACV,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,KAAK,EACL,UAAU,EACV,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,SAAS,EACT,UAAU,EACV,MAAM,EACN,OAAO,GACR,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,UAAU,EACV,eAAe,IAAI,oBAAoB,EACvC,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,UAAU,CAAC"}
@@ -1,12 +1,10 @@
1
- import { Request, RequestHandler, Response, NextFunction } from 'express';
2
-
3
1
  /**
4
2
  * @module @arcis/node/core/types
5
3
  * All TypeScript interfaces and types for Arcis
6
4
  */
7
-
5
+ import type { Request, Response, NextFunction, RequestHandler } from 'express';
8
6
  /** Main Arcis configuration options */
9
- interface ArcisOptions {
7
+ export interface ArcisOptions {
10
8
  /** Enable/configure input sanitization. Default: true */
11
9
  sanitize?: boolean | SanitizeOptions;
12
10
  /** Enable/configure rate limiting. Default: true */
@@ -17,7 +15,7 @@ interface ArcisOptions {
17
15
  logging?: boolean | LogOptions;
18
16
  }
19
17
  /** Sanitization configuration */
20
- interface SanitizeOptions {
18
+ export interface SanitizeOptions {
21
19
  /** Sanitize XSS attempts. Default: true */
22
20
  xss?: boolean;
23
21
  /** Sanitize SQL injection attempts. Default: true */
@@ -48,7 +46,7 @@ interface SanitizeOptions {
48
46
  freeze?: boolean;
49
47
  }
50
48
  /** Result of sanitizing a string */
51
- interface SanitizeResult {
49
+ export interface SanitizeResult {
52
50
  /** The sanitized value */
53
51
  value: string;
54
52
  /** Whether any sanitization was applied */
@@ -57,7 +55,7 @@ interface SanitizeResult {
57
55
  threats: ThreatInfo[];
58
56
  }
59
57
  /** Information about a detected threat */
60
- interface ThreatInfo {
58
+ export interface ThreatInfo {
61
59
  /** Type of threat detected */
62
60
  type: ThreatType;
63
61
  /** Pattern that matched */
@@ -68,9 +66,9 @@ interface ThreatInfo {
68
66
  location?: string;
69
67
  }
70
68
  /** Types of security threats */
71
- type ThreatType = 'xss' | 'sql_injection' | 'nosql_injection' | 'path_traversal' | 'command_injection' | 'prototype_pollution' | 'header_injection' | 'ssti' | 'xxe';
69
+ export type ThreatType = 'xss' | 'sql_injection' | 'nosql_injection' | 'path_traversal' | 'command_injection' | 'prototype_pollution' | 'header_injection' | 'ssti' | 'xxe';
72
70
  /** Rate limiting configuration */
73
- interface RateLimitOptions {
71
+ export interface RateLimitOptions {
74
72
  /** Maximum requests per window. Default: 100 */
75
73
  max?: number;
76
74
  /** Window size in milliseconds. Default: 60000 (1 minute) */
@@ -87,7 +85,7 @@ interface RateLimitOptions {
87
85
  store?: RateLimitStore;
88
86
  }
89
87
  /** External store interface for distributed rate limiting */
90
- interface RateLimitStore {
88
+ export interface RateLimitStore {
91
89
  /** Get current count for a key */
92
90
  get(key: string): Promise<RateLimitEntry | null>;
93
91
  /** Set entry for a key */
@@ -102,29 +100,29 @@ interface RateLimitStore {
102
100
  close?(): Promise<void>;
103
101
  }
104
102
  /** Rate limit entry stored in a store */
105
- interface RateLimitEntry {
103
+ export interface RateLimitEntry {
106
104
  /** Number of requests in the current window */
107
105
  count: number;
108
106
  /** Timestamp when the window resets */
109
107
  resetTime: number;
110
108
  }
111
109
  /** Result from incrementing a rate limit counter */
112
- interface RateLimitResult {
110
+ export interface RateLimitResult {
113
111
  /** Current request count */
114
112
  count: number;
115
113
  /** When the window resets */
116
114
  resetTime: Date;
117
115
  }
118
116
  /** Rate limiter middleware with cleanup support */
119
- interface RateLimiterMiddleware extends RequestHandler {
117
+ export interface RateLimiterMiddleware extends RequestHandler {
120
118
  /** Clean up the rate limiter (clear intervals, close stores) */
121
119
  close: () => void;
122
120
  }
123
121
  /** Security headers configuration */
124
- interface HeaderOptions {
122
+ export interface HeaderOptions {
125
123
  /** Content Security Policy. true = default, string = custom, false = disabled */
126
124
  contentSecurityPolicy?: boolean | string;
127
- /** Enable X-XSS-Protection header. Default: true */
125
+ /** Enable X-XSS-Protection header. Default: true (sends '0' to disable legacy XSS auditor) */
128
126
  xssFilter?: boolean;
129
127
  /** Enable X-Content-Type-Options: nosniff. Default: true */
130
128
  noSniff?: boolean;
@@ -138,9 +136,19 @@ interface HeaderOptions {
138
136
  permissionsPolicy?: string | false;
139
137
  /** Cache-Control configuration. Default: true (no-cache) */
140
138
  cacheControl?: boolean | string;
139
+ /** Cross-Origin-Opener-Policy value. Default: 'same-origin'. false to disable. */
140
+ crossOriginOpenerPolicy?: string | false;
141
+ /** Cross-Origin-Resource-Policy value. Default: 'same-origin'. false to disable. */
142
+ crossOriginResourcePolicy?: string | false;
143
+ /** Cross-Origin-Embedder-Policy value. Default: 'require-corp'. false to disable. */
144
+ crossOriginEmbedderPolicy?: string | false;
145
+ /** Origin-Agent-Cluster header. Default: true (sends '?1'). false to disable. */
146
+ originAgentCluster?: boolean;
147
+ /** X-DNS-Prefetch-Control value. Default: true (sends 'off'). false to disable. */
148
+ dnsPrefetchControl?: boolean;
141
149
  }
142
150
  /** HSTS (HTTP Strict Transport Security) options */
143
- interface HstsOptions {
151
+ export interface HstsOptions {
144
152
  /** Max age in seconds. Default: 31536000 (1 year) */
145
153
  maxAge?: number;
146
154
  /** Include subdomains. Default: true */
@@ -149,18 +157,18 @@ interface HstsOptions {
149
157
  preload?: boolean;
150
158
  }
151
159
  /** Validation configuration */
152
- interface ValidationConfig {
160
+ export interface ValidationConfig {
153
161
  /** Strip fields not in schema. Default: true (prevents mass assignment) */
154
162
  stripUnknown?: boolean;
155
163
  /** Stop on first error. Default: false */
156
164
  abortEarly?: boolean;
157
165
  }
158
166
  /** Validation schema for request data */
159
- interface ValidationSchema {
167
+ export interface ValidationSchema {
160
168
  [key: string]: FieldValidator;
161
169
  }
162
170
  /** Field validation rules */
163
- interface FieldValidator {
171
+ export interface FieldValidator {
164
172
  /** Expected data type */
165
173
  type: 'string' | 'number' | 'boolean' | 'email' | 'url' | 'uuid' | 'array' | 'object';
166
174
  /** Whether field is required. Default: false */
@@ -184,7 +192,7 @@ interface FieldValidator {
184
192
  custom?: (value: unknown) => true | false | string;
185
193
  }
186
194
  /** Validation result */
187
- interface ValidationResult {
195
+ export interface ValidationResult {
188
196
  /** Whether validation passed */
189
197
  valid: boolean;
190
198
  /** Validation errors */
@@ -193,7 +201,7 @@ interface ValidationResult {
193
201
  data: Record<string, unknown>;
194
202
  }
195
203
  /** Single validation error */
196
- interface ValidationError {
204
+ export interface ValidationError {
197
205
  /** Field that failed validation */
198
206
  field: string;
199
207
  /** Human-readable error message */
@@ -202,8 +210,8 @@ interface ValidationError {
202
210
  code: string;
203
211
  }
204
212
  /** Safe logging configuration */
205
- type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';
206
- interface LogOptions {
213
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';
214
+ export interface LogOptions {
207
215
  /** Additional keys to redact beyond defaults */
208
216
  redactKeys?: string[];
209
217
  /** Maximum message length before truncation. Default: 10000 */
@@ -214,7 +222,7 @@ interface LogOptions {
214
222
  level?: LogLevel;
215
223
  }
216
224
  /** Safe logger interface */
217
- interface SafeLogger {
225
+ export interface SafeLogger {
218
226
  /** Log at specified level */
219
227
  log: (level: string, message: string, data?: unknown) => void;
220
228
  /** Log info message */
@@ -227,7 +235,7 @@ interface SafeLogger {
227
235
  debug: (message: string, data?: unknown) => void;
228
236
  }
229
237
  /** Error handler configuration */
230
- interface ErrorHandlerOptions {
238
+ export interface ErrorHandlerOptions {
231
239
  /** Show stack traces and detailed errors. Default: false */
232
240
  isDev?: boolean;
233
241
  /** Log errors. Default: true */
@@ -238,7 +246,7 @@ interface ErrorHandlerOptions {
238
246
  customHandler?: (err: Error, req: Request, res: Response) => void;
239
247
  }
240
248
  /** Extended Error with optional status code */
241
- interface HttpError extends Error {
249
+ export interface HttpError extends Error {
242
250
  statusCode?: number;
243
251
  status?: number;
244
252
  /**
@@ -249,14 +257,14 @@ interface HttpError extends Error {
249
257
  expose?: boolean;
250
258
  }
251
259
  /** Generic Arcis middleware type */
252
- type ArcisMiddleware = (req: Request, res: Response, next: NextFunction) => void | Promise<void>;
260
+ export type ArcisMiddleware = (req: Request, res: Response, next: NextFunction) => void | Promise<void>;
253
261
  /** Array of middlewares returned by arcis() with an attached cleanup method */
254
- type ArcisMiddlewareStack = RequestHandler[] & {
262
+ export type ArcisMiddlewareStack = RequestHandler[] & {
255
263
  /** Clean up resources created by arcis() (rate limiter intervals, etc.) */
256
264
  close: () => void;
257
265
  };
258
266
  /** Arcis function with attached utilities */
259
- interface ArcisFunction {
267
+ export interface ArcisFunction {
260
268
  (options?: ArcisOptions): ArcisMiddlewareStack;
261
269
  sanitize: (options?: SanitizeOptions) => RequestHandler;
262
270
  rateLimit: (options?: RateLimitOptions) => RateLimiterMiddleware;
@@ -265,5 +273,4 @@ interface ArcisFunction {
265
273
  logger: (options?: LogOptions) => SafeLogger;
266
274
  errorHandler: (options?: ErrorHandlerOptions | boolean) => (err: Error, req: Request, res: Response, next: NextFunction) => void;
267
275
  }
268
-
269
- export type { ArcisFunction as A, ErrorHandlerOptions as E, FieldValidator as F, HeaderOptions as H, LogOptions as L, RateLimitEntry as R, SafeLogger as S, ThreatInfo as T, ValidationConfig as V, ArcisMiddleware as a, ArcisOptions as b, HstsOptions as c, HttpError as d, RateLimitOptions as e, RateLimitResult as f, RateLimitStore as g, RateLimiterMiddleware as h, SanitizeOptions as i, SanitizeResult as j, ThreatType as k, ValidationError as l, ValidationResult as m, ValidationSchema as n, ArcisMiddlewareStack as o };
276
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}