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.
Files changed (118) hide show
  1. package/esm/cli/commands/eval/command.d.ts +2 -70
  2. package/esm/cli/commands/eval/command.d.ts.map +1 -1
  3. package/esm/cli/commands/eval/command.js +207 -550
  4. package/esm/cli/templates/manifest.d.ts +1 -0
  5. package/esm/cli/templates/manifest.js +3 -2
  6. package/esm/deno.js +1 -1
  7. package/esm/src/agent/hosted/chat-execution-runtime.d.ts.map +1 -1
  8. package/esm/src/agent/hosted/chat-execution-runtime.js +16 -33
  9. package/esm/src/agent/hosted/child-fork-tool-sources.d.ts.map +1 -1
  10. package/esm/src/agent/hosted/child-fork-tool-sources.js +6 -38
  11. package/esm/src/agent/hosted/hosted-chat-finalization.d.ts +30 -0
  12. package/esm/src/agent/hosted/hosted-chat-finalization.d.ts.map +1 -0
  13. package/esm/src/agent/hosted/hosted-chat-finalization.js +249 -0
  14. package/esm/src/agent/hosted/project-remote-tool-source.d.ts.map +1 -1
  15. package/esm/src/agent/hosted/project-remote-tool-source.js +4 -23
  16. package/esm/src/agent/mcp-tool-policy.d.ts +19 -0
  17. package/esm/src/agent/mcp-tool-policy.d.ts.map +1 -0
  18. package/esm/src/agent/mcp-tool-policy.js +66 -0
  19. package/esm/src/agent/runtime/mcp-server-tool-sources.d.ts.map +1 -1
  20. package/esm/src/agent/runtime/mcp-server-tool-sources.js +8 -44
  21. package/esm/src/discovery/import-rewriter.d.ts.map +1 -1
  22. package/esm/src/discovery/import-rewriter.js +7 -90
  23. package/esm/src/eval/run-report.d.ts +189 -0
  24. package/esm/src/eval/run-report.d.ts.map +1 -0
  25. package/esm/src/eval/run-report.js +603 -0
  26. package/esm/src/html/hydration-script-builder/dev-client-renderer.js +1 -1
  27. package/esm/src/html/hydration-script-builder/prod-scripts.js +1 -1
  28. package/esm/src/html/hydration-script-builder/templates/router.d.ts.map +1 -1
  29. package/esm/src/html/hydration-script-builder/templates/router.js +35 -11
  30. package/esm/src/html/utils.d.ts.map +1 -1
  31. package/esm/src/html/utils.js +19 -45
  32. package/esm/src/index.client.d.ts +6 -21
  33. package/esm/src/index.client.d.ts.map +1 -1
  34. package/esm/src/index.client.js +6 -21
  35. package/esm/src/modules/server/ssr-import-rewriter.d.ts +2 -26
  36. package/esm/src/modules/server/ssr-import-rewriter.d.ts.map +1 -1
  37. package/esm/src/modules/server/ssr-import-rewriter.js +1 -206
  38. package/esm/src/react/runtime/core.d.ts +22 -0
  39. package/esm/src/react/runtime/core.d.ts.map +1 -1
  40. package/esm/src/react/runtime/core.js +1 -1
  41. package/esm/src/rendering/orchestrator/module-collection.d.ts +8 -0
  42. package/esm/src/rendering/orchestrator/module-collection.d.ts.map +1 -1
  43. package/esm/src/rendering/orchestrator/module-collection.js +10 -0
  44. package/esm/src/rendering/orchestrator/pipeline.d.ts.map +1 -1
  45. package/esm/src/rendering/orchestrator/pipeline.js +2 -2
  46. package/esm/src/routing/api/context-builder.d.ts +7 -0
  47. package/esm/src/routing/api/context-builder.d.ts.map +1 -1
  48. package/esm/src/routing/api/context-builder.js +20 -2
  49. package/esm/src/routing/api/module-loader/external-import-rewriter.d.ts +2 -7
  50. package/esm/src/routing/api/module-loader/external-import-rewriter.d.ts.map +1 -1
  51. package/esm/src/routing/api/module-loader/external-import-rewriter.js +10 -209
  52. package/esm/src/server/dev-server/file-watch-setup.d.ts.map +1 -1
  53. package/esm/src/server/dev-server/file-watch-setup.js +11 -1
  54. package/esm/src/server/dev-server/middleware.d.ts.map +1 -1
  55. package/esm/src/server/dev-server/middleware.js +45 -11
  56. package/esm/src/server/handlers/dev/files/esbuild-plugins.d.ts.map +1 -1
  57. package/esm/src/server/handlers/dev/files/esbuild-plugins.js +22 -0
  58. package/esm/src/server/handlers/request/module/page-data-endpoint-handler.js +24 -1
  59. package/esm/src/server/handlers/response/not-found.d.ts +0 -1
  60. package/esm/src/server/handlers/response/not-found.d.ts.map +1 -1
  61. package/esm/src/server/handlers/response/not-found.js +9 -110
  62. package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
  63. package/esm/src/server/runtime-handler/index.js +66 -145
  64. package/esm/src/server/runtime-handler/project-runtime-context.d.ts +118 -0
  65. package/esm/src/server/runtime-handler/project-runtime-context.d.ts.map +1 -0
  66. package/esm/src/server/runtime-handler/project-runtime-context.js +181 -0
  67. package/esm/src/server/services/rsc/orchestrators/handler.d.ts +3 -1
  68. package/esm/src/server/services/rsc/orchestrators/handler.d.ts.map +1 -1
  69. package/esm/src/server/services/rsc/orchestrators/handler.js +13 -8
  70. package/esm/src/server/services/rsc/orchestrators/render-handler.d.ts +1 -1
  71. package/esm/src/server/services/rsc/orchestrators/render-handler.d.ts.map +1 -1
  72. package/esm/src/server/services/rsc/orchestrators/render-handler.js +2 -2
  73. package/esm/src/transforms/esm/http-cache.d.ts.map +1 -1
  74. package/esm/src/transforms/esm/http-cache.js +132 -46
  75. package/esm/src/transforms/esm/import-attributes.d.ts.map +1 -1
  76. package/esm/src/transforms/esm/import-attributes.js +2 -9
  77. package/esm/src/transforms/esm/in-flight-manager.d.ts +3 -2
  78. package/esm/src/transforms/esm/in-flight-manager.d.ts.map +1 -1
  79. package/esm/src/transforms/esm/in-flight-manager.js +6 -5
  80. package/esm/src/transforms/import-rewriter/core.d.ts +8 -0
  81. package/esm/src/transforms/import-rewriter/core.d.ts.map +1 -0
  82. package/esm/src/transforms/import-rewriter/core.js +27 -0
  83. package/esm/src/transforms/import-rewriter/import-edit.d.ts +57 -0
  84. package/esm/src/transforms/import-rewriter/import-edit.d.ts.map +1 -0
  85. package/esm/src/transforms/import-rewriter/import-edit.js +151 -0
  86. package/esm/src/transforms/import-rewriter/package-resolution.d.ts +12 -0
  87. package/esm/src/transforms/import-rewriter/package-resolution.d.ts.map +1 -0
  88. package/esm/src/transforms/import-rewriter/package-resolution.js +79 -0
  89. package/esm/src/transforms/import-rewriter/parse-cache.d.ts +4 -42
  90. package/esm/src/transforms/import-rewriter/parse-cache.d.ts.map +1 -1
  91. package/esm/src/transforms/import-rewriter/parse-cache.js +3 -134
  92. package/esm/src/transforms/import-rewriter/route-adapter.d.ts +24 -0
  93. package/esm/src/transforms/import-rewriter/route-adapter.d.ts.map +1 -0
  94. package/esm/src/transforms/import-rewriter/route-adapter.js +235 -0
  95. package/esm/src/transforms/import-rewriter/ssr-adapter.d.ts +27 -0
  96. package/esm/src/transforms/import-rewriter/ssr-adapter.d.ts.map +1 -0
  97. package/esm/src/transforms/import-rewriter/ssr-adapter.js +206 -0
  98. package/esm/src/transforms/import-rewriter/strategies/bare-strategy.d.ts.map +1 -1
  99. package/esm/src/transforms/import-rewriter/strategies/bare-strategy.js +16 -2
  100. package/esm/src/transforms/import-rewriter/unified-rewriter.d.ts +0 -4
  101. package/esm/src/transforms/import-rewriter/unified-rewriter.d.ts.map +1 -1
  102. package/esm/src/transforms/import-rewriter/unified-rewriter.js +2 -39
  103. package/esm/src/utils/version-constant.d.ts +1 -1
  104. package/esm/src/utils/version-constant.js +1 -1
  105. package/esm/src/workflow/executor/workflow-executor.d.ts +0 -20
  106. package/esm/src/workflow/executor/workflow-executor.d.ts.map +1 -1
  107. package/esm/src/workflow/executor/workflow-executor.js +41 -320
  108. package/esm/src/workflow/runtime/approval-manager.d.ts.map +1 -1
  109. package/esm/src/workflow/runtime/approval-manager.js +20 -61
  110. package/esm/src/workflow/runtime/workflow-run-control.d.ts +95 -0
  111. package/esm/src/workflow/runtime/workflow-run-control.d.ts.map +1 -0
  112. package/esm/src/workflow/runtime/workflow-run-control.js +529 -0
  113. package/esm/src/workflow/worker/run-manager.d.ts.map +1 -1
  114. package/esm/src/workflow/worker/run-manager.js +18 -92
  115. package/esm/src/workflow/worker/shared.d.ts +1 -1
  116. package/esm/src/workflow/worker/shared.d.ts.map +1 -1
  117. package/esm/src/workflow/worker/shared.js +17 -15
  118. 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;AASnG,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,QAAQ,EAAE,eAAe,CAIvB;IAEF,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IA8BjE,OAAO,CAAC,eAAe;CA4GxB"}
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 { buildNonceAttribute, escapeHtml } from "../../../html/html-escape.js";
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
- const html = this.generate404Html(pathname, builder.nonce);
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;AAqCpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAuErE,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,CAwenE;AAGD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,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 { resolveEnvironment } from "./environment-resolution.js";
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, isWebSocketPath, shouldSkipEnrichedContext, } from "./request-utils.js";
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
- // Build logger context
253
- const hostHeader = req.headers.get("host") ?? url.host;
254
- const domain = hostHeader.replace(/:\d+$/, "");
255
- const proxyTrustPublicKeyPem = adapter.env.get("CHANNEL_DISPATCH_SIGNING_PUBLIC_KEY") ??
256
- getHostEnv("CHANNEL_DISPATCH_SIGNING_PUBLIC_KEY");
257
- const proxyTrusted = isProxyMode
258
- ? await isProxyTrusted(req, { publicKeyPem: proxyTrustPublicKeyPem })
259
- : undefined;
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: headers.projectSlug,
267
- project_id: headers.projectId,
268
- release_id: headers.releaseId,
269
- branch_id: headers.branchId,
270
- branch_name: headers.branchName,
271
- pathname: url.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: headers.projectSlug,
275
- projectId: headers.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, headers.projectSlug, url.pathname, req.method, headers.environment, headers.releaseId);
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
- // Early validation: in proxy mode, required context headers must be present.
299
- // Without these, the server cannot authenticate or resolve the project, and
300
- // proceeding would cause cryptic 500s deep in the rendering pipeline.
301
- if (isProxyMode && !isLightweightPath(url.pathname) && !isWebSocketPath(url.pathname)) {
302
- const token = req.headers.get("x-token");
303
- const missingHeader = !headers.projectSlug
304
- ? {
305
- error: "Missing project context",
306
- detail: "x-project-slug header is required in proxy mode",
307
- }
308
- : !token
309
- ? {
310
- error: "Missing authentication context",
311
- detail: "x-token header is required in proxy mode",
312
- }
313
- : null;
314
- const hasTrustSensitiveProxyHeaders = !!req.headers.get("x-project-path");
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", () => resolveProject(request, url, headers, {
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
- // Resolve adapter and config for project.
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
- projectSlug: projectRes.projectSlug,
395
- projectId: projectRes.projectId,
396
- proxyToken: reqCtx.token,
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
- pathname: url.pathname,
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
- environmentId: headers.environmentId,
447
- skipEnrichedContext: skipRenderEnrichedContext,
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
- // Fetch per-project env vars for remote projects
450
- let envVarsForRequest = {};
451
- if (!adapterRes.isLocalProject &&
452
- headers.environmentId &&
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 = normalizeSourceIntegrationPolicy(adapterRes.config?.integrations);
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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"}