Changelog
Was ist neu?
Jede Verbesserung an der Plattform, wie sie geliefert wird.
· kamo-internal
Mitglied Ausführung Proxy-Routen und das reine Assistent Modell
Acht 1:1 Routen: /api/docs/legal/member/** durch forwardToApi (PATH ONLY ForwardToApi besitzt den Abfragestring) und /api/esig/member/** direkt an ESIG_SERVICE_URL mit generateOTK, weil APIService vorankommt /api/docs/** und nichts vorwärts /api/esig/**. Ein OTK, eine vorgelagerte Anfrage pro Route: OTKAuthFilter hatAndDelete. Die PDF-Routen streamen Bytes und bewahren den vorgelagerten Status, also ein 409 (die gefrorene Inhalt Digest nicht mehr mit den gespeicherten Bytes) erreicht den Assistenten als 409 statt als korruptes PDF. Zustimmung ist die einzige Route, die nicht parsen darf seine Erfolgsorganisation: ESigService beantwortet es mit leeren 200. Jede Zauberer-Regel lebt in einem reinen Modul, weil vitest hier nur sammelt .test.ts in der Node-Umgebung. Ein beschreibbares Dokument vom esign route - das sind die Bytes ESigService Flattens, und was Sie sehen, muss sein, was Sie unterschreiben; ein reiner Bestätigungsdokument von DocsServices Version-gepinnt Route. Die Schrittachse ist Auftragsindex-Auftrag und der Schritt der Bescheinigung besteht sogar für ein Paket mit null Dokumenten zum Signieren.
· kamo-internal
Portieren Sie den Kamo-Unterzeichner Unterzeichnung Kern in kamo-intern
Jedes @kamo/*-Paket ist privat:true mit Exporten:"./src/index.ts" und kein Build Schritt, so gibt es kein veröffentlichbares Artefakt - die Dateien werden kopiert und neu verdrahtet relative Importe. Das Verhalten ist unverändert; nur Importe und i18n bewegen sich. pdfjs-dist 4.10.38 mit einem SELF-HOSTED-Arbeiter, der von einem Prebuild-Schritt kopiert wurde. Nicht ****************, das pdf.js 4.4.168 von cdnjs lädt, das ist ein anderer Motor und inakzeptabel für eine rechtsverbindliche Oberfläche, und die beiden GlobalWorkerOptions Objekte bleiben nur deshalb unbestechlich, weil das Modul instanzt nie treffen. Auch nicht FieldElement.tsx: seine FieldControl-Renderungen pointerEvents: 'None'-Vorschauen ohne Wertbindung - eine Designer-Vorschau, nicht an Eingabe. useTranslations kommt aus den vier Signierkomponenten: Sie nennen kamo-signer's eigene Nachrichtenschlüssel, das Wörterbuch von kamo-internal hat sie nicht und neue Schlüssel kann nicht erfunden werden. Strings kommen als Requisiten an. SIGNATURE_FONTS ist eine Requisite zu als vier nächste/font/google Lasten für ein Modal; die getippte Schrift-ID fährt noch durch CapturedSignature.typedFont so flachen und das Zertifikat sind nicht betroffen. Zwei markierte Abweichungen von einer wörtlichen Kopie, beide in signStore: - erforderlicheness überspringt jetzt readOnly Felder. kamo-signer hat sie gezählt; ESigService's FieldCompletion - die ausgelieferte serverseitige Durchsetzung nicht ("if (f == null || f.readOnly() || !f.required()) weiter;"). Halten Signer Kopie strenger als der Server würde ein Mitglied auf einer Lücke parken sie keine die Kontrolle zu schließen, während der Server den Umschlag vollständig betrachtet. - Entwurf Persistenz Wachen localStorage statt Fenster. Fenster ist das falsche Frage: localStorage kann abwesend sein (Server-Rendering) oder auf den Zugriff werfen (Privat-Modus, Partitionierung Speicher), und ein Entwurf darf nie den Assistenten Mit nach unten mit ihm.
· DocsService
Mounten Sie die Mitgliederoberfläche bei /api/docs/legal/member/**
Ein separater Controller mit separatem Trichter, denn die Genehmigung ist hier Identität und kein HR-Recht. Diese durch bewacht() zu Routing würde entweder bedeuten jeden Mitarbeiter von seinem eigenen Papierkram aussperren oder LegalPackageAccess erweitern bis das Vorlagen-Raster und die Zuschauer-Vorschau-Aufgebot für das Ganze offen sind org; die Klasse hat keinen Verweis auf LegalPackageAccess, so dass die Verknüpfung ist nicht verfügbar. Kein Mapping nimmt eine Mitglieder-ID oder eine org-ID - beide kommen aus der Sitzung. Service ResponseStatusExceptions behalten ihren Status: 404 not-yours, 409 bereits abgeschlossen, 422 nicht anerkannte und 503 esign-unverfügbar sind vier verschiedene Anweisungen, und einer von ihnen bedeutet, dass das Mitglied bereits erfolgreich war. Eine unerwartete Ausnahme ist ein Fest-String 500: Echoing e.getMessage() ist auf der HR-Oberfläche erträglich, aber dies eine, die jeder Mitarbeiter erreichen kann. KToken-Extraktion in Sicherheit/SessionKToken verschoben, so dass dies nicht seine dritte wörtlich kopieren.
· DocsService
Paket-Bescheinigung auf Finish, und die EXECUTED/AWAITING_OTHERS-Split
Schreibt die WORM LegalPackageEinstieg: attestationTextSha256 von der FROZEN Version (der Entwurf des Pakets ist verständlich und kann bereits gewesen sein umgeformt), manifestSha256 über die bestellte [{documentUid, contentSha256, orderIndex] tatsächlich vorgestellt, attestedBei Application-Set, sourceIp von einem rechts-nach links X-Forwarded-For walk, proofBlob wörtlich, so dass die Verdauung sein kann Später wiedergegeben. Dem Kunden wird nicht die Vervollständigung getraut. Bevor etwas geschrieben wird, jeder Der Briefumschlag des beschriftbaren Dokuments wird von ESigService erneut gelesen; mein Empfänger muss SIGNED, und PARTIALLY_SIGNED ist NICHT zusammengebrochen, wie DisclosureEnvelopeSyncService bricht es, so dass eine anstehende Gegen-Signatur ergibt AWAITING_OTHERS eher als ein Paket, das behauptet, ausgeführt zu werden. Eine misslungene Lektüre verweigert das Ziel Auszeitiger Anruf ist kein Beweis dafür, dass jemand unterschrieben hat. Ein Paket mit null beschreibbaren Dokumenten erstellt keinen Umschlag, ruft ESigService nicht überhaupt, und die Bescheinigung ist seine einzige Hinrichtung Beweis. Ein zweiter Ziel gibt die vorhandene Zeile zurück: die @PreUpdate-Werft des Entity-Designs und Der UNIQUE-Index von migration auf assignment_uid ist der eigentliche Serializer.
· DocsService
Identitätsautorisiertes Mitglied lies Oberfläche für Zuordnungen
LegalAssignmentOwnership ist ein SEPARATE-Wächter von LegalPackageAccess absichtlich: ein Mitglied, das seine eigene Vereinbarung ausführt, hat kein HR-Recht und erweitert die HR Lesen Sie Set, um sie zuzulassen würde jedem Mitglied die Vorlagen Raster und die Publikum Vorschau mit E-Mails. Alles, was nicht der Anrufer ist eigene Zuordnung beantwortet eine identische 404 - ein 403 würde bestätigen, dass die uid real ist. detail() führt die Buchführung in der HR-Reihe durch (firstViewedAt, PENDING -- IN_PROGRESS) statt in ESigService, also der Empfänger-Status Maschine ist unberührt und die Plakette bleibt ehrlich. Die Bescheinigungsformulierung kommt von der FROZEN-Version, nie aus dem veränderlichen Entwurf des Pakets. documentPdf serviert ACKNOWLEDGE-ONLY-Dokumente und überprüft die servierten ImgDats Inhalts-Adress-Verdauung gegen den gefrorenen InhaltSha256, bevor es ein byte serviert; saveImgContent repointss img.setDat auf jedem Docs speichern, so drift ist live. Signierbare Dokumente werden mit einem 409 Benennung der esign Route verweigert. muss von dem Dienst kommen, der sie abflacht. KTokens orgID/memberID sind primitiv lang, also die "== null"-Identität des Plans überprüfen Sie stattdessen 0; extraheißen SieKToken hinterlässt 0 für ein abwesendes Session-Feld.
· DocsService
Manifest kanonische Form und eine gefälscht-resistente Client IP
manifestSha256 hat die bestellte [{documentUid, contentSha256, orderIndex] die Mitglied wurde tatsächlich gezeigt, Länge-prefixed, so dass ein handwerklich uid nicht imitieren kann Feld Grenze und machen zwei verschiedene Dokument-Sets hash die gleiche. BeweisJson ist gespeichert wörtlich und Rundreisen zurück zum gleichen Digest - ein Beweis Blob, dass kann nicht regenerieren ihre eigenen has beweist nichts beweist nichts. LegalClientIp geht X-Forwarded-For RIGHT-to-LEFT und nimmt den ersten öffentlichen Hop. DocumentAccessAuditor liest es von links nach rechts, was Client-kontrolliert ist; dass Vorbestehender Defekt ist hier nicht behoben, aber er darf nicht die Quelle eines Beweisquelle Ip.
· ESigService
Mitarbeiter-authenticated Mitglied Unterzeichnung Oberfläche bei /api/esig/member/**
OTKAuthFilter umgeht nur /actuator, /api/esig/public und /api/esig/intern, so ist dieses Präfix hinter staff OTK auth mit orgId bereits auf der Anfrage. Der Empfänger ist nie eine Pfadvariable: Sie wird durch Matching aufgelöst EsignEnvelopeRecipient.memberId zur OTK-Mitglieds-ID, so gibt es keinen Parameter a Mitglied kann wechseln, um die Reihe eines Kollegen zu erreichen. Nicht-gefunden, nicht-dein-Org und not-on-this-enumspannen alle antworten auf eine identische 404. Nein /Delegate - es übergibt ein Compliance-Dokument an eine beliebige externe E-Mail ohne Genehmigung und ohne Flagge zu deaktivieren; ausgeschlossen durch Unterlassung, nicht durch eine Flagge. Nein /decoder und auch kein /stepup: Empfänger-kopierter Decoder gehört zur HR-Leere Pfad, und Step-up ist auf einer Redis Signer-Sitzung, die diese Oberfläche nicht hat. signerIpAddress kommt von einem RECHTS-zu-LEFT X-Forwarded-For walk. EsignPublicController.clientIp liest von links nach rechts, was kundengesteuert ist und damit spoofable, und dieser Wert landet auf einem Beweisfeld.
· kamo-internal
Zugeordnete Pakete sub-tab und liefern/reliefern/void Maßnahmen
AG Grid Community über eine MUI-paginated fetch - Community hat kein serverseitiges Reihenmodell, so die Server-Seiten und das Grid macht genau das, was es übergeben wurde. Die Hingerichteten Spalte wird Server-Seite aus dem gleichen Status abgeleitet, den der Chip darstellt, so dass die beiden nicht widersprechen, und ein absehbares Dokument ohne Umschlag wirft eine Warnung, anstatt sitzen als "anhängig" für immer. Die rechte Filtersäule wird vom eigenen Plural-Teammitglied-Begriff der org geleitet, von Daten, mit einer eigenständigen "Alle"-Reihe - absichtlich nicht eine interpoliert "Alle {Team Mitglieder" String, denn die einzige solche Nachricht im Wörterbuch hat eine gebrochene Platzhalter in 12 von 22 Orten und neue Schlüssel können hier nicht erfunden werden. Der Dienstplan nutzt die bestehende Publikum-Vorschau-Endpunkt, anstatt eine dreizehnte Kopie der Mitglieder-Abonnenten + Team-Mitglieder-Vertragspartner Dual fetch, die kehrt PROSPECT, CANDIDATE, TERMINATED und RESIGNED Mitglieder zurück. Der "1-25 / 100" des Painators ist aus Daten und nicht aus common.table.of, dessen gebaut wird. value ist ein EMPTY STRING in pl.json - der Schlüsselwächter beweist nur, dass ein Schlüssel in en existiert. Void verwendet ein fixes VOID-Anfechtungswort: Es löscht legale Live-Instrumente org-weit.
· kamo-internal
Rechtliches Paket liefern/reliefern/löschen Proxies und Zuweisung Client
Thin 1:1 vorwärtsToApi Routen - je eine vorgelagerte Anfrage, denn OTKAuthFilter tut getAndDelete und eine pro-member Schleife in einer Next Route würden ein OTK pro Mitglied benötigen. Die Die Auflistung passiert einen PATH NUR; forwardToApi führt den Abfragestring des Browsers selbst zusammen. Das Status-zu-i18n-Mapping ist der eigentliche Wächter, nicht check-i18n-keys.mjs: nur das Skript beweist, dass ein Schlüssel in en existiert, und Nachrichten/ ist gitignored, so dass ein lokal hinzugefügter Schlüssel geht und dann scheitert der Docker bauen. Jeder Schlüssel hier wurde an allen 22 Orten für Präsenz und Platzhalter-Set-Gleichheit, und ein Test Pins, dass keiner der vier bekannten beschädigte Schlüssel werden jemals zurückgegeben. Eine leere Leervosenauswahl sendet überhaupt keinen teamMemberIds-Schlüssel - das ist es, was auswählt die org-breite Zweige; ein leeres Array würde nichts löschen und nichts melden. RedeliverResult erweitert DeliverResult NICHT: RedeliverResultDto hat keine Versions-Nummer Feld, nur ************ Inheriting es würde erklären, ein Eigenschaft, das Backend nie sendet, so liefernSummaryParts liest neue VersionNumber für eine redelivery statt v0 zu melden.
· DocsService
Org-scoped, paged, filterbar legale Paketzuweisungsliste
Auf dem EntityManager und nicht auf einer Shared-lib-Repository-Methode aufgebaut: der Filtersatz ist dynamisch und es zu Kamo-Shared-Bibliothek hinzufügen würde einen Shared-Artifact-Umbau erzwingen auf jedem Verbraucher für eine Abfrage nur DocsService Probleme. Das Organisationsvordikat ist bedingungslos und zuerst, und ein Test beweist, dass es überlebt jede Filterkombination - der Endpunkt braucht keinen Org-Parameter, also eine gestrichene Klausel würde die Zuweisungen eines anderen Mieters auflisten. Paging trägt einen uid Tie-Break, weil ein 200-Mitglieder-Lieferung liefertIn einer Millisekunde. Dokumentenzählungen sind zwei GRUPPE BY Abfragen, nicht 25 pro-Ruf-Lookups. Ein unbekannter Status ist ein 400, nie ein still ignorierte Filter auf einem Konformitätsraster.
· DocsService
Void legale Paketzuweisungen, org-weit oder für benannte Mitglieder
Pro-Zuweisung Ergebnisse - aufgegeben, übersprungen-ausgeführt, nicht gefunden, weil ein Admin Die Streichung eines Pakets für sechs namentlich genannte Personen muss wissen, welche bereits ausgeführt hatte (ihre Beweise steht) und die nie zugewiesen wurden (eine abgestandene Dienstplan-ID). Ein nackter 200 kann nicht Sagen Sie das. Zuordnungsübergänge sind synchron: die Zuweisungszeile, nicht der E-Zeichen-Status, ist was das Mitglied umstößt und die Plakette fährt. Umschlagsleeren gehen ab-thread und sind Vorgefiltert auf SIGNED/VOIDED, weil voidEnvelope 409s einen fertigen Umschlag und ein Nur ein Dokument, das nur ist, hat überhaupt keinen Umschlag. Ein Mitglied kann mehrere Reihen halten nach einer redelivery, so dass jede Reihe ihre eigene Entscheidung bekommt.
· DocsService
Ein geändertes Paket auflösen und die offenen Zuweisungen ersetzen
Verweigert, es sei denn, der lebende Fingerabdruck unterscheidet sich von der veröffentlichten. Binder.dateAktualisiert ist tot und Img hat keinen Revisionszähler, so dass der Fingerabdruck das einzige Änderungssignal ist gibt es ohne Tor, Redeliver ist ein Knopf, der still alle entbligt In-Progress-Arbeit und Neuauflage ein identisches Instrument. Publiert durch die bestehende veröffentlichen Pfad (die eine Autor von Versionszeilen), Marken jede OPEN Zuordnung SUPERSEDED, stellt ihre nicht-terminalen Umschläge für die Enthüllung in die Warteschlange und Neuauflage an das versteigerte Mitgliedssatz plus alle neu passenden - re-resolviert durch finden Publikum so ein Mitglied beendet, da die erste Lieferung keinen Ersatz bekommt. Ausgesetzte Aufträge sind unberührt; sie sind der Beweis.
· DocsService
Liefern Sie ein legales Paket an sein Publikum, off the Anfrage Thread
Planen Sie auf dem Anfrage-Thread (zwei billige Fragen, so ist die Antwort genau darüber, wer ist eingeschlossen und wer übersprungen wurde und warum), abschreiben: 200 Mitglieder x 8 Dokumente ist 1.600 Zeilen plus ebenso viele ESigService-Anrufe, und DocsService bedient WOPI. Der Pool ist KEIN Frühlings-Henker Beine. AnwendungTaskExecutor ist ************ und DocsService hat bereits nackt @Async KSessionService und DocumentService -- die Veröffentlichung einer Executor-Beine würde sich lautlos bewegen die WOPI-Sitzung berühren Sie diesen kleinen begrenzten Pool. Vorgeschlagen werden außerhalb jeder Transaktion erstellt; eine 20er-Sehnen-Auszeit, während Sie eine Hikari Verbindung ist, wie ein Pool von zehn hungert. Ein beschildertes Dokument, dessen Umschlag failed behält ein null envelope_uid, das ist das einzige Signal, das Grid hat. Die Redeiver/Leer/Signive-Grind-Mappings landen auch hier, so dass der Controller ONE hat Autorisierung Trichter geschrieben und bewiesen einmal statt einer zweiten ein geschraubt auf später; ihre Dienste antworten 501, bis Tasks 4-6 die Gremien füllen.
· DocsService
Lieferplaner - inkrementelles Targeting, E-Mail-Vorfilter, Fälligkeitsdaten
Deliver ist der neue Einstellungspfad und soll neu laufen, so dass Mitglieder, die bereits eine Zuweisung wird abgezogen und nicht eine zweite Kopie desselben Instruments erhalten. Mitglieder ohne E-Mail werden gezählt und vorne übersprungen, weil EsignEnvelopeService 400s ein Unterzeichner ohne einen aus der Schleife, nachdem frühere Mitglieder bereits lebende Umschläge. Das Publikum befragt ORs drei Prädikate, so Duplikate zusammengebrochen werden. Ein Quittung-Dokument bekommt absichtlich überhaupt keinen Umschlag.
· DocsService
ESigService interner Kunde für legale Paketzustellung
DocsServices erster Outbound-Service-to-Service-Client. Beiträge zu ************ (Ursprung MANUAL, nie dosiert) mit suppressEinladen=true - HR sendet eine Benachrichtigung, nicht eine pro Dokument pro Mitglied. Timeouts sind explizit: EsignEmailClient baut eine nackte Restvorlage mit keiner, und eine Unzeitiges Lesen auf einer verkeilten Pod-Pins ein Arbeiter-Thread bis zum Neustart. Nichts wirft auf Vorgeschaltete Fehler, weil der Fan-out einen Anruf pro absagepflichtiges Dokument pro Mitglied ausgibt und darf die Partie nicht über eine schlechte Vorlage abbrechen. Void Karten 409 zu einem meldepflichtigen Übersprungen-signiert, anstatt ein Fehler. Antwort-Datensätze ignorieren unbekannte Felder context ObjectMapper hat noch FAIL_ON_UNKNOWN_PROPERTIES eingeschaltet.
· kamo-internal
Paketvorlagen sub-tab für Legal & Compliance
Ersetzen Sie nur den HrTabPlaceholder-Einsatzkörper - die Route, den Tab-Eingang und das Gate gibt es bereits in hrTabs.ts. AG Grid Community Liste plus ein erstellen/es Dialog mit einem geordnete Bindemittel-Pflüster auf HR_RESOURCE (Ortliche 13, nicht id 15), up/down reorder, und Department/Job-Typ multi-selects, dass die All-Team-Mitglieder umschalten. Die Das Label von toggle ist der eigene Plural-Team-Mitgliedsbegriff der org, nie ein Hardcode-String. Keine neuen i18n-Schlüssel: Jedes Etikett verwendet einen Schlüssel, den das Wörterbuch bereits definiert und zählt aus Daten zu machen.
· kamo-internal
Rechtliche Paket Proxy-Routen, Client api und reine Helfer
Thin 1:1 ForwardToApi Routen unter /api/docs/legal . je eine vorgelagerte Anfrage, weil OTKAuthFilter bekommtAndDelete und eine Fan-Out-Schleife in einer Next Route würde benötigen ein OTK pro Mitglied. Ids bleiben Strings Ende to end (unique_rowid). Neuordnung ist geklemmt statt umwickeln, und die Publikumslisten werden leer geschickt, wenn All Team Die Mitglieder sind so, dass ein abgestandenes, engeres Publikum nicht zurückkommen kann.
· DocsService
Publikumsauflösung Vorschau
Löst ein gespeichertes oder eingezogenes Publikum durch TeamMemberRepo.findPublsion, das die nur Leser mit der obligatorischen ACTIVE + recordState Förderfähigkeit Prädikat Team-Mitglieder-Contracer Endpoint liefert PROSPECT, CANDIDATE, TERMINATED und RESIGNED zurück. Flags Mitglieder ohne E-Mail (EsignEnvelopeService hard-400s ohne) und Mitglieder unten TEAM_MEMBER Sicherheit (ImagingController überspringt stillschweigend die eingereichte Kopie). Zielgruppe zielt nichts löst sich für niemanden, und leere ID-Listen werden so sentinels die OR'd IN-Klauseln bleiben SQL.
· DocsService
Veröffentlicht eine Version mit sättigen Pinned-Dokumenten
Pins img_dat_id plus ein Inhalt hash, nicht img_id: saveImgContent repoints die gleichen Img an neuen Bytes auf jedem Docs speichern, und resolveSource geht zum dat live bei Sitzung bauen und flachen. Schnappschüsse das gefrorene Design statt zu lassen resolveDesignJson zurückfallen auf die neueste, lehnt ein Dokument ohne konvertiert PDF, und verweigert eine Veröffentlichung, deren Fingerabdruck nicht bewegt hat.
· DocsService
Rechtspaket CRUD bei /api/docs/legal/packages
Liste, erstellen, erhalten, aktualisieren und löschen, mit geordneten Binder-Ts und Zuschauerreihen ersetzt als Set. Org kommt von der Sitzung auf jedem Pfad. DocsService ist permitAll und OTKPreAuthFilter setzt die Kette ohne Token fort, so dass Der extrahieren des Controllers IST die Authentifizierung. Cross-org-Abteilung, Berufsbezeichnung, Mitglied und Binder-IDs 400 explizit, anstatt stillschweigend nichts zu schreiben.
· DocsService
Recht Paket-Draht-Vertrag und Antrag Normalisierung
Ids cross as strings (unique_rowid übertrifft MAX_SAFE_INTEGER). Binder Auftrag ist die Liste Reihenfolge, de-duplicated, und ein nicht-numerischer Eintrag 400s anstatt übersprungen zu werden Schweigend ist, wie eine Nachordnung einen Binder verliert. Leere Zuschauerlisten brechen zu einem sentinel, so dass die OR'd IN-Klauseln in findAudience gültig bleiben SQL.
· DocsService
Inhaltliche Fingerabdruck für legale Pakete
Binder.dateUpdated bewegt sich nie nach INSERT, so dass der Inhalt eines Pakets keine Änderung hat Signal zu vergleichen. Fügt einen SHA-256 über den kanonisch bestellten Binder/Ziter tupel einschließlich imgDatId, weil saveImgContent den gleichen Img bei neuen Bytes auf neu ausdeutet jedes Docs sparen - plus den Bescheinigungstext Hash. Encoding ist Länge-verneut so kann ein handwerklich gestaltetes configJson kein anderes Layout schmieden. Fügt auch com.kamo.z.shared.hr.legal zum Projektarchiv-Scan hinzu.
· SecurityService
Push-Plattform-Admin-Staat ändert, anstatt für sie befragt
Jeder Plattform-Bildschirm von diesem Service gesichert auf einem Zeitschalter aufgefrischt, weil dies Service hat keine WebSocket und daher keine Möglichkeit, irgendjemandem etwas zu sagen: die Closed-Leih-Trainer-Tab gelesen alle 4 Sekunden, während ein Lauf war live, DNS Bereitstellung von 15, Commerce-Sync-Logs und VOIP-Aufnahme-Statistiken alle 30, und die Domain-Setup-Seite gefragt überprüfen-dns einmal pro geöffneten Tab. PlatformEventPublisher sendet diese an die neuen Kern von NATS und MediaService PlatformStompRelayController setzt sie auf STOMP. Core NATS statt JetStream, passend zu ThemeProvisionPublisher: Der Stream dieses Dienstes ist CHAT_MESSAGES/chat. so ein JetStream veröffentlichen, um die Sicherheit.* würde erwartete Stream-Validierung scheitern und sein fallen gelassen. At-oft ist der richtige Handel - jeder Verbraucher lädt auch über REST wenn es steigt, so dass ein verlorenes Ereignis kostet eine Auffrischung, nie Korrektheit. Verdrahtet an den Punkten, an denen sich der Staat tatsächlich bewegt: - ClosedLoanTrainerService auf jedem Fortschritt schreiben, auf Anspruch und auf jedem Terminal Zustand, so dass der Monitor genau vorankommt, wenn der Spaziergang tut. - DnsProvisioningService, wie jeder Datensatz begleicht, anstatt der Panel-Re-Lektüre der ganze Baumstamm in der Hoffnung, dass etwas gelandet ist. - RetailSyncLogBroadcaster in jeder Sync-Log-Reihe über den neuen Shared-Le-Hörer Naht, von Anbieter config keyed so a org Synchronisation mehrere Anbieter nicht zeichnen alle von ihnen, weil man sich bewegte. Zwei Zähler haben keinen solchen Moment, und werden ehrlich behandelt, anstatt vorzutäuschen in Veranstaltungen: - Der VOIP-Aufnahme-Rückstau wird von einem anderen Dienst komplett geschrieben, so PlatformStatsWatcher Proben es - aber auf dem Server, einmal, und es veröffentlicht nur, wenn sich die Zahlen tatsächlich ändern, so dass ein leiser Rückstau keinen Verkehr erzeugt wobei die alte Anordnung eine identische Nutzlast an jeden Zuschauer zweimal als minute forever. trigger-sync veröffentlicht sofort, da es den Rückstau kennt ist kurz davor, sich zu bewegen. - Diagnostics ist Live JVM/Host/Datenbank-Messungen, wo im Wesentlichen jedes Feld unterscheidet Sekunde zu Sekunde, so gibt es nichts diskret zu schieben. Es bekommt einen nackten tick: ein Server-Zeitgeber entscheidet, wann "jetzt" eine erneute Ablesung wert ist, statt eines pro geöffneter Tab jeder Ziehen des vollständigen Schnappschusses. DomainVerificationWatcher ersetzt die Umfrage der Setup-Seite. DNS-Ausbreitung und Zertifikatsmission ist ein echter externer Staat ohne Veranstaltung, so muss die Überprüfung irgendwo passieren - aber nicht in jedem Browser. Ein Sweep deckt jede Wartedomäne, nimmt die 25 am wenigsten geprüft, so ein Rückstau von falsch konfigurierte Domains rotiert, anstatt in voller Länge neu zusammengestellt zu werden, nur Sonden HTTPS sobald DNS auflöst, und veröffentlicht nur, wenn eine Domain tatsächlich vorankommt. Zwei bestehende Tests konstruieren diese Klassen direkt und wurden für die neue aktualisiert Konstruktorparameter. Note: ************ Ausfall auf main bereits (unset EntityManager im Handgebauten des Tests) und ist unberührt von dieser Änderung - gegen einen sauberen HEAD Arbeitsbaum verifiziert.
· EmailService
Veröffentlichen Sie Mailbox-Wechsel-Ereignisse, damit die Mail-Ansichten aufhören, Umfragen zu
Der Ordnerbaum, die Gesprächsliste und die Nachrichtenliste liefen jeweils ihre eigene 30-Sekunden Zeitschaltuhr, Nachladen auf die Chance, dass sich etwas bewegt hatte. Die WebSocket bereits sagte ihnen, wenn die Post ankam, aber das ist nur eine der Möglichkeiten, wie eine Mailbox ändert - Lesen Sie eine Nachricht in Roundcube oder auf einem Telefon, bewegen Sie sie, löschen, oder Das alles ließ die Benutzeroberfläche bis zum nächsten Tie-Takt falsch. EmailMailboxChanged sagt, ein Ordner ist nicht mehr das, was Sie zeigen, und trägt der Grund, so dass ein Verbraucher können Arten ignorieren, die es nicht kümmern. Veröffentlicht am email.changed.<addr' und weitergeleitet zu ************ von der IDLE-Hörer (Ankunft, Auslöschung, Flaggenwechsel) und von der Marke gelesen, Flaggen, Endpoints verschieben, löschen, spam spam, senden und entwerfen. Bewusst nicht in E-MailUnreadPublisher gefaltet: dass man einen Zähler besitzt, so dass es muss den Anbieter erreichen und Bursts zusammenlegen, um bezahlbar zu bleiben. Das trägt keine Zählen und liest nichts, so ist es billig genug, um auf jede Änderung zu senden und muss nicht hinter einem Fenster warten, das eine Zählung benötigt. Ein Umzug meldet keinen Ordner, weil er zwei berührt und die Quelle nicht immer ist bekannt an den Anrufer - Verbraucher behandeln, dass als "reload what you are on".
· MediaService
Relay SecurityService Plattform-Events auf STOMP
SecurityService besitzt die Plattform-Admin-Oberfläche - Systemkonfiguration, DNS Bereitstellung, Commerce-Synchronisation, hat aber keinen WebSocket-Endpunkt, so dass jeder Bildschirm unterstützt von ihm hatte keine Möglichkeit, etwas gesagt werden und aufgefrischt auf einem Zeiter statt: alle 4 Sekunden die Registerkarte geschlossene Trainer, DNS, die alle 15, commerce Synchronisieren Protokolle und VOIP-Aufnahmestatistiken alle 30. Es veröffentlicht zu Kern NATS; dies setzt diese Nachrichten auf STOMP, die gleiche Arrangement SupportStompRelayController und **************** bereits verwenden. Vorbehalt des Ziels ist mechanisch - Drop die führende "Sicherheit". und Swap Punkte für Schrägstriche, also security.dns.log.42 kommt auf /topic/dns/log/42 bedeutet, dass ein neuer Veranstaltungstyp einen Verleger und einen Abonnenten braucht und hier nichts. Prefixes sind explizit gebunden und nicht als Sicherheit. double-liefersecurity.theme.provision.*, welche ThemeProvisionStompRelay bereits übergibt die gleiche Themenform.
· kamo-shared-library
Lassen Sie synchronisieren Fortschritt und Domain-Staat statt abgefragt werden
Zwei Haken für die Push-Konvertierung in SecurityService, wo mehrere Plattformen Bildschirme aufgefrischt auf Zeitfahrer, weil es keine Möglichkeit, ihnen etwas zu sagen. RetailSyncLogListener ist eine optionale Benachrichtigungsnaht auf RetailSyncOrchestrator, genannt, wenn ein Sync-Lauf seine IN_PROGRESS-Reihe schreibt und wieder, wenn es die Terminal eins. Der Orchesterleiter weiß nicht, wie die Benachrichtigung reist, und ohne Implementierung registriert verhält es sich genau wie zuvor. Der Provider sync Dashboard reloaded seine gesamte Log-Liste alle 30 Sekunden, um einen Lauf zu sehen hatte es nur fing an sich. ************ listet Top-Level-Domains auf, die es nicht getan haben fertig kommen bis DNS ungeprüft, oder überprüft ohne Zertifikat bestätigt. Es existiert für einen serverseitigen Verifikationsbeobachter: die Domain-Setup-Seite abgefragt überprüfen-dns einmal pro geöffneter Tab während des Wartens auf öffentliche DNS-Propagierung und Zertifikatemission. Bestellt am wenigsten vor kurzem überprüft zuerst und mit einem Pageable genommen limit, so dass ein Sweep nicht mit der Anzahl der dauerhaft nicht verifizierten Domains wachsen kann.
· ESigService
Erlauben Sie einem Absender, die pro Umschlag E-Mail einzuladen, zu unterdrücken
Erstellen eines Umschlags bedingungslos per E-Mail eine Einladung, so dass ein Anrufer Bating viele Umschläge hinter einer Benachrichtigung hatten keine Möglichkeit, ruhig zu bleiben. Null bewahrt die bestehendes Verhalten; das Zugangs-Token wird immer noch in beide Richtungen ausgegeben.
· EmailService
Push INBOX ungelesen zählt über NATS/WebSocket statt Umfragen
Das niv-top Mail-Plakette in kamo-intern erfrischte sich durch Anruf /api/email/Ordner alle 30 Sekunden, pro Browser-Register. Dieser Endpunkt geht die ganzen Ordner Baum und öffnet jeden Ordner read-only zu beantworten, so dass die Kosten für eine ganze Reihe war eine vollständige Mailbox-Zusammenfassung, die auf unbestimmte Zeit wiederholt wurde. Die WebSocket dass bereits existierte nur angekündigt, dass die Post angekommen war und trug keine Zählung, also war seine einzige Aufgabe, eine andere Umfrage auszulösen. Veröffentlichen Sie die Zählung selbst: - EmailUnreadSnapshot auf NATS email.unread.<addr', weitergeleitet an STOMP /topic/email/ungerledigt/<memberId. NATS ist in den Weg, weil die pod, dass beobachtet eine Änderung ist routinemäßig nicht die Hülse hält das Mitglied der WebSocket. - EmailUnreadPublisher verschmelzt pro Mailbox, also eine Zehn-Nachricht IDLE-Lieferung oder eine Seite der Mail markiert lesen ist eine IMAP Rundreise und eine veröffentlichen, aus der Caller-Thread. - MailReader.getUnreadCount liest einen Ordner. Graph beantwortet es aus dem Ordner Liste es bereits zurückgibt; IMAP-unterstützte Anbieter überschreiben es mit einem einzigen STATUS (UNSEEN). - Ein Schnappschuss wird auf dem Abonnenten veröffentlicht, auf IDLE-NachrichtenAdded/messagesRemoved, auf IMAP-Flag ändern, und von der Marke-Lesung / Flaggen / bewegen / löschen / Spam Endpunkte. Drei Lücken schließt sich auch: - Die Änderungen der Flagge waren unsichtbar. Lesen von Post in Roundcube oder auf einem Telefon-Set \Seen, ohne eine Nachricht hinzufügen oder zu entfernen, so dass die Plakette immer nur fiel, wenn der Browser als nächstes befragt. IDLE hat jetzt einen MessageChangedListener. - Cloud-Mailboxen haben überhaupt keinen Push. EmailWebSocketController behoben Anmeldeinformationen durch die KamoMail virtual_users Tabelle, die keine Zeile für eine Mitglied auf Microsoft 365 oder Google Workspace, so subscribe() eine Warnung angemeldet und kehrte zurück. Es löst sich jetzt durch MailProviderResolver, und IDLE verbindet mit der Anmeldegabe (host/port/TLS/XOAUTH2) über eine gemeinsame ImapStoreFactory.connect anstatt den KamoMail-Host und einen Passwort. - Sessions durchgesickert. Ein geschlossener Tab sendet niemals /email/unsubscribe, also Mailboxes sind jetzt Referenz pro STOMP-Sitzung gezählt und veröffentlicht auf SessionDisconnectEvent. Mailboxen ohne Live-IDLE-Hörer - Graph, vorbei an der 50-Verbindungskappe, oder dead IDLE thread - werden alle 60er-Jährige vom Server gefegt und veröffentlicht. Thema. Das ersetzt die Wahlbeteiligung anstelle von Push: Ein Sweep dient jedem tab ein Mitglied hat geöffnet, Mitgliedschaft wird jeden Pass erneut getestet, so dass ein toter Zuhörer ist abgeholt, und der Browser erhält immer noch die Zählung über die WebSocket. MessageIndexer bindet E-Mail. und deserialisiert alles darauf als Nachricht, so es überspringt jetzt Themen außerhalb email.inbox. als durch die Verengung des Abonnements, weil E-Mail-Metadaten-Indexer ist eine langlebige Verbraucher und Änderung seiner Filter-Betreff würde die Zeichnung auf jedem pod, bis die langlebige von Hand gelöscht wurde.
· InitializerService
Land das Gesetzespaket Schema
Fügt com.kamo.z.shared.hr.legal zur Repository-Scanliste hinzu und stellt sicher, Einzigartigkeit und Durchsuchung indizes das Entity-Mapping nicht sicher ausdrücken kann.
· kamo-shared-library
Rekord-Paket-Bescheinigung als Append-only-Beweis
Die Paketebene "Ich habe gelesen und zustimmen" ist ein anderes Rechtsinstrument als die E-SIGN-Zustimmung zur Unterzeichnung und von jeder Unterschrift pro Dokument, und es ist die NUR Beweise für ein Paket ohne abwegige Dokumente. Wachleute verweigern Update und löschen Sie die Art und Weise, wie PhiAccessLog es tut.

Euer Universum wartet.
Fügen Sie Produkte hinzu, wann immer Sie möchten – keine Migration, keine neuen Anmeldungen.
Für immer kostenlos – keine Kreditkarte erforderlich