Auditoria de segurança + robustez da área do representante antes de produção. API (autorização e injeção): - IDOR em clients: endpoints de detalhe (findOne, notas, ctr, top-produtos, histórico, contatos) validam carteira do rep via assertClienteDaCarteira; cliente alheio retorna 404. orders.create idem antes de aceitar idCliente. - Role guard em dashboards supervisor/manager e ger/chamados (rep -> 403). - Datas em $queryRawUnsafe agora exigem YYYY-MM-DD (DateOnlySchema + revalidação); dtAniversario de contato validado e escapado. - id_empresa de CTR/NF usa matrizEmpresa() em vez de 1/9001 hardcoded. - Alçada de desconto: transmit valida desconto efetivo por item (preço vs tabela pauta>promo>base + promoção ativa), não só o desconto global. - Idempotency-Key escopado a empresa+vendedor; unsubscribe com DTO e dono. Web (erros nunca silenciosos): - Remove dupla serialização (apiFetch já faz JSON.stringify) em funil, sac e politicas — corrige criar oportunidade, abrir chamado e editar políticas. - Handler global de erro no QueryClient (query e mutation viram toast). - Error boundary por rota (payload divergente não derruba o app em branco). - Alert usa message= em vez de title= (AntD 6); sw.js usa globalThis. Qualidade: - Corrige ping.contract.spec (idEmpresa) e zera erros de lint. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
23 lines
655 B
TypeScript
23 lines
655 B
TypeScript
import { z } from 'zod';
|
|
|
|
// Contratos canônicos de C6 — Notificações e Push.
|
|
|
|
export const SubscribePayloadSchema = z.object({
|
|
endpoint: z.string().url(),
|
|
keys: z.object({
|
|
p256dh: z.string().min(1),
|
|
auth: z.string().min(1),
|
|
}),
|
|
});
|
|
export type SubscribePayload = z.infer<typeof SubscribePayloadSchema>;
|
|
|
|
export const UnsubscribePayloadSchema = z.object({
|
|
endpoint: z.string().url(),
|
|
});
|
|
export type UnsubscribePayload = z.infer<typeof UnsubscribePayloadSchema>;
|
|
|
|
export const PendingCountResponseSchema = z.object({
|
|
count: z.number().int().min(0),
|
|
});
|
|
export type PendingCountResponse = z.infer<typeof PendingCountResponseSchema>;
|