@nifrajs/middleware 1.13.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/admission.d.ts +2 -2
- package/dist/admission.d.ts.map +1 -1
- package/dist/basic-auth.d.ts +1 -1
- package/dist/basic-auth.d.ts.map +1 -1
- package/dist/basic-auth.js +1 -1
- package/dist/basic-auth.js.map +1 -1
- package/dist/body-limit.d.ts +1 -1
- package/dist/body-limit.d.ts.map +1 -1
- package/dist/body-limit.js +1 -1
- package/dist/body-limit.js.map +1 -1
- package/dist/cache-control.d.ts +1 -1
- package/dist/cache-control.d.ts.map +1 -1
- package/dist/cache-control.js +1 -1
- package/dist/cache-control.js.map +1 -1
- package/dist/cache.d.ts +1 -1
- package/dist/cache.d.ts.map +1 -1
- package/dist/combine.d.ts +1 -1
- package/dist/combine.d.ts.map +1 -1
- package/dist/combine.js +1 -1
- package/dist/combine.js.map +1 -1
- package/dist/compression.d.ts +1 -1
- package/dist/compression.d.ts.map +1 -1
- package/dist/compression.js +1 -1
- package/dist/compression.js.map +1 -1
- package/dist/context-storage.d.ts +1 -1
- package/dist/context-storage.d.ts.map +1 -1
- package/dist/cors.d.ts +1 -1
- package/dist/cors.d.ts.map +1 -1
- package/dist/csrf.d.ts +1 -1
- package/dist/csrf.d.ts.map +1 -1
- package/dist/csrf.js +1 -1
- package/dist/csrf.js.map +1 -1
- package/dist/etag.d.ts +1 -1
- package/dist/etag.d.ts.map +1 -1
- package/dist/etag.js +1 -1
- package/dist/etag.js.map +1 -1
- package/dist/healthcheck.d.ts +1 -1
- package/dist/healthcheck.d.ts.map +1 -1
- package/dist/healthcheck.js +1 -1
- package/dist/healthcheck.js.map +1 -1
- package/dist/idempotency.d.ts +1 -1
- package/dist/idempotency.d.ts.map +1 -1
- package/dist/idempotency.js +1 -1
- package/dist/idempotency.js.map +1 -1
- package/dist/ip-restriction.d.ts +1 -1
- package/dist/ip-restriction.d.ts.map +1 -1
- package/dist/ip-restriction.js.map +1 -1
- package/dist/jwt.d.ts +1 -1
- package/dist/jwt.d.ts.map +1 -1
- package/dist/jwt.js +1 -1
- package/dist/jwt.js.map +1 -1
- package/dist/language.d.ts +1 -1
- package/dist/language.d.ts.map +1 -1
- package/dist/language.js +1 -1
- package/dist/language.js.map +1 -1
- package/dist/logger.d.ts +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +1 -1
- package/dist/logger.js.map +1 -1
- package/dist/method-override.d.ts +2 -4
- package/dist/method-override.d.ts.map +1 -1
- package/dist/method-override.js +4 -5
- package/dist/method-override.js.map +1 -1
- package/dist/openapi.d.ts +1 -1
- package/dist/openapi.d.ts.map +1 -1
- package/dist/openapi.js +1 -1
- package/dist/openapi.js.map +1 -1
- package/dist/powered-by.d.ts +1 -1
- package/dist/powered-by.d.ts.map +1 -1
- package/dist/pretty-json.d.ts +1 -1
- package/dist/pretty-json.d.ts.map +1 -1
- package/dist/pretty-json.js +1 -1
- package/dist/pretty-json.js.map +1 -1
- package/dist/rate-limit.d.ts +1 -1
- package/dist/rate-limit.d.ts.map +1 -1
- package/dist/rate-limit.js.map +1 -1
- package/dist/request-id.d.ts +1 -1
- package/dist/request-id.d.ts.map +1 -1
- package/dist/request-id.js +1 -1
- package/dist/request-id.js.map +1 -1
- package/dist/security-headers.d.ts +1 -1
- package/dist/security-headers.d.ts.map +1 -1
- package/dist/security-headers.js.map +1 -1
- package/dist/timing.d.ts +1 -1
- package/dist/timing.d.ts.map +1 -1
- package/dist/timing.js +1 -1
- package/dist/timing.js.map +1 -1
- package/dist/token-auth.d.ts +1 -1
- package/dist/token-auth.d.ts.map +1 -1
- package/dist/token-auth.js +1 -1
- package/dist/token-auth.js.map +1 -1
- package/dist/trailing-slash.d.ts +2 -2
- package/dist/trailing-slash.d.ts.map +1 -1
- package/dist/trailing-slash.js +1 -1
- package/dist/trailing-slash.js.map +1 -1
- package/package.json +3 -3
- package/src/admission.ts +2 -2
- package/src/basic-auth.ts +1 -1
- package/src/body-limit.ts +1 -1
- package/src/cache-control.ts +1 -1
- package/src/cache.ts +1 -1
- package/src/combine.ts +1 -1
- package/src/compression.ts +1 -1
- package/src/context-storage.ts +1 -1
- package/src/cors.ts +1 -1
- package/src/csrf.ts +1 -1
- package/src/etag.ts +1 -1
- package/src/healthcheck.ts +1 -1
- package/src/idempotency.ts +1 -1
- package/src/ip-restriction.ts +1 -1
- package/src/jwt.ts +1 -1
- package/src/language.ts +1 -1
- package/src/logger.ts +1 -1
- package/src/method-override.ts +4 -8
- package/src/openapi.ts +1 -1
- package/src/powered-by.ts +1 -1
- package/src/pretty-json.ts +1 -1
- package/src/rate-limit.ts +1 -1
- package/src/request-id.ts +1 -1
- package/src/security-headers.ts +1 -1
- package/src/timing.ts +1 -1
- package/src/token-auth.ts +1 -1
- package/src/trailing-slash.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trailing-slash.js","sourceRoot":"","sources":["../src/trailing-slash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"trailing-slash.js","sourceRoot":"","sources":["../src/trailing-slash.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nifrajs/middleware",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Composable middleware for nifra — auth, CSRF, JWT/JWKS, IP restriction, CORS, body limits, response cache, timing, and operational helpers.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bun",
|
|
@@ -46,10 +46,10 @@
|
|
|
46
46
|
"access": "public"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@nifrajs/schema": "
|
|
49
|
+
"@nifrajs/schema": "2.0.0"
|
|
50
50
|
},
|
|
51
51
|
"peerDependencies": {
|
|
52
|
-
"@nifrajs/core": "^
|
|
52
|
+
"@nifrajs/core": "^2.0.0"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@nifrajs/core": "workspace:*",
|
package/src/admission.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { AdmissionController, AdmissionDecision } from "@nifrajs/core"
|
|
1
|
+
import type { AdmissionController, AdmissionDecision } from "@nifrajs/core/server"
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Adaptive capacity admission. Rate limiting bounds request *frequency* and `@nifrajs/budget` bounds
|
|
4
|
+
* Adaptive capacity admission. Rate limiting bounds request *frequency* and `@nifrajs/core/budget` bounds
|
|
5
5
|
* request *duration*; neither stops a healthy instance from accepting more *concurrent* work than it
|
|
6
6
|
* can finish. This gate admits on live capacity evidence — in-flight count + event-loop lag — briefly
|
|
7
7
|
* queues at the edge, and sheds the rest with `429` + `Retry-After`, so p99 stays bounded under load
|
package/src/basic-auth.ts
CHANGED
package/src/body-limit.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { METHODS, type Middleware } from "@nifrajs/core"
|
|
2
1
|
import { NIFRA_ASSURANCE, withRouteAssurance } from "@nifrajs/core/assurance"
|
|
2
|
+
import { METHODS, type Middleware } from "@nifrajs/core/server"
|
|
3
3
|
import { jsonError, SAFE_METHODS } from "./_utils.ts"
|
|
4
4
|
|
|
5
5
|
export interface BodyLimitOptions {
|
package/src/cache-control.ts
CHANGED
package/src/cache.ts
CHANGED
package/src/combine.ts
CHANGED
package/src/compression.ts
CHANGED
package/src/context-storage.ts
CHANGED
package/src/cors.ts
CHANGED
package/src/csrf.ts
CHANGED
package/src/etag.ts
CHANGED
package/src/healthcheck.ts
CHANGED
package/src/idempotency.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { METHODS, type Middleware } from "@nifrajs/core"
|
|
2
1
|
import { NIFRA_ASSURANCE, withRouteAssurance } from "@nifrajs/core/assurance"
|
|
2
|
+
import { METHODS, type Middleware } from "@nifrajs/core/server"
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Idempotency keys for unsafe requests — a client retrying a `POST` (dropped connection, impatient
|
package/src/ip-restriction.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Middleware } from "@nifrajs/core"
|
|
2
1
|
import { NIFRA_ASSURANCE, withRouteAssurance } from "@nifrajs/core/assurance"
|
|
2
|
+
import type { Middleware } from "@nifrajs/core/server"
|
|
3
3
|
import { jsonError, type MaybePromise } from "./_utils.ts"
|
|
4
4
|
|
|
5
5
|
export type IpMatcher = string | ((ip: string, request: Request) => MaybePromise<boolean>)
|
package/src/jwt.ts
CHANGED
package/src/language.ts
CHANGED
package/src/logger.ts
CHANGED
package/src/method-override.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { definePlugin, METHODS, type Method } from "@nifrajs/core"
|
|
1
|
+
import { definePlugin, METHODS, type Method } from "@nifrajs/core/server"
|
|
2
2
|
import { jsonError } from "./_utils.ts"
|
|
3
3
|
|
|
4
4
|
export interface MethodOverrideOptions {
|
|
@@ -16,8 +16,6 @@ export interface MethodOverrideOptions {
|
|
|
16
16
|
readonly methods?: readonly string[]
|
|
17
17
|
/** Target methods accepted from the override source. Default `["PUT", "PATCH", "DELETE"]`. */
|
|
18
18
|
readonly allowed?: readonly Method[]
|
|
19
|
-
/** Invalid override values reject with `400` by default. Use `"ignore"` for legacy clients. */
|
|
20
|
-
readonly onInvalid?: "reject" | "ignore"
|
|
21
19
|
}
|
|
22
20
|
|
|
23
21
|
const SUPPORTED = new Set<string>(METHODS)
|
|
@@ -52,7 +50,6 @@ export function methodOverride(options: MethodOverrideOptions = {}) {
|
|
|
52
50
|
const query = options.query ?? false
|
|
53
51
|
const sourceMethods = new Set((options.methods ?? ["POST"]).map((m) => m.toUpperCase()))
|
|
54
52
|
const allowed = new Set<Method>(options.allowed ?? DEFAULT_ALLOWED)
|
|
55
|
-
const rejectInvalid = options.onInvalid !== "ignore"
|
|
56
53
|
|
|
57
54
|
if (header !== false && header.trim() === "") throw new Error("methodOverride: header is empty")
|
|
58
55
|
if (query !== false && query.trim() === "") throw new Error("methodOverride: query is empty")
|
|
@@ -68,18 +65,17 @@ export function methodOverride(options: MethodOverrideOptions = {}) {
|
|
|
68
65
|
}
|
|
69
66
|
if (query !== false) {
|
|
70
67
|
const value = singleQueryValue(req, query)
|
|
71
|
-
if (value === false)
|
|
72
|
-
return rejectInvalid ? jsonError(400, "invalid_method_override") : undefined
|
|
68
|
+
if (value === false) return jsonError(400, "invalid_method_override")
|
|
73
69
|
if (value !== null) values.push(value)
|
|
74
70
|
}
|
|
75
71
|
if (values.length === 0) return undefined
|
|
76
72
|
if (values.length > 1 && new Set(values.map((v) => v.trim().toUpperCase())).size > 1) {
|
|
77
|
-
return
|
|
73
|
+
return jsonError(400, "invalid_method_override")
|
|
78
74
|
}
|
|
79
75
|
|
|
80
76
|
const method = normalizeMethod(values[0] ?? "")
|
|
81
77
|
if (method === null || !allowed.has(method)) {
|
|
82
|
-
return
|
|
78
|
+
return jsonError(400, "invalid_method_override")
|
|
83
79
|
}
|
|
84
80
|
return method === req.method ? undefined : replacement(req, method)
|
|
85
81
|
}),
|
package/src/openapi.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { definePlugin } from "@nifrajs/core"
|
|
1
|
+
import { definePlugin } from "@nifrajs/core/server"
|
|
2
2
|
// The OpenAPI generator only — `@nifrajs/schema/openapi` is pure (no TypeBox runtime), so the openapi()
|
|
3
3
|
// plugin gets full `t`-schema introspection without pulling the `t` builder into every consumer.
|
|
4
4
|
import { toOpenAPI } from "@nifrajs/schema/openapi"
|
package/src/powered-by.ts
CHANGED
package/src/pretty-json.ts
CHANGED
package/src/rate-limit.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Middleware } from "@nifrajs/core"
|
|
2
1
|
import { NIFRA_ASSURANCE, withRouteAssurance } from "@nifrajs/core/assurance"
|
|
2
|
+
import type { Middleware } from "@nifrajs/core/server"
|
|
3
3
|
|
|
4
4
|
export interface RateLimitResult {
|
|
5
5
|
/** Hits recorded in the current window, including this one. */
|
package/src/request-id.ts
CHANGED
package/src/security-headers.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Middleware } from "@nifrajs/core"
|
|
2
1
|
import { NIFRA_ASSURANCE, withRouteAssurance } from "@nifrajs/core/assurance"
|
|
2
|
+
import type { Middleware } from "@nifrajs/core/server"
|
|
3
3
|
import { withHeaders } from "./_utils.ts"
|
|
4
4
|
|
|
5
5
|
export interface SecurityHeadersOptions {
|
package/src/timing.ts
CHANGED
package/src/token-auth.ts
CHANGED
package/src/trailing-slash.ts
CHANGED