Saltar al contenido
← Volver

Ledgerline

Una API de eventos en el edge construida alrededor de appends idempotentes, streams ordenados y evidencia de alteraciones con SHA-256.

En línea Cloudflare WorkersDurable ObjectsD1TypeScriptHono
Ledgerline: Una API de eventos en el edge construida alrededor de appends idempotentes, streams ordenados y evidencia de alteraciones con SHA-256.

Demo en vivo en Cloudflare, repositorio público en GitHub y 69 pruebas en el runtime de Workers.

La idea

Ledgerline es un servicio compacto de integridad para streams de eventos, registros de auditoría y sistemas que necesitan preservar lo ocurrido. Su foco es concreto: hacer que un append sea seguro de reintentar, mantener cada stream ordenado y hacer práctica la verificación posterior.

Lo que construí

Cada stream tiene su propio Durable Object de Cloudflare. Este serializa mutaciones, asigna números de secuencia monotónicos, guarda el registro de idempotencia, enlaza el evento a la cadena de hashes y actualiza rollups por minuto en un lote atómico. D1 recibe después los eventos confirmados como modelo de lectura eventualmente consistente para paginación y consultas.

Los eventos se hashean sobre JSON canónico y se enlazan al hash anterior. El endpoint de verificación recalcula la cadena desde el génesis, identifica la primera secuencia rota y compara el resultado con los metadatos de cabeza almacenados, para detectar también una cola eliminada. Las llaves API se guardan como hashes, las verificaciones de propiedad devuelven 404 para streams ajenos y cada llave tiene su propio token bucket.

Lo difícil

01

Reintentos seguros en el tiempo

Una llave de idempotencia se conserva durante la vida de su stream. Reintentarla devuelve el resultado original en vez de anexar otro evento, incluso mucho después de la primera solicitud.

02

Orden a través de awaits

Un Durable Object es de un solo hilo, pero el trabajo asíncrono todavía puede crear un límite de intercalado. Las mutaciones corren dentro de blockConcurrencyWhile para que un segundo append no observe una escritura incompleta.

03

Detectar una cola eliminada

Un prefijo limpio todavía puede estar incompleto. La verificación compara el conteo y el hash de cabeza recalculados con metadatos persistidos, para reportar el truncado en vez de aceptar un log válido más corto.

Lo que sigue

Agregar escenarios más completos al recorrido público.