npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

node-flow-br

v1.0.5

Published

- [@brandliveco](https://bitbucket.org/summasolutions/dcos-tech-lib-nodejs/src/master/#readme)

Downloads

291

Readme

Client Node Flow

Authors

Arbol flujos de acción

Con esta libreria podemos hacer uso integraciones de tipo HTTP, procesamiento de datos, envios de correo, querys a bases de datos MYSQL, codificación y descodificación de Json Web Token, encryptación en MD5 y conexiones de SFTP.

Instalación

Instalar proyecto con npm

  npm i client-node-flow-br
  cd my-project

¿Que podemos hacer?

1. Consulta de acciones creadas
2. Consulta de los tipos de acción creadas
3. Entrada de datos a procesar por una fuente
4. Creación de nodos de acción
5. Creación de configuraciones generales
6. Creación de fuentes de acción

Variables del Sistema

| Nombre | Descripción | Ejemplo | | ----------------- | ------------------------------------------------------------------ | -------------------------- | | returnEmpty | Lo seteamos con true para retorna un objeto vacio dentro de la propiedad "scriptActionPrev" | "scriptActionPrev": "if(condition){returnEmpty=true;}" | | input | Son los parametros que son enviados desde el cuerpo de la peticion puede ser de tipo Array, Objeto | {"pararm": "body"} | | responsePrev | Es una varible que retorma una accion padre. El retorno puede ser de tipo Bool, String, Number, Object, Array | "scriptActionPrev": "console.log('responsePrev',responsePrev);" | | responseNow | Es la respuesta de una acción actual. | "scriptActionPost": "console.log('responseNow',responseNow)" | | returnAction | Esta opción la utilizamos cuando tenemos una acción de tipo action_type_process_data y es para es seteo de la respuesta final a esta procesamiento de informacion | "functionProcessData": "returnAction= {'myObject': 'procesed'} " | | errorHttp | Es el retorno de error de una ccion de tipo http. | "scriptActionPost": "console.log('errorHttp',errorHttp)" | | errorRDS | Es el retorno de error de una ccion de tipo RDS. | "scriptActionPost": "console.log('errorRDS',errorRDS)" | | errorSSH | Es el retorno de error de una ccion de tipo SSH. | "scriptActionPost": "console.log('errorSSH',errorSSH)" | | errorData | Es el retorno de error de una accion de tipo procesamiento de datos. | "scriptActionPost": "console.log('errorData',errorData)" | | errorEmail | Es el retorno de error de una accion de tipo email. | "scriptActionPost": "console.log('errorData',errorData)" | | $GLOBAL | Es un objeto donde almacenamos todas las respuestas de acciones anteriores. Para acciones de tipo http pordemos obtener las propiedades de los headers del response concatenando la palabra "_headers" enseguida del nombre de la acción. | "scriptActionPost": "console.log('Response name_nodo_action_1', $GLOBAL.name_nodo_action_1)" | | responseMessage | Es el mensaje que queremos que salga cuando arrojamos una respuesta sin seguir con el flujo. | "scriptActionPrev": "responseMessage= 'Error data';" | | responseCode | Es el codigo que queremos retornal del servidor cuando tenemos un error. | "scriptActionPrev": "responseCode= 403; responseMessage= {error:'Error data'};" |

Consulta de acciones creadas

Con este controlador podemos consultar las acciones que an sido creadas para todos los flujos de acción.

  const {ActionsController} = require('client-node-flow-br')
  
  // Consulta de todas las acciones creadas
  ActionsController.findAll((error,response)=>{
    if(error){
        console.log('error',error);
        return;
    }
    console.log('response',response);
  });

  // Eliminacion de una acción
  ActionsController.delete({params: {id:1}}, (error,response)=>{
    if(error){
        console.log('error',error);
        return;
    }
    console.log('response',response);
  });

Consulta de los tipos de acción creadas

Con este controlador podemos consultar todos los tipos de acciones, eliminación y actualización.

  const {ActionsTypesController} = require('client-node-flow-br')
  
  // Consulta de todas las tipos acciones creadas
  ActionsTypesController.findAll((error,response)=>{
    if(error){
        console.log('error',error);
        return;
    }
    console.log('response',response);
  });

  // Eliminación de un tipo acción
  ActionsTypesController.delete({params: {id:1}}, (error,response)=>{
    if(error){
        console.log('error',error);
        return;
    }
    console.log('response',response);
  });

  // Actualización de un tipo acción
  ActionsTypesController.update({params: {id:1}}, (error,response)=>{
    if(error){
        console.log('error',error);
        return;
    }
    console.log('response',response);
  });

Entrada de datos a procesar por una fuente

Aqui procesamos un flujo de acción y nos retorna la respuesta del flujo creado para esa fuente o integración. Esta es una de la funcionalidades de mayor utilidad porque es donde se hace el procesamiento de una fuente.

  const { InputsUpdatesController } = require('client-node-flow-br')
  
  /**
    * Estas son las variables requeridas para procesar una fuente
    * source_id (Int) --Requerido Es el id de la fuente ha procesar
    */
  let valuesNode={source_id:0, ...};

  InputsUpdatesController.insertInternal(valuesNode, (err, res) => {
      if (error) {
        console.log(error);
        return;
      }
      console.log(response);
  });

Creación de nodos de acción

Para la creació de un node de acción debemos tener presente que tenemos los siguientes tipos:

  • action_type_http_request: Usado para consumo de servicios API REST.
  • action_type_process_data: Usado para procesamiento de la data con el uso de lenguaje javascript.
  • action_type_emails: Usado para el envio de action_type_emails.
  • action_type_database_rds: Usado para conexión a bases de datos MYSQL y hacer querys.
  • action_type_jwt: Usado para la encriptacion y desencriptación.
  • action_type_md5: Usado para codificar un input en MD5.
  • action_type_ssh2: Usado para conexiones SFTP eliminado, creacion y actualizacion de archivos y directorios.

Cuando desamos asignar una acción a un node podemos hacerlo de la siguiente manera:

action_type_http_request

Con estas configuraciones podemos consumir servicios de tipo API REST por deferentes tipos de metodos como lo son GET, POST, PATCH, DELETE, PUT tenemos la livertad de poder asignar cabeceras y podremos consumir la mayoria de los endpoint. Podemos tener una facilidad de integración con sistemas que usen esta tecnologia en sus sistemas.

  const {NodesFlowsController} = require('client-node-flow-br') 
  
  NodesFlowsController.create({
    body:{
        "name": "nodo_name", // Nombre del nodo
        "label": "Nombre visual del nodo.", // Nombre visual del nodo
        "sourceName": "Name de la fuente creada", // Nombre de la fuente que va contener el grupo de nodos
        "actionNode": {
            "name":"action_name", // Nombre de la acción
            "scriptActionPrev": "", // script antes de ajecutar una acción.
            "scriptActionPost": "", // script despues de ejecutar una acción.
            "action_type": "action_type_http_request", // tipo de acción a ejecutar.
            "url": "http://desarrollo.co", // endpoint de la petición
            "method": "GET", // Metodo de la petición
            "body": "{}", // JSON string con el objeto del cuerpo de la petición.
            "headers": {} // Cabeceras a usar en el endpoint.
        }
    }
  }, (err, res) => {
      if (error) {
        console.log(error);
        return;
      }
      console.log(response);
  });

action_type_process_data

Con estas configuraciones podremos hacer un tratamiento de la nformación que nos retorna de un nodo o crear script para cumplir un objetivo especifico. Cuando ya tendagos lista nuesta respuesta usamos la variable returnAction el cual puede ser cualquier tipo de dato (Object, bool, String, Integer...), todo el proceso de logica lo manejamos en functionProcessData.

  const {NodesFlowsController} = require('client-node-flow-br') 
  
  NodesFlowsController.create({
    body:{
        "name": "nodo_name", // Nombre del nodo
        "label": "Nombre visual del nodo.", // Nombre visual del nodo
        "sourceName": "Name de la fuente creada", // Nombre de la fuente que va contener el grupo de nodos
        "actionNode": {
            "name":"action_name", // Nombre de la acción
            "scriptActionPrev": "", // script antes de ajecutar una acción.
            "scriptActionPost": "", // script despues de ejecutar una acción.
            "action_type": "action_type_process_data", // tipo de acción a ejecutar.
            "nameFuction": "name_function", // Nombre que identifica la funcion
            "functionProcessData": "returnAction= ('Hola mundo');" // Código javascript que hace la manipulación de la data y la retorna con la valirable rerurnAction.
        }
    }
  }, (err, res) => {
      if (error) {
        console.log(error);
        return;
      }
      console.log(response);
  });

action_type_emails

Con estas configuraciones podremos notificar via email a varios destinarios sobre alguna acción realizada y le pomemos definir la plantilla que vamos a enviar.

  const {NodesFlowsController} = require('client-node-flow-br') 
  
  NodesFlowsController.create({
    body:{
        "name": "nodo_name", // Nombre del nodo
        "label": "Nombre visual del nodo.", // Nombre visual del nodo
        "sourceName": "Name de la fuente creada", // Nombre de la fuente que va contener el grupo de nodos
        "actionNode": {
            "name":"action_name", // Nombre de la acción
            "scriptActionPrev": "", // script antes de ajecutar una acción.
            "scriptActionPost": "", // script despues de ejecutar una acción.
            "action_type": "action_type_emails", // tipo de acción a ejecutar.
            "subject": "Código de acceso", // Asunto del correo
            "template": "Hola {responsePrev.name}, <br> Este es tu código de acceso <h3><strong>{responsePrev.code}</strong></h3>", // Plantilla HTML para el cuerpo del email
            "nameTypeEmail": "Prueba Email", // nombre del envio de email en el sistema
            "listEmails": "['[email protected]',responsePrev.userInfo.email]", // Lista destinarios podemos definir variables de nodos anteriores. 
            "MAIL_HOST": "smtp.desarrollo.com",// host de conexión
            "MAIL_PORT": 2525, // Puerto de conexión
            "MAIL_USERNAME": "SMTP_user", // Usuario de conexión
            "MAIL_PASSWORD": "SMTP_pass", // Contraseña de conexión
            "MAIL_ENCRYPTION": "tls", // Tipo de encriptación
            "MAIL_FROM_NAME": "From Name", Nombre Remitente
            "MAIL_MAILER": "",
            "MAIL_FROM_ADDRESS": "[email protected]", // Centa de correo del remitente
            "emails": [] // Lista fija de correos a notificar
        }
    }
  }, (err, res) => {
      if (error) {
        console.log(error);
        return;
      }
      console.log(response);
  });

action_type_database_rds

Con estas configuraciones podremos realizar conexiones a base de datos Mysql para hacer querys.

  const {NodesFlowsController} = require('client-node-flow-br') 
  
  NodesFlowsController.create({
    body:{
        "name": "nodo_name", // Nombre del nodo
        "label": "Nombre visual del nodo.", // Nombre visual del nodo
        "sourceName": "Name de la fuente creada", // Nombre de la fuente que va contener el grupo de nodos
        "actionNode": {
            "name":"action_name", // Nombre de la acción
            "scriptActionPrev": "", // script antes de ajecutar una acción.
            "scriptActionPost": "", // script despues de ejecutar una acción.
            "action_type": "action_type_database_rds", // tipo de acción a ejecutar.
            "query": "select * from mitabla where id=?;", // Este es el query de la consulta a la base da datos
            "valuesQuey": "[1]", // Son los valores de query que fueron asignados en el condicional ? se ponen en el orden de los condicionales
            "DB_CONNECTION": "mysql", // Es el driver de conexion habilitado
            "DB_HOST": "mihost.com.co", // Es el host donde esta alojado nuestro motor de base de datos
            "DB_PORT": 3306, // Este es el puerto de conexion a la base de datos
            "DB_DATABASE": "mibasededatos", // Este es el nombre de la base de datos a utulizar
            "DB_USERNAME": "miusuario", // Es el nombre de usuario de conexion a la base de datos
            "DB_PASSWORD": "micontraseña" // Es la contraseña de conexion a la base de datos
        }
    }
  }, (err, res) => {
      if (error) {
        console.log(error);
        return;
      }
      console.log(response);
  });

action_type_jwt

Con estas configuraciones podremos realizar encriptaciones y dessincrectaciones de objetos para sesion Json Web Token.

  const {NodesFlowsController} = require('client-node-flow-br') 
  
  NodesFlowsController.create({
    body:{
        "name": "nodo_name", // Nombre del nodo
        "label": "Nombre visual del nodo.", // Nombre visual del nodo
        "sourceName": "Name de la fuente creada", // Nombre de la fuente que va contener el grupo de nodos
        "actionNode": {
            "name":"action_name", // Nombre de la acción
            "scriptActionPrev": "", // script antes de ajecutar una acción.
            "scriptActionPost": "", // script despues de ejecutar una acción.
            "action_type": "action_type_jwt", // tipo de acción a ejecutar.
            "secret": "secret", // Es la llave secreta de jwt
            "objectEncrypt": "{provider:desarrollo}", // Es un JSON.stringifi de un objeto ha encriptar
            "objectSettings": "{ algorithm: 'HS256', expiresIn: '1h' }", // Podemos asignar parametros de configuración
            "type": "sign" // Podemos deleccionar el tipo de acción encriptado o desencriptado sign|verify
        }
    }
  }, (err, res) => {
      if (error) {
        console.log(error);
        return;
      }
      console.log(response);
  });

action_type_md5

Con estas configuraciones podremos realizar encriptaciones en md5 de un string para una acción un input.

  const {NodesFlowsController} = require('client-node-flow-br') 
  
  NodesFlowsController.create({
    body:{
        "name": "nodo_name", // Nombre del nodo
        "label": "Nombre visual del nodo.", // Nombre visual del nodo
        "sourceName": "Name de la fuente creada", // Nombre de la fuente que va contener el grupo de nodos
        "actionNode": {
            "name":"action_name", // Nombre de la acción
            "scriptActionPrev": "", // script antes de ajecutar una acción.
            "scriptActionPost": "", // script despues de ejecutar una acción.
            "action_type": "action_type_md5", // Tipo de accion MD5
            "secret": "secret", // Es el string concatenador al valor de ingreso que va ser encriptado
            "value": "input.code" // Es el string que va ser encriptado tomamos valiable de entrada o respuestas de una accion o usamos codigo javascript el return debe ser un string.
        }
    }
  }, (err, res) => {
      if (error) {
        console.log(error);
        return;
      }
      console.log(response);
  });

action_type_ssh2

Con estas configuraciones podremos realizar conexiones a SFTP para realizar consultas de archivos de un direcctorio, mover archivos, eliminar, modificar o validar existentes.

  const {NodesFlowsController} = require('client-node-flow-br') 
  
  NodesFlowsController.create({
    body:{
        "name": "nodo_name", // Nombre del nodo
        "label": "Nombre visual del nodo.", // Nombre visual del nodo
        "sourceName": "Name de la fuente creada", // Nombre de la fuente que va contener el grupo de nodos
        "actionNode": {
            "name":"action_name", // Nombre de la acción
            "scriptActionPrev": "", // script antes de ajecutar una acción.
            "scriptActionPost": "", // script despues de ejecutar una acción.
            "action_type": "action_type_ssh2", // tipo de accion ss2 sftp
            "actionType": "readFile", // readFile|writeFile|appendFile|exists|rename|mkdir|rmdir|deleteFile|list|
            "objectConfig": "{host: 'myDomain', port: '22', username: 'userName', password: 'myPassword'}", // Son los parametros de conexion al servidor de SFTP
            "objectAction": "{path: '', pathFile: '/test/pending/'+responsePrev[0].filename, pathFileOld: '', pathFileNew: '', data: '', coding: 'utf8', opts:''}" // Es un JSON stringifi de los parametros de configuración para extraer o modificar un folder o archivo
        }
    }
  }, (err, res) => {
      if (error) {
        console.log(xerror);
        return;
      }
      console.log(response);
  });

Procesar un flijo de acción

Aqui procesamos un flujo de acción y nos retorna la respuesta del flujo creado para esa fuente o integración. Esta es una de la funcionalidades de mayor utilidad porque es donde se hace el procesamiento de una fuente.

  const { InputsUpdatesController } = require('client-node-flow-br')
  
  /**
    * Estas son las variables requeridas para procesar una fuente
    * source_id (Int) --Requerido Es el id de la fuente ha procesar
    */
  let valuesNode={source_id:0, ...};

  InputsUpdatesController.insertInternal(valuesNode, (err, res) => {
      if (error) {
        console.log(error);
        return;
      }
      console.log(response);
  });

Creación de fuentes de acción

Aqui procesamos un flujo de acción y nos retorna la respuesta del flujo creado para esa fuente o integración. Esta es una de la funcionalidades de mayor utilidad porque es donde se hace el procesamiento de una fuente.

  const { InputsUpdatesController } = require('client-node-flow-br')
  
  /**
    * Estas son las variables requeridas para procesar una fuente
    * source_id (Int) --Requerido Es el id de la fuente ha procesar
    */
  let valuesNode={source_id:0, ...};

  InputsUpdatesController.insertInternal(valuesNode, (err, res) => {
      if (error) {
        console.log(error);
        return;
      }
      console.log(response);
  });