Aktualizacja do wersji SDK 0.6 i nowych zasad funkcji
Lista kontrolna dla projektów wywołujących Edge Functions z pakietu JavaScript SDK, zawierająca wpisy tajne, które mogą być konieczne do rotacji.
1. Co się zmieniło
Zainstaluj nową wersję:
W tej wersji wprowadzono jedną zmianę zabezpieczeń i kilka poprawek dotyczących sposobu raportowania błędów i odpowiedzi. Zmiana zabezpieczeń dotyczy także funkcji usługi: dotyczy Twojego projektu zaraz po aktualizacji usługi, niezależnie od używanej wersji SDK.
2. Przełomowe zmiany
Wywołania zarządzania wymagają teraz klucza service_role
functions.list(), get(), listJobs(), getJob(), enqueueJob(), listCronJobs(), createCronJob() i deleteCronJob() zwracają 403 do klucza publicznego lub zalogowanego użytkownika. Wcześniej list() i get() zwracały kod źródłowy i zmienne każdej funkcji każdemu, kto posiada klucz publiczny. Zobacz model zabezpieczeń.
Zwracaj tylko to, czego potrzebuje Twój interfejs (na przykład nazwy), nigdy całą definicję.
Treść, która nie może być JSON, jest odrzucana
invoke(name, { body: new Blob(…) }) i to samo z ArrayBuffer, wpisanymi tablicami, FormData, URLSearchParams lub ReadableStream, teraz zwraca kod błędu invalid_body. Wcześniej funkcja otrzymywała {} i nie zgłaszano żadnego błędu. Zakoduj dane binarne (base64) lub prześlij je do magazynu i wyślij ich ścieżkę.
Własne funkcje 502, 503 lub 504 to FunctionsHttpError
Wcześniej te statusy były zawsze klasyfikowane jako FunctionsRelayError, nawet jeśli zwracał je kod. Teraz FunctionsRelayError oznacza, że platforma uległa awarii. Jeśli ponowiłeś próbę FunctionsRelayError, sprawdź, czy logika ponawiania nadal jest zgodna: zobacz błędy, przekroczenia limitu czasu i ponowne próby.
FunctionDef jest bardziej precyzyjny
env_vars to Record<string, string> (było Record<string, unknown>) i dodano permissions. Kod czytający te pola nadal działa; kod, któremu przypisano wartości innego typu, nie jest już kompilowany.
3. Poprawki w zachowaniu
| Zanim | Teraz |
|---|---|
Funkcja zwracająca 500 z tekstem wygenerowała komunikat "null" | Wiadomość to tekst zwrócony przez funkcję |
Funkcja zwracająca 200 z wygenerowanym tekstem { data: null, error: null } | data to tekst |
Odpowiedź binarna w trybie domyślnym wygenerowała { data: null, error: null } | error.code to invalid_response, a komunikat sugeruje responseType |
responseType: 'text' z błędem JSON { "error": "…" } pokazał HTTP 503 | Wiadomość odczytywana jest z formatu JSON, tak jak w trybie domyślnym |
'text', 'blob' i 'arrayBuffer' nie miały domyślnego limitu czasu | Obowiązuje limit czasu klienta (30 s). |
| Do niezakodowanego adresu URL wstawiono nazwę funkcji | Jest zakodowany: a/../b pozostaje na swojej ścieżce |
delaySecs w zadaniu zostało zignorowane: zadanie zostało uruchomione natychmiast | Zadanie czeka na swój termin |
Nowy eksport: FunctionsHttpError, FunctionsRelayError, isRelayStatus i FunctionsResponseType pochodzi z @aurabase/aurabase-js oraz z @aurabase/functions. Jeśli zaimportowałeś je z @aurabase/functions, to nadal działa; z pnpm nie potrzebujesz już tego pakietu jako bezpośredniej zależności.
W @aurabase/auth typ email w wyniku getClaims() to teraz string | null i właśnie to usługa zwraca dla użytkownika bez adresu e-mail.
Interfejs wiersza polecenia. aura functions deploy nie usuwa już sekretów funkcji, która już istnieje. aura functions invoke --data odrzuca nieprawidłowy JSON zamiast wysyłać {}. aura functions download działa dla funkcji Deno. aura functions serve nasłuchuje na porcie, który ogłasza. aura studio otwiera Studio na porcie 3000.
4. Rotuj ujawnione tajemnice
Jeśli Twój projekt działał w wersji usługi starszej niż ta zmiana, każdy posiadacz Twojego klucza publicznego mógł odczytać kod i zmienne Twoich funkcji. Załóżmy, że zostały odczytane:
- Wypisz swoje funkcje za pomocą klawisza
service_rolei otwórz zmienne każdej z nich. - Rotuj każdy sekret, który zawierają: klucze płatności, sekrety webhooka, tokeny stron trzecich.
- Usuń sekrety zapisane bezpośrednio w
index.tsi przenieś je do zmiennych. - Sprawdź zadania i reguły alertów projektu pod kątem wpisów, których nie utworzyłeś.
5. Lista kontrolna
- Wyszukaj w swoim kodzie
functions.list(,functions.get(,listJobs(,getJob(,enqueueJob(,createCronJob(,deleteCronJob(ilistCronJobs(w kodzie uruchamianym w przeglądarce lub przy użyciu klucza publicznego. - Wyszukaj wartości
body:, które nie są zwykłym kodem JSON. - Sprawdź logikę ponawiania, która zależy od
FunctionsRelayError. - Obróć sekrety zgodnie z opisem powyżej.
- Zaktualizuj interfejs wiersza poleceń.