Spaces:
Running
Running
""" | |
🔧 Configuration et utilitaires pour les outils Figma MCP | |
""" | |
import requests | |
import logging | |
from typing import Dict, Any | |
# Configuration du logging | |
logger = logging.getLogger(__name__) | |
# Configuration Figma API | |
FIGMA_API_BASE = "https://api.figma.com/v1" | |
# Variables globales pour stocker la configuration | |
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 | |
# Test de connexion | |
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 | |
# Test d'accès au fichier | |
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" |