veryfront 0.1.75 → 0.1.76
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/README.md +2 -0
- package/esm/cli/commands/files/command.d.ts +3 -3
- package/esm/deno.d.ts +5 -0
- package/esm/deno.js +11 -6
- package/esm/src/data/server-data-fetcher.d.ts.map +1 -1
- package/esm/src/data/server-data-fetcher.js +17 -1
- package/esm/src/jobs/index.d.ts +34 -0
- package/esm/src/jobs/index.d.ts.map +1 -0
- package/esm/src/jobs/index.js +33 -0
- package/esm/src/jobs/jobs-client.d.ts +134 -0
- package/esm/src/jobs/jobs-client.d.ts.map +1 -0
- package/esm/src/jobs/jobs-client.js +218 -0
- package/esm/src/jobs/schemas.d.ts +1304 -0
- package/esm/src/jobs/schemas.d.ts.map +1 -0
- package/esm/src/jobs/schemas.js +159 -0
- package/esm/src/platform/adapters/veryfront-api-client/retry-handler.d.ts +4 -0
- package/esm/src/platform/adapters/veryfront-api-client/retry-handler.d.ts.map +1 -1
- package/esm/src/platform/adapters/veryfront-api-client/retry-handler.js +12 -6
- package/esm/src/proxy/handler.d.ts.map +1 -1
- package/esm/src/proxy/handler.js +21 -21
- package/esm/src/routing/api/route-executor.d.ts.map +1 -1
- package/esm/src/routing/api/route-executor.js +30 -3
- package/esm/src/security/deno-permissions.d.ts +1 -1
- package/esm/src/security/deno-permissions.d.ts.map +1 -1
- package/esm/src/security/deno-permissions.js +2 -1
- package/esm/src/security/sandbox/project-worker.d.ts.map +1 -1
- package/esm/src/security/sandbox/project-worker.js +2 -2
- package/esm/src/security/sandbox/worker-permissions.d.ts.map +1 -1
- package/esm/src/security/sandbox/worker-permissions.js +23 -20
- package/esm/src/security/sandbox/worker-pool.d.ts.map +1 -1
- package/esm/src/security/sandbox/worker-pool.js +17 -14
- package/esm/src/security/sandbox/worker-types.d.ts +2 -0
- package/esm/src/security/sandbox/worker-types.d.ts.map +1 -1
- package/esm/src/security/sandbox/worker-types.js +2 -0
- package/esm/src/server/handlers/request/internal-tasks-list.handler.d.ts +11 -0
- package/esm/src/server/handlers/request/internal-tasks-list.handler.d.ts.map +1 -0
- package/esm/src/server/handlers/request/internal-tasks-list.handler.js +72 -0
- package/esm/src/server/runtime-handler/index.d.ts +1 -1
- package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
- package/esm/src/server/runtime-handler/index.js +3 -0
- package/esm/src/task/control-plane.d.ts +105 -0
- package/esm/src/task/control-plane.d.ts.map +1 -0
- package/esm/src/task/control-plane.js +52 -0
- package/esm/src/task/types.d.ts +6 -0
- package/esm/src/task/types.d.ts.map +1 -1
- package/package.json +5 -1
- package/src/deno.js +11 -6
- package/src/src/data/server-data-fetcher.ts +30 -2
- package/src/src/jobs/index.ts +85 -0
- package/src/src/jobs/jobs-client.ts +503 -0
- package/src/src/jobs/schemas.ts +202 -0
- package/src/src/platform/adapters/veryfront-api-client/retry-handler.ts +15 -6
- package/src/src/proxy/handler.ts +27 -19
- package/src/src/routing/api/route-executor.ts +43 -7
- package/src/src/security/deno-permissions.ts +2 -1
- package/src/src/security/sandbox/project-worker.ts +2 -2
- package/src/src/security/sandbox/worker-permissions.ts +22 -19
- package/src/src/security/sandbox/worker-pool.ts +21 -13
- package/src/src/security/sandbox/worker-types.ts +3 -0
- package/src/src/server/handlers/request/internal-tasks-list.handler.ts +103 -0
- package/src/src/server/runtime-handler/index.ts +3 -0
- package/src/src/task/control-plane.ts +76 -0
- package/src/src/task/types.ts +6 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/src/jobs/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const JobStatusSchema = z.enum([
|
|
3
|
+
"submitted",
|
|
4
|
+
"working",
|
|
5
|
+
"completed",
|
|
6
|
+
"failed",
|
|
7
|
+
"canceled",
|
|
8
|
+
]);
|
|
9
|
+
export const CronJobStatusSchema = z.enum(["active", "paused", "deleting"]);
|
|
10
|
+
export const ReservedJobTargetFamilySchema = z.enum(["task:*", "workflow:*", "deploy:*"]);
|
|
11
|
+
export const PageInfoSchema = z.object({
|
|
12
|
+
self: z.string().nullable(),
|
|
13
|
+
first: z.literal(null),
|
|
14
|
+
next: z.string().nullable(),
|
|
15
|
+
prev: z.string().nullable(),
|
|
16
|
+
});
|
|
17
|
+
const JsonObjectSchema = z.record(z.unknown());
|
|
18
|
+
export const KnowledgeIngestFileResultSchema = z.object({
|
|
19
|
+
source: z.string(),
|
|
20
|
+
localSourcePath: z.string(),
|
|
21
|
+
outputPath: z.string(),
|
|
22
|
+
remotePath: z.string(),
|
|
23
|
+
slug: z.string(),
|
|
24
|
+
sourceType: z.string(),
|
|
25
|
+
summary: z.string(),
|
|
26
|
+
stats: JsonObjectSchema,
|
|
27
|
+
warnings: z.array(z.string()),
|
|
28
|
+
});
|
|
29
|
+
export const JobResultSchema = z
|
|
30
|
+
.discriminatedUnion("kind", [
|
|
31
|
+
z.object({
|
|
32
|
+
kind: z.literal("knowledge_ingest"),
|
|
33
|
+
files: z.array(KnowledgeIngestFileResultSchema),
|
|
34
|
+
}),
|
|
35
|
+
z.object({
|
|
36
|
+
kind: z.literal("artifacts"),
|
|
37
|
+
artifacts: z.array(z.unknown()),
|
|
38
|
+
}),
|
|
39
|
+
])
|
|
40
|
+
.nullable();
|
|
41
|
+
export const JobSchema = z.object({
|
|
42
|
+
id: z.string().uuid(),
|
|
43
|
+
project_id: z.string().uuid(),
|
|
44
|
+
environment_id: z.string().uuid().nullable(),
|
|
45
|
+
cron_job_id: z.string().uuid().nullable(),
|
|
46
|
+
batch_id: z.string().uuid().nullable(),
|
|
47
|
+
name: z.string(),
|
|
48
|
+
status: JobStatusSchema,
|
|
49
|
+
target: z.string(),
|
|
50
|
+
config: JsonObjectSchema,
|
|
51
|
+
context_id: z.string().uuid().nullable(),
|
|
52
|
+
timeout_seconds: z.number(),
|
|
53
|
+
backoff_limit: z.number(),
|
|
54
|
+
exit_code: z.number().nullable(),
|
|
55
|
+
failed_reason: z.string().nullable(),
|
|
56
|
+
failure_detail: z.string().nullable(),
|
|
57
|
+
result: JobResultSchema,
|
|
58
|
+
started_at: z.string().nullable(),
|
|
59
|
+
completed_at: z.string().nullable(),
|
|
60
|
+
created_by: z.string().uuid().nullable(),
|
|
61
|
+
created_at: z.string(),
|
|
62
|
+
updated_at: z.string(),
|
|
63
|
+
});
|
|
64
|
+
export const PaginatedJobsResponseSchema = z.object({
|
|
65
|
+
data: z.array(JobSchema),
|
|
66
|
+
page_info: PageInfoSchema,
|
|
67
|
+
});
|
|
68
|
+
export const JobEventSchema = z.object({
|
|
69
|
+
timestamp: z.string(),
|
|
70
|
+
level: z.string(),
|
|
71
|
+
message: z.string(),
|
|
72
|
+
service: z.string(),
|
|
73
|
+
trace_id: z.string().optional(),
|
|
74
|
+
request_id: z.string().optional(),
|
|
75
|
+
metadata: z.record(z.string()).optional(),
|
|
76
|
+
});
|
|
77
|
+
export const JobEventsResponseSchema = z.object({
|
|
78
|
+
entries: z.array(JobEventSchema),
|
|
79
|
+
next_cursor: z.string().nullable(),
|
|
80
|
+
stats: z.object({
|
|
81
|
+
bytes_processed: z.number(),
|
|
82
|
+
lines_processed: z.number(),
|
|
83
|
+
query_time_ms: z.number(),
|
|
84
|
+
}),
|
|
85
|
+
});
|
|
86
|
+
export const JobLogsResponseSchema = z.object({
|
|
87
|
+
logs: z.string().nullable(),
|
|
88
|
+
});
|
|
89
|
+
export const KnowledgeIngestBatchSourceSchema = z.object({
|
|
90
|
+
label: z.string(),
|
|
91
|
+
path: z.string().nullable(),
|
|
92
|
+
upload_id: z.string().uuid().nullable(),
|
|
93
|
+
remote_path: z.string().nullable(),
|
|
94
|
+
warning_count: z.number().int().nonnegative(),
|
|
95
|
+
});
|
|
96
|
+
export const JobBatchStatusCountsSchema = z.object({
|
|
97
|
+
submitted: z.number().int().nonnegative(),
|
|
98
|
+
working: z.number().int().nonnegative(),
|
|
99
|
+
completed: z.number().int().nonnegative(),
|
|
100
|
+
failed: z.number().int().nonnegative(),
|
|
101
|
+
canceled: z.number().int().nonnegative(),
|
|
102
|
+
});
|
|
103
|
+
export const JobBatchResultSchema = z
|
|
104
|
+
.discriminatedUnion("kind", [
|
|
105
|
+
z.object({
|
|
106
|
+
kind: z.literal("knowledge_ingest"),
|
|
107
|
+
total_count: z.number().int().nonnegative(),
|
|
108
|
+
completed_count: z.number().int().nonnegative(),
|
|
109
|
+
processing: z.array(KnowledgeIngestBatchSourceSchema),
|
|
110
|
+
completed: z.array(KnowledgeIngestBatchSourceSchema),
|
|
111
|
+
remaining: z.array(KnowledgeIngestBatchSourceSchema),
|
|
112
|
+
remaining_label: z.enum(["Remaining Files", "Not Ingested Files"]),
|
|
113
|
+
}),
|
|
114
|
+
])
|
|
115
|
+
.nullable();
|
|
116
|
+
export const JobBatchSchema = z.object({
|
|
117
|
+
id: z.string().uuid(),
|
|
118
|
+
project_id: z.string().uuid(),
|
|
119
|
+
target: z.string().nullable(),
|
|
120
|
+
job_count: z.number().int().nonnegative(),
|
|
121
|
+
status_counts: JobBatchStatusCountsSchema,
|
|
122
|
+
created_at: z.string(),
|
|
123
|
+
updated_at: z.string(),
|
|
124
|
+
result: JobBatchResultSchema,
|
|
125
|
+
});
|
|
126
|
+
export const JobTargetDefinitionSchema = z.object({
|
|
127
|
+
target: z.string(),
|
|
128
|
+
family: z.string(),
|
|
129
|
+
description: z.string(),
|
|
130
|
+
input_schema: JsonObjectSchema,
|
|
131
|
+
output_schema: JsonObjectSchema.nullable(),
|
|
132
|
+
});
|
|
133
|
+
export const JobTargetDefinitionsResponseSchema = z.object({
|
|
134
|
+
reserved_families: z.array(ReservedJobTargetFamilySchema),
|
|
135
|
+
data: z.array(JobTargetDefinitionSchema),
|
|
136
|
+
});
|
|
137
|
+
export const CronJobSchema = z.object({
|
|
138
|
+
id: z.string().uuid(),
|
|
139
|
+
project_id: z.string().uuid(),
|
|
140
|
+
environment_id: z.string().uuid().nullable(),
|
|
141
|
+
name: z.string(),
|
|
142
|
+
status: CronJobStatusSchema,
|
|
143
|
+
target: z.string(),
|
|
144
|
+
schedule: z.string(),
|
|
145
|
+
timezone: z.string(),
|
|
146
|
+
config: JsonObjectSchema,
|
|
147
|
+
timeout_seconds: z.number(),
|
|
148
|
+
backoff_limit: z.number(),
|
|
149
|
+
concurrency_policy: z.string(),
|
|
150
|
+
last_scheduled_at: z.string().nullable(),
|
|
151
|
+
last_successful_at: z.string().nullable(),
|
|
152
|
+
created_by: z.string().uuid().nullable(),
|
|
153
|
+
created_at: z.string(),
|
|
154
|
+
updated_at: z.string(),
|
|
155
|
+
});
|
|
156
|
+
export const PaginatedCronJobsResponseSchema = z.object({
|
|
157
|
+
data: z.array(CronJobSchema),
|
|
158
|
+
page_info: PageInfoSchema,
|
|
159
|
+
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as dntShim from "../../../../_dnt.shims.js";
|
|
1
2
|
export interface RetryConfig {
|
|
2
3
|
maxRetries: number;
|
|
3
4
|
initialDelay: number;
|
|
@@ -7,6 +8,9 @@ export interface RequestOptions {
|
|
|
7
8
|
returnText?: boolean;
|
|
8
9
|
/** Request timeout in milliseconds. Defaults to 30000ms (30 seconds). */
|
|
9
10
|
timeoutMs?: number;
|
|
11
|
+
method?: string;
|
|
12
|
+
body?: dntShim.BodyInit | null;
|
|
13
|
+
headers?: dntShim.HeadersInit;
|
|
10
14
|
}
|
|
11
15
|
export declare function requestWithRetry(url: string, apiToken: string, retryConfig: RetryConfig, options?: RequestOptions): Promise<unknown>;
|
|
12
16
|
//# sourceMappingURL=retry-handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry-handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/platform/adapters/veryfront-api-client/retry-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"retry-handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/platform/adapters/veryfront-api-client/retry-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AAUrD,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC;CAC/B;AAKD,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,OAAO,CAAC,CA4HlB"}
|
|
@@ -22,12 +22,18 @@ export async function requestWithRetry(url, apiToken, retryConfig, options = {})
|
|
|
22
22
|
try {
|
|
23
23
|
const result = await withSpan(SpanNames.HTTP_CLIENT_FETCH, async () => {
|
|
24
24
|
const startTime = performance.now();
|
|
25
|
-
const headers = new dntShim.Headers(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
const headers = new dntShim.Headers(options.headers);
|
|
26
|
+
headers.set("Authorization", `Bearer ${apiToken}`);
|
|
27
|
+
if (!headers.has("Content-Type")) {
|
|
28
|
+
headers.set("Content-Type", "application/json");
|
|
29
|
+
}
|
|
29
30
|
injectContext(headers);
|
|
30
|
-
const response = await dntShim.fetch(url, {
|
|
31
|
+
const response = await dntShim.fetch(url, {
|
|
32
|
+
method: options.method ?? "GET",
|
|
33
|
+
headers,
|
|
34
|
+
body: options.body,
|
|
35
|
+
signal: controller.signal,
|
|
36
|
+
});
|
|
31
37
|
const duration = performance.now() - startTime;
|
|
32
38
|
recordApiRequest(response.status);
|
|
33
39
|
apiLog.debug("Request completed", {
|
|
@@ -55,7 +61,7 @@ export async function requestWithRetry(url, apiToken, retryConfig, options = {})
|
|
|
55
61
|
const data = options.returnText ? await response.text() : await response.json();
|
|
56
62
|
return { data, status: response.status, duration };
|
|
57
63
|
}, {
|
|
58
|
-
"http.method": "GET",
|
|
64
|
+
"http.method": options.method ?? "GET",
|
|
59
65
|
"http.url": url,
|
|
60
66
|
"http.target": urlPath,
|
|
61
67
|
"http.host": urlObj.host,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,kCAAkC,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,kCAAkC,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAQnD,eAAO,MAAM,sBAAsB,0MAYzB,CAAC;AA6EX,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,SAAS,GAAG,YAAY,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC9D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC9E;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AA4CD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB;0BA6K1B,OAAO,CAAC,OAAO,KAAG,OAAO,CAAC,YAAY,CAAC;0BA+NvC,OAAO,CAAC,OAAO,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;;;;;;;;0BAjVrD,MAAM,EAAE;;EA+XpC;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEjE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAwB7F"}
|
package/esm/src/proxy/handler.js
CHANGED
|
@@ -2,10 +2,11 @@ import * as dntShim from "../../_dnt.shims.js";
|
|
|
2
2
|
import { TokenManager } from "./token-manager.js";
|
|
3
3
|
import { parseProjectDomain } from "../server/utils/domain-parser.js";
|
|
4
4
|
import { createFileSystem } from "../platform/compat/fs.js";
|
|
5
|
-
import { cwd } from "../platform/compat/process.js";
|
|
5
|
+
import { cwd, getEnv } from "../platform/compat/process.js";
|
|
6
6
|
import { join } from "../platform/compat/path/index.js";
|
|
7
7
|
import { injectContext, ProxySpanNames, withSpan } from "./tracing.js";
|
|
8
8
|
import { computeContentSourceId } from "../cache/keys.js";
|
|
9
|
+
import { jwtVerify } from "jose";
|
|
9
10
|
export const INTERNAL_PROXY_HEADERS = [
|
|
10
11
|
"x-token",
|
|
11
12
|
"x-project-slug",
|
|
@@ -69,23 +70,23 @@ function extractUserToken(cookieHeader) {
|
|
|
69
70
|
const match = cookieHeader.match(/(?:^|;\s*)authToken=([^;]+)/);
|
|
70
71
|
return match?.[1] ? decodeURIComponent(match[1]) : undefined;
|
|
71
72
|
}
|
|
72
|
-
function extractUserIdFromToken(token) {
|
|
73
|
+
async function extractUserIdFromToken(token, log) {
|
|
74
|
+
const jwtSecret = getEnv("JWT_SECRET");
|
|
75
|
+
if (!jwtSecret) {
|
|
76
|
+
log?.warn("JWT_SECRET not configured — cannot verify user token");
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
73
79
|
try {
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const remainder = base64.length % 4;
|
|
80
|
-
if (remainder === 2)
|
|
81
|
-
base64 += "==";
|
|
82
|
-
else if (remainder === 3)
|
|
83
|
-
base64 += "=";
|
|
84
|
-
const decoded = JSON.parse(atob(base64));
|
|
85
|
-
return decoded?.userId;
|
|
80
|
+
const secret = new TextEncoder().encode(jwtSecret);
|
|
81
|
+
const { payload } = await jwtVerify(token, secret, {
|
|
82
|
+
algorithms: ["HS256"],
|
|
83
|
+
});
|
|
84
|
+
return payload.userId;
|
|
86
85
|
}
|
|
87
|
-
catch (
|
|
88
|
-
|
|
86
|
+
catch (error) {
|
|
87
|
+
log?.debug("JWT verification failed", {
|
|
88
|
+
error: error instanceof Error ? error.message : String(error),
|
|
89
|
+
});
|
|
89
90
|
return undefined;
|
|
90
91
|
}
|
|
91
92
|
}
|
|
@@ -171,7 +172,7 @@ export function createProxyHandler(options) {
|
|
|
171
172
|
const returnPath = safePath + url.search;
|
|
172
173
|
return `https://veryfront.com/sign-in?from=${encodeURIComponent(returnPath)}`;
|
|
173
174
|
}
|
|
174
|
-
function checkProtectedAccess(req, matchingEnv, userToken, users, logContext) {
|
|
175
|
+
async function checkProtectedAccess(req, matchingEnv, userToken, users, logContext) {
|
|
175
176
|
if (!matchingEnv?.protected)
|
|
176
177
|
return null;
|
|
177
178
|
if (!userToken) {
|
|
@@ -183,9 +184,8 @@ export function createProxyHandler(options) {
|
|
|
183
184
|
});
|
|
184
185
|
return { status: 302, message: "Authentication required", redirectUrl };
|
|
185
186
|
}
|
|
186
|
-
const userId = extractUserIdFromToken(userToken);
|
|
187
|
+
const userId = await extractUserIdFromToken(userToken, logger);
|
|
187
188
|
if (!userId) {
|
|
188
|
-
// Malformed token — treat as unauthenticated so user can re-sign-in
|
|
189
189
|
const redirectUrl = makeAuthRedirectUrl(req);
|
|
190
190
|
logger?.info("Could not extract userId from token", {
|
|
191
191
|
...logContext,
|
|
@@ -209,7 +209,7 @@ export function createProxyHandler(options) {
|
|
|
209
209
|
if (!lookupResult)
|
|
210
210
|
return { projectId: undefined, releaseId: undefined };
|
|
211
211
|
const matchingEnv = lookupResult.environments?.find(envMatcher);
|
|
212
|
-
const protectionError = checkProtectedAccess(req, matchingEnv, userToken, lookupResult.users, logContext);
|
|
212
|
+
const protectionError = await checkProtectedAccess(req, matchingEnv, userToken, lookupResult.users, logContext);
|
|
213
213
|
if (protectionError)
|
|
214
214
|
return { error: protectionError };
|
|
215
215
|
return {
|
|
@@ -293,7 +293,7 @@ export function createProxyHandler(options) {
|
|
|
293
293
|
const matchingEnv = lookupResult.environments?.find((env) => env.domains?.some((d) => d.toLowerCase() === normalizedHost));
|
|
294
294
|
releaseId = matchingEnv?.active_release_id ?? undefined;
|
|
295
295
|
environmentId = matchingEnv?.id;
|
|
296
|
-
const protectionError = checkProtectedAccess(req, matchingEnv, userToken, lookupResult.users, { domain: host });
|
|
296
|
+
const protectionError = await checkProtectedAccess(req, matchingEnv, userToken, lookupResult.users, { domain: host });
|
|
297
297
|
if (protectionError) {
|
|
298
298
|
return makeErrorContext(base, protectionError.status, protectionError.message, token, protectionError.redirectUrl);
|
|
299
299
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-executor.d.ts","sourceRoot":"","sources":["../../../../src/src/routing/api/route-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EACV,QAAQ,EAKT,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"route-executor.d.ts","sourceRoot":"","sources":["../../../../src/src/routing/api/route-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EACV,QAAQ,EAKT,MAAM,0BAA0B,CAAC;AAgUlC,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CA6C3B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,EACvB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAuC3B"}
|
|
@@ -8,6 +8,7 @@ import { errorToRFC9457Response } from "../../errors/middleware/http-error-bound
|
|
|
8
8
|
import { serverLogger as logger } from "../../utils/index.js";
|
|
9
9
|
import { isDevelopment as isDevelopmentEnv } from "../../build/config/environment.js";
|
|
10
10
|
import { getWorkerPool, isWorkerIsolationEnabled, } from "../../security/sandbox/worker-pool.js";
|
|
11
|
+
import { MAX_WORKER_BODY_BYTES, } from "../../security/sandbox/worker-types.js";
|
|
11
12
|
import { getProjectEnvSnapshot } from "../../server/project-env/storage.js";
|
|
12
13
|
function isDevelopment(adapter) {
|
|
13
14
|
const env = adapter.env.get("MODE") ??
|
|
@@ -85,13 +86,39 @@ function toHeadResponse(response) {
|
|
|
85
86
|
// ---------------------------------------------------------------------------
|
|
86
87
|
// Worker Isolation Helpers
|
|
87
88
|
// ---------------------------------------------------------------------------
|
|
89
|
+
function checkContentLengthLimit(request) {
|
|
90
|
+
const contentLength = request.headers.get("content-length");
|
|
91
|
+
if (!contentLength)
|
|
92
|
+
return;
|
|
93
|
+
const bytes = parseInt(contentLength, 10);
|
|
94
|
+
if (bytes > MAX_WORKER_BODY_BYTES) {
|
|
95
|
+
throw createError({
|
|
96
|
+
type: "api",
|
|
97
|
+
message: `Request body too large for isolated execution (${(bytes / 1024 / 1024).toFixed(1)} MB, limit ${MAX_WORKER_BODY_BYTES / 1024 / 1024} MB)`,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async function readBodyWithSizeGuard(request) {
|
|
102
|
+
if (!request.body)
|
|
103
|
+
return null;
|
|
104
|
+
// Fast path: reject before buffering if Content-Length is known
|
|
105
|
+
checkContentLengthLimit(request);
|
|
106
|
+
const body = new Uint8Array(await request.arrayBuffer());
|
|
107
|
+
// Fallback: check actual size for chunked/streaming bodies
|
|
108
|
+
if (body.byteLength > MAX_WORKER_BODY_BYTES) {
|
|
109
|
+
throw createError({
|
|
110
|
+
type: "api",
|
|
111
|
+
message: `Request body too large for isolated execution (${(body.byteLength / 1024 / 1024).toFixed(1)} MB, limit ${MAX_WORKER_BODY_BYTES / 1024 / 1024} MB)`,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
return body;
|
|
115
|
+
}
|
|
88
116
|
async function serializeRequest(request) {
|
|
89
|
-
const body = request.body ? new Uint8Array(await request.arrayBuffer()) : null;
|
|
90
117
|
return {
|
|
91
118
|
url: request.url,
|
|
92
119
|
method: request.method,
|
|
93
120
|
headers: [...request.headers.entries()],
|
|
94
|
-
body,
|
|
121
|
+
body: await readBodyWithSizeGuard(request),
|
|
95
122
|
};
|
|
96
123
|
}
|
|
97
124
|
function deserializeResponse(s) {
|
|
@@ -165,7 +192,7 @@ function executePagesRouteIsolated(modulePath, request, match, pathname, adapter
|
|
|
165
192
|
return withSpan("api.executePagesRoute.isolated", async () => {
|
|
166
193
|
try {
|
|
167
194
|
const pool = getWorkerPool();
|
|
168
|
-
const body =
|
|
195
|
+
const body = await readBodyWithSizeGuard(request);
|
|
169
196
|
const workerResponse = await pool.execute(projectDir, [projectDir], {
|
|
170
197
|
type: "execute-pages-route",
|
|
171
198
|
id: dntShim.crypto.randomUUID(),
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* SERVER — CLI server (dev, production, proxy, MCP, split-mode).
|
|
11
11
|
* Also used by build and test tasks that need equivalent access.
|
|
12
12
|
*/
|
|
13
|
-
export declare const SERVER_PERMISSIONS: readonly ["--allow-read", "--allow-write", "--allow-net", "--allow-env", "--allow-run", "--allow-
|
|
13
|
+
export declare const SERVER_PERMISSIONS: readonly ["--allow-read", "--allow-write", "--allow-net", "--allow-env", "--allow-run", "--allow-sys", "--unstable-worker-options", "--unstable-net"];
|
|
14
14
|
/**
|
|
15
15
|
* WORKFLOW_JOB — `ProcessJobExecutor` (RESTRICTED).
|
|
16
16
|
* Runs user-authored code — no `--allow-run`, `--allow-ffi`, or `--allow-sys`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deno-permissions.d.ts","sourceRoot":"","sources":["../../../src/src/security/deno-permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"deno-permissions.d.ts","sourceRoot":"","sources":["../../../src/src/security/deno-permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,eAAO,MAAM,kBAAkB,uJASrB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,wBAAwB,0EAK3B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,wBAAwB,2DAI3B,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,yDAI5B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-worker.d.ts","sourceRoot":"","sources":["../../../../src/src/security/sandbox/project-worker.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EAGf,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"project-worker.d.ts","sourceRoot":"","sources":["../../../../src/src/security/sandbox/project-worker.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EAGf,MAAM,mBAAmB,CAAC;AAW3B,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAcD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC;AAEtE,qBAAa,aAAa;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,eAAe,CAAc;IACrC,OAAO,CAAC,OAAO,CAAwB;gBAE3B,OAAO,EAAE,oBAAoB;IAMzC,IAAI,MAAM,IAAI,YAAY,CAEzB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,kBAAkB,IAAI,OAAO,CAEhC;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;IA+Bb;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAqCxD;;;;;;;OAOG;IACH,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,cAAc,CAAC,UAAU,CAAC;IA+FjE;;OAEG;IACG,SAAS,CAAC,SAAS,SAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IA+BpD;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAKxB;;OAEG;IACH,SAAS,IAAI,IAAI;IAuBjB,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,aAAa;IA+CrB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,gBAAgB;CAazB"}
|
|
@@ -13,6 +13,7 @@ import { isCompiledBinary } from "../../utils/index.js";
|
|
|
13
13
|
import { withSpan } from "../../observability/tracing/otlp-setup.js";
|
|
14
14
|
import { TIMEOUT_ERROR, UNKNOWN_ERROR } from "../../errors/index.js";
|
|
15
15
|
const logger = serverLogger.component("project-worker");
|
|
16
|
+
const textEncoder = new TextEncoder();
|
|
16
17
|
export class ProjectWorker {
|
|
17
18
|
projectId;
|
|
18
19
|
worker = null;
|
|
@@ -112,7 +113,6 @@ export class ProjectWorker {
|
|
|
112
113
|
this._lastActivityAt = Date.now();
|
|
113
114
|
this._status = "busy";
|
|
114
115
|
const requestId = request.id;
|
|
115
|
-
const encoder = new TextEncoder();
|
|
116
116
|
return new ReadableStream({
|
|
117
117
|
start: (controller) => {
|
|
118
118
|
let timer = dntShim.setTimeout(() => {
|
|
@@ -164,7 +164,7 @@ export class ProjectWorker {
|
|
|
164
164
|
this.updateIdleStatus();
|
|
165
165
|
// If we get an ssr-result, emit it as a single chunk
|
|
166
166
|
if (response.type === "ssr-result") {
|
|
167
|
-
controller.enqueue(
|
|
167
|
+
controller.enqueue(textEncoder.encode(response.html));
|
|
168
168
|
controller.close();
|
|
169
169
|
}
|
|
170
170
|
else if (response.type === "error") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-permissions.d.ts","sourceRoot":"","sources":["../../../../src/src/security/sandbox/worker-permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;CACd;
|
|
1
|
+
{"version":3,"file":"worker-permissions.d.ts","sourceRoot":"","sources":["../../../../src/src/security/sandbox/worker-permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;CACd;AAcD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EAAE,GAClB,iBAAiB,CA0BnB"}
|
|
@@ -11,6 +11,19 @@
|
|
|
11
11
|
* See: https://docs.deno.com/runtime/fundamentals/permissions/
|
|
12
12
|
*/
|
|
13
13
|
import * as dntShim from "../../../_dnt.shims.js";
|
|
14
|
+
// Cache compiled binary check — Deno.execPath() is a syscall that never changes at runtime
|
|
15
|
+
const _isCompiledBinary = (() => {
|
|
16
|
+
try {
|
|
17
|
+
const exec = typeof dntShim.Deno !== "undefined" ? dntShim.Deno.execPath?.() : undefined;
|
|
18
|
+
if (!exec)
|
|
19
|
+
return false;
|
|
20
|
+
const name = exec.split(/[/\\]/).pop()?.toLowerCase() ?? "";
|
|
21
|
+
return name !== "deno" && name !== "deno.exe";
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
})();
|
|
14
27
|
/**
|
|
15
28
|
* Build scoped permissions for a project worker.
|
|
16
29
|
*
|
|
@@ -27,26 +40,16 @@ export function buildWorkerPermissions(readPaths) {
|
|
|
27
40
|
// is outside the project directory. Rather than trying to enumerate all
|
|
28
41
|
// read paths, grant full read access — the security boundary is enforced
|
|
29
42
|
// by denying write/run/ffi/sys, not by restricting reads.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
env: true,
|
|
41
|
-
run: false,
|
|
42
|
-
ffi: false,
|
|
43
|
-
sys: false,
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
catch {
|
|
49
|
-
// execPath may not be available
|
|
43
|
+
if (_isCompiledBinary) {
|
|
44
|
+
return {
|
|
45
|
+
read: true,
|
|
46
|
+
write: false,
|
|
47
|
+
net: true,
|
|
48
|
+
env: true,
|
|
49
|
+
run: false,
|
|
50
|
+
ffi: false,
|
|
51
|
+
sys: false,
|
|
52
|
+
};
|
|
50
53
|
}
|
|
51
54
|
return {
|
|
52
55
|
read: readPaths.length > 0 ? readPaths : false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-pool.d.ts","sourceRoot":"","sources":["../../../../src/src/security/sandbox/worker-pool.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAWzF,qBAAa,UAAU;IACrB,OAAO,CAAC,IAAI,CAAgC;IAC5C,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,MAAM,CAAmB;IAEjC,OAAO,CAAC,eAAe,CAAqD;IAC5E,OAAO,CAAC,mBAAmB,CAAqD;gBAEpE,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAMlD;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,aAAa;IA0CxE;;;OAGG;IACH,OAAO,CACL,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-pool.d.ts","sourceRoot":"","sources":["../../../../src/src/security/sandbox/worker-pool.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAWzF,qBAAa,UAAU;IACrB,OAAO,CAAC,IAAI,CAAgC;IAC5C,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,MAAM,CAAmB;IAEjC,OAAO,CAAC,eAAe,CAAqD;IAC5E,OAAO,CAAC,mBAAmB,CAAqD;gBAEpE,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAMlD;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,aAAa;IA0CxE;;;OAGG;IACH,OAAO,CACL,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC;IA0D1B;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAUpC;;OAEG;IACH,QAAQ,IAAI;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;YACtB,MAAM,EAAE,MAAM,CAAC;YACf,YAAY,EAAE,MAAM,CAAC;YACrB,UAAU,EAAE,OAAO,CAAC;YACpB,MAAM,EAAE,MAAM,CAAC;YACf,KAAK,EAAE,MAAM,CAAC;SACf,CAAC,CAAC;KACJ;IA4BD;;OAEG;IACH,UAAU,IAAI;QACZ,uCAAuC;QACvC,cAAc,EAAE,MAAM,CAAC;QACvB,oDAAoD;QACpD,kBAAkB,EAAE,MAAM,CAAC;QAC3B,kDAAkD;QAClD,sBAAsB,EAAE,MAAM,CAAC;QAC/B,qDAAqD;QACrD,WAAW,EAAE,MAAM,CAAC;QACpB,kEAAkE;QAClE,cAAc,EAAE,MAAM,CAAC;KACxB;IAoBD;;OAEG;IACH,QAAQ,IAAI,IAAI;IAgBhB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,aAAa;YA4BP,WAAW;IAmBzB;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;CA8BjC;AAqBD;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CAGlD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAGhD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAG/C;AAKD,wBAAgB,aAAa,IAAI,UAAU,CAiB1C;AAED,8DAA8D;AAC9D,wBAAgB,mBAAmB,IAAI,IAAI,CAO1C"}
|
|
@@ -85,22 +85,25 @@ export class WorkerPool {
|
|
|
85
85
|
(entry && Date.now() - entry.createdAt > this.config.maxWorkerAgeMs);
|
|
86
86
|
if (shouldRecycle && !this.recycling.has(projectId)) {
|
|
87
87
|
this.recycling.add(projectId);
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
88
|
+
logger.debug("Recycling worker", {
|
|
89
|
+
projectId,
|
|
90
|
+
requestCount: worker.requestCount,
|
|
91
|
+
ageMs: entry ? Date.now() - entry.createdAt : 0,
|
|
92
|
+
reason: worker.requestCount >= this.config.maxRequestsPerWorker
|
|
93
|
+
? "request_count"
|
|
94
|
+
: "age",
|
|
95
|
+
});
|
|
96
|
+
// Warm replacement: let the old worker handle this last request,
|
|
97
|
+
// then evict it and create a replacement after the request settles.
|
|
98
|
+
// This avoids cold-start latency for the caller AND prevents the
|
|
99
|
+
// old worker from being terminated while it still has pending work.
|
|
100
|
+
const result = worker.execute(request);
|
|
101
|
+
void result.finally(() => {
|
|
97
102
|
this.evictWorker(projectId);
|
|
98
|
-
|
|
99
|
-
return fresh.execute(request);
|
|
100
|
-
}
|
|
101
|
-
finally {
|
|
103
|
+
this.getOrCreateWorker(projectId, readPaths);
|
|
102
104
|
this.recycling.delete(projectId);
|
|
103
|
-
}
|
|
105
|
+
});
|
|
106
|
+
return result;
|
|
104
107
|
}
|
|
105
108
|
return worker.execute(request);
|
|
106
109
|
}, { "workerPool.projectId": projectId });
|
|
@@ -161,5 +161,7 @@ export interface WorkerPoolConfig {
|
|
|
161
161
|
/** Per-worker memory budget in MB (default: 64). Workers exceeding this are evicted. */
|
|
162
162
|
memoryBudgetMb: number;
|
|
163
163
|
}
|
|
164
|
+
/** Maximum request body size for worker isolation (10 MB) */
|
|
165
|
+
export declare const MAX_WORKER_BODY_BYTES: number;
|
|
164
166
|
export declare const DEFAULT_WORKER_POOL_CONFIG: WorkerPoolConfig;
|
|
165
167
|
//# sourceMappingURL=worker-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-types.d.ts","sourceRoot":"","sources":["../../../../src/src/security/sandbox/worker-types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worker-types.d.ts","sourceRoot":"","sources":["../../../../src/src/security/sandbox/worker-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module security/sandbox/worker-types
|
|
8
8
|
*/
|
|
9
|
+
/** Maximum request body size for worker isolation (10 MB) */
|
|
10
|
+
export const MAX_WORKER_BODY_BYTES = 10 * 1024 * 1024;
|
|
9
11
|
export const DEFAULT_WORKER_POOL_CONFIG = {
|
|
10
12
|
maxPoolSize: 20,
|
|
11
13
|
idleTimeoutMs: 300_000,
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as dntShim from "../../../../_dnt.shims.js";
|
|
2
|
+
import { type RuntimeTaskDiscoveryDeps } from "../../../task/control-plane.js";
|
|
3
|
+
import { BaseHandler } from "../response/base.js";
|
|
4
|
+
import type { HandlerContext, HandlerMetadata, HandlerResult } from "../types.js";
|
|
5
|
+
export declare class InternalTasksListHandler extends BaseHandler {
|
|
6
|
+
private readonly deps;
|
|
7
|
+
metadata: HandlerMetadata;
|
|
8
|
+
constructor(deps?: RuntimeTaskDiscoveryDeps);
|
|
9
|
+
handle(req: dntShim.Request, ctx: HandlerContext): Promise<HandlerResult>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=internal-tasks-list.handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-tasks-list.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/internal-tasks-list.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AAGrD,OAAO,EAKL,KAAK,wBAAwB,EAC9B,MAAM,gCAAgC,CAAC;AAUxC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAEnG,qBAAa,wBAAyB,SAAQ,WAAW;IAQrD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPvB,QAAQ,EAAE,eAAe,CAIvB;gBAGiB,IAAI,GAAE,wBAA0D;IAK7E,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAmEhF"}
|