import { createClient, type User } from "@supabase/supabase-js"; import type { Context, Next } from "hono"; import nodemailer from "nodemailer"; // Create authentication middleware export const authMiddleware = async (c: Context, next: Next) => { const supabase = c.get("supabase"); // Extract Bearer token from Authorization header const authHeader = c.req.header("Authorization"); if (!authHeader || !authHeader.startsWith("Bearer ")) { return c.json({ error: "Missing or invalid authorization header" }, 401); } const token = authHeader.substring(7); // Remove "Bearer " prefix const { data: { user }, error, } = await supabase.auth.getUser(token); if (error || !user) { return c.json({ error: "Invalid or expired token" }, 401); } const userTyped = user as User; c.set("user", userTyped); await next(); }; export const supabaseMiddleware = async (c: Context, next: Next) => { const supabase = createClient( process.env.SUPABASE_URL as string, process.env.SUPABASE_SERVICE_ROLE_KEY as string ); c.set("supabase", supabase); await next(); }; export const emailMiddleware = async (c: Context, next: Next) => { const transporter = nodemailer.createTransport({ host: "smtp.gmail.com", port: 465, secure: true, auth: { user: process.env.EMAIL_USER, pass: process.env.EMAIL_KEY, }, }); c.set("transporter", transporter); await next(); };