feat(signatures): UI completa do módulo + rate limiting em rotas públicas
Fecha as duas pendências da leva anterior (módulo de Assinatura Eletrônica): tela de backoffice para gerenciar envelopes (criação, envio, cancelamento, checkpoint/finalização, auditoria) e as duas páginas públicas (/assinar/:token, /verificar/:verificationId). Backend: novos endpoints de streaming de PDF (documento congelado e PDF final consolidado, autenticados e via token público) que faltavam para a UI funcionar — o signatário não tinha como ver o próprio documento antes de confirmar leitura. Rate limiting (guard próprio, em memória, chaves por IP e por token) em todas as rotas sem sessão: auth (login/mfa/forgot-password/reset-password/refresh/logout) e todo o fluxo público de assinatura/verificação. Suíte: 77/77 verdes. pnpm turbo run typecheck build: 28/28. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -55,6 +55,11 @@ import { AfdImportPage } from "./routes/hr-timeclock/AfdImportPage.js";
|
||||
import { AfdRecordsListPage } from "./routes/hr-timeclock/AfdRecordsListPage.js";
|
||||
import { ForgotPasswordPage } from "./routes/ForgotPasswordPage.js";
|
||||
import { ResetPasswordPage } from "./routes/ResetPasswordPage.js";
|
||||
import { EnvelopesListPage } from "./routes/signatures/EnvelopesListPage.js";
|
||||
import { EnvelopeFormPage } from "./routes/signatures/EnvelopeFormPage.js";
|
||||
import { EnvelopeDetailPage } from "./routes/signatures/EnvelopeDetailPage.js";
|
||||
import { PublicSignaturePage } from "./routes/PublicSignaturePage.js";
|
||||
import { PublicVerifyPage } from "./routes/PublicVerifyPage.js";
|
||||
|
||||
export function App() {
|
||||
return (
|
||||
@@ -64,6 +69,8 @@ export function App() {
|
||||
<Route path="/login" element={<LoginPage />} />
|
||||
<Route path="/forgot-password" element={<ForgotPasswordPage />} />
|
||||
<Route path="/reset-password" element={<ResetPasswordPage />} />
|
||||
<Route path="/assinar/:token" element={<PublicSignaturePage />} />
|
||||
<Route path="/verificar/:verificationId" element={<PublicVerifyPage />} />
|
||||
<Route element={<ProtectedRoute />}>
|
||||
<Route element={<AuthenticatedLayout />}>
|
||||
<Route path="/" element={<DashboardPage />} />
|
||||
@@ -132,6 +139,10 @@ export function App() {
|
||||
<Route path="/documents/generations" element={<GenerationsListPage />} />
|
||||
<Route path="/documents/generations/new" element={<GenerationFormPage />} />
|
||||
|
||||
<Route path="/signatures" element={<EnvelopesListPage />} />
|
||||
<Route path="/signatures/new" element={<EnvelopeFormPage />} />
|
||||
<Route path="/signatures/:id" element={<EnvelopeDetailPage />} />
|
||||
|
||||
<Route path="/hr-timeclock/devices" element={<DevicesListPage />} />
|
||||
<Route path="/hr-timeclock/devices/new" element={<DeviceFormPage />} />
|
||||
<Route path="/hr-timeclock/devices/:id/edit" element={<DeviceFormPage />} />
|
||||
|
||||
Reference in New Issue
Block a user