@cat-factory/contracts 0.81.0 → 0.81.2
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/frontend.d.ts +33 -0
- package/dist/frontend.d.ts.map +1 -1
- package/dist/frontend.js +53 -0
- package/dist/frontend.js.map +1 -1
- package/dist/routes/tasks.d.ts +3 -0
- package/dist/routes/tasks.d.ts.map +1 -1
- package/dist/routes/tasks.js +7 -0
- package/dist/routes/tasks.js.map +1 -1
- package/dist/visual-pipeline.d.ts +18 -0
- package/dist/visual-pipeline.d.ts.map +1 -1
- package/dist/visual-pipeline.js +32 -0
- package/dist/visual-pipeline.js.map +1 -1
- package/package.json +1 -1
package/dist/frontend.d.ts
CHANGED
|
@@ -8,6 +8,29 @@ import * as v from 'valibot';
|
|
|
8
8
|
* lock-step.)
|
|
9
9
|
*/
|
|
10
10
|
export declare const DEFAULT_FRONTEND_MOCK_MAPPINGS_PATH = "mocks/";
|
|
11
|
+
/**
|
|
12
|
+
* The default in-container port the built frontend is served on for a UI test / preview.
|
|
13
|
+
* Deliberately NOT 8080 (the harness's own job HTTP server) nor the WireMock port. Used via
|
|
14
|
+
* {@link resolveFrontendServePort} — the single source of truth for the served port, shared by
|
|
15
|
+
* the server's `resolveServePort` and the reverse-origin derivation (`frontendOriginsForService`)
|
|
16
|
+
* so the tester origin a backend must allow (CORS) can't drift from the port the app is actually
|
|
17
|
+
* served on.
|
|
18
|
+
*/
|
|
19
|
+
export declare const DEFAULT_FRONTEND_SERVE_PORT = 4173;
|
|
20
|
+
/** The in-container port the harness's own job HTTP server binds — a frontend must never serve on it. */
|
|
21
|
+
export declare const FRONTEND_HARNESS_JOB_PORT = 8080;
|
|
22
|
+
/** The in-container port WireMock binds for a frontend UI test (backend-chosen, not user config). */
|
|
23
|
+
export declare const FRONTEND_WIREMOCK_PORT = 8089;
|
|
24
|
+
/**
|
|
25
|
+
* The port a `frontend` frame's app is ACTUALLY served on: the user's `servePort` unless it
|
|
26
|
+
* collides with a reserved in-container port ({@link FRONTEND_HARNESS_JOB_PORT} 8080, or
|
|
27
|
+
* {@link FRONTEND_WIREMOCK_PORT} 8089), in which case it would fail to bind (or steal WireMock's
|
|
28
|
+
* port), so we fall back to {@link DEFAULT_FRONTEND_SERVE_PORT}. The inspector steers users to
|
|
29
|
+
* 4173, but nothing stops them typing a reserved port, so guard here. Shared by the harness infra
|
|
30
|
+
* spec (`buildFrontendInfraSpec`) and the reverse-origin derivation (`frontendOriginsForService`)
|
|
31
|
+
* so the served port and the CORS origin a backend must allow can't drift.
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveFrontendServePort(requested: number | undefined): number;
|
|
11
34
|
/** The package manager the frontend build uses. Defaults to `pnpm`. */
|
|
12
35
|
export declare const frontendPackageManagerSchema: v.PicklistSchema<["pnpm", "npm", "yarn"], undefined>;
|
|
13
36
|
export type FrontendPackageManager = v.InferOutput<typeof frontendPackageManagerSchema>;
|
|
@@ -62,6 +85,16 @@ export declare const frontendBackendBindingSchema: v.ObjectSchema<{
|
|
|
62
85
|
}, undefined>], undefined>;
|
|
63
86
|
}, undefined>;
|
|
64
87
|
export type FrontendBackendBinding = v.InferOutput<typeof frontendBackendBindingSchema>;
|
|
88
|
+
/**
|
|
89
|
+
* The non-empty `envVar` names that appear on MORE THAN ONE backend binding. Two bindings
|
|
90
|
+
* sharing an env var is a real misconfiguration — the injected env is a map, so one silently
|
|
91
|
+
* clobbers the other (`resolveFrontendBindings` keeps the last). Advisory only: this is NOT a
|
|
92
|
+
* `v.check` on {@link frontendConfigSchema}, because a binding row persists per-blur and allows
|
|
93
|
+
* an empty `envVar` (a freshly-added row), so a schema-level reject would 422 a mid-edit PATCH
|
|
94
|
+
* (e.g. duplicate a row, then rename it). The inspector + the run-start soft note surface it
|
|
95
|
+
* instead. Empty names are ignored (an unfinished row is inert). Sorted for stable output.
|
|
96
|
+
*/
|
|
97
|
+
export declare function duplicateBindingEnvVars(config: Pick<FrontendConfig, 'backendBindings'>): string[];
|
|
65
98
|
/**
|
|
66
99
|
* Which branch the frontend is built from for a UI test / preview:
|
|
67
100
|
* - `'default'` — the frontend repo's default branch (the baseline).
|
package/dist/frontend.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontend.d.ts","sourceRoot":"","sources":["../src/frontend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAe5B;;;;;;;GAOG;AACH,eAAO,MAAM,mCAAmC,WAAW,CAAA;AAE3D,uEAAuE;AACvE,eAAO,MAAM,4BAA4B,sDAAsC,CAAA;AAC/E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAEvF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,oDAAoC,CAAA;AACxE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,mDAAmC,CAAA;AAC1E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B;;;;;0BAQtC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAErF;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B;IACvC;;;;;OAKG;;;;;;;;aAGH,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAEvF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB;;;;;0BAM/B,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB;IAC/B,yDAAyD;;IAEzD,kFAAkF;;IAElF,6EAA6E;;IAE7E,6EAA6E;;IAE7E,qDAAqD;;IAErD,+EAA+E;;IAE/E;;;OAGG;;IAEH,2EAA2E;;IAE3E,qFAAqF;;;;;;;IAErF;;;;;OAKG;;IAEH,0DAA0D;;IAE1D;;;;OAIG;;
|
|
1
|
+
{"version":3,"file":"frontend.d.ts","sourceRoot":"","sources":["../src/frontend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAe5B;;;;;;;GAOG;AACH,eAAO,MAAM,mCAAmC,WAAW,CAAA;AAE3D;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,OAAO,CAAA;AAE/C,yGAAyG;AACzG,eAAO,MAAM,yBAAyB,OAAO,CAAA;AAE7C,qGAAqG;AACrG,eAAO,MAAM,sBAAsB,OAAO,CAAA;AAE1C;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAM9E;AAED,uEAAuE;AACvE,eAAO,MAAM,4BAA4B,sDAAsC,CAAA;AAC/E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAEvF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,oDAAoC,CAAA;AACxE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,mDAAmC,CAAA;AAC1E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B;;;;;0BAQtC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAErF;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B;IACvC;;;;;OAKG;;;;;;;;aAGH,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAEvF;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,MAAM,EAAE,CAUjG;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB;;;;;0BAM/B,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB;IAC/B,yDAAyD;;IAEzD,kFAAkF;;IAElF,6EAA6E;;IAE7E,6EAA6E;;IAE7E,qDAAqD;;IAErD,+EAA+E;;IAE/E;;;OAGG;;IAEH,2EAA2E;;IAE3E,qFAAqF;;;;;;;IAErF;;;;;OAKG;;IAEH,0DAA0D;;IAE1D;;;;OAIG;;QA3FH;;;;;WAKG;;;;;;;;;aAwFH,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA"}
|
package/dist/frontend.js
CHANGED
|
@@ -20,6 +20,36 @@ import * as v from 'valibot';
|
|
|
20
20
|
* lock-step.)
|
|
21
21
|
*/
|
|
22
22
|
export const DEFAULT_FRONTEND_MOCK_MAPPINGS_PATH = 'mocks/';
|
|
23
|
+
/**
|
|
24
|
+
* The default in-container port the built frontend is served on for a UI test / preview.
|
|
25
|
+
* Deliberately NOT 8080 (the harness's own job HTTP server) nor the WireMock port. Used via
|
|
26
|
+
* {@link resolveFrontendServePort} — the single source of truth for the served port, shared by
|
|
27
|
+
* the server's `resolveServePort` and the reverse-origin derivation (`frontendOriginsForService`)
|
|
28
|
+
* so the tester origin a backend must allow (CORS) can't drift from the port the app is actually
|
|
29
|
+
* served on.
|
|
30
|
+
*/
|
|
31
|
+
export const DEFAULT_FRONTEND_SERVE_PORT = 4173;
|
|
32
|
+
/** The in-container port the harness's own job HTTP server binds — a frontend must never serve on it. */
|
|
33
|
+
export const FRONTEND_HARNESS_JOB_PORT = 8080;
|
|
34
|
+
/** The in-container port WireMock binds for a frontend UI test (backend-chosen, not user config). */
|
|
35
|
+
export const FRONTEND_WIREMOCK_PORT = 8089;
|
|
36
|
+
/**
|
|
37
|
+
* The port a `frontend` frame's app is ACTUALLY served on: the user's `servePort` unless it
|
|
38
|
+
* collides with a reserved in-container port ({@link FRONTEND_HARNESS_JOB_PORT} 8080, or
|
|
39
|
+
* {@link FRONTEND_WIREMOCK_PORT} 8089), in which case it would fail to bind (or steal WireMock's
|
|
40
|
+
* port), so we fall back to {@link DEFAULT_FRONTEND_SERVE_PORT}. The inspector steers users to
|
|
41
|
+
* 4173, but nothing stops them typing a reserved port, so guard here. Shared by the harness infra
|
|
42
|
+
* spec (`buildFrontendInfraSpec`) and the reverse-origin derivation (`frontendOriginsForService`)
|
|
43
|
+
* so the served port and the CORS origin a backend must allow can't drift.
|
|
44
|
+
*/
|
|
45
|
+
export function resolveFrontendServePort(requested) {
|
|
46
|
+
if (requested === undefined)
|
|
47
|
+
return DEFAULT_FRONTEND_SERVE_PORT;
|
|
48
|
+
if (requested === FRONTEND_HARNESS_JOB_PORT || requested === FRONTEND_WIREMOCK_PORT) {
|
|
49
|
+
return DEFAULT_FRONTEND_SERVE_PORT;
|
|
50
|
+
}
|
|
51
|
+
return requested;
|
|
52
|
+
}
|
|
23
53
|
/** The package manager the frontend build uses. Defaults to `pnpm`. */
|
|
24
54
|
export const frontendPackageManagerSchema = v.picklist(['pnpm', 'npm', 'yarn']);
|
|
25
55
|
/**
|
|
@@ -67,6 +97,29 @@ export const frontendBackendBindingSchema = v.object({
|
|
|
67
97
|
envVar: v.pipe(v.string(), v.trim(), v.maxLength(200)),
|
|
68
98
|
source: frontendBackendSourceSchema,
|
|
69
99
|
});
|
|
100
|
+
/**
|
|
101
|
+
* The non-empty `envVar` names that appear on MORE THAN ONE backend binding. Two bindings
|
|
102
|
+
* sharing an env var is a real misconfiguration — the injected env is a map, so one silently
|
|
103
|
+
* clobbers the other (`resolveFrontendBindings` keeps the last). Advisory only: this is NOT a
|
|
104
|
+
* `v.check` on {@link frontendConfigSchema}, because a binding row persists per-blur and allows
|
|
105
|
+
* an empty `envVar` (a freshly-added row), so a schema-level reject would 422 a mid-edit PATCH
|
|
106
|
+
* (e.g. duplicate a row, then rename it). The inspector + the run-start soft note surface it
|
|
107
|
+
* instead. Empty names are ignored (an unfinished row is inert). Sorted for stable output.
|
|
108
|
+
*/
|
|
109
|
+
export function duplicateBindingEnvVars(config) {
|
|
110
|
+
const seen = new Set();
|
|
111
|
+
const duplicates = new Set();
|
|
112
|
+
for (const binding of config.backendBindings) {
|
|
113
|
+
const name = binding.envVar.trim();
|
|
114
|
+
if (!name)
|
|
115
|
+
continue;
|
|
116
|
+
if (seen.has(name))
|
|
117
|
+
duplicates.add(name);
|
|
118
|
+
else
|
|
119
|
+
seen.add(name);
|
|
120
|
+
}
|
|
121
|
+
return [...duplicates].sort();
|
|
122
|
+
}
|
|
70
123
|
/**
|
|
71
124
|
* Which branch the frontend is built from for a UI test / preview:
|
|
72
125
|
* - `'default'` — the frontend repo's default branch (the baseline).
|
package/dist/frontend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontend.js","sourceRoot":"","sources":["../src/frontend.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"frontend.js","sourceRoot":"","sources":["../src/frontend.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/tasks.d.ts
CHANGED
|
@@ -305,6 +305,9 @@ export declare const getLinearInstallUrlContract: {
|
|
|
305
305
|
export declare const listTasksContract: {
|
|
306
306
|
readonly method: "get";
|
|
307
307
|
readonly pathResolver: () => string;
|
|
308
|
+
readonly requestQuerySchema: v.ObjectSchema<{
|
|
309
|
+
readonly blockId: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
310
|
+
}, undefined>;
|
|
308
311
|
readonly responsesByStatusCode: {
|
|
309
312
|
readonly '4xx': v.ObjectSchema<{
|
|
310
313
|
readonly error: v.ObjectSchema<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/routes/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAA;AAC3E,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAuD5B,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIlC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMvC,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAItC,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMpC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKvC,CAAA;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMrC,CAAA;AAIF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIlC,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAItC,CAAA;AAEF,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/routes/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAA;AAC3E,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAuD5B,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIlC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMvC,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAItC,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMpC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKvC,CAAA;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMrC,CAAA;AAIF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIlC,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAItC,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAW5B,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM7B,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM9B,CAAA;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAK3B,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKtC,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM5B,CAAA"}
|
package/dist/routes/tasks.js
CHANGED
|
@@ -88,6 +88,13 @@ export const getLinearInstallUrlContract = defineApiContract({
|
|
|
88
88
|
export const listTasksContract = defineApiContract({
|
|
89
89
|
method: 'get',
|
|
90
90
|
pathResolver: () => '/tasks',
|
|
91
|
+
// `blockId` (a service frame or a task/module under one) scopes the listed issues
|
|
92
|
+
// to that service's linked repository for a repo-backed source (GitHub Issues) —
|
|
93
|
+
// exactly as `searchTasks` does — so the quick-pick list never leaks in issues from
|
|
94
|
+
// sibling repos. Repo-less sources are unaffected. Omitted → the whole workspace.
|
|
95
|
+
requestQuerySchema: v.object({
|
|
96
|
+
blockId: v.optional(v.pipe(v.string(), v.trim(), v.minLength(1))),
|
|
97
|
+
}),
|
|
91
98
|
responsesByStatusCode: { 200: taskListSchema, ...errorResponses },
|
|
92
99
|
});
|
|
93
100
|
export const importTaskContract = defineApiContract({
|
package/dist/routes/tasks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/routes/tasks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/routes/tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,4 +27,22 @@ export declare function pipelineHasVisualStep(pipeline: Pick<Pipeline, 'agentKin
|
|
|
27
27
|
* frontend→service links (never a per-frame point read).
|
|
28
28
|
*/
|
|
29
29
|
export declare function frameAllowsVisualPipeline(frame: Pick<Block, 'id' | 'type'> | undefined | null, blocks: readonly Pick<Block, 'level' | 'type' | 'frontendConfig'>[]): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* The browser origins of every `frontend` frame that binds `serviceFrameId` as a backend
|
|
32
|
+
* service — the origins that service's ephemeral env must accept (CORS; also OAuth callback
|
|
33
|
+
* hosts). It is the REVERSE of `FrontendConfig.backendBindings` (frontend→service) and mirrors
|
|
34
|
+
* `frameAllowsVisualPipeline`'s single-pass scan (never a per-frame point read): a deployer
|
|
35
|
+
* exposes the result as `{{input.frontendOrigins}}` so an operator's `secretInjections`
|
|
36
|
+
* `valueTemplate` / helm `--set` can fold it into the backend's CORS env var.
|
|
37
|
+
*
|
|
38
|
+
* Only a binding with a NON-EMPTY `envVar` counts: an empty-`envVar` row is filtered out of the
|
|
39
|
+
* injected env (the frontend never receives that backend's URL, so its browser never calls it,
|
|
40
|
+
* so no cross-origin request to allow). Each contributing frontend emits its tester origin
|
|
41
|
+
* `http://localhost:<servePort>` — the port the app is ACTUALLY served on
|
|
42
|
+
* (`resolveFrontendServePort`, which sanitizes a reserved-port collision to the default), so the
|
|
43
|
+
* injected CORS origin can't drift from the served port. Deduped + sorted for a stable comma-join.
|
|
44
|
+
* (The browsable-preview origin is a local-mode differentiator added once the preview host port is
|
|
45
|
+
* pinned — see the frontend-preview initiative.)
|
|
46
|
+
*/
|
|
47
|
+
export declare function frontendOriginsForService(serviceFrameId: string, blocks: readonly Pick<Block, 'level' | 'type' | 'frontendConfig'>[]): string[];
|
|
30
48
|
//# sourceMappingURL=visual-pipeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual-pipeline.d.ts","sourceRoot":"","sources":["../src/visual-pipeline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"visual-pipeline.d.ts","sourceRoot":"","sources":["../src/visual-pipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAepD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,cAAc,CAAA;AAE/C;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,wBAAwB,CAAA;AAE9D,sFAAsF;AACtF,eAAO,MAAM,iBAAiB,+CAA6D,CAAA;AAE3F,yFAAyF;AACzF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,OAAO,CAIrF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAAC,GAAG,SAAS,GAAG,IAAI,EACpD,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,gBAAgB,CAAC,EAAE,GAClE,OAAO,CAWT;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,gBAAgB,CAAC,EAAE,GAClE,MAAM,EAAE,CAcV"}
|
package/dist/visual-pipeline.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolveFrontendServePort } from './frontend.js';
|
|
1
2
|
// ---------------------------------------------------------------------------
|
|
2
3
|
// Visual-pipeline gating (shared by the SPA surface + the backend run-start gate).
|
|
3
4
|
//
|
|
@@ -48,4 +49,35 @@ export function frameAllowsVisualPipeline(frame, blocks) {
|
|
|
48
49
|
b.type === 'frontend' &&
|
|
49
50
|
(b.frontendConfig?.backendBindings ?? []).some((bind) => bind.source.kind === 'service' && bind.source.serviceBlockId === frame.id));
|
|
50
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* The browser origins of every `frontend` frame that binds `serviceFrameId` as a backend
|
|
54
|
+
* service — the origins that service's ephemeral env must accept (CORS; also OAuth callback
|
|
55
|
+
* hosts). It is the REVERSE of `FrontendConfig.backendBindings` (frontend→service) and mirrors
|
|
56
|
+
* `frameAllowsVisualPipeline`'s single-pass scan (never a per-frame point read): a deployer
|
|
57
|
+
* exposes the result as `{{input.frontendOrigins}}` so an operator's `secretInjections`
|
|
58
|
+
* `valueTemplate` / helm `--set` can fold it into the backend's CORS env var.
|
|
59
|
+
*
|
|
60
|
+
* Only a binding with a NON-EMPTY `envVar` counts: an empty-`envVar` row is filtered out of the
|
|
61
|
+
* injected env (the frontend never receives that backend's URL, so its browser never calls it,
|
|
62
|
+
* so no cross-origin request to allow). Each contributing frontend emits its tester origin
|
|
63
|
+
* `http://localhost:<servePort>` — the port the app is ACTUALLY served on
|
|
64
|
+
* (`resolveFrontendServePort`, which sanitizes a reserved-port collision to the default), so the
|
|
65
|
+
* injected CORS origin can't drift from the served port. Deduped + sorted for a stable comma-join.
|
|
66
|
+
* (The browsable-preview origin is a local-mode differentiator added once the preview host port is
|
|
67
|
+
* pinned — see the frontend-preview initiative.)
|
|
68
|
+
*/
|
|
69
|
+
export function frontendOriginsForService(serviceFrameId, blocks) {
|
|
70
|
+
const origins = new Set();
|
|
71
|
+
for (const b of blocks) {
|
|
72
|
+
if (b.level !== 'frame' || b.type !== 'frontend' || !b.frontendConfig)
|
|
73
|
+
continue;
|
|
74
|
+
const bindsService = b.frontendConfig.backendBindings.some((bind) => bind.source.kind === 'service' &&
|
|
75
|
+
bind.source.serviceBlockId === serviceFrameId &&
|
|
76
|
+
bind.envVar.trim().length > 0);
|
|
77
|
+
if (!bindsService)
|
|
78
|
+
continue;
|
|
79
|
+
origins.add(`http://localhost:${resolveFrontendServePort(b.frontendConfig.servePort)}`);
|
|
80
|
+
}
|
|
81
|
+
return [...origins].sort();
|
|
82
|
+
}
|
|
51
83
|
//# sourceMappingURL=visual-pipeline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual-pipeline.js","sourceRoot":"","sources":["../src/visual-pipeline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"visual-pipeline.js","sourceRoot":"","sources":["../src/visual-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAGxD,8EAA8E;AAC9E,mFAAmF;AACnF,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,gFAAgF;AAChF,iFAAiF;AACjF,kFAAkF;AAClF,oFAAoF;AACpF,iFAAiF;AACjF,iFAAiF;AACjF,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAA;AAE/C;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,qBAAqB,CAAA;AAE9D,sFAAsF;AACtF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,oBAAoB,EAAE,yBAAyB,CAAU,CAAA;AAE3F,yFAAyF;AACzF,MAAM,UAAU,qBAAqB,CAAC,QAAsC;IAC1E,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,CAC7B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,oBAAoB,IAAI,IAAI,KAAK,yBAAyB,CAC9E,CAAA;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAAoD,EACpD,MAAmE;IAEnE,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IACxB,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAA;IAC1C,OAAO,MAAM,CAAC,IAAI,CAChB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,KAAK,KAAK,OAAO;QACnB,CAAC,CAAC,IAAI,KAAK,UAAU;QACrB,CAAC,CAAC,CAAC,cAAc,EAAE,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,CAC5C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,KAAK,CAAC,EAAE,CACpF,CACJ,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,yBAAyB,CACvC,cAAsB,EACtB,MAAmE;IAEnE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,cAAc;YAAE,SAAQ;QAC/E,MAAM,YAAY,GAAG,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CACxD,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS;YAC9B,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,cAAc;YAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAChC,CAAA;QACD,IAAI,CAAC,YAAY;YAAE,SAAQ;QAC3B,OAAO,CAAC,GAAG,CAAC,oBAAoB,wBAAwB,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IACzF,CAAC;IACD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;AAC5B,CAAC"}
|