@mp3wizard/figma-console-mcp 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +816 -0
- package/dist/apps/design-system-dashboard/scoring/accessibility.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/accessibility.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/accessibility.js +278 -0
- package/dist/apps/design-system-dashboard/scoring/accessibility.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/component-metadata.d.ts +29 -0
- package/dist/apps/design-system-dashboard/scoring/component-metadata.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/component-metadata.js +358 -0
- package/dist/apps/design-system-dashboard/scoring/component-metadata.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/consistency.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/consistency.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/consistency.js +342 -0
- package/dist/apps/design-system-dashboard/scoring/consistency.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/coverage.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/coverage.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/coverage.js +231 -0
- package/dist/apps/design-system-dashboard/scoring/coverage.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/engine.d.ts +27 -0
- package/dist/apps/design-system-dashboard/scoring/engine.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/engine.js +93 -0
- package/dist/apps/design-system-dashboard/scoring/engine.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/naming-semantics.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/naming-semantics.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/naming-semantics.js +309 -0
- package/dist/apps/design-system-dashboard/scoring/naming-semantics.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/token-architecture.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/token-architecture.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/token-architecture.js +350 -0
- package/dist/apps/design-system-dashboard/scoring/token-architecture.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/types.d.ts +89 -0
- package/dist/apps/design-system-dashboard/scoring/types.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/types.js +41 -0
- package/dist/apps/design-system-dashboard/scoring/types.js.map +1 -0
- package/dist/apps/design-system-dashboard/server.d.ts +24 -0
- package/dist/apps/design-system-dashboard/server.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/server.js +160 -0
- package/dist/apps/design-system-dashboard/server.js.map +1 -0
- package/dist/apps/token-browser/server.d.ts +26 -0
- package/dist/apps/token-browser/server.d.ts.map +1 -0
- package/dist/apps/token-browser/server.js +137 -0
- package/dist/apps/token-browser/server.js.map +1 -0
- package/dist/browser/base.d.ts +58 -0
- package/dist/browser/base.d.ts.map +1 -0
- package/dist/browser/base.js +6 -0
- package/dist/browser/base.js.map +1 -0
- package/dist/browser/local.d.ts +87 -0
- package/dist/browser/local.d.ts.map +1 -0
- package/dist/browser/local.js +318 -0
- package/dist/browser/local.js.map +1 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/accessibility.js +277 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/component-metadata.js +357 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/consistency.js +341 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/coverage.js +230 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/engine.js +92 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/naming-semantics.js +308 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/token-architecture.js +349 -0
- package/dist/cloudflare/apps/design-system-dashboard/scoring/types.js +40 -0
- package/dist/cloudflare/apps/design-system-dashboard/server.js +159 -0
- package/dist/cloudflare/apps/token-browser/server.js +136 -0
- package/dist/cloudflare/browser/base.js +5 -0
- package/dist/cloudflare/browser/cloudflare.js +156 -0
- package/dist/cloudflare/browser-manager.js +157 -0
- package/dist/cloudflare/core/cloud-websocket-connector.js +267 -0
- package/dist/cloudflare/core/cloud-websocket-relay.js +199 -0
- package/dist/cloudflare/core/comment-tools.js +292 -0
- package/dist/cloudflare/core/config.js +161 -0
- package/dist/cloudflare/core/console-monitor.js +427 -0
- package/dist/cloudflare/core/design-code-tools.js +2504 -0
- package/dist/cloudflare/core/design-system-manifest.js +260 -0
- package/dist/cloudflare/core/design-system-tools.js +863 -0
- package/dist/cloudflare/core/enrichment/enrichment-service.js +272 -0
- package/dist/cloudflare/core/enrichment/index.js +7 -0
- package/dist/cloudflare/core/enrichment/relationship-mapper.js +351 -0
- package/dist/cloudflare/core/enrichment/style-resolver.js +326 -0
- package/dist/cloudflare/core/figma-api.js +409 -0
- package/dist/cloudflare/core/figma-connector.js +7 -0
- package/dist/cloudflare/core/figma-desktop-connector.js +1184 -0
- package/dist/cloudflare/core/figma-reconstruction-spec.js +402 -0
- package/dist/cloudflare/core/figma-style-extractor.js +311 -0
- package/dist/cloudflare/core/figma-tools.js +2947 -0
- package/dist/cloudflare/core/logger.js +53 -0
- package/dist/cloudflare/core/port-discovery.js +282 -0
- package/dist/cloudflare/core/snippet-injector.js +96 -0
- package/dist/cloudflare/core/types/design-code.js +4 -0
- package/dist/cloudflare/core/types/enriched.js +5 -0
- package/dist/cloudflare/core/types/index.js +4 -0
- package/dist/cloudflare/core/websocket-connector.js +256 -0
- package/dist/cloudflare/core/websocket-server.js +646 -0
- package/dist/cloudflare/core/write-tools.js +2091 -0
- package/dist/cloudflare/index.js +2899 -0
- package/dist/cloudflare/test-browser.js +88 -0
- package/dist/core/comment-tools.d.ts +11 -0
- package/dist/core/comment-tools.d.ts.map +1 -0
- package/dist/core/comment-tools.js +293 -0
- package/dist/core/comment-tools.js.map +1 -0
- package/dist/core/config.d.ts +17 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +162 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/console-monitor.d.ts +82 -0
- package/dist/core/console-monitor.d.ts.map +1 -0
- package/dist/core/console-monitor.js +428 -0
- package/dist/core/console-monitor.js.map +1 -0
- package/dist/core/design-code-tools.d.ts +127 -0
- package/dist/core/design-code-tools.d.ts.map +1 -0
- package/dist/core/design-code-tools.js +2505 -0
- package/dist/core/design-code-tools.js.map +1 -0
- package/dist/core/design-system-manifest.d.ts +272 -0
- package/dist/core/design-system-manifest.d.ts.map +1 -0
- package/dist/core/design-system-manifest.js +261 -0
- package/dist/core/design-system-manifest.js.map +1 -0
- package/dist/core/design-system-tools.d.ts +17 -0
- package/dist/core/design-system-tools.d.ts.map +1 -0
- package/dist/core/design-system-tools.js +864 -0
- package/dist/core/design-system-tools.js.map +1 -0
- package/dist/core/enrichment/enrichment-service.d.ts +52 -0
- package/dist/core/enrichment/enrichment-service.d.ts.map +1 -0
- package/dist/core/enrichment/enrichment-service.js +273 -0
- package/dist/core/enrichment/enrichment-service.js.map +1 -0
- package/dist/core/enrichment/index.d.ts +8 -0
- package/dist/core/enrichment/index.d.ts.map +1 -0
- package/dist/core/enrichment/index.js +8 -0
- package/dist/core/enrichment/index.js.map +1 -0
- package/dist/core/enrichment/relationship-mapper.d.ts +106 -0
- package/dist/core/enrichment/relationship-mapper.d.ts.map +1 -0
- package/dist/core/enrichment/relationship-mapper.js +352 -0
- package/dist/core/enrichment/relationship-mapper.js.map +1 -0
- package/dist/core/enrichment/style-resolver.d.ts +80 -0
- package/dist/core/enrichment/style-resolver.d.ts.map +1 -0
- package/dist/core/enrichment/style-resolver.js +327 -0
- package/dist/core/enrichment/style-resolver.js.map +1 -0
- package/dist/core/figma-api.d.ts +201 -0
- package/dist/core/figma-api.d.ts.map +1 -0
- package/dist/core/figma-api.js +410 -0
- package/dist/core/figma-api.js.map +1 -0
- package/dist/core/figma-connector.d.ts +48 -0
- package/dist/core/figma-connector.d.ts.map +1 -0
- package/dist/core/figma-connector.js +8 -0
- package/dist/core/figma-connector.js.map +1 -0
- package/dist/core/figma-desktop-connector.d.ts +265 -0
- package/dist/core/figma-desktop-connector.d.ts.map +1 -0
- package/dist/core/figma-desktop-connector.js +1184 -0
- package/dist/core/figma-desktop-connector.js.map +1 -0
- package/dist/core/figma-reconstruction-spec.d.ts +166 -0
- package/dist/core/figma-reconstruction-spec.d.ts.map +1 -0
- package/dist/core/figma-reconstruction-spec.js +403 -0
- package/dist/core/figma-reconstruction-spec.js.map +1 -0
- package/dist/core/figma-style-extractor.d.ts +76 -0
- package/dist/core/figma-style-extractor.d.ts.map +1 -0
- package/dist/core/figma-style-extractor.js +312 -0
- package/dist/core/figma-style-extractor.js.map +1 -0
- package/dist/core/figma-tools.d.ts +23 -0
- package/dist/core/figma-tools.d.ts.map +1 -0
- package/dist/core/figma-tools.js +2948 -0
- package/dist/core/figma-tools.js.map +1 -0
- package/dist/core/logger.d.ts +22 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +54 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/port-discovery.d.ts +110 -0
- package/dist/core/port-discovery.d.ts.map +1 -0
- package/dist/core/port-discovery.js +283 -0
- package/dist/core/port-discovery.js.map +1 -0
- package/dist/core/snippet-injector.d.ts +24 -0
- package/dist/core/snippet-injector.d.ts.map +1 -0
- package/dist/core/snippet-injector.js +97 -0
- package/dist/core/snippet-injector.js.map +1 -0
- package/dist/core/types/design-code.d.ts +262 -0
- package/dist/core/types/design-code.d.ts.map +1 -0
- package/dist/core/types/design-code.js +5 -0
- package/dist/core/types/design-code.js.map +1 -0
- package/dist/core/types/enriched.d.ts +213 -0
- package/dist/core/types/enriched.d.ts.map +1 -0
- package/dist/core/types/enriched.js +6 -0
- package/dist/core/types/enriched.js.map +1 -0
- package/dist/core/types/index.d.ts +112 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/index.js +5 -0
- package/dist/core/types/index.js.map +1 -0
- package/dist/core/websocket-connector.d.ts +55 -0
- package/dist/core/websocket-connector.d.ts.map +1 -0
- package/dist/core/websocket-connector.js +257 -0
- package/dist/core/websocket-connector.js.map +1 -0
- package/dist/core/websocket-server.d.ts +191 -0
- package/dist/core/websocket-server.d.ts.map +1 -0
- package/dist/core/websocket-server.js +647 -0
- package/dist/core/websocket-server.js.map +1 -0
- package/dist/core/write-tools.d.ts +7 -0
- package/dist/core/write-tools.d.ts.map +1 -0
- package/dist/core/write-tools.js +2092 -0
- package/dist/core/write-tools.js.map +1 -0
- package/dist/local.d.ts +84 -0
- package/dist/local.d.ts.map +1 -0
- package/dist/local.js +5039 -0
- package/dist/local.js.map +1 -0
- package/figma-desktop-bridge/README.md +313 -0
- package/figma-desktop-bridge/code.js +2818 -0
- package/figma-desktop-bridge/manifest.json +67 -0
- package/figma-desktop-bridge/ui.html +1236 -0
- package/package.json +87 -0
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Figma REST API Client
|
|
3
|
+
* Handles HTTP calls to Figma's REST API for file data, variables, components, and styles
|
|
4
|
+
*/
|
|
5
|
+
import { createChildLogger } from './logger.js';
|
|
6
|
+
const logger = createChildLogger({ component: 'figma-api' });
|
|
7
|
+
const FIGMA_API_BASE = 'https://api.figma.com/v1';
|
|
8
|
+
/**
|
|
9
|
+
* Extract file key from Figma URL
|
|
10
|
+
* @example https://www.figma.com/design/abc123/My-File -> abc123
|
|
11
|
+
*/
|
|
12
|
+
export function extractFileKey(url) {
|
|
13
|
+
try {
|
|
14
|
+
const urlObj = new URL(url);
|
|
15
|
+
// Match patterns like /design/FILE_KEY or /file/FILE_KEY
|
|
16
|
+
const match = urlObj.pathname.match(/\/(design|file)\/([a-zA-Z0-9]+)/);
|
|
17
|
+
return match ? match[2] : null;
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
logger.error({ error, url }, 'Failed to extract file key from URL');
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Extract comprehensive URL info including branch and node IDs
|
|
26
|
+
* Supports both URL formats:
|
|
27
|
+
* - Path-based: /design/{fileKey}/branch/{branchKey}/{fileName}
|
|
28
|
+
* - Query-based: /design/{fileKey}/{fileName}?branch-id={branchId}
|
|
29
|
+
*
|
|
30
|
+
* @example https://www.figma.com/design/abc123/branch/xyz789/My-File?node-id=1-2
|
|
31
|
+
* -> { fileKey: 'abc123', branchId: 'xyz789', nodeId: '1:2' }
|
|
32
|
+
* @example https://www.figma.com/design/abc123/My-File?branch-id=xyz789&node-id=1-2
|
|
33
|
+
* -> { fileKey: 'abc123', branchId: 'xyz789', nodeId: '1:2' }
|
|
34
|
+
*/
|
|
35
|
+
export function extractFigmaUrlInfo(url) {
|
|
36
|
+
try {
|
|
37
|
+
const urlObj = new URL(url);
|
|
38
|
+
// First try: Path-based branch format /design/{fileKey}/branch/{branchKey}/{fileName}
|
|
39
|
+
const branchPathMatch = urlObj.pathname.match(/\/(design|file)\/([a-zA-Z0-9]+)\/branch\/([a-zA-Z0-9]+)/);
|
|
40
|
+
if (branchPathMatch) {
|
|
41
|
+
const fileKey = branchPathMatch[2];
|
|
42
|
+
const branchId = branchPathMatch[3];
|
|
43
|
+
const nodeIdParam = urlObj.searchParams.get('node-id');
|
|
44
|
+
const nodeId = nodeIdParam ? nodeIdParam.replace(/-/g, ':') : undefined;
|
|
45
|
+
return { fileKey, branchId, nodeId };
|
|
46
|
+
}
|
|
47
|
+
// Second try: Standard format /design/{fileKey}/{fileName} with optional ?branch-id=
|
|
48
|
+
const standardMatch = urlObj.pathname.match(/\/(design|file)\/([a-zA-Z0-9]+)/);
|
|
49
|
+
if (!standardMatch)
|
|
50
|
+
return null;
|
|
51
|
+
const fileKey = standardMatch[2];
|
|
52
|
+
const branchId = urlObj.searchParams.get('branch-id') || undefined;
|
|
53
|
+
const nodeIdParam = urlObj.searchParams.get('node-id');
|
|
54
|
+
// Convert node-id from URL format (1-2) to Figma format (1:2)
|
|
55
|
+
const nodeId = nodeIdParam ? nodeIdParam.replace(/-/g, ':') : undefined;
|
|
56
|
+
return { fileKey, branchId, nodeId };
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
logger.error({ error, url }, 'Failed to extract Figma URL info');
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Wrap a promise with a timeout
|
|
65
|
+
* @param promise The promise to wrap
|
|
66
|
+
* @param ms Timeout in milliseconds
|
|
67
|
+
* @param label Label for error message
|
|
68
|
+
* @returns Promise that rejects if timeout exceeded
|
|
69
|
+
*/
|
|
70
|
+
export function withTimeout(promise, ms, label) {
|
|
71
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
72
|
+
const timeoutId = setTimeout(() => {
|
|
73
|
+
reject(new Error(`${label} timed out after ${ms}ms`));
|
|
74
|
+
}, ms);
|
|
75
|
+
// Ensure timeout is cleared if promise resolves first
|
|
76
|
+
promise.finally(() => clearTimeout(timeoutId));
|
|
77
|
+
});
|
|
78
|
+
return Promise.race([promise, timeoutPromise]);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Figma API Client
|
|
82
|
+
* Makes authenticated requests to Figma REST API
|
|
83
|
+
*/
|
|
84
|
+
export class FigmaAPI {
|
|
85
|
+
constructor(config) {
|
|
86
|
+
this.accessToken = config.accessToken;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Make authenticated request to Figma API
|
|
90
|
+
*/
|
|
91
|
+
async request(endpoint, options = {}) {
|
|
92
|
+
const url = `${FIGMA_API_BASE}${endpoint}`;
|
|
93
|
+
// Detect token type and use appropriate authentication header
|
|
94
|
+
// OAuth tokens start with 'figu_' and require Authorization: Bearer header
|
|
95
|
+
// Personal Access Tokens use X-Figma-Token header
|
|
96
|
+
const isOAuthToken = this.accessToken.startsWith('figu_');
|
|
97
|
+
logger.debug({
|
|
98
|
+
url,
|
|
99
|
+
hasToken: !!this.accessToken,
|
|
100
|
+
isOAuthToken,
|
|
101
|
+
authMethod: isOAuthToken ? 'Bearer' : 'X-Figma-Token'
|
|
102
|
+
}, 'Making Figma API request');
|
|
103
|
+
const headers = {
|
|
104
|
+
'Content-Type': 'application/json',
|
|
105
|
+
...(options.headers || {}),
|
|
106
|
+
};
|
|
107
|
+
// Add authentication header based on token type
|
|
108
|
+
if (isOAuthToken) {
|
|
109
|
+
headers['Authorization'] = `Bearer ${this.accessToken}`;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
headers['X-Figma-Token'] = this.accessToken;
|
|
113
|
+
}
|
|
114
|
+
const response = await fetch(url, {
|
|
115
|
+
...options,
|
|
116
|
+
headers,
|
|
117
|
+
});
|
|
118
|
+
if (!response.ok) {
|
|
119
|
+
const errorText = await response.text();
|
|
120
|
+
logger.error({ status: response.status, statusText: response.statusText, body: errorText }, 'Figma API request failed');
|
|
121
|
+
throw new Error(`Figma API error (${response.status}): ${errorText}`);
|
|
122
|
+
}
|
|
123
|
+
const data = await response.json();
|
|
124
|
+
return data;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* GET /v1/files/:file_key
|
|
128
|
+
* Get full file data including document tree, components, and styles
|
|
129
|
+
*/
|
|
130
|
+
async getFile(fileKey, options) {
|
|
131
|
+
let endpoint = `/files/${fileKey}`;
|
|
132
|
+
const params = new URLSearchParams();
|
|
133
|
+
if (options?.version)
|
|
134
|
+
params.append('version', options.version);
|
|
135
|
+
if (options?.ids)
|
|
136
|
+
params.append('ids', options.ids.join(','));
|
|
137
|
+
if (options?.depth !== undefined)
|
|
138
|
+
params.append('depth', options.depth.toString());
|
|
139
|
+
if (options?.geometry)
|
|
140
|
+
params.append('geometry', options.geometry);
|
|
141
|
+
if (options?.plugin_data)
|
|
142
|
+
params.append('plugin_data', options.plugin_data);
|
|
143
|
+
if (options?.branch_data)
|
|
144
|
+
params.append('branch_data', 'true');
|
|
145
|
+
if (params.toString()) {
|
|
146
|
+
endpoint += `?${params.toString()}`;
|
|
147
|
+
}
|
|
148
|
+
return this.request(endpoint);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Resolve a branch key from a branch ID
|
|
152
|
+
* If branchId is provided, fetches branch data and returns the branch's unique key
|
|
153
|
+
* Otherwise returns the main file key unchanged
|
|
154
|
+
* @param fileKey The main file key from the URL
|
|
155
|
+
* @param branchId Optional branch ID from URL query param (branch-id)
|
|
156
|
+
* @returns The effective file key to use for API calls (branch key if on branch, otherwise fileKey)
|
|
157
|
+
*/
|
|
158
|
+
async getBranchKey(fileKey, branchId) {
|
|
159
|
+
if (!branchId) {
|
|
160
|
+
return fileKey;
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
logger.info({ fileKey, branchId }, 'Resolving branch key');
|
|
164
|
+
const fileData = await this.getFile(fileKey, { branch_data: true });
|
|
165
|
+
const branches = fileData.branches || [];
|
|
166
|
+
// Try to find branch by key (branchId might already be the key)
|
|
167
|
+
// or by matching other identifiers
|
|
168
|
+
const branch = branches.find((b) => b.key === branchId || b.name === branchId);
|
|
169
|
+
if (branch?.key) {
|
|
170
|
+
logger.info({ fileKey, branchId, branchKey: branch.key, branchName: branch.name }, 'Resolved branch key');
|
|
171
|
+
return branch.key;
|
|
172
|
+
}
|
|
173
|
+
// If branchId looks like a file key (alphanumeric), it might already be the branch key
|
|
174
|
+
// In this case, return it directly as it may be usable
|
|
175
|
+
if (/^[a-zA-Z0-9]+$/.test(branchId)) {
|
|
176
|
+
logger.info({ fileKey, branchId }, 'Branch ID appears to be a key, using directly');
|
|
177
|
+
return branchId;
|
|
178
|
+
}
|
|
179
|
+
logger.warn({ fileKey, branchId, availableBranches: branches.map((b) => ({ key: b.key, name: b.name })) }, 'Branch not found in file, using main file key');
|
|
180
|
+
return fileKey;
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
logger.error({ error, fileKey, branchId }, 'Failed to resolve branch key, using main file key');
|
|
184
|
+
return fileKey;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* GET /v1/files/:file_key/variables/local
|
|
189
|
+
* Get local variables (design tokens) from a file
|
|
190
|
+
*/
|
|
191
|
+
async getLocalVariables(fileKey) {
|
|
192
|
+
const response = await this.request(`/files/${fileKey}/variables/local`);
|
|
193
|
+
// Figma API returns {status, error, meta: {variableCollections, variables}}
|
|
194
|
+
// Extract meta to match expected format
|
|
195
|
+
return response.meta || response;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* GET /v1/files/:file_key/variables/published
|
|
199
|
+
* Get published variables from a file
|
|
200
|
+
*/
|
|
201
|
+
async getPublishedVariables(fileKey) {
|
|
202
|
+
const response = await this.request(`/files/${fileKey}/variables/published`);
|
|
203
|
+
// Figma API returns {status, error, meta: {variableCollections, variables}}
|
|
204
|
+
// Extract meta to match expected format
|
|
205
|
+
return response.meta || response;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* GET /v1/files/:file_key/nodes
|
|
209
|
+
* Get specific nodes by ID
|
|
210
|
+
*/
|
|
211
|
+
async getNodes(fileKey, nodeIds, options) {
|
|
212
|
+
let endpoint = `/files/${fileKey}/nodes`;
|
|
213
|
+
const params = new URLSearchParams();
|
|
214
|
+
params.append('ids', nodeIds.join(','));
|
|
215
|
+
if (options?.version)
|
|
216
|
+
params.append('version', options.version);
|
|
217
|
+
if (options?.depth !== undefined)
|
|
218
|
+
params.append('depth', options.depth.toString());
|
|
219
|
+
if (options?.geometry)
|
|
220
|
+
params.append('geometry', options.geometry);
|
|
221
|
+
if (options?.plugin_data)
|
|
222
|
+
params.append('plugin_data', options.plugin_data);
|
|
223
|
+
endpoint += `?${params.toString()}`;
|
|
224
|
+
return this.request(endpoint);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* GET /v1/files/:file_key/styles
|
|
228
|
+
* Get styles from a file
|
|
229
|
+
*/
|
|
230
|
+
async getStyles(fileKey) {
|
|
231
|
+
return this.request(`/files/${fileKey}/styles`);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* GET /v1/files/:file_key/components
|
|
235
|
+
* Get components from a file
|
|
236
|
+
*/
|
|
237
|
+
async getComponents(fileKey) {
|
|
238
|
+
return this.request(`/files/${fileKey}/components`);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* GET /v1/files/:file_key/component_sets
|
|
242
|
+
* Get component sets (variants) from a file
|
|
243
|
+
*/
|
|
244
|
+
async getComponentSets(fileKey) {
|
|
245
|
+
return this.request(`/files/${fileKey}/component_sets`);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* GET /v1/images/:file_key
|
|
249
|
+
* Renders images for specified nodes
|
|
250
|
+
* @param fileKey - The file key
|
|
251
|
+
* @param nodeIds - Node IDs to render (single string or array)
|
|
252
|
+
* @param options - Rendering options
|
|
253
|
+
* @returns Map of node IDs to image URLs (URLs expire after 30 days)
|
|
254
|
+
*/
|
|
255
|
+
async getImages(fileKey, nodeIds, options) {
|
|
256
|
+
const params = new URLSearchParams();
|
|
257
|
+
// Handle single or multiple node IDs
|
|
258
|
+
const ids = Array.isArray(nodeIds) ? nodeIds.join(',') : nodeIds;
|
|
259
|
+
params.append('ids', ids);
|
|
260
|
+
// Add optional parameters
|
|
261
|
+
if (options?.scale !== undefined)
|
|
262
|
+
params.append('scale', options.scale.toString());
|
|
263
|
+
if (options?.format)
|
|
264
|
+
params.append('format', options.format);
|
|
265
|
+
if (options?.svg_outline_text !== undefined)
|
|
266
|
+
params.append('svg_outline_text', options.svg_outline_text.toString());
|
|
267
|
+
if (options?.svg_include_id !== undefined)
|
|
268
|
+
params.append('svg_include_id', options.svg_include_id.toString());
|
|
269
|
+
if (options?.svg_include_node_id !== undefined)
|
|
270
|
+
params.append('svg_include_node_id', options.svg_include_node_id.toString());
|
|
271
|
+
if (options?.svg_simplify_stroke !== undefined)
|
|
272
|
+
params.append('svg_simplify_stroke', options.svg_simplify_stroke.toString());
|
|
273
|
+
if (options?.contents_only !== undefined)
|
|
274
|
+
params.append('contents_only', options.contents_only.toString());
|
|
275
|
+
const endpoint = `/images/${fileKey}?${params.toString()}`;
|
|
276
|
+
logger.info({ fileKey, ids, options }, 'Rendering images');
|
|
277
|
+
return this.request(endpoint);
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* GET /v1/files/:file_key/comments
|
|
281
|
+
* Get comments on a file
|
|
282
|
+
*/
|
|
283
|
+
async getComments(fileKey, options) {
|
|
284
|
+
const params = new URLSearchParams();
|
|
285
|
+
if (options?.as_md)
|
|
286
|
+
params.set('as_md', 'true');
|
|
287
|
+
const query = params.toString() ? `?${params.toString()}` : '';
|
|
288
|
+
return this.request(`/files/${fileKey}/comments${query}`);
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* POST /v1/files/:file_key/comments
|
|
292
|
+
* Post a comment on a file
|
|
293
|
+
*/
|
|
294
|
+
async postComment(fileKey, message, clientMeta, commentId) {
|
|
295
|
+
return this.request(`/files/${fileKey}/comments`, {
|
|
296
|
+
method: 'POST',
|
|
297
|
+
body: JSON.stringify({
|
|
298
|
+
message,
|
|
299
|
+
...(clientMeta && { client_meta: clientMeta }),
|
|
300
|
+
...(commentId && { comment_id: commentId }),
|
|
301
|
+
}),
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* DELETE /v1/files/:file_key/comments/:comment_id
|
|
306
|
+
* Delete a comment on a file
|
|
307
|
+
*/
|
|
308
|
+
async deleteComment(fileKey, commentId) {
|
|
309
|
+
return this.request(`/files/${fileKey}/comments/${commentId}`, {
|
|
310
|
+
method: 'DELETE',
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Helper: Get all design tokens (variables) with formatted output
|
|
315
|
+
* Both local and published can fail gracefully (e.g., 403 without Enterprise plan)
|
|
316
|
+
*/
|
|
317
|
+
async getAllVariables(fileKey) {
|
|
318
|
+
// Wrap both in catch handlers to prevent unhandled promise rejections
|
|
319
|
+
// which can crash the server when REST API returns 403
|
|
320
|
+
const [localResult, publishedResult] = await Promise.all([
|
|
321
|
+
this.getLocalVariables(fileKey).catch((err) => {
|
|
322
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
323
|
+
return { error: errorMsg, variables: {}, variableCollections: {} };
|
|
324
|
+
}),
|
|
325
|
+
this.getPublishedVariables(fileKey).catch((err) => {
|
|
326
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
327
|
+
return { error: errorMsg, variables: {} };
|
|
328
|
+
}),
|
|
329
|
+
]);
|
|
330
|
+
return {
|
|
331
|
+
local: 'error' in localResult ? { meta: { variables: {}, variableCollections: {} } } : localResult,
|
|
332
|
+
published: 'error' in publishedResult ? { variables: {} } : publishedResult,
|
|
333
|
+
...(('error' in localResult) && { localError: localResult.error }),
|
|
334
|
+
...(('error' in publishedResult) && { publishedError: publishedResult.error }),
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Helper: Get component metadata with properties
|
|
339
|
+
*/
|
|
340
|
+
async getComponentData(fileKey, nodeId) {
|
|
341
|
+
const response = await this.getNodes(fileKey, [nodeId], { depth: 2 });
|
|
342
|
+
return response.nodes?.[nodeId];
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Helper: Search for components by name
|
|
346
|
+
*/
|
|
347
|
+
async searchComponents(fileKey, searchTerm) {
|
|
348
|
+
const { meta } = await this.getComponents(fileKey);
|
|
349
|
+
const components = meta?.components || [];
|
|
350
|
+
return components.filter((comp) => comp.name?.toLowerCase().includes(searchTerm.toLowerCase()));
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Helper function to format variables for display
|
|
355
|
+
*/
|
|
356
|
+
export function formatVariables(variablesData) {
|
|
357
|
+
const collections = Object.entries(variablesData.variableCollections || {}).map(([id, collection]) => ({
|
|
358
|
+
id,
|
|
359
|
+
name: collection.name,
|
|
360
|
+
key: collection.key,
|
|
361
|
+
modes: collection.modes,
|
|
362
|
+
variableIds: collection.variableIds,
|
|
363
|
+
}));
|
|
364
|
+
const variables = Object.entries(variablesData.variables || {}).map(([id, variable]) => ({
|
|
365
|
+
id,
|
|
366
|
+
name: variable.name,
|
|
367
|
+
key: variable.key,
|
|
368
|
+
resolvedType: variable.resolvedType,
|
|
369
|
+
valuesByMode: variable.valuesByMode,
|
|
370
|
+
variableCollectionId: variable.variableCollectionId,
|
|
371
|
+
scopes: variable.scopes,
|
|
372
|
+
description: variable.description,
|
|
373
|
+
}));
|
|
374
|
+
const variablesByType = variables.reduce((acc, v) => {
|
|
375
|
+
acc[v.resolvedType] = (acc[v.resolvedType] || 0) + 1;
|
|
376
|
+
return acc;
|
|
377
|
+
}, {});
|
|
378
|
+
return {
|
|
379
|
+
collections,
|
|
380
|
+
variables,
|
|
381
|
+
summary: {
|
|
382
|
+
totalCollections: collections.length,
|
|
383
|
+
totalVariables: variables.length,
|
|
384
|
+
variablesByType,
|
|
385
|
+
},
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Helper function to format component data for display
|
|
390
|
+
*/
|
|
391
|
+
export function formatComponentData(componentNode) {
|
|
392
|
+
return {
|
|
393
|
+
id: componentNode.id,
|
|
394
|
+
name: componentNode.name,
|
|
395
|
+
type: componentNode.type,
|
|
396
|
+
description: componentNode.description,
|
|
397
|
+
descriptionMarkdown: componentNode.descriptionMarkdown,
|
|
398
|
+
properties: componentNode.componentPropertyDefinitions,
|
|
399
|
+
children: componentNode.children?.map((child) => ({
|
|
400
|
+
id: child.id,
|
|
401
|
+
name: child.name,
|
|
402
|
+
type: child.type,
|
|
403
|
+
})),
|
|
404
|
+
bounds: componentNode.absoluteBoundingBox,
|
|
405
|
+
fills: componentNode.fills,
|
|
406
|
+
strokes: componentNode.strokes,
|
|
407
|
+
effects: componentNode.effects,
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
//# sourceMappingURL=figma-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figma-api.js","sourceRoot":"","sources":["../../src/core/figma-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Figma Connector Interface
|
|
3
|
+
*
|
|
4
|
+
* Transport abstraction for the WebSocket Desktop Bridge plugin.
|
|
5
|
+
* Allows getDesktopConnector() to return the active WebSocket transport.
|
|
6
|
+
*/
|
|
7
|
+
export interface IFigmaConnector {
|
|
8
|
+
initialize(): Promise<void>;
|
|
9
|
+
getTransportType(): 'cdp' | 'websocket';
|
|
10
|
+
executeInPluginContext<T = any>(code: string): Promise<T>;
|
|
11
|
+
getVariablesFromPluginUI(fileKey?: string): Promise<any>;
|
|
12
|
+
getVariables(fileKey?: string): Promise<any>;
|
|
13
|
+
executeCodeViaUI(code: string, timeoutMs?: number): Promise<any>;
|
|
14
|
+
updateVariable(variableId: string, modeId: string, value: any): Promise<any>;
|
|
15
|
+
createVariable(name: string, collectionId: string, resolvedType: string, options?: any): Promise<any>;
|
|
16
|
+
deleteVariable(variableId: string): Promise<any>;
|
|
17
|
+
refreshVariables(): Promise<any>;
|
|
18
|
+
renameVariable(variableId: string, newName: string): Promise<any>;
|
|
19
|
+
setVariableDescription(variableId: string, description: string): Promise<any>;
|
|
20
|
+
addMode(collectionId: string, modeName: string): Promise<any>;
|
|
21
|
+
renameMode(collectionId: string, modeId: string, newName: string): Promise<any>;
|
|
22
|
+
createVariableCollection(name: string, options?: any): Promise<any>;
|
|
23
|
+
deleteVariableCollection(collectionId: string): Promise<any>;
|
|
24
|
+
getComponentFromPluginUI(nodeId: string): Promise<any>;
|
|
25
|
+
getLocalComponents(): Promise<any>;
|
|
26
|
+
setNodeDescription(nodeId: string, description: string, descriptionMarkdown?: string): Promise<any>;
|
|
27
|
+
addComponentProperty(nodeId: string, propertyName: string, type: string, defaultValue: any, options?: any): Promise<any>;
|
|
28
|
+
editComponentProperty(nodeId: string, propertyName: string, newValue: any): Promise<any>;
|
|
29
|
+
deleteComponentProperty(nodeId: string, propertyName: string): Promise<any>;
|
|
30
|
+
instantiateComponent(componentKey: string, options?: any): Promise<any>;
|
|
31
|
+
resizeNode(nodeId: string, width: number, height: number, withConstraints?: boolean): Promise<any>;
|
|
32
|
+
moveNode(nodeId: string, x: number, y: number): Promise<any>;
|
|
33
|
+
setNodeFills(nodeId: string, fills: any[]): Promise<any>;
|
|
34
|
+
setNodeStrokes(nodeId: string, strokes: any[], strokeWeight?: number): Promise<any>;
|
|
35
|
+
setNodeOpacity(nodeId: string, opacity: number): Promise<any>;
|
|
36
|
+
setNodeCornerRadius(nodeId: string, radius: number): Promise<any>;
|
|
37
|
+
cloneNode(nodeId: string): Promise<any>;
|
|
38
|
+
deleteNode(nodeId: string): Promise<any>;
|
|
39
|
+
renameNode(nodeId: string, newName: string): Promise<any>;
|
|
40
|
+
setTextContent(nodeId: string, characters: string, options?: any): Promise<any>;
|
|
41
|
+
createChildNode(parentId: string, nodeType: string, properties?: any): Promise<any>;
|
|
42
|
+
captureScreenshot(nodeId: string, options?: any): Promise<any>;
|
|
43
|
+
setInstanceProperties(nodeId: string, properties: any): Promise<any>;
|
|
44
|
+
setImageFill(nodeIds: string[], imageData: string, scaleMode?: string): Promise<any>;
|
|
45
|
+
lintDesign(nodeId?: string, rules?: string[], maxDepth?: number, maxFindings?: number): Promise<any>;
|
|
46
|
+
clearFrameCache(): void;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=figma-connector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figma-connector.d.ts","sourceRoot":"","sources":["../../src/core/figma-connector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figma-connector.js","sourceRoot":"","sources":["../../src/core/figma-connector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|