| """ |
| 🔧 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" |