Skip to content

Releases: the-ak-forge/hispasubs

v1.4.1

Choose a tag to compare

@the-ak-forge the-ak-forge released this 19 Oct 04:06

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.
  • .sub en 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-effort por diseño (instancias efímeras de Vercel); la defensa de plataforma corresponde a una regla WAF en el panel.
  • La dependencia adm-zip ya estaba en 0.6.1, que cierra el CVE-2026-39244 y su bypass posterior.

Commit: 8f39fe8

v1.4.0

Choose a tag to compare

@the-ak-forge the-ak-forge released this 19 Oct 03:00

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 .sub binarios (VobSub) se descartan y se prueba el siguiente candidato; los .sub de texto (SubViewer) siguen sirviéndose.
  • La página de configuración (/configure) se envía con Cache-Control: no-store, ya que puede contener la clave de SubDL.

Para quien autoaloja su propia instancia

  • Nueva variable PROXY_URL para apuntar a tu propio proxy de extracción.
  • Nueva variable FETCH_TIMEOUT_MS para ajustar el timeout del proxy.
  • README con tabla de variables de entorno y descripciones corregidas (p. ej. RATE_LIMIT=0 solo desactiva el límite; el tope se ajusta en wrangler.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

Choose a tag to compare

@the-ak-forge the-ak-forge released this 18 Oct 22:36

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.json dinámico), usa cf-connecting-ip como clave y aplica 120 peticiones/60 segundos. Funciona en plan gratuito, sin coste extra. Responde 429 con Retry-After.

Detalles técnicos

  • api/proxy.js: contador totalUncompressed + corte al alcanzar MAX_BYTES_TOTAL (8 MB).
  • wrangler.toml: [[ratelimits]] con name="SUBS_RATE_LIMIT", namespace_id="1001", simple.limit=120, simple.period=60.
  • worker.js: usa env.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

Choose a tag to compare

@the-ak-forge the-ak-forge released this 18 Oct 20:09

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.ico se 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.ico ya 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 _headers de caché y CORS); wrangler deploy los publica automáticamente junto al worker. Las respuestas llevan cf-cache-status: HIT/MISS y 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

Choose a tag to compare

@the-ak-forge the-ak-forge released this 18 Oct 15:10

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 .zip de 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 solo spa/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-zip actualizado 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, logo y description), 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 + label visible (formato canónico desde la 1.3.0, sin cambios).

Para quien despliegue su propia instancia

  • Nuevo wrangler.toml: despliegue con npx wrangler deploy (sin argumentos).
  • Proxy movido a api/proxy.js con vercel.json moderno (functions + rewrites); el enrutado / y /proxy?zipUrl=... no cambia.
  • Tests: 116 (worker + proxy) y CI en GitHub Actions con npm ci + npm audit en 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.