- TypeScript 99.4%
- Dockerfile 0.6%
| scripts | ||
| src | ||
| tests | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| bun.lock | ||
| bunfig.toml | ||
| CHANGELOG.md | ||
| docker-compose.yml | ||
| Dockerfile | ||
| LICENSE.txt | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
FAExport
A Bun and TypeScript rewrite of FAExport. It converts FurAffinity's current modern-layout pages into the established JSON, XML, and RSS API.
Run locally
Requires Bun 1.3 or newer.
bun install
cp .env.example .env
bun run start
Redis is optional. Without REDIS_URL, a bounded in-process TTL cache is used. Set FA_COOKIE for public pages that FurAffinity makes login-only. Request-specific authenticated endpoints require an FA_COOKIE request header; the server cookie is not accepted as caller authorization.
curl -H 'FA_COOKIE: b=...; a=...' http://localhost:9292/notifications/submissions.json
HTTP Basic authentication remains compatible with RSS readers. Credentials embedded in feed URLs must never be shared. Reading an individual unread note may mark it read on FurAffinity.
Develop
bun run check
bun run dev
The deterministic suite does not access FurAffinity. Read-only live checks require LIVE_FA_TESTS=1 and explicit credentials. Favorite and journal mutations are never performed by the live suite.
The original Ruby implementation is retained in the ignored tmp/ directory as reference only and is not included in builds or images.
Docker
docker build -t faexport .
docker run --rm -p 9292:9292 --env-file .env faexport
docker compose up starts both FAExport and Redis, waits for Redis to become healthy, and uses the internal redis://redis:6379 address by default. Set REDIS_URL to override it with an external Redis instance.
License
BSD 3-Clause. Copyright remains with the original FAExport contributors; see LICENSE.txt.