import 'reflect-metadata'; import './providers'; import { Hono } from 'hono'; import { hc } from 'hono/client'; import { container } from 'tsyringe'; import { validateAuthSession, verifyOrigin } from './middleware/auth.middleware'; import { IamController } from './controllers/iam.controller'; import { config } from './common/config'; /* -------------------------------------------------------------------------- */ /* Client Request */ /* ------------------------------------ ▲ ----------------------------------- */ /* ------------------------------------ | ----------------------------------- */ /* ------------------------------------ ▼ ----------------------------------- */ /* Controller */ /* ---------------------------- (Request Routing) --------------------------- */ /* ------------------------------------ ▲ ----------------------------------- */ /* ------------------------------------ | ----------------------------------- */ /* ------------------------------------ ▼ ----------------------------------- */ /* Service */ /* ---------------------------- (Business logic) ---------------------------- */ /* ------------------------------------ ▲ ----------------------------------- */ /* ------------------------------------ | ----------------------------------- */ /* ------------------------------------ ▼ ----------------------------------- */ /* Repository */ /* ----------------------------- (Data storage) ----------------------------- */ /* -------------------------------------------------------------------------- */ /* ----------------------------------- Api ---------------------------------- */ const app = new Hono().basePath('/api'); /* --------------------------- Global Middlewares --------------------------- */ app.use(verifyOrigin).use(validateAuthSession); /* --------------------------------- Routes --------------------------------- */ const routes = app .route('/iam', container.resolve(IamController).routes()) /* -------------------------------------------------------------------------- */ /* Exports */ /* -------------------------------------------------------------------------- */ export const rpc = hc(config.ORIGIN); export type ApiClient = typeof rpc; export type ApiRoutes = typeof routes; export { app };