RequestContext
interfaz
Contexto de una petición HTTP: sesión, servicios, plataforma y estado propios de esa petición, nunca compartidos entre usuarios. Lo reciben los loaders, los handlers de API y RPC y los canales Socket.
import type { RequestContext } from "@meekojs/meeko/server";Código fuente src/server/runtime/request-context.ts:32
Declaración #
interface RequestContext<out TServices = unknown, TEnv = unknown> {
readonly request: Request
readonly requestId: string
readonly signal: AbortSignal
readonly services: ContextServices<TServices>
readonly session: SessionHandle<SessionData>
readonly state: Map<string, unknown>
readonly platform: ServerPlatform<TEnv>
readonly idempotencyKey?: string | undefined
readonly clientAddress?: string | undefined
}Parámetros de tipo #
-
TServices= unknown Tipo de
services.-
TEnv= unknown Tipo del entorno de la plataforma.
Ejemplo #
import { defineApiRoute } from "@meekojs/meeko/server";
export default defineApiRoute({
auth: "required",
handler: async ({ context }) => {
const response = await fetch("https://api.example.com/report", { signal: context.signal });
return { requestId: context.requestId, report: await response.json() };
},
});Propiedades #
requestId
#
readonly requestId: stringID de la petición, que también va en x-request-id y llega a onError.
signal
#
readonly signal: AbortSignalSe aborta si el cliente se desconecta o, con SessionRevokedError, si se revoca la sesión.
services
#
readonly services: ContextServices<TServices>Servicios de server/runtime.ts. Sin TServices (o con unknown), desde 1.7 su tipo es
AppServices, el que Meeko infiere de server/runtime.ts.
session
#
readonly session: SessionHandle<SessionData>Sesión de la petición: leer, crear, rotar, revocar y verificar. Sus datos tienen el tipo de
MeekoSession cuando la aplicación lo declara (desde 1.2), o unknown.
platform
#
readonly platform: ServerPlatform<TEnv>Runtime que atiende la petición, con su entorno y el soporte de trabajo en segundo plano.
idempotencyKey
#
readonly idempotencyKey?: string | undefinedClave de idempotencia de la cabecera Idempotency-Key (borrador del IETF), validada como UUID
y en minúsculas; undefined si no llegó o no es un UUID. La envían las mutaciones retrySafe
y es la misma en cada reintento de una intención. Meeko no deduplica: guárdela con el resultado
(por ejemplo, en una columna única) y responda lo mismo cuando se repita. Desde 1.2.
clientAddress
#
readonly clientAddress?: string | undefinedIP del cliente (desde 1.2): la de la conexión que entrega el adaptador o, con
MEEKO_TRUST_PROXY, la que añadió a X-Forwarded-For el proxy de confianza más externo o
(con cloudflare, desde 1.8) la de CF-Connecting-IP. undefined si no se conoce. Sin
MEEKO_TRUST_PROXY, X-Forwarded-For nunca se lee, porque cualquier cliente puede enviarlo. La usa rateLimit y sirve para registros y auditoría. Fuera
de un contexto, como en un middleware de servidor, la misma IP la da clientAddress.
Véase también #
- Revocación durante una petición Framework full-stack