Middleware
Middleware в ONREZA задаётся через Edge Rules pipeline:
onreza.rules.toml выбирает маршрут, порядок шагов и cache boundary, а
ONREZA Functions выполняют динамическую логику.
Legacy middleware trigger и ctx.next() больше не являются публичным
контрактом. Для auth, redirects, geo-routing, A/B и security headers используйте
pipeline action.
Использование
Заголовок раздела «Использование»schema = "EDGE_RULE_SET_V1"
[[rule]]id = "dashboard-auth"when.path = { prefix = "/dashboard" }action.pipeline = { steps = [ { use = "require-session", mode = "request", failure = "closed" }, { handle = "@app" }, { use = "add-user-header", mode = "response", failure = "open" },] }export const config = { name: "require-session",} as const;
export default { async request(request, ctx) { const session = request.headers.get("cookie")?.match(/session=([^;]+)/)?.[1]; if (!session) { return Response.redirect(new URL("/login", request.url), 307); }
const userBytes = await ctx.kv.get(`session:${session}`); if (!userBytes) { return Response.redirect(new URL("/login", request.url), 307); }
ctx.locals.user = new TextDecoder().decode(userBytes); return request; },};Семантика:
requeststep сfailure = "closed"выполняется до cache lookup, поэтому cache HIT не обходит auth;responseиobservesteps выполняются после terminal route и не заменяют route selection;handle = "@app"передаёт запрос в обычный Static/Compute route приложения;handle = "function-name"делает функцию terminal handler;- KV, env, logs и
ctx.localsдоступны через явныйctx.
Для простых redirects, rewrites, headers, cache, deny/log и rate limit функция не
нужна: держите это как native Edge Rule в том же onreza.rules.toml.
Edge Rulesonreza.rules.toml, native rules и порядок pipeline
ONREZA FunctionsHandler contract для pipeline steps