feat(Redis Node): Add Redis Trigger node and publish operation to regular 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>
This commit is contained in:
Vitaliy Fratkin
2022-03-12 14:14:39 +03:00
committed by GitHub
parent 6065f6879c
commit 5c2deb4688
5 changed files with 215 additions and 2 deletions

View File

@@ -68,6 +68,11 @@ export class Redis implements INodeType {
value: 'set',
description: 'Set the value of a key in redis.',
},
{
name: 'Publish',
value: 'publish',
description: 'Publish message to redis channel.',
},
],
default: 'info',
description: 'The operation to perform.',
@@ -370,6 +375,42 @@ export class Redis implements INodeType {
default: 60,
description: 'Number of seconds before key expiration.',
},
// ----------------------------------
// publish
// ----------------------------------
{
displayName: 'Channel',
name: 'channel',
type: 'string',
displayOptions: {
show: {
operation: [
'publish',
],
},
},
default: '',
required: true,
description: 'Channel name.',
},
{
displayName: 'Data',
name: 'messageData',
type: 'string',
displayOptions: {
show: {
operation: [
'publish',
],
},
},
typeOptions: {
alwaysOpenEditWindow: true,
},
default: '',
required: true,
description: 'Data to publish.',
},
],
};
@@ -491,6 +532,7 @@ export class Redis implements INodeType {
const redisOptions: redis.ClientOpts = {
host: credentials.host as string,
port: credentials.port as number,
db: credentials.database as number,
};
if (credentials.password) {
@@ -516,7 +558,7 @@ export class Redis implements INodeType {
resolve(this.prepareOutputData([{ json: convertInfoToObject(result as unknown as string) }]));
client.quit();
} else if (['delete', 'get', 'keys', 'set', 'incr'].includes(operation)) {
} else if (['delete', 'get', 'keys', 'set', 'incr', 'publish'].includes(operation)) {
const items = this.getInputData();
const returnItems: INodeExecutionData[] = [];
@@ -587,6 +629,12 @@ export class Redis implements INodeType {
await clientExpire(keyIncr, ttl);
}
returnItems.push({json: {[keyIncr]: incrementVal}});
} else if (operation === 'publish'){
const channel = this.getNodeParameter('channel', itemIndex) as string;
const messageData = this.getNodeParameter('messageData', itemIndex) as string;
const clientPublish = util.promisify(client.publish).bind(client);
await clientPublish(channel, messageData);
returnItems.push(items[itemIndex]);
}
}