Skip to main content

v1.3.1

  • Fix: verifyWebhookSignature now exported as a standalone named function (no ChurnKit instance required)
  • Fix: Normalizers now return empty signals: [] and recommendation: '' instead of undefined for users with no scoring history
  • Fix: batcher.push() throws ChurnKitError(VALIDATION_ERROR) immediately after batcher.destroy() instead of silently dropping events

v1.3.0

  • New: createBatcher() instance method on ChurnKit (preferred over standalone createBatcher())
  • New: onRequest / onResponse observability hooks on ChurnKitOptions
  • New: requestTimeoutMs per-call AbortSignal via AbortSignal.timeout()
  • New: atRiskAll() async generator for zero-pagination streaming
  • New: account() — fetch account info and plan details
  • New: ping() — health check

v1.2.0

  • New: watch() / unwatch() / listWatches() — per-user webhook alerts
  • New: cooldown support on watches (format: "24h", "7d")
  • New: isKnownErrorCode() type guard for exhaustive error handling

v1.1.0

  • New: bulkEvent() — ingest up to 500 events per call
  • New: atRisk() — paginated at-risk user query with plan filter
  • New: Exponential backoff with jitter for retryable failures

v1.0.0

  • Initial release: identify(), event(), score()
  • ESM + CJS dual package
  • ChurnKitError with typed ErrorCode constants