@beignet/core
Version:
Core framework primitives for Beignet
51 lines (49 loc) • 1.15 kB
text/typescript
/**
* Rate limit scope for identifying the rate limit key.
*
* - "user": keyed by authenticated user id
* - "ip": keyed by client IP
* - "global": single global key
*/
export type RateLimitScope = "user" | "ip" | "global";
/**
* Rate limit configuration for a contract.
*
* This type is used in contract metadata to configure rate limiting behavior.
*
* @example
* ```ts
* const getTodoContract = c
* .get("/api/todos/:id", "getTodo")
* .pathParams(z.object({ id: z.string() }))
* .meta({
* auth: "required",
* rateLimit: {
* max: 60,
* windowSec: 60,
* scope: "user",
* },
* })
* .responses({ 200: z.object({ id: z.string(), name: z.string() }) });
* ```
*/
export interface RateLimitMeta {
/**
* Maximum number of allowed hits within the window.
*/
max: number;
/**
* Length of the window in seconds.
*/
windowSec: number;
/**
* Scope for identifying the rate limit key.
*
* - "user": keyed by authenticated user id
* - "ip": keyed by client IP
* - "global": single global key
*
* Default: "global".
*/
scope?: RateLimitScope;
}