Spaces:
Sleeping
Sleeping
| """ | |
| 🔧 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" |