Edit: /tmp/tsx-0/17887-036aefc3818139cee9979169961c1557fed5a94a (9264B)
{"code":"__filename=\"/opt/canhelp/apps/api/src/lib/referral.ts\";(()=>{\n\"use strict\";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __name=(target,value)=>__defProp(target,\"name\",{value,configurable:true});var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:true})};var __copyProps=(to,from,except,desc)=>{if(from&&typeof from===\"object\"||typeof from===\"function\"){for(let key of __getOwnPropNames(from))if(!__hasOwnProp.call(to,key)&&key!==except)__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return to};var __toCommonJS=mod=>__copyProps(__defProp({},\"__esModule\",{value:true}),mod);var referral_exports={};__export(referral_exports,{applyPendingReferral:()=>applyPendingReferral,applyReferral:()=>applyReferral,generateReferralCode:()=>generateReferralCode,getReferralSettings:()=>getReferralSettings});module.exports=__toCommonJS(referral_exports);var import_drizzle_orm=require(\"drizzle-orm\");var import_db=require(\"../db.js\");var import_db2=require(\"@canhelp/db\");var import_notif=require(\"./notif.js\");var import_email=require(\"./email.js\");var import_plan_history=require(\"./plan-history.js\");const TIER_ORDER={free:0,pro:1,ultimate:2};function generateReferralCode(){const chars=\"ABCDEFGHJKLMNPQRSTUVWXYZ23456789\";let code=\"\";for(let i=0;i<8;i++){code+=chars[Math.floor(Math.random()*chars.length)]}return code}__name(generateReferralCode,\"generateReferralCode\");async function getReferralSettings(){const rows=await import_db.db.select().from(import_db2.settings).where((0,import_drizzle_orm.gte)(import_db2.settings.key,\"referral_\"));const map={};for(const row of rows){if(row.key.startsWith(\"referral_\"))map[row.key]=row.value}if(map[\"referral_enabled\"]!==\"true\")return null;const planId=map[\"referral_plan_id\"]||map[\"referral_customer_plan_id\"]||map[\"referral_specialist_plan_id\"]||\"\";const days=Number(map[\"referral_days\"]||map[\"referral_customer_days\"]||map[\"referral_specialist_days\"]||\"0\");return{enabled:true,reward:planId&&days>0?{planId,days}:null}}__name(getReferralSettings,\"getReferralSettings\");async function applyReferral(refereeId,refCode){const cfg=await getReferralSettings();if(!cfg)return;const[referrer]=await import_db.db.select({user:import_db2.users,planRole:import_db2.plans.role}).from(import_db2.users).leftJoin(import_db2.plans,(0,import_drizzle_orm.eq)(import_db2.users.planId,import_db2.plans.id)).where((0,import_drizzle_orm.eq)(import_db2.users.referralCode,refCode)).limit(1);const referrerUser=referrer?.user;if(!referrerUser||referrerUser.id===refereeId)return;const existing=await import_db.db.select({id:import_db2.referralRewards.id}).from(import_db2.referralRewards).where((0,import_drizzle_orm.eq)(import_db2.referralRewards.refereeId,refereeId)).limit(1);if(existing.length)return;const rewardCfg=cfg.reward;if(!rewardCfg)return;const[rewardPlan]=await import_db.db.select().from(import_db2.plans).where((0,import_drizzle_orm.eq)(import_db2.plans.id,rewardCfg.planId)).limit(1);if(!rewardPlan)return;let assignPlanId=rewardCfg.planId;if(referrerUser.planId){const[currentPlan]=await import_db.db.select({tier:import_db2.plans.tier}).from(import_db2.plans).where((0,import_drizzle_orm.eq)(import_db2.plans.id,referrerUser.planId)).limit(1);if(currentPlan){const currentTier=TIER_ORDER[currentPlan.tier]??0;const rewardTier=TIER_ORDER[rewardPlan.tier]??0;if(currentTier>=rewardTier){assignPlanId=referrerUser.planId}}}const now=new Date;const base=referrerUser.planExpiresAt&&referrerUser.planExpiresAt>now?referrerUser.planExpiresAt:now;const newExpiry=new Date(base.getTime()+rewardCfg.days*24*60*60*1e3);await import_db.db.update(import_db2.users).set({planId:assignPlanId,planExpiresAt:newExpiry,updatedAt:new Date}).where((0,import_drizzle_orm.eq)(import_db2.users.id,referrerUser.id));await import_db.db.update(import_db2.users).set({referredBy:referrerUser.id,updatedAt:new Date}).where((0,import_drizzle_orm.eq)(import_db2.users.id,refereeId));const[reward]=await import_db.db.insert(import_db2.referralRewards).values({referrerId:referrerUser.id,refereeId,planId:assignPlanId,daysAdded:rewardCfg.days,expiresAt:newExpiry}).returning();let planName=rewardPlan.name;if(assignPlanId!==rewardCfg.planId){const[assignedPlan]=await import_db.db.select({name:import_db2.plans.name}).from(import_db2.plans).where((0,import_drizzle_orm.eq)(import_db2.plans.id,assignPlanId)).limit(1);if(assignedPlan)planName=assignedPlan.name}(0,import_plan_history.logPlanHistory)({userId:referrerUser.id,event:\"referral_reward\",planId:assignPlanId,planName,previousPlanId:referrerUser.planId,previousPlanName:referrerUser.planId===assignPlanId?planName:rewardPlan.name,expiresAt:newExpiry,daysAdded:rewardCfg.days,referralRewardId:reward.id});const loc=referrerUser.locale===\"en\"||referrerUser.locale===\"ru\"?referrerUser.locale:\"el\";await Promise.all([(0,import_notif.notifyReferralReward)(referrerUser.id,rewardCfg.days,planName,reward.id),(0,import_email.emailReferralReward)({to:referrerUser.email,name:referrerUser.name,days:rewardCfg.days,planName,locale:loc})])}__name(applyReferral,\"applyReferral\");async function applyPendingReferral(userId){const[referee]=await import_db.db.select({id:import_db2.users.id,referredBy:import_db2.users.referredBy}).from(import_db2.users).where((0,import_drizzle_orm.eq)(import_db2.users.id,userId)).limit(1);if(!referee?.referredBy)return;const pending=referee.referredBy;if(pending.length>12)return;await applyReferral(userId,pending)}__name(applyPendingReferral,\"applyPendingReferral\");0&&(module.exports={applyPendingReferral,applyReferral,generateReferralCode,getReferralSettings});\n})()\n","warnings":[],"map":{"version":3,"mappings":"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","names":["import_db","settingsTable"],"ignoreList":[],"sources":["/opt/canhelp/apps/api/src/lib/referral.ts"],"sourcesContent":[null]}}