UNPKG

@dotwee/node-red-raindrop

Version:

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

104 lines (82 loc) 3.17 kB
module.exports = function (RED) { function TagsManageNode(config) { RED.nodes.createNode(this, config); this.config = RED.nodes.getNode(config.config); this.collectionId = config.collectionId; this.operation = config.operation; this.tags = config.tags; this.replaceName = config.replaceName; 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(); // Get parameters from node config or message const collectionId = parseInt(node.collectionId || msg.collectionId || msg.payload.collectionId || 0); const operation = node.operation || msg.operation || msg.payload.operation; let tags = node.tags || msg.tags || msg.payload.tags; const replaceName = node.replaceName || msg.replaceName || msg.payload.replaceName; if (!operation) { throw new Error('Operation is required (rename, merge, delete)'); } if (!tags) { throw new Error('Tags are required'); } // Convert tags to array if it's a string if (typeof tags === 'string') { tags = tags.split(',').map((t) => t.trim()).filter((t) => t.length > 0); } if (!Array.isArray(tags) || tags.length === 0) { throw new Error('Tags must be a non-empty array or comma-separated string'); } node.status({ fill: 'blue', shape: 'dot', text: `${operation}...` }); let response; switch (operation.toLowerCase()) { case 'rename': case 'merge': if (!replaceName) { throw new Error('Replace name is required for rename/merge operations'); } response = await client.renameOrMergeTags({ collectionId, renameOrMergeTagsRequest: { replace: replaceName, tags } }); break; case 'delete': response = await client.removeTagsFromCollection({ collectionId, removeTagsFromCollectionRequest: { tags } }); break; default: throw new Error('Invalid operation. Use: rename, merge, or delete'); } node.status({ fill: 'green', shape: 'dot', text: `${operation} completed` }); msg.payload = response.data; msg.operation = operation; msg.tags = tags; msg.replaceName = replaceName; msg.collectionId = collectionId; send(msg); done(); } catch (error) { node.status({ fill: 'red', shape: 'ring', text: 'error' }); done(error); } }); node.on('close', () => { node.status({}); }); } RED.nodes.registerType('tags-manage', TagsManageNode); };