Files
jiapuapp/services/api/referral-contract.js

42 lines
1.7 KiB
JavaScript

import { createRequestError } from './request-client.js'
const referralResponseError = (message) =>
createRequestError(message, 'REFERRAL_RESPONSE_INVALID')
const normalizeReferralText = (value, field, { required = false } = {}) => {
if (value === undefined || value === null) {
if (required) throw referralResponseError(`推广关系响应缺少 ${field}`)
return ''
}
if (typeof value !== 'string') throw referralResponseError(`推广关系响应 ${field} 无效`)
const normalized = value.trim()
if (required && !normalized) throw referralResponseError(`推广关系响应缺少 ${field}`)
return normalized
}
export const normalizeReferralProfile = (value) => {
if (!value || typeof value !== 'object' || Array.isArray(value)) {
throw referralResponseError('推广关系响应无效')
}
const referralCode = normalizeReferralText(value.referralCode, 'referralCode', { required: true })
if (!/^[A-Za-z0-9_-]{4,64}$/.test(referralCode)) {
throw referralResponseError('推广关系响应 referralCode 格式无效')
}
if (!Number.isSafeInteger(value.referredUserCount) || value.referredUserCount < 0) {
throw referralResponseError('推广关系响应 referredUserCount 无效')
}
const shareUrl = normalizeReferralText(value.shareUrl, 'shareUrl', { required: true })
if (!/^https:\/\/[^\s]+$/i.test(shareUrl)) {
throw referralResponseError('推广关系响应 shareUrl 必须是 HTTPS 链接')
}
return {
enabled: true,
disabledReason: '',
referralCode,
referredUserCount: value.referredUserCount,
shareTitle: normalizeReferralText(value.shareTitle, 'shareTitle', { required: true }),
shareDescription: normalizeReferralText(value.shareText, 'shareText', { required: true }),
shareUrl
}
}