feat(auth): login JWT en API y las 4 apps
- Modelo Usuario + seed desde lista de vendedores (18 usuarios, bcrypt cost 12) - POST /api/auth/login + /api/auth/me; middleware Bearer en todo /api excepto health, login y webhook Monday; flag AUTH_ENABLED - Username = nombre completo normalizado (case/acentos insensible), password inicial Frasa2026, admin vía ADMIN_PASSWORD - Apps: LoginScreen + AuthGate (StudioBlank), token en localStorage, header Authorization en todas las llamadas, logout en 401 - Tests: api 136, cotizador 71, alta 65, cobranza 71, agente-ia 13, landing 4
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import type { AltaCliente } from '../types'
|
||||
import { conAuth, manejar401 } from './auth'
|
||||
|
||||
const API_URL = import.meta.env.VITE_API_URL ?? 'http://192.168.10.123:3000/api'
|
||||
// TODO produccion: '/api' same-origin detras de NGINX
|
||||
@@ -32,11 +33,15 @@ const serializarAlta = (payload: AltaCliente) => ({
|
||||
*/
|
||||
export async function crearAltaCliente(payload: AltaCliente): Promise<AltaClienteCreada | null> {
|
||||
try {
|
||||
const res = await fetch(`${API_URL}/clientes`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(serializarAlta(payload)),
|
||||
})
|
||||
const res = await fetch(
|
||||
`${API_URL}/clientes`,
|
||||
conAuth({
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(serializarAlta(payload)),
|
||||
}),
|
||||
)
|
||||
manejar401(res)
|
||||
if (!res.ok) throw new Error(`HTTP ${res.status}`)
|
||||
const data = (await res.json()) as { id: string }
|
||||
return { id: data.id }
|
||||
@@ -59,10 +64,14 @@ export async function subirDocumentos(clienteId: string, payload: AltaCliente):
|
||||
const form = new FormData()
|
||||
form.append('tipo', doc.slot)
|
||||
form.append('archivos', doc.archivo, doc.nombre)
|
||||
const res = await fetch(`${API_URL}/clientes/${clienteId}/documentos`, {
|
||||
method: 'POST',
|
||||
body: form,
|
||||
})
|
||||
const res = await fetch(
|
||||
`${API_URL}/clientes/${clienteId}/documentos`,
|
||||
conAuth({
|
||||
method: 'POST',
|
||||
body: form,
|
||||
}),
|
||||
)
|
||||
manejar401(res)
|
||||
if (!res.ok) throw new Error(`HTTP ${res.status}`)
|
||||
} catch (err) {
|
||||
console.warn(`[api] subirDocumentos: no se pudo subir ${doc.nombre} (${doc.slot})`, err)
|
||||
|
||||
Reference in New Issue
Block a user