veryfront 0.1.1127 → 0.1.1132
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/cli/commands/eval/command.d.ts +2 -70
- package/esm/cli/commands/eval/command.d.ts.map +1 -1
- package/esm/cli/commands/eval/command.js +207 -550
- package/esm/cli/templates/manifest.d.ts +1 -0
- package/esm/cli/templates/manifest.js +3 -2
- package/esm/deno.js +1 -1
- package/esm/src/agent/hosted/chat-execution-runtime.d.ts.map +1 -1
- package/esm/src/agent/hosted/chat-execution-runtime.js +16 -33
- package/esm/src/agent/hosted/child-fork-tool-sources.d.ts.map +1 -1
- package/esm/src/agent/hosted/child-fork-tool-sources.js +6 -38
- package/esm/src/agent/hosted/hosted-chat-finalization.d.ts +30 -0
- package/esm/src/agent/hosted/hosted-chat-finalization.d.ts.map +1 -0
- package/esm/src/agent/hosted/hosted-chat-finalization.js +249 -0
- package/esm/src/agent/hosted/project-remote-tool-source.d.ts.map +1 -1
- package/esm/src/agent/hosted/project-remote-tool-source.js +4 -23
- package/esm/src/agent/mcp-tool-policy.d.ts +19 -0
- package/esm/src/agent/mcp-tool-policy.d.ts.map +1 -0
- package/esm/src/agent/mcp-tool-policy.js +66 -0
- package/esm/src/agent/runtime/mcp-server-tool-sources.d.ts.map +1 -1
- package/esm/src/agent/runtime/mcp-server-tool-sources.js +8 -44
- package/esm/src/discovery/import-rewriter.d.ts.map +1 -1
- package/esm/src/discovery/import-rewriter.js +7 -90
- package/esm/src/eval/run-report.d.ts +189 -0
- package/esm/src/eval/run-report.d.ts.map +1 -0
- package/esm/src/eval/run-report.js +603 -0
- package/esm/src/html/hydration-script-builder/dev-client-renderer.js +1 -1
- package/esm/src/html/hydration-script-builder/prod-scripts.js +1 -1
- package/esm/src/html/hydration-script-builder/templates/router.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/templates/router.js +35 -11
- package/esm/src/html/utils.d.ts.map +1 -1
- package/esm/src/html/utils.js +19 -45
- package/esm/src/index.client.d.ts +6 -21
- package/esm/src/index.client.d.ts.map +1 -1
- package/esm/src/index.client.js +6 -21
- package/esm/src/modules/server/ssr-import-rewriter.d.ts +2 -26
- package/esm/src/modules/server/ssr-import-rewriter.d.ts.map +1 -1
- package/esm/src/modules/server/ssr-import-rewriter.js +1 -206
- package/esm/src/react/runtime/core.d.ts +22 -0
- package/esm/src/react/runtime/core.d.ts.map +1 -1
- package/esm/src/react/runtime/core.js +1 -1
- package/esm/src/rendering/orchestrator/module-collection.d.ts +8 -0
- package/esm/src/rendering/orchestrator/module-collection.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/module-collection.js +10 -0
- package/esm/src/rendering/orchestrator/pipeline.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/pipeline.js +2 -2
- package/esm/src/routing/api/context-builder.d.ts +7 -0
- package/esm/src/routing/api/context-builder.d.ts.map +1 -1
- package/esm/src/routing/api/context-builder.js +20 -2
- package/esm/src/routing/api/module-loader/external-import-rewriter.d.ts +2 -7
- package/esm/src/routing/api/module-loader/external-import-rewriter.d.ts.map +1 -1
- package/esm/src/routing/api/module-loader/external-import-rewriter.js +10 -209
- package/esm/src/server/dev-server/file-watch-setup.d.ts.map +1 -1
- package/esm/src/server/dev-server/file-watch-setup.js +11 -1
- package/esm/src/server/dev-server/middleware.d.ts.map +1 -1
- package/esm/src/server/dev-server/middleware.js +45 -11
- package/esm/src/server/handlers/dev/files/esbuild-plugins.d.ts.map +1 -1
- package/esm/src/server/handlers/dev/files/esbuild-plugins.js +22 -0
- package/esm/src/server/handlers/request/module/page-data-endpoint-handler.js +24 -1
- package/esm/src/server/handlers/response/not-found.d.ts +0 -1
- package/esm/src/server/handlers/response/not-found.d.ts.map +1 -1
- package/esm/src/server/handlers/response/not-found.js +9 -110
- package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
- package/esm/src/server/runtime-handler/index.js +66 -145
- package/esm/src/server/runtime-handler/project-runtime-context.d.ts +118 -0
- package/esm/src/server/runtime-handler/project-runtime-context.d.ts.map +1 -0
- package/esm/src/server/runtime-handler/project-runtime-context.js +181 -0
- package/esm/src/server/services/rsc/orchestrators/handler.d.ts +3 -1
- package/esm/src/server/services/rsc/orchestrators/handler.d.ts.map +1 -1
- package/esm/src/server/services/rsc/orchestrators/handler.js +13 -8
- package/esm/src/server/services/rsc/orchestrators/render-handler.d.ts +1 -1
- package/esm/src/server/services/rsc/orchestrators/render-handler.d.ts.map +1 -1
- package/esm/src/server/services/rsc/orchestrators/render-handler.js +2 -2
- package/esm/src/transforms/esm/http-cache.d.ts.map +1 -1
- package/esm/src/transforms/esm/http-cache.js +132 -46
- package/esm/src/transforms/esm/import-attributes.d.ts.map +1 -1
- package/esm/src/transforms/esm/import-attributes.js +2 -9
- package/esm/src/transforms/esm/in-flight-manager.d.ts +3 -2
- package/esm/src/transforms/esm/in-flight-manager.d.ts.map +1 -1
- package/esm/src/transforms/esm/in-flight-manager.js +6 -5
- package/esm/src/transforms/import-rewriter/core.d.ts +8 -0
- package/esm/src/transforms/import-rewriter/core.d.ts.map +1 -0
- package/esm/src/transforms/import-rewriter/core.js +27 -0
- package/esm/src/transforms/import-rewriter/import-edit.d.ts +57 -0
- package/esm/src/transforms/import-rewriter/import-edit.d.ts.map +1 -0
- package/esm/src/transforms/import-rewriter/import-edit.js +151 -0
- package/esm/src/transforms/import-rewriter/package-resolution.d.ts +12 -0
- package/esm/src/transforms/import-rewriter/package-resolution.d.ts.map +1 -0
- package/esm/src/transforms/import-rewriter/package-resolution.js +79 -0
- package/esm/src/transforms/import-rewriter/parse-cache.d.ts +4 -42
- package/esm/src/transforms/import-rewriter/parse-cache.d.ts.map +1 -1
- package/esm/src/transforms/import-rewriter/parse-cache.js +3 -134
- package/esm/src/transforms/import-rewriter/route-adapter.d.ts +24 -0
- package/esm/src/transforms/import-rewriter/route-adapter.d.ts.map +1 -0
- package/esm/src/transforms/import-rewriter/route-adapter.js +235 -0
- package/esm/src/transforms/import-rewriter/ssr-adapter.d.ts +27 -0
- package/esm/src/transforms/import-rewriter/ssr-adapter.d.ts.map +1 -0
- package/esm/src/transforms/import-rewriter/ssr-adapter.js +206 -0
- package/esm/src/transforms/import-rewriter/strategies/bare-strategy.d.ts.map +1 -1
- package/esm/src/transforms/import-rewriter/strategies/bare-strategy.js +16 -2
- package/esm/src/transforms/import-rewriter/unified-rewriter.d.ts +0 -4
- package/esm/src/transforms/import-rewriter/unified-rewriter.d.ts.map +1 -1
- package/esm/src/transforms/import-rewriter/unified-rewriter.js +2 -39
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/esm/src/workflow/executor/workflow-executor.d.ts +0 -20
- package/esm/src/workflow/executor/workflow-executor.d.ts.map +1 -1
- package/esm/src/workflow/executor/workflow-executor.js +41 -320
- package/esm/src/workflow/runtime/approval-manager.d.ts.map +1 -1
- package/esm/src/workflow/runtime/approval-manager.js +20 -61
- package/esm/src/workflow/runtime/workflow-run-control.d.ts +95 -0
- package/esm/src/workflow/runtime/workflow-run-control.d.ts.map +1 -0
- package/esm/src/workflow/runtime/workflow-run-control.js +529 -0
- package/esm/src/workflow/worker/run-manager.d.ts.map +1 -1
- package/esm/src/workflow/worker/run-manager.js +18 -92
- package/esm/src/workflow/worker/shared.d.ts +1 -1
- package/esm/src/workflow/worker/shared.d.ts.map +1 -1
- package/esm/src/workflow/worker/shared.js +17 -15
- package/package.json +5 -5
|
@@ -3,6 +3,5 @@ import type { HandlerContext, HandlerMetadata, HandlerResult } from "../types.js
|
|
|
3
3
|
export declare class NotFoundHandler extends BaseHandler {
|
|
4
4
|
metadata: HandlerMetadata;
|
|
5
5
|
handle(req: Request, ctx: HandlerContext): Promise<HandlerResult>;
|
|
6
|
-
private generate404Html;
|
|
7
6
|
}
|
|
8
7
|
//# sourceMappingURL=not-found.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"not-found.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/response/not-found.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"not-found.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/response/not-found.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAUnG,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,QAAQ,EAAE,eAAe,CAIvB;IAEF,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAmClE"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { BaseHandler } from "./base.js";
|
|
2
2
|
import { ResponseBuilder } from "../../../security/index.js";
|
|
3
3
|
import { HTTP_INTERNAL_SERVER_ERROR, HTTP_NOT_FOUND, PRIORITY_FALLBACK, } from "../../../utils/constants/index.js";
|
|
4
|
-
import {
|
|
4
|
+
import { ErrorPages } from "../../utils/error-html.js";
|
|
5
|
+
import { addNonceToHtmlTags } from "../../../html/nonce-injection.js";
|
|
5
6
|
export class NotFoundHandler extends BaseHandler {
|
|
6
7
|
metadata = {
|
|
7
8
|
name: "NotFoundHandler",
|
|
@@ -12,7 +13,13 @@ export class NotFoundHandler extends BaseHandler {
|
|
|
12
13
|
const pathname = new URL(req.url).pathname;
|
|
13
14
|
try {
|
|
14
15
|
const builder = this.createResponseBuilder(ctx);
|
|
15
|
-
|
|
16
|
+
// Render the SAME 404 page as the SSR miss path (ssr.handler /
|
|
17
|
+
// ssr.service) so every not-found — including a fallthrough like
|
|
18
|
+
// /_veryfront/<missing> that never reaches SSR — looks identical.
|
|
19
|
+
// Nonce the inline <style>/<script> exactly like the SSR response builder
|
|
20
|
+
// (ssr-response-builder addNonceToHtmlTags) so the page still renders
|
|
21
|
+
// styled under a strict nonce-based CSP.
|
|
22
|
+
const html = addNonceToHtmlTags(ErrorPages.notFound(pathname), builder.nonce);
|
|
16
23
|
const response = builder
|
|
17
24
|
.withCORS(req, ctx.securityConfig?.cors)
|
|
18
25
|
.withSecurity(ctx.securityConfig ?? undefined, req)
|
|
@@ -29,112 +36,4 @@ export class NotFoundHandler extends BaseHandler {
|
|
|
29
36
|
return Promise.resolve(this.respond(response));
|
|
30
37
|
}
|
|
31
38
|
}
|
|
32
|
-
generate404Html(pathname, nonce) {
|
|
33
|
-
const nonceAttr = buildNonceAttribute(nonce);
|
|
34
|
-
return `<!DOCTYPE html>
|
|
35
|
-
<html lang="en">
|
|
36
|
-
<head>
|
|
37
|
-
<meta charset="utf-8"/>
|
|
38
|
-
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
39
|
-
<title>404 Not Found</title>
|
|
40
|
-
<style${nonceAttr}>
|
|
41
|
-
body {
|
|
42
|
-
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
43
|
-
margin: 0;
|
|
44
|
-
padding: 40px;
|
|
45
|
-
background: #f5f5f5;
|
|
46
|
-
color: #333;
|
|
47
|
-
display: flex;
|
|
48
|
-
flex-direction: column;
|
|
49
|
-
align-items: center;
|
|
50
|
-
justify-content: center;
|
|
51
|
-
min-height: 100vh;
|
|
52
|
-
box-sizing: border-box;
|
|
53
|
-
}
|
|
54
|
-
.container {
|
|
55
|
-
background: white;
|
|
56
|
-
border-radius: 8px;
|
|
57
|
-
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
|
58
|
-
padding: 40px;
|
|
59
|
-
max-width: 600px;
|
|
60
|
-
text-align: center;
|
|
61
|
-
}
|
|
62
|
-
h1 {
|
|
63
|
-
font-size: 48px;
|
|
64
|
-
margin: 0 0 16px 0;
|
|
65
|
-
color: #000;
|
|
66
|
-
}
|
|
67
|
-
h2 {
|
|
68
|
-
font-size: 24px;
|
|
69
|
-
font-weight: normal;
|
|
70
|
-
margin: 0 0 24px 0;
|
|
71
|
-
color: #666;
|
|
72
|
-
}
|
|
73
|
-
p {
|
|
74
|
-
line-height: 1.6;
|
|
75
|
-
margin: 0 0 32px 0;
|
|
76
|
-
color: #666;
|
|
77
|
-
}
|
|
78
|
-
code {
|
|
79
|
-
background: #f5f5f5;
|
|
80
|
-
padding: 2px 6px;
|
|
81
|
-
border-radius: 3px;
|
|
82
|
-
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
|
|
83
|
-
font-size: 14px;
|
|
84
|
-
}
|
|
85
|
-
a {
|
|
86
|
-
color: #0066cc;
|
|
87
|
-
text-decoration: none;
|
|
88
|
-
font-weight: 500;
|
|
89
|
-
transition: color 0.2s;
|
|
90
|
-
}
|
|
91
|
-
a:hover {
|
|
92
|
-
color: #0052a3;
|
|
93
|
-
text-decoration: underline;
|
|
94
|
-
}
|
|
95
|
-
.actions {
|
|
96
|
-
display: flex;
|
|
97
|
-
gap: 16px;
|
|
98
|
-
justify-content: center;
|
|
99
|
-
flex-wrap: wrap;
|
|
100
|
-
}
|
|
101
|
-
.button {
|
|
102
|
-
display: inline-block;
|
|
103
|
-
padding: 12px 24px;
|
|
104
|
-
background: #0066cc;
|
|
105
|
-
color: white;
|
|
106
|
-
border-radius: 6px;
|
|
107
|
-
font-weight: 500;
|
|
108
|
-
transition: background 0.2s;
|
|
109
|
-
}
|
|
110
|
-
.button:hover {
|
|
111
|
-
background: #0052a3;
|
|
112
|
-
text-decoration: none;
|
|
113
|
-
}
|
|
114
|
-
.secondary {
|
|
115
|
-
background: transparent;
|
|
116
|
-
color: #0066cc;
|
|
117
|
-
border: 2px solid #0066cc;
|
|
118
|
-
}
|
|
119
|
-
.secondary:hover {
|
|
120
|
-
background: #0066cc;
|
|
121
|
-
color: white;
|
|
122
|
-
}
|
|
123
|
-
</style>
|
|
124
|
-
</head>
|
|
125
|
-
<body>
|
|
126
|
-
<div class="container">
|
|
127
|
-
<h1>404</h1>
|
|
128
|
-
<h2>Page Not Found</h2>
|
|
129
|
-
<p>
|
|
130
|
-
The path <code>${escapeHtml(pathname)}</code> was not found on this server.
|
|
131
|
-
</p>
|
|
132
|
-
<div class="actions">
|
|
133
|
-
<a href="/" class="button">Go Home</a>
|
|
134
|
-
<a href=".." class="button secondary">Go Back</a>
|
|
135
|
-
</div>
|
|
136
|
-
</div>
|
|
137
|
-
</body>
|
|
138
|
-
</html>`;
|
|
139
|
-
}
|
|
140
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/server/runtime-handler/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/server/runtime-handler/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAkCpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAkErE,OAAO,EAAE,qBAAqB,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAMtF,2CAA2C;AAC3C,eAAO,MAAM,aAAa,4vBAqChB,CAAC;AAEX,6CAA6C;AAC7C,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,mDAAmD;IACnD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA6CD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,IAAI,GAAE,mBAAwB,GAC7B;IAAE,QAAQ,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,iBAAiB,CAAA;CAAE,CAuB5D;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,oFAAoF;IACpF,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,sFAAsF;IACtF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uGAAuG;IACvG,kBAAkB,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;CAC/C;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,IAAI,GAAE,qBAAsC,GAC3C,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAsYnE;AAGD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -11,10 +11,7 @@ import { getConfig } from "../../config/loader.js";
|
|
|
11
11
|
import { errorToRFC9457Response, getErrorMessage, UNKNOWN_ERROR } from "../../errors/index.js";
|
|
12
12
|
import { RouteRegistry } from "../../routing/registry/index.js";
|
|
13
13
|
import { SecurityConfigLoader } from "../../security/http/config.js";
|
|
14
|
-
import { getHostEnv } from "../../platform/compat/process.js";
|
|
15
|
-
import { normalizeSourceIntegrationPolicy } from "../../integrations/source-policy.js";
|
|
16
14
|
import { runWithExactSourceIntegrationPolicy } from "../../integrations/source-policy-context.js";
|
|
17
|
-
import { createRequestContext } from "../context/request-context.js";
|
|
18
15
|
// Handler imports
|
|
19
16
|
import { AuthHandler } from "../../security/http/auth.js";
|
|
20
17
|
import { CsrfHandler } from "../../security/http/csrf/csrf-handler.js";
|
|
@@ -57,19 +54,16 @@ import { ProjectsHandler } from "../handlers/dev/projects/index.js";
|
|
|
57
54
|
// Extracted modules
|
|
58
55
|
import { endRequestTracing, executeWithTracingContext, setProjectAttributes, setRequestAttributes, SpanNames, startRequestTracing, withSpan, } from "./tracing.js";
|
|
59
56
|
import { completeRequestTracking, completeRequestTrackingOnResponseEnd, endContentMetrics, endRequestLifecycle, incrementRequestMetrics, startContentMetrics, startRequestLifecycle, startRequestTracking, timeAsync, } from "./request-lifecycle.js";
|
|
60
|
-
import { extractRequestHeaders, resolveProject } from "./project-resolution.js";
|
|
61
57
|
import { checkRequestIsolation, completeIsolatedRequest, completeIsolatedRequestOnSettlement, createIsolationErrorResponse, startIsolatedRequest, } from "./isolation.js";
|
|
62
|
-
import { resolveAdapter } from "./adapter-factory.js";
|
|
63
58
|
import { defaultDiscoveryCache } from "./local-project-discovery.js";
|
|
64
|
-
import {
|
|
65
|
-
import { buildHandlerContext, buildMinimalContext } from "./handler-context-builder.js";
|
|
59
|
+
import { buildMinimalContext } from "./handler-context-builder.js";
|
|
66
60
|
import { handleProjectsRequest, shouldHandleProjectsUI } from "./projects-handler.js";
|
|
67
|
-
import { HTTP_GATEWAY_TIMEOUT, isLightweightPath, isMonitoringPath
|
|
61
|
+
import { HTTP_GATEWAY_TIMEOUT, isLightweightPath, isMonitoringPath } from "./request-utils.js";
|
|
68
62
|
import { withRequestTimeout } from "./timeout-manager.js";
|
|
69
63
|
import { EnvironmentVariableCache, fetchProjectEnvVars, filterRuntimeProjectEnv, runWithProjectEnv, } from "../project-env/index.js";
|
|
70
64
|
import { SCANNER_PATH_PATTERN } from "../../utils/constants/security.js";
|
|
71
|
-
import { isProxyTrusted } from "../utils/proxy-trust.js";
|
|
72
65
|
import { projectMiddlewareRuntime } from "./project-middleware.js";
|
|
66
|
+
import { prepareProjectRequest, resolveProjectIdentity, resolveProjectRuntimeContext, } from "./project-runtime-context.js";
|
|
73
67
|
// Re-export from dedicated module for lightweight imports
|
|
74
68
|
export { parseProxyEnvironment } from "./proxy-environment.js";
|
|
75
69
|
const baseLogger = getBaseLogger("SERVER");
|
|
@@ -249,36 +243,35 @@ export function createVeryfrontHandler(projectDir, adapter, opts = { projectDir
|
|
|
249
243
|
endRequestLifecycle(lifecycle);
|
|
250
244
|
}
|
|
251
245
|
}
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
const headers = extractRequestHeaders(req, url, proxyTrusted);
|
|
246
|
+
const preparedRequest = await prepareProjectRequest({
|
|
247
|
+
req,
|
|
248
|
+
url,
|
|
249
|
+
isProxyMode,
|
|
250
|
+
adapterEnv: adapter.env,
|
|
251
|
+
});
|
|
252
|
+
const { headers, requestContext: reqCtx } = preparedRequest;
|
|
253
|
+
const { proxyTrusted } = preparedRequest.proxyTrust;
|
|
261
254
|
const loggerContext = {
|
|
262
255
|
logger: logger.child({
|
|
263
256
|
requestId: lifecycle.requestId,
|
|
264
257
|
request_url: req.url,
|
|
265
|
-
domain,
|
|
266
|
-
project_slug:
|
|
267
|
-
project_id:
|
|
268
|
-
release_id:
|
|
269
|
-
branch_id:
|
|
270
|
-
branch_name:
|
|
271
|
-
pathname:
|
|
258
|
+
domain: preparedRequest.loggerFacts.domain,
|
|
259
|
+
project_slug: preparedRequest.loggerFacts.projectSlug,
|
|
260
|
+
project_id: preparedRequest.loggerFacts.projectId,
|
|
261
|
+
release_id: preparedRequest.loggerFacts.releaseId,
|
|
262
|
+
branch_id: preparedRequest.loggerFacts.branchId,
|
|
263
|
+
branch_name: preparedRequest.loggerFacts.branchName,
|
|
264
|
+
pathname: preparedRequest.loggerFacts.pathname,
|
|
272
265
|
}),
|
|
273
266
|
requestId: lifecycle.requestId,
|
|
274
|
-
projectSlug:
|
|
275
|
-
projectId:
|
|
276
|
-
domain,
|
|
267
|
+
projectSlug: preparedRequest.loggerFacts.projectSlug,
|
|
268
|
+
projectId: preparedRequest.loggerFacts.projectId,
|
|
269
|
+
domain: preparedRequest.loggerFacts.domain,
|
|
277
270
|
};
|
|
278
271
|
return runWithRequestContextAsync(loggerContext, async () => {
|
|
279
272
|
const spanInfo = startRequestTracing(req, url.pathname);
|
|
280
273
|
setRequestAttributes(spanInfo.span, req, url);
|
|
281
|
-
startRequestTracking(lifecycle.requestId,
|
|
274
|
+
startRequestTracking(lifecycle.requestId, preparedRequest.trackingFacts.projectSlug, preparedRequest.trackingFacts.pathname, preparedRequest.trackingFacts.method, preparedRequest.trackingFacts.environment, preparedRequest.trackingFacts.releaseId);
|
|
282
275
|
startContentMetrics();
|
|
283
276
|
// Check isolation
|
|
284
277
|
const isolationCheck = checkRequestIsolation(headers.projectSlug, lifecycle.shouldCheckIsolation);
|
|
@@ -295,50 +288,23 @@ export function createVeryfrontHandler(projectDir, adapter, opts = { projectDir
|
|
|
295
288
|
}
|
|
296
289
|
startIsolatedRequest(headers.projectSlug, lifecycle.shouldCheckIsolation);
|
|
297
290
|
try {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
:
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
const untrustedProxyContext = !missingHeader && hasTrustSensitiveProxyHeaders &&
|
|
316
|
-
!proxyTrusted;
|
|
317
|
-
const proxyContextError = untrustedProxyContext
|
|
318
|
-
? {
|
|
319
|
-
error: "Untrusted proxy context",
|
|
320
|
-
detail: "proxy context headers require a trusted upstream proxy",
|
|
321
|
-
}
|
|
322
|
-
: null;
|
|
323
|
-
const proxyGuardError = missingHeader ?? proxyContextError;
|
|
324
|
-
if (proxyGuardError) {
|
|
325
|
-
logger.warn(proxyGuardError.detail, {
|
|
326
|
-
pathname: url.pathname,
|
|
327
|
-
domain,
|
|
328
|
-
projectSlug: headers.projectSlug,
|
|
329
|
-
host: req.headers.get("host"),
|
|
330
|
-
forwardedHost: req.headers.get("x-forwarded-host"),
|
|
331
|
-
});
|
|
332
|
-
endContentMetrics({
|
|
333
|
-
requestId: lifecycle.requestId,
|
|
334
|
-
pathname: url.pathname,
|
|
335
|
-
mode: "proxy",
|
|
336
|
-
});
|
|
337
|
-
completeRequestTracking(lifecycle.requestId, 502, false);
|
|
338
|
-
completeIsolatedRequest(headers.projectSlug, lifecycle.shouldCheckIsolation, false);
|
|
339
|
-
endRequestTracing(spanInfo.span, 502);
|
|
340
|
-
return new Response(JSON.stringify(proxyGuardError), { status: 502, headers: { "Content-Type": "application/json" } });
|
|
341
|
-
}
|
|
291
|
+
if (preparedRequest.proxyGuard) {
|
|
292
|
+
logger.warn(preparedRequest.proxyGuard.detail, {
|
|
293
|
+
pathname: url.pathname,
|
|
294
|
+
domain: preparedRequest.loggerFacts.domain,
|
|
295
|
+
projectSlug: headers.projectSlug,
|
|
296
|
+
host: req.headers.get("host"),
|
|
297
|
+
forwardedHost: req.headers.get("x-forwarded-host"),
|
|
298
|
+
});
|
|
299
|
+
endContentMetrics({
|
|
300
|
+
requestId: lifecycle.requestId,
|
|
301
|
+
pathname: url.pathname,
|
|
302
|
+
mode: "proxy",
|
|
303
|
+
});
|
|
304
|
+
completeRequestTracking(lifecycle.requestId, 502, false);
|
|
305
|
+
completeIsolatedRequest(headers.projectSlug, lifecycle.shouldCheckIsolation, false);
|
|
306
|
+
endRequestTracing(spanInfo.span, 502);
|
|
307
|
+
return preparedRequest.proxyGuard.response;
|
|
342
308
|
}
|
|
343
309
|
const profileCategory = url.pathname.startsWith("/_vf_styles/")
|
|
344
310
|
? "css"
|
|
@@ -362,17 +328,19 @@ export function createVeryfrontHandler(projectDir, adapter, opts = { projectDir
|
|
|
362
328
|
await timeAsync("config:load", () => profilePhase("runtime.config_load", async () => {
|
|
363
329
|
await configPromise;
|
|
364
330
|
}));
|
|
365
|
-
const reqCtx = createRequestContext(request, { proxyTrusted });
|
|
366
331
|
const wsSlugOverride = url.searchParams.get("x-project-slug") || undefined;
|
|
367
332
|
// Resolve project from various sources
|
|
368
|
-
const projectRes = await profilePhase("runtime.resolve_project", () =>
|
|
333
|
+
const projectRes = await profilePhase("runtime.resolve_project", () => resolveProjectIdentity({
|
|
334
|
+
req: request,
|
|
335
|
+
url,
|
|
336
|
+
headers,
|
|
369
337
|
config,
|
|
370
|
-
reqCtx,
|
|
338
|
+
requestContext: reqCtx,
|
|
371
339
|
defaultProjectSlug: opts.defaultProjectSlug,
|
|
372
340
|
defaultProjectId: opts.defaultProjectId,
|
|
373
341
|
defaultReleaseId: opts.defaultReleaseId,
|
|
374
342
|
wsSlugOverride,
|
|
375
|
-
proxyTrusted,
|
|
343
|
+
proxyTrust: { proxyTrusted },
|
|
376
344
|
}));
|
|
377
345
|
updateRequestProfileContext({ projectSlug: projectRes.projectSlug });
|
|
378
346
|
setProjectAttributes(spanInfo.span, projectRes.projectSlug, projectRes.proxyEnv);
|
|
@@ -382,87 +350,40 @@ export function createVeryfrontHandler(projectDir, adapter, opts = { projectDir
|
|
|
382
350
|
if (response)
|
|
383
351
|
return response;
|
|
384
352
|
}
|
|
385
|
-
|
|
386
|
-
// Note: `x-project-path` is NOT forwarded via `headers.projectPath` anymore;
|
|
387
|
-
// `resolveAdapter` reads it directly from `req` and only honours it when the
|
|
388
|
-
// request is proxy-trusted (see isProxyTrusted).
|
|
389
|
-
const adapterRes = await profilePhase("runtime.resolve_adapter", () => resolveAdapter({
|
|
353
|
+
const runtimeContext = await resolveProjectRuntimeContext({
|
|
390
354
|
req: request,
|
|
355
|
+
url,
|
|
391
356
|
projectDir,
|
|
392
357
|
adapter,
|
|
393
358
|
config,
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
releaseId: projectRes.releaseId,
|
|
398
|
-
proxyEnv: projectRes.proxyEnv,
|
|
399
|
-
branch: reqCtx.branch,
|
|
400
|
-
environmentName: projectRes.environmentName,
|
|
401
|
-
parsedDomain: projectRes.parsedDomain,
|
|
402
|
-
pathname: url.pathname,
|
|
403
|
-
isProxyMode,
|
|
404
|
-
proxyTrusted,
|
|
405
|
-
}));
|
|
406
|
-
// Resolve environment and validate
|
|
407
|
-
const host = request.headers.get("x-forwarded-host") ||
|
|
408
|
-
request.headers.get("host") || url.host;
|
|
409
|
-
const envRes = resolveEnvironment({
|
|
410
|
-
proxyEnv: projectRes.proxyEnv,
|
|
411
|
-
reqCtxMode: reqCtx.mode,
|
|
412
|
-
releaseId: projectRes.releaseId,
|
|
413
|
-
projectSlug: projectRes.projectSlug,
|
|
414
|
-
projectId: projectRes.projectId,
|
|
415
|
-
environmentName: projectRes.environmentName,
|
|
416
|
-
host,
|
|
417
|
-
isLocalProject: adapterRes.isLocalProject,
|
|
359
|
+
projectIdentity: projectRes,
|
|
360
|
+
headers,
|
|
361
|
+
requestContext: reqCtx,
|
|
418
362
|
isProxyMode,
|
|
419
|
-
|
|
420
|
-
defaultEnvironment: opts.defaultEnvironment,
|
|
421
|
-
});
|
|
422
|
-
if (envRes.errorResponse) {
|
|
423
|
-
return envRes.errorResponse;
|
|
424
|
-
}
|
|
425
|
-
updateRequestProfileContext({ requestMode: envRes.resolvedEnvironment });
|
|
426
|
-
const skipRenderEnrichedContext = shouldSkipEnrichedContext(url.pathname);
|
|
427
|
-
// Build handler context
|
|
428
|
-
const ctx = buildHandlerContext({
|
|
429
|
-
projectDir: adapterRes.projectDir,
|
|
430
|
-
adapter: adapterRes.adapter,
|
|
363
|
+
proxyTrust: { proxyTrusted },
|
|
431
364
|
securityConfig: securityLoader.getSecurityConfig(),
|
|
432
365
|
cspUserHeader: securityLoader.getCspUserHeader(),
|
|
433
366
|
debug: opts.debug,
|
|
434
|
-
config: adapterRes.config,
|
|
435
|
-
parsedDomain: projectRes.parsedDomain,
|
|
436
|
-
projectSlug: projectRes.projectSlug,
|
|
437
|
-
projectId: projectRes.projectId,
|
|
438
|
-
releaseId: envRes.releaseId,
|
|
439
|
-
proxyToken: reqCtx.token,
|
|
440
|
-
environmentName: projectRes.environmentName,
|
|
441
|
-
resolvedEnvironment: envRes.resolvedEnvironment ?? "preview",
|
|
442
|
-
requestContext: reqCtx,
|
|
443
367
|
routeRegistry: registry,
|
|
444
|
-
isLocalProject: adapterRes.isLocalProject,
|
|
445
368
|
moduleServerUrl: opts.moduleServerUrl,
|
|
446
|
-
|
|
447
|
-
|
|
369
|
+
defaultEnvironment: opts.defaultEnvironment,
|
|
370
|
+
envVarCache,
|
|
371
|
+
profileAdapter: (operation) => profilePhase("runtime.resolve_adapter", operation),
|
|
372
|
+
profileEnvVars: (operation) => profilePhase("runtime.load_env_vars", operation),
|
|
373
|
+
onEnvironmentResolved: (envRes) => {
|
|
374
|
+
updateRequestProfileContext({ requestMode: envRes.resolvedEnvironment });
|
|
375
|
+
},
|
|
376
|
+
logDebug,
|
|
448
377
|
});
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
if (
|
|
452
|
-
|
|
453
|
-
reqCtx.token &&
|
|
454
|
-
projectRes.projectSlug) {
|
|
455
|
-
const environmentId = headers.environmentId;
|
|
456
|
-
const projectSlug = projectRes.projectSlug;
|
|
457
|
-
envVarsForRequest = await profilePhase("runtime.load_env_vars", () => envVarCache.get(environmentId, reqCtx.token, projectSlug));
|
|
458
|
-
logDebug("[runtime-handler] Project env vars fetched", {
|
|
459
|
-
projectSlug,
|
|
460
|
-
environmentId,
|
|
461
|
-
count: Object.keys(envVarsForRequest).length,
|
|
462
|
-
});
|
|
378
|
+
const adapterRes = runtimeContext.adapter;
|
|
379
|
+
const envRes = runtimeContext.environment;
|
|
380
|
+
if (envRes.errorResponse) {
|
|
381
|
+
return envRes.errorResponse;
|
|
463
382
|
}
|
|
383
|
+
const ctx = runtimeContext.handlerContext;
|
|
384
|
+
const envVarsForRequest = runtimeContext.rawEnvVars;
|
|
464
385
|
await incrementRequestMetrics();
|
|
465
|
-
const sourceIntegrationPolicy =
|
|
386
|
+
const sourceIntegrationPolicy = runtimeContext.sourceIntegrationPolicy;
|
|
466
387
|
const executeProjectRoute = () => projectMiddlewareRuntime.execute({
|
|
467
388
|
request,
|
|
468
389
|
handlerContext: ctx,
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import type { VeryfrontConfig } from "../../config/index.js";
|
|
2
|
+
import type { RuntimeAdapter } from "../../platform/adapters/base.js";
|
|
3
|
+
import type { RouteRegistry } from "../../routing/registry/index.js";
|
|
4
|
+
import type { SecurityConfig } from "../../types/index.js";
|
|
5
|
+
import { normalizeSourceIntegrationPolicy } from "../../integrations/source-policy.js";
|
|
6
|
+
import { createRequestContext } from "../context/request-context.js";
|
|
7
|
+
import type { HandlerContext } from "../handlers/types.js";
|
|
8
|
+
import { resolveAdapter } from "./adapter-factory.js";
|
|
9
|
+
import { resolveEnvironment } from "./environment-resolution.js";
|
|
10
|
+
import { extractRequestHeaders, resolveProject } from "./project-resolution.js";
|
|
11
|
+
type AdapterEnvLike = {
|
|
12
|
+
get(key: string): string | undefined;
|
|
13
|
+
};
|
|
14
|
+
type ProxyTrustVerifier = (req: Request, options: {
|
|
15
|
+
publicKeyPem?: string;
|
|
16
|
+
}) => Promise<boolean>;
|
|
17
|
+
export interface PrepareProjectRequestInput {
|
|
18
|
+
req: Request;
|
|
19
|
+
url: URL;
|
|
20
|
+
isProxyMode: boolean;
|
|
21
|
+
adapterEnv?: AdapterEnvLike;
|
|
22
|
+
trustProxy?: ProxyTrustVerifier;
|
|
23
|
+
}
|
|
24
|
+
type ProjectRequestHeaders = ReturnType<typeof extractRequestHeaders>;
|
|
25
|
+
type ProjectRequestContext = ReturnType<typeof createRequestContext>;
|
|
26
|
+
type ProjectIdentityResolution = Awaited<ReturnType<typeof resolveProject>>;
|
|
27
|
+
type ProjectAdapterResolution = Awaited<ReturnType<typeof resolveAdapter>>;
|
|
28
|
+
type ProjectEnvironmentResolution = ReturnType<typeof resolveEnvironment>;
|
|
29
|
+
type SourceIntegrationPolicy = ReturnType<typeof normalizeSourceIntegrationPolicy>;
|
|
30
|
+
type ProjectEnvVarCacheLike = {
|
|
31
|
+
get(environmentId: string, token: string, projectSlug: string): Promise<Record<string, string>>;
|
|
32
|
+
};
|
|
33
|
+
type RuntimeContextProfiler = <T>(operation: () => Promise<T>) => Promise<T>;
|
|
34
|
+
export interface PreparedProjectRequest {
|
|
35
|
+
url: URL;
|
|
36
|
+
headers: ProjectRequestHeaders;
|
|
37
|
+
requestContext: ProjectRequestContext;
|
|
38
|
+
proxyTrust: {
|
|
39
|
+
proxyTrusted: boolean | undefined;
|
|
40
|
+
};
|
|
41
|
+
loggerFacts: RequestContextFacts;
|
|
42
|
+
trackingFacts: RequestTrackingFacts;
|
|
43
|
+
proxyGuard?: ProxyGuardResult;
|
|
44
|
+
}
|
|
45
|
+
export interface ResolveProjectIdentityInput {
|
|
46
|
+
operation?: string;
|
|
47
|
+
req: Request;
|
|
48
|
+
url: URL;
|
|
49
|
+
headers: ProjectRequestHeaders;
|
|
50
|
+
requestContext: ProjectRequestContext;
|
|
51
|
+
config: VeryfrontConfig | undefined;
|
|
52
|
+
defaultProjectSlug: string | undefined;
|
|
53
|
+
defaultProjectId: string | undefined;
|
|
54
|
+
defaultReleaseId: string | undefined;
|
|
55
|
+
wsSlugOverride: string | undefined;
|
|
56
|
+
proxyTrust: {
|
|
57
|
+
proxyTrusted: boolean | undefined;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export interface ResolveProjectRuntimeContextInput {
|
|
61
|
+
req: Request;
|
|
62
|
+
url: URL;
|
|
63
|
+
projectDir: string;
|
|
64
|
+
adapter: RuntimeAdapter;
|
|
65
|
+
config: VeryfrontConfig | undefined;
|
|
66
|
+
projectIdentity: ProjectIdentityResolution;
|
|
67
|
+
headers: ProjectRequestHeaders;
|
|
68
|
+
requestContext: ProjectRequestContext;
|
|
69
|
+
isProxyMode: boolean;
|
|
70
|
+
proxyTrust: {
|
|
71
|
+
proxyTrusted: boolean | undefined;
|
|
72
|
+
};
|
|
73
|
+
securityConfig: SecurityConfig | null;
|
|
74
|
+
cspUserHeader: string | null;
|
|
75
|
+
debug: boolean | undefined;
|
|
76
|
+
routeRegistry: RouteRegistry;
|
|
77
|
+
moduleServerUrl: string | undefined;
|
|
78
|
+
environmentId?: string;
|
|
79
|
+
defaultEnvironment?: "preview" | "production";
|
|
80
|
+
skipEnrichedContext?: boolean;
|
|
81
|
+
envVarCache: ProjectEnvVarCacheLike;
|
|
82
|
+
profileAdapter?: RuntimeContextProfiler;
|
|
83
|
+
profileEnvVars?: RuntimeContextProfiler;
|
|
84
|
+
onEnvironmentResolved?: (environment: ProjectEnvironmentResolution) => void;
|
|
85
|
+
logDebug?: (message: string, extra?: Record<string, unknown>) => void;
|
|
86
|
+
}
|
|
87
|
+
export interface ProjectRuntimeContextResolution {
|
|
88
|
+
adapter: ProjectAdapterResolution;
|
|
89
|
+
environment: ProjectEnvironmentResolution;
|
|
90
|
+
handlerContext: HandlerContext | undefined;
|
|
91
|
+
rawEnvVars: Record<string, string>;
|
|
92
|
+
sourceIntegrationPolicy: SourceIntegrationPolicy;
|
|
93
|
+
}
|
|
94
|
+
interface RequestContextFacts {
|
|
95
|
+
domain: string;
|
|
96
|
+
projectSlug: string | undefined;
|
|
97
|
+
projectId: string | undefined;
|
|
98
|
+
releaseId: string | undefined;
|
|
99
|
+
branchId: string | undefined;
|
|
100
|
+
branchName: string | undefined;
|
|
101
|
+
pathname: string;
|
|
102
|
+
}
|
|
103
|
+
interface RequestTrackingFacts {
|
|
104
|
+
projectSlug: string | undefined;
|
|
105
|
+
pathname: string;
|
|
106
|
+
method: string;
|
|
107
|
+
environment: string | undefined;
|
|
108
|
+
releaseId: string | undefined;
|
|
109
|
+
}
|
|
110
|
+
interface ProxyGuardResult {
|
|
111
|
+
detail: string;
|
|
112
|
+
response: Response;
|
|
113
|
+
}
|
|
114
|
+
export declare function prepareProjectRequest(input: PrepareProjectRequestInput): Promise<PreparedProjectRequest>;
|
|
115
|
+
export declare function resolveProjectIdentity(input: ResolveProjectIdentityInput): Promise<ProjectIdentityResolution>;
|
|
116
|
+
export declare function resolveProjectRuntimeContext(input: ResolveProjectRuntimeContextInput): Promise<ProjectRuntimeContextResolution>;
|
|
117
|
+
export {};
|
|
118
|
+
//# sourceMappingURL=project-runtime-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-runtime-context.d.ts","sourceRoot":"","sources":["../../../../src/src/server/runtime-handler/project-runtime-context.ts"],"names":[],"mappings":"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"}
|