'use strict'; const { getConfig, setError, setSuccess, clearStatus, pickMsgField } = require('../lib/utils'); const { convertTo } = require('../lib/collabora'); const { loadSourceBuffer } = require('../lib/bridge'); const { webdavGet } = require('../lib/webdav'); module.exports = function (RED) { function CollaboraConvertNode(config) { RED.nodes.createNode(this, config); const node = this; node.configNode = RED.nodes.getNode(config.config); node.operation = config.operation || 'convert'; node.format = config.format || 'pdf'; node.on('input', async (msg, send, done) => { send = send || function () { node.send.apply(node, arguments); }; done = done || function (err) { if (err) { node.error(err, msg); } }; clearStatus(node); try { const cfg = getConfig(node); const format = (pickMsgField(msg, 'format') || node.format).toLowerCase(); const source = await loadSourceBuffer(cfg, msg); const extraFields = []; if (msg.templateNcPath) { const tpl = await webdavGet(cfg, msg.templateNcPath); extraFields.push({ name: 'template', buffer: tpl.buffer, filename: tpl.filename }); } if (msg.compareNcPath) { const cmp = await webdavGet(cfg, msg.compareNcPath); extraFields.push({ name: 'compare', buffer: cmp.buffer, filename: cmp.filename }); } const result = await convertTo(cfg, { buffer: source.buffer, filename: source.filename, format, extraFields }); msg.payload = result.buffer; msg.format = format; msg.contentType = result.contentType; msg.statusCode = result.statusCode; msg.filename = source.filename; setSuccess(node, msg, `convert → ${format}`); send(msg); done(); } catch (err) { setError(node, msg, err); send(msg); done(err); } }); } RED.nodes.registerType('collabora-convert', CollaboraConvertNode); };