{"version":3,"file":"AuthSystem.bVbHGLjZ.mjs","names":["useRef","useState","_Fragment"],"sources":["https:/framerusercontent.com/modules/UntDrCYqC6TYHTecDqhv/ouarbIyCbITBj0U4QpmG/AuthSystem.js"],"sourcesContent":["/**\n * AuthSystem.tsx\n * 책잇아트(CheckitArt) 통합 인증 시스템\n * v4.4 | 2026-06-23 - withAuthPage: useState 초기값을 URL 파라미터로 즉시 계산 (마운트 전 깨뱡임 제거)\n *\n * 오버라이드 목록:\n *   withGoogleLogin      — 구글 로그인 버튼\n *   withNaverLogin       — 네이버 로그인 버튼\n *   withKakaoLogin       — 카카오 로그인 버튼\n *   withAppleLogin       — 애플 로그인 버튼\n *   withEmailInput       — ID(e-mail) 입력 필드 (X버튼 포함)\n *   withPasswordInput    — Pass Word 입력 필드 (X버튼 포함, type=password)\n *   withEmailLogin       — 이메일/비밀번호 로그인 버튼\n *   withLogout           — 로그아웃/로그인 버튼\n *   withNavbarState      — 네비게이션 바 컨테이너\n *   withAuthGuard        — /challenge, /tutorial, /inventory 페이지 Main 레이어\n *   withAuthPage         — /auth 페이지 최상위 레이어 (SNS 콜백 시 페이지 숨김)\n */import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{useState,useEffect,useRef}from\"react\";function cfg(key){if(typeof window!==\"undefined\"&&window.CHECKIT_CONFIG?.[key]){return window.CHECKIT_CONFIG[key];}console.error(`[CHECKIT_CONFIG] 키 누락: ${key}`);return\"\";}const SUPABASE_URL=()=>cfg(\"SUPABASE_URL\");const SUPABASE_ANON_KEY=()=>cfg(\"SUPABASE_ANON_KEY\");const SUPABASE_EDGE_URL=()=>`${cfg(\"SUPABASE_URL\")}/functions/v1`;const SITE_URL=typeof window!==\"undefined\"?window.location.origin:\"https://check-it.art\";const PAGES={home:`${SITE_URL}/`,challenge:`${SITE_URL}/challenge`,plan2:`${SITE_URL}/plan-2`,auth:`${SITE_URL}/auth`,signup:`${SITE_URL}/signup`};// ─────────────────────────────────────────────\n// 쿠키 헬퍼\n// ─────────────────────────────────────────────\nconst COOKIE_MAX_AGE=60*60*24*30// 30일\n;function setCookie(name,value){document.cookie=`${name}=${encodeURIComponent(value)}; path=/; SameSite=Lax; max-age=${COOKIE_MAX_AGE}`;}function getCookie(name){if(typeof document===\"undefined\")return\"\";const match=document.cookie.split(\"; \").find(row=>row.startsWith(name+\"=\"));return match?decodeURIComponent(match.split(\"=\")[1]):\"\";}function deleteCookie(name){document.cookie=`${name}=; path=/; SameSite=Lax; max-age=0`;}// ─────────────────────────────────────────────\n// 세션 관리\n// ─────────────────────────────────────────────\nconst Session={set:data=>{setCookie(\"checkit_uid\",data.uid);if(data.email)setCookie(\"checkit_email\",data.email);setCookie(\"checkit_isPaid\",String(data.isPaid));if(data.planKey)setCookie(\"checkit_planKey\",data.planKey);setCookie(\"isVerified\",\"true\");window.dispatchEvent(new Event(\"storage\"));},get:()=>({uid:getCookie(\"checkit_uid\"),email:getCookie(\"checkit_email\"),isPaid:getCookie(\"checkit_isPaid\")===\"true\",planKey:getCookie(\"checkit_planKey\")}),clear:()=>{[\"checkit_uid\",\"checkit_email\",\"checkit_isPaid\",\"checkit_planKey\",\"checkit_access_token\",\"isVerified\"].forEach(deleteCookie);window.dispatchEvent(new Event(\"storage\"));},hasSocialCallback:()=>{if(typeof window===\"undefined\")return false;const params=new URLSearchParams(window.location.search);const provider=params.get(\"provider\");return!!(provider&&[\"google\",\"kakao\",\"naver\",\"apple\"].includes(provider));}};// ─────────────────────────────────────────────\n// 전역 이메일/비밀번호 상태 (오버라이드 간 공유)\n// ─────────────────────────────────────────────\nlet authEmail=\"\";let authPassword=\"\";// ─────────────────────────────────────────────\n// Supabase plan 업데이트\n// ─────────────────────────────────────────────\nasync function updateSupabasePlan(uid,planKey){await fetch(`${SUPABASE_URL()}/rest/v1/users?uid=eq.${encodeURIComponent(uid)}`,{method:\"PATCH\",headers:{apikey:SUPABASE_ANON_KEY(),Authorization:`Bearer ${SUPABASE_ANON_KEY()}`,\"Content-Type\":\"application/json\",Prefer:\"return=representation\"},body:JSON.stringify({plan:planKey})});}// ─────────────────────────────────────────────\n// 소셜 로그인 콜백 처리\n// ─────────────────────────────────────────────\nfunction processSocialCallback(){if(typeof window===\"undefined\")return;const params=new URLSearchParams(window.location.search);const provider=params.get(\"provider\");const email=params.get(\"email\");const uid=params.get(\"uid\");const isPaid=params.get(\"isPaid\")===\"true\";const planKey=params.get(\"planKey\")||\"\";if(!provider||!uid)return;if(![\"google\",\"kakao\",\"naver\",\"apple\"].includes(provider))return;window.history.replaceState({},\"\",window.location.pathname);Session.set({uid,email,isPaid,planKey});if(isPaid){window.location.replace(PAGES.challenge);}else{window.location.replace(PAGES.plan2);}}// ─────────────────────────────────────────────\n// 결제 완료 콜백 처리\n// ─────────────────────────────────────────────\nasync function processPaymentCallback(){if(typeof window===\"undefined\")return;const params=new URLSearchParams(window.location.search);if(params.get(\"payment\")!==\"success\")return;const planKey=params.get(\"planKey\")||\"monthly-kr\";window.history.replaceState({},\"\",window.location.pathname);const session=Session.get();if(!session.uid)return;Session.set({uid:session.uid,email:session.email,isPaid:true,planKey});try{await updateSupabasePlan(session.uid,planKey);}catch(err){console.error(\"Supabase plan 업데이트 오류:\",err);}// 결제 완료 후 /signup으로 이동 (planKey URL 파라미터로 전달)\nwindow.location.replace(`${PAGES.signup}?planKey=${encodeURIComponent(planKey)}`);}// 페이지 로드 시 자동 실행\nif(typeof window!==\"undefined\"){processSocialCallback();processPaymentCallback();}// ─────────────────────────────────────────────\n// X버튼 주입 헬퍼\n// ─────────────────────────────────────────────\nfunction injectClearButton(el,key){const wrapper=el.parentElement;if(!wrapper)return;if(wrapper.querySelector(`[data-auth-clear=\"${key}\"]`))return;const btn=document.createElement(\"button\");btn.type=\"button\";btn.setAttribute(\"data-auth-clear\",key);btn.textContent=\"✕\";btn.style.cssText=`\n        position: absolute; right: 8px; top: 50%;\n        transform: translateY(-50%); background: none; border: none;\n        cursor: pointer; font-size: 14px; color: #999; padding: 4px;\n        display: none; z-index: 10; line-height: 1;\n    `;if(getComputedStyle(wrapper).position===\"static\"){wrapper.style.position=\"relative\";}wrapper.appendChild(btn);const updateBtn=()=>{btn.style.display=el.value.length>0?\"block\":\"none\";};el.addEventListener(\"input\",updateBtn);updateBtn();btn.addEventListener(\"click\",()=>{const setter=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,\"value\")?.set;setter?.call(el,\"\");el.dispatchEvent(new Event(\"input\",{bubbles:true}));btn.style.display=\"none\";el.focus();if(key===\"email\")authEmail=\"\";if(key===\"password\")authPassword=\"\";});}// ─────────────────────────────────────────────\n// 이메일/비밀번호 로그인 실행 함수\n// ─────────────────────────────────────────────\nasync function doEmailLogin(){const email=authEmail.trim();const password=authPassword;if(!email||!password){alert(\"이메일과 비밀번호를 입력해 주세요.\");return false;}try{// Supabase Auth 이메일 로그인\nconst res=await fetch(`${SUPABASE_URL()}/auth/v1/token?grant_type=password`,{method:\"POST\",headers:{apikey:SUPABASE_ANON_KEY(),\"Content-Type\":\"application/json\"},body:JSON.stringify({email,password})});const json=await res.json();if(!res.ok||!json.user?.id){const msg=json.error_description||json.msg||\"이메일 또는 비밀번호가 올바르지 않습니다.\";alert(msg);return false;}const uid=json.user.id;const accessToken=json.access_token;// users 테이블에서 isPaid, planKey 조회\nconst userRes=await fetch(`${SUPABASE_URL()}/rest/v1/users?uid=eq.${encodeURIComponent(uid)}&select=plan,account_status&limit=1`,{headers:{apikey:SUPABASE_ANON_KEY(),Authorization:`Bearer ${accessToken}`}});const users=await userRes.json();const userData=users?.[0];const planKey=userData?.plan||\"\";const isPaid=!!(planKey&&userData?.account_status===\"ACTIVE\"||userData?.account_status===\"VIP\");Session.set({uid,email,isPaid,planKey});setCookie(\"checkit_access_token\",accessToken);if(isPaid){window.location.replace(PAGES.challenge);}else{window.location.replace(PAGES.plan2);}return true;}catch(err){console.error(\"이메일 로그인 오류:\",err);alert(\"네트워크 오류가 발생했습니다. 다시 시도해 주세요.\");return false;}}// ─────────────────────────────────────────────\n// 오버라이드\n// ─────────────────────────────────────────────\n// 1. 구글 로그인 버튼\nexport function withGoogleLogin(Component){return props=>{const handleClick=e=>{e.stopPropagation();e.preventDefault();window.location.href=`${SUPABASE_EDGE_URL()}/google-login`;};return /*#__PURE__*/_jsx(Component,{...props,onClick:handleClick,onTap:handleClick});};}// 2. 네이버 로그인 버튼\nexport function withNaverLogin(Component){return props=>{const handleClick=e=>{e.stopPropagation();e.preventDefault();window.location.href=`${SUPABASE_EDGE_URL()}/naver-login`;};return /*#__PURE__*/_jsx(Component,{...props,onClick:handleClick,onTap:handleClick});};}// 3. 카카오 로그인 버튼\nexport function withKakaoLogin(Component){return props=>{const handleClick=e=>{e.stopPropagation();e.preventDefault();window.location.href=`${SUPABASE_EDGE_URL()}/kakao-login`;};return /*#__PURE__*/_jsx(Component,{...props,onClick:handleClick,onTap:handleClick});};}// 4. 애플 로그인 버튼\nexport function withAppleLogin(Component){return props=>{const handleClick=e=>{e.stopPropagation();e.preventDefault();window.location.href=`${SUPABASE_EDGE_URL()}/apple-login`;};return /*#__PURE__*/_jsx(Component,{...props,onClick:handleClick,onTap:handleClick});};}// 5. ID(e-mail) 입력 필드 — DOM addEventListener로 값 캡처 (Framer onChange 우회)\nexport function withEmailInput(Component){return props=>{const wrapperRef=useRef(null);useEffect(()=>{// Framer 컴포넌트 wrapper 안에서 실제 DOM input 탐색\nconst findInput=()=>{const wrapper=wrapperRef.current;if(!wrapper)return null;if(wrapper.tagName===\"INPUT\")return wrapper;return wrapper.querySelector(\"input\");};let el=findInput();if(!el){// 아직 렌더링 안 됐으면 100ms 후 재시도\nconst timer=setTimeout(()=>{const input=findInput();if(input)setupInput(input);},100);return()=>clearTimeout(timer);}setupInput(el);function setupInput(input){if(input.__authEmailEnhanced)return;input.__authEmailEnhanced=true;// DOM 이벤트 직접 수신 — Framer onChange 우회\ninput.addEventListener(\"input\",()=>{authEmail=input.value;});input.addEventListener(\"keydown\",e=>{if(e.key===\"Enter\"){e.preventDefault();const pwEl=document.querySelector('input[type=\"password\"]');pwEl?.focus();}});injectClearButton(input,\"email\");}},[]);return /*#__PURE__*/_jsx(Component,{...props,ref:wrapperRef,type:\"email\",autoComplete:\"email\"});};}// 6. Pass Word 입력 필드 — DOM addEventListener로 값 캡처 + type=password 강제 설정\nexport function withPasswordInput(Component){return props=>{const wrapperRef=useRef(null);useEffect(()=>{const findInput=()=>{const wrapper=wrapperRef.current;if(!wrapper)return null;if(wrapper.tagName===\"INPUT\")return wrapper;return wrapper.querySelector(\"input\");};let el=findInput();if(!el){const timer=setTimeout(()=>{const input=findInput();if(input)setupInput(input);},100);return()=>clearTimeout(timer);}setupInput(el);function setupInput(input){if(input.__authPwEnhanced)return;input.__authPwEnhanced=true;// type=password 강제 설정\ninput.type=\"password\";// DOM 이벤트 직접 수신 — Framer onChange 우회\ninput.addEventListener(\"input\",()=>{authPassword=input.value;});input.addEventListener(\"keydown\",async e=>{if(e.key===\"Enter\"){e.preventDefault();await doEmailLogin();}});injectClearButton(input,\"password\");}},[]);return /*#__PURE__*/_jsx(Component,{...props,ref:wrapperRef,type:\"password\",autoComplete:\"current-password\"});};}// 7. 이메일/비밀번호 로그인 버튼\nexport function withEmailLogin(Component){return props=>{const[loading,setLoading]=useState(false);const handleClick=async e=>{e.stopPropagation();e.preventDefault();if(loading)return;setLoading(true);await doEmailLogin();setLoading(false);};return /*#__PURE__*/_jsx(Component,{...props,onClick:handleClick,onTap:handleClick,style:{...props.style,cursor:loading?\"wait\":\"pointer\",opacity:loading?.6:1}});};}// 8. 로그아웃/로그인 버튼\nexport function withLogout(Component){return props=>{const title=String(props.title||props.children||\"\");const isLoginButton=title.toUpperCase().includes(\"LOG IN\");const handleClick=e=>{e.stopPropagation();e.preventDefault();if(isLoginButton){window.location.replace(PAGES.auth);}else{Session.clear();window.location.replace(PAGES.home);}};return /*#__PURE__*/_jsx(Component,{...props,onClick:handleClick,onTap:handleClick});};}// 9. 네비게이션 바 상태\nexport function withNavbarState(Component){return props=>{const[isLoggedIn,setIsLoggedIn]=useState(()=>typeof window!==\"undefined\"?getCookie(\"isVerified\")===\"true\":false);useEffect(()=>{const check=()=>setIsLoggedIn(getCookie(\"isVerified\")===\"true\");const id=setInterval(check,500);window.addEventListener(\"storage\",check);return()=>{clearInterval(id);window.removeEventListener(\"storage\",check);};},[]);return /*#__PURE__*/_jsx(Component,{...props,variant:isLoggedIn?\"loggedIn\":\"loggedOut\"});};}// 11. /auth 페이지 최상위 레이어 — SNS 콜백 시 페이지 숨김\nexport function withAuthPage(Component){return props=>{const[hidden]=useState(()=>{if(typeof window===\"undefined\")return false;return new URLSearchParams(window.location.search).has(\"provider\");});return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Component,{...props}),hidden&&/*#__PURE__*/_jsxs(\"div\",{style:{position:\"fixed\",inset:0,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",background:\"#fff\",zIndex:9999},children:[/*#__PURE__*/_jsx(\"div\",{style:{width:32,height:32,border:\"3px solid #000\",borderTopColor:\"transparent\",borderRadius:\"50%\",animation:\"spin 0.7s linear infinite\"}}),/*#__PURE__*/_jsx(\"style\",{children:`@keyframes spin { to { transform: rotate(360deg); } }`})]})]});};}// 10. /challenge, /tutorial, /inventory 페이지 Main 레이어 — 미인증/미결제 시 리다이렉트\nexport function withAuthGuard(Component){return props=>{useEffect(()=>{if(typeof window===\"undefined\")return;if(Session.hasSocialCallback())return;const isVerified=getCookie(\"isVerified\")===\"true\";const uid=getCookie(\"checkit_uid\");if(!isVerified||!uid){window.location.replace(PAGES.auth);return;}const isPaid=getCookie(\"checkit_isPaid\")===\"true\";if(!isPaid){window.location.replace(PAGES.plan2);}},[]);return /*#__PURE__*/_jsx(Component,{...props});};}\nexport const __FramerMetadata__ = {\"exports\":{\"withAppleLogin\":{\"type\":\"reactHoc\",\"name\":\"withAppleLogin\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withAuthPage\":{\"type\":\"reactHoc\",\"name\":\"withAuthPage\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withAuthGuard\":{\"type\":\"reactHoc\",\"name\":\"withAuthGuard\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withEmailInput\":{\"type\":\"reactHoc\",\"name\":\"withEmailInput\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withPasswordInput\":{\"type\":\"reactHoc\",\"name\":\"withPasswordInput\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withNavbarState\":{\"type\":\"reactHoc\",\"name\":\"withNavbarState\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withLogout\":{\"type\":\"reactHoc\",\"name\":\"withLogout\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withNaverLogin\":{\"type\":\"reactHoc\",\"name\":\"withNaverLogin\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withGoogleLogin\":{\"type\":\"reactHoc\",\"name\":\"withGoogleLogin\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withEmailLogin\":{\"type\":\"reactHoc\",\"name\":\"withEmailLogin\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withKakaoLogin\":{\"type\":\"reactHoc\",\"name\":\"withKakaoLogin\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./AuthSystem.map"],"mappings":"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"}