/home/techb158/cosmic-risk.abdallabala.com/src/domain
NameSizeModeActions
entitlements.js26980644editdlrm
integrations.js44380644editdlrm
permissions.js37300644editdlrm
risk-engine.js134520644editdlrm
Edit: /home/techb158/cosmic-risk.abdallabala.com/src/domain/entitlements.js (2698B)
const PLAN_LIMITS = { pilot: { users: 10, projects: 5, reportsPerMonth: 100, integrations: 4, storageMb: 1024 }, starter: { users: 5, projects: 3, reportsPerMonth: 25, integrations: 1, storageMb: 512 }, team: { users: 25, projects: 20, reportsPerMonth: 500, integrations: 4, storageMb: 10240 }, enterprise: { users: 1000, projects: 1000, reportsPerMonth: 100000, integrations: 100, storageMb: 102400 } }; const ACTIVE_SUBSCRIPTION_STATUSES = ["TRIALING", "ACTIVE"]; function getPlanLimits(planCode) { return PLAN_LIMITS[planCode] || PLAN_LIMITS.starter; } function subscriptionAllowsAccess(subscription, organization) { if (organization && organization.status === "SUSPENDED") return false; if (!subscription) return false; if (subscription.adminOverride) return true; return ACTIVE_SUBSCRIPTION_STATUSES.includes(subscription.status); } function buildEntitlements(subscription, organization) { const baseLimits = getPlanLimits(subscription ? subscription.planCode : organization ? organization.planCode : "starter"); return { active: subscriptionAllowsAccess(subscription, organization), source: subscription ? subscription.source : "MANUAL", status: subscription ? subscription.status : "SUSPENDED", planCode: subscription ? subscription.planCode : organization ? organization.planCode : "starter", limits: { users: subscription && subscription.userLimit ? subscription.userLimit : baseLimits.users, projects: subscription && subscription.projectLimit ? subscription.projectLimit : baseLimits.projects, reportsPerMonth: subscription && subscription.reportLimitMonthly ? subscription.reportLimitMonthly : baseLimits.reportsPerMonth, integrations: subscription && subscription.integrationLimit ? subscription.integrationLimit : baseLimits.integrations, storageMb: subscription && subscription.storageMbLimit ? subscription.storageMbLimit : baseLimits.storageMb } }; } function assertWithinLimit(entitlements, metric, currentCount, increment = 1) { if (!entitlements.active) { const error = new Error("Subscription is not active."); error.status = 402; throw error; } const limit = entitlements.limits[metric]; if (limit !== undefined && currentCount + increment > limit) { const error = new Error(`Plan limit exceeded for ${metric}.`); error.status = 402; error.details = { metric, currentCount, increment, limit }; throw error; } } module.exports = { PLAN_LIMITS, ACTIVE_SUBSCRIPTION_STATUSES, getPlanLimits, buildEntitlements, subscriptionAllowsAccess, assertWithinLimit };