veryfront 0.1.73 → 0.1.75

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 (120) hide show
  1. package/esm/cli/commands/knowledge/command-help.d.ts.map +1 -1
  2. package/esm/cli/commands/knowledge/command-help.js +3 -1
  3. package/esm/cli/commands/knowledge/command.d.ts +34 -5
  4. package/esm/cli/commands/knowledge/command.d.ts.map +1 -1
  5. package/esm/cli/commands/knowledge/command.js +151 -22
  6. package/esm/cli/commands/knowledge/parser-source.d.ts.map +1 -1
  7. package/esm/cli/commands/knowledge/parser-source.js +110 -5
  8. package/esm/deno.d.ts +2 -0
  9. package/esm/deno.js +3 -1
  10. package/esm/src/data/data-fetcher.d.ts +11 -1
  11. package/esm/src/data/data-fetcher.d.ts.map +1 -1
  12. package/esm/src/data/data-fetcher.js +5 -2
  13. package/esm/src/data/index.d.ts +1 -1
  14. package/esm/src/data/index.d.ts.map +1 -1
  15. package/esm/src/data/server-data-fetcher.d.ts +14 -1
  16. package/esm/src/data/server-data-fetcher.d.ts.map +1 -1
  17. package/esm/src/data/server-data-fetcher.js +49 -3
  18. package/esm/src/rendering/orchestrator/lifecycle.d.ts +4 -0
  19. package/esm/src/rendering/orchestrator/lifecycle.d.ts.map +1 -1
  20. package/esm/src/rendering/orchestrator/lifecycle.js +8 -0
  21. package/esm/src/rendering/orchestrator/pipeline.d.ts.map +1 -1
  22. package/esm/src/rendering/orchestrator/pipeline.js +6 -1
  23. package/esm/src/rendering/orchestrator/ssr-orchestrator.d.ts +26 -1
  24. package/esm/src/rendering/orchestrator/ssr-orchestrator.d.ts.map +1 -1
  25. package/esm/src/rendering/orchestrator/ssr-orchestrator.js +77 -1
  26. package/esm/src/routing/api/handler.d.ts.map +1 -1
  27. package/esm/src/routing/api/handler.js +6 -2
  28. package/esm/src/routing/api/route-executor.d.ts +8 -2
  29. package/esm/src/routing/api/route-executor.d.ts.map +1 -1
  30. package/esm/src/routing/api/route-executor.js +131 -3
  31. package/esm/src/security/deno-permissions.d.ts +6 -0
  32. package/esm/src/security/deno-permissions.d.ts.map +1 -1
  33. package/esm/src/security/deno-permissions.js +10 -0
  34. package/esm/src/security/sandbox/project-worker.d.ts +61 -0
  35. package/esm/src/security/sandbox/project-worker.d.ts.map +1 -0
  36. package/esm/src/security/sandbox/project-worker.js +318 -0
  37. package/esm/src/security/sandbox/worker-permissions.d.ts +30 -0
  38. package/esm/src/security/sandbox/worker-permissions.d.ts.map +1 -0
  39. package/esm/src/security/sandbox/worker-permissions.js +60 -0
  40. package/esm/src/security/sandbox/worker-pool.d.ts +87 -0
  41. package/esm/src/security/sandbox/worker-pool.d.ts.map +1 -0
  42. package/esm/src/security/sandbox/worker-pool.js +356 -0
  43. package/esm/src/security/sandbox/worker-types.d.ts +165 -0
  44. package/esm/src/security/sandbox/worker-types.d.ts.map +1 -0
  45. package/esm/src/security/sandbox/worker-types.js +17 -0
  46. package/esm/src/server/handlers/request/ssr/ssr.handler.d.ts +2 -0
  47. package/esm/src/server/handlers/request/ssr/ssr.handler.d.ts.map +1 -1
  48. package/esm/src/server/handlers/request/ssr/ssr.handler.js +6 -2
  49. package/esm/src/server/project-env/storage.d.ts +6 -0
  50. package/esm/src/server/project-env/storage.d.ts.map +1 -1
  51. package/esm/src/server/project-env/storage.js +8 -0
  52. package/esm/src/server/runtime-handler/adapter-factory.d.ts +3 -0
  53. package/esm/src/server/runtime-handler/adapter-factory.d.ts.map +1 -1
  54. package/esm/src/server/runtime-handler/adapter-factory.js +6 -5
  55. package/esm/src/server/runtime-handler/index.d.ts +33 -0
  56. package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
  57. package/esm/src/server/runtime-handler/index.js +103 -37
  58. package/esm/src/server/runtime-handler/local-project-discovery.d.ts +32 -4
  59. package/esm/src/server/runtime-handler/local-project-discovery.d.ts.map +1 -1
  60. package/esm/src/server/runtime-handler/local-project-discovery.js +46 -16
  61. package/esm/src/server/runtime-handler/project-isolation.d.ts +5 -0
  62. package/esm/src/server/runtime-handler/project-isolation.d.ts.map +1 -1
  63. package/esm/src/server/runtime-handler/project-isolation.js +44 -0
  64. package/esm/src/server/services/rendering/ssr.service.d.ts +19 -1
  65. package/esm/src/server/services/rendering/ssr.service.d.ts.map +1 -1
  66. package/esm/src/server/services/rendering/ssr.service.js +9 -1
  67. package/esm/src/server/shared/renderer/adapter.d.ts +25 -0
  68. package/esm/src/server/shared/renderer/adapter.d.ts.map +1 -1
  69. package/esm/src/server/shared/renderer/adapter.js +83 -10
  70. package/esm/src/server/shared/renderer/index.d.ts +1 -1
  71. package/esm/src/server/shared/renderer/index.d.ts.map +1 -1
  72. package/esm/src/server/shared/renderer/index.js +1 -1
  73. package/esm/src/server/shared/renderer/memory/pressure.d.ts +7 -0
  74. package/esm/src/server/shared/renderer/memory/pressure.d.ts.map +1 -1
  75. package/esm/src/server/shared/renderer/memory/pressure.js +7 -0
  76. package/esm/src/transforms/pipeline/stages/ssr-vf-modules/path-resolver.d.ts +4 -4
  77. package/esm/src/transforms/pipeline/stages/ssr-vf-modules/path-resolver.d.ts.map +1 -1
  78. package/esm/src/transforms/pipeline/stages/ssr-vf-modules/path-resolver.js +15 -15
  79. package/esm/src/utils/index.d.ts +10 -1
  80. package/esm/src/utils/index.d.ts.map +1 -1
  81. package/esm/src/utils/index.js +9 -1
  82. package/esm/src/utils/logger/index.d.ts +1 -1
  83. package/esm/src/utils/logger/index.d.ts.map +1 -1
  84. package/esm/src/utils/logger/index.js +1 -1
  85. package/esm/src/utils/logger/logger.d.ts +14 -0
  86. package/esm/src/utils/logger/logger.d.ts.map +1 -1
  87. package/esm/src/utils/logger/logger.js +17 -0
  88. package/esm/src/workflow/claude-code/tool.d.ts +5 -5
  89. package/package.json +4 -1
  90. package/src/cli/commands/knowledge/command-help.ts +3 -1
  91. package/src/cli/commands/knowledge/command.ts +180 -22
  92. package/src/cli/commands/knowledge/parser-source.ts +110 -5
  93. package/src/deno.js +3 -1
  94. package/src/src/data/data-fetcher.ts +18 -2
  95. package/src/src/data/index.ts +1 -1
  96. package/src/src/data/server-data-fetcher.ts +78 -3
  97. package/src/src/rendering/orchestrator/lifecycle.ts +11 -0
  98. package/src/src/rendering/orchestrator/pipeline.ts +7 -2
  99. package/src/src/rendering/orchestrator/ssr-orchestrator.ts +119 -0
  100. package/src/src/routing/api/handler.ts +16 -3
  101. package/src/src/routing/api/route-executor.ts +222 -1
  102. package/src/src/security/deno-permissions.ts +11 -0
  103. package/src/src/security/sandbox/project-worker.ts +416 -0
  104. package/src/src/security/sandbox/worker-permissions.ts +74 -0
  105. package/src/src/security/sandbox/worker-pool.ts +451 -0
  106. package/src/src/security/sandbox/worker-types.ts +209 -0
  107. package/src/src/server/handlers/request/ssr/ssr.handler.ts +11 -2
  108. package/src/src/server/project-env/storage.ts +9 -0
  109. package/src/src/server/runtime-handler/adapter-factory.ts +13 -5
  110. package/src/src/server/runtime-handler/index.ts +132 -39
  111. package/src/src/server/runtime-handler/local-project-discovery.ts +51 -17
  112. package/src/src/server/runtime-handler/project-isolation.ts +53 -0
  113. package/src/src/server/services/rendering/ssr.service.ts +34 -3
  114. package/src/src/server/shared/renderer/adapter.ts +107 -8
  115. package/src/src/server/shared/renderer/index.ts +7 -1
  116. package/src/src/server/shared/renderer/memory/pressure.ts +8 -0
  117. package/src/src/transforms/pipeline/stages/ssr-vf-modules/path-resolver.ts +18 -12
  118. package/src/src/utils/index.ts +11 -0
  119. package/src/src/utils/logger/index.ts +1 -0
  120. package/src/src/utils/logger/logger.ts +34 -0
