import { Injectable, NestMiddleware, Logger } from "@nestjs/common"; import type { Request, Response, NextFunction } from "express"; @Injectable() export class TenantMiddleware implements NestMiddleware { private readonly logger = new Logger(TenantMiddleware.name); use(req: Request, _res: Response, next: NextFunction) { const tenantId = req.headers["x-tenant-id"] as string | undefined ?? req.user?.tenantId ?? this.extractFromSubdomain(req); if (tenantId) { (req as Request & { tenantId: string }).tenantId = tenantId; } next(); } private extractFromSubdomain(req: Request): string | undefined { const host = req.headers.host; if (!host) return undefined; const parts = host.split("."); if (parts.length >= 3) { return parts[0]; } return undefined; } }