diff --git a/packages/server/src/plugins/voice-mode.ts b/packages/server/src/plugins/voice-mode.ts index 3e2f8cb5..66aff903 100644 --- a/packages/server/src/plugins/voice-mode.ts +++ b/packages/server/src/plugins/voice-mode.ts @@ -19,13 +19,13 @@ export class VoiceModeManager { }) } - setEnabled(instanceId: string, connection: ClientConnectionRef, enabled: boolean): void { + setEnabled(instanceId: string, connection: ClientConnectionRef, enabled: boolean): boolean { if (enabled && !this.options.connections.isConnected(connection)) { this.options.logger.debug( { instanceId, clientId: connection.clientId, connectionId: connection.connectionId }, "Ignoring voice mode enable for disconnected client connection", ) - return + return false } const key = getConnectionKey(connection) @@ -44,6 +44,7 @@ export class VoiceModeManager { this.options.logger.debug({ instanceId, clientId: connection.clientId, connectionId: connection.connectionId, enabled }, "Voice mode updated for client connection") this.publishIfChanged(instanceId) + return true } syncInstance(instanceId: string): void { diff --git a/packages/server/src/server/routes/plugin.ts b/packages/server/src/server/routes/plugin.ts index daa7630e..aef57007 100644 --- a/packages/server/src/server/routes/plugin.ts +++ b/packages/server/src/server/routes/plugin.ts @@ -66,11 +66,17 @@ export function registerPluginRoutes(app: FastifyInstance, deps: RouteDeps) { } const payload = VoiceModeStateSchema.parse(request.body ?? {}) - deps.voiceModeManager.setEnabled( + const applied = deps.voiceModeManager.setEnabled( request.params.id, { clientId: payload.clientId, connectionId: payload.connectionId }, payload.enabled, ) + + if (payload.enabled && !applied) { + reply.code(409).send({ error: "Client connection not active for voice mode enable" }) + return + } + return { enabled: payload.enabled } })