@@ -0,0 +1,356 @@
1
+ /**
2
+ * Worker Pool Manager
3
+ *
4
+ * Manages a pool of per-project Deno Workers for tenant-isolated code execution.
5
+ * Uses LRU eviction when the pool exceeds its capacity, idle timeout for
6
+ * cleanup, and health checks for reliability.
7
+ *
8
+ * @module security/sandbox/worker-pool
9
+ */
10
+ import * as dntShim from "../../../_dnt.shims.js";
11
+ import { serverLogger } from "../../utils/index.js";
12
+ import { getEnvBoolean, getEnvNumber, unrefTimer } from "../../platform/compat/process.js";
13
+ import { withSpan } from "../../observability/tracing/otlp-setup.js";
14
+ import { SECURITY_VIOLATION } from "../../errors/index.js";
15
+ import { ProjectWorker } from "./project-worker.js";
16
+ import { buildWorkerPermissions } from "./worker-permissions.js";
17
+ import { DEFAULT_WORKER_POOL_CONFIG } from "./worker-types.js";
18
+ const logger = serverLogger.component("worker-pool");
19
+ export class WorkerPool {
20
+ pool = new Map();
21
+ recycling = new Set();
22
+ config;
23
+ cleanupInterval;
24
+ healthCheckInterval;
25
+ constructor(config = {}) {
26
+ this.config = { ...DEFAULT_WORKER_POOL_CONFIG, ...config };
27
+ this.startCleanup();
28
+ this.startHealthChecks();
29
+ }
30
+ /**
31
+ * Get or create a worker for the given project.
32
+ */
33
+ getOrCreateWorker(projectId, readPaths) {
34
+ const existing = this.pool.get(projectId);
35
+ if (existing && existing.worker.status !== "crashed" && existing.worker.status !== "terminated") {
36
+ existing.lastAccessedAt = Date.now();
37
+ return existing.worker;
38
+ }
39
+ // If an existing entry is crashed/terminated, clean it up
40
+ if (existing) {
41
+ existing.worker.terminate();
42
+ this.pool.delete(projectId);
43
+ }
44
+ // Evict LRU if at capacity
45
+ this.evictIfNeeded();
46
+ const permissions = buildWorkerPermissions(readPaths);
47
+ const worker = new ProjectWorker({
48
+ projectId,
49
+ permissions,
50
+ requestTimeoutMs: this.config.requestTimeoutMs,
51
+ });
52
+ worker.start();
53
+ const now = Date.now();
54
+ this.pool.set(projectId, {
55
+ worker,
56
+ lastAccessedAt: now,
57
+ createdAt: now,
58
+ });
59
+ logger.debug("Worker created", {
60
+ projectId,
61
+ poolSize: this.pool.size,
62
+ });
63
+ return worker;
64
+ }
65
+ /**
66
+ * Execute a request in a project worker. Convenience method that
67
+ * combines getOrCreateWorker + execute.
68
+ */
69
+ execute(projectId, readPaths, request) {
70
+ // Validate modulePath is within allowed read paths (defense-in-depth)
71
+ if ("modulePath" in request && request.modulePath) {
72
+ const modulePath = request.modulePath;
73
+ const isAllowed = readPaths.some((p) => modulePath.startsWith(p));
74
+ if (!isAllowed) {
75
+ return Promise.reject(SECURITY_VIOLATION.create({
76
+ detail: `Module path "${modulePath}" is outside allowed read paths for project "${projectId}"`,
77
+ }));
78
+ }
79
+ }
80
+ return withSpan("workerPool.execute", async () => {
81
+ const worker = this.getOrCreateWorker(projectId, readPaths);
82
+ // Check if worker should be recycled (request count or age)
83
+ const entry = this.pool.get(projectId);
84
+ const shouldRecycle = worker.requestCount >= this.config.maxRequestsPerWorker ||
85
+ (entry && Date.now() - entry.createdAt > this.config.maxWorkerAgeMs);
86
+ if (shouldRecycle && !this.recycling.has(projectId)) {
87
+ this.recycling.add(projectId);
88
+ try {
89
+ logger.debug("Recycling worker", {
90
+ projectId,
91
+ requestCount: worker.requestCount,
92
+ ageMs: entry ? Date.now() - entry.createdAt : 0,
93
+ reason: worker.requestCount >= this.config.maxRequestsPerWorker
94
+ ? "request_count"
95
+ : "age",
96
+ });
97
+ this.evictWorker(projectId);
98
+ const fresh = this.getOrCreateWorker(projectId, readPaths);
99
+ return fresh.execute(request);
100
+ }
101
+ finally {
102
+ this.recycling.delete(projectId);
103
+ }
104
+ }
105
+ return worker.execute(request);
106
+ }, { "workerPool.projectId": projectId });
107
+ }
108
+ /**
109
+ * Evict a specific project's worker.
110
+ */
111
+ evictWorker(projectId) {
112
+ const entry = this.pool.get(projectId);
113
+ if (!entry)
114
+ return;
115
+ entry.worker.terminate();
116
+ this.pool.delete(projectId);
117
+ logger.debug("Worker evicted", { projectId, poolSize: this.pool.size });
118
+ }
119
+ /**
120
+ * Get pool statistics for monitoring.
121
+ */
122
+ getStats() {
123
+ const workers = {};
124
+ const now = Date.now();
125
+ for (const [id, entry] of this.pool) {
126
+ workers[id] = {
127
+ status: entry.worker.status,
128
+ requestCount: entry.worker.requestCount,
129
+ hasPending: entry.worker.hasPendingRequests,
130
+ idleMs: now - entry.lastAccessedAt,
131
+ ageMs: now - entry.createdAt,
132
+ };
133
+ }
134
+ return {
135
+ poolSize: this.pool.size,
136
+ maxPoolSize: this.config.maxPoolSize,
137
+ memoryBudgetMb: this.config.memoryBudgetMb,
138
+ workers,
139
+ };
140
+ }
141
+ /**
142
+ * Get aggregate metrics suitable for Prometheus exposition.
143
+ */
144
+ getMetrics() {
145
+ let totalRequests = 0;
146
+ let busy = 0;
147
+ let crashed = 0;
148
+ for (const [, entry] of this.pool) {
149
+ totalRequests += entry.worker.requestCount;
150
+ if (entry.worker.hasPendingRequests)
151
+ busy++;
152
+ if (entry.worker.status === "crashed")
153
+ crashed++;
154
+ }
155
+ return {
156
+ workerPoolSize: this.pool.size,
157
+ workerPoolCapacity: this.config.maxPoolSize,
158
+ totalRequestsProcessed: totalRequests,
159
+ busyWorkers: busy,
160
+ crashedWorkers: crashed,
161
+ };
162
+ }
163
+ /**
164
+ * Shutdown the pool. Terminates all workers and stops timers.
165
+ */
166
+ shutdown() {
167
+ if (this.cleanupInterval)
168
+ clearInterval(this.cleanupInterval);
169
+ if (this.healthCheckInterval)
170
+ clearInterval(this.healthCheckInterval);
171
+ for (const [, entry] of this.pool) {
172
+ entry.worker.terminate();
173
+ }
174
+ this.pool.clear();
175
+ logger.debug("Worker pool shut down");
176
+ }
177
+ // -----------------------------------------------------------------------
178
+ // Private — Cleanup & Eviction
179
+ // -----------------------------------------------------------------------
180
+ startCleanup() {
181
+ // Run idle eviction every 30 seconds
182
+ this.cleanupInterval = dntShim.setInterval(() => {
183
+ this.evictIdleWorkers();
184
+ }, 30_000);
185
+ unrefTimer(this.cleanupInterval);
186
+ }
187
+ startHealthChecks() {
188
+ this.healthCheckInterval = dntShim.setInterval(() => {
189
+ void this.checkHealth();
190
+ }, this.config.healthCheckIntervalMs);
191
+ unrefTimer(this.healthCheckInterval);
192
+ }
193
+ evictIdleWorkers() {
194
+ const now = Date.now();
195
+ for (const [projectId, entry] of this.pool) {
196
+ const idleTime = now - entry.lastAccessedAt;
197
+ if (idleTime > this.config.idleTimeoutMs && !entry.worker.hasPendingRequests) {
198
+ entry.worker.terminate();
199
+ this.pool.delete(projectId);
200
+ logger.debug("Evicted idle worker", {
201
+ projectId,
202
+ idleMs: idleTime,
203
+ poolSize: this.pool.size,
204
+ });
205
+ }
206
+ }
207
+ }
208
+ evictIfNeeded() {
209
+ if (this.pool.size < this.config.maxPoolSize)
210
+ return;
211
+ // Find the LRU entry that has no pending requests
212
+ let lruId = null;
213
+ let lruTime = Infinity;
214
+ for (const [projectId, entry] of this.pool) {
215
+ if (!entry.worker.hasPendingRequests && entry.lastAccessedAt < lruTime) {
216
+ lruTime = entry.lastAccessedAt;
217
+ lruId = projectId;
218
+ }
219
+ }
220
+ if (lruId) {
221
+ this.evictWorker(lruId);
222
+ }
223
+ else {
224
+ // All workers have pending requests — force evict the oldest
225
+ for (const [projectId, entry] of this.pool) {
226
+ if (entry.lastAccessedAt < lruTime) {
227
+ lruTime = entry.lastAccessedAt;
228
+ lruId = projectId;
229
+ }
230
+ }
231
+ if (lruId)
232
+ this.evictWorker(lruId);
233
+ }
234
+ }
235
+ async checkHealth() {
236
+ for (const [projectId, entry] of this.pool) {
237
+ if (entry.worker.status === "crashed" || entry.worker.status === "terminated") {
238
+ this.pool.delete(projectId);
239
+ continue;
240
+ }
241
+ const healthy = await entry.worker.isHealthy();
242
+ if (!healthy) {
243
+ logger.warn("Worker failed health check", { projectId });
244
+ entry.worker.terminate();
245
+ this.pool.delete(projectId);
246
+ }
247
+ }
248
+ // Evict oldest workers when under memory pressure
249
+ this.evictUnderMemoryPressure();
250
+ }
251
+ /**
252
+ * Evict workers when the process is under memory pressure.
253
+ * Uses the global heap stats — if heap usage is above a threshold,
254
+ * evict idle workers starting with the oldest to free memory.
255
+ */
256
+ evictUnderMemoryPressure() {
257
+ // Lazy import to avoid circular deps — this is only called during health checks
258
+ try {
259
+ // deno-lint-ignore no-explicit-any
260
+ const { getHeapStats } = dntShim.dntGlobalThis.__veryfront_heap_stats ?? {};
261
+ if (!getHeapStats)
262
+ return;
263
+ const { heapUsedPercent } = getHeapStats();
264
+ if (heapUsedPercent < 70)
265
+ return; // Only act above 70%
266
+ // Sort workers by last access time (oldest first)
267
+ const entries = [...this.pool.entries()]
268
+ .filter(([, e]) => !e.worker.hasPendingRequests)
269
+ .sort(([, a], [, b]) => a.lastAccessedAt - b.lastAccessedAt);
270
+ // Evict up to 25% of idle workers
271
+ const toEvict = Math.max(1, Math.ceil(entries.length * 0.25));
272
+ for (let i = 0; i < toEvict && i < entries.length; i++) {
273
+ const projectId = entries[i][0];
274
+ this.evictWorker(projectId);
275
+ logger.debug("Evicted worker due to memory pressure", {
276
+ projectId,
277
+ heapUsedPercent,
278
+ poolSize: this.pool.size,
279
+ });
280
+ }
281
+ }
282
+ catch {
283
+ // getHeapStats may not be available in all environments
284
+ }
285
+ }
286
+ }
287
+ // ---------------------------------------------------------------------------
288
+ // Singleton & Feature Flag
289
+ // ---------------------------------------------------------------------------
290
+ // Cache feature flag results to avoid env lookups on every request
291
+ let _flagsResolved = false;
292
+ let _apiIsolation = false;
293
+ let _dataIsolation = false;
294
+ let _ssrIsolation = false;
295
+ function resolveFlags() {
296
+ if (_flagsResolved)
297
+ return;
298
+ const master = getEnvBoolean("WORKER_ISOLATION_ENABLED", false);
299
+ _apiIsolation = master && getEnvBoolean("WORKER_ISOLATION_API", false);
300
+ _dataIsolation = master && getEnvBoolean("WORKER_ISOLATION_DATA", false);
301
+ _ssrIsolation = master && getEnvBoolean("WORKER_ISOLATION_SSR", false);
302
+ _flagsResolved = true;
303
+ }
304
+ /**
305
+ * Whether worker isolation is enabled for API routes.
306
+ * Controlled by WORKER_ISOLATION_API=1 (or WORKER_ISOLATION_ENABLED=1 as master switch).
307
+ */
308
+ export function isWorkerIsolationEnabled() {
309
+ resolveFlags();
310
+ return _apiIsolation;
311
+ }
312
+ /**
313
+ * Whether worker isolation is enabled for data fetchers (getServerData).
314
+ * Controlled by WORKER_ISOLATION_DATA=1 (requires WORKER_ISOLATION_ENABLED=1).
315
+ */
316
+ export function isDataIsolationEnabled() {
317
+ resolveFlags();
318
+ return _dataIsolation;
319
+ }
320
+ /**
321
+ * Whether worker isolation is enabled for SSR rendering.
322
+ * Controlled by WORKER_ISOLATION_SSR=1 (requires WORKER_ISOLATION_ENABLED=1).
323
+ */
324
+ export function isSSRIsolationEnabled() {
325
+ resolveFlags();
326
+ return _ssrIsolation;
327
+ }
328
+ /** Lazy singleton — created on first use when isolation is enabled */
329
+ let _pool = null;
330
+ export function getWorkerPool() {
331
+ if (!_pool) {
332
+ _pool = new WorkerPool({
333
+ maxPoolSize: getEnvNumber("WORKER_MAX_POOL_SIZE") ?? DEFAULT_WORKER_POOL_CONFIG.maxPoolSize,
334
+ idleTimeoutMs: getEnvNumber("WORKER_IDLE_TIMEOUT_MS") ??
335
+ DEFAULT_WORKER_POOL_CONFIG.idleTimeoutMs,
336
+ requestTimeoutMs: getEnvNumber("WORKER_REQUEST_TIMEOUT_MS") ??
337
+ DEFAULT_WORKER_POOL_CONFIG.requestTimeoutMs,
338
+ maxRequestsPerWorker: getEnvNumber("WORKER_MAX_REQUESTS_PER_WORKER") ??
339
+ DEFAULT_WORKER_POOL_CONFIG.maxRequestsPerWorker,
340
+ maxWorkerAgeMs: getEnvNumber("WORKER_MAX_AGE_MS") ??
341
+ DEFAULT_WORKER_POOL_CONFIG.maxWorkerAgeMs,
342
+ memoryBudgetMb: getEnvNumber("WORKER_MEMORY_BUDGET_MB") ??
343
+ DEFAULT_WORKER_POOL_CONFIG.memoryBudgetMb,
344
+ });
345
+ }
346
+ return _pool;
347
+ }
348
+ /** Reset the singleton and cached flags — for testing only */
349
+ export function __resetPoolForTests() {
350
+ _pool?.shutdown();
351
+ _pool = null;
352
+ _flagsResolved = false;
353
+ _apiIsolation = false;
354
+ _dataIsolation = false;
355
+ _ssrIsolation = false;
356
+ }
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Worker Isolation Types
3
+ *
4
+ * Shared type definitions for the worker isolation system.
5
+ * Used by both the main process and worker script.
6
+ *
7
+ * @module security/sandbox/worker-types
8
+ */
9
+ /**
10
+ * Serialized request data that can cross the Worker boundary via postMessage.
11
+ * We cannot send a full Request object (it's not structured-cloneable),
12
+ * so we extract the essential fields.
13
+ */
14
+ export interface SerializedRequest {
15
+ url: string;
16
+ method: string;
17
+ headers: [string, string][];
18
+ body: Uint8Array | null;
19
+ }
20
+ /**
21
+ * Serialized API context for Pages Router routes.
22
+ */
23
+ export interface SerializedPagesContext {
24
+ url: string;
25
+ method: string;
26
+ headers: [string, string][];
27
+ body: Uint8Array | null;
28
+ params: Record<string, string | string[]>;
29
+ cookies: Record<string, string>;
30
+ }
31
+ /**
32
+ * Serialized response data that can cross the Worker boundary.
33
+ */
34
+ export interface SerializedResponse {
35
+ status: number;
36
+ statusText: string;
37
+ headers: [string, string][];
38
+ body: Uint8Array | null;
39
+ }
40
+ /**
41
+ * Serialized error for cross-boundary transport.
42
+ */
43
+ export interface SerializedError {
44
+ message: string;
45
+ name: string;
46
+ stack?: string;
47
+ /** RFC 9457 fields if the error originated from VFError */
48
+ type?: string;
49
+ status?: number;
50
+ detail?: string;
51
+ }
52
+ /**
53
+ * Serialized DataContext for data fetcher isolation.
54
+ * Request and URL are not structured-cloneable, so we serialize them.
55
+ */
56
+ export interface SerializedDataContext {
57
+ params: Record<string, string | string[]>;
58
+ /** URLSearchParams.toString() */
59
+ query: string;
60
+ request: SerializedRequest;
61
+ /** URL.toString() */
62
+ url: string;
63
+ }
64
+ /**
65
+ * Serialized DataResult — plain JSON, fully structured-cloneable.
66
+ */
67
+ export interface SerializedDataResult {
68
+ props?: unknown;
69
+ redirect?: {
70
+ destination: string;
71
+ permanent?: boolean;
72
+ };
73
+ notFound?: boolean;
74
+ revalidate?: number | false;
75
+ }
76
+ export type WorkerRequest = ExecuteAppRouteRequest | ExecutePagesRouteRequest | FetchDataRequest | RenderSSRRequest;
77
+ export interface ExecuteAppRouteRequest {
78
+ type: "execute-app-route";
79
+ id: string;
80
+ modulePath: string;
81
+ method: string;
82
+ request: SerializedRequest;
83
+ params: Record<string, string | string[]>;
84
+ projectDir: string;
85
+ /** Per-project env var overlay for multi-tenant proxy mode */
86
+ projectEnv?: Record<string, string>;
87
+ }
88
+ export interface ExecutePagesRouteRequest {
89
+ type: "execute-pages-route";
90
+ id: string;
91
+ modulePath: string;
92
+ method: string;
93
+ context: SerializedPagesContext;
94
+ projectDir: string;
95
+ /** Per-project env var overlay for multi-tenant proxy mode */
96
+ projectEnv?: Record<string, string>;
97
+ }
98
+ export interface FetchDataRequest {
99
+ type: "fetch-data";
100
+ id: string;
101
+ modulePath: string;
102
+ context: SerializedDataContext;
103
+ }
104
+ export interface RenderSSRRequest {
105
+ type: "render-ssr";
106
+ id: string;
107
+ /** Temp file path for the page component module */
108
+ pageModulePath: string;
109
+ /** Ordered layout module temp paths (innermost → outermost) */
110
+ layoutModulePaths: string[];
111
+ /** Page component props (JSON-serializable) */
112
+ pageProps: Record<string, unknown>;
113
+ /** Layout props keyed by layout index (matching layoutModulePaths order) */
114
+ layoutProps: Record<string, unknown>[];
115
+ /** Rendering delivery mode */
116
+ delivery: "string" | "stream";
117
+ }
118
+ export interface WorkerStreamChunk {
119
+ type: "stream-chunk";
120
+ id: string;
121
+ chunk: Uint8Array;
122
+ }
123
+ export interface WorkerStreamEnd {
124
+ type: "stream-end";
125
+ id: string;
126
+ }
127
+ export type WorkerResponse = WorkerResultResponse | WorkerDataResultResponse | WorkerSSRResultResponse | WorkerErrorResponse;
128
+ export interface WorkerSSRResultResponse {
129
+ type: "ssr-result";
130
+ id: string;
131
+ html: string;
132
+ }
133
+ export interface WorkerResultResponse {
134
+ type: "result";
135
+ id: string;
136
+ response: SerializedResponse;
137
+ }
138
+ export interface WorkerDataResultResponse {
139
+ type: "data-result";
140
+ id: string;
141
+ result: SerializedDataResult;
142
+ }
143
+ export interface WorkerErrorResponse {
144
+ type: "error";
145
+ id: string;
146
+ error: SerializedError;
147
+ }
148
+ export interface WorkerPoolConfig {
149
+ /** Maximum number of concurrent workers (default: 20) */
150
+ maxPoolSize: number;
151
+ /** Idle timeout before evicting a worker (default: 300_000 = 5 minutes) */
152
+ idleTimeoutMs: number;
153
+ /** Per-request timeout inside the worker (default: 30_000) */
154
+ requestTimeoutMs: number;
155
+ /** Health check interval (default: 30_000) */
156
+ healthCheckIntervalMs: number;
157
+ /** Maximum requests before recycling a worker (default: 1000) */
158
+ maxRequestsPerWorker: number;
159
+ /** Maximum age of a worker in ms before recycling (default: 600_000 = 10 minutes) */
160
+ maxWorkerAgeMs: number;
161
+ /** Per-worker memory budget in MB (default: 64). Workers exceeding this are evicted. */
162
+ memoryBudgetMb: number;
163
+ }
164
+ export declare const DEFAULT_WORKER_POOL_CONFIG: WorkerPoolConfig;
165
+ //# sourceMappingURL=worker-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-types.d.ts","sourceRoot":"","sources":["../../../../src/src/security/sandbox/worker-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Worker Isolation Types
3
+ *
4
+ * Shared type definitions for the worker isolation system.
5
+ * Used by both the main process and worker script.
6
+ *
7
+ * @module security/sandbox/worker-types
8
+ */
9
+ export const DEFAULT_WORKER_POOL_CONFIG = {
10
+ maxPoolSize: 20,
11
+ idleTimeoutMs: 300_000,
12
+ requestTimeoutMs: 30_000,
13
+ healthCheckIntervalMs: 30_000,
14
+ maxRequestsPerWorker: 1_000,
15
+ maxWorkerAgeMs: 600_000,
16
+ memoryBudgetMb: 64,
17
+ };
@@ -9,6 +9,7 @@
9
9
  import * as dntShim from "../../../../../_dnt.shims.js";
