@cat-factory/integrations 0.32.0 → 0.33.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/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/modules/documents/ConfluenceProvider.d.ts +1 -2
- package/dist/modules/documents/ConfluenceProvider.d.ts.map +1 -1
- package/dist/modules/documents/DocumentConnectionService.d.ts +11 -28
- package/dist/modules/documents/DocumentConnectionService.d.ts.map +1 -1
- package/dist/modules/documents/DocumentConnectionService.js +12 -71
- package/dist/modules/documents/DocumentConnectionService.js.map +1 -1
- package/dist/modules/documents/DocumentImportService.d.ts +4 -7
- package/dist/modules/documents/DocumentImportService.d.ts.map +1 -1
- package/dist/modules/documents/DocumentImportService.js +6 -9
- package/dist/modules/documents/DocumentImportService.js.map +1 -1
- package/dist/modules/documents/FigmaProvider.d.ts +4 -5
- package/dist/modules/documents/FigmaProvider.d.ts.map +1 -1
- package/dist/modules/documents/FigmaProvider.js +22 -21
- package/dist/modules/documents/FigmaProvider.js.map +1 -1
- package/dist/modules/documents/GitHubDocsProvider.d.ts +1 -2
- package/dist/modules/documents/GitHubDocsProvider.d.ts.map +1 -1
- package/dist/modules/documents/LinearDocumentProvider.d.ts +1 -2
- package/dist/modules/documents/LinearDocumentProvider.d.ts.map +1 -1
- package/dist/modules/documents/NotionProvider.d.ts +1 -2
- package/dist/modules/documents/NotionProvider.d.ts.map +1 -1
- package/dist/modules/documents/{ClaudeDesignProvider.d.ts → ZeplinProvider.d.ts} +12 -11
- package/dist/modules/documents/ZeplinProvider.d.ts.map +1 -0
- package/dist/modules/documents/ZeplinProvider.js +126 -0
- package/dist/modules/documents/ZeplinProvider.js.map +1 -0
- package/dist/modules/documents/design.logic.d.ts +60 -0
- package/dist/modules/documents/design.logic.d.ts.map +1 -0
- package/dist/modules/documents/design.logic.js +0 -0
- package/dist/modules/documents/design.logic.js.map +1 -0
- package/dist/modules/documents/figma.logic.d.ts +30 -9
- package/dist/modules/documents/figma.logic.d.ts.map +1 -1
- package/dist/modules/documents/figma.logic.js +51 -36
- package/dist/modules/documents/figma.logic.js.map +1 -1
- package/dist/modules/documents/zeplin.logic.d.ts +102 -0
- package/dist/modules/documents/zeplin.logic.d.ts.map +1 -0
- package/dist/modules/documents/zeplin.logic.js +193 -0
- package/dist/modules/documents/zeplin.logic.js.map +1 -0
- package/package.json +3 -3
- package/dist/modules/documents/ClaudeDesignProvider.d.ts.map +0 -1
- package/dist/modules/documents/ClaudeDesignProvider.js +0 -163
- package/dist/modules/documents/ClaudeDesignProvider.js.map +0 -1
- package/dist/modules/documents/claudeDesign.logic.d.ts +0 -88
- package/dist/modules/documents/claudeDesign.logic.d.ts.map +0 -1
- package/dist/modules/documents/claudeDesign.logic.js +0 -317
- package/dist/modules/documents/claudeDesign.logic.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GitHubDocsProvider.d.ts","sourceRoot":"","sources":["../../../src/modules/documents/GitHubDocsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,4BAA4B,EACjC,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAA;AAe5B,MAAM,WAAW,8BAA8B;IAC7C,YAAY,EAAE,YAAY,CAAA;IAC1B,8EAA8E;IAC9E,aAAa,EAAE,4BAA4B,CAAA;CAC5C;AAED,qBAAa,kBAAmB,YAAW,sBAAsB;IAInD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAS;IACjC,QAAQ,CAAC,UAAU
|
|
1
|
+
{"version":3,"file":"GitHubDocsProvider.d.ts","sourceRoot":"","sources":["../../../src/modules/documents/GitHubDocsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,4BAA4B,EACjC,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAA;AAe5B,MAAM,WAAW,8BAA8B;IAC7C,YAAY,EAAE,YAAY,CAAA;IAC1B,8EAA8E;IAC9E,aAAa,EAAE,4BAA4B,CAAA;CAC5C;AAED,qBAAa,kBAAmB,YAAW,sBAAsB;IAInD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAS;IACjC,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;MAAyB;IAE5C,YAA6B,IAAI,EAAE,8BAA8B,EAAI;IAErE;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,oBAAoB,CAErE;IAED,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAErC;IAEK,aAAa,CACjB,YAAY,EAAE,mBAAmB,EACjC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAoB1B;IAEK,MAAM,CACV,YAAY,EAAE,mBAAmB,EACjC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAkCjC;IAED;;;;OAIG;YACW,qBAAqB;CAUpC"}
|
|
@@ -2,7 +2,7 @@ import { type DocumentContent, type DocumentCredentials, type DocumentSearchResu
|
|
|
2
2
|
export declare class LinearDocumentProvider implements DocumentSourceProvider {
|
|
3
3
|
readonly kind: 'linear';
|
|
4
4
|
readonly descriptor: {
|
|
5
|
-
source: "
|
|
5
|
+
source: "confluence" | "figma" | "github" | "linear" | "notion" | "zeplin";
|
|
6
6
|
label: string;
|
|
7
7
|
icon: string;
|
|
8
8
|
credentialFields: {
|
|
@@ -15,7 +15,6 @@ export declare class LinearDocumentProvider implements DocumentSourceProvider {
|
|
|
15
15
|
refLabel: string;
|
|
16
16
|
refPlaceholder: string;
|
|
17
17
|
searchable?: boolean | undefined;
|
|
18
|
-
credentialScope?: "user" | "workspace" | undefined;
|
|
19
18
|
};
|
|
20
19
|
normalizeConnection(input: DocumentCredentials): NormalizedConnection;
|
|
21
20
|
parseRef(input: string): string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinearDocumentProvider.d.ts","sourceRoot":"","sources":["../../../src/modules/documents/LinearDocumentProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAA;AAsB5B,qBAAa,sBAAuB,YAAW,sBAAsB;IACnE,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAS;IACjC,QAAQ,CAAC,UAAU
|
|
1
|
+
{"version":3,"file":"LinearDocumentProvider.d.ts","sourceRoot":"","sources":["../../../src/modules/documents/LinearDocumentProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAA;AAsB5B,qBAAa,sBAAuB,YAAW,sBAAsB;IACnE,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAS;IACjC,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;MAAyB;IAE5C,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CAMpE;IAED,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAErC;IAEK,aAAa,CACjB,WAAW,EAAE,mBAAmB,EAChC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAM1B;IAEK,MAAM,CAAC,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAO7F;CACF"}
|
|
@@ -7,7 +7,7 @@ export declare class NotionApiError extends Error {
|
|
|
7
7
|
export declare class NotionProvider implements DocumentSourceProvider {
|
|
8
8
|
readonly kind: 'notion';
|
|
9
9
|
readonly descriptor: {
|
|
10
|
-
source: "
|
|
10
|
+
source: "confluence" | "figma" | "github" | "linear" | "notion" | "zeplin";
|
|
11
11
|
label: string;
|
|
12
12
|
icon: string;
|
|
13
13
|
credentialFields: {
|
|
@@ -20,7 +20,6 @@ export declare class NotionProvider implements DocumentSourceProvider {
|
|
|
20
20
|
refLabel: string;
|
|
21
21
|
refPlaceholder: string;
|
|
22
22
|
searchable?: boolean | undefined;
|
|
23
|
-
credentialScope?: "user" | "workspace" | undefined;
|
|
24
23
|
};
|
|
25
24
|
normalizeConnection(input: DocumentCredentials): NormalizedConnection;
|
|
26
25
|
parseRef(input: string): string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotionProvider.d.ts","sourceRoot":"","sources":["../../../src/modules/documents/NotionProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAA;AAuB5B,yEAAyE;AACzE,qBAAa,cAAe,SAAQ,KAAK;IAErC,QAAQ,CAAC,MAAM,EAAE,MAAM;IADzB,YACW,MAAM,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EAIhB;CACF;AAkGD,qBAAa,cAAe,YAAW,sBAAsB;IAC3D,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAS;IACjC,QAAQ,CAAC,UAAU
|
|
1
|
+
{"version":3,"file":"NotionProvider.d.ts","sourceRoot":"","sources":["../../../src/modules/documents/NotionProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAA;AAuB5B,yEAAyE;AACzE,qBAAa,cAAe,SAAQ,KAAK;IAErC,QAAQ,CAAC,MAAM,EAAE,MAAM;IADzB,YACW,MAAM,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EAIhB;CACF;AAkGD,qBAAa,cAAe,YAAW,sBAAsB;IAC3D,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAS;IACjC,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;MAAoB;IAEvC,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CAMpE;IAED,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAErC;IAEK,aAAa,CACjB,WAAW,EAAE,mBAAmB,EAChC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAe1B;IAEK,MAAM,CAAC,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA6B7F;IAED,iFAAiF;YACnE,WAAW;YAqBX,GAAG;CA+BlB"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import { type DocumentContent, type DocumentCredentials, type DocumentSourceProvider, type NormalizedConnection } from '@cat-factory/kernel';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
/** Carries the HTTP status so callers can surface a meaningful error. */
|
|
3
|
+
export declare class ZeplinApiError extends Error {
|
|
4
|
+
readonly status: number;
|
|
5
|
+
constructor(status: number, message: string);
|
|
6
|
+
}
|
|
7
|
+
export declare class ZeplinProvider implements DocumentSourceProvider {
|
|
8
|
+
readonly kind: 'zeplin';
|
|
4
9
|
readonly descriptor: {
|
|
5
|
-
source: "
|
|
10
|
+
source: "confluence" | "figma" | "github" | "linear" | "notion" | "zeplin";
|
|
6
11
|
label: string;
|
|
7
12
|
icon: string;
|
|
8
13
|
credentialFields: {
|
|
@@ -15,18 +20,14 @@ export declare class ClaudeDesignProvider implements DocumentSourceProvider {
|
|
|
15
20
|
refLabel: string;
|
|
16
21
|
refPlaceholder: string;
|
|
17
22
|
searchable?: boolean | undefined;
|
|
18
|
-
credentialScope?: "user" | "workspace" | undefined;
|
|
19
23
|
};
|
|
20
24
|
normalizeConnection(input: DocumentCredentials): NormalizedConnection;
|
|
21
25
|
parseRef(input: string): string | null;
|
|
22
26
|
fetchDocument(credentials: DocumentCredentials, externalId: string): Promise<DocumentContent>;
|
|
23
|
-
/**
|
|
24
|
-
private
|
|
25
|
-
|
|
26
|
-
private fetchFile;
|
|
27
|
-
/** Name the document: the manifest's `name`, else the file path, else the project id. */
|
|
28
|
-
private deriveName;
|
|
27
|
+
/** Fetch the single referenced screen, or a bounded list of the project's screens. */
|
|
28
|
+
private fetchScreens;
|
|
29
|
+
private bestEffort;
|
|
29
30
|
private headers;
|
|
30
31
|
private get;
|
|
31
32
|
}
|
|
32
|
-
//# sourceMappingURL=
|
|
33
|
+
//# sourceMappingURL=ZeplinProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZeplinProvider.d.ts","sourceRoot":"","sources":["../../../src/modules/documents/ZeplinProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAA;AAkC5B,yEAAyE;AACzE,qBAAa,cAAe,SAAQ,KAAK;IAErC,QAAQ,CAAC,MAAM,EAAE,MAAM;IADzB,YACW,MAAM,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EAIhB;CACF;AAID,qBAAa,cAAe,YAAW,sBAAsB;IAC3D,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAS;IACjC,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;MAAoB;IAEvC,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CAMpE;IAED,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAErC;IAEK,aAAa,CACjB,WAAW,EAAE,mBAAmB,EAChC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAoD1B;IAED,sFAAsF;YACxE,YAAY;YAsBZ,UAAU;IAQxB,OAAO,CAAC,OAAO;YAQD,GAAG;CAuBlB"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { ValidationError, } from '@cat-factory/kernel';
|
|
2
|
+
import { renderDesignContext } from './design.logic.js';
|
|
3
|
+
import { DocumentHttpError, createHostPinnedFetch, readCappedText } from './http.js';
|
|
4
|
+
import { MAX_SCREENS, ZEPLIN_API_HOST, ZEPLIN_DESCRIPTOR, buildZeplinDesignContext, parseZeplinRef, splitZeplinExternalId, unwrapArray, unwrapObject, } from './zeplin.logic.js';
|
|
5
|
+
// ZeplinProvider: the document-source provider for Zeplin, the design→dev handoff tool.
|
|
6
|
+
// It authenticates with a per-workspace personal access token (`Authorization: Bearer`),
|
|
7
|
+
// reads a project's screens + design-system (components + tokens) over the REST API, and
|
|
8
|
+
// maps them into the shared `DesignContext` the planner + `.cat-context/` materialisation
|
|
9
|
+
// consume. All Zeplin-specific *pure* logic (ref parsing, the host-pin guard, the JSON →
|
|
10
|
+
// DesignContext mapping) lives in `zeplin.logic.ts`; this class is the thin `fetch` shell.
|
|
11
|
+
//
|
|
12
|
+
// PROVISIONAL API SHAPE: the endpoint paths below target the documented Zeplin REST API;
|
|
13
|
+
// the host is pinned and the mapping is unit-tested independent of the network, but the
|
|
14
|
+
// exact paths/field names should be re-verified against docs.zeplin.dev when built —
|
|
15
|
+
// treat them as the intended shape, not a frozen contract (mirrors Figma's note).
|
|
16
|
+
const API_BASE = `https://${ZEPLIN_API_HOST}/v1`;
|
|
17
|
+
const USER_AGENT = 'cat-factory';
|
|
18
|
+
/** Hard cap on the bytes read off any response body, to protect the isolate. */
|
|
19
|
+
const MAX_RESPONSE_BYTES = 5_000_000;
|
|
20
|
+
/** Carries the HTTP status so callers can surface a meaningful error. */
|
|
21
|
+
export class ZeplinApiError extends Error {
|
|
22
|
+
status;
|
|
23
|
+
constructor(status, message) {
|
|
24
|
+
super(message);
|
|
25
|
+
this.status = status;
|
|
26
|
+
this.name = 'ZeplinApiError';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const safeFetch = createHostPinnedFetch({ host: ZEPLIN_API_HOST, label: 'Zeplin' });
|
|
30
|
+
export class ZeplinProvider {
|
|
31
|
+
kind = 'zeplin';
|
|
32
|
+
descriptor = ZEPLIN_DESCRIPTOR;
|
|
33
|
+
normalizeConnection(input) {
|
|
34
|
+
const apiToken = input.apiToken?.trim();
|
|
35
|
+
if (!apiToken) {
|
|
36
|
+
throw new ValidationError('Zeplin requires a personal access token');
|
|
37
|
+
}
|
|
38
|
+
return { credentials: { apiToken }, label: 'Zeplin' };
|
|
39
|
+
}
|
|
40
|
+
parseRef(input) {
|
|
41
|
+
return parseZeplinRef(input);
|
|
42
|
+
}
|
|
43
|
+
async fetchDocument(credentials, externalId) {
|
|
44
|
+
const { projectId, screenId } = splitZeplinExternalId(externalId);
|
|
45
|
+
if (!projectId) {
|
|
46
|
+
throw new ZeplinApiError(400, `Zeplin ref is missing a project id: ${externalId}`);
|
|
47
|
+
}
|
|
48
|
+
// Primary read: validates the token + that the project exists (throws on a bad token).
|
|
49
|
+
const project = await this.get(credentials, `/projects/${encodeURIComponent(projectId)}`);
|
|
50
|
+
// Screens are the PRIMARY design content, so their read is mandatory: a failed fetch
|
|
51
|
+
// throws and fails the import rather than silently producing an empty success (an
|
|
52
|
+
// empty project legitimately returns []). Components and tokens are supplementary
|
|
53
|
+
// (often plan-gated), so a single unreadable section is dropped, not fatal.
|
|
54
|
+
const screens = await this.fetchScreens(credentials, projectId, screenId);
|
|
55
|
+
const components = await this.bestEffort(() => this.get(credentials, `/projects/${encodeURIComponent(projectId)}/components`));
|
|
56
|
+
const designTokens = await this.bestEffort(() => this.get(credentials, `/projects/${encodeURIComponent(projectId)}/design_tokens`));
|
|
57
|
+
const context = buildZeplinDesignContext({
|
|
58
|
+
externalId,
|
|
59
|
+
projectName: project.name ?? projectId,
|
|
60
|
+
screens,
|
|
61
|
+
components: unwrapArray(components, 'components'),
|
|
62
|
+
designTokens,
|
|
63
|
+
});
|
|
64
|
+
const body = renderDesignContext(context);
|
|
65
|
+
if (!body.trim()) {
|
|
66
|
+
// The project read succeeded but nothing renderable came back (no screens, and
|
|
67
|
+
// components/tokens unavailable). Surface it as an error instead of persisting an
|
|
68
|
+
// empty "successful" import the user would mistake for real design context.
|
|
69
|
+
throw new ZeplinApiError(404, `Zeplin import '${externalId}' produced no design content`);
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
externalId,
|
|
73
|
+
title: context.title,
|
|
74
|
+
url: context.url,
|
|
75
|
+
body,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/** Fetch the single referenced screen, or a bounded list of the project's screens. */
|
|
79
|
+
async fetchScreens(credentials, projectId, screenId) {
|
|
80
|
+
if (screenId) {
|
|
81
|
+
const screen = unwrapObject(await this.get(credentials, `/projects/${encodeURIComponent(projectId)}/screens/${encodeURIComponent(screenId)}`), 'screen');
|
|
82
|
+
return screen ? [screen] : [];
|
|
83
|
+
}
|
|
84
|
+
const listed = await this.get(credentials, `/projects/${encodeURIComponent(projectId)}/screens?limit=${MAX_SCREENS}`);
|
|
85
|
+
return unwrapArray(listed, 'screens');
|
|
86
|
+
}
|
|
87
|
+
async bestEffort(fn) {
|
|
88
|
+
try {
|
|
89
|
+
return await fn();
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
headers(credentials) {
|
|
96
|
+
return {
|
|
97
|
+
authorization: `Bearer ${credentials.apiToken ?? ''}`,
|
|
98
|
+
accept: 'application/json',
|
|
99
|
+
'user-agent': USER_AGENT,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
async get(credentials, path) {
|
|
103
|
+
const url = `${API_BASE}${path}`;
|
|
104
|
+
let res;
|
|
105
|
+
try {
|
|
106
|
+
res = await safeFetch(url, { method: 'GET', headers: this.headers(credentials) });
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
if (err instanceof DocumentHttpError)
|
|
110
|
+
throw new ZeplinApiError(err.status, err.message);
|
|
111
|
+
throw err;
|
|
112
|
+
}
|
|
113
|
+
if (!res.ok) {
|
|
114
|
+
const text = await readCappedText(res, MAX_RESPONSE_BYTES, 'Zeplin').catch(() => '');
|
|
115
|
+
throw new ZeplinApiError(res.status, `Zeplin GET ${url} → ${res.status}: ${text.slice(0, 300)}`);
|
|
116
|
+
}
|
|
117
|
+
const text = await readCappedText(res, MAX_RESPONSE_BYTES, 'Zeplin');
|
|
118
|
+
try {
|
|
119
|
+
return JSON.parse(text);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
throw new ZeplinApiError(502, `Zeplin returned an unparseable body for ${path}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=ZeplinProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZeplinProvider.js","sourceRoot":"","sources":["../../../src/modules/documents/ZeplinProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/** A named sub-section of a block (e.g. "Layout", "Text content"). */
|
|
2
|
+
export interface DesignSection {
|
|
3
|
+
heading: string;
|
|
4
|
+
lines: string[];
|
|
5
|
+
}
|
|
6
|
+
/** A top-level visual unit: a Figma frame, a Zeplin screen, a Penpot board. */
|
|
7
|
+
export interface DesignBlock {
|
|
8
|
+
/** The block's name/title. */
|
|
9
|
+
title: string;
|
|
10
|
+
/** A short inline qualifier appended to the heading, e.g. a `(390×844)` size. */
|
|
11
|
+
meta?: string;
|
|
12
|
+
/** Ordered sub-sections (layout tree, text content, …). */
|
|
13
|
+
sections: DesignSection[];
|
|
14
|
+
}
|
|
15
|
+
/** A design-system component the design instantiates or defines. */
|
|
16
|
+
export interface DesignComponent {
|
|
17
|
+
name: string;
|
|
18
|
+
/** Optional grouping label (e.g. Zeplin's component section, a Figma page). */
|
|
19
|
+
group?: string;
|
|
20
|
+
/** Optional one-line note (variants, description). */
|
|
21
|
+
note?: string;
|
|
22
|
+
}
|
|
23
|
+
/** A design token: a colour / spacing / typography value, optionally scoped. */
|
|
24
|
+
export interface DesignToken {
|
|
25
|
+
collection?: string;
|
|
26
|
+
mode?: string;
|
|
27
|
+
name: string;
|
|
28
|
+
value: string;
|
|
29
|
+
}
|
|
30
|
+
/** A best-effort reference line (e.g. a short-lived rendered-preview URL). */
|
|
31
|
+
export interface DesignReference {
|
|
32
|
+
label: string;
|
|
33
|
+
url: string;
|
|
34
|
+
}
|
|
35
|
+
/** The fully-normalised design context a provider hands the shared renderer. */
|
|
36
|
+
export interface DesignContext {
|
|
37
|
+
/** Document title (used as the `DocumentContent.title`). */
|
|
38
|
+
title: string;
|
|
39
|
+
/** Canonical web URL of the document on the source. */
|
|
40
|
+
url: string;
|
|
41
|
+
blocks: DesignBlock[];
|
|
42
|
+
components: DesignComponent[];
|
|
43
|
+
tokens: DesignToken[];
|
|
44
|
+
references: DesignReference[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The ` (W×H)` size qualifier appended to a block heading, shared by every source so a
|
|
48
|
+
* Figma frame and a Zeplin screen render their dimensions identically. Returns undefined
|
|
49
|
+
* when either dimension is missing, so the caller omits the qualifier.
|
|
50
|
+
*/
|
|
51
|
+
export declare function dimensionMeta(width?: number | null, height?: number | null): string | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Render a {@link DesignContext} to the Markdown body the agent reads from
|
|
54
|
+
* `.cat-context/<slug>.md`: each block as a `## <title>` with its sub-sections, then a
|
|
55
|
+
* single de-duplicated `### Components`, the `### Design tokens`, and any best-effort
|
|
56
|
+
* `### References`. Empty groups are dropped so a source that can't supply tokens (e.g.
|
|
57
|
+
* a non-Enterprise Figma plan) simply omits that section rather than emitting a stub.
|
|
58
|
+
*/
|
|
59
|
+
export declare function renderDesignContext(ctx: DesignContext): string;
|
|
60
|
+
//# sourceMappingURL=design.logic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/documents/design.logic.ts"],"names":[],"mappings":"AAQA,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,+EAA+E;AAC/E,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,2DAA2D;IAC3D,QAAQ,EAAE,aAAa,EAAE,CAAA;CAC1B;AAED,oEAAoE;AACpE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,gFAAgF;AAChF,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,gFAAgF;AAChF,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAA;IACb,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,UAAU,EAAE,eAAe,EAAE,CAAA;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAG/F;AA2BD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CA4B9D"}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design.logic.js","sourceRoot":"","sources":["../../../src/modules/documents/design.logic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { DocumentSourceDescriptor } from '@cat-factory/kernel';
|
|
2
|
+
import { type DesignBlock, type DesignComponent, type DesignContext, type DesignToken } from './design.logic.js';
|
|
2
3
|
/** Figma's REST API host. The PAT is sent to this host only — see {@link assertSafeFigmaUrl}. */
|
|
3
4
|
export declare const FIGMA_API_HOST = "api.figma.com";
|
|
4
5
|
/** What the connect UI renders, and which credentials the provider needs. */
|
|
@@ -64,12 +65,14 @@ export interface FigmaComponentMap {
|
|
|
64
65
|
} | undefined;
|
|
65
66
|
}
|
|
66
67
|
/**
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* `### Components
|
|
68
|
+
* Map the fetched Figma frames into the source-neutral {@link DesignBlock}s: one block
|
|
69
|
+
* per frame, with a `Layout` bullet tree and the frame's `Text content`. The
|
|
70
|
+
* design-system components are collected separately ({@link figmaComponents}) into the
|
|
71
|
+
* shared global `### Components` section rather than per-frame.
|
|
71
72
|
*/
|
|
72
|
-
export declare function
|
|
73
|
+
export declare function figmaBlocks(roots: FigmaNode[]): DesignBlock[];
|
|
74
|
+
/** Collect the distinct design-system components instantiated across the frames. */
|
|
75
|
+
export declare function figmaComponents(roots: FigmaNode[], components?: FigmaComponentMap): DesignComponent[];
|
|
73
76
|
interface FigmaVariable {
|
|
74
77
|
name?: string;
|
|
75
78
|
resolvedType?: string;
|
|
@@ -89,10 +92,28 @@ export interface FigmaVariablesMeta {
|
|
|
89
92
|
variableCollections?: Record<string, FigmaVariableCollection | undefined>;
|
|
90
93
|
}
|
|
91
94
|
/**
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
+
* Map the Figma local-variables payload into source-neutral {@link DesignToken}s
|
|
96
|
+
* (`collection › mode › name = value`). Empty when there are no variables, so the
|
|
97
|
+
* shared renderer drops the `### Design tokens` section entirely.
|
|
95
98
|
*/
|
|
96
|
-
export declare function
|
|
99
|
+
export declare function figmaTokens(meta: FigmaVariablesMeta | undefined | null): DesignToken[];
|
|
100
|
+
export interface FigmaContextInput {
|
|
101
|
+
/** The composite external id (`<fileKey>` or `<fileKey>:<nodeId>`). */
|
|
102
|
+
externalId: string;
|
|
103
|
+
/** The Figma file's name (from the API), used for the document title. */
|
|
104
|
+
fileName: string;
|
|
105
|
+
/** The frame/node id when this is a node link (drives the title shape). */
|
|
106
|
+
nodeId?: string;
|
|
107
|
+
/** The fetched frame roots. */
|
|
108
|
+
roots: FigmaNode[];
|
|
109
|
+
/** The `componentId → { name }` map returned alongside the nodes. */
|
|
110
|
+
components: FigmaComponentMap;
|
|
111
|
+
/** Local-variables payload, or null when the plan doesn't expose it. */
|
|
112
|
+
variablesMeta?: FigmaVariablesMeta | null;
|
|
113
|
+
/** Best-effort short-lived rendered-preview URL, or null. */
|
|
114
|
+
previewUrl?: string | null;
|
|
115
|
+
}
|
|
116
|
+
/** Assemble the fetched Figma pieces into the shared {@link DesignContext}. */
|
|
117
|
+
export declare function buildFigmaDesignContext(input: FigmaContextInput): DesignContext;
|
|
97
118
|
export {};
|
|
98
119
|
//# sourceMappingURL=figma.logic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"figma.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/documents/figma.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"figma.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/documents/figma.logic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { dimensionMeta, } from './design.logic.js';
|
|
1
2
|
import { assertHostPinned } from './http.js';
|
|
2
3
|
// Figma-specific pure logic, kept out of the provider shell so it is unit-testable
|
|
3
4
|
// without a live workspace: parsing/canonicalising a file+node ref out of user input,
|
|
@@ -121,10 +122,7 @@ export function figmaUrlFor(externalId) {
|
|
|
121
122
|
const MAX_TREE_DEPTH = 6;
|
|
122
123
|
const MAX_TREE_NODES = 400;
|
|
123
124
|
function dimensionLabel(node) {
|
|
124
|
-
|
|
125
|
-
if (!box || box.width == null || box.height == null)
|
|
126
|
-
return '';
|
|
127
|
-
return ` (${Math.round(box.width)}×${Math.round(box.height)})`;
|
|
125
|
+
return dimensionMeta(node.absoluteBoundingBox?.width, node.absoluteBoundingBox?.height) ?? '';
|
|
128
126
|
}
|
|
129
127
|
/**
|
|
130
128
|
* Render a node and its descendants as an indented bullet tree (name + type +
|
|
@@ -167,38 +165,37 @@ function collectComponents(node, components, out) {
|
|
|
167
165
|
collectComponents(child, components, out);
|
|
168
166
|
}
|
|
169
167
|
/**
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
* `### Components
|
|
168
|
+
* Map the fetched Figma frames into the source-neutral {@link DesignBlock}s: one block
|
|
169
|
+
* per frame, with a `Layout` bullet tree and the frame's `Text content`. The
|
|
170
|
+
* design-system components are collected separately ({@link figmaComponents}) into the
|
|
171
|
+
* shared global `### Components` section rather than per-frame.
|
|
174
172
|
*/
|
|
175
|
-
export function
|
|
176
|
-
|
|
177
|
-
for (const root of roots) {
|
|
178
|
-
const lines = [];
|
|
179
|
-
lines.push(`## ${root.name?.trim() || '(unnamed frame)'}${dimensionLabel(root)}`);
|
|
173
|
+
export function figmaBlocks(roots) {
|
|
174
|
+
return roots.map((root) => {
|
|
180
175
|
const layout = [];
|
|
181
176
|
// One counter shared across every top-level child so MAX_TREE_NODES bounds the whole
|
|
182
177
|
// frame, not each subtree — a wide frame can't blow past the cap one branch at a time.
|
|
183
178
|
const counter = { n: 0 };
|
|
184
179
|
for (const child of root.children ?? [])
|
|
185
180
|
renderLayout(child, 0, counter, layout);
|
|
186
|
-
if (layout.length) {
|
|
187
|
-
lines.push('', '### Layout', ...layout);
|
|
188
|
-
}
|
|
189
181
|
const text = [];
|
|
190
182
|
collectText(root, text);
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
183
|
+
return {
|
|
184
|
+
title: root.name?.trim() || '(unnamed frame)',
|
|
185
|
+
meta: dimensionLabel(root),
|
|
186
|
+
sections: [
|
|
187
|
+
{ heading: 'Layout', lines: layout },
|
|
188
|
+
{ heading: 'Text content', lines: text.map((t) => `- ${t.replace(/\s+/g, ' ')}`) },
|
|
189
|
+
],
|
|
190
|
+
};
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
/** Collect the distinct design-system components instantiated across the frames. */
|
|
194
|
+
export function figmaComponents(roots, components = {}) {
|
|
195
|
+
const names = new Set();
|
|
196
|
+
for (const root of roots)
|
|
197
|
+
collectComponents(root, components, names);
|
|
198
|
+
return [...names].map((name) => ({ name }));
|
|
202
199
|
}
|
|
203
200
|
/** Render a single variable value (colour object → hex/rgba, else compact JSON). */
|
|
204
201
|
function renderVariableValue(value) {
|
|
@@ -221,14 +218,14 @@ function renderVariableValue(value) {
|
|
|
221
218
|
return JSON.stringify(value);
|
|
222
219
|
}
|
|
223
220
|
/**
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
*
|
|
221
|
+
* Map the Figma local-variables payload into source-neutral {@link DesignToken}s
|
|
222
|
+
* (`collection › mode › name = value`). Empty when there are no variables, so the
|
|
223
|
+
* shared renderer drops the `### Design tokens` section entirely.
|
|
227
224
|
*/
|
|
228
|
-
export function
|
|
225
|
+
export function figmaTokens(meta) {
|
|
229
226
|
const variables = meta?.variables ?? {};
|
|
230
227
|
const collections = meta?.variableCollections ?? {};
|
|
231
|
-
const
|
|
228
|
+
const tokens = [];
|
|
232
229
|
for (const variable of Object.values(variables)) {
|
|
233
230
|
if (!variable?.name)
|
|
234
231
|
continue;
|
|
@@ -239,11 +236,29 @@ export function figmaVariablesToMarkdown(meta) {
|
|
|
239
236
|
const modes = collection?.modes ?? [];
|
|
240
237
|
for (const [modeId, value] of Object.entries(variable.valuesByMode ?? {})) {
|
|
241
238
|
const modeName = modes.find((m) => m.modeId === modeId)?.name ?? 'default';
|
|
242
|
-
|
|
239
|
+
tokens.push({
|
|
240
|
+
collection: collectionName,
|
|
241
|
+
mode: modeName,
|
|
242
|
+
name: variable.name,
|
|
243
|
+
value: renderVariableValue(value),
|
|
244
|
+
});
|
|
243
245
|
}
|
|
244
246
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
247
|
+
return tokens;
|
|
248
|
+
}
|
|
249
|
+
/** Assemble the fetched Figma pieces into the shared {@link DesignContext}. */
|
|
250
|
+
export function buildFigmaDesignContext(input) {
|
|
251
|
+
const { fileKey } = splitFigmaExternalId(input.externalId);
|
|
252
|
+
const title = input.nodeId
|
|
253
|
+
? `${input.fileName || fileKey} — ${input.roots[0]?.name?.trim() || input.nodeId}`
|
|
254
|
+
: input.fileName || fileKey;
|
|
255
|
+
return {
|
|
256
|
+
title,
|
|
257
|
+
url: figmaUrlFor(input.externalId),
|
|
258
|
+
blocks: figmaBlocks(input.roots),
|
|
259
|
+
components: figmaComponents(input.roots, input.components),
|
|
260
|
+
tokens: figmaTokens(input.variablesMeta),
|
|
261
|
+
references: input.previewUrl ? [{ label: 'Rendered preview', url: input.previewUrl }] : [],
|
|
262
|
+
};
|
|
248
263
|
}
|
|
249
264
|
//# sourceMappingURL=figma.logic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"figma.logic.js","sourceRoot":"","sources":["../../../src/modules/documents/figma.logic.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"figma.logic.js","sourceRoot":"","sources":["../../../src/modules/documents/figma.logic.ts"],"names":[],"mappings":"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"}
|