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. · kamo-internal

    Un "de ce nu pot accepta?" suprascrie pe bara de filtrare

    Aliniat dreapta pe bara de filtrare / plumb, purtând pictograma Leads nav cu același emblemă interzisă Lucru aici care spune "aici este motivul" sunt vizibil o declarație. Doar redat în timp ce membrul este de fapt blocat. Nu este un filtru care se întâmplă să fie gol, este o stare care există sau nu, astfel încât atunci când prohibitie clarifica nota a fost scrisa proprii. Un efect scade suprascrierea atunci când acest lucru se întâmplă: lăsându-l blocat ar se blochează grila pe o in () pana se potriveste nimic, cu filtrele inca gri şi nici un control vizibil lăsat să-i pornească. Presată, overrides mai degrabă decât înguste. buildLeadGridQuery se întoarce devreme blockLeadUids, astfel încât nu fila piață, fila stare, agent, data sau termenul de căutare se aplică. Acest lucru este deliberat: pistele de blocare sunt împrăștiate peste orice piețe și statute acestea se întâmplă să fie în, și intersectarea cu bara ar arată un subset în timp ce lectură ca întreaga listă Cineva încearcă să fie deblocat. Un set gol cere mai degrabă "uid" decât renunţând la constrângere, astfel încât să nu se poată extinde la organizaţie. Filele de stare și fiecare control pe bara sunt gri și a făcut inert în timp ce este pe, pentru că un bar care încă uitat live ar minți despre ceea ce a ales Rânduri. Comutatorul în sine este exclus prin atribut astfel încât să rămână presabil, și butoanele de acțiune lângă file nu sunt filtre, astfel încât acestea să rămână în viață. Resetări paginare pe fiecare comutare Nimic împotrivă. Off, butonul pulsează: este singurul lucru pe bara un membru blocat trebuie să Observă, de aceea pistele lor nu mai sosesc. Pe, grila în sine este semnalul și animația ar fi zgomotul. Onoarea preferă să fie redusă.

  2. · SecurityService

    Listă, redenumește și încheie terminalele unui membru

    GET *************** DELETE ŞI PATCH on /terminals/{id}. Fiecare dintre ele rezolvă contul Linux de la propria SESIE CALLER și nu transmite nici un nume de cont agentului care a venit din cerere. Un membru poate prin urmare, doar vreodată vedea, redenumește sau se încheie propriile terminale ar putea furniza care ar ajunge la altcineva, deoarece contul nu face parte din ceea ce ei furnizează. O maşină de negăsit răspunde 200 cu o listă goală şi de neatins: adevărat Mai degrabă decât o eroare: "mașina dev este în jos" este un fapt despre mașină, nu un eșec al întrebării, și consola poate spune acest lucru în cazul în care o pagină de eroare ar putea Nu spune nimic. Aceasta este aceeași regulă DesktopSsoController urmează. Renamarea unei sesiuni care s-a încheiat este un 404 cu o propoziţie pentru "ai redenumit ceva care nu mai există," care după o repornire este Fiecare terminal pe care l-a avut membrul.

  3. · KlusterServices

    Listă, redenumește și încheie terminalele unui membru

    GET /terminals?user=X, POST /terminals/<id>/kill, POST /terminals/<id>/title. Nu există nici o bază de date în spatele acestui lucru, și că este design mai degrabă decât o scurtătură. Serverul tmux de pe mașină ESTE registrul: terminalele unui membru sunt exact sesiunile care există, astfel încât unul care se termină să fie listat cu nimic reconciliază, și o repornire de la sine. O masă ar trebui să fie spus toate că, și ar fi greșit fiecare Timp nu a fost. Titluri personalizate live într-o opțiune de utilizator tmux pe sesiune, astfel încât un titlu are același Pe viaţă, aşa cum îl cheamă. Caracterele de control sunt demontate înainte de depozitare: un titlu este redat într-o listă, și o secvență de evacuare într-o singură ar revopsi ecran în jurul valorii de ea valoare, care este ceea ce face lista parseable prin divizare pe ea. Titlurile sunt trecut ca un singur element argv, niciodată printr-o coajă. "No tmux server" este o listă goală, nu o eroare. Aceasta este starea mașinii după o repornire, care este exact atunci când membrul are nevoie de lista pentru a spune "nimic aici," mai degrabă decât să eşueze. 20 teste: forma de listare și comanda sa, sesiuni fără titlu de raportare nulă Mai degrabă decât "," sesiuni acest agent nu a crea stau invizibil, malformat şi rândurile nenumerice au fost omise în loc să fie fatale, să ucidă fiind idepotente, titluri care sunt deposedate/troncate/dezosate și un titlu care conține metacaractere de coajă care sosesc ca un element argv. De asemenea, pompa de paza selecta împotriva unui descriptor închis sub ea Obisnuita incheiere a traseului recv deja manipulat. 131 de teste.

  4. · kamo-internal

    O scurtătură parolă în erou, și o poartă mai îngustă

    Două jumătăţi ale aceluiaşi subiect. Scurtătură. Schimbarea parolei a fost de trei camere adânc în spatele șinei Singurul lucru pe care aspectul camerei a făcut cu adevărat mai greu de atins decât vechiul Derulează şi este cel mai important control al contului. Eroul acum o poartă, în mod deliberat NU ca o a treia pastilă de sticlă: cei doi de lângă ea sunt destinaţii, aceasta este o acţiune, deci este solidă. Când multifactorul este oprit se transformă în chihlimbar și spune așa, pentru că acesta este momentul în care prompt este în valoare Făcând. Trasee prin aceeași cale focalizare paleta de comandă folosește, astfel încât se deschide camera de acces și derulează cardul de parolă în vedere. Această cale este acum o funcție împărtășită de paleta, inelul de rezistență și această scurtătură, mai degrabă decât trei care ar putea deriva; segmentele inelului deja numit Câmp care le repară şi acum îl folosesc. ParolaSecurityCard nu este un ProfilCard, astfel încât ambalajul său poartă ancora sul. Poarta. MANAGE MINTE SECURITY nu mai arată cardul cu parolă Recordul altcuiva Privitor. Aceasta este jumătatea DISPLAY; jumătatea care contează expediate în Serviciul de Securitate 197b591, care returnează 403 pentru aceeași condiție. Un drept scos dintr-un ecran este un ecran mai ordonat, nu un control de securitate. Cheile de dicţionar au aterizat primele în dictionarul kamo-translation 982c1f62. Verified: npm test (14 garzi + 5,139 teste), tsc --noEmit, următoarea clădire.

  5. · kamo-internal

    Emblema Nav interzis, Assign to Myself, and obfuscated contact mascating

    ** Pictograma Leads Nav spune atunci când nu poți accepta.** Un membru care deține conduce ei nu au lucrat devine o emblemă bloc roșu peste pictograma Leads și un sfat instrument A numi ceea ce este blocat, de ce, și ce să clar. Hed by / leads/disponibil-summary şi a păstrat în direct de un nou eveniment de acceptare-portă pe priza de credit/asignare sarcina utilă poartă doar un membru ID, astfel încât fiecare browser ignoră tuturor celorlalți și re-întreaba serverul propriu. Arătate oricărui membru care poate vedea piste, nu numai titularilor de credite: de la o Conducere liberă poate fi acum auto-revendicată, poarta le guvernează prea. ă disponibilitatea punct rămâne doar de credit, astfel încât cele două declarații rămân se Puteți fi blocat de la acceptarea în timp ce conduce stau acolo disponibile, iar acestea sunt lucruri diferite de spus. ** Fiecare statut este numit aşa cum îl numeşte acest org.** Tipul de instrument, /conducere / aviz disponibil și copia de detaliu-pagină rezolva New Lead / Farm Fresh prin utilizareaStatusLabels: etichetele sunt înlocuibile pe /setări/fetures/crm și spunând unui membru să mute o pistă de pe "New Lead" atunci când org-ul lor o numește ceva Altfel spune un statut pe care nu-l pot găsi în culegător. **/liders/disponibile's notice divided into its two reasons** conduce datorate o schimbare de stare grămada nediferențiată și membrul trebuie să deschidă fiecare plumb pentru a afla ce este Vrea. O pistă care eşuează e listată o dată. **Asignează-te pe mine** stă sub Hot Reasign pe o pistă nealocată. Oferit pe un Liber pentru toți duce la cineva care nu este în prezent interzis, și pe orice duce nealocate la un titular de ASSIGN LEADS. Răspunsul poartă plumb înapoi demascat, așa setarea în stare flips atribuiteToMe, recalculează decizia masca la UNMASKED, și dezvăluie informațiile de contact cu nici o reîncărcare. **The status control pulss** while the lead is mine and still at New Lead or Farm Fresh înainte de un tip de instrument nav. Onoarea preferă să fie redusă. **Informaţiile de contact mascate sunt obfuscate, nu sunt şterse.** contactObfuscator.ts oglinzi serverului ContactObfuscator exact, afirmand aceleasi siruri de caractere, deoarece Releu de plumb în timp real nave un DTO complet demascat la fiecare abonat în org și Browser-ul este singurul lucru care stă în fața ei acolo. Un câmp gol citeşte ca "acest plumb nu are e-mail," care este o declarație diferită și greșită. ** Filtrul /conducere Nealocat este oferit tuturor.** Fără REVIZUIRE UNASsignED LEADS returnează nealocate gratuit-pentru-toate conduce acest membru poate pretinde, și eticheta spune mai degrabă decât opțiunea înseamnă în liniște două lucruri diferite. Clientul nu mai are forţe alocate=ASEMNAT pentru cei membrii clip exact rândurile pentru care există această schimbare.

  6. · SecurityService

    Serveste poarta larg acceptata, adauga auto-atribuirea, si inchide doua bypass contact-mask

    **Endpoints for the new gate.** / leads/disponibile-summary and / leads/disponibile Acum raporteaza ambele motive pentru care un membru este blocat atribuite, și conduce încă la starea lor de admisie modul de stare a sistemului plus ID-uri, astfel încât browserul poate rezolva propria org etichete personalizate înainte de a arăta cuiva motivul pentru care acestea sunt blocate. BlockByComentarii este păstrat ca un alias al noului pachetul anterior continuă să lucreze prin implementarea. Poarta este evaluată pentru oricine poate vedea piste, nu numai membrii dețin Un membru care poate pretinde doar un liber-pentru-toate plumb este supuse aceleiași discipline și nav lor trebuie să fie în măsură să spună acest lucru. ă Scanarea de mai jos necesită încă dreptul de credit. ** POST / leads / {id} / Assign-to-me** susține un plumb nealocat. Se întoarce plumbul UNMASKED ce permite paginii detalii dezvăluie informațiile de contact fără o reîncărcare. Un nou subiect Nats, *************** publicat atunci când o notă aterizează pe o pistă, când un statut se schimbă, și de ambele părți ale fiecărei misiuni schimbare. Mediaservice's releu aboneaza deja la securitate.leads.> si harti subiecte la subiecte generice, deci nu are nevoie de schimbare. Sarcina utilă transporta numai un membru ID: răspunsul porții depinde de întreaga carte a acelui membru, deci există nimic util pentru a pune pe un subiect la nivel de org, și un subiect fiecare membru primește este locul nepotrivit pentru orice merită reținut. **Două bypassuri de contact-mask, ambele găsite audit în cazul în care detaliile unui plumb poate ajunge la un browser:** - Get / leads / {id} / istorie nu a avut nici o misiune sau poarta de contact, la toate. O schimbare de câmp log este o înregistrare completă a fiecărei valori pe care un câmp a avut-o vreodată, aşa că a revenit e-mail și numere de telefon propria masca conduce scoate și nu doar cele actuale, toate cele anterioare. Acum poartă aceleaşi două decizii ca GetLeadById, and LeadHistoryContactMask overfuscates the contact-purtator rânduri. Starea, atribuirea și istoria valorii împrumutului sunt neatinse: acest lucru reține informații de contact, nu traseul de audit. - GET / leads/callback-context/{id} a trimis o adresă de e-mail și două telefoane numere pentru orice apel înapoi în org, inungate. O carte de vizită era un mod de a citi. datele de contact ale conducerii oricărui coleg. **A write-back guard on updateLead.** Masca de citit nu mai oarbe contact Fields, it obfuscates them care ar persista perfect fericit. Ierarhia dreapta face acest lucru greu de ajunge, dar "greu de atins" nu este o garanție și modul de funcționare este tăcut corupţia numărului de telefon al unui client. ** Vizibilitatea gri.** FĂRĂ PERFORMANȚĂ DESTINATĂ LEADS Podeaua de plumb devine "mea conduce plus nealocate libere-pentru-toate conduce" mai degrabă decât "mi conduce" și un nealocate gratuit-pentru-toate plumb poate fi deschis și istoria sa citit Vezi, dar nu se poate deschide este un bug. Citirea DE LA CORESPONDENTUL NOSTRU pe unul este un alt intrebari si LeadCommsReadGate raspunde in continuare cu VIew LEAD CONTACT INFO Others; domeniul de aplicare al grid-coms menține în mod deliberat podea mai îngustă, cu un comentariu spunând de ce cei doi diferă acum.

  7. · kamo-shared-library

    Lărgiți poarta de acceptare, ascundeți informații de contact mascate, lăsați liber-pentru-toate conduce fi revendicate

    Trei modificări legate de miezul de comandă. **Poarta de acceptare pune acum două întrebări, peste fiecare plumb atribuit.** LeadAcceptEligibilitateServicii înlocuiește poarta de comentarii care a trăit în interiorul CreditLeadAsignmentService. Un plumb blochează suportul său de a lua un alt atunci când fie nu are nici o notă de la ei scris, deoarece a fost atribuit lor, sau este încă așezat la proaspete > noi plumb / ferma > ferma proaspete. Ambele jumătăţi închid o gaură. Vechea regulă a numărat orice notă scrisă vreodată, deci o pistă. care s-au întors la un membru a trecut pe un bilet de la stint lor anterioare cu ea. Și se uita doar la conduce dobândite prin sistemul de auto-asignare, care a părăsit orice altă rută ca o modalitate de a acumula piste neatinse cu piscina încă deschisă. Regula este de două întrebări bazate pe set indiferent de dimensiunea cărții membrului: misiuni curente, apoi un grup de MediaObj agregate peste fluxul lor Ghizi. Extinderea domeniului de aplicare la fiecare misiune a făcut bucla de interogare-per-lider vechi inaccesibil este forma care a făcut / plumb grila lent, și acest lucru se execută pe fiecare remiză a navigatiei conduce pentru fiecare membru semnat-in. Statusurile de blocare sunt numite în mod explicit în LeadStatusType, mai degrabă decât derivate De la Allow SwitchBack. Aceste două se întâmplă să fie singurele statute care transportă că steag, dar răspunde la o întrebare diferită, și un statut viitor marcat același calea nu trebuie să înceapă în tăcere blocarea acceptă. Potrivirea este pe sistemul stocat descrieri, astfel încât etichetele de stare personalizate ale unei orgi nu afectează niciodată regula. **Informaţiile de contact mascate sunt obfuscate mai degrabă decât necompletate.** ContactObfuscator transformă 555-5555 în (555) 555-**55, snadjafinia@gmail.com în S**********@gmail.com, and 123 Main St in *** Main St. imposibil de distins de la cineva pe care nimeni nu l-a completat, aşa că un telespectator restricţionat nu putea spune "există un număr aici nu se poate citi" de la "acest plumb nu are nici un număr " şi personalul a urmărit a doua lectură. Oraşul, codul poştal şi ţara supravieţuiesc acum pe aceeași bază statul a făcut întotdeauna: suficient de grosier pentru a identifica un duplicat; inutil pentru a ajunge la oricine o dată numărul de stradă este plecat. Data nașterii absent; nicio formă parţială nu este atât recunoscută, cât şi sigură. Browser-ul oglindeşte asta exact. LeadRealtimePublisher fani un DTO complet demascat afară la fiecare abonat în org fără proiecţie per beneficiar posibilă. Apartamentele Java şi Vitest afirmă Aceleaşi sfori ca să nu se destrame neobservate. **Pistele libere alocate sunt vizibile și revendicabile.** ********************* susţine o anumită pistă nealocată. Liber-pentru-tot este ușa deschisă și poartă poarta de acceptare cu ea ar fi modul în care în jurul disciplinei există alături de propriul său credit exact așa cum acceptăNextLead nu, așa că Max Daily petrece încă o blochează. ASsign LEADS este ușa ridicată: orice plumb nealocat, nici o poartă, nici un credit. Licenţarea este o constrângere legală şi nici o uşă nu renunţă la aceasta. Câştigurile LeadGridQuery Nu-ţi face griji. De cotitură a rețelei Etajul permisiunii de la "conduceri atribuite mie" în "conduceri atribuite mie, plus Orice cu adevărat pentru a apuca." Ascunderea pistelor nesolicitate Toată lumea fără VEDE UNASsignED LEADS le-a lăsat revendicabile în teorie și inaccesibil în practică.

  8. · kamo-internal

    Steaguri pe limbi și opriți copierea listelor de platforme

    Completează c20bac57. Limbile poartă acum steagul lor, acelasi switcher NavTop arată și de la aceeaşi sursă Obținerea acolo expus problema reală: opțiuni.ts au crescut copii private din patru liste cu platforma care deţine deja, şi anume cum a înlocuit pagina a lucrat prea. • Limbile au fost o copie retipărită fără coduri de țară, astfel încât un steag nu a fost chiar posibil. Acum app/lib/languges.ts, care comutator NavTop și Traducătorul de chat împărtășește deja. • Valutele au fost o sămânţă de 34-intrare împotriva 160-odd platforma, astfel încât membru plătit în naira sau shekeli citesc propria monedă ca un cod gol fără simbol şi fără nume. App/constants/currements.ts. • Zonele temporale au fost retipărite din aceleaşi 27 de nume. Acum derivă din TIMEZONE ENUM TO IANA, singura hartă completă, astfel încât culegatorul nu poate oferă o zonă pe care nimic nu o poate rezolva. • Locul de muncă păstrează valorile sale, dar acestea sunt acum verificate împotriva Java enum prin test. Statutul de membru al echipei rămâne o listă explicită pe scop: generat Oglinda tipScript este STALE și contractări lipsă SENT, astfel încât derivă din S-ar renunţa în tăcere la statutul membrilor. Java enum are nouă; un test de ace toate nouă. Rândurile fusului orar arată acum cât e ceasul acolo. 27 nume enum cu subliniază eliminat este o listă trebuie să știți deja răspunsul la citeste; timpul este cel ales, asa ca este cel aratat. De asemenea, stabilește o afirmație că prima comitere nu a dat rezultate: framer-motion nu consulta prefera-reduce-motion de la sine, astfel încât camera crossfade și salva bar animat indiferent de setare. MotionConfig reduceMotion="user" Acum acoperă ambele; piesele conduse de CSS aveau deja propriile întrebări. Şi câmpul de ţară îşi face steagul în vedere citit, potrivindu-se cu cel care alege care a produs-o. Verificat: test npm (14 paznici + 5,121 teste, 70 dintre ele peste app/lib/memberProfile), tsc -- noEmit, next build.

  9. · kamo-internal

    Reconstruieşte-mi profilul ca un erou şi cinci camere

    *************** a fost o redare a componentelor de 1.999 de linii 13 cărţi identice pe o singură coloană. Un ajutor SecţiuneaCard dat toate pe aceeaşi rază, aceeaşi umbră, acelaşi cip de icoane şi acelaşi Editare / Salvare / Anulare trio, astfel "Cont Informaţii" poate edita Layout a fost spune adevărul despre o ierarhie pagina nu a avut. Reconstrucţia: • Un erou care păstrează rezoluția tapetului MemberHeader verbatim, cicatrice comentarii incluse, și adaugă identitatea a fost doar decorarea: nume ca pagina de o bucată de tip mare, ora locală a membrului ticăie în zona lor, stare MAE, ultimul sign-in, și un inel de putere. • Cinci camere în spatele unei șine O cameră a cărei fiecare Cardul este deschis pentru telespectator nu face nici un element feroviar. • Câmpuri Click-to-edit și un nivel de cameră bara de salvare, înlocuind 39 butoane. Salvează ventilatorul în funcţie de obiectivul final conform allSettled: un grup care reuşeşte se angajează în timp ce un grup care eşuează îşi ţine câmpurile murdare cu un motiv. • Cmd+K peste fiecare domeniu, astfel încât camerele ascunde lucruri fără a le ascunde. • Schelete în formă de card în loc de un spinner full-tab. Două defecte găsite în timpul citirii, fixate aici: • Adresa nu a funcţionat niciodată în direcţia ORICOR. Încărcătorul a codat cinci. siruri de caractere goale și nu citiți niciodată date.adresă, pe care serviciul de securitate o face trimite; și clientul {street, oraș, stat, zip, țară} nu este formă de sârmă localitatea, subdiviziunea, codul poștal, țara}. Deci, a devenit gol pentru toată lumea și chei salvate entitatea nu transportă. Acum foloseste forma restul platformei trimite deja, cu teste rotunde. • "Numele legal" şi "nascut" erau literale englezeşti în MemberHeader şi locul de muncă și de ocupare a forței de muncă-status etichete au fost literale în limba engleză în componentă. Toate tastat. Structură. Regulile s-au mutat la app/lib/memberProfile, unde vitest de fapt le colectează Scris lângă pagină ar fi trecut prin necurgere. Fields.ts este piatra cheie: fiecare câmp declarat o dată cu camera sa, card, eticheta, poarta și obiectivul final. Paleta, inelul de forţă, escaladarea şi folosirea drepturilor toate citit-o în loc să-l reimplementeze, și 57 teste pin porțile în jos inclusiv că nici un câmp nu este mai vizibil decât cardul său, și că editarea nu este niciodată mai mare decât văzând. Sfaturi rapide este scăzut doar pentru această filă, prin omiterea de ajutor Sfat; SetăriView face șina din fila activă, astfel încât celelalte nouă păstrează lor. Imperativ se mută de la setările antet în erou. De asemenea, șterge ProfileTab.tsx (2 650 linii), LoginSecurityTab.tsx (787) și MembruPermisiiTab.tsx (2,136), care nu au avut importatori. Cheile dictionarului au aterizat primele în kamo-translation-dictionary 4bb91245. Verificat: npm test (14 paznici + 5,106 teste), tsc -- noEmit, următoarea construcție, și Check-i18n-cheys - necesar-mesaje împotriva unei clone proaspete a dicționarului.

  10. · kamo-internal

    Un terminal Linux real într-o fereastră instrument, și un submeniu pentru a ajunge la ea

    Opţiunea Linux Desktop Nav devine un meniu în loc de o lansare cu dimensiunile sale, Remote Terminal și text. O schimbare de registru nu-l face: și NavToolButton deja face un submeniu în toate cele trei plasamente în timp ce Sectiunea de instrumente este deja sursa comuna pentru navigatie si placa de lansare, asa ca cei doi nu pot pluti. THE TERMINAL. xTERM.JS împotriva unei PTY reale pe propriul aparat de dev membru, așa că este un terminal și nu un alergător de comandă: aplicații Alt-screen (vim, htop, mai puțin), 24-bit culoare, raportare mouse-ul, pasta suport, larg și combinarea glifelor, clickable OSC 8 linkuri. Nimic nu este interpretat pe drum prin intermediul tastelor sunt bytes la PTY și de ieșire este octeți înapoi de fapt compatibil cu ceea ce oamenii rula într-o singură. Pe partea de sus a emulatorului: un statut cip care pulsează mai degrabă decât să se bazeze doar pe culoare, un titlu care urmează Secvența OSC proprie coajă astfel încât să urmărească cd și comanda de funcționare, copie-on-select cu Ctrl+Shift+C/V, Ctrl+Shift+F search, Ctrl +/-/0 zoom, și o paleta care Urmează tema privitorului. Scoica supravieţuieşte ferestrei. Se execută sub tmux tastat pe ID-ul ferestrei, astfel încât reîmprospătarea, o conexiune abandonată sau o fereastră de unelte care restabilește la fel sesiune cu sulback-ul său și comanda sa de funcționare priza a scăzut reconectează cu backoff în loc de raportarea unui eșec. ă Transportul trăieşte în ************* gratuit de Reacţie şi xterm, deci backoff și frame split sunt testabile fără DOM. DIMENSIUNEA DESKTOP PIERDUTĂ A DIMENSIUNII DE DEsktop REsolutionPicker. Acesta a fost stabilit pe o pagină de setări patru ecrane de la fiecare lansare și citiți din Storage local, Deci, "de ce s-a deschis mic?" nu a avut nici un răspuns în apropierea lucrului care s-a deschis. mic. Dimensiunea este acum aleasă în același clic care deschide desktop-ul; OpenKamoDesktop o ia în mod explicit și un apelant fără aviz trece ceea ce a fost întotdeauna implicit. Trei defecte găsite și fixate în auto-revizuire, toate tăcut: handler scurtătură a fost atașat printr-un efect care trage înainte de emulatorul async există, astfel încât niciodată legat; închiderea unei ferestre în timp ce cererea de bilete a fost în zbor încă deschis o priză după aceea, lăsând o coajă atașat la nimic că Capac per membru a mers la numărare; și decorațiunile de căutare omis ISEarchOptions' two REquired sight-ruler colors. Tastarea refs xterm în loc de "orice" este ceea ce a prins ultima. 405 fişiere de testare / 5049 teste trece, 14 gardieni sunt curate, TSC este curat, şi Real production build reuseste Dicționar împins primul (115c267f); verificat împotriva unei clone proaspete modul CI o face, deoarece mesajele locale / este gitignored.

  11. · kamo-internal

    A patra fereastră de stat

    O fereastră de instrumente popup a avut trei state: andocat în rând de-a lungul jos, maximizat peste viewport, sau minimalizat la un chat cap. Asta adaugă FLOATING și redimensionat de la orice margine Butonul. Un control în bara de titlu, purtând aceeași pictogramă care Detaşează o notă, ridică fereastra de pe fanta în care era şi o în cascadă. În afara docului ca ochiul să-l poată urmări. Apăsați din nou merge înapoi la Rândul. O fereastră maximă este nemaximizată și centrată în schimb, deoarece nu are nici un slot să iasă. Tragul, care este partea interesantă. Apăsaţi bara de titlu şi trăgând este un gest cu trei rezultate, și în cazul în care fereastra este lăsat go decide care: - eliberat cu marginea sa de jos în 96px de la fundul televiziunii, este nevoie de un slot în rândul REORDEAZĂ docul, care nu a fost posibil anterior deloc; - eliberat oriunde altundeva plutește acolo, care pentru o fereastră andocată este În momentul în care se detaşează. Se detaşează exact de unde era. Nimic nu sare; - şi o fereastră plutitoare tras înapoi în jos se fixează în rând ca ea abordări, la dimensiunea standard și în ordine cu vecinii săi. EDGE de jos se măsoară, nu indicatorul: glisarea unei ferestre 650px de bara de titlu pune indicatorul 600px deasupra docului pe primul cadru, şi un test de indicaţie s-ar detaşa de orice încercare de reordonare. Nimic nu este comis până când indicatorul vine. Fereastra purtată, Vecinii se amestecă pentru a face loc (sau pentru a închide rândurile din spatele ei), picătură șine de strălucire în timp ce docul se apropie și haloul din jurul fantei va teren în toate sunt o previzualizare rezolvate din caseta live fiecare cadru Este ceea ce face Escape, și schimbarea mintea ta la jumătatea drumului, costa nimic. Două decizii mai mici merită numite. Ferestrele sunt poziţionate acum. de la marginea lor TOP mai degrabă decât fixat cu "jos: 0"; de sus și de jos sunt proprietăți diferite și nicio tranziție nu poartă un element între Ei, astfel încât snap ar fi sărit oricum a fost cronometrat. Şi... "rezitabil: fals" devine un FLOOR odată ce o fereastră este de pe rând, mai degrabă decât un veto este membrii ferestrei cele mai doresc mai mult loc pentru. Ordinea rând și geometria float ambele supraviețui o reîncărcare: instantaneu transporta cutia float, dimensiunea docului pentru a reveni la, și comanda matrice, care este propriul aranjament de la stânga la dreapta al membrului. Necesită @kamo/tool-core 0.1.6 (setFloating / setFloatGeometry / SetWindowOrder), lovit aici.

  12. · SecurityService

    Serveste Remote Terminal

    Poduri un browser la o PTY pe propriul aparat de deviat al membrului. Ramele binare sunt terminalul, cadrele de text sunt de control; pe saltul îndepărtat un HTTP 101 pe a fluxul de lungime prefixă ajunge la agentul din port politica de rețea deja permise, astfel încât nu este necesară nici o schimbare Ciliu. Primul WebSocket în acest serviciu, și în mod deliberat unul crud. STOMP este o broker mesaj peste o priză și ceea ce călătorește aici este un flux octet între o browser-ul și un cochilia o plic în jurul fiecare lovitură de tastă nu cumpără nimic. Authorizaţia se întâmplă înainte de şosetă. Un browser nu poate pune un antet pe o Constructor WebSocket, așa că mai degrabă decât să învețe strângerea de mână să parse ***, o Obiectivul final obișnuit autentificat ia decizia cu sesiunea în mână și mâinile înainte ca un bilet de unică utilizare care este lipsit de valoare 30 de secunde mai târziu şi din nou după prima utilizare. Asta reflectă legătura KamoDesktop, care a fost împietrit pentru exact acest motiv: un token replayable stă în istorie și în Ctrl+Shift+T, și o coajă este mai rău în această privință decât un desktop, nu mai bine. Strângerea de mână nu mai citeşte nimic altceva de la client. Cont, doar un indiciu de dimensiune agent cleme oricum. Contul Linux vine de la Acreditive pentru [<membrul apelantului >), astfel încât o cerere nu poate numi pe cineva Scoica altcuiva, iar Originea este ţintuită de gazdă. Nicio parolă a se citi la toate: agentul este rădăcină și cade în cont, astfel încât reversibil Nevoile credibile de Guacamole nu sunt atinse pe această cale. Auditat înainte de fapt, sincron, în același jurnal Access care deja raspunsurile "care s-au inscris de unde" cu IP, geo si agent utilizator, la HIGH severitate. Un rând care a apărut doar pe succes ar fi lipsesc exact cazurile Asta contează. Opt terminale pe membru, pentru că fiecare este un PTY și un fir pe o VM comun care a fost redus de presiunea memoriei înainte. Închiderea priza nu ucide coajă; agentul se execută sub tmux astfel încât reîmprospătare sau o conexiune scăzut reataşează la munca încă funcţionează. 21 teste: de unică folosinţă, de expirare de fiecare parte a limitelor, tăcere necunoscută; capac per membru și eliberarea acestuia, jetoane non-secvențiale, și rama codec inclusiv livrarea cu un singur bit la-un timp, o lungime declarată absurdă și citirea linia de stare de actualizare fără a înghiţi fluxul din spatele ei.

  13. · KlusterServices

    Oferiţi agentului un criteriu de evaluare PTS pentru terminalul la distanţă

    GET /pty upgrade-uri conexiunea la fereastra browser-ului de instrumente, În ambele sensuri, deasupra prizei brute. Un 101 mai degrabă decât un WebSocket. Apelantul este Serviciul de securitate care deține purtătorul token, nu un browser, așa că nu există nici un motiv pentru a rula manual RFC 6455 înrămarea Rămâi singur. Dupa linia de stare este Încărcătură utilă: iar firul de filetare HTTPServer este exact forma asta are nevoie. tmux, nu o coajă goală, și că este motivul pentru care este aici. Un PTTY crud moare cu priza sa, astfel încât o reîmprospătare pagină, un laptop închis sau un blip wifi ar ucide un rularea build Terminalul se va întoarce ţinând un cadavru. şi să reconectăm aceeaşi comandă. Securitatea urmează regula existentă a fișierului: numele de utilizator ajunge deja rezolvat din sesiunea proprie a membrilor şi este revalidată împotriva UTILIZATORNAME RE şi lista rezervată înainte de începerea oricărui proces, ID-urile sesiunii sunt verificate deoarece tmux citeste cadrubuffer pe o mașină comună, și un cont cu handicap este refuzat chiar dacă Ar lucra în continuare pentru ea. Nici o parola este citit la toate Picături în cont, astfel încât spre deosebire de calea Guacamole credibile stocate niciodată Părăseşte baza de date. Termenul este forțat prin zgârieturi, și un terminal care vine ca Sesiunile de tmux abandonate sunt tăiate atunci când membrul următor se conectează, care are nevoie nici un cronometru, nici o listă cu fiecare cont de pe aparat. 24 teste: forma argv, refuzuri rezervate/invalide, prindere dimensiune, cadru codec inclusiv un cadru împărțit între citiri și o lungime declarată absurdă; Manipularea ramelor, şi cele patru cazuri ale Secerătorului. 107 pas.

  14. · kamo-shared-library

    Înregistrați un terminal de dev-mașină în jurnalul de acces

    Un membru care deschide o carapace pe desktop-1 are acum un tip de eveniment propriu. Asta mașină deține un cluster-admin kubeconfig și conturile sale au fără parole gestionarea pachetelor, care este echivalent cu rădăcină, "care a avut o coajă acolo, de la care adresă și când" trebuie să fie accesibile din același jurnal de acces care Deja răspunde pentru logări. Seif de anexat: sistemul access logs nu are nicio constrângere de verificare (verificat în producția de astăzi) și tipul de eveniment tip este varchar (30). Contrast PhiResourceType, a cărui valoare de Hibernat-semit alb lista ddl-auto: actualizare nu se va extinde.

  15. · SecurityService

    Trimite compania alături de persoana de contact oriunde este etichetată o înregistrare

    O înregistrare care este atât o organizație, cât și o persoană este numită "Harmony Home Loans (Nickolas McGarry) "" Compania conduce, contactul se califică. Această regulă trăieşte. în entitatea browser-uluiLabel(), astfel încât aceste obiective să nu mai aleagă o jumătate și să trimită Ambele. - Reţeaua de plumb ştampilat fiecare intrare cu contactul şi a căzut înapoi la Compania. Aceeași pistă, prin urmare, citit ca o persoană pe cronologia sa și ca o companie pe grila care a produs-o. - Istoria creditului/atribuirii a rezolvat doar contactul. Rezolvat aici Mai degrabă decât în serviciul comun de istorie pentru că acesta este singurul său randator, Și o găsiAllById peste piste distincte pagină este o singură întrebare. - Un cont Leads fila a fost trimiterea {uid, organizațieId} și nimic altceva, așa fiecare coloană citește "---" și fiecare rând legat de /liders/view/nedefinit. Acum trimite ID (care este ceea ce tastele de masă și link-uri pe), cele două jumătăți nume, starea și data Creat. E-mail-ul de plumb este poarta modul în care detaliile de contact plumb este oriunde altundeva: propria ta pistă întotdeauna, oricine altcineva doar cu VEDE LEAD CONTACT INFOthers.

  16. · kamo-shared-library

    Trimite compania unui cont alături de contactul său pentru cumpărători

    Şase culegători de clienţi citesc ContSummaryDTO forma, detaliile de abonament și vrăjitor, și tab-ul de înscrieri conductei și Fiecare dintre ei a numit un client de oricine punctul de contact a fost. Cineva alegerea clientului unui loc de muncă sau a unui ordin este în căutarea organizarea. Numele de afisaj este acum contactul SINGUR. Acesta a folosit pentru a transporta un sufix "(#123) ," care a avut sens în timp ce a fost eticheta întreaga și a produs paranteze cuib în momentul compania a condus-o Uid este deja un câmp propriu pentru orice culegător care trebuie să separe doi clienți cu același nume și browserul compune jumătățile printr-o singură entitateLabel() că fiecare alt ecran orientat spre client trece prin prea.

  17. · kamo-internal

    Comunicare vizualizare

    Trei schimbări în / conduce. Căutare rapidă se deplasează în eroul, deasupra link-uri CRM Setări. În filtru Row a fost ultimul control pe o linie de unsprezece dropdowns, Găsit doar de Scanează trecutul tuturor. LeadManager deține încă călătoria valorii în interogare și stocare în sesiune care restabilește bara de filtrare pe drumul de întoarcere dintr-o pistă Un comutator flip, centrat în rândul paginii: Lead View / Communication View. Două poziții numite mai degrabă decât un comutator, pentru că nici unul dintre acestea nu este "off" ele sunt două moduri de a privi la același set filtrat, și doar un nume de control Unul ar lăsa cititorul să ghicească ce face cealaltă poziţie. Punctul de vedere al comunicării înlocuiește grila cu aceeași cronologie pe care o conduce Fila de comunicare atrage Madeers Fiecare intrare poartă un cip numindu-și plumbul și legându-se în el: cross-lider, un rând care face Nu spun a cui apel a fost de necitit, și găsirea o conversație în valoare Deschiderea este motivul pentru a scana lista. Nici o notă compozitor, în mod deliberat: a nota trebuie să fie despre o pistă, și o cutie care nu ar putea spune care este o capcană Mai degrabă decât o comoditate. Detalii care sunt mai degrabă portante decât accidentale: - Aportul paginii grilă este SUSPENDAT în vizualizarea comunicării. GET /api/security/leads scrie un rând de acces PHI pe plumb se întoarce, și aducerea o pagină pentru a face un ecran care să arate că niciunul dintre ei nu ar pune citiri în audit traseu pe care nimeni nu a efectuat. - Sirul filtrant înmânat liniei temporale este desfiinţat pe propria întârziere a reţelei. Reţeaua renunţă la cererea sa; cronologie nu poate realimenta ori de câte ori Schimbari de siruri de caractere si focuri doua cereri per schimbare, asa ca daca scrii "smith" era zece excursii rotunde, fiecare scriind un dosar de căutare PHI, nici unul dintre ei avortat. - pagina/dimensiunea/sortul sunt scoase din ea. dimensiunea se ciocnește activ, deoarece Cronologia se stabileşte singură. - Cele două piese ale pagerului rămân murate când se golesc. Un ecran:niciun copil nu este Nu este un element de grilă la toate, astfel încât ascunderea le-ar fi lăsat comutatorul ca primul element și alunecat-l pe pista de stânga, off centru.

  18. · kamo-internal

    Adaugă doarCall ca un tip de server telefon

    Adds JustCall to the picker at *************** cu API-ul său cheie şi secretă, un transfer de contacte-import, statut credibil asupra furnizorilor şi logo-ul. Partea interesantă este formarea. DoarCall publică nici un registrator SIP și nu WebRTC credential pentru aplicații terțe părți, și doar outbound-call obiectivul conduce un agent de voce AI mai degrabă decât o persoană VoceCalls = fals, care utilizează Softphone deja porțile de înregistrare pe, și nu Softphone este construit. Dar un membru de pe JustCall poate plasa un apel perfect, doar nu aici, și "voce apeluri nu sunt disponibile cu furnizorul curent" ar fi o minciuna. formati () asadar da numarul de telefon al lui JustCall. Această predare este propriul modul mai degrabă decât o ramură în interiorul cârligului: este un problema lib, și pune-l acolo face testabil. Foloseşte dialler-ul web mai degrabă decât apelul corect: protocolul de înregistrare a aplicației de birou, deoarece un browser nu se poate spune dacă aplicația este instalată și dacă un protocol de navigare necontrolat nu face absolut nimic Nu se întâmplă nimic. FurnizorCapabilități câștigate furnizorType astfel încât o voce falsăCalls poate fi acționat pe mai degrabă decât doar raportate: pentru majoritatea furnizorilor înseamnă "fără apelare," pentru aceasta unul înseamnă "apel acolo." Oglinzi SipCredentialsResult. provider, care există din acelaşi motiv. Noul test de acoperire este geamăn frontend de PbxProviderBillingCoverageTest un furnizor care nu-şi aminteşte nimeni să-l eticheteze nu dă greş cu voce tare, se transformă ca un carte albă într-un singur ecran un admin folosește pentru a alege. Verificat: TSC curat, toate cele 14 gărzi, inclusiv tastele check-i18n - necesar-mesaje, 4,938 teste vitest. sesiune a avut loc acest director de lucru cu propriile sale constructii concurente pe tot parcursul.

  19. · SecurityService

    O cronologie de comunicații peste întregul filtru / conduce, nu un singur plumb

    GET *************** ia aceeași linie de interogare GET pagina de detaliu de plumb trage "Ce are a fost spus la pistele lucrez" este o întrebare despre un set, și până acum Singura modalitate de a cere a fost de a le deschide pe rând. Traducerea filtrului trece la LeadGridFilters, astfel încât ambele obiective să se rezolve. șir de interogare identic; o a doua copie ar deriva, și modul în care aceasta derivă este o cronologie care acoperă diferite piste din grila care a produs-o. Două limite diferite, din două motive diferite. Apeluri, mesaje vocale, texte și E-mail-urile sunt nelegate: LEAD COMMUNICATIONS poartă ORG ID și este indexat pe (ORG ID, OCCURRED AT), astfel încât o interogare keyset merge corespondență org lui cel mai nou și teste fiecare rând pe grilă predicită ca fiind corelat EXISTENTE Note și chat-ul nu poate fi: trăiesc în MEDIA OBJS, care nu poartă nici o org și nici o pistă; și singurul se alăture înapoi este LEADS.STREAM GUID, care nu este indexat. Cei doi rezolvarea pistelor de potrivire primul, plafonat la 1000, și răspunsul spune atunci când În loc să renunţe în linişte la istorie. Autorizaţia este linia temporală principală, aplicată în SQL. O intrare poartă o pistă număr sau adresă proprie plus conținut mesaj, astfel LeadCommsReadGate acum, de asemenea, state regula sa asupra celor trei forme pe care le poate avea un plumb si emite predicatele asemanatoare. Scrierea a doua oară este în cazul în care bug-ul a fost: primul proiect citit "neatribuit are nevoie de VIew UNASsignED LEADS" și a ratat acest refuz() cade prin această verificare la cel contact-info, care ar fi pus corespondenţa fiecărui plumb combinat în faţa unui membru care deţine doar piscina. Cele două forme sunt acum fixate la fiecare alte exhaustiv Spre deosebire de un cont de rollup acest lucru nu se prăbușește un eveniment care a ajuns la două piste potrivite. Două motive care indică același mod: fiecare rând numește plumbul aparţine şi "acest apel a ajuns la ambele" este un fapt despre cartea fiind lucrat, și se prăbușesc rânduri dintr-o singură pagină fix-size poate lăsa supraviețuitorul ultimul geamăn ca o intrare proaspătă, clientul nu se poate deduplica. Întrebările privind criteriile sunt trase în LeadGridCommsQueries ca funcții pure astfel LeadGridComunicationsSqlTest le poate face împotriva metadatelor hibernate reale. Asta contează aici mai mult decât de obicei: specificaţia proprie a reţelei emite deja EXISTĂ subquerii, și acest lucru cuiburi în interiorul unui alt unul care este exact unde Hibernatul acestui serviciu 6.2.13 şi cele 6.5 ale bibliotecii comune diferă.

  20. · VOIPService

    Wire JustCall prin abstractia furnizorului de telefon

    Doar apel (api.justcall.io/v2.1) ca un telefon completProvider: istoricul apelurilor, texte, mesagerie vocală, înregistrări, directorul agentului și disponibilitatea, plus semnat conturi webhooks și un contact opțional import. Auth este un cont întreg cheie / pereche secretă trimis ca brut "cheie:secret" valoare autorizare Token, care autentifică nimic și returnează un 401 care citește ca un rău Credențial. Trei forme de API JustCall conduce design-ul: * Voicemail nu este o resursă. Este un apel al cărui apel info. tipul este "Voicemail," care poartă transcrierea sa în linie și audio în spatele aceleași Înregistrare obiectiv ca orice alt apel cu un filtru, și nu există nici o stare de citire pentru a marca. * Nu există nici o acreditare softphone. DoarCall publică nici un registrator SIP și nu WebRTC token către terţi, iar obiectivul său final unic de apel de ieşire conduce la Al Voice Agent mai degrabă decât o persoană. voceCalls este, prin urmare, fals, care este ce foloseste Softphone-ul deja poarta de inregistrare pe, si de a lua SipCredentials refuză cu o explicație în loc de semiînregistrare. * Directorul este doar citit, și nu există nici un concept de dispozitiv, astfel încât acestea să păstreze Interfaţa nu se preface că scrie. Webhooks sunt înregistrate pe caz de exemplu la *******************1 abonament pe tip de eveniment. Doar Call HMAC-SHA256 acoperă URL-ul înregistrat, astfel încât șir de interogare este în interiorul materialului semnat și nu poate fi rescris Aterizează evenimentele unei orgi pe serverul telefonic al altuia. URL- ul este înregistrat în config json la furnizare deoarece verificarea trebuie să semneze același șir JustCall a făcut momentul în care URL-ul de bază s-a schimbat. Textele de intrare și evenimentele de apel ajung la căile RingCentral deja folosește. VoipMessageservice's handler was RingCentral-shapeverwhere, so its parsing este împărţită din ingerarea sa: ambele şine împărtăşesc acum dedupa, interceptarea cuvintelor cheie, conversație upsert și legătura de plumb. Această partajare este în mod deliberat cuvântul cheie pas este ceea ce înregistrează o opt-out, și o a doua cale ferată în creștere propria copie a Secvenţa este cum se sfârşeşte prin a nu onora STOP. Comutator răspuns SmsKeywordservy a câștigat noua cale ferată din același motiv: este un comutator de declarație, astfel încât o Nelistat constant nu ar fi răspuns nimănui. MMS este de public URL numai atașamentul este parcat în spatele unui URL de necontestat de scurtă durată pe acest serviciu și Acest link este predat. Deliberat nu este un presemnat object-store URL: MinIO Aici este ***************** un URL presemnat este semnat pentru gazda o nume, și Purcelușul lui JustCall nu poate rezolva o adresă în-cluster ar fi 404 pentru ei în timp ce lucrează perfect din interiorul grupului. Asta serviciul este deja accesibil publicului, deoarece primește site-urile lor. Importul de contact este oprit dacă nu este pornit: cartea de adrese a clientului este acces pe membru controlat, și importul-l în momentul în care o cheie este lipită ar Fii o surpriză. Contactele sunt deținute prin intermediul agentului JustCall id sincronizarea extensiei deja înregistrat, și orice ale cărui hărți agent la nici un membru Kamo este omis mai degrabă decât parcat undeva comun. Persistența merge la EmailService, care deține tabele de contact. JustCall apel sumar, sentiment și scor plimbare pe același apel citit și sunt la suprafaţă pe CallLogEntry. Nu a persistat: PHONE CALL LOG nu are astfel de coloane, furnizorul le returnează pe fiecare lectură, și adăugarea coloane ar costa un DDL fereastra pentru un duplicat al magazinului lor. Nu există DDL în această schimbare.

  21. · EmailService

    Obiectivul intern pentru importul de contacte dintr-un sistem extern

    VOIPservice's JustCall Integration are nevoie pentru a ateriza contactele unui client în cartea de adrese a membrului drept, și acest lucru este în cazul în care sunt scrise contacte: un contact hărți numai scalari, cu e-mailuri, telefoane, adrese, orguri, URL-uri, IM-uri și relatii in sapte mese fara cascada, accesibile doar prin Contactează DetailStore. Un apelant care a scris aceste tabele de la un alt serviciu ar fi picătură în tăcere fiecare număr de telefon Livrează Proprietatea este partea portantă. CONTACT.OWNER ID nu este NULL și punctele de la Utilizatori și proprietarul unei Cărți de Contact ESTE controlul accesului (o carte fără proprietari) apartine nimanui si lui 404 pentru toata lumea), asa ca un lot trebuie sa-l numeasca pe membru contactele aparţin şi sunt refuzate pur şi simplu atunci când nu. Fiecare sursă devine propria sa carte din spatele unui rând de Integrare contact în loc să fie amestecat în "My Contacte: Rânduri sincronizate și rânduri tipate manual au cicluri de viață diferite, și membru poate ascunde sau picătură cele importate fără a atinge propriile lor. Upserts se potrivesc pe uid, care caller namespaces la sistemul său. UID este unic pe carte, astfel încât este, de asemenea, ceea ce face o re-sincronizare o actualizare în loc de o secundă copie a tot. Montat sub /api / intern, pazit intreg de InternAuthFilter sesiune de membru în spatele acestor apeluri, astfel încât fără filtru acest lucru ar fi un obiectivul de a scrie contacte arbitrare în cărțile arbitrare ale membrilor.

  22. · kamo-shared-library

    Adaugă JUST CALL ca tip furnizor de telefon

    Apendice la ordinar 5. E EnumType.ORDINAL. și nu poartă nici o constrângere CEC, astfel încât adăugarea este sigură și introducerea oriunde altfel ar re-puncta în tăcere rândurile existente la un alt furnizor PbxProviderBillingCoverageTest pini ordinea de pe cealaltă parte. Third party facturat: organizația deține propriul abonament JustCall (lor API are nevoie de cel puțin un plan de echipă) și JustCall poartă apelurile, astfel încât aceasta este o taxa de integrare, nu de găzduire. PbxBillingClass.of nu are braț implicit, care este ceea ce a forțat decizia mai degrabă decât să lase un nou furnizor factura nimic pentru totdeauna.

  23. · kamo-internal

    O culoare de hârtie pe bloc și blocuri care se potrivesc textului lor

    BLOCAŢI-VĂ ACUM, CONŢINUTUL. Blocurile cititorului au fost toate 200px inaltime orice au avut loc, deoarece RichTextExtension configurează editorul cu minHeight: 200px Comutarea cititorului la RichTextView a scos-o; nimic din clemă a Înălţimea blocului e acum, deci e la fel de înaltă ca şi cuvintele sale. Editorii compozitorului cresc în loc să se mişte. Acelaşi 200px, plus deversare: auto pe container, însemna fiecare bloc deschis trei linii prea înalt şi apoi şi-a dat o bară de defilare mai degrabă decât să crească o bară de defilare în interiorul unei Blochează în interiorul paginii. KbArticleEditor câştiguri Containerul nu se mai derulează, zona de scriere începe la înălțimea unei linii, și dimensiunile rădăcinii la conținut în loc să-și umple gazda. Opt-in, deci articolul Compozitorul păstrează forma potrivită pentru un document de dimensiuni mari. Culoarea hârtiei. Fiecare bloc poartă unul, ales din NoteColorMenu şi aceeaşi paleta pe care o folosesc notele şi geamurile lansării, deci un ceas înseamnă un lucru peste produs mai degrabă decât trei. Culoarea este păstrată ca paletă ID și a rezolvat prin rezolvaStickyColor la randare, astfel încât ambele compozitor și pictura Centrul de Interacțiune dintr-o sursă și o paleta mai târziu Corecţia ajunge la scenariile scrise astăzi. În cititor, un bloc colorat își păstrează culoarea, indiferent dacă este sau nu Acum unul. "Unde sunt eu" este deja transportat de frontieră, lift și coloana vertebrală; dimming hârtie, precum și ar face alegerea autorului arata ca un E o greşeală.

  24. · kamo-internal

    Adaugă logo-ul furnizorului JustCall

    Dosarul logo VOIP a avut FreePBX, Microsoft și RingCentral, dar nu Doar callmark, astfel încât orice suprafață listare JustCall ca un furnizor a avut Nimic de făcut.

  25. · kamo-shared-library

    O culoare de hârtie pe bloc

    ************* deţinând o paletă ID 'lemon', 'glass' Şi niciodată o valoare hex. Depozitat modul în care notele și geamurile de lansare stoca lor, pentru motivul că probleme mai degrabă decât de dragul coerenței: paleta este definită o dată pe client (STICKY PALETE) și fiecare suprafață rezolvă un ID prin RezolvaStickyColor. Persisting hex ar îngheța umbra de azi în rând, așa o corecție ulterioară la paleta ar repara notele și lăsați în liniște script-uri pe culoarea veche şi acelaşi swatch ar însemna apoi două diferite lucruri în funcție de care ecran a fost ales de la. Null nu este nici o culoare: blocul poartă orice suprafață se așează pe. Un gol sau valoarea whitespace este normalizată la nul pe drum, deoarece "" nu este "nu culoare" pentru a rezolvaStickyColor Autorul care a curăţat culoarea ar fi primit lămâie. Cărat prin bloc complet înlocuiți ca orice alt câmp, și acoperite acolo: culoarea supravieţuieşte unei editări, iar una nulă.

  26. · EmailService

    Lasă un mesaj trimis să poarte imagini în interiorul corpului său

    Corpul avea patru forme posibile și trimitea doar trei. ă ramura multipartă/legată puncte la ea imagine și un fișier pierdut imaginea pe cale de ieșire: corpul păstrat un CID: referință la o parte care nu mai era în mesaj, și nimic nu a spus așa. A fost, de asemenea, irecuperabilă în practică, pentru că doar calea tranzacţională stabilită vreodată InlineImages; nimic un membru trimis ar putea ajunge acolo la toate. applyBody acum construiește oricare formă de conținut necesită atunci când corpul se referă la imagini, amestecate atunci când există atașamente, ambalaj mixt legate atunci când există atât legătura ca alternativă HTML. Răspunsul și înainte merge prin trimitere, astfel încât acestea Moşteniţi totul. /send ia imaginile ca propriile lor piese binare, fiecare numit pentru conținutul ID HTML se referă deja. Baza64 în interiorul JSON ar costa o treime din nou în mărime față de cel mai mic tavan din lanț, astfel încât o captură de ecran sau două ar să fie refuzat dintr-un motiv pentru care membrul nu putea face nimic. Numele unei părţi devine un antet Content-ID, astfel InlineImageParts se potrivește cu forma exactă a compozitor ments și refuză orice altceva decât cădere în linişte şi lăsând o gaură în corp.

  27. · kamo-asterisk-support

    Reconcile per-extensie Blocuri WebRTC în loc de mână-editare un registru

    O extensie creat prin API FreePBX lui devine nici un bloc WebRTC, așa că înregistrează peste WSS și apoi nu are nici DTLS sau ICE apel conectat fără audio. Aceste setări nu pot fi exprimate nicăieri FreePBX le va accepta: tabelul să fie [<ext>] (+)] se completează în ************* Până acum acel fișier a fost o listă întreţinută manual într-un ConfigMap, ceea ce a însemnat fiecare extensie nouă a fost rupt în tăcere până când cineva şi-a amintit să-l editeze şi să-l refacă (8888 sat necotate pentru luni). Extensia 8777 a fost cea mai recentă. WebRTCReconciler citește lista de extensie din FreePBX-generat pjsip.endpoint.conf și menține o secțiune gestionat-marker limitată în pas cu La fiecare 30 de ani. Extensii șterse pierde blocul lor automat pentru o secțiune care nu mai există face jurnalul de Asterisc "Secțiunea nu există" la fiecare reîncărcare. Acesta umple doar goluri: orice bloc scris în afara markerilor noștri (KlusterServices Lista, un administrator) este lăsat exact așa cum este, niciodată duplicat și niciodată Preia controlul. Doar obiectivele finale sunt atinse, deci trunchiurile nu sunt fixate un transport WS cu DTLS forţat. Un pjsip.endpoint.conf lipsă este un no-op mai degrabă decât "extensii zero," care altfel ar dezbraca WebRTC de la fiecare extensia care are una. OFF în mod implicit (MANAGE WEBRT endpoints), on for k1m1. Blocul este exact greşit pentru un telefon de birou SIP: forţează DTLS-SRTP telefonul nu poate face şi pini -l la un transport nu vorbeşte. Două lucruri măsurate pe cutia k1m1 live mai degrabă decât presupus: - Reîncarcă trebuie să fie res pjsip.so, nu reîncărcare pjsip. După adăugarea unui bloc de bloc de bază, pjsip reîncărcare, a lăsat obiectivul final pe webrtc=no; un modul reîncărcat a aplicat-o, și un modul reîncărcat, de asemenea, returnat atunci când Blocul a fost scos. Folosind propria reîncărcare a CLI, pjsip-ul de aici ar scrie un corectați fișierul și lăsați configurația de funcționare greșită. - Un bloc (+) poate doar opțiuni ADD, nu suprascrie. Adaugă ( Excepție numai pentru că este o prescurtare aditivă, nu un câmp stocat.) Orice lucru care trebuie să schimbe o valoare generată trebuie fixat în FreePBX Baza de date. Verificat împotriva real /etc / asterisk: ales corect cel Extensie descoperită de la 23, a sărit peste portbagajul Erik Primary, a lăsat existentă List byte-for-byte identice, și a fost un nu-op pe a doua trecere.

  28. · kamo-internal

    Impersonate, astfel încât un operator poate deschide un org ca unul dintre membrii săi

    Afișat lângă Enter pe fiecare / vizualizare de rețea pentru o exploatație administrator platformă Noul IMPERSONATE dreapta. Un drept diferit de SYSTEM USER și în mod deliberat nu sunt implicate de aceasta: intrarea ca utilizator de sistem este o identitate vizibilă, separată a chiriașul poate vedea în propria lor listă de membri, în timp ce acest lucru produce o sesiune nimic în aval pot spune de la acea persoană semnarea în sine. Culegatorul este MemberPickerDialog Neschimbat. Deţine deja căutarea, paging-ul, manipularea tastaturii şi modul în care se explică un rând de netrecut. Ceea ce este nou este înlocuiește în totalitate obiectivul directorului și puncte la organizația țintă membrii, deoarece directorul implicit este propria org sesiune și care este Exact lista greşită. Nimeni nu este filtrat client-side. Serverul marchează un cont de Dumnezeu, o platformă administrator sau un membru neselectat cu un motiv și tabel motiv dialog a crescut pentru a le acoperi: ascunde aceste rânduri ar lăsa un operator în căutarea unui coleg clar în organizație și obținerea Nimic înapoi, care se citeşte mai degrabă ca o căutare ruptă decât ca un refuz. Fila este revendicată sincron în interiorul click-ului propriu al culegătorului, înainte de așteptați, și sesiunea de Storage șterse din aceleași două motive: un popup deschis după o așteptare este unul browser-ul niciodată Am văzut pe cineva cerând şi o fereastră de aceeaşi origine. inclusiv identitatea sesiunii. De asemenea, adaugă pictograma Platforma Admins tab-ul are nevoie pentru noul drept; TSC prins care, pentru care este o înregistrare exhaustivă.

  29. · SecurityService

    Introduceți o organizație de locatari ca unul dintre membrii săi, de la / rețea

    O a doua ușă lângă același-org Dumnezeu-mod unul. Gated on the new IMPERSONATE platforma dreapta prin @RequirePlatformRight, în cazul în care ușa existentă este poarta pe sesiunea care poartă GD. Păstrat ca doi manipulatori mai degrabă decât unul cu un steag. Portile lor de apel sunt cu adevărat diferit, și @RequirePlatformRight nu are nici o variantă în-handler de design a uitat de obiectivul care conta. Cine ar putea fi ENTERED AS este o întrebare separată, și ipersonationReguli țintă răspunde ca o funcție pură asupra faptelor rezolvate: refuzat pentru nivelul superior org, te, un membru cu nici un utilizator, Utilizatorul de sistem, un cont de Dumnezeu, a administrator de platformă, sau oricine nu a putut semna în sine. La fel. functia decide daca un rand in culegator este selectabil, asa ca lista nu poate Oferă cuiva obiectivul ar întoarce departe. Aceeaşi uşă nu împărtăşeşte în mod deliberat aceste reguli. Funcţionează înăuntru. organizația apelantului propriu, care pentru un admin zeu este de obicei de nivel superior unul, și pe oameni care sunt de multe ori ei înșiși administratori Refuzuri aici. Folding cele două împreună ar rupe pagina de setări sau Linişteşte-te. E plin de culegător. Este singurul criteriu final de evaluare al acel controler numind o organizaţie alta decât cea a sesiunii, de aceea este un handler separat mai degrabă decât un parametru pe / căutare: promisiunea clasei că /căutarea nu poate fi lărgită de accident rămâne adevărat. Oamenii refuzaţi rămân înăuntru. lista cu un motiv mai degrabă decât să dispară dintr-o căutare pentru un coleg care este clar în org. spațiu de lucruHost Pentru mutări off EnterAsController în WorkspaceHostResolver, deoarece Ambele uşi au nevoie de răspunsul identic. Două copii ale "care gazda este deschis" este cum unul păstrează trimiterea operatorilor la un certificat interstițial după celălalt Stop. Testele sale s-au mutat cu ea.

  30. · kamo-shared-library

    IMPERSONATE, astfel încât un operator poate intra un chiriaș ca unul dintre membrii săi

    Apendice la Platform RightType, mai degrabă decât introduse: getSortOrder () întoarce ordinal (), astfel încât un drept adăugat în mijloc renumere fiecare dreapta sub ea în consola. Granturile sunt @Enumerate (STRING), astfel încât adăugarea nu schimbă nimic deja Acordat. Deliberat nu pliat în sistem USER. Acest drept intră ca un vizibil, identitatea separată pe care un chiriaș o poate vedea în propria listă de membri și în pista de audit; aceasta produce o sesiune nimic în aval nu poate spune de la semnarea membru în ei înşişi. Întrebări diferite, raza de explozie diferită, deci un operator Prin urmare, dreptul la primul nu are dreptul la al doilea. Vizibilitatea raportului Testați MANAGEMENT REPORTS ca ultima valoare, care se anexează pauze în timp ce dovedi nimic a fost introdus în plus, aşa că acum accelerează ordinalul. Două depozit lot cauta pentru culegatorul din spatele ei: membrii un set de utilizatorii dețin într-o singură organizație, și care dintre un set de membri sunt platforma administratori. Row-at-a-time, care este de două întrebări pe nume, pe un control care Reluăm fiecare apăsare de tastă.

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