Upgrade auf SDK 0.6 und die neuen Funktionsregeln
Eine Checkliste für Projekte, die Edge Functions aus dem JavaScript SDK aufrufen, mit den Geheimnissen, die Sie möglicherweise rotieren müssen.
1. Was hat sich geändert?
Installieren Sie die neue Version:
Die Version enthält eine Sicherheitsänderung und mehrere Korrekturen für die Art und Weise, wie Fehler und Antworten gemeldet werden. Die Sicherheitsänderung betrifft auch die Funktionen Dienst: Sie gilt für Ihr Projekt, sobald der Dienst aktualisiert wird, unabhängig davon, welche SDK-Version Sie verwenden.
2. Breaking Changes
Verwaltungsaufrufe benötigen jetzt einen service_role-Schlüssel
functions.list(), get(), listJobs(), getJob(), enqueueJob(), listCronJobs(), createCronJob() und deleteCronJob() geben 403 an einen öffentlichen Schlüssel oder einen angemeldeten Benutzer zurück. Zuvor gaben list() und get() den Quellcode und die Variablen jeder Funktion an jeden zurück, der den öffentlichen Schlüssel besaß. Siehe das Sicherheitsmodell.
Geben Sie nur das zurück, was Ihr Frontend benötigt (z. B. Namen), niemals die gesamte Definition.
Ein Körper, der nicht JSON sein kann, wird abgelehnt
invoke(name, { body: new Blob(…) }) und dasselbe mit ArrayBuffer, typisierten Arrays, FormData, URLSearchParams oder ReadableStream, gibt jetzt den Fehlercode invalid_body zurück. Zuvor empfing die Funktion {} und es wurde kein Fehler gemeldet. Kodieren Sie Binärdaten (Base64) oder laden Sie sie in den Speicher hoch und senden Sie ihren Pfad.
Das eigene 502, 503 oder 504 einer Funktion ist ein FunctionsHttpError
Zuvor wurden diese Status immer als FunctionsRelayError klassifiziert, auch wenn Ihr Code sie zurückgegeben hat. Nun bedeutet FunctionsRelayError, dass die -Plattform ausgefallen ist. Wenn Sie es auf FunctionsRelayError erneut versucht haben, überprüfen Sie, ob Ihre Wiederholungslogik immer noch übereinstimmt: siehe Fehler, Zeitüberschreitungen und Wiederholungsversuche.
FunctionDef ist präziser
env_vars ist Record<string, string> (es war Record<string, unknown>) und permissions wird hinzugefügt. Code, der diese Felder liest, funktioniert weiterhin; Code, der Werte eines anderen Typs zugewiesen hat, lässt sich nicht mehr kompilieren.
3. Verhaltenskorrekturen
| Vorher | Jetzt |
|---|---|
Eine Funktion, die 500 mit Text zurückgibt, erzeugte die Nachricht "null" | Die Nachricht ist der Text, den Ihre Funktion zurückgegeben hat |
Eine Funktion, die 200 mit dem erzeugten Text { data: null, error: null } zurückgibt | data ist der Text |
Eine binäre Antwort im Standardmodus erzeugte { data: null, error: null } | error.code ist invalid_response und die Meldung schlägt responseType vor |
responseType: 'text' mit einem Fehler JSON { "error": "…" } zeigte HTTP 503 | Die Nachricht wird wie im Standardmodus aus dem JSON gelesen |
'text', 'blob' und 'arrayBuffer' hatten kein Standard-Timeout | Es gilt der Client-Timeout (30 s). |
| Ein Funktionsname wurde unverschlüsselt in die URL eingefügt | Es ist kodiert: a/../b bleibt in seinem Pfad |
delaySecs für einen Job wurde ignoriert: Der Job wurde sofort ausgeführt | Der Job wartet auf sein Datum |
Neue Exporte: FunctionsHttpError, FunctionsRelayError, isRelayStatus und FunctionsResponseType stammen sowohl von @aurabase/aurabase-js als auch von @aurabase/functions. Wenn Sie sie aus @aurabase/functions importiert haben, funktioniert das weiterhin; Mit pnpm benötigen Sie dieses Paket nicht mehr als direkte Abhängigkeit.
In @aurabase/auth ist der Typ von email im Ergebnis von getClaims() jetzt string | null, was der Dienst für einen Benutzer ohne E-Mail-Adresse zurückgibt.
CLI. aura functions deploy löscht nicht mehr die Geheimnisse einer bereits vorhandenen Funktion. aura functions invoke --data lehnt ungültiges JSON ab, anstatt {} zu senden. aura functions download funktioniert für Deno-Funktionen. aura functions serve lauscht auf dem Port, den es ankündigt. aura studio öffnet das Studio auf Port 3000.
4. Offengelegte Geheimnisse rotieren
Wenn Ihr Projekt mit einer Dienstversion vor dieser Änderung ausgeführt wurde, könnte jeder Inhaber Ihres öffentlichen Schlüssels den Code und die Variablen Ihrer Funktionen lesen. Angenommen, sie wurden gelesen:
- Listen Sie Ihre Funktionen mit der Taste
service_roleauf und öffnen Sie die Variablen jeder einzelnen Funktion. - Rotieren Sie jedes darin enthaltene Geheimnis: Zahlungsschlüssel, Webhook-Geheimnisse, Token von Drittanbietern.
- Entfernen Sie Geheimnisse, die direkt in
index.tsgeschrieben wurden, und verschieben Sie sie in Variablen. - Überprüfen Sie die Jobs und Alarmregeln des Projekts auf Einträge, die Sie nicht erstellt haben.
5. Checkliste
- Durchsuchen Sie Ihren Code nach
functions.list(,functions.get(,listJobs(,getJob(,enqueueJob(,createCronJob(,deleteCronJob(undlistCronJobs(in Code, der in einem Browser oder mit einem öffentlichen Schlüssel ausgeführt wird. - Suchen Sie nach
body:-Werten, die kein einfaches JSON sind. - Überprüfen Sie die Wiederholungslogik, die von
FunctionsRelayErrorabhängt. - Drehen Sie die Geheimnisse wie oben beschrieben.
- Aktualisieren Sie die CLI.