- Set VITE_API_BASE_URL default to production API URL in api-client.ts so fetch() uses absolute URLs instead of relative paths that fail on Tauri - Add tauri://localhost and https://tauri.localhost to API CORS allowed origins - Also fix .env WEB_APP_URL from stale .tech to .my.id Co-Authored-By: Claude <noreply@anthropic.com>
54 lines
1.8 KiB
TypeScript
54 lines
1.8 KiB
TypeScript
import { Elysia } from 'elysia';
|
|
import cors from '@elysiajs/cors';
|
|
import { env, assertRequiredEnv } from './config/env';
|
|
import { healthRoutes } from './routes/health';
|
|
import { statusRoutes } from './routes/status';
|
|
import { diseaseRoutes } from './routes/diseases';
|
|
import { classificationRoutes } from './routes/classifications';
|
|
import { diagnosisRoutes } from './routes/diagnoses';
|
|
import { dashboardRoutes } from './routes/dashboard';
|
|
import { authRoutes } from './routes/auth';
|
|
import { expertRoutes } from './routes/expert';
|
|
import { metricsRoutes } from './routes/metrics';
|
|
import { httpRequestCounter, httpRequestDuration, httpRequestsActive } from './lib/telemetry';
|
|
import './types';
|
|
|
|
assertRequiredEnv();
|
|
|
|
const app = new Elysia()
|
|
.use(cors({
|
|
origin: env.allowedOrigins,
|
|
credentials: true,
|
|
}))
|
|
.use(metricsRoutes)
|
|
.onBeforeHandle(({ request, path }) => {
|
|
httpRequestsActive.inc();
|
|
request.metricsStart = performance.now();
|
|
request.metricsPath = path;
|
|
})
|
|
.onAfterHandle(({ request, set }) => {
|
|
const start = (request as any).metricsStart as number | undefined;
|
|
const path = (request as any).metricsPath as string | undefined;
|
|
if (start && path) {
|
|
const duration = (performance.now() - start) / 1000;
|
|
const method = request.method;
|
|
const status = set.status ?? 200;
|
|
httpRequestCounter.labels(method, path, String(status)).inc();
|
|
httpRequestDuration.labels(method, path).observe(duration);
|
|
}
|
|
httpRequestsActive.dec();
|
|
})
|
|
.use(healthRoutes)
|
|
.use(statusRoutes)
|
|
.use(authRoutes)
|
|
.use(diseaseRoutes)
|
|
.use(classificationRoutes)
|
|
.use(diagnosisRoutes)
|
|
.use(expertRoutes)
|
|
.use(dashboardRoutes)
|
|
.listen(env.port);
|
|
|
|
console.log(`ZeaVis Edu API running at http://${app.server?.hostname}:${app.server?.port}`);
|
|
|
|
export type App = typeof app;
|