Commit Graph
9 Commits
Author SHA1 Message Date
evandro d181c76dfd chore: remove código morto e padroniza scripts e CI 2026-10-10 03:55:30 -03:00
evandro 1bcb35d169 refactor(web): reduz a complexidade do DownloadItem e adiciona testes com vitest 2026-10-10 03:55:02 -03:00
Evandro Fonseca Junior b19c989c0e fix(server): conserta start de produção, entrega do arquivo e diretório de storage
Quatro defeitos verificados executando o servidor de produção:

1. `pnpm start` quebrava na primeira linha com ERR_MODULE_NOT_FOUND
   (`server/dist/lib/SessionManager`): os imports relativos não tinham extensão
   e o Node ESM não resolve `./lib/SessionManager`. Os imports agora terminam em
   `.js` (funciona no tsx em dev e no build do tsc).

2. `GET /api/download/:taskId` devolvia o index.html da SPA (450 bytes) em vez
   do arquivo baixado, porque o @fastify/static resolve o caminho a partir do
   `root` do plugin (web/dist). Agora o root do diretório da sessão é passado
   por requisição via `reply.sendFile(fileName, sessionPath)`.

3. O download podia sair truncado: o status virava "completed" logo depois de
   `fileStream.end()`, antes do flush em disco. A gravação passou a usar
   `stream/promises.pipeline` (respeita backpressure, espera o flush e propaga
   erro de escrita), com um Transform no meio mantendo o cálculo de
   progresso/velocidade.

4. A raiz de armazenamento era `resolve(process.cwd(), "server/storage")`; como
   `pnpm start` executa dentro de `server/`, os arquivos iam para
   `server/server/storage`. Agora a raiz é ancorada no diretório do módulo
   (`server/storage`), com override por `STORAGE_ROOT`, e o diretório entrou no
   .gitignore para os downloads não serem versionados.

Também usa `basename()` no nome de arquivo vindo do Content-Disposition e da
URL de origem, evitando escrever fora do diretório da sessão.
2026-09-14 06:04:15 -03:00
Evandro Fonseca Junior aedfe69da0 chore: deixa de versionar o build antigo em server/dist
O arquivo server/dist/index.js estava versionado (apesar de `dist/` estar no
.gitignore) e continha o build de novembro/2025, anterior à reescrita do
backend: ainda tinha o proxy antigo de /stream. O build é regenerado por
`pnpm build` (o nixpacks roda `pnpm build` antes do start), então o artefato
não precisa ficar no repositório.
2026-09-14 06:03:50 -03:00
Evandro Fonseca Junior 5b1600c210 feat: Inicializa a aplicação Downloader com backend para gerenciamento de sessões e downloads, e frontend para interação. 2026-02-14 18:52:54 -03:00
Evandro Fonseca Junior c2cadc25f3 feat: Adiciona um sistema de agentes abrangente com diversas habilidades e fluxos de trabalho, e implementa um novo componente de formulário de download na interface web. 2026-02-14 18:35:35 -03:00
Evandro Fonseca Junior 456f0fe056 Enhance streaming functionality with optional byte offset support and serve frontend build in production. Added static file serving for SPA and improved error handling for streaming requests. 2025-11-21 23:54:48 -03:00
Evandro Fonseca Junior b9ca713a2a Add explicit route for SPA at root path to serve index.html 2025-11-21 23:51:52 -03:00
Evandro Fonseca Junior aecf4586e5 first 2025-11-21 23:32:19 -03:00