Changelog
O que há de novo.
Cada melhoria para a plataforma, como ele envia.
· kamo-internal
Rotas de proxy de execução de membros e o modelo de assistente puro
Oito rotas 1:1: /api/docs/legal/member/** através da frenteToApi (PATH SOMENTE — forwardToApi possui a string de consulta) e /api/esig/member/** direto para ESIG SERVICE URL com generateOTK, porque APIService avança /api/docs/** e nada para frente /api/esig/**. Um OTK, um pedido a montante por rota: O OTKAuthFilter é o GetAndDelete. As rotas PDF transmitem bytes e preservam o status de upstream, então um 409 (o O conteúdo congelado já não corresponde aos bytes armazenados) atinge o assistente como um 409 em vez de como um PDF corrupto. O consentimento é o único caminho que não deve ser analisado seu corpo de sucesso: ESigService responde com um vazio 200. Cada regra do assistente vive num módulo puro porque o vitest aqui só recolhe .test.ts no ambiente de nó. Um documento assinalável é renderizado a partir do sinal rota — esses são os bytes ESigService achatados, e o que você vê deve ser o que você assina; um documento somente reconhecido renderiza da versão do DocsService rota. O eixo de passo é ordem ordemIndex e o passo de atestação existe mesmo para Um pacote com zero documentos para assinar.
· kamo-internal
Porta o núcleo de assinatura do kamo- singer para o kamo- interno
Cada pacote @kamo/* é privado: verdadeiro com exportações:"./src/index.ts" e nenhuma compilação passo, então não há artefato publicável — os arquivos são copiados e religados para Importações relativas. O comportamento é inalterado; apenas importações e movimento i18n. pdfjs-dist 4.10.38 com um trabalhador auto-hosted copiado por um passo pré-construir. Não ************* que carrega pdf.js 4.4.168 de cdnjs, que é um motor diferente e inaceitável para uma superfície juridicamente vinculativa, e os dois Os objetos GlobalWorkerOptions permanecem intactos apenas porque as instâncias do módulo Nunca nos encontramos. Também não FieldElement.tsx: seu FieldControl renderiza ponteiroEventos:'ne' previews with no value binding — a preview designer, not an entrada. useTraduções sai dos quatro componentes de assinatura: eles chamam de kamo-signer chaves de mensagem próprias, o dicionário do kamo-internal não as tem, e chaves novas não pode ser inventado. As cordas chegam como adereços. SIGNATURE FONTS é um adereço também do que quatro cargas seguintes/font/google para um modal; o id da fonte digitada ainda está através de CapturedSignnature.typedFont tão achatado e o certificado não são afetados. Dois desvios marcados de uma cópia verbatim, ambos em sinalStore: - required-ness now skips readOnly fields. kamo- singer contou- as; ESigService's FieldCompletion — a execução do lado do servidor enviado — não ("se (f) null , , , , , , f. required () continuar;"). Manter singer copy mais rigoroso do que o servidor iria estacionar um membro em uma lacuna que eles não têm controle para fechar enquanto o servidor considera o envelope completo. - rascunho de persistência protege localStorage em vez de janela. janela é o errado questão: localStorage pode estar ausente ( renderização do servidor) ou jogar no acesso (modo privado, armazenamento particionado), e um rascunho nunca deve tomar o assistente Abaixo com isso.
· DocsService
Montar a superfície do membro em /api/docs/legal/member/**
Um controlador separado com um funil separado, porque a autorização aqui está identidade e não um direito de RH. Rotear estes através do guarded() significaria qualquer um dos dois Bloquear cada funcionário fora de sua própria papelada ou alargamento LegalPackageAccess até que a grade de modelos e a lista de visualização do público estejam abertas para todo o org; a classe não contém uma referência ao LegalPackageAccess para o atalho não está disponível. Nenhum mapeamento leva um ID de membro ou um id de org — ambos vêm da sessão. Serviço RespostaStatusExcepções manter seu status: 404 não- seu, 409 já-acabado, 422 não reconhecidos e 503 sinais indisponível são quatro instruções diferentes, e um deles significa que o membro já conseguiu. Uma exceção inesperada é uma Fixo-string 500: ecoando e.getMessage() é tolerável na superfície do HR, mas isto um que cada empregado pode alcançar. A extracção do KToken foi transferida para a segurança/SessionKToken, por isso esta não é a terceira Entendido.
· DocsService
Atestado de embalagem no final, e a divisão EXECUTED/AWAITING OTHERS
Escreve o WORM LegalPackage Atestado: atestadoTextSha256 da FROZEN versão (o texto do pacote é mutável e pode já ter sido reworded), manifestoSha256 sobre o encomendado [{documentUid, contentSha256, orderIndex}] realmente apresentado, atestadoNo conjunto de aplicações, fonteIp de um direita-para-esquerda X-Forwarded-Para andar, provaBlob verbatim para que o digerir pode ser Recomputado mais tarde. O cliente não é confiável para a conclusão. Antes de tudo ser escrito, cada um o envelope do documento assinalável é re-ler do ESigService; meu destinatário deve ser ASSINADO, e PARCIALMENTE assinado não é colapsado a forma como DivulgaçãoEnvelopeSyncService colapsa-o, de modo que uma contra-assinatura pendente produz AWAITING OTHERS em vez de um pacote que afirma ser executado. Uma leitura falhada recusa o acabamento — a Chamada temporária não é prova que alguém tenha assinado. Um pacote com zero documentos signáveis não cria nenhum envelope, chama ESigService não E o atestado é a sua única prova de execução. Um segundo final retorna a linha existente: a entidade @PreUpdate lança por design e a o índice UNIQUE da migração em action uid é o serializador real.
· DocsService
Perfil de leitura de membro autorizado por identidade para atribuições
LegalAssignmentOwnership é uma guarda SEPARATE da LegalPackageAccess de propósito: um membro que execute o seu próprio acordo não tem direito ao RH e o alargamento do RH lido definido para admiti-los entregaria a cada membro a grade de modelos e o Previsão do público lista completa com e-mails. Tudo o que não é do chamador a própria designação responde a um 404 idêntico — um 403 confirmaria que o uid é real. detail() faz a contabilidade de primeira visão na linha HR (firstViewedAt, PENDING -> IN PROGRESS) em vez de no ESigService, por isso o estatuto do destinatário A máquina está intacta e o distintivo permanece honesto. O texto do certificado vem da versão FROZEN, nunca do rascunho mutável do pacote. documento Pdf serve documentos ACKNOWLEDGE-ONLY e verifica a ImgDat servida conteúdo-endereço digerir contra o conteúdo congeladoSha256 antes de servir um byte; saveImgContent repoints img.setDat em cada Docs save, então a deriva é ao vivo. Documentos assinantes são recusados com um 409 nomeando a rota do esígnio — esses bytes deve vir do serviço que os achata. A orgID/memberID do KToken é primitiva e longa, então a identidade "== null" do plano check é 0 em vez disso; extractKToken deixa 0 para trás para um campo de sessão ausente.
· DocsService
Forma canônica manifesta e um IP cliente resistente a spoof
manifestoSha256 hashes o encomendado [{documentUid, contentSha256, orderIndex}] o membro foi realmente mostrado, comprimento-prefixo para que um uid trabalhada não pode imitar um limite de campo e fazer dois conjuntos de documentos diferentes hash o mesmo. provaJson é armazenadas verbatim e idas e voltas para o mesmo digest – uma bolha prova que não pode regenerar o seu próprio haxixe não prova nada. LegalClientIp caminha X-Forwarded-For Right-to-LEFT e leva o primeiro salto público. DocumentAccessAuditor lê da esquerda para a direita, que é controlado pelo cliente; que o defeito preexistente não é corrigido aqui, mas não deve ser a fonte de Fonte evidênciaIp.
· ESigService
Superfície de assinatura do membro autenticado do pessoal em /api/esig/member/**
OTKAuthFilter ignora apenas /actuador, /api/esig/público e /api/esig/interno, então este prefixo está por trás da pauta OTK auth com orgId/memberId já no pedido. O destinatário nunca é uma variável de caminho: é resolvido pela correspondência EsignEnvelopeRecipient.memberId para o ID do membro OTK, então não existe nenhum parâmetro a membro pode mudar para alcançar a linha de um colega. Não-encontrado, seu-org e Não-no-neste-envelope todos respondem um 404 idêntico. Não /delegar — entrega um documento de conformidade a um email externo arbitrário Sem aprovação e sem bandeira desactivada; excluída por omissão, não por uma bandeira. Não /decodificador e não /stepup: o decodificador com escopo de receptor pertence ao vazio do HR caminho, e step-up é chaveado em uma sessão Redis singer esta superfície não tem. SignerIpAddress vem de uma caminhada de direita para esquerda X-Forwarded-Para. EsignPublicController.clientIp lê da esquerda para a direita, que é controlado pelo cliente e, portanto, spoofable, e que valor pousa em um campo de evidência.
· kamo-internal
Pacotes atribuídos sub-tab e entregar/entregar/voitar ações
AG Grid Community sobre uma recolha distribuída por MUI — Comunidade não tem um modelo de linha do lado do servidor, assim, as páginas do servidor e a grade renderizam exatamente o que foi entregue. O Executado coluna é derivado servidor-side a partir do mesmo status que o chip renderiza, então os dois não podem discordar, e um documento assinado sem envelope levanta um aviso em vez de estar sentado como "pendendo" para sempre. A coluna de filtro à direita é encabeçada pelo próprio termo de membro da equipa plural da org, a partir de dados, com uma linha independente "Todos" — deliberadamente nem um interpolou "Todos {Team Membros}" string, porque a única mensagem no dicionário tem uma placeholder definido em 12 de 22 locais e novas chaves não podem ser inventadas aqui. A lista reutiliza o endpoint de visualização do público existente em vez de escrever um 13.a cópia dos membros-subscritores + membros-empregadores de equipa-contratantes dupla retorna os membros do PROSPECTO, CANDIDATO, TERMINADO e RESIGNADO. O paginador "1-25 / 100" é construído a partir de dados em vez de em common.table.of, cujo valor é um EMPTY STRING em pl.json — o guarda chave só prova que existe uma chave em en. Vazio usa uma palavra de desafio VOID fixa: ele cancela instrumentos legais ao vivo org-wide.
· kamo-internal
Pacote legal entregar / entregar / evitar proxies e cliente de atribuição
Fine 1:1 forwardToApi routes — uma solicitação upstream cada, porque OTKAuthFilter faz getAndDelete e um loop por membro em uma rota Next precisaria de um OTK por membro. A listagem passa um PATH SOMENTE; forwardToApi mescla a string de consulta do navegador em si. O mapeamento status-to-i18n é o verdadeiro guard, não check-i18n-keys.mjs: esse script somente prova que existe uma chave no pt, e mensagens/ é gitignored, então uma chave adicionada localmente passa E depois falha na construção do Docker. Cada chave aqui foi verificada em todos os 22 locais para a presença e a igualdade de lugar-set, e um pinos de teste que nenhum dos quatro conhecidos Chaves danificadas são devolvidas. Uma seleção vazia de vazios não envia nenhuma chave do TeamMemberIds — essa ausência é o que seleciona o ramo org-wide; um array vazio não anularia nada e não relataria nada. ReleaseResult não estende DeliverResult: ReleaseResultDto não tem versãoNumber Só que... Herdar o propriedade que a infra- estrutura nunca envia, então entregarResumoParts lê novoVersionNumber para um redelivery em vez de reportar v0.
· DocsService
Org-scoped, paged, lista de atribuição de pacotes legais filtrados
Construído no EntityManager em vez de um método de repositório de lib compartilhado: o conjunto de filtros é dinâmico e adicioná-lo ao kamo-shared-library forçaria uma reconstrução de artefato compartilhado em cada consumidor para uma consulta apenas DocsService problemas. O predicado da organização é incondicional e primeiro, e um teste prova que sobrevive cada combinação de filtro – o endpoint não toma nenhum parâmetro org, então uma cláusula derrubada listaria as tarefas de outro inquilino. Paging carrega um uid tie-break porque um Entrega de 200 membros entregue dentro de um milissegundo. As contagens de documentos são duas GRUPO POR consultas, não 25 buscas por linha. Um status desconhecido é um 400, nunca silenciosamente filtro ignorado numa grelha de conformidade.
· DocsService
Desvio das atribuições de pacotes legais, org-wide ou para membros nomeados
Resultados por atribuição — anulados, ignorados, não encontrados — porque um administrador anular um pacote para seis pessoas nomeadas precisa saber qual já tinha executado (suas A prova permanece) e que nunca foram atribuídas (um id roster velho). Um nu 200 não pode Diz isso. As transições de atribuição são síncronas: a linha de atribuição, não o status de e-sign, é O que abre o membro e conduz o distintivo. Os vazios do envelope saem do fio e são pré-filtrado em sinal/esquecido, porque vazioEnvelope 409s um envelope completo e um documento só de reconhecimento não tem nenhum envelope. Um membro pode segurar várias linhas Depois de uma redelivery, cada fileira tem sua própria decisão.
· DocsService
Reenviar um pacote alterado, substituindo as atribuições abertas
Recusado, a menos que a impressão digital viva diverja da publicada. Binder.dateAtualizado está morto e Img não tem contador de revisão, de modo que a impressão digital é o único sinal de mudança existe – sem o portão, Redeliver é um botão que silenciosamente anula todos trabalho em curso e reedita um instrumento idêntico. Publica através do caminho de publicação existente (o único escritor de linhas de versão), marcas cada atribuição OPEN SUPERSEDED, filas seus envelopes não-terminais para micção, e reeleases para o conjunto de membros substituído mais qualquer um recém-correspondente — re-resolvido através findAudience para que um membro encerrado desde a primeira entrega não recebe substituição. As designações executadas não são tocadas; elas são a evidência.
· DocsService
Entregue um pacote legal ao seu público, fora da linha de solicitação
Planeje na linha de solicitação (duas consultas baratas, então a resposta é exata sobre quem é incluído e quem foi ignorado e porquê), esquecê-lo: 200 membros x 8 documentos é 1.600 linhas mais muitas chamadas do ESigService, e DocsService serve WOPI. A piscina NÃO é um feijão Spring Executor. aplicaçãoTaskExecutor is **************** e DocsService já tem @Async nu em KSessionService e DocumentService -- publicar um Feijão de Execução mover- se- á silenciosamente a sessão WOPI toca nesta pequena piscina delimitada. Envelopes são criados fora de qualquer transação; um tempo- limite de leitura de 20s A ligação Hikari é como uma piscina de dez famintos. Um documento assinalável cujo envelope failed mantém um envelope uid nulo, que é o único sinal que a grade tem. Os mapeamentos de redeliver/void/assignment-grid também chegam aqui, então o controlador tem UM o funil de autorização escrito e provado uma vez em vez de um segundo aparafusado mais tarde; Os seus serviços respondem 501 até às tarefas 4-6 preencherem os corpos.
· DocsService
Planeador de entrega — segmentação incremental, pré-filtro de e-mail, datas de vencimento
Entrega é o novo caminho de aluguel e é destinado a ser re-run, por isso os membros que já possuem um a atribuição é subtraída em vez de ser dada uma segunda cópia do mesmo instrumento. Os membros sem e- mail são contados e ignorados antecipadamente, porque o EsignEnvelopeService 400s um sinalizador sem um de dentro do laço, depois de membros anteriores já têm envelopes vivos. A consulta ao público ORs três predicados, então duplicações são colapsadas. Um documento só de reconhecimento não recebe nenhum envelope.
· DocsService
EsigService cliente interno para entrega de pacote legal
O primeiro cliente de serviço a serviço do DocsService. Mensagens para **************************** (origem MANUAL, nunca medido) supplyInvite=true — RH envia uma notificação, não uma por documento por membro. Tempo limite são explícitos: EsignEmailClient constrói um RestTemplate nu sem nenhum, e um sem tempo para ler em um pod cunhado pinos uma linha de trabalhador até reiniciar. Nada lança sobre um erro upstream, porque o fan-out emite uma chamada por documento signável por membro e não deve interromper o lote por causa de um modelo ruim. Void maps 409 to a reportable Saltou- assinado em vez de um erro. Os registos de resposta ignoram campos desconhecidos — o context ObjectMapper ainda tem PROPRIEDADES FAIL ON UNKNOWN .
· kamo-internal
Sub-tab de modelos de pacotes para legal e conformidade
Substitui apenas o corpo do HrTabPlaceholder — a rota, a entrada da aba e o portão já existem em hrTabs.ts. Lista comunitária AG Grid mais uma janela de criação/edição com uma ordered fichário captador escopo para HR RESOURCE (ordinal 13, not id 15), up/down reord, e Department/Job Type multi-seleciona que todos os membros da equipe desativam. A a etiqueta de alternância é o próprio termo de membro da equipe plural da org, nunca uma string codificada. Nenhuma nova chave i18n: cada etiqueta reutiliza uma chave que o dicionário já define e conta renderização de dados.
· kamo-internal
Rotas legais do proxy do pacote, api do cliente e ajudantes puros
Linhas finas 1:1 para frenteToApi sob /api/docs/legal — um pedido a montante cada, porque OTKAuthFilter faz getAndDelete e um loop de saída de fãs em uma rota seguinte seria precisa de um OTK por membro. Ids ficar strings fim a fim (unique rowid). Reordenar é preso em vez de embrulhar, e as listas de audiência são enviadas vazias quando All Team Os membros estão em para que uma audiência mais estreita não possa voltar.
· DocsService
Visualização da resolução do público
Resolve um público salvo ou rascunho através do TeamMemberRepo.findAudience, que é o Unicamente o leitor que transporta o predicado obrigatório de elegibilidade do Estado – o Endpoint time-membros-contratantes retorna PROSPECT, CANDIDATO, TERMINADO e RESIGNADO. Bandeiras membros sem e-mail (EsignEnvelopeService hard-400s sem um) e membros abaixo da segurança TEAM MEMBER (ImagingController ignora silenciosamente a cópia arquivada). An o público com o alvo nada resolve para ninguém, e listas de id vazias se tornam sentinelas assim as cláusulas OR'D IN permanecem válidas SQL.
· DocsService
A publicação congela uma versão com documentos com bytes
Pins img dat id plus a content hash, not img id: saveImgContent repoints the same Img em novos bytes em cada Docs salvar, e resolverSource caminha para o dat live na construção da sessão e achatamento. Instantâneos do desenho congelado em vez de deixar resolveDesignJson voltar para o mais novo, recusa um documento sem conversão PDF, e recusa uma publicação cuja impressão digital não foi movida.
· DocsService
Pacote jurídico CRUD em /api/docs/legal/pacotes
Listar, criar, obter, atualizar e excluir, com refs de aglutinantes ordenados e linhas de audiência substituído como um conjunto. Org vem da sessão em cada caminho — DocsService é PermitirAll e OTKPreAuthFilter continua a cadeia sem um token, de modo que o Extrato do controladorKToken É a autenticação. Departamento de Cross-org, cargo, membro e fichário ids 400 explicitamente em vez de escrever silenciosamente nada.
· DocsService
Contrato de fio pacote legal e normalização de pedido
Ids cruz como strings (unique rowid excede MAX SAFE INTEGER). A ordem é o lista ordem, de-duplicado, e uma entrada não-numérica 400s em vez de ser ignorado — O salto silencioso é como uma reordenação perde um fichário. Listas de audiências vazias colapsam para um Sentinel para que as cláusulas OR'd IN no findAudience permaneçam válidas SQL.
· DocsService
Impressões digitais de conteúdo para pacotes legais
Binder.dateAtualizado nunca se move depois do INSERT, então o conteúdo de um pacote não tem alteração sinal para comparar. Adiciona um SHA-256 sobre o aglutinante canónico ordenado/tupla de itens — incluindo imgDatId, porque saveImgContent aponta o mesmo Img em novos bytes sobre cada Docs salvar — mais o hash texto atestado. A codificação é prefixada com o comprimento assim, um configJson criado não pode forjar um layout diferente. Também adiciona com.kamo.z.shared.hr.legal à varredura do repositório.
· SecurityService
Push plataforma-admin mudanças de estado em vez de ser pesquisado para eles
Cada tela de plataforma suportada por este serviço atualizado em um timer, porque isso serviço não tem WebSocket e, portanto, não há maneira de dizer nada a ninguém: o guia de treinador de empréstimo fechado re-ler a cada 4 segundos, enquanto uma execução foi ao vivo, DNS fornecimento a cada 15, logs de sincronização comercial e estatísticas de gravação VOIP a cada 30, e a página de configuração do domínio perguntou verificar-dns uma vez por minuto por aba aberta. PlatformEventPublisher envia estes para o núcleo NATS e MediaService's new PlatformStompRelayController coloca-os no STOMP. Core NATS em vez de JetStream, ThemeProvisionPublisher: o fluxo deste serviço é CHAT MESSAGENS/chat.>, assim que um JetStream publicar em segurança.* falharia a validação de fluxo esperado e seria Largado. No máximo uma vez é o comércio certo — cada consumidor também carrega sobre o REST quando ele monta, então um evento perdido custa uma atualização, nunca correção. Fio nos pontos onde o estado realmente se move: - ClosedLoanTrainerService em cada progresso escrever, na reivindicação, e em cada estado terminal, então o monitor avança exatamente quando a caminhada faz. - DnsProvisioning Serviço à medida que cada registro se resolve, em vez da releitura do painel Todo o tronco esperando que algo caísse. - RetailSyncLogBroadcaster em cada linha de sync-log, através do novo ouvinte de lib compartilhado costura, chaveada pela configuração do provedor para que uma org sincronizando vários provedores não redesenhar todos eles porque um deles se moveu. Dois contadores não têm esse momento, e são tratados honestamente em vez de fingir em eventos: - O backlog de gravação VOIP é escrito por outro serviço inteiramente, então PlatformStatsWatcher amostra - mas no servidor, uma vez, e publica somente quando os números realmente mudam, então um backlog silencioso não produz tráfego onde o arranjo antigo re-enviar uma carga útil idêntica para cada visualizador duas vezes um Um minuto para sempre. trigger-sync publica imediatamente, uma vez que conhece o backlog Está prestes a mexer-se. - Diagnostics is live JVM/host/database leituras onde essencialmente todos os campos difere de segundo para segundo, então não há nada discreto para empurrar. Fica nu tick: um timer de servidor decidindo quando "agora" vale a pena reler, em vez de um por página aberta cada puxando o instantâneo completo. Verificação de Domínio O observador substitui as sondagens da página de configuração. Propagação de DNS e a emissão de certificados é um estado genuinamente externo sem qualquer evento a subscrever, então a verificação tem que acontecer em algum lugar — mas não em todos os navegadores. Uma varredura cobre todos os domínios de espera, toma o 25 menos recente-checked para um backlog de Domínios mal configurados giram em vez de serem requisitados na íntegra, apenas sondas HTTPS uma vez que o DNS resolve, e publica apenas quando um domínio realmente avança. Dois testes existentes constroem essas classes diretamente e foram atualizados para o novo parâmetros do construtor. Nota: falha no main já (gerente de entidade não definida no serviço manual do teste) e é intocada por esta mudança — verificada contra uma worktree HEAD limpa.
· EmailService
Publique eventos de mudança de caixa de correio para que as visualizações de e-mail parem de pesquisar
A árvore de pastas, lista de conversas e lista de mensagens cada um executou seus próprios 30 segundos Timer, a recarregar a hipótese de algo se ter movido. O WebSocket já disse-lhes quando o correio chegou, mas essa é apenas uma das formas como uma caixa de correio muda — ler uma mensagem em Roundcube ou por telefone, movê-la, apagá-la ou Expurgar tudo deixou a UI errada até ao próximo tique. EmailMailboxChanged diz que uma pasta não é mais o que você está mostrando, e carrega a razão para que um consumidor possa ignorar tipos que ele não se importa. Publicado em e-mail.alterado.<addr> e retransmitido para ************* do Ouvintes IDLE (chegar, expurgar, mudar de bandeira) e a partir da marca lida, bandeiras, mover, excluir, spam, enviar e rascunho de endpoints. Deliberadamente não dobrado em EmailUnreadEditor: que possui uma contagem, então ele tem que chegar ao fornecedor e colisões estouros para permanecer acessível. Isto carrega sem contar e lê nada, por isso é barato o suficiente para enviar em cada mudança e não deve esperar atrás de uma janela que uma contagem precisa. Um movimento não reporta nenhuma pasta porque toca em dois e a fonte nem sempre é conhecido pelo interlocutor — os consumidores tratam isso como "recarregar o que quer que esteja a mostrar".
· MediaService
Eventos da plataforma Relay SecurityService para STOMP
SecurityService possui a plataforma-superfície do administrador – configuração do sistema, DNS provisionamento, sincronização comercial — mas não tem um ponto final WebSocket, por isso, cada ecrã apoiado por ele não tinha como ser dito nada e refrescado em um timer em vez: a guia de treinador de empréstimo fechado a cada 4 segundos, provisionamento DNS a cada 15, comércio registros de sincronização e estatísticas de gravação VOIP a cada 30. Ele publica para núcleo NATS; isso coloca essas mensagens no STOMP, o mesmo arranjo SuporteStompRelayController e **************** já utilizar. Sujeito ao destino é mecânico - soltar a principal "segurança". e swap pontos para cortes, por isso security.dns.log.42 chega em /topic/dns/log/42 — que significa que um novo tipo de evento precisa de um editor e um assinante e nada aqui. Prefixos estão ligados explicitamente em vez de como segurança.>: um catch-all seria duas-entrega de segurança. theme.provision.*, que ThemeProvisionStompRelay já retransmite para a mesma forma de tópico.
· kamo-shared-library
Deixar que o progresso da sincronização e o estado do domínio sejam anunciados em vez de sondados
Dois ganchos para a conversão push no SecurityService, onde várias plataformas telas atualizadas em timers porque não havia maneira de lhes dizer nada. RetailSyncLogListener é uma costura de notificação opcional no RetailSyncOrchestrator, chamado quando uma execução de sincronização escreve sua linha IN PROGRESS e novamente quando escreve o Terminal um. O orquestrador permanece inconsciente de como a notificação viaja, e sem nenhuma implementação registrada se comporta exatamente como antes. A sincronização do provedor painel recarregado toda a sua lista de registros a cada 30 segundos para assistir a uma execução que tinha apenas começou sozinho. **************************** lista domínios de topo que não Terminou a sua chegada — DNS não verificado, ou verificado sem certificado confirmado. Existe para um observador de verificação do lado do servidor: a página de configuração do domínio pesquisada verificar- dns uma vez por minuto por página aberta enquanto aguarda a propagação pública de DNS e emissão de certificados. Encomendado menos recentemente verificado primeiro e tomado com um Pageable limite para que uma varredura não possa crescer com o número de domínios permanentemente não verificados.
· ESigService
Permitir que um remetente suprima o e-mail de convite por envelope
Criar um envelope enviou um convite por e-mail incondicional, então um chamador envelopes por trás de uma notificação não tinha como ficar quieto. Null preserva o comportamento existente; o token de acesso ainda é emitido de qualquer forma.
· EmailService
Push INBOX contagens não lidas sobre NATS/WebSocket em vez de votação
O crachá de e- mail do topo do navegador no kamo- interno atualizou- se chamando /api/email/pastas a cada 30 segundos, por guia do navegador. Esse endpoint caminha o toda a árvore de pastas e abre todas as pastas somente para responder, então o custo de um inteiro foi um resumo completo da caixa postal, repetido indefinidamente. O WebSocket que já existia apenas anunciou que o correio tinha chegado e não tinha conta, Então o seu único trabalho era acionar outra sondagem. Publicar a própria contagem: - EmailUnreadSnapshot on NATS email.unread.<addr>, retransmitido para STOMP /tópico/email/não lido/<memberId>. NATS está no caminho porque o pod que observa uma mudança rotineiramente não é o pod segurando WebSocket do membro. - EmailUnreadEditor coalesces por caixa de correio, então uma entrega IDLE de dez mensagens ou uma página de correio marcado lido é uma viagem de ida e volta IMAP e uma publicação, fora do Linha de chamada. - MailReader.getUnreadCount lê uma pasta. O gráfico responde da pasta lista já retorna; provedores com suporte de IMAP sobrepõem-no com um único Status (UNSEEN). - Um snapshot é publicado em subscrição, em mensagens IDLEAdded/mensagensRemovidas, na bandeira IMAP muda, e a partir da marca-leitura / bandeiras / mover / excluir / spam endpoints. Três lacunas que também encerram: - As mudanças na bandeira eram invisíveis. Lendo e- mail em Roundcube ou em um conjunto de telefone \Viu sem adicionar ou remover uma mensagem, então o crachá só caiu quando O navegador seguinte foi pesquisado. IDLE agora carrega uma mensagemChangedListener. - Caixas de correio sem sinal. EmailWebSocketController resolvido credenciais através da tabela kamoMail virtual users, que não tem linha para membro no Microsoft 365 ou Google Workspace, então subscreva () registrou um aviso e voltou. Agora ele resolve através do MailProviderResolver, e IDLE conecta com a especificação de credencial (host/port/TLS/XOAUTH2) através de uma ImapStorefactory.connect em vez de assumir a máquina KamoMail e uma Senha. - As sessões vazaram. Uma aba fechada nunca envia /email/unsubscribe, então caixas de correio são agora referência contada por sessão STOMP e lançada em SessionDesconnectEvent. Caixas de correio sem ouvinte IDLE ao vivo — Gráfico, depois da tampa de ligação 50 ou thread IDLE morto — são varridos para servidor a cada 60s e publicados para o mesmo tópico. Isso substitui a votação per-tab em vez de empurrar: uma varredura serve cada tab um membro tem aberto, a associação é re-testado cada passe para que um ouvinte morto é captado, e o navegador ainda recebe a contagem sobre o WebSocket. MessageIndexerr vincula email.> e deserializou tudo nele como uma mensagem, então ele agora ignora assuntos fora do email.inbox. — filtrado no manipulador em vez do que por estreitar a assinatura, porque email-metadata-indexer é um durável o consumidor e a alteração do seu assunto de filtro rejeitariam a assinatura em cada pod até que o durável foi excluído à mão.
· InitializerService
Termine o esquema do pacote legal
Adiciona com.kamo.z.shared.hr.legal à lista de verificação do repositório e garante a o mapeamento de entidade não pode expressar-se com segurança.
· kamo-shared-library
Certificado do pacote de registo como prova exclusiva do anexo
O pacote "Eu li e concordo" é um instrumento jurídico diferente do o consentimento do E-SIGN para proceder à transacção e a partir de qualquer assinatura por documento, e é a ÚNICA prova para um pacote sem documentos assinantes. Guardas recusam atualização e apagar a forma como PhiAccessLog faz.

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