cdn/index.js

79 lines
2.3 KiB
JavaScript

const dotenv = require('dotenv');
dotenv.config();
const logger = require('./src/config/logger');
const {App} = require('@slack/bolt');
const fileUpload = require('./src/fileUpload');
const express = require('express');
const cors = require('cors');
const apiRoutes = require('./src/api/index.js');
const BOT_START_TIME = Date.now() / 1000;
const app = new App({
token: process.env.SLACK_BOT_TOKEN,
signingSecret: process.env.SLACK_SIGNING_SECRET,
socketMode: true,
appToken: process.env.SLACK_APP_TOKEN
});
// API server
const expressApp = express();
expressApp.use(cors());
expressApp.use(express.json());
expressApp.use(express.urlencoded({ extended: true }));
// Mount API for all versions
expressApp.use('/api', apiRoutes);
// Error handling middleware
expressApp.use((err, req, res, next) => {
logger.error('API Error:', err);
res.status(500).json({ error: 'Internal server error' });
});
// Fallback route for unhandled paths
expressApp.use((req, res, next) => {
logger.warn(`Unhandled route: ${req.method} ${req.path}`);
res.status(404).json({ error: 'Not found' });
});
// Event listener for file_shared events
app.event('file_shared', async ({event, client}) => {
logger.debug(`Received file_shared event: ${JSON.stringify(event)}`);
if (parseFloat(event.event_ts) < BOT_START_TIME) {
logger.debug(`Ignoring file event from before bot start: ${new Date(parseFloat(event.event_ts) * 1000).toISOString()}`);
return;
}
const targetChannelId = process.env.SLACK_CHANNEL_ID;
const channelId = event.channel_id;
if (channelId !== targetChannelId) {
logger.debug(`Ignoring file shared in channel: ${channelId}`);
return;
}
try {
await fileUpload.handleFileUpload(event, client);
} catch (error) {
logger.error(`Error processing file upload: ${error.message}`);
}
});
// Slack bot and API server
(async () => {
try {
await fileUpload.initialize();
await app.start();
const port = parseInt(process.env.PORT || '4553', 10);
expressApp.listen(port, () => {
logger.info(`⚡️ Slack app is running in Socket Mode!`);
logger.info(`🚀 API server is running on port ${port}`);
});
} catch (error) {
logger.error('Failed to start:', error);
process.exit(1);
}
})();