Mabadiliko
Nini kipya.
Kila kuboresha jukwaa, kama ni meli.
· kamo-internal
Create a session for group chats opened by memberIds
ChatTool kupuuzwa props.memberIds: kundi wazi aliwasili na tupu userId na hakuna kikaoGuid, hivyo 1: 1 uumbaji dhamana mapema na CCM haijawahi kuwa na mkutano. Sasa wakati wanachama ni sasa ChatTool Hutatua kikao kupitia POST /sessions /chat / Find-or-kuunda {wanachama} (Njia ya kwanza ya ChatBox inatumia; backend inaongeza Yeye mwenyewe (mwenyewe). Orodha ya wanachama ni keyed kama kamba imara Athari haina tena moto juu ya utambulisho safu, na mtiririko wa guid kutatuliwa kupitia maandishi ya sasa ili dirisha la kikundi linachaguliwa kwa ya up.
· APIService
Public passthrough for email OAuth provider callback
Forward GET **************** to EmailService sessionlessly (strips auth, no redirect following), mirroring the RingCentral OAuth callback. This is the fixed public redirect URI registered with Microsoft/Google/Zoho.
· EmailService
Fixed public redirect + gateway-forwarded callback
Platform email OAuth (Microsoft 365 / Google / Zoho) had no valid public redirect URI: the redirect was derived from the request host, which in prod is the cluster-internal service address, and the only callback handler was POST-only. Add a single fixed, publicly-reachable redirect URI used for both the authorization request and the token exchange, and a public GET callback that the provider redirects the browser to (org is carried in state, so no session is required). Returns a self-closing HTML page.
· kamo-internal
Gate lead contact-info by assignment + new privacy rights
Mirror the three new CRM rights. On the lead detail page, mask/lock the Primary Contact, Mailing Address and Property Address fields for leads not assigned to the current member unless they hold the view/edit contact rights (and, for unassigned leads, VIEW_UNASSIGNED_LEADS); the state field is always visible. Switch the Assignment-pane reassign gate to ASSIGN_LEADS. On the /leads grid, gate the Unassigned filter option by VIEW_UNASSIGNED_LEADS, drop the now-empty email/street filters and the email column value, and show property-vs-mailing state via a flip.
· SecurityService
Enforce lead contact-info privacy rights
getAllLeads now returns the lean LeadListDTO and hides unassigned leads from members without VIEW_UNASSIGNED_LEADS. getLeadById masks contact info (state preserved) for leads not assigned to the caller unless they hold VIEW_LEAD_CONTACT_INFO_OTHERS, and 403s unassigned leads for those lacking VIEW_UNASSIGNED_LEADS. updateLead gates manual reassignment (ASSIGN_LEADS) and contact-info edits **************** counting mortgage property fields only when actually changed. God bypass.
· kamo-shared-library
Lead contact-info privacy rights + lean list DTO
Add three CRM rights (161-163): "Assigned To Others: View/Edit Lead Contact Info" and "View Unassigned Leads". Add LeadListDTO — a lean projection for the /leads grid carrying no contact info except the state field. Add **************** to strip phone/ e-mail/mailing+property address (state preserved) for gated readers.
· kamo-register
Send membership type from the /member and /team paths
/team signups create a TEAM_MEMBER (created PROSPECT, pending admin activation); /member signups create a MEMBER. RegisterFlow takes a memberType prop supplied by each path wrapper and includes it in the register request body; the backend creates the matching membership type.
· SecurityService
/team creates a TEAM_MEMBER (PROSPECT), /member creates a MEMBER
Public registration now honors the memberType the register site sends (from the /member vs /team path): /team creates a TEAM_MEMBER — as PROSPECT, so an admin must activate them before they can sign in (per the login gate) — and /member creates a base MEMBER. Applied to both the new-user and existing-user-reuse paths via createRegistrationMembership(). The securityProvider mirror is unchanged (always a base MEMBER, and skipped when the org is its own security provider). Previously every register signup created a base MEMBER, so a /team applicant landed as a MEMBER and then couldn't be added as a team member via the UI (409 already-a-member).
· SecurityService
Expose team-member work phone extension in team-members-contractors
The /leads Agent filter needs the work-phone extension to label options as "Name (ext 8080)". The extension already exists on TeamMember (getPhoneWorkExtension) but was not serialized — only the bare number was.
· kamo-internal
Request-support popup shows parent-org shared topics
Point the ticket-creation topic dropdown at the new /api/support/topics/available endpoint (own-org + parent-shared topics) so child-org users can contact their parent org's support via the parent's configured topic.
· MediaService
Surface parent-org shared topics in request-support popup
Child-org users could not see their parent org's shared support topics (assignToOwnOrg=false) when requesting support, because the popup only fetched own-org topics. Add GET /api/support/topics/available (own + parent-shared, no MANAGE_SUPPORT gate) and fix getParentOrgTopics to use the corrected AssignToOwnOrgFalse query. Filing against a parent-shared topic already routes the ticket to the parent org via createTicket.
· SecurityService
New child orgs inherit their parent's securityProvider
When creating a child org from kamo-internal, set the new org's securityProvider to the parent org's securityProvider (the org it's created under) instead of letting it default to self. Pairs with the data backfill that points every existing org's securityProvider at the top-level KamoCRM org, so membership mirroring engages for all orgs and their future children.
· kamo-login
Show account-linked notice on ?linked=1
Wakati wa kujiandikisha kuunganisha akaunti iliyopo kwa org mpya, inaelekeza hapa na · Linked = 1. kuonyesha "Tayari una akaunti ya Kamo - tumeongeza shirika hili kwa ya ya ya. Ingia na nenosiri lako lililopo. " na uendelee barua pepe. Tazama picha zilizopo Uunganisho wa barua pepe.
· kamo-register
Kushughulikia majibu yanayohusiana na akaunti kwa watumiaji wa sasa
When the entered email already belongs to an ACTIVE account, the backend links this org to it and returns ACCOUNT_LINKED. Route those users straight to sign-in (?linked=1) instead of the email-verification flow — they sign in with their existing password. New users and placeholder-claim signups keep the verify-email path.
· kamo-internal
Wire up member/team-member create + Prospect-gate UI
- Add the missing POST proxy routes /api/security/members/create and /create-team-member (these 405'd before, so creation never reached the backend). Status + JSON body pass through so the form's 409 "already a member" reuse handling works. - MemberCreateForm: fix the Membership Status field where the floating label overlapped the "Select a status" placeholder (shrink label + notched OutlinedInput), and add a note that only "Active" team members can sign in.
· SecurityService
Reuse existing users, mirror to securityProvider, gate team-member sign-in
Reuse (no duplicate accounts for the same person): - MemberCreateController now reuses an existing user by personal email case-INSENSITIVELY (was case-sensitive, missing legacy mixed-case emails). - SecurityController.register reuses an existing account instead of always creating a new user: already a member of the org -> 409 ALREADY_MEMBER ("please sign in"); existing ACTIVE account -> link the org, keep their password, return ACCOUNT_LINKED; unactivated placeholder (never verified AND never logged in) -> claim it with the typed password. A public form can never overwrite an active account's global password. securityProvider mirror: - Both internal member/team-member creation and public register now call **************** so every new membership also lands under the org's securityProvider org (as a base Member). Team-member activation gate: - login blocks a TeamMember whose membership status != ACTIVE with "Your account exists but is not active at this time." Regular members and active team members pass. Org-resolution hardening (X-Forwarded-Host siblings): - getExternalProviders and PortalController.resolveOrg use the alias-fallback resolver and drop the getServerName() fail-open (fail closed instead of leaking the platform org).
· kamo-shared-library
SecurityProvider membership mirror + reuse/patch groundwork
- **************** userId): mirror a user into the org's securityProvider org as a base Member (deduped; no-op when the org secures itself or the user is already there). Backs the rule that every new membership also lands under the platform/security-provider org. - **************** case-insensitive, multiplicity-safe email lookup for cross-org account reuse (email is not globally unique, so a single-Optional finder would throw). - **************** stop resetting securityProvider to self on every org edit (only backfill when null), so a child org keeps its link to the platform provider the mirror depends on.
· kamo-internal
Kazi za Wire tab kwa backend halisi + kufuta hatua + kuhesabu kuishi
Adds the Next proxy routes for /leads/{id}/tasks[/{taskId}] (the tab's getTasks/ addTask/updateTask/completeTask calls were 404ing), a deleteTask action in the task grid, and derives the 'Open Tasks' stat from the live task list so it stays current as TASK_CHANGED events refetch tasks.
· SecurityService
Kuongoza kazi za REST API + TASK CHANGED
Utekelezaji wa backend / maelekezo / maoni Tasks tab ilikuwa tayari wito lakini kwamba Hakukuwa na: GET / PUT / DELETE Kwa mfano, *** (LeadTaskController + LeadTask Service), org-guarded kama mwisho wa lock. Kila kuunda / kusasisha / kufuta hutoa TASK ChangeD hivyo maoni ya wazi ya kuongoza huburudisha kuishi.
· kamo-shared-library
Chombo cha LeadTask kwa majukumu ya kufuatilia
Backs the /leads/view Tasks tab (previously a frontend-only stub with no persistence). LeadTask (table LEAD_TASK) mirrors the frontend TaskItem shape **************** + LeadTaskDTO and repository. Task mutations broadcast TASK_CHANGED on the existing lead real-time channel.
· kamo-internal
Real-time datagrid + live lead view with per-pane edit locks
/leads grid is now fully live over websocket (NATS→STOMP): rows add/remove/update against the active filter automatically and changed cells blink once for other members' edits; the dead refresh button is removed. /leads/view/[id] applies live lead/history/task/stats updates and gains per-pane exclusive edit locks with a 'currently editing' roster, live countdowns, and auto-save on idle/disconnect. Adds useLeadsRealtime hook, leadLocksApi + Next proxy routes, and a reusable MemberContactCard (name + work extension, click-to-call softphone / open-chat). Lead updates merge null-preservingly so partial payloads never blank cells.
· MediaService
Org-guard the /topic/leads/rt/{orgId} realtime subscription
Cross-tenant SUBSCRIBE guard for the new lead real-time topic, mirroring the existing /topic/social/feed guard: a member may only subscribe to their own org's lead stream. The existing **************** already relays security.leads.rt.* to /topic/leads/rt/*, so no relay change is needed.
· SecurityService
Per-pane edit-lock REST API + auto-save sweeper
Adds /api/security/leads/{id}/locks **************** backed by LeadLockService: exclusive per-pane reservation, draft-buffering heartbeats that reset a 5-min idle TTL, and a scheduled sweeper that auto-saves the buffered draft and releases on idle-expiry or presence-grace timeout. Idle-expiry is emitted as absolute epoch millis. Config under lead.lock.* (configmap).
· kamo-shared-library
Real-time NATS publishing + per-pane edit-lock entity
Publish org-scoped lead events on security.leads.rt.{orgId} (created/updated/ deleted with changed-field keys, history-appended) so the /leads grid and /leads/view page can update live. **************** now returns the changed registry keys used to drive the UI blink. Adds the LeadPaneLock entity (table LEAD_PANE_LOCK, unique (LEAD_UID,PANE)) and repository backing the exclusive per-pane edit locks; the publisher emits the idle-expiry as absolute epoch millis (timezone-safe number) for the countdown.
· kamo-internal
Integrate primary tabs into the header on remaining Style A pages
Kufuatilia kwa sweep ya mtindo A→B, kufunika kurasa ambazo hazipitii Mipangilio ya kuona: KbNavBar inakuwa shujaa wa gradient na makala / Rasilimali / Mapitio ya tabs jumuishi na hatua ya makala mpya iliyorekebishwa; mpangilio Kupata background ya pamoja ya radial. Kwa mfano, *** Kichwa cha kichwa cha nyuma + General / Domains MUI tabs kuwa gradient shujaa kichwa na tabs jumuishi. - / maelekezo / maoni / [id]: tabo za rekodi za msingi zinahamia kwenye kichwa cha kichwaBar kichwa; mhariri wa hali ya inline / sub-status anapendekezwa kwa kichwa cha kichwa upande wa kulia kuenda kushoto (kinyume na mwendo wa saa). Kadi ya Posta.
· kamo-internal
Relocate bottom count bars into the header across social, imports tabs
Applies the vendors-tab treatment to the sibling CRM settings surfaces so the standalone "x • y" summary bar at the bottom no longer eats page real estate: - Social Connections & Automated Imports: header actions bottom-align and the count line stacks directly above the Refresh + Add/Create buttons. - Manual Imports sub-tabs (Past Imports, Import Templates): the count moves to the left of the lone Refresh icon (space-between), dropping the bottom bar.
· kamo-internal
Move vendor/product count above the header actions, bottom-align Refresh + Add Vendor
Recaptures the page real estate the standalone bottom summary bar used to occupy — the "x vendors • x products" line now stacks above the action buttons in the header, and the buttons bottom-align with the title block.
· kamo-internal
Integrate primary tabs into the page header (Style B) across Style A pages
Kila ukurasa wa gradient-hero ambao ulitoa tabo zake za msingi katika kadi tofauti Chini ya kichwa sasa inawafanya ndani ya kichwa cha gradient yenyewe, vinavyolingana Akaunti na / au msaada. - MipangilioView: bar tab wakiongozwa katika kichwa gradient (inaunganisha wote ~ 23) /settings / * kurasa mara moja; kusaidia safu, kichwa, backHref, na tab icon/glow/alignRight extras kuhifadhiwa; hideTitle bado anaendelea tabo zake. - / maelekezo / ripoti: tabs taarifa wakiongozwa na kichwa. - / biashara (PipelineView): tabo za soko (pamoja na icons za wima) zilihamia Nchi za soko moja / soko la ndani halijabadilika.
· kamo-internal
Back arrow in header returns to /leads
Add an optional backHref/backTooltip to SettingsView that renders a white back arrow left of the title, and wire the CRM settings page to send the member back to /leads. Tooltip reuses the existing localized leads.view.header.backToBrowser ('Back to leads') string.
· kamo-internal
Bold 'CRM Mipangilio:' prefix, separators bomba, hover-tu chini ya mstari kwenye viungo tab
Preface the CRM settings tab links with a bold 'CRM Settings:' label (new **************** key), separate links with ' | ' instead of a bare space, and switch the links from always-underlined to underline-on-hover.

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