ManifestBackendRoute
Ruta HTTP propia de la extension, servida por /api/ext/<extensionId>/<path> (capacidad ext.routes.v1; auth y compañia exigen ext.routes.auth.v1).
Solo las rutas y metodos declarados existen (lista exacta, sin comodines). El handler recibe ctx.args = { params, query, body, rawBody, headers, method, path } y
devuelve { status?, headers?, body? } (o cualquier JSON = 200). Por defecto auth es "session" (falla cerrado).
Firma
export interface ManifestBackendRoute {
path: string;
handler: string;
method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
methods?: Array<"GET" | "POST" | "PUT" | "PATCH" | "DELETE">;
auth?: "session" | "admin" | "signature" | "hmac" | "none";
minLevel?: number;
stepUp?: boolean;
sideEffects?: boolean;
hmac?: ManifestRouteHmac;
dispatch?: "discord-interaction";
input?: { query?: Record<string, ManifestRouteInputField>; body?: ManifestRouteInputField & { type: "object"; }; };
maxBodyBytes?: number;
timeoutMs?: number;
rateLimit?: { limit: number; windowSec?: 60; };
cors?: { origins: string[]; };
}Miembros (15)
| Nombre | Tipo | Descripción |
|---|---|---|
| pathobligatorio | string | Ruta relativa a la extension ( |
| handlerobligatorio | string | Funcion de api.functions que atiende la peticion. |
| methodopcional | "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | Metodo HTTP (por defecto GET). |
| methodsopcional | Array<"GET" | "POST" | "PUT" | "PATCH" | "DELETE"> | Varios metodos para la misma ruta. |
| authopcional | "session" | "admin" | "signature" | "hmac" | "none" | session (defecto) | admin | signature | hmac | none (exige el permiso PUBLIC_ROUTE aprobado por el admin). |
| minLevelopcional | number | Con auth "admin": permission_level minimo (1..4). |
| stepUpopcional | boolean | Con auth "admin": exige step-up reciente. |
| sideEffectsopcional | boolean | La ruta (aunque sea GET) cambia estado: se rechaza si el navegador la pidio desde otro sitio (Sec-Fetch-Site: cross-site). |
| hmacopcional | ManifestRouteHmac | Sin descripción. |
| dispatchopcional | "discord-interaction" | Solo con hmac ed25519 (capacidad oauth.provider.v3): tras verificar la firma, el router entrega el evento a los hooks DISCORD_INTERACTION en lugar de ejecutar el handler. |
| inputopcional | { query?: Record<string, ManifestRouteInputField>; body?: ManifestRouteInputField & { type: "object"; }; } | Validacion de entrada: query y cuerpo JSON. |
| maxBodyBytesopcional | number | Tope del cuerpo (por defecto 256 KB; max 1 MB; 64 KB con auth "none"). |
| timeoutMsopcional | number | Sin descripción. |
| rateLimitopcional | { limit: number; windowSec?: 60; } | Sin descripción. |
| corsopcional | { origins: string[]; } | Origenes https exactos permitidos por CORS (nunca "*", nunca con credenciales). |
Ejemplos
const hook: ManifestBackendRoute = { path: "/webhook", handler: "onWebhook", method: "POST", auth: "hmac",
hmac: { header: "x-signature", algorithm: "sha256", prefix: "sha256=", secretCredential: "WEBHOOK_SECRET", timestampHeader: "x-timestamp" } };
const report: ManifestBackendRoute = { path: "/report/:id", handler: "getReport", auth: "admin", minLevel: 2, stepUp: true };Usado en / Referenciado por
Referencia a
Fuente: bloomx-extensions/_shared/sdk/manifest.d.ts:304 · manifest.d.ts