Exposes sharp and ffprobe with their own vocabulary — operations are named what sharp names them, ffprobe fields come back spelled the way ffprobe spells them — so the tools' own documentation applies and there is no house dialect to learn. Safety comes from one architectural invariant rather than from filtering: the caller never supplies a path, a URL or a protocol. Input is an id we issued, output is a name we chose. That removes the entire class of attack that makes "just pass the flags through" a remote shell, which is precisely what makes it safe to open up everything else. docs/SECURITY.md has the reasoning and the specific attacks. The vocabulary is a data table, so the validator and docs/SHARP.md are generated from one source and cannot drift. Two things are deliberately absent from it: withMetadata, because that is how a client's GPS coordinates get published, and limitInputPixels, because a caller who could raise it could turn a 1 KB PNG into a 40 GB allocation. Verified against a running server, not asserted: traversal ids rejected, unknown operations and typo'd parameters rejected by name, out-of-range values rejected with the bound, a GPS-tagged photo coming out clean end to end, video probe, Range requests, and a rejected upload leaving nothing on disk. Found while building: config threw at import if AV_CLUB_TOKEN was unset, so generating documentation required a production secret. The token is read at boot in server.ts now — still a refusal to start, no longer a module-scope landmine. ffmpeg is designed in docs/API.md and not built yet. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
21 lines
500 B
JSON
21 lines
500 B
JSON
{
|
|
"name": "av-club",
|
|
"version": "0.0.1",
|
|
"private": true,
|
|
"type": "module",
|
|
"description": "Turning whatever someone uploads into assets a website can actually serve",
|
|
"scripts": {
|
|
"dev": "bun --hot src/server.ts",
|
|
"start": "bun src/server.ts",
|
|
"docs": "bun run ./scripts/gen-docs.ts",
|
|
"install:tools": "./scripts/install.sh",
|
|
"verify": "./scripts/verify.sh"
|
|
},
|
|
"dependencies": {
|
|
"sharp": "^0.35.3"
|
|
},
|
|
"devDependencies": {
|
|
"@types/bun": "latest"
|
|
}
|
|
}
|