sigma / tools /config.py
Aktraiser
probleme init
0f2b5e7
"""
🔧 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"