import type { Context, Next } from "hono"; import { HTTPException } from "hono/http-exception"; import * as jwt from "hono/jwt"; const JWT_SECRET = process.env.JWT_SECRET || "75396f4ba17e0012d4511b8d4a5bae11c51008a3"; export const generateToken = async (data: any) => { return jwt.sign(data, JWT_SECRET); }; export const verifyToken = async (token: string) => { return jwt.verify(token, JWT_SECRET); }; export const authMiddleware = async (ctx: Context, next: Next) => { const authHeader = ctx.req.raw.headers.get("Authorization"); const queryToken = ctx.req.query("token"); let token; if (authHeader) { const parts = authHeader.split(/\s+/); if (parts.length !== 2) { throw new HTTPException(401, { message: "Unauthorized!" }); } else { token = parts[1]; } } if (queryToken) { token = queryToken; } if (!token) { throw new HTTPException(401, { message: "Unauthorized!" }); } let payload; try { payload = await jwt.verify(token, JWT_SECRET); } catch (e) {} if (!payload) { throw new HTTPException(401, { message: "Unauthorized!" }); } ctx.set("jwtPayload", payload); await next(); };