3.6 KiB
3.6 KiB
GET /vfs/{*path}
Protected. Requires a valid session cookie (credentials: 'include').
Get a virtual filesystem file
Returns a file from the virtual filesystem for the authenticated user's selected company.
Commonly used to retrieve artifacts generated by the model in the javascript_execute sandbox or uploaded by users.
URL Format
Accepts:
- Relative VFS paths:
example.png,reports/summary.pdf - Full endpoint paths:
/vfs/example.png,/api/vfs/example.png(leadingapi/andvfs/prefixes are automatically stripped) - Absolute URLs:
https://.../api/vfs/example.png - Traversal (
..), null bytes (\0), and backslashes (\) are strictly forbidden and rejected with HTTP 400.
Image Previews & Thumbnails
Supported raster images (image/png, image/jpeg, image/gif, image/webp, image/avif, image/bmp)
are automatically transformed into a 250×250 aspect-preserving preview thumbnail (WebP format, quality 88):
- Scaled to fit within a 250×250 box without distortion (e.g. 2000×100 becomes 250×13).
- Images whose larger edge is below 100px are upscaled to 100px for icon legibility.
- A translucent dark metadata strip (
#101317, max 50% height) with monospace text (DejaVu Sans Mono) is rendered along the bottom edge, displaying original dimensions and file size. - Served with
Content-Security-Policy: default-src 'none'; sandbox. - Use
?raw=1(or?raw=true) to bypass preview generation and return the original unmodified image inline.
Inline vs Attachment
- Browser-compatible types (HTML, CSS, JS, JSON, PDF, text, images, audio, video, fonts, WASM)
are served with
Content-Disposition: inline; filename="..."so they open directly in modern browsers. - Non-browser/binary types default to
Content-Disposition: attachment; filename="...". - Use
?download=1(or?download=true) to force file download withContent-Disposition: attachment.
Caching & Conditional Requests
- Generates weak ETags (
W/"thumb-..."for previews,W/"<timestamp>-<mode>"for originals). - Sets
Cache-Control: private, max-age=0, must-revalidate. - Supports
If-None-Matchconditional requests returning HTTP304 Not Modified.
Path parameters
| Param | Required | Type | Description |
|---|---|---|---|
path |
yes | string | VFS file path (e.g. example.png, charts/graph.svg) |
Query parameters
| Param | Required | Type | Description |
|---|---|---|---|
download |
no | boolean | Force file download with Content-Disposition: attachment (1 or true). |
raw |
no | boolean | Return original unmodified image inline without generating a preview thumbnail (1 or true). |
Response 200
File bytes. Served inline for browser-renderable formats or as a download. Includes headers:
Content-Type: MIME type of file, orimage/webpfor previewsContent-Length: Size of served payload in bytesContent-Disposition:inline; filename="..."orattachment; filename="..."Cache-Control:private, max-age=0, must-revalidateETag: Weak ETag identifierX-Content-Type-Options:nosniffContent-Security-Policy:default-src 'none'; sandbox(for preview thumbnails)
Errors
| Status | Description |
|---|---|
| 304 | Not modified (If-None-Match matched ETag) |
| 400 | Invalid path, path escapes VFS boundary, or no company selected — {"error":"…"} |
| 401 | Unauthorized — {"error":"…"} |
| 403 | Not authorized — {"error":"…"} |
| 404 | File not found — {"error":"…"} |
Generated from @openapi JSDoc. Do not edit by hand — run npm run docs:api.