import type { Role } from "./authTypes.ts"; export type AuthLevel = "public" | "optional" | "required"; export interface AuthRequirement { level: AuthLevel; roles?: Role[]; methods?: string[]; unauthorizedRedirect?: string; } export interface AuthRouteRule { name: string; pattern: RegExp; requirement: AuthRequirement; } export const authRouteRules: AuthRouteRule[] = [ { name: "auth", pattern: /^\/auth(?:\/|$)/, requirement: { level: "public" }, }, { name: "health", pattern: /^\/health$/, requirement: { level: "public" }, }, { name: "static", pattern: /^\/(?:favicon\.ico|robots\.txt)$/, requirement: { level: "public" }, }, { name: "blob-audio", pattern: /^\/api\/audio-blob\//, requirement: { level: "public" }, }, { name: "blob-image", pattern: /^\/api\/image-blob\//, requirement: { level: "public" }, }, { name: "ai-image-file", pattern: /^\/api\/ai-images\/file\//, requirement: { level: "public" }, }, { name: "onboarding-post", pattern: /^\/onboarding\/?$/, requirement: { level: "required", methods: ["POST"] }, }, { name: "onboarding-get", pattern: /^\/onboarding\/?$/, requirement: { level: "optional", methods: ["GET"] }, }, { name: "tenant-invite", pattern: /^\/tenant\/invite\//, requirement: { level: "optional", methods: ["GET", "POST"] }, }, { name: "landlord-onboarding", pattern: /^\/landlord\/onboarding(?:\/|$)/, requirement: { level: "required" }, }, { name: "admin", pattern: /^\/admin(?:\/|$)/, requirement: { level: "required", roles: ["admin"], unauthorizedRedirect: "/unauthorized", }, }, { name: "landlord", pattern: /^\/landlord(?:\/|$)/, requirement: { level: "required", roles: ["landlord", "admin"], unauthorizedRedirect: "/unauthorized", }, }, { name: "tenant", pattern: /^\/tenant(?:\/|$)/, requirement: { level: "required", roles: ["tenant", "admin"], unauthorizedRedirect: "/unauthorized", }, }, { name: "calendar", pattern: /^\/calendar(?:\/|$)/, requirement: { level: "required" }, }, { name: "user-profile", pattern: /^\/user-profile(?:\/|$)/, requirement: { level: "required" }, }, { name: "resync", pattern: /^\/resync(?:\/|$)/, requirement: { level: "required" }, }, { name: "api-tenant", pattern: /^\/api\/tenant(?:\/|$)/, requirement: { level: "required", roles: ["tenant", "admin"] }, }, { name: "api-landlord", pattern: /^\/api\/landlord(?:\/|$)/, requirement: { level: "required", roles: ["landlord", "admin"] }, }, { name: "api", pattern: /^\/api(?:\/|$)/, requirement: { level: "required" }, }, ];