Nenda kwenye maudhui
KAMOUniverse

Mabadiliko

Nini kipya.

Kila kuboresha jukwaa, kama ni meli.

  1. · SecurityService

    Extract RoleRightsSyncService and add sync-rights endpoint

    - RoleRightsSyncService: centralizes role rights sync logic for both OrgRole and **************** tables; startup and on-demand - DataLoader: delegates to RoleRightsSyncService.syncAll() on startup - SecurityRoleController: POST /sync-rights triggers sync without restart

  2. · kamo-shared-library

    Make role rights DTOs enum-driven and add security model rights sync

    - SecurityRoleDTO.fromOrgRole(): enumerate all RoleRightType values with DB settings as lookup — new rights appear with NOT_SPECIFIED automatically - **************** same enum-driven approach for security model default roles - OrgRoleRight.type: add explicit @Enumerated(EnumType.ORDINAL) annotation - **************** add insertIfAbsent native query for startup and on-demand sync

  3. · kamo-internal

    Allow multiple support ticket windows with ticketId deduplication

  4. · kamo-internal

    Add membership type chip and promote/demote to Membership Status card, remove session timeout field

  5. · SecurityService

    Add PATCH /membership-type endpoint for member promotion/demotion

  6. · kamo-shared-library

    Add native updateMemberType and ensureTeamMemberRow queries to MemberRepository

  7. · kamo-shared-library

    Add ALLOW_PROMOTING_MEMBERS right (id 132)

  8. · kamo-internal

    Promote POS and ESIG from PLANNING to COMPLETED stage

  9. · kamo-shared-library

    Promote POS and ESIG from PLANNING to COMPLETED stage

  10. · kamo-internal

    Show city and subdivision in ticket visitor geo row

    Display as "City, Region, Country (IP)" — nulls are filtered so it degrades gracefully when only country data is available

  11. · MediaService

    Expose city and subdivision in visitor geo lookup

    - Extend GeoResult record with city and subdivision fields - Switch SupportTicketService.toDTO() to use GeoLookupService (IP-level lookup) instead of country-only geoLocationRepository, so city and subdivision are populated from the matching GeoLite block

  12. · kamo-shared-library

    Add visitorCity and visitorSubdivision to SupportTicketDTO

  13. · kamo-internal

    Add tab URL params to /account page for deep linking and refresh persistence

    Tab state is now synced to **************** so links to specific tabs work and the correct tab stays selected on page refresh.

  14. · kamo-internal

    Show visitor flag, country, and IP in ticket header

    - Add visitorIpAddress, visitorCountryCode, visitorCountryName to SupportTicketDTO type - Render flag emoji + country name + IP address row in TicketHeader for public chat tickets

  15. · kamo-shared-library

    Add visitor geo fields to SupportTicketDTO

  16. · MediaService

    Show visitor flag and location in support ticket header

    - Inject PublicChatVisitorRepository and GeoLiteLocationRepository into SupportTicketService - Populate visitorIpAddress, visitorCountryCode, visitorCountryName in toDTO() via geo lookup - GeoLookupService already populates visitor.countryCode at session creation

  17. · kamo-marketing

    Replace native WebSocket with STOMP/SockJS in LiveSupportPanel

    - Add @stomp/stompjs and sockjs-client packages - Connect to media.{domain}/ws/public-chat via SockJS+STOMP instead of raw WebSocket to api.{domain} which was wrong host and wrong protocol - After STOMP connect, subscribe to /topic/chat/session/{guid} and notify backend via /app/chat/subscribe to activate NATS JetStream relay - Agent responses now flow: MediaController -> NATS -> ChatWebSocketController -> STOMP broker -> visitor's LiveSupportPanel in real-time

  18. · MediaService

    Fix end-to-end public chat real-time via STOMP/NATS

    - Remove internalAuth requirement from PublicChatWebSocketInterceptor so visitors can connect directly using only their sessionToken - Include visitor displayName as senderName in ChatMessageDto so agent sees who is messaging them in TicketChat - Include senderName in STOMP messageMap forwarded from NATS subscription so both agent and visitor see sender names in real-time messages

  19. · kamo-shared-library

    Add senderName to ChatMessageDto for support chat display names

  20. · kamo-internal

    Auto-open support ticket popup on NEW_TICKET NATS notification

    When a new support ticket arrives, the backend now sends a NEW_TICKET STOMP message in addition to PENDING_COUNT. The SupportCountContext handles it by dispatching tool:open so the ticket chat window pops up automatically without the agent having to navigate to /support.

  21. · kamo-marketing

    Add /contact-confirmed page with animated hero, timeline, and CTAs

    Replace inline success message on contact form with a dedicated premium confirmation page: animated SVG checkmark with particle burst, 'What Happens Next' 3-step timeline, and 'While You Wait' CTA cards. All 23 locale files updated with new contactConfirmed i18n keys.

  22. · kamo-internal

    Add org settings section (timezone, age req, content flags, description, alias); remove Preview/AddDomain buttons

  23. · kamo-internal

    Redesign LabelManager — inline section editing, fix broken save, read-only default

    Rewrites LabelManager.tsx with per-section read/edit pattern. Fixes the broken save button (validateForm blocked saves because contact/company fields were never populated from API). Removes global form submit, validateForm, errors state, previewMode, and scattered Save buttons. Each section now loads data from API on mount, shows clean read-only rows by default, and has an inline Edit/Save/Cancel flow. All seven sections (Company Info, Branding, Background Images, Contact Info, Custom Labels, Social Links) save independently with no cross-field validation blocking.

  24. · EmailService

    Add KamoMail domain validator to block cross-tenant email addresses

    Introduces KamoMailDomainValidator component that checks, at service layer, whether the submitted email domain matches the org's verified default domain when KamoMail is the active provider. Injected into MailboxProvisioningService, AliasService, and SharedMailboxService — called before any provisioning occurs. Returns 403 FORBIDDEN if the domain does not match.

  25. · kamo-internal

    Enforce KamoMail domain restriction on mailbox, alias, and shared mailbox creation

    When KamoMail is the email provider, members can only create mailboxes, aliases, and shared mailboxes using the org's verified default domain. Enforcement at three independent layers: frontend UI (prefix+locked domain input with disabled state when no domain), Next.js proxy (parallel provider + security domain check before forwarding), and Java service layer.

  26. · kamo-marketing

    Read logoFullExt from config.json for dynamic logo extension

  27. · kamo-register

    Read logoFullExt from config.json; fix site.webmanifest path to favicon subdirectory

  28. · kamo-login

    Read logoFullExt from config.json for dynamic logo extension

  29. · kamo-internal

    Org theme provisioning — WebSocket hook, provision panel, LabelManager wiring, DNS trigger, bg resize, ThemeConfig context

  30. · MediaService

    Relay NATS theme provision progress to STOMP WebSocket

Ulimwengu wako unasubiri.

Kuanza bure katika dakika. Ongeza bidhaa wakati wowote wewe ni tayari - hakuna uhamiaji, hakuna logins mpya.

Bure milele - hakuna kadi ya mkopo inahitajika