62 lines
1.6 KiB
JavaScript
62 lines
1.6 KiB
JavaScript
function asyncEvaluateNodeProperty (RED, value, type, node, msg) {
|
|
return new Promise(function (resolve, reject) {
|
|
RED.util.evaluateNodeProperty(value, type, node, msg, function (e, r) {
|
|
if (e) {
|
|
reject(e)
|
|
} else {
|
|
resolve(r)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
async function appendTopic (RED, config, wNode, msg) {
|
|
// populate topic if the node specifies one
|
|
if (config.topic || config.topicType) {
|
|
try {
|
|
msg.topic = await asyncEvaluateNodeProperty(RED, config.topic, config.topicType || 'str', wNode, msg) || ''
|
|
} catch (_err) {
|
|
// do nothing
|
|
console.error(_err)
|
|
}
|
|
}
|
|
|
|
// ensure we have a topic property in the msg, even if it's an empty string
|
|
if (!('topic' in msg)) {
|
|
msg.topic = ''
|
|
}
|
|
|
|
return msg
|
|
}
|
|
|
|
/**
|
|
* Adds socket/client data to a msg payload, if enabled
|
|
*
|
|
*/
|
|
function addConnectionCredentials (RED, msg, conn, config) {
|
|
if (config.includeClientData) {
|
|
if (!msg._client) {
|
|
msg._client = {}
|
|
}
|
|
RED.plugins.getByType('node-red-dashboard-2').forEach(plugin => {
|
|
if (plugin.hooks?.onAddConnectionCredentials && msg) {
|
|
msg = plugin.hooks.onAddConnectionCredentials(conn, msg)
|
|
}
|
|
})
|
|
msg._client = {
|
|
...msg._client,
|
|
...{
|
|
socketId: conn.id,
|
|
socketIp: conn.handshake?.address
|
|
}
|
|
}
|
|
}
|
|
return msg
|
|
}
|
|
|
|
module.exports = {
|
|
asyncEvaluateNodeProperty,
|
|
appendTopic,
|
|
addConnectionCredentials
|
|
}
|