mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-22 06:46:41 +02:00
feat(api): create unified API server with first 3 modules
New consolidated Hono/Bun API server at apps/api/ that replaces individual
app servers. One process, one port, one auth middleware, one container.
Modules ported:
- calendar: RRULE expansion, ICS import, Google Calendar (stub)
- contacts: avatar upload (S3), vCard import/parsing
- mukke: audio upload/download presigned URLs, batch cover art
Architecture: each module registers routes under /api/v1/{module}/*
using the shared-hono middleware stack (auth, rate limit, error handler).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
079015ade7
commit
aa93c54391
6 changed files with 368 additions and 0 deletions
44
apps/api/src/index.ts
Normal file
44
apps/api/src/index.ts
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
/**
|
||||
* ManaCore Unified API Server
|
||||
*
|
||||
* Consolidates all app compute servers into one Hono/Bun process.
|
||||
* Each module registers its routes under /api/v1/{module}/*.
|
||||
*/
|
||||
|
||||
import { Hono } from 'hono';
|
||||
import { cors } from 'hono/cors';
|
||||
import {
|
||||
authMiddleware,
|
||||
healthRoute,
|
||||
errorHandler,
|
||||
notFoundHandler,
|
||||
rateLimitMiddleware,
|
||||
} from '@manacore/shared-hono';
|
||||
|
||||
// Module routes
|
||||
import { calendarRoutes } from './modules/calendar/routes';
|
||||
import { contactsRoutes } from './modules/contacts/routes';
|
||||
import { mukkeRoutes } from './modules/mukke/routes';
|
||||
|
||||
const PORT = parseInt(process.env.PORT || '3050', 10);
|
||||
const CORS_ORIGINS = (process.env.CORS_ORIGINS || 'http://localhost:5173').split(',');
|
||||
|
||||
const app = new Hono();
|
||||
|
||||
// ─── Global Middleware ──────────────────────────────────────
|
||||
app.onError(errorHandler);
|
||||
app.notFound(notFoundHandler);
|
||||
app.use('*', cors({ origin: CORS_ORIGINS, credentials: true }));
|
||||
app.route('/health', healthRoute('mana-api'));
|
||||
app.use('/api/*', rateLimitMiddleware({ max: 200, windowMs: 60_000 }));
|
||||
app.use('/api/*', authMiddleware());
|
||||
|
||||
// ─── Module Routes ──────────────────────────────────────────
|
||||
app.route('/api/v1/calendar', calendarRoutes);
|
||||
app.route('/api/v1/contacts', contactsRoutes);
|
||||
app.route('/api/v1/mukke', mukkeRoutes);
|
||||
|
||||
// ─── Server Info ────────────────────────────────────────────
|
||||
console.log(`mana-api starting on port ${PORT}...`);
|
||||
|
||||
export default { port: PORT, fetch: app.fetch };
|
||||
Loading…
Add table
Add a link
Reference in a new issue