![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/lavocat.ca/public_html/src/lib/ |
import Stripe from 'stripe';
// Initialize Stripe
export const stripe = new Stripe(process.env.STRIPE_SECRET_KEY || '');
// Society tier definitions
export interface SocietyTier {
name: string;
minXp: number;
minDegrees: number;
platformFeeDiscount: number;
discountedRate: number;
benefits: string[];
}
export const SOCIETY_TIERS: SocietyTier[] = [
{
name: 'Apprentice',
minXp: 0,
minDegrees: 0,
platformFeeDiscount: 0,
discountedRate: 0.10,
benefits: ['Basic platform access', 'Standard support']
},
{
name: 'Fellow',
minXp: 100,
minDegrees: 1,
platformFeeDiscount: 0.05,
discountedRate: 0.09,
benefits: ['5% platform fee discount', 'Priority support', 'Access to Fellow resources']
},
{
name: 'Brother',
minXp: 500,
minDegrees: 2,
platformFeeDiscount: 0.10,
discountedRate: 0.08,
benefits: ['10% platform fee discount', 'Exclusive Brother resources', 'Mentorship opportunities']
},
{
name: 'Master',
minXp: 1000,
minDegrees: 3,
platformFeeDiscount: 0.15,
discountedRate: 0.07,
benefits: ['15% platform fee discount', 'Master-level resources', 'Leadership opportunities']
},
{
name: 'Grand Master',
minXp: 2500,
minDegrees: 4,
platformFeeDiscount: 0.20,
discountedRate: 0.06,
benefits: ['20% platform fee discount', 'Grand Master privileges', 'System governance rights']
},
{
name: 'Sovereign',
minXp: 5000,
minDegrees: 5,
platformFeeDiscount: 0.25,
discountedRate: 0.05,
benefits: ['25% platform fee discount', 'Sovereign privileges', 'Full system access']
}
];
// Get user's society tier based on XP and degrees
export function getSocietyTier(degrees: any[] = [], xpPoints: number = 0): SocietyTier | null {
const completedDegrees = degrees.filter(d => d.ceremonyCompleted).length;
// Find the highest tier the user qualifies for
for (let i = SOCIETY_TIERS.length - 1; i >= 0; i--) {
const tier = SOCIETY_TIERS[i];
if (xpPoints >= tier.minXp && completedDegrees >= tier.minDegrees) {
return tier;
}
}
return null;
}
// Calculate platform fee with society discount
export function calculatePlatformFee(amount: number, userTier: SocietyTier | null): number {
const baseFee = amount * parseFloat(process.env.DEFAULT_PLATFORM_FEE || '0.10');
if (!userTier) {
return baseFee;
}
return baseFee * (1 - userTier.platformFeeDiscount);
}
// Calculate lawyer payout amount
export function calculateLawyerPayout(amount: number, platformFee: number): number {
return amount - platformFee;
}
// Calculate society discount saved
export function calculateSocietyDiscount(amount: number, userTier: SocietyTier | null): number {
const baseFee = amount * parseFloat(process.env.DEFAULT_PLATFORM_FEE || '0.10');
if (!userTier) {
return 0;
}
return baseFee * userTier.platformFeeDiscount;
}
// Validate Stripe configuration
export function validateStripeConfig(): boolean {
const secretKey = process.env.STRIPE_SECRET_KEY;
const publishableKey = process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY;
return !!(secretKey &&
publishableKey &&
secretKey !== 'sk_test_your_stripe_secret_key_here' &&
publishableKey !== 'pk_test_your_stripe_publishable_key_here');
}