OSVauco/opax-web/backend/socketHandlers.js

41 lines
1.5 KiB
JavaScript

// FORSLAG TIL opax-web/backend/socketHandlers.js (ENDELIG KORRIGERT)
const SAFE_ACTIONS = {};
/**
* Registrerer sikre, nettleser-eksponerte Socket.IO-handlere.
* @param {import('socket.io').Socket} socket - Den tilkoblede socketen.
* @param {{callAgentFn: function}} dependencies - Injisert avhengighet for å kalle MCP.
*/
export function registerBrowserSocketHandlers(socket, { callAgentFn }) {
// Avvis den gamle, usikre mcp-call-handleren
socket.on('mcp-call', (payload) => {
const safeId = (payload && typeof payload.id === 'string' && payload.id.length <= 128) ? payload.id : null;
socket.emit('mcp-result', {
id: safeId,
error: 'Denne funksjonen er ikke tilgjengelig.',
});
});
// Registrer de nye, sikre handlerne
for (const eventName in SAFE_ACTIONS) {
const config = SAFE_ACTIONS[eventName];
socket.on(eventName, async () => {
if (!socket.request.session?.user) {
return socket.emit(`${config.responseEvent}:error`, { message: 'Du må være logget inn.' });
}
try {
const result = await callAgentFn(config.tool, {});
const normalizedData = config.normalize(result);
socket.emit(`${config.responseEvent}:result`, { data: normalizedData });
} catch (e) {
console.error(`[Socket Handler Error] Event: ${eventName}, User: ${socket.request.session.user.email}, Error:`, e);
// e.message logges ikke eller sendes til klienten.
socket.emit(`${config.responseEvent}:error`, { message: config.errorMessage });
}
});
}
}