Skip to content
Meeko
Type to search the guides and the API reference. Open it from any page with / or Ctrl K; move with the arrow keys and open a result with Enter.
Get started

Contents

On this page

Not translated yet

This page has not been translated into English yet, so it is shown in Spanish.

RpcDefinition

interfaz

Contrato de un procedimiento de server/rpc/: schemas de entrada y salida, guardas y handler. Se declara con defineRpc.

ts
import type { RpcDefinition } from "@meekojs/meeko/server";

Source code src/server/rpc/contracts.ts:20

Declaración #

ts
interface RpcDefinition<I extends Schema, O extends Schema, S = unknown, L = undefined> {
	input: I
	output: O
	auth?: 'required' | 'optional'
	origin?: 'required' | 'none'
	rateLimit?: RateLimitOptions<S>
	authorize?: (context: RequestContext<S>) => boolean | Promise<boolean>
	locals?: (context: RequestContext<S>) => L | Promise<L>
	handler: (args: { input: Output<I>; context: RequestContext<S>; locals: L }) => Promise<Input<O> | Output<O>> | Input<O> | Output<O>
}

Type parameters #

I extends Schema

Schema de la entrada.

O extends Schema

Schema de la salida.

S = unknown

Tipo de los servicios.

L = undefined

Valor de locals que recibe el handler; undefined sin locals.

Example #

ts
import type { RpcDefinition, Schema } from "@meekojs/meeko/server";

type GetUser = RpcDefinition<Schema<{ id: string }>, Schema<{ id: string; name: string }>>;

Propiedades #

input #

propiedad

input: I

Schema de la entrada JSON.

output #

propiedad

output: O

Schema de la salida.

auth #

propiedad opcional

auth?: 'required' | 'optional'

"required" responde 401 UNAUTHENTICATED sin sesión.

origin #

propiedad opcional

origin?: 'required' | 'none'

Comprobación de Origin en las llamadas, que son siempre POST. Desde 1.8, por defecto (sin origin) responden 403 INVALID_ORIGIN si su Origin falta, es null o no es el de la aplicación ni uno de SessionManager.allowedOrigins, haya o no sesión. "required" (desde 1.2) equivale al valor por defecto y lo deja explícito.

"none" (desde 1.2, inseguro) desactiva la comprobación en las llamadas sin sesión, para clientes que no envían Origin, como una app nativa o un servicio, y permite que session.create() cree una sesión sin un Origin permitido. Expone el procedimiento al CSRF y al login CSRF: úselo sólo con otra prueba de que la llamada no viene de otra web. Una llamada con sesión sigue exigiendo Origin y el token CSRF.

rateLimit #

propiedad opcional

rateLimit?: RateLimitOptions<S>

Límite de llamadas (desde 1.2), como { limit: 5, window: "5m" }: por encima responde 429 RATE_LIMITED con Retry-After, tras Origin y CSRF y antes de auth, authorize, la entrada y el handler. Cuenta en el store de sesiones (Redis entre instancias) y, si el store falla, la llamada se rechaza.

authorize #

propiedad opcional

authorize?: (context: RequestContext<S>) => boolean | Promise<boolean>

Devolver false responde 403 FORBIDDEN.

locals #

propiedad opcional

locals?: (context: RequestContext<S>) => L | Promise<L>

Calcula un valor por petición que el handler recibe como locals (desde 1.2), como el usuario actual. Se ejecuta tras Origin, CSRF, auth, authorize y la validación de la entrada, y justo antes del handler; un ApiError que lance (por ejemplo 401 o 403) es la respuesta. Declárelo antes de handler para que TypeScript infiera su tipo.

handler #

propiedad

handler: (args: { input: Output<I>; context: RequestContext<S>; locals: L }) => Promise<Input<O> | Output<O>> | Input<O> | Output<O>

Recibe la entrada validada, el contexto y locals; su resultado se valida con output.

See also #

Was this page helpful?

Add a comment

It is sent when you choose “Yes” or “No”. Only the page, your answer and the comment are stored: no cookies and no personal data.

0 of 2000 characters

Edit on GitHub: packages/meeko/src/server/rpc/contracts.ts