Repository navigation
Releases: the-ak-forge/hispasubs
Release list
v1.4.1
Cambios
Versión de mantenimiento centrada en el proxy de extracción; la lógica del clasificador no cambia, pero el manifest del addon se alinea a 1.4.1.
Proxy (seguridad y robustez)
- Descarga con lectura acotada por streaming (anti-OOM): un origen que miente sobre el tamaño del fichero (o no lo declara) ya no puede agotar la memoria de la función; los ficheros de más de 4 MB se rechazan con 413 al superar el tope, sin cargarlos enteros en memoria.
.suben UTF-16 reconocidos: las marcas de orden de bytes (BOM) evitan confundir un subtítulo de texto UTF-16 con un archivo binario VobSub y descartarlo por error.- Normalización del parámetro
zipUrl: entrada tolerante cuando el parámetro llega duplicado en la query.
Tests
164 en verde (81 worker + 83 proxy), 9 nuevos cubriendo los tres puntos anteriores.
Verificado y descartado en esta auditoría
- El límite de peticiones en memoria del proxy es
best-effortpor diseño (instancias efímeras de Vercel); la defensa de plataforma corresponde a una regla WAF en el panel. - La dependencia
adm-zipya estaba en 0.6.1, que cierra el CVE-2026-39244 y su bypass posterior.
Commit: 8f39fe8
v1.4.0
Qué hay de nuevo
Clasificación más precisa
- Fronteras Unicode en los diccionarios: palabras como «órale», «aparcáis» o «enojó» ahora se detectan (antes el reconocimiento de límites de palabra no entendía tildes ni ñ).
- Detección real de conjugaciones (
manej…,cond(uc|uj|uzc)…,aparqu……), como prometía la documentación. - Palabras comunes a varias regiones (
vale,papa,neta,ustedes) ya no deciden solas una clasificación: pesan menos y evitan falsos positivos (p. ej. «No vale la pena» ya no se marca como de España). - «🌎 Neutro» solo se afirma con vocabulario real; si no hay nada reconocible la pista se muestra sin clasificar (📄).
Rendimiento y fiabilidad
- Las respuestas degradadas (fallo de red de un proveedor, página de error…) se cachean 60 s en vez de 2 h.
- Clave de caché canónica: los parámetros extra que Stremio añade a la URL ya no fragmentan la caché ni provocan descargas repetidas.
- El proxy de extracción cubre con el timeout la descarga completa del zip (cabeceras y cuerpo) y solo descomprime el archivo elegido.
- Los
.subbinarios (VobSub) se descartan y se prueba el siguiente candidato; los.subde texto (SubViewer) siguen sirviéndose. - La página de configuración (
/configure) se envía conCache-Control: no-store, ya que puede contener la clave de SubDL.
Para quien autoaloja su propia instancia
- Nueva variable
PROXY_URLpara apuntar a tu propio proxy de extracción. - Nueva variable
FETCH_TIMEOUT_MSpara ajustar el timeout del proxy. - README con tabla de variables de entorno y descripciones corregidas (p. ej.
RATE_LIMIT=0solo desactiva el límite; el tope se ajusta enwrangler.toml).
Tests y calidad
- 155 pruebas automatizadas en verde (81 worker + 74 proxy), 33 nuevas: léxico, caché, rate limit y proxy.
v1.3.3
Actualización menor. Sin cambios de comportamiento para el usuario.
Seguridad (mejora preventiva)
- Proxy Vercel (
api/proxy.js): añadido presupuesto agregado de descompresión (MAX_BYTES_TOTAL = 8 MB) y corte temprano al superar ese umbral. Se sigue respetando el límite de 4 MB por entrada, el máximo de 2.000 entradas y las validaciones SSRF existentes. Reduce el riesgo residual de acumulación al descomprimir muchos archivos de un ZIP.
Mejora (ya presente)
- Protección contra abusos con Rate Limiting nativo: binding
SUBS_RATE_LIMIT(Workers Rate Limiting API). Solo afecta a peticiones sin caché (búsquedas de subtítulos y/manifest.jsondinámico), usacf-connecting-ipcomo clave y aplica 120 peticiones/60 segundos. Funciona en plan gratuito, sin coste extra. Responde 429 conRetry-After.
Detalles técnicos
api/proxy.js: contadortotalUncompressed+ corte al alcanzarMAX_BYTES_TOTAL(8 MB).wrangler.toml:[[ratelimits]]conname="SUBS_RATE_LIMIT",namespace_id="1001",simple.limit=120,simple.period=60.worker.js: usaenv.SUBS_RATE_LIMIT.limit({ key: ip })cuando existe; mantiene fallback in-memory para entornos de test/local.- Tests: 122/122 verdes (53 worker + 69 proxy). Versión del manifest
1.3.3.
No hace falta reinstalar el complemento: la versión se actualiza sola la próxima vez que Stremio consulte el manifest.
v1.3.2
Actualización de rendimiento y pequeños arreglos. Sin cambios de comportamiento para el usuario.
Rendimiento
- El logo ya no ejecuta el worker:
/logo.svg—que Stremio re-pide en cada apertura de la app y concentra más de la mitad del tráfico, y que además hotlinkea stremio-addons.net desde su portada— y/favicon.icose publican ahora como recursos estáticos del borde (Workers Static Assets). Cloudflare los sirve sin invocar una sola línea del worker: respuestas más rápidas, caché de 7 días con ETag/304 y requests gratis e ilimitados, dejando el plan gratuito entero para las búsquedas de subtítulos.
Arreglos
/favicon.icoya no devuelve 404: los navegadores lo piden siempre que una página no declara icono; ahora responde un icono real (ICO 32×32).- Diagnóstico más claro: cuando SubDL responde
403(clave rechazada o cuota agotada), el registro lo indica explícitamente —útil si algún día reportas que «no ves subtítulos de SubDL».
Para quien despliegue su propia instancia
- Logo y favicon viven ahora en
public/(con su_headersde caché y CORS);wrangler deploylos publica automáticamente junto al worker. Las respuestas llevancf-cache-status: HIT/MISSy ETag para verificar la caché sin herramientas. - Tests: 122 (53 del worker + 69 del proxy), todos en verde, ejecutándose en CI con cada push.
No hace falta reinstalar el complemento: la versión se actualiza sola la próxima vez que Stremio consulte el manifest.
v1.3.1
Correcciones de seguridad, un etiquetado más honesto y menos peticiones. Incluye el nuevo proxy 1.0.3.
Qué notarás
- 🌎 Neutro ya no se regala: los archivos cuyo contenido no era analizable (páginas de error HTML, binarios, vacíos o sin ninguna palabra del léxico) se etiquetan ahora 📄 Español (sin clasificar). "Neutro" solo se afirma cuando el análisis encontró datos reales.
- Menos entradas inservibles: los
.rar(Stremio no descomprime) y los.zipde hosts no permitidos se descartan en lugar de aparecer en la lista y fallar al reproducir. - Más resultados de OpenSubtitles: el filtro de idioma acepta ahora variantes del código (
es-ES,es-419,esp,span), no solospa/es.
Seguridad y robustez
- Proxy 1.0.3: cada salto de redirección se vuelve a validar (antes un segundo salto podía saltarse la lista de hosts permitidos), solo se admite el puerto 443 y se rechazan IP privadas, loopback, CGNAT y IPv4 embebida en IPv6.
adm-zipactualizado a 0.6.1 (CVE-2026-39244, zip bomb) y tamaño máximo de descarga ajustado a 4 MB (el límite real de respuesta de Vercel es 4,5 MB).- El análisis léxico está acotado a 1 MB por archivo (antes se cargaba el fichero completo en memoria).
- Rate limit por IP de cortesía (
429+Retry-After), con umbral holgado y configurable; no afecta al uso normal. - Eliminada la firma de stremio-addons.net: firmar obliga a regenerarla con cada cambio de versión (cubre
version,logoydescription), y una firma que deja de validar es peor que ninguna.
Rendimiento
- Caché explícita: 2 h para las listas de subtítulos y 60 s para las respuestas vacías (si un proveedor de subtítulos cae, esa penalización ya no se paga en cada petición).
- La respuesta sigue llegando con
lang: spa+labelvisible (formato canónico desde la 1.3.0, sin cambios).
Para quien despliegue su propia instancia
- Nuevo
wrangler.toml: despliegue connpx wrangler deploy(sin argumentos). - Proxy movido a
api/proxy.jsconvercel.jsonmoderno (functions+rewrites); el enrutado/y/proxy?zipUrl=...no cambia. - Tests: 116 (worker + proxy) y CI en GitHub Actions con
npm ci+npm auditen cada push.
No hace falta reinstalar el complemento. Si tu cliente no muestra la 1.3.1, reinstálalo desde la página de configuración.