Auth and Parameters
Handle user authentication and custom parameters in your voice server for secure and personalized conversations.
Basic Parameter Handling
Use waitForParams
to receive and validate client parameters:
import { MicdropServer, waitForParams, handleError } from '@micdrop/server'
import { z } from 'zod'
// Define parameter schema
const paramsSchema = z.object({
language: z.string().oneOf(['en', 'fr']).default('en'),
})
wss.on('connection', async (socket) => {
try {
// Wait for parameters from client
const params = await waitForParams(socket, paramsSchema.parse)
console.log('Client params:', params)
// Use parameters to configure agent
const agent = new OpenaiAgent({
apiKey: process.env.OPENAI_API_KEY,
systemPrompt: `Respond in ${params.language} language`,
})
// Setup STT and TTS [...]
// Start MicdropServer
new MicdropServer(socket, { agent, stt, tss })
} catch (error) {
handleError(socket, error)
}
})
Authentication Examples
JWT Token Validation
import {
MicdropServer,
MicdropError,
MicdropErrorCode,
waitForParams,
handleError,
} from '@micdrop/server'
import jwt from 'jsonwebtoken'
import { z } from 'zod'
async function validateJWT(token: string) {
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET)
return { isValid: true, user: decoded }
} catch (error) {
return { isValid: false, error: error.message }
}
}
const paramsSchema = z.object({
authorization: z.string().startsWith('Bearer '),
})
wss.on('connection', async (socket) => {
try {
const params = await waitForParams(socket, paramsSchema.parse)
// Validate JWT token
const token = params.authorization.replace('Bearer ', '')
const auth = await validateJWT(token)
if (!auth.isValid) {
throw new MicdropError(MicdropErrorCode.Unauthorized, 'Invalid JWT token')
}
// Use authenticated user data
console.log('Authenticated user:', auth.user)
// Setup AI components [..]
// Start MicdropServer
new MicdropServer(socket, { agent, stt, tts })
} catch (error) {
handleError(socket, error)
}
})
API Key Authentication
import {
MicdropServer,
MicdropError,
MicdropErrorCode,
waitForParams,
handleError,
} from '@micdrop/server'
import { z } from 'zod'
const validApiKeys = new Set([process.env.API_KEY_1, process.env.API_KEY_2])
const paramsSchema = z.object({
apiKey: z.string(),
})
wss.on('connection', async (socket) => {
try {
const params = await waitForParams(socket, paramsSchema.parse)
// Validate API key
if (!validApiKeys.has(params.apiKey)) {
throw new MicdropError(MicdropErrorCode.Unauthorized, 'Invalid API key')
}
// Setup AI components [..]
// Start MicdropServer
new MicdropServer(socket, { agent, stt, tts })
} catch (error) {
handleError(socket, error)
}
})