2023-11-29 20:05:48 +00:00
|
|
|
const SocketIO = require('socket.io')
|
|
|
|
let io
|
|
|
|
|
2024-07-19 14:46:15 +00:00
|
|
|
const onSocketHandshakeAuthVerifier = (socket, next) => {
|
|
|
|
|
|
|
|
console.log(`${new Date().toISOString()} ===========> MIDDLEWARE: Socket trying to connect with data ${JSON.stringify(socket.handshake.auth)}`)
|
|
|
|
|
|
|
|
const codWeb = socket.handshake.auth.codWeb
|
|
|
|
const extension = socket.handshake.auth.extension
|
|
|
|
const host = socket.handshake.headers.host
|
|
|
|
|
|
|
|
if (!host) {
|
|
|
|
return next(new Error(`Host must be created`))
|
|
|
|
}
|
|
|
|
|
|
|
|
const isFromHitphoneWebClient = true
|
|
|
|
// const isFromHitphoneWebClient = host.includes("https://ms-teamsapp.omnihit.app.br/")
|
|
|
|
if (!isFromHitphoneWebClient) {
|
|
|
|
socket.data.isFromHitphoneWebClient = false
|
|
|
|
next()
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!codWeb || !extension) {
|
|
|
|
return next(new Error(`Invalid authentication information, required attributes host, codWeb, extension`))
|
|
|
|
}
|
|
|
|
|
|
|
|
socket.data.codWeb = codWeb
|
|
|
|
socket.data.extension = extension
|
|
|
|
socket.data.isFromHitphoneWebClient = true
|
|
|
|
return next()
|
|
|
|
}
|
|
|
|
|
|
|
|
const onConnectionHitphoneWebClient = (socket) => {
|
|
|
|
const { isFromHitphoneWebClient } = socket.data
|
|
|
|
if (!isFromHitphoneWebClient) return
|
|
|
|
console.log(`${new Date().toISOString()} ===========> SOCKET CONNECTION: Client connected from "Hitphone WEB Client"`)
|
|
|
|
|
|
|
|
const { codWeb, extension } = socket.data
|
|
|
|
socket.join(`${codWeb}@${extension}`)
|
|
|
|
|
|
|
|
socket.on("disconnect", (data) => {
|
|
|
|
console.log(`${new Date().toISOString()} ==========> SOCKET DISCONNECT: "Hitphone WEB Client" Client disconnected socket: ${data}`)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
const onConnectionCrmWizardClient = (socket) => {
|
|
|
|
const { isFromHitphoneWebClient } = socket.data
|
|
|
|
if (!isFromHitphoneWebClient) return
|
|
|
|
console.log(`${new Date().toISOString()} ===========> SOCKET CONNECTION: Client connected from "Hitphone WEB Client"`)
|
|
|
|
|
|
|
|
const { codWeb, extension } = socket.data
|
|
|
|
socket.join(`${codWeb}@${extension}`)
|
|
|
|
|
|
|
|
socket.on("disconnect", (data) => {
|
|
|
|
console.log(`${new Date().toISOString()} ==========> SOCKET DISCONNECT: "Hitphone WEB Client" Client disconnected socket: ${data}`)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2023-11-29 20:05:48 +00:00
|
|
|
const initIO = (httpServer) => {
|
2024-07-19 14:46:15 +00:00
|
|
|
const IS_DEV = process.env.IS_DEV ? Boolean(process.env.IS_DEV) : false
|
|
|
|
|
2023-11-29 20:05:48 +00:00
|
|
|
io = SocketIO(httpServer, {
|
|
|
|
cors: {
|
2024-07-19 14:46:15 +00:00
|
|
|
origin: IS_DEV ? "*" : [process.env.URL_OAUTH_FRONTEND_SUCCESS_REDIRECT, process.env.URL_HITPHONE_FRONTEND]
|
2023-11-29 20:05:48 +00:00
|
|
|
},
|
|
|
|
maxHttpBufferSize: 1e8
|
|
|
|
})
|
|
|
|
|
2024-07-19 14:46:15 +00:00
|
|
|
io.use(onSocketHandshakeAuthVerifier)
|
|
|
|
/**
|
|
|
|
* CRM Wizard Client
|
|
|
|
*/
|
|
|
|
io.use("connection", onConnectionCrmWizardClient)
|
|
|
|
/**
|
|
|
|
* Hitphone Client Flow
|
|
|
|
*/
|
|
|
|
io.use("connection", onConnectionHitphoneWebClient)
|
|
|
|
|
2023-11-29 20:05:48 +00:00
|
|
|
return io
|
|
|
|
}
|
|
|
|
|
|
|
|
const getIO = () => {
|
|
|
|
if (!io) {
|
|
|
|
throw new AppError("Socket IO not initialized")
|
|
|
|
}
|
|
|
|
return io
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = { initIO, getIO }
|