Skip to content

evandrodevbr/Downloader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ephemeral Downloader

Um proxy de download efêmero para você usar a sua VPS como ponte de alta velocidade entre servidores lentos e a sua máquina local.

Em vez de baixar direto de um host congestionado, você aponta o link para o Ephemeral Downloader, que:

  • Faz o download via VPS (geralmente com rota/peering melhor).
  • Transmite o arquivo por streaming para o seu navegador.
  • Libera os recursos assim que o download termina.

Simples, focado e pensado para quem vive baixando ISOs, ROMs e arquivos grandes.


Como funciona (visão rápida)

  • Frontend (React + Vite)

    • Interface SPA com campo de texto para múltiplos links (um por linha).
    • Lista de downloads recentes com:
      • Progresso em tempo real.
      • Tamanho total e já baixado.
      • Velocidade em MB/s e Mbps.
      • Botão para retomar downloads que falharam dentro da mesma sessão.
  • Backend (Fastify + Streams)

    • Rota GET /stream?url=...&offset=... que:
      • Faz HEAD na origem para validar o link e obter Content-Length.
      • Faz GET (ou Range: bytes=offset- para retomada).
      • Faz o streaming direto para o cliente, sem guardar arquivo em disco.
    • Em produção, também serve o build do frontend (Vite) na própria porta do servidor.

Requisitos

  • Node.js >= 20
  • pnpm >= 8

Instalação

Clone o repositório e instale as dependências:

git clone <seu-fork-ou-repo> Downloader
cd Downloader
pnpm install

Scripts principais

Na raiz do projeto:

  • Desenvolvimento (backend + frontend juntos):
pnpm dev

Isso sobe:

  • Fastify em http://localhost:3000

  • Vite em http://localhost:5173

  • Build de produção (server + web):

pnpm build
  • Start de produção (tudo pela porta 3000):
pnpm start

O servidor Fastify:

  • Servirá o build do Vite na raiz (/).
  • Continuará expondo GET /stream para o proxy de download.

Configuração de ambiente

Desenvolvimento

Por padrão o frontend conversa com o backend em:

const API_URL = import.meta.env.VITE_API_URL ?? "http://localhost:3000";

Se você mudar a porta ou rodar o backend em outro host, basta criar um arquivo .env dentro de web/:

VITE_API_URL=http://seu-backend:3000

Produção (Nixpacks ou similar)

  • Defina a variável PORT (a maioria das plataformas faz isso automaticamente).
  • O servidor Fastify faz fallback para 3000 se PORT não estiver definida.
  • O arquivo nixpacks.toml já descreve:
    • Comando de build: pnpm build
    • Comando de start: pnpm start

Fluxo de uso típico

  1. Você tem uma VPS bem localizada (por exemplo, no mesmo continente do servidor de origem).
  2. No seu desktop/notebook, abre o Ephemeral Downloader.
  3. Cola um ou mais links HTTP/HTTPS diretos (por exemplo, ROMs no SourceForge).
  4. Clica em “Iniciar download”.
  5. A VPS baixa em alta velocidade e o app:
    • Mostra o progresso.
    • Indica tamanho total / baixado.
    • Mostra velocidade agregada em MB/s e Mbps.
  6. Se a conexão cair, você pode retomar dentro da mesma sessão.

Limitações intencionais

  • Retomada entre sessões (fechar aba / desligar máquina) não é suportada.
    • O projeto é focado em uso efêmero, sem manter arquivos em disco no servidor.
  • O servidor realiza apenas:
    • Validação básica de URL (somente http/https).
    • Proxy por streaming com backpressure nativo do Node.js.
    • Nenhuma autenticação ou controle de cota por usuário (idealmente coloque atrás de VPN, auth reverso ou firewall).

Ideias futuras

  • Autenticação simples para restringir o painel.
  • Limite de banda por IP/usuário.
  • Modo “linha de comando” usando a mesma API do servidor.

Por que esse projeto existe?

Porque às vezes o problema não é a sua internet nem o servidor de origem, e sim o caminho entre eles.

Colocando uma VPS no meio do caminho, você “puxa” o arquivo por uma rota melhor até a VPS e, de lá, faz o streaming até você com muito mais previsibilidade.

O Ephemeral Downloader encapsula essa ideia em uma interface simples, focada em quem só quer colar o link, apertar um botão e acompanhar o progresso.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors