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