@cat-factory/integrations 0.31.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.
Files changed (67) hide show
  1. package/dist/index.d.ts +8 -4
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +13 -6
  4. package/dist/index.js.map +1 -1
  5. package/dist/modules/documents/ConfluenceProvider.d.ts +1 -2
  6. package/dist/modules/documents/ConfluenceProvider.d.ts.map +1 -1
  7. package/dist/modules/documents/DocumentConnectionService.d.ts +11 -28
  8. package/dist/modules/documents/DocumentConnectionService.d.ts.map +1 -1
  9. package/dist/modules/documents/DocumentConnectionService.js +12 -71
  10. package/dist/modules/documents/DocumentConnectionService.js.map +1 -1
  11. package/dist/modules/documents/DocumentImportService.d.ts +4 -7
  12. package/dist/modules/documents/DocumentImportService.d.ts.map +1 -1
  13. package/dist/modules/documents/DocumentImportService.js +6 -9
  14. package/dist/modules/documents/DocumentImportService.js.map +1 -1
  15. package/dist/modules/documents/FigmaProvider.d.ts +4 -5
  16. package/dist/modules/documents/FigmaProvider.d.ts.map +1 -1
  17. package/dist/modules/documents/FigmaProvider.js +22 -21
  18. package/dist/modules/documents/FigmaProvider.js.map +1 -1
  19. package/dist/modules/documents/GitHubDocsProvider.d.ts +1 -2
  20. package/dist/modules/documents/GitHubDocsProvider.d.ts.map +1 -1
  21. package/dist/modules/documents/LinearDocumentProvider.d.ts +1 -2
  22. package/dist/modules/documents/LinearDocumentProvider.d.ts.map +1 -1
  23. package/dist/modules/documents/NotionProvider.d.ts +1 -2
  24. package/dist/modules/documents/NotionProvider.d.ts.map +1 -1
  25. package/dist/modules/documents/{ClaudeDesignProvider.d.ts → ZeplinProvider.d.ts} +12 -11
  26. package/dist/modules/documents/ZeplinProvider.d.ts.map +1 -0
  27. package/dist/modules/documents/ZeplinProvider.js +126 -0
  28. package/dist/modules/documents/ZeplinProvider.js.map +1 -0
  29. package/dist/modules/documents/design.logic.d.ts +60 -0
  30. package/dist/modules/documents/design.logic.d.ts.map +1 -0
  31. package/dist/modules/documents/design.logic.js +0 -0
  32. package/dist/modules/documents/design.logic.js.map +1 -0
  33. package/dist/modules/documents/figma.logic.d.ts +30 -9
  34. package/dist/modules/documents/figma.logic.d.ts.map +1 -1
  35. package/dist/modules/documents/figma.logic.js +51 -36
  36. package/dist/modules/documents/figma.logic.js.map +1 -1
  37. package/dist/modules/documents/zeplin.logic.d.ts +102 -0
  38. package/dist/modules/documents/zeplin.logic.d.ts.map +1 -0
  39. package/dist/modules/documents/zeplin.logic.js +193 -0
  40. package/dist/modules/documents/zeplin.logic.js.map +1 -0
  41. package/dist/modules/environments/environments.logic.d.ts.map +1 -1
  42. package/dist/modules/environments/environments.logic.js +2 -99
  43. package/dist/modules/environments/environments.logic.js.map +1 -1
  44. package/dist/modules/kubernetes/KubernetesRunnerTransport.d.ts +29 -0
  45. package/dist/modules/kubernetes/KubernetesRunnerTransport.d.ts.map +1 -0
  46. package/dist/modules/kubernetes/KubernetesRunnerTransport.js +202 -0
  47. package/dist/modules/kubernetes/KubernetesRunnerTransport.js.map +1 -0
  48. package/dist/modules/kubernetes/kubernetes.logic.d.ts +54 -0
  49. package/dist/modules/kubernetes/kubernetes.logic.d.ts.map +1 -0
  50. package/dist/modules/kubernetes/kubernetes.logic.js +169 -0
  51. package/dist/modules/kubernetes/kubernetes.logic.js.map +1 -0
  52. package/dist/modules/runners/RunnerPoolConnectionService.d.ts +35 -23
  53. package/dist/modules/runners/RunnerPoolConnectionService.d.ts.map +1 -1
  54. package/dist/modules/runners/RunnerPoolConnectionService.js +94 -50
  55. package/dist/modules/runners/RunnerPoolConnectionService.js.map +1 -1
  56. package/dist/modules/runners/runner-backends.d.ts +51 -0
  57. package/dist/modules/runners/runner-backends.d.ts.map +1 -0
  58. package/dist/modules/runners/runner-backends.js +101 -0
  59. package/dist/modules/runners/runner-backends.js.map +1 -0
  60. package/package.json +3 -3
  61. package/dist/modules/documents/ClaudeDesignProvider.d.ts.map +0 -1
  62. package/dist/modules/documents/ClaudeDesignProvider.js +0 -163
  63. package/dist/modules/documents/ClaudeDesignProvider.js.map +0 -1
  64. package/dist/modules/documents/claudeDesign.logic.d.ts +0 -88
  65. package/dist/modules/documents/claudeDesign.logic.d.ts.map +0 -1
  66. package/dist/modules/documents/claudeDesign.logic.js +0 -317
  67. package/dist/modules/documents/claudeDesign.logic.js.map +0 -1
