fitaiProto/WEBHOOK_QUICKSTART.md
echo 3a58d420d6 clerkauth
implemented, sync with db to be added
2025-11-10 04:16:31 +01:00

276 lines
5.5 KiB
Markdown

# Webhook Integration Quick Start
**⏱️ Estimated Time:** 15 minutes
Quick checklist to get Clerk webhooks running in your development environment.
---
## Prerequisites Checklist
- [ ] Clerk account created at [clerk.com](https://clerk.com)
- [ ] Admin app can run locally (`npm run dev`)
- [ ] Database is set up (`packages/database`)
- [ ] Node.js 18+ installed
---
## Step 1: Install Dependencies (2 min)
```bash
cd apps/admin
npm install svix
```
**Verify:**
```bash
npm list svix
# Should show: svix@1.x.x
```
---
## Step 2: Update Database Schema (2 min)
```bash
cd ../../packages/database
npm run db:push
```
**What changed:**
- Password field is now optional (Clerk handles auth)
**Verify:**
```bash
npm run db:studio
# Check users table - password column should allow NULL
```
---
## Step 3: Install Clerk CLI (3 min)
```bash
npm install -g @clerk/clerk-cli
clerk login
```
Follow the browser authentication flow.
**Verify:**
```bash
clerk --version
# Should show version number
```
---
## Step 4: Start Dev Server (1 min)
```bash
cd ../../apps/admin
npm run dev
```
Server should be running at: `http://localhost:3000`
**Keep this terminal open!**
---
## Step 5: Start Webhook Forwarding (2 min)
**Open a NEW terminal window:**
```bash
clerk listen --forward-url http://localhost:3000/api/webhooks
```
**Expected output:**
```
✓ Webhook forwarding is now active!
✓ Webhook secret: whsec_xxxxxxxxxxxxxx
Forwarding webhooks to: http://localhost:3000/api/webhooks
```
**Copy the webhook secret!** You'll need it in the next step.
**Keep this terminal open!**
---
## Step 6: Set Environment Variables (2 min)
Edit `apps/admin/.env.local`:
```env
# Clerk Authentication (should already exist)
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_xxxxx
CLERK_SECRET_KEY=sk_test_xxxxx
# Add this line with the secret from Step 5:
CLERK_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxx
```
**Restart your dev server** (go back to Terminal 1 and restart with Ctrl+C then `npm run dev`)
---
## Step 7: Test It! (3 min)
### Option A: Sign Up a New User
1. Go to your mobile app or admin app
2. Sign up with a new email
3. Complete email verification
### Option B: Test from Clerk Dashboard
1. Go to [Clerk Dashboard](https://dashboard.clerk.com)
2. Navigate to: Users → Create User
3. Fill in details and save
### Watch the Magic ✨
**In Terminal 1 (dev server):**
```
Received webhook with ID user_abc123 and type user.created
✅ User user_abc123 created in database
```
**In Terminal 2 (clerk CLI):**
```
→ Received event user.created
→ Forwarding to http://localhost:3000/api/webhooks
← Response: 200 OK
```
---
## Verification Checklist
After testing, verify everything works:
- [ ] Both terminals are running without errors
- [ ] You see webhook logs in both terminals
- [ ] User appears in database (check with `npm run db:studio`)
- [ ] User data matches Clerk (email, name)
- [ ] Default role is 'client'
---
## Troubleshooting
### "Error: CLERK_WEBHOOK_SECRET not set"
**Fix:** Add the secret to `.env.local` and restart dev server.
### "Error verifying webhook"
**Fix:**
1. Copy the EXACT secret from `clerk listen` output
2. Make sure no extra spaces in `.env.local`
3. Restart dev server
### "Webhook not received"
**Fix:**
1. Verify both terminals are running
2. Check dev server is on port 3000
3. Try creating a new user again
### "User not in database"
**Fix:**
1. Check `npm run db:studio` - is database accessible?
2. Did schema migration run? (`npm run db:push`)
3. Check Terminal 1 for SQL errors
---
## What's Next?
**Webhooks Working!** You can now:
1. **Set User Roles:**
- Go to Clerk Dashboard → Users
- Select a user
- Public Metadata: `{"role": "admin"}`
- Save (will sync to database automatically)
2. **Test Role API:**
```bash
curl -X POST http://localhost:3000/api/admin/set-role \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{"targetUserId": "user_abc", "role": "trainer"}'
```
3. **Read Full Documentation:**
- Setup Guide: `CLERK_WEBHOOK_SETUP.md`
- Testing Guide: `WEBHOOK_TESTING_GUIDE.md`
- Integration Summary: `CLERK_WEBHOOK_INTEGRATION_COMPLETE.md`
4. **Move to Production:**
- See `CLERK_WEBHOOK_SETUP.md` → Production section
- Configure endpoint in Clerk Dashboard
- Deploy with production webhook secret
---
## Common Commands Reference
```bash
# Start dev server
cd apps/admin && npm run dev
# Start webhook forwarding
clerk listen --forward-url http://localhost:3000/api/webhooks
# View database
cd packages/database && npm run db:studio
# Update database schema
cd packages/database && npm run db:push
# Check logs
# Just watch Terminal 1 (dev server) and Terminal 2 (clerk CLI)
```
---
## Production Deployment Quick Steps
When you're ready to deploy:
1. **Clerk Dashboard:**
- Webhooks → Add Endpoint
- URL: `https://yourdomain.com/api/webhooks`
- Subscribe to: `user.created`, `user.updated`, `user.deleted`
- Copy signing secret
2. **Production Environment:**
```env
CLERK_WEBHOOK_SECRET=whsec_prod_xxxxxx
```
3. **Test:**
- Send test event from Clerk Dashboard
- Verify 200 response
- Check production database
---
## Support
- **Detailed Setup:** `CLERK_WEBHOOK_SETUP.md`
- **Testing Guide:** `WEBHOOK_TESTING_GUIDE.md`
- **Troubleshooting:** Both guides above + `TROUBLESHOOTING.md`
- **Clerk Docs:** https://clerk.com/docs/integrations/webhooks
---
**That's it! You're done.** 🎉
Webhooks are now syncing Clerk users to your database automatically.