{"version":3,"file":"DonumAccessGuard.D-RU4Iwl.mjs","names":["useState"],"sources":["https:/framerusercontent.com/modules/u2Mn7z5lT4TX6F1efafJ/9BAp2XnP14YmEtiiwUGE/DonumAccessGuard.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useEffect,useState}from\"react\";const API_ROOT=\"https://donum-dashboard-api.donumsport.workers.dev\";const STATUS_API=`${API_ROOT}/billing/status`;const HOME_PATH=\"/\";const PLAN_PATH=\"/plan\";const START_TRIAL_PATH=\"/start-trial\";const PENDING_CHECKOUT_KEY=\"donum_pending_checkout_v1\";const DELETED_USER_IDS_KEY=\"donum_deleted_user_ids_v1\";function readDeletedUserIds(){if(typeof window===\"undefined\")return[];try{const parsed=JSON.parse(localStorage.getItem(DELETED_USER_IDS_KEY)||\"[]\");return Array.isArray(parsed)?parsed.filter(item=>typeof item===\"string\"&&item):[];}catch{return[];}}function isDeletedUserId(userId){return Boolean(userId)&&readDeletedUserIds().includes(userId);}function rememberDeletedUserId(userId){if(typeof window===\"undefined\"||!userId)return;try{const next=Array.from(new Set([...readDeletedUserIds(),userId]));localStorage.setItem(DELETED_USER_IDS_KEY,JSON.stringify(next.slice(-20)));}catch{// Ignore storage failures.\n}}function clearPendingCheckoutIntent(){if(typeof window===\"undefined\")return;try{localStorage.removeItem(PENDING_CHECKOUT_KEY);}catch{// Ignore storage failures.\n}try{sessionStorage.removeItem(PENDING_CHECKOUT_KEY);}catch{// Ignore storage failures.\n}}function clearAiCoachClientState(userId=\"\"){if(typeof window===\"undefined\")return;try{window.__donumClearAiCoach?.();}catch{// Ignore cleanup failures.\n}if(!userId)return;try{const prefix=`donum-ai-coach-custom:${userId}`;for(const storage of[localStorage,sessionStorage]){for(let index=storage.length-1;index>=0;index-=1){const key=storage.key(index)||\"\";if(key===prefix||key.startsWith(`${prefix}:`)){storage.removeItem(key);}}}}catch{// Ignore cleanup failures.\n}}function isFramerCanvas(){try{return RenderTarget.current()===RenderTarget.canvas;}catch{return false;}}function isFramerEditorHost(){if(typeof window===\"undefined\")return false;return window.location.hostname.includes(\"framer.com\");}function runtimeDisabled(){return isFramerCanvas()||isFramerEditorHost();}function normalizePath(path){const clean=path.replace(/\\/+$/,\"\");return clean||\"/\";}function navigate(path){if(typeof window===\"undefined\")return;if(normalizePath(window.location.pathname)===normalizePath(path))return;window.location.replace(path);}function readCurrentUser(){if(typeof window===\"undefined\")return null;const direct=window.__donumCurrentUser;if(direct?.id){if(isDeletedUserId(direct.id)){window.__donumCurrentUser=null;return null;}return direct;}try{const stored=JSON.parse(sessionStorage.getItem(\"donum-current-user\")||\"null\");if(stored?.id){if(isDeletedUserId(stored.id)){sessionStorage.removeItem(\"donum-current-user\");return null;}return stored;}return null;}catch{return null;}}function clearDeletedOrInvalidSession(deletedUserId=\"\"){if(typeof window===\"undefined\")return;rememberDeletedUserId(deletedUserId);clearPendingCheckoutIntent();clearAiCoachClientState(deletedUserId);try{window.__donumCurrentUser=null;}catch{// Ignore cleanup failures.\n}try{sessionStorage.removeItem(\"donum-current-user\");}catch{// Ignore cleanup failures.\n}try{window.dispatchEvent(new CustomEvent(\"donum:user-cleared\"));}catch{// Ignore cleanup failures.\n}}export default function DonumAccessGuard(props){const{enabled,showStatus,planPath,homePath}=props;const[message,setMessage]=useState(\"Checking access…\");useEffect(()=>{if(!enabled||runtimeDisabled()||typeof window===\"undefined\"){return;}let cancelled=false;let controller=null;async function checkAccess(){const user=readCurrentUser();if(!user?.id){setMessage(\"Redirecting…\");navigate(homePath||HOME_PATH);return;}// /plan is now the single billing entry point. Any old checkout\n// intent should be cleared instead of routing users to /start-trial.\nclearPendingCheckoutIntent();controller?.abort();controller=new AbortController;try{const response=await fetch(`${STATUS_API}?userId=${encodeURIComponent(user.id)}&_=${Date.now()}`,{method:\"GET\",headers:{Accept:\"application/json\"},cache:\"no-store\",signal:controller.signal});const data=await response.json().catch(()=>null);if(cancelled||controller.signal.aborted)return;if(!response.ok){setMessage(\"Plan status could not be checked.\");return;}if(data?.accountDeletionCompleted){clearDeletedOrInvalidSession(user.id);navigate(homePath||HOME_PATH);return;}if(data?.accountDeletionPending){setMessage(\"Redirecting to deletion status…\");navigate(\"/account-deletion-pending\");return;}if(data?.has_access===true){setMessage(\"\");return;}setMessage(\"Redirecting to plan…\");navigate(planPath||PLAN_PATH);}catch(error){if(cancelled||error?.name===\"AbortError\")return;setMessage(\"Plan status could not be checked.\");}}function handleUserReady(){void checkAccess();}window.addEventListener(\"donum:user-ready\",handleUserReady);const timers=[window.setTimeout(()=>void checkAccess(),80),window.setTimeout(()=>void checkAccess(),450),window.setTimeout(()=>void checkAccess(),1200)];return()=>{cancelled=true;controller?.abort();window.removeEventListener(\"donum:user-ready\",handleUserReady);timers.forEach(timer=>window.clearTimeout(timer));};},[enabled,planPath,homePath]);if(!showStatus||!message||runtimeDisabled())return null;return /*#__PURE__*/_jsx(\"div\",{style:{position:\"fixed\",zIndex:2147483647,inset:0,display:\"grid\",placeItems:\"center\",padding:18,background:\"rgba(10,10,10,.72)\",backdropFilter:\"blur(8px)\",color:\"#F5F5F7\",fontFamily:'\"Satoshi\", system-ui, sans-serif',fontSize:14,fontWeight:500,textAlign:\"center\"},children:/*#__PURE__*/_jsx(\"div\",{style:{width:\"min(420px, 100%)\",padding:\"18px 20px\",borderRadius:18,border:\"1px solid #29292F\",background:\"#111114\",boxShadow:\"0 28px 100px rgba(0,0,0,.46)\"},children:message})});}DonumAccessGuard.defaultProps={enabled:true,showStatus:true,planPath:PLAN_PATH,startTrialPath:START_TRIAL_PATH,homePath:HOME_PATH};addPropertyControls(DonumAccessGuard,{enabled:{type:ControlType.Boolean,title:\"Enabled\",defaultValue:true},showStatus:{type:ControlType.Boolean,title:\"Status\",defaultValue:true},planPath:{type:ControlType.String,title:\"Plan\",defaultValue:PLAN_PATH},startTrialPath:{type:ControlType.String,title:\"Start Trial\",defaultValue:START_TRIAL_PATH},homePath:{type:ControlType.String,title:\"Home\",defaultValue:HOME_PATH}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"DonumAccessGuard\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./DonumAccessGuard.map"],"mappings":"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"}