@@ -0,0 +1,102 @@
1
+ import type { DocumentSourceDescriptor } from '@cat-factory/kernel';
2
+ import { type DesignBlock, type DesignComponent, type DesignContext, type DesignToken } from './design.logic.js';
3
+ /** Zeplin's REST API host. The PAT is sent to this host only — see {@link assertSafeZeplinUrl}. */
4
+ export declare const ZEPLIN_API_HOST = "api.zeplin.dev";
5
+ /** What the connect UI renders, and which credentials the provider needs. */
6
+ export declare const ZEPLIN_DESCRIPTOR: DocumentSourceDescriptor;
7
+ /**
8
+ * The Zeplin REST host is fixed, so any request/redirect must stay on `api.zeplin.dev`
9
+ * over https; a redirect off-host is treated as an SSRF attempt and rejected. Mirrors the
10
+ * per-hop guard the other host-pinned providers run. Kept pure so it is unit-testable
11
+ * without a network.
12
+ */
13
+ export declare function assertSafeZeplinUrl(url: string): void;
14
+ /**
15
+ * Resolve a Zeplin reference from raw user input into the stable composite external id
16
+ * this provider stores: `"<projectId>"` for a whole-project link, or
17
+ * `"<projectId>:<screenId>"` for a specific screen. Accepts an `app.zeplin.io`
18
+ * project/screen URL, a bare project id, or a `projectId:screenId` string. Returns null
19
+ * when no project id is found.
20
+ */
21
+ export declare function parseZeplinRef(input: string): string | null;
22
+ /** Split a composite external id back into its project id and optional screen id. */
23
+ export declare function splitZeplinExternalId(externalId: string): {
24
+ projectId: string;
25
+ screenId?: string;
26
+ };
27
+ /** Build the canonical web URL stored on the imported document. */
28
+ export declare function zeplinUrlFor(externalId: string): string;
29
+ /** Accept either a bare array or a `{ <key>: [...] }` envelope, else an empty array. */
30
+ export declare function unwrapArray<T>(value: unknown, key: string): T[];
31
+ /** Accept either a bare object or a `{ <key>: {...} }` envelope, else null. */
32
+ export declare function unwrapObject<T>(value: unknown, key: string): T | null;
33
+ export interface ZeplinScreen {
34
+ id?: string;
35
+ name?: string;
36
+ description?: string;
37
+ image?: {
38
+ width?: number;
39
+ height?: number;
40
+ } | null;
41
+ }
42
+ export interface ZeplinComponent {
43
+ id?: string;
44
+ name?: string;
45
+ description?: string;
46
+ section?: {
47
+ name?: string;
48
+ } | null;
49
+ }
50
+ /** A Zeplin colour token: 0–255 channels + 0–1 alpha (Zeplin's representation). */
51
+ interface ZeplinColor {
52
+ name?: string;
53
+ r?: number;
54
+ g?: number;
55
+ b?: number;
56
+ a?: number;
57
+ }
58
+ interface ZeplinTextStyle {
59
+ name?: string;
60
+ font_family?: string;
61
+ font_size?: number;
62
+ }
63
+ interface ZeplinSpacing {
64
+ name?: string;
65
+ value?: number;
66
+ }
67
+ /** The `/projects/:id/design_tokens` payload we read (lenient — verify-at-build). */
68
+ export interface ZeplinDesignTokens {
69
+ colors?: ZeplinColor[];
70
+ text_styles?: ZeplinTextStyle[];
71
+ spacing?: ZeplinSpacing[];
72
+ measurements?: ZeplinSpacing[];
73
+ }
74
+ /**
75
+ * The single source of truth for how many screens a whole-project import pulls and
76
+ * renders: {@link ZeplinProvider} builds its `?limit=` query from this, and
77
+ * {@link zeplinScreensToBlocks} bounds the rendered blocks by it, so the fetch and the
78
+ * render can't drift.
79
+ */
80
+ export declare const MAX_SCREENS = 40;
81
+ /** Map Zeplin screens into source-neutral blocks (name + an optional description line). */
82
+ export declare function zeplinScreensToBlocks(screens: ZeplinScreen[]): DesignBlock[];
83
+ /** Map Zeplin components into source-neutral components (grouped by their section). */
84
+ export declare function zeplinComponentsToDesign(components: ZeplinComponent[]): DesignComponent[];
85
+ /** Map Zeplin design tokens (colours / typography / spacing) into source-neutral tokens. */
86
+ export declare function zeplinTokens(tokens: ZeplinDesignTokens | undefined | null): DesignToken[];
87
+ export interface ZeplinContextInput {
88
+ /** The composite external id (`<projectId>` or `<projectId>:<screenId>`). */
89
+ externalId: string;
90
+ /** The Zeplin project's name (from the API), used for the document title. */
91
+ projectName: string;
92
+ /** The fetched screens (the whole project, or just the one referenced). */
93
+ screens: ZeplinScreen[];
94
+ /** The project's design-system components. */
95
+ components: ZeplinComponent[];
96
+ /** The project's design tokens, or null when unavailable. */
97
+ designTokens?: ZeplinDesignTokens | null;
98
+ }
99
+ /** Assemble the fetched Zeplin pieces into the shared {@link DesignContext}. */
100
+ export declare function buildZeplinDesignContext(input: ZeplinContextInput): DesignContext;
101
+ export {};
102
+ //# sourceMappingURL=zeplin.logic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zeplin.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/documents/zeplin.logic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,193 @@
1
+ import { dimensionMeta, } from './design.logic.js';
2
+ import { assertHostPinned } from './http.js';
3
+ // Zeplin-specific pure logic, kept out of the provider shell so it is unit-testable
4
+ // without a live workspace: parsing/canonicalising a project+screen ref out of user input,
5
+ // the fixed-host SSRF guard, and mapping Zeplin's screens / components / design-tokens JSON
6
+ // into the source-neutral `DesignContext` the shared `renderDesignContext` emits. The
7
+ // `fetch` itself (the `Authorization: Bearer` REST client) lives in `ZeplinProvider`.
8
+ //
9
+ // Zeplin is the design→dev *handoff* tool, so its content model is screens + a
10
+ // design-system (components + tokens), NOT Figma's node tree — which is exactly why it
11
+ // rides the shared `DesignContext` rather than a Figma-shaped renderer.
12
+ /** Zeplin's REST API host. The PAT is sent to this host only — see {@link assertSafeZeplinUrl}. */
13
+ export const ZEPLIN_API_HOST = 'api.zeplin.dev';
14
+ /** What the connect UI renders, and which credentials the provider needs. */
15
+ export const ZEPLIN_DESCRIPTOR = {
16
+ source: 'zeplin',
17
+ label: 'Zeplin',
18
+ icon: 'i-lucide-layout-template',
19
+ credentialFields: [
20
+ {
21
+ key: 'apiToken',
22
+ label: 'Personal access token',
23
+ secret: true,
24
+ placeholder: 'zeplin PAT',
25
+ help: 'Create a personal access token in Zeplin → Profile → Developer → Personal access tokens. It is stored sealed and shared by the workspace.',
26
+ },
27
+ ],
28
+ refLabel: 'Zeplin project or screen URL',
29
+ refPlaceholder: 'https://app.zeplin.io/project/<projectId>/screen/<screenId>',
30
+ // No catalogue search exposed here — import a specific project/screen by URL.
31
+ searchable: false,
32
+ };
33
+ /**
34
+ * The Zeplin REST host is fixed, so any request/redirect must stay on `api.zeplin.dev`
35
+ * over https; a redirect off-host is treated as an SSRF attempt and rejected. Mirrors the
36
+ * per-hop guard the other host-pinned providers run. Kept pure so it is unit-testable
37
+ * without a network.
38
+ */
39
+ export function assertSafeZeplinUrl(url) {
40
+ assertHostPinned(url, ZEPLIN_API_HOST, 'Zeplin');
41
+ }
42
+ // ---- Ref parsing + canonical URL ------------------------------------------
43
+ const ID = /^[A-Za-z0-9]+$/;
44
+ /**
45
+ * Resolve a Zeplin reference from raw user input into the stable composite external id
46
+ * this provider stores: `"<projectId>"` for a whole-project link, or
47
+ * `"<projectId>:<screenId>"` for a specific screen. Accepts an `app.zeplin.io`
48
+ * project/screen URL, a bare project id, or a `projectId:screenId` string. Returns null
49
+ * when no project id is found.
50
+ */
51
+ export function parseZeplinRef(input) {
52
+ const trimmed = input.trim();
53
+ if (!trimmed)
54
+ return null;
55
+ // Bare ref: a project id, optionally `:`-suffixed with a screen id.
56
+ if (!trimmed.includes('/') && !/zeplin\.io/i.test(trimmed)) {
57
+ const [project, screen, ...rest] = trimmed.split(':');
58
+ if (!project || !ID.test(project) || rest.length)
59
+ return null;
60
+ if (!screen)
61
+ return project;
62
+ return ID.test(screen) ? `${project}:${screen}` : project;
63
+ }
64
+ let url;
65
+ try {
66
+ url = new URL(trimmed);
67
+ }
68
+ catch {
69
+ return null;
70
+ }
71
+ if (!/(^|\.)zeplin\.io$/i.test(url.hostname))
72
+ return null;
73
+ const project = url.pathname.match(/\/project\/([A-Za-z0-9]+)/)?.[1];
74
+ if (!project)
75
+ return null;
76
+ const screen = url.pathname.match(/\/screen\/([A-Za-z0-9]+)/)?.[1];
77
+ return screen ? `${project}:${screen}` : project;
78
+ }
79
+ /** Split a composite external id back into its project id and optional screen id. */
80
+ export function splitZeplinExternalId(externalId) {
81
+ const idx = externalId.indexOf(':');
82
+ if (idx === -1)
83
+ return { projectId: externalId };
84
+ return { projectId: externalId.slice(0, idx), screenId: externalId.slice(idx + 1) };
85
+ }
86
+ /** Build the canonical web URL stored on the imported document. */
87
+ export function zeplinUrlFor(externalId) {
88
+ const { projectId, screenId } = splitZeplinExternalId(externalId);
89
+ const base = `https://app.zeplin.io/project/${projectId}`;
90
+ return screenId ? `${base}/screen/${screenId}` : base;
91
+ }
92
+ // ---- Response envelope unwrapping -----------------------------------------
93
+ // Zeplin's REST responses are inconsistent about wrapping collections/objects in a named
94
+ // envelope (`{ screens: [...] }` / `{ screen: {...} }`) vs returning them bare, so every
95
+ // read normalises through these. Pure + exported so the provider shell stays a thin fetch
96
+ // layer and the unwrap is unit-testable without a network.
97
+ /** Accept either a bare array or a `{ <key>: [...] }` envelope, else an empty array. */
98
+ export function unwrapArray(value, key) {
99
+ if (Array.isArray(value))
100
+ return value;
101
+ if (value && typeof value === 'object') {
102
+ const inner = value[key];
103
+ if (Array.isArray(inner))
104
+ return inner;
105
+ }
106
+ return [];
107
+ }
108
+ /** Accept either a bare object or a `{ <key>: {...} }` envelope, else null. */
109
+ export function unwrapObject(value, key) {
110
+ if (!value || typeof value !== 'object')
111
+ return null;
112
+ const inner = value[key];
113
+ if (inner && typeof inner === 'object')
114
+ return inner;
115
+ return value;
116
+ }
117
+ /**
118
+ * The single source of truth for how many screens a whole-project import pulls and
119
+ * renders: {@link ZeplinProvider} builds its `?limit=` query from this, and
120
+ * {@link zeplinScreensToBlocks} bounds the rendered blocks by it, so the fetch and the
121
+ * render can't drift.
122
+ */
123
+ export const MAX_SCREENS = 40;
124
+ function screenMeta(screen) {
125
+ return dimensionMeta(screen.image?.width, screen.image?.height);
126
+ }
127
+ /** Map Zeplin screens into source-neutral blocks (name + an optional description line). */
128
+ export function zeplinScreensToBlocks(screens) {
129
+ return screens.slice(0, MAX_SCREENS).map((screen) => ({
130
+ title: screen.name?.trim() || '(unnamed screen)',
131
+ meta: screenMeta(screen),
132
+ sections: screen.description?.trim()
133
+ ? [{ heading: 'Description', lines: [screen.description.trim()] }]
134
+ : [],
135
+ }));
136
+ }
137
+ /** Map Zeplin components into source-neutral components (grouped by their section). */
138
+ export function zeplinComponentsToDesign(components) {
139
+ return components
140
+ .filter((c) => c.name?.trim())
141
+ .map((c) => ({
142
+ name: c.name.trim(),
143
+ group: c.section?.name?.trim() || undefined,
144
+ note: c.description?.trim() || undefined,
145
+ }));
146
+ }
147
+ function colorHex(c) {
148
+ const to2 = (n) => Math.max(0, Math.min(255, Math.round(n ?? 0)))
149
+ .toString(16)
150
+ .padStart(2, '0');
151
+ const hex = `#${to2(c.r)}${to2(c.g)}${to2(c.b)}`;
152
+ return c.a != null && c.a < 1 ? `${hex} (a=${c.a.toFixed(2)})` : hex;
153
+ }
154
+ /** Map Zeplin design tokens (colours / typography / spacing) into source-neutral tokens. */
155
+ export function zeplinTokens(tokens) {
156
+ if (!tokens)
157
+ return [];
158
+ const out = [];
159
+ for (const c of tokens.colors ?? []) {
160
+ if (c.name?.trim())
161
+ out.push({ collection: 'Colors', name: c.name.trim(), value: colorHex(c) });
162
+ }
163
+ for (const t of tokens.text_styles ?? []) {
164
+ if (!t.name?.trim())
165
+ continue;
166
+ const value = [t.font_family, t.font_size != null ? `${t.font_size}px` : null]
167
+ .filter(Boolean)
168
+ .join(' ');
169
+ out.push({ collection: 'Typography', name: t.name.trim(), value: value || '—' });
170
+ }
171
+ for (const s of [...(tokens.spacing ?? []), ...(tokens.measurements ?? [])]) {
172
+ if (s.name?.trim()) {
173
+ out.push({ collection: 'Spacing', name: s.name.trim(), value: String(s.value ?? '') });
174
+ }
175
+ }
176
+ return out;
177
+ }
178
+ /** Assemble the fetched Zeplin pieces into the shared {@link DesignContext}. */
179
+ export function buildZeplinDesignContext(input) {
180
+ const { projectId, screenId } = splitZeplinExternalId(input.externalId);
181
+ const title = screenId && input.screens[0]?.name?.trim()
182
+ ? `${input.projectName || projectId} — ${input.screens[0].name.trim()}`
183
+ : input.projectName || projectId;
184
+ return {
185
+ title,
186
+ url: zeplinUrlFor(input.externalId),
187
+ blocks: zeplinScreensToBlocks(input.screens),
188
+ components: zeplinComponentsToDesign(input.components),
189
+ tokens: zeplinTokens(input.designTokens),
190
+ references: [],
191
+ };
192
+ }
193
+ //# sourceMappingURL=zeplin.logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zeplin.logic.js","sourceRoot":"","sources":["../../../src/modules/documents/zeplin.logic.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"environments.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/environments/environments.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAS7E,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,aAAa,CAAA;AAC7C,uFAAuF;AACvF,eAAO,MAAM,sBAAsB,gBAAgB,CAAA;AAEnD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEvD;AAuGD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,KAAK,SAAQ,EACb,MAAM,GAAE,eAA0C,GACjD,IAAI,CAyBN;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAQpC;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,mBAAmB,EAAE,CAEhF;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,mBAAmB,EAAE,EAC7B,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,GAC3B,MAAM,EAAE,CAKV;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,MAAM,GAAE,eAA0C,EAClD,SAAS,SAAS,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAmB/B;AAED,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAWvF;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CASlE;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAOzF;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,SAAS,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,iBAAiB,CAAA;CAAE,EAAE,GAAG,SAAS,EAChE,QAAQ,EAAE,iBAAiB,GAC1B,iBAAiB,CAMnB;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAC5B,MAAM,EAAE,iBAAiB,EACzB,MAAM,CAAC,EAAE,uBAAuB,GAAG,IAAI,GACtC,iBAAiB,CAenB;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAU7D"}
1
+ {"version":3,"file":"environments.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/environments/environments.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAc7E,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,aAAa,CAAA;AAC7C,uFAAuF;AACvF,eAAO,MAAM,sBAAsB,gBAAgB,CAAA;AAEnD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEvD;AAeD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,KAAK,SAAQ,EACb,MAAM,GAAE,eAA0C,GACjD,IAAI,CAyBN;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAQpC;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,mBAAmB,EAAE,CAEhF;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,mBAAmB,EAAE,EAC7B,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,GAC3B,MAAM,EAAE,CAKV;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,MAAM,GAAE,eAA0C,EAClD,SAAS,SAAS,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAmB/B;AAED,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAWvF;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CASlE;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAOzF;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,SAAS,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,iBAAiB,CAAA;CAAE,EAAE,GAAG,SAAS,EAChE,QAAQ,EAAE,iBAAiB,GAC1B,iBAAiB,CAMnB;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAC5B,MAAM,EAAE,iBAAiB,EACzB,MAAM,CAAC,EAAE,uBAAuB,GAAG,IAAI,GACtC,iBAAiB,CAenB;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAU7D"}
@@ -1,4 +1,4 @@
1
- import { getErrorMessage, STRICT_URL_SAFETY_POLICY, ValidationError } from '@cat-factory/kernel';
1
+ import { getErrorMessage, isBlockedPrivateHost, STRICT_URL_SAFETY_POLICY, ValidationError, } from '@cat-factory/kernel';
2
2
  // Pure helpers for the ephemeral-environment integration: SSRF validation of the
