Changelog
Co nowego.
Każde ulepszenie platformy, jak to wysyła.
· SecurityService
Wyciąg RoleRightsSyncSyService i dodaj punkty końcowe praw syndobowych
- RoleRightsSyncSnasSynService: centralizacja logiki synchronizacji praw ról dla obu OrgRole tabele; startup i na żądanie - DataLoader: delegaci do RoleRightsSyncService.syncAll() w celu uruchomienia - SecurityRoleController: POST /sync-rights triggers triggers without restart
· kamo-shared-library
Uczyń prawa do ról DTO enum i dodaj synchronizację praw do modeli zabezpieczeń
- SecurityRoleDTO.fromOrgRole(): wylicz wszystkie wartości RoleRightType z DB Ustawienia jako lookup — nowe prawa pojawiają się automatycznie z NOT_SPECIFIED - - to samo podejście oparte na enum W przypadku domyślnych ról modelu bezpieczeństwa - OrgRoleRight.type: dodaj wyraźną adnotację (EnumType.ORDINAL) - dodaj insert IfAbsent natywny Zapytanie odstartowa i synchronizacja na żądanie
· kamo-internal
Zezwalaj na wielokrotne obsługę okien biletów z deduplikacją ticketId
· kamo-internal
Dodaj chip w rodzaju członkostwa i promuj / zemotuj do karty statusu członkostwa, usuń pole timeout sesji
· SecurityService
Dodaj PATCH / punkt końcowy typu członkostwa dla promocji / emocji członków
· kamo-shared-library
Dodaj natywną aktualizacjęMemberType i upewnij się, że zapytaniaTeamMberRow do MemberRepository
· kamo-shared-library
Dodaj ALLOW_PROMOTING_MEMBERS w prawo (id 132)
· kamo-internal
Promowanie POS i ESIG od PLANNING do etapu COMPLETED
· kamo-shared-library
Promowanie POS i ESIG od PLANNING do etapu COMPLETED
· kamo-internal
Pokaż miasto i podpodział w bilecie odwiedzającym geo-rzęd
Wyświetlanie jako „Miało, region, kraj (IP)” — nulls są filtrowane tak, aby były filtrowane Degraduje się z wdziękiem, gdy dostępne są tylko dane krajowe
· MediaService
Expose miasto i podział w geo-szukajcie dla odwiedzających
- Rozszerz rekord GeoResult z polami miasta i podziału - Przełącz SupportTicketService.toDTO() do użycia GeoLookupService (poziom IP Lookup) zamiast geolokalizacji tylko dla krajuRepozytorium, tak miasto i miasto Podział jest zamieszkany z pasujących bloków GeoLite
· kamo-shared-library
Dodaj odwiedzającegoCity i odwiedzającegoSubdivision do SupportTicketDTO
· kamo-internal
Dodaj kartę Params URL do strony /konkonto, aby uzyskać głębokie połączenie i odświeżanie trwałości
Państwo Tab jest teraz zsynchronizowane z - więc linki Na określone karty praca i prawidłowa karta pozostają zaznaczone na odświeżaniu strony.
· kamo-internal
Pokaż flagę dla odwiedzających, kraj i adres IP w nagłówku biletów
- Dodaj visitorIpAddress, odwiedzającyCokrajod, odwiedzającyCountryName do SupportTicketDTO typu - Render flaga emoji + nazwa kraju + wiersz adresu IP w TicketHeader na publiczne bilety
· kamo-shared-library
Dodaj pola geograficzne odwiedzających do SupportTicketDTO
· MediaService
Pokaż flagę dla odwiedzających i lokalizację w nagłówku biletu wsparcia
- Wstrzyknąć PublicChatVisitorRepository i GeoLiteLocationRepository do SupportTicketService - Populate visitorIpAddress, odwiedzającyCokrad, odwiedzającyCountryName w toDTO() za pośrednictwem geo lookup - GeoLookupService już zaludnia gość.countryCode w tworzeniu sesji
· kamo-marketing
Wymień natywny WebSocket STOMP/SockJS w LiveSupportPanel
- Dodaj pakiety .stomp/stompjs i sockjs-klient - Połącz się z mediami.-domain/ws/public-chat przez SockJS+STOMP zamiast Surowy WebSocket do api.-domain, który był złym hostem i niewłaściwym protokołem - Po połączeniu STOMP zapisz się na /topic/chat/session/'guid' i Powiadom backend via /app/chat/subscribe, aby aktywować przekaźnik NATS JetStream - Odpowiedzi agentów teraz flow: MediaController -> NATS -> ChatWebSocketController -> Broker STOMP -> LiveSupportPanel gościa w czasie rzeczywistym
· MediaService
Naprawiać czat publiczny w czasie rzeczywistym przez STOMP / NASS
- Usuń wewnętrzny wymóg z PublicChatWebSocketInterceptor Aby odwiedzający mogli połączyć się bezpośrednio przy użyciu tylko za pomocą sessionToken - Dołącz wyświetlacz odwiedzającegoName jako senderName w ChatMessageDto tak agent Widzi, kto wysyła je do wiadomości w TicketChat - Dołącz nadawcaName w wiadomości STOMPMap przesłany z subskrypcji NATS Tak więc zarówno agent, jak i odwiedzający widzą nazwy nadawcy w wiadomościach w czasie rzeczywistym
· kamo-shared-library
Dodaj nadawcęName do ChatMessageDto, aby uzyskać nazwy czatu
· kamo-internal
Auto-otwarty bilet wsparcia wyskakującego okienka na NEW_TICKET NATS
Kiedy pojawi się nowy bilet wsparcia, backend wysyła teraz NEW_TICKET Komunikat STOMP oprócz PENDING_COUNT. SupportCountContext Obsługuje go, wysyłając narzędzie:otwienie, aby wyłaniało się okno czatu biletowego Automatycznie bez konieczności nawigowania do /support.
· kamo-marketing
Dodaj stronę potwierdzaną /kontaktową z animowanym bohaterem, osią czasu i CTA
Zastąp komunikat sukcesu w linii w formularzu kontaktowym dedykowaną premią Strona z potwierdzeniem: animowany znak kontrolny SVG z pęknięciem cząstek, "What Happens Następne "dworód" karty CTA i karty CTA "While You Wait". Wszystkie 23 pliki locale Zaktualizowano o nowy kontakt Potwierdzone klucze i18n.
· kamo-internal
Dodaj sekcję ustawień org (strefa czasowa, wiek req, flagi zawartości, opis, alias); usuń przyciski Podgląd/AddDomain
· kamo-internal
Przeprojektuj LabelManager — edycja sekcji inline, naprawę uszkodzonego zapisu, domyślnie tylko do odczytu
Przepisywanie etykietManager.tsx z wzorami odczytu/edit. Naprawia zepsutą oszczędność Przycisk (validateForm zablokował zapisy, ponieważ pola kontaktowe / firmy nigdy nie były wypełnione Z API). Usuwa globalny formularz przesłania, walidacjaForm, stan błędów, podglądMode i Rozproszone przyciski Zapisz. Każda sekcja ładuje teraz dane z API na górze, pokazuje czysto Domyślnie wiersze od read-only i ma przepływ edycji/zapisu/kanowania. Wszystkie siedem sekcji (Informacje o firmie, Branding, obrazy w tle, Informacje kontaktowe, etykiety niestandardowe, linki społecznościowe) Zapisuj niezależnie bez blokowania walidacji poprzek pola.
· EmailService
Dodaj walidator domeny KamoMail, aby zablokować międzystolec adresy e-mail
Przedstawia komponent KamoMailDomainValidator, który sprawdza, w warstwie serwisowej, czy przesłana domena e-mail pasuje do zweryfikowanej domyślnej domeny org. Gdy KamoMail jest aktywnym dostawcą. Wstrzyknięte do MailboxProvisioningService, AliasService i SharedMailboxService — dzwonią przed jakimkolwiek zapisem. Zwraca 403 FORBIDDEN, jeśli domena nie pasuje.
· kamo-internal
Enforce Ograniczenie domeny KamoMail w skrzynce pocztowej, alias i tworzeniu wspólnej skrzynki pocztowej
Gdy KamoMail jest dostawcą poczty e-mail, członkowie mogą tworzyć tylko skrzynki pocztowe, aliasy i udostępnione skrzynki pocztowe przy użyciu zweryfikowanej domyślnej domeny org. Egzekwowanie w trzech niezależnych warstwach: Frontend UI (dotyczynie prefix + zablokowana domena wprowadzane ze stanem wyłączonym, gdy nie ma domeny), Next.js proxy (równoległy dostawca + kontrola domeny bezpieczeństwa przed spedycją) i Java warstwa serwisowa.
· kamo-marketing
Przeczytaj logoFullExt z config.json dla dynamicznego rozszerzenia logo
· kamo-register
Odczytaj logoFullExt from config.json; fix site.webmanifest path to favicon subdirectory
· kamo-login
Przeczytaj logoFullExt z config.json dla dynamicznego rozszerzenia logo
· kamo-internal
Orgowanie tematów — WebSocket hak, panel rezerwowy, okablowanie LabelManager, wyzwalacz DNS, bg resize, kontekst ThemeConfig
· MediaService
Relay NATS theme provision progress to STOMP WebSocket

Twój wszechświat czeka.
Rozpocznij bezpłatnie w kilka minut.Dodaj produkty, kiedy tylko będziesz gotowy — bez migracji, bez nowych logowań.
Bezpłatne na zawsze — nie wymaga karty kredytowej