Files
juwan-frontend/lib/api/auth.ts
T
zetaloop 2ab075d173 fix(api): propagate requestId for register and reset-password
Backend requires X-Request-Id header from the verification code send
response. Wire requestId through email/auth-extra API returns, register
and forgot-password pages, and auth API request headers.
2026-04-24 05:06:03 +08:00

80 lines
2.1 KiB
TypeScript

import type { User } from "@/lib/types"
import { httpJson } from "./http"
export type RegisterInput = {
username: string
email: string
password: string
vcode?: string
requestId?: string
}
export type LoginInput = {
username: string
password: string
}
function throwApiError(code: number, msg: string): never {
throw { code, msg }
}
export async function register(input: RegisterInput): Promise<User> {
const username = input.username.trim()
const email = input.email.trim()
const password = input.password
const vcode = input.vcode?.trim()
if (!username) throwApiError(400, "请输入用户名")
if (!email) throwApiError(400, "请输入邮箱")
if (!password || password.length < 6) throwApiError(400, "密码至少6位")
const headers: Record<string, string> = {}
if (input.requestId) headers["X-Request-Id"] = input.requestId
const res = await httpJson<{ user: User }>("/api/v1/auth/register", {
method: "POST",
json: { username, email, password, vcode },
headers,
})
return res.user
}
export async function login(input: LoginInput): Promise<User> {
const username = input.username.trim()
const password = input.password
if (!username) throwApiError(400, "请输入用户名")
if (!password || password.length < 6) throwApiError(400, "密码至少6位")
const res = await httpJson<{ user: User }>("/api/v1/auth/login", {
method: "POST",
json: { username, password },
})
return res.user
}
export async function resetPassword(input: {
email: string
vcode: string
newPassword: string
requestId?: string
}): Promise<void> {
const email = input.email.trim()
const vcode = input.vcode.trim()
const newPassword = input.newPassword
if (!email) throwApiError(400, "请输入邮箱")
if (!vcode) throwApiError(400, "请输入验证码")
if (!newPassword || newPassword.length < 8) throwApiError(400, "密码至少8位")
const headers: Record<string, string> = {}
if (input.requestId) headers["X-Request-Id"] = input.requestId
await httpJson<unknown>("/api/v1/auth/reset-password", {
method: "POST",
json: { email, vcode, newPassword },
headers,
})
}