Pular para o conteúdo principal

Validacoes

Sistema de validacoes do template. Controla quais verificacoes o usuario precisa completar antes de navegar ou executar acoes (depositar, sacar, jogar).

Visao geral

Profile API


buildValidationSnapshot() ← monta snapshot do estado do usuario


fetchAllValidations() ← avalia config da marca + snapshot

├── force (forceRequestKyc = true)
├── regulatory (showPendingDataFlow = true)
├── global (config.global.active = true)
└── contexts (casino, sports, deposit, withdraw, ...)


hasPending?
├── SIM + force/regulatory/global → ValidationBlockerOverlay (bloqueante)
└── SIM + contexto especifico → ValidationStepsModal (fechavel)

Dois modos de exibicao

ValidationBlockerOverlay (obrigatorio)

Renderizado pelo DefaultLayout quando allValidations.hasPending = true e pendingType e "force", "regulatory" ou "global".

  • Overlay fullscreen com backdrop-blur-md sobre o site
  • Anti-tamper: MutationObserver + interval que recarrega a pagina se o overlay for removido ou escondido via DevTools
  • Nao pode ser fechado (sem botao X, ESC bloqueado)
  • Carousel de steps com estado (concluido/atual/pendente)
  • Opcao de sair da conta (logout)

ValidationStepsModal (frequente/contextual)

Aberto programaticamente via useValidationStepsStore quando o usuario tenta executar uma acao protegida (ex: depositar, sacar, jogar casino).

  • Modal com backdrop clicavel e botao X
  • Mesmo visual (carousel, step header, step content)
  • Fecha ao concluir ou ao clicar fora

Arquivos principais

ArquivoTipoDescricao
utils/validationSnapshot.tsUtilbuildValidationSnapshot() — monta snapshot a partir de user + userInfo
hooks/useValidationRuntimeSync.tsHookComputa allValidations e sincroniza com a store
store/validationRuntime.tsStoreArmazena allValidations computado
store/validationSteps.tsStoreControla abertura do modal de validacoes contextuais
store/passwordValidation.tsStoreControla abertura do modal de senha
store/kyc.tsStoreEstado do fluxo KYC (modal, step, polling)
layouts/DefaultLayout.tsxLayoutDecide se mostra o ValidationBlockerOverlay
components/validation/ValidationBlockerOverlay.tsxComponentOverlay bloqueante com anti-tamper
components/validation/ValidationStepsModal.tsxComponentModal de validacoes contextuais
components/validation/ValidationStepContent.tsxComponentRouter que renderiza o step correto por modulo
components/validation/steps/*.tsxComponentsUm componente por modulo (email, phone, address, etc.)
components/validation/ui/*.tsxComponentsPrimitivos visuais (OTPInput, PrimaryButton, StepCarousel, etc.)
services/validation.client.tsServiceAPI calls (send email, verify SMS, submit address, etc.)
services/authProfile.client.tsServiceBusca profile atualizado apos validacao
services/userLimits.client.tsServiceAtualiza limites prudenciais

API Routes

RotaMetodoDescricao
/api/auth/profileGETRetorna profile atualizado
/api/validation/email/sendPOSTEnvia codigo de verificacao por e-mail
/api/validation/email/verifyPOSTVerifica codigo de e-mail
/api/validation/email/changePOSTAltera e-mail antes de verificar
/api/validation/sms/sendPOSTEnvia codigo SMS
/api/validation/sms/verifyPOSTVerifica codigo SMS
/api/validation/sms/changePOSTAltera telefone antes de verificar
/api/validation/address/submitPOSTSalva endereco
/api/validation/docs/submitPOSTSalva documentos (CPF, nascimento, nacionalidades)
/api/validation/terms/acceptPOSTAceita um termo especifico
/api/user/check-passwordPOSTValida senha do usuario
/api/user/update-limitsPOSTAtualiza limites prudenciais
/api/user/update-addressPOSTAtualiza endereco
/api/kyc/startPOSTInicia verificacao KYC
/api/kyc/statusPOSTConsulta status KYC

Steps implementados

Cada modulo tem seu proprio componente em components/validation/steps/:

ModuloComponenteO que faz
emailEmailStepEnvia codigo, OTP input, alterar e-mail
phone / smsPhoneStepEnvia SMS, OTP input, alterar telefone + DDI
addressAddressStepCEP, rua, cidade, estado (select BR), pais
docs / documentDocsStepCPF, data nascimento, nacionalidades
passwordPasswordStepInput senha com toggle show/hide
user_limitsLimitsStepTempo de jogo e limite de perda (ilimitado/personalizado)
kycKycStepDescricao + iniciar verificacao + badge CPF/ID
termsTermsStepToggles individuais por termo + aceitar todos
gpsGpsStepSolicitar geolocalizacao do navegador
bank_accountBankAccountStepAviso + navegar para dados da conta

Fluxo de resolucao de step

Usuario preenche formulario


Step chama API (ex: submitValidationAddress)


Step chama syncProfile() → fetchAuthProfile()


setUser(profile.user, profile.userInfo)


useValidationRuntimeSync recomputa allValidations

├── Ainda tem pendencia → proximo modulo aparece
└── Sem pendencia → overlay/modal desmonta automaticamente

Theming

Todos os modais de validacao usam as cores auth.* do theme.config.ts:

TokenUso
auth.bg-primaryFundo do modal
auth.bg-inputsFundo dos inputs
auth.text-inputsTexto dos inputs
auth.button-bgFundo dos botoes primarios
auth.button-textTexto dos botoes primarios
auth.linksCor de destaque (labels, badges, carousel ativo)
auth.titlesTitulos
auth.textsTextos secundarios
auth.bg-closeFundo do botao fechar
auth.icon-closeIcone do botao fechar
auth.backdropFundo do backdrop

Como adicionar um novo modulo

  1. Criar predicado em front-cactus-core/packages/validations/src/modules.ts
  2. Adicionar o nome em ValidationModuleName no types.ts
  3. Criar componente steps/NomeStep.tsx no template
  4. Registrar no switch do ValidationStepContent.tsx
  5. Adicionar label em constants.ts (MODULE_LABELS)
  6. Adicionar icone em ui/StepCarousel.tsx (MODULE_ICONS)