Mergi la conținut
KAMOUniverse

Jurnal de schimbări

Ce e nou.

Fiecare îmbunătățire a platformei, pe măsură ce se livrează.

  1. · kamo-internal

    Trasee proxy de execuție a membrilor și modelul pur vrăjitor

    Opt trasee 1:1: /api/docs/legale/membre/** prin forwardToApi (PATH DOAR forwardToApi deține șirul de interogare) și /api/esig/member/** direct la ESIG SERVICE URL with generaOTK, because APIservice forwards /api/docs/** and nimic înainte /api/esig /**. Un OTK, o cerere în amonte pe rută: OTKAuthFilter nu obține și Delete. Rutele PDF flux octeți și să păstreze starea în amonte, astfel încât o 409 ( conținut înghețat digera nu mai se potrivește octeți stocate) ajunge la vrăjitor ca un 409 mai degrabă decât ca un PDF corupt. Consimțământul este singura cale care nu trebuie să parse corpul său de succes: ESigService răspunde cu un gol 200. Fiecare regulă vrăjitor trăieşte într-un modul pur pentru că vitest aici colectează numai .test.ts în mediul nod. Un document signabil face din esign Traseu semnați; un document de confirmare-doar redă din versiunea DocsService Traseu. Axa pasului este ordineaIndex și etapa de atestare există chiar și pentru un pachet cu zero documente de semnat.

  2. · kamo-internal

    Port kamo-semnatorul semnează nucleul în kamo-internă

    Fiecare pachet @kamo/* este privat:adevărat cu exporturi:./src/index.ts" și nu construi pas, astfel încât nu există nici un artefact publicabil importuri relative. Comportamentul este neschimbat; doar importurile și mutarea i18n. pdfjs-dist 4.10.38 cu un lucrător auto-HOSTED copiat printr-un pas de preconstrucție. Nu. ********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* este un motor diferit și inacceptabil pentru o suprafață obligatorie din punct de vedere juridic, iar cele două GlobalWorkerOptions objects stay uncorupted only because the modul instances Nu ne întâlnim niciodată. Nu FieldElement.tsx fie: FieldControlul său redă pointerEvents:'none' previzuals with no value legation intrare. utilizareTraduceri vine din cele patru componente de semnare: ei numesc kamo-semnator propriile chei de mesaj, dicționar kamo-internal nu le au, și chei noi nu poate fi inventat. Corzile ajung ca recuzită. SEMNATURĂ FONTE este un recuzită prea mai degrabă mai mult de patru sarcini următoare/font/google pentru un mod; fontul tastat id încă merge Prin CapturatSignature.typedFont atât de aplatizat și certificatul nu sunt afectate. Două abateri marcate de la o copie verbatim, ambele în semnStore: - Necesităţi acum sări peste cititDomenii. kamo-semnatorul le-a numărat; ESigService's Completare câmp "în cazul în care (f = = nul Păstrarea Signor copiat mai strict decât serverul ar parca un membru pe un decalaj au nu control pentru a închide în timp ce serverul consideră plicul complet. - proiect de persistență paznici locale Storage în loc de fereastră. Fereastra e greşită. întrebare: Storage local poate fi absent (redă server) sau arunca pe acces (mod privat, stocare partiționată), și un proiect nu trebuie să ia niciodată vrăjitor Jos cu ea.

  3. · DocsService

    Montați suprafața membru la /api/docs/legale/membre/**

    Un controlor separat cu o pâlnie separată, pentru că aici e autorizaţia. identitate și nu un drept HR. Routing these through pazited() would means anybe blocare fiecare angajat din propria lor documente sau extinderea legalPachetAcces până când grila de șabloane și lista de avanpremiere a publicului sunt deschise întregului org; clasa nu deține o trimitere la Pachetul legalAccesul astfel scurtătură nu este disponibil. Nici o cartografiere ia un membru id sau un org id Serviciu RăspunsStatusExcepții păstrează statutul lor: 404 nu-al tău, 409 deja terminat, 422 nerecunoscute și 503 esign-indisponibile sunt patru instrucțiuni diferite, şi unul dintre ei înseamnă că membrul a reuşit deja. O excepție neașteptată este o șir fix 500: ecou e.getMesaj() este tolerabil pe suprafața HR, dar acest lucru Fiecare angajat poate ajunge. Extracția KToken mutat la securitate / SesiuneKToken astfel încât aceasta nu este a treia Am înţeles.

  4. · DocsService

    Atestare pachet pe finisaj, și EXECUTED / ASTEPTARE OTII împărțit

    Scrie WORM LegalPackageAttestation: certificateTextSha256 from the GHed versiune (proiectul de formulare a pachetului este mutabil și poate fi deja reformulat), manifestSha256 peste comanda [{documentUid, contentSha256, Description dreapta-la-stânga X-Forwarded-Pentru mers pe jos, dovadaBlob verbatim astfel digerat poate fi Redefinit mai târziu. Clientul nu este de încredere pentru finalizare. Înainte de orice este scris, fiecare plicul documentului semnabil este recitit de la ESigService; destinatarul meu trebuie să fie SEMNAT, și PARTIAL SEMNAT NU este prăbușit modul în care DEPARTAMENTEnvelopeSyncService Se prăbușește, astfel încât o contrasemnătură în curs de desfășurare produce ASTEPTARE Others mai degrabă decât un pachet care pretinde că va fi executat. O citire eșuată refuză finisajul Apelul temporizat nu este o dovadă că cineva a semnat. Un pachet cu documente cu zero semne creează nici un plic, apeluri ESigService nu Deloc, iar atestatul este singura sa dovadă de executare. Un al doilea finisaj returnează rândul existent: @PreUpdate aruncări ale entității prin proiectare și Indexul UNIQUE al migraţiei pe tema uid este adevăratul serial.

  5. · DocsService

    Identitate-membru autorizat de citire suprafață pentru misiuni

    LegalAsignmentOwnership este o gardă SEPARATE de la LegalPackageAccess pe scop: un membru care execută propriul acord nu deține niciun drept de HR și extinde ÎR citit setat pentru a admite le-ar înmâna fiecare membru grila șabloane și Public preview-ul e lista completă cu e-mailuri. Tot ceea ce nu este apelantului propria misiune răspunde la un über identic ar confirma că uid este real. detalii () face contabilitatea de prim-vizual pe rândul HR (primul ViewedAt; PENSII -> IN PROGRESS) mai degrabă decât în ESigService, astfel încât statul destinatar-status Aparatul e neatins şi insigna rămâne cinstită. Formularea atestatului vine din versiunea maxilarului, niciodată din schița mutabilă a pachetului. document Pdf servește documente ACKNOWLEDGE-ONLY și verifică ImgDat servit conţinut-adresă digeră împotriva conţinutului îngheţatSha256 înainte de a servi un octet; SalvațiImgContent repere img.setDat pe fiecare Docs salvați, deci derivă este viu. Documentele care pot fi semnate sunt refuzate cu un 409 care denumeşte traseul de esign. trebuie să vină de la serviciul care le aplatizează. Orgidul/membrul KToken este primitiv de mult timp, deci identitatea "== nulă" a planului Verificare este 0 în schimb; extractKToken lasă 0 în urmă pentru un câmp de sesiune absent.

  6. · DocsService

    Forma canonică manifest și un client IP rezistent la lingură

    manifestSha256 hashes the order [{documentUid, contentSha256, orderIndex}] membru a fost de fapt arătat, lungime prefix astfel încât un uid artizanal nu poate imita o limita de câmp și să facă două seturi diferite de documente hash același. Dovada Json este stocate verbatim și rotund-excursii înapoi la aceeași digera Nu-şi poate regenera propriul hash nu dovedeşte nimic. LegalClientIp merge pe X-Forwarded-Pentru dreapta-la-stânga și ia primul hop public. DocumentAccessAuditor citeste-l de la stanga la dreapta, care este controlat de client; ca defect pre-existent nu este fixat aici, dar nu trebuie să fie sursa unei sursă probatorieIp.

  7. · ESigService

    Personal autorizat să semneze suprafața la /api/esig/member/**

    OTKAuthFilter ocolește numai /acector, /api/esig/public și /api/esig/intern, Deci, acest prefix este în spatele personalului OTK auth cu orgId / membruId deja pe cerere. Destinatarul nu este niciodată o variabilă de cale: este rezolvată prin corelare EsignEnvelopeRecipient.memberId to the OTK member id, so there is no parametrul a membru se poate schimba pentru a ajunge la rândul unui coleg. Negăsit, nu al tău şi nu-pe-acest-invelope toate raspunde la un 404 identic. No /delegate fără aprobare și fără a dezactiva pavilionul; exclus prin omisiune, nu printr-un steag. Nu. /decodor și nu / pas în sus fie: receptor-scop decodor aparține gol HR calea, și pas-up este tastat pe o sesiune de signer Redis această suprafață nu are. SignoreIpAddress vine de la o dreapta-la-stanga X-Forwarded-Pentru mers pe jos. EsignPublicController.clientIp citește stânga la dreapta, care este controlat de client și, prin urmare, arogant, și că valoarea aterizează pe un câmp probatoriu.

  8. · kamo-internal

    Pachete alocate sub-tab și acțiuni de livrare/relivrare/nevoie

    AG Grid Community on a MUI-paginated ground Astfel încât paginile serverului și grila redă exact ceea ce a fost predat. Executat coloana este derivat server-side din același statut cipul redă, astfel încât cele două nu pot nu sunt de acord, și un document semnabil cu nici un plic ridică un avertisment mai degrabă decât ședinței ca "pending" pentru totdeauna. Coloana filtrului din dreapta este condusă de propriul termen plural-membru al echipei, de la date, cu un singur rând "Toate" "Sfârșit, pentru că singurul astfel de mesaj în dicționar are un rupt locul stabilit în 12 din 22 de localităţi şi chei noi nu pot fi inventate aici. Lista reutilizează criteriul de evaluare a publicului existent, în loc să scrie o A treisprezecea copie a membrilor-abonați + membrii de echipă-contractanți dual put, care returnează membrii PROSPECTI, CANDIDAŢI, ÎNCHEIAŢI ŞI TRIMISI. Paginatorul "1-25 / 100" este construit din date mai degrabă decât din comune.table.of, a căror Valoarea este un EMPTY STRING în pl.json Void folosește un cuvânt de probă VOID fix: anulează instrumentele juridice live org la nivel mondial.

  9. · kamo-internal

    Pachetul juridic livreaza/relivrează/vizita proxy-uri și client de atribuire

    Subțire 1:1 forwardToApi rute Obțineți AndDelete și o buclă pe membru într-o rută următoare ar avea nevoie de un OTK pentru fiecare membru. ă listarea trece doar un PATH; forwardToApi fuzionează șirul de întrebări al browser-ului în sine. Status-to-i18n cartografiere este garda reală, nu check-i18n-keys.mjs: că numai script dovedește că există o cheie în en, și mesaje / este gitignored, astfel încât un permis de cheie adăugat local şi apoi nu reuşeşte Docker construi. Fiecare cheie de aici a fost verificată în toate cele 22 de localităţi. prezenţa şi egalitatea de poziţionare şi un ac de încercare pe care niciunul dintre cei patru nu l-a cunoscut Cheile deteriorate sunt returnate vreodată. O selecție gol gol gol trimite nici o cheie echipaMemberIds la toate ramura la scară largă; o matrice goală nu ar anula nimic și nu ar raporta nimic. RedeliverResult NU extinde LivrareaResult: RedeliverResultDto has no versionNumber Field, doar ***************** Moștenirea ar declara o proprietatea backend-ul nu trimite niciodată, astfel încât livraSummaryParts citește noul număr de version pentru o relivrarea în loc de raportare v0.

  10. · DocsService

    Listarea pachetelor legale care pot fi filtrate, cu telescop, paginate

    Construit pe ENTityManager mai degrabă decât o metodă de stocare în comun: setul de filtre este dinamic și adăugarea la kamo-împărțit-library ar forța o reconstrucție artefact comun pe fiecare consumator pentru o cerere numai DocsService probleme. Organizatia prezice este neconditionata si in primul rand, si un test dovedeste ca supravietuieste fiecare combinație filtrant va lista sarcinile altui chiriaş. Paging poartă un uid tie-break pentru că un 200 de membri de livrare scriu livrate la o milisecundă. Numărul documentelor e doi. GROUP by interquestions, not 25 per-row lookups. Un statut necunoscut este un 400, niciodată un tăcut a ignorat filtrul pe o rețea de conformitate.

  11. · DocsService

    Atribuții de pachete legale Void, la nivel de org sau pentru membrii numiți

    Per-atribuire rezultate anularea unui pachet pentru șase persoane numite trebuie să știe care au fost deja executate (lor dovezi standuri) și care nu au fost niciodată atribuite (un cod de identitate vechi). Un singur 200 nu poate Spune asta. Tranzițiile de atribuire sunt sincrone: rândul de atribuire, nu statutul de e-semn, este ce poartă membrul şi conduce insigna. Învelișurile se deconectează și sunt prefiltrat pe SEMNAT/VOIDED, deoarece golEnvelope 409s un plic completat și un Doar documentul nu are plic. Un membru poate organiza mai multe rânduri după o relivrare, astfel încât fiecare rând devine propria decizie.

  12. · DocsService

    Redeliver un pachet schimbat, superseding misiuni deschise

    Refuzat cu excepţia cazului în care amprenta vie diferă de cea publicată. Binder.date actualizate este mort și Img nu are contor de revizuire, astfel încât amprenta este singurul semnal de schimbare Nu există nici o poartă, Redeliver este un buton care golește în tăcere tuturor in-progress de lucru și reemite un instrument identic. Editează pe calea de publicare existentă (un scriitor de rânduri de versiune), marchează fiecare misiune OPEN SUPERSEDED, cozile plicurile lor non-terminale pentru anularea, și reemiteri ale setului de membri înlocuiți plus oricine se potrivește nou Găsiţi audienţa astfel încât un membru terminat de la prima livrare nu primeşte nici un înlocuitor. Sarcinile executate sunt neatinse; ele sunt dovada.

  13. · DocsService

    Oferă un pachet legal publicului său, în afara firului de solicitare

    Plan pe fir cerere (două întrebări ieftine, astfel încât răspunsul este exact despre cine este inclus și care a fost sărit și de ce), scrie-l: 200 membri x 8 documente este 1.600 de rânduri plus câte apeluri ESigService, iar DocsService serveşte WOPI. Piscina NU este o fasole de executor de primăvară. AplicațieExecutor Task este *************** și DocsService deja are gol @Async on KSessionService and DocumentService -- publicarea unei boabe de executor ar muta tăcut Sesiunea WOPI atinge această mică piscină delimitată. Plicurile sunt create în afara oricărei tranzacții; o pauză de citire de 20 de ani în timp ce deține un Conexiunea Hikari este modul în care o piscină de zece foame. Un document semnabil al cărui plic Eșuat păstrează un plic uid nul, care este singurul semnal al rețelei. Mapările redeliver/evit/asignment-grid de teren aici, de asemenea, astfel încât controlorul are o pâlnie de autorizare scrisă și dovedită o dată mai degrabă decât un al doilea bolț pe mai târziu; serviciile lor răspund la 501 până când sarcinile 4-6 umplu corpurile.

  14. · DocsService

    Planificator de livrare

    Livrarea este noua cale de angajare și este menit să fie re-run, astfel încât membrii care dețin deja o Datoria se scade mai degrabă decât se acordă o a doua copie a aceluiași instrument. Membrii fără e-mail sunt numărați și sărit în față, deoarece EsignEnvelopeService 400s un signer fără unul din interiorul buclei, după ce membrii anteriori au deja plicuri vii. Audienţa interoghează RUP-urile trei predicate, deci duplicatele sunt prăbuşite. Un document de recunoaştere nu primeşte niciun plic.

  15. · DocsService

    ESigService client intern pentru livrarea pachetului legal

    Primul client de serviciu extern al doctorilor. Posturi către - Nu. (MANUAL de origine, necontorizat) cu suprimăInvite=true Timeouts sunt explicite: EsignEmailClient construiește un RestTemplate gol cu nici unul, și un fără cronometru citit pe un pini pod un fir de lucru până la repornire. Nimic nu aruncă pe un eroare în amonte, deoarece fan-out emite un apel pe document signable per membru și nu trebuie să anuleze lotul pe un șablon rău. Hărți Void 409 la un raportabil Nu e o greşeală. Înregistrările de răspuns ignoră câmpurile necunoscute Context ObjectMapper are încă FAIL ON UNKNOWN PROPERTIES on.

  16. · kamo-internal

    Modele de pachet sub-tab pentru conformitate juridică și juridică

    Înlocuiește corpul HrTabPlaceholder numai Există deja în hrTabs.ts. AG Grid Community list plus un dialog de creare/edit cu o c. și Department/Job Type multi-selectează că toate-Team-Membru pentru a comuta dezactivările. ă eticheta lui Toggle este propriul termen plural de membru al echipei, niciodată un șir de caractere hardcoded. Nici o cheie i18n nou: fiecare etichetă reutilizează o cheie dicționarul deja definește, și contează Din date.

  17. · kamo-internal

    Trasee proxy pachet juridic, client api și ajutoare pure

    Subțire 1:1 forwardToApi rute la /api/docs/juridic Pentru că OTKAuthFilter nu obține Și Delete și o buclă ventilator-out într-o rută următoare ar Am nevoie de un OTK pentru fiecare membru. Ids stay strings end to end (unique rowid). Reordonarea este Prinse mai degrabă decât ambalaj, și listele de audiență sunt trimise goale atunci când toate echipa Membrii sunt atât de îngusti încât publicul nu poate reveni.

  18. · DocsService

    Previzualizarea rezoluției publicului

    Rezolvă o audiență salvată sau proiectată prin intermediul TeamMemberRepo.findAudience, care este numai cititor care are în vedere eligibilitatea obligatorie a SUBSTANŢEI + a statului de înregistrare Obiectivul final al echipei-membri-contractanti returneaza PROSPECT, CANDIDAT, TERMINAT si RESIGNAT. Membri de pavilion fără e-mail (EsignEnvelopeService hard-400s without one) și membri sub EAM MINTE de securitate (ImagingController sare în tăcere peste copia depusă). An Publicul care vizează nimic nu rezolvă nimic pentru nimeni, iar listele goale devin santinele. OR'd IN Clauzele rămân valabile SQL.

  19. · DocsService

    Publish îngheaţă o versiune cu documente octet-pinned

    Pins img dat id plus un conţinut hash, nu img id: salveazăImgContent repunctează acelaşi Img la noi octeți pe fiecare Docs salva, și rezolvaSource merge la dat live la construirea și aplatizarea sesiunii. Snapshots design înghețat în loc de a lăsa rezolvaDesignJson se retrag la cel mai nou, refuza un document fara convertire PDF şi refuză o publicaţie a cărei amprentă nu s-a mişcat.

  20. · DocsService

    Pachetul juridic CRUD la /api/docs/legale/pachete

    Listă, creați, obțineți, actualizați și ștergeți, cu ref liant comandat și rânduri de audiență înlocuit ca set. Org vine de la sesiunea de pe fiecare cale permisAll și OTKPreAuthFilter continuă lanțul fără un semn, astfel încât Extractul de controlerKToken ESTE autentificarea. Departamentul Cross-org, titlul postului, membru și liant ID-uri 400 în mod explicit, mai degrabă decât scrie în tăcere nimic.

  21. · DocsService

    Contractul legal cu fir și normalizarea cererii

    Ids cruce ca siruri de caractere (unique rowid depășește MAX SAFE INTEGER). Ordinea Binder este listă de ordine, de-duplicate, și o intrare non-numeric 400s mai degrabă decât să fie omise Saritura silentioasa este modul in care o reordonare pierde un liant. Liste de audiență goale se prăbușește la o Sentinel astfel încât clauzele OR'd IN în găsiAudiența rămâne valid SQL.

  22. · DocsService

    Amprenta conținutului pentru pachetele legale

    Binder.date Actualizate nu se mișcă niciodată după INSERT, astfel încât conținutul unui pachet nu are nici o schimbare semnal de comparat. Adăugați un SHA-256 peste liant comandat canonic / element tuple inclusiv imgDatId, deoarece SalvareImgContent reperează același Img la noi octeți pe fiecare Docs salva Codificarea este fixată pe lungime Astfel încât un config Json artizanal nu poate falsifica un aspect diferit. De asemenea, adaugă com.kamo.z.shared.hr.legale la scanarea depozitului.

  23. · SecurityService

    Push platform-admin state changes instead of being polled for them

    Every platform screen backed by this service refreshed on a timer, because this service has no WebSocket and therefore no way to tell anyone anything: the closed-loan trainer tab re-read every 4 seconds while a run was live, DNS provisioning every 15, commerce sync logs and VOIP recording stats every 30, and the domain setup page asked verify-dns once a minute per open tab. PlatformEventPublisher sends these to core NATS and MediaService's new PlatformStompRelayController puts them on STOMP. Core NATS rather than JetStream, matching ThemeProvisionPublisher: this service's stream is CHAT_MESSAGES/chat.>, so a JetStream publish to security.* would fail expected-stream validation and be dropped. At-most-once is the right trade — every consumer also loads over REST when it mounts, so a lost event costs a refresh, never correctness. Wired at the points where the state actually moves: - ClosedLoanTrainerService on each progress write, on claim, and on every terminal state, so the monitor advances exactly when the walk does. - DnsProvisioningService as each record settles, rather than the panel re-reading the whole log hoping something landed. - RetailSyncLogBroadcaster on each sync-log row, via the new shared-lib listener seam, keyed by provider config so an org syncing several providers does not redraw all of them because one moved. Two counters have no such moment, and are handled honestly rather than pretended into events: - The VOIP recording backlog is written by another service entirely, so PlatformStatsWatcher samples it — but on the server, once, and it publishes only when the numbers actually change, so a quiet backlog produces no traffic where the old arrangement re-sent an identical payload to every viewer twice a minute forever. trigger-sync publishes immediately, since it knows the backlog is about to move. - Diagnostics is live JVM/host/database readings where essentially every field differs second to second, so there is nothing discrete to push. It gets a bare tick: one server timer deciding when "now" is worth re-reading, instead of one per open tab each pulling the full snapshot. DomainVerificationWatcher replaces the setup page's polling. DNS propagation and certificate issuance are genuinely external state with no event to subscribe to, so the checking has to happen somewhere — but not in every browser. One sweep covers every waiting domain, takes the 25 least-recently-checked so a backlog of misconfigured domains rotates instead of being re-queried in full, only probes HTTPS once DNS resolves, and publishes only when a domain actually advances. Two existing tests construct these classes directly and were updated for the new constructor parameters. Note: **************** fails on main already (unset EntityManager in the test's hand-built service) and is untouched by this change — verified against a clean HEAD worktree.

  24. · EmailService

    Editura mailbox-schimbare evenimente astfel încât vederile de mail opri sondaje

    Dosarul, lista de conversații și lista de mesaje fiecare a fugit propriile 30 de secunde Timer, reîncarcă şansa ca ceva să se mişte. WebSocket deja Le-am spus când a sosit poşta, dar asta e doar una din modurile în care se schimbă cutia poştală. Expulzarea totul a plecat greșit UI până la următoarea căpușă. MailboxChanged spune un dosar nu mai este ceea ce sunt afișate, și transportă motivul pentru care un consumator poate ignora tipurile de care nu îi pasă. Publicat pe E-mail.changed.<addr> and releed to ******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** ascultătorii IDLE (sosire, expunge, schimbarea steagului) și de la reper, steaguri; mutați, ștergeți, spam, trimiteți și proiectați obiective. Deliberat nu pliat în EmailUnreadPublisher: că unul deține un conte, așa că trebuie să ajungă la furnizor și explozii de cărbune pentru a rămâne la prețuri accesibile. Acest lucru transporta nu contează și citește nimic, așa că este suficient de ieftin pentru a trimite pe fiecare schimbare și nu trebuie să aşteptaţi în spatele ferestrei de care are nevoie un conte. O mișcare raportează nici un dosar pentru că atinge două și sursa nu este întotdeauna cunoscut de către apelant .

  25. · MediaService

    Relay SecuritySecurityService plain events on STOMP

    SecurityService deţine platforma-admin suprafaţă furnizarea, comert sincronizare susţinut de ea nu a avut nici o modalitate de a fi spus nimic şi reîmprospătat pe un cronometru în schimb: Fila de trainer cu împrumut închis la fiecare 4 secunde, DNS furnizarea la fiecare 15, comerț Sincronizarea jurnalelor şi a datelor video la fiecare 30. Acesta publică la miezul NATS; acest lucru pune acele mesaje pe STOMP, la fel SuportStompRelayController și *************** deja folosit. Sub rezerva destinaţiei este mecanic puncte pentru slash-uri, astfel încât de securitate.dns.log.42 ajunge pe /topic/dns/log/42 care inseamna ca un nou tip de eveniment are nevoie de un editor si un abonat si nimic aici. Prefixele sunt legate în mod explicit mai degrabă decât ca securitate.>: o captură toate ar Duble-livra securitate.teme.provision.*, which ThemeProvisionStompRelay Deja transmite la aceeași formă subiect.

  26. · kamo-shared-library

    Să sincronizăm progresul și statul domeniu să fie anunțate în loc de sondaje

    Două cârlige pentru conversia prin împingere în SecurityService, unde mai multe platforme ecrane reîmprospătat pe cronometre pentru că nu a existat nici o modalitate de a le spune nimic. RetailSyncLogAscultor este o notificare opțională cusătură pe RetailSyncOrchestrator, numit atunci când o cursă de sincronizare scrie rândul său IN PROGRESS și din nou atunci când scrie terminalul unu. Orchestra nu stie cum calatoreste notificarea, si fără nicio punere în aplicare înregistrată, se comportă exact ca înainte. Sincronizarea furnizorului bord reîncărcat întreaga listă de jurnal la fiecare 30 de secunde pentru a viziona o alergare a avut doar a început de la sine. - Nu. listează domenii de nivel superior care nu au finisate venirea Există pentru un monitor de verificare pe server: pagina de configurare domeniu a fost interogat verifică-dns o dată pe minut pe filă deschisă în timp ce așteaptă propagarea DNS publice și Emisiune de certificat. Comandat cel mai puțin recent verificate în primul rând și luate cu un pageable limita astfel încât o matura nu poate crește cu numărul de domenii permanent neverificate.

  27. · ESigService

    Permite unui expeditor să suprime e-mail-ul de invitație pe plic

    Crearea unui plic necondiţionat e-mail o invitaţie, astfel încât un apelant storge multe Plicurile din spatele unei notificări nu aveau cum să tacă. Null păstrează comportamentul existent; jetonul de acces este încă emis în orice mod.

  28. · EmailService

    Împingeți INBOX numărătoare necitite peste NATS/WebSocket în loc de votare

    The nav-top mail badge in kamo-internal refreshed itself by calling /api/email/folders every 30 seconds, per browser tab. That endpoint walks the entire folder tree and opens every folder read-only to answer, so the cost of one integer was a full mailbox summary, repeated indefinitely. The WebSocket that already existed only announced that mail had arrived and carried no count, so its one job was to trigger another poll. Publish the count itself: - EmailUnreadSnapshot on NATS email.unread.<addr>, relayed to STOMP /topic/email/unread/<memberId>. NATS is in the path because the pod that observes a change is routinely not the pod holding the member's WebSocket. - EmailUnreadPublisher coalesces per mailbox, so a ten-message IDLE delivery or a page of mail marked read is one IMAP round trip and one publish, off the caller's thread. - MailReader.getUnreadCount reads one folder. Graph answers it from the folder list it already returns; IMAP-backed providers override it with a single STATUS (UNSEEN). - A snapshot is published on subscribe, on IDLE messagesAdded/messagesRemoved, on IMAP flag changes, and from the mark-read / flags / move / delete / spam endpoints. Three gaps this also closes: - Flag changes were invisible. Reading mail in Roundcube or on a phone sets \Seen without adding or removing a message, so the badge only ever fell when the browser next polled. IDLE now carries a MessageChangedListener. - Cloud mailboxes got no push at all. EmailWebSocketController resolved credentials through the KamoMail virtual_users table, which has no row for a member on Microsoft 365 or Google Workspace, so subscribe() logged a warning and returned. It now resolves through MailProviderResolver, and IDLE connects with the credential spec (host/port/TLS/XOAUTH2) via a shared ImapStoreFactory.connect rather than assuming the KamoMail host and a password. - Sessions leaked. A closed tab never sends /email/unsubscribe, so mailboxes are now reference counted per STOMP session and released on SessionDisconnectEvent. Mailboxes with no live IDLE listener — Graph, past the 50-connection cap, or a dead IDLE thread — are swept server-side every 60s and published to the same topic. That replaces per-tab polling rather than push: one sweep serves every tab a member has open, membership is re-tested each pass so a dead listener is picked up, and the browser still receives the count over the WebSocket. MessageIndexer binds email.> and deserialized everything on it as a message, so it now skips subjects outside email.inbox. — filtered in the handler rather than by narrowing the subscription, because email-metadata-indexer is a durable consumer and changing its filter subject would reject the subscribe on every pod until the durable was deleted by hand.

  29. · InitializerService

    Aterizează schema pachetului legal

    Adaugă com.kamo.z.shared.hr.legale la lista de scanare a depozitului și asigură Unicitatea și indexurile de căutare ale entității nu se pot exprima în siguranță.

  30. · kamo-shared-library

    Atestare de pachet de înregistrare ca dovadă numai pentru apendice

    Nivelul pachetului "Am citit și sunt de acord" este un instrument juridic diferit de Consimțământul E-signării de a tranzacționa și de la orice semnătură pe document și este DOAR dovezile pentru un pachet care nu poate fi semnat. Gărzile refuză actualizarea și șterge modul în care PhiAccessLog nu.

Universul tău te așteaptă.

Începeți gratuit în câteva minute.Adăugați produse oricând sunteți pregătit — fără migrare, fără autentificări noi.

Gratuit pentru totdeauna — nu este necesar un card de credit