soul v4.2.0

@jun/soul/lib

Lib

Utilidades sin estado: escapado, slugs, cache, hash, email y captcha.

Que es#

Funciones puras y sin dependencias, extraidas de proyectos donde ya estuvieron en produccion. No hay configuracion: se importan y se usan.

HTML y texto#

escapeHtml(s)
Escapa &, <, > y ". Obligatorio para cualquier dato de usuario que armes a mano.
robotsMeta(noindex)
Devuelve la meta noindex, nofollow o cadena vacia.
slugify(s)
Texto a slug: quita acentos, deja [a-z0-9-].
generateSlug(s, fallback = "item")
Slug unico: base legible + 6 caracteres hex aleatorios.

Cache#

cacheKeyFor(url)
Arma la clave quitando query y hash.
invalidateCache(appUrl, path)
Borra una pagina del cache del edge.

Secretos#

sha256Hex(s)
SHA-256 en hexadecimal. Se guarda el hash de un secreto, nunca el secreto.
timingSafeEqualHex(a, b)
Comparacion en tiempo constante. Evita que el tiempo de respuesta filtre cuantos caracteres acerto un atacante.
randomCode(groups = 4, groupSize = 4)
Codigo legible tipo A1B2-C3D4-…, con alfabeto sin caracteres ambiguos (nada de 0/O ni 1/I/L).
randomToken(bytes = 32)
Token hexadecimal opaco para maquinas. 32 bytes son 256 bits.

Email y captcha#

sendEmail(env, { to, subject, text })
Envia por Resend. Sin RESEND_API_KEY solo hace console.log, asi que el flujo se prueba en local sin cuenta.
verifyTurnstile(secretKey, token, ip?)
Valida el captcha de Cloudflare contra siteverify.