Upgrade naar SDK 0.6 en de nieuwe functieregels
Een checklist voor projecten die Edge Functions aanroepen vanuit de JavaScript SDK, met de geheimen die u mogelijk moet rouleren.
1. Wat is er veranderd
Installeer de nieuwe versie:
De release bevat één beveiligingswijziging en verschillende oplossingen voor de manier waarop fouten en reacties worden gerapporteerd. De beveiligingswijziging zit ook in de functies service: deze is van toepassing op uw project zodra de service wordt bijgewerkt, welke SDK-versie u ook gebruikt.
2. Veranderingen doorbreken
Beheeroproepen hebben nu een service_role-sleutel nodig
functions.list(), get(), listJobs(), getJob(), enqueueJob(), listCronJobs(), createCronJob() en deleteCronJob() retourneren 403 naar een openbare sleutel of een ingelogde gebruiker. Voorheen stuurden list() en get() de broncode en de variabelen van elke functie terug naar iedereen die de publieke sleutel bezat. Zie het beveiligingsmodel.
Retourneer alleen wat uw frontend nodig heeft (namen bijvoorbeeld), nooit de hele definitie.
Een body die geen JSON kan zijn, wordt geweigerd
invoke(name, { body: new Blob(…) }), en hetzelfde met ArrayBuffer, getypte arrays, FormData, URLSearchParams of ReadableStream, retourneert nu de foutcode invalid_body. Voorheen ontving de functie {} en werd er geen fout gerapporteerd. Codeer binaire gegevens (base64) of upload deze naar Storage en stuur het pad ervan.
De eigen 502, 503 of 504 van een functie is een FunctionsHttpError
Voorheen werden deze statussen altijd geclassificeerd als FunctionsRelayError, zelfs als uw code deze retourneerde. Nu betekent FunctionsRelayError dat het -platform mislukt is. Als u het opnieuw hebt geprobeerd op FunctionsRelayError, controleer dan of uw logica voor opnieuw proberen nog steeds overeenkomt: zie fouten, time-outs en nieuwe pogingen.
FunctionDef is nauwkeuriger
env_vars is Record<string, string> (het was Record<string, unknown>) en permissions is toegevoegd. Code die deze velden leest, blijft werken; code die waarden van een ander type heeft toegewezen, wordt niet langer gecompileerd.
3. Gedragsoplossingen
| Voor | Nu |
|---|---|
Een functie die 500 retourneerde met tekst produceerde het bericht "null" | Het bericht is de tekst die uw functie heeft geretourneerd |
Een functie die 200 retourneert met de tekst { data: null, error: null } | data is de tekst |
Een binair antwoord in de standaardmodus produceerde { data: null, error: null } | error.code is invalid_response en het bericht suggereert responseType |
responseType: 'text' met een fout JSON { "error": "…" } liet HTTP 503 zien | Het bericht wordt gelezen vanuit de JSON, zoals in de standaardmodus |
'text', 'blob' en 'arrayBuffer' hadden geen standaard time-out | De clienttime-out (30 s) is van toepassing |
| Er is een functienaam ongecodeerd in de URL ingevoegd | Het is gecodeerd: a/../b blijft binnen zijn pad |
delaySecs voor een taak werd genegeerd: de taak werd onmiddellijk uitgevoerd | De taak wacht op de datum |
Nieuwe exports: FunctionsHttpError, FunctionsRelayError, isRelayStatus en FunctionsResponseType komen zowel van @aurabase/aurabase-js als van @aurabase/functions. Als je ze hebt geïmporteerd vanuit @aurabase/functions, blijft dat werken; met pnpm heb je dat pakket niet langer nodig als directe afhankelijkheid.
In @aurabase/auth is het type email in het resultaat van getClaims() nu string | null, wat de service retourneert voor een gebruiker zonder e-mailadres.
CLI. aura functions deploy wist niet langer de geheimen van een functie die al bestaat. aura functions invoke --data weigert ongeldige JSON in plaats van {} te verzenden. aura functions download werkt voor Deno-functies. aura functions serve luistert op de poort die het aankondigt. aura studio opent de Studio op poort 3000.
4. Roteer blootgestelde geheimen
Als uw project draaide op een serviceversie die ouder was dan deze wijziging, kon elke houder van uw openbare sleutel de code en de variabelen van uw functies lezen. Stel dat ze zijn gelezen:
- Maak een lijst van uw functies met een
service_role-toets en open de variabelen van elke functie. - Roteer elk geheim dat ze bevatten: betalingssleutels, webhookgeheimen, tokens van derden.
- Verwijder geheimen die rechtstreeks in
index.tszijn geschreven en verplaats ze naar variabelen. - Controleer de taken en waarschuwingsregels van het project voor vermeldingen die u niet heeft aangemaakt.
5. Controlelijst
- Zoek in uw code naar
functions.list(,functions.get(,listJobs(,getJob(,enqueueJob(,createCronJob(,deleteCronJob(enlistCronJobs(in code die in een browser of met een openbare sleutel wordt uitgevoerd. - Zoek naar
body:-waarden die geen gewone JSON zijn. - Controleer de logica voor nieuwe pogingen die afhankelijk is van
FunctionsRelayError. - Roteer de geheimen zoals hierboven beschreven.
- Werk de CLI bij.