Files
classroomio/apps/api/src/app.ts
T

45 lines
1.2 KiB
TypeScript
Raw Normal View History

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';
import { logger } from 'hono/logger';
2025-11-01 15:49:29 +01:00
import { mailRouter } from '@api/routes/mail';
import { prettyJSON } from 'hono/pretty-json';
2025-11-01 15:49:29 +01:00
import { rateLimiterMiddleware } from '@api/middlewares/rate-limiter';
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);
});