HostBase

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

  1. Otwórz projekt → Edge Functions → Nowa funkcja.
  2. 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.
  3. Nadaj nazwę i kliknij Utwórz i wdróż. Funkcja działa po kilku sekundach.
  4. 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ładkaCo zawiera
TestujŻądanie testowe (metoda, ścieżka, nagłówki, body; klucz anon, service_role albo bez autoryzacji), odpowiedź z kodem, czasem i nagłówkami.
AnalitykaWywoł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).
LogiWyjście console.log/console.error przypisane do kolejnych wywołań oraz lista ostatnich żądań HTTP.
HistoriaKaż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.
HarmonogramUruchamianie funkcji według wyrażenia cron — patrz niżej.
UstawieniaWeryfikacja 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 funkcji1 MB (wszystkie pliki łącznie)
Pamięć workera150 MB
Maks. czas oczekiwania na odpowiedź150 s
Zimny startworker jest zwalniany po 60 s bez żądań; kolejne wywołanie uruchamia go od nowa
Historia wersji50 ostatnich wersji każdej funkcji
ŚrodowiskoDeno (Supabase Edge Runtime), TypeScript bez kroku budowania