10
10
  import { BaseHandler } from "../../response/base.js";
11
11
  import type { HandlerContext, HandlerMetadata, HandlerResult } from "../../types.js";
12
+ import { type SSRServiceLike } from "../../../services/rendering/ssr.service.js";
12
13
  /**
13
14
  * Determine if request should serve production (released) content.
14
15
  * Uses resolvedEnvironment (from domain lookup) with fallback to requestContext.mode.
@@ -29,6 +30,7 @@ export declare function isProductionMode(ctx: HandlerContext, _url?: URL): boole
29
30
  export declare class SSRHandler extends BaseHandler {
30
31
  metadata: HandlerMetadata;
31
32
  private ssrService;
33
+ constructor(ssrService?: SSRServiceLike);
32
34
  handle(req: dntShim.Request, ctx: HandlerContext): Promise<HandlerResult>;
33
35
  private setupContextAndRender;
34
36
  private handleWithContext;
@@ -1 +1 @@
1
- {"version":3,"file":"ssr.handler.d.ts","sourceRoot":"","sources":["../../../../../../src/src/server/handlers/request/ssr/ssr.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,OAAO,MAAM,8BAA8B,CAAC;AAGxD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAEf,aAAa,EACd,MAAM,gBAAgB,CAAC;AAiBxB;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAKzE;AAED;;;;;;;;;;GAUG;AACH,qBAAa,UAAW,SAAQ,WAAW;IACzC,QAAQ,EAAE,eAAe,CAIvB;IAEF,OAAO,CAAC,UAAU,CAAoB;IAEtC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IA8BzE,OAAO,CAAC,qBAAqB;IAgE7B,OAAO,CAAC,iBAAiB;YAuDX,cAAc;YA6Bd,sBAAsB;YAgBtB,aAAa;CAU5B"}
1
+ {"version":3,"file":"ssr.handler.d.ts","sourceRoot":"","sources":["../../../../../../src/src/server/handlers/request/ssr/ssr.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,OAAO,MAAM,8BAA8B,CAAC;AAGxD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAEf,aAAa,EACd,MAAM,gBAAgB,CAAC;AAWxB,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,4CAA4C,CAAC;AAMpD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAKzE;AAED;;;;;;;;;;GAUG;AACH,qBAAa,UAAW,SAAQ,WAAW;IACzC,QAAQ,EAAE,eAAe,CAIvB;IAEF,OAAO,CAAC,UAAU,CAAiB;gBAEvB,UAAU,CAAC,EAAE,cAAc;IAKvC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IA8BzE,OAAO,CAAC,qBAAqB;IAgE7B,OAAO,CAAC,iBAAiB;YAuDX,cAAc;YA6Bd,sBAAsB;YAgBtB,aAAa;CAU5B"}
@@ -9,7 +9,7 @@ import { serverLogger } from "../../../../utils/index.js";
9
9
  import { endRequest, startRequest } from "../../../../utils/index.js";
10
10
  import { tryNotFoundFallback } from "./not-found-fallback.js";
11
11
  import { tryErrorPageFallback } from "./error-page-fallback.js";
12
- import { SSRService } from "../../../services/rendering/ssr.service.js";
12
+ import { SSRService, } from "../../../services/rendering/ssr.service.js";
13
13
  import { ErrorPages } from "../../../utils/error-html.js";
14
14
  import { buildSSRResponse } from "./ssr-response-builder.js";
15
15
  const logger = serverLogger.component("ssr");
@@ -41,7 +41,11 @@ export class SSRHandler extends BaseHandler {
41
41
  priority: PRIORITY_LOW,
42
42
  patterns: [{ pattern: /^(?!\/_).*/, method: ["GET", "HEAD"] }],
