49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import {
|
|
loadVoiceWakeConfig,
|
|
setVoiceWakeTriggers,
|
|
} from "../../infra/voicewake.js";
|
|
import { ErrorCodes, errorShape } from "../protocol/index.js";
|
|
import { normalizeVoiceWakeTriggers } from "../server-utils.js";
|
|
import { formatForLog } from "../ws-log.js";
|
|
import type { GatewayRequestHandlers } from "./types.js";
|
|
|
|
export const voicewakeHandlers: GatewayRequestHandlers = {
|
|
"voicewake.get": async ({ respond }) => {
|
|
try {
|
|
const cfg = await loadVoiceWakeConfig();
|
|
respond(true, { triggers: cfg.triggers });
|
|
} catch (err) {
|
|
respond(
|
|
false,
|
|
undefined,
|
|
errorShape(ErrorCodes.UNAVAILABLE, formatForLog(err)),
|
|
);
|
|
}
|
|
},
|
|
"voicewake.set": async ({ params, respond, context }) => {
|
|
if (!Array.isArray(params.triggers)) {
|
|
respond(
|
|
false,
|
|
undefined,
|
|
errorShape(
|
|
ErrorCodes.INVALID_REQUEST,
|
|
"voicewake.set requires triggers: string[]",
|
|
),
|
|
);
|
|
return;
|
|
}
|
|
try {
|
|
const triggers = normalizeVoiceWakeTriggers(params.triggers);
|
|
const cfg = await setVoiceWakeTriggers(triggers);
|
|
context.broadcastVoiceWakeChanged(cfg.triggers);
|
|
respond(true, { triggers: cfg.triggers });
|
|
} catch (err) {
|
|
respond(
|
|
false,
|
|
undefined,
|
|
errorShape(ErrorCodes.UNAVAILABLE, formatForLog(err)),
|
|
);
|
|
}
|
|
},
|
|
};
|