File size: 4,267 Bytes
a4d9764
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0f2b5e7
 
 
 
 
 
 
 
 
 
 
a4d9764
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fb84cc7
 
 
 
 
 
 
 
 
a4d9764
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fb84cc7
 
 
 
 
 
 
 
 
a4d9764
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
"""
🔧 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"