{"version":3,"file":"login-Dw60WXrK.mjs","sources":["../../../node_modules/.pnpm/@marsidev+react-turnstile@1.3.1_react-dom@19.1.0_react@19.1.0/node_modules/@marsidev/react-turnstile/dist/index.js","../src/components/Turnstile.tsx","../src/components/InAppBrowserOverlay.tsx","../src/pages/login/unifiedauth.tsx","../src/pages/login/index.tsx"],"sourcesContent":["'use client';\nimport{forwardRef as pe,useCallback as Q,useEffect as h,useImperativeHandle as fe,useMemo as me,useRef as D,useState as Z}from\"react\";import{forwardRef as ce}from\"react\";import{jsx as ue}from\"react/jsx-runtime\";var ae=({as:n=\"div\",...a},s)=>ue(n,{...a,ref:s}),J=ce(ae);import{useEffect as le,useState as de}from\"react\";var K=\"https://challenges.cloudflare.com/turnstile/v0/api.js\",b=\"cf-turnstile-script\",U=\"cf-turnstile\",P=\"onloadTurnstileCallback\",M=n=>!!document.getElementById(n),X=({render:n=\"explicit\",onLoadCallbackName:a=P,scriptOptions:{nonce:s=\"\",defer:e=!0,async:m=!0,id:v=\"\",appendTo:g,onError:T,crossOrigin:w=\"\"}={}})=>{let E=v||b;if(M(E))return;let i=document.createElement(\"script\");if(i.id=E,i.src=`${K}?onload=${a}&render=${n}`,document.querySelector(`script[src=\"${i.src}\"]`))return;i.defer=!!e,i.async=!!m,s&&(i.nonce=s),w&&(i.crossOrigin=w),T&&(i.onerror=T,delete window[a]),(g===\"body\"?document.body:document.getElementsByTagName(\"head\")[0]).appendChild(i)},f={normal:{width:300,height:65},compact:{width:150,height:140},invisible:{width:0,height:0,overflow:\"hidden\"},flexible:{minWidth:300,width:\"100%\",height:65},interactionOnly:{width:\"fit-content\",height:\"auto\",display:\"flex\"}};function G(n){if(n!==\"invisible\"&&n!==\"interactionOnly\")return n}function z(n=b){let[a,s]=de(!1);return le(()=>{let e=()=>{M(n)&&s(!0)},m=new MutationObserver(e);return m.observe(document,{childList:!0,subtree:!0}),e(),()=>{m.disconnect()}},[n]),a}import{jsx as xe}from\"react/jsx-runtime\";var _=\"unloaded\",ee,Te=new Promise((n,a)=>{ee={resolve:n,reject:a},_===\"ready\"&&n(void 0)}),we=(n=P)=>(_===\"unloaded\"&&(_=\"loading\",window[n]=()=>{ee.resolve(),_=\"ready\",delete window[n]}),Te),Ee=pe((n,a)=>{let{scriptOptions:s,options:e={},siteKey:m,onWidgetLoad:v,onSuccess:g,onExpire:T,onError:w,onBeforeInteractive:E,onAfterInteractive:i,onUnsupported:I,onTimeout:k,onLoadScript:W,id:te,style:re,as:ne=\"div\",injectScript:$=!0,rerenderOnCallbackChange:o=!1,...oe}=n,c=e.size,j=Q(()=>typeof c>\"u\"?{}:e.execution===\"execute\"?f.invisible:e.appearance===\"interaction-only\"?f.interactionOnly:f[c],[e.execution,c,e.appearance]),[ie,R]=Z(j()),u=D(null),[x,B]=Z(!1),r=D(),L=D(!1),H=te||U,d=D({onSuccess:g,onError:w,onExpire:T,onBeforeInteractive:E,onAfterInteractive:i,onUnsupported:I,onTimeout:k});h(()=>{o||(d.current={onSuccess:g,onError:w,onExpire:T,onBeforeInteractive:E,onAfterInteractive:i,onUnsupported:I,onTimeout:k})});let O=s?.id||b,A=z(O),V=s?.onLoadCallbackName||P,se=e.appearance||\"always\",C=me(()=>({sitekey:m,action:e.action,cData:e.cData,theme:e.theme||\"auto\",language:e.language||\"auto\",tabindex:e.tabIndex,\"response-field\":e.responseField,\"response-field-name\":e.responseFieldName,size:G(c),retry:e.retry||\"auto\",\"retry-interval\":e.retryInterval||8e3,\"refresh-expired\":e.refreshExpired||\"auto\",\"refresh-timeout\":e.refreshTimeout||\"auto\",execution:e.execution||\"render\",appearance:e.appearance||\"always\",\"feedback-enabled\":e.feedbackEnabled||!0,callback:t=>{L.current=!0,o?g?.(t):d.current.onSuccess?.(t)},\"error-callback\":o?w:(...t)=>d.current.onError?.(...t),\"expired-callback\":o?T:(...t)=>d.current.onExpire?.(...t),\"before-interactive-callback\":o?E:(...t)=>d.current.onBeforeInteractive?.(...t),\"after-interactive-callback\":o?i:(...t)=>d.current.onAfterInteractive?.(...t),\"unsupported-callback\":o?I:(...t)=>d.current.onUnsupported?.(...t),\"timeout-callback\":o?k:(...t)=>d.current.onTimeout?.(...t)}),[e.action,e.appearance,e.cData,e.execution,e.language,e.refreshExpired,e.responseField,e.responseFieldName,e.retry,e.retryInterval,e.tabIndex,e.theme,e.feedbackEnabled,e.refreshTimeout,m,c,o,o?g:null,o?w:null,o?T:null,o?E:null,o?i:null,o?I:null,o?k:null]),y=Q(()=>typeof window<\"u\"&&!!window.turnstile,[]);return h(function(){$&&!x&&X({onLoadCallbackName:V,scriptOptions:{...s,id:O}})},[$,x,s,O]),h(function(){_!==\"ready\"&&we(V).then(()=>B(!0)).catch(console.error)},[]),h(function(){if(!u.current||!x)return;let l=!1;return(async()=>{if(l||!u.current)return;let F=window.turnstile.render(u.current,C);r.current=F,r.current&&v?.(r.current)})(),()=>{l=!0,r.current&&(window.turnstile.remove(r.current),L.current=!1)}},[H,x,C]),fe(a,()=>{let{turnstile:t}=window;return{getResponse(){if(!t?.getResponse||!r.current||!y()){console.warn(\"Turnstile has not been loaded\");return}return t.getResponse(r.current)},async getResponsePromise(l=3e4,Y=100){return new Promise((F,N)=>{let p,q=async()=>{if(L.current&&window.turnstile&&r.current)try{let S=window.turnstile.getResponse(r.current);return p&&clearTimeout(p),S?F(S):N(new Error(\"No response received\"))}catch(S){return p&&clearTimeout(p),console.warn(\"Failed to get response\",S),N(new Error(\"Failed to get response\"))}p||(p=setTimeout(()=>{p&&clearTimeout(p),N(new Error(\"Timeout\"))},l)),await new Promise(S=>setTimeout(S,Y)),await q()};q()})},reset(){if(!t?.reset||!r.current||!y()){console.warn(\"Turnstile has not been loaded\");return}e.execution===\"execute\"&&R(f.invisible);try{L.current=!1,t.reset(r.current)}catch(l){console.warn(`Failed to reset Turnstile widget ${r}`,l)}},remove(){if(!t?.remove||!r.current||!y()){console.warn(\"Turnstile has not been loaded\");return}R(f.invisible),L.current=!1,t.remove(r.current),r.current=null},render(){if(!t?.render||!u.current||!y()||r.current){console.warn(\"Turnstile has not been loaded or container not found\");return}let l=t.render(u.current,C);return r.current=l,r.current&&v?.(r.current),e.execution!==\"execute\"&&R(c?f[c]:{}),l},execute(){if(e.execution!==\"execute\"){console.warn('Execution mode is not set to \"execute\"');return}if(!t?.execute||!u.current||!r.current||!y()){console.warn(\"Turnstile has not been loaded or container not found\");return}t.execute(u.current,C),R(c?f[c]:{})},isExpired(){return!t?.isExpired||!r.current||!y()?(console.warn(\"Turnstile has not been loaded\"),!1):t.isExpired(r.current)}}},[r,e.execution,c,C,u,y,x,v]),h(()=>{A&&!x&&window.turnstile&&B(!0)},[x,A]),h(()=>{R(j())},[e.execution,c,se]),h(()=>{!A||typeof W!=\"function\"||W()},[A]),xe(J,{ref:u,as:ne,id:H,style:{...ie,...re},...oe})});Ee.displayName=\"Turnstile\";export{U as DEFAULT_CONTAINER_ID,P as DEFAULT_ONLOAD_NAME,b as DEFAULT_SCRIPT_ID,K as SCRIPT_URL,Ee as Turnstile};\n","import React, { forwardRef } from 'react';\nimport {\n    Turnstile as ReactTurnstile,\n    TurnstileInstance,\n} from '@marsidev/react-turnstile';\n\ninterface TurnstileProps {\n    siteKey: string;\n    onVerify: (token: string) => void;\n    onError?: () => void;\n    onExpire?: () => void;\n    theme?: 'light' | 'dark' | 'auto';\n    size?: 'normal' | 'compact';\n    className?: string;\n}\n\nexport interface TurnstileRef {\n    reset: () => void;\n}\n\nexport const Turnstile = forwardRef<TurnstileRef, TurnstileProps>(\n    (\n        {\n            siteKey,\n            onVerify,\n            onError,\n            onExpire,\n            theme = 'auto',\n            size = 'normal',\n            className,\n        },\n        ref\n    ) => {\n        const turnstileRef = React.useRef<TurnstileInstance>(null);\n\n        // Expose reset method via ref\n        React.useImperativeHandle(\n            ref,\n            () => ({\n                reset: () => {\n                    turnstileRef.current?.reset();\n                },\n            }),\n            []\n        );\n\n        return (\n            <ReactTurnstile\n                ref={turnstileRef}\n                siteKey={siteKey}\n                onSuccess={onVerify}\n                onError={onError}\n                onExpire={onExpire}\n                options={{\n                    theme,\n                    size,\n                }}\n                className={className}\n            />\n        );\n    }\n);\n","import { useState, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Button } from 'react-bootstrap';\nimport { useTranslation } from '../libs/i18n';\nimport { isInAppBrowser } from '../utils/browser';\n\nimport './InAppBrowserOverlay.css';\n\ninterface InAppBrowserOverlayProps {\n    show: boolean;\n    onClose: () => void;\n}\n\ntype BrowserType = 'wechat' | 'line' | 'facebook' | 'instagram' | 'other';\n\n/**\n * 检测具体的应用内浏览器类型\n */\nfunction detectBrowserType(): BrowserType {\n    if (typeof window === 'undefined') return 'other';\n\n    const userAgent = navigator.userAgent.toLowerCase();\n\n    if (userAgent.includes('micromessenger') || userAgent.includes('wxwork')) {\n        return 'wechat';\n    }\n    if (userAgent.includes('line') || userAgent.includes('liff')) {\n        return 'line';\n    }\n    if (\n        userAgent.includes('fban') ||\n        userAgent.includes('fbav') ||\n        userAgent.includes('fb_iab')\n    ) {\n        return 'facebook';\n    }\n    if (userAgent.includes('instagram')) {\n        return 'instagram';\n    }\n    return 'other';\n}\n\n/**\n * 全屏遮罩引导组件\n * 用于引导用户在外部浏览器中打开页面\n */\nexport function InAppBrowserOverlay({\n    show,\n    onClose,\n}: InAppBrowserOverlayProps) {\n    const { t } = useTranslation();\n    const [copied, setCopied] = useState(false);\n    const [mounted, setMounted] = useState(false);\n\n    const browserType = detectBrowserType();\n    const isInApp = isInAppBrowser();\n\n    useEffect(() => {\n        setMounted(true);\n        return () => setMounted(false);\n    }, []);\n\n    // 禁止滚动\n    useEffect(() => {\n        if (show) {\n            document.body.style.overflow = 'hidden';\n        } else {\n            document.body.style.overflow = '';\n        }\n        return () => {\n            document.body.style.overflow = '';\n        };\n    }, [show]);\n\n    if (!show || !isInApp || !mounted) {\n        return null;\n    }\n\n    const copyLink = async () => {\n        const currentUrl = window.location.href;\n\n        try {\n            if (navigator.clipboard && navigator.clipboard.writeText) {\n                await navigator.clipboard.writeText(currentUrl);\n                setCopied(true);\n                setTimeout(() => setCopied(false), 3000);\n            } else {\n                prompt(t('ui.inAppBrowser.copyLink'), currentUrl);\n            }\n        } catch {\n            prompt(t('ui.inAppBrowser.copyLink'), currentUrl);\n        }\n    };\n\n    // 根据浏览器类型确定箭头位置\n    const getArrowPosition = () => {\n        switch (browserType) {\n            case 'facebook':\n            case 'line':\n                // Facebook 和 LINE 底部导航栏有菜单\n                return 'bottom-right';\n            default:\n                // 微信、Instagram 等都在右上角\n                return 'top-right';\n        }\n    };\n\n    const arrowPosition = getArrowPosition();\n\n    const overlay = (\n        <div className=\"inapp-overlay\" onClick={onClose}>\n            <div\n                className=\"inapp-overlay-content\"\n                onClick={e => e.stopPropagation()}\n            >\n                {/* 箭头指向菜单位置 */}\n                <div className={`inapp-arrow inapp-arrow-${arrowPosition}`}>\n                    <svg\n                        width=\"60\"\n                        height=\"60\"\n                        viewBox=\"0 0 60 60\"\n                        fill=\"none\"\n                        xmlns=\"http://www.w3.org/2000/svg\"\n                    >\n                        {arrowPosition === 'top-right' ? (\n                            // 指向右上角的箭头\n                            <path\n                                d=\"M10 50 L45 15 M45 15 L45 35 M45 15 L25 15\"\n                                stroke=\"white\"\n                                strokeWidth=\"4\"\n                                strokeLinecap=\"round\"\n                                strokeLinejoin=\"round\"\n                                className=\"inapp-arrow-path\"\n                            />\n                        ) : (\n                            // 指向右下角的箭头\n                            <path\n                                d=\"M10 10 L45 45 M45 45 L45 25 M45 45 L25 45\"\n                                stroke=\"white\"\n                                strokeWidth=\"4\"\n                                strokeLinecap=\"round\"\n                                strokeLinejoin=\"round\"\n                                className=\"inapp-arrow-path\"\n                            />\n                        )}\n                    </svg>\n                </div>\n\n                {/* 主要内容卡片 */}\n                <div className=\"inapp-card\">\n                    <div className=\"inapp-card-icon\">\n                        <svg\n                            width=\"36\"\n                            height=\"36\"\n                            viewBox=\"0 0 24 24\"\n                            fill=\"none\"\n                            xmlns=\"http://www.w3.org/2000/svg\"\n                        >\n                            <path\n                                d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\n                                stroke=\"currentColor\"\n                                strokeWidth=\"2\"\n                                strokeLinecap=\"round\"\n                                strokeLinejoin=\"round\"\n                            />\n                            <polyline\n                                points=\"15,3 21,3 21,9\"\n                                stroke=\"currentColor\"\n                                strokeWidth=\"2\"\n                                strokeLinecap=\"round\"\n                                strokeLinejoin=\"round\"\n                            />\n                            <line\n                                x1=\"10\"\n                                y1=\"14\"\n                                x2=\"21\"\n                                y2=\"3\"\n                                stroke=\"currentColor\"\n                                strokeWidth=\"2\"\n                                strokeLinecap=\"round\"\n                                strokeLinejoin=\"round\"\n                            />\n                        </svg>\n                    </div>\n\n                    <h3 className=\"inapp-card-title\">\n                        {t('ui.inAppBrowser.overlayTitle')}\n                    </h3>\n\n                    <div className=\"inapp-card-steps\">\n                        <div className=\"inapp-step\">\n                            <span className=\"inapp-step-number\">1</span>\n                            <span className=\"inapp-step-text\">\n                                {t('ui.inAppBrowser.step1')}\n                            </span>\n                        </div>\n                        <div className=\"inapp-step\">\n                            <span className=\"inapp-step-number\">2</span>\n                            <span className=\"inapp-step-text\">\n                                {t('ui.inAppBrowser.step2')}\n                            </span>\n                        </div>\n                    </div>\n\n                    <div className=\"inapp-card-divider\">\n                        <span>{t('ui.auth.or')}</span>\n                    </div>\n\n                    <Button\n                        variant={copied ? 'success' : 'outline-primary'}\n                        size=\"lg\"\n                        onClick={copyLink}\n                        className=\"inapp-copy-btn\"\n                        disabled={copied}\n                    >\n                        {copied ? (\n                            <>\n                                <svg\n                                    width=\"20\"\n                                    height=\"20\"\n                                    viewBox=\"0 0 24 24\"\n                                    fill=\"none\"\n                                    className=\"me-2\"\n                                >\n                                    <polyline\n                                        points=\"20,6 9,17 4,12\"\n                                        stroke=\"currentColor\"\n                                        strokeWidth=\"2\"\n                                        strokeLinecap=\"round\"\n                                        strokeLinejoin=\"round\"\n                                    />\n                                </svg>\n                                {t('ui.inAppBrowser.linkCopied')}\n                            </>\n                        ) : (\n                            <>\n                                <svg\n                                    width=\"20\"\n                                    height=\"20\"\n                                    viewBox=\"0 0 24 24\"\n                                    fill=\"none\"\n                                    className=\"me-2\"\n                                >\n                                    <rect\n                                        x=\"9\"\n                                        y=\"9\"\n                                        width=\"13\"\n                                        height=\"13\"\n                                        rx=\"2\"\n                                        ry=\"2\"\n                                        stroke=\"currentColor\"\n                                        strokeWidth=\"2\"\n                                    />\n                                    <path\n                                        d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\n                                        stroke=\"currentColor\"\n                                        strokeWidth=\"2\"\n                                        strokeLinecap=\"round\"\n                                        strokeLinejoin=\"round\"\n                                    />\n                                </svg>\n                                {t('ui.inAppBrowser.copyLink')}\n                            </>\n                        )}\n                    </Button>\n\n                    <button className=\"inapp-close-btn\" onClick={onClose}>\n                        {t('ui.common.close')}\n                    </button>\n                </div>\n            </div>\n        </div>\n    );\n\n    return createPortal(overlay, document.body);\n}\n","import { useState, useRef } from 'react';\nimport { Form, Button, Row, Col, Alert } from 'react-bootstrap';\nimport { useForm } from 'react-hook-form';\nimport { api, getErrorMessage, setFormErrors } from '../../libs/api';\nimport { useTranslation } from '../../libs/i18n';\nimport { Turnstile, TurnstileRef } from '../../components/Turnstile';\nimport {\n    getBuddhaBloomAttributionContext,\n    trackLogin,\n    setAnalyticsUser,\n} from '../../libs/analytics';\nimport { isInAppBrowser } from '../../utils/browser';\nimport { getRedirectUrlAfterLogin } from '../../utils/redirect';\nimport { appPath } from '../../libs/url';\nimport { InAppBrowserOverlay } from '../../components/InAppBrowserOverlay';\n\ninterface AuthFormData {\n    email: string;\n}\n\ninterface VerificationFormData {\n    verificationCode: string;\n}\n\ntype AuthStep = 'email' | 'verification';\n\nconst OTP_RESEND_COOLDOWN_SECONDS = 60;\n\nfunction getOtpErrorMessage(error: unknown): string {\n    const message = getErrorMessage(error);\n    if (/rate limit|too many|429/i.test(message)) {\n        return 'Verification code requests are too frequent. Please wait 60 seconds before trying again.';\n    }\n    return message;\n}\n\nexport default function UnifiedAuth() {\n    const { t } = useTranslation();\n    const [step, setStep] = useState<AuthStep>('email');\n    const [email, setEmail] = useState('');\n    const [loading, setLoading] = useState(false);\n    const [error, setError] = useState<string | null>(null);\n    const [resendCountdown, setResendCountdown] = useState(0);\n    const [turnstileToken, setTurnstileToken] = useState<string>('');\n    const turnstileRef = useRef<TurnstileRef | null>(null);\n\n    const emailForm = useForm<AuthFormData>();\n    const verificationForm = useForm<VerificationFormData>();\n\n    // Get Turnstile site key from window (empty if disabled)\n    const turnstileSiteKey =\n        (window as { turnstileSiteKey?: string }).turnstileSiteKey || '';\n    const oauthProviders =\n        (window as { oauthProviders?: Record<string, boolean> })\n            .oauthProviders || {};\n    const googleOAuthEnabled = oauthProviders.google !== false;\n    const appleOAuthEnabled = oauthProviders.apple !== false;\n\n    // Check if it's an in-app browser (WeChat, Line, Messenger, etc.)\n    const isInApp = isInAppBrowser();\n\n    // Show Turnstile only if site key exists and not in in-app browser\n    const showTurnstile = Boolean(turnstileSiteKey && !isInApp);\n\n    // State for showing OAuth guidance modal in in-app browser\n    const [showOAuthGuideModal, setShowOAuthGuideModal] = useState(false);\n\n    // Handle OAuth button click\n    const handleOAuthClick = (platform: string) => {\n        if (platform === 'google' && !googleOAuthEnabled) {\n            setError(t('ui.auth.googleOAuthUnavailable'));\n            return;\n        }\n        if (platform === 'apple' && !appleOAuthEnabled) {\n            setError(t('ui.auth.appleOAuthUnavailable'));\n            return;\n        }\n\n        if (isInApp) {\n            // In in-app browser, show the guidance modal\n            setShowOAuthGuideModal(true);\n        } else {\n            // In normal browser, proceed with OAuth\n            handleOAuthAuth(platform);\n        }\n    };\n\n    // 发送验证码 (统一处理登录和注册)\n    const onSubmitEmail = async (data: AuthFormData) => {\n        // Only require Turnstile if we're showing it\n        if (!turnstileToken && showTurnstile) {\n            setError(\n                t('ui.auth.turnstileRequired') ||\n                    'Please complete the verification'\n            );\n            return;\n        }\n\n        setLoading(true);\n        setError(null);\n\n        try {\n            // Send OTP via Supabase Auth\n            const endpoint = '/api/auth/otp/send';\n\n            await api.post(endpoint, {\n                email: data.email,\n                turnstileToken: turnstileToken || undefined,\n            });\n\n            setEmail(data.email);\n            setStep('verification');\n            startResendCountdown();\n            // Reset Turnstile after successful submission\n            if (turnstileRef.current) {\n                turnstileRef.current.reset();\n            }\n            setTurnstileToken('');\n        } catch (err) {\n            if (!setFormErrors(err, emailForm.setError)) {\n                setError(getOtpErrorMessage(err));\n            }\n            // Reset Turnstile on error\n            if (turnstileRef.current) {\n                turnstileRef.current.reset();\n            }\n            setTurnstileToken('');\n        } finally {\n            setLoading(false);\n        }\n    };\n\n    // 验证验证码 (统一处理登录和注册)\n    const onSubmitVerification = async (data: VerificationFormData) => {\n        setLoading(true);\n        setError(null);\n\n        try {\n            // Verify OTP via Supabase Auth\n            const endpoint = '/api/auth/otp/verify';\n\n            const response = await api.post<{\n                success: boolean;\n                user?: { id: string; email: string };\n                message?: string;\n            }>(endpoint, {\n                email,\n                token: data.verificationCode,\n                attribution: getBuddhaBloomAttributionContext(),\n            });\n\n            // 追踪登录成功事件\n            if (response.data?.user) {\n                setAnalyticsUser(response.data.user.id);\n                trackLogin({\n                    method: 'email_code',\n                    success: true,\n                });\n            }\n\n            // 获取登录后应该跳转的 URL\n            const redirectUrl = getRedirectUrlAfterLogin();\n            window.location.href = redirectUrl;\n        } catch (err) {\n            if (!setFormErrors(err, verificationForm.setError)) {\n                const errorMessage = getErrorMessage(err);\n                setError(errorMessage);\n\n                // 追踪登录失败事件\n                trackLogin({\n                    method: 'email_code',\n                    success: false,\n                    error: errorMessage,\n                });\n            }\n        } finally {\n            setLoading(false);\n        }\n    };\n\n    // 重发验证码倒计时\n    const startResendCountdown = () => {\n        setResendCountdown(OTP_RESEND_COOLDOWN_SECONDS);\n        const interval = setInterval(() => {\n            setResendCountdown(prev => {\n                if (prev <= 1) {\n                    clearInterval(interval);\n                    return 0;\n                }\n                return prev - 1;\n            });\n        }, 1000);\n    };\n\n    // 第三方 OAuth 登录：跳转到后端 /auth/:platfor m，state 为登录成功后的 returnUrl\n    const handleOAuthAuth = (platform: string) => {\n        const returnUrl = getRedirectUrlAfterLogin();\n        window.location.href = appPath(\n            `/auth/${platform}?state=${encodeURIComponent(returnUrl)}`\n        );\n    };\n\n    // 重发验证码\n    const handleResendCode = async () => {\n        if (resendCountdown > 0) return;\n\n        if (!turnstileToken && turnstileSiteKey) {\n            setError(\n                t('ui.auth.turnstileRequired') ||\n                    'Please complete the verification'\n            );\n            return;\n        }\n\n        setLoading(true);\n        try {\n            // Use unified endpoint for resending code\n            const endpoint = '/api/auth/otp/send';\n\n            await api.post(endpoint, {\n                email,\n                turnstileToken: turnstileToken || undefined,\n            });\n            startResendCountdown();\n            // Reset Turnstile after successful submission\n            if (turnstileRef.current) {\n                turnstileRef.current.reset();\n            }\n            setTurnstileToken('');\n        } catch (err) {\n            setError(getOtpErrorMessage(err));\n            // Reset Turnstile on error\n            if (turnstileRef.current) {\n                turnstileRef.current.reset();\n            }\n            setTurnstileToken('');\n        } finally {\n            setLoading(false);\n        }\n    };\n\n    return (\n        <>\n            <Row className=\"login-layout\">\n                <Col xs={12} className=\"login-card-shell\">\n                    <div className=\"login-card\">\n                        <div className=\"text-center mb-4\">\n                            <h3>{t('ui.auth.logIn')}</h3>\n                        </div>\n\n                        {error && (\n                            <Alert variant=\"danger\" className=\"mb-4\">\n                                {error}\n                            </Alert>\n                        )}\n\n                        {step === 'email' ? (\n                            <>\n                                {/* 第三方登录按钮 */}\n                                <div className=\"d-grid gap-3 mb-4\">\n                                    {/* <Button\n                                    variant=\"outline-secondary\"\n                                    onClick={() => handleOAuthClick('facebook')}\n                                >\n                                    <i className=\"bi bi-facebook me-2\"></i>\n                                    {t('ui.auth.loginWithFacebook')}\n                                </Button> */}\n\n                                    <Button\n                                        variant=\"outline-secondary\"\n                                        onClick={() =>\n                                            handleOAuthClick('google')\n                                        }\n                                        disabled={!googleOAuthEnabled}\n                                        title={\n                                            googleOAuthEnabled\n                                                ? undefined\n                                                : t(\n                                                      'ui.auth.googleOAuthUnavailable'\n                                                  )\n                                        }\n                                    >\n                                        <i className=\"bi bi-google me-2\"></i>\n                                        {t('ui.auth.loginWithGoogle')}\n                                    </Button>\n\n                                    <Button\n                                        variant=\"outline-secondary\"\n                                        onClick={() =>\n                                            handleOAuthClick('apple')\n                                        }\n                                        disabled={!appleOAuthEnabled}\n                                        title={\n                                            appleOAuthEnabled\n                                                ? undefined\n                                                : t(\n                                                      'ui.auth.appleOAuthUnavailable'\n                                                  )\n                                        }\n                                    >\n                                        <i className=\"bi bi-apple me-2\"></i>\n                                        {t('ui.auth.loginWithApple')}\n                                    </Button>\n\n                                    {/* <Button\n                                    variant=\"outline-secondary\"\n                                    onClick={() => handleOAuthClick('wechat')}\n                                >\n                                    <i className=\"bi bi-wechat me-2\"></i>\n                                    {t('ui.auth.loginWithWeChat')}\n                                </Button> */}\n                                </div>\n\n                                {/* OR 分隔符 */}\n                                {/* <div className=\"text-center mb-4 divider\">\n                                <span className=\"bg-white p-1\">\n                                    {t('ui.auth.or')}\n                                </span>\n                            </div> */}\n\n                                {/* 邮箱登录表单 */}\n                                <Form\n                                    onSubmit={emailForm.handleSubmit(\n                                        onSubmitEmail\n                                    )}\n                                >\n                                    <Form.Group className=\"mb-4\">\n                                        <Form.Label>\n                                            {t('ui.auth.email')}\n                                        </Form.Label>\n                                        <Form.Control\n                                            type=\"email\"\n                                            placeholder={t(\n                                                'ui.auth.enterEmail'\n                                            )}\n                                            isInvalid={\n                                                !!emailForm.formState.errors\n                                                    .email\n                                            }\n                                            {...emailForm.register('email', {\n                                                required: t(\n                                                    'ui.auth.emailRequired'\n                                                ),\n                                                pattern: {\n                                                    value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i,\n                                                    message: t(\n                                                        'ui.auth.invalidEmail'\n                                                    ),\n                                                },\n                                            })}\n                                            disabled={loading}\n                                        />\n                                        <Form.Control.Feedback type=\"invalid\">\n                                            {\n                                                emailForm.formState.errors.email\n                                                    ?.message\n                                            }\n                                        </Form.Control.Feedback>\n                                    </Form.Group>\n\n                                    {showTurnstile && (\n                                        <div className=\"mb-3 d-flex justify-content-center\">\n                                            <Turnstile\n                                                ref={turnstileRef}\n                                                siteKey={turnstileSiteKey}\n                                                onVerify={token => {\n                                                    setTurnstileToken(token);\n                                                }}\n                                                onError={() => {\n                                                    setTurnstileToken('');\n                                                    setError(\n                                                        t(\n                                                            'ui.auth.turnstileError'\n                                                        ) ||\n                                                            'Verification failed. Please try again.'\n                                                    );\n                                                }}\n                                                onExpire={() => {\n                                                    setTurnstileToken('');\n                                                }}\n                                            />\n                                        </div>\n                                    )}\n\n                                    <div className=\"d-grid mb-4\">\n                                        <Button\n                                            type=\"submit\"\n                                            disabled={\n                                                loading ||\n                                                (showTurnstile &&\n                                                    !turnstileToken)\n                                            }\n                                        >\n                                            {loading\n                                                ? t('ui.auth.sending')\n                                                : t('ui.auth.continue')}\n                                        </Button>\n                                    </div>\n                                </Form>\n                            </>\n                        ) : (\n                            <>\n                                {/* 验证码页面 */}\n                                <Form\n                                    onSubmit={verificationForm.handleSubmit(\n                                        onSubmitVerification\n                                    )}\n                                >\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>\n                                            {t('ui.auth.email')}\n                                        </Form.Label>\n                                        <Form.Control\n                                            type=\"email\"\n                                            value={email}\n                                            readOnly\n                                            style={{\n                                                backgroundColor: '#f8f9fa',\n                                            }}\n                                        />\n                                    </Form.Group>\n\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>\n                                            {t('ui.auth.verificationCode')}\n                                        </Form.Label>\n                                        <Form.Control\n                                            type=\"text\"\n                                            placeholder={t(\n                                                'ui.auth.enterVerificationCode'\n                                            )}\n                                            isInvalid={\n                                                !!verificationForm.formState\n                                                    .errors.verificationCode\n                                            }\n                                            {...verificationForm.register(\n                                                'verificationCode',\n                                                {\n                                                    required: t(\n                                                        'ui.auth.verificationCodeRequired'\n                                                    ),\n                                                }\n                                            )}\n                                            disabled={loading}\n                                        />\n                                        <Form.Control.Feedback type=\"invalid\">\n                                            {\n                                                verificationForm.formState\n                                                    .errors.verificationCode\n                                                    ?.message\n                                            }\n                                        </Form.Control.Feedback>\n                                        <Form.Text className=\"text-muted\">\n                                            {t('ui.auth.codeSentToInbox')}\n                                        </Form.Text>\n                                    </Form.Group>\n\n                                    <div className=\"d-grid mb-3\">\n                                        <Button\n                                            type=\"submit\"\n                                            disabled={loading}\n                                        >\n                                            {loading\n                                                ? t('ui.auth.verifying')\n                                                : t('ui.auth.continue')}\n                                        </Button>\n                                    </div>\n\n                                    <div className=\"text-center mb-4\">\n                                        <Button\n                                            variant=\"link\"\n                                            className=\"text-decoration-none\"\n                                            onClick={handleResendCode}\n                                            disabled={\n                                                resendCountdown > 0 || loading\n                                            }\n                                        >\n                                            {resendCountdown > 0\n                                                ? t('ui.auth.resendIn', {\n                                                      seconds: resendCountdown,\n                                                  })\n                                                : t('ui.auth.resendCode')}\n                                        </Button>\n                                    </div>\n                                </Form>\n                            </>\n                        )}\n\n                        {/* 法律条款 */}\n                        <div className=\"text-center small\">\n                            {t('ui.auth.byContinuing', {\n                                action: t('ui.auth.byContinuingText'),\n                            })}{' '}\n                            <a href=\"/privacy\" className=\"text-decoration-none\">\n                                {t('ui.auth.privacyPolicy')}\n                            </a>{' '}\n                            {t('ui.auth.and')}{' '}\n                            <a href=\"/terms\" className=\"text-decoration-none\">\n                                {t('ui.auth.termsOfService')}\n                            </a>\n                            .\n                        </div>\n                    </div>\n                </Col>\n            </Row>\n\n            {/* OAuth guidance overlay for in-app browsers */}\n            <InAppBrowserOverlay\n                show={showOAuthGuideModal}\n                onClose={() => setShowOAuthGuideModal(false)}\n            />\n        </>\n    );\n}\n","import { render, initializeToastProvider } from '../../libs';\nimport { I18nProvider } from '../../libs/i18n';\nimport UnifiedAuth from './unifiedauth';\nimport './styles.scss';\n\n// 包装组件以提供 i18n 支持\nfunction LoginPageApp() {\n    return (\n        <I18nProvider>\n            <UnifiedAuth />\n        </I18nProvider>\n    );\n}\n\n// 初始化全局 ToastProvider\ninitializeToastProvider();\n\nrender('login-form', LoginPageApp);\n"],"names":["ae","n","a","s","ue","J","ce","K","b","U","P","M","X","e","m","v","g","T","w","E","i","f","G","z","de","le","_","ee","Te","we","Ee","pe","I","k","W","te","re","ne","$","o","oe","c","j","Q","ie","R","Z","u","D","x","B","r","L","H","d","h","O","A","V","se","C","me","t","y","l","F","fe","Y","N","p","q","S","xe","Turnstile","forwardRef","siteKey","onVerify","onError","onExpire","theme","size","className","ref","turnstileRef","React","jsx","ReactTurnstile","detectBrowserType","userAgent","InAppBrowserOverlay","show","onClose","useTranslation","copied","setCopied","useState","mounted","setMounted","browserType","isInApp","isInAppBrowser","useEffect","copyLink","currentUrl","arrowPosition","overlay","jsxs","Button","Fragment","createPortal","OTP_RESEND_COOLDOWN_SECONDS","getOtpErrorMessage","error","message","getErrorMessage","UnifiedAuth","step","setStep","email","setEmail","loading","setLoading","setError","resendCountdown","setResendCountdown","turnstileToken","setTurnstileToken","useRef","emailForm","useForm","verificationForm","turnstileSiteKey","oauthProviders","googleOAuthEnabled","appleOAuthEnabled","showTurnstile","showOAuthGuideModal","setShowOAuthGuideModal","handleOAuthClick","platform","handleOAuthAuth","onSubmitEmail","data","api","startResendCountdown","err","setFormErrors","onSubmitVerification","response","getBuddhaBloomAttributionContext","setAnalyticsUser","trackLogin","redirectUrl","getRedirectUrlAfterLogin","errorMessage","interval","prev","returnUrl","appPath","handleResendCode","Row","Col","Alert","Form","token","LoginPageApp","I18nProvider","initializeToastProvider","render"],"mappings":"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","x_google_ignoreList":[0]}