/**
 * src/auth/middleware.ts
 * وسيط المصادقة — التحقق من هوية المستخدم وصلاحيات المستأجر
 */
import type { FastifyInstance, FastifyRequest, FastifyReply } from 'fastify';
import type { User } from '@supabase/supabase-js';
import { type Tenant } from '../tenants/manager.js';
declare module 'fastify' {
    interface FastifyRequest {
        user: User | null;
        tenant: Tenant | null;
    }
}
/**
 * تسجيل decorators على Fastify — يجب استدعاؤها مرة واحدة عند البدء
 */
export declare function registerAuthDecorators(app: FastifyInstance): void;
/**
 * authMiddleware — التحقق الإلزامي من الهوية
 * يرفض الطلب بـ 401 إذا لم يكن هناك توكن صالح
 *
 * In device mode, the dashboard sends `Authorization: Bearer device` (or any
 * non-empty token) and we resolve the owner from the local owner.id file
 * instead of validating against Supabase Auth (which isn't running locally).
 */
export declare function authMiddleware(request: FastifyRequest, reply: FastifyReply): Promise<void>;
/**
 * optionalAuth — التحقق الاختياري من الهوية
 * لا يرفض الطلب إذا لم يكن هناك توكن، لكن يرفق بيانات المستخدم إذا وُجدت
 */
export declare function optionalAuth(request: FastifyRequest, _reply: FastifyReply): Promise<void>;
/**
 * Helper for any code path that needs the current user without going through
 * Fastify (e.g. background jobs, CLI). In device mode this skips the JWT path.
 *
 * Note: passes the in-process owner token because background jobs run as the
 * owner. External request paths still need the bearer to come from the wire.
 */
export declare function getDeviceOwnerOrNull(): User | null;
/**
 * tenantMiddleware — التحقق من ملكية المستأجر
 * يتطلب authMiddleware قبله — يتحقق أن المستخدم يملك المستأجر المطلوب
 */
export declare function tenantMiddleware(request: FastifyRequest, reply: FastifyReply): Promise<void>;
//# sourceMappingURL=middleware.d.ts.map