Fetch magnet, HTTP(S), FTP and Usenet links, streaming those bytes straight into the storage you choose.
Live login via megajs. Sessions are memory-only — reconnect after a page reload. Real uploads stream into your account.
The function authorizes your key and returns the upload credentials; parts stream browser → B2. Bucket needs CORS for this origin.
Runs on this machine (clouddl/engine). Node WebTorrent takes ANY torrent — UDP trackers, DHT, web seeds, .torrent files — and streams the bytes straight into MEGA, B2 or a local folder. When connected, torrent links go here instead of the in-browser fallback.
Drop a magnet or .torrent here while the queue is connected and it is POSTed to the Pages Function, stored in D1, claimed by the scheduled GitLab runner, downloaded by the engine, and the bytes streamed into the destination. Progress and status sync back to this list.
MEGA: the source bytes are written chunk-by-chunk into a live megajs upload stream — nothing is staged locally. B2: a large-file transfer is opened, and 16 MB parts are hashed (SHA-1) and uploaded straight to Backblaze as the source stream arrives. HTTP(S): the URL is fetched and piped through. Torrents: if the Node engine is connected, torrent links (including UDP/DHT magnets and any .torrent) are downloaded there and streamed to its configured destination; otherwise WebTorrent runs in-browser and its file stream is piped. Only FTP/Usenet stay simulated (no browser protocol support).
Direct browser uploads need a CORS configuration on the target bucket. In the Backblaze console open the bucket → Bucket Settings → CORS Rules and allow this origin (add https://<your-pages-domain> or http://localhost:8788), methods GET, POST, and headers Authorization, X-Bz-*. Until qualified, a key restricted to a single bucket is required.
Once: npx wrangler d1 create clouddl_queue --remote → paste the returned database_id into wrangler.toml. Then on every deploy: npx wrangler d1 migrations apply clouddl_queue --remote + npx wrangler pages deploy . --project-name clouddl. The queue endpoints (/api/queue…) live in functions/api/queue*.js. Set QUEUE_TOKEN on the Pages project to lock writes, and put the same value + QUEUE_URL=https://<project>.pages.dev into GitLab CI/CD variables.
Deploy: npx wrangler pages dev clouddl then npx wrangler pages deploy clouddl, with B2_KEY_ID / B2_APPLICATION_KEY set on the project. The function returns a 24 h B2 authorization token to this page so uploads can flow directly — treat that endpoint as private. MEGA/FTP passwords are kept in memory only.