Mergi la conținut
KAMOUniverse

Jurnal de schimbări

Ce e nou.

Fiecare îmbunătățire a platformei, pe măsură ce se livrează.

  1. · VOIPService

    Refactor furnizor multi-stanță + full FreePBX + Flowroute SMS

    Modificarea modelului de bază: un org → multe VoipProviderInstances (a fost: un per org). Fiecare furnizor de apeluri API este acum spectaculos. Interfață telefonProvider: - Noi metode de extensie/utilizator/dispozitiv CRUD + audio/transcriere vocală. - noi steaguri de capacitate (extensieManagement, userManagement, dispozitivManagement, mesaj vocalTranscriere). Implicit arunca *************** (HTTP 501) astfel încât furnizorii de cabluri să nu se rupă. Controalele Frontend obține Capabilități() să ascundă/dezactiveze acțiunile pe furnizor. - Excepție furnizor (HTTP 502) pentru eșecuri externe-dependență. TelefonProviderFactory: - Obține INSTRUMENT (UID) / *************** înlocui moștenirea Obțineți Provider (orgId lung); obțineți PrimaryForOrg (lung) păstrat pentru site-urile de apel moștenite (CallController, CapabilityController, SipController, webhook inbound). - RingCentral Oauth tokens acum vizate de (orgId, furnizor, instantId) astfel unul org poate autentifica mai multe misiuni independente RingCentral. - FreePBX construction reads config json → {baseUrl, clientId, clientSecret, ignoraSslErrors} și instanțiează un FreePBXGraphQLClient dedicat. RingCentral (RingCentralProvider): - Constructorul ia exemplu pentru context jurnal. - Metode noi: listaExtensii / CreareExtensie / ActualizareExtensie / stergeExtensie; listeUser / createUser / updateUser / stergeUser (modele RC) ambele ca tip=Extensii de utilizare); listaDevices / createDevice / updateDevice / Device; aduce VoicemailAudio (fluxuri de conținut de atașament) și Adu-mi mesaj de la VoiceTranscription. FreePBX (FreePBXProvider) - Client-credentials OAuth2 token caching via FreePBXTokenCache (~1h TTL, Auto-refresh pe 401, per-integrare). - FreePBXGraphQLClient: GraphQL + REST transporturi cu optional Skip-SSL-verificare pentru auto-semnat pe-prem PBXes. - Extensii, utilizatori utilizatori, dispozitive Endpoint Manager, mesaje vocale listă/marcă/ștergere + flux audio, istoricul apelurilor CDR, acreditări SIP derivat din secretul pjsip al extensiei, sanatatea prin aduceAsteriskInfo. - SMS nesusţinut în mod explicit (capability sms=type) SMS de transport. SMS de rută (FlowrouteTextProvider): - Mesaje v2.1 API cu HTTP Basic (accessKey, secretKey). - Sonda de sanatate loveste GET / numbers?limit=1. - Înregistrat cu BulkTextProviderFactory prin intermediul unei noi valori enum FLOWROUTE. Controlori: - VoipInvestmentController (renumit de la FurnizorConfigController) la /api/voip/instanțe cu test/sincronizare perstanță. Secretele redactate în GET răspunsuri ('***'); fuzionarea-actualizează permite IU să redacteze câmpuri rotunde fără clovn certificate stocate. - BulkTextIntroducereController (renumită din vracTextConfigController) CRUD la /api/bulktext/instances with test / test-send / send. - OauthController rescris, de exemplu-scoped Oauth: start, callback, status, Deconectați toate ia exemplu. - SmsController rezolvă cazul de la membru. exempluId → org primar, atașați la conversaţii susţinute. - CallController / CapabilityController / SipController cad înapoi la org prima instanță activă pentru criteriile de evaluare a unei singure situații moștenite. Servicii: -CentralSyncService: pull-through cache sinchne/extensii/utilizatori/dispozitive/ mesaje vocale copiate de la furnizor la mese locale, randuri care lipsesc moale Necunoscuţi. Fiecare sub-pas înfășurat astfel încât o capacitate nesuportat nu eșuează întreaga sincronizare (de exemplu FreePBX no-SMS + has-extensions). - VoipMessageService: toate căile de conversaţie/mesaj se propagă instantId. Teste: teste pre-existente VoipProviderConfig-specifice eliminate (acoperite tipuri redenumite; rescrierea nu se încadrează în domeniul de aplicare al specificaţiilor de proiectare §10 În acest sector se adaugă infrastructura). Construiește verde cu actualizat kamo-shared-library.

  2. · InitializerService

    Migrație multi-integrare telefon/furnizor SMS

    Rulează după Hibernate ddl-auto:actualizarea creează noi tabele (VOIP PROVIDER INSTANCE, BULK TEXT PROVIDER INstanCE, PHONE EXTENSION, PHONE END USER, PHONE DEVICE, TELEFON VOICEMAIL, SYSTEM CONFIguration) de la entitățile redenumită/nouă în kamo-împărtășit-library comite 232d731. Se ocupă de ceea ce Hibernate nu poate: - Copiați rânduri de la moștenirea voip provider config / vrack text provider config în noi * instance tables, sintetizating instance name from provider type. - Drop NOT CONFIGURED (ordinal 0) rânduri - Aruncă moștenirea acum-gol * config tabele. - Backfill instance id on member voip config, voip conversations, and kamotokens.org oauth token folosind cel mai vechi caz activ al fiecărui org. - Reconstructie org oauth token index unic de la (org id, furnizor) la (org id, provider, instant id) astfel încât mai multe cazuri RingCentral per org munca. - Drop indexuri unice orfane din voip conversații + tabele de instanță furnizor. - Seed the system configuration singleton row (voip sync interval 10min implicit, adevărat activat) fila VOIP & SMS. Toate declarațiile idepotent; re-running pe DB deja migrat este sigur. Ordin 20 după SchemaCleanupRunner (1), OrganizationTypeRemovalRunner (2), KamoCRMAgeReqUpdateRunner (10).

  3. · kamo-shared-library

    Fundaţia de sisteme multi-intestinale de telefonie/furnizor SMS

    - Redenumește VoipProviderConfig → VoipProvider CONFIG; picătură UNIQUE(org id), adaugă instance name, config json, last sync at, last sync error. - Redenumește BulkTextProviderConfig → BulkTextProviderInstance; același tratament multi-integrare. - entitati noi: PhoneExtension, PhoneEndUser, PhoneDevice, PhoneVoicemail, SystemConfiguration. - Adăugaţi instanţă id la MemberVoipConfig, VoipConversation, OrgOAuthToken (multiple instanţe RingCentral per org). - Enumuri noi: PhoneExtensionStatus, PhoneEndUserStatus, PhoneDeviceType, PhoneDeviceRegistrationStatus. - Deprecate NOT CONFIGURED in *************** (păstrat la ordinar 0 pentru a păstra rândurile existente sub EnumType.ORDINAL). - Adăugați FLOWROUTE la BulkTextProviderType pentru noul furnizor de SMS Flowroute. - DTO-uri de abtragere a furnizorului (ExtensieDto, TelefonUserDto, DeviceDto, VoicemailEntryDto,Central HealthDto, Creare/actualizare cereri). Prima fază a refactorului multi-intestinal al telefonului/SMS vezi *********************** (în kamo-login repo). KamoInitializer migratie + refactori de serviciu de urmat.

  4. · KlusterServices

    Desfăşuraţi podul FreePBX 17 + Jigasi SIP pe k1m1 şi k2m1

    FreePBX (obosit/freepbx:17-ultimul) ruleaza cu gazdaNetwork astfel SIP/RTP păstrează IP-uri reale ale clienților, blocate one-per-node prin nodSelector. SIP pe 5060 UDP/TCP (5061 TLS), interval RTP 18000-18999 ales pentru a evita Janus (20000-20999), Coturn (52000-65535) și WireGuard (51820-51821). Meet Jigasi adăugat ca un pod intern ClusterIP SIP astfel FreePBX poate trompe apelează la Meet Conferences; Prosody oferă acum un utilizator jigasi de la JIGASI XMPP PASSWORD. Admin UI accesibil prin Traefik la pbx.k1.kluster.kamocrm.com / pbx.k2.kluster.kamocrm.com cu certificate Însămânțat prin intermediul auto-cert STATIC DOMAINS.

  5. · kamo-internal

    Vedere, paginare, căutare live, filtre, logo-uri org

    Administratorii platformei (proprietar de org de nivel superior) văd acum fiecare org din sistem prin intermediul un nou obiectiv/api/securitate/org/toate retelele in loc de propriile membri. Titlul antetului și actualizarea subtitrare pentru a reflecta contextul admin. Alte îmbunătățiri: - Paginare: client-side, implicit 25/pagină, configurabil (10/25/50/100) - Căutare live: filtre după titlu, titlu scurt sau domeniu în timp real - Filtrare chips-uri: "Toate," "Orgile am proprii," "DNS nu încă configurat" - Număr de rezultate afișat lângă selectorul paginii - Butoni de număr de pagină cu colaps elipsis pentru numere de pagini mari - Componenta OrgLogo consolidează randarea logo-ului (sigla scurta prin getOrgLogoUrl) atât pentru cardul actual-org cât și pentru toate cardurile org din listă - Butonul ENTER corect pazit de org.memberId (record de utilizator impartit+membru) - Membru al sistemului ENTER ca membru al sistemului disponibil pentru toate orgile atunci când poate EnterASystemMember

  6. · SecurityService

    Adăugați GET / api/security/org/toate rețelele pentru admin-uri platforme

    Proprietarii de org de nivel superior pot aduce acum toate organizațiile din sistem cu informaţii de membru referitoare la apelant. Orgs unde apelantul are un membru record get isOwner/memberId populat; altele primesc membruId: nul, isOwner: fals. Endpoint aplică faptul că apelantul este atât în org de nivel superior și este un proprietar.

  7. · kamo-internal

    Sub-tabe în editor model de securitate + curățare

    - Editor-model de securitate pe ************* este acum divizat în patru sub-tabe: General (Informații de bază, Vizibilitate, Cine poate crea, Setări platforme, Config domenii, pieţe comerciale), cenzură (alcool/ tutun/arme de foc + categorii de vârstă pentru membri + membri de echipă), Aplicații permise și Roluri de securitate implicite. - Nou *************** permite unui administrator să editeze un model permite RootSubdomines pavilion și pseudonimele părinte alături de restul setările modelului. Din episoadele anterioare: Ramurile popup. - Subdomeniu Sucursale popup este simplificat la doar biți de nivel org Acreditari GoDaddy + maestru activa comuta. Un pseudonim per model s-a mutat atât a dialogului cât şi a suprafeţei de recuzită; SecurityRoleManager scade Acum şi recuzitele nefolosite. - Elimina fiecare referinta la echipaMemberPayFeesSetting / PayFeesSetting / TriStateFeeOption editor model și cipul său în tabelul modele sunt plecat, împreună cu pseudonime de tip în utilizareModel aplicat. - /setări/platforme/evenimente și /setări/platforme/planuri pagini sunt șterse (au fost deținători de locuri de pe suprafața de facturare depreciată). Pagina de aterizare, SetăriStatusWindow lista sub-topic, și traseu / icon Hărţile aruncă toate intrările. - Managing Group sub-tab pe ************* acum afișează titlul Grupului Implicit ca un câmp de citire dezactivat (a fost anterior ascuns în întregime în spatele unei alerte de informații) astfel încât adminii pot vedea numele grupului în timp ce înțelege că nu poate fi schimbat.

  8. · kamo-internal

    Vizibilitate Alias UI + Butonul Sucursale Subdomeniu pe pagina de tipuri de ramură

    SubdomeniuBranchesDialog: - Editorul Alias a înlocuit lista de cipuri cu o listă de rând în stil tabel care arată Membrii și membrii echipei de checkboxes per alias tipuri de creatori vezi fiecare alias părinte în /rețea/creare - onUpdateModelSubdomeniuConfig signature updated to pass full alias objects (alias, vizibil pentru membri, vizibil pentru membrii echipei) în loc de siruri de caractere simple SecurityRoleManager: - fullSecurityModels state + loadFullSecurityModels map pseudonime cu Nu-ţi face griji. steaguri - persistModelSubdomeniuConfig trece complet obiecte alias la suport BranchSetupManager Nu-ţi face griji. - Butonul Sucursala Subdomeniu adăugat (pagina de securitate-roluri oglindă) cu Același SubdomeniuBranchesDialog, status-fetch on mount și model reload atunci când dialogul se deschide

  9. · SecurityService

    Filtrare vizibilitate Alias + auto-verificare proprietate subdomeniu

    OrganizationController: - Web-alias org creation now auto-marks propertyVerified=true and isDnsVerified=adevărat pe creat OrgDomain Am furnizat DNS pe GoDaddy în numele lor - Calea custom partAliasType aplică acum vizibilitatea per-alias creator-tip (Oglinzi / filtru creativ astfel încât backend nu poate fi ocolit) BranchTypeController /creatable: - lista părinteluiAliases este acum filtrată de creatorul apelantului Tip: MEMBRII văd doar vizibile pentru membri = pseudonime reale, TEAM MEmberS vezi numai VizibleTo TeamMembers=adevărate pseudonime,proprietari vezi toate - Fiecare alias DTO include acum vizibil pentru membri + vizibil pentru membrii echipei steaguri Modul de securitateController: - processSubdomeniuBranchConfig acum citește - Nu. de la obiecte harta și apeluri înlocuiAllFull pentru a le persista

  10. · kamo-shared-library

    Adaugă steaguri de vizibilitate per-alias de tip creator

    Adaugă vizibilMembers / vizibilToTeamMembers Boolean coloane la ChildOrgSecurityModelAlias astfel încât adminii pot restricționa ce pseudonime părinte să apară membrilor împotriva membrilor echipei atunci când se creează orgii pentru copii. - Entitate: două @Builder. Articolul 4 alineatul (1) litera (a) din CRR - Subdomeniu AliasDTO: expune ambele steaguri în de laEntity - ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** supraîncărcare care persistă vizibilitatea; înlocui toate (șiruri) delegați la ea

  11. · kamo-internal

    Setări dialog, web-alias cale vrăjitor, și panoul de furnizare DNS

    Adaugă Sucursalele Subdomeniu IU pe trei suprafețe: - ******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* deschide un dialog pentru nivelul de org permite comutarea + GoDaddy creds, cu o editor model per securitate pentru permisRootSubdomenii + pseudonime parentale (reuss ajutorul vrăjitorului esteValidAlias/toSafeAlias) - / network/create: BasicsStep now branchs between a bring-youn-domain calea și calea Kamo web-alias (gatat pe steagul activ al org-ului părinte; Starea GoDaddy, și pseudonimele tipului de ramură selectat). Părinte Alias Liste de abandon ROOT (când este permis) plus pseudonime per model; ajutor live actualizări previzualizare ca utilizatorul schimba fie câmp - /setup/dns: new DnsProvisioning Panel votează jurnalul de aprovizionare al org și Suprafețe per înregistrare starea GoDaddy cu o acțiune retrimisă Susţinut de traseele proxy Next.js BFF sub ***************

  12. · SecurityService

    Org-nivel de configurare, GoDaddy client, și web-alias org crea calea

    Firele noile Sucursale Subdomeniu caracteristică end-to-end pe backend: - SubdomeniuBranchesController pentru org-nivel activ + GoDaddy creds (viu verificat) - Go DaddyDnsClient efectuează upserte idepotent CNAME și cecuri credibile - DnsProvisioning Serviciul async-queues subgrupul standard cunoscutAliases și scrie rânduri per înregistrare la OrgDnsProvisionLog - SecurityModelController are permisRootSubdomenii + pseudonime[] on creare/actualizare - *************** acceptă calea web-alias (useWebAlias + partAliasType + partAliasId + webAlias), calculeaza FQDN rezultat sub zona de rădăcină a părintelui, și începe furnizarea DNS dupa org tranzactional crea completeaza - Obiectivul /creatabil al BranchTypeController expune pseudonimele per model și părinte-org subdomeniu-ramuri statutul astfel încât vrăjitorul poate purta UI

  13. · kamo-shared-library

    Adaugă entități, cifru și alias/Schelă de jurnal DNS

    Adds per-org GoDaddy crede (AES-GCM criptat), un steag permisRootSubdomaines și colectarea de copii-org alias pe modelul de securitate, o furnizare de DNS jurnal de audit, și un ajutor partajat SecretCipher utilizat de SecurityService pentru a runda-trip stocate taste API fără a le returna vreodată la frontend.

  14. · kamo-internal

    Prefix/Suffix dropdowns, poarta domeniului cutiei poștale, stare explicită

    - Prefix nume și sufix sunt acum dropdowns populate de la NamePrefixType / NameSuffixType catalogs livred by the org-config obiectivul final. Afișează abrevierea + numele complet pe opțiune. - "Organizaţia de vizionare e-mail cutia poştală" este acum dezactivată, cu excepţia cazului în care domeniul de e-mail organizaţiei se potriveşte cu unul dintre cutiile poştale verificate ale orgului domenii (purtate din GET /api/email/domenii). Curăță mesageria în linie explică dacă este dezactivat din cauza lipsei de e-mail, nu a verificat domenii configurate, sau un domeniu neuniform și numele reale domenii configurate astfel încât adminul să știe ce să folosească. - Statutul de membru al echipei nu mai este implicit PROSPECT; adminii trebuie alege o stare de ciclu de viață în mod explicit sau se depune este blocat. Rezumat Panou arată "nu setați" până când un statut este ales.

  15. · SecurityService

    Starea echipei explicite + cataloage prefix/sufix

    - GET ***************acum întoarce numele Prefixe și nameSuffixs, sursăd from NamePrefixType and NameSuffixType so the Adaugă formulare de membru/Adaugă formulare de membru al echipei nu trebuie să le codeze greu. - Post / Create-membru de echipă respinge acum o cerere care omite TeamMembershipStatus (400). Precedenta rezervă a PROSPECTului tăcut este a plecat membrii nu sunt niciodată etichetați greșit în mod implicit.

  16. · kamo-internal

    Lăţime completă, trei pale Adaugă formular membru

    Relucrează formularul de creare pentru a utiliza întreaga zonă de conținut în loc de o 1100px-largă coloană centrată. - Model de răspuns la 3 coloane: Nav secţiunea stângă lipicioasă (md+), lăţime completă forma (întotdeauna), panou rezumat live pe dreapta (xl+). - Rânduri de câmp acum scara la lățimea disponibilă: secțiunea nume este 5-up la md+, Rândurile de contact + rol merg până la 4-up la punctele de oprire xl. - Sticky jos bara de acțiune se întinde pe lățimea completă cu un indiciu de stare și un CTA primar gradient. - Section nav foloseste sul-spion pentru a evidenţia secţiunea în care utilizatorul este și suportă clic-la-scroll. - Stil de carte poloneză iconițe cap de secțiune. - Un nou card rezumativ din dreapta oglindeste formularul live (avatar inițiale, nume, nume de utilizator, e-mail, rol, cip de stare) și arată un indicator gata de creat după ce validarea trece.

  17. · kamo-register

    Combină aliasul/emailul/numele/telefonul într-un singur pas "Profilul meu"

    Combinați separat anterior "My E-Mail & Alias," "Numele meu," și "Numărul de telefon" pași într-o singură etapă "Profilul meu" pentru 13+ înregistrați, cu alias + e-mail + numele legal necesar și numărul de telefon opțional (verificate prin SMS la intrare). Sub-13 inregistrari vedea acum un single redenumit "My User Alias" pas - ÎnregistrareFlow: lista de etape simplificată, mâner unificatValidarea următoare, noile cazuri StepContent. Pasul de profil este intern defilabile astfel încât cele trei secțiuni se potrivesc în cadrul viewport. - ÎnregistrareStatus câștigă o valoare "REGISTRAT" pentru sub-13 completări în cazul în care nu există nici un e-mail pentru a verifica sunt rutate direct la Autentificare pagină cu ?înregistrat=1 în loc de pagina de verificare e-mail.

  18. · SecurityService

    Face e-mail + numele legal opțional pentru sub-13 înscrieri

    Criteriul final de evaluare /api/securitate/înregistrare a respins anterior orice cerere Lipseşte e-mailul, prenumele sau numele de familie. Asta a făcut calea sub 13 ani (KIDS ONLY ORGS, or ALL AGES with a sub-13 WORDS) ISPOSIBIL aceste conturi au în mod legitim doar un alias + parolă + fraza de semințe. Validarea necesită acum alias + parolă pe fiecare cale, și tratează e-mail + prenume + nume de familie ca triplu all-or-nimic: furnizarea oricare dintre ele are nevoie de toate trei. Verificarea-email trimite și câmpul de e-mail răspuns acum păziți dacă un e-mail a fost de fapt furnizate, iar statutul de răspuns este "REGISTRAT" (vs existente "EMAIL VERIFICARE required") atunci când nu există nici un e-mail pentru a verifica.

  19. · kamo-shared-library

    Adaugă ******************* pentru cecurile introduse

  20. · kamo-internal

    Name

    Adds Platform Administration → Configurare, un părinte-org-proprietar numai pagina care acordă sau revocă permisiunea de a juca rolul platformei Utilizator de sistem după departament, titlu de loc de muncă, sau membru individual al echipei. Înregistrat în toate cele trei locații nav (setează lista plăcilor de pagină, SetăriStatusWindow trasee + sub-topice, și pagina în sine). Actualizări/rețea de utilizare a noului obiectiv /api/securitate/enter-as butonul ENTER existent, astfel încât domeniul de destinație primește o sesiune construit din membrul org țintă (fixarea bug-ul în cazul în care sursa Membrul/orgID al Org a intrat în noua sesiune). Adaugă un ENTER AS Butonul MEMBRU AL SISTEMULUI de lângă ENTER care produce numai după Nu-ţi face griji. confirmă că apelantul este eligibil.

  21. · SecurityService

    Reumplere, intrare-ca flux, agenți de protecție a mutațiilor, configura API

    Furnizarea de autovindecare: SystemUserBackfillService ruleaza pe fiecare SecurityService boot (din DataLoader) pentru a adăuga coloana is system user și tabelul user access dacă lipsește, asigurați sistemul singleton Există înregistrări ale utilizatorilor și creează un administrator-rol TeamMember în fiecare Orga non-top nu aparţine deja. De asemenea, rulează la creareOrganization time so new orgas get a System User imediat în loc să aşteptăm următoarea repornire. Trans-org introduce fluxul: înlocuiește vechea /api/generate-otk mână-off (care a scurs sesiunea sursă-org a apelantului către domeniul de destinație) cu /api/security/enter-as. Noul obiectiv stabileşte un nou domeniu de aplicare membrul efectiv al orgului țintă, astfel încât membrID/orgID/rights să se potrivească întotdeauna Orga fiind introdusă. Adaugă un câmp SUDO MINTE ID la sesiunea JSON astfel acea imitare a utilizatorului sistemului poartă membrul operatorului umanId pentru atribuirea auditului. Gărzi: SystemUserGuard refuză orice mutaţie determinată de API în sistem Înregistrare de utilizator sau oricare dintre membrii săi (wired into MemberController, MemberSecurityController, ************* Ascunde Utilizator de sistem de la GetMembers andSubscribers, Get Team Members and Contractants, şi să-i luăm pe membri de la departamentul final, astfel încât chiriaşii să nu-l vadă niciodată pe liste. Suprafata configuratie: SystemUserConfigController expune CRUD pe grant tabel numai pentru proprietarii de top-org, și SystemUserCapabilityController întoarce un boolean pagina / rețea folosește pentru a decide dacă pentru a face Intră ca buton membru al sistemului.

  22. · kamo-shared-library

    Adaugă steagul utilizatorului sistemului + entitatea care acordă acces

    Introduce modelul utilizatorului de sistem: un steag utilizator.isSystemUser (Indicele parțial unic impune un singurton), plus un tabel SystemUserAccess care înregistrează care departamente de top-org, titluri de locuri de muncă, sau membri ai echipei se pot da drept Utilizatorul Sistemului pentru a intra în orgurile copilului. Rândurile de acces sunt platforma-internă (nu intrări RoleRightType) astfel încât acestea să stea departe de Suprafaţa drepturilor chiriaşului.

  23. · kamo-register

    Adaugă etape de verificare telefon + întrebări de securitate

    Introduceți doi pași noi între Parola și Recuperarea Contului pentru 13+ Registre: o etapă a numărului de telefon (opțională, care poate fi omisă, cu cod SMS verificare) și o etapă de verificare a securității (necesară, 3 distincte întrebări cu răspunsuri). Sub-13 inregistrari continua sa sara peste ambele și se bazează pe fraza lor de semințe pentru recuperare. - FormPhoneNumber: level -> entry-code -> covered state machine, pe-pas Capcha widget gating SMS trimite, schimba-număr și săriți căi. - Intrebari de securitate: 3 scaderi + raspunsuri, unicitate aplicata, catalog adus de la noul obiectiv public backend. - InregistrareFlow: formular nouCâmpuri date, pasi conditionati, mânerUrmătorul validare, telefon + securitate Întrebări cu fir în corpul de depunere. - /api / proxy de securitate acum înainte X-forwarded-Host astfel încât backend poate rezolva org pentru selectarea furnizorului de SMS.

  24. · SecurityService

    Colecta telefon + întrebări de securitate în timpul înscrierii

    Mută numărul de telefon și colectarea de întrebări de securitate în self-service fluxul de înregistrare (în cazul în care acestea au fost inițial destinate) mai degrabă decât necesită o pagină a setărilor post-înscriere. - New RegistrationPhoneService: generează/verifică coduri SMS cu 6 cifre prin intermediul BulkTextSmsClient, 10 minute TTL, 5 pe oră rata limită pe număr. - ÎnregistrareServicii acceptă acum o înregistrareParams cu opțional verificat Telefon și o listă de trei intrări de întrebări privind securitatea; întrebări privind securitatea sunt încrețite cu regula de răspuns-normalizare existente. - /api/security/register accepts Şi... revendică telefonul verificat împotriva codului înainte de a persista Utilizatorul. - noi obiective publice POST/register/phone/iniţiate (Capcha-gated), POST / Register/phone/Verify, and GET ***************

  25. · kamo-shared-library

    Adaugă înregistrareentitate telefon cod + depozit

    Tabelul nou emisă în timpul înregistrării self-service, înainte ca o entitate utilizator să existe. Păstrat separat de AccountVerificationCode pentru a evita transportul unui utilizator NULLId pe masa aia.

  26. · kamo-internal

    Adaugă pagini membre/Adaugă pagini membre ale echipei

    - /cont: inlocuiti un singur buton ambiguu cu butoane cu telescop Adaugă <Member> pe fila membrilor, Adaugă <Team Member > pe fila membrilor echipei. Fiecare buton trasee către o pagină de creare dedicată în loc de vechi rupt se încadrează în punctul de vedere al membrilor. - Noi /setări/membru/nou și /setări/membru/noi pagini, ambele susţinută de un membruCreateForm comun cu un suport "variant." - Forma este o pagina unica, aspect orientat spre sectiune (numele, identitatea, contactul, cutia poștală org, rolul/locația exclusiv pentru membrii echipei, revizuire). Comment e-mail și numele de utilizator avertizează atunci când un utilizator există deja sau este deja conectat ca membru al acestei ORG. - Onorează AgeReqType: dacă cerinţa permite utilizatorilor sub 13 ani câmpurile de email personale și de organizare sunt ascunse și numele de utilizator devine identificatorul primar. - opțional "Provision organization e-mailbox" checkbox creează căsuţa poştală prin e-mailService şi o atribuie drept căsuţa poştală principală a membrului. - Profil de profil pe /setings/member/[id] include acum Locul de muncă, Echipa Statutul membrilor și titlul oficial al postului pentru înregistrările membrilor echipei, cu fir la criteriul de evaluare existent PUT/api/securitate/membri/{id}.

  27. · SecurityService

    Adaugă fluxul de creare a membrilor echipei / Adaugă fluxul de creare a membrilor

    - Noul membruCreateController expune: * GET ******************* Age-req, timezone, departamente, titluri de muncă * GET************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** * POST / api/security/members/create * POST************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** Departamentul / titlul postului / loc de muncă / statutul de membru / nivelul de securitate - Reutilizează un utilizator existent atunci când e-mail sau numele de utilizator se potrivește deja; altfel creează un utilizator nou și trimite șablonul EMAIL VERIFICARE. Bine aţi venit. șablonul este întotdeauna trimis pe creație. - Pentru orgi ale căror AgeReqType permite sub 13 utilizatori, colectarea de e-mail este omite și numele de utilizator devine identificatorul principal. - Extinde GET / membrii / {id} pentru a reveni locatia + echipamembruStatus + esteOrganizareaOwner pentru membrii echipei, și pus să persiste locație, TeamMembershipStatus, şi JobTitlul Oficial atunci când recordul este un membru al echipei. - Atribuirea implicită a rolului + materializarea drepturilor delegate Serviciului Membru astfel încât fiecare nou membru aterizează cu drepturile lor efective deja aplicate. - Fix rightservice: boolean getter a fost scris getOrganization Proprietar (Lombok generează isOrganizationOwner pentru câmpurile primitive booleane).

  28. · kamo-shared-library

    Adaugă AgeReqType.permisSub13() helper

    Utilizat de Add Member / Adăugați fluxul de membru al echipei pentru a sări peste colectarea de e-mail pentru orgi a căror cerință privind vârsta permite utilizatorilor sub 13 ani (ALL AGES); Kids ONLY, ALL COPPA GRADS).

  29. · kamo-internal

    Rebuild member Plans & Billing around Billing Groups

    - Member page Plans & Billing tab is now right-aligned with a pulsing glow and a StarRate icon on the tab bar. Visible when the viewed member is the signed-in user OR the signed-in user owns the org. Contents split into four sub-tabs: Subscriptions, Invoices, Payment Info, Manage Group. Billing-group selector dropdown + "Add Billing Group" icon button live on the right of the sub-tab bar; the group selection drives every panel. - Subscriptions panel shows one card per active market (FREE_DEFAULT KamoCRM always present), with change-plan / cancel / reactivate and a per-seat license-assignment grid. Priority auto-deactivation runs server-side on seat reduction. - Payment Info panel wraps Stripe Elements via StripeProvider + a refactored PaymentMethodForm that attaches to a billing group (not the old org-level customer). - Manage Group panel edits title / billing contact / member permissions (Licensee, Group Plan Manager, canManageSubscription, canManageBilling) and adds/removes members. The Default Group is read-only — its roster is implicit (everyone not in an explicit group), and no title or permission edits are allowed. - /settings/account?tab=billing deleted outright. BillingManager + PlanCalculator removed. Links everywhere updated to the new member Plans & Billing tab. - SettingsStatusWindow + /settings landing nav both pruned (three-way sync per the nav-sync rule). - BranchSetupManager gets a new "Commerce Markets" section inside the security-model editor, using the new SecurityModelMarketController to attach/detach SUBSCRIPTION markets with per-scope Public/Member/ Team-Member toggles. - **************** rewritten to show per-org Billing Groups + per-group subscriptions + MRR. /settings/platform/events and /settings/platform/plans become placeholder pages (their old contents are gone with the clean-slate cut). - New API proxies: /api/security/entitlements and **************** New useEntitlements hook consumes SecurityService EntitlementService for feature-gating in the UI. Legacy consumer files (StatsManager, FeaturesManager, BranchSetupManager) carry @ts-nocheck until their subscription-based gating code is reworked onto useEntitlements.

  30. · SecurityService

    Adaugă servicii de drepturi + piețe comerciale de securitateModel

    -GreutyService calcules per-member feature grants by unioning active Caracteristicile planului de facturare + KamoCRM Linia de bază liberă. Case Previziunile de 15 minute în Redis sunt puse pe lista membrilor. - DreptateInvalidareAscultatorul subscrie la kamo.entitlements.invalidat Canal Redis (MINTE:/GROUP:/RG: sarcini utile) deci mutații BillingService Se propagă imediat. -Controlator de drepturi la /api/security/entitlements expune /me, **************** și un Cache-invalidare Post. - SecurityModelMarketController la ************* Ataşează/setaches TradeMarkets la un ChildOrgSecurityModel şi răstoarnă Public / Member / Team-Member lunetă.

Universul tău te așteaptă.

Începeți gratuit în câteva minute.Adăugați produse oricând sunteți pregătit — fără migrare, fără autentificări noi.

Gratuit pentru totdeauna — nu este necesar un card de credit