Esegui l'upgrade all'SDK 0.6 e alle nuove regole delle funzioni
Un elenco di controllo per i progetti che chiamano Edge Functions dall'SDK JavaScript, con i segreti che potresti dover ruotare.
1. Cosa è cambiato
Installa la nuova versione:
La versione presenta una modifica alla sicurezza e diverse correzioni al modo in cui vengono segnalati errori e risposte. La modifica della sicurezza è anche nelle funzioni servizio: si applica al tuo progetto non appena il servizio viene aggiornato, qualunque sia la versione dell'SDK che utilizzi.
2. Modifiche importanti
Le chiamate di gestione ora richiedono una chiave service_role
functions.list(), get(), listJobs(), getJob(), enqueueJob(), listCronJobs(), createCronJob() e deleteCronJob() restituiscono 403 a una chiave pubblica o a un utente connesso. Prima, list() e get() restituivano il codice sorgente e le variabili di ogni funzione a chiunque possedesse la chiave pubblica. Vedi il modello di sicurezza.
Restituisci solo ciò di cui ha bisogno il tuo front-end (nomi, ad esempio), mai l'intera definizione.
Un corpo che non può essere JSON viene rifiutato
invoke(name, { body: new Blob(…) }), e lo stesso con ArrayBuffer, array digitati, FormData, URLSearchParams o ReadableStream, ora restituisce il codice di errore invalid_body. Prima, la funzione riceveva {} e non veniva segnalato alcun errore. Codifica i dati binari (base64) o caricali su Storage e invia il relativo percorso.
Il 502, 503 o 504 di una funzione è un FunctionsHttpError
Prima, questi stati erano sempre classificati come FunctionsRelayError, anche quando il codice li restituiva. Ora FunctionsRelayError significa che la piattaforma non è riuscita. Se hai riprovato su FunctionsRelayError, controlla che la logica dei tentativi corrisponda ancora: vedi Errori, timeout e tentativi di .
FunctionDef è più preciso
env_vars è Record<string, string> (era Record<string, unknown>) e viene aggiunto permissions. Il codice che legge questi campi continua a funzionare; il codice che assegnava valori di un altro tipo non viene più compilato.
3. Correzioni comportamentali
| Prima | Adesso |
|---|---|
Una funzione che restituisce 500 con testo ha prodotto il messaggio "null" | Il messaggio è il testo restituito dalla funzione |
Una funzione che restituisce 200 con il testo prodotto { data: null, error: null } | data è il testo |
Una risposta binaria nella modalità predefinita ha prodotto { data: null, error: null } | error.code è invalid_response e il messaggio suggerisce responseType |
responseType: 'text' con un errore JSON { "error": "…" } ha mostrato HTTP 503 | Il messaggio viene letto dal JSON, come nella modalità predefinita |
'text', 'blob' e 'arrayBuffer' non avevano timeout predefinito | Si applica il timeout del client (30 s). |
| Un nome di funzione è stato inserito nell'URL non codificato | È codificato: a/../b rimane all'interno del suo percorso |
delaySecs su un lavoro è stato ignorato: il lavoro è stato eseguito immediatamente | Il lavoro attende la sua data |
Nuove esportazioni: FunctionsHttpError, FunctionsRelayError, isRelayStatus e FunctionsResponseType provengono da @aurabase/aurabase-js così come da @aurabase/functions. Se li hai importati da @aurabase/functions, continua a funzionare; con pnpm non hai più bisogno di quel pacchetto come dipendenza diretta.
In @aurabase/auth, il tipo di email nel risultato di getClaims() è ora string | null, ovvero ciò che il servizio restituisce per un utente senza un indirizzo di posta elettronica.
CLI. aura functions deploy non cancella più i segreti di una funzione già esistente. aura functions invoke --data rifiuta JSON non valido invece di inviare {}. aura functions download funziona per le funzioni Deno. aura functions serve ascolta sulla porta che annuncia. aura studio apre Studio sulla porta 3000.
4. Ruota i segreti esposti
Se il tuo progetto veniva eseguito su una versione del servizio precedente a questo cambiamento, qualsiasi detentore della tua chiave pubblica potrebbe leggere il codice e le variabili delle tue funzioni. Supponiamo che siano stati letti:
- Elenca le tue funzioni con una chiave
service_rolee apri le variabili di ciascuna. - Ruota ogni segreto che contengono: chiavi di pagamento, segreti webhook, token di terze parti.
- Rimuovi i segreti scritti direttamente in
index.tse spostali nelle variabili. - Controlla i lavori e le regole di avviso del progetto per le voci che non hai creato.
5. Lista di controllo
- Cerca il tuo codice per
functions.list(,functions.get(,listJobs(,getJob(,enqueueJob(,createCronJob(,deleteCronJob(elistCronJobs(nel codice eseguito in un browser o con una chiave pubblica. - Cerca valori
body:che non siano semplici JSON. - Controllare la logica dei tentativi che dipende da
FunctionsRelayError. - Ruota i segreti come descritto sopra.
- Aggiorna la CLI.