webhook-validators
Nuxt Webhook Validators
A simple nuxt module that works on the edge to easily validate incoming webhooks from different services.
Features
- 8 Webhook validators
- Works on the edge
- Exposed Server utils
Requirements
This module only works with a Nuxt server running as it uses server API routes (nuxt build
).
This means that you cannot use this module with nuxt generate
.
Quick Setup
- Add nuxt-webhook-validators in your Nuxt project
pnpm add nuxt-webhook-validators
- Add the module in your
nuxt.config.ts
export default defineNuxtConfig({
modules: [
'nuxt-webhook-validators'
],
})
Server utils
The validator helpers are auto-imported in your server/
directory.
Webhook Validators
All validator helpers are exposed globally and can be used in your server API routes.
The helpers return a boolean value indicating if the webhook request is valid or not.
The config can be defined directly from the runtimeConfig
in your nuxt.config.ts
:
export default defineNuxtConfig({
runtimeConfig: {
webhook: {
<provider>: {
<requiredProps>: '',
}
}
}
})
It can also be set using environment variables:
NUXT_WEBHOOK_<PROVIDER>_<REQUIRED_PROPERTY> = ""
Go to playground/.env.example or playground/nuxt.config.ts to see a list of all the available properties needed for each provider.
Supported webhook validators:
- Discord
- GitHub
- Heroku
- NuxtHub
- Paddle
- PayPal
- Stripe
- Twitch
You can add your favorite webhook validator by creating a new file in src/runtime/server/lib/validators/
Example
Validate a Paddle webhook in a server API route.
~/server/api/webhooks/paddle.post.ts
export default defineEventHandler(async (event) => {
const isValidWebhook = await isValidPaddleWebhook(event)
if (!isValidWebhook) {
throw createError({ statusCode: 401, message: 'Unauthorized: webhook is not valid' })
}
// Some logic...
return { isValidWebhook }
})
Development
# Install dependencies
npm install
# Generate type stubs
npm run dev:prepare
# Develop with the playground
npm run dev
# Build the playground
npm run dev:build
# Run ESLint
npm run lint
# Run Vitest
npm run test
npm run test:watch
# Run typecheck
npm run test:types
# Release new version
npm run release