Ir para o conteúdo
KAMOUniverse

Changelog

O que há de novo.

Cada melhoria para a plataforma, como ele envia.

  1. · kamo-shared-library

    Adicionar atribuições por membro e progresso por documento

    A linha do documento é a junção que faz com que os envelopes N e-sign sejam lidos como um pacote. O número de crachás sai do estado de atribuição, não do estado de e- sign: receiver status não tem VOIDED ou EXPIRED, vazio nunca toca nas linhas do destinatário, e um O pacote só de reconhecimento não tem envelopes.

  2. · kamo-shared-library

    Congele o conteúdo do pacote em versões imutáveis

    Pins o ImgDat blob id e seu SHA-256, não apenas imgld - um Docs salvar aponta o mesmo Img em novos bytes, então imgld sozinho deixaria dois membros assinar Documentos diferentes sob identidades idênticas. Instantâneos do desenho também, então execução nunca depende do retorno do resolveDesignJson ao novo layout.

  3. · kamo-shared-library

    Segmentar um pacote em departamentos, tipos de trabalho ou membros nomeados

    Formado no SystemUserAccess. Adiciona a resolução do público ao TeamMemberRepo, que foi uma interface vazia; o predicado ACTIVE + recordState é o que mantém pessoal cessado e candidatos não contratados fora de uma entrega.

  4. · kamo-shared-library

    Adicionar as entidades do modelo de pacote legal

    Um pacote é um conjunto ordenado de fichários mais um público. As referências binder são soft ids porque os aglutinantes são deletáveis pelo usuário e em cascata seus itens. A o texto do certificado é armazenado na íntegra com o seu hash — um ponteiro não pode provar O que um membro concordou.

  5. · kamo-internal

    Faça com que o fichário saiba da sua colecção

    A loja é um módulo singleton, então agora rastreia o escopo ativo, limpa em uma mudança de escopo, e deixa cair respostas em voo.

  6. · DocsService

    Listar e criar pastas dentro de uma coleção

    Alcança a consulta de aglomeração visível para o DocManager (assocType, assocObject Id), carimba o escopo na criação, herda-o em duplicado, e bate last modified a partir do item mutações que nunca escrevem a linha de ligantes.

  7. · DocsService

    Carregar o escopo de coleta no contrato de fio de aglutinante

  8. · InitializerService

    Preencher a colecção a que cada ficheiro existente pertence

    Deriva o escopo do Img do primeiro item DOC; os aglutinantes vazios O dono é My Docs. Aplica NÃO NULL apenas após o enchimento.

  9. · kamo-shared-library

    Estreita visibilidade do aglutinante para uma coleção de documentos

    Substitui findVisibleToMember por uma variante esquadrinhada e deixa cair os dois localizadores não referenciados que classificaram pela coluna date updated morta.

  10. · kamo-shared-library

    Dar a uma pasta a colecção de documentos a que pertence

    Os "binders" não tinham um "assoc scoping", por isso todos os DocManager renderizaram o mesmo global por membro do agrupamento e um fichário construído sob Marketing poderia ser preenchido com RH Documentos. Armazena o ordinal ImageAssocType para corresponder ao Img.assocId. Também adiciona um aplicativo gerenciado last modified: BaseEntity.dateAtualizado é Então, a lista é sempre foram ordenados pelo tempo da criação.

  11. · kamo-internal

    Agrupar os campos de convite de reunião por significado quando maximizado

    Dividir o formulário em metades iguais usou a unidade errada. Ele esticou uma data entrada através de metade da janela e encalhou sua caixa de todos os dias na borda distante, esquerda duas entradas de tempo curto seguindo várias centenas de pixels de nada, e empurrado Adicione uma largura de janela completa dos lembretes a que pertence, enquanto campos que ler como um pensamento sentou filas separadas. Reivindicar faixas de uma grade de 12 colunas, dimensionada para o que cada campo é: Título largura completa, o campo do título Data + Todo o dia □ Tempo □ TZ todo o cluster "quando" em uma linha Localização □ URL de reunião onde está e como participar Rótulo de lembretes, entradas e Adicionar o fluxo em linha Os lembretes só recebem uma linha de volta: dois selecções curtas já não custam uma linha cada. O fuso horário amplia-se para absorver as faixas do campo do tempo em uma reunião o dia todo Essa linha ainda abrange a largura. A ordem de campo não é tocada — o agrupamento vem a partir de spans, então o que você tab através fica o que você vê, em ambos os layouts.

  12. · kamo-internal

    Manter o original citado fora do corpo editável

    A resposta deixou cair toda a mensagem citada no editor Quill como texto corporal. Quill só pode modelar uma grade simples, então cada tabela de layout na citação foi achatados em um — e tabelas de layout são como assinaturas e praticamente todos correio de marketing são construídos, e é por isso que uma assinatura citada voltou como um nu grade de células sem forma de recuperar o original. A citação agora viaja ao lado do corpo em vez de dentro dele. Responder, responder- tudo e adiante entregá-lo como `quotedHtml`; o compositor mostra-lo abaixo do assinatura, exatamente onde ele pousa no correio enviado, renderizado através do mesmo iframe sandboxizado que o painel de leitura usa — por isso parece como quando chegou, e seu CSS não pode vazar para o compositor em torno dele. No envio é anexado após a assinatura. Ele é colapsado para começar, porque em um fio longo a citação anã a resposta. Duas ações se sentam ao lado: removê-la da resposta, ou movê-la para o corpo como texto comum. O segundo existe porque retirar a citação do editor tirou - se a capacidade de aparar um fio até a linha de resposta — fazendo que ainda custa o layout, mas agora é uma escolha explícita em vez de incumprimento inevitável. Sancionado na saída. O roteamento da citação em torno do editor também a roteou em torno da limpeza implícita que o editor estava fazendo, então higienizeEmailHtml agora corre nele antes de ser reenviado. Deliberadamente NÃO passar makeHtmlLegible: que guarda juízes de cor contra a tela branca do compositor, que é certa para o texto escrito lá e errada para uma citação que mantém seu próprio <style> e renderiza em seu próprio fundo. Invertendo O texto branco de um boletim temático escuro teria feito com que ficasse escuro. A citação monta no instantâneo da janela da ferramenta para que uma recarga não a perca, e é concatenado no corpo ao guardar um rascunho — o endpoint dos rascunhos armazena um corpo, e um rascunho reaberto segurando a citação como texto bate perdendo o fio.

  13. · kamo-internal

    Emparelhe os campos de convite à reunião em duas colunas quando maximizado

    O formulário de convite empilha oito linhas de largura total, que em uma composição maximizada janela empurrou o editor do corpo a maior parte do caminho fora da tela, deixando metade do largura da janela vazia de ambos os lados das entradas. Maximizado, os campos agora fluem em duas faixas em sua ordem DOM existente — Título, Data, Tempo, Horário, Localização,URL — metade da altura do formulário sem reordenar qualquer coisa ou tocar no layout estreito. Lembretes manter a largura completa em ambos: a lista cresce uma linha por lembrete, e meia coluna faria forma inteira saltar em altura cada vez que um é adicionado. As faixas são minmax(0, 1fr) em vez de 1fr, ou padrão de uma faixa de grade min-width:auto se recusaria a encolher abaixo de seu conteúdo e deixar a linha de URL input e Gerar botão pressione após metade da largura.

  14. · ESigService

    Aplicar operações de página e modificadores no documento assinado

    O designer sempre ofereceu página rotacionar, excluir, reordenar e add-blank, mais marca d'água, número de página e modificadores de etiqueta, e o achatado não ler nenhum deles: valores de campo carimbados nas páginas de origem e certificados anexados. Uma página para ti excluído ainda enviado, uma marca d'água que você configurou nunca apareceu. Tudo isto é agora aplicado. O oleoduto compõe na ordem que as expectativas de um leitor exigem — páginas em branco inserido para que o espaço de índice do projeto corresponda ao documento, cada página virada, retromodificadores desenhados, valores de campo carimbados, marcas de água acima desenhadas, suprimidos páginas largadas e o resto reordenado, certificados adicionados por último. Certificados não tenha nenhum número de página ou marca d'água: são o registo de auditoria do documento, Não faz parte disso. A numeração da página é resolvida contra a sequência terminada, de modo que um documento que deixa uma página números seus sobreviventes 1..n em vez de deixar uma lacuna. O designer agora resolve essa sequência de forma idêntica (kamo-internal pageSequence.ts mirrors EsignPageLayout, caso para caso) para que a visualização não possa prometer um número documento entregue não será transportado. Modificadores são colocados contra a página como o leitor vê, que em um turno página significa mapear as coordenadas de exibição de volta para o espaço do usuário e pré-virar o conteúdo para que ele não sai de lado — EsignPageFrame faz isso, e sua quatro rotações são fixadas por testes de canto. Marcas de água usam o próprio logotipo da org do balde de tema. A maioria das orgs mantém SVG somente e PDFBox desenha rasters, por isso SVG é transcodificado através de Batik com externa carga de recursos recusada — um logotipo carregado é conteúdo fornecido pelo inquilino e Rasterizar não é higienizar. Uma org sem logotipo não recebe marca d'água; A marca padrão da plataforma nunca é substituída por um contrato de inquilino. Endurecimento ao longo: design JSON é analisado totalmente, por isso qualquer malformação, fora do alcance ou de um designer mais novo é deixado cair em vez de jogado eo As assinaturas ainda aterraram. A exclusão de cada página é recusada — PDF não tem validade formulário de página zero e um acordo sem páginas não é um documento. Página herdada atributos são fixados antes da árvore de páginas ser reestruturada. Um campo em um excluído página não é carimbada em outra página. Texto mantém seus acentos em vez de sendo achatado para ASCII, por caracter, contra o que a fonte pode codificar. 59 testes, 17 deles dirigindo verdadeiro PDFBox fim para o fim e lendo o resultado de volta.

  15. · kamo-internal

    Dê a cada janela de ferramenta popup 40px mais espaço em ambos os eixos

    O tamanho e minSize de cada ferramenta no registro cresce em 40x40, e o geometria que foi codificada ao lado se move com ela em vez de deriva fora de acordo: - CalculatorTool mesa de tamanho por modo, que espelha a calculadora padrão de registro. - A AiChatWindow tem o tamanho máximo. Em 420x520 já era um cabelo sob o antigo mínimo; contra o novo 360x540 teria restaurado a janela menor do que um drag-resize pode torná-la. - restauraWindows () agora repete um tamanho persistido apenas para uma ferramenta do leitor pode realmente redimensionar. Para uma ferramenta de tamanho fixo, o instantâneo apenas ecoa para trás o padrão de registro de qualquer compilação o escreveu, então uma aba recarregando através esta mudança teria restaurado o velho 320x650 e mantido-o para o resto do A sua vida. O mesmo guard corrige uma caixa que antecede esta alteração: uma janela o retransmissor tinha fixado para baixo para caber um viewport curto foi persistido no tamanho apertado e nunca mais cresceu depois. A própria colocação da doca - findDockX, releaseoutWindows, o rect makeRoom e a evitação do motor hexhead — toda a geometria ao vivo medida, por isso eles seguem o novos tamanhos sem nada para atualizar. Também corrige o botão de maximização do chat de IA, que escolheu sua ação de 'altura > 800' enquanto desenha seu ícone de 'isMaximized'. Em qualquer viewport menor que 800px maximizando nunca poderia satisfazer esse limiar, de modo que o botão oferecido para restaurar e então maximizado novamente - a janela não poderia ser Trazido de volta. Ambos agora lêem o mesmo valor.

  16. · kamo-internal

    Arrastar, cortar, copiar e colar chips destinatários entre To, Cc e Bcc

    Mover alguém de To para Bcc significava apagar o chip e digitar o endereço outra vez de memória. Chips agora são selecionáveis e podem ser arrastados ou transportados a área de transferência de qualquer um dos três campos para qualquer outro. - clique em selecionar um chip; ctrl/cmd-clique alterna e shift-clique leva um intervalo. O cartão de informação move-se de clique para duplo-clique, de modo que um único clique pode fazer o que Faz em todos os outros clientes de correio - pegar o chip. - arraste um chip ou uma seleção inteira para outro campo. Ctrl ou Alt em espera faz com que uma cópia; um cuidado de inserção mostra onde ele vai pousar, e caindo dentro do Mesmo campo reordena. Um arrasto multi-chip carrega uma contagem em vez de mostrar o - Ctrl+X / Ctrl+C / Ctrl+ V mover fichas entre campos. texto/plano é sempre escrito, então um chip arrastado ou copiado para o corpo — ou para outro correio cliente inteiramente — chega como uma lista de endereços comum; um sabor privado ao lado mantém o nome, foto e link de contato para uma pasta de volta em Kamo. - teclado: setas andar os chips (deslocar estende), Ctrl+ A toma o campo, Exclui remove a seleção e pousa no próximo chip, Escape retorna para a entrada. Backspace em uma entrada vazia agora passa para o último chip em vez O que está prestes a ir é visível primeiro. - colar nos chips de entrada todos os endereços completos que encontrar, incluindo Uma única. Um fragmento meio-tipo ainda cai para a entrada de texto. A metade inter-campo precisa dos três campos para agir uns nos outros, que um campo possuindo apenas sua própria lista não pode fazer; BeneficiárioTransferProvider detém o registro e executa o movimento. Um campo renderizado sem ele — o editor de campanha usa um por conta própria — mantém a seleção, reordenação e a área de transferência, e simplesmente tem Não há para onde transferir. ParseRecipiente A lista agora requer um domínio em vez de apenas um '@'. parseAddress é deliberadamente frouxo porque ele teclas um cache avatar fora de qualquer cabeçalho carregado; um chip é algo que vamos tentar entregar e colar "bob@" produziu um que nunca poderia ser enviado.

  17. · kamo-internal

    Rodar a sobreposição do campo com a página, marcar as importações não lidas, campos de ordem para leitura

    Três coisas que só começam a importar uma vez que um documento chega carregando quarenta campos detectados em vez de dois colocados à mão. Rotação da página: rodar uma página virou a tela, mas os campos esquerdos e anotações Para trás, então eles deslizaram para fora do conteúdo em que estavam ancorados. As duas camadas agora virar com a página, mantendo suas coordenadas no próprio espaço não rotacionado da página Porque é contra isso que a infra-estrutura se posiciona. Cada interação de ponteiro é mapeado para fora do espaço de tela através da nova páginaAuxiliadores de geometria — arrastando, redimensionamento, desenho de anotações, e soltar um novo campo da caixa de ferramentas — e unrotated: esses são colocados contra o frame da página, não seu conteúdo. Marcador não revisto: os campos colocados automaticamente carregam um anel tracejado até o usuário clicar um, assim uma importação grande lê como uma lista de verificação. Apenas uma sessão, nunca salva. Ordem de leitura: campos detectados são ordenados abaixo da página e através de cada linha, com uma tolerância para que uma linha ligeiramente desalinhada ainda sortes esquerda para direita. Widget a ordem no arquivo é um artefato de autoração-ferramenta e muitas vezes não é ordem de leitura. Também corrige uma colisão de valor-opção de minha própria fabricação: dois botões de rádio as legendas impressas correspondem (dois "sim" em uma questão) foram dadas o mesmo valor, e o sinalizador acende um botão comparando o valor do grupo com o próprio botão, Então ambos teriam acendido ao mesmo tempo.

  18. · kamo-internal

    Leia as ações de formato do Acrobat ao detectar campos com preenchimento

    Acrobat armazena o formato pretendido de um campo como JavaScript em /AA, que pdf.js Aparece como acções. Formato. Essa é a declaração do autor em vez de um palpite fora do nome do campo, por isso agora é superior ao nome / legenda heurística: - AFNumber Format -> moeda quando carrega uma string de moeda, outro número - AFDate Format/AFDate FormatEx -> data, AFTime Format -> hora - AFPercent Format -> número - AFSpecial Format(n) -> zip / zip+4 / telefone / SSN - uma acção Calcular significa que o campo é calculado, por isso importa apenas leitura Além disso: uma assinatura ou widget inicial mais fino do que as necessidades de controle agora cresce para cima de sua borda inferior, uma vez que um campo de assinatura PDF é muitas vezes tão alto como a regra impressa ele senta e tinta pertence acima da linha; e um XFA puro documento é relatado como tal em vez de ler como "sem campos de preenchimento", porque seus campos vivem em XML que a detecção do AcroForm não pode ver. Verificado contra real pdf.js 4.10.38 ao lado da suite unidade.

  19. · kamo-internal

    Inserir um novo link de reunião no codificador do compositor

    Adiciona uma ação de rodapé à janela de composição que cria uma reunião com o provedor configurado da organização e escreve seu link de junção no corpo Onde quer que seja que o cuidado esteja. Distinto da opção de convite da reunião ao seu lado: que atribui um calendário convite com uma hora, participantes e lembretes, enquanto este é o "aqui está uma sala, venha sempre" caso que só precisa de uma URL na prosa. O cuidado é rastreado através do borrão o clique causaria de outra forma, de modo que o link terra onde o membro estava digitando em vez de no topo da mensagem. A etapa de criação e linkificação que o compositor de convites já teve agora é compartilhada, então há uma definição de como um encontro se torna um elo — /meet/join/<id> redirecionamento, que é provedor-consciente e assina membros Kamo em Clique na hora.

  20. · kamo-internal

    Reconstruir os campos AcroForm do PDF como campos Kamo nativos

    Abrindo um PDF editável no editor de documentos agora lê seu widget AcroForm anotações fora do documento pdf.js e recria cada um como um DesignField em a mesma página, na mesma posição e tamanho, com o Kamo mais parecido tipo de campo. Em um projeto intocado os campos são colocados automaticamente (um desfazer passo, com uma ação Desfazer no aviso); caso contrário, a caixa de ferramentas oferece uma janela de revisão que ignora qualquer coisa já coberta por um campo colocado. - app/lib/esign/acroform.ts: detecção pura. Os rects de elementos são convertidos através de a página viewport assim /Rotate é honrada. Coberturas de mapeamento estrutural Sig/Btn/Ch/Tx (botões de empurrão e widgets ocultos deixados cair); widgets de texto recebem um passe semântico sobre a dica, o nome do campo e a legenda impressa ao lado na página, assim "Borrower Signature" torna-se uma caixa de assinatura e "Data de assinatura" uma data. Os botões de rádio mantêm suas caixas individuais e são Ligados através de um grupo interligado partilhado. - DesignField ganha opções opcionais[], combinando o contrato de opção de campo aplicativo singer já aceita; o painel de propriedades agora os edita, e também pode Reatribuir um campo a outro signatário. Verificado contra pdf.js 4.10.38 real pdf-lib-built form, in Além da suite da unidade.

  21. · InitializerService

    Crie a coluna search vector e seu índice invertido

    Nunca existiu. O próprio EmailService V1 email metadata schema.sql declara, mas essa migração nunca foi executada -- o tabela veio da verificação de entidade deste serviço, e SearchIndexEntity omite o campo porque Hibernate não pode mapear TSVECTOR, então ddl-auto não pôde adicioná-lo. Portanto, falhou com o SQLSTATE 42703. cada mensagem, e porque esse UPDATE compartilha uma transação com a inserção da linha, A inserção também foi rebobinada. A tabela sempre esteve vazia e a pesquisa por e- mail nunca retornou um resultado.

  22. · kamo-internal

    Um cartão de contacto por detrás de cada nome numa mensagem

    Cada pessoa mostrada num ponto de vista lido era um beco sem saída. Para e Cc renderizado como visorNameFor( a). join(', ') — uma parede vírgula de nomes de exibição sem endereço, não Não há acções. Três coisas estavam erradas com isso. O endereço era não recuperável, e os nomes de exibição são o texto de cabeçalho controlado pelo atacante, então dois pessoas chamadas Chris eram indistinguíveis e copiando o endereço de alguém que era CC'd quis dizer abrir uma resposta e inspecionar o chip. Tudo o organização já conhece essa pessoa — registos de colegas, livros de endereços, avatares, presença ao vivo — resolve-se por endereço e nada chegou à tela. E um fio quatorze-recipiente renderizado como uma linha ilegível. Passar um nome agora abre um cartão. A placa de endereço é sua peça central em vez do que uma legenda cinzenta, porque o endereço é o que o cartão existe para entregar: largura total, mono, parte local em tinta e domínio mais leve, a placa inteira uma cópia controle que varre as mensagens se acentuam sobre o sucesso, e ainda selecionável para qualquer pessoa que prefira arrastar. Ao redor, apenas filas que têm algo neles: título do emprego, empregador, departamento, números que discam o softphone, extensão de um colega, e sua hora local antes de chamá-los. Colegas carregam um ponto de presença viva da presença e disponibilidade existentes contextos. Os remetentes automatizados dizem isso, e um endereço sem resposta não oferece responder a caixa de correio recusaria. O destinatário lista mais de cinco nomes em colapso atrás de uma contagem. Os mecânicos vivem em usoHoverCard, longe do cartão, porque nada disso é sobre as pessoas: a intenção de pairar para que um ponteiro que atravessa um cabeçalho não dispare cartas, um período de graça próximo para que o caminho diagonal para o cartão não o descarte, um cartão aberto em um momento, re-mensuração quando o painel rolagem ou o registro cair, e botões reais assim teclado e toque alcançá-lo em tudo. Apenas o foco do teclado abre — agindo no foco do clique abriria o cartão no mesmo tique o clique comuta para fechar, e o chip ficaria inerte para um rato. Os registros vêm da correspondenteStore, chaveada pelo endereço e nunca fundida em objetos da mensagem: ambas as visualizações da lista pesquisam a cada 30 segundos e substituem Uma rede de mensagens por atacado, que limparia qualquer coisa transportada para lá duas vezes por minuto. Ao contrário dos avatares, eles resolvem vagarosamente — um cabeçalho inteiro é prefigurado quando uma mensagem abre, e pairando cobre tudo o que perdeu — então o cartão é normalmente Já está cheio quando se anima. formatoAgo move-se para fora do MemberItem para que a lista eo cartão descrever o mesmo ausência da mesma forma.

  23. · EmailService

    Resolver as pessoas por trás dos endereços em uma mensagem

    Um cabeçalho de mensagem sabe um endereço e qualquer nome de exibição escolhido pelo remetente Põe ao lado. A organização já sabe muito mais — colegas, endereço livros, extensões, fusos horários — e nada chegou à caixa postal. POST **************** responde a um lote de endereços com o pessoa por trás de cada: colega (com cargo, departamento, extensão, fuso horário e um ID de membro que desbloqueia presença e bate-papo), salvo contato (com o empregador, título e números), ou uma EXTERNA explícita para que o chamador possa armazenar a resposta em vez de pedir de novo em cada hover. Separar deliberadamente do endpoint do avatar em vez de ser dobrado nele. Isso. uma é duas fases por necessidade — uma falha completa pode significar DNS mais quatro chamadas HTTP para os terceiros — e este é um punhado de locais, indexados, org-scoped lê que pode responder completamente na primeira chamada. A partilha de um objectivo obrigaria a metade síncrona para herdar um contrato de "pergunta novamente mais tarde" que não precisa. Teclado no endereço nu e nunca no nome da exibição, que é texto controlado por atacante: um estranho pode definir o seu nome verdadeiro de um colega, e este registo tem a extensão directa do contacto do colega. O normalizador que impõe que agora é compartilhado com o endpoint avatar (MailboxAddress), então os dois não podem se separar e perder as entradas de cache um do outro. A organização vem da sessão, nunca o pedido — o ponto final respostas "este inquilino detém um registro para este endereço", que é uma associação Oráculo se o ouvinte escolher o inquilino. Ids serialize como strings: Os IDs de linha do BarataDB passam por MAX SAFE INTEGER, e O EmailService não tem um mapper global de longo prazo porque os UIDs de mensagem são longos A frente da caixa de correio trata genuinamente como números.

  24. · kamo-internal

    A aba Recursos é a biblioteca de documentos HR da org

    Substitui o placeholder Recursos por DocManager em uma coleção de documentos seu próprio — ImageAssocType.HR RESOURCE, balde de imagens-recursos-hr — org-scoped a forma como os materiais de marketing são, e deliberadamente separados dele: uma comercialização flyer e um manual de funcionários não pertencem a uma biblioteca. O tipo de assoc é enviado como o ORDINAL (13), não seu id (15). A imagem backends resolvem-no com values()[assocType] e os dois divergem porque o enum skips id 6; enviar o id escreveria no balde de outra coleção, que é como a superfície de My Docs uma vez enviou documentos que não pôde ler de volta. HR RESOURCE ASSOC TYPE carrega esse raciocínio ao lado da constante. DocsService e ConversionService foram reconstruídos para a nova constante em primeiro lugar — o frontend é a única coisa que envia 13, então ele pousa por último.

  25. · kamo-shared-library

    HR RESOURCE assoc type for the org HR resource library

    A aba Recursos /hr publica manuais, políticas, formulários e referências material para toda a equipe, e nenhum tipo de assoc existente se encaixa: MY DOCS é um área própria da pessoa, SYSTEM WIDE balde é e-sign templates, e MATERIAL é a biblioteca de marketing — um folheto e um manual de funcionários não pertencem juntos. Org-scoped como MATERIAIS, com delete/sobrescrever/pastas sobre porque HR cura Isto à mão. Os tipos de documentos são permitidos mas opcionais (isAllowDocType=false, isAllowDocTypeOpt=true), então uma org que quer Manual / Política / Formulário categorias podem ligá-los sem que qualquer outra org seja forçada a arquivar uma. Avançou por último, por isso não há mudanças ordinais existentes. A sua ORDINAL tem 13 anos enquanto a sua ID é 15 — o enum skips id 6 e os ouvintes enviam o ordinal, por isso os pinos de teste 13 e âncoras MATERIAL/CATALOG ORÇAMENTO de cada lado. Serviço de Conversão e DocsService indexar o enum por ordinal e precisa de reconstrução antes de qualquer coisa envia 13, ou valor()[13] lança em seu array mais curto.

  26. · kamo-internal

    Consola de módulo de Recursos Humanos com cinco páginas com suporte de rota

    Adiciona /hr com o cromo da página de contas em seu formulário de route-backed (o mesmo /marketing já usa): uma disposição que possui o herói gradiente e a aba sublinhada barra, um índice que pousa na primeira aba acessível, e uma página para cada Visão geral, assistência, legal e conformidade, treinamento e recursos. Dois portões, ambos necessários. organização.is Hrs — o HRS alterna para baixo /settings/account?tab=apps — retorna a rota para casa quando o aplicativo estiver desligado, uma vez que com ele fora /hr não é um lugar que existe para o org. Com o aplicativo ligado, o onze direitos existentes do ServiceType.HRS decidem: um novo composto hasAnyHrRight portão junta **************** e cada conta carrega um O OR-grupo predicado (HR não tem uma visão única direito como Marketing faz). Páginas as falhas do membro são ocultas da barra e recusadas na entrada de URL direta. Registra 'hr' no registro de navegação acima Configurações, defaulting to the primary rail; o cartão home-launchpad e a entrada command-palette seguem do registro associação. A ordem de registo, por si só, apenas rege os membros de primeira ordem, no entanto — orderZone anexou IDs nunca-arranjados, então qualquer um que já tinha tocado no seu navegador teria obtido HR * abaixo * Configurações. mergeCanonicalOrder agora insere tais IDs em a posição que o registro pede e usaHomeLayout usa a mesma regra, então o A colocação declarada é válida para os membros existentes e também para todas as opções futuras. Corpos de tabulação são placeholders: não há nenhum modelo de dados de RH em qualquer lugar na infraestrutura ainda (nenhum funcionário, frequência, folha de pagamento, formação ou entidade de conformidade em SecurityService, APIService ou a biblioteca compartilhada), então cada tabulação se nomeia e O que vai aguentar. Especificar em documentos/superpoderes/specs.

  27. · kamo-internal

    Completar a página Comunicações

    Cada sub-tab agora detém seus próprios dados, e Todos interleaves cada canal por data. Notas mantém MediaStream, porque as notas são de autoria aqui — mas readOnlyChrome tira os recursos sociais um registro de cliente não tem uso para: o PÚBLICA / Acessor PRIVADO no compositor e em cada post, o autor edite/delete menu, e o similar / comentário / compartilhar linha com o seu tópico comentário. O chat mantém o vivo Social ConversationView. Todos, Chamadas, Textos e E-mails renderizam o novo EmailEntry colapsa uma mensagem para uma linha — remetente, assunto, palavras de abertura — e se expande no lugar. A correspondência de um líder pode correr para centenas de mensagens e torná-los em altura total torna a aba inutilizável. O corpo não é obtido até que a linha seja aberta, porque cada leitura é uma rodada de provedor ao vivo trip; ele então renderiza através do mesmo SanitizedEmailRenderer / mensagens usa, então não há segundo caminho menos auditado para HTML não confiável. Corrigido ao longo do caminho: PostCard's Editar item de menu chamado handleMenuFechar, por isso tinha nunca abriu o editor; e MediaStream deixou cair PostCard's onPostDeleted / onPostAtualizado inteiramente, então um post excluído ou editado ficou na tela em seu antigo Formar até uma recarga completa. Hardcoded "Public"/"Private"/"Post" no compositor agora use as chaves do dicionário que já existiam.

  28. · SecurityService

    API de linha do tempo de comunicações unificadas

    - Está bem. retorna uma página ordenada por data notas, chamadas, mensagens de voz, textos, e-mails e bate-papo; ?canal= estreita. Três fontes são fundidas. Chamadas, mensagens de voz, textos e e-mails vêm do LEAD COMUNICAÇÕES associações; notas e bate-papo são lidos diretamente a partir do O fluxo de mídia e a sessão social do lead, porque ambos já estão com a chave do lead — espelhando-os teria adicionado um problema de consistência de dupla escrita e, sem back-fill, perdeu cada nota e mensagem de chat que já existe. Chamar é um conjunto de teclas, não uma compensação. Deslocamento entre fontes mescladas está errado na página anterior um: quantas linhas cada fonte contribui varia, então "skip 25" estritamente mais velho, então cada página custa o mesmo e nada é ignorado ou repetido mesmo quando vários itens compartilham um timestamp. A autorização espelha exactamente a porta do chumbo-detalhes e tem de — uma entrada é em grande parte o próprio valor de contato do lead mais o conteúdo trocado, então um sem VER LEAD CONTACT INFO OTHERS na liderança de outra pessoa não deve ser capaz de ler este endpoint que a vista de chumbo mascarada retém. As Negações são auditadas, Não apenas sucessos. O endpoint do corpo do e-mail resolve a caixa de correio da associação em vez de a partir do chamador: o correio de lead é org-wide, por isso a mensagem muitas vezes vive caixa de correio do colega, e UIDs são únicos apenas dentro de uma pasta — um navegador O get devolveria silenciosamente uma mensagem não relacionada da caixa de correio do espectador. MediaAssetUrls extrai os construtores de URL avatar/image que eram privados para MediaStreamController, então um autor de post renderiza de forma idêntica na aba Notas e A conta de Tudo.

  29. · DaemonService

    Conduza a varredura de associação de e-mail para líder

    Carrapato de cinco minutos contra o endpoint de varredura interna do EmailService, espelhando VoipGlobalSyncJob. O calendário vive aqui porque o EmailService executa vários pods e um feijão @Scheduled lá teria cada réplica varrendo cada caixa de correio imediatamente. @DisallowConcurrentExecution plus finita HTTP timeouts: a sweep over every caixa de correio pode exceder o tique, e sem a guarda Quartz iria empilhar Cada tópico de trabalhador sentou-se dentro do EmailService. Os intervalos de tempo importam para o mesmo razão — com a guarda de concorrência no lugar, uma chamada indefinidamente-hung Impedir que a varredura volte a correr até a cápsula reiniciar.

  30. · EmailService

    Associar correspondência de chumbo, e corrigir o índicer push morto

    Adiciona a metade de e- mail da guia de comunicações de chumbo, mais a ingestão necessária existir em tudo. A plataforma não tem e-mail de trabalho push: IMAP IDLE é codificado para Dovecot, lá não é nenhuma notificação de mudança de gráfico ou observação Gmail, e MessageIndexer descartado cada notificação que já recebeu porque o editor IDLE omitiu o UID seu uid<=0 guard rejeita — ele também resolveu o membro do remetente em vez do que o dono da caixa de correio. Ambos estão fixos aqui, mas um gancho nesse caminho sozinho seria ainda não fizeram nada para a maioria dos inquilinos, por isso a associação é impulsionada por uma varredura sobre cada caixa de correio através do MailReader, que é o provedor-agnóstico pela construção. As páginas de varredura numa hora, não num UID. Os UID são monotónicos apenas dentro de uma IMAP UIDVALIDITY epoch; um ratcheting marca de alta água riscos silenciando uma caixa de correio o re-exame é livre porque o link é idempotente. Empresa AddressResolver implementa a regra do proprietário: nunca associe uma mensagem onde o endereço do líder e cada outro participante são todos empresa — caso contrário, adicionar o endereço de trabalho de um colega a uma pista expor o correio interno deles. Falhas FECHADAS: um inventário que não pôde carregar respostas "desconhecido" e associação é ignorada, em vez de responder "externo" e silenciosamente desactivando o guarda. **************** buscar um corpo em nome da caixa de correio que Espera. O endpoint ordinário resolve o provedor para o chamador, e UIDs são únicos apenas dentro de uma pasta, por isso apontar para o UID de outro membro devolve uma mensagem não relacionada em vez de um erro. A autorização vive no Serviço de Segurança, que resolve a caixa de correio da associação e não do navegador. A ligação no momento do envio foi tentada e removida: o SMTP não devolve nenhum ID de Mensagem Nem uma UID Enviada, por isso todas as mensagens enviadas para uma pista desabou sobre uma associação sem localizador para expandir. A varredura é sua.

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