Funciones en el borde
Las funciones en el borde ejecutan tu código directamente en Tero Services, sin servidor de origen. Una ruta de tipo Función (o una sub-ruta de un dominio combinado) recibe la solicitud, corre tu función y devuelve la respuesta.
Sirven para lógica liviana: formularios, redirecciones con lógica, autenticación, pruebas A/B, webhooks y pequeñas API, sin levantar ni mantener un backend.
Entornos de ejecución
Sección titulada «Entornos de ejecución»| Entorno | Pensado para |
|---|---|
| JavaScript y TypeScript integrado | Lógica liviana con arranque inmediato. Es el entorno por defecto |
| Proceso JavaScript y TypeScript con npm | Funciones que necesitan paquetes de npm o más del ecosistema del lenguaje. Los procesos se mantienen activos entre solicitudes |
| Binario compilado | Código propio en cualquier lenguaje (Go, Rust, etc.) que recibe la solicitud y devuelve la respuesta como JSON por entrada y salida estándar |
| Módulo nativo | Cargas de máximo rendimiento, desarrolladas con el SDK de Tero. Se incorporan bajo coordinación con Host Admin |
Cómo se escribe una función
Sección titulada «Cómo se escribe una función»En el entorno integrado se admiten dos formatos:
// Formato síncronofunction handle(request) { return { status: 200, body: "Hola desde Tero" };}// Formato de módulo, al estilo de Cloudflare Workersexport default { async fetch(request, env, ctx) { return new Response("Hola desde Tero", { status: 200 }); }};Los archivos .ts se aceptan directamente: se les quitan los tipos antes de ejecutar, sin verificación de tipos. Corré el chequeo de tipos en tu propio flujo de desarrollo.
Cada invocación corre aislada: las funciones no comparten estado global entre solicitudes. El entorno incluye console.* (los mensajes quedan en el registro de la invocación), temporizadores, URL, buffers y utilidades de criptografía (hash, HMAC, AES-GCM).
Llamadas salientes con fetch
Sección titulada «Llamadas salientes con fetch»fetch hacia servicios externos está disponible cuando se habilita para tu cuenta. Por seguridad, no permite alcanzar direcciones de redes privadas.
La solicitud y la respuesta
Sección titulada «La solicitud y la respuesta»Tu función recibe un objeto solicitud con los datos ya procesados:
| Campo | Contenido |
|---|---|
method | Método HTTP (GET, POST, etc.) |
path | Path solicitado |
query | Parámetros de la query string, ya separados |
headers | Encabezados de la solicitud, con nombres en minúsculas |
body | Cuerpo como texto. Los cuerpos binarios llegan en base64 |
params | Parámetros extraídos del patrón de path, cuando el patrón los define |
extra | Datos que agrega Tero: dominio, URL completa, si la conexión es TLS, identificador de la solicitud y, cuando se conocen, la IP y el país del visitante |
Y devuelve un objeto respuesta con status (200 por defecto), headers, body (en base64 si es binario) y, opcionalmente, redirect, que responde con una redirección 302 a esa URL.
Límites
Sección titulada «Límites»Cada función define sus límites, que Tero aplica en cada invocación:
- Tiempo máximo de ejecución: 5 segundos por defecto. Superado el límite, la función se interrumpe.
- Memoria máxima: 128 MB por defecto.
Registro de ejecuciones
Sección titulada «Registro de ejecuciones»Cada invocación tiene un identificador único que vuelve en el encabezado X-Tero-Request-Id (con la forma inv-…). Con ese identificador se consultan los mensajes de console.* y los errores de esa ejecución.
Eventos
Sección titulada «Eventos»Una función puede emitir eventos con Tero.emit(...) y otras funciones pueden reaccionar a ellos o correr en un horario. Ver Eventos y tareas programadas.
Qué definís
Sección titulada «Qué definís»- Código de la función y entorno de ejecución.
- Patrones de path: una ruta puede repartir paths entre varias funciones, con coincidencia exacta (
/health), de un segmento (/api/*) o de cualquier profundidad (/v1/**), más una función por defecto para el resto. - Límites de tiempo y memoria.
- Variables de entorno de cada función, por ejemplo claves de servicios externos.