43
43
  };
44
- ssrService = new SSRService();
44
+ ssrService;
45
+ constructor(ssrService) {
46
+ super();
47
+ this.ssrService = ssrService ?? new SSRService();
48
+ }
45
49
  handle(req, ctx) {
46
50
  const url = new URL(req.url);
47
51
  const pathname = url.pathname;
@@ -14,4 +14,10 @@ export declare function getProjectEnv(key: string): string | undefined;
14
14
  * to prevent remote projects from reading host-level secrets.
15
15
  */
16
16
  export declare function isProjectEnvActive(): boolean;
17
+ /**
18
+ * Get a snapshot of the current project env overlay.
19
+ * Returns undefined if no overlay is active.
20
+ * Used to forward env vars to isolated workers in proxy mode.
21
+ */
22
+ export declare function getProjectEnvSnapshot(): Record<string, string> | undefined;
17
23
  //# sourceMappingURL=storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../src/src/server/project-env/storage.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEjF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../src/src/server/project-env/storage.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEjF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAE1E"}
@@ -31,6 +31,14 @@ export function getProjectEnv(key) {
31
31
  export function isProjectEnvActive() {
32
32
  return projectEnvStorage.getStore() !== undefined;
33
33
  }
34
+ /**
35
+ * Get a snapshot of the current project env overlay.
36
+ * Returns undefined if no overlay is active.
37
+ * Used to forward env vars to isolated workers in proxy mode.
38
+ */
39
+ export function getProjectEnvSnapshot() {
40
+ return projectEnvStorage.getStore();
41
+ }
34
42
  // Register on globalThis so process.ts can access without circular imports.
35
43
  // process.ts is low-level (platform/compat), project-env is high-level (server/).
36
44
  dntShim.dntGlobalThis.__vfProjectEnvGetter = getProjectEnv;
@@ -8,6 +8,7 @@
8
8
  */
9
9
  import type { RuntimeAdapter } from "../../platform/adapters/base.js";
10
10
  import type { VeryfrontConfig } from "../../config/index.js";
11
+ import { type ProjectDiscoveryCache } from "./local-project-discovery.js";
11
12
  import type { ParsedDomain } from "../utils/domain-parser.js";
12
13
  interface AdapterResolutionResult {
13
14
  /** The effective project directory to use */
@@ -46,6 +47,8 @@ interface AdapterResolutionOptions {
46
47
  headerProjectPath: string | undefined;
47
48
  /** Whether running in proxy mode */
48
49
  isProxyMode: boolean;
50
+ /** Optional injectable cache (defaults to module-level singleton) */
51
+ cache?: ProjectDiscoveryCache;
49
52
  }
50
53
  /**
51
54
  * Resolve the effective adapter and config for a request.
@@ -1 +1 @@
1
- {"version":3,"file":"adapter-factory.d.ts","sourceRoot":"","sources":["../../../../src/src/server/runtime-handler/adapter-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAGtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAM9D,UAAU,uBAAuB;IAC/B,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,OAAO,EAAE,cAAc,CAAC;IACxB,kCAAkC;IAClC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,yDAAyD;IACzD,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,UAAU,wBAAwB;IAChC,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,OAAO,EAAE,cAAc,CAAC;IACxB,6BAA6B;IAC7B,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,mBAAmB;IACnB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,iBAAiB;IACjB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,kBAAkB;IAClB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,iBAAiB;IACjB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,uCAAuC;IACvC,QAAQ,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;IAC/C,kBAAkB;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,yCAAyC;IACzC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,yBAAyB;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,+BAA+B;IAC/B,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,oCAAoC;IACpC,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,uBAAuB,CAAC,CAmHlC"}
1
+ {"version":3,"file":"adapter-factory.d.ts","sourceRoot":"","sources":["../../../../src/src/server/runtime-handler/adapter-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAGtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAM9D,UAAU,uBAAuB;IAC/B,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,OAAO,EAAE,cAAc,CAAC;IACxB,kCAAkC;IAClC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,yDAAyD;IACzD,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,UAAU,wBAAwB;IAChC,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,OAAO,EAAE,cAAc,CAAC;IACxB,6BAA6B;IAC7B,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,mBAAmB;IACnB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,iBAAiB;IACjB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,kBAAkB;IAClB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,iBAAiB;IACjB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,uCAAuC;IACvC,QAAQ,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;IAC/C,kBAAkB;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,yCAAyC;IACzC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,yBAAyB;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,+BAA+B;IAC/B,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,oCAAoC;IACpC,WAAW,EAAE,OAAO,CAAC;IACrB,qEAAqE;IACrE,KAAK,CAAC,EAAE,qBAAqB,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,uBAAuB,CAAC,CAqHlC"}