feat: Adjustment in functions to search for company Id and client Id for oauth2
							parent
							
								
									1bdc545b4f
								
							
						
					
					
						commit
						12a87332f4
					
				|  | @ -184,9 +184,14 @@ const oauthCallBack = async (req, res) => { | |||
| 
 | ||||
|     console.log('xxxxxxxxxx clientId: ', clientId) | ||||
|     console.log('xxxxxxxxxx companyId: ', companyId) | ||||
|     console.log('xxxxxxxxxx code: ', code) | ||||
| 
 | ||||
|     if (code) { | ||||
|         let crmOauth = await CRM.findOne({ 'crm.authentication.crmClientId': clientId, 'companyId': companyId  }) | ||||
| 
 | ||||
|         console.log('xxxxxxxxxx passed') | ||||
| 
 | ||||
|         let crmOauth = await CRM.findOne({ 'crm.authentication.crmClientId': clientId, 'companyId': companyId  })  | ||||
| 
 | ||||
|         crmOauth = crmOauth.toObject() | ||||
| 
 | ||||
|         let authCodeProof = { | ||||
|  | @ -221,7 +226,7 @@ const oauthCallBack = async (req, res) => { | |||
| 
 | ||||
| 
 | ||||
|         // Exchange the authorization code for an access token and refresh token 
 | ||||
|         await exchangeForTokens(crmOauth, authCodeProof) | ||||
|         await exchangeForTokens(crmOauth, authCodeProof, companyId) | ||||
| 
 | ||||
|         const url = `${process.env.URL_OAUTH_FRONTEND_SUCCESS_REDIRECT}?clientId=${encodeURIComponent(clientId)}&codWeb=${companyId}` | ||||
| 
 | ||||
|  | @ -260,6 +265,11 @@ const uploadCrmConfig = async (req, res) => { | |||
| 
 | ||||
|     mustContainProperties(req, ['companyId',]) | ||||
| 
 | ||||
|     //test
 | ||||
|     // console.log('============> uploadCrmConfig companyId: ', companyId)
 | ||||
|     // return res.send()
 | ||||
|     //
 | ||||
| 
 | ||||
|     if (!req?.file) | ||||
|         throw new CustomError.BadRequestError(`The crm property file must be provided`) | ||||
| 
 | ||||
|  |  | |||
|  | @ -41,8 +41,8 @@ async function createContact(companyId, rest, authentication, crmPhone, crmFirst | |||
| 
 | ||||
|     const { type, userName, passWord, token, crmClientId } = authentication | ||||
| 
 | ||||
|     //url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, data = ''
 | ||||
|     const config = await requestConfigHeader(url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, body) | ||||
|                                            //url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, data = '', ticketId = '', companyId
 | ||||
|     const config = await requestConfigHeader(url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, body,                 '', companyId) | ||||
| 
 | ||||
|     if (test?.testing) { | ||||
|         msg = `Tentanto criar contato de numero ${crmPhone} no crm` | ||||
|  |  | |||
|  | @ -46,8 +46,8 @@ async function createTicket(companyId, rest, authentication, crmPhone, crmFirstN | |||
| 
 | ||||
|     const { type, userName, passWord, token, crmClientId } = authentication | ||||
| 
 | ||||
|     //url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, data = ''
 | ||||
|     const config = await requestConfigHeader(url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, body) | ||||
|                                            //url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, data = '', ticketId = '', companyId
 | ||||
|     const config = await requestConfigHeader(url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, body,                 '', companyId) | ||||
| 
 | ||||
|     if (test?.testing) { | ||||
|         msg = `Tentanto criar ticket do numero ${crmPhone} no crm` | ||||
|  |  | |||
|  | @ -23,7 +23,7 @@ async function journaling(companyId, operation, crmPhone, crmAgent, crmCallDurat | |||
| 
 | ||||
|         let body = findProperty(calls, operation) | ||||
| 
 | ||||
|         await journalingRequest(request, body, crmCallDuration, contact, crmAgent, crmPhone, authentication, rest) | ||||
|         await journalingRequest(request, body, crmCallDuration, contact, crmAgent, crmPhone, authentication, rest, companyId) | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -6,8 +6,8 @@ const axios = require('axios') | |||
| const path = require('path') | ||||
| const convertToIntegerIfNumber = require('./convertToIntegerIfNumber') | ||||
| const sendMessageSocket = require('./sendMessageSocket') | ||||
| 
 | ||||
| async function journalingRequest(request, body, crmCallDuration, contact, crmAgent, crmPhone, authentication, test = {}) { | ||||
|                               // request, body, crmCallDuration, contact, crmAgent, crmPhone, authentication, rest,      companyId
 | ||||
| async function journalingRequest(request, body, crmCallDuration, contact, crmAgent, crmPhone, authentication, test = {}, companyId='') { | ||||
|     const { requestContentType, requestEncoding, requestType, responseType, url } = request | ||||
| 
 | ||||
|     console.log('----------> crmCallDuration: ', crmCallDuration) | ||||
|  | @ -118,8 +118,8 @@ async function journalingRequest(request, body, crmCallDuration, contact, crmAge | |||
|     const data = unflatten(body) | ||||
| 
 | ||||
|     const { type, userName, passWord, token, crmClientId } = authentication | ||||
| 
 | ||||
|     const config = await requestConfigHeader(url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, data) | ||||
|                                          //  url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, data = '', ticketId = '', companyId
 | ||||
|     const config = await requestConfigHeader(url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, data,                 '', companyId) | ||||
| 
 | ||||
|     if (test?.testing && test?.companyId && test?.msg) { | ||||
|         sendMessageSocket({ companyId: test.companyId, status: 'processing', data: { request: config, msg: test.msg } }) | ||||
|  | @ -132,7 +132,20 @@ async function journalingRequest(request, body, crmCallDuration, contact, crmAge | |||
|     try { | ||||
|         const res = await axios(config) | ||||
|     } catch (error) { | ||||
|         console.log(`CALL JOURNALING ERROR: `, error) | ||||
|         // console.log(`CALL JOURNALING ERROR: `, error)
 | ||||
| 
 | ||||
|         if (error.response) { | ||||
|             console.error('==================> journalingRequest Erro na resposta da API:', { | ||||
|                 status: error.response.status, | ||||
|                 data: error.response.data, | ||||
|             }) | ||||
|         }  | ||||
|         else if (error.request) { | ||||
|             console.error('==================> journalingRequest Nenhuma resposta recebida da API:', error.request) | ||||
|         }  | ||||
|         else { | ||||
|             console.error('==================> journalingRequest Erro ao configurar a request:', error.message) | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -23,7 +23,7 @@ async function lookupContactByPhone(rest, authentication, crmPhone, companyId, t | |||
| 
 | ||||
|     if (crmInfo) return { exist: true, contactId: crmInfo.contactId, phone: crmPhone } | ||||
| 
 | ||||
|     const config = await requestConfigHeader(url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId) | ||||
|     const config = await requestConfigHeader(url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, '', '', companyId) | ||||
| 
 | ||||
|     if (test?.testing) { | ||||
|         let msg = `Tentanto checar se o contato de numero ${crmPhone} existe no crm` | ||||
|  | @ -49,7 +49,7 @@ async function lookupContactByPhone(rest, authentication, crmPhone, companyId, t | |||
|             console.error('==================> Erro ao configurar a request:', error.message) | ||||
|         } | ||||
|   | ||||
|         throw error | ||||
|         // throw error
 | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ async function lookupCrmTicket(rest, authentication, crmPhone, companyId, test = | |||
| 
 | ||||
|     const { type, userName, passWord, token, crmClientId } = authentication | ||||
| 
 | ||||
|     const config = await requestConfigHeader(url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, '', ticketId) | ||||
|     const config = await requestConfigHeader(url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, '', ticketId, companyId) | ||||
| 
 | ||||
|     if (test?.testing) { | ||||
|         let msg = `Tentanto checar o status do ticket para o numer ${crmPhone} no crm` | ||||
|  |  | |||
|  | @ -6,7 +6,9 @@ const CRM = require('../models/CRM') | |||
| const { set, get, del } = require('./redisClient') | ||||
| const get75PercentTimeInSeconds = require('./get75PercentTimeInSeconds') | ||||
| 
 | ||||
| const exchangeForTokens = async (crmOauth, exchangeProof) => { | ||||
| const exchangeForTokens = async (crmOauth, exchangeProof, companyId) => { | ||||
| 
 | ||||
|     console.log('===========> exchangeForTokens companyId: ', companyId) | ||||
| 
 | ||||
|     const { request, body, response } = findProperty(crmOauth.crm.crmRest, 'tokenEndpoint') | ||||
| 
 | ||||
|  | @ -27,6 +29,7 @@ const exchangeForTokens = async (crmOauth, exchangeProof) => { | |||
|     } | ||||
| 
 | ||||
|     console.log('======> CONFIG: ', config) | ||||
|     console.log('======> companyId: ', companyId) | ||||
| 
 | ||||
|     // const { data } = await axios(config)
 | ||||
| 
 | ||||
|  | @ -56,20 +59,27 @@ const exchangeForTokens = async (crmOauth, exchangeProof) => { | |||
| 
 | ||||
|     //
 | ||||
| 
 | ||||
|     console.log('===========> auth2 data: ', data) | ||||
| 
 | ||||
| 
 | ||||
|     const { refresh_token, access_token, token_type, expires_in, issued_at } = data | ||||
| 
 | ||||
|     console.log('===========> refresh_token: ', refresh_token) | ||||
|     console.log('===========> access_token: ', access_token) | ||||
| 
 | ||||
|     // `${clientId+companyId}`
 | ||||
| 
 | ||||
|     // salesforce case
 | ||||
|     if (issued_at) | ||||
|         await set(crmOauth.crm.authentication.crmClientId, access_token, get75PercentTimeInSeconds(issued_at)) | ||||
|         await set(`${crmOauth.crm.authentication.crmClientId+companyId}`, access_token, get75PercentTimeInSeconds(issued_at)) | ||||
|     else | ||||
|         await set(crmOauth.crm.authentication.crmClientId, access_token, Math.round(expires_in * 0.75)) | ||||
|         await set(`${crmOauth.crm.authentication.crmClientId+companyId}`, access_token, Math.round(expires_in * 0.75)) | ||||
| 
 | ||||
|     crmOauth = await CRM.findOne({ 'crm.authentication.crmClientId': crmOauth.crm.authentication.crmClientId }) | ||||
|     crmOauth = await CRM.findOne({ 'crm.authentication.crmClientId': crmOauth.crm.authentication.crmClientId, 'companyId': companyId }) | ||||
| 
 | ||||
|     if (refresh_token) { | ||||
|         console.log('===========> refresh_token2: ', refresh_token) | ||||
| 
 | ||||
|         crmOauth.crm.authentication.crmOAuthRefreshToken = refresh_token | ||||
|     } | ||||
|     crmOauth.crm.authentication.crmOAuthToken = access_token | ||||
|  | @ -79,9 +89,9 @@ const exchangeForTokens = async (crmOauth, exchangeProof) => { | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| const refreshAccessToken = async (clientId) => { | ||||
| const refreshAccessToken = async (clientId, companyId) => { | ||||
| 
 | ||||
|     let crmOauth = await CRM.findOne({ 'crm.authentication.crmClientId': clientId }) | ||||
|     let crmOauth = await CRM.findOne({ 'crm.authentication.crmClientId': clientId, companyId }) | ||||
|     crmOauth = crmOauth.toObject() | ||||
| 
 | ||||
|     const refreshTokenProof = { | ||||
|  | @ -91,16 +101,18 @@ const refreshAccessToken = async (clientId) => { | |||
|         redirect_uri: process.env.URL_OAUTH_CALLBACK, | ||||
|         refresh_token: crmOauth.crm.authentication.crmOAuthRefreshToken | ||||
|     } | ||||
|     return await exchangeForTokens(crmOauth, refreshTokenProof) | ||||
|     return await exchangeForTokens(crmOauth, refreshTokenProof, companyId) | ||||
| } | ||||
| 
 | ||||
| const getAccessToken = async (clientId) => { | ||||
| const getAccessToken = async (clientId, companyId) => { | ||||
| 
 | ||||
|     if (!await get(clientId)) { | ||||
|     console.log(`============> clientId+companyId: ${clientId+companyId}`) | ||||
| 
 | ||||
|     if (!await get(`${clientId+companyId}`)) { | ||||
|         console.log('Refreshing expired access token') | ||||
|         await refreshAccessToken(clientId) | ||||
|         await refreshAccessToken(clientId, companyId) | ||||
|     } | ||||
|     return await get(clientId) | ||||
|     return await get(`${clientId+companyId}`) | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| const { getAccessToken } = require('./oauth2') | ||||
| 
 | ||||
| async function requestConfigHeader(url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, data = '', ticketId = '') { | ||||
| async function requestConfigHeader(url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, data = '', ticketId = '', companyId) { | ||||
|     let config = {} | ||||
| 
 | ||||
|     console.log('requestConfigHeader ticketId: ', ticketId) | ||||
|  | @ -46,7 +46,8 @@ async function requestConfigHeader(url, crmPhone, requestType, requestContentTyp | |||
|             } | ||||
|         } | ||||
|     } else if (type === 'oauth2') { | ||||
|         const accessToken = await getAccessToken(crmClientId) | ||||
|         console.log('===============> requestConfigHeader oauth2 companyId: ', companyId) | ||||
|         const accessToken = await getAccessToken(crmClientId, companyId) | ||||
|         config = { | ||||
|             ...commonConfig, | ||||
|             headers: { | ||||
|  |  | |||
|  | @ -39,9 +39,9 @@ async function sfcase(companyId, crmPhone) { | |||
|             const { type, userName, passWord, token, crmClientId } = authentication | ||||
|             const { requestContentType, requestEncoding, requestType, responseType, url } = request | ||||
| 
 | ||||
|             let config = await requestConfigHeader(url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, body) | ||||
|             let config = await requestConfigHeader(url, crmPhone, requestType, requestContentType, type, userName, passWord, token, crmClientId, body, '', companyId) | ||||
| 
 | ||||
| 	    console.log("====> config", config) | ||||
| 	        console.log("====> config", config) | ||||
|             console.log("====> accountId: ", accountId, " | contactId: ", contactId) | ||||
| 
 | ||||
|             const complementarInformations = { | ||||
|  | @ -67,7 +67,20 @@ async function sfcase(companyId, crmPhone) { | |||
|                 res.caseId = data.id | ||||
| 
 | ||||
|             } catch (error) { | ||||
|                 console.log(`CASE CREATE ERROR: `, error) | ||||
|                 // console.log(`CASE CREATE ERROR: `, error)
 | ||||
| 
 | ||||
|                 if (error.response) { | ||||
|                     console.error('==================> sfCase Erro na resposta da API:', { | ||||
|                         status: error.response.status, | ||||
|                         data: error.response.data, | ||||
|                     }) | ||||
|                 }  | ||||
|                 else if (error.request) { | ||||
|                     console.error('==================> sfCase Nenhuma resposta recebida da API:', error.request) | ||||
|                 }  | ||||
|                 else { | ||||
|                     console.error('==================> sfCase Erro ao configurar a request:', error.message) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ async function sfCaseUpdate(companyId, caseId, caseUpdate) { | |||
|             const { type, userName, passWord, token, crmClientId } = authentication | ||||
|             const { requestContentType, requestEncoding, requestType, responseType, url } = request | ||||
| 
 | ||||
|             let config = await requestConfigHeader(url, "17999999999", requestType, requestContentType, type, userName, passWord, token, crmClientId, body) | ||||
|             let config = await requestConfigHeader(url, "17999999999", requestType, requestContentType, type, userName, passWord, token, crmClientId, body, '', companyId) | ||||
| 
 | ||||
| 
 | ||||
|             config = { | ||||
|  |  | |||
|  | @ -71,7 +71,7 @@ async function whatsappJournalingCRM(companyId, crmPhone, crmAgent, crmFirstName | |||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|             await journalingRequest(request, body, crmCallDuration = 0, contact, crmAgent, crmPhone, authentication, rest) | ||||
|             await journalingRequest(request, body, crmCallDuration = 0, contact, crmAgent, crmPhone, authentication, rest, companyId) | ||||
|         } | ||||
|         //
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue