import { AUTH_VERIFICATION_OPERATION } from '@/utils/auth/verification.js' import { session } from '@/utils/session.js' export const assertAuthVerificationOperation = (operationCode) => { if (!Object.values(AUTH_VERIFICATION_OPERATION).includes(operationCode)) { throw new TypeError('认证动作不属于当前认证合同') } return operationCode } export const assertValidToken = (validToken) => { if (typeof validToken !== 'string' || !validToken.trim()) { throw new TypeError('发送短信前必须取得有效的行为验证票据') } return validToken.trim() } export const normalizeOptionalValidToken = (validToken) => validToken === undefined ? undefined : assertValidToken(validToken) export const assertPasswordHash = (passwordHash) => { if (typeof passwordHash !== 'string' || !/^[a-f0-9]{32}$/.test(passwordHash)) { throw new TypeError('密码摘要必须是 32 位小写 MD5') } return passwordHash } export const normalizeOptionalReferralCode = (referralCode) => { if (referralCode === undefined || referralCode === null || referralCode === '') return '' if (typeof referralCode !== 'string') throw new TypeError('推荐码必须是字符串') const normalized = referralCode.trim() if (!/^[A-Za-z0-9_-]{4,64}$/.test(normalized)) { throw new TypeError('推荐码格式无效') } return normalized } export const assertWechatAuthorizationCode = (authorizationCode) => { if (typeof authorizationCode !== 'string' || !authorizationCode.trim()) { throw new TypeError('微信授权未返回有效临时票据') } return authorizationCode.trim() } export const saveLogin = (loginResult) => { const token = loginResult?.access_token if (typeof token !== 'string' || !token || token.trim() !== token) { throw new Error('登录响应未包含有效的会话令牌') } session.saveToken(token) return loginResult }