3
3
  // URLs we fetch/expose, `{{var}}` interpolation over a bounded scope, dot-path
4
4
  // extraction from an arbitrary self-rolled response, status mapping and expiry
@@ -16,103 +16,6 @@ export const ENVIRONMENT_BLOCK_TYPE = 'environment';
16
16
  export function isDeployStep(agentKind) {
17
17
  return agentKind === DEPLOYER_AGENT_KIND;
18
18
  }
19
- /** Whether a decoded IPv4 address is loopback / link-local (metadata) / RFC1918. */
20
- function isPrivateV4(parts) {
21
- const [a, b] = parts;
22
- if (a === 127 || a === 0 || a === 10)
23
- return true;
24
- if (a === 169 && b === 254)
25
- return true;
26
- if (a === 192 && b === 168)
27
- return true;
28
- if (a === 172 && b >= 16 && b <= 31)
29
- return true;
30
- return false;
31
- }
32
- /** Parse a plain dotted-decimal IPv4 literal (each octet 0-255), or null. */
33
- function decimalV4(host) {
34
- const m = host.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
35
- if (!m)
36
- return null;
37
- const a = Number(m[1]);
38
- const b = Number(m[2]);
39
- const c = Number(m[3]);
40
- const d = Number(m[4]);
41
- if (a > 255 || b > 255 || c > 255 || d > 255)
42
- return null;
43
- return [a, b, c, d];
44
- }
45
- /** Extract the embedded IPv4 of an IPv4-mapped IPv6 literal (`::ffff:…`), or null. */
46
- function mappedV4(host) {
47
- // ::ffff:a.b.c.d
48
- const dotted = host.match(/^::ffff:(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
49
- if (dotted) {
50
- const a = Number(dotted[1]);
51
- const b = Number(dotted[2]);
52
- const c = Number(dotted[3]);
53
- const d = Number(dotted[4]);
54
- if (a > 255 || b > 255 || c > 255 || d > 255)
55
- return null;
56
- return [a, b, c, d];
57
- }
58
- // ::ffff:hhhh:hhhh
59
- const hex = host.match(/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/);
60
- if (hex) {
61
- const hi = parseInt(hex[1] ?? '0', 16);
62
- const lo = parseInt(hex[2] ?? '0', 16);
63
- return [(hi >> 8) & 0xff, hi & 0xff, (lo >> 8) & 0xff, lo & 0xff];
64
- }
65
- return null;
66
- }
67
- /**
68
- * Reject hostnames that point at the worker's own network rather than a public
69
- * host. The generic provider fetches org-supplied URLs (and we surface the
70
- * provisioned env URL to agents), so an unvalidated URL turns the worker into an
71
- * SSRF proxy. Host-literal defence-in-depth: blocks loopback, link-local
72
- * (incl. cloud metadata 169.254.x.x) and the RFC1918 private ranges — including
73
- * the obfuscated encodings (bare integer, hex/octal octets, IPv4-mapped IPv6)
74
- * that trivially bypass a naive dotted-decimal match.
75
- */
76
- function isBlockedHost(hostname) {
77
- const host = hostname.toLowerCase().replace(/^\[|\]$/g, '');
78
- if (host === '')
79
- return true;
80
- if (host === 'localhost' || host.endsWith('.localhost'))
81
- return true;
82
- if (host.endsWith('.internal') || host.endsWith('.local'))
83
- return true;
84
- // IPv6 literals (contain a colon).
85
- if (host.includes(':')) {
86
- if (host === '::1' || host === '::')
87
- return true;
88
- if (host.startsWith('fe80:') || host.startsWith('fc') || host.startsWith('fd'))
89
- return true;
90
- const mapped = mappedV4(host);
91
- if (mapped)
92
- return isPrivateV4(mapped);
93
- return false;
94
- }
95
- // Obfuscated numeric IPv4 forms are never a legitimate public hostname.
96
- // Bare integer (e.g. 2130706433 === 127.0.0.1).
97
- if (/^\d+$/.test(host))
98
- return true;
99
- const labels = host.split('.');
100
- for (const label of labels) {
101
- if (/^0x[0-9a-f]+$/.test(label))
102
- return true; // hex octet (0x7f)
103
- if (/^0[0-9]+$/.test(label))
104
- return true; // octal / leading-zero octet (0177)
105
- }
106
- // Standard dotted-decimal IPv4: public addresses pass, private ones blocked.
107
- const v4 = decimalV4(host);
108
- if (v4)
109
- return isPrivateV4(v4);
110
- // A purely numeric dotted host that is not a valid public dotted-decimal IPv4
111
- // is some other IP encoding we cannot vouch for — reject when in doubt.
112
- if (labels.length > 1 && labels.every((l) => /^\d+$/.test(l)))
113
- return true;
114
- return false;
115
- }
116
19
  /**
117
20
  * Whether `host` is exempt from the private/internal-host block under `policy`.
118
21
  * An allow-list entry matches the hostname case-insensitively, either exactly or as a
@@ -158,7 +61,7 @@ export function assertSafeEnvironmentUrl(url, label = 'URL', policy = STRICT_URL
158
61
  }
159
62
  if (host === '')
160
63
  throw invalid();
161
- if (!hostExempt(host, policy) && isBlockedHost(host)) {
64
+ if (!hostExempt(host, policy) && isBlockedPrivateHost(host)) {
162
65
  throw new ValidationError(`Environment ${label} must be a public host`);
163
66
  }
164
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"environments.logic.js","sourceRoot":"","sources":["../../../src/modules/environments/environments.logic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"environments.logic.js","sourceRoot":"","sources":["../../../src/modules/environments/environments.logic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { ConnectionTestResult, KubernetesRunnerConfig, RunnerDispatchKind, RunnerDispatchOptions, RunnerJobRef, RunnerJobView, RunnerTransport, SecretResolver } from '@cat-factory/kernel';
2
+ export declare class KubernetesRunnerTransport implements RunnerTransport {
3
+ private readonly config;
4
+ private readonly resolveSecret;
5
+ constructor(config: KubernetesRunnerConfig, resolveSecret: SecretResolver);
6
+ dispatch(ref: RunnerJobRef, spec: Record<string, unknown>, kind?: RunnerDispatchKind, options?: RunnerDispatchOptions): Promise<void>;
7
+ poll(ref: RunnerJobRef): Promise<RunnerJobView>;
8
+ /** Reclaim the run's pod (idempotent — a missing pod is a no-op). */
9
+ release(ref: RunnerJobRef): Promise<void>;
10
+ /** Probe the apiserver with the configured token (lists pods; nothing created). */
11
+ testConnection(): Promise<ConnectionTestResult>;
12
+ private ensurePod;
13
+ private waitForPodReady;
14
+ private proxyFetch;
15
+ private apiFetch;
16
+ /**
17
+ * Build the undici dispatcher carrying the cluster CA / insecure-skip flag, when
18
+ * configured. A kube-apiserver usually presents a private CA, which `fetch` can't
19
+ * verify without this. Loaded lazily (Node only) so the Worker bundle never pulls
20
+ * in `undici`; on a runtime without it, a custom-CA/insecure config fails clearly.
21
+ *
22
+ * The Agent is cached at MODULE scope keyed by the CA/insecure pair, not per
23
+ * instance: the wiring builds a fresh transport on every dispatch/poll resolve, so
24
+ * a per-instance cache would create (and abandon) one Agent — a TLS connection pool
25
+ * — per poll tick, defeating keep-alive and leaking sockets.
26
+ */
27
+ private tlsDispatcher;
28
+ }
29
+ //# sourceMappingURL=KubernetesRunnerTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KubernetesRunnerTransport.d.ts","sourceRoot":"","sources":["../../../src/modules/kubernetes/KubernetesRunnerTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACf,MAAM,qBAAqB,CAAA;AA0C5B,qBAAa,yBAA0B,YAAW,eAAe;IAE7D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAFhC,YACmB,MAAM,EAAE,sBAAsB,EAC9B,aAAa,EAAE,cAAc,EAC5C;IAEE,QAAQ,CACZ,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,GAAE,kBAA4B,EAClC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAQf;IAEK,IAAI,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAmBpD;IAED,qEAAqE;IAC/D,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB9C;IAED,mFAAmF;IAC7E,cAAc,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAqBpD;YAIa,SAAS;YAaT,eAAe;IA0B7B,OAAO,CAAC,UAAU;YAUJ,QAAQ;IA6BtB;;;;;;;;;;OAUG;YACW,aAAa;CAwB5B"}