Image hosts are now server storage (30 days), litterbox (<=72h, direct from the browser), catbox (permanent) and direct. The server becomes one web-standard fetch handler with Cloudflare Workers and Bun.serve entries, and an optional shared password gates every route, assets included. Co-Authored-By: Claude Opus 5.5 <[email protected]>
2.5 KiB
Architecture
How mangabaka-seeder is built today. Update in the same commit as any structural change.
Overview
No code exists yet. The design is in specs/001-webtoons-covers.md:
one pure TypeScript core (src/core/) that turns a MangaBaka series link and a Webtoons series
link into a cover submission, used by three front ends — a static page served by a small,
optionally password-gated server that runs on Cloudflare Workers or self-hosted under Bun
(primary), a userscript, and later a Bun CLI. Replace this section with reality as modules land.
Map (planned — spec §4)
| Path | Responsibility |
|---|---|
src/core/ |
Pure pipeline: sources, Wayback history, image inspection, dedupe, seed, MangaBaka client. No DOM, Bun, Node or GM_* APIs. |
src/web/ |
Static page UI. |
src/server/ |
Portable fetch handler (app.ts) + password gate; entries worker.ts (Cloudflare, R2) and bun.ts (self-hosted, S3). Static assets, /api/fetch allowlisted proxy, /api/upload. |
src/userscript/ |
Userscript on mangabaka.org; network via GM_xmlhttpRequest. |
src/cli/ |
Later: Bun CLI. |
test/fixtures/ |
Saved real responses; tests never hit the network. |
Data flow
Links → series id + source.resolve → current + Wayback candidates → inspect (bytes, size,
sha256) → dedupe against MangaBaka → seed → user reviews → rehost (explicit) → submit or manual entry.
External dependencies
| Service | Reached via | If unavailable |
|---|---|---|
api.mangabaka.org |
direct (CORS open) | Nothing works. |
Webtoons HTML / swebtoon-phinf.pstatic.net |
server proxy or GM_xmlhttpRequest |
Nothing works. |
Wayback (web.archive.org) |
same | Warning; current covers only. |
| Server storage (R2 binding or S3 bucket) | server | server host hidden; litterbox/catbox/direct still work. |
| litterbox / catbox | browser directly (litterbox), server or GM_xmlhttpRequest (catbox) |
That host fails; others still work. |
Invariants
src/core/never imports fromweb/,server/,userscript/orcli/.- The MangaBaka token is only ever sent to
api.mangabaka.org, never through our server. - With
MBSEED_PASSWORDset, every route except/loginrequires a session (or Bearer password). - Nothing is uploaded or submitted without an explicit user action; saves use
save_mode: "review". /api/fetchonly fetches allowlisted hosts;/api/uploadonly takes a source URL, never bytes.
Known rough edges
See the open questions in spec §7 and TODO.md.