Merge pull request #36 from rede5/codex/fix-errors-in-background.js
Gate marketplace logs behind logger utility
This commit is contained in:
commit
6719ec6298
4 changed files with 46 additions and 18 deletions
|
|
@ -2,6 +2,7 @@ import { FormEvent, useState } from 'react'
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
import { useAuth, UserRole } from '../context/AuthContext'
|
import { useAuth, UserRole } from '../context/AuthContext'
|
||||||
import { authService } from '../services/auth'
|
import { authService } from '../services/auth'
|
||||||
|
import { logger } from '../utils/logger'
|
||||||
import { decodeJwtPayload } from '../utils/jwt'
|
import { decodeJwtPayload } from '../utils/jwt'
|
||||||
|
|
||||||
// Eye icon components for password visibility toggle
|
// Eye icon components for password visibility toggle
|
||||||
|
|
@ -27,7 +28,7 @@ export function LoginPage() {
|
||||||
const [loading, setLoading] = useState(false)
|
const [loading, setLoading] = useState(false)
|
||||||
|
|
||||||
const resolveRole = (role?: string): UserRole => {
|
const resolveRole = (role?: string): UserRole => {
|
||||||
console.log('🔐 [Login] Resolving role:', role)
|
logger.info('🔐 [Login] Resolving role:', role)
|
||||||
switch (role?.toLowerCase()) {
|
switch (role?.toLowerCase()) {
|
||||||
case 'admin':
|
case 'admin':
|
||||||
return 'admin'
|
return 'admin'
|
||||||
|
|
@ -42,7 +43,7 @@ export function LoginPage() {
|
||||||
case 'seller': // keep legacy
|
case 'seller': // keep legacy
|
||||||
default:
|
default:
|
||||||
// Default to seller/owner or log warning?
|
// Default to seller/owner or log warning?
|
||||||
console.warn('⚠️ [Login] Unknown role, defaulting to seller:', role)
|
logger.warn('⚠️ [Login] Unknown role, defaulting to seller:', role)
|
||||||
return 'seller'
|
return 'seller'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -52,37 +53,37 @@ export function LoginPage() {
|
||||||
setLoading(true)
|
setLoading(true)
|
||||||
setErrorMessage(null)
|
setErrorMessage(null)
|
||||||
|
|
||||||
console.log('🔐 [Login] Attempting login with username:', username)
|
logger.info('🔐 [Login] Attempting login with username:', username)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
console.log('🔐 [Login] Calling authService.login...')
|
logger.info('🔐 [Login] Calling authService.login...')
|
||||||
const response = await authService.login({ username, password })
|
const response = await authService.login({ username, password })
|
||||||
console.log('🔐 [Login] Response received:', response)
|
logger.info('🔐 [Login] Response received:', response)
|
||||||
|
|
||||||
const { token } = response
|
const { token } = response
|
||||||
console.log('🔐 [Login] Token extracted:', token ? `${token.substring(0, 50)}...` : 'NULL/UNDEFINED')
|
logger.debug('🔐 [Login] Token extracted:', token ? `${token.substring(0, 50)}...` : 'NULL/UNDEFINED')
|
||||||
|
|
||||||
if (!token) {
|
if (!token) {
|
||||||
console.error('🔐 [Login] ERROR: Token is null or undefined!')
|
logger.error('🔐 [Login] ERROR: Token is null or undefined!')
|
||||||
throw new Error('Resposta de login inválida. Verifique o usuário e a senha.')
|
throw new Error('Resposta de login inválida. Verifique o usuário e a senha.')
|
||||||
}
|
}
|
||||||
|
|
||||||
const payload = decodeJwtPayload<{ role?: string, sub: string }>(token)
|
const payload = decodeJwtPayload<{ role?: string, sub: string }>(token)
|
||||||
console.log('🔐 [Login] JWT payload decoded:', payload)
|
logger.debug('🔐 [Login] JWT payload decoded:', payload)
|
||||||
|
|
||||||
const role = resolveRole(payload?.role)
|
const role = resolveRole(payload?.role)
|
||||||
console.log('🔐 [Login] Role resolved:', role)
|
logger.info('🔐 [Login] Role resolved:', role)
|
||||||
|
|
||||||
login(token, role, username, payload?.sub || '', undefined, username)
|
login(token, role, username, payload?.sub || '', undefined, username)
|
||||||
console.log('🔐 [Login] Login successful!')
|
logger.info('🔐 [Login] Login successful!')
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('🔐 [Login] ERROR caught:', error)
|
logger.error('🔐 [Login] ERROR caught:', error)
|
||||||
const fallback = 'Não foi possível autenticar. Verifique suas credenciais.'
|
const fallback = 'Não foi possível autenticar. Verifique suas credenciais.'
|
||||||
if (axios.isAxiosError(error)) {
|
if (axios.isAxiosError(error)) {
|
||||||
console.error('🔐 [Login] Axios error response:', error.response?.data)
|
logger.error('🔐 [Login] Axios error response:', error.response?.data)
|
||||||
setErrorMessage(error.response?.data?.error ?? fallback)
|
setErrorMessage(error.response?.data?.error ?? fallback)
|
||||||
} else if (error instanceof Error) {
|
} else if (error instanceof Error) {
|
||||||
console.error('🔐 [Login] Error message:', error.message)
|
logger.error('🔐 [Login] Error message:', error.message)
|
||||||
setErrorMessage(error.message)
|
setErrorMessage(error.message)
|
||||||
} else {
|
} else {
|
||||||
setErrorMessage(fallback)
|
setErrorMessage(fallback)
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
|
import { logger } from '../utils/logger'
|
||||||
|
|
||||||
// Use VITE_API_URL if set, fallback to /api for local development proxy
|
// Use VITE_API_URL if set, fallback to /api for local development proxy
|
||||||
const apiBaseUrl = import.meta.env.VITE_API_URL || '/api'
|
const apiBaseUrl = import.meta.env.VITE_API_URL || '/api'
|
||||||
console.log('🔗 [apiClient] Using API base URL:', apiBaseUrl)
|
logger.info('🔗 [apiClient] Using API base URL:', apiBaseUrl)
|
||||||
|
|
||||||
const instance = axios.create({
|
const instance = axios.create({
|
||||||
baseURL: apiBaseUrl,
|
baseURL: apiBaseUrl,
|
||||||
|
|
@ -22,7 +23,7 @@ instance.interceptors.response.use(
|
||||||
(response) => response,
|
(response) => response,
|
||||||
(error) => {
|
(error) => {
|
||||||
if (error.response?.status === 401) {
|
if (error.response?.status === 401) {
|
||||||
console.warn('Sessão expirada, por favor, faça login novamente.')
|
logger.warn('Sessão expirada, por favor, faça login novamente.')
|
||||||
}
|
}
|
||||||
return Promise.reject(error)
|
return Promise.reject(error)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import { apiClient } from './apiClient'
|
import { apiClient } from './apiClient'
|
||||||
|
import { logger } from '../utils/logger'
|
||||||
|
|
||||||
interface AuthResponse {
|
interface AuthResponse {
|
||||||
token: string
|
token: string
|
||||||
|
|
@ -12,13 +13,12 @@ export interface AuthLoginPayload {
|
||||||
|
|
||||||
export const authService = {
|
export const authService = {
|
||||||
login: async (payload: AuthLoginPayload) => {
|
login: async (payload: AuthLoginPayload) => {
|
||||||
console.log('🔐 [authService] Making request to /v1/auth/login with:', payload)
|
logger.info('🔐 [authService] Making request to /v1/auth/login with:', payload)
|
||||||
const data = await apiClient.post<AuthResponse>('/v1/auth/login', payload)
|
const data = await apiClient.post<AuthResponse>('/v1/auth/login', payload)
|
||||||
console.log('🔐 [authService] Response data:', data)
|
logger.info('🔐 [authService] Response data:', data)
|
||||||
return { token: data.token, expiresAt: data.expires_at }
|
return { token: data.token, expiresAt: data.expires_at }
|
||||||
},
|
},
|
||||||
logout: async () => {
|
logout: async () => {
|
||||||
await apiClient.post('/v1/auth/logout')
|
await apiClient.post('/v1/auth/logout')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
26
marketplace/src/utils/logger.ts
Normal file
26
marketplace/src/utils/logger.ts
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
const shouldLog = import.meta.env.DEV || import.meta.env.VITE_ENABLE_LOGS === 'true'
|
||||||
|
|
||||||
|
type LogArgs = Parameters<typeof console.log>
|
||||||
|
|
||||||
|
export const logger = {
|
||||||
|
debug: (...args: LogArgs) => {
|
||||||
|
if (shouldLog) {
|
||||||
|
console.debug(...args)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
info: (...args: LogArgs) => {
|
||||||
|
if (shouldLog) {
|
||||||
|
console.info(...args)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
warn: (...args: LogArgs) => {
|
||||||
|
if (shouldLog) {
|
||||||
|
console.warn(...args)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: (...args: LogArgs) => {
|
||||||
|
if (shouldLog) {
|
||||||
|
console.error(...args)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue