@yarlisai/idempotency
Primitivas de operaciones idempotentes — reclamación atómica de claves, repetición de resultados, expiración por TTL y limpieza.
Primitivas de operaciones idempotentes para webhooks, pollers y cualquier operación que deba ejecutarse exactamente una vez — reclamación atómica de claves, almacenamiento y repetición de resultados, liberación en reintentos, expiración por TTL y limpieza de claves expiradas.
Instalación
npm install @yarlisai/idempotencyFuente: packages/idempotency ·
npm ·
CHANGELOG
Por qué
@yarlisai/idempotency sigue el contrato puerto/adaptador: los consumidores dependen del puerto IdempotencyProvider e instancian un adaptador en tiempo de ejecución. En la v1 se incluyen dos adaptadores:
postgres— respaldado por drizzle, con una ruta rápida de caché compatible con Redis opcional. El llamador inyecta su propiodb, la referencia a la tablaidempotency_key, y los operadoresand/eq/lt, por lo que el paquete nunca incluye una segunda copia dedrizzle-ormni deioredis.memory— Map en proceso con TTL, para pruebas y despliegues de instancia única.
Uso
import { createIdempotencyClient } from '@yarlisai/idempotency'
import { and, eq, lt } from 'drizzle-orm'
const webhookIdempotency = createIdempotencyClient({
adapter: 'postgres',
db,
table: idempotencyKey,
operators: { and, eq, lt },
namespace: 'webhook',
ttlSeconds: 60 * 60 * 24 * 7,
})
const claim = await webhookIdempotency.atomicallyClaim('stripe', event.id)
if (!claim.claimed) return // duplicate deliveryEl README del paquete incluye una guía de inicio rápida completa. mybotbox-platform en sí mismo es el consumidor de referencia — apps/sat/lib/idempotency/ muestra cómo cada punto de llamada usa el puerto en lugar de acceder directamente a la base de datos.