Ascunde cardul ATF în întregime atunci când toate câmpurile sunt blocate după modelul aplicat
Proba de evaluare a modelului principal și fixați ID-ul model org aplicat
- Înlocuiți poarta aplicatăModel.Source cu o sondă directă de /api/security/master-model on mount; r.ok=fals (409) means the org este guvernată de un tip de suc...
Gate censorship tab options by applied model constraints
- Hide EDIT MASTER MODEL button when org is governed by a branch type (use appliedModel.source instead of unreliable org context branchTypeID) - Hide ATF fiel...
Mark-as-read and message fetch for shared/member mailboxes
Classic mode now loads shared mailbox messages via the correct /messages/{folder} endpoint (was calling the non-existent /conversations endpoint). Fetching a fu...
Mark-as-read for shared and member mailboxes
EmailController.setFlags now accepts an optional mailboxId query param and routes through resolveProviderWithMailbox so member-mailbox flags are set against the...
Use extensionId as external ID, not Relay node id
FreePBX returns the same Relay id (ZXh0ZW5zaW9uOg== = "extension:") for every extension because the id field is not populated. Using it caused all extensions to...
Handle IMAPInputStream in getMessage pentru a preveni ClassCastException
JavaMail poate returna un IMAPInputStream în loc de un string decodat de la part.getContent() atunci când conținutul mesajului nu a fost pre-inventat. ă mulaje ...
Crește TTL de la 90 la 300 pentru a preveni fals OFFLINE pe trepidație filă
Rescrie toate întrebările/mutările GQL împotriva introspecţiei de schemă live
Verificat fiecare nume de câmp și tip împotriva schema FreePBX 17 reale. Set complet de corecții: Întrebări: - aduceţiAllExtensii: eliminaţi câmpul inexistent ...
Pasează dosarul selectat către ThreadDetailView astfel e-mail:foldere schimbate cu un dosar valid
conversation.folder este întotdeauna nedefinit deoarece Conversația JavaEntity are foldIds (text[]) nu este un câmp de coarde. Acest lucru a cauzat sarcinaThrea...
Numele de câmp GrafQL corect pentru a aduceAsteriskDetails
FreePBX API întoarce "Aţi vrut să spuneţi "AsteriskDetails"? verifică interogarea și accesorul traseului de date în consecință.
Adăugați antetele XHR/Accept și răspunsul String parsing la clientul GraphQL
Același model ca FreePBXTokenCache: adăugați X-Requested-Cu + Accept: aplicație/json pentru a suprima răspunsurile de redirecționare HTML FreePBX, și comuta toa...
Sincronizează căsuţa poştală dropdown în căsuţa poştală primară la încărcare
Dropdown implicit la primul element listă deoarece selectat Mailbox inițializat fără o cutie poștalăId, ceea ce face ca actualValue să se rezolve la "personal" ...
Mărește limita de încărcare a fișierului la 500MB
Primavara Boot implicit capac piese multipart la 1MB, provocând imagini de fundal uploads to fail with 500 in request.getParts(). Potrivire serviciu de securita...
Erori HTTP de suprafață, astfel încât defecțiunile de încărcare sunt vizibile
Consolă silențioasă înlocuită.Avertizare cu o eroare aruncată la starea non-OK, astfel încât utilizatorul vede motivul de eșec real (status + răspuns organism) ...
Adăugaţi antetele Accept+XHR şi răspunsul la coarda brută pentru criteriul final de evaluare
FreePBX returna textul/html când a fost apelat prin cluster DNS deoarece Antet gazdă nu se potrivește cu PBX HOSTNAME configurat. Adăugarea Accept: aplicație/js...
Drive minimizat-tab intrare prin controale de animație
Comutarea animației = {...} la animație={tabControale} a rupt intrarea animație: tabControale nu are o țintă coadă pe montare, astfel încât butonul a rămas la p...
Coarde OAuth2 corecte pentru API FreePBX
Domeniul de aplicare FreePBX sunt identificatori de nivel superior: "gql" (toate GraphQL) și "rest" (toate odihnă). Formatul "gql:read" înseamnă GQL pentru un m...
Expune portul 8088 direct pe serviciul ClusterIP
Serviciul a avut doar port 80→8088 cartografiere. Servicii interne care utilizează - Nu. (de exemplu, VOIPservice API token cereri) au fost calendarul pentru că...
Trust backend waitingCount, drop client offsets
Platforma în așteptareCount este acum necitit-based (contele SPECIAL TICKET sesiuni cu mesaje mai noi decât ultima vizionare a proprietarului). Când agentul se ...
Adaugă eșuează2ban-config ConfigHartă pentru k1m1
Referințe de desfășurare eșuează2ban-config ConfigMap (jail.local + asterisc-security.conf) dar nu a existat, blocând pod la Muntele Volume. Setare și prevenire...
MarkAsRead după ce agentul trimite atât de ultimele avansuri vizionate
Pe biletele de sprijin, atât mesajele vizitatorilor, cât și ale agenților sunt stocate sub Același membru al sistemului, astfel încât interogarea necitit-conte ...
Bilete de sprijin au nevoie de numărătoare necitite agnostică a membrilor
Mesajele vizitatorilor de pe biletele de sprijin sunt stocate sub acelaşi sistemMember pe care agentul o autentifică, astfel încât sesiunea CHAT existentă să nu...
Pass folder to chargeThread retry buton
take-uri de încărcareThread (fisier, folder); numai butonul de retrimitere a stării de eroare a trecut firId, ruperea cladirii kamo-interna. Meci de apel la sem...
Corectează JsonIdentitatea Info proprietate de la 'uniqueId' la 'id'
Entitatea membru declarată @JsonIdentityInfo[property = "uniqueId") dar Câmpul principal principal principal este numit "ID." Jackson aruncat "nu poate găsi o p...
Eliminați garda SSR care cauzează neconcordanțe de hidratare; picătură SockJS pentru WebSocket nativ
- Ero.tsx: eliminați tipul de verificare a ferestrei în jurul ParticuleField are ssr:fals astfel încât paznicul a produs un server / client nepotrivire copac (...
Indicatoare clare necitite la deschiderea conversației
ThreadDetailView expedies e-mail:folder-changed after markConversationRead reuseste astfel MailButton restabileste insigna inbox invtop conta. ConversațieListVi...
Move CORS to Traefik via kamo-middlewares, remove in-app CorsFilter
The CorsFilter @Bean in the Spring app was silently not applying headers after WebConfig.java was removed. CORS is now handled entirely at the Traefik layer by ...
Use /public/{mainDomain}-{tld} path matching actual MinIO bucket layout
The getThemePath() was generating /domain/{tld}/{split}/kamosite paths that don't exist in MinIO — theme files live in the public bucket under kamocrm-com/, bad...
Break min-w-0 chain to contain email scroll in body column only
Add min-w-0 to outer container and main content flex div so flex children cannot expand to email min-content width, which was causing the page-wide horizontal s...
Furnizorii de înaltă peste ToolProviders
Aceeași cauză rădăcină ca ChatWebSocketProvider elevator: SuportTicketWindow apeluri *************** și apeluri ChatBox useUnread().markAsRead(), dar ambele fer...
Adaugă supresieHydrationAvertizare și repara imagini disfuncționale
supresieHydration Warning on <html> previne eroarea de reacție #418 cauzată de browser extensii (ex. traducere, modul închis) atribute mutante html între SSR și...
Permite/domeniul/prefixul traseului pe tema IngressRoute pentru CORS
Tema config la tema.kamocrm.com/domeniu/... nu a fost potrivit de regulile de rută existente (numai/public/ și/internă/au fost permise), așa că Traefik a return...
Eliminați antetele duplicate CorsFilter și benzi în amonte CORS în poarta de acces
WebConfig.java a definit o a doua fasole CorsFilter care concurează cu CorsConfig. Java Bean, riscând duplicatul scrie. A şters-o ca să existe doar un singur Co...
Eliminați duplicatul boabelor de CorsFilter care cauzează header dublu Access-Control-Allow-Origin
Boabele explicite de CorsFilter au cauzat un al doilea filtru CORS alături de primăvară Suport CORS încorporat de securitate (care utilizează CorsConfigurationS...
Elimină declarațiile consolei de depanare.log și adaugă rutele lipsă
Elimină toate depanările temporare adăugate în timpul urmăririi WebSocket de la ChatBox, TicketChat, MemberItem, ChatTool și utilizațiChatWebSocket; adăugați pa...
Preveniți antetul mesajului de la extinderea coloanei pe adrese lungi
Copilul flex stânga header a avut nici un min-w-0, atât de lung e-mail de nerupt adresa din From/To/Cc a forțat lățimea de conținut min să crească, târâre antet...
Hoist ChatWebSocketProvider deasupra ToolProviders
ToolDock (și ferestrele sale instrument cum ar fi SuportTicketWindow → TicketChat) este montat în interiorul ToolProviders, care stă ABOVE PrezențăWrapper în co...
Drop Shadow DOM în e-mail rander atât de deversare-x-auto focuri
Shadow DOM a fost cauza rădăcină. Conținutul de e-mail larg (tabele fixe) în interiorul copacului umbră pictat trecut gazda fără a contribui la cutia gazdei, as...
Aliniază calea de import ChatWebSocketContext pentru furnizorul de potrivire
TicketChat și ChatNotificareAscultătorul a importat contextul prin intermediul "@/app/contexts/......" alias în timp ce PrezenţaWrapper (furnizorul) o importă p...
Forta umbra gazda de izolare cu stiluri inline + conține: aspect
Clasa pe baza de supraîncărcare-x-auto pe gazda umbră nu a fost câștigătoare fiabil împotriva umbrei ':host { all: iniţial}' resetat, atât de larg e-mail conţin...
Derulați conținut de e-mail larg în interiorul umbra DOM, nu în afara
Încercările anterioare de a adăuga supraîncărcare-x-auto la lumina strămoșilor DOM nu a putut prinde conținut de e-mail larg, deoarece umbra copacului vizual re...
Utilizați getAstachments () pentru a se potrivi cu tipul de ambalaj boolean
***************** este un ambalaj Boolean, deci Lombok generează getHasAttachments() not isHasAttachments(). Doar acesta din urmă există pentru boolean primitiv...
Extinde scanarea depozitului JPA pentru a include pachetul comercial
Noul librar kamo-împărtășește aduce în *************** care necesită - Nu. (în com.kamo.z.shared. commerce). MediaService doar scanat numodifica.dao.repos, deci...
Restaurare HashMap import în ChatWebSocketController
Refactorul anterior a eliminat importul HashMap dar manerTyping metoda construiește încă un HashMap pentru sarcina utilă eveniment de dactilografiere, cauzând F...
Adăugaţi min-w-0 la e-mail conţinut div atât de supraîncărcat-x-auto incendii
Fără min-w-0, dimensiunea minimă implicită a copilului flex-col:auto se rezolvă conţinut-min, permiţând tabele largi de e-mail extinde div peste coloana lățimea...
Elimină apelul de conectareStomp în message
Atunci când primul mesaj creează o nouă sesiune, onSessionCreated updates recuzită care declanşează utilizareaEffect pentru a apela ConnectStomp. Apelul inline ...
Creează activ consumatorul NAT la crearea sesiunii pentru a preveni pierderea mesajelor
Din episoadele anterioare: trimis /app/chat/subscribe. Cu DeliverPolicy. Nou, orice mesaje publicate înainte de consumatorul există sunt permanent pierdute Nic...
Închide decalajul de reconectare care cauzează mesaje în timp real scăzute
Eliminați ChatBox. Anterior, fiecare reconectare WebSocket declanșat efectul Curățare care a numit unsubscribe(), șters sesiunea din harta abonamentului, și tr...
Permite utilizatorului sistemului să gestioneze branding-ul org și să stabilească logo-ul auth
- Adăugați bypass-ul utilizatorului sistemului ca prim paznic în canManageOrgBranding astfel platforma utilizatorul sistemului are control complet asupra tuturo...
Ca ceea ce vezi de transport maritim?
Fiecare dintre aceste actualizări aterizează automat în spațiul de lucru. Începe gratuit și urmăriți-l crească săptămână după săptămână.