UNPKG

@dotwee/node-red-raindrop

Version:

Node-RED nodes for interacting with the RainDrop.io web service.

84 lines (65 loc) 3.02 kB
module.exports = function (RED) { function RaindropCreateNode(config) { RED.nodes.createNode(this, config); this.config = RED.nodes.getNode(config.config); this.collectionId = config.collectionId; this.link = config.link; this.title = config.title; this.excerpt = config.excerpt; this.tags = config.tags; this.important = config.important; const node = this; node.on('input', async (msg, send, done) => { // For older versions of Node-RED compatibility send = send || function () { node.send.apply(node, arguments); }; done = done || function (error) { if (error) { node.error(error, msg); } }; try { if (!node.config) { throw new Error('Raindrop configuration is required'); } const client = node.config.getClient(); // Build raindrop data from node config and message const raindropData = { link: msg.link || msg.payload.link || node.link, collection: { $id: parseInt(msg.collectionId || msg.payload.collectionId || node.collectionId || 0) } }; // Optional fields if (msg.title || msg.payload.title || node.title) { raindropData.title = msg.title || msg.payload.title || node.title; } if (msg.excerpt || msg.payload.excerpt || node.excerpt) { raindropData.excerpt = msg.excerpt || msg.payload.excerpt || node.excerpt; } if (msg.tags || msg.payload.tags || node.tags) { const tags = msg.tags || msg.payload.tags || node.tags; raindropData.tags = Array.isArray(tags) ? tags : tags.split(',').map((t) => t.trim()); } if (msg.important !== undefined || msg.payload.important !== undefined || node.important !== undefined) { raindropData.important = msg.important !== undefined ? msg.important : (msg.payload.important !== undefined ? msg.payload.important : node.important); } // Additional fields from message payload if (msg.payload.cover) raindropData.cover = msg.payload.cover; if (msg.payload.note) raindropData.note = msg.payload.note; if (msg.payload.type) raindropData.type = msg.payload.type; if (msg.payload.media) raindropData.media = msg.payload.media; if (msg.payload.highlights) raindropData.highlights = msg.payload.highlights; node.status({ fill: 'blue', shape: 'dot', text: 'creating...' }); const response = await client.createRaindrop({ createRaindropRequest: raindropData }); node.status({ fill: 'green', shape: 'dot', text: 'created' }); msg.payload = response.data.item; msg.raindropId = response.data.item._id; send(msg); done(); } catch (error) { node.status({ fill: 'red', shape: 'ring', text: 'error' }); done(error); } }); node.on('close', () => { node.status({}); }); } RED.nodes.registerType('raindrop-create', RaindropCreateNode); };