@assemblyline-agents/figma 1.0.0 → 3.0.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 +1 -1
- package/README.md +1 -1
- package/dist/events.d.ts +3 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +157 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/package.json +3 -4
- package/skills/figma/SKILL.md +0 -8
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Official Assembly Line Figma connection plugin.
|
|
4
4
|
|
|
5
|
-
It connects agents to Figma, exposing design-file tools through Figma's MCP server. The package exports `defineFigmaConnection(options)` to declare the connection in an agent definition and an `assemblyLinePlugin` module so the Assembly Line CLI and compiler can discover the plugin's connection metadata.
|
|
5
|
+
It connects agents to Figma, exposing design-file tools through Figma's MCP server. The package exports `defineFigmaConnection(options)` to declare the connection in an agent definition and an `assemblyLinePlugin` module so the Assembly Line CLI and compiler can discover the plugin's connection metadata.
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
package/dist/events.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,4BAA4B,EAGlC,MAAM,2BAA2B,CAAC;AAYnC,eAAO,MAAM,WAAW,EAAE,4BAyGzB,CAAC"}
|
package/dist/events.js
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { ConnectionEventError, parseConnectionEventJson, providerJson, stringField } from "@assemblyline-agents/core";
|
|
3
|
+
const API = "https://api.figma.com/v2/webhooks";
|
|
4
|
+
export const figmaEvents = {
|
|
5
|
+
prepare(context) {
|
|
6
|
+
const key = desiredKey(context.callbackUrl, context.selectedEvents, context.resources);
|
|
7
|
+
if (stringField(context.state ?? {}, "desiredKey") === key)
|
|
8
|
+
return context.state;
|
|
9
|
+
const previous = registrations(context.state, "registrations");
|
|
10
|
+
const registrationsToCreate = [];
|
|
11
|
+
for (const resource of context.resources) {
|
|
12
|
+
const scope = figmaScope(resource);
|
|
13
|
+
for (const event of context.selectedEvents) {
|
|
14
|
+
registrationsToCreate.push({ ...scope, event, passcode: randomBytes(32).toString("base64url") });
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
desiredKey: key,
|
|
19
|
+
callbackUrl: context.callbackUrl,
|
|
20
|
+
registrations: registrationsToCreate,
|
|
21
|
+
previous: previous
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
async reconcile(context) {
|
|
25
|
+
const token = (await context.getToken()).token;
|
|
26
|
+
const registrationsToCreate = registrations(context.state, "registrations");
|
|
27
|
+
if (!registrationsToCreate.length) {
|
|
28
|
+
return {
|
|
29
|
+
status: "needs_setup",
|
|
30
|
+
...(context.state ? { state: context.state } : {}),
|
|
31
|
+
instructions: "Add at least one Figma event resource: { context: 'team' | 'project' | 'file', contextId: '...' }."
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const existing = registrationsToCreate.filter((registration) => registration.webhookId);
|
|
35
|
+
if (existing.length === registrationsToCreate.length && registrations(context.state, "previous").length === 0) {
|
|
36
|
+
return { status: "active", ...(context.state ? { state: context.state } : {}), detail: `${existing.length} Figma webhook${existing.length === 1 ? " is" : "s are"} active.` };
|
|
37
|
+
}
|
|
38
|
+
for (const prior of registrations(context.state, "previous")) {
|
|
39
|
+
if (!prior.webhookId)
|
|
40
|
+
continue;
|
|
41
|
+
await providerJson(context.fetch, `${API}/${encodeURIComponent(prior.webhookId)}`, {
|
|
42
|
+
method: "DELETE",
|
|
43
|
+
headers: auth(token)
|
|
44
|
+
}, [200, 204, 404]);
|
|
45
|
+
}
|
|
46
|
+
const active = [];
|
|
47
|
+
for (const registration of registrationsToCreate) {
|
|
48
|
+
const created = await providerJson(context.fetch, API, {
|
|
49
|
+
method: "POST",
|
|
50
|
+
headers: auth(token),
|
|
51
|
+
body: JSON.stringify({
|
|
52
|
+
event_type: registration.event,
|
|
53
|
+
context: registration.context,
|
|
54
|
+
context_id: registration.contextId,
|
|
55
|
+
endpoint: context.callbackUrl,
|
|
56
|
+
passcode: registration.passcode,
|
|
57
|
+
description: `Assembly Line ${context.connectionName}`
|
|
58
|
+
})
|
|
59
|
+
});
|
|
60
|
+
active.push({ ...registration, webhookId: identifier(created, "id") });
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
status: "active",
|
|
64
|
+
externalId: active.map((registration) => registration.webhookId).join(","),
|
|
65
|
+
state: {
|
|
66
|
+
desiredKey: stringField(context.state ?? {}, "desiredKey") ?? "",
|
|
67
|
+
callbackUrl: context.callbackUrl,
|
|
68
|
+
registrations: active,
|
|
69
|
+
previous: []
|
|
70
|
+
},
|
|
71
|
+
detail: `${active.length} Figma webhook${active.length === 1 ? " is" : "s are"} active.`
|
|
72
|
+
};
|
|
73
|
+
},
|
|
74
|
+
async remove(context) {
|
|
75
|
+
const token = (await context.getToken()).token;
|
|
76
|
+
for (const registration of registrations(context.state, "registrations")) {
|
|
77
|
+
if (!registration.webhookId)
|
|
78
|
+
continue;
|
|
79
|
+
await providerJson(context.fetch, `${API}/${encodeURIComponent(registration.webhookId)}`, {
|
|
80
|
+
method: "DELETE",
|
|
81
|
+
headers: auth(token)
|
|
82
|
+
}, [200, 204, 404]);
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
async check(context) {
|
|
86
|
+
const active = registrations(context.state, "registrations").filter((registration) => registration.webhookId);
|
|
87
|
+
if (!active.length)
|
|
88
|
+
return { status: "needs_setup", detail: "No Figma webhooks are configured." };
|
|
89
|
+
const token = (await context.getToken()).token;
|
|
90
|
+
for (const registration of active) {
|
|
91
|
+
const value = await providerJson(context.fetch, `${API}/${encodeURIComponent(registration.webhookId)}`, { headers: auth(token) }, [200, 404]);
|
|
92
|
+
if (!value.id)
|
|
93
|
+
return { status: "degraded", detail: `Figma webhook ${registration.webhookId} no longer exists.` };
|
|
94
|
+
if (value.status && value.status !== "ACTIVE")
|
|
95
|
+
return { status: "degraded", detail: `Figma webhook ${registration.webhookId} is ${String(value.status)}.` };
|
|
96
|
+
}
|
|
97
|
+
return { status: "active", detail: `${active.length} Figma webhook${active.length === 1 ? " is" : "s are"} active.` };
|
|
98
|
+
},
|
|
99
|
+
ingress(request, context) {
|
|
100
|
+
const payload = parseConnectionEventJson(request.body);
|
|
101
|
+
const passcode = stringField(payload, "passcode");
|
|
102
|
+
const registration = registrations(context.state, "registrations").find((candidate) => candidate.passcode === passcode);
|
|
103
|
+
if (!registration)
|
|
104
|
+
throw new ConnectionEventError("Figma webhook passcode is invalid.", 401);
|
|
105
|
+
const event = stringField(payload, "event_type");
|
|
106
|
+
if (!event)
|
|
107
|
+
throw new ConnectionEventError("Figma webhook omitted event_type.");
|
|
108
|
+
if (event === "PING")
|
|
109
|
+
return { events: [], response: { status: 200, body: { ok: true } }, audit: { event } };
|
|
110
|
+
const timestamp = stringField(payload, "timestamp");
|
|
111
|
+
const eventId = [identifier(payload, "webhook_id"), event, stringField(payload, "file_key") ?? "", timestamp ?? ""].join(":");
|
|
112
|
+
return {
|
|
113
|
+
events: [{ event, eventId, payload: payload, ...(timestamp ? { occurredAt: timestamp } : {}) }],
|
|
114
|
+
response: { status: 200, body: { ok: true } },
|
|
115
|
+
audit: { event }
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
function auth(token) {
|
|
120
|
+
return { authorization: `Bearer ${token}`, "content-type": "application/json" };
|
|
121
|
+
}
|
|
122
|
+
function figmaScope(resource) {
|
|
123
|
+
const context = stringField(resource, "context");
|
|
124
|
+
const contextId = stringField(resource, "contextId", "context_id");
|
|
125
|
+
if (!context || !["team", "project", "file"].includes(context) || !contextId) {
|
|
126
|
+
throw new Error("Figma event resources require context team, project, or file and contextId.");
|
|
127
|
+
}
|
|
128
|
+
return { context, contextId };
|
|
129
|
+
}
|
|
130
|
+
function registrations(state, key) {
|
|
131
|
+
const value = state?.[key];
|
|
132
|
+
if (!Array.isArray(value))
|
|
133
|
+
return [];
|
|
134
|
+
return value.flatMap((item) => {
|
|
135
|
+
if (!item || typeof item !== "object" || Array.isArray(item))
|
|
136
|
+
return [];
|
|
137
|
+
const record = item;
|
|
138
|
+
const event = stringField(record, "event");
|
|
139
|
+
const context = stringField(record, "context");
|
|
140
|
+
const contextId = stringField(record, "contextId");
|
|
141
|
+
const passcode = stringField(record, "passcode");
|
|
142
|
+
if (!event || !context || !contextId || !passcode)
|
|
143
|
+
return [];
|
|
144
|
+
const webhookId = stringField(record, "webhookId");
|
|
145
|
+
return [{ event, context, contextId, passcode, ...(webhookId ? { webhookId } : {}) }];
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
function desiredKey(callbackUrl, events, resources) {
|
|
149
|
+
return JSON.stringify([callbackUrl, [...events].sort(), resources]);
|
|
150
|
+
}
|
|
151
|
+
function identifier(value, key) {
|
|
152
|
+
const id = value[key];
|
|
153
|
+
if (typeof id === "string" || typeof id === "number")
|
|
154
|
+
return String(id);
|
|
155
|
+
throw new Error(`Figma webhook payload omitted ${key}.`);
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmG,KAAK,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAG7K,MAAM,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AAChE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,yEAKpE;AACD,eAAO,MAAM,kBAAkB,kDAA0C,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
import { connectionPluginMetadata, defineMcpPluginConnection, definePlugin } from "@assemblyline-agents/core";
|
|
1
|
+
import { connectionPluginMetadata, defineConnectionPluginEvents, defineMcpPluginConnection, definePlugin } from "@assemblyline-agents/core";
|
|
2
|
+
import { figmaEvents } from "./events.js";
|
|
2
3
|
const PLUGIN = connectionPluginMetadata("figma");
|
|
3
|
-
export function defineFigmaConnection(options) {
|
|
4
|
+
export function defineFigmaConnection(options) {
|
|
5
|
+
const definition = defineMcpPluginConnection(PLUGIN, options);
|
|
6
|
+
const events = defineConnectionPluginEvents(PLUGIN, options.events, figmaEvents);
|
|
7
|
+
if (events)
|
|
8
|
+
definition.events = events;
|
|
9
|
+
return definition;
|
|
10
|
+
}
|
|
4
11
|
export const assemblyLinePlugin = definePlugin({ connections: [PLUGIN] });
|
|
5
12
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,YAAY,EAAmC,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,YAAY,EAAmC,MAAM,2BAA2B,CAAC;AAC7K,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,CAAE,CAAC;AAElD,MAAM,UAAU,qBAAqB,CAAC,OAA+B;IACnE,MAAM,UAAU,GAAG,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,4BAA4B,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjF,IAAI,MAAM;QAAE,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;IACvC,OAAO,UAAU,CAAC;AACpB,CAAC;AACD,MAAM,CAAC,MAAM,kBAAkB,GAAG,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assemblyline-agents/figma",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -9,12 +9,11 @@
|
|
|
9
9
|
}
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@assemblyline-agents/core": "
|
|
12
|
+
"@assemblyline-agents/core": "3.0.0"
|
|
13
13
|
},
|
|
14
14
|
"description": "Official Assembly Line Figma connection plugin.",
|
|
15
15
|
"files": [
|
|
16
|
-
"dist"
|
|
17
|
-
"skills"
|
|
16
|
+
"dist"
|
|
18
17
|
],
|
|
19
18
|
"engines": {
|
|
20
19
|
"node": ">=22.19.0"
|
package/skills/figma/SKILL.md
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: figma
|
|
3
|
-
description: Use configured Figma tools for design context, files, variables, components, and Dev Mode.
|
|
4
|
-
---
|
|
5
|
-
# Figma
|
|
6
|
-
Resolve the exact Figma URL, file, page, or node before fetching design context. Preserve component and variable names in implementation guidance.
|
|
7
|
-
|
|
8
|
-
The deployment owner configures Figma client allowlisting and OAuth. The scaffold is read-only; creating or modifying Figma, FigJam, or Slides content requires writes to be enabled with the configured approval gate.
|