---
title: "Supabase konektor"
description: "Kompletan vodič za Supabase integraciju za sinhronizaciju zapisa baze podataka, autentifikacije korisnika, pohrane fajlova i događaja u realnom vremenu sa tvojom platformom za angažovanje."
url: https://tajo.io/sr/docs/connectors/custom/supabase/
markdown: https://tajo.io/sr/docs/connectors/custom/supabase.md
lang: sr-Latn-RS
robots: noindex
---

Zatražite rani pristup

Unesite ime i poslovnu adresu e-pošte. Poslaćemo vam vezu za potvrdu zahteva za pristup Taju.

# Supabase konektor

Status konektora: Planirano Još nije izrađeno. Tajo danas ne pokreće ovaj konektor.

| Izvorno polje | Odredišno polje | Primer vrednosti |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

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** | Ne |
| **Sinhronizovani podaci** | Korisnici, Tabele, Pohrana, Događaji |
| **Dostupne veštine** | 11 |
| **Tip API-ja** | REST (PostgREST) + Realtime WebSocket |
| **Zvanična dokumentacija** | [supabase.com/docs](https://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š:

1. Supabase projekat ([app.supabase.com](https://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.

```bash
# 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

```yaml
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

```yaml
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/`.

| 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

```javascript
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

```javascript
// 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

```javascript
// 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

```javascript
// 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.

| 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

```yaml
connectors:
  supabase:
    debug: true
    log_level: verbose
    log_queries: true
    log_realtime: true
```

### Testiraj vezu

```bash
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

- [Shopify konektor](https://tajo.io/sr/docs/connectors/ecommerce/shopify)
- [Stripe konektor](https://tajo.io/sr/docs/connectors/ecommerce/stripe)
- [Auth0 konektor](https://tajo.io/sr/docs/connectors/custom/auth0)
- [Supabase zvanična dokumentacija](https://supabase.com/docs)
- [Supabase REST API vodič](https://supabase.com/docs/guides/api)
- [Supabase Auth vodič](https://supabase.com/docs/guides/auth)
