Better Auth plugin for LemonSqueezy payment integration
npm install @chakra-ui/better-authA Better Auth plugin for LemonSqueezy payment integration with webhook processing and license claiming.
- 🎯 Webhook Processing - Handles LemonSqueezy webhooks for orders and refunds
- 🔐 License Claiming - Users can claim purchases with order IDs
- 📦 Purchase Tracking - Tracks purchase status and user associations
- 🛡️ Secure Verification - HMAC signature verification for webhooks
- 🔧 Configurable - Support for multiple products and variants
- ⚡ Type Safe - Full TypeScript support
``bash`
npm install better-auth-lemonsqueezy-plugin
`typescript
import { betterAuth } from 'better-auth'
import { lemonSqueezy } from 'better-auth-lemonsqueezy-plugin'
export const auth = betterAuth({
plugins: [
lemonSqueezy({
webhookSecret: process.env.LEMON_SQUEEZY_WEBHOOK_SECRET!,
products: [
{
name: 'Chakra UI Pro',
variants: ['Personal', 'Team', 'Enterprise'],
},
],
}),
],
})
`
`typescript
import { createAuthClient } from 'better-auth/client'
import { lemonSqueezyClient } from 'better-auth-lemonsqueezy-plugin/client'
export const authClient = createAuthClient({
plugins: [lemonSqueezyClient()],
})
`
- Events: order_created, order_refunded$3
Users can claim their purchases with order IDs:`typescript
const response = await fetch('/api/auth/purchase/claim', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ orderId: 'your-order-id' }),
})
`Database Schema
The plugin creates a
purchase table:`typescript
interface Purchase {
id: string
orderId: string // LemonSqueezy order ID
productId: string // Generated from product.variant names
status: 'active' | 'refunded'
userId?: string // User who claimed it
createdAt: Date
updatedAt: Date
}
``MIT