Sobre el proyecto

slskr es un daemon Rust autoalojado, API HTTP y UI de navegador para la red de intercambio de archivos peer-to-peer Soulseek. Está diseñado para operadores que quieren un cliente Soulseek privado y scriptable que pueda ejecutarse localmente, en un servidor o detrás de su propio límite de servicio. Un único proceso `slskr serve` gestiona la sesión de Soulseek, los listeners de pares, el índice de recursos compartidos, el motor de transferencias, la API HTTP, el flujo de eventos y una UI Web incluida. Las características clave incluyen: - **Acceso Web**: Una UI Web basada en React servida en el mismo listener HTTP, con búsqueda, descargas, subidas, salas, mensajes privados, usuarios, contactos, estado de navegación, recursos compartidos, colecciones, integraciones, controles de reproductor, estado de configuración, telemetría y salud en tiempo de ejecución. - **Búsqueda y Resultados**: Admite objetivos globales, de usuario, de sala y de estilo lista de deseos. Los resultados incluyen metadatos de pares como estado bloqueado, disponibilidad de slot, longitud de cola, velocidad, tamaño de archivo y ruta. La UI añade filtros, plegado de duplicados, usuarios ocultos/bloqueados, historial de búsqueda, notas de revisión, perfiles de adquisición, paneles de grafo de descubrimiento y búsquedas de seguimiento asistidas por metadatos. - **Transferencias**: Las descargas y subidas se representan como registros de transferencia propiedad del daemon con estado de cola, inicio, progreso, finalización, cancelación, reintento y fallo. Admite proyecciones respaldadas por archivos locales para pruebas, descargas salientes, servicio de archivos compartidos entrantes, sockets de transferencia directa entre pares, sockets de transferencia ofuscados de tipo 1, fallback de transferencia indirecta, campos de offset/reanudación e historial acotado de eventos de transferencia. Las descargas aceleradas pueden usar `POST /api/v0/multisource/swarm` con múltiples fuentes compatibles con rangos HTTP y un digest SHA-256 esperado. Tickets de vista previa de pares y mesh de corta duración transmiten audio al navegador sin crear una descarga normal. - **Recursos Compartidos y Navegación**: Las raíces de recursos compartidos se indexan al inicio o mediante reescaneo. El catálogo usa rutas de recursos compartidos virtuales en lugar de exponer rutas de host sin procesar. Los operadores pueden configurar el manejo de archivos ocultos, el seguimiento de enlaces simbólicos, los límites de escaneo y las direcciones de transferencia permitidas. - **Mensajería, Salas y Usuarios**: Rastrea conversaciones de mensajes privados, acuse de recibo de mensajes, listas de salas, estado de unión/salida de salas, mensajes recientes de salas, usuarios vigilados, estadísticas de usuarios, contactos, notas y contexto de pares relacionado. - **API y Automatización**: Rutas versionadas `/api/v0/*` más alias de compatibilidad sin versión seleccionados. Los clientes de API pueden usar autenticación bearer o el encabezado `X-API-Key`. Los consumidores de eventos pueden sondear registros de eventos acotados o suscribirse al flujo de eventos WebSocket. Se proporcionan OpenAPI y documentación detallada de endpoints. - **Integraciones**: Incluye manejo de callback OAuth de Spotify, flujos de estado/wanted/importación manual de Lidarr, informes de lanzamiento de visualizador externo y paneles del lado de la UI para flujos de trabajo de biblioteca, fuente y recomendaciones. Los valores predeterminados de seguridad son conservadores: HTTP se enlaza a `127.0.0.1:5030` por defecto, los enlaces no loopback requieren al menos un token de API a menos que la autenticación se deshabilite explícitamente, las solicitudes mutantes con origen de navegador se verifican con `Origin`/`Referer`, las respuestas de configuración saneadas no devuelven credenciales, y las API de recursos compartidos devuelven rutas virtuales en lugar de rutas de host sin procesar. Los recursos de despliegue incluyen ejemplos de systemd, manifiestos de Kubernetes, reglas de Prometheus y comprobaciones de postura públicas. El proyecto incluye un ejecutor de certificación con aislamiento VPN por cuenta para eludir el límite de velocidad por IP de Soulseek, cubriendo 7 fases en 39 casos de prueba. Hay bibliotecas cliente disponibles para TypeScript, Python, Go y Rust. El proyecto está licenciado bajo AGPL-3.0-only.