-
Notifications
You must be signed in to change notification settings - Fork 10.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(Redis Node): Add Redis Trigger node and publish operation to reg…
…ular node * add database number select to redis credentials * add publish to channel to redis node * add redis trigger * ⚡ small fixes * ⚡ small fixes for trigger node * fix(Strapi Node): Add support for Strapi v4 * 🐛 Fix get all operation for v4 * 🔨 Fix create operation * 🔨 Fix update operation * 🔨 Fix delete operation * 🔨 Fix get operation * 🔨 Fix Return All * 👕 Fix nodelinter issues * ⚡ Add Credential Test * 🔨 Code improvement * 👕 Fix lint issue * Removed extra /api from Get All on v4 Co-authored-by: Jan Oberhauser <jan.oberhauser@gmail.com> Co-authored-by: Jonathan Bennetts <jonathan.bennetts@gmail.com> * refactor(editor): Replace 'Workflows' help menu item with 'Course' * N8N-3110 Replace Workflows help menu item with course * N8N-3110 Re-order props in en.json * N8N-3110 Update URL Link for courses * 🐛 Fix issue with messages being sent twice * ⚡ Remove not needed return Co-authored-by: Michael Kret <michael.k@radency.com> Co-authored-by: Harshil Agrawal <ghagrawal17@gmail.com> Co-authored-by: Jan Oberhauser <jan.oberhauser@gmail.com> Co-authored-by: Jonathan Bennetts <jonathan.bennetts@gmail.com> Co-authored-by: Oliver Trajceski <olivertrajceski@yahoo.com>
- Loading branch information
1 parent
6065f68
commit 5c2deb4
Showing
5 changed files
with
215 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
{ | ||
"node": "n8n-nodes-base.redisTrigger", | ||
"nodeVersion": "1.0", | ||
"codexVersion": "1.0", | ||
"categories": [ | ||
"Communication", | ||
"Development" | ||
], | ||
"resources": { | ||
"credentialDocumentation": [ | ||
{ | ||
"url": "https://docs.n8n.io/credentials/redis" | ||
} | ||
], | ||
"primaryDocumentation": [ | ||
{ | ||
"url": "https://docs.n8n.io/nodes/n8n-nodes-base.redisTrigger/" | ||
} | ||
] | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,143 @@ | ||
import { | ||
ITriggerFunctions, | ||
} from 'n8n-core'; | ||
|
||
import { | ||
IDataObject, | ||
INodeType, | ||
INodeTypeDescription, | ||
ITriggerResponse, | ||
NodeOperationError, | ||
} from 'n8n-workflow'; | ||
|
||
import * as redis from 'redis'; | ||
|
||
export class RedisTrigger implements INodeType { | ||
description: INodeTypeDescription = { | ||
displayName: 'Redis Trigger', | ||
name: 'redisTrigger', | ||
icon: 'file:redis.svg', | ||
group: ['trigger'], | ||
version: 1, | ||
description: 'Subscribe to redis channel', | ||
defaults: { | ||
name: 'Redis Trigger', | ||
}, | ||
inputs: [], | ||
outputs: ['main'], | ||
credentials: [ | ||
{ | ||
name: 'redis', | ||
required: true, | ||
}, | ||
], | ||
properties: [ | ||
{ | ||
displayName: 'Channels', | ||
name: 'channels', | ||
type: 'string', | ||
default: '', | ||
required: true, | ||
description: `Channels to subscribe to, multiple channels be defined with comma. Wildcard character(*) is supported`, | ||
}, | ||
{ | ||
displayName: 'Options', | ||
name: 'options', | ||
type: 'collection', | ||
placeholder: 'Add Option', | ||
default: {}, | ||
options: [ | ||
{ | ||
displayName: 'JSON Parse Body', | ||
name: 'jsonParseBody', | ||
type: 'boolean', | ||
default: false, | ||
description: 'Try to parse the message to an object', | ||
}, | ||
{ | ||
displayName: 'Only Message', | ||
name: 'onlyMessage', | ||
type: 'boolean', | ||
default: false, | ||
description: 'Returns only the message property', | ||
}, | ||
], | ||
}, | ||
], | ||
}; | ||
|
||
async trigger(this: ITriggerFunctions): Promise<ITriggerResponse> { | ||
|
||
const credentials = await this.getCredentials('redis'); | ||
|
||
if (credentials === undefined) { | ||
throw new NodeOperationError(this.getNode(), 'No credentials got returned!'); | ||
} | ||
|
||
const redisOptions: redis.ClientOpts = { | ||
host: credentials.host as string, | ||
port: credentials.port as number, | ||
db: credentials.database as number, | ||
}; | ||
|
||
if (credentials.password) { | ||
redisOptions.password = credentials.password as string; | ||
} | ||
|
||
|
||
const channels = (this.getNodeParameter('channels') as string).split(','); | ||
|
||
const options = this.getNodeParameter('options') as IDataObject; | ||
|
||
if (!channels) { | ||
throw new NodeOperationError(this.getNode(), 'Channels are mandatory!'); | ||
} | ||
|
||
const client = redis.createClient(redisOptions); | ||
|
||
const self = this; | ||
|
||
async function manualTriggerFunction() { | ||
await new Promise((resolve, reject) => { | ||
client.on('connect', () => { | ||
for (const channel of channels) { | ||
client.psubscribe(channel); | ||
} | ||
client.on('pmessage', (pattern: string, channel: string, message: string) => { | ||
if (options.jsonParseBody) { | ||
try { | ||
message = JSON.parse(message); | ||
} catch (error) { } | ||
} | ||
|
||
if (options.onlyMessage) { | ||
self.emit([self.helpers.returnJsonArray({message})]); | ||
resolve(true); | ||
return; | ||
} | ||
|
||
self.emit([self.helpers.returnJsonArray({channel, message})]); | ||
resolve(true); | ||
}); | ||
}); | ||
|
||
client.on('error', (error) => { | ||
reject(error); | ||
}); | ||
}); | ||
} | ||
|
||
if (this.getMode() === 'trigger') { | ||
manualTriggerFunction(); | ||
} | ||
|
||
async function closeFunction() { | ||
client.quit(); | ||
} | ||
|
||
return { | ||
closeFunction, | ||
manualTriggerFunction, | ||
}; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters