Prefer server quote status, avoid false no-quote before ready, toast on 401 re-login, and keep product/banner image URLs absolute. Co-authored-by: Cursor <cursoragent@cursor.com>
36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
export function getDefaultAboutSoftwareText(projectName: string) {
|
|
const name = projectName.trim() || 'این نرمافزار'
|
|
return `${name} بستری امن و آنلاین برای خرید و فروش طلا فراهم کرده تا کاربران بتوانند سرمایههای خود را بهسادگی مدیریت کنند.\n\nهدف ما ارائه تجربهای سریع، شفاف و کاربرپسند در معاملات طلا است.`
|
|
}
|
|
|
|
function looksLikeHtml(value: string) {
|
|
return /<\/?[a-z][\s\S]*>/i.test(value)
|
|
}
|
|
|
|
export type AboutSoftwareBody =
|
|
| { kind: 'html'; html: string }
|
|
| { kind: 'text'; text: string }
|
|
|
|
/** اولویت با تنظیم about_software؛ در صورت خالی بودن، متن پیشفرض */
|
|
export function resolveAboutSoftwareBody(
|
|
raw: unknown,
|
|
projectName: string,
|
|
): AboutSoftwareBody {
|
|
const value = String(raw ?? '').trim()
|
|
if (!value) {
|
|
return { kind: 'text', text: getDefaultAboutSoftwareText(projectName) }
|
|
}
|
|
if (looksLikeHtml(value)) {
|
|
const stripped = value
|
|
.replace(/<[^>]+>/g, ' ')
|
|
.replace(/ /gi, ' ')
|
|
.replace(/\s+/g, ' ')
|
|
.trim()
|
|
if (!stripped) {
|
|
return { kind: 'text', text: getDefaultAboutSoftwareText(projectName) }
|
|
}
|
|
return { kind: 'html', html: value }
|
|
}
|
|
return { kind: 'text', text: value }
|
|
}
|