Supabase konektor
Poveži svoj Supabase projekat da sinhronizuješ zapise baze podataka, podatke o autentifikaciji korisnika, događaje pohrane fajlova i promene u realnom vremenu za automatizaciju angažovanja kupaca.
Pregled
| Svojstvo | Vrednost |
|---|---|
| Platforma | Supabase |
| Kategorija | Baza podataka i Backend |
| Složenost podešavanja | Lako |
| Zvanična integracija | Da |
| Sinhronizovani podaci | Korisnici, Tabele, Pohrana, Događaji |
| Dostupne veštine | 11 |
| Tip API-ja | REST (PostgREST) + Realtime WebSocket |
| Zvanična dokumentacija | supabase.com/docs |
Karakteristike
- Auto-generisani REST API, CRUD operacije na bilo kojoj Postgres tabeli putem PostgREST, bez potrebe za kodom
- Sinhronizacija Auth korisnika, Sinhronizacija Supabase Auth korisnika (email, telefon, socijalne prijave) sa tvojom platformom za angažovanje
- Pretplate u realnom vremenu, Slušanje INSERT, UPDATE, DELETE događaja na bilo kojoj tabeli u realnom vremenu
- Row Level Security, Svi API pristupi poštuju Postgres RLS politike za sigurne multi-tenant podatke
- Integracija pohrane, Praćenje upload-ova fajlova i upravljanje resursima u Storage bucket-ima
- Edge Functions, Pozivanje serverless Deno funkcija za prilagođenu logiku i webhook-ove
- Pretraga punog teksta, Korišćenje Postgres mogućnosti pretrage punog teksta putem API-ja
Preduslovi
Pre nego što započneš, proveri da imaš:
- Supabase projekat (app.supabase.com)
- API URL i API ključeve projekta (nalaze se u Settings → API)
- Tajo nalog sa API pristupom
API ključevi
Supabase pruža dva ključa: anon (javni, poštuje RLS) i service_role (zaobilazi RLS, admin pristup). Koristi service_role za server-side integracije i anon za klijentsku stranu.
Autentifikacija
Supabase koristi autentifikaciju API ključem. Svaki zahtev zahteva header apikey i opciono Bearer token Authorization za korisnički skopovan pristup.
# 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>"Konfiguracija
Osnovno podešavanje
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_DATEMapiranje polja
Mapiranje kolona Supabase tabele na atribute platforme za angažovanje:
Default User Mappings
| Parameter | Type | Description |
|---|---|---|
email required | string | Email korisnika iz Supabase Auth (jedinstveni identifikator) |
phone optional | string | Broj telefona za SMS/WhatsApp angažovanje |
user_metadata.full_name optional | string | Prikazno ime iz metapodataka Auth korisnika |
user_metadata.avatar_url optional | string | URL slike profila |
created_at optional | timestamp | Vremenska oznaka kreiranja naloga |
last_sign_in_at optional | timestamp | Najskorija prijava za ocenjivanje angažovanja |
app_metadata.provider optional | string | Auth provajder (email, google, github, itd.) |
confirmed_at optional | timestamp | Vremenska oznaka potvrde email-a |
Mapiranje prilagođenih tabela
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 endpointi
Supabase REST API se auto-generiše iz šeme baze podataka na https://<ref>.supabase.co/rest/v1/.
| Endpoint | Metoda | Opis |
|---|---|---|
/rest/v1/{table} | GET | Upit redova sa filtriranjem, sortiranjem, paginacijom |
/rest/v1/{table} | POST | Umetanje redova (podržava bulk i upsert) |
/rest/v1/{table} | PATCH | Ažuriranje redova koji odgovaraju filtrima |
/rest/v1/{table} | DELETE | Brisanje redova koji odgovaraju filtrima |
/rest/v1/rpc/{function} | POST | Pozivanje Postgres funkcije |
/auth/v1/signup | POST | Kreiranje novog korisnika |
/auth/v1/token?grant_type=password | POST | Prijava lozinkom |
/auth/v1/user | GET | Dohvatanje trenutnog korisnika |
/auth/v1/admin/users | GET | Listanje svih korisnika (service_role) |
/storage/v1/object/{bucket}/{path} | POST | Upload fajla |
/storage/v1/object/list/{bucket} | POST | Listanje fajlova u bucket-u |
/functions/v1/{function_name} | POST | Pozivanje Edge Function |
Operatori filtriranja
| Operator | Opis | Primer |
|---|---|---|
eq | Jednako | ?status=eq.active |
neq | Nije jednako | ?status=neq.deleted |
gt, gte | Veće od | ?amount=gt.100 |
lt, lte | Manje od | ?created_at=lt.2024-01-01 |
like, ilike | Podudaranje šablona | ?name=ilike.%john% |
in | U nizu | ?status=in.(active,trial) |
is | Provera null | ?deleted_at=is.null |
Događaji
Auth događaji
| Događaj | Okidač | Slučaj upotrebe |
|---|---|---|
user.signed_up | Registracija novog korisnika | Serija dobrodošlice |
user.signed_in | Prijava korisnika | Praćenje aktivnosti |
user.updated | Promene profila | Sinhronizacija podataka |
user.deleted | Brisanje naloga | Tokovi čišćenja |
Događaji baze podataka (Realtime)
| Događaj | Okidač | Slučaj upotrebe |
|---|---|---|
INSERT | Dodat novi red | Obaveštenja o novoj porudžbini/kupcu |
UPDATE | Izmenjen red | Tokovi promene statusa |
DELETE | Uklonjen red | Detekcija odljeva |
Webhook događaji
| Događaj | Okidač | Slučaj upotrebe |
|---|---|---|
auth.user.created | Registracija korisnika putem webhook-a | Pokretanje onboardinga |
storage.object.created | Uploadovan fajl | Obrada resursa |
Primeri koda
Inicijalizacija 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,});Sinhronizacija korisnika sa kontaktima
// 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',});Slušanje promena u realnom vremenu
// 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();Upit i segmentacija
// 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);Ograničenja brzine
Ograničenja API brzine
Supabase ograničenja brzine zavise od tvog plana. Besplatan nivo: 500 zahteva/minut. Pro: 1.000 zahteva/sekundi. Kontaktiraj Supabase za Enterprise limite.
| Plan | Limit brzine | Realtime veze |
|---|---|---|
| Free | 500 zahteva/min | 200 istovremeno |
| Pro | 1.000 zahteva/sek | 500 istovremeno |
| Team | 2.000 zahteva/sek | 1.000 istovremeno |
| Enterprise | Prilagođeno | Prilagođeno |
Rešavanje problema
Česti problemi
| Problem | Uzrok | Rešenje |
|---|---|---|
| 401 Unauthorized | Nevažeći ili istekli API ključ | Proveri API ključeve u Supabase Dashboard → Settings → API |
| 403 Forbidden | RLS politika blokira pristup | Koristi service_role ključ za admin operacije, ili proveri RLS politike |
| Nema realtime događaja | Realtime nije omogućen za tabelu | Omogući u Database → Replication → dodaj tabelu u publikaciju |
| Prazni rezultati upita | RLS filtrira sve redove | Verifikuj da RLS politike dozvoljaju autentifikovanoj ulozi da čita |
| Upload pohrane neuspesan | Politike bucket-a | Proveri da je Storage bucket javni ili ima ispravne RLS politike |
Debug režim
connectors: supabase: debug: true log_level: verbose log_queries: true log_realtime: trueTestiraj vezu
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)Najbolje prakse
- Koristi service_role ključ samo na server strani, Nikada ga ne izlažuj u klijentskom kodu
- Omogući RLS na svim tabelama, Čak i sa service_role, dizajniraj sa RLS za višeslojnu odbranu
- Koristi Realtime za sinhronizaciju pokretanu događajima, Efikasnije od ispitivanja za promene
- Grupne operacije, Koristi bulk inserte i
infilter za operacije visokog volumena - Mapiraj metapodatke korisnika, Čuvaj polja relevantna za angažovanje u
user_metadatatokom registracije - Koristi Edge Functions za webhook-ove, Obradi dolazne webhook-ove sa Supabase Edge Functions za obradu male latencije
Bezbednost
- Autentifikacija API ključem, Svi zahtevi zahtevaju važeće API ključeve
- Row Level Security (RLS), Postgres-nativna kontrola pristupa po redu
- JWT verifikacija, Auth tokeni su potpisani JWT-ovi koji se verifikuju na svakom zahtevu
- SSL/TLS, Sve veze enkriptovane u prenosu
- SOC 2 Type II, Supabase je SOC 2 usklađen
- Mrežna ograničenja, Opcijsko IP allowlisting na plaćenim planovima