---
title: "Konektor Supabase"
description: "Kompletny przewodnik integracji Supabase do synchronizacji użytkowników bazy danych, zdarzeń auth i danych w czasie rzeczywistym z Brevo przez Tajo."
url: https://tajo.io/pl/docs/connectors/custom/supabase/
markdown: https://tajo.io/pl/docs/connectors/custom/supabase.md
lang: pl-PL
robots: noindex
---

Poproś o wcześniejszy dostęp

Podaj imię i firmowy adres e-mail. Wyślemy Ci link potwierdzający prośbę o dostęp do Tajo.

# Konektor Supabase

Status konektora: Planowany Jeszcze niezbudowany. Tajo nie uruchamia dziś tego konektora.

| Pole źródłowe | Pole docelowe | Przykładowa wartość |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Połącz Supabase z Brevo przez Tajo, aby synchronizować zarejestrowanych użytkowników, zdarzenia uwierzytelniania i dane profilu do Brevo, umożliwiając targetowane kampanie marketingowe oparte na zachowaniu użytkowników w aplikacji i zdarzeniach cyklu życia.

## Przegląd

| Właściwość | Wartość |
| --- | --- |
| **Platforma** | Supabase |
| **Kategoria** | Backend jako usługa (Niestandardowa) |
| **Poziom konfiguracji** | Średni |
| **Integracja oficjalna** | Nie |
| **Synchronizowane dane** | Użytkownicy, Zdarzenia, Profile, Dane w czasie rzeczywistym |
| **Metoda uwierzytelniania** | Klucz API usługi / JWT |

## Funkcje

- **Synchronizacja użytkowników auth** - Synchronizuj użytkowników Supabase Auth z kontaktami Brevo
- **Wyzwalacze zdarzeń** - Wyzwalaj automatyzacje Brevo ze zdarzeń bazy danych Supabase
- **Synchronizacja profili** - Mapuj niestandardowe tabele profili na atrybuty kontaktów Brevo
- **Dane w czasie rzeczywistym** - Subskrybuj kanały Supabase Realtime dla aktualizacji natychmiastowych
- **Hooks bazodanowe** - Używaj webhooków bazodanowych Supabase do obsługi zdarzeń wierszy
- **Zapytania PostgREST** - Pobieraj i filtruj dane przez automatycznie generowane API REST

## Wymagania wstępne

Zanim zaczniesz, upewnij się, że masz:

1. Projekt Supabase z włączonymi usługami Auth i Database
2. Klucz API usługi (service\_role) z ustawień projektu Supabase
3. URL projektu Supabase
4. Konto Brevo z dostępem do API
5. Konto Tajo z uprawnieniami konektora

## Uwierzytelnianie

### Klucz API usługi

```bash
# Available in Supabase Dashboard > Settings > API
export SUPABASE_URL=https://your-project.supabase.co
export SUPABASE_SERVICE_KEY=your-service-role-key
export TAJO_API_KEY=your_tajo_api_key
export BREVO_API_KEY=your_brevo_api_key
```

```javascript
import { createClient } from '@supabase/supabase-js';

// Use service role key for server-side operations
const supabase = createClient(
  process.env.SUPABASE_URL,
  process.env.SUPABASE_SERVICE_KEY
);
```

Bezpieczeństwo klucza usługi

Klucz `service_role` omija Row Level Security. Nigdy nie ujawniaj go w kodzie po stronie klienta. Używaj tylko w zaufanych środowiskach po stronie serwera.

## Konfiguracja

### Podstawowa konfiguracja

```yaml
connectors:
  supabase:
    enabled: true
    url: "${SUPABASE_URL}"
    service_key: "${SUPABASE_SERVICE_KEY}"

    sync:
      users: true
      profiles: true
      events: true
      schedule: "0 */2 * * *"  # Every 2 hours

    tables:
      profiles: "public.profiles"
      orders: "public.orders"

    lists:
      all_users: 10
      active_users: 11
      premium_users: 12
```

### Mapowanie pól

```yaml
field_mapping:
  # Auth user fields
  email: email
  created_at: SIGNUP_DATE
  last_sign_in_at: LAST_LOGIN_DATE
  email_confirmed_at: EMAIL_VERIFIED_DATE

  # Profile table fields
  first_name: FIRSTNAME
  last_name: LASTNAME
  phone: SMS
  plan: SUBSCRIPTION_PLAN
  company: COMPANY
  avatar_url: AVATAR_URL
```

## Endpointy API

| Endpoint | Metoda | Opis |
| --- | --- | --- |
| `{url}/auth/v1/admin/users` | GET | Lista użytkowników auth |
| `{url}/auth/v1/admin/users/{id}` | GET | Pobierz użytkownika auth |
| `{url}/rest/v1/{table}` | GET | Zapytanie do tabeli przez PostgREST |
| `{url}/rest/v1/{table}` | POST | Wstaw wiersze do tabeli |
| `{url}/rest/v1/{table}?id=eq.{id}` | PATCH | Aktualizuj wiersz |
| `{url}/rest/v1/rpc/{function}` | POST | Wywołaj funkcję bazy danych |
| `{url}/realtime/v1/websocket` | WS | Kanały Realtime |

## Przykłady kodu

### Inicjalizacja konektora

