feat: Delete client session keys from Redis after 3 minutes of inactivity
							parent
							
								
									02ded6e4ee
								
							
						
					
					
						commit
						9e84e4cf08
					
				| 
						 | 
				
			
			@ -0,0 +1,44 @@
 | 
			
		|||
NODE_ENV=
 | 
			
		||||
BACKEND_URL=http://localhost
 | 
			
		||||
FRONTEND_URL=http://localhost:3000
 | 
			
		||||
PROXY_PORT=8080
 | 
			
		||||
PORT=8080
 | 
			
		||||
 | 
			
		||||
DB_DIALECT=mysql
 | 
			
		||||
DB_HOST=localhost
 | 
			
		||||
DB_USER=whaticket
 | 
			
		||||
DB_PASS=strongpassword
 | 
			
		||||
DB_NAME=whaticket  
 | 
			
		||||
 | 
			
		||||
# WHATSAPP OFFICIAL  
 | 
			
		||||
VERIFY_TOKEN=HAPPY
 | 
			
		||||
TOKEN=EAAEPZBB2YqgwBOZBEAvPxYaO2nbPvuzU3ZBaZA6YF6tyWtjKom2yLxPxOm421njhbb1ZC2rOkyQyZCWpZBk9jXZCAaMLNY6SkNOrwPoRNaqO9Fbj31mZC8mxra08jIhBiziX7IZBFDWYbkcfw5cfLdTSys9ilfRlKsIZClOUlTiHnhSDkMvXY6rMFrvWswR2YVvJVH1qPvM7hGuuUqM
 | 
			
		||||
VERSION=v17.0
 | 
			
		||||
URL_WHATSAPP_MEDIA=https://ccsm-api.omnihit.app.br/whatsapp/official/media
 | 
			
		||||
URL_WHATSAPP_API=https://graph.facebook.com 
 | 
			
		||||
 | 
			
		||||
JWT_SECRET=3123123213123
 | 
			
		||||
JWT_REFRESH_SECRET=75756756756
 | 
			
		||||
 | 
			
		||||
SENTRY_DSN= 
 | 
			
		||||
 | 
			
		||||
CACHE=
 | 
			
		||||
 | 
			
		||||
WHATS_NUMBER_VALIDATOR_URL=http://localhost:8021
 | 
			
		||||
 | 
			
		||||
TOKEN_REMOTE_TICKET_CREATION=emvd7UfskjstMC99mFqs2tEiNmn05PgsUVK06TZP9LfkyjxDrsKCxlVV5ApYM7hP
 | 
			
		||||
TOKEN_IAM_HORACIUS_EL=emvd7UfskjstMC99mFqs2tEiNmn05PgsUVK06TZP9LfkyjxDrsKCxlVV5ApYM7hP
 | 
			
		||||
 | 
			
		||||
# omnihit da hit test bot
 | 
			
		||||
# APP_NAME=recrutamento_el 
 | 
			
		||||
APP_NAME=test  
 | 
			
		||||
 | 
			
		||||
BACKEND_URL_RAW=http://localhost
 | 
			
		||||
 | 
			
		||||
PUBLICKEY=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwOvEh4Qc0yeJidiX3YpDdOB/XuDeyNRaypmSyW5FjjIxBFaMiUmNSZ2X2m2LqyyrHJxQgRqwjifHUQ+ivmNBm4YFNSr05iFB/kgi/1Jmbst6h1MnmuD1YFSRnEsmdUXzhhgcj5btyjRfw6L2rGwOnqzMzS54seE1aAy+rtN82DW8wfbYU/IO83MAJiocthCBOev5MDUq6hdkGPPZ/kdFOLcQe+wt/suhmF4KRfq77X4GgLM5nAOMj7N7cJ6b97nB47krfPOMJissNzPDZ879BKeQX4t8TwJGUFNOvLd3UW3xVBTBz8pSS36VlCXjbYm44za8eTuBLDYYbGkUNEFYxwIDAQAB
 | 
			
		||||
 | 
			
		||||
REDIS_URI=redis://127.0.0.1:6379
 | 
			
		||||
 | 
			
		||||
URL_DASHBOARD_SESSIONS=http://localhost:6002
 | 
			
		||||
