Pulse
Análisis de crecimiento para desarrolladores de apps: consulta ingresos, MRR, gasto en anuncios, suscripciones, embudos, LTV y CAC desde tu agente de IA. Acceso de solo lectura a tus propios datos de RevenueCat, App Store, Google Play, Meta Ads y Google Ads.
Documentación
SDK de Pulse
SDKs de analítica de código abierto para web, React Native, iOS y Android. Añade analítica a tu aplicación con una cola de eventos fiable, prioritaria para modo offline e identidad limpia — y nada más.
- Diminuto. El SDK web es ≤ 10 KB comprimido con gzip con cero dependencias.
- Fiable. Una cola persistente y ordenada sobrevive a periodos offline y a la muerte del proceso. La entrega es idempotente: los reintentos nunca duplican eventos.
- Honesto con la privacidad. Sin captura automática, sin huellas digitales, sin IDFA/GAID, sin SDKs de anuncios. El SDK envía solo los eventos que tú le envías.
- Un protocolo, cuatro plataformas. Cada SDK implementa el mismo protocolo de cable y pasa los mismos fixtures de conformidad en CI. El servidor de ingesta de Pulse reproduce esos mismos fixtures — el contrato se verifica desde ambos extremos.
Este repositorio contiene los paquetes de TypeScript. Los SDKs de Swift y Kotlin viven
en pulse-sdk-native.
Para agentes de IA
Instala: npm i @pulse-circle/web, luego Pulse.init('pk_...') y
Pulse.track('event', {...}). El paquete es autocontenido (cero dependencias, endpoint
predeterminado incluido) y trae llms.txt dentro. Instalar solo necesita npm; la entrega
de eventos ocurre en el navegador del usuario final en tiempo de ejecución.
Paquetes
| Paquete | Para qué sirve | Instalación |
|---|---|---|
@pulse-circle/web | Navegador / cualquier aplicación web | npm i @pulse-circle/web |
@pulse-circle/react-native | React Native y Expo | npm i @pulse-circle/react-native |
@pulse-circle/core | Motor independiente de plataforma (usado por los anteriores) | npm i @pulse-circle/core |
@pulse-circle/mcp | Servidor MCP local (stdio) — guías de configuración/conexión offline para agentes de IA | claude mcp add pulse -- npx -y @pulse-circle/mcp |
Inicio rápido (web)
npm install @pulse-circle/web
import { Pulse } from '@pulse-circle/web';
Pulse.init('pk_your_api_key');
// Track product events — the SDK batches, persists, and retries for you.
Pulse.track('subscription_started', { plan: 'pro' });
// Tie events to a user after login.
Pulse.identify('user_42');
// On logout, start a fresh anonymous identity.
Pulse.reset();
Esa es toda la API. Consulta el README de cada paquete para la instalación específica de la plataforma (etiqueta de script, Expo, etc.) y la referencia completa.
La API, en todas partes
Los cinco métodos son idénticos en las cuatro plataformas, en la sintaxis idiomática de cada lenguaje:
init(apiKey, options?) // configure once
track(event, properties?) // queue an event
identify(userId) // associate the current identity with a user id
reset() // logout: new anonymous identity
flush() // force-send the queue (tests, critical moments)
Deliberadamente no hay seguimiento automático de pantalla/página ni métodos de ingresos: los ingresos provienen de conectores del lado del servidor, por lo que hay exactamente una fuente de verdad por número.
El contrato de fiabilidad
- Cada evento recibe un
idempotency_keyy untimestampen el momento en que llamas atrack— nunca en el momento del envío. Los reintentos reenvían ambos byte-idénticos, y la clave primaria del servidor incluye ambos, por lo que una red inestable nunca puede crear un duplicado. - La cola es persistente (localStorage en web, archivos en móvil) y ordenada. Sobrevive a recargas, fallos y periodos offline hasta un límite por plataforma, luego expulsa los más antiguos primero con una advertencia de depuración en lugar de crecer sin límite.
- Los reintentos usan retroceso exponencial con jitter. Un lote que el servidor sigue rechazando (un lote "venenoso") se aparta después de 10 intentos para que nunca pueda bloquear todo lo que está detrás.
Los detalles normativos están en protocol/PROTOCOL.md.
Desarrollo
npm install
npm test # conformance fixtures + unit tests (vitest)
npm run lint
npm run typecheck
npm run build # tsup builds for every package
npm run size -w @pulse-circle/web # enforce the 10 KB budget
Fixtures de conformidad
protocol/fixtures es la fuente de verdad para el
comportamiento multiplataforma. Cada archivo JSON es un escenario ("estas llamadas
a la API producen estas solicitudes HTTP"); cada SDK los ejecuta a través de un
ejecutor de fixtures compartido, y el servidor los reproduce contra
ingesta real. Cambia el comportamiento cambiando un fixture, y el CI de cada
plataforma te dice quién está fuera de contrato.
Publicación
Las versiones son independientes por paquete. Aumenta la versión en el
package.json del paquete, luego empuja una etiqueta:
core-v0.1.0 | web-v0.1.0 | react-native-v0.1.0
El flujo de trabajo de publicación verifica que la etiqueta
coincida con package.json, ejecuta la prueba completa + compilación + control de tamaño, y publica
en npm con procedencia.
Licencia
MIT © Pulse Circle Studio