@rudderhq/server 0.7.23-canary.0 → 0.7.23-canary.2
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.
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const WORKSPACE_FILE_READ_MAX_BYTES = 1000000;
|
|
2
|
+
export declare const WORKSPACE_FILE_PATH_MAX_BYTES: number;
|
|
3
|
+
export type NativeWorkspaceFileRead = {
|
|
4
|
+
filePath: string;
|
|
5
|
+
byteSize: number;
|
|
6
|
+
modifiedMillis: number;
|
|
7
|
+
content: string;
|
|
8
|
+
};
|
|
9
|
+
export type NativeWorkspaceFileReadBytes = Omit<NativeWorkspaceFileRead, "content"> & {
|
|
10
|
+
bytes: Buffer;
|
|
11
|
+
};
|
|
12
|
+
export declare class WorkspaceFileNativeError extends Error {
|
|
13
|
+
readonly code: string;
|
|
14
|
+
readonly fallbackAllowed: boolean;
|
|
15
|
+
readonly pathRejected: boolean;
|
|
16
|
+
readonly limitExceeded: boolean;
|
|
17
|
+
readonly contentRejected: boolean;
|
|
18
|
+
constructor(code: string, fallbackAllowed: boolean, pathRejected: boolean, limitExceeded?: boolean, contentRejected?: boolean);
|
|
19
|
+
}
|
|
20
|
+
export declare function readWorkspaceFileNative(rootPath: string, filePath: string, signal?: AbortSignal): Promise<NativeWorkspaceFileRead>;
|
|
21
|
+
export declare function readWorkspaceFileNodeBytes(rootPath: string, filePath: string, signal?: AbortSignal): Promise<NativeWorkspaceFileReadBytes>;
|
|
22
|
+
export declare function readWorkspaceFileNode(rootPath: string, filePath: string, signal?: AbortSignal): Promise<NativeWorkspaceFileRead>;
|
|
23
|
+
//# sourceMappingURL=workspace-file-native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-file-native.d.ts","sourceRoot":"","sources":["../../src/services/workspace-file-native.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,6BAA6B,UAAY,CAAC;AACvD,eAAO,MAAM,6BAA6B,QAAkB,CAAC;AA+B7D,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAAC,uBAAuB,EAAE,SAAS,CAAC,GAAG;IACpF,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAeF,qBAAa,wBAAyB,SAAQ,KAAK;IAE/C,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,eAAe,EAAE,OAAO;IACjC,QAAQ,CAAC,YAAY,EAAE,OAAO;IAC9B,QAAQ,CAAC,aAAa;IACtB,QAAQ,CAAC,eAAe;gBAJf,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,OAAO,EACxB,YAAY,EAAE,OAAO,EACrB,aAAa,UAAuC,EACpD,eAAe,UAAqC;CAKhE;AAkJD,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,uBAAuB,CAAC,CAiFlC;AAED,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,4BAA4B,CAAC,CAiNvC;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,uBAAuB,CAAC,CAYlC"}
|
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
import { resolveNativeCommand } from "@rudderhq/agent-runtime-utils";
|
|
2
|
+
import { execFile } from "node:child_process";
|
|
3
|
+
import { constants as fsConstants } from "node:fs";
|
|
4
|
+
import fs from "node:fs/promises";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { promisify } from "node:util";
|
|
7
|
+
import { resolveNativeWorkspaceFilesBinary } from "./workspace-files-native.js";
|
|
8
|
+
const execFileAsync = promisify(execFile);
|
|
9
|
+
const PROTOCOL_VERSION = 1;
|
|
10
|
+
export const WORKSPACE_FILE_READ_MAX_BYTES = 1_000_000;
|
|
11
|
+
export const WORKSPACE_FILE_PATH_MAX_BYTES = 4 * 1024 * 1024;
|
|
12
|
+
const MAX_OUTPUT_BYTES = 8 * 1024 * 1024;
|
|
13
|
+
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
14
|
+
const REJECTED_PATH_CODES = new Set([
|
|
15
|
+
"unsafe_workspace_path",
|
|
16
|
+
"workspace_path_escape",
|
|
17
|
+
"workspace_file_path_invalid",
|
|
18
|
+
"workspace_file_not_found",
|
|
19
|
+
"workspace_not_directory",
|
|
20
|
+
"workspace_not_file",
|
|
21
|
+
"non_utf8_workspace_path",
|
|
22
|
+
"manifest_path_limit",
|
|
23
|
+
]);
|
|
24
|
+
const REJECTED_CONTENT_CODES = new Set(["non_utf8_workspace_file"]);
|
|
25
|
+
const NATIVE_FALLBACK_ERROR_CODES = new Set([
|
|
26
|
+
"workspace_root_unavailable",
|
|
27
|
+
"workspace_file_read_failed",
|
|
28
|
+
"workspace_metadata_failed",
|
|
29
|
+
]);
|
|
30
|
+
const NATIVE_FAIL_CLOSED_ERROR_CODES = new Set([
|
|
31
|
+
"workspace_file_containment_unproven",
|
|
32
|
+
"workspace_file_identity_unavailable",
|
|
33
|
+
]);
|
|
34
|
+
function nativeFailureAllowsFallback(errorCode) {
|
|
35
|
+
if (NATIVE_FAIL_CLOSED_ERROR_CODES.has(errorCode))
|
|
36
|
+
return false;
|
|
37
|
+
return NATIVE_FALLBACK_ERROR_CODES.has(errorCode);
|
|
38
|
+
}
|
|
39
|
+
export class WorkspaceFileNativeError extends Error {
|
|
40
|
+
code;
|
|
41
|
+
fallbackAllowed;
|
|
42
|
+
pathRejected;
|
|
43
|
+
limitExceeded;
|
|
44
|
+
contentRejected;
|
|
45
|
+
constructor(code, fallbackAllowed, pathRejected, limitExceeded = code === "workspace_file_size_limit", contentRejected = code === "non_utf8_workspace_file") {
|
|
46
|
+
super(`Native workspace file read failed: ${code}`);
|
|
47
|
+
this.code = code;
|
|
48
|
+
this.fallbackAllowed = fallbackAllowed;
|
|
49
|
+
this.pathRejected = pathRejected;
|
|
50
|
+
this.limitExceeded = limitExceeded;
|
|
51
|
+
this.contentRejected = contentRejected;
|
|
52
|
+
this.name = "WorkspaceFileNativeError";
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function timeoutMs() {
|
|
56
|
+
const configured = Number(process.env.RUDDER_NATIVE_WORKSPACE_FILE_TIMEOUT_MS ?? DEFAULT_TIMEOUT_MS);
|
|
57
|
+
return Number.isFinite(configured)
|
|
58
|
+
? Math.max(10, Math.min(DEFAULT_TIMEOUT_MS, Math.floor(configured)))
|
|
59
|
+
: DEFAULT_TIMEOUT_MS;
|
|
60
|
+
}
|
|
61
|
+
function decodeNativeUtf8(value) {
|
|
62
|
+
if (typeof value === "string")
|
|
63
|
+
return value;
|
|
64
|
+
if (!Buffer.isBuffer(value)) {
|
|
65
|
+
throw new WorkspaceFileNativeError("workspace_file_output_invalid", false, false);
|
|
66
|
+
}
|
|
67
|
+
const decoded = value.toString("utf8");
|
|
68
|
+
if (!Buffer.from(decoded, "utf8").equals(value)) {
|
|
69
|
+
throw new WorkspaceFileNativeError("workspace_file_invalid_utf8", false, false);
|
|
70
|
+
}
|
|
71
|
+
return decoded;
|
|
72
|
+
}
|
|
73
|
+
function validPortablePath(value) {
|
|
74
|
+
return value.length > 0
|
|
75
|
+
&& !value.includes("\\")
|
|
76
|
+
&& !value.startsWith("/")
|
|
77
|
+
&& !value.includes("\0")
|
|
78
|
+
&& !value.split("/").some((segment) => !segment || segment === "." || segment === "..");
|
|
79
|
+
}
|
|
80
|
+
function sameFileSnapshot(left, right) {
|
|
81
|
+
if (left.dev !== 0 || left.ino !== 0 || right.dev !== 0 || right.ino !== 0) {
|
|
82
|
+
return left.dev === right.dev
|
|
83
|
+
&& left.ino === right.ino
|
|
84
|
+
&& left.size === right.size
|
|
85
|
+
&& left.mtimeMs === right.mtimeMs
|
|
86
|
+
&& left.ctimeMs === right.ctimeMs;
|
|
87
|
+
}
|
|
88
|
+
return left.size === right.size
|
|
89
|
+
&& left.mtimeMs === right.mtimeMs
|
|
90
|
+
&& left.ctimeMs === right.ctimeMs;
|
|
91
|
+
}
|
|
92
|
+
function sameRootIdentity(left, right) {
|
|
93
|
+
return left.isDirectory()
|
|
94
|
+
&& right.isDirectory()
|
|
95
|
+
&& !left.isSymbolicLink()
|
|
96
|
+
&& !right.isSymbolicLink()
|
|
97
|
+
&& left.dev !== 0
|
|
98
|
+
&& left.ino !== 0
|
|
99
|
+
&& right.dev !== 0
|
|
100
|
+
&& right.ino !== 0
|
|
101
|
+
&& left.dev === right.dev
|
|
102
|
+
&& left.ino === right.ino
|
|
103
|
+
&& left.ctimeMs === right.ctimeMs;
|
|
104
|
+
}
|
|
105
|
+
async function ensureRootIdentity(rootPath, expected) {
|
|
106
|
+
let actual;
|
|
107
|
+
try {
|
|
108
|
+
actual = await fs.lstat(rootPath);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
throw new WorkspaceFileNativeError("workspace_file_changed", false, false);
|
|
112
|
+
}
|
|
113
|
+
if (!sameRootIdentity(expected, actual)) {
|
|
114
|
+
throw new WorkspaceFileNativeError("workspace_file_changed", false, false);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async function ensureRootHandleIdentity(rootHandle, expected) {
|
|
118
|
+
let actual;
|
|
119
|
+
try {
|
|
120
|
+
actual = await rootHandle.stat();
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
throw new WorkspaceFileNativeError("workspace_file_changed", false, false);
|
|
124
|
+
}
|
|
125
|
+
if (!sameRootIdentity(expected, actual)) {
|
|
126
|
+
throw new WorkspaceFileNativeError("workspace_file_changed", false, false);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function isWithinRoot(rootPath, targetPath) {
|
|
130
|
+
const relative = path.relative(rootPath, targetPath);
|
|
131
|
+
return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
|
|
132
|
+
}
|
|
133
|
+
function cancelledError() {
|
|
134
|
+
return new WorkspaceFileNativeError("workspace_file_cancelled", false, false);
|
|
135
|
+
}
|
|
136
|
+
function throwIfCancelled(signal) {
|
|
137
|
+
if (signal?.aborted)
|
|
138
|
+
throw cancelledError();
|
|
139
|
+
}
|
|
140
|
+
function parseResponse(response, expectedFilePath) {
|
|
141
|
+
if (!response || typeof response !== "object" || Array.isArray(response)) {
|
|
142
|
+
throw new WorkspaceFileNativeError("workspace_file_envelope_mismatch", false, false);
|
|
143
|
+
}
|
|
144
|
+
if (response.ok !== true
|
|
145
|
+
|| response.capability !== "workspace.read"
|
|
146
|
+
|| response.operation !== "readWorkspaceFile"
|
|
147
|
+
|| response.protocolVersion !== PROTOCOL_VERSION
|
|
148
|
+
|| response.accepted !== false
|
|
149
|
+
|| response.filePath !== expectedFilePath
|
|
150
|
+
|| !Number.isSafeInteger(response.byteSize)
|
|
151
|
+
|| Number(response.byteSize) < 0
|
|
152
|
+
|| !Number.isSafeInteger(response.modifiedMillis)
|
|
153
|
+
|| Number(response.modifiedMillis) < 0
|
|
154
|
+
|| typeof response.content !== "string") {
|
|
155
|
+
throw new WorkspaceFileNativeError("workspace_file_envelope_mismatch", false, false);
|
|
156
|
+
}
|
|
157
|
+
const contentBytes = Buffer.from(response.content, "utf8");
|
|
158
|
+
if (contentBytes.toString("utf8") !== response.content) {
|
|
159
|
+
throw new WorkspaceFileNativeError("workspace_file_response_invalid", false, false);
|
|
160
|
+
}
|
|
161
|
+
const byteSize = Number(response.byteSize);
|
|
162
|
+
if (!validPortablePath(expectedFilePath)
|
|
163
|
+
|| Buffer.byteLength(expectedFilePath, "utf8") > WORKSPACE_FILE_PATH_MAX_BYTES
|
|
164
|
+
|| contentBytes.length !== byteSize
|
|
165
|
+
|| byteSize > WORKSPACE_FILE_READ_MAX_BYTES) {
|
|
166
|
+
throw new WorkspaceFileNativeError("workspace_file_response_invalid", false, false);
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
filePath: expectedFilePath,
|
|
170
|
+
byteSize,
|
|
171
|
+
modifiedMillis: Number(response.modifiedMillis),
|
|
172
|
+
content: response.content,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function parseFailureCode(value) {
|
|
176
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
177
|
+
return null;
|
|
178
|
+
const response = value;
|
|
179
|
+
if (response.ok !== false
|
|
180
|
+
|| response.capability !== "workspace.read"
|
|
181
|
+
|| response.protocolVersion !== PROTOCOL_VERSION
|
|
182
|
+
|| response.accepted !== false
|
|
183
|
+
|| (response.operation !== undefined && response.operation !== "readWorkspaceFile")
|
|
184
|
+
|| typeof response.errorCode !== "string"
|
|
185
|
+
|| !response.errorCode) {
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
return response.errorCode;
|
|
189
|
+
}
|
|
190
|
+
export async function readWorkspaceFileNative(rootPath, filePath, signal) {
|
|
191
|
+
if (!validPortablePath(filePath) || Buffer.byteLength(filePath, "utf8") > WORKSPACE_FILE_PATH_MAX_BYTES) {
|
|
192
|
+
throw new WorkspaceFileNativeError("workspace_file_path_invalid", false, false);
|
|
193
|
+
}
|
|
194
|
+
throwIfCancelled(signal);
|
|
195
|
+
const configured = process.env.RUDDER_NATIVE_WORKSPACE_FILE_PATH?.trim();
|
|
196
|
+
const binary = configured ? path.resolve(configured) : resolveNativeWorkspaceFilesBinary();
|
|
197
|
+
const command = resolveNativeCommand(binary, [
|
|
198
|
+
"workspace",
|
|
199
|
+
"read",
|
|
200
|
+
path.resolve(rootPath),
|
|
201
|
+
filePath,
|
|
202
|
+
String(WORKSPACE_FILE_READ_MAX_BYTES),
|
|
203
|
+
String(WORKSPACE_FILE_PATH_MAX_BYTES),
|
|
204
|
+
]);
|
|
205
|
+
let stdout;
|
|
206
|
+
let stderr;
|
|
207
|
+
try {
|
|
208
|
+
const result = await execFileAsync(command.command, command.args, {
|
|
209
|
+
encoding: "buffer",
|
|
210
|
+
timeout: timeoutMs(),
|
|
211
|
+
maxBuffer: MAX_OUTPUT_BYTES,
|
|
212
|
+
windowsHide: true,
|
|
213
|
+
signal,
|
|
214
|
+
});
|
|
215
|
+
throwIfCancelled(signal);
|
|
216
|
+
stdout = decodeNativeUtf8(result.stdout);
|
|
217
|
+
stderr = decodeNativeUtf8(result.stderr);
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
if (error instanceof WorkspaceFileNativeError)
|
|
221
|
+
throw error;
|
|
222
|
+
const details = error;
|
|
223
|
+
if (signal?.aborted || details.name === "AbortError") {
|
|
224
|
+
throw cancelledError();
|
|
225
|
+
}
|
|
226
|
+
const output = details.stdout === undefined ? "" : decodeNativeUtf8(details.stdout);
|
|
227
|
+
const lines = output.trim().split(/\r?\n/).filter(Boolean);
|
|
228
|
+
if (lines.length === 1) {
|
|
229
|
+
let response;
|
|
230
|
+
try {
|
|
231
|
+
response = JSON.parse(lines[0]);
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
throw new WorkspaceFileNativeError("workspace_file_protocol_invalid", false, false);
|
|
235
|
+
}
|
|
236
|
+
const errorCode = parseFailureCode(response);
|
|
237
|
+
if (errorCode) {
|
|
238
|
+
const pathRejected = REJECTED_PATH_CODES.has(errorCode);
|
|
239
|
+
const limitExceeded = errorCode === "workspace_file_size_limit";
|
|
240
|
+
const contentRejected = REJECTED_CONTENT_CODES.has(errorCode);
|
|
241
|
+
throw new WorkspaceFileNativeError(errorCode, nativeFailureAllowsFallback(errorCode), pathRejected, limitExceeded, contentRejected);
|
|
242
|
+
}
|
|
243
|
+
throw new WorkspaceFileNativeError("workspace_file_protocol_invalid", false, false);
|
|
244
|
+
}
|
|
245
|
+
if (output.trim()) {
|
|
246
|
+
throw new WorkspaceFileNativeError("workspace_file_protocol_invalid", false, false);
|
|
247
|
+
}
|
|
248
|
+
if (details.killed || details.signal === "SIGTERM" || details.code === "ETIMEDOUT") {
|
|
249
|
+
throw new WorkspaceFileNativeError("workspace_file_timeout", true, false);
|
|
250
|
+
}
|
|
251
|
+
throw new WorkspaceFileNativeError("workspace_file_process_failed", true, false);
|
|
252
|
+
}
|
|
253
|
+
if (stderr.trim()) {
|
|
254
|
+
throw new WorkspaceFileNativeError("workspace_file_unexpected_stderr", false, false);
|
|
255
|
+
}
|
|
256
|
+
const lines = stdout.trim().split(/\r?\n/).filter(Boolean);
|
|
257
|
+
if (lines.length !== 1) {
|
|
258
|
+
throw new WorkspaceFileNativeError("workspace_file_response_line_count", false, false);
|
|
259
|
+
}
|
|
260
|
+
let response;
|
|
261
|
+
try {
|
|
262
|
+
response = JSON.parse(lines[0]);
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
throw new WorkspaceFileNativeError("workspace_file_malformed_json", false, false);
|
|
266
|
+
}
|
|
267
|
+
return parseResponse(response, filePath);
|
|
268
|
+
}
|
|
269
|
+
export async function readWorkspaceFileNodeBytes(rootPath, filePath, signal) {
|
|
270
|
+
if (!validPortablePath(filePath) || Buffer.byteLength(filePath, "utf8") > WORKSPACE_FILE_PATH_MAX_BYTES) {
|
|
271
|
+
throw new WorkspaceFileNativeError("workspace_file_path_invalid", false, false);
|
|
272
|
+
}
|
|
273
|
+
throwIfCancelled(signal);
|
|
274
|
+
if (process.platform === "win32") {
|
|
275
|
+
throw new WorkspaceFileNativeError("workspace_file_node_fallback_unsupported", false, false);
|
|
276
|
+
}
|
|
277
|
+
const resolvedRoot = path.resolve(rootPath);
|
|
278
|
+
let rootStat;
|
|
279
|
+
try {
|
|
280
|
+
rootStat = await fs.lstat(resolvedRoot);
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
throw new WorkspaceFileNativeError("workspace_root_unavailable", false, false);
|
|
284
|
+
}
|
|
285
|
+
if (rootStat.isSymbolicLink() || !rootStat.isDirectory()) {
|
|
286
|
+
throw new WorkspaceFileNativeError("workspace_not_directory", false, true);
|
|
287
|
+
}
|
|
288
|
+
await ensureRootIdentity(resolvedRoot, rootStat);
|
|
289
|
+
let canonicalRoot;
|
|
290
|
+
try {
|
|
291
|
+
canonicalRoot = await fs.realpath(resolvedRoot);
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
throw new WorkspaceFileNativeError("workspace_root_unavailable", false, false);
|
|
295
|
+
}
|
|
296
|
+
let expectedRootStat;
|
|
297
|
+
try {
|
|
298
|
+
expectedRootStat = await fs.stat(canonicalRoot);
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
throw new WorkspaceFileNativeError("workspace_root_unavailable", false, false);
|
|
302
|
+
}
|
|
303
|
+
const requestedTarget = path.resolve(canonicalRoot, filePath);
|
|
304
|
+
if (!isWithinRoot(canonicalRoot, requestedTarget) || requestedTarget === canonicalRoot) {
|
|
305
|
+
throw new WorkspaceFileNativeError("workspace_path_escape", false, true);
|
|
306
|
+
}
|
|
307
|
+
let canonicalTarget;
|
|
308
|
+
try {
|
|
309
|
+
canonicalTarget = await fs.realpath(requestedTarget);
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
if (error.code === "ENOENT") {
|
|
313
|
+
throw new WorkspaceFileNativeError("workspace_file_not_found", false, true);
|
|
314
|
+
}
|
|
315
|
+
throw new WorkspaceFileNativeError("workspace_file_read_failed", false, false);
|
|
316
|
+
}
|
|
317
|
+
if (!isWithinRoot(canonicalRoot, canonicalTarget)) {
|
|
318
|
+
throw new WorkspaceFileNativeError("workspace_path_escape", false, true);
|
|
319
|
+
}
|
|
320
|
+
let expectedStat;
|
|
321
|
+
try {
|
|
322
|
+
expectedStat = await fs.stat(canonicalTarget);
|
|
323
|
+
}
|
|
324
|
+
catch (error) {
|
|
325
|
+
if (error.code === "ENOENT") {
|
|
326
|
+
throw new WorkspaceFileNativeError("workspace_file_not_found", false, true);
|
|
327
|
+
}
|
|
328
|
+
throw new WorkspaceFileNativeError("workspace_file_read_failed", false, false);
|
|
329
|
+
}
|
|
330
|
+
throwIfCancelled(signal);
|
|
331
|
+
if (!expectedStat.isFile()) {
|
|
332
|
+
throw new WorkspaceFileNativeError("workspace_not_file", false, true);
|
|
333
|
+
}
|
|
334
|
+
if (expectedStat.size > WORKSPACE_FILE_READ_MAX_BYTES) {
|
|
335
|
+
throw new WorkspaceFileNativeError("workspace_file_size_limit", false, false, true);
|
|
336
|
+
}
|
|
337
|
+
let rootHandle;
|
|
338
|
+
try {
|
|
339
|
+
rootHandle = await fs.open(resolvedRoot, fsConstants.O_RDONLY | fsConstants.O_DIRECTORY | fsConstants.O_NOFOLLOW);
|
|
340
|
+
}
|
|
341
|
+
catch (error) {
|
|
342
|
+
if (error.code === "ELOOP") {
|
|
343
|
+
throw new WorkspaceFileNativeError("workspace_file_changed", false, false);
|
|
344
|
+
}
|
|
345
|
+
throw new WorkspaceFileNativeError("workspace_root_unavailable", false, false);
|
|
346
|
+
}
|
|
347
|
+
let rootClosed = false;
|
|
348
|
+
const closeRoot = async () => {
|
|
349
|
+
if (rootClosed)
|
|
350
|
+
return;
|
|
351
|
+
rootClosed = true;
|
|
352
|
+
await rootHandle.close().catch(() => undefined);
|
|
353
|
+
};
|
|
354
|
+
let handle;
|
|
355
|
+
try {
|
|
356
|
+
await ensureRootHandleIdentity(rootHandle, expectedRootStat);
|
|
357
|
+
await ensureRootIdentity(resolvedRoot, rootStat);
|
|
358
|
+
handle = await fs.open(canonicalTarget, fsConstants.O_RDONLY | fsConstants.O_NOFOLLOW);
|
|
359
|
+
}
|
|
360
|
+
catch (error) {
|
|
361
|
+
await closeRoot();
|
|
362
|
+
if (signal?.aborted)
|
|
363
|
+
throw cancelledError();
|
|
364
|
+
if (error instanceof WorkspaceFileNativeError)
|
|
365
|
+
throw error;
|
|
366
|
+
if (error.code === "ELOOP") {
|
|
367
|
+
throw new WorkspaceFileNativeError("workspace_path_escape", false, true);
|
|
368
|
+
}
|
|
369
|
+
throw new WorkspaceFileNativeError("workspace_file_read_failed", false, false);
|
|
370
|
+
}
|
|
371
|
+
let closed = false;
|
|
372
|
+
const close = async () => {
|
|
373
|
+
if (closed)
|
|
374
|
+
return;
|
|
375
|
+
closed = true;
|
|
376
|
+
await handle.close().catch(() => undefined);
|
|
377
|
+
};
|
|
378
|
+
const abort = () => {
|
|
379
|
+
void close();
|
|
380
|
+
};
|
|
381
|
+
try {
|
|
382
|
+
await ensureRootHandleIdentity(rootHandle, expectedRootStat);
|
|
383
|
+
await ensureRootIdentity(resolvedRoot, rootStat);
|
|
384
|
+
const openedStat = await handle.stat();
|
|
385
|
+
if (!openedStat.isFile() || !sameFileSnapshot(expectedStat, openedStat)) {
|
|
386
|
+
throw new WorkspaceFileNativeError("workspace_file_changed", false, false);
|
|
387
|
+
}
|
|
388
|
+
if (openedStat.size > WORKSPACE_FILE_READ_MAX_BYTES) {
|
|
389
|
+
throw new WorkspaceFileNativeError("workspace_file_size_limit", false, false, true);
|
|
390
|
+
}
|
|
391
|
+
const stableTarget = await fs.realpath(requestedTarget);
|
|
392
|
+
if (!isWithinRoot(canonicalRoot, stableTarget)) {
|
|
393
|
+
throw new WorkspaceFileNativeError("workspace_path_escape", false, true);
|
|
394
|
+
}
|
|
395
|
+
const stablePathStat = await fs.stat(stableTarget);
|
|
396
|
+
if (!sameFileSnapshot(stablePathStat, openedStat)) {
|
|
397
|
+
throw new WorkspaceFileNativeError("workspace_file_changed", false, false);
|
|
398
|
+
}
|
|
399
|
+
const bytes = Buffer.alloc(WORKSPACE_FILE_READ_MAX_BYTES + 1);
|
|
400
|
+
let offset = 0;
|
|
401
|
+
signal?.addEventListener("abort", abort, { once: true });
|
|
402
|
+
try {
|
|
403
|
+
while (offset < bytes.length) {
|
|
404
|
+
throwIfCancelled(signal);
|
|
405
|
+
const { bytesRead } = await handle.read(bytes, offset, bytes.length - offset, null);
|
|
406
|
+
if (bytesRead === 0)
|
|
407
|
+
break;
|
|
408
|
+
offset += bytesRead;
|
|
409
|
+
}
|
|
410
|
+
throwIfCancelled(signal);
|
|
411
|
+
}
|
|
412
|
+
catch (error) {
|
|
413
|
+
if (signal?.aborted)
|
|
414
|
+
throw cancelledError();
|
|
415
|
+
if (error instanceof WorkspaceFileNativeError)
|
|
416
|
+
throw error;
|
|
417
|
+
throw new WorkspaceFileNativeError("workspace_file_read_failed", false, false);
|
|
418
|
+
}
|
|
419
|
+
finally {
|
|
420
|
+
signal?.removeEventListener("abort", abort);
|
|
421
|
+
}
|
|
422
|
+
if (offset > WORKSPACE_FILE_READ_MAX_BYTES) {
|
|
423
|
+
throw new WorkspaceFileNativeError("workspace_file_size_limit", false, false, true);
|
|
424
|
+
}
|
|
425
|
+
await ensureRootHandleIdentity(rootHandle, expectedRootStat);
|
|
426
|
+
await ensureRootIdentity(resolvedRoot, rootStat);
|
|
427
|
+
const stableMetadata = await handle.stat();
|
|
428
|
+
const stableRootStat = await fs.stat(canonicalRoot).catch(() => null);
|
|
429
|
+
if (!stableMetadata.isFile()
|
|
430
|
+
|| !sameFileSnapshot(stableMetadata, openedStat)
|
|
431
|
+
|| !stableRootStat
|
|
432
|
+
|| !sameFileSnapshot(stableRootStat, expectedRootStat)) {
|
|
433
|
+
throw new WorkspaceFileNativeError("workspace_file_changed", false, false);
|
|
434
|
+
}
|
|
435
|
+
let finalTarget;
|
|
436
|
+
try {
|
|
437
|
+
finalTarget = await fs.realpath(requestedTarget);
|
|
438
|
+
}
|
|
439
|
+
catch (error) {
|
|
440
|
+
if (error.code === "ENOENT") {
|
|
441
|
+
throw new WorkspaceFileNativeError("workspace_file_changed", false, false);
|
|
442
|
+
}
|
|
443
|
+
throw new WorkspaceFileNativeError("workspace_file_read_failed", false, false);
|
|
444
|
+
}
|
|
445
|
+
if (!isWithinRoot(canonicalRoot, finalTarget)) {
|
|
446
|
+
throw new WorkspaceFileNativeError("workspace_path_escape", false, true);
|
|
447
|
+
}
|
|
448
|
+
let finalPathStat;
|
|
449
|
+
try {
|
|
450
|
+
finalPathStat = await fs.stat(finalTarget);
|
|
451
|
+
}
|
|
452
|
+
catch (error) {
|
|
453
|
+
if (error.code === "ENOENT") {
|
|
454
|
+
throw new WorkspaceFileNativeError("workspace_file_changed", false, false);
|
|
455
|
+
}
|
|
456
|
+
throw new WorkspaceFileNativeError("workspace_file_read_failed", false, false);
|
|
457
|
+
}
|
|
458
|
+
if (!sameFileSnapshot(finalPathStat, openedStat)) {
|
|
459
|
+
throw new WorkspaceFileNativeError("workspace_file_changed", false, false);
|
|
460
|
+
}
|
|
461
|
+
await ensureRootHandleIdentity(rootHandle, expectedRootStat);
|
|
462
|
+
await ensureRootIdentity(resolvedRoot, rootStat);
|
|
463
|
+
throwIfCancelled(signal);
|
|
464
|
+
const content = bytes.subarray(0, offset);
|
|
465
|
+
return {
|
|
466
|
+
filePath,
|
|
467
|
+
byteSize: openedStat.size,
|
|
468
|
+
modifiedMillis: Math.max(0, Math.floor(openedStat.mtimeMs)),
|
|
469
|
+
bytes: content,
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
catch (error) {
|
|
473
|
+
if (signal?.aborted)
|
|
474
|
+
throw cancelledError();
|
|
475
|
+
if (error instanceof WorkspaceFileNativeError)
|
|
476
|
+
throw error;
|
|
477
|
+
throw new WorkspaceFileNativeError("workspace_file_read_failed", false, false);
|
|
478
|
+
}
|
|
479
|
+
finally {
|
|
480
|
+
await close();
|
|
481
|
+
await closeRoot();
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
export async function readWorkspaceFileNode(rootPath, filePath, signal) {
|
|
485
|
+
const result = await readWorkspaceFileNodeBytes(rootPath, filePath, signal);
|
|
486
|
+
const decoded = result.bytes.toString("utf8");
|
|
487
|
+
if (!Buffer.from(decoded, "utf8").equals(result.bytes)) {
|
|
488
|
+
throw new WorkspaceFileNativeError("non_utf8_workspace_file", false, false, false, true);
|
|
489
|
+
}
|
|
490
|
+
return {
|
|
491
|
+
filePath: result.filePath,
|
|
492
|
+
byteSize: result.byteSize,
|
|
493
|
+
modifiedMillis: result.modifiedMillis,
|
|
494
|
+
content: decoded,
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
//# sourceMappingURL=workspace-file-native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-file-native.js","sourceRoot":"","sources":["../../src/services/workspace-file-native.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rudderhq/server",
|
|
3
|
-
"version": "0.7.23-canary.
|
|
3
|
+
"version": "0.7.23-canary.2",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE",
|
|
5
5
|
"homepage": "https://github.com/Undertone0809/rudder",
|
|
6
6
|
"bugs": {
|
|
@@ -55,19 +55,19 @@
|
|
|
55
55
|
"@aws-sdk/client-s3": "^3.1015.0",
|
|
56
56
|
"@larksuiteoapi/node-sdk": "1.67.0",
|
|
57
57
|
"@modelcontextprotocol/client": "2.0.0",
|
|
58
|
-
"@rudderhq/agent-runtime-claude-local": "0.7.23-canary.
|
|
59
|
-
"@rudderhq/agent-runtime-codex-local": "0.7.23-canary.
|
|
60
|
-
"@rudderhq/agent-runtime-cursor-local": "0.7.23-canary.
|
|
61
|
-
"@rudderhq/agent-runtime-gemini-local": "0.7.23-canary.
|
|
62
|
-
"@rudderhq/agent-runtime-hermes-gateway": "0.7.23-canary.
|
|
63
|
-
"@rudderhq/agent-runtime-openclaw-gateway": "0.7.23-canary.
|
|
64
|
-
"@rudderhq/agent-runtime-opencode-local": "0.7.23-canary.
|
|
65
|
-
"@rudderhq/agent-runtime-pi-local": "0.7.23-canary.
|
|
66
|
-
"@rudderhq/agent-runtime-utils": "0.7.23-canary.
|
|
67
|
-
"@rudderhq/db": "0.7.23-canary.
|
|
68
|
-
"@rudderhq/identity-core": "0.7.23-canary.
|
|
69
|
-
"@rudderhq/run-intelligence-core": "0.7.23-canary.
|
|
70
|
-
"@rudderhq/shared": "0.7.23-canary.
|
|
58
|
+
"@rudderhq/agent-runtime-claude-local": "0.7.23-canary.2",
|
|
59
|
+
"@rudderhq/agent-runtime-codex-local": "0.7.23-canary.2",
|
|
60
|
+
"@rudderhq/agent-runtime-cursor-local": "0.7.23-canary.2",
|
|
61
|
+
"@rudderhq/agent-runtime-gemini-local": "0.7.23-canary.2",
|
|
62
|
+
"@rudderhq/agent-runtime-hermes-gateway": "0.7.23-canary.2",
|
|
63
|
+
"@rudderhq/agent-runtime-openclaw-gateway": "0.7.23-canary.2",
|
|
64
|
+
"@rudderhq/agent-runtime-opencode-local": "0.7.23-canary.2",
|
|
65
|
+
"@rudderhq/agent-runtime-pi-local": "0.7.23-canary.2",
|
|
66
|
+
"@rudderhq/agent-runtime-utils": "0.7.23-canary.2",
|
|
67
|
+
"@rudderhq/db": "0.7.23-canary.2",
|
|
68
|
+
"@rudderhq/identity-core": "0.7.23-canary.2",
|
|
69
|
+
"@rudderhq/run-intelligence-core": "0.7.23-canary.2",
|
|
70
|
+
"@rudderhq/shared": "0.7.23-canary.2",
|
|
71
71
|
"ajv": "^8.18.0",
|
|
72
72
|
"ajv-formats": "^3.0.1",
|
|
73
73
|
"better-auth": "1.6.23",
|