integratedhub/services/authRouteConfig.ts
2026-02-14 02:20:19 +00:00

127 lines
2.8 KiB
TypeScript

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" },
},
];