Produkty
Edge Functions
Funkcje serverless w TypeScript (Deno) hostowane przy Twojej bazie — wdrażane z panelu, API lub MCP.
Edge Functions to funkcje TypeScript uruchamiane w środowisku Deno (Supabase Edge Runtime) obok Twojej bazy. Każda funkcja dostaje publiczny adres:
https://<ref>.host.ulewicz.space/functions/v1/<nazwa>
Nazwa funkcji: małe litery, cyfry, - i _, zaczyna się od litery (np. send-email). Nazwa main jest zarezerwowana.
Wdrożenie z panelu
- Otwórz projekt → Edge Functions → Nowa funkcja.
- Wybierz szablon z galerii (kategorie: Podstawy, Baza danych, Integracje, AI, Automatyzacja): Hello World, REST API z CORS, zapytanie do bazy (supabase-js), webhook → tabela, webhook Stripe, wysyłka e-maili (Resend), powiadomienia Slack, czat AI (Claude), zadanie cykliczne — albo pustą funkcję. Panel pokazuje, których sekretów szablon wymaga i czy są już ustawione.
- Nadaj nazwę i kliknij Utwórz i wdróż. Funkcja działa po kilku sekundach.
- Edytuj kod w zakładce Kod: drzewo plików (dodawanie, zmiana nazwy, usuwanie, katalogi), podświetlanie składni, pasek stanu. Wdrażasz skrótem
⌘/Ctrl + S; każde wdrożenie podbija numer wersji.
Zakładki funkcji
| Zakładka | Co zawiera |
|---|---|
| Testuj | Żądanie testowe (metoda, ścieżka, nagłówki, body; klucz anon, service_role albo bez autoryzacji), odpowiedź z kodem, czasem i nagłówkami. |
| Analityka | Wywołania i odpowiedzi 4xx/5xx w czasie (1 h / 24 h / 7 dni) z porównaniem do poprzedniego okresu, rozkład czasów odpowiedzi z p50/p95/p99, kody odpowiedzi, mapa aktywności dzień × godzina oraz liczba zimnych startów (pierwsze wywołanie po ≥ 60 s bezczynności). |
| Logi | Wyjście console.log/console.error przypisane do kolejnych wywołań oraz lista ostatnich żądań HTTP. |
| Historia | Każda wdrożona wersja (autor, data, opis), porównanie dowolnych dwóch wersji (diff) i przywrócenie starszej wersji jednym kliknięciem — powstaje wtedy nowa wersja z dawnym kodem. |
| Harmonogram | Uruchamianie funkcji według wyrażenia cron — patrz niżej. |
| Ustawienia | Weryfikacja JWT i usunięcie funkcji (razem z jej harmonogramami). |
Przykładowa funkcja
// index.ts
import { createClient } from "npm:@supabase/supabase-js@2";
Deno.serve(async (req) => {
const { name } = await req.json();
const supabase = createClient(
Deno.env.get("SUPABASE_URL")!,
Deno.env.get("SUPABASE_ANON_KEY")!,
{ global: { headers: { Authorization: req.headers.get("Authorization")! } } }
);
const { data: { user } } = await supabase.auth.getUser();
return Response.json({ message: "Cześć " + (name ?? user?.email ?? "nieznajomy") });
});
Importy npm: i jsr: działają bez konfiguracji. Funkcja może składać się z wielu plików — plikiem wejściowym jest zawsze index.ts.
Wywołanie z klienta
const { data, error } = await supabase.functions.invoke("witaj", {
body: { name: "Ania" },
});
Weryfikacja JWT
Domyślnie funkcja wymaga nagłówka Authorization: Bearer <JWT> (klucz anon albo token zalogowanego użytkownika) — bez niego runtime zwraca 401, zanim uruchomi Twój kod. Dla webhooków (Stripe, GitHub) wyłącz verify_jwt w ustawieniach funkcji i weryfikuj podpis w kodzie.
Sekrety
Klucze API ustawiasz w Edge Functions → Sekrety (pojedynczo lub importem z pliku .env) i odczytujesz przez Deno.env.get("NAZWA"). Wartości są przechowywane tylko na serwerze projektu i nigdy nie są wyświetlane ani zwracane przez API. Panel pokazuje, które funkcje korzystają z danego sekretu, i ostrzega, gdy funkcja odczytuje sekret, którego nie ustawiono.
Po zmianie sekretów runtime uruchamia się ponownie (kilka sekund) — w tym czasie wywołania mogą zwracać 502, a bieżące logi runtime są czyszczone.
Zmienne SUPABASE_URL, SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY i SUPABASE_DB_URL są wstrzykiwane automatycznie — prefiks SUPABASE_ jest zarezerwowany.
Wdrożenie przez API
curl -X PUT https://host.ulewicz.space/api/v1/projects/<ref>/functions/witaj \
-H "Authorization: Bearer $HOSTBASE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"code":"Deno.serve(() => Response.json({ ok: true }))","verify_jwt":true}'
Pełna lista endpointów: Management API. Agenci AI mogą wdrażać funkcje przez serwer MCP (deploy_edge_function).
Harmonogramy (cron)
W zakładce Harmonogram funkcji dodasz cykliczne wywołanie: nazwa, częstotliwość (gotowe ustawienia albo własne wyrażenie cron w UTC, także 30 seconds), metoda i treść JSON. Panel tworzy w Twojej bazie zadanie pg_cron, które wywołuje funkcję przez pg_net pod jej publicznym adresem — dzięki temu wywołania z harmonogramu widać w Analityce i Logach. Klucz service_role jest trzymany w Supabase Vault (hostbase_functions_service_key), a nie w treści zadania. Zadania mają nazwy hb-fn:<funkcja>:<harmonogram>; możesz je wstrzymywać, wznawiać i usuwać, a historia uruchomień pochodzi z cron.job_run_details.
Ten sam efekt uzyskasz ręcznie w Edytorze SQL:
select cron.schedule('sprzatanie', '0 3 * * *', $$
select net.http_post(
url := 'https://<ref>.host.ulewicz.space/functions/v1/scheduled-cleanup',
headers := jsonb_build_object(
'Authorization',
'Bearer ' || (select decrypted_secret from vault.decrypted_secrets where name = 'hostbase_functions_service_key')
)
);
$$);
Limity
| Wartość | |
|---|---|
| Rozmiar kodu funkcji | 1 MB (wszystkie pliki łącznie) |
| Pamięć workera | 150 MB |
| Maks. czas oczekiwania na odpowiedź | 150 s |
| Zimny start | worker jest zwalniany po 60 s bez żądań; kolejne wywołanie uruchamia go od nowa |
| Historia wersji | 50 ostatnich wersji każdej funkcji |
| Środowisko | Deno (Supabase Edge Runtime), TypeScript bez kroku budowania |