60 lines
2.1 KiB
JavaScript
60 lines
2.1 KiB
JavaScript
const axios = require('axios')
|
|
const { globalApiKey, disabledCallbacks, enableWebHook } = require('./config')
|
|
const { logger } = require('./logger')
|
|
|
|
// Trigger webhook endpoint
|
|
const triggerWebhook = (webhookURL, sessionId, dataType, data) => {
|
|
if (enableWebHook) {
|
|
axios.post(webhookURL, { dataType, data, sessionId }, { headers: { 'x-api-key': globalApiKey } })
|
|
.then(() => logger.debug({ sessionId, dataType, data: data || '' }, `Webhook message sent to ${webhookURL}`))
|
|
.catch(error => logger.error({ sessionId, dataType, err: error, data: data || '' }, `Failed to send webhook message to ${webhookURL}`))
|
|
}
|
|
}
|
|
|
|
// Function to send a response with error status and message
|
|
const sendErrorResponse = (res, status, message) => {
|
|
res.status(status).json({ success: false, error: message })
|
|
}
|
|
|
|
// Function to wait for a specific item not to be null
|
|
const waitForNestedObject = (rootObj, nestedPath, maxWaitTime = 10000, interval = 100) => {
|
|
const start = Date.now()
|
|
return new Promise((resolve, reject) => {
|
|
const checkObject = () => {
|
|
const nestedObj = nestedPath.split('.').reduce((obj, key) => obj ? obj[key] : undefined, rootObj)
|
|
if (nestedObj) {
|
|
// Nested object exists, resolve the promise
|
|
resolve()
|
|
} else if (Date.now() - start > maxWaitTime) {
|
|
// Maximum wait time exceeded, reject the promise
|
|
logger.error('Timed out waiting for nested object')
|
|
reject(new Error('Timeout waiting for nested object'))
|
|
} else {
|
|
// Nested object not yet created, continue waiting
|
|
setTimeout(checkObject, interval)
|
|
}
|
|
}
|
|
checkObject()
|
|
})
|
|
}
|
|
|
|
const checkIfEventisEnabled = (event) => {
|
|
return new Promise((resolve) => { if (!disabledCallbacks.includes(event)) { resolve() } })
|
|
}
|
|
|
|
const sendMessageSeenStatus = async (message) => {
|
|
try {
|
|
const chat = await message.getChat()
|
|
await chat.sendSeen()
|
|
} catch (error) {
|
|
logger.error(error, 'Failed to send seen status')
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
triggerWebhook,
|
|
sendErrorResponse,
|
|
waitForNestedObject,
|
|
checkIfEventisEnabled,
|
|
sendMessageSeenStatus
|
|
}
|