{"version":3,"file":"AuthSystem.B3mVw0Li.mjs","names":["useState"],"sources":["https:/framerusercontent.com/modules/UntDrCYqC6TYHTecDqhv/jCoNOwYcPvTz6cN1eJUV/AuthSystem.js"],"sourcesContent":["/**\n * AuthSystem.tsx\n * 책잇아트(CheckitArt) 통합 인증 시스템\n * v2.3 - 환경변수화 (window.CHECKIT_CONFIG 패턴)\n *\n * 오버라이드 목록:\n *   withGoogleLogin   — 구글 로그인 버튼\n *   withNaverLogin    — 네이버 로그인 버튼\n *   withKakaoLogin    — 카카오 로그인 버튼\n *   withLogout        — 로그아웃/로그인 버튼\n *   withNavbarState   — 네비게이션 바 컨테이너\n *   withAuthGuard     — /challenge 페이지 Main 레이어\n *\n * ※ withSignupButton 제거 → SignupOverride.tsx의 withSignupSave 사용\n */import{jsx as _jsx}from\"react/jsx-runtime\";import{useState,useEffect}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// 세션 관리 (쿠키 기반 - iOS 사파리 ITP 대응)\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\",\"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\"].includes(provider));}};// ─────────────────────────────────────────────\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// 소셜 로그인 콜백 처리 (/auth 페이지에서 실행)\n// Edge Function이 isPaid, planKey를 파라미터로 전달\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\"].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);}}// 페이지 로드 시 자동 실행\nif(typeof window!==\"undefined\"){processSocialCallback();processPaymentCallback();}// ─────────────────────────────────────────────\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 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});};}// 5. 네비게이션 바 상태\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\"});};}// 6. /challenge 페이지 Main 레이어 — 미인증 시 /auth로 리다이렉트\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\":{\"withNaverLogin\":{\"type\":\"reactHoc\",\"name\":\"withNaverLogin\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withLogout\":{\"type\":\"reactHoc\",\"name\":\"withLogout\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withGoogleLogin\":{\"type\":\"reactHoc\",\"name\":\"withGoogleLogin\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withKakaoLogin\":{\"type\":\"reactHoc\",\"name\":\"withKakaoLogin\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withAuthGuard\":{\"type\":\"reactHoc\",\"name\":\"withAuthGuard\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withNavbarState\":{\"type\":\"reactHoc\",\"name\":\"withNavbarState\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./AuthSystem.map"],"mappings":"uIAcoF,SAAS,EAAI,EAAI,CAAiJ,OAAtI,IAAS,QAAa,EAAO,iBAAiB,GAAa,EAAO,eAAe,IAAM,QAAQ,MAAM,0BAA0B,IAAM,CAAO,IAI3P,SAAS,EAAU,EAAK,EAAM,CAAC,SAAS,OAAO,GAAG,EAAK,GAAG,mBAAmB,EAAM,CAAC,kCAAkC,IAAkB,SAAS,EAAU,EAAK,CAAC,GAAG,OAAO,SAAW,IAAY,MAAM,GAAG,IAAM,EAAM,SAAS,OAAO,MAAM,KAAK,CAAC,KAAK,GAAK,EAAI,WAAW,EAAK,IAAI,CAAC,CAAC,OAAO,EAAM,mBAAmB,EAAM,MAAM,IAAI,CAAC,GAAG,CAAC,GAAI,SAAS,EAAa,EAAK,CAAC,SAAS,OAAO,GAAG,EAAK,oCAMrY,eAAe,EAAmB,EAAI,EAAQ,CAAC,MAAM,MAAM,GAAG,GAAc,CAAC,wBAAwB,mBAAmB,EAAI,GAAG,CAAC,OAAO,QAAQ,QAAQ,CAAC,OAAO,GAAmB,CAAC,cAAc,UAAU,GAAmB,GAAG,eAAe,mBAAmB,OAAO,wBAAwB,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK,EAAQ,CAAC,CAAC,CAAC,CAIxU,SAAS,GAAuB,CAAC,GAAU,IAAS,OAAY,OAAO,IAAM,EAAO,IAAI,gBAAgB,EAAO,SAAS,OAAO,CAAO,EAAS,EAAO,IAAI,WAAW,CAAO,EAAM,EAAO,IAAI,QAAQ,CAAO,EAAI,EAAO,IAAI,MAAM,CAAO,EAAO,EAAO,IAAI,SAAS,GAAG,OAAa,EAAQ,EAAO,IAAI,UAAU,EAAE,GAAM,CAAC,GAAU,CAAC,GAAe,CAAC,SAAS,QAAQ,QAAQ,CAAC,SAAS,EAAS,GAAQ,EAAO,QAAQ,aAAa,EAAE,CAAC,GAAG,EAAO,SAAS,SAAS,CAAC,EAAQ,IAAI,CAAC,MAAI,QAAM,SAAO,UAAQ,CAAC,CAAI,EAAQ,EAAO,SAAS,QAAQ,EAAM,UAAU,CAAO,EAAO,SAAS,QAAQ,EAAM,MAAM,EAG1kB,eAAe,GAAwB,CAAC,GAAU,IAAS,OAAY,OAAO,IAAM,EAAO,IAAI,gBAAgB,EAAO,SAAS,OAAO,CAAC,GAAG,EAAO,IAAI,UAAU,GAAG,UAAU,OAAO,IAAM,EAAQ,EAAO,IAAI,UAAU,EAAE,aAAa,EAAO,QAAQ,aAAa,EAAE,CAAC,GAAG,EAAO,SAAS,SAAS,CAAC,IAAM,EAAQ,EAAQ,KAAK,CAAK,KAAQ,IAAW,GAAQ,IAAI,CAAC,IAAI,EAAQ,IAAI,MAAM,EAAQ,MAAM,OAAO,GAAK,UAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,EAAmB,EAAQ,IAAI,EAAQ,OAAQ,EAAI,CAAC,QAAQ,MAAM,yBAAyB,EAAI,GAKpgB,SAAgB,EAAgB,EAAU,CAAC,MAAO,IAAO,CAAC,IAAM,EAAY,GAAG,CAAC,EAAE,iBAAiB,CAAC,EAAE,gBAAgB,CAAC,EAAO,SAAS,KAAK,GAAG,GAAmB,CAAC,gBAAiB,OAAoB,EAAK,EAAU,CAAC,GAAG,EAAM,QAAQ,EAAY,MAAM,EAAY,CAAC,EACxQ,SAAgB,EAAe,EAAU,CAAC,MAAO,IAAO,CAAC,IAAM,EAAY,GAAG,CAAC,EAAE,iBAAiB,CAAC,EAAE,gBAAgB,CAAC,EAAO,SAAS,KAAK,GAAG,GAAmB,CAAC,eAAgB,OAAoB,EAAK,EAAU,CAAC,GAAG,EAAM,QAAQ,EAAY,MAAM,EAAY,CAAC,EACtQ,SAAgB,EAAe,EAAU,CAAC,MAAO,IAAO,CAAC,IAAM,EAAY,GAAG,CAAC,EAAE,iBAAiB,CAAC,EAAE,gBAAgB,CAAC,EAAO,SAAS,KAAK,GAAG,GAAmB,CAAC,eAAgB,OAAoB,EAAK,EAAU,CAAC,GAAG,EAAM,QAAQ,EAAY,MAAM,EAAY,CAAC,EACtQ,SAAgB,EAAW,EAAU,CAAC,MAAO,IAAO,CAAqD,IAAM,EAA9C,OAAO,EAAM,OAAO,EAAM,UAAU,GAAG,CAA2B,aAAa,CAAC,SAAS,SAAS,CAAO,EAAY,GAAG,CAAC,EAAE,iBAAiB,CAAC,EAAE,gBAAgB,CAAI,EAAe,EAAO,SAAS,QAAQ,EAAM,KAAK,EAAO,EAAQ,OAAO,CAAC,EAAO,SAAS,QAAQ,EAAM,KAAK,GAAI,OAAoB,EAAK,EAAU,CAAC,GAAG,EAAM,QAAQ,EAAY,MAAM,EAAY,CAAC,EACxa,SAAgB,EAAgB,EAAU,CAAC,MAAO,IAAO,CAAC,GAAK,CAAC,EAAW,GAAeA,MAAoB,IAAS,OAA6C,GAAjC,EAAU,aAAa,GAAG,OAAa,CAA0O,OAAzO,MAAc,CAAC,IAAM,MAAU,EAAc,EAAU,aAAa,GAAG,OAAO,CAAO,EAAG,YAAY,EAAM,IAAI,CAA0C,OAAzC,EAAO,iBAAiB,UAAU,EAAM,KAAW,CAAC,cAAc,EAAG,CAAC,EAAO,oBAAoB,UAAU,EAAM,GAAK,EAAE,CAAC,CAAqB,EAAK,EAAU,CAAC,GAAG,EAAM,QAAQ,EAAW,WAAW,YAAY,CAAC,EAC5e,SAAgB,EAAc,EAAU,CAAC,MAAO,KAAQ,MAAc,CAAuC,GAA5B,IAAS,QAAsB,EAAQ,mBAAmB,CAAC,OAAO,IAAM,EAAW,EAAU,aAAa,GAAG,OAAa,EAAI,EAAU,cAAc,CAAC,GAAG,CAAC,GAAY,CAAC,EAAI,CAAC,EAAO,SAAS,QAAQ,EAAM,KAAK,CAAC,OAAqB,EAAU,iBAAiB,GAAG,QAAmB,EAAO,SAAS,QAAQ,EAAM,MAAM,EAAI,EAAE,CAAC,CAAqB,EAAK,EAAU,CAAC,GAAG,EAAM,CAAC,qCA3BpZ,IAAsC,CAAkL,MAAiB,EAAI,eAAe,CAAO,MAAsB,EAAI,oBAAoB,CAAO,MAAsB,GAAG,EAAI,eAAe,CAAC,eAAqB,EAAgB,IAAS,OAAmC,uBAAvB,EAAO,SAAS,OAAoC,EAAM,CAAC,KAAK,GAAG,EAAS,GAAG,UAAU,GAAG,EAAS,YAAY,MAAM,GAAG,EAAS,SAAS,KAAK,GAAG,EAAS,OAAO,OAAO,GAAG,EAAS,SAAS,CAGvoB,EAAe,KAAM,GAAG,GAIxB,EAAQ,CAAC,IAAI,GAAM,CAAC,EAAU,cAAc,EAAK,IAAI,CAAI,EAAK,OAAM,EAAU,gBAAgB,EAAK,MAAM,CAAC,EAAU,iBAAiB,OAAO,EAAK,OAAO,CAAC,CAAI,EAAK,SAAQ,EAAU,kBAAkB,EAAK,QAAQ,CAAC,EAAU,aAAa,OAAO,CAAC,EAAO,cAAc,IAAI,MAAM,UAAU,CAAC,EAAG,SAAS,CAAC,IAAI,EAAU,cAAc,CAAC,MAAM,EAAU,gBAAgB,CAAC,OAAO,EAAU,iBAAiB,GAAG,OAAO,QAAQ,EAAU,kBAAkB,CAAC,EAAE,UAAU,CAAC,CAAC,cAAc,gBAAgB,iBAAiB,kBAAkB,aAAa,CAAC,QAAQ,EAAa,CAAC,EAAO,cAAc,IAAI,MAAM,UAAU,CAAC,EAAG,sBAAsB,CAAC,GAAU,IAAS,OAAY,MAAO,GAA+D,IAAM,EAAlD,IAAI,gBAAgB,EAAO,SAAS,OAAO,CAAuB,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,GAAU,CAAC,SAAS,QAAQ,QAAQ,CAAC,SAAS,EAAS,GAAI,CAW3zB,IAAS,SAAa,GAAuB,CAAC,GAAwB"}