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 schemaconst 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) }})