@telepilotco/n8n-nodes-kv-storage
Version:
Key-Value Storage Node for n8n supporting different scopes
134 lines • 5.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.KvStorageTrigger = void 0;
const KvStorageService_1 = require("./KvStorageService");
const typedi_1 = require("typedi");
const debug = require('debug')('kv-storage');
class KvStorageTrigger {
constructor() {
this.description = {
displayName: 'Key-Value Storage Trigger',
name: 'kvStorageTrigger',
icon: 'file:KvStorage.svg',
group: ['trigger'],
version: 1,
description: 'Key-Value Storage change listener',
defaults: {
name: 'KVStorage Trigger',
},
inputs: [],
outputs: ['main'],
credentials: [],
properties: [
{
displayName: 'Scope',
name: 'scope',
type: 'options',
required: true,
options: [
{
name: 'ALL Scopes',
value: KvStorageService_1.Scope.ALL,
},
{
name: 'Execution Scope',
value: KvStorageService_1.Scope.EXECUTION,
},
{
name: 'Workflow Scope',
value: KvStorageService_1.Scope.WORKFLOW,
},
{
name: 'Instance Scope',
value: KvStorageService_1.Scope.INSTANCE,
},
],
default: 'WORKFLOW',
},
{
displayName: 'EventType',
name: 'eventType',
type: 'multiOptions',
default: [KvStorageService_1.EventType.ANY],
required: true,
options: [
{
name: 'ANY',
value: KvStorageService_1.EventType.ANY,
},
{
name: 'Added',
value: KvStorageService_1.EventType.ADDED,
},
{
name: 'Updated',
value: KvStorageService_1.EventType.UPDATED,
},
{
name: 'Deleted',
value: KvStorageService_1.EventType.DELETED,
},
],
description: 'Specify which operations you would like to receive',
},
{
displayName: 'Specifier',
name: 'specifier',
type: 'string',
default: '',
required: true,
placeholder: '41,42,43,102',
displayOptions: {
show: {
scope: [KvStorageService_1.Scope.WORKFLOW],
},
},
description: 'Comma-separated list of Workflow IDs',
},
],
};
}
async trigger() {
const service = typedi_1.Container.get(KvStorageService_1.KvStorageService);
const scopeVar = this.getNodeParameter('scope', 0);
const specifier = this.getNodeParameter('specifier', 0);
const eventTypes = this.getNodeParameter('eventType', [KvStorageService_1.EventType.ANY]);
const scope = KvStorageService_1.Scope[scopeVar];
const _listener = (a) => {
if (eventTypes.includes(a['eventType']) || eventTypes.includes(KvStorageService_1.EventType.ANY)) {
_emit(a);
}
};
service.addListener(scope, specifier, _listener);
async function closeFunction() {
debug('closeFunction');
service.removeListener(scope, specifier, _listener);
}
const _emit = (data) => {
this.emit([this.helpers.returnJsonArray([data])]);
};
const manualTriggerFunction = async () => {
await new Promise((resolve, reject) => {
const timeoutHandler = setTimeout(() => {
reject(new Error('Aborted, no message received within 30secs. This 30sec timeout is only set for "manually triggered execution". Active Workflows will listen indefinitely.'));
}, 30000);
const _listener2 = (a) => {
if (eventTypes.includes(a['eventType']) || eventTypes.includes(KvStorageService_1.EventType.ANY)) {
_emit(a);
clearTimeout(timeoutHandler);
service.removeListener(scope, specifier, _listener2);
resolve(true);
}
};
service.addListener(scope, specifier, _listener2);
});
};
return {
closeFunction,
manualTriggerFunction,
};
}
}
exports.KvStorageTrigger = KvStorageTrigger;
exports.KvStorageTrigger = KvStorageTrigger;
//# sourceMappingURL=KvStorageTrigger.node.js.map