UNPKG

@app-connect/core

Version:
194 lines (190 loc) 7.41 kB
// const Op = require('sequelize').Op; const { CallLogModel } = require('../models/callLogModel'); // const { MessageLogModel } = require('../models/messageLogModel'); const { UserModel } = require('../models/userModel'); const oauth = require('../lib/oauth'); // const userCore = require('../handlers/user'); const errorMessage = require('../lib/generalErrorMessage'); const adapterRegistry = require('../adapter/registry'); async function upsertCallDisposition({ platform, userId, sessionId, dispositions, additionalSubmission, userSettings }) { try { const log = await CallLogModel.findOne({ where: { sessionId } }); if (!log) { return { successful: false, returnMessage: { message: `Cannot find log`, messageType: 'warning', ttl: 3000 } } } let user = await UserModel.findByPk(userId); if (!user) { return { successful: false, returnMessage: { message: `Cannot find user`, messageType: 'warning', ttl: 3000 } } } const platformModule = adapterRegistry.getAdapter(platform); const authType = platformModule.getAuthType(); let authHeader = ''; switch (authType) { case 'oauth': const oauthApp = oauth.getOAuthApp((await platformModule.getOauthInfo({ tokenUrl: user?.platformAdditionalInfo?.tokenUrl, hostname: user?.hostname }))); user = await oauth.checkAndRefreshAccessToken(oauthApp, user); authHeader = `Bearer ${user.accessToken}`; break; case 'apiKey': const basicAuth = platformModule.getBasicAuth({ apiKey: user.accessToken }); authHeader = `Basic ${basicAuth}`; break; } const { logId, returnMessage, extraDataTracking } = await platformModule.upsertCallDisposition({ user, existingCallLog: log, authHeader, dispositions }); return { successful: !!logId, logId, returnMessage, extraDataTracking }; } catch (e) { console.error(`platform: ${platform} \n${e.stack} \n${JSON.stringify(e.response?.data)}`); if (e.response?.status === 429) { return { successful: false, returnMessage: errorMessage.rateLimitErrorMessage({ platform }) }; } else if (e.response?.status >= 400 && e.response?.status < 410) { return { successful: false, returnMessage: errorMessage.authorizationErrorMessage({ platform }), extraDataTracking: { statusCode: e.response?.status, } }; } return { successful: false, returnMessage: { message: `Error dispositioning call log`, messageType: 'warning', details: [ { title: 'Details', items: [ { id: '1', type: 'text', text: `Please check if your account has permission to UPDATE logs.` } ] } ], ttl: 5000 } }; } } // async function upsertMessageDisposition({ platform, userId, conversationLogId, dispositions, additionalSubmission, userSettings }) { // try { // const existingSameDateMessageLog = await MessageLogModel.findOne({ // where: { // conversationLogId // } // }); // if (!existingSameDateMessageLog) { // return { // successful: false, // returnMessage: { // message: `Cannot find log`, // messageType: 'warning', // ttl: 3000 // } // } // } // let user = await UserModel.findByPk(userId); // if (!user) { // return { // successful: false, // returnMessage: { // message: `Cannot find user`, // messageType: 'warning', // ttl: 3000 // } // } // } // const platformModule = adapterRegistry.getAdapter(platform); // const authType = platformModule.getAuthType(); // let authHeader = ''; // switch (authType) { // case 'oauth': // const oauthApp = oauth.getOAuthApp((await platformModule.getOauthInfo({ tokenUrl: user?.platformAdditionalInfo?.tokenUrl, hostname: user?.hostname }))); // user = await oauth.checkAndRefreshAccessToken(oauthApp, user); // authHeader = `Bearer ${user.accessToken}`; // break; // case 'apiKey': // const basicAuth = platformModule.getBasicAuth({ apiKey: user.accessToken }); // authHeader = `Basic ${basicAuth}`; // break; // } // const { logId, returnMessage, extraDataTracking } = await platformModule.upsertMessageDisposition({ // user, // existingMessageLog: existingSameDateMessageLog, // authHeader, // dispositions // }); // return { successful: !!logId, logId, returnMessage, extraDataTracking }; // } // catch (e) { // console.error(`platform: ${platform} \n${e.stack} \n${JSON.stringify(e.response?.data)}`); // if (e.response?.status === 429) { // return { // successful: false, // returnMessage: errorMessage.rateLimitErrorMessage({ platform }) // }; // } // else if (e.response?.status >= 400 && e.response?.status < 410) { // return { // successful: false, // returnMessage: errorMessage.authorizationErrorMessage({ platform }), // extraDataTracking: { // statusCode: e.response?.status, // } // }; // } // return { // successful: false, // returnMessage: // { // message: `Error dispositioning message log`, // messageType: 'warning', // details: [ // { // title: 'Details', // items: [ // { // id: '1', // type: 'text', // text: `Please check if your account has correct permissions.` // } // ] // } // ], // ttl: 5000 // } // }; // } // } exports.upsertCallDisposition = upsertCallDisposition; // exports.upsertMessageDisposition = upsertMessageDisposition;