/** * Безопасные тексты для пользователя: без HTTP-кодов, stack trace и прочей техники. */ (function (global) { const DEFAULT_ERROR_MESSAGE = "Не удалось выполнить операцию. Попробуйте ещё раз."; const TECHNICAL_MESSAGE_PATTERNS = [ /\bHTTP\s*\d{3}\b/i, /^\d{3}$/, /ошибка\s*\d{3}/i, /status:\s*\d+/i, /Failed to fetch/i, /NetworkError/i, /Load failed/i, /SyntaxError/i, /TypeError/i, /ReferenceError/i, /RangeError/i, /Traceback/i, /\bException\b/i, /UnicodeEncodeError/i, /Internal Server Error/i, /]/i, / (p && p.text != null ? String(p.text) : "")).join(""); } if (message.text != null) return String(message.text); } return message == null ? "" : String(message); } function isTechnicalMessage(message) { const text = plainText(message).trim(); if (!text) return true; return TECHNICAL_MESSAGE_PATTERNS.some((pattern) => pattern.test(text)); } function userFacingMessage(message, fallback) { const fb = (fallback && String(fallback).trim()) || DEFAULT_ERROR_MESSAGE; if (message instanceof Error) return fb; const text = plainText(message).trim(); if (!text || isTechnicalMessage(text)) return fb; return text; } function messageFromResponseBody(body, fallback) { if (!body || typeof body !== "object") { return userFacingMessage(null, fallback); } return userFacingMessage(body.message || body.error || null, fallback); } function safe(message, fallback) { return userFacingMessage(message, fallback); } global.WespUserMessages = { DEFAULT_ERROR_MESSAGE, plainText, isTechnicalMessage, userFacingMessage, messageFromResponseBody, safe, }; })(typeof window !== "undefined" ? window : globalThis);