TOKEN_DASHBOARD_SESSIONS=8168dd72adb7bab7e8f54f9d022468ab
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -50,6 +50,7 @@
 | 
			
		|||
    "socket.io-client": "^4.5.4",
 | 
			
		||||
    "uuid": "^8.3.2",
 | 
			
		||||
    "whatsapp-web.js": "github:pedroslopez/whatsapp-web.js",
 | 
			
		||||
    "xml2js": "^0.6.2",
 | 
			
		||||
    "yup": "^0.32.8"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -92,11 +92,21 @@ export const store = async (req: Request, res: Response): Promise<Response> => {
 | 
			
		|||
  return res.status(200).json(queue);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const form = async (req: Request, res: Response): Promise<Response> => {
 | 
			
		||||
  const { form, name } = req.body;
 | 
			
		||||
 | 
			
		||||
  if (!form || !name) throw new AppError("BAD REQUEST", 400);
 | 
			
		||||
 | 
			
		||||
  await set(name, form);
 | 
			
		||||
 | 
			
		||||
  return res.status(200).json({ [name]: form });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const customization = async (
 | 
			
		||||
  req: Request,
 | 
			
		||||
  res: Response
 | 
			
		||||
): Promise<Response> => {
 | 
			
		||||
  const { ura } = req.body;
 | 
			
		||||
  const { ura, number } = req.body;
 | 
			
		||||
 | 
			
		||||
  if (!ura) throw new AppError("BAD REQUEST", 400);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -184,10 +194,10 @@ export const customization = async (
 | 
			
		|||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  await set("ura", ura);
 | 
			
		||||
  await set(`ura_${number}`, ura);
 | 
			
		||||
 | 
			
		||||
  const _ura = await get({ key: "ura", parse: true });
 | 
			
		||||
  console.log("_URA: ", _ura);
 | 
			
		||||
  const _ura = await get({ key: `ura_${number}`, parse: true });
 | 
			
		||||
  console.log(`ura_${number}`, _ura);
 | 
			
		||||
 | 
			
		||||
  return res.status(200).json({ new_queues });
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,54 +1,60 @@
 | 
			
		|||
import ListTicketTimeLife from "../services/TicketServices/ListTicketTimeLife";
 | 
			
		||||
import UpdateTicketService from "../services/TicketServices/UpdateTicketService";
 | 
			
		||||
import { delForm } from "../services/WbotServices/wbotMessageListener";
 | 
			
		||||
import BotIsOnQueue from "./BotIsOnQueue";
 | 
			
		||||
import { del } from "./RedisClient";
 | 
			
		||||
 | 
			
		||||
const fsPromises = require("fs/promises");
 | 
			
		||||
const fs = require('fs')
 | 
			
		||||
const fs = require("fs");
 | 
			
		||||
 | 
			
		||||
let timer: any
 | 
			
		||||
let timer: any;
 | 
			
		||||
 | 
			
		||||
const CloseBotTickets = async () => {
 | 
			
		||||
 | 
			
		||||
  try {
 | 
			
		||||
    const botInfo = await BotIsOnQueue("botqueue");
 | 
			
		||||
 | 
			
		||||
    const botInfo = await BotIsOnQueue('botqueue')
 | 
			
		||||
    if (!botInfo.userIdBot) return;
 | 
			
		||||
 | 
			
		||||
    if (!botInfo.userIdBot) return
 | 
			
		||||
    let tickets: any = await ListTicketTimeLife({
 | 
			
		||||
      timeseconds: 60,
 | 
			
		||||
      status: "open",
 | 
			
		||||
      userId: botInfo.userIdBot
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    let tickets: any = await ListTicketTimeLife({ timeseconds: 60, status: 'open', userId: botInfo.userIdBot })
 | 
			
		||||
 | 
			
		||||
    console.log('tickets: ', tickets)
 | 
			
		||||
    console.log("tickets: ", tickets);
 | 
			
		||||
 | 
			
		||||
    for (let i = 0; i < tickets.length; i++) {
 | 
			
		||||
 | 
			
		||||
      await UpdateTicketService({
 | 
			
		||||
        ticketData: { 'status': 'closed', 'userId': botInfo.userIdBot, 'statusChatEnd': 'FINALIZADO' },
 | 
			
		||||
        ticketData: {
 | 
			
		||||
          status: "closed",
 | 
			
		||||
          userId: botInfo.userIdBot,
 | 
			
		||||
          statusChatEnd: "FINALIZADO"
 | 
			
		||||
        },
 | 
			
		||||
        ticketId: tickets[i].ticket_id
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      tickets[i].id = tickets[i].ticket_id;
 | 
			
		||||
      delForm(tickets[i]);
 | 
			
		||||
      del(`form:${tickets[i].id}:request`);
 | 
			
		||||
      del(`form:${tickets[i].id}:confirmation`);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  } catch (error) {
 | 
			
		||||
    console.log('There was an error on try close the bot tickets: ', error)
 | 
			
		||||
    console.log("There was an error on try close the bot tickets: ", error);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const schedule = async () => {
 | 
			
		||||
 | 
			
		||||
  try {
 | 
			
		||||
    clearInterval(timer);
 | 
			
		||||
 | 
			
		||||
    await CloseBotTickets()
 | 
			
		||||
 | 
			
		||||
    await CloseBotTickets();
 | 
			
		||||
  } catch (error) {
 | 
			
		||||
    console.log('error on schedule: ', error)
 | 
			
		||||
    console.log("error on schedule: ", error);
 | 
			
		||||
  } finally {
 | 
			
		||||
    timer = setInterval(schedule, 180000);
 | 
			
		||||
  }
 | 
			
		||||
  finally {
 | 
			
		||||
    timer = setInterval(schedule, 60000);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
timer = setInterval(schedule, 60000);
 | 
			
		||||
timer = setInterval(schedule, 180000);
 | 
			
		||||
 | 
			
		||||
export default schedule;
 | 
			
		||||
| 
						 | 
				
			
			@ -44,7 +44,7 @@ export async function get({ key, value, parse }: getData) {
 | 
			
		|||
        for (const key of keys) {
 | 
			
		||||
          const val = await redis.get(key);
 | 
			
		||||
          if (parse) res.push(JSON.parse(val));
 | 
			
		||||
          res.push(val);
 | 
			
		||||
          else res.push(val);
 | 
			
		||||
        }
 | 
			
		||||
        return res;
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,8 @@ queueRoutes.post("/queue", isAuth, QueueController.store);
 | 
			
		|||
 | 
			
		||||
queueRoutes.post("/queue/customization", QueueController.customization);
 | 
			
		||||
 | 
			
		||||
queueRoutes.post("/queue/form", QueueController.form);
 | 
			
		||||
 | 
			
		||||
queueRoutes.get("/queue/remote/list", isAuth, QueueController.listQueues);
 | 
			
		||||
 | 
			
		||||
queueRoutes.get("/queue/:queueId", isAuth, QueueController.show);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,7 +19,7 @@ import {
 | 
			
		|||
 | 
			
		||||
import ListWhatsAppsNumber from "../WhatsappService/ListWhatsAppsNumber";
 | 
			
		||||
import { getWbot } from "../../libs/wbot";
 | 
			
		||||
import { json } from "sequelize/types";
 | 
			
		||||
import { QueryTypes, json } from "sequelize/types";
 | 
			
		||||
 | 
			
		||||
import { restartWhatsSession } from "../../helpers/RestartWhatsSession";
 | 
			
		||||
// import { insertOrUpeateWhatsCache, searchWhatsappCache } from "../../helpers/WhatsCache";
 | 
			
		||||
| 
						 | 
				
			
			@ -58,12 +58,6 @@ const SendWhatsAppMessage = async ({
 | 
			
		|||
 | 
			
		||||
    let quotedMsgSerializedId: string | undefined; 
 | 
			
		||||
 
 | 
			
		||||
    if (quotedMsg) {
 | 
			
		||||
      await GetWbotMessage(ticket, quotedMsg.id);
 | 
			
		||||
 | 
			
		||||
      quotedMsgSerializedId = SerializeWbotMsgId(ticket, quotedMsg);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    console.log("quotedMsgSerializedId: ", quotedMsgSerializedId);
 | 
			
		||||
 | 
			
		||||
    let whatsapps: any;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue