Changelog
O que há de novo.
Cada melhoria para a plataforma, como ele envia.
· SecurityService
Add AccountSettingsController + Service for phone + security questions (SP3)
Allows logged-in users to set/verify phone and configure 3 security questions. Routes to /api/account/* (session-authenticated via KSESSION_DATA).
· SecurityService
Add BulkTextSmsClient + EmailTemplateServiceClient + PasswordRecoveryController (SP3)
Full password recovery flow: email-link, SMS OTP, security questions, seed phrase. Routes to /api/recover/* (unauthenticated). Uses SP1 email pipeline + VOIPService SMS.
· VOIPService
Add InternalAuthFilter + POST /api/bulktext/send for service-to-service SMS (SP3)
· kamo-shared-library
Adicionar entidades de recuperação + acordos de recompra; aumento para 1.3.0 (SP3)
Adiciona senhaResetToken, SmsOtp, RecoverySession, AccountVerificationCode Entidades JPA com repositórios correspondentes para o fluxo de recuperação SP3.
· kamo-shared-library
Adicionar SegurançaQuestionCatalog enum + sq1/2/3 + seedPhraseHash to User (SP3)
· InitializerService
Add SP3 recovery table DDL + User column additions to SchemaCleanupRunner
· kamo-internal
Previsão da rota através do modal renderizado pela infra- estrutura do navegador (parte de SP2)
O E-mailTemplateBrowser agora possui o modo de visualização diretamente, então o O gestor já não precisa de interceptar pedidos de antevisão em linha e redirecionar para o modo de edição.
· kamo-internal
Email de FioTemplateEdit para API real
Hidrata do templateApi.get, salva via templateApi.update. Categoria dropdown é baseado em API com categoria inline-criar affordance. Variáveis Selector lê de variableContracts.ts (contratos declarados para REQUIRIDOS chaves de modelo; conjunto comum para CUSTOM). Edição de linha requerida / SISTEMA mostra a bandeira de aviso adequada. O botão de visualização abre o E-mail renderizado por backendTemplatePreview modal. Parte de SP2.
· kamo-internal
Email de FioTemplateBrowser para API real + adicionar guia Padrão de Sistema
Substitui ~140 linhas de dados simulados por chamadas templateApi.list(). Condicional quinta aba 'System Defaults' aparece apenas para administradores e renderizadores de nível superior de resposta.sistemaTemplates. Filtro de categoria povoado da categoriaApi.list(). Todas as ações da linha * * * * * * * * * Acertei a sério Endpoints de infraestrutura. Erros roteados através do manipuladorApiError toather. Parte de SP2.
· kamo-internal
Adicionar EmailTemplateDuplicateDialog (parte de SP2)
· kamo-internal
Adicionar e-mailTemplateCategoryManager modal (parte de SP2)
· kamo-internal
Adicionar e- mailTemplatePreview modal
Abre na antevisão da acção da linha. Renderização da infra-estrutura via templateApi.preview(); resultado exibido em um iframe sandboxed para isolamento de estilo. Corresponde à o caminho exato do código que o envio usa, então o que você pré-visualiza é o que os destinatários recebem. Parte de SP2.
· kamo-internal
Adicionar modeloApi + categoriaApi + variávelContrata módulos do cliente
Embrulha o SP1 /api/email/templates/* e ************************* endpoints com helpers TypeScript digitados. variávelContratos espelhos SP1 TemplateKeys Javadoc para que o seletor de variáveis do editor seja declarado Contratos para modelos exigidos. Parte de SP2.
· SecurityService
Wire EmailTemplateSeedClient into ****************
Thin RestTemplate client that POSTs to EmailService's **************** after an org + owner TeamMember are persisted. Retries twice with backoff; failure throws OrgProvisioningException and rolls back the surrounding @Transactional so the org + owner-TeamMember save is undone (per SP1 spec). Mirrors the existing TranslateServiceClient X-Internal-Auth pattern. k8s/configmap.yaml adds: email.service.url (EmailService internal URL) internal.auth.secret (cluster-wide X-Internal-Auth header value) pom.xml bumps kamo-shared-library 1.1.0 → 1.2.0. Part of SP1.
· EmailService
Add EmailTemplateCategoryController REST endpoints
**************** CRUD. Delete response includes reassignedCount — the number of templates that became uncategorized as a result of removing the category. Session context read via the same **************** pattern as other EmailService controllers. Part of SP1.
· EmailService
Add EmailTemplateController REST endpoints + DTOs
Exposes /api/email/templates/* CRUD + preview + duplicate + reset-to-default + service-to-service /send + /seed-org/{orgId}. Top-level orgs (no parent) additionally see systemTemplates in the list response. Service-to-service endpoints are protected by the existing InternalAuthFilter. Session context (orgID, memberID) read from OTKPreAuthFilter's REQ_ATTR_SESSION attribute — the same pattern already used by AliasController / MailboxController. Part of SP1.
· EmailService
Add InternalAuthFilter for service-to-service endpoints
Validates X-Internal-Auth header on /api/email/templates/send and /api/email/templates/seed-org/* paths. Other paths bypass this filter (user session auth handles them). Secret comes from INTERNAL_AUTH_SECRET env var. Also adds transactional.smtp.user / transactional.smtp.pass config stubs consumed by EmailTemplateService — all three are sourced from the k8s configmap in production. Part of SP1.
· EmailService
Adicionar o EmailTemplateCategoryService — CRUD para categorias de org-scoped
Nome único por org aplicado na camada de serviço (combina o índice único parcial no DB). Supressão nula categoria id nos modelos afetados antes de remover a linha de categoria. Parte de SP1.
· EmailService
Adicionar EmailTemplateService — CRUD + send + seed + reset-to-default
Orquestrador principal para e-mail transacional. SendToUser resolve o modelo, torna sujeito/corpo, escolhe o domínio primário da organização. domínios, e entrega para EmailSmtpService com NoReply@{org.domain} como do endereço. Inclui seedForOrg para novo-org gancho de ciclo de vida e resetToDefault que copia o conteúdo de uma linha do SISTEMA sobre uma linha por-org EXIGIDA. Autenticação para o envio usa credenciais de serviço SMTP transacionais em cluster (transactional.smtp.user / transational.smtp.pass) em vez do per-member resolvedor do prestador — os envios transacionais não têm membro atuante. Parte de SP1.
· EmailService
Adicionar NoReplySenderService para 'NoReply@ {domain}' do endereço
Fonte única de verdade para e-mail transacional de endereços. Aceita uma string de domínio, minúscula-normaliza-lo, retorna "NoReply@<domínio>". Os ouvintes devem resolver o domínio do org (através da pesquisa do Organization.domains ou similar) e passe-o para dentro. Parte de SP1.
· EmailService
Adicionar Renderador de Modelos para substituição {{var}}
Renderizador de regex sem estado. Faltam vars para substituir o texto vazio e emite um registro WARN com templateKey + orgId para atribuição. Sem fuga de HTML em v1 — os valores são controlados pelo servidor. Parte de SP1.
· InitializerService
Add EmailTemplateSeedRunner for SYSTEM + per-org seeding
Runs at @Order(20) on KamoInitializerService startup. Loads canonical templates from kamo-shared-library resources; upserts SYSTEM rows (no clobber); backfills per-org rows for every org that doesn't yet have them. Idempotent — safe to re-run on every startup. Part of SP1.
· InitializerService
Add partial unique indexes + CHECK constraints for email_templates
Hibernate ddl-auto can't generate partial unique indexes or computed-CHECK constraints. This commit adds them via the existing idempotent DDL runner pattern after Hibernate creates the base tables from the new entities. Part of SP1.
· kamo-shared-library
Adicionar CanonicalTemplateLoader + CanonicalTemplate record
Lê os três modelos exigidos (WELCOME, PASSWORD RESET, EMAIL VERIFICAÇÃO) de recursos de caminhos de classe em **************************** Consumido por KamoInitializerService for SYSTEM-row semeando. Parte de SP1.
· kamo-shared-library
Adicionar HTML canônico + JSON para WELCOME, PASSWORD RESET, EMAIL VERIFICAÇÃO
Conteúdo da fonte de verdade para linhas do SISTEMA. Carregado no KamoInitializerService inicialização por CanonicalTemplateLoader e upsertado em e-mail templates. Parte de SP1.
· kamo-shared-library
Adicionar E-mailTemplate entity + repositório
Armazena uma linha do SISTEMA por modelo chave (org id NULL, is system TRUE) mais um clone por org por template key. Soft-reference org id/category id. DB... timestamps; JSONB para body blocks e tags. O repositório fornece pesquisa de org, incremento do contador de uso atômico e remoção de categoria limpeza via nullifyCategoryForOrg. Parte de SP1.
· kamo-shared-library
Adicionar EmailTemplateCategory entity + repositório
Categorias org-scoped para modelos de email. Soft BIGINT org id (sem FK) corresponde aos padrões existentes. Caso-insensível nome unicidade per-org é aplicado através de um índice parcial adicionado no KamoInitializerService. Parte de SP1.
· kamo-shared-library
Adicionar TemplateStatus enum + TemplateKeys constantes para modelos transacionais
Declara os estados de ciclo de vida requeridos/aDUANEIRO/ARCHIVED e os três chaves de modelo exigidas (WELCOME, PASSWORD RESET, EMAIL VERIFICAÇÃO). Contratos variáveis para cada modelo EXIGIDO documentado como Javadoc em as constantes classe; SP3 e SP4 fazem referência a estas. Parte de SP1.
· InitializerService
Seed KamoCRM with ALL_WORK_ELIGIBLE on fresh installs
The createOrg() helper applies this single argument to both ageReqTypeMember and ageReqTypeTeamMember; consistent with platform convention. Pairs with KamoCRMAgeReqUpdateRunner which handles existing deployments via a conditional UPDATE. Completes SP5.
· InitializerService
Add one-time runner to migrate KamoCRM agereq to ALL_WORK_ELIGIBLE
Conditional idempotent UPDATE runs on service startup; WHERE clause checks the expected old value so re-runs are no-ops. Errors are logged and swallowed — startup must not block on this non-critical migration. Part of SP5. Pairs with the DataLoader edit in the next commit that makes fresh installs seed the new value directly.

Seu universo está esperando.
Comece gratuitamente em minutos.Adicione produtos sempre que estiver pronto — sem migração, sem novos logins.
Gratuito para sempre — não é necessário cartão de crédito