Changelog
Ada kabar baru.
Setiap perbaikan pada platform, sebagai kapal.
· kamo-internal
Sebuah "mengapa saya tidak bisa menerima?" menimpa pada filter bar
Rata pada batang filter / lead, memakai ikon navigasi Leads dengan sama Lambang dilarang - sehingga hal pada nav yang mengatakan "Anda diblokir" dan Hal di sini yang mengatakan "di sini adalah mengapa" terlihat satu pernyataan. Hanya diberikan sementara anggota benar-benar diblokir. Ini bukan filter yang terjadi menjadi kosong, itu adalah keadaan yang baik ada atau tidak, jadi ketika larangan membersihkan - sebuah realtime accept-gate acara, atau penyegaran setelah terakhir catatan ditulis - kontrol menghilang dan filter kembali pada mereka sendiri. Sebuah efek menjatuhkan override ketika itu terjadi: meninggalkannya terkunci akan string kisi pada sebuah 'uid IN ()' pencocokan apa-apa, dengan filter masih hijau Dan tidak ada kontrol yang terlihat kiri untuk menghidupkan mereka kembali. Menekan, itu TUMPANG daripada Narrows. buildLeadGridQuery kembali awal pada blockingLeadUids, jadi tidak ada tab pasar, tab status, agen, tanggal atau istilah pencarian berlaku. Itu disengaja: petunjuk pemblokiran tersebar di apa pun Pasar dan status mereka kebetulan berada di, dan berinteraksi dengan bar akan tampilkan sebuah subset ketika membaca sebagai seluruh daftar - persis hal yang salah untuk memberitahu seseorang mencoba untuk mendapatkan diblokir. Set kosong meminta untuk 'uid = 0' daripada menjatuhkan kendala, sehingga tidak pernah dapat memperluas ke organisasi. Tab status dan setiap kontrol pada bar hijau dan dibuat inert sementara pada, karena bar yang masih tampak hidup akan berbohong tentang apa yang memilih baris. Toggle itu sendiri dikecualikan oleh atribut sehingga tetap dapat ditekan, dan tombol aksi di samping tab tidak menyaring sehingga mereka tetap hidup. Puting ulang pada setiap toggle - hasil set adalah yang berbeda dan nomor halaman lama berarti Tidak ada yang menentangnya. Off, tombol pulsa: itu adalah satu hal pada bar anggota diblokir harus Karena itulah petunjuk mereka berhenti datang. On, grid itu sendiri adalah sinyal dan animasi akan kebisingan. Kehormatan lebih memilih mengurangi gerakan.
· SecurityService
Daftar, ganti nama dan akhiri terminal anggota
GET * * * * * * * * * * * * * * DELETE dan PATCH on / terminal / {id}. Setiap salah satu dari mereka memecahkan akun Linux dari SESI CALLER 'S SENDIRI dan tidak ada nama akun ke agen yang datang dari permintaan. Seorang anggota bisa Oleh karena itu hanya pernah melihat, mengubah nama atau mengakhiri terminal mereka sendiri - tidak ada id mereka bisa memasok yang akan mencapai orang lain, karena account bukan bagian dari Apa yang mereka sediakan. Sebuah mesin tidak dapat dihubungi menjawab 200 dengan daftar kosong dan 'tidak dapat dicapai: benar' daripada kesalahan: "mesin dev turun" adalah fakta tentang mesin, bukan kegagalan dari pertanyaan, dan konsol dapat mengatakan sehingga di mana halaman kesalahan bisa hanya mengatakan apa-apa. Itu adalah aturan yang sama DesktopSsoController berikut. Mengganti nama sesi yang telah berakhir adalah 404 dengan kalimat - status jujur untuk "Anda mengubah nama sesuatu yang tidak ada lagi", yang setelah reboot adalah setiap terminal anggota memiliki.
· KlusterServices
Daftar, ganti nama dan akhiri terminal anggota
GET / terminal? pengguna = X, POST / terminal / < id > / kill, POST / terminal / < id > / title. Tidak ada hubungan di balik ini, dan itu adalah desain daripada jalan pintas. Server tmux pada mesin IS registri: sebuah terminal anggota tepatnya sesi yang ada, sehingga salah satu yang berakhir berhenti yang terdaftar dengan apa-apa untuk berdamai, dan reboot - yang mengambil server tmux dengan itu - kosong daftar dengan sendirinya. Sebuah meja harus diberitahu semua itu, dan akan salah setiap waktu itu tidak. Judul gubahan hidup dalam opsi pengguna tmux pada sesi, sehingga judul memiliki sama seumur hidup sebagai shell namanya. Karakter kontrol dilucuti sebelum penyimpanan: judul dirender dalam daftar, dan urutan escape dalam satu akan mengecat ulang layar di sekitarnya - stripping juga apa yang menjaga bidang pemisah dari nilai, yang membuat daftar dapat dibagi dengan membelah di atasnya. Judul dilewatkan sebagai elemen argv tunggal, tidak pernah melalui shell. "Tidak ada server tmux" adalah daftar kosong, bukan sebuah kesalahan. Itulah keadaan mesin setelah reboot, yang tepatnya ketika anggota membutuhkan daftar untuk mengatakan "apa-apa di sini "daripada gagal. 20 tes: bentuk daftar dan pesanannya, sesi tanpa judul pelaporan kosong daripada ", sesi" agen ini tidak membuat tetap tidak terlihat, cacat dan baris bukan numerik yang dilewati daripada fatal, membunuh yang idempoten, judul akan dilucuti / dipotong / unset, dan sebuah judul berisi metacharacters shell Tiba sebagai satu elemen argv. Juga pilihan penjaga pompa terhadap deskripsi tertutup di bawahnya - sama langgeng biasa mengakhiri path recv yang telah ditangani. 131 tes.
· kamo-internal
Sebuah jalan pintas sandi dalam pahlawan, dan gerbang sempit
Dua bagian dari subjek yang sama. Jalan pintas. Mengubah kata sandi Anda adalah tiga kamar jauh di belakang rel - satu hal yang tata letak ruangan dibuat benar-benar sulit untuk mencapai dari yang lama Gulungan, dan itu adalah kontrol yang paling penting. Pahlawan sekarang membawanya, sengaja TIDAK sebagai pil kaca ketiga: dua di sampingnya tujuan, ini adalah tindakan, sehingga padat. Ketika faktor multi- mati ternyata amber dan berkata begitu, karena saat itulah prompt bernilai membuat. Ini rute melalui jalur fokus yang sama yang dipakai palet perintah, sehingga terbuka ruang akses DAN menggulung kartu sandi ke tampilan. Jalur itu sekarang satu fungsi yang dibagi oleh palet, cincin kekuatan dan jalan pintas ini, daripada tiga yang bisa hanyut, segmen cincin sudah bernama bidang yang memperbaiki mereka dan sekarang benar-benar menggunakannya. Password SecurityCard bukan ProfileCard, sehingga pembungkus membawa jangkar gulungan. Gerbangnya. Manusia _ MEMBER _ KEAMANAN tidak lagi menampilkan kartu sandi pada catatan orang lain - hanya anggota sendiri atau tuhan-memenuhi syarat Penontonnya. Ini adalah setengah DISPLAY; bagian yang penting dikirim masuk SecurityService 197b591, yang kembali 403 untuk kondisi yang sama. Kanan dihapus dari layar adalah layar tidier, bukan kontrol keamanan. Dictionary kunci mendarat pertama dalam kamo- terjemahan - kamus 982c1f62. Diverifikasi: tes npm (14 penjaga + 5.139 tes), tsc --noEmit, bangunan berikutnya.
· kamo-internal
Lambang navigasi dilarang, Berikan pada diri saya, dan masking kontak terabaikan
* * The Leads nav icon says when you can accept. * * Seorang anggota yang memegang lead mereka belum bekerja mendapat simbol blok merah atas ikon Leads dan tooltip Menyebut apa yang diblokir, mengapa, dan apa yang harus jelas. Fed ringkasan oleh / lead / available -ringkasan dan terus hidup dengan sebuah acara aksep- gerbang baru pada soket kredit / tugas - muatan hanya membawa anggota id, sehingga setiap browser mengabaikan orang lain dan tanya server sendiri. Shown untuk setiap anggota yang dapat melihat lead, tidak hanya pemegang kredit: sejak bebas - untuk - semua memimpin sekarang dapat sendiri-diklaim, gerbang mengatur mereka juga. The titik tersedia tetap kredibilitas-saja, sehingga dua pernyataan tetap terpisahkan - Anda dapat diblokir dari menerima sementara lead duduk di sana tersedia, dan mereka adalah Hal yang berbeda untuk dikatakan. * * Setiap status dinamai cara INI org nama itu. * * Tooltip, / lead / pemberitahuan tersedia dan detail-halaman salin menyelesaikan Lead / Farm Baru melalui use StatusLabel: label dapat diganti pada / settings / features / crm, dan memberitahu anggota untuk memindahkan memimpin off "New Lead" ketika org mereka menyebutnya sesuatu nama lain status mereka tidak dapat menemukan di picker tersebut. * * / lead / available pemberitahuan terbagi menjadi dua alasan * * - mengarah berutang catatan, menyebabkan perubahan status - karena bergabung ke dalam satu daftar yang mereka baca sebagai tumpukan tidak dibedakan dan anggota harus membuka setiap petunjuk untuk belajar apa itu ingin. Sebuah kesalahan memimpin baik terdaftar sekali, badged. * * Ditugaskan untuk Sendiri * * Duduk di bawah Hot Reassign pada memimpin yang tidak ditugaskan. Ditawarkan pada free-for- semua mengarah ke siapa pun saat ini tidak dilarang, dan pada setiap mengarah tidak ditugaskan ke pemegang ASSIGN _ LEADS. Respon membawa memimpin kembali membuka kedok, jadi setting ke jungkir-balik keadaan assignnedToMe, menghitung ulang keputusan topeng ke TIDAK DIJUAL, dan mengungkapkan informasi kontak tanpa reload. * * Status kontrol pulsa * * sedangkan memimpin adalah milikku dan masih di Lead Baru atau Farm Fresh - itu adalah kontrol yang memperbaikinya, dan header dibaca panjang sebelum tooltip nav. Kehormatan lebih memilih mengurangi gerakan. * * info kontak bertopeng diabaikan, tidak dikosongkan. * * kontektObfuscor.ts cermin ContactObfuscator server persis, menegaskan string yang sama, karena realtime lead relay kapal tanpa topeng penuh DTO untuk setiap pelanggan di org dan browser adalah satu-satunya yang berdiri di depannya. Sebuah bidang kosong dibaca sebagai "lead ini tidak memiliki email", yang merupakan pernyataan yang berbeda dan salah. Filter yang tak ditugaskan diberikan ke semua orang. Without VIEW _ UNASSIGNED _ LEADS itu kembali yang tidak ditugaskan bebas - semua memimpin anggota ini mungkin klaim, dan label mengatakan begitu daripada pilihan diam-diam berarti dua Hal yang berbeda. Klien tidak lagi mengirim pasukan = ASSIGNED untuk mereka anggota - lantai server lebih luas dari itu sekarang, dan mengirim ASSIGNED akan klip persis baris perubahan ini ada untuk menunjukkan.
· SecurityService
Servis secara lebar terima gerbang, tambahkan tugas-diri, dan tutup dua jalur-topeng
* * Endpoints untuk gerbang baru. * * / leads / available -ringkasan dan / leads / tersedia sekarang laporkan kedua alasan anggota diblokir - mengarah pada catatan sejak mereka ditugaskan, dan mengarah pada status asupan mereka - dengan lead sendiri dan status SISTEM wording plus id, sehingga browser dapat menyelesaikan sendiri org label kustom sebelum menunjukkan kepada siapa pun alasan mereka terjebak. Blocked ByComments disimpan sebagai alias dari 'dilarang' baru sehingga peramban masih berjalan Bundel sebelumnya terus bekerja melalui menyebarkan. Gerbang dievaluasi bagi siapa saja yang bisa melihat petunjuk, bukan hanya anggota yang memegang SPEND _ RECEIVE _ LEAD _ CREDIT: anggota yang hanya dapat mengklaim sebuah free- for- semua memimpin adalah tunduk pada disiplin yang sama dan nav mereka harus mampu mengatakannya. The scan kolam kredit di bawah ini masih membutuhkan hak kredit. * * POST / leads / {id} / 1f -to-me * * klaim satu memimpin tidak ditugaskan. Ini kembali memimpin UNMASTED - penelpon adalah assignnee nya pada saat server menjawab - yang apa yang memungkinkan halaman detail mengungkapkan informasi kontak tanpa reload. * * A baru NATS subjek, * * * * * * * * * * * * * * * * * * diterbitkan ketika sebuah catatan tanah pada memimpin, ketika status berubah, dan di kedua sisi dari setiap tugas Ganti. Relay MediaService sudah subsaits ke sevity.leads. > dan peta subjek untuk topik secara umum, sehingga tidak perlu perubahan. Muatan hanya membawa sebuah id anggota: jawaban gerbang tergantung pada seluruh anggota buku, jadi ada tidak berguna untuk menempatkan pada topik org- luas, dan subjek setiap anggota menerima adalah tempat yang salah untuk apa pun yang layak disembunyikan. * * Dua konteks-topeng bypass, keduanya ditemukan audit mana rincian memimpin dapat menjangkau peramban: * * - GET / lead / {id} / history tidak memiliki tugas atau kontak gerbang sama sekali. A field- change log adalah catatan lengkap dari setiap nilai bidang yang pernah diadakan, sehingga kembali e-mail dan nomor telepon topeng memimpin sendiri mengambil - dan bukan hanya yang sekarang, setiap sebelumnya juga. Sekarang membawa dua keputusan yang sama sebagai getLeadById, and LeadHistorstContactMask obfustates the contacts-bearing barrow. Status, tugas dan jumlah muatan riwayat tidak tersentuh: penimpaan ini Informasi kontak, bukan jejak audit. - GET / lead / callback-context / {id} mengirimkan alamat e- mail dan dua telepon angka untuk setiap callback di org, ungated. A callback id was a way to read rincian kontak dari pemimpin setiap rekan. A write-back guard on updateLead. Baca mask tidak lagi mengosongkan kontak Ladang, itu obfustates mereka - sehingga pemanggil bertopeng sekarang memegang nyata mencari string yang akan bertahan sempurna bahagia. Hirarki yang tepat membuat ini sulit untuk jangkauan, tetapi "sulit untuk mencapai" bukan jaminan dan mode gagal diam korupsi nomor telepon pelanggan. * * Grid visibility. * * Tanpa VIEW _ UNASSIGNED _ LEADS lantai / lead menjadi "saya lead plus unassign freed- for- semua lead "daripada" my leads ", dan bebas -for- semua lead dapat dibuka dan sejarahnya dibaca - baris Anda dapat lihat tapi tidak bisa membuka adalah bug. Membaca CORRESPONDENCE pada satu adalah berbeda Pertanyaan dan LEADCompsReadGate masih menjawab dengan VIEW _ LEAD _ CONTACT _ INFO _ OTHERS; scope grid- comms sengaja menjaga lantai sempit, dengan komentar yang mengatakan mengapa dua sekarang berbeda.
· kamo-shared-library
Wide the accept gate, obfuscate mask info, let free- for-all lead be claim
Tiga perubahan terkait ke inti lead-assignment. * * Gerbang penerimaan sekarang mengajukan dua pertanyaan, lebih dari setiap lead ditugaskan. * * LeadConcept EligibilityService menggantikan gerbang komentar yang hidup di dalamnya Kredit LeadAssignments Service. Sebuah blok memimpin pemegang nya dari mengambil lain ketika baik itu tidak memiliki catatan dari mereka tertulis Since itu ditugaskan kepada mereka, atau itu adalah masih duduk di Fresh > Lead baru / Farm > Farm Segar. Kedua bagian menutup lubang. Aturan lama dihitung setiap catatan pernah ditulis, sehingga memimpin yang kembali ke anggota yang menyampaikan catatan dari tugas mereka sebelumnya dengan itu. Dan itu hanya tampak pada lead diperoleh melalui sistem auto- assignment, yang meninggalkan setiap rute lain - pekerjaan tangan manajer, impor, klaim diri - sebagai cara untuk mengumpulkan lead yang tak tersentuh dengan kolam masih terbuka. Aturannya adalah dua pertanyaan berdasarkan apapun ukuran buku anggota: tugas saat ini, maka satu mengelompokkan MediaObj bersama di atas arus mereka guads. Memperluas lingkup ke setiap tugas membuat lama kuiri-per- loop memimpin tidak terjangkau - itu adalah bentuk yang membuat / lead grid lambat, dan ini berjalan di setiap render dari nav lead untuk setiap sinyal-di anggota. Status pemblokiran secara eksplisit dalam LeadStatusType ketimbang turunan dari Is AllowSwitchBack. Mereka berdua kebetulan menjadi satu-satunya status yang membawa tanda, tetapi menjawab pertanyaan yang berbeda, dan status masa depan ditandai sama cara tidak harus mulai diam-diam memblokir penerimaan. Cocok dengan sistem yang tersimpan deskripsinya, sehingga label status suai org tidak pernah mempengaruhi aturan. * * Info kontak Masked obfuscated daripada blanked. * * ContactObfuscator ternyata (555) 555555 kedalam (555) 555- * * 55, snadjaminia @ gmail.com kedalam s * * * * * * * * * @ gmail.com, dan 123 Main St ke * * * Main St Sebuah lapangan kosong tidak dapat dibedakan dari satu tidak ada yang diisi, sehingga penampil terbatas tidak dapat Katakan "ada nomor di sini Anda mungkin tidak membaca" dari "memimpin ini tidak memiliki nomor" - Dan staf mengejar bacaan kedua. Kota, kode pos dan negara sekarang bertahan pada dasar yang sama negara selalu lakukan: cukup kasar untuk mengidentifikasi duplikat, Tidak berguna untuk mencapai siapa pun setelah nomor jalan hilang. Tanggal lahir tetap (Tidak ada yang menahannya) sewaktu ia melipat sayap atau mengembangkannya sehingga ia tidak jatuh ke bawah (selain daripada Allah) yakni dengan kekuasaan-Nya. The browser mirror this exactly * * * * * * * * * * * * * * because Pemimpin Realtime Publisher penggemar lengkap DTO terbuka untuk setiap pelanggan di org tanpa proyeksi per- penerima mungkin. Suites Java dan vitest menegaskan Senar yang sama sehingga keduanya tidak bisa terpisah tanpa diketahui. * * Tak ditugaskan bebas-for-semua lead terlihat dan dapat diterima. * * * * * * * * * * * * * * Kanan untuk - semua adalah pintu terbuka dan membawa gerbang terima dengan itu - jika tidak akan menjadi cara di sekitar disiplin itu ada bersama - dan permen / menghabiskan kredit sendiri persis sebagai accectNextLead tidak, jadi Max Daily Menghabiskan masih topi itu. ASSIGN _ LEADS adalah pintu tinggi: memimpin apapun yang tidak ditugaskan, tidak ada gerbang, tidak ada kredit. Lisensing adalah batasan hukum dan tidak ada yang menolak. LeadGridQuery memperoleh * * * * * * * * * * * * * * * memutar jaringan lantai izin dari "mengarah ditugaskan kepada saya" ke dalam "mengarah kepada saya, ditambah apa pun benar-benar untuk meraih. "Bersembunyi tanpa klaim gratis-for- semua mengarah dari semua orang tanpa VIEW _ UNASSIGNED _ LEADS meninggalkan mereka diakui dalam teori dan tidak bisa dihubungi dalam latihan.
· kamo-internal
Tanda pada bahasa, dan berhenti menyalin daftar platform
Selesai c20bac57. Bahasa sekarang membawa bendera mereka, sama dengan yang NavTop switcher menunjukkan dan dari sumber yang sama - nilai tertutup serta setiap baris dalam menu. Mendapatkan sana terkena masalah sebenarnya: options.ts telah tumbuh salinan pribadi dari empat daftar platform telah memiliki, yaitu bagaimana halaman diganti bekerja juga. Bahasa-bahasa yang retyped salinan dengan tidak ada kode negara, sehingga bendera tidak Bahkan mungkin. Sekarang app / lib / lavages.ts, yang pengalih NavTop dan penerjemah percakapan sudah berbagi. Mata uang adalah 34-entry benih terhadap platform apos; s 160- aneh, jadi anggota dibayar dalam naira atau shekels membaca mata uang mereka sendiri sebagai kode kosong tanpa simbol dan tanpa nama. Sekarang app / constants / tracecies.ts. Zona Waktu dikembalikan dari 27 nama yang sama. Sekarang diturunkan dari TIMEZONE _ ENUM _ TO _ IANA, satu peta lengkap, sehingga picker tidak dapat menawarkan zona tidak ada yang dapat menyelesaikan. Lokasi Kantor menyimpan nilai-nilainya tapi mereka sekarang diperiksa melawan Java enum dengan tes. Status keanggotaan tim tetap sebuah daftar eksplisit dengan tujuan: yang dihasilkan Cermin typeScript adalah STALE dan hilang CONTRACTS _ SENT, sehingga berasal dari ada akan diam-diam drop anggota status benar-benar diatur untuk. Enum Java memiliki sembilan; test pin semua sembilan. Zona waktu sekarang menunjukkan apa waktu itu ada. Dua puluh tujuh nama enum dengan garis bawah dihapus adalah daftar Anda harus sudah tahu jawaban untuk baca; waktu adalah hal yang dipilih, sehingga hal yang ditampilkan. Juga perbaikan klaim komit pertama tidak memberikan: framer- gerakan tidak berkonsultasi lebih memilih -reduced- gerak dengan sendirinya, sehingga ruang crossfade dan menyimpan bar animasi terlepas dari pengaturan. MotionConfig reducedMotion = "user" Sekarang mencakup keduanya; CSS- potongan didorong sudah membawa pencarian mereka sendiri. Dan lapangan negara membuat bendera dalam tampilan baca, cocok dengan picker yang diproduksi itu. Diverifikasi: tes npm (14 penjaga + 5.121 tes, 70 dari mereka atas app / lib / memberProfile), tsc --noEmit, build next.
· kamo-internal
Membangun ulang Profil saya sebagai pahlawan dan lima kamar
* * * * * * * * * * * * * * * adalah satu 1,999- baris render komponen 13 kartu identik dari satu kolom. Satu pembantu SectionCard memberikan semua dari mereka radius yang sama, bayangan yang sama, ikon chip yang sama dan Edit / Save / Batal trio, jadi "Informasi Akun" - dua tanggal tidak ada yang tanggal dapat mengubah - membawa tepat berat "Sandi & MFA". Tata letak adalah Mengatakan kebenaran tentang hirarki halaman tidak memiliki. Pembangunan kembali: Pahlawan yang menyimpan resolusi wallpaper karya MenterHeader, bekas luka komentar termasuk, dan menambahkan identitas itu hanya dekorasi: nama sebagai halaman adalah salah satu bagian dari jenis besar, waktu lokal anggota berdetik di zona mereka, negara MFA, tanda terakhir masuk, dan cincin kekuatan. Lima kamar di belakang rel - Identitas, Penampilan, Pekerjaan, Akses, Regional - satu terbuka pada suatu waktu, dibawa dalam URL sebagai & kamar =. Sebuah ruangan yang setiap kartu gated pergi untuk penampil render tidak item rel sama sekali. Klik-ke-edit field dan satu tingkat lantai simpan bar, ganti 39 tombol. Simpan kipas angin pada titik akhir di bawah settled: sebuah grup yang sukses Melakukan sementara kelompok yang gagal menjaga ladang nya kotor dengan alasan. Cmd + K di setiap bidang, jadi kamar menyembunyikan sesuatu tanpa menyembunyikannya. Card- berbentuk kerangka terhuyung bukan satu spinner penuh tab. Dua cacat ditemukan saat membaca, tetap di sini: Alamat tidak pernah bekerja di arah kedua. Loader hardcode lima string kosong dan tidak pernah membaca data.address, yang SecurityService tidak kirim; dan klien 's {street, city, state, zip, negara} bukan bentuk wire - member.address adalah EmbAddress dari {addressDetail, lokal, subdivisi, postalCode, negara}. Jadi itu dibuat kosong untuk semua orang dan kunci disimpan entitas tidak membawa. Sekarang menggunakan bentuk sisa platform sudah mengirimkan, dengan bundaran-perjalanan tes. "Legal name:" dan "Born" adalah literals Inggris di MemberHeader, dan lokasi kerja dan label status karyawan adalah literals Inggris di komponen. Semua keyed. Struktur. Aturan pindah ke aplikasi / lib / memberProfil, dimana vitest sebenarnya mengumpulkan mereka - app / settings / * * tidak dalam allowlist termasuk, jadi tes ditulis di samping halaman akan telah berlalu dengan tidak pernah berjalan. fields.ts kunci: setiap bidang dideklarasikan sekali dengan kamar, kartu, label, gerbang dan titik akhir. Palet, cincin kekuatan, menyimpan fan- out dan gating hak Semua membacanya bukannya mengimplementasikan kembali, dan 57 tes pin gerbang bawah - termasuk bahwa tidak ada bidang yang pernah lebih terlihat dari kartu, dan bahwa penyuntingan tidak pernah lebih luas dari melihat. Quick Tips hanya untuk tab ini saja, dengan mengabaikan bantuan Tips; SettingsView membuat rel dari tab aktif, sehingga sembilan lainnya menjaga mereka. Palsu bergerak dari kepala pengaturan menjadi pahlawan. Juga menghapus ProfileTab.tsx (2.650 baris), LoginSecurityTab.tsx (787) dan Anggota PermisionsTab.tsx (2.136), yang tidak memiliki importir. Dictionary kunci mendarat pertama dalam kamo- terjemahan - kamus 4bb91245. Diverifikasi: tes npm (14 penjaga + 5.106 tes), tsc --noEmit, membangun berikutnya, dan cek -i18n-keys --recurre- pesan terhadap klon baru dari kamus.
· kamo-internal
Terminal Linux sebenarnya dalam jendela alat, dan submenu untuk mencapainya
Opsi nav Linux Desktop menjadi menu daripada peluncuran - Desktop Jauh dengan ukuran, Terminal Remote - persis sebagai softphone memiliki panggilan, pesan suara dan teks. Satu perubahan registry melakukannya: 'kind:' action "menjadi 'kind:' tool", dan NavToolButton telah membuat sebuah submenu dalam semua tiga tempat sementara toolSections telah menjadi sumber berbagi bagi nav dan home launchpad, jadi keduanya tidak bisa melayang. THE TERMINAL. xterm.js melawan PTY nyata pada anggota apos; s mesin dev sendiri, sehingga adalah sebuah terminal dan bukan sebuah perintah runner: aplikasi level-screen (vim, htop, less), 24- bit warna, tetikus pelaporan, bracketed pasta, lebar dan menggabungkan glyphs, diklik OSC 8 link. Tidak ada yang ditafsirkan dalam perjalanan melalui - keystroke adalah byte untuk PTY dan output adalah bytes kembali - yang merupakan satu-satunya cara terminal yang pernah sebenarnya kompatibel dengan apa yang orang jalankan dalam satu. Di atas emulator: status chip yang pulses daripada mengandalkan warna saja, judul yang berikut shell sendiri urutan OSC sehingga melacak cd dan perintah berjalan, copy- on- pilih dengan Ctrl + Shift + C / V, Ctrl + Shift + F pencarian, Ctrl + / / / 0 zoom, dan palet yang mengikuti tema penonton. Shell outlives jendela. Ini berjalan di bawah tmux keyed pada id jendela, jadi segarkan, koneksi yang dijatuhkan atau tool- window mengembalikan reattaches ke sama sesi dengan scrollback dan perintah yang berjalan - yang juga mengapa menjatuhkan soket menghubungkan kembali dengan backoff daripada melaporkan kegagalan. The transport lives in * * * * * * * * * * * * * * free of React and of xterm, jadi backoff dan frame split dapat diuji tanpa DOM. THE STORED SIZE DESCTOP IS GONE, DAN DENGAN IT DesktopResolutionPicker. Sudah diatur. pada pengaturan halaman empat layar dari setiap peluncuran dan membaca dari localStorage, jadi "mengapa itu membuka kecil?" tidak ada jawaban di dekat hal yang membuka kecil. Ukuran kini dipilih dengan klik yang sama yang membuka desktop; openKamoDesktop membawanya secara eksplisit dan pemanggil tanpa opini melewati 'fit', yang merupakan yang default selalu. Tiga cacat ditemukan dan diperbaiki dalam tinjauan diri, semua diam: penanganan pintasan dicantolkan oleh efek yang kebakaran sebelum emulator async ada, sehingga tidak pernah terikat sama sekali; menutup jendela sementara permintaan tiket dalam penerbangan masih membuka soket setelah itu, meninggalkan shell melekat ke apa-apa bahwa per-anggota cap melanjutkan menghitung; dan dekorasi pencarian diabaikan Pilihan-pilihan yang ada 'dua pandangan tertutup-warna. Mengetik ref xterm bukan 'apapun' adalah apa yang menangkap yang terakhir. 405 test files / 5049 test pass, 14 penjaga bersih, tsc bersih, dan real produksi membangun berhasil - tsc hijau saja membuktikan apa-apa di sini. Kamus didorong pertama (1115c267f); diverifikasi terhadap klon segar cara CI melakukannya, karena pesan lokal / adalah gitignored.
· kamo-internal
Sebuah keadaan jendela keempat - pecahan, seret ke detach, seret ke reorder
Sebuah jendela alat popup memiliki tiga keadaan: berlabuh di baris sepanjang bawah, dimaksimalkan atas viewport, atau diminimalkan ke kepala obrolan. Ini menambahkan FLOATING - terlepas dari baris, menjatuhkan di mana saja di layar, (Dan dia berada di antara kedua jalan) yaitu menuju ke arah Timur. BUTTON THE. Kontrol dalam judul bar, memakai ikon yang sama yang mendeteksi catatan, mengangkat jendela dari slot itu di dan cascades itu membersihkan dermaga sehingga mata bisa mengikutinya. Menekan lagi itu kembali ke baris. Sebuah jendela dimaksimalkan tidak dimaksimalkan dan terpusat, karena itu tidak memiliki slot untuk datang dari. Naga, yang merupakan setengah menarik. Menekan judul bar dan menarik adalah SATU gerakan dengan tiga hasil, dan di mana jendela membiarkan pergi memutuskan mana: - dirilis dengan tepi bawah dalam 96px dari bawah viewport itu, dibutuhkan slot di baris - sehingga menyeret sebuah jendela berlabuh menyamping REORDERS dermaga, yang sebelumnya tidak mungkin sama sekali; - dirilis di tempat lain mengapung di sana, yang untuk jendela berlabuh adalah Saat itu melepaskan diri. Ini melepaskan diri dari persis di mana itu, jadi tidak ada yang melompat; - Dan jendela mengambang menyeret kembali turun terkunci ke baris karena pendekatan, pada ukuran standar dan dalam rangka dengan tetangganya. EDGE bawah diukur, bukan penunjuk: menyeret sebuah jendela 650px dengan batang judul menempatkan penunjuk 600px di atas dok pada frame pertama, dan tes pointer akan memisahkan setiap upaya pada reorder. Tidak ada yang berkomitmen sampai pointer muncul. Jendela yang dibawa, tetangga menyeret untuk membuat ruang (atau menutup jajaran di belakangnya), drop rail brightening as the dock nears and the halo around the slot it will tanah dalam adalah semua pratinjau diselesaikan dari kotak hidup setiap bingkai - yang adalah apa yang membuat Escape, dan mengubah pikiran Anda setengah jalan, biaya apa-apa. Dua keputusan yang lebih kecil layak penamaan. Docked window are now positioned dari ujung TOP mereka daripada disematkan dengan "bottom: 0"; atas dan bawah adalah sifat yang berbeda dan tidak ada transisi membawa elemen antara mereka, sehingga snap akan melompat Namun waktu itu. Dan "dapat diubah ukuran: salah" menjadi sebuah FLOOR ketika jendela keluar baris daripada veto - komposer email adalah salah satu alat fixed- size, dan itu adalah anggota jendela paling ingin lebih banyak ruang untuk. Urutan baris dan geometri float keduanya bertahan dari reload: snapshot membawa kotak float, ukuran dok untuk kembali ke, dan urutan array, yang merupakan anggota sendiri kiri-to-pengaturan yang tepat. Butuh @ kamo / tool-core 0.1.6 (setFloating / setFloatGeometri / setWindowOrder), menabrak di sini.
· SecurityService
Sajikan Terminal Remote - shell nyata atas WebSocket
Jembatan browser ke PTY pada mesin dev milik anggota sendiri. Biniary frame are terminal, frame teks adalah kontrol; di jauh hop sebuah HTTP 101 ke stream panjang-prefixed mencapai agen pada port kebijakan jaringan sudah Izin, sehingga tidak ada perubahan Cilium diperlukan. WebSocket pertama dalam layanan ini, dan sengaja yang mentah. STOMP adalah broker pesan atas sebuah soket dan apa perjalanan di sini adalah sebuah stream byte antara browser dan shell - amplop di sekitar setiap keystroke membeli apa-apa. AUTHORIZATION TERJADI SEBELUM SOCKET. Peramban tidak dapat menempatkan header pada Konstruktor WebSocket, jadi daripada mengajar jabat tangan untuk mengurai * * *, sebuah titik akhir terotentikasi biasa membuat seluruh keputusan dengan sesi dalam tangan dan tangan ke depan sebagai tiket tunggal-menggunakan yang tidak berharga 30 detik Nanti dan lagi setelah satu penggunaan. Itu cermin link KamoDesktop, yang Keras untuk persis alasan ini: token dapat dimainkan kembali duduk dalam sejarah dan dalam Ctrl + Shift + T, dan shell lebih buruk dalam hal itu daripada desktop, tidak lebih baik. Jabat tangan tidak membaca apa-apa lagi dari klien - bukan nama pengguna, bukan akun, hanya petunjuk ukuran agen penjepit pula. Akun Linux berasal dari kredentalFor (< id anggota pemanggil sendiri >), jadi permintaan tidak dapat nama seseorang shell lain, dan Origin adalah disematkan ke host sedang ditangani. Tak ada kata sandi baca sama sekali: agen adalah root dan tetes ke dalam account, sehingga reversibel credential Guacamole kebutuhan tidak pernah tersentuh di jalan ini. Audited sebelum fakta, secara sinkron, ke dalam Akses Log yang sama yang sudah jawaban "yang ditandatangani dari mana" - dengan IP, geo dan user- agen, di HIGH Kekejaman. Sebuah baris yang hanya muncul pada keberhasilan akan hilang persis kasus itu penting. Delapan terminal per anggota, karena masing-masing adalah PTY dan benang pada berbagi VM yang telah diturunkan oleh tekanan memori sebelumnya. Menutup soket tidak membunuh shell; agen berjalan di bawah tmux sehingga Refresh atau putus koneksi kembali ke pekerjaan masih berjalan. 21 tes: tunggal-gunakan, berakhir kedua sisi batas, tanpa tahu-token keheningan, cap per-anggota dan rilis, bukan -sequential token, dan frame codec including satu - byte- at-a- waktu pengiriman, absurd deklarasi panjang, dan membaca Upgrade 's status line tanpa menelan sungai di belakangnya.
· KlusterServices
Berikan agen titik akhir PTY untuk Terminal Jauh
GET / pty upgrade koneksi ke 'kamo-pty' dan menjadi sebuah shell: satu PTY per jendela alat peramban, 'su - < pengguna >' kedalam sesi 'tmux new- -A', frame dipompa kedua cara di atas soket mentah. 101 daripada WebSocket. Penelepon adalah SecurityService memegang pembawa token, bukan browser, jadi tidak ada alasan untuk tangan-roll RFC 6455 framing ke tinggal stdlib- saja. Setelah baris status itu adalah 'uint32 panjang 124; uint8 tipe £124; payload ', dan ThreadingHTTServer' s threads-per- connection is exactly the shape ini kebutuhan. tmux, tidak shell telanjang, dan itu adalah seluruh alasan di sini. A mentah PTY mati dengan soket nya, sehingga penyegaran halaman, laptop tertutup atau blip wifi akan membunuh menjalankan build - dan kamo-internal menyimpan kembali alat jendela pada load, sehingga dipulihkan terminal akan kembali memegang mayat. 'new- session -A' membuat first-connect dan menghubungkan kembali perintah yang sama. Keamanan mengikuti aturan yang telah ada: username telah tiba dari sesi anggota sendiri dan divalidasi terhadap USERNAME _ RE dan daftar terurut sebelum proses apapun dimulai, id sesi dicentang karena tmux baca '.' dan ':' sebagai sintaks alamat, ukuran dijepit karena mereka mengalokasikan framebuffer pada mesin terbagi, dan akun dinonaktifkan ditolak meskipun 'su' masih bekerja untuk itu. Tidak ada kata sandi yang dibaca sama sekali - agen adalah root dan drop to the account, so unlike the Guacamole path the stored credential never meninggalkan database. TERM dipaksa melalui 'env' karena 'su -' membangun ulang lingkungan dari goresan, dan terminal yang muncul sebagai 'bodoh' tidak memiliki vim, hotop atau kurang. Sesi tmux yang ditinggalkan dimunculkan ketika anggota berikutnya terhubung, yang membutuhkan baik timer maupun daftar setiap account pada mesin. 24 tes: bentuk argv, reserved / invalid penolakan, ukuran clammping, frame codec termasuk frame split di baca dan sebuah absurd dideklarasikan panjang, kontrol menangani frame, dan reaper empat kasus. 107 lewat.
· kamo-shared-library
Rekam terminal mesin berkas dalam log akses
Seorang anggota membuka shell pada desktop- 1 sekarang memiliki jenis acara sendiri. Itu mesin memegang sebuah cluster- admin kubeconfig dan rekeningnya memiliki passwordless manajemen paket, yang root- setara - "yang memiliki shell di sana, dari alamat yang mana, dan ketika "harus dijawab dari Access Log yang sama sudah menjawab untuk login. Aman untuk ditambah: system _ access _ log tidak membawa batasan CHECK (diverifikasi dalam produksi hari ini) dan event _ type adalah varchar (30). Kontras PhiResourceType, yang Hibernate- memancarkan nilai whitlist dengan otomatis: pembaruan tidak akan pernah melebar.
· SecurityService
Kirim perusahaan bersama kontak dimanapun catatan berlabel
Sebuah catatan yang baik organisasi dan seseorang bernama "Harmony Home Loans (Nickolas McGarry) "- perusahaan memimpin, kontak memenuhi syarat. Aturan hidup dalam browser hak label (), sehingga endpoints ini berhenti memilih satu setengah dan mengirim keduanya. - The / lead garis waktu grid dicap setiap entri dengan kontak dan jatuh kembali ke Perusahaan. Petunjuk yang sama, oleh karena itu, membaca sebagai orang pada waktunya dan sebagai Perusahaan di grid yang memproduksinya. - Sejarah kredit / tugas utama memecahkan kontak saja. Dipecahkan di sini daripada dalam layanan sejarah bersama karena ini adalah perender satu-satunya, dan satu findAllById di halaman yang berbeda lead adalah satu query. - A account 's Leads tab was sending {uid, organizentionId} and nothing else, so setiap kolom membaca "---" dan setiap baris terkait ke / lead / view / undefined. Sekarang dan keduanya (suami-suami), status dan datecreated. Email memimpin ini digated jalan kontak detail adalah di mana-mana lain: memimpin Anda sendiri selalu, orang lain hanya dengan VIEW _ LEAD _ CONTACT _ INFO _ OTHERS.
· kamo-shared-library
Kirim sebuah perusahaan akun bersama penghubungnya untuk pelanggan pemetik
Enam pelanggan pemetik membaca AccountSummaryDTO - editor order, service- job formulir, detail berlangganan dan wizard, dan tab pendaftaran pipa - dan setiap salah satu dari mereka bernama pelanggan oleh siapa pun titik kontak itu. Seseorang memilih pelanggan yang pekerjaan atau perintah milik adalah mencari organisasi. disparyName sekarang kontak ALONE. Digunakan untuk membawa akhiran "(# 123)", yang masuk akal ketika itu adalah seluruh label dan menghasilkan sarang kurung saat "Harmony Home Loans (Nickolas McGarry (# 123)". Uid adalah sudah lapangan sendiri untuk setiap picker yang perlu memisahkan dua pelanggan dengan nama yang sama, dan peramban menyusun bagian melalui satu label hak () bahwa setiap pelanggan lainnya menghadap layar juga.
· kamo-internal
Tampilan Komunikasi - seluruh buku disaring sebagai satu timeline
Tiga perubahan ke / lead. Pencarian cepat bergerak ke pahlawan, di atas link CRM Pengaturan. Dalam filter baris itu adalah kontrol terakhir pada garis sebelas dropdowns, dapat ditemukan hanya oleh memindai melewati mereka semua. LeadManager masih memiliki nilai perjalanan ke query dan into the session storage that restore the filter bar on the way back dari petunjuk - kotak dipindahkan, tidak ada yang lain tidak. Sebuah switch flip, berpusat dalam baris paginasi: Tilikan Lead / Komunikasi. Dua posisi bernama daripada Switch, karena tidak satupun dari ini adalah "off" - mereka adalah dua cara untuk melihat set disaring yang sama, dan nama hanya kontrol satu akan meninggalkan pembaca menebak apa posisi lain tidak. Tampilan Komunikasi menggantikan jaringan dengan timeline yang sama dengan garis waktu sendiri memimpin Tab komunikasi menggambar - komponen yang sama, enam sub- tab yang sama, entri yang sama renderers - scoped ke apa pun batang filter saat ini cocok. Setiap entri membawa sebuah chip penamaan memimpin dan menghubungkan ke dalamnya: cross- lead, baris yang tidak tidak mengatakan yang panggilan itu tidak dapat dibaca, dan menemukan satu percakapan layak pembukaan adalah alasan untuk memindai daftar. Tidak ada komposer catatan, sengaja: sebuah catatan harus tentang satu memimpin, dan kotak yang tidak bisa mengatakan yang merupakan perangkap bukan kenyamanan. Rincian yang berjalan-bantalan bukan kebetulan: - The grid 's halaman pengambilan adalah SUSPENDED dalam Tampilan Komunikasi. GET / api / keamanan / lead menulis satu baris akses PHI per memimpin itu kembali, dan mengambil halaman untuk membuat layar menunjukkan tidak satupun dari mereka akan menempatkan pembacaan dalam audit jejak yang tidak ada yang dilakukan. - String filter diserahkan ke timeline adalah debounced pada penundaan grid sendiri. Grid mengurangi permintaan; timeline tidak dapat - mengambil kembali kapanpun string perubahan dan kebakaran dua permintaan per perubahan, jadi mengetik "smith" adalah sepuluh perjalanan keliling, masing-masing menulis catatan pencarian PHI, tidak satupun dari mereka dibatalkan. - halaman / ukuran / semacam yang dilucuti dari itu. ukuran secara aktif bertabrakan, karena Waktu menetapkan sendiri. - Pager itu dua trek tetap Mounted ketika mereka kosong. Sebuah tampilan: tidak ada anak bukan item grid sama sekali, jadi menyembunyikan mereka akan meninggalkan saklar sebagai yang pertama item dan meluncur ke trek kiri-tangan, di tengah.
· kamo-internal
Tambahkan Just Call sebagai tipe server telepon
Tambahkan JustCall ke picker di * * * * * * * * * * * * * * * * dengan API kunci dan rahasia, sebuah konteks-impor toggle, status kredensial pada penyedia tab, dan logo. Bagian yang menarik adalah memanggil. Just Call mempublikasikan tidak ada SIP registrar dan tidak ada Kredensial WebRTC untuk aplikasi pihak ketiga, dan hanya outbound- panggilan titik akhir drive agen suara AI daripada seseorang - sehingga laporan backend voicls = false, which usesoftphone already gates registrasi on, and no Ponsel lunak dibangun. Tapi anggota di Just Call dapat menempatkan panggilan dengan baik, hanya tidak di sini, dan "panggilan suara tidak tersedia dengan penyedia saat ini" akan menjadi Jadi, serahkan nomor ini ke Just Call. Bahwa handoff adalah modul sendiri daripada cabang di dalam hook: itu adalah lib perhatian, dan meletakkannya di sana membuatnya diuji. Ini menggunakan dilaler web daripada hanya panggilan: protokol register aplikasi desktop, karena peramban tidak dapat memberitahu apakah aplikasi yang diinstal dan navigasi protokol yang tidak tertangani tidak melakukan apa-apa - anggota tanpa aplikasi akan klik dial dan menonton tidak ada yang terjadi. ProviderCapability diperoleh providerType sehingga voicls palsu dapat dilakukan pada daripada hanya dilaporkan: untuk sebagian besar penyedia itu berarti "tidak ada panggilan", untuk ini satu itu berarti "dial di sana". Cermin SipCredentialsResult.provider, yang ada untuk alasan yang sama. Tes cakupan baru adalah kembaran depan PbxProviderBillingCovereTest - penyedia tidak ada yang ingat untuk label tidak gagal keras, itu merender sebagai kartu kosong dalam satu layar yang digunakan admin untuk memilihnya. Diverifikasi: tsc bersih, semua 14 penjaga termasuk check-i18n-keys --prevenre- pesan, 4.938 tes vitest. 'build' selanjutnya TIDAK dijalankan terhadap perubahan ini: lain sesi ini memegang direktori kerja dengan kontemporer sendiri membangun seluruh.
· SecurityService
Sebuah timeline komunikasi atas seluruh / lead filter, bukan satu lead
GET * * * * * * * * * * * * * * mengambil string query SAME GET halaman detail utama menarik - di setiap lead filter bar cocok. "Apa yang telah telah dikatakan untuk memimpin saya bekerja "adalah pertanyaan tentang satu set, dan sampai sekarang Satu-satunya cara untuk meminta itu adalah untuk membuka mereka satu per satu. Terjemahan filter bergerak ke LeadGridFilter sehingga kedua titik akhir menyelesaikan pencarian string identik; salinan kedua akan drift, dan cara drifts adalah Timeline meliputi berbeda lead dari grid yang diproduksi itu. Dua batas berbeda, untuk dua alasan yang berbeda. Panggilan, pesan suara, teks dan e-mail tidak didukung: LEAD _ COMUNIClONS membawa ORG _ ID dan diindeks pada (ORG _ ID, OCCURRED _ AT), jadi satu permintaan keyset berjalan korespondensi org newes- pertama dan tes setiap baris terhadap grid predikat sebagai korelasi EXISTS - biaya yang sama apakah tujuh lead cocok atau tujuh puluh ribu. Catatan dan chatting tidak dapat: mereka tinggal di MEDIA _ OBJS, yang tidak membawa org dan tidak ada lead, dan bergabung kembali adalah LEADSSTREAM _ GUID, yang tidak diindeks. Mereka berdua menyelesaikan lead pencocokan pertama, capped di 1000, dan respon mengatakan ketika tertutup daripada diam-diam menjatuhkan sejarah. Otorisasi adalah timeline utama, diterapkan di SQL. Sebuah entri membawa memimpin 's nomor atau alamat sendiri ditambah isi pesan, jadi LeadComplasReadGate sekarang juga menyatakan aturan atas tiga bentuk memimpin dapat memiliki dan memancarkan prediksi yang cocok. Menulis itu kedua kalinya adalah di mana bug itu: draft pertama membaca "tidak ditugaskan membutuhkan VIEW _ UNASSIGNED _ LEADS "dan melewatkan penolakan tersebut () jatuh melalui cek ke konteks-info satu, yang akan menempatkan setiap setan memimpin 's korespondensi di depan anggota memegang hanya hak kolam renang. Kedua bentuk sekarang ditempel ke Setiap kombinasi yang tepat melawan setiap bentuk. Tidak seperti rollup akun ini TIDAK runtuhnya suatu peristiwa yang mencapai dua cocok lead. Dua alasan menunjuk dengan cara yang sama: setiap baris nama memimpin itu milik dan "panggilan ini sampai kedua" adalah fakta tentang buku yang sedang bekerja, dan runtuh baris keluar dari satu halaman fixed- ukuran dapat meninggalkan korban terakhir kembar sebagai entri segar klien tidak dapat de- duplikat. Kriteria query ditarik ke LeadGridCompsQueries sebagai fungsi murni sehingga LeadGridCommunicationsSqlTest dapat membuat mereka terhadap metadata Hibernate nyata. Yang penting di sini lebih dari biasanya: spesifikasi grid sendiri telah memancarkan Subkueri EXISTS, dan sarang ini dalam satu sama lain - yang persis di mana layanan ini Hibernasi 6.2.13 dan perpustakaan bersama 6.5 berbeda.
· VOIPService
Wire Just Call masuk melalui penyedia telepon abstrak
Just Call (api.just call.io / v2.1) sebagai PhoneProvider penuh: panggilan sejarah, teks, voicemail, rekaman, direktori agen dan ketersediaan, ditambah ditandatangani webhooks akun dan impor kontak opsional. Auth adalah salah satu akun-lebar kunci / rahasia pasangan dikirim sebagai mentah "kunci: rahasia" nilai Otorisasi - bukan Pemuat token, which authenticates nothing and returna 401 that reads like a bad kredensial. Tiga bentuk desain yang dikendarai oleh Just Call: * Pesan suara bukan sumber daya. Ini adalah panggilan yang call _ info. tipe adalah "Voicemail", membawa transkripsi inline dan audio di balik sama merekam titik akhir sebagai panggilan lain - sehingga getVoicemail adalah getCallHistory dengan filter, dan tidak ada status baca untuk menandai. * Tidak ada kredensial softphone. Just Call mempublikasikan tidak ada SIP registrar dan tidak ada Token WebRTC untuk pihak ketiga, dan hanya outbound- call endpoint drive sebuah Agen AI Voice bukan manusia. Panggilan suara adalah salah, yang apa usesoftphone sudah gerbang pendaftaran pada, dan getSipCredentials menolak dengan penjelasan daripada setengah-mendaftar. * Direktori baca-saja, dan tidak ada konsep perangkat, sehingga mereka tetap antarmuka melempar default daripada berpura-pura untuk menulis. Webhook terdaftar per instance di * * * * * * * * * * * * * * * satu berlangganan setiap tipe acara. Just Call 's HMAC-SHA256 mencakup URL yang terdaftar, sehingga string query ada di dalam materi yang ditandatangani dan tidak dapat ditulis ulang ke mendarat satu peristiwa org di server telepon lain. URL direkam config _ json di provisioning karena verifikasi harus menandatangani string yang sama Just Call melakukannya - membangunnya kembali dari konfigurasi akan mulai gagal diam-diam saat URL dasar berubah. Teks dalam dan peristiwa panggilan mencapai jalan RingCentral sudah digunakan. VoipMessageService 's handler was RingCentral- shaped every, so its parsing adalah memisahkan dari yang paling dalam: kedua rel sekarang berbagi dedupe, interception kata kunci, upsert percakapan dan lead linking. Bahwa berbagi disengaja - kata kunci langkah adalah apa yang mencatat opt-out, dan rel kedua tumbuh sendiri salinan urutan adalah bagaimana seseorang berakhir tidak menghormati Berhenti. Switch balasan SmsKeyWordService mendapatkan rel baru untuk alasan yang sama: itu adalah saklar pernyataan, jadi konstanta tidak terdaftar akan menjawab siapa-siapa. MMS hanya menggunakan URL publik - Just Call tidak menerima byte yang diunggah - jadi lampiran diparkir di belakang sebuah URL yang kurang-hidup yang tak terduga pada layanan ini dan hubungan yang diserahkan. Secara paksa bukan sebuah tujuan-store URL: MinIO Di sini adalah... sebuah URL presigned ditandatangani untuk tuan rumah itu nama, dan fetcher Just Call tidak dapat menyelesaikan in-cluster alamat - itu akan 404 bagi mereka sementara bekerja sempurna dari dalam cluster. Ini Layanan sudah dapat dicapai oleh publik karena menerima webhooks mereka. Impor kontak mati kecuali diaktifkan: buku alamat pelanggan adalah per- anggota akses dikendalikan, dan mengimpor saat kunci ditempelkan akan menjadi kejutan. Kontak dimiliki melalui Agen _ id Just Call yang sinkronisasi ekstensi sudah direkam, dan setiap agen yang peta untuk tidak ada anggota Kamo dilewati agak daripada parkir di suatu tempat bersama. Ketekunan pergi ke EmailService, yang memiliki tabel kontak. Just Call 's AI panggilan ringkasan, sentimen dan skor naik pada panggilan yang sama membaca dan yang muncul di CallLogEntry. Tidak bertahan: PHONE _ CALL _ LOG tidak memiliki kolom seperti itu, penyedia mengembalikan mereka pada setiap baca, dan menambahkan kolom akan biaya DDL jendela untuk duplikat toko mereka. Tidak ada DDL dalam perubahan ini.
· EmailService
Titik akhir internal untuk mengimpor kontak dari sistem eksternal
Integrasi VoIPService 's JustCall perlu untuk mendaratkan kontak pelanggan di buku alamat anggota kanan, dan ini adalah dimana kontak ditulis: sebuah Kontak memetakan hanya skalar, dengan email, telepon, alamat, orgs, URL, IM dan hubungan di tujuh tabel tanpa cascade, hanya terjangkau melalui ContactDetailStore. Seorang penelepon menulis tabel-tabel dari layanan lain akan diam-diam drop setiap nomor telepon - satu bidang integrasi telepon ada untuk antarkan - sehingga ketekunan tetap di sini dan posting penelepon untuk itu. Kepemilikan adalah bagian load- bantalan. _ ID CONTACT.OWNER TIDAK KOSONG dan titik di pengguna, dan pemilik ContactBook IS kontrol aksesnya (sebuah buku tanpa pemilik milik tidak ada dan 404s untuk semua orang), sehingga batch harus nama anggota yang kontak milik dan ditolak langsung ketika tidak. Setiap sumber mendapat buku sendiri di balik sebuah CAKactIntegration baris daripada yang dicampur menjadi "My Kontak ": baris disinkronkan dan baris yang diketik dengan tangan memiliki lifecycles yang berbeda, dan anggota dapat menyembunyikan atau menjatuhkan yang impor tanpa menyentuh mereka sendiri. Upserts cocok pada uid, yang nama pemanggil ke sistem nya. UID unik per buku, sehingga juga apa yang membuat re- sync dan bukan kedua salinan segalanya. Dikaitkan di bawah / api / internal, dijaga utuh oleh InternalOtorisasi - tidak ada anggota sesi di balik panggilan ini, jadi tanpa filter ini akan menjadi titik akhir untuk menulis kontak sewenang-wenang ke dalam buku-buku anggota sewenang-wenang.
· kamo-shared-library
Tambahkan NUST _ CALL sebagai tipe penyedia telepon
Ditambahkan pada koordinat 5. * * * * * * * * * * * * * * adalah EnumType.ORDINAL dan tidak membawa batasan CHECK, jadi menambahkan aman dan memasukkan di mana saja lain akan diam-diam me-titik baris yang ada di penyedia yang berbeda - PbxProviderBillingCoverageTest pin urutan dari sisi lain. Tagihan TIGA _ PARTY: organisasi memegang sendiri langganan Just Call (mereka API membutuhkan setidaknya rencana tim) dan Just Call membawa panggilan, jadi ini adalah Biaya integrasi, bukan hosting. PbxBillingClass.of tidak memiliki lengan baku, yang apa yang memaksa keputusan daripada membiarkan penyedia baru tagihan apa selamanya.
· kamo-internal
Warna kertas per blok, dan blok yang sesuai teks mereka
BLOCKS SEKARANG FIT MEREKA CONTENT. Pembaca blok semua 200px tinggi apa pun mereka mengadakan, karena richTextEkstensi konfigurasi editor dengan MlHEight: 200px - bentuk komposer artikel, di mana penyunting IS halaman. Mengganti pembaca ke RichTextView menghapusnya; tidak ada dalam penjepit panel tinggi blok sekarang, sehingga persis setinggi kata-katanya. The COMPOSER 'S EDITOR GROW INSTEAD OF SCROLLLING. Sama 200px, ditambah overflow: auto pada wadah, berarti setiap blok membuka tiga baris terlalu tinggi dan kemudian menyerahkan sendiri sebuah scrollbar daripada tumbuh - sebuah scrollbar dalam blok di dalam halaman scroller. KbArticleEditor memperoleh 'autoGrow': kontainer berhenti menggulung, area menulis dimulai pada ketinggian satu baris, dan ukuran akar untuk isi daripada mengisi inangnya. Opt- in, sehingga artikel komposer menyimpan bentuk yang tepat untuk dokumen pagezed. COLOUR PAPER. Setiap blok membawa satu, dipilih dari NoseColor Menu - menu yang sama dan palet yang sama catatan dan panel launchpad digunakan, sehingga swatch berarti satu hal di seluruh produk daripada tiga. Warna disimpan sebagai palette ID dan diselesaikan melalui resolveStickyColor di render, jadi keduanya komposer dan Cat Pusat Interaksi dari satu sumber dan palet kemudian koreksi mencapai script yang ditulis hari ini. Dalam pembaca blok berwarna menyimpan warnanya apakah atau tidak saat ini. "Di mana aku" sudah dibawa oleh perbatasan, lift dan tulang belakang; mencelupkan kertas juga akan membuat penulis pilihan terlihat seperti Rendering kesalahan.
· kamo-internal
Tambah logo penyedia Just Call
Folder logo VOIP memiliki FreePBX, Microsoft dan RingCentral tapi tidak ada Just Call mark, so any permukaan listing Just Call as a provider had tidak ada untuk dirender.
· kamo-shared-library
Warna kertas per blok
* * * * * * * * * * * * * * memegang sebuah palet ID - "lemon", "kaca" - Dan tidak pernah nilai hex. Tersimpan cara catatan dan panel launchpad menyimpan mereka, untuk alasan bahwa penting daripada untuk kepentingan konsistensi: palet didefinisikan sekali pada klien (STICKY _ PALETE) dan setiap permukaan menyelesaikan id melalui resolveStickyColor. Persisting hex akan membeku hari ini bayangan ke baris, jadi koreksi kemudian ke palet akan memperbaiki catatan dan diam-diam meninggalkan skrip pada warna tua - dan swatch yang sama kemudian akan berarti dua berbeda Hal-hal tergantung pada mana layar itu diambil dari. Nall tidak berwarna: blok memakai apapun permukaan duduk di. Kosong atau nilai ruang putih normalisasi untuk null dalam perjalanan, karena "" tidak " warna "untuk resolveStickyColor - itu tangan kembali swatch pertama palet, sehingga Penulis yang membersihkan warna akan mendapat lemon. Dibawa melalui blok penuh menggantikan seperti setiap bidang lain, dan tertutup ada: warna bertahan edit, dan satu dibersihkan datang kembali kosong.
· EmailService
Biarkan pesan yang dikirim membawa gambar di dalam tubuhnya
Tubuh memiliki empat bentuk yang mungkin dan mengirim () hanya bisa membangun tiga. The multipart / terkait cabang - salah satu yang menempatkan gambar di mana El HTML: titik di situ - duduk di belakang cabang lampiran, sehingga pesan dengan kedua ditempelkan gambar dan sebuah berkas kehilangan gambar saat keluar: tubuh menyimpan sebuah tanda: referensi ke bagian yang tidak lagi dalam pesan, dan tidak ada yang mengatakan begitu. Itu juga tidak dapat dicapai dalam praktek, karena hanya jalur transaksional yang pernah ditetapkan inlineGambar; tidak ada anggota dikirim bisa sampai di sana sama sekali. applyBody sekarang membangun bentuk apapun konten panggilan untuk - html saja, terkait ketika tubuh referensi gambar, dicampur ketika ada lampiran, pelipatan campuran terkait ketika ada baik - dan mengundang kalender menyimpan gambar dengan menawarkan terkait dengan alternatif HTML. jawaban dan maju melalui pengiriman, sehingga mereka mewarisi semua itu. / kirim mengambil gambar sebagai bagian biner mereka sendiri, masing-masing dinamai untuk id isi HTML sudah mereferensikan. Base64 dalam bagian JSON akan biaya ketiga lagi dalam ukuran terhadap langit-langit terkecil dalam rantai, sehingga screenshot atau dua akan ditolak karena suatu alasan anggota tidak bisa berbuat apa-apa. Sebuah nama bagian menjadi a Content- ID header, so InlineImageParts cocokkan dengan bentuk yang tepat komposer mints dan menolak segala sesuatu yang lain - yang salah gagal mengirim agak daripada jatuh diam-diam dan meninggalkan lubang dalam tubuh.
· kamo-asterisk-support
Reconcile per- ekstensi blok WebRTC daripada tangan - menyunting daftar
Ekstensi yang dibuat melalui API FreePBX tak mendapat blok WebRTC, jadi register atas WSS dan kemudian tidak memiliki DTLS atau ICE - peramban softphone menunjukkan panggilan terhubung tidak membawa audio. Pengaturan tersebut tidak dapat diungkapkan di mana saja FreePBX akan menerima mereka: 'dtls _ cert _ file' dan 'transpor' bukan kolom dalam 'sip' tabel dan tidak bidang pada mutasi 'addExtension', sehingga mereka harus be '[< extext >] (+)' appends dalam * * * * * * * * * * * * * Sampai sekarang file yang adalah daftar hand- dipertahankan dalam ConfigMap, yang berarti setiap ekstensi baru rusak diam-diam sampai seseorang ingat untuk mengedit dan menyebarkan (8888 duduk tidak terdaftar selama berbulan-bulan). Ekstensi 8777 adalah yang terbaru. WebRTCReconciler membaca daftar ekstensi keluar dari FreePBXdihasilkan pjsip.endpoint.conf dan menjaga marter -delimited dikelola daerah dalam langkah dengan setiap 30-an. Ekstensi terhapus kehilangan blok mereka secara otomatis - sebuah blok (+) untuk bagian yang tidak ada lagi membuat log Asterisk "Bagian tidak ada" pada setiap reload. Ini hanya mengisi kesenjangan: setiap blok ditulis di luar penanda kami (KlusterServices Daftar, administrator) ditinggal persis seperti itu, tidak pernah digandakan dan tidak pernah Mengambil alih. Hanya all- numerik titik akhir disentuh, sehingga batang tidak disematkan ke sebuah WS transport dengan DTLS dipaksa. Sebuah pjsip.endpoint.conf hilang adalah sebuah no- op daripada "nol ekstensi", yang jika tidak akan strip WebRTC dari setiap ekstensi yang memiliki satu. OFF secara baku (manage _ WEBRTC _ ENDPOINTS), untuk k1m1. Blok adalah persis salah untuk telepon meja SIP: itu memaksa DTLS-SRTP telepon tidak dapat melakukan dan pin itu untuk transportasi itu tidak berbicara. Dua hal yang diukur pada kotak K1m1 langsung daripada diasumsikan: - Isi ulang harus 'modul reload _ pjsipso', bukan 'pjsip reload'. Setelah menambahkan sebuah '[8999] (+)' blok, 'pjsip reload' meninggalkan titik akhir pada webrtc = no; satu modul reload diterapkan, dan satu modul reload juga dikembalikan ketika block telah dihapus. Menggunakan CLI sendiri 'pjsip reload' di sini akan menulis berkas benar dan salah meninggalkan konfigurasi yang berjalan. - Sebuah blok (+) hanya dapat pilihan ADD, tidak pernah override. Menambahkan 'direct _ media = yes' to an endpoint whose generated config said 'direct _ media = no' meninggalkannya di 'no' - nilai pertama menang. ('webrtc = ya' adalah exception only because it is an additive shorthand, not a stored field.) Apa pun yang harus MENGUBAH nilai yang dihasilkan harus tetap dalam FreePBX Database. Verifikasi terhadap real / etc / asterisk: benar memilih satu ditemukan ekstensi dari 23, lewati batang Erik _ Primary, meninggalkan yang ada daftar by- for- byte identik, dan adalah no- op pada lulus kedua.
· kamo-internal
Palsu, sehingga operator dapat membuka org sebagai salah satu anggotanya
Shown beside Enter on every / network view for a platform administrator holding IMPERSONATE baru benar. Hak yang berbeda dari SISTEM _ USER dan sengaja tidak tersirat olehnya: memasukkan sebagai Pengguna Sistem adalah sebuah identitas yang terlihat, terpisah sebuah Penyewa dapat melihat dalam daftar anggota mereka sendiri, sementara ini menghasilkan apa-apa sesi hilir dapat memberitahu dari orang yang menandatangani dalam diri mereka sendiri. Picker adalah MenmberPickerDilog - popup yang sama yang / lead Agen filter terbuka - Tidak berubah. Ini sudah memiliki pencarian, paging, penanganan keyboard dan cara baris unpickable menjelaskan dirinya sendiri. Apa yang baru adalah 'fetcher' nya, yang menggantikan titik akhir direktori langsung dan titik di target organisasi anggota, karena direktori baku adalah sesi sendiri org dan yang Tepatnya daftar yang salah. Tidak ada yang disaring klien-sisi. Server menandai akun dewa, platform administrator atau off- anggota naik unselectable dengan alasan, dan tabel alasan dialog tumbuh untuk menutupi mereka: menyembunyikan baris-baris akan meninggalkan operator mencari kolega jelas dalam organisasi dan mendapatkan tidak ada yang kembali, yang membaca sebagai pencarian yang rusak bukan sebagai penolakan. Tab diklaim secara sinkron di dalam klik picker sendiri, sebelum menunggu, dan sesionStorage dibersihkan - sama menari handleEnter dokumen, untuk dua alasan yang sama: popup dibuka setelah menunggu adalah salah satu browser tidak pernah melihat siapa pun meminta, dan same- asli window.open ClonES tab ini penyimpanan, id sesi termasuk. Juga menambahkan ikon yang diperlukan tab Admin Platform untuk kanan baru; tsc tertangkap itulah gunanya buku catatan melelahkan.
· SecurityService
Masukkan sebuah organisasi penyewa sebagai salah satu anggotanya, dari / jaringan
Sebuah pintu kedua di samping same-org God- mode satu. Gated pada IMPERSONATE baru platform kanan via @ RequirePlatformRight, dimana pintu yang ada digated sesi membawa GD. Disimpan sebagai dua penangan daripada satu dengan bendera. Gerbang pemanggil mereka adalah Benar-benar berbeda, dan @ RequirePlatformRight tidak memiliki varian inhandler oleh desain - gerbang Anda harus ingat untuk menelepon adalah salah satu yang akhirnya mendapat lupa pada titik akhir yang penting. Siapa yang mungkin ENTERED AS adalah pertanyaan yang terpisah, dan Ketidakpribadian Target Aturan jawabannya sebagai fungsi murni atas fakta yang terselesaikan: menolak untuk tingkat atas org, diri sendiri, keanggotaan tanpa pengguna, Pengguna Sistem, akun dewa, administrator platform, atau siapa saja yang tidak bisa masuk sendiri. Sama fungsi memutuskan apakah sebuah baris dalam picker dapat dipilih, sehingga daftar tidak dapat menawarkan seseorang titik akhir akan berpaling. Pintu same--org sengaja tidak berbagi aturan tersebut. Ini beroperasi di dalam organisasi penelepon sendiri, yang untuk admin dewa biasanya tingkat atas satu, dan pada orang-orang yang sering administrator sendiri - baik keras Penolakan di sini. Lipat keduanya akan memecah halaman pengaturan atau pelan-pelan perlebar yang satu ini. * * * * * * * * * * * * * * * * mengisi picker tersebut. Ini adalah satu titik akhir dalam bahwa pengontrol penamaan organisasi selain sesi, itulah sebabnya adalah sebuah penanganan terpisah daripada sebuah parameter pada / pencarian: janji kelas bahwa pencarian tidak dapat diperluas oleh kecelakaan tetap benar. Menolak orang tinggal di daftar dengan alasan daripada menghilang dari pencarian untuk seorang rekan yang jelas di org. ruang kerja Untuk memindahkan EnterAsController ke Area Kerja HostResolver, sejak kedua pintu membutuhkan jawaban identik. Dua salinan dari "host mana yang dipilih" adalah bagaimana seseorang terus mengirim operator ke interstitial sertifikat setelah yang lain Berhenti. Tesnya bergerak dengan itu.
· kamo-shared-library
IMPERSONATE, sehingga operator dapat memasukkan penyewa sebagai salah satu anggotanya
Tambahkan ke PlatformRightType daripada dimasukkan: getSortOrder () kembali ordinal (), jadi kanan ditambahkan di renumbers tengah setiap kanan di bawahnya di konsol. Grants are @ Enumerated (STRING), so appending changes nothing already diberikan. Secara sengaja tidak dilipat menjadi SISTEM _ USER. Bahwa kanan memasuki sebagai terlihat, terpisah identitas penyewa dapat melihat dalam daftar anggota mereka sendiri dan jejak audit; yang satu ini menghasilkan sebuah sesi tidak ada hilir dapat memberitahu dari anggota penandatanganan dalam diri mereka sendiri. Pertanyaan yang berbeda, radius ledakan yang berbeda, sehingga operator Hak yang pertama dengan demikian tidak berhak untuk yang kedua. ReportVisibility Uji Tempelkan Kawal _ Report sebagai nilai terakhir, yang menambahkan istirahat sementara membuktikan apa-apa - invarian yang penting adalah bahwa tidak ada yang masukan ABOVE itu, jadi sekarang pin koordinat sebagai gantinya. Dua batch pencarian repositori untuk picker di belakangnya: keanggotaan satu set pengguna memegang dalam satu organisasi, dan yang dari satu set anggota adalah platform Administrator. Row- at- a- waktu yang adalah dua query per nama, pada kontrol yang re-berjalan pada setiap keystroke.

Alam semestamu menunggu.
Mulai gratis dalam beberapa menit. Tambahkan produk kapanpun Anda siap — tidak ada migrasi, tidak ada login baru.
Gratis selamanya — tidak diperlukan kartu kredit