Supabase konektor
Prepoj svoj Supabase projekt na synchronizáciu databázových záznamov, dát autentifikácie používateľov, udalostí úložiska súborov a zmien v reálnom čase pre automatizáciu zákazníckeho zapojenia.
Prehľad
| Vlastnosť | Hodnota |
|---|---|
| Platforma | Supabase |
| Kategória | Databáza a Backend |
| Zložitosť nastavenia | Ľahké |
| Oficiálna integrácia | Áno |
| Synchronizované dáta | Používatelia, Tabuľky, Úložisko, Udalosti |
| Dostupné skilly | 11 |
| Typ API | REST (PostgREST) + Realtime WebSocket |
| Oficiálna dokumentácia | supabase.com/docs |
Funkcie
- Automaticky generované REST API, CRUD operácie na akejkoľvek Postgres tabuľke cez PostgREST, bez kódu
- Synchronizácia Auth používateľov, Synchronizuj Supabase Auth používateľov (e-mail, telefón, sociálne prihlásenia) do tvojej platformy
- Odbery v reálnom čase, Počúvaj udalosti INSERT, UPDATE, DELETE na akejkoľvek tabuľke v reálnom čase
- Row Level Security, Všetok API prístup rešpektuje Postgres RLS politiky pre bezpečné multi-tenant dáta
- Integrácia úložiska, Sleduj nahrávanie súborov a spravuj prostriedky naprieč Storage bucketmi
- Edge Functions, Spúšťaj bezserverové Deno funkcie pre vlastnú logiku a webhooky
- Full-text vyhľadávanie, Využi možnosti full-text vyhľadávania Postgres cez API
Predpoklady
Predtým, než začneš, uisti sa, že máš:
- Supabase projekt (app.supabase.com)
- API URL a API kľúče tvojho projektu (v Settings → API)
- Tajo účet s API prístupom
API kľúče
Supabase poskytuje dva kľúče: anon (verejný, rešpektuje RLS) a service_role (obchádza RLS, admin prístup). Použi service_role pre serverové integrácie a anon pre klientské.
Autentifikácia
Supabase používa autentifikáciu pomocou API kľúčov. Každá požiadavka vyžaduje hlavičku apikey a voliteľne Bearer token Authorization pre prístup v rozsahu používateľa.
# Using anon key (respects RLS)curl 'https://<project_ref>.supabase.co/rest/v1/customers' \ -H "apikey: <SUPABASE_ANON_KEY>" \ -H "Authorization: Bearer <SUPABASE_ANON_KEY>"
# Using service_role key (bypasses RLS)curl 'https://<project_ref>.supabase.co/rest/v1/customers' \ -H "apikey: <SUPABASE_SERVICE_ROLE_KEY>" \ -H "Authorization: Bearer <SUPABASE_SERVICE_ROLE_KEY>"Konfigurácia
Základné nastavenie
connectors: supabase: enabled: true project_url: "https://xyzcompany.supabase.co" api_key: "${SUPABASE_SERVICE_ROLE_KEY}"
# Data sync options sync: users: true tables: - customers - orders - products storage: true realtime: true
# Map Supabase Auth users to contacts user_mapping: email: email phone: SMS user_metadata.full_name: FIRSTNAME created_at: SIGNUP_DATEMapovanie polí
Namapuj stĺpce tabuľky Supabase na atribúty platformy:
Predvolené mapovania používateľov
| Parameter | Type | Description |
|---|---|---|
email required | string | E-mail používateľa zo Supabase Auth (unikátny identifikátor) |
phone optional | string | Telefónne číslo pre SMS/WhatsApp zapojenie |
user_metadata.full_name optional | string | Zobrazované meno z metadát Auth používateľa |
user_metadata.avatar_url optional | string | URL profilového obrázka |
created_at optional | timestamp | Časová pečiatka vytvorenia účtu |
last_sign_in_at optional | timestamp | Posledné prihlásenie pre skórovanie zapojenia |
app_metadata.provider optional | string | Poskytovateľ autentifikácie (email, google, github atď.) |
confirmed_at optional | timestamp | Časová pečiatka potvrdenia e-mailu |
Mapovanie vlastných tabuliek
table_mapping: customers: # Column → Attribute mapping email: email full_name: FIRSTNAME company: COMPANY plan: SUBSCRIPTION_PLAN mrr: MONTHLY_REVENUE created_at: SIGNUP_DATE
orders: # Track as events sync_as: events event_name: "order_placed" properties: total: amount status: order_status items: line_itemsAPI endpointy
REST API Supabase je automaticky generované zo schémy tvojej databázy na https://<ref>.supabase.co/rest/v1/.
| Endpoint | Metóda | Popis |
|---|---|---|
/rest/v1/{table} | GET | Dopyt na riadky s filtrovaním, triedením, stránkovaním |
/rest/v1/{table} | POST | Vloženie riadkov (podporuje hromadné a upsert) |
/rest/v1/{table} | PATCH | Aktualizácia riadkov zodpovedajúcich filtrám |
/rest/v1/{table} | DELETE | Odstránenie riadkov zodpovedajúcich filtrám |
/rest/v1/rpc/{function} | POST | Volanie Postgres funkcie |
/auth/v1/signup | POST | Vytvorenie nového používateľa |
/auth/v1/token?grant_type=password | POST | Prihlásenie heslom |
/auth/v1/user | GET | Získanie aktuálneho používateľa |
/auth/v1/admin/users | GET | Zoznam všetkých používateľov (service_role) |
/storage/v1/object/{bucket}/{path} | POST | Nahranie súboru |
/storage/v1/object/list/{bucket} | POST | Zoznam súborov v buckete |
/functions/v1/{function_name} | POST | Spustenie Edge Function |
Filtračné operátory
| Operátor | Popis | Príklad |
|---|---|---|
eq | Rovná sa | ?status=eq.active |
neq | Nerovná sa | ?status=neq.deleted |
gt, gte | Väčší ako | ?amount=gt.100 |
lt, lte | Menší ako | ?created_at=lt.2024-01-01 |
like, ilike | Zhoda vzoru | ?name=ilike.%john% |
in | V poli | ?status=in.(active,trial) |
is | Kontrola null | ?deleted_at=is.null |
Udalosti
Auth udalosti
| Udalosť | Trigger | Prípad použitia |
|---|---|---|
user.signed_up | Registrácia nového používateľa | Uvítacia séria |
user.signed_in | Prihlásenie používateľa | Sledovanie aktivity |
user.updated | Zmeny profilu | Synchronizácia dát |
user.deleted | Zmazanie účtu | Čistiace workflowy |
Databázové udalosti (Realtime)
| Udalosť | Trigger | Prípad použitia |
|---|---|---|
INSERT | Pridaný nový riadok | Notifikácie o novej objednávke/zákazníkovi |
UPDATE | Upravený riadok | Workflowy zmeny stavu |
DELETE | Odstránený riadok | Detekcia odchodu |
Webhookové udalosti
| Udalosť | Trigger | Prípad použitia |
|---|---|---|
auth.user.created | Registrácia používateľa cez webhook | Spustenie onboardingu |
storage.object.created | Nahraný súbor | Spracovanie prostriedkov |
Ukážky kódu
Inicializácia konektora
import { TajoClient } from '@tajo/sdk';import { createClient } from '@supabase/supabase-js';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY,});
// Connect Supabase projectawait tajo.connectors.connect('supabase', { projectUrl: process.env.SUPABASE_URL, serviceRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY,});Synchronizácia používateľov do kontaktov
// Sync all Supabase Auth users as contactsawait tajo.connectors.sync('supabase', { type: 'full', resources: ['users'],});
// Incremental sync (new/changed users only)await tajo.connectors.sync('supabase', { type: 'incremental', resources: ['users'], since: '2024-01-01T00:00:00Z',});Počúvanie zmien v reálnom čase
// Subscribe to new orders for engagement triggersconst supabase = createClient( process.env.SUPABASE_URL, process.env.SUPABASE_SERVICE_ROLE_KEY);
supabase .channel('orders') .on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'orders' }, async (payload) => { // Forward to Tajo as an event await tajo.events.track({ email: payload.new.customer_email, event: 'order_placed', properties: { order_id: payload.new.id, total: payload.new.total, items: payload.new.line_items, }, }); } ) .subscribe();Dopyt a segmentácia
// Query customers by plan for targeted campaignsconst { data: proUsers } = await supabase .from('customers') .select('email, full_name, plan, mrr') .eq('plan', 'pro') .gt('mrr', 100) .order('mrr', { ascending: false });
// Sync to a Brevo list for campaign targetingawait tajo.lists.addContacts(PRO_LIST_ID, proUsers);Obmedzenia rýchlosti
Limity rýchlosti API
Limity rýchlosti Supabase závisí od tvojho plánu. Free tier: 500 požiadaviek/minútu. Pro: 1 000 požiadaviek/sekundu. Pre Enterprise limity kontaktuj Supabase.
| Plán | Limit rýchlosti | Realtime pripojenia |
|---|---|---|
| Free | 500 požiadaviek/min | 200 súbežných |
| Pro | 1 000 požiadaviek/sek | 500 súbežných |
| Team | 2 000 požiadaviek/sek | 1 000 súbežných |
| Enterprise | Vlastné | Vlastné |
Riešenie problémov
Bežné problémy
| Problém | Príčina | Riešenie |
|---|---|---|
| 401 Unauthorized | Neplatný alebo vypršaný API kľúč | Skontroluj API kľúče v Supabase Dashboard → Settings → API |
| 403 Forbidden | RLS politika blokuje prístup | Použi kľúč service_role pre admin operácie alebo skontroluj RLS politiky |
| Žiadne realtime udalosti | Realtime nie je povolené pre tabuľku | Povol v Database → Replication → pridaj tabuľku do publikácie |
| Prázdne výsledky dopytu | RLS filtruje všetky riadky | Overte RLS politiky, ktoré umožňujú autentifikovanej roli čítať |
| Nahranie do úložiska zlyhalo | Politiky bucketu | Skontroluj, či je Storage bucket verejný alebo má správne RLS politiky |
Debug režim
connectors: supabase: debug: true log_level: verbose log_queries: true log_realtime: trueTest pripojenia
tajo connectors test supabase# ✓ API connection successful# ✓ Auth endpoint accessible# ✓ Tables readable (12 tables found)# ✓ Storage accessible (3 buckets)# ✓ Realtime connection established# ✓ Edge Functions available (4 functions)Odporúčané postupy
- Použi kľúč service_role iba na strane servera, Nikdy ho nevystavuj v klientskom kóde
- Povol RLS na všetkých tabuľkách, Aj s service_role navrhuj s RLS pre hĺbkovú obranu
- Použi Realtime pre synchronizáciu riadenú udalosťami, Efektívnejšie ako polling zmien
- Dávkové operácie, Použi hromadné vkladanie a filter
inpre operácie s vysokým objemom - Mapuj metadáta používateľa, Uchovávaj polia relevantné pre zapojenie v
user_metadatapočas registrácie - Použi Edge Functions pre webhooky, Spracovávaj prichádzajúce webhooky cez Supabase Edge Functions pre nízku latenciu
Bezpečnosť
- Autentifikácia API kľúčom, Všetky požiadavky vyžadujú platné API kľúče
- Row Level Security (RLS), Natívna kontrola prístupu Postgres na úrovni riadku
- Overenie JWT, Auth tokeny sú podpísané JWT overené pri každej požiadavke
- SSL/TLS, Všetky pripojenia šifrované pri prenose
- SOC 2 Type II, Supabase je SOC 2 certifikovaný
- Sieťové obmedzenia, Voliteľné IP allowlisting v platených plánoch