exisjs 0.7.4 → 0.7.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 (76) hide show
  1. package/dist/cli/commands/build.d.ts +4 -2
  2. package/dist/cli/commands/build.d.ts.map +1 -1
  3. package/dist/cli/commands/build.js +80 -22
  4. package/dist/cli/commands/build.js.map +1 -1
  5. package/dist/cli/commands/dev.d.ts.map +1 -1
  6. package/dist/cli/commands/dev.js +121 -27
  7. package/dist/cli/commands/dev.js.map +1 -1
  8. package/dist/cli/commands/doctor.d.ts.map +1 -1
  9. package/dist/cli/commands/doctor.js +5 -2
  10. package/dist/cli/commands/doctor.js.map +1 -1
  11. package/dist/cli/commands/generate.d.ts +1 -0
  12. package/dist/cli/commands/generate.d.ts.map +1 -1
  13. package/dist/cli/commands/generate.js +25 -0
  14. package/dist/cli/commands/generate.js.map +1 -1
  15. package/dist/cli/commands/start.d.ts.map +1 -1
  16. package/dist/cli/commands/start.js +17 -5
  17. package/dist/cli/commands/start.js.map +1 -1
  18. package/dist/cli/index.js +10 -3
  19. package/dist/cli/index.js.map +1 -1
  20. package/dist/cli/manifest.d.ts.map +1 -1
  21. package/dist/cli/manifest.js +12 -4
  22. package/dist/cli/manifest.js.map +1 -1
  23. package/dist/config/env.d.ts.map +1 -1
  24. package/dist/config/env.js +8 -0
  25. package/dist/config/env.js.map +1 -1
  26. package/dist/decorators/constants.d.ts +2 -0
  27. package/dist/decorators/constants.d.ts.map +1 -1
  28. package/dist/docs/content/boundaries.mdx +33 -3
  29. package/dist/docs/content/config.mdx +26 -0
  30. package/dist/docs/content/errors.mdx +38 -2
  31. package/dist/docs/content/requests.mdx +38 -5
  32. package/dist/docs/content/responses.mdx +43 -5
  33. package/dist/docs/content/security.mdx +17 -4
  34. package/dist/docs/content/structure.mdx +91 -12
  35. package/dist/docs/content/validation.mdx +40 -4
  36. package/dist/lib/start-server.js +16 -0
  37. package/dist/lib/start-server.js.map +1 -1
  38. package/dist/middleware/rate-limit.d.ts.map +1 -1
  39. package/dist/middleware/rate-limit.js +9 -0
  40. package/dist/middleware/rate-limit.js.map +1 -1
  41. package/dist/router/boundary.d.ts +12 -0
  42. package/dist/router/boundary.d.ts.map +1 -1
  43. package/dist/router/boundary.js.map +1 -1
  44. package/dist/router/route-scanner.d.ts +1 -0
  45. package/dist/router/route-scanner.d.ts.map +1 -1
  46. package/dist/router/route-scanner.js +193 -8
  47. package/dist/router/route-scanner.js.map +1 -1
  48. package/dist/router/types.d.ts +3 -1
  49. package/dist/router/types.d.ts.map +1 -1
  50. package/dist/sanitize/index.d.ts +6 -6
  51. package/dist/sanitize/index.d.ts.map +1 -1
  52. package/dist/sanitize/index.js +8 -8
  53. package/dist/sanitize/index.js.map +1 -1
  54. package/dist/server/app.d.ts +1 -0
  55. package/dist/server/app.d.ts.map +1 -1
  56. package/dist/server/app.js +4 -0
  57. package/dist/server/app.js.map +1 -1
  58. package/dist/server/engines/node-engine.d.ts.map +1 -1
  59. package/dist/server/engines/node-engine.js +1 -0
  60. package/dist/server/engines/node-engine.js.map +1 -1
  61. package/dist/server/request-handler.d.ts.map +1 -1
  62. package/dist/server/request-handler.js +15 -1
  63. package/dist/server/request-handler.js.map +1 -1
  64. package/dist/server/request.d.ts +6 -0
  65. package/dist/server/request.d.ts.map +1 -1
  66. package/dist/server/request.js +94 -33
  67. package/dist/server/request.js.map +1 -1
  68. package/dist/server/response.d.ts +3 -1
  69. package/dist/server/response.d.ts.map +1 -1
  70. package/dist/server/response.js +98 -10
  71. package/dist/server/response.js.map +1 -1
  72. package/dist/validator/tex.d.ts +7 -7
  73. package/dist/validator/tex.d.ts.map +1 -1
  74. package/dist/validator/tex.js +217 -5
  75. package/dist/validator/tex.js.map +1 -1
  76. package/package.json +8 -8
