/home/techb158/balavpn.abdallabala.com/src/domain
Edit: /home/techb158/balavpn.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
};