membros-react-sdk
Version:
React authentication library for Membros platform with subscription management and plan-based access control
78 lines • 3.94 kB
JavaScript
"use client";
import { jsx as _jsx } from "react/jsx-runtime";
import React from "react";
import { useAuth } from "../AuthContext.esm.js";
import { LoadingScreen } from "../components/LoadingScreen.esm.js";
import { InadimplentScreen } from "../components/InadimplentScreen.esm.js";
export function withAuthenticationRequired(Component, options) {
return function AuthenticationRequired(props) {
const { user, isLoading, isAuthenticated, loginWithRedirect, hasActivePlan, adimplent, isLoggingOut } = useAuth();
const { onRedirecting, returnTo, requiredPlans, LoadingComponent = LoadingScreen, AuthComponent, InadimplentComponent = InadimplentScreen } = options || {};
console.log('=== withAuthenticationRequired Debug ===');
console.log('isLoading:', isLoading);
console.log('isAuthenticated:', isAuthenticated);
console.log('user email:', user === null || user === void 0 ? void 0 : user.email);
console.log('requiredPlans:', requiredPlans);
// If logging out, show loading and prevent further action
if (isLoggingOut) {
console.log('🚪 User is logging out - showing loading');
return _jsx(LoadingComponent, {});
}
// Show loading while authentication state is being determined
if (isLoading) {
console.log('🔄 Showing loading - authentication state being determined');
return _jsx(LoadingComponent, {});
}
// If not authenticated, redirect to login or show auth component
if (!isAuthenticated) {
console.log('🚫 User not authenticated - redirecting to login');
if (onRedirecting) {
const RedirectingComponent = onRedirecting;
React.useEffect(() => {
const timer = setTimeout(() => {
loginWithRedirect({
authorizationParams: {
redirect_uri: returnTo || window.location.href
}
});
}, 100);
return () => clearTimeout(timer);
}, []);
return _jsx(RedirectingComponent, {});
}
if (AuthComponent) {
return _jsx(AuthComponent, {});
}
React.useEffect(() => {
loginWithRedirect({
authorizationParams: {
redirect_uri: returnTo || window.location.href
}
});
}, []);
return _jsx(LoadingComponent, {});
}
console.log('✅ User is authenticated, checking subscription requirements...');
// Check subscription requirements
if (requiredPlans && requiredPlans.length > 0) {
console.log('🔍 Checking required plans:', requiredPlans);
const hasRequiredPlan = hasActivePlan(requiredPlans);
console.log('📋 hasActivePlan result:', hasRequiredPlan);
if (!hasRequiredPlan) {
console.log('❌ User does not have required plan - showing subscription required page');
return _jsx(InadimplentComponent, {});
}
console.log('✅ User has required plan - granting access to component');
return _jsx(Component, { ...props });
}
// No specific plans required - use legacy adimplent check
console.log('🔍 No specific plans required, checking legacy adimplent status:', adimplent);
if (!adimplent) {
console.log('❌ User is not adimplent - showing subscription required page');
return _jsx(InadimplentComponent, {});
}
console.log('✅ User is adimplent - granting access to component');
return _jsx(Component, { ...props });
};
}
//# sourceMappingURL=withAuthenticationRequired.js.map