@vettly/supabase
v0.1.1
Published
Vettly decision infrastructure for Supabase Edge Functions. Deno-compatible, fetch-based client.
Maintainers
Readme
@vettly/supabase
Vettly decision infrastructure for Supabase Edge Functions. Deno-compatible client with fetch-based transport for serverless environments.
Installation
npm install @vettly/supabaseOr import directly in Deno:
import { moderate } from 'npm:@vettly/supabase'Quick Start
One-liner Edge Function
import { createModerationHandler } from '@vettly/supabase'
Deno.serve(createModerationHandler({
policyId: 'default',
onBlock: (result) => new Response(JSON.stringify({
error: 'Content blocked',
categories: result.categories
}), { status: 403 })
}))Manual Integration
import { createClient } from '@vettly/supabase'
const vettly = createClient({
apiKey: Deno.env.get('VETTLY_API_KEY')!
})
Deno.serve(async (req) => {
const { content } = await req.json()
const result = await vettly.check(content, {
policyId: 'community-safe'
})
if (result.action === 'block') {
return new Response('Content blocked', { status: 403 })
}
return new Response('OK')
})API
createClient(config)
Create a configured Vettly client.
const client = createClient({
apiKey: 'sk_live_...',
apiUrl: 'https://api.vettly.dev' // optional
})
// Check text
const result = await client.check('user content', { policyId: 'default' })
// Check image
const result = await client.checkImage('https://...', { policyId: 'strict' })moderate(content, options)
Quick moderation without creating a client (uses VETTLY_API_KEY env var).
import { moderate } from '@vettly/supabase'
const result = await moderate('user content', { policyId: 'default' })createModerationHandler(config)
Create an Edge Function handler that automatically moderates incoming requests.
import { createModerationHandler } from '@vettly/supabase/edge'
export default createModerationHandler({
policyId: 'community-safe',
field: 'content', // JSON field to moderate
onBlock: (result) => new Response('Blocked', { status: 403 }),
onAllow: (req, result) => {
// Continue processing
}
})withModeration(handler, config)
Wrap an existing Edge Function with moderation.
import { withModeration } from '@vettly/supabase/edge'
const handler = async (req: Request) => {
// Your logic here
return new Response('OK')
}
export default withModeration(handler, {
policyId: 'default',
field: 'body'
})Response Format
interface ModerationResult {
decisionId: string
safe: boolean
flagged: boolean
action: 'allow' | 'warn' | 'flag' | 'block'
categories: Array<{
category: string
score: number
triggered: boolean
}>
latency: number
}Environment Variables
Set in your Supabase project settings:
VETTLY_API_KEY- Your Vettly API key (required)
Links
- vettly.dev - Sign up
- docs.vettly.dev - Documentation
- Supabase Edge Functions - Supabase docs
