mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-09-07 01:56:53 +00:00
Add a Bun script to apply and normalize AGPL copyright headers across the default frontend source files. The script keeps headers idempotent, upgrades existing headers to the 2023-2026 QuantumNous range, and is exposed through `bun run copyright` for future maintenance.
136 lines
4.1 KiB
TypeScript
Vendored
136 lines
4.1 KiB
TypeScript
Vendored
/*
|
|
Copyright (C) 2023-2026 QuantumNous
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Affero General Public License as
|
|
published by the Free Software Foundation, either version 3 of the
|
|
License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Affero General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
For commercial licensing, please contact support@quantumnous.com
|
|
*/
|
|
import { api } from '@/lib/api'
|
|
import type {
|
|
LoginPayload,
|
|
LoginResponse,
|
|
Login2FAResponse,
|
|
TwoFAPayload,
|
|
RegisterPayload,
|
|
ApiResponse,
|
|
} from './types'
|
|
|
|
// ============================================================================
|
|
// Authentication APIs
|
|
// ============================================================================
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Login & Logout
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// User login with username and password
|
|
export async function login(payload: LoginPayload) {
|
|
const turnstile = payload.turnstile ?? ''
|
|
const res = await api.post<LoginResponse>(
|
|
`/api/user/login?turnstile=${turnstile}`,
|
|
{
|
|
username: payload.username,
|
|
password: payload.password,
|
|
}
|
|
)
|
|
return res.data
|
|
}
|
|
|
|
// Two-factor authentication login
|
|
export async function login2fa(payload: TwoFAPayload) {
|
|
const res = await api.post<Login2FAResponse>('/api/user/login/2fa', payload)
|
|
return res.data
|
|
}
|
|
|
|
// User logout
|
|
export async function logout(): Promise<ApiResponse> {
|
|
const res = await api.get('/api/user/logout')
|
|
return res.data
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Password Management
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// Send password reset email
|
|
export async function sendPasswordResetEmail(
|
|
email: string,
|
|
turnstile?: string
|
|
): Promise<ApiResponse> {
|
|
const res = await api.get('/api/reset_password', {
|
|
params: { email, turnstile },
|
|
})
|
|
return res.data
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// OAuth
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// Start GitHub OAuth flow
|
|
export async function githubOAuthStart(clientId: string, state: string) {
|
|
const url = `https://github.com/login/oauth/authorize?client_id=${clientId}&state=${state}&scope=user:email`
|
|
window.open(url)
|
|
}
|
|
|
|
// Get OAuth state for CSRF protection
|
|
export async function getOAuthState(): Promise<string> {
|
|
const aff =
|
|
typeof window !== 'undefined' ? (localStorage.getItem('aff') ?? '') : ''
|
|
const res = await api.get('/api/oauth/state', { params: { aff } })
|
|
if (res.data?.success) return res.data.data
|
|
return ''
|
|
}
|
|
|
|
// WeChat login by authorization code
|
|
export async function wechatLoginByCode(code: string): Promise<ApiResponse> {
|
|
const res = await api.get('/api/oauth/wechat', { params: { code } })
|
|
return res.data
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Registration
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// User registration
|
|
export async function register(payload: RegisterPayload): Promise<ApiResponse> {
|
|
const res = await api.post(`/api/user/register`, payload, {
|
|
params: { turnstile: payload.turnstile ?? '' },
|
|
})
|
|
return res.data
|
|
}
|
|
|
|
// Send email verification code
|
|
export async function sendEmailVerification(
|
|
email: string,
|
|
turnstile?: string
|
|
): Promise<ApiResponse> {
|
|
const res = await api.get('/api/verification', {
|
|
params: { email, turnstile },
|
|
})
|
|
return res.data
|
|
}
|
|
|
|
// Bind email to OAuth account
|
|
export async function bindEmail(
|
|
email: string,
|
|
code: string
|
|
): Promise<ApiResponse> {
|
|
const res = await api.post('/api/oauth/email/bind', {
|
|
email,
|
|
code,
|
|
})
|
|
return res.data
|
|
}
|