membros-react-sdk
Version:
React authentication library for Membros platform with subscription management and plan-based access control
84 lines • 4.48 kB
JavaScript
;
"use client";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.withAuthenticationRequired = withAuthenticationRequired;
const jsx_runtime_1 = require("react/jsx-runtime");
const react_1 = __importDefault(require("react"));
const AuthContext_1 = require("../AuthContext.cjs");
const LoadingScreen_1 = require("../components/LoadingScreen.cjs");
const InadimplentScreen_1 = require("../components/InadimplentScreen.cjs");
function withAuthenticationRequired(Component, options) {
return function AuthenticationRequired(props) {
const { user, isLoading, isAuthenticated, loginWithRedirect, hasActivePlan, adimplent, isLoggingOut } = (0, AuthContext_1.useAuth)();
const { onRedirecting, returnTo, requiredPlans, LoadingComponent = LoadingScreen_1.LoadingScreen, AuthComponent, InadimplentComponent = InadimplentScreen_1.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 (0, jsx_runtime_1.jsx)(LoadingComponent, {});
}
// Show loading while authentication state is being determined
if (isLoading) {
console.log('🔄 Showing loading - authentication state being determined');
return (0, jsx_runtime_1.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_1.default.useEffect(() => {
const timer = setTimeout(() => {
loginWithRedirect({
authorizationParams: {
redirect_uri: returnTo || window.location.href
}
});
}, 100);
return () => clearTimeout(timer);
}, []);
return (0, jsx_runtime_1.jsx)(RedirectingComponent, {});
}
if (AuthComponent) {
return (0, jsx_runtime_1.jsx)(AuthComponent, {});
}
react_1.default.useEffect(() => {
loginWithRedirect({
authorizationParams: {
redirect_uri: returnTo || window.location.href
}
});
}, []);
return (0, jsx_runtime_1.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 (0, jsx_runtime_1.jsx)(InadimplentComponent, {});
}
console.log('✅ User has required plan - granting access to component');
return (0, jsx_runtime_1.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 (0, jsx_runtime_1.jsx)(InadimplentComponent, {});
}
console.log('✅ User is adimplent - granting access to component');
return (0, jsx_runtime_1.jsx)(Component, { ...props });
};
}
//# sourceMappingURL=withAuthenticationRequired.js.map