dtamind-components
Version:
Apps integration for Dtamind. Contain Nodes and Credentials.
330 lines • 13.3 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const remove_markdown_1 = __importDefault(require("remove-markdown"));
class Condition_Agentflow {
constructor() {
this.label = 'Condition';
this.name = 'conditionAgentflow';
this.version = 1.0;
this.type = 'Condition';
this.category = 'Agent Flows';
this.description = `Split flows based on If Else conditions`;
this.baseClasses = [this.type];
this.color = '#FFB938';
this.inputs = [
{
label: 'Conditions',
name: 'conditions',
type: 'array',
description: 'Values to compare',
acceptVariable: true,
default: [
{
type: 'string',
value1: '',
operation: 'equal',
value2: ''
}
],
array: [
{
label: 'Type',
name: 'type',
type: 'options',
options: [
{
label: 'String',
name: 'string'
},
{
label: 'Number',
name: 'number'
},
{
label: 'Boolean',
name: 'boolean'
}
],
default: 'string'
},
/////////////////////////////////////// STRING ////////////////////////////////////////
{
label: 'Value 1',
name: 'value1',
type: 'string',
default: '',
description: 'First value to be compared with',
acceptVariable: true,
show: {
'conditions[$index].type': 'string'
}
},
{
label: 'Operation',
name: 'operation',
type: 'options',
options: [
{
label: 'Contains',
name: 'contains'
},
{
label: 'Ends With',
name: 'endsWith'
},
{
label: 'Equal',
name: 'equal'
},
{
label: 'Not Contains',
name: 'notContains'
},
{
label: 'Not Equal',
name: 'notEqual'
},
{
label: 'Regex',
name: 'regex'
},
{
label: 'Starts With',
name: 'startsWith'
},
{
label: 'Is Empty',
name: 'isEmpty'
},
{
label: 'Not Empty',
name: 'notEmpty'
}
],
default: 'equal',
description: 'Type of operation',
show: {
'conditions[$index].type': 'string'
}
},
{
label: 'Value 2',
name: 'value2',
type: 'string',
default: '',
description: 'Second value to be compared with',
acceptVariable: true,
show: {
'conditions[$index].type': 'string'
},
hide: {
'conditions[$index].operation': ['isEmpty', 'notEmpty']
}
},
/////////////////////////////////////// NUMBER ////////////////////////////////////////
{
label: 'Value 1',
name: 'value1',
type: 'number',
default: '',
description: 'First value to be compared with',
acceptVariable: true,
show: {
'conditions[$index].type': 'number'
}
},
{
label: 'Operation',
name: 'operation',
type: 'options',
options: [
{
label: 'Smaller',
name: 'smaller'
},
{
label: 'Smaller Equal',
name: 'smallerEqual'
},
{
label: 'Equal',
name: 'equal'
},
{
label: 'Not Equal',
name: 'notEqual'
},
{
label: 'Larger',
name: 'larger'
},
{
label: 'Larger Equal',
name: 'largerEqual'
},
{
label: 'Is Empty',
name: 'isEmpty'
},
{
label: 'Not Empty',
name: 'notEmpty'
}
],
default: 'equal',
description: 'Type of operation',
show: {
'conditions[$index].type': 'number'
}
},
{
label: 'Value 2',
name: 'value2',
type: 'number',
default: 0,
description: 'Second value to be compared with',
acceptVariable: true,
show: {
'conditions[$index].type': 'number'
}
},
/////////////////////////////////////// BOOLEAN ////////////////////////////////////////
{
label: 'Value 1',
name: 'value1',
type: 'boolean',
default: false,
description: 'First value to be compared with',
show: {
'conditions[$index].type': 'boolean'
}
},
{
label: 'Operation',
name: 'operation',
type: 'options',
options: [
{
label: 'Equal',
name: 'equal'
},
{
label: 'Not Equal',
name: 'notEqual'
}
],
default: 'equal',
description: 'Type of operation',
show: {
'conditions[$index].type': 'boolean'
}
},
{
label: 'Value 2',
name: 'value2',
type: 'boolean',
default: false,
description: 'Second value to be compared with',
show: {
'conditions[$index].type': 'boolean'
}
}
]
}
];
this.outputs = [
{
label: '0',
name: '0',
description: 'Condition 0'
},
{
label: '1',
name: '1',
description: 'Else'
}
];
}
async run(nodeData, _, options) {
const state = options.agentflowRuntime?.state;
const compareOperationFunctions = {
contains: (value1, value2) => (value1 || '').toString().includes((value2 || '').toString()),
notContains: (value1, value2) => !(value1 || '').toString().includes((value2 || '').toString()),
endsWith: (value1, value2) => value1.endsWith(value2),
equal: (value1, value2) => value1 === value2,
notEqual: (value1, value2) => value1 !== value2,
larger: (value1, value2) => (Number(value1) || 0) > (Number(value2) || 0),
largerEqual: (value1, value2) => (Number(value1) || 0) >= (Number(value2) || 0),
smaller: (value1, value2) => (Number(value1) || 0) < (Number(value2) || 0),
smallerEqual: (value1, value2) => (Number(value1) || 0) <= (Number(value2) || 0),
startsWith: (value1, value2) => value1.startsWith(value2),
isEmpty: (value1) => [undefined, null, ''].includes(value1),
notEmpty: (value1) => ![undefined, null, ''].includes(value1)
};
const _conditions = nodeData.inputs?.conditions;
const conditions = typeof _conditions === 'string' ? JSON.parse(_conditions) : _conditions;
const initialConditions = { ...conditions };
for (const condition of conditions) {
const _value1 = condition.value1;
const _value2 = condition.value2;
const operation = condition.operation;
let value1;
let value2;
switch (condition.type) {
case 'boolean':
value1 = _value1;
value2 = _value2;
break;
case 'number':
value1 = parseFloat(_value1) || 0;
value2 = parseFloat(_value2) || 0;
break;
default: // string
value1 = (0, remove_markdown_1.default)(_value1 || '');
value2 = (0, remove_markdown_1.default)(_value2 || '');
}
const compareOperationResult = compareOperationFunctions[operation](value1, value2);
if (compareOperationResult) {
// find the matching condition
const conditionIndex = conditions.findIndex((c) => JSON.stringify(c) === JSON.stringify(condition));
// add isFulfilled to the condition
if (conditionIndex > -1) {
conditions[conditionIndex] = { ...condition, isFulfilled: true };
}
break;
}
}
// If no condition is fullfilled, add isFulfilled to the ELSE condition
const dummyElseConditionData = {
type: 'string',
value1: '',
operation: 'equal',
value2: ''
};
if (!conditions.some((c) => c.isFulfilled)) {
conditions.push({
...dummyElseConditionData,
isFulfilled: true
});
}
else {
conditions.push({
...dummyElseConditionData,
isFulfilled: false
});
}
const returnOutput = {
id: nodeData.id,
name: this.name,
input: { conditions: initialConditions },
output: { conditions },
state
};
return returnOutput;
}
}
module.exports = { nodeClass: Condition_Agentflow };
//# sourceMappingURL=Condition.js.map