|
""" |
|
🔧 Configuration et utilitaires pour les outils Figma MCP |
|
""" |
|
import requests |
|
import logging |
|
from typing import Dict, Any |
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
FIGMA_API_BASE = "https://api.figma.com/v1" |
|
|
|
|
|
figma_config = { |
|
"token": None, |
|
"file_id": None, |
|
"team_id": None |
|
} |
|
|
|
def make_figma_request(endpoint: str, method: str = "GET", data: Dict = None) -> Dict[str, Any]: |
|
""" |
|
Effectue une requête à l'API Figma. |
|
|
|
Args: |
|
endpoint (str): Point de terminaison de l'API Figma (sans l'URL de base) |
|
method (str): Méthode HTTP à utiliser (défaut: GET) |
|
data (Dict): Données à envoyer avec la requête (optionnel) |
|
|
|
Returns: |
|
Dict[str, Any]: Réponse de l'API ou dictionnaire d'erreur |
|
""" |
|
if not figma_config["token"]: |
|
return {"error": "Token Figma non configuré"} |
|
|
|
headers = { |
|
"X-Figma-Token": figma_config["token"], |
|
"Content-Type": "application/json" |
|
} |
|
|
|
url = f"{FIGMA_API_BASE}/{endpoint}" |
|
|
|
try: |
|
if method == "GET": |
|
response = requests.get(url, headers=headers, timeout=30) |
|
elif method == "POST": |
|
response = requests.post(url, headers=headers, json=data, timeout=30) |
|
elif method == "PUT": |
|
response = requests.put(url, headers=headers, json=data, timeout=30) |
|
elif method == "DELETE": |
|
response = requests.delete(url, headers=headers, timeout=30) |
|
else: |
|
return {"error": f"Méthode HTTP non supportée : {method}"} |
|
|
|
if response.status_code in [200, 201]: |
|
return response.json() |
|
else: |
|
return {"error": f"Erreur API {response.status_code}: {response.text}"} |
|
|
|
except Exception as e: |
|
return {"error": f"Erreur de requête : {str(e)}"} |
|
|
|
def configure_figma_token(token: str) -> str: |
|
""" |
|
Configure le token d'accès Figma pour l'API REST. |
|
|
|
Args: |
|
token (str): Token d'accès Figma (doit commencer par 'figd_' ou 'figc_') |
|
|
|
Returns: |
|
str: Message de confirmation ou d'erreur |
|
""" |
|
global figma_config |
|
|
|
if not token or not token.startswith(('figd_', 'figc_')): |
|
return "❌ Token invalide. Le token doit commencer par 'figd_' ou 'figc_'" |
|
|
|
figma_config["token"] = token |
|
|
|
|
|
try: |
|
headers = {"X-Figma-Token": token} |
|
response = requests.get(f"{FIGMA_API_BASE}/me", headers=headers, timeout=10) |
|
|
|
if response.status_code == 200: |
|
user_data = response.json() |
|
username = user_data.get("handle", "Utilisateur inconnu") |
|
return f"✅ Token configuré avec succès ! Connecté en tant que : {username}" |
|
else: |
|
return f"❌ Erreur lors de la vérification du token : {response.status_code}" |
|
|
|
except Exception as e: |
|
return f"❌ Erreur de connexion à l'API Figma : {str(e)}" |
|
|
|
def configure_figma_file_id(file_id: str) -> str: |
|
""" |
|
Configure l'ID du fichier Figma à utiliser pour les opérations. |
|
|
|
Args: |
|
file_id (str): ID du fichier Figma (extrait de l'URL du fichier) |
|
|
|
Returns: |
|
str: Message de confirmation ou d'erreur |
|
""" |
|
global figma_config |
|
|
|
if not file_id: |
|
return "❌ L'ID du fichier est requis" |
|
|
|
figma_config["file_id"] = file_id |
|
|
|
|
|
if figma_config["token"]: |
|
try: |
|
headers = {"X-Figma-Token": figma_config["token"]} |
|
response = requests.get(f"{FIGMA_API_BASE}/files/{file_id}", headers=headers, timeout=10) |
|
|
|
if response.status_code == 200: |
|
file_data = response.json() |
|
file_name = file_data.get("name", "Fichier inconnu") |
|
return f"✅ Fichier configuré avec succès : {file_name}" |
|
else: |
|
return f"❌ Impossible d'accéder au fichier : {response.status_code}" |
|
|
|
except Exception as e: |
|
return f"❌ Erreur lors de l'accès au fichier : {str(e)}" |
|
else: |
|
return "⚠️ ID du fichier configuré, mais token manquant" |