{"version":3,"file":"CheckitAuthSystem.BgBzgctn.mjs","names":[],"sources":["https:/framerusercontent.com/modules/j6wGwsVqF0WMkStQX2ym/K4hsdDtTr02qys4AdSQJ/CheckitAuthSystem.js"],"sourcesContent":["/**\n * CheckitAuthSystem.tsx  ← Framer에 이 이름으로 붙여넣기 (v6 최종)\n * 책잇아트(CheckitArt) 통합 인증 시스템 v6\n *\n * ✅ v6 변경사항:\n *    - 구글 로그인: 클라이언트 GIS 방식 제거\n *      → 카카오/네이버와 동일한 Vercel 서버사이드 OAuth 방식으로 통일\n *      → /api/google-login → Google OAuth → /api/google-callback → Firebase Custom Token → /auth?provider=google&token=xxx\n */import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect}from\"react\";// ─────────────────────────────────────────────\n// 설정값\n// ─────────────────────────────────────────────\nconst FIREBASE_CONFIG={apiKey:\"AIzaSyAoZVuH4AqADctEjNpz1rrUy6aYCV90Rv4\",authDomain:\"checkitart-fdea1.firebaseapp.com\",projectId:\"checkitart-fdea1\",storageBucket:\"checkitart-fdea1.firebasestorage.app\",messagingSenderId:\"103040506070\",appId:\"1:103040506070:web:abcdef123456\"};const AIRTABLE_TOKEN=\"patN4b0F8LbPxeEbY.e613a5c121032c200df28c4d7ee9f56c40af3301bcbe6a0d078f779ad273f4d7\";const AIRTABLE_BASE_ID=\"apppGcEEbOiqYbJe0\";const AIRTABLE_TABLE=\"Users\";const TOSS_CLIENT_KEY=\"test_ck_oEjb0gm23PdWRRMRWa0o3pGwBJn5\";const VERCEL_API_URL=\"https://checkitart-auth.vercel.app\";const PAGES={success:\"/inventory\",plan:\"/plan\",auth:\"/auth\"};// ─────────────────────────────────────────────\n// Firebase 초기화\n// ─────────────────────────────────────────────\nlet _auth=null;async function getFirebaseAuth(){if(_auth)return _auth;const{initializeApp,getApps}=await import(\"https://www.gstatic.com/firebasejs/10.8.1/firebase-app.js\");const{getAuth}=await import(\"https://www.gstatic.com/firebasejs/10.8.1/firebase-auth.js\");const app=getApps().length===0?initializeApp(FIREBASE_CONFIG):getApps()[0];_auth=getAuth(app);return _auth;}// ─────────────────────────────────────────────\n// 세션 관리\n// ─────────────────────────────────────────────\nconst Session={set:data=>{localStorage.setItem(\"checkit_uid\",data.uid);localStorage.setItem(\"checkit_email\",data.email);localStorage.setItem(\"checkit_isPaid\",String(data.isPaid));if(data.planKey)localStorage.setItem(\"checkit_planKey\",data.planKey);localStorage.setItem(\"isVerified\",\"true\")// Navbar 상태 반영용\n;},get:()=>({uid:localStorage.getItem(\"checkit_uid\")||\"\",email:localStorage.getItem(\"checkit_email\")||\"\",isPaid:localStorage.getItem(\"checkit_isPaid\")===\"true\",planKey:localStorage.getItem(\"checkit_planKey\")||\"\"}),clear:()=>{[\"checkit_uid\",\"checkit_email\",\"checkit_isPaid\",\"checkit_planKey\",\"isVerified\"].forEach(k=>localStorage.removeItem(k));}};// ─────────────────────────────────────────────\n// Airtable 유틸\n// ─────────────────────────────────────────────\nasync function getAirtableUser(email){const formula=encodeURIComponent(`({email}=\"${email}\")`);const url=`https://api.airtable.com/v0/${AIRTABLE_BASE_ID}/${AIRTABLE_TABLE}?filterByFormula=${formula}`;const res=await fetch(url,{headers:{Authorization:`Bearer ${AIRTABLE_TOKEN}`}});const data=await res.json();return data.records?.[0]||null;}async function createAirtableUser(email,uid){await fetch(`https://api.airtable.com/v0/${AIRTABLE_BASE_ID}/${AIRTABLE_TABLE}`,{method:\"POST\",headers:{Authorization:`Bearer ${AIRTABLE_TOKEN}`,\"Content-Type\":\"application/json\"},body:JSON.stringify({fields:{email:email,uid:uid,plan:\"\",createdAt:new Date().toISOString().split(\"T\")[0]}})});}async function updateAirtablePlan(recordId,planKey){await fetch(`https://api.airtable.com/v0/${AIRTABLE_BASE_ID}/${AIRTABLE_TABLE}/${recordId}`,{method:\"PATCH\",headers:{Authorization:`Bearer ${AIRTABLE_TOKEN}`,\"Content-Type\":\"application/json\"},body:JSON.stringify({fields:{plan:planKey}})});}// ─────────────────────────────────────────────\n// Toss 결제창\n// ─────────────────────────────────────────────\nasync function openTossPayment(email,planKey){const{loadTossPayments}=await import(\"https://js.tosspayments.com/v1/payment\");const toss=await loadTossPayments(TOSS_CLIENT_KEY);await toss.requestBillingAuth(\"카드\",{customerEmail:email,customerName:email.split(\"@\")[0],successUrl:`${window.location.origin}/auth?payment=success&planKey=${planKey}`,failUrl:`${window.location.origin}/auth?payment=fail`});}// ─────────────────────────────────────────────\n// 로그인 후 공통 처리\n// ─────────────────────────────────────────────\nasync function afterLogin(email,uid){let record=await getAirtableUser(email);if(!record){await createAirtableUser(email,uid);record=await getAirtableUser(email);}if(!record)return;const isPaid=!!(record.fields.plan&&record.fields.plan!==\"\");Session.set({uid,email,isPaid,planKey:record.fields.plan||\"\"});if(isPaid){window.location.href=PAGES.success;}else{await openTossPayment(email,\"monthly\");}}// ─────────────────────────────────────────────\n// 소셜 token 처리 (구글/카카오/네이버 공통)\n// 콜백 후 URL: /auth?provider=google&token=xxx&email=xxx\n// ─────────────────────────────────────────────\nlet _tokenProcessed=false;async function processSocialToken(){if(_tokenProcessed)return;const params=new URLSearchParams(window.location.search);const token=params.get(\"token\");const provider=params.get(\"provider\");const emailParam=params.get(\"email\");if(!token||!provider)return;if(provider!==\"google\"&&provider!==\"kakao\"&&provider!==\"naver\")return;_tokenProcessed=true;try{const auth=await getFirebaseAuth();const{signInWithCustomToken}=await import(\"https://www.gstatic.com/firebasejs/10.8.1/firebase-auth.js\");const result=await signInWithCustomToken(auth,token);window.history.replaceState({},\"\",window.location.pathname);const email=emailParam||result.user.email||`${provider}_${result.user.uid}@checkit.art`;await afterLogin(email,result.user.uid);}catch(err){console.error(`${provider} Token 로그인 오류:`,err);_tokenProcessed=false;}}// ─────────────────────────────────────────────\n// 페이지 로드 시 자동 토큰 처리\n// ─────────────────────────────────────────────\nif(typeof window!==\"undefined\"){processSocialToken();}// ─────────────────────────────────────────────\n// 입력값 읽기 (이메일/비밀번호 로그인용)\n// ─────────────────────────────────────────────\nfunction readInput(hint){const inputs=Array.from(document.querySelectorAll(\"input\"));for(const el of inputs){if(el.type===hint||el.name?.toLowerCase().includes(hint)||el.placeholder?.toLowerCase().includes(hint)||el.id?.toLowerCase().includes(hint)){return el.value.trim();}}return\"\";}// ─────────────────────────────────────────────\n// 오버라이드 함수들\n// ─────────────────────────────────────────────\n// 1. 이메일 로그인 버튼\nexport function withLoginButton(Component){return props=>{const handleClick=async e=>{e.stopPropagation();const email=readInput(\"email\");const password=readInput(\"password\");if(!email||!password){alert(\"이메일과 비밀번호를 입력해주세요.\");return;}try{const auth=await getFirebaseAuth();const{signInWithEmailAndPassword}=await import(\"https://www.gstatic.com/firebasejs/10.8.1/firebase-auth.js\");const{user}=await signInWithEmailAndPassword(auth,email,password);await afterLogin(user.email||email,user.uid);}catch(err){alert(\"로그인 실패: \"+err.message);}props.onClick?.(e);props.onTap?.(e);};return /*#__PURE__*/_jsx(Component,{...props,onClick:handleClick,onTap:handleClick});};}// 2. 이메일 회원가입 버튼\nexport function withSignupButton(Component){return props=>{const handleClick=async e=>{e.stopPropagation();const email=readInput(\"email\");const password=readInput(\"password\");if(!email||!password){alert(\"이메일과 비밀번호를 입력해주세요.\");return;}try{const auth=await getFirebaseAuth();const{createUserWithEmailAndPassword}=await import(\"https://www.gstatic.com/firebasejs/10.8.1/firebase-auth.js\");const{user}=await createUserWithEmailAndPassword(auth,email,password);await afterLogin(user.email||email,user.uid);}catch(err){alert(\"회원가입 실패: \"+err.message);}props.onClick?.(e);props.onTap?.(e);};return /*#__PURE__*/_jsx(Component,{...props,onClick:handleClick,onTap:handleClick});};}// 3. 비밀번호 찾기 버튼\nexport function withResetPasswordButton(Component){return props=>{const handleClick=async e=>{e.stopPropagation();const email=readInput(\"email\");if(!email){alert(\"이메일을 먼저 입력해주세요.\");return;}try{const auth=await getFirebaseAuth();const{sendPasswordResetEmail}=await import(\"https://www.gstatic.com/firebasejs/10.8.1/firebase-auth.js\");await sendPasswordResetEmail(auth,email);alert(\"비밀번호 재설정 이메일을 발송했습니다.\");}catch(err){alert(\"발송 실패: \"+err.message);}props.onClick?.(e);props.onTap?.(e);};return /*#__PURE__*/_jsx(Component,{...props,onClick:handleClick,onTap:handleClick});};}// 4. 구글 로그인 버튼\nexport function withGoogleLogin(Component){return props=>{useEffect(()=>{processSocialToken();},[]);const handleClick=e=>{e.stopPropagation();const redirect=encodeURIComponent(`${window.location.origin}/auth`);window.location.href=`${VERCEL_API_URL}/api/google-login?redirect=${redirect}`;props.onClick?.(e);props.onTap?.(e);};return /*#__PURE__*/_jsx(Component,{...props,onClick:handleClick,onTap:handleClick});};}// 5. 네이버 로그인 버튼\nexport function withNaverLogin(Component){return props=>{useEffect(()=>{processSocialToken();},[]);const handleClick=e=>{e.stopPropagation();const redirect=encodeURIComponent(`${window.location.origin}/auth`);window.location.href=`${VERCEL_API_URL}/api/naver-login?redirect=${redirect}`;props.onClick?.(e);props.onTap?.(e);};return /*#__PURE__*/_jsx(Component,{...props,onClick:handleClick,onTap:handleClick});};}// 6. 카카오 로그인 버튼\nexport function withKakaoLogin(Component){return props=>{useEffect(()=>{processSocialToken();},[]);const handleClick=e=>{e.stopPropagation();const redirect=encodeURIComponent(`${window.location.origin}/auth`);window.location.href=`${VERCEL_API_URL}/api/kakao-login?redirect=${redirect}`;props.onClick?.(e);props.onTap?.(e);};return /*#__PURE__*/_jsx(Component,{...props,onClick:handleClick,onTap:handleClick});};}// 7. 로그아웃 버튼\nexport function withLogout(Component){return props=>{const handleClick=async e=>{e.stopPropagation();try{const auth=await getFirebaseAuth();await auth.signOut();Session.clear();window.location.href=PAGES.auth;}catch(err){console.error(\"로그아웃 오류:\",err);}props.onClick?.(e);props.onTap?.(e);};return /*#__PURE__*/_jsx(Component,{...props,onClick:handleClick,onTap:handleClick});};}// 8. 폼 로그인 (variant 기반)\nexport function withFormLogin(Component){return props=>{useEffect(()=>{processSocialToken();},[]);const handleClick=e=>{e.stopPropagation();const variant=(props.variant||props[\"data-variant\"]||\"\").toUpperCase();const redirect=encodeURIComponent(`${window.location.origin}/auth`);if(variant===\"GOOGLE\"){window.location.href=`${VERCEL_API_URL}/api/google-login?redirect=${redirect}`;}else if(variant===\"NAVER\"){window.location.href=`${VERCEL_API_URL}/api/naver-login?redirect=${redirect}`;}else if(variant===\"KAKAO\"||variant===\"CACAO\"){window.location.href=`${VERCEL_API_URL}/api/kakao-login?redirect=${redirect}`;}props.onClick?.(e);props.onTap?.(e);};return /*#__PURE__*/_jsx(Component,{...props,onClick:handleClick,onTap:handleClick});};}\nexport const __FramerMetadata__ = {\"exports\":{\"withNaverLogin\":{\"type\":\"reactHoc\",\"name\":\"withNaverLogin\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withSignupButton\":{\"type\":\"reactHoc\",\"name\":\"withSignupButton\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withKakaoLogin\":{\"type\":\"reactHoc\",\"name\":\"withKakaoLogin\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withLogout\":{\"type\":\"reactHoc\",\"name\":\"withLogout\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withGoogleLogin\":{\"type\":\"reactHoc\",\"name\":\"withGoogleLogin\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withFormLogin\":{\"type\":\"reactHoc\",\"name\":\"withFormLogin\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withResetPasswordButton\":{\"type\":\"reactHoc\",\"name\":\"withResetPasswordButton\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withLoginButton\":{\"type\":\"reactHoc\",\"name\":\"withLoginButton\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CheckitAuthSystem.map"],"mappings":"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"}