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

bidireccionalgmailcontacts-celerex

v1.7.4

Published

## Acerca De

Downloads

86

Readme

Bidireccional Library (GMAIL CONTACTS)

Acerca De

La libreria fue creada con el proposito de tener un codigo mantenible para un futuro, dentro estan las funciones para:

  1. RefreshAllGmailTokens
  2. RefreshSingleGmailToken
  3. RefreshZohoToken
  4. BidireccionalGmailContacts

La explicacion de este proyecto esta dividida en varias partes para su compresion.

Objetos

  1. auth

Objeto que contiene infomacion importante de cada usuario, todo lo esencial que involucra a un cliente esta aqui

{
  token: String,
  refreshToken: String,
  type: String,
  email: String,
  loginUserUsuario: String,
  pendingConnections: Number,
  clientIdProjectGoogle: String,
  clientSecretGoogleProject: String,
  isActive:Boolean
}
token: Token de gmail que contiene los permisos necesarios para manipular los contactos, vence en 50 Minutos

refreshToken: Token el cual nos permite actualizar el token, este no tiene vencimiento

type: Puede tener 3 valores GMAIL,zoho o "OUTLOOK", para esta libreria solo nos interesa los tipo "GMAIL" y "zoho"

email: correo electronico en el cual los contactos son guardados

loginUserUsuario: loginUserUsuario proveniente de zoho, este es usado para saber a que usuario en el CRM le pertenece el contacto

pendingConnections: Numero de contactos que estan en la cola

clientIdProjectGoogle:Proyecto de Google al cual el contacto pertenece

clientSecretGoogleProject: Secret de google al cual el usuario pertenece.

isActive: Bandera que sirve para ignorar al usuario temporalmente

Como Funciona

  1. RefreshAllGmailTokens (workflowRefreshAccessTokensGmail)

    Esta funcion es la que se debe llamar cada vez que se quiera hacer una actualizacion de los token de los usuarios en la tabla auth con valor "GMAIL" en la key "type".

    Steps:

    1. obtener de la base de datos los usuarios a actualizar el token

    2. Por cada usuario hace una peticion al api de google de refresh token.

    3. si todo salio correcto el nuevo token es replazado por el viejo y se guarda en la base de datos

    4. En caso de Error se enviara a la tabla de logs de la base de datos y se mandara un correo electronico

    Cosideracciones:

    No se puede hacer un numero indefinido de peticiones a la api, por lo cul debe limitarse las peticiones, o mandar peticiones por trozos.

  2. RefreshSingleGmailToken(refreshSingleUserGoogleToken)

    Esta funcion Fue creada a fin de que cuando el refresh token de 1-X usuarios falla, para que en lugar de ejecutar una actualizacion masiva de tokens de usuarios que no lo necesitan se haga unade manera selectiva. Cada destacar que si fallan muchos regresh lo mejor es correr la funcion anterior

    Steps:

    1. Encontrar por Id de la BD el usuario al que se le hara la actualizacion

    2. Hacer la peticion a la Api de Google para refreshToken

    3. Guardar el nuevo token en la base de datos en el registro del usuario

    4. En caso de Error se enviara a la tabla de logs de la base de datos y se mandara un correo electronico

    Cosideracciones:

    No se puede hacer un numero indefinido de peticiones a la api, por lo cul debe limitarse las peticiones, o mandar peticiones por trozos.

  3. RefreshZohoToken(workFlowRefreshZohoToken)

    Esta Funcion tiene la reponsabilidad de actualizar el token se zoho el que brinda todos lo permisos para poder insertar registros por medio de la API

    Steps:

    1. Se saca de la base de datos de la tabla auth el registro que tiene "type" : "zoho"

    2. con el refresh token se hace una peticion a endpoint de zoho para actualizar

    3. guardamos el nuevo token en la base de datos del registro de zoho

  4. BidireccionalGmailContacts(startWorkFlow)

    Esta funcion es la de mayor peso, la encargada de hacer la conexion biidreccional entre GMAIL y ZOHO CREATOR, se compone de varios pasos y sub funciones asi como de varias tecnologias.

    1. Tecnologias

      • GMAIL CONTACTS API
      • PIPEDREAM
      • AWS LAMBDA
      • MONGODB
      • ZOHO CREATOR API
    2. Diagrama

    3. Steps(Simplificado)

      1. sacar de la base de datos de la tabla auth usuarios con "type" : "GMAIL"
      2. hacer una peticion al api de google para obtener contactos en los ultimos X minutos(puede ser cambiado en el codigo)
      3. cuando los contactos son mas de 30, los contactos siguientes se guardaran en una cola dentro de la base de datos(Ver consideraciones).
      4. los 30 contactos son enviados a la lambda llamada (createandupdatecontact)
      5. se llama la lambda de zohoinjection la cual tiene como objectivo sacar todo de la tabla zohotodo y mandarlo a CRM.
      6. eliminar de la tabla zohotodo los contactos ya enviados al CRM
    4. Consideraciones

      1. para evitar que se consuma memoria la cola es limitada a la cantidad de "400"
      2. No es posible consultar el API de contactos de GMAIL mas 100 veces por lo que, es necesario crear mas de un workflow para manejar esta situacion

