veryfront 0.1.894 → 0.1.896
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/esm/deno.js +1 -1
- package/esm/src/server/handlers/request/project-run-execute.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/project-run-execute.handler.js +83 -6
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
package/esm/deno.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-run-execute.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/project-run-execute.handler.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,KAAK,cAAc,EAAgB,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAW,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAE,KAAK,cAAc,EAAgB,MAAM,4BAA4B,CAAC;AAE/E,OAAO,EACL,KAAK,6BAA6B,EAEnC,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EAGd,UAAU,EACV,cAAc,EACf,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,KAAK,kBAAkB,EAAoB,MAAM,sCAAsC,CAAC;AAEjG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGvE,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"project-run-execute.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/project-run-execute.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
|
|
|
19
19
|
const EXECUTE_PATH_REGEX = /^\/api\/control-plane\/runs\/([^/]+)\/execute$/;
|
|
20
20
|
const DEFAULT_WORKFLOW_STATUS_POLL_INTERVAL_MS = 100;
|
|
21
21
|
const DEFAULT_WORKFLOW_STATUS_TIMEOUT_MS = 15 * 60 * 1_000;
|
|
22
|
+
const DEFAULT_LOCAL_AG_UI_PORT = 3001;
|
|
22
23
|
const WORKFLOW_PERSISTENCE_REQUIRED_ERROR = "Workflow paused but runtime workflow persistence is not configured";
|
|
23
24
|
function isRecord(value) {
|
|
24
25
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -242,12 +243,88 @@ async function executeWorkflowRun(request, ctx, deps) {
|
|
|
242
243
|
function getRuntimeApiToken(req, ctx) {
|
|
243
244
|
return req.headers.get("x-token") ?? ctx.proxyToken ?? ctx.requestContext?.token ?? "";
|
|
244
245
|
}
|
|
245
|
-
function
|
|
246
|
+
function getHeaderFirstValue(value) {
|
|
247
|
+
return value?.split(",")[0]?.trim() || undefined;
|
|
248
|
+
}
|
|
249
|
+
function getForwardedProtocol(req) {
|
|
250
|
+
const value = getHeaderFirstValue(req.headers.get("x-forwarded-proto"))?.replace(/:$/, "");
|
|
251
|
+
return value === "http" || value === "https" ? `${value}:` : undefined;
|
|
252
|
+
}
|
|
253
|
+
function getRequestOriginCandidates(req) {
|
|
246
254
|
const url = new URL(req.url);
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
255
|
+
const protocols = new Set([url.protocol]);
|
|
256
|
+
const forwardedProtocol = getForwardedProtocol(req);
|
|
257
|
+
if (forwardedProtocol)
|
|
258
|
+
protocols.add(forwardedProtocol);
|
|
259
|
+
const hosts = new Set([url.host]);
|
|
260
|
+
const hostHeader = getHeaderFirstValue(req.headers.get("host"));
|
|
261
|
+
const forwardedHost = getHeaderFirstValue(req.headers.get("x-forwarded-host"));
|
|
262
|
+
if (hostHeader)
|
|
263
|
+
hosts.add(hostHeader);
|
|
264
|
+
if (forwardedHost)
|
|
265
|
+
hosts.add(forwardedHost);
|
|
266
|
+
const origins = new Set();
|
|
267
|
+
for (const protocol of protocols) {
|
|
268
|
+
for (const host of hosts) {
|
|
269
|
+
origins.add(`${protocol}//${host}`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return origins;
|
|
273
|
+
}
|
|
274
|
+
function isRequestSiblingAgUiEndpoint(endpoint, req) {
|
|
275
|
+
try {
|
|
276
|
+
const endpointUrl = new URL(endpoint);
|
|
277
|
+
if (endpointUrl.pathname !== "/api/ag-ui")
|
|
278
|
+
return false;
|
|
279
|
+
return getRequestOriginCandidates(req).has(endpointUrl.origin);
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
return false;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
function isLocalHostname(hostname) {
|
|
286
|
+
return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1";
|
|
287
|
+
}
|
|
288
|
+
function isInternalRuntimeHostname(hostname) {
|
|
289
|
+
const normalized = hostname.toLowerCase();
|
|
290
|
+
return isLocalHostname(normalized) ||
|
|
291
|
+
normalized === "veryfront-server" ||
|
|
292
|
+
normalized.endsWith(".svc") ||
|
|
293
|
+
normalized.endsWith(".svc.cluster.local");
|
|
294
|
+
}
|
|
295
|
+
function isAgUiEndpoint(endpoint) {
|
|
296
|
+
try {
|
|
297
|
+
return new URL(endpoint).pathname === "/api/ag-ui";
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
return false;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
function requestUsesInternalRuntimeHost(req) {
|
|
304
|
+
return isInternalRuntimeHostname(new URL(req.url).hostname);
|
|
305
|
+
}
|
|
306
|
+
function getRuntimeLocalPort(req) {
|
|
307
|
+
const url = new URL(req.url);
|
|
308
|
+
const requestPort = isLocalHostname(url.hostname) ? url.port : "";
|
|
309
|
+
for (const value of [getHostEnv("PORT"), getHostEnv("VERYFRONT_PORT"), requestPort]) {
|
|
310
|
+
if (!value)
|
|
311
|
+
continue;
|
|
312
|
+
const port = Number.parseInt(value, 10);
|
|
313
|
+
if (Number.isInteger(port) && port > 0 && port <= 65_535)
|
|
314
|
+
return port;
|
|
315
|
+
}
|
|
316
|
+
return DEFAULT_LOCAL_AG_UI_PORT;
|
|
317
|
+
}
|
|
318
|
+
function getLocalAgUiEndpoint(req) {
|
|
319
|
+
return `http://127.0.0.1:${getRuntimeLocalPort(req)}/api/ag-ui`;
|
|
320
|
+
}
|
|
321
|
+
function resolveEvalAgUiEndpoint(req, endpoint) {
|
|
322
|
+
if (endpoint &&
|
|
323
|
+
!isRequestSiblingAgUiEndpoint(endpoint, req) &&
|
|
324
|
+
!(isAgUiEndpoint(endpoint) && requestUsesInternalRuntimeHost(req))) {
|
|
325
|
+
return endpoint;
|
|
326
|
+
}
|
|
327
|
+
return getLocalAgUiEndpoint(req);
|
|
251
328
|
}
|
|
252
329
|
function createRuntimeApiClient(req, ctx) {
|
|
253
330
|
const apiUrl = getEnvironmentConfig().apiBaseUrl;
|
|
@@ -495,7 +572,7 @@ function createEvalAdapterConfig(input) {
|
|
|
495
572
|
throw new Error("Missing project runtime API token");
|
|
496
573
|
}
|
|
497
574
|
return {
|
|
498
|
-
endpoint: input.request.runtimeAgUiEndpoint
|
|
575
|
+
endpoint: resolveEvalAgUiEndpoint(input.req, input.request.runtimeAgUiEndpoint),
|
|
499
576
|
authToken,
|
|
500
577
|
agentId: getEvalTargetAgentId(input.definition),
|
|
501
578
|
projectId: input.request.projectId,
|