Actualice a SDK 0.6 y las nuevas reglas de funciones
Una lista de verificación para proyectos que llaman a Edge Functions desde el SDK de JavaScript, con los secretos que quizás necesites rotar.
1. ¿Qué cambió?
Instale la nueva versión:
La versión tiene un cambio de seguridad y varias correcciones sobre cómo se informan los errores y las respuestas. El cambio de seguridad también está en las funciones servicio: se aplica a su proyecto tan pronto como se actualiza el servicio, cualquiera que sea la versión de SDK que utilice.
2. Cambios importantes
Las llamadas de administración ahora necesitan una clave service_role
functions.list(), get(), listJobs(), getJob(), enqueueJob(), listCronJobs(), createCronJob() y deleteCronJob() devuelven 403 a una clave pública o a un usuario que ha iniciado sesión. Antes, list() y get() devolvían el código fuente y las variables de cada función a cualquiera que tuviera la clave pública. Consulte el modelo de seguridad.
Devuelve sólo lo que tu interfaz necesita (nombres, por ejemplo), nunca la definición completa.
Se rechaza un cuerpo que no puede ser JSON
invoke(name, { body: new Blob(…) }), y lo mismo con ArrayBuffer, matrices escritas, FormData, URLSearchParams o ReadableStream, ahora devuelve el código de error invalid_body. Antes, la función recibía {} y no se informaba ningún error. Codifique datos binarios (base64) o cárguelos en Almacenamiento y envíe su ruta.
El 502, 503 o 504 propio de una función es un FunctionsHttpError
Antes, estos estados siempre se clasificaban como FunctionsRelayError, incluso cuando su código los devolvía. Ahora FunctionsRelayError significa que la plataforma falló. Si reintentaste en FunctionsRelayError, verifica que tu lógica de reintento aún coincida: consulta errores, tiempos de espera y reintentos.
FunctionDef es más preciso
env_vars es Record<string, string> (era Record<string, unknown>) y se agrega permissions. El código que lee estos campos sigue funcionando; El código que asignó valores de otro tipo ya no se compila.
3. Correcciones de comportamiento
| antes | ahora |
|---|---|
Una función que devolvía 500 con texto produjo el mensaje "null" | El mensaje es el texto que devolvió su función. |
Una función que devuelve 200 con texto producido { data: null, error: null } | data es el texto |
Una respuesta binaria en el modo predeterminado produjo { data: null, error: null } | error.code es invalid_response y el mensaje sugiere responseType |
responseType: 'text' con un error JSON { "error": "…" } mostró HTTP 503 | El mensaje se lee desde el JSON, como en el modo predeterminado. |
'text', 'blob' y 'arrayBuffer' no tenían tiempo de espera predeterminado | Se aplica el tiempo de espera del cliente (30 s). |
| Se insertó un nombre de función en la URL sin codificar | Está codificado: a/../b permanece dentro de su ruta |
delaySecs en un trabajo fue ignorado: el trabajo se ejecutó de inmediato | El trabajo espera su fecha. |
Las nuevas exportaciones: FunctionsHttpError, FunctionsRelayError, isRelayStatus y FunctionsResponseType provienen de @aurabase/aurabase-js así como de @aurabase/functions. Si los importó desde @aurabase/functions, eso sigue funcionando; con pnpm ya no necesitas ese paquete como dependencia directa.
En @aurabase/auth, el tipo de email en el resultado de getClaims() ahora es string | null, que es lo que devuelve el servicio para un usuario sin una dirección de correo electrónico.
CLI. aura functions deploy ya no borra los secretos de una función que ya existe. aura functions invoke --data rechaza JSON no válido en lugar de enviar {}. aura functions download funciona para funciones Deno. aura functions serve escucha en el puerto que anuncia. aura studio abre Studio en el puerto 3000.
4. Rotar los secretos expuestos
Si su proyecto se ejecutó en una versión de servicio anterior a este cambio, cualquier poseedor de su clave pública podría leer el código y las variables de sus funciones. Supongamos que fueron leídos:
- Enumere sus funciones con una tecla
service_roley abra las variables de cada una. - Rote todos los secretos que contienen: claves de pago, secretos de webhooks, tokens de terceros.
- Elimine los secretos que se escribieron directamente en
index.tsy muévalos a variables. - Verifique los trabajos y las reglas de alerta del proyecto para ver si hay entradas que no creó.
5. Lista de verificación
- Busque su código
functions.list(,functions.get(,listJobs(,getJob(,enqueueJob(,createCronJob(,deleteCronJob(ylistCronJobs(en código que se ejecuta en un navegador o con una clave pública. - Busque valores
body:que no sean JSON simples. - Verifique la lógica de reintento que depende de
FunctionsRelayError. - Gire los secretos como se describe arriba.
- Actualice la CLI.