```javascript
import { TajoClient } from '@tajo/sdk';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
  brevoApiKey: process.env.BREVO_API_KEY
});

await tajo.connectors.connect('supabase', {
  url: process.env.SUPABASE_URL,
  serviceKey: process.env.SUPABASE_SERVICE_KEY
});
```

### Synchronizuj użytkowników Auth z Brevo

```javascript
import { createClient } from '@supabase/supabase-js';

const supabase = createClient(
  process.env.SUPABASE_URL,
  process.env.SUPABASE_SERVICE_KEY
);

// Paginate through all auth users
let page = 1;
const perPage = 1000;

while (true) {
  const { data: { users }, error } = await supabase.auth.admin.listUsers({
    page,
    perPage
  });

  if (error || !users.length) break;

  for (const user of users) {
    await tajo.contacts.sync({
      email: user.email,
      attributes: {
        SIGNUP_DATE: user.created_at,
        LAST_LOGIN_DATE: user.last_sign_in_at,
        EMAIL_VERIFIED_DATE: user.email_confirmed_at
      },
      listIds: [10]
    });
  }

  if (users.length < perPage) break;
  page++;
}
```

### Subskrybuj zmiany w czasie rzeczywistym

```javascript
// Listen for new user signups via Supabase Realtime
const channel = supabase
  .channel('auth-changes')
  .on(
    'postgres_changes',
    {
      event: 'INSERT',
      schema: 'auth',
      table: 'users'
    },
    async (payload) => {
      const newUser = payload.new;

      await tajo.contacts.sync({
        email: newUser.email,
        attributes: {
          SIGNUP_DATE: newUser.created_at
        },
        listIds: [10]
      });
    }
  )
  .subscribe();
```

### Używaj webhooków bazodanowych

```javascript
// Supabase Database Webhooks forward row events to your endpoint
app.post('/webhooks/supabase', async (req, res) => {
  const { type, table, record, old_record } = req.body;

  if (table === 'profiles' && type === 'UPDATE') {
    await tajo.contacts.update(record.email, {
      attributes: {
        FIRSTNAME: record.first_name,
        LASTNAME: record.last_name,
        SUBSCRIPTION_PLAN: record.plan
      }
    });
  }

  res.status(200).send('OK');
});
```

## Limity API

| Kategoria | Limit | Uwagi |
| --- | --- | --- |
| Admin Auth API | 30 żądań/min | Listowanie i zarządzanie użytkownikami |
| PostgREST REST API | Zależy od planu | Bazuje na planie Supabase |
| Kanały Realtime | 200 jednoczesnych | Na projekt (plan Pro) |
| Rozmiar odpowiedzi | 1 000 wierszy domyślnie | Użyj `Range` dla paginacji |

Paginacja PostgREST

Używaj nagłówka `Range` lub parametrów `limit`/`offset` dla paginacji dużych zestawów wyników. Domyślnie PostgREST zwraca maksymalnie 1 000 wierszy.

## Rozwiązywanie problemów

| Problem | Przyczyna | Rozwiązanie |
| --- | --- | --- |
| 401 Unauthorized | Nieprawidłowy klucz usługi | Zweryfikuj `service_role` key w ustawieniach projektu |
| Puste wyniki | RLS blokuje dostęp | Używaj klucza `service_role`, nie `anon` |
| Brakujące profile | Tabela profilu nie istnieje | Utwórz tabelę profili ze wyzwalaczem auth |
| Realtime nie łączy się | Realtime nie włączony | Włącz Realtime dla swojej tabeli w Supabase |
| Opóźnione zdarzenia | Duże obciążenie kolejki | Sprawdź logi Supabase pod kątem opóźnień webhooków |

### Tryb debug

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

## Najlepsze praktyki

1. **Twórz tabele profili** - Przechowuj dodatkowe dane użytkownika w tabeli `public.profiles` połączonej z `auth.users`
2. **Używaj wyzwalaczy bazy danych** - Automatycznie wypełniaj profile przy rejestracji użytkownika
3. **Synchronizacja przyrostowa** - Używaj kolumn `updated_at` do synchronizowania tylko zmienionych rekordów
4. **Subskrybuj zmiany w czasie rzeczywistym** - Używaj Realtime dla natychmiastowych aktualizacji zamiast odpytywania
5. **Obsługuj usunięcia** - Śledź zdarzenia `soft delete` i aktualizuj statusy kontaktów Brevo
6. **Waliduj e-maile** - Synchronizuj tylko użytkowników z potwierdzonymi adresami e-mail

## Bezpieczeństwo

- **Klucz API usługi** - Poświadczenia serwerowe z pełnym dostępem do bazy danych
- **JWT** - Uwierzytelnianie użytkownika po stronie klienta z wbudowaną obsługą RBAC
- **Row Level Security** - Wymuszaj polityki dostępu do danych na poziomie bazy danych
- **Tylko HTTPS** - Wszystkie endpointy wymagają szyfrowania TLS
- **Izolacja projektu** - Każdy projekt Supabase ma odizolowane zasoby i credentials

## Powiązane zasoby

- [Konektor Auth0](https://tajo.io/pl/docs/connectors/custom/auth0)
- [Konektor Segment](https://tajo.io/pl/docs/connectors/custom/segment)
- [Skill synchronizacji klientów](https://tajo.io/pl/docs/skills/data-sync/customer-sync)
- [Dokumentacja Supabase API](https://supabase.com/docs/reference/javascript/introduction)
