2025-09-21 19:35:41 +01:00
|
|
|
import 'dotenv/config';
|
|
|
|
|
|
|
|
|
|
import { Hono } from 'hono';
|
|
|
|
|
import { cors } from 'hono/cors';
|
2025-11-01 15:49:29 +01:00
|
|
|
import { courseRouter } from '@api/routes/course/course';
|
2025-09-21 19:35:41 +01:00
|
|
|
import { logger } from 'hono/logger';
|
2025-11-01 15:49:29 +01:00
|
|
|
import { mailRouter } from '@api/routes/mail';
|
2025-09-21 19:35:41 +01:00
|
|
|
import { prettyJSON } from 'hono/pretty-json';
|
2025-11-01 15:49:29 +01:00
|
|
|
import { rateLimiterMiddleware } from '@api/middlewares/rate-limiter';
|
2025-09-21 19:35:41 +01:00
|
|
|
import { secureHeaders } from 'hono/secure-headers';
|
|
|
|
|
|
|
|
|
|
// Create Hono app with chaining for RPC support
|
|
|
|
|
export const app = new Hono()
|
|
|
|
|
// Middleware
|
|
|
|
|
.use('*', logger())
|
|
|
|
|
.use('*', prettyJSON())
|
|
|
|
|
.use('*', secureHeaders())
|
|
|
|
|
.use(
|
|
|
|
|
'*',
|
|
|
|
|
cors({
|
|
|
|
|
origin: '*',
|
|
|
|
|
allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
|
|
|
|
|
allowHeaders: ['Content-Type', 'Authorization'],
|
|
|
|
|
exposeHeaders: ['Content-Length', 'X-Kuma-Revision'],
|
|
|
|
|
maxAge: 600,
|
|
|
|
|
credentials: true
|
|
|
|
|
})
|
|
|
|
|
)
|
|
|
|
|
.use('*', rateLimiterMiddleware)
|
|
|
|
|
|
|
|
|
|
// Routes
|
|
|
|
|
.get('/', (c) =>
|
|
|
|
|
c.json({
|
|
|
|
|
message: '"Welcome to Classroomio.com API - docs are at https://api.classroomio.com/docs"'
|
|
|
|
|
})
|
|
|
|
|
)
|
|
|
|
|
.route('/course', courseRouter)
|
|
|
|
|
.route('/mail', mailRouter)
|
|
|
|
|
|
|
|
|
|
// Error handling
|
|
|
|
|
.onError((err, c) => {
|
|
|
|
|
console.error('Error:', err);
|
|
|
|
|
return c.json({ error: 'Internal Server Error' }, 500);
|
|
|
|
|
});
|