fix: comprehensive error logging — all errors now captured in client_error_logs
- safeSupabaseCall: logs caught errors via logError - AuthContext: logs sendOtp, verifyOtp errors - ErrorLogPanel: fixed client→supabase reference in delete functions - AuthContext: sets window.__supersam_user_id__ on auth state change
This commit is contained in:
parent
dac8450586
commit
7dfdd91798
|
|
@ -138,7 +138,7 @@ export default function ErrorLogPanel() {
|
|||
if (selected.size === 0) return;
|
||||
if (!confirm(`Удалить ${selected.size} записей?`)) return;
|
||||
setDeleting(true);
|
||||
const { error: err } = await client
|
||||
const { error: err } = await supabase
|
||||
.from('client_error_logs')
|
||||
.delete()
|
||||
.in('id', Array.from(selected));
|
||||
|
|
@ -150,7 +150,7 @@ export default function ErrorLogPanel() {
|
|||
const handleDeleteAll = async () => {
|
||||
if (!confirm('Удалить ВСЕ записи об ошибках? Это необратимо.')) return;
|
||||
setDeleting(true);
|
||||
const { error: err } = await client
|
||||
const { error: err } = await supabase
|
||||
.from('client_error_logs')
|
||||
.delete()
|
||||
.neq('id', '00000000-0000-0000-0000-000000000000');
|
||||
|
|
@ -162,7 +162,7 @@ export default function ErrorLogPanel() {
|
|||
const handleDeleteOne = async (id) => {
|
||||
if (!confirm('Удалить эту запись?')) return;
|
||||
setDeleting(true);
|
||||
const { error: err } = await client
|
||||
const { error: err } = await supabase
|
||||
.from('client_error_logs')
|
||||
.delete()
|
||||
.eq('id', id);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import React, { createContext, useContext, useEffect, useRef, useState } from "react";
|
||||
import { demoUsers } from "../data/mockAppData";
|
||||
import { supabase, hasSupabaseConfig } from "../supabaseClient";
|
||||
import { logError } from "../utils/errorLogger";
|
||||
|
||||
const AuthContext = createContext(null);
|
||||
const STORAGE_KEY = "construction-auth-local-user";
|
||||
|
|
@ -162,6 +163,7 @@ export const AuthProvider = ({ children }) => {
|
|||
if (!session?.user) {
|
||||
setUser(null);
|
||||
setAuthError("");
|
||||
window.__supersam_user_id__ = null;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -171,6 +173,8 @@ export const AuthProvider = ({ children }) => {
|
|||
}
|
||||
|
||||
const baseUser = mapSessionUserToAuthUser(session.user);
|
||||
// Expose userId for error logger
|
||||
window.__supersam_user_id__ = session.user?.id || null;
|
||||
if (baseUser) {
|
||||
fetchUserProfile(session.user.id).then((profile) => {
|
||||
if (profile) {
|
||||
|
|
@ -257,6 +261,7 @@ export const AuthProvider = ({ children }) => {
|
|||
} catch (error) {
|
||||
const normalizedError = normalizeOtpError(error);
|
||||
setAuthError(normalizedError.message);
|
||||
logError(error, { component: "AuthContext.sendOtp" });
|
||||
return { success: false, error: normalizedError };
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
|
|
@ -326,6 +331,7 @@ export const AuthProvider = ({ children }) => {
|
|||
} catch (error) {
|
||||
const normalizedError = normalizeOtpError(error);
|
||||
setAuthError(normalizedError.message);
|
||||
logError(error, { component: "AuthContext.verifyOtp" });
|
||||
return { success: false, error: normalizedError };
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import logger from "../utils/logger";
|
||||
import { logError } from "../utils/errorLogger";
|
||||
|
||||
export const safeSupabaseCall = async (callback, fallbackMessage = "Ошибка Supabase") => {
|
||||
try {
|
||||
|
|
@ -6,6 +7,8 @@ export const safeSupabaseCall = async (callback, fallbackMessage = "Ошибка
|
|||
return { data, error: null };
|
||||
} catch (error) {
|
||||
logger.error(fallbackMessage, error);
|
||||
// Also log to client_error_logs for admin visibility
|
||||
logError(error, { component: "safeSupabaseCall", props: { fallbackMessage } });
|
||||
return { data: null, error };
|
||||
}
|
||||
};
|
||||
Loading…
Reference in New Issue