Direkt zum Inhalt
KAMOUniverse

Changelog

Was ist neu?

Jede Verbesserung an der Plattform, wie sie geliefert wird.

  1. · MediaService

    Ein Gespräch erreicht das Telefon

    Eine Nachricht auf einer Exec2Exec-Leitung geht jetzt an die Telefone der Empfänger sowie ihre Konsolen: das Telefon des Kunden, wenn KamoCRM antwortet, jedes Schreibtisch-Mitglied Telefon, wenn ein Kunde schreibt. Es reitet die bestehenden Präsenz-gated CHAT_MESSAGE Push, Deep-Links zu kamocopilot://exec2exec/<guid" (mit dem Namen des Kunden auf der Kopie des Schalters), und bricht pro Gespräch zusammen, so dass ein Ausbruch eine Benachrichtigung ist, nicht zehn. Ein fehlgeschlagener Push wird protokolliert und stoppt nie die Konsolenrahmen, die bereits ausgegangen sind.

  2. · kamo-internal

    Die Exec2Exec-Steuerung von NavTop ist der Schreibtisch für einen KamoCRM-Manager

    Für ein Mitglied mit Exec2Exec Access in der Plattformorganisation stehend, die Kontrolle zählt jetzt Nachrichten von Clients, die sie nicht angesehen haben (GET ************ und eröffnet Interaction Center Chats - Exec2Exec statt eines eigenen Gesprächs. Die Kunden sehen keine Änderung. - interaktionCenterIntent öffnet das Panel auf einem Tab und Schaufel. Der Eimer reist als anhängige Anfrage die Chatsscheibe ehrt, wenn die Exec2Exec tab erscheint, da diese Registerkarte den Streifen erst nach Plattformrechten verbindet Last und eine frische Pane würden sonst auf ihrem ersten Tab für immer landen. - Das Exec2Exec Verzeichnis Reihenzeichen Kunden UnreadCount, der gleiche Server zählen, so dass die Abzeichen und die Reihen, auf die es sich öffnet, einig sind; Antwort nicht mehr Abzeichen eine Reihe. - useExec2ExecDeskUnread fragt erneut, wann sich der ungelesene Schnappschuss des Schreibtisches bewegt oder die Registerkarte kommt zurück, und behält die letzte Nummer auf einer fehlgeschlagenen Frage.

  3. · MediaService

    Die Anzahl der Client-Nachrichten noch nicht angesehen

    GET ************ gibt zurück, wie viele Nachrichten von Clients, die dieser EXEC2EXEC_ACCESS Halter nicht gesehen hat, über jeden Konversation, und jede Dienstplan-Reihe trägt KundenUnreadCount. Es ist die Plattform ungelesene Regel verengt, was der Gespräch Kunde sagte: der ganze Schreibtisch sitzt auf jedem Chat, so dass die Antwort eines Kollegen ungelesen für die andere, ohne auf einen von ihnen zu warten. Eine Abfrage füttert beide **************** so NavTop's Abzeichen und die Reihen des Interaction Centers stimmen überein.

  4. · KlusterServices

    Dial 911 und 933 von jeder Erweiterung, mit einer MLTS E-Mail-Benachrichtigung

    Erweiterungen konnten 911 nicht erreichen: keine ausgehende Route abgestimmt 911 oder 933, so von-internal fiel durch zu schlechte-Nummer und gespielt "kann nicht abgeschlossen werden, wie Wählt", ohne jemals eine INVITE zu senden. startup.sh trägt jetzt den Wählplan der Hälfte des Fixes: - 911 und 933 sind exakte Erweiterungen in [von-internal-custom], dem Kontext das Outbound-Tor wohnt. Eine exakte Erweiterung übertrifft jedes Muster in sein Kontext, so dass das Tor sie nicht erfassen kann, und sie überspringen die [kamo-outbound-allowed] Liste: jede Erweiterung kann sie mit Nein wählen Präfix. Jeder geht direkt auf von-internal-additional, wo FreePBX's Eigenes Outbound-Routing übernimmt. - [kamo-e911-Mitteilung] läuft vor dem Aufruf geroutet und gestartet kamo_e911_notify.py losgelöst, durch TrySystem (System() hängt die Kanal nach oben, wenn sein Befehl nicht ausgeführt werden kann), mit jedem Argument reduziert Ziffern von FILTER. - kamo_e911_notify.py mailt die Plattform Administrator Mailboxen durch **************** mit der Zeit, der Verlängerung und ihrem Name, die Rückrufnummer und die Position, die an das 911er Zentrum weitergeleitet wird. Es verweigert jeden Empfänger außerhalb kamocrm.com, retries ein Relais-Ausfall drei mal und protokolliert jedes Ergebnis ************ eigene Postfix wird nicht verwendet: es gibt über smtp.gmail.com weiter und seine Warteschlange ist festgefahren. Der Melder wird auf jedem Boot umgeschrieben; der Wählplanblock wird einmal angehängt unter seiner eigenen Gruft-Bewachung, wie der Begleiter Block. Die Routing-Hälfte ist FreePBX-Daten, außerhalb dieses Repo, und wird auf k1m1 angewendet: ausgehende Route Emergency911 (emergency_route=YES, Muster 911 und 933, Stamm 1 (der Telnyx-Stamm), erster in Folge, überschreiben CID +19492989960) und Geräte.emergency_cid +19492989960 auf allen 22 Erweiterungen. freepbx/tests/test_e911.py (stdlib unittest) prüft, ob startup.sh parses als bash und als YAML, Modelle Asterisk Erweiterung Auswahl zu zeigen 911 und 933 umfahren das Tor, während 10-stellige, 11-stellige und 011 Zahlen noch erreichen, pins den benachrichtigenden Hook mit gefilterten Argumenten auf NoOp/TrySystem/Return und treibt den Melder gegen ein Fake-Relay an.

  5. · kamo-marketing

    Listen Sie die Telefonnummer nur auf den englischen Seiten

    showsPhone(locale) in app/lib/phone.ts ist die einheitliche Regel, derzeit locale === "de". PhoneLink gibt nichts an anderer Stelle zurück, was die Header, mobiles Menü und Fußzeile, wo die Nummer steht allein. PhoneOnly wickelt die Platzierungen, die mehr als die Nummer tragen - die Kontaktkarte, und die "Give us a call:" Lead-Ins auf dem heimischen CTA-Streifen, der Enterprise Preiskarte und die Demo-Seite - so dass ihre Worte und Abstände gehen mit ihm. Die Organisation JSON-LD fügt Telefon zu der Org und ihren ContactPoints hinzu unter dem gleichen Zustand, so dass kein anderer Locale Markup behauptet, die Nummer.

  6. · kamo-marketing

    Lassen Sie das Logo nach Hause führen, und listen Sie die Telefonnummer, wo die Besucher entscheiden

    Der Home-Eintrag des Headers duplizierte das Logo, das bereits auf / verlinkt. Es ist von den Desktop-und Mobile-Menüs verschwunden; an seiner Stelle das Logo trägt einen Schwebe-/Focus-Tooltip und sagt, dass es nach Hause geht (links von der Homepage sich, wo es nirgendwo zurück zu gehen). (949) 298-9960 ist jetzt ein Tap-to-Call-Link: - Header, zentriert zwischen dem nist und der Sprachauswahl (xl und oben; die lg-Reihe hat keinen Platz dafür), und im mobilen Menü mit den CTAs - Fußzeile, unter den sozialen Ikonen - Kontaktseite, als Call Us-Karte Überschrift der Kontaktmöglichkeiten - zu Hause CTA-Streifen, Enterprise Preiskarte und Demo-Seite, neben der bestehende Aufforderungen zum Handeln - Organisation JSON-LD, als Telefon auf der Org und beide ContactPoints Die Nummer lebt einmal in App/lib/phone.ts; PhoneLink macht es und Berichte klickt durch data-track als Telefon-Klick mit seinem Standort.

  7. · kamo-internal

    Eine markenbemalte Dropdown-Oberfläche für die gesamte Oberleiste

    Jeder Dropdown, der an NavTop hängt - die acht Optionen Menüs (Mail, Docs, Text, Rechner, Support, Einstellungen, Linux Desktop, Spiele), die Verfügbarkeitspille und der Sprach-Picker - öffnet sich jetzt in EINEM geteilte Oberfläche anstelle seines eigenen weißen MUI Popover. - In der Grundfarbe der Organisation mit weißen Etiketten und Symbolen gemalt. Seine obere Kante sitzt bündig auf der unteren Kante der Bar, in der eigenen Farbe an dieser Stelle (der Abstechung stoppt jetzt live in navtop/menu/navTopSeam.ts und NavTop baut seinen Hintergrund daraus, mit quadratischen oberen Ecken und ein konkave verbinden beide Seiten, so liest es sich wie die Bar nach unten, anstatt eine Schelange gelegt die Seite. Eine Marke zu hell für weißen Text wird in ihrem eigenen Farbton nur so weit wie WCAG AA abgedunkelt benötigt (eine Leuchtdichte in CSS-Tierbküre); jede andere Marke wird nachgewählt gezeichnet. - Öffnet unter einer ruhenden Maus, folgt dem Mauszeiger entlang der Bar - die Oberfläche gleitet und verkleinert zum nächsten Menü, während der Inhalt in Fahrtrichtung gleitet - und in die bar kurz nach dem Mauszeiger verlässt sowohl den Auslöser und das Panel. Ein Klick oder ein Tippen zündet es bis eine Außenpresse, Escape oder eine Wahl; ein Tippen fokussiert nie ein Textfeld. - Tastatur: Enter / Raum / ArrowDown öffnen Sie sich auf die erste Reihe, Pfeile gehen die Reihen, Home / Ende, type-ahead, Rechts / Links öffnen und schließen Gruppen und Schritt zum benachbarten Menü, Escape Hände fokussiert zurück auf den Trigger. - Ein Highlight, das von Reihe zu Reihe gleitet, Gruppen, die unter ihrer Reihe auf einem Guide-Thread öffnen, Einzelring auf Zählabzeichen, die Cheddar Balance Zählen. Alle Bewegung weg unter reduzierter Bewegung. - Einstellungen erhält ein Suchfeld, das innerhalb seiner Gruppen sucht und markiert das Spiel; Enter öffnet die erster Treffer. Der Sprachpflücker ist ein zweispaltiges Raster aller 22 Sprachen, durchsuchbar nach nativem Namen, Englischer Name oder Code. Die Einstellungen schalten ein und die Cheddar-Geschwindel werden weiß und bleiben in der Schiene unverändert. Die Rail-Fly-outs sind unverändert - die Schiene lugt bereits auf Schwebe. Wenn sich ein Menü öffnet, wechselt und schließt ist eine React-freie Zustandsmaschine (navtop/menu/hoverIntent.ts) mit eigenen Tests. Verifiziert in echtem Chrome gegen die realen Komponenten (esbuild Gurtzeug, Datenquellen stubbed): 170 gemessene Kontrollen bei 11 Marken - Schwebe-Timing, die Flush Naht und Ecken, beide konkave verbindet, weißer Text bei 4.5:1 oder besser auf jedem Teil des Panels, weiße Tinte durchgehend, das Gleiten zwischen Menüs, die Urlaub Gnade, eine Diagonale über einen Nachbarn nicht stehlen das Menü, Click-to-Pin, Touch, Tastatur, sowohl Suchanfragen als auch reduzierte Bewegung. 287 Tests in den Navi und Navi-Suiten, tsc, und die Bild-Build schützt vor dem aktuellen en.json des Wörterbuchs.

  8. · MediaService

    Setze den ganzen Schreibtisch in jedem Chat, zeige, wer dabei ist, schließen Sie die Chat-Feeds

    - Stehmitgliedschaft: Jeder explizite EXEC2EXEC_ACCESS-Inhaber sitzt auf jedem Exec2Exec Gespräch. Exec2ExecDeskReconciler Sitze und unseats von der Zuschüsse auf Security Service exec2exec.desk.changed Veranstaltung, eine 5-minütige Sweep, Start, und wann immer ein Chat geöffnet oder wieder gefüllt wird; der Schreibtisch wird erneut gelesen pro Gespräch, so dass ein Sweep kann nicht rückgängig machen ein Grant eine andere pod gerade angewendet. - GET /chat/{id'/Teilnehmer listet die KamoCRM-Führungskräfte in einem Chat auf (memberId, userId, Name, jobTitle). - Senderlinien tragen AbsenderPhone (das Top-Level org's Phone (Main) und senderPhoneExt (die aktivierte VOIP-Erweiterung, sonst die Team-Mitglieds-) für KamoCRM Mitarbeiter. Die Begrüßung ist immer von Gott unterzeichnet. - Roster Reihen tragen wartenDesk (der Kunde sprach zuletzt) für die Konsole Anmelde-Sweep. - Sicherheit: /topisch/chat/incoming/{memberId" und /topic/chat/ungerlies/{memberId kann nun nur noch von diesem Mitglied abonniert und niemals von einem Client gesendet werden. Beide waren unbewacht, so dass jeder angemeldete Kunde jedem Mitglied folgen konnte Ankünfte und ungelesen durch ID. - Die generischen Add/Entfernen/Entfernen/Verlassen/Umbenennennungs-Routen verweigern Exec2Exec Sitzungen (409 MEMBERSHIP_MANAGED): der Versöhner besitzt diese Mitgliedschaft. - Offline-E-Mail: die Nachricht eines Kunden Mails an den Schreibtisch, die Antwort eines Managers Mails nur der Kunde, statt jeder Führungskräfte über alles. - Back Fill Grüße und Sitze in der Transaktion, die ein Chat öffnet, so dass Die erste Antwort des Kunden ist nie für den Schreibtisch gelesen markiert.

  9. · kamo-marketing

    Hand Google die grüne-Fliese-Marke, weil es listet das größte Symbol, das wir erklären

    Suche zeigt ein Symbol pro Website und nimmt die größte erklärt, apple-touch-Ikone enthalten, so dass die 180px Touch-Symbole (unsere und der Themen) übertrumpft alles andere. Ein 192px Apfel-Touch-Ikone jetzt überdimensioniert beides. Seine Pixel sind die 96px Grün-Fliesenmarke verdoppelt genau, so Googles Downscale gibt das Original zurück. Tabs halten favicon.ico, iOS hält die genaue 180 Spiel für zu Hause Bildschirm, und kein Logo auf der Seite ändert. Browser neue-Tab-Kacheln, die wollen, dass das größte Symbol dieses aufnimmt.

  10. · kamo-internal

    Zeigen Sie, wer von KamoCRM im Chat ist, und wie man sie erreicht

    Das Fenster des Kunden listet nun die KamoCRM-Führungskräfte zu ihrem Gespräch auf, Immer dann, wenn jemand hinzugefügt oder entfernt wird, lesen Sie bitte erneut. Die Linie zeigt nur NAMES, mit Titel auf der Schwebe: "Name - Titel" pro Person lief der Schreibtisch in einem Run-on, dass Nach der ersten Führungskraft abgeschnitten, so dass ein Kunde nicht mehr sehen konnte, wer sonst war da - das eine, wofür der Streifen ist. Beladung, leer und fehlgeschlagen werden gezogen abgesehen; "niemand von KamoCRM ist auf diesem Chat" ist etwas, das ein Kunde auf handelt. Die Zuteilungslinie eines KamoCRM-Führungspersonals endet nun in der Hauptlinie der Org und deren eigene Erweiterung "Sage Nadjafinia - KamoCRM Inc. - Präsident - (949) 298-9960 x80" - durch SignaturPhone, unverändert, so druckt es genau wie eine E-Mail Signatur tut. Der Separator ist " - " überall, zu passen. Mitgliedschaft Frames kommen mit id: null, so dass sie vor der Transkripts "no id, drop it"-Wache; dahinter wurden sie still verworfen.

  11. · SecurityService

    Sagen Sie, wenn der Schreibtisch wechselt

    Exec2Exec Access zu gewähren oder zu widerrufen veröffentlicht exec2exec.desk.changed, so MediaService kann eine Führungskraft auf jedem Chat setzen - oder nehmen Sie sie aus. toggle auf der Plattform-Admins-Seite bewegt sich, anstatt wann immer seine Sweep nächsten läuft. Nach der Übergabe, nicht inline: MediaService nimmt den gesamten Schreibtisch von der Datenbank und nie vertraut der Nutzlast, so dass ein zurückgerollter Zuschuss nicht setzen kann jeder - aber eine Inline veröffentlichen Rennen die Commit, und eine versöhnliche, die liest zuerst versöhnt sich mit dem alten Schreibtisch. Die Nutzlast ist für das Log, nicht die Logik. Es veröffentlicht, wenn das Recht vor UND nach und nach statt gehalten wird: Re-Spar Executive ist der natürliche Weg, um sie wieder auf die Chats nach einem verpassten Ereignis setzen.

  12. · kamo-shared-library

    Tragen Sie die Telefonleitung der Exekutive auf eine Nachricht

    ChatMessageDto gewinnt AbsenderPhone und AbsenderPhoneExt, eingestellt nur, wenn der Absender ist KamoCRM Personal: die Plattform org Hauptlinie plus die Erweiterung, die erreicht diese Person, als E-Mail-Signatur bereits druckt es. Die Relaiskopien von einem allowlist, so dass ein Feld, das diese Klasse nicht erklärt erreicht keine Browser-Historie würde die Nummer tragen, während jede Live-Nachricht ohne sie ankam. Der Kommentar des Grant-only-Werbers sagt den Anrufern nicht mehr, dass es die falsche Antwort ist. Für den Exec2Exec-Pult ist es nun genau das Richtige, absichtlich: Anfrageer machte das Umschalten auf der Plattform-Admins-Seite die einzige Kontrolle über der auf den Executive Chats sitzt.

  13. · kamo-internal

    Halten Sie an einem gepinnten Interaktionszentrum; halten Sie Fenster unter jedem Menü

    Zwei Follow-ups zu 0c5ef994 (maximieren Sie neben dem Navi). Ein PINNED-Interaktionszentrum nimmt sich jetzt die Breite von der Maximierten Scheibe. Pinned, das Panel wird neben dem Bildschirm gearbeitet, so dass eine maximierte Fenster und seine Registerkarte Streifen stoppen am linken Rand des Panels statt auf der laufenden darunter. Die Panel veröffentlicht seine Breite auf einer CSS-Variable, während pinned UND öffnen (useInteractionCenterReserve) und PaneGeometrie subtrahiert es, so die Variable des Rail funktioniert bereits; das Panel ist am gleichen String gezeichnet, also die beiden können nicht widersprechen. Unpinned, ist das Panel immer noch ein Modal über einem scrim und das Fenster hält seine Breite dahinter. Entspannen, schließen und alle abhängen die Reserve zurückziehen. Die Breitenkappe des Navigators misst den Raum Auch die Kante des Panels. Menüs öffnen sich nicht mehr hinter Werkzeugfenstern. Die Tresen des Ladens (Tool-Core, mit Mobile geteilt) steigt auf jeder Öffnung, Erhöhung und Fokus und wird nie zurückgesetzt; Roh lackiert, eine lange Sitzung trug Fenster hinter MUI 1300, und jede Speisekarte, popover und Dialog in der App dann geöffnet BEHIND sie - im DOM, positioniert, unsichtbar. Das Dock liest jetzt nur noch den Zähler für ORDER und malt jedes Fenster an seinem Rang in einem kleinen Band über 200 (windowStacking.ts), so das Stapeln der Shop entschieden wird gehalten und kein Fenster jemals erreicht ein Menü Ebene. Der Aufzug des Navi über eine maximierte Scheibe verwendet die gleiche lackierte Ebene, so es bleibt auch unter den Menüs. Verifiziert in echtem Chrom: Fenster und Streifenende am Rand des Pinned Panels (890px von 1440), eine ungepinnte Paneel überlagert, ohne wiederzufließend, und nach 2.000 Fokus klickt (die Zähler nach 1300) ein Menü auf MUI's default layer still Farben über das Fenster.

  14. · kamo-internal

    Maximieren Sie neben dem n nav, nicht darüber

    Ein maximiertes Werkzeugfenster, das verwendet wird, um den gesamten Blickport zu nehmen. Es, sein Navigator die Spalte und der Tab-Streifen wurden alle auf der Stapelebene des Docks angeheftet, über beide Navis - so dass ein Mitglied, das ein maximiertes Fenster liest, keine erreichen konnte Navigation, bis sie es wegstecken. Die Scheibe ist jetzt alles unter NavTop und rechts von NavPri. Das Fenster, die Navigator und der Streifen beginnen am Rande der Schiene und unter der Bar, lesen Sie von die gleichen zwei CSS-Variablen AuthedChrome Offset die Seite eigene Content-Box von (paneGeometry.ts), so dass eine erweiterte Schiene bewegt die Seite und die Pane zusammen. Der Navigator und der Streifen gleiten in Clipping Slots, so dass sie aus hinter der Schiene und der Bar statt über sie, und alle drei folgen einem Schiene umschalten mit dem Fenster eigene Blei-und-Trail-Timing. Während ein Fenster maximiert wird, muss das Navi auch darauf eingreifen: - Eine Option, die zu einer PAGE geht, kündigt nav:page first, und jedes Fenster noch auf dem Bildschirm ist weg wie ein Hexhead gelegt - sonst würde die Seite laden unter der Scheibe. Klicken Sie auf die Seite, die Sie bereits auf Zählungen zu zählen zu: es ist um die Suche nach dieser Seite. - Eine Option, die eine TOOL WINDOW öffnet, markiert sein Tool:open with origin: 'nav', und der eine Trichter, durch den jeder offene Gang durchläuft, verwandelt das in maximiert: wahr. Das neue Fenster nimmt die Scheibe, das alte geht zu einem Hexkopf durch der eigene Swap des Ladens, und der Navigator und Tabs folgen dem neuen Fenster seine Eimer, auf die Terminal-Liste, oder weg für ein Werkzeug ohne Navigator. Beide gelten nur, während ein Fenster die Scheibe hält (der Ruf des Mitglieds). Mit nichts maximiert ein Navi-Klick verhält sich genau wie zuvor. Die Regeln sind rein (navPaneRule.ts) und das nav nur ankündigt (app/lib/navIntent.ts); ************ versagt an einem nackten Werkzeug:open oder router.push in eine Navi-Oberfläche geschrieben. Gedeckt: beide Navi-Optionen und Menüs, Einstellungen, die Kommandopalette, das Logo, KamoMobile, die Planpille, die Links von NavTop und Glocke, die Exec2Exec-Taste und die Reihen des Interaction Centers. Fallout fixiert in der gleichen Änderung: - Der Schwebe-Peek der Bahn und das Interaction Center (Panel und Kulisse) saßen bei z 26-30 unter einer Scheibe bei 201 und Klettern, so dass, sobald das Navi erreichbar war, sie geöffnet BEHIND es. Die Schichten des Navi werden von selbst über die Scheibe gehoben Ebene, während man gehalten wird, halten ihre Bestellung (navLayerZ, verwendenMaximizedPaneZ). - Die Naht des Navigators berechnete seine Breite als das x des Hinweises, wahr nur während der Navigator startete bei 0. Es misst vom eigenen linken Rand des Navigators jetzt, und Kappen die Breite bei einem Anteil der Scheibe statt des Bildschirms. - Chess und Hold'em wählten ihr Layout aus window.innerWidth, wenn maximiert zu breit an der Schiene, und abgestanden auf einem Schienen-Keebel. Sie messen ihre eigenen root (useMeasuredBox, verschoben zu Werkzeugen/Freigabe zu teilen); **************** hält es so.

  15. · kamo-shared-library

    Liste der Mitglieder, die eine Plattform rechts halten

    countHoldersOf antwortete, wie viele; der Exec2Exec Schreibtisch braucht wer. Grant-Reihen allein sind die falsche Antwort auf "wer arbeitet den Schreibtisch" - der Top-Level-Besitzer hält jede Plattform ohne Zeile überhaupt - so ist dies ein Arm dieser Antwort, und der Anrufer fügt den Besitzer und den Beschäftigungscheck hinzu.

  16. · kamo-internal

    Der Executive Channel in der Konsole

    Eine direkte Linie zwischen einem Kundenmanager und den KamoCRM Führungskräften: der Chat Die Hälfte des Support-Fensters ohne Ticket, ohne Status, ohne Bewertung und ohne Warteschlange. THE TOOL WINDOW. Sein eigenes Verzeichnis, weil der Entwurf Wache löst ein Werkzeug Dateien aus dem eigenen Ordner - und geht VACUOUSLY für ein Chat-only-Tool, da die Der Textbereich des Komponisten lebt in App/components/chat. Die enge Wache ist daher handgeschrieben, nicht von einem grünen Tick abgeleitet. DIE ATTRIBUTION LINE. Name, Organisation und offizielle Berufsbezeichnung auf einer Linie die verwendet, um einen Namen zu halten, und auf BOTH-Seiten - der Punkt des Kanals ist, die Briefkopf jemand schrieb unter, die für das Mitglied eigene ältere gilt Nachrichten von einer anderen Organisation zu. Die Seite einer Nachricht wird berechnet aus der USER-ID des Absenders am Render und nie gespeichert; eine gespeicherte Seite ist das, was einmal gemacht Blasen landen auf der falschen Seite irreproduziert. Die meisten Führungskräfte haben keinen Job Titel aufgezeichnet, so zwei Felder ist der normale Anblick und es gibt kein baumeln Separator. NAVTOP. Links von der Glocke, im festen Chrom und absichtlich aus NAV_REGISTRY - es gibt keine "nicht bewegliche" Flagge in dieser Codebasis, und bleiben draußen der Registrierung IST, wie ein Symbol unversteckbar gemacht wird. Es sendet seine eigene Konverkufte explizit: Das Tool ist in einer Instanz gedeckelt und ein propless open eines gedeckelten Werkzeugs ist eine Erhöhung, keine Navigation, so dass die Taste sonst wäre Re-raise, welche Exekutive auch immer das Interaction Center zuletzt eröffnet hatte. Seine Plakette zählt das eigene Gespräch des Betrachters, nie den Schreibtisch insgesamt - ein Operator ist ein Partei zu jedem Gespräch, das sie beantworten, und klicken Sie auf eine persönliche Kontrolle kann klar, jemand anderes ist ungelesen. INTERAKTION CENTER. Ein siebter Eimer, rechts von Teammitgliedern, nur für einen Inhaber von EXEC2EXEC_ACCESS innerhalb der Plattform org. Es listet USERS auf, nicht Sessions Die meisten von ihnen haben noch nie etwas geschrieben - mit ihren eigenen Organisationen abgekürzt "Acme +3", die vollständige Liste in einem Tooltip, im Titelattribut und in der Reihe aria-Label, so ist es ohne Schwebe erreichbar. ALL_BUCKETS ist beides der Streifen und die gespeicherte Vorzugs-Geänderliste, so dass eine abgeleitete sichtbare Liste Feeds alle drei Leser und ein Mitglied wieder auf einem Tab sie nicht mehr sehen können, ist bounced anstatt gestrandet auf einem Tabs-Wert ohne Tab. WELCOME MESSAGE. Die erste beschreibbare Kontrolle, die jemals auf der Plattform platziert wurde General Registerkarte. Back Fill sitzt hinter einer Bestätigung und berichtet, was es getan hat; es ist auf gated EXEC2EXEC_ACCESS und nicht das eigene Recht des Tabs, weil es schreibt ein Botschaft in die Gespräche der Menschen.

  17. · SecurityService

    Speichern Sie die Willkommensnachricht

    Die Begrüßung der Plattform sendet zuerst über Exec2Exec, auf der Plattform config singleton, wo jede andere Plattform-weite Einstellung bereits lebt. Zwei neue Endpunkte statt zwei weitere Tasten auf /system-config, und das ist die ganzer Punkt der Änderung: Der GET des Singletons hat überhaupt keinen Filter pro Feld refuseUnauthorizedFields regelt nur das Schreiben - so zugeben PLATFORM_GENERAL zu seinem any-of gate würde jedem General Operator die KamoPBX Basis-URL übergeben, Master-Konto-ID, Kontoname, Administrator-Benutzer, Realm und WSS-Endpunkt, plus die Extraktion Modell-ID. Ein Textfeld, auf das sie Anspruch haben, im Austausch für die anderen beiden Registerkarten. Blank spart als Null: Nicht konfiguriert und konfiguriert-zu-nichts sind die gleichen Anleitung, und Back Fill ist ein No-Op in diesem Zustand. Die Rechte selbst wird in MediaService durchgesetzt, wo die Gespräche sind, so PlatformRightCoverageTest zeichnet es unter ENFORCED_ELSEWHERE mit der Datei auf hält das Tor.

  18. · MediaService

    Servieren Sie den Executive Channel

    Ein Gespräch mit der eigenen Publikumsregel und ohne Ticketmaschinerie, im Anschluss SystemBugs Form: sein eigenes Paket, sein eigener Controller, seine eigene Sichtbarkeit und MediaSession/MediaObj wiederverwendet für alles darunter. Nichts musste sein unterdrückt von der Support-Warteschlange, weil ein Chat ohne Ticket-Reihe nie betritt sie. Förderfähigkeit (Exec2ExecEligibility) ist ein einfaches Mitglied der Top-Level org OR die Besitzer von was auch immer Org sie unterzeichnet sind in - und "Besitzer" ist zwei Tatsachen, nicht eine: die TeamMember-Flagge UND orgs.user_id_owner, weil die Plattform eigene oder org ist ohne dass ihr Besitzer die Flagge tragen muss. Die Plattform rechts Tore nur die KamoCRM Seite, und canOperate geht durch SessionPlattformFacts, nie AuthHelper.hasRight, die eine nackte GD-Flagge umgeht. Jede Nachricht trägt Name, Org und offizielle Berufsbezeichnung, live von der Mitglieds-ID des Autors ist UNIQUE(ORG_ID, USER_ID), so dass die ID bereits Namen, dauerhaft, von welcher Organisation jemand schrieb. Nichts ist Schnappschüsse in die Reihe. Ein einfaches Mitglied hat überhaupt keine Berufsbezeichnung, die die normaler Fall für genau die Bevölkerung dies dient, so dass die Linie zu zwei degradiert Felder, anstatt einen Separator hinterherzulaufen. Ein Gespräch, zwei Adressen (Chat-ID und Session guid), weil der Browser hält die guid - es ist der Entwurf Schlüssel des Komponisten, die ungelesene Taste und die STOMP Thema - während die Zeile von id-Adressen versehen ist. Beide lösen sich zur gleichen Reihe; weder ist um weggeräumt zu werden. Eine Nachricht ankündigen Fans alle drei Frames, nicht nur das Session-Thema: ein Thema nur ein montiertes Fenster abonniert ist, wie ein Abzeichen nicht zu bewegen, bis ein Seite neu laden. Der Autor des Begrüßungsgastes ist absichtlich NICHT zur Sitzung beigetreten. die Plattform SYSTEM Mitglied ist eine echte Anmeldeperson, und sich ihnen anzuschließen jedes Gespräch über den Einsatz in den ungelesenen Schnappschuss dieses einen Menschen. Eine zweite Mitgliedschaftsreihe für den gleichen Benutzer trägt ihren vorhandenen Lesezeiger über. Die ungeleste Regel ist pro MEMBER und diese Funktion ist der eine Ort, an dem ein USER hält mehrere, so dass ein frischer Zecher zählte alles, was sie von ihrem geschrieben hatten erste Organisation als unvorbereitet gegen sich selbst. Förderfähigkeit ist weiter als der Gruß absichtlich: ein org-Besitzer bekommt Kanal, aber die Willkommensnachricht wird, wie angegeben, zu kamocrm eigenen adressiert einfache Mitglieder. DDL ist von Hand (ddl-auto: keine, InitializerService unde-Beschäftigt) und bereits auf den Cluster angewendet; ************ ist die Platte.

  19. · kamo-shared-library

    Die Stiftung des Exekutivkanals

    Ein stehendes Gespräch zwischen einem Kundenmanager und dem KamoCRM Führungskräfte, die auf dem USER und nicht auf ein Mitglied eingefasst - das ist, was es erlaubt folgen Sie jemandem, der vier Organisationen besitzt, von denen sie unterzeichnet sind in, während jede Partei noch als Mitglieds-ID gespeichert ist, so dass jede Nachricht aufzeichnet aus welcher Organisation ihr Autor es geschrieben hat. - MediaSessionType.EXEC2EXEC(5) angelegt, nie eingelegt; die Spalte ist @Enumeriert(ORDINAL). Nicht geformt wie SUPPORT_TICKET: kein Status, keine Warteschlange, nein Zuweisung, nichts, was sich schließt. - ************ - zuletzt angefügt, weil getSortOrder() kehrt ordinal(). Es netzt ab, wer den Schreibtisch ANSWERS, nie wer dazu berechtigt ist eins; die Vermischen der beiden würde jeder Exekutive den Schreibtisch geben. - Exec2ExecChat, ein Satellit auf der MediaSession Wirbelsäule, so wie SystemBug ist, mit UNIQUE auf USER_ID: "es gibt immer nur einen Exec2Exec Chat" ist eine Datenbank Tatsache und nicht eine Konvention, die das Rennen zwischen den NavTop-Taste und die Auto-Open Auflösung der gleichen Chat auf einer Anmeldung. - ChatMessageDto gewinnt ************ Kopien von einer zulässigen Liste, so dass ein Feld, das es nicht erklärt erreicht keinen Browser bei alle Geschichte würde richtig lesen, während Live-Nachrichten einen nackten Namen zeigten. - **************** der Gruß, den die Plattform zuerst sendet. - findChatMembershipsByMemberId nennt EXEC2EXEC. Diese Abfrage ist ein ALLOWLIST und lassen Sie die Art aus ihm ist der ganze Grund, ein soziales Gespräch könnte einmal nie eine ungelesene Zählung zeigen irgendwo.

  20. · kamo-signer-monorepo

    Die Tapete der Org hinter jeder Seite, und weiße Kopie darauf

    Kamo-Zeichen war die eine weiß-markierte Oberfläche, die noch ein flaches Grau malte. Es spielt jetzt die einladende Organisation Hintergrundfotografie wie kamo-login, kamo-register, die Konsole und KamoMeet machen bereits "************" "HintergrundImageCount" .<themeBase&gt;/img/bg/{n&gt.webp", "Hintergrundauftrag" ausgezeichnet, eine 8 s Wohnanlage mit einer Überfade von 1,2 s das unter bevorzugt-reduziert-Bewegung stoppt, 404s fallen gelassen, und die Org primär über sie bei 6%. "OrgBackground" wohnt in @kamo/Themen, neben dem Rest der Themenanlage, also Signer hat ein Exemplar und nicht das fünfte handgerollte. Es löst die Schnecke auf JEDEN Pass und erneute Vorsatze auf KAMO_THEME_REAPPLY: das Layout-Mount, bevor ein Token validiert wurde, also Der Absender ist auf den ersten Farbton unbekannt und erst bekannt, sobald die Sitzung gelandet ist. **Es macht überhaupt nichts, wenn die Org keine Hintergrundbilder hat**, und alles, was darauf antwortet wird auf dieser gleichen Tatsache über "useOrgWallpaper() " gated. Weiße Kopie über ---Hintergrund", die auf einem Themenmieter ist #ffffff - wäre unsichtbar, also darf dies nie eine bedingungslose Farbe sein. Montiert an vier Wurzeln, nie in einem Bildschirm: die Phasen sind in einem "motion.div" eingewickelt, dass animiert "y", und ein transformierter Vorfahr ist ein enthaltender Block, also eine "Position: fix"-Schicht innen gleitet man mit dem Übergang, anstatt still hinter ihm zu stehen. - **Ein 6% Farbton ist eine Tönung, kein Scrim.** Weißer Körper kopieren über die Tapete von "Cr. misst 1.6:1 allein mit der Wäsche und nur mit der Wäsche von kamo-login s-widergba (2,0,36,0.2) erreicht 2:1; es kommt damit durch, weil jedes Wort, das es zeigt, in einer mattierten Karte sitzt. Der Vervollständigungsbildschirm hat keine Karte, so dass die Verdunkelung ein zentriertes radial unter dem Linearen ist gradient, abgestimmt durch Sampling gerendered Pixel. Gemessen an beiden echten Mietern, jede Zeile jetzt klärt AA: 8,5:1 für die Überschrift, 5.5:1 für die Fußzeile, Worst Case 5.5:1. - **Der Vervollständigungsbildschirm geht weiß** - die Überschrift und der Download-Hinweis mit den drei Zeilen berichtet, da sie eine Oberfläche teilen und eine halbe fixe liest sich wie ein Fehler. - **Ein Logo ist auch immer für die Farbe, die der Mieter gewählt hat.** Das ist fast schwarz grün, unsichtbar auf einem Foto unter einem Scrim. ThemeLogo nimmt eine "OverlayColor" und maskiert das Kunstwerk zu einem Silhouette, der gleiche Mechanismus kamo-login und KamoMeet Verwendung für die org eigenen Logo-Overlay Einstellung; der Unterzeichner passiert #ffffff genau dann, wenn eine Tapete oben ist. - **Die Willkommensanzeige des Bildschirms "Message von" Karte war eine 4% Wäsche über "transparent"** auf der Ebene Hintergrund der beabsichtigten fast weißen Tönung, über ein Foto 96% Foto, mit einem dunklen Zitat darin. Es mischt sich stattdessen in #fff auf einer Tapete. - **Die öffentliche Zitatseite** bekommt es auch, getönt von seinem eigenen "--quote-primary" und versteckt in "@media print" - was der Kunde Dateien bleibt White Paper. Sein Org-Alias wird aus dem Das Segment des Briefkopfes, das "QuoteMapper.themeAsset" bereits baut, ./public/ anstatt ein Feld zu "PublicBranding" hinzuzufügen und zwei Java-Dienste für eine Stylesheet. Die Druckregel wiederholt die "html[data-kamo-wallpaper]"-Walbecher Spezifisch: eine Medienabfrage fügt keine eigene hinzu, so dass eine nackte ".quote-Seite" dort verlieren würde die Bildschirmregel und drucken Sie eine transparente Seite aus. Verifiziert in einem Browser gegen "crm" und "sign-pink" aus dem Live-Themenschaufel - willkommen, Zustimmung, Dokumentenarbeit und Vervollständigung - mit Kontrast aus gerenderten Pixeln eher als eyeballed.

  21. · kamo-internal

    Beenden Sie die Kategorie Seite - Breite, ein rückwärts Pfeil, echte Wörter

    Die drei Manager wurden geschrieben, um in einem verschachtelten Tab von einem Tab zu sitzen. Als eine Seite von ihre eigenen sie brauchten den Raum, den sie jetzt haben. - Konfiguration gedeckelt sich bei 560px, so dass zwei Schalter saßen in einer Spalte mit den meisten von einem breiten Bildschirm leer neben ihnen. Sie sind ein Raster, das die Breite ausfüllt und Faltet zurück zu einer Spalte unter 360px jeder. - Zwei hintere Pfeile an der gleichen Stelle gerichtet - einer in der Semmelbrösel, einer daneben der Titel. Die Spur liest sich jetzt wie eine Spur; der Pfeil ist das einzige "zurück". - Doc-Typen ist die Registerkarte die meisten Organisationen landen auf mit nichts in ihm, und seine leerer Zustand, seine Klink-Tooltips und seine fünf Fehlermeldungen wurden nicht übersetzt Englisch. Der leere Zustand sagte auch der Leser auf einen Knopf bereits klicken Bildschirm; es sagt, was ein Dokument-Typ ist für statt. - Zwei Tasten wurden in MUI Standard Großbuchstaben schreien. Das Laden der Kategorien setzt nicht mehr synchron in den Effekt ein. React Compiler Regeln lehnen dies als kaskadierendes Render ab, und der Versuch stößt jetzt auf Token aus dem Klick statt. Der Fetch storniert auf unmount, während es da ist.

  22. · kamo-internal

    Kategorien sind eine Tabelle, und jede öffnet sich als eigene Seite

    /settings/features/docs trugen acht Registerkarten: Allgemein, dann sieben, die jeweils montiert wurden die gleichen drei Manager gegen ein anderes Ordinal. Sieben Kopien eines Bildschirms, und vier von ihnen bearbeiteten das Falsche. Die Ordinalle wurden geschrieben, als ImageAssocType sechs Konstanten lang war. Appending Konstanten und geben ihnen explizite ids bewegt CALL_RECORDING von 3 bis 7, und die Seite hatte keine Möglichkeit zu bemerken: die Registerkarte mit der Aufschrift "Call Recordings" war Bearbeitung MY_DOCS, "Meine Dokumente" MEET_RECORDING, "Meet Recordings" SYSTEM_WIDE, "System-Wide" VM_RECORDING und CALL_RECORDING waren unerreichbar. Nichts ist gescheitert, weil ein Ordinal immer eine gültige Kategorie ist. Inzwischen die Kategorien, die waren nie gegeben ein Tab hielt die eigentliche Arbeit - diese Organisation der 36 doc-Typen Alle sitzen auf LOAN, das die Seite überhaupt nicht öffnen konnte. Die Seite ist also jetzt zwei Tabs. Allgemein sagt, was Dokumentenverwaltung ist; Kategorien ist eine Tabelle aus jeder Kategorie, die die ORGANIZATION konfigurieren kann, serviert von DocsService aus dem enum selbst, mit Ordnern, doc-Typen, Typen definiert, Stapeln von Aufträgen und Dokumente, die neben jedem gespeichert sind. Eine Reihe öffnet sich als eigene Seite unter ************ so, wie es ein Telefonanbieter macht zurück zur Tabelle, der gleiche Gradienten-Header und Konfiguration / Doc-Typen / Stacking Bestellungen als echte Tabs und nicht als graue, die in einem Panel verschachtelt sind. Die URL trägt das enum NAME, nie das Ordinal, so dass eine Verbindung, die heute gespeichert wird, überlebt die nächste Konstante, die jemand anhängt. Kleinere Dinge, dies auf dem Weg vorbei: - Der Reiter General hatte "Beschreibung", "Kategorien Heading" und "Categories Body" - Platzhalter, die niemand ausgefüllt hat. - Die Einstellungen Launchpad und die Einstellungen Menü aufgelistet alle sieben toten Tabs. - Eine Kategorie, deren Doc-Typen sich nie mehr bewerben können (Marketingmaterialien) bietet einen Doc-Typen-Tab an; einer, dessen Doc-Typen lediglich ausgeschaltet sind, sagt dies, neben dem Schalter, anstatt jemanden definieren Typen, die nichts tun. - AssocTypeSettings hat die alte verschachtelte Tab-Bar und hat keine Anrufer mehr.

  23. · DocsService

    Servieren Sie die Dokumentenkategorien aus dem enum, das sie definiert

    Die Docs-Einstellungen Seite benannt seine eigenen Kategorien und schickte die ordinal es glaubte Jeder hatte. Diese Ordinale wurden geschrieben, als ImageAssocType sechs Konstanten war lang; Anhängen von Konstanten und ihnen explizite IDs verschoben CALL_RECORDING aus ordinal 3 bis 7, und die Seite nie bemerkt. Die Registerkarte mit der Aufschrift "Call Recordings" hatte MY_DOCS bearbeitet, "Meine Dokumente" hatte MEET_RECORDING bearbeitet, "Meet Recordings" hatte SYSTEM_WIDE bearbeitet, "System-Wide" bearbeitet VM_RECORDING und CALL_RECORDING waren nicht erreichbar. Nichts versagte, weil ein ordinal ist immer eine gültige Kategorie - nur nicht die, die Sie gemeint. GET ************ antwortet mit der Liste das enum selbst definiert, so dass das Ordinal und der Name immer hier zusammen und ein Anrufer muss auch nie raten. Eine Kategorie qualifiziert sich, wenn Ordner oder Doc-Typen eingeschaltet sind oder Organisation-Settisch - genau "es gibt hier etwas zu setzen", die lässt die Assoziationen fallen, die nur als Sanitär existieren (ein Bug-Screenshot, ein Bild Frame Foto, ein Lebenslauf auf einer Bewerbung). Jede Zeile trägt auch die Zählungen, die die Einstellungen Tabelle zeigt: doc-Typen definiert und aktive, Stapeln von Aufträgen und Dokumenten gespeichert. Drei org-weite Lektüren gruppiert Speicher statt einer Abfrage pro Kategorie, so dass eine Anfrage die ganze Tabelle ausfüllt wo die Seite vorher 39 benötigte.

  24. · kamo-signer-monorepo

    Ein kompakter Auslöser für das signierte Kopiermenü

    Die Umschlagliste des Absenders und jede Tabelle der zugewiesenen Pakete haben eine Reihe, nicht einen Helden-Slot, und die Die beschriftete Pille passt nicht dazu. "iconOnly" gibt dem SAME-Menü ein nacktes Download-Symbol, von dem aus geöffnet werden kann. Die Alternative war ein maßgeschneiderter Single-File-Download in jedem engen Raum, das ist, wie "download die signierte Kopie" kam zu bedeuten, drei verschiedene Dinge auf drei Bildschirmen in erster Linie zu bedeuten.

  25. · kamo-signer-monorepo

    Die Offenlegungsschiffe mit dem Code in 22 Sprachen

    "@kamo/esign-core" trägt nun die Verbraucher-Offenlegung selbst - sechs Klauseln, jede Sprache Produkt Zeichen in, und "consentDisclosure(locale, brand) ", um den Namen des Absenders in zu füllen. Es war in Kamo-signer Wörterbuch; es gehört hier aus zwei Gründen. Es ist auf ZWEI Oberflächen gezeigt, und eine Signer nach einem per E-Mail-Link muss den gleichen Worten zustimmen, wie ein Mitglied die Unterzeichnung der gleichen Dokument aus dem Inneren der Plattform. Und es ist VERSIONED: "CONSENT_DISCLOSURE_VERSION" ist geschrieben auf der Empfängerreihe zur Zustimmung Zeit und auf der Bescheinigung über die Fertigstellung gedruckt, so "Sie haben die Offenlegung akzeptiert", nennt einen bestimmten Text - was er nicht tun kann, wenn eine Übersetzungspipeline kann die Wörter überarbeiten, ohne dass jemand die Version angreift. Die Änderung des Wortlauts ist daher eine Versionsbeule hier UND im EsignCertificateService von ESigService. Alte Zertifikate benennen immer wieder die alte Version, was der Sinn des Mitseins ist. Der Veröffentlichungsschritt akzeptiert nun beide Anmeldeinformationen, die die Registrierungsstelle nimmt. NPM_PUBLISH_TOKEN geht als Träger-Token, das ist, was kamo-js verwendet und was laufen 12016 scheiterte mangels . Dieses Geheimnis existiert auf kamo-js und nicht auf diesem Repo. GIT_CLONE_TOKEN, das dieses Repo hat, ist ein Forgejo-Benutzer Token; die Paketregistrierung akzeptiert diese nur als BASIC auth und beantwortet eine nackte 401, wenn man als Überträger geschickt, ohne zu sagen, dass das System das Problem war. Es versucht den Träger zuerst, fällt zurück zu den Grundlagen, und beweist die Beglaubigung mit .npm whoami" vor dem Bau etwas - so ein Anmeldeinformationen, die nicht veröffentlichen kann, sagt so, anstatt scheiterte drei Schritte später innerhalb von "pnpm veröffentlichen".

  26. · ESigService

    Ein echtes Zertifikat und die drei Exemplare eines signierten Datensatzes

    Was die Flatten-Pipeline anhängte, war eine Seite pro Signatur mit sieben Zeilen: Name, E-Mail, Mitglieds-ID, Zeitstempel, Erfassungsmethode, IP, Benutzer. Kein Routing, kein Einverständnis-Rekord, nein Lieferung oder Ansicht Timeline, kein signiertes Dokument hash, keine Seitenzahlen - so konnte ein Leser nicht sagen ob sie alle davon hielten - und es existierte nur INSIDE die ausgeführte PDF, wo eine Partei der die Beweise für sich haben wollte, konnte nicht darauf eingehen. "EsignCertificateRenderer" zeichnet das Zertifikat: den Umschlag und beide Fingerabdrücke, die Parteien in Routing-Reihenfolge, und dann pro Partei die ganze Geschichte - Rolle, Unterzeichnungsreihenfolge, Status, WIE sie waren authentifiziert, die Timeline von Einladung zu Signatur, IP, Gerät, Erfassungsmethode, und welche Zustimmung Offenlegung, die sie in welcher Sprache akzeptiert. Es wird in BEIDE Stellen verwendet: die flache Pipeline Anhängen diese Seiten an das ausgeführte Dokument, und "EsignCertificateService" dient den gleichen Seiten als eigenständiges PDF. Ein Renderer absichtlich - eine zweite Umsetzung ist eine zweite Reihe von Prüfungen Aussagen, die mit dem ersten nicht einverstanden sein können, und das Einzige, was ein Audit-Rekord niemals tun kann, ist widersprechen sich selbst. Das Zertifikat ist REGENERATED, nie gespeichert. Jede Tatsache auf sie ist bereits langlebig in den Empfänger und Signaturreihen, so dass eine gespeicherte Kopie wäre nur eine zweite Sache, die abgestanden gehen kann; es bedeutet auch Ein vor heute unterzeichneter Umschlag erhält ein vollständiges Zertifikat, wenn jemand das erste Mal fragt. **************** auf vier Flächen - die Unterzeichner-Sitzung, eigene Mitarbeiter kopieren, das Dashboard des Absenders und die interne API mit "beide" als Reißverschluss kopieren. "/signed-document" bleibt daneben, weil sie bereits von der zugestellten Post verbunden und in andere Dienste serialisiert ist. Zwei Dinge, die die Tests gefangen, die lebende Mängel gewesen wären: - "Map.of" wirft NullPointerException auf einen Null VALUE, und die eine Anfrage mit einem Nullwert ist die eine, für die Zweig existiert: ein Umschlag, der nicht vollständig ist, hat keine ausgeführte PDF, so Auf einem Inflight-Umschlag wäre ein 500er statt eines Reißverschlusses gewesen, der die Zertifikat. Es degradiert zu jedere Hälfte jetzt existiert - jemand, der eine ins Stocken geratene Unterschrift jagt genau wer das Audit-Rekord braucht. - Der Zip ist STORED statt entleert (beide Mitglieder sind bereits PDFs komprimiert) mit Einträgen sortiert, so dass die gleichen Eingänge die gleichen Bytes produzieren und wer es erhält, kann es überprüfen. Die Test analysiert beide Mitglieder als PDFs, anstatt sie zu zählen: ein STORED-Eintrag mit einem falschen CRC entpackt zu Müll, der immer noch wie eine Datei aussieht. (es hat keine Leerzeichen in ihm, so dass ein Wort-nur Wrapper läuft es von der Kante), heißt es eine abwesende Zeitstempel als explizites em dash, anstatt die Zeile wegzuwerfen - "Signed: ." und keine Zeile überhaupt sind anders Aussagen, und nur einer von ihnen ist Beweise - und Stempel "Page n von m" nach dem Körper, weil bis der Körper fertig ist, weiß niemand, was m ist. Die Zustimmung trägt jetzt den Ort, in dem sie gemacht wurde, so sagt die Aufzeichnung, welche der zweiundzwanzig Übersetzungen der Offenbarung von . 7001(c) der Unterzeichner tatsächlich gelesen.

  27. · kamo-shared-library

    Protokoll WAS Zustimmung Offenlegung ein Unterzeichner akzeptiert, und in welcher Sprache

    "ConenstedAt" notiert, dass jemand ein Kästchen angekreuzt hat. 15 U.S.C. 7001(c) ist eine Liste von bestimmten Dingen Ein Verbraucher muss gesagt werden, VOR Zustimmung - das Recht auf Papier und jede Gebühr, wie zu widerrufen und was das kostet, was die Zustimmung abdeckt, wie ihre Kontaktdaten aktuell gehalten werden, und welche Hardware und Software benötigt, um die Aufzeichnungen zu lesen UND RETAIN. Diese Formulierung wird übersetzt in Zweiundzwanzig Sprachen und es wird überarbeitet werden, so dass ein Zertifikat nach einer Revision erstellt würde anders beschreiben die CURRENT-Offenlegung, während der Unterzeichner eine frühere akzeptiert hatte, in einem Sprache, die die Platte nicht nennt. "consent_disclosure_version" und "consent_locale" werden von ESigService im Moment der erste Annahme und nie überschrieben - Wiedereröffnung eines Signierlinks gibt Zustimmung und erneute Dating eine alte Annahme zu dem, was auch immer Formulierung ist aktuell ist die eine Sache, die diese Spalten zu verhindern existieren. DDL von Hand auf den Live-Cluster (ddl-auto ist überall "none" angewendet): ALTER TABLE esign_envelope_recipients ADD COLUMN IF NOT EXISTS consent_disclosure_version varchar(32); ALTER TABLE esign_envelope_recipients ADD COLUMN IF NOT EXISTS consent_locale varchar(16); Beide sind nichtig, und Zeilen, die eingewilligt, bevor sie existierten lesen als "nicht aufgezeichnet" auf der Zertifikat statt eine Version, die sie nie gesehen.

  28. · kamo-signer-monorepo

    Eine Signing-Oberfläche für beide Apps, und das weiße Etikett endlich malt

    Die Unterzeichnung UI existierte zweimal - hier, und handgekopiert in kamo-internal's legale Ausführung Assistentin . und die beiden waren in beide Richtungen gedriftet. "@kamo/esign-core", "@kamo/esign-ui" und "@kamo/doc-render" sind jetzt veröffentlichte Pakete, gebaut und in die Forgejo-Registry geschoben. Repo CI, und kamo-internal verbraucht sie anstelle seiner Gabel. Die Fusion nahm die bessere Hälfte der jeweils: Kamo-internal's store (Format Validierung, Lagerung auf "localStorage" statt auf die Gründe DELEGATED und NOT_YET). Komponenten nehmen ihre Strings als PROPS - die beiden Apps übersetzen aus zwei verschiedenen Wörterbüchern, und eine Komponente, die ihre eigenen Schlüssel herauspickt, kann nur in einem leben. VIER Defekte, und einer davon verursachte zwei der anderen: - **Jeder enthaltene MUI-Button in dieser App war transparent.** "AppProviders" bestanden "enableCssLayer: true", so dass alle MUI CSS in "@layer mui" und Tailwind Preflight gelandet, geladen unlayered by "@tailwind base", schlägt geschichtet CSS völlig unabhängig von der Spezifität. Gemessen: MuiButton-ContainedPrimary" berechnete "Hintergrund-Farbe: rgba(0,0,0,0) " mit "Farbe: rgba(0,0,0,0.87) ". So "Agree & continue" als Klartext gerendert, und "Abbrechen" und "Adopt & Sign" saß nebeneinander als zwei Läufe von grauen Text lesen als ein Satz, der ist genau wie es berichtet wurde. Preflight's .p { Marge: 0 - schlug die Zustimmungskarte .mb] aus dem gleichen Grund, weshalb alles auf dieser Seite zusammen lief. kamo-internal hat immer montiert seinen Emotion Cache unlayered; passend behebt er alles auf einmal. - **Das Logo war ein kaputtes Bild.** "ThemeLogo" fiel auf "/img/logo-full.svg" zurück, was diese App auch tut. nicht servieren, und malte der Browser-Peg-Seite in der Stelle des Senders. Es geht jetzt die Erweiterungsliste für BEIDE Varianten (eine Org, deren Marke ein .png ist angefordert, 404ed, und gestoppt dort ist genau das org), und wenn nichts auflöst, zeichnet es die Org Kurzname als Wortmarke, oder gar nichts, bevor ein Token eine Organisation benannt hat. - **Das Favicon und der Tab-Titel wurden nie gesetzt - auch die org's Marke CSS.** "DynamicMetaLoader" Rechenbeute = orgSlug || getThemeSlug()) im Effektkörper, bevor irgendein Token wurde bestätigt: "'" . Der "KAMO_THEME_REAPPLY"-Hörer hob den Moment an, in dem die einladende org WAS bekannt, re-ran eine Schließung über das gleiche "'" und kehrte an der Wache. config.json war daher Nie auf der Signierroute überhaupt geholt. Resolved per Anwendung jetzt, favicons REPLACE anstatt Anhängen, und der Titel ist "Sign - {Org Kurzer Name]" wie gefragt. Gegen einen echten Mieter verifiziert: "Sign - Sign Pink", vier org Favicons, die .png-Marke und "--color-primary: #452d4e" erreichen die Tabs, Checkboxen und Buttons - die MUI-Palette kann keinen "var() " aufnehmen, so dass jede Markenträgerin Komponente wird explizit darauf hingewiesen. - **Der Sprachwähler war ein Globus über einer Liste von Endonymen**, also ein Unterzeichner, der keine der Lateinische Schriften hatten nichts zu zielen. Flaggen und native Namen jetzt, die gleiche Tabelle und das gleiche Emoji font stack als Camo-internal's NavTop. Es erscheint auch auf den Begrüßungs-und Zustimmung Bildschirme: es verwendet nur mit der TopBar anzukommen, nachdem der Unterzeichner bereits eine englische Enthüllung gelesen hatte. Downloads bieten alle drei Exemplare, wo auch immer eines angeboten wurde: das ausgeführte Dokument, das Zertifikat der Fertigstellung, oder beides gezippt (Api/sign/download?what=). Das Zertifikat ist die Hälfte der aufnehmen, die eine Unterschrift einer Person zuschreibt; Übergabe nur der PDF-Hände über die Hälfte, die beweist nichts. Das Zustimmungstor trägt nun die sechs Klauseln 15 U.S.C. 7001(c) verlangt, dass ein Verbraucher angezeigt wird VOR Zustimmung, und die Lage wurde es in Fahrten mit der Zustimmung gemacht, so dass das Zertifikat kann angeben, welche der zweiundzwanzig Übersetzungen tatsächlich gelesen wurde.

  29. · kamo-signer-monorepo

    Render the Signature Date Feld, und machen lesenNur etwas bedeuten

    Drei Änderungen, von denen nur die erste ist neue Arbeit. **Signatur_date"** ist ein Feld, das ESigService in dem Moment ausfüllt, in dem der Signer Zeichen s nie der Browser, dessen Uhr eingestellt ist und welcher der eine Wert ist, den eine Partei hat Anreiz zur Fehleinschätzung eines Rechtsinstruments. Es gibt also keine Kontrolle dafür: die Signer sieht das Datum, es wird tragen, gesperrt, formatiert von der Sitzung eigenen Ort und Zeitzone, die die gleichen zwei Werte sind die Server-Formate mit dem gestempelten Datum. Die Vorschau und das ausgeführte Dokument können nicht widersprechen. **'readOnly" war dekorativ hier.** Es ist in der Design-Form, es ist ein Schalter in kamo-internal's properties Panel und ESigService's FieldCompletion ehrt es - und InteractiveField hat es nie angeschaut. Ein Feld markiert lese-only als gewöhnlich gemacht Eingabe der Unterzeichner könnte in frei eintippen, und da erforderlich-ness nicht auf einem durchgesetzt wird Nur lesbares Feld, dieser frei getippte Wert war der eine Wert auf der Seite nichts überprüft bevor es auf das Dokument gestempelt wurde. **signStore gezählt Lese-only-Felder wie erforderlich**, so dass ein Umschlag mit einem könnte auf einer Box ohne Kontrolle, während der SERVER die gleiche Vorlage berücksichtigt vollständig und hätte es akzeptiert. kamo-internal Portierung dieser Datei hatte bereits divergiert, um genau das zu beheben; die beiden stimmen wieder überein, und beide entsprechen nun FieldCompletion.

  30. · kamo-internal

    Ein Signature Date-Feld, und ein Senden, das zugibt, wenn nichts per E-Mail gesendet wurde

    **"Sent" war nicht dasselbe wie "geliefert", und der Dialog sagte nie so.** ESigService verwarf das Ergebnis jeder Einladung E-Mail, so dass ein Senden, dessen Post war abgelehnt noch zeigte "Dokument zur Unterschrift geschickt" - die genaue Fehler heute berichtet, wo einem Empfänger nie gesagt wurde, dass ein Dokument wartet. Der Dialog liest nun, was die senden tatsächlich gemeldet und, wenn eine Einladung nicht verlassen, stellt eine Warnung, dass STAYS up, benennt die Adresse, und trägt die Resend-Taste selbst statt senden der Absender, um die Zeile auf einem anderen Reiter zu finden. **Signature Date.** Ein neues Werkzeug in Signature Tools. Der Unterzeichner ist keine Kontrolle für it: der Server schreibt das Datum in dem Moment, in dem sie unterschreiben, in ihrer eigenen Zeitzone und der Organisation, so dass das, was die ausgeführte PDF sagt, nicht die Unterzeichnung sein kann Browser-Uhr. Der Designer zeigt es gesperrt, bietet keine Required/Read-only/Besornung Einstellungen dafür (es sind Fragen über eine Eingabe, die nicht existiert), und die Signer sieht das Datum, das es tragen wird, aus der eigenen Locale und Zone der Sitzung formatiert so die Vorschau und das Dokument zustimmen. Drei Dinge, die es auftauchte, die bereits kaputt waren: - **-readOnly" war dekorativ in beiden Signer-UIs.** Die Flagge ist in der Design-Form, es ist ein Schalter in der Eigenschaften-Panel und ESigService ehrt es - und keiner InteractiveField hat es sich jemals angeschaut, also ein "nur lesbares" Feld, das als gewöhnlicher dargestellt wird Eingabe der Unterzeichner könnte in frei eingegeben. Denn nichts zwingt erforderliche auf einem Read-Only-Feld, dieser freigetippte Wert war der eine Wert auf der Seite nichts geprüft bevor es auf das Dokument gestempelt wurde. - **kamo-signer's signStore zählte Read-only-Felder nach Bedarf**, also ein Paket Mit einem Tragen konnte nie fertig werden. Finish blieb deaktiviert und das "nächste Feld" Vorlage komplett. kamo-internal's Port hatte dies bereits behoben; die beiden sind sich nun einig miteinander und mit FieldCompletion. - **Nichts hielt die drei Kopien des Feldvokabels zusammen.** Zwei von ihnen sagen "Gezifferte VERBATIM, nicht divergen" in ihren eigenen Kopfzeilen und nichts erzwang es; ein Typ hinzugefügt, um eine allein macht als nackte Text-Eingabe überall sonst, leise, weil jeder Renderer einen Standardzweig hat. Es gibt jetzt eine Ratsche. Der Sendedialog beschriftet auch jede Empfängerzeile mit dem Signer-Slot, an den er bindet, und Prefills ein Slot, das die Vorlage bereits an jemanden heftet. Bindung ist durch POSITION, und Personal sah nie die Slots überhaupt - so auf einer Zwei-Parteien-Vorlage das einzige, was entscheiden wer die Blöcke des Arbeitgebers bekam und wer die des Angestellten bekam, war welcher Name zufällig Zuerst getippt, mit nichts auf dem Bildschirm, das so sagt.

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