Supabase Konektor
Povežite svoj Supabase projekt za sinkronizaciju zapisa baze podataka, korisničkih podataka autentifikacije, događaja pohrane datoteka i promjena u stvarnom vremenu za automatizaciju angažmana s klijentima.
Pregled
| Svojstvo | Vrijednost |
|---|---|
| Platforma | Supabase |
| Kategorija | Baza podataka i Backend |
| Složenost postavljanja | Jednostavno |
| Službena integracija | Da |
| Sinkronizirani podaci | Korisnici, Tablice, Pohrana, Događaji |
| Dostupne vještine | 11 |
| Vrsta API-ja | REST (PostgREST) + Realtime WebSocket |
| Službena dokumentacija | supabase.com/docs |
Značajke
- Automatski generirani REST API, CRUD operacije na bilo kojoj Postgres tablici putem PostgREST, bez koda
- Sinkronizacija Auth korisnika, Sinkronizacija Supabase Auth korisnika (e-mail, telefon, socijalne prijave) na vašu platformu za angažman
- Pretplate u stvarnom vremenu, Slušajte INSERT, UPDATE, DELETE događaje na bilo kojoj tablici u stvarnom vremenu
- Sigurnost na razini reda, Sav API pristup poštuje Postgres RLS politike za sigurne višestanarne podatke
- Integracija pohrane, Pratite učitavanja datoteka i upravljajte resursima kroz Storage buckete
- Edge funkcije, Pozivajte serverless Deno funkcije za prilagođenu logiku i webhookove
- Pretraživanje cijelog teksta, Iskoristite Postgres mogućnosti pretraživanja cijelog teksta putem API-ja
Preduvjeti
Prije nego što počnete, osigurajte da imate:
- Supabase projekt (app.supabase.com)
- Vaš projektni API URL i API ključevi (pronađeni u Postavke → API)
- Tajo račun s API pristupom
API ključevi
Supabase pruža dva ključa: anon (javni, poštuje RLS) i service_role (zaobilazi RLS, administratorski pristup). Koristite service_role za integracije na strani servera i anon za integracije na strani klijenta.
Autentifikacija
Supabase koristi autentifikaciju API ključem. Svaki zahtjev zahtijeva zaglavlje apikey i opcionalno Authorization bearer token za pristup ograničen na korisnika.
# Korištenje anon ključa (poštuje RLS)curl 'https://<project_ref>.supabase.co/rest/v1/customers' \ -H "apikey: <SUPABASE_ANON_KEY>" \ -H "Authorization: Bearer <SUPABASE_ANON_KEY>"
# Korištenje service_role ključa (zaobilazi RLS)curl 'https://<project_ref>.supabase.co/rest/v1/customers' \ -H "apikey: <SUPABASE_SERVICE_ROLE_KEY>" \ -H "Authorization: Bearer <SUPABASE_SERVICE_ROLE_KEY>"Konfiguracija
Osnovna konfiguracija
connectors: supabase: enabled: true project_url: "https://xyzcompany.supabase.co" api_key: "${SUPABASE_SERVICE_ROLE_KEY}"
# Opcije sinkronizacije podataka sync: users: true tables: - customers - orders - products storage: true realtime: true
# Mapiranje Supabase Auth korisnika na kontakte user_mapping: email: email phone: SMS user_metadata.full_name: FIRSTNAME created_at: SIGNUP_DATEMapiranje polja
Mapirajte stupce Supabase tablice na atribute platforme za angažman:
Zadana mapiranja korisnika
| Parameter | Type | Description |
|---|---|---|
email required | string | Korisnikov e-mail iz Supabase Auth (jedinstveni identifikator) |
phone optional | string | Broj telefona za SMS/WhatsApp angažman |
user_metadata.full_name optional | string | Prikazno ime iz Auth korisničkih metapodataka |
user_metadata.avatar_url optional | string | URL profilne slike |
created_at optional | timestamp | Vremenska oznaka kreiranja računa |
last_sign_in_at optional | timestamp | Najnovija prijava za ocjenjivanje angažmana |
app_metadata.provider optional | string | Davatelj autentifikacije (email, google, github, itd.) |
confirmed_at optional | timestamp | Vremenska oznaka potvrde e-maila |
Mapiranje prilagođenih tablica
table_mapping: customers: # Mapiranje Stupac → Atribut email: email full_name: FIRSTNAME company: COMPANY plan: SUBSCRIPTION_PLAN mrr: MONTHLY_REVENUE created_at: SIGNUP_DATE
orders: # Pratite kao događaje sync_as: events event_name: "order_placed" properties: total: amount status: order_status items: line_itemsAPI krajnje točke
Supabase REST API automatski se generira iz vaše sheme baze podataka na https://<ref>.supabase.co/rest/v1/.
| Krajnja točka | Metoda | Opis |
|---|---|---|
/rest/v1/{table} | GET | Upitajte redove s filtriranjem, sortiranjem, paginacijom |
/rest/v1/{table} | POST | Umetnite redove (podržava skupno i upsert) |
/rest/v1/{table} | PATCH | Ažurirajte redove koji odgovaraju filterima |
/rest/v1/{table} | DELETE | Izbrišite redove koji odgovaraju filterima |
/rest/v1/rpc/{function} | POST | Pozovite Postgres funkciju |
/auth/v1/signup | POST | Kreirajte novog korisnika |
/auth/v1/token?grant_type=password | POST | Prijavite se s lozinkom |
/auth/v1/user | GET | Dohvatite trenutnog korisnika |
/auth/v1/admin/users | GET | Popis svih korisnika (service_role) |
/storage/v1/object/{bucket}/{path} | POST | Učitajte datoteku |
/storage/v1/object/list/{bucket} | POST | Popis datoteka u bucketu |
/functions/v1/{function_name} | POST | Pozovite Edge funkciju |
Operatori filtriranja
| Operator | Opis | Primjer |
|---|---|---|
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 uzorka | ?name=ilike.%john% |
in | U nizu | ?status=in.(active,trial) |
is | Provjera null | ?deleted_at=is.null |
Događaji
Auth događaji
| Događaj | Okidač | Slučaj upotrebe |
|---|---|---|
user.signed_up | Nova registracija korisnika | Serija dobrodošlice |
user.signed_in | Prijava korisnika | Praćenje aktivnosti |
user.updated | Promjena profila | Sinkronizacija podataka |
user.deleted | Brisanje računa | Tijekovi rada čišćenja |
Događaji baze podataka (Realtime)
| Događaj | Okidač | Slučaj upotrebe |
|---|---|---|
INSERT | Dodan novi red | Obavijesti o novoj narudžbi/korisniku |
UPDATE | Izmijenjen red | Tijekovi rada promjene statusa |
DELETE | Uklonjen red | Otkrivanje odljeva |
Webhook događaji
| Događaj | Okidač | Slučaj upotrebe |
|---|---|---|
auth.user.created | Registracija korisnika putem webhookova | Pokretanje onboardinga |
storage.object.created | Učitana datoteka | Obrada resursa |
Primjeri koda
Inicijalizacija konektora
import { TajoClient } from '@tajo/sdk';import { createClient } from '@supabase/supabase-js';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY,});
// Povežite Supabase projektawait tajo.connectors.connect('supabase', { projectUrl: process.env.SUPABASE_URL, serviceRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY,});Sinkronizacija korisnika s kontaktima
// Sinkronizacija svih Supabase Auth korisnika kao kontakataawait tajo.connectors.sync('supabase', { type: 'full', resources: ['users'],});
// Inkrementalna sinkronizacija (samo novi/promijenjeni korisnici)await tajo.connectors.sync('supabase', { type: 'incremental', resources: ['users'], since: '2024-01-01T00:00:00Z',});Slušanje promjena u stvarnom vremenu
// Pretplatite se na nove narudžbe za okidače angažmanaconst 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) => { // Proslijedite Taju kao događaj 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
// Upitajte korisnike prema planu za ciljane kampanjeconst { data: proUsers } = await supabase .from('customers') .select('email, full_name, plan, mrr') .eq('plan', 'pro') .gt('mrr', 100) .order('mrr', { ascending: false });
// Sinkronizacija na Brevo popis za ciljanje kampanjeawait tajo.lists.addContacts(PRO_LIST_ID, proUsers);Ograničenja brzine
Ograničenja brzine API-ja
Supabase ograničenja brzine ovise o vašem planu. Besplatni plan: 500 zahtjeva/minuta. Pro: 1.000 zahtjeva/sekundi. Kontaktirajte Supabase za Enterprise ograničenja.
| Plan | Ograničenje brzine | Realtime veze |
|---|---|---|
| Besplatno | 500 zah./min | 200 istovremeno |
| Pro | 1.000 zah./s | 500 istovremeno |
| Tim | 2.000 zah./s | 1.000 istovremeno |
| Enterprise | Prilagođeno | Prilagođeno |
Rješavanje problema
Uobičajeni problemi
| Problem | Uzrok | Rješenje |
|---|---|---|
| 401 Unauthorized | Nevažeći ili istekli API ključ | Provjerite API ključeve u Supabase Dashboard → Postavke → API |
| 403 Forbidden | RLS politika blokira pristup | Koristite service_role ključ za administratorske operacije ili provjerite RLS politike |
| Nema realtime događaja | Realtime nije omogućen za tablicu | Omogućite u Database → Replication → dodajte tablicu u publikaciju |
| Prazni rezultati upita | RLS filtrira sve redove | Verificirajte da RLS politike dopuštaju autenticiranoj ulozi čitanje |
| Učitavanje pohrane neuspješno | Politike bucketa | Provjerite je li Storage bucket javni ili ima ispravne RLS politike |
Način otklanjanja grešaka
connectors: supabase: debug: true log_level: verbose log_queries: true log_realtime: trueTestiranje veze
tajo connectors test supabase# ✓ API veza uspješna# ✓ Auth krajnja točka dostupna# ✓ Tablice čitljive (pronađeno 12 tablica)# ✓ Pohrana dostupna (3 bucketa)# ✓ Realtime veza uspostavljena# ✓ Edge funkcije dostupne (4 funkcije)Preporučene prakse
- Koristite service_role ključ samo na strani servera - Nikada ga ne izlažite u klijentskom kodu
- Omogućite RLS na svim tablicama - Čak i uz service_role, dizajnirajte s RLS-om za obranu u dubini
- Koristite Realtime za sinkronizaciju vođenu događajima - Učinkovitije od anketiranja za promjene
- Skupne operacije - Koristite skupno umetanje i
infiltar za viskovoluenske operacije - Mapirajte korisničke metapodatke - Pohranite relevantna polja za angažman u
user_metadatatijekom registracije - Koristite Edge funkcije za webhookove - Obradite dolazne webhookove s Supabase Edge funkcijama za rukovanje s niskom latencijom
Sigurnost
- Autentifikacija API ključem - Svi zahtjevi zahtijevaju valjane API ključeve
- Sigurnost na razini reda (RLS) - Postgres-nativna kontrola pristupa po redu
- JWT verifikacija - Auth tokeni su potpisani JWT-ovi verificirani na svakom zahtjevu
- SSL/TLS - Sve veze šifrirane u prijenosu
- SOC 2 Type II - Supabase je SOC 2 usklađen
- Mrežna ograničenja - Opcionalno IP dodavanje na popis dopuštenih na plaćenim planovima