@@ -210,10 +210,12 @@ res.status(404)
210
210
 
211
211
  ## 3. Cookies
212
212
 
213
- ExisJS provides native helper methods for setting and clearing cookies safely.
213
+ ExisJS provides native helper methods for setting and clearing cookies safely, supporting modern web standards including CHIPS (Partitioned Cookies) and Priority hints.
214
+
215
+ ### Setting Cookies
214
216
 
215
217
  ```typescript
216
- // Set a secure, HTTP-only cookie
218
+ // Set a secure, HTTP-only session cookie
217
219
  res.cookie('session_id', '123456', {
218
220
  maxAge: 86400, // 1 day in seconds
219
221
  httpOnly: true,
@@ -221,15 +223,49 @@ res.cookie('session_id', '123456', {
221
223
  sameSite: 'Strict'
222
224
  })
223
225
 
224
- // Clear a cookie
226
+ // Cross-site embedded iframe cookie with CHIPS (Partitioned)
227
+ res.cookie('widget_pref', 'dark_mode', {
228
+ sameSite: 'None', // Automatically forces `secure: true` per modern browser specs
229
+ partitioned: true, // Cookies Having Independent Partitioned State (CHIPS)
230
+ priority: 'high', // Hints browser cookie retention under storage pressure ('low' | 'medium' | 'high')
231
+ path: '/'
232
+ })
233
+ ```
234
+
235
+ #### Cookie Options Reference
236
+
237
+ | Option | Type | Default | Description |
238
+ | :--- | :--- | :--- | :--- |
239
+ | `maxAge` | `number` | `undefined` | Lifetime of the cookie in seconds (sets both `Max-Age` and computed `Expires`). |
240
+ | `expires` | `Date` | `undefined` | Absolute expiration date for the cookie. |
241
+ | `httpOnly` | `boolean` | `false` | Mitigates XSS by preventing client-side JavaScript access. |
242
+ | `secure` | `boolean` | `false` | Requires HTTPS. *Automatically set to `true` if `sameSite: 'None'` is provided.* |
243
+ | `sameSite` | `'Strict' \| 'Lax' \| 'None' \| boolean` | `undefined` | Controls cross-site request cookie inclusion. |
244
+ | `partitioned` | `boolean` | `false` | Enables CHIPS for third-party contexts across top-level site partitions. |
245
+ | `priority` | `'low' \| 'medium' \| 'high'` | `undefined` | RFC 6265bis storage priority hint when client cookie capacity is exhausted. |
246
+ | `path` | `string` | `'/'` | Path where the cookie is valid. |
247
+ | `domain` | `string` | `undefined` | Domain scope for the cookie. |
248
+
249
+ ### Clearing Cookies
250
+
251
+ When clearing cookies, browsers require the matching `path` and `domain` used when the cookie was originally set:
252
+
253
+ ```typescript
254
+ // Clear default root cookie
225
255
  res.clearCookie('session_id')
256
+
257
+ // Clear scoped cookie matching original domain & path
258
+ res.clearCookie('tenant_token', {
259
+ path: '/api',
260
+ domain: '.example.com'
261
+ })
226
262
  ```
227
263
 
228
264
  ---
229
265
 
230
266
  ## 4. File Downloads & Streaming
231
267
 
232
- ExisJS makes streaming files simple, bypassing V8 memory bottlenecks by piping native Node streams directly to the socket.
268
+ ExisJS makes streaming files simple, bypassing V8 memory bottlenecks by piping native Node streams directly to the socket with automated resource cleanup.
233
269
 
