Sobre o projeto

slskr é um daemon Rust auto-hospedado, API HTTP e interface de navegador para a rede de compartilhamento de arquivos peer-to-peer Soulseek. Ele é projetado para operadores que desejam um cliente Soulseek privado e scriptável que pode ser executado localmente, em um servidor ou atrás de seu próprio limite de serviço. Um único processo `slskr serve` gerencia a sessão Soulseek, listeners de peers, índice de compartilhamento, motor de transferência, API HTTP, fluxo de eventos e uma Web UI integrada. Os principais recursos incluem: - **Acesso Web**: Uma Web UI baseada em React servida no mesmo listener HTTP, com busca, downloads, uploads, salas, mensagens privadas, usuários, contatos, estado de navegação, compartilhamentos, coleções, integrações, controles de player, status de configuração, telemetria e saúde de runtime. - **Busca e Resultados**: Suporta alvos globais, de usuário, de sala e no estilo wishlist. Os resultados incluem metadados de peers, como estado bloqueado, disponibilidade de slot, comprimento da fila, velocidade, tamanho do arquivo e caminho. A UI adiciona filtros, agrupamento de duplicatas, usuários ocultos/bloqueados, histórico de busca, notas de revisão, perfis de aquisição, painéis de grafo de descoberta e buscas de acompanhamento assistidas por metadados. - **Transferências**: Downloads e uploads são representados como registros de transferência pertencentes ao daemon, com estados de fila, início, progresso, conclusão, cancelamento, retentativa e falha. Suporta projeções locais baseadas em arquivos para testes, downloads de saída, serviço de arquivos compartilhados de entrada, sockets diretos de transferência peer, sockets de transferência ofuscados tipo 1, fallback de transferência indireta, campos de offset/resume e histórico limitado de eventos de transferência. Downloads acelerados podem usar `POST /api/v0/multisource/swarm` com múltiplas fontes compatíveis com HTTP range e um digest SHA-256 esperado. Tickets de pré-visualização de peer e mesh de curta duração transmitem áudio para o navegador sem criar um download normal. - **Compartilhamentos e Navegação**: As raízes de compartilhamento são indexadas na inicialização ou por reescaneamento. O catálogo usa caminhos de compartilhamento virtuais em vez de expor caminhos brutos do host. Operadores podem configurar tratamento de arquivos ocultos, seguimento de symlinks, limites de varredura e direções de transferência permitidas. - **Mensagens, Salas e Usuários**: Rastreia conversas de mensagens privadas, confirmação de mensagens, listas de salas, estado de entrada/saída de salas, mensagens recentes de salas, usuários observados, estatísticas de usuários, contatos, notas e contexto de peer relacionado. - **API e Automação**: Rotas versionadas `/api/v0/*` mais aliases de compatibilidade não versionados selecionados. Clientes de API podem usar autenticação bearer ou o cabeçalho `X-API-Key`. Consumidores de eventos podem consultar registros de eventos limitados ou assinar o fluxo de eventos WebSocket. OpenAPI e documentação detalhada de endpoints são fornecidas. - **Integrações**: Inclui tratamento de callback OAuth do Spotify, fluxos de status/wanted/importação manual do Lidarr, relatórios de lançamento de visualizador externo e painéis do lado da UI para fluxos de trabalho de biblioteca, fonte e recomendação. Os padrões de segurança são conservadores: o HTTP se vincula a `127.0.0.1:5030` por padrão, vínculos não-loopback exigem pelo menos um token de API, a menos que a autenticação seja explicitamente desativada, requisições mutantes de origem do navegador são verificadas com `Origin`/`Referer`, respostas de configuração sanitizadas não retornam credenciais, e APIs de compartilhamento retornam caminhos virtuais em vez de caminhos brutos do host. Os ativos de implantação incluem exemplos systemd, manifestos Kubernetes, regras Prometheus e verificações de postura públicas. O projeto inclui um executor de certificação com isolamento de VPN por conta para contornar o limite de taxa por IP do Soulseek, cobrindo 7 fases em 39 casos de teste. Bibliotecas cliente estão disponíveis para TypeScript, Python, Go e Rust. O projeto é licenciado sob AGPL-3.0-only.