diff --git a/.env.example b/.env.example index 6d71edd..43cc55e 100644 --- a/.env.example +++ b/.env.example @@ -1,31 +1,54 @@ ## Application ## -PORT=3000 # OPTIONAL, DEFAULT 3000 -API_KEY=SET_YOUR_API_KEY_HERE # OPTIONAL, IF SET, ALL REQUESTS MUST INCLUDE THIS IN THE 'x-api-key' HEADER -BASE_WEBHOOK_URL=http://localhost:3000/localCallbackExample # MANDATORY -ENABLE_LOCAL_CALLBACK_EXAMPLE=TRUE # OPTIONAL, DISABLE FOR PRODUCTION -RATE_LIMIT_MAX=1000 # OPTIONAL, THE MAXIMUM NUMBER OF CONNECTIONS TO ALLOW PER TIME FRAME -RATE_LIMIT_WINDOW_MS=1000 # OPTIONAL, TIME FRAME FOR WHICH REQUESTS ARE CHECKED IN MS +# OPTIONAL, DEFAULT 3000 +PORT=3000 +# OPTIONAL, IF SET, ALL REQUESTS MUST INCLUDE THIS IN THE 'x-api-key' HEADER +API_KEY=SET_YOUR_API_KEY_HERE +# MANDATORY +BASE_WEBHOOK_URL=http://localhost:3000/localCallbackExample +# OPTIONAL, DISABLE FOR PRODUCTION +ENABLE_LOCAL_CALLBACK_EXAMPLE=TRUE +# OPTIONAL, THE MAXIMUM NUMBER OF CONNECTIONS TO ALLOW PER TIME FRAME +RATE_LIMIT_MAX=1000 +# OPTIONAL, TIME FRAME FOR WHICH REQUESTS ARE CHECKED IN MS +RATE_LIMIT_WINDOW_MS=1000 ## Client ## -MAX_ATTACHMENT_SIZE=10000000 # IF REACHED, MEDIA ATTACHMENT BODY WILL BE NULL -SET_MESSAGES_AS_SEEN=TRUE # WILL MARK THE MESSAGES AS READ AUTOMATICALLY +# IF REACHED, MEDIA ATTACHMENT BODY WILL BE NULL +MAX_ATTACHMENT_SIZE=10000000 +# WILL MARK THE MESSAGES AS READ AUTOMATICALLY +SET_MESSAGES_AS_SEEN=TRUE +# PREVENT SENDING CERTAIN TYPES OF CALLBACKS BACK TO THE WEBHOOK # ALL CALLBACKS: auth_failure|authenticated|call|change_state|disconnected|group_join|group_leave|group_update|loading_screen|media_uploaded|message|message_ack|message_create|message_reaction|message_revoke_everyone|qr|ready|contact_changed|unread_count|message_edit|message_ciphertext -DISABLED_CALLBACKS=message_ack|message_reaction|unread_count|message_edit|message_ciphertext # PREVENT SENDING CERTAIN TYPES OF CALLBACKS BACK TO THE WEBHOOK -WEB_VERSION='2.2328.5' # OPTIONAL, THE VERSION OF WHATSAPP WEB TO USE -WEB_VERSION_CACHE_TYPE=none # OPTIONAL, DETERMINES WHERE TO GET THE WHATSAPP WEB VERSION(local, remote or none), DEFAULT 'none' -RECOVER_SESSIONS=TRUE # OPTIONAL, SHOULD WE RECOVER THE SESSION IN CASE OF PAGE FAILURES -CHROME_BIN= # OPTIONAL, PATH TO CHROME BINARY -HEADLESS=TRUE # OPTIONAL, RUN CHROME IN HEADLESS MODE -RELEASE_BROWSER_LOCK=TRUE # OPTIONAL, RELEASE THE BROWSER LOCK ON SESSION INITIALIZATION -LOG_LEVEL=info # OPTIONAL, SET THE LOG LEVEL -ENABLE_WEBHOOK=TRUE # OPTIONAL, ENABLE WEBHOOK FOR REALTIME UPDATES(TRUE BY DEFAULT) -ENABLE_WEBSOCKET=FALSE # OPTIONAL, ENABLE WEBSOCKET FOR REALTIME UPDATES(FALSE BY DEFAULT) -AUTO_START_SESSIONS=TRUE # OPTIONAL, AUTO START SESSIONS ON SERVER STARTUP(TRUE BY DEFAULT) +DISABLED_CALLBACKS=message_ack|message_reaction|unread_count|message_edit|message_ciphertext +# OPTIONAL, THE VERSION OF WHATSAPP WEB TO USE +WEB_VERSION='2.2328.5' +# OPTIONAL, DETERMINES WHERE TO GET THE WHATSAPP WEB VERSION(local, remote or none), DEFAULT 'none' +WEB_VERSION_CACHE_TYPE=none +# OPTIONAL, SHOULD WE RECOVER THE SESSION IN CASE OF PAGE FAILURES +RECOVER_SESSIONS=TRUE +# OPTIONAL, PATH TO CHROME BINARY +CHROME_BIN= +# OPTIONAL, RUN CHROME IN HEADLESS MODE +HEADLESS=TRUE +# OPTIONAL, RELEASE THE BROWSER LOCK ON SESSION INITIALIZATION +RELEASE_BROWSER_LOCK=TRUE +# OPTIONAL, SET THE LOG LEVEL +LOG_LEVEL=info +# OPTIONAL, ENABLE WEBHOOK FOR REALTIME UPDATES(TRUE BY DEFAULT) +ENABLE_WEBHOOK=TRUE +# OPTIONAL, ENABLE WEBSOCKET FOR REALTIME UPDATES(FALSE BY DEFAULT) +ENABLE_WEBSOCKET=FALSE +# OPTIONAL, AUTO START SESSIONS ON SERVER STARTUP(TRUE BY DEFAULT) +AUTO_START_SESSIONS=TRUE ## Session File Storage ## -SESSIONS_PATH=./sessions # OPTIONAL -ENABLE_SWAGGER_ENDPOINT=TRUE # OPTIONAL, ENABLE SWAGGER ENDPOINT FOR API DOCUMENTATION +# OPTIONAL +SESSIONS_PATH=./sessions +# OPTIONAL, ENABLE SWAGGER ENDPOINT FOR API DOCUMENTATION +ENABLE_SWAGGER_ENDPOINT=TRUE ## Reverse Proxy / Load Balancer ## -BASE_PATH= # OPTIONAL, BASE PATH FOR MOUNTING ROUTES (e.g., /api/v1/whatsapp) -TRUST_PROXY=FALSE # OPTIONAL, ENABLE WHEN BEHIND REVERSE PROXY/LOAD BALANCER \ No newline at end of file +# OPTIONAL, BASE PATH FOR MOUNTING ROUTES (e.g., /api/v1/whatsapp) +BASE_PATH= +# OPTIONAL, ENABLE WHEN BEHIND REVERSE PROXY/LOAD BALANCER +TRUST_PROXY=FALSE \ No newline at end of file diff --git a/server.js b/server.js index b6a15f0..38650f7 100644 --- a/server.js +++ b/server.js @@ -1,23 +1,17 @@ -// Load environment variables first -require('dotenv').config({ path: process.env.ENV_PATH || '.env' }) - const app = require('./src/app') -const { baseWebhookURL, enableWebHook, enableWebSocket, autoStartSessions } = require('./src/config') +const { servicePort, baseWebhookURL, enableWebHook, enableWebSocket, autoStartSessions } = require('./src/config') const { logger } = require('./src/logger') const { handleUpgrade } = require('./src/websocket') const { restoreSessions } = require('./src/sessions') -// Start the server -const port = process.env.PORT || 3000 - // Check if BASE_WEBHOOK_URL environment variable is available when WebHook is enabled if (!baseWebhookURL && enableWebHook) { logger.error('BASE_WEBHOOK_URL environment variable is not set. Exiting...') process.exit(1) // Terminate the application with an error code } -const server = app.listen(port, () => { - logger.info(`Server running on port ${port}`) +const server = app.listen(servicePort, () => { + logger.info(`Server running on port ${servicePort}`) logger.debug({ configuration: require('./src/config') }, 'Service configuration') if (autoStartSessions) { logger.info('Starting all sessions') diff --git a/src/app.js b/src/app.js index 6f01123..7a0dbdb 100644 --- a/src/app.js +++ b/src/app.js @@ -17,7 +17,6 @@ app.use(express.json({ limit: maxAttachmentSize + 1000000 })) app.use(express.urlencoded({ limit: maxAttachmentSize + 1000000, extended: true })) // Mount routes with configurable base path -const mountPath = basePath || '/' -app.use(mountPath, routes) +app.use(basePath, routes) module.exports = app diff --git a/src/config.js b/src/config.js index 82a57dc..da03b41 100644 --- a/src/config.js +++ b/src/config.js @@ -1,7 +1,8 @@ // Load environment variables from .env file -require('dotenv').config() +require('dotenv').config({ path: process.env.ENV_PATH || '.env' }) // setup global const +const servicePort = process.env.PORT || 3000 const sessionFolderPath = process.env.SESSIONS_PATH || './sessions' const enableLocalCallbackExample = (process.env.ENABLE_LOCAL_CALLBACK_EXAMPLE || '').toLowerCase() === 'true' const globalApiKey = process.env.API_KEY @@ -22,10 +23,11 @@ const logLevel = process.env.LOG_LEVEL || 'info' const enableWebHook = process.env.ENABLE_WEBHOOK ? (process.env.ENABLE_WEBHOOK).toLowerCase() === 'true' : true const enableWebSocket = process.env.ENABLE_WEBSOCKET ? (process.env.ENABLE_WEBSOCKET).toLowerCase() === 'true' : false const autoStartSessions = process.env.AUTO_START_SESSIONS ? (process.env.AUTO_START_SESSIONS).toLowerCase() === 'true' : true -const basePath = process.env.BASE_PATH || '' +const basePath = process.env.BASE_PATH || '/' const trustProxy = process.env.TRUST_PROXY ? (process.env.TRUST_PROXY).toLowerCase() === 'true' : false module.exports = { + servicePort, sessionFolderPath, enableLocalCallbackExample, globalApiKey,