234
270
  ### `res.download()`
235
271
  Automatically reads a file from disk, sets the `Content-Disposition` header to force a download in the browser, and infers the correct MIME type based on the file extension.
@@ -263,7 +299,9 @@ export default class ReportController {
263
299
  ```
264
300
 
265
301
  ### `res.sendStream()`
266
- If you are fetching data from an external source (like AWS S3) or generating data on the fly, you can pipe any `ReadableStream` directly to the client.
302
+ Pipe any Node.js `Readable` stream directly to the client with built-in leak prevention:
303
+ - **Client Disconnect Cleanup**: If the client aborts or closes the connection prematurely, the source stream is immediately destroyed (`stream.destroy()`), releasing underlying file handles or external sockets.
304
+ - **Unhandled Error Catching**: Errors emitted during stream consumption are trapped gracefully, preventing unhandled stream crashes.
267
305
 
268
306
  #### Functional Paradigm
269
307
 
@@ -41,7 +41,7 @@ export default exis({
41
41
 
42
42
  ## 2. In-Memory Rate Limiting
43
43
 
44
- The core `rateLimit` middleware provides high-performance in-memory and off-heap native rate limiting:
44
+ The core `rateLimit` middleware provides high-performance in-memory and off-heap native rate limiting with standard HTTP response headers:
45
45
 
46
46
  ```typescript filename="src/http/boundary.ts"
47
47
  import { defineBoundary } from 'exisjs/router'
@@ -51,12 +51,25 @@ export const config = defineBoundary({})
51
51
 
52
52
  // Apply rate limiting chain step across the boundary
53
53
  export const limiter = rateLimit({
54
- windowMs: 60 * 1000, // 1 minute
55
- max: 100, // 100 requests per minute
56
- message: 'Too many requests from this IP, please try again after a minute'
54
+ windowMs: 60 * 1000, // 1 minute window
55
+ max: 100, // 100 requests per window
56
+ message: 'Too many requests from this IP, please try again after a minute',
57
+ keyGenerator: (req) => req.ip // Uses normalized IPv4/IPv6 client IP
57
58
  })
58
59
  ```
59
60
 
61
+ ### Standard Rate Limit Headers
62
+
63
+ `rateLimit` automatically emits standard IETF draft and legacy rate-limiting headers on every response:
64
+
65
+ | Header | Description | Example |
66
+ | :--- | :--- | :--- |
67
+ | `RateLimit-Limit` | Maximum request quota for the configured window. | `100` |
68
+ | `RateLimit-Remaining` | Remaining requests permitted within the current window. | `42` |
69
+ | `RateLimit-Reset` | Time remaining in seconds until the window quota resets. | `18` |
70
+ | `Retry-After` | Included on `429 Too Many Requests` (RFC 6585) indicating seconds to wait. | `18` |
71
+ | `X-RateLimit-*` | Legacy header equivalents for backwards compatibility. | `X-RateLimit-Reset: 18` |
72
+
60
73
  > [!NOTE]
61
74
  > The core `rateLimit` middleware runs using an in-memory native off-heap store. For distributed, multi-instance rate limiting backed by Redis, use `@exisjs/cache`.
62
75
 
@@ -23,6 +23,7 @@ my-backend/
23
23
  ├── src/
24
24
  │ ├── http/
25
25
  │ │ ├── server.ts # Application entry point
26
+ │ │ ├── error.ts # Centralized framework exception handler (onError)
26
27
  │ │ ├── route.ts # Root routes (e.g. GET /api)
27
28
  │ │ ├── boundary.ts # Root boundary (config + request pipeline)
28
29
  │ │ ├── users/
@@ -72,6 +73,7 @@ Both styles are automatically detected by the route scanner, CLI manifest genera
72
73
  | `schema.ts` / `*.schema.ts` | `tex` validation schemas, imported by route files. Mandatory for every route accepting input. | Handlers, routing |
73
74
  | `service.ts` / `*.service.ts` | Business logic and data access. DI-injectable. | Routing, response shaping |
74
75
  | `boundary.ts` / `*.boundary.ts` | Folder-scoped config + request pipeline for everything in this folder and below. | — |
76
+ | `error.ts` / `*.error.ts` | Centralized exception and validation error handler (`onError`). Auto-mounted by the framework. | Business logic, routes |
75
77
 
76
78
  ---
77
79
 
@@ -172,14 +174,16 @@ A `boundary.ts` applies to every route in its folder and all subfolders. It has
172
174
  two independent halves:
173
175
 
174
176
  1. **Config** — pure data, via `defineBoundary()` (functional) or `@Boundary()`
175
- (OOP argument). CORS, headers, DI providers, excluded paths.
176
- 2. **Pipeline** — real code, auto-detected by function signature. No imports,
177
+ (OOP argument). CORS, headers, DI providers, excluded paths, and lifecycle hooks.
178
+ 2. **Pipeline & Hooks** — real code, auto-detected by function signature. No imports,
177
179
  no manual registration required.
178
180
 
179
- | Signature | Detected as | Runs |
180
- | ---------------------------------------------------------------------------- | ------------ | ---------------------------------------------------- |
181
- | `(req, res, next)` | A chain step | In file/declaration order, before the route |
182
- | `(ctx, next)` — default export (functional) or a method named `handle` (OOP) | The wrapper | Around all chain steps and the nested route/boundary |
181
+ | Signature | Detected as | Runs |
182
+ | :--- | :--- | :--- |
183
+ | `(req, res, next)` | Chain Step | In file/declaration order, before the route handler |
184
+ | `beforeHandle(req, res)` | Boundary Guard Hook | Immediately before route execution. Short-circuits on `false` or when headers sent |
185
+ | `afterHandle(req, res, data)` | Response Hook | Immediately after route execution. Receives returned data to transform or audit |
186
+ | `(ctx, next)` — default export (functional) or `handle(ctx, next)` (OOP) | Pipeline Wrapper | Around all chain steps and the nested route/boundary |
183
187
 
184
188
  ### Functional
185
189
 
@@ -190,11 +194,25 @@ import type { Request, Response, Next, BoundaryContext } from "exisjs/router";
190
194
  export const config = defineBoundary({
191
195
  cors: { origin: ["https://myapp.com"], credentials: true },
192
196
  headers: { "X-Powered-By": "ExisJS" },
193
- exclude: [{ path: "/health", method: "GET" }],
197
+ exclude: [{ path: "/admin/health", method: "GET" }],
198
+
199
+ // Pre-handler hook (returns false to block with 403, or sends response)
200
+ beforeHandle(req, res) {
201
+ if (req.headers["x-role"] !== "admin") {
202
+ res.status(403).json({ error: "Admin role required" });
203
+ return false;
204
+ }
205
+ },
206
+
207
+ // Post-handler hook (transforms returned payload or performs async audit)
208
+ afterHandle(req, res, data) {
209
+ res.setHeader("X-Audited-By", "AdminBoundary");
210
+ return { ...data, auditedAt: Date.now() };
211
+ },
194
212
  });
195
213
 
196
- export function auth(req: Request, res: Response, next: Next) {
197
- if (!req.headers["x-api-key"]) throw new UnauthorizedError("Missing API key");
214
+ export function logStep(req: Request, res: Response, next: Next) {
215
+ console.log(`[Admin] ${req.method} ${req.path}`);
198
216
  next();
199
217
  }
200
218
 
@@ -216,14 +234,29 @@ import type { Request, Response, Next, BoundaryContext } from "exisjs/router";
216
234
  @Boundary({
217
235
  cors: { origin: ["https://myapp.com"], credentials: true },
218
236
  headers: { "X-Powered-By": "ExisJS" },
237
+ exclude: ["/admin/health"],
219
238
  })
220
239
  export default class AdminBoundary {
221
- auth(req: Request, res: Response, next: Next) {
222
- if (!req.headers["x-api-key"])
223
- throw new UnauthorizedError("Missing API key");
240
+ // Pre-handler hook
241
+ beforeHandle(req: Request, res: Response) {
242
+ if (req.headers["x-role"] !== "admin") {
243
+ res.status(403).json({ error: "Admin role required" });
244
+ return false;
245
+ }
246
+ }
247
+
248
+ // Post-handler hook
249
+ afterHandle(req: Request, res: Response, data: any) {
250
+ return { ...data, auditedAt: Date.now() };
251
+ }
252
+
253
+ // Chain step
254
+ logStep(req: Request, res: Response, next: Next) {
255
+ console.log(`[Admin] ${req.method} ${req.path}`);
224
256
  next();
225
257
  }
226
258
 
259
+ // Wrapper
227
260
  async handle(ctx: BoundaryContext, next: Next) {
228
261
  try {
229
262
  return { success: true, data: await next() };
@@ -234,6 +267,52 @@ export default class AdminBoundary {
234
267
  }
235
268
  ```
236
269
 
270
+ ---
271
+
272
+ ## `src/http/error.ts` (Framework-Level Exception Handler)
273
+
274
+ ExisJS natively discovers and mounts `src/http/error.ts` (or `error.js`) at boot. It exports an `onError(err, req, res)` handler, giving developers a single, standard place to intercept, log, and format all unhandled or validation errors without writing custom `app.onError` boilerplate inside `server.ts`.
275
+
276
+ ### Functional
277
+
278
+ ```typescript filename="src/http/error.ts"
279
+ import type { Request, Response } from "exisjs";
280
+
281
+ export function onError(err: any, req: Request, res: Response) {
282
+ const status = err.statusCode || err.status || 500;
283
+
284
+ // Format consistent error response across the entire API
285
+ res.status(status).json({
286
+ success: false,
287
+ error: {
288
+ message: err.message || "Internal Server Error",
289
+ code: err.code || "INTERNAL_SERVER_ERROR",
290
+ path: req.path,
291
+ },
292
+ });
293
+ }
294
+ ```
295
+
296
+ ### Class-Based (OOP)
297
+
298
+ ```typescript filename="src/http/error.ts"
299
+ import type { Request, Response } from "exisjs";
300
+
301
+ export default class GlobalErrorHandler {
302
+ onError(err: any, req: Request, res: Response) {
303
+ const status = err.statusCode || err.status || 500;
304
+ res.status(status).json({
305
+ success: false,
306
+ error: {
307
+ message: err.message || "Internal Server Error",
308
+ code: err.code || "INTERNAL_ERROR",
309
+ path: req.path,
310
+ },
311
+ });
312
+ }
313
+ }
314
+ ```
315
+
237
316
  A nested folder's `boundary.ts` always runs _inside_ its parent's `next()` —
238
317
  pipeline depth mirrors folder depth automatically.
239
318
 
@@ -32,13 +32,15 @@ const safeData = userSchema.parse(rawInput)
32
32
 
33
33
  ExisJS supports a comprehensive set of strict validation primitives:
34
34
 
35
- - `tex.string()` - String validation (supports options like `{ min: 5, max: 10 }`).
35
+ - `tex.string()` - String validation (supports options like `{ min: 5, max: 10, pattern: /regex/ }`).
36
36
  - `tex.email()` - Validates standard email formatting.
37
- - `tex.number()` - Strict number validation (fails if passed a string).
37
+ - `tex.number()` - Strict number validation (fails if passed a string unless `coerce: true`).
38
+ - `tex.number({ coerce: true, min: 0, max: 100 })` - Automatically coerces incoming string representations (e.g., query params) into native numbers.
38
39
  - `tex.boolean()` - Strict boolean validation.
39
- - `tex.number({ coerce: true })` - Automatically coerces incoming string representations into native JavaScript numbers.
40
40
  - `tex.boolean({ coerce: true })` - Coerces `"true"`/`"1"` and `"false"`/`"0"` into native booleans.
41
- - `tex.array(schema)` - Validates an array of items. Accepts primitive types, `tex.object(...)`, or shorthand plain objects `{ ... }`.
41
+ - `tex.date()` - Strict Date instance validation.
42
+ - `tex.date({ coerce: true, minDate: new Date('2020-01-01'), maxDate: new Date() })` - Automatically parses ISO 8601 strings, UNIX timestamps, or date strings into native JavaScript `Date` objects with optional boundary checks.
43
+ - `tex.array(schema, { coerce: true, min: 1, max: 10 })` - Validates an array of items. When `{ coerce: true }` is enabled, automatically converts single items or comma-separated query strings (`"apple,banana"`) into typed arrays. Accepts primitive types, `tex.object(...)`, or shorthand plain objects `{ ... }`.
42
44
  - `tex.object({ ... })` - Validates structured JSON objects.
43
45
  - `tex.enum(['A', 'B'])` - Ensures the value matches one of the provided exact strings.
44
46
 
@@ -254,6 +256,40 @@ export const RegisterUserSchema = tex.object({
254
256
  - **Stringified JSON Support**: When submitting `multipart/form-data`, stringified JSON arrays (e.g. `items: "[{\"sku\":\"ABC\",\"quantity\":2}]"`) or stringified objects are automatically deserialized and validated.
255
257
  - **Type Inference**: TypeScript automatically infers the shape of array elements for both `tex.array(tex.object(...))` and `tex.array({ ... })`, ensuring full autocomplete without falling back to `never`.
256
258
 
259
+ ### Query String Array & Date Coercion
260
+
261
+ Query strings in HTTP cannot natively represent arrays or date instances. ExisJS solves this elegantly through `{ coerce: true }`:
262
+
263
+ ```typescript filename="src/http/events/route.ts"
264
+ import { controller, route } from 'exisjs/router'
265
+ import { tex } from 'exisjs/validator'
266
+
267
+ const FilterSchema = tex.object({
268
+ // Coerces ISO 8601 strings (?from=2026-09-01T00:00:00Z) into Date instances
269
+ from: tex.date({ coerce: true, optional: true }),
270
+ to: tex.date({ coerce: true, optional: true }),
271
+
272
+ // Coerces both comma-separated strings (?tags=tech,ai) AND repeated params (?tags=tech&tags=ai)
273
+ // or single values (?tags=tech -> ['tech']) into a typed array of strings
274
+ tags: tex.array(tex.string(), { coerce: true, optional: true }),
275
+
276
+ // Numbers within comma-separated arrays (?ids=1,2,3 -> [1, 2, 3]) are also coerced
277
+ ids: tex.array(tex.number({ coerce: true }), { coerce: true, optional: true })
278
+ })
279
+
280
+ export default controller({
281
+ listEvents: route.get('/events', {
282
+ query: FilterSchema,
283
+ handle({ query, res }) {
284
+ // query.from is Date | undefined
285
+ // query.tags is string[] | undefined
286
+ // query.ids is number[] | undefined
287
+ res.json({ filter: query })
288
+ }
289
+ })
290
+ })
291
+ ```
292
+
257
293
  ---
258
294
 
259
295
  ## Pagination Schemas (`tex.pagination`)
@@ -84,6 +84,12 @@ async function start() {
84
84
  const mod = await dynamicImport(url);
85
85
  // Support declarative `export default exis({ ... })` or `@Server` classes
86
86
  let app = mod.default || mod.app;
87
+ if (app &&
88
+ !app._isExisAppDefinition &&
89
+ typeof app.create !== 'function' &&
90
+ app.default) {
91
+ app = app.default;
92
+ }
87
93
  let instance = null;
88
94
  const { setActiveAppInstance } = await Promise.resolve().then(() => __importStar(require('../server/app.js')));
89
95
  if (app && app._isExisAppDefinition) {
@@ -158,7 +164,11 @@ async function start() {
158
164
  // On SIGTERM (Kubernetes, Docker stop) or SIGINT (Ctrl+C), close the
159
165
  // server cleanly rather than hard-killing it — this allows in-flight
160
166
  // requests to complete and prevents data loss.
167
+ let isShuttingDown = false;
161
168
  const shutdown = async (signal) => {
169
+ if (isShuttingDown)
170
+ return;
171
+ isShuttingDown = true;
162
172
  const isCLI = process.env.__EXIS_DEV_SERVER || process.env.__EXIS_CLI;
163
173
  if (!isCLI) {
164
174
  console.error(`\n[exis] ${signal} received. Shutting down gracefully...`);
@@ -179,6 +189,12 @@ async function start() {
179
189
  };
180
190
  process.once('SIGTERM', () => shutdown('SIGTERM'));
181
191
  process.once('SIGINT', () => shutdown('SIGINT'));
192
+ process.on('message', (msg) => {
193
+ if (msg === 'shutdown' ||
194
+ (typeof msg === 'object' && msg?.type === 'exis:shutdown')) {
195
+ shutdown('IPC');
196
+ }
197
+ });
182
198
  // ─── Dev Server Error Boundary ───────────────────────────────────────────
183
199
  // Prevent dev server from fatally crashing on strict unhandled errors (e.g. Postgres disconnected)
184
200
  if (process.env.__EXIS_DEV_SERVER) {
@@ -1 +1 @@
1
- {"version":3,"file":"start-server.js","sourceRoot":"","sources":["../../src/lib/start-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start-server.js","sourceRoot":"","sources":["../../src/lib/start-server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/middleware/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAA0B,OAAO,EAAE,MAAM,UAAU,CAAA;AAGxE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAA;CACxC;AAED,wBAAgB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CA6EjE"}
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/middleware/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAA0B,OAAO,EAAE,MAAM,UAAU,CAAA;AAGxE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAA;CACxC;AAED,wBAAgB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAwFjE"}
@@ -56,9 +56,18 @@ function rateLimit(options = {}) {
56
56
  fallbackHits.set(key, record);
57
57
  currentHits = record.count;
58
58
  }
59
+ const resetSeconds = Math.ceil(windowMs / 1000);
60
+ const resetEpochSeconds = Math.ceil((now + windowMs) / 1000);
61
+ // Legacy Headers
59
62
  res.set('X-RateLimit-Limit', max.toString());
60
63
  res.set('X-RateLimit-Remaining', Math.max(0, max - currentHits).toString());
64
+ res.set('X-RateLimit-Reset', resetEpochSeconds.toString());
65
+ // IETF Draft Standard Headers
66
+ res.set('RateLimit-Limit', max.toString());
67
+ res.set('RateLimit-Remaining', Math.max(0, max - currentHits).toString());
68
+ res.set('RateLimit-Reset', resetSeconds.toString());
61
69
  if (currentHits > max) {
70
+ res.set('Retry-After', resetSeconds.toString());
62
71
  return next(new errors_1.HttpError(message, statusCode, 'RATE_LIMIT_EXCEEDED'));
63
72
  }
64
73
  next();
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../src/middleware/rate-limit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../src/middleware/rate-limit.ts"],"names":[],"mappings":"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"}
@@ -67,7 +67,19 @@ export interface BoundaryConfig {
67
67
  * Cascading metadata (e.g., OpenAPI tags, roles) applied to all routes in this directory.
68
68
  */
69
69
  metadata?: Record<string, any>;
70
+ /**
71
+ * Hook executed immediately before any route handler in this boundary.
72
+ * Can short-circuit execution by returning `false` or sending a response directly.
73
+ */
74
+ beforeHandle?: BoundaryBeforeHandleHook | BoundaryBeforeHandleHook[];
75
+ /**
76
+ * Hook executed immediately after a route handler in this boundary successfully returns.
77
+ * Receives `(req, res, data)` and can transform the outgoing payload or perform audit logging.
78
+ */
79
+ afterHandle?: BoundaryAfterHandleHook | BoundaryAfterHandleHook[];
70
80
  }
81
+ export type BoundaryBeforeHandleHook = (req: import('../types').Request<any, any, any>, res: import('../types').Response) => void | boolean | Promise<void | boolean>;
82
+ export type BoundaryAfterHandleHook<T = any> = (req: import('../types').Request<any, any, any>, res: import('../types').Response, data?: T) => void | any | Promise<void | any>;
71
83
  /**
72
84
  * Defines a boundary that acts as folder-scoped config + request pipeline for
73
85
  * everything in this directory and subdirectories.
@@ -1 +1 @@
1
- {"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../../src/router/boundary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEzD,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,OAAO,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IAC9C,GAAG,EAAE,OAAO,UAAU,EAAE,QAAQ,CAAA;IAChC,GAAG,CAAC,EAAE,GAAG,CAAA;IACT,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;IACtB,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IAChC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IAEjC;;OAEG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAA;IAE3B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEhC;;OAEG;IACH,OAAO,CAAC,EAAE,CACR,OAAO,UAAU,EAAE,kBAAkB,GAAG,OAAO,UAAU,EAAE,UAAU,CACtE,EAAE,CAAA;IAEH;;;OAGG;IACH,OAAO,CAAC,EAAE,CACR,OAAO,UAAU,EAAE,kBAAkB,GAAG,OAAO,UAAU,EAAE,UAAU,CACtE,EAAE,CAAA;IAEH;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAA;IAE/C;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,GAAG,mBAAmB,CAAC,EAAE,CAAA;IAE1C;;OAEG;IACH,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IAEf;;OAEG;IACH,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;IAEd;;OAEG;IACH,YAAY,CAAC,EAAE,GAAG,EAAE,CAAA;IAEpB;;;OAGG;IACH,OAAO,CAAC,EACJ,MAAM,GACN,CAAC,CAAC,GAAG,EAAE,OAAO,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC,CAAA;IAE5E;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC/B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAErE"}
1
+ {"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../../src/router/boundary.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"boundary.js","sourceRoot":"","sources":["../../src/router/boundary.ts"],"names":[],"mappings":";;AA+FA,wCAEC;AAND;;;GAGG;AACH,SAAgB,cAAc,CAAC,MAAsB;IACnD,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"boundary.js","sourceRoot":"","sources":["../../src/router/boundary.ts"],"names":[],"mappings":";;AAsHA,wCAEC;AAND;;;GAGG;AACH,SAAgB,cAAc,CAAC,MAAsB;IACnD,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -16,6 +16,7 @@ export declare class RouteScanner {
16
16
  mountRouteFile(filePath: string, routePath: string): Promise<void>;
17
17
  private compileFunctionalController;
18
18
  private mountRouteWithSource;
19
+ private mountErrorHandler;
19
20
  private scanDirectory;
20
21
  }
21
22
  //# sourceMappingURL=route-scanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-scanner.d.ts","sourceRoot":"","sources":["../../src/router/route-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AASxC,qBAAa,YAAY;IAQJ,GAAG,EAAE,GAAG;IAPpB,UAAU;kBAA+B,MAAM;gBAAU,OAAO;OAAK;IACrE,QAAQ,sBAA4B;IACpC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAO;IAC5B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,aAAa,UAAQ;IACrB,cAAc,EAAE,KAAK,GAAG,YAAY,GAAG,IAAI,CAAO;gBAEtC,GAAG,EAAE,GAAG;IAErB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBvB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoRnD,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8jBxE,OAAO,CAAC,2BAA2B;IA4PnC,OAAO,CAAC,oBAAoB;YA2Bd,aAAa;CAqC5B"}
1
+ {"version":3,"file":"route-scanner.d.ts","sourceRoot":"","sources":["../../src/router/route-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AASxC,qBAAa,YAAY;IAQJ,GAAG,EAAE,GAAG;IAPpB,UAAU;kBAA+B,MAAM;gBAAU,OAAO;OAAK;IACrE,QAAQ,sBAA4B;IACpC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAO;IAC5B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,aAAa,UAAQ;IACrB,cAAc,EAAE,KAAK,GAAG,YAAY,GAAG,IAAI,CAAO;gBAEtC,GAAG,EAAE,GAAG;IAErB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBvB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwRnD,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAusBxE,OAAO,CAAC,2BAA2B;IA4PnC,OAAO,CAAC,oBAAoB;YA2Bd,iBAAiB;YA4EjB,aAAa;CAqC5B"}