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

SvojstvoVrednost
PlatformaSupabase
KategorijaBaza podataka i Backend
Složenost podešavanjaLako
Zvanična integracijaDa
Sinhronizovani podaciKorisnici, Tabele, Pohrana, Događaji
Dostupne veštine11
Tip API-jaREST (PostgREST) + Realtime WebSocket
Zvanična dokumentacijasupabase.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š:

  1. Supabase projekat (app.supabase.com)
  2. API URL i API ključeve projekta (nalaze se u Settings → API)
  3. 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.

Terminal window
# 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_DATE

Mapiranje 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_items

API endpointi

Supabase REST API se auto-generiše iz šeme baze podataka na https://<ref>.supabase.co/rest/v1/.

EndpointMetodaOpis
/rest/v1/{table}GETUpit redova sa filtriranjem, sortiranjem, paginacijom
/rest/v1/{table}POSTUmetanje redova (podržava bulk i upsert)
/rest/v1/{table}PATCHAžuriranje redova koji odgovaraju filtrima
/rest/v1/{table}DELETEBrisanje redova koji odgovaraju filtrima
/rest/v1/rpc/{function}POSTPozivanje Postgres funkcije
/auth/v1/signupPOSTKreiranje novog korisnika
/auth/v1/token?grant_type=passwordPOSTPrijava lozinkom
/auth/v1/userGETDohvatanje trenutnog korisnika
/auth/v1/admin/usersGETListanje svih korisnika (service_role)
/storage/v1/object/{bucket}/{path}POSTUpload fajla
/storage/v1/object/list/{bucket}POSTListanje fajlova u bucket-u
/functions/v1/{function_name}POSTPozivanje Edge Function

Operatori filtriranja

OperatorOpisPrimer
eqJednako?status=eq.active
neqNije jednako?status=neq.deleted
gt, gteVeće od?amount=gt.100
lt, lteManje od?created_at=lt.2024-01-01
like, ilikePodudaranje šablona?name=ilike.%john%
inU nizu?status=in.(active,trial)
isProvera null?deleted_at=is.null

Događaji

Auth događaji

DogađajOkidačSlučaj upotrebe
user.signed_upRegistracija novog korisnikaSerija dobrodošlice
user.signed_inPrijava korisnikaPraćenje aktivnosti
user.updatedPromene profilaSinhronizacija podataka
user.deletedBrisanje nalogaTokovi čišćenja

Događaji baze podataka (Realtime)

DogađajOkidačSlučaj upotrebe
INSERTDodat novi redObaveštenja o novoj porudžbini/kupcu
UPDATEIzmenjen redTokovi promene statusa
DELETEUklonjen redDetekcija odljeva

Webhook događaji

DogađajOkidačSlučaj upotrebe
auth.user.createdRegistracija korisnika putem webhook-aPokretanje onboardinga
storage.object.createdUploadovan fajlObrada 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 project
await 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 contacts
await 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 triggers
const 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 campaigns
const { 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 targeting
await 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.

PlanLimit brzineRealtime veze
Free500 zahteva/min200 istovremeno
Pro1.000 zahteva/sek500 istovremeno
Team2.000 zahteva/sek1.000 istovremeno
EnterprisePrilagođenoPrilagođeno

Rešavanje problema

Česti problemi

ProblemUzrokRešenje
401 UnauthorizedNevažeći ili istekli API ključProveri API ključeve u Supabase Dashboard → Settings → API
403 ForbiddenRLS politika blokira pristupKoristi service_role ključ za admin operacije, ili proveri RLS politike
Nema realtime događajaRealtime nije omogućen za tabeluOmogući u Database → Replication → dodaj tabelu u publikaciju
Prazni rezultati upitaRLS filtrira sve redoveVerifikuj da RLS politike dozvoljaju autentifikovanoj ulozi da čita
Upload pohrane neuspesanPolitike bucket-aProveri 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: true

Testiraj vezu

Terminal window
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

  1. Koristi service_role ključ samo na server strani, Nikada ga ne izlažuj u klijentskom kodu
  2. Omogući RLS na svim tabelama, Čak i sa service_role, dizajniraj sa RLS za višeslojnu odbranu
  3. Koristi Realtime za sinhronizaciju pokretanu događajima, Efikasnije od ispitivanja za promene
  4. Grupne operacije, Koristi bulk inserte i in filter za operacije visokog volumena
  5. Mapiraj metapodatke korisnika, Čuvaj polja relevantna za angažovanje u user_metadata tokom registracije
  6. 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

Povezani resursi

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI асистент

Здраво! Питајте ме о документацији.