skailan-core
Version:
Servicio de autenticación y multitenancy para Skailan.
74 lines • 2.51 kB
TypeScript
import { Request, Response, NextFunction } from "express";
import { PrismaClient } from "@prisma/client";
export interface AuthenticatedRequest extends Request {
user?: {
id: string;
email: string;
name?: string;
};
organization?: {
id: string;
name: string;
slug: string;
subdomain: string | null;
domain: string | null;
createdAt: Date;
updatedAt: Date;
deletedAt: Date | null;
isBlocked: boolean;
trialEnd?: Date;
isTrialActive: boolean;
paymentStatus: string;
};
}
export interface PaymentAccessOptions {
requireActivePayment?: boolean;
requireTrialOrPayment?: boolean;
allowedFeatures?: string[];
checkUserLimits?: boolean;
redirectToPayment?: boolean;
}
export declare class PaymentAccessMiddleware {
private static instance;
private prisma;
private trialService;
private productService;
private constructor();
static getInstance(prisma: PrismaClient): PaymentAccessMiddleware;
/**
* Middleware principal para controlar acceso basado en pagos
*/
checkPaymentAccess(options?: PaymentAccessOptions): (req: AuthenticatedRequest, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>;
/**
* Middleware para verificar trial activo
*/
checkTrialAccess(): (req: AuthenticatedRequest, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>;
/**
* Middleware para verificar suscripción activa
*/
checkActiveSubscription(): (req: AuthenticatedRequest, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>;
/**
* Middleware para verificar características específicas
*/
checkFeatureAccess(featureCode: string): (req: AuthenticatedRequest, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>;
/**
* Verifica si la organización tiene una suscripción activa
*/
private hasActiveSubscription;
/**
* Verifica si la organización tiene acceso a las características especificadas
*/
private checkFeatures;
/**
* Verifica los límites de usuarios
*/
private checkUserLimits;
}
declare global {
namespace Express {
interface Request {
trialStatus?: any;
}
}
}
//# sourceMappingURL=PaymentAccessMiddleware.d.ts.map