import { OpenAPIHono } from "@hono/zod-openapi"; import { notFound, serveEmojiFavicon } from "stoker/middlewares"; import { defaultHook } from "stoker/openapi"; import { pinoLogger } from "@/middlewares/pino-logger.ts"; import { otelTracing } from "@/middlewares/opentelemetry.ts"; import env from "@/env.ts"; import type { AppBindings, AppOpenAPI } from "@/lib/types.ts"; import { initOpenTelemetry } from "@/lib/otel.ts"; export function createRouter() { return new OpenAPIHono({ strict: false, defaultHook, }); } export default function createApp() { // Initialize OpenTelemetry before creating the app initOpenTelemetry(); const app = createRouter(); // Add OpenTelemetry tracing if enabled if (env.OTEL_ENABLED) { app.use( "*", otelTracing({ additionalAttributes: { "service.name": env.OTEL_SERVICE_NAME || "toolshed", "service.version": "1.0.0", }, }), ); } app.use(serveEmojiFavicon("🪓")); app.use(pinoLogger()); app.notFound(notFound); return app; } export function createTestApp(router: R) { return createApp().route("/", router); }