diff --git a/src/commands/handlers.js b/src/commands/handlers.js index c82fa04..81481c7 100644 --- a/src/commands/handlers.js +++ b/src/commands/handlers.js @@ -9,6 +9,16 @@ function _logger(source, ctx) { return ctx?.logger || source?.logger || null; } +// Resolve the command origin (control authority: parent | GUI | fysical). +// The shared commandRegistry stamps msg.origin (default 'parent'); legacy flows +// carried it as payload.source. Prefer the legacy field when present so existing +// flows keep working, otherwise use the registry-stamped msg.origin. +function _origin(msg) { + const p = msg && msg.payload; + if (p && typeof p === 'object' && typeof p.source === 'string' && p.source) return p.source; + return (typeof msg?.origin === 'string' && msg.origin) ? msg.origin : 'parent'; +} + exports.setMode = (source, msg) => { source.setMode(msg.payload); }; @@ -31,25 +41,18 @@ exports.registerChild = (source, msg, ctx) => { }; exports.execSequence = async (source, msg) => { - const { source: seqSource, action: seqAction, parameter } = msg.payload || {}; - await source.handleInput(seqSource, seqAction, parameter); + const { action: seqAction, parameter } = msg.payload || {}; + await source.handleInput(_origin(msg), seqAction, parameter); }; exports.totalFlowChange = async (source, msg) => { const payload = msg.payload || {}; - if (payload && typeof payload === 'object' && Object.prototype.hasOwnProperty.call(payload, 'source')) { - const src = payload.source || 'parent'; - const action = payload.action || 'totalFlowChange'; - await source.handleInput(src, action, payload); - return; - } - await source.handleInput('parent', 'totalFlowChange', payload); + const action = payload.action || 'totalFlowChange'; + await source.handleInput(_origin(msg), action, payload); }; exports.emergencyStop = async (source, msg) => { - const payload = msg.payload || {}; - const src = payload.source || 'parent'; - await source.handleInput(src, 'emergencystop'); + await source.handleInput(_origin(msg), 'emergencystop'); }; exports.setReconcileInterval = (source, msg) => {