@quantabit/oauth-sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +143 -0
- package/dist/index.cjs +1152 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.esm.js +1124 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/styles.css +1 -0
- package/package.json +97 -0
- package/types/index.d.ts +60 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/services/oauthApi.js","../src/types/index.js","../src/i18n/index.js","../src/hooks/useOAuth.js","../src/components/OAuth.jsx","../src/index.js"],"sourcesContent":["/**\n * OAuth SDK - API 客户端\n * OAuth 认证系统后端接口封装\n * \n * 使用 BaseApiClient 基类简化代码\n */\n\nimport { BaseApiClient } from '@quantabit/sdk-config';\n\n/**\n * OAuth API 客户端\n */\nexport class OauthApiClient extends BaseApiClient {\n constructor(config = {}) {\n super('/oauth', config);\n }\n\n _normalizeProviderArgs(providerOrOptions, options = {}) {\n if (typeof providerOrOptions === 'object' && providerOrOptions !== null) {\n const { provider, ...params } = providerOrOptions;\n return { provider, params };\n }\n return { provider: providerOrOptions, params: options };\n }\n\n // ============ OAuth 登录 ============\n\n /**\n * 获取 OAuth 登录 URL\n * @param {string} provider - 提供商(google, github, twitter, discord 等)\n * @param {Object} options - 选项\n */\n async getAuthUrl(provider, options = {}) {\n const normalized = this._normalizeProviderArgs(provider, options);\n return this.get(`/${normalized.provider}/auth-url`, normalized.params);\n }\n\n /**\n * OAuth 回调处理\n * @param {string} provider - 提供商\n * @param {string} code - 授权码\n * @param {string} state - 状态\n */\n async handleCallback(provider, code, state) {\n if (typeof provider === 'object' && provider !== null) {\n const { provider: callbackProvider, code: callbackCode, state: callbackState } = provider;\n return this.post(`/${callbackProvider}/callback`, {\n code: callbackCode,\n state: callbackState,\n });\n }\n return this.post(`/${provider}/callback`, { code, state });\n }\n\n /**\n * 获取支持的 OAuth 提供商\n */\n async getProviders() {\n return this.get('/providers');\n }\n\n // ============ 账号绑定 ============\n\n /**\n * 绑定第三方账号\n * @param {string} provider - 提供商\n * @param {string} code - 授权码\n */\n async bindAccount(provider, code) {\n return this.post(`/${provider}/bind`, { code });\n }\n\n /**\n * 解绑第三方账号\n * @param {string} provider - 提供商\n */\n async unbindAccount(provider) {\n return this.delete(`/${provider}/bind`);\n }\n\n /**\n * 解绑第三方账号(兼容 hooks 命名)\n * @param {string} provider - 提供商\n */\n async unlinkAccount(provider) {\n return this.unbindAccount(provider);\n }\n\n /**\n * 获取已绑定账号\n */\n async getBoundAccounts() {\n return this.get('/accounts');\n }\n\n /**\n * 获取已关联账号(兼容旧版快捷方法命名)\n */\n async getLinkedAccounts() {\n return this.getBoundAccounts();\n }\n\n /**\n * 检查账号绑定状态\n * @param {string} provider - 提供商\n */\n async checkBindStatus(provider) {\n return this.get(`/${provider}/bind/status`);\n }\n\n // ============ 钱包连接 ============\n\n /**\n * 获取钱包连接消息\n * @param {string} address - 钱包地址\n */\n async getWalletMessage(address) {\n return this.post('/wallet/message', { address });\n }\n\n /**\n * 验证钱包签名\n * @param {string} address - 钱包地址\n * @param {string} signature - 签名\n * @param {string} message - 消息\n */\n async verifyWalletSignature(address, signature, message) {\n return this.post('/wallet/verify', { address, signature, message });\n }\n\n /**\n * 使用钱包登录\n * @param {string} address - 钱包地址\n * @param {string} signature - 签名\n * @param {string} message - 消息\n */\n async loginWithWallet(address, signature, message) {\n return this.post('/wallet/login', { address, signature, message });\n }\n\n /**\n * 绑定钱包\n * @param {string} address - 钱包地址\n * @param {string} signature - 签名\n * @param {string} message - 消息\n */\n async bindWallet(address, signature, message) {\n return this.post('/wallet/bind', { address, signature, message });\n }\n\n /**\n * 解绑钱包\n * @param {string} address - 钱包地址\n */\n async unbindWallet(address) {\n return this.delete('/wallet/bind', { address });\n }\n\n /**\n * 获取已绑定钱包\n */\n async getBoundWallets() {\n return this.get('/wallet/list');\n }\n\n // ============ SSO 单点登录 ============\n\n /**\n * 获取 SSO 登录 URL\n * @param {Object} options - 选项\n */\n async getSSOUrl(options = {}) {\n return this.get('/sso/url', options);\n }\n\n /**\n * SSO 登录验证\n * @param {string} token - SSO Token\n */\n async verifySSOToken(token) {\n return this.post('/sso/verify', { token });\n }\n\n /**\n * SSO 登出\n */\n async ssoLogout() {\n return this.post('/sso/logout');\n }\n\n /**\n * 检查当前 OAuth 登录态\n */\n async checkAuth() {\n return this.get('/auth/check');\n }\n\n /**\n * 登出当前 OAuth 会话\n */\n async logout() {\n return this.post('/logout');\n }\n\n // ============ Token 管理 ============\n\n /**\n * 刷新 Token\n * @param {string} refreshToken - 刷新 Token\n */\n async refreshToken(refreshToken) {\n return this.post('/token/refresh', { refresh_token: refreshToken });\n }\n\n /**\n * 撤销 Token\n * @param {string} token - Token\n */\n async revokeToken(token) {\n return this.post('/token/revoke', { token });\n }\n\n /**\n * 获取 Token 信息\n * @param {string} token - Token\n */\n async getTokenInfo(token) {\n return this.post('/token/info', { token });\n }\n\n // ============ 授权管理 ============\n\n /**\n * 获取授权应用列表\n */\n async getAuthorizedApps() {\n return this.get('/apps');\n }\n\n /**\n * 撤销应用授权\n * @param {string} appId - 应用 ID\n */\n async revokeAppAuthorization(appId) {\n return this.delete(`/apps/${appId}`);\n }\n}\n\n// 创建默认实例\nexport const oauthApi = new OauthApiClient();\n\nexport const OAuthApiClient = OauthApiClient;\n\nexport default oauthApi;\n","/**\n * OAuth SDK - 类型定义\n */\n\n// 第三方登录提供商\nexport const OAuthProvider = {\n // 社交\n GOOGLE: 'google',\n FACEBOOK: 'facebook',\n TWITTER: 'twitter',\n GITHUB: 'github',\n DISCORD: 'discord',\n TELEGRAM: 'telegram',\n WECHAT: 'wechat',\n WEIBO: 'weibo',\n QQ: 'qq',\n APPLE: 'apple',\n \n // 钱包\n METAMASK: 'metamask',\n WALLET_CONNECT: 'wallet_connect',\n COINBASE_WALLET: 'coinbase_wallet',\n PHANTOM: 'phantom',\n \n // 企业\n MICROSOFT: 'microsoft',\n OKTA: 'okta',\n AUTH0: 'auth0',\n};\n\n// 连接状态\nexport const ConnectionStatus = {\n DISCONNECTED: 'disconnected',\n CONNECTING: 'connecting',\n CONNECTED: 'connected',\n ERROR: 'error',\n};\n\n// 账户绑定状态\nexport const BindingStatus = {\n NOT_BOUND: 'not_bound',\n BOUND: 'bound',\n PENDING: 'pending',\n};\n\n// 授权范围\nexport const OAuthScope = {\n PROFILE: 'profile',\n EMAIL: 'email',\n OPENID: 'openid',\n READ: 'read',\n WRITE: 'write',\n};\n\nexport default {\n OAuthProvider,\n ConnectionStatus,\n BindingStatus,\n OAuthScope,\n};\n","/**\n * OAuth SDK - 国际化\n * OAuth授权系统多语言支持\n */\n\nexport const SUPPORTED_LANGUAGES = ['en', 'zh', 'ja', 'ko'];\n\nexport const messages = {\n zh: {\n // 登录\n login: '登录',\n loginWith: '使用 {provider} 登录',\n loginTo: '登录到',\n signIn: '登录',\n signUp: '注册',\n signOut: '退出登录',\n logout: '退出',\n \n // 第三方\n google: 'Google',\n apple: 'Apple',\n github: 'GitHub',\n twitter: 'Twitter',\n facebook: 'Facebook',\n discord: 'Discord',\n wechat: '微信',\n qq: 'QQ',\n \n // 授权\n authorize: '授权',\n authorization: '授权',\n authorizing: '授权中...',\n allowAccess: '允许访问',\n denyAccess: '拒绝访问',\n \n // 权限\n permissions: '权限',\n requestingPermissions: '请求以下权限',\n readProfile: '读取基本资料',\n readEmail: '读取邮箱地址',\n writeData: '写入数据',\n \n // 连接\n connect: '连接',\n connected: '已连接',\n disconnect: '断开连接',\n connectionRequired: '需要连接账户',\n \n // 状态\n loading: '加载中...',\n redirecting: '跳转中...',\n success: '授权成功',\n failed: '授权失败',\n error: '发生错误',\n tryAgain: '重试',\n \n // 账户\n linkedAccounts: '已关联账户',\n linkAccount: '关联账户',\n unlinkAccount: '解除关联',\n noLinkedAccounts: '暂无关联账户',\n \n // 安全\n secureLogin: '安全登录',\n securedBy: '由 {provider} 提供安全保障',\n \n // 协议\n termsOfService: '服务条款',\n privacyPolicy: '隐私政策',\n byLoggingIn: '登录即表示您同意我们的',\n and: '和',\n \n // 返回\n cancel: '取消',\n back: '返回',\n continueAs: '以 {name} 继续',\n },\n en: {\n login: 'Login',\n loginWith: 'Login with {provider}',\n loginTo: 'Login to',\n signIn: 'Sign In',\n signUp: 'Sign Up',\n signOut: 'Sign Out',\n logout: 'Logout',\n \n google: 'Google',\n apple: 'Apple',\n github: 'GitHub',\n twitter: 'Twitter',\n facebook: 'Facebook',\n discord: 'Discord',\n wechat: 'WeChat',\n qq: 'QQ',\n \n authorize: 'Authorize',\n authorization: 'Authorization',\n authorizing: 'Authorizing...',\n allowAccess: 'Allow Access',\n denyAccess: 'Deny Access',\n \n permissions: 'Permissions',\n requestingPermissions: 'Requesting the following permissions',\n readProfile: 'Read your profile',\n readEmail: 'Read your email',\n writeData: 'Write data',\n \n connect: 'Connect',\n connected: 'Connected',\n disconnect: 'Disconnect',\n connectionRequired: 'Connection required',\n \n loading: 'Loading...',\n redirecting: 'Redirecting...',\n success: 'Success',\n failed: 'Failed',\n error: 'Error',\n tryAgain: 'Try Again',\n \n linkedAccounts: 'Linked Accounts',\n linkAccount: 'Link Account',\n unlinkAccount: 'Unlink',\n noLinkedAccounts: 'No linked accounts',\n \n secureLogin: 'Secure Login',\n securedBy: 'Secured by {provider}',\n \n termsOfService: 'Terms of Service',\n privacyPolicy: 'Privacy Policy',\n byLoggingIn: 'By logging in, you agree to our',\n and: 'and',\n \n cancel: 'Cancel',\n back: 'Back',\n continueAs: 'Continue as {name}',\n },\n ja: {\n login: 'ログイン',\n loginWith: '{provider} でログイン',\n loginTo: 'ログイン先',\n signIn: 'サインイン',\n signUp: 'サインアップ',\n signOut: 'サインアウト',\n logout: 'ログアウト',\n \n google: 'Google',\n apple: 'Apple',\n github: 'GitHub',\n twitter: 'Twitter',\n facebook: 'Facebook',\n discord: 'Discord',\n wechat: 'WeChat',\n qq: 'QQ',\n \n authorize: '認可',\n authorization: '認可',\n authorizing: '認可中...',\n allowAccess: 'アクセスを許可',\n denyAccess: 'アクセスを拒否',\n \n permissions: '権限',\n requestingPermissions: '以下の権限を要求しています',\n readProfile: 'プロフィールの読み取り',\n readEmail: 'メールの読み取り',\n writeData: 'データの書き込み',\n \n connect: '接続',\n connected: '接続済み',\n disconnect: '切断',\n connectionRequired: '接続が必要',\n \n loading: '読み込み中...',\n redirecting: 'リダイレクト中...',\n success: '成功',\n failed: '失敗',\n error: 'エラー',\n tryAgain: '再試行',\n \n linkedAccounts: '連携済みアカウント',\n linkAccount: 'アカウントを連携',\n unlinkAccount: '連携解除',\n noLinkedAccounts: '連携アカウントなし',\n \n secureLogin: 'セキュアログイン',\n securedBy: '{provider} によるセキュリティ',\n \n termsOfService: '利用規約',\n privacyPolicy: 'プライバシーポリシー',\n byLoggingIn: 'ログインすると、以下に同意することになります:',\n and: 'と',\n \n cancel: 'キャンセル',\n back: '戻る',\n continueAs: '{name} として続行',\n },\n ko: {\n login: '로그인',\n loginWith: '{provider}로 로그인',\n loginTo: '로그인 대상',\n signIn: '로그인',\n signUp: '가입하기',\n signOut: '로그아웃',\n logout: '로그아웃',\n \n google: 'Google',\n apple: 'Apple',\n github: 'GitHub',\n twitter: 'Twitter',\n facebook: 'Facebook',\n discord: 'Discord',\n wechat: 'WeChat',\n qq: 'QQ',\n \n authorize: '승인',\n authorization: '승인',\n authorizing: '승인 중...',\n allowAccess: '접근 허용',\n denyAccess: '접근 거부',\n \n permissions: '권한',\n requestingPermissions: '다음 권한을 요청합니다',\n readProfile: '프로필 읽기',\n readEmail: '이메일 읽기',\n writeData: '데이터 쓰기',\n \n connect: '연결',\n connected: '연결됨',\n disconnect: '연결 해제',\n connectionRequired: '연결 필요',\n \n loading: '로딩 중...',\n redirecting: '리다이렉트 중...',\n success: '성공',\n failed: '실패',\n error: '오류',\n tryAgain: '다시 시도',\n \n linkedAccounts: '연결된 계정',\n linkAccount: '계정 연결',\n unlinkAccount: '연결 해제',\n noLinkedAccounts: '연결된 계정 없음',\n \n secureLogin: '보안 로그인',\n securedBy: '{provider}에 의해 보안됨',\n \n termsOfService: '서비스 약관',\n privacyPolicy: '개인정보 처리방침',\n byLoggingIn: '로그인하면 다음에 동의하는 것입니다:',\n and: '및',\n \n cancel: '취소',\n back: '뒤로',\n continueAs: '{name}(으)로 계속',\n },\n};\n\nlet currentLanguage = 'zh';\n\nexport function setLanguage(lang) {\n if (SUPPORTED_LANGUAGES.includes(lang)) currentLanguage = lang;\n}\n\nexport function getLanguage() {\n return currentLanguage;\n}\n\nexport function t(key, params = {}) {\n let text = (messages[currentLanguage] || messages.en)[key] || key;\n Object.entries(params).forEach(([k, v]) => {\n text = text.replace(new RegExp(`\\\\{${k}\\\\}`, 'g'), v);\n });\n return text;\n}\n\nexport default { messages, SUPPORTED_LANGUAGES, setLanguage, getLanguage, t };\n","/**\n * OAuth SDK - React Hooks\n * OAuth授权系统相关的状态管理\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { oauthApi } from '../services/oauthApi';\n\n/**\n * OAuth登录\n */\nexport function useOAuthLogin() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n\n const login = useCallback(async (provider, options = {}) => {\n try {\n setLoading(true);\n setError(null);\n \n const { redirectUri, scope, state } = options;\n \n // 获取授权URL\n const response = await oauthApi.getAuthUrl({\n provider,\n redirectUri: redirectUri || window.location.origin + '/oauth/callback',\n scope,\n state,\n });\n \n // 打开授权窗口或跳转\n if (options.popup) {\n return openPopup(response.authUrl, provider);\n } else {\n window.location.href = response.authUrl;\n }\n } catch (err) {\n setError(err.message);\n throw err;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { login, loading, error };\n}\n\n/**\n * OAuth回调处理\n */\nexport function useOAuthCallback() {\n const [status, setStatus] = useState('idle'); // idle, loading, success, error\n const [user, setUser] = useState(null);\n const [error, setError] = useState(null);\n\n const handleCallback = useCallback(async (code, state, provider) => {\n try {\n setStatus('loading');\n setError(null);\n \n const response = await oauthApi.handleCallback({\n code,\n state,\n provider,\n });\n \n setUser(response.user);\n setStatus('success');\n return response;\n } catch (err) {\n setError(err.message);\n setStatus('error');\n throw err;\n }\n }, []);\n\n // 自动处理URL参数\n useEffect(() => {\n const params = new URLSearchParams(window.location.search);\n const code = params.get('code');\n const state = params.get('state');\n const provider = params.get('provider');\n \n if (code) {\n handleCallback(code, state, provider);\n }\n }, [handleCallback]);\n\n return { status, user, error, handleCallback };\n}\n\n/**\n * 已关联账户\n */\nexport function useLinkedAccounts() {\n const [accounts, setAccounts] = useState([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n\n const fetchAccounts = useCallback(async () => {\n try {\n setLoading(true);\n const response = await oauthApi.getLinkedAccounts();\n setAccounts(response.data || []);\n setError(null);\n } catch (err) {\n setError(err.message);\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchAccounts();\n }, [fetchAccounts]);\n\n const linkAccount = useCallback(async (provider) => {\n const response = await oauthApi.getAuthUrl({\n provider,\n redirectUri: window.location.origin + '/oauth/link-callback',\n isLink: true,\n });\n window.location.href = response.authUrl;\n }, []);\n\n const unlinkAccount = useCallback(async (provider) => {\n try {\n await oauthApi.unlinkAccount(provider);\n setAccounts(prev => prev.filter(a => a.provider !== provider));\n } catch (err) {\n console.error('Unlink error:', err);\n throw err;\n }\n }, []);\n\n const isLinked = useCallback((provider) => {\n return accounts.some(a => a.provider === provider);\n }, [accounts]);\n\n return {\n accounts,\n loading,\n error,\n linkAccount,\n unlinkAccount,\n isLinked,\n refresh: fetchAccounts,\n };\n}\n\n/**\n * OAuth状态\n */\nexport function useOAuthState() {\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n const [user, setUser] = useState(null);\n const [loading, setLoading] = useState(true);\n\n const checkAuth = useCallback(async () => {\n try {\n setLoading(true);\n const response = await oauthApi.checkAuth();\n setIsAuthenticated(response.isAuthenticated);\n setUser(response.user);\n } catch (err) {\n setIsAuthenticated(false);\n setUser(null);\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n checkAuth();\n }, [checkAuth]);\n\n const logout = useCallback(async () => {\n try {\n await oauthApi.logout();\n setIsAuthenticated(false);\n setUser(null);\n } catch (err) {\n console.error('Logout error:', err);\n }\n }, []);\n\n return { isAuthenticated, user, loading, logout, refresh: checkAuth };\n}\n\n/**\n * 可用的OAuth提供商\n */\nexport function useOAuthProviders() {\n const [providers, setProviders] = useState([]);\n const [loading, setLoading] = useState(true);\n\n const fetchProviders = useCallback(async () => {\n try {\n setLoading(true);\n const response = await oauthApi.getProviders();\n setProviders(response.data || []);\n } catch (err) {\n console.error('Get providers error:', err);\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchProviders();\n }, [fetchProviders]);\n\n return { providers, loading };\n}\n\n/**\n * 弹窗登录\n */\nfunction openPopup(url, name) {\n const width = 500;\n const height = 600;\n const left = (window.innerWidth - width) / 2 + window.screenX;\n const top = (window.innerHeight - height) / 2 + window.screenY;\n \n const popup = window.open(\n url,\n name,\n `width=${width},height=${height},left=${left},top=${top}`\n );\n \n return new Promise((resolve, reject) => {\n const checkClosed = setInterval(() => {\n if (!popup || popup.closed) {\n clearInterval(checkClosed);\n reject(new Error('Login window closed'));\n }\n }, 500);\n\n // 监听消息\n const handleMessage = (event) => {\n if (event.origin !== window.location.origin) return;\n \n if (event.data?.type === 'oauth_callback') {\n clearInterval(checkClosed);\n window.removeEventListener('message', handleMessage);\n popup?.close();\n \n if (event.data.error) {\n reject(new Error(event.data.error));\n } else {\n resolve(event.data.result);\n }\n }\n };\n\n window.addEventListener('message', handleMessage);\n });\n}\n","/**\n * OAuth SDK - React 组件\n * OAuth授权系统可视化组件\n */\n\nimport React, { useCallback } from 'react';\nimport {\n useOAuthLogin,\n useOAuthCallback,\n useLinkedAccounts,\n useOAuthState,\n useOAuthProviders,\n} from '../hooks/useOAuth';\nimport { t } from '../i18n';\nimport './OAuth.css';\n\n// 提供商图标\nconst providerIcons = {\n google: '🔵',\n apple: '🍎',\n github: '⚫',\n twitter: '🐦',\n facebook: '📘',\n discord: '🎮',\n wechat: '💬',\n qq: '🐧',\n};\n\n// 提供商品牌色\nconst providerColors = {\n google: '#4285f4',\n apple: '#000000',\n github: '#24292e',\n twitter: '#1da1f2',\n facebook: '#1877f2',\n discord: '#5865f2',\n wechat: '#07c160',\n qq: '#12b7f5',\n};\n\n/**\n * 第三方登录按钮\n */\nexport function OAuthButton({ provider, variant = 'default', onSuccess, onError }) {\n const { login, loading } = useOAuthLogin();\n\n const handleClick = useCallback(async () => {\n try {\n const result = await login(provider, { popup: true });\n onSuccess?.(result);\n } catch (err) {\n onError?.(err);\n }\n }, [login, provider, onSuccess, onError]);\n\n const icon = providerIcons[provider] || '🔐';\n const color = providerColors[provider];\n\n return (\n <button\n className={`eco-oauth-btn eco-oauth-btn-${variant} eco-oauth-btn-${provider}`}\n onClick={handleClick}\n disabled={loading}\n style={variant === 'brand' ? { backgroundColor: color } : undefined}\n >\n <span className=\"eco-oauth-btn-icon\">{icon}</span>\n <span className=\"eco-oauth-btn-text\">\n {loading ? t('loading') : t('loginWith', { provider: t(provider) })}\n </span>\n </button>\n );\n}\n\n/**\n * 登录按钮组\n */\nexport function OAuthButtonGroup({ providers = ['google', 'github', 'twitter'], variant = 'default', onSuccess, onError }) {\n return (\n <div className=\"eco-oauth-btn-group\">\n {providers.map((provider) => (\n <OAuthButton\n key={provider}\n provider={provider}\n variant={variant}\n onSuccess={onSuccess}\n onError={onError}\n />\n ))}\n </div>\n );\n}\n\n/**\n * 图标按钮组\n */\nexport function OAuthIconGroup({ providers = ['google', 'github', 'twitter'], onSuccess, onError }) {\n const { login, loading } = useOAuthLogin();\n\n const handleClick = useCallback(async (provider) => {\n try {\n const result = await login(provider, { popup: true });\n onSuccess?.(result);\n } catch (err) {\n onError?.(err);\n }\n }, [login, onSuccess, onError]);\n\n return (\n <div className=\"eco-oauth-icon-group\">\n {providers.map((provider) => (\n <button\n key={provider}\n className={`eco-oauth-icon-btn eco-oauth-icon-${provider}`}\n onClick={() => handleClick(provider)}\n disabled={loading}\n title={t(provider)}\n style={{ backgroundColor: providerColors[provider] }}\n >\n {providerIcons[provider] || '🔐'}\n </button>\n ))}\n </div>\n );\n}\n\n/**\n * OAuth回调页面\n */\nexport function OAuthCallbackPage({ onSuccess, onError }) {\n const { status, user, error } = useOAuthCallback();\n\n if (status === 'loading') {\n return (\n <div className=\"eco-oauth-callback\">\n <div className=\"eco-oauth-callback-loading\">\n <div className=\"eco-oauth-spinner\" />\n <span>{t('authorizing')}</span>\n </div>\n </div>\n );\n }\n\n if (status === 'error') {\n onError?.(error);\n return (\n <div className=\"eco-oauth-callback\">\n <div className=\"eco-oauth-callback-error\">\n <span className=\"eco-oauth-callback-icon\">❌</span>\n <h3>{t('failed')}</h3>\n <p>{error}</p>\n <button onClick={() => window.close()}>{t('back')}</button>\n </div>\n </div>\n );\n }\n\n if (status === 'success') {\n onSuccess?.(user);\n \n // 如果在弹窗中,发送消息给父窗口\n if (window.opener) {\n window.opener.postMessage({\n type: 'oauth_callback',\n result: { user },\n }, window.location.origin);\n }\n\n return (\n <div className=\"eco-oauth-callback\">\n <div className=\"eco-oauth-callback-success\">\n <span className=\"eco-oauth-callback-icon\">✅</span>\n <h3>{t('success')}</h3>\n <p>{t('continueAs', { name: user?.name })}</p>\n </div>\n </div>\n );\n }\n\n return null;\n}\n\n/**\n * 已关联账户列表\n */\nexport function LinkedAccountsList() {\n const { accounts, loading, unlinkAccount, isLinked } = useLinkedAccounts();\n const { providers } = useOAuthProviders();\n\n if (loading) {\n return (\n <div className=\"eco-oauth-linked eco-oauth-loading\">\n <div className=\"eco-oauth-spinner\" />\n </div>\n );\n }\n\n return (\n <div className=\"eco-oauth-linked\">\n <h4>{t('linkedAccounts')}</h4>\n \n {accounts.length === 0 ? (\n <div className=\"eco-oauth-linked-empty\">{t('noLinkedAccounts')}</div>\n ) : (\n <div className=\"eco-oauth-linked-list\">\n {accounts.map((account) => (\n <div key={account.provider} className=\"eco-oauth-linked-item\">\n <span\n className=\"eco-oauth-linked-icon\"\n style={{ backgroundColor: providerColors[account.provider] }}\n >\n {providerIcons[account.provider]}\n </span>\n <div className=\"eco-oauth-linked-info\">\n <span className=\"eco-oauth-linked-name\">{t(account.provider)}</span>\n <span className=\"eco-oauth-linked-email\">{account.email}</span>\n </div>\n <button\n className=\"eco-oauth-unlink-btn\"\n onClick={() => unlinkAccount(account.provider)}\n >\n {t('unlinkAccount')}\n </button>\n </div>\n ))}\n </div>\n )}\n\n <div className=\"eco-oauth-link-more\">\n <h5>{t('linkAccount')}</h5>\n <div className=\"eco-oauth-link-options\">\n {providers\n .filter((p) => !isLinked(p.id))\n .map((p) => (\n <OAuthButton\n key={p.id}\n provider={p.id}\n variant=\"outline\"\n />\n ))}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * 登录模态框\n */\nexport function OAuthLoginModal({ isOpen, onClose, onSuccess }) {\n if (!isOpen) return null;\n\n return (\n <div className=\"eco-oauth-modal\">\n <div className=\"eco-oauth-modal-overlay\" onClick={onClose} />\n <div className=\"eco-oauth-modal-content\">\n <button className=\"eco-oauth-modal-close\" onClick={onClose}>×</button>\n \n <h2>{t('login')}</h2>\n \n <OAuthButtonGroup\n providers={['google', 'github', 'twitter']}\n variant=\"brand\"\n onSuccess={(result) => { onSuccess?.(result); onClose(); }}\n />\n \n <div className=\"eco-oauth-modal-divider\">\n <span>或</span>\n </div>\n \n <OAuthIconGroup\n providers={['facebook', 'discord', 'apple']}\n onSuccess={(result) => { onSuccess?.(result); onClose(); }}\n />\n \n <div className=\"eco-oauth-modal-footer\">\n <span>{t('byLoggingIn')}</span>\n <a href=\"/terms\">{t('termsOfService')}</a>\n <span>{t('and')}</span>\n <a href=\"/privacy\">{t('privacyPolicy')}</a>\n </div>\n </div>\n </div>\n );\n}\n\n","/**\n * @quantabit/oauth-sdk\n * OAuth System SDK - Full Version\n */\n\n// API Client\nexport { oauthApi, OAuthApiClient } from './services/oauthApi';\n\n// Types\nexport { OAuthProvider, OAuthScope, ConnectionStatus, BindingStatus } from './types';\n\n// i18n\nexport { messages, SUPPORTED_LANGUAGES, setLanguage, getLanguage, t } from './i18n';\n\n// React Hooks\nexport {\n useOAuthLogin,\n useOAuthCallback,\n useLinkedAccounts,\n useOAuthState,\n useOAuthProviders,\n} from './hooks/useOAuth';\n\n// React Components\nexport {\n OAuthButton,\n OAuthButtonGroup,\n OAuthIconGroup,\n OAuthCallbackPage,\n LinkedAccountsList,\n OAuthLoginModal,\n} from './components/OAuth';\n\n// Shortcut Methods\nimport { oauthApi } from './services/oauthApi';\n\nexport const getAuthUrl = (...args) => oauthApi.getAuthUrl(...args);\nexport const handleCallback = (...args) => oauthApi.handleCallback(...args);\nexport const checkAuth = (...args) => oauthApi.checkAuth(...args);\nexport const logout = (...args) => oauthApi.logout(...args);\nexport const getLinkedAccounts = (...args) => oauthApi.getLinkedAccounts(...args);\n\nimport \"./styles/oauth.css\";\n"],"names":["OauthApiClient","BaseApiClient","constructor","config","_normalizeProviderArgs","providerOrOptions","options","provider","params","getAuthUrl","normalized","get","handleCallback","code","state","callbackProvider","callbackCode","callbackState","post","getProviders","bindAccount","unbindAccount","delete","unlinkAccount","getBoundAccounts","getLinkedAccounts","checkBindStatus","getWalletMessage","address","verifyWalletSignature","signature","message","loginWithWallet","bindWallet","unbindWallet","getBoundWallets","getSSOUrl","verifySSOToken","token","ssoLogout","checkAuth","logout","refreshToken","refresh_token","revokeToken","getTokenInfo","getAuthorizedApps","revokeAppAuthorization","appId","oauthApi","OAuthApiClient","OAuthProvider","GOOGLE","FACEBOOK","TWITTER","GITHUB","DISCORD","TELEGRAM","WECHAT","WEIBO","QQ","APPLE","METAMASK","WALLET_CONNECT","COINBASE_WALLET","PHANTOM","MICROSOFT","OKTA","AUTH0","ConnectionStatus","DISCONNECTED","CONNECTING","CONNECTED","ERROR","BindingStatus","NOT_BOUND","BOUND","PENDING","OAuthScope","PROFILE","EMAIL","OPENID","READ","WRITE","SUPPORTED_LANGUAGES","messages","zh","login","loginWith","loginTo","signIn","signUp","signOut","google","apple","github","twitter","facebook","discord","wechat","qq","authorize","authorization","authorizing","allowAccess","denyAccess","permissions","requestingPermissions","readProfile","readEmail","writeData","connect","connected","disconnect","connectionRequired","loading","redirecting","success","failed","error","tryAgain","linkedAccounts","linkAccount","noLinkedAccounts","secureLogin","securedBy","termsOfService","privacyPolicy","byLoggingIn","and","cancel","back","continueAs","en","ja","ko","currentLanguage","setLanguage","lang","includes","getLanguage","t","key","text","Object","entries","forEach","k","v","replace","RegExp","useOAuthLogin","setLoading","useState","setError","useCallback","redirectUri","scope","response","window","location","origin","popup","openPopup","authUrl","href","err","useOAuthCallback","status","setStatus","user","setUser","useEffect","URLSearchParams","search","useLinkedAccounts","accounts","setAccounts","fetchAccounts","data","isLink","prev","filter","a","console","isLinked","some","refresh","useOAuthState","isAuthenticated","setIsAuthenticated","useOAuthProviders","providers","setProviders","fetchProviders","url","name","width","height","left","innerWidth","screenX","top","innerHeight","screenY","open","Promise","resolve","reject","checkClosed","setInterval","closed","clearInterval","Error","handleMessage","event","type","removeEventListener","close","result","addEventListener","providerIcons","providerColors","OAuthButton","variant","onSuccess","onError","handleClick","icon","color","React","createElement","className","onClick","disabled","style","backgroundColor","undefined","OAuthButtonGroup","map","OAuthIconGroup","title","OAuthCallbackPage","opener","postMessage","LinkedAccountsList","length","account","email","p","id","OAuthLoginModal","isOpen","onClose","args"],"mappings":"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"}
|