diff --git a/src/supabaseClient.jsx b/src/supabaseClient.jsx index b90f0d4..9728995 100644 --- a/src/supabaseClient.jsx +++ b/src/supabaseClient.jsx @@ -23,6 +23,14 @@ export const hasSupabaseConfig = Boolean(supabaseUrl && supabaseAnonKey); const STORAGE_KEY = "supersam-auth"; const KEY_KEY = "supersam-ak"; +// Web Locks API есть не везде (старые Safari/WebView, тестовая среда jsdom). +// supabase-js ждёт именно функцию лока, поэтому подставляем простой "лок без лока". +const memoryLock = (_name, _acquireTimeout, fn) => fn(); +const hasWebLocks = () => + typeof navigator !== "undefined" && + Boolean(navigator.locks) && + typeof navigator.locks.request === "function"; + function _getKey() { let key = localStorage.getItem(KEY_KEY); if (!key) { @@ -114,13 +122,8 @@ export const supabase = hasSupabaseConfig storage: secureStorage, autoRefreshToken: true, detectSessionInUrl: false, - // navigator.locks есть не везде (jsdom/старые окружения): тогда фиксированный lock - lock: - typeof navigator !== "undefined" && - navigator.locks && - typeof navigator.locks.request === "function" - ? undefined - : "no-lock", + // lock: без Web Locks API используем функцию-заглушку (иначе auth падает) + lock: hasWebLocks() ? undefined : memoryLock, }, global: { headers: { "x-application-name": "supersam" },