Como usarlo "Ambos" (hacer estos pasos antes que todo)

  1. Descargar el codigo o clonar el repositorio
  2. Descomprimir el achivo desacargado
  3. Ejecutar dentro de la carpeta que se genero el comando npm intall esto debio descargar los modulos (carpeta node_modules)

Como Usarlo Local (Testing y actualizaciones)

  1. Antes de usar

    1. Crear un archivo dentro del folder constants con el nombre de myEnviromentVars.js

    2. en el archivo creado previamente copiar los siguiente

    const serverMyMongo =
    ".......";
    const dbMyMongo = "....";
    
    const lambdaSendEmailErrorUrl =
    ".....";
    
    const dataEmail = {
    to: "[email protected]",
    from: [email protected]",
    subject: ".....",
    message: "....",
    };
    
    const lamU = "...../contacts";
    const lamZO =
    "...../sendTozoho";
    
    const ZOHO_CLIENT_ID = `.....`;
    const ZOHO_CLIENT_SECRET = `.....`;
    const ZOHO_REFRESH_TOKEN = `......`;
    const ZOHO_TOKEN_URI = `https://accounts.zoho.com/oauth/v2/token`;
    
    module.exports = {
    serverMyMongo,
    dbMyMongo,
    lambdaSendEmailErrorUrl,
    dataEmail,
    lamU,
    lamZO,
    ZOHO_CLIENT_ID,
    ZOHO_CLIENT_SECRET,
    ZOHO_REFRESH_TOKEN,
    ZOHO_TOKEN_URI,
    };
    

    Cambiar valores de variables por :

    
    dbMyMongo: nombre de la base de datos de mongo
    
    lambdaSendEmailErrorUrl: url de la lambda que envia el correo de error
    
    dataEmail: es un objecto, remplazar el correo en "to" y "from"
    por el que se usara, debe ser el mismo en ambos.
    
    lamU: url de la lambda "createupdateContact"
    
    lamZO: url de la lambda que inyecta a zoho la informacion de los contactos
    
    ZOHO_CLIENT_ID : El client id del usuario de zoho del API ;
    ZOHO_CLIENT_SECRET : El Client secret de zoho del API ;
    ZOHO_REFRESH_TOKEN : Token para poder actualizar el access token;
    ZOHO_TOKEN_URI = usar el valor **https://accounts.zoho.com/oauth/v2/token** ya que esta es el endpoint real;
    
  2. Dentro del folder del proyecto ejecute el comando node nombreDelarchivo.js

  3. ejemplo

    node app.js

Como usarlo PROD (Conectarlo para PROD)

  1. RefreshAllGmailTokens

    Dentro del workflow correspndiente compiar el siguiente Codigo, si las variables de entorno ya estan creadas no deberia haber ningun problema al ejecutarlo.

const { workflowRefreshAccessTokensGmail } = require("bidireccionalgmailcontacts-celerex");
const serverMongoDb = process.env.SERVERMONGODBDEV;
const database = process.env.DATABASEDEV;
const lambdaSendEmailErrorUrl = process.env.LAMBDASENDEMAILERRORURL_DEV
const emailForError = process.env.EMAIL_RECIVER_AND_EMITTER_FOT_ERROR_DEV
const dataEmail = {
  to: emailForError,
  from: emailForError,
  subject: "ERROR IN UPDATE GMAIL TOKENS",
  message: "Hubo un error en el workflow de update refresh gmail token ",
};





await workflowRefreshAccessTokensGmail(
  serverMongoDb,
  database,
  dataEmail,
  lambdaSendEmailErrorUrl);

console.log("Finished");

Notas

  • Esta libreria esta en npm siempre que se haga un cambio permanente al codigo para tener la version mas reciente en npm se debe hacer un npm publish

  • guardar en Logs y enviar correos son llamados en casi todas las funciones al momento de un error

  • El limite de contactos que se envian al CRM por ejecucion es de 100.

  • El limite de la cola es 400

-El Limite de peticiones a google que se pueden hacer por usuario es aproximdamente 100, usar menos siempre por ejemplo 80