33800 Docs

← Retour

Proposition : Connectors Hub - Phase 1 (Refacto Base)

Date : 24/01/2026 10:45 Status : IMPLEMENTEE Projet : connectors-api Objectif : Transformer connectors-api en hub centralisé


Actions Prévues

1. Créer schema Supabase

-- Schema dédié
CREATE SCHEMA IF NOT EXISTS connectors;

-- Table config des connecteurs
CREATE TABLE connectors.config (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name TEXT NOT NULL UNIQUE,
  display_name TEXT,
  base_url TEXT NOT NULL,
  auth_type TEXT NOT NULL,  -- oauth2, api_key, bearer, basic
  auth_config JSONB DEFAULT '{}',
  swagger_url TEXT,
  swagger_spec JSONB,
  icon_url TEXT,
  description TEXT,
  is_builtin BOOLEAN DEFAULT false,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Table tokens/credentials
CREATE TABLE connectors.tokens (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  connector_id UUID REFERENCES connectors.config(id) ON DELETE CASCADE,
  user_id UUID,
  access_token TEXT,
  refresh_token TEXT,
  api_key TEXT,
  expires_at TIMESTAMPTZ,
  scopes TEXT[],
  token_metadata JSONB DEFAULT '{}',
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW(),
  UNIQUE(connector_id, user_id)
);

-- Insérer LinkedIn comme connecteur builtin
INSERT INTO connectors.config (name, display_name, base_url, auth_type, auth_config, is_builtin)
VALUES (
  'linkedin',
  'LinkedIn',
  'https://api.linkedin.com',
  'oauth2',
  '{
    "auth_url": "https://www.linkedin.com/oauth/v2/authorization",
    "token_url": "https://www.linkedin.com/oauth/v2/accessToken",
    "scopes": ["openid", "profile", "email", "w_member_social"]
  }',
  true
);

2. Refacto connectors-api

Structure cible :

src/
├── index.ts              # Routes principales
├── db/
│   └── supabase.ts       # Client Supabase
├── models/
│   ├── connector.ts      # Interface Connector
│   └── token.ts          # Interface Token
├── services/
│   ├── registry.ts       # CRUD connecteurs
│   ├── auth.ts           # Gestion OAuth/tokens
│   └── fetch.ts          # Proxy fetch
├── connectors/
│   ├── base.ts           # Classe abstraite
│   ├── linkedin.ts       # LinkedIn (legacy migré)
│   ├── github.ts         # GitHub
│   └── generic.ts        # REST générique
└── utils/
    └── auth-injector.ts  # Injection headers auth

Nouveaux endpoints :

GET  /api/connectors              → Liste tous
GET  /api/connectors/:id          → Détails + status auth
POST /api/connectors/:id/auth     → Initier OAuth ou set API key
GET  /api/connectors/:id/callback → Callback OAuth
DEL  /api/connectors/:id/auth     → Révoquer
POST /api/fetch                   → Proxy avec auth auto

3. Migrer LinkedIn


Fichiers Modifiés

Fichier Action
Supabase CREATE SCHEMA + tables
src/index.ts Nouveaux endpoints
src/connectors/linkedin.ts Adapter au nouveau système
src/db/supabase.ts Nouveau
src/services/*.ts Nouveaux

Validation


Risques