Saltar al contenido
KAMOUniverse

Changelog

Qué hay de nuevo.

Cada mejora de la plataforma, a medida que se envía.

  1. · kamo-internal

    Un "por qué no puedo aceptar?" aní a la barra de filtros

    Alineado a la derecha en la barra de filtro / plomos, usando el icono de la nave de los plomos con lo mismo emblema prohibido, por lo que la cosa en el nav que dice "estás bloqueado" y el Qué cosa que dice "aquí está la razón" es visiblemente una declaración. Sólo se hace mientras el miembro está realmente bloqueado. No es un filtro que resulta estar vacío, es un estado que existe o no, por lo que cuando el prohibición se despeja un evento en tiempo real de aceptación-puerta, o un refresco después de la última La nota fue escrita - el control desaparece y los filtros vuelven en su propio. Un efecto deja caer la anulación cuando eso sucede: dejarlo atado lo haría Dejar la rejilla en un "uid IN () no combina nada, con los filtros todavía grises y no queda ningún control visible para volver a encenderlos. Presionado, él OVERRIDES en lugar de estrechar. buildLeadGridQuery regresa temprano bloqueoLeadUids, por lo que no hay pestañas de mercado, pestaña de estado, agente, fecha o plazo de búsqueda se aplica. Eso es deliberado: las pistas de bloqueo están dispersas a través de lo que sea mercados y estados en los que se encuentran, y se entrecruzan con la barra lo haría mostrar un subconjunto mientras se lee como toda la lista. Alguien tratando de ser desbloqueado. Un conjunto vacío pide el úid=0 en lugar de Dejando caer la restricción, por lo que nunca puede ampliar a la organización. Las pestañas de estado y todos los controles en la barra son grises e inertes mientras que está encendido, porque un bar que todavía se veía en vivo estaría mintiendo sobre lo que eligió el filas. El cambio en sí está excluido por atributo por lo que se mantiene presionable, y el Los botones de acción al lado de las pestañas no son filtros por lo que permanecen en vivo. Restets de paging en cada jugada - el juego de resultados es diferente y el número de página viejo significa nada en contra. Apagado, el botón pulsa: es la única cosa en la barra que un miembro bloqueado tiene que aviso, ya que es por eso sus pistas han dejado de llegar. En, la propia rejilla es la señal y la animación sería ruido. Los honores prefieren-reducido-momomo.

  2. · SecurityService

    Lista, renombrar y poner fin a las terminales de un miembro

    GET **************** DELETE y PATCH en /terminals/-id. Cada uno de ellos resuelve la cuenta de Linux desde la sesión de OWN de CALLER y no pasa ningún nombre de cuenta al agente que vino de la solicitud. Un miembro puede por lo tanto sólo ver, cambiar el nombre o terminar sus propios terminales - no hay identificación de ellos podría un suministro que llegaría a otro, porque la cuenta no es parte de lo que suministran. Una máquina inalcanzable responde a 200 con una lista vacía y "no buscable": true. más que un error: "la máquina de dev está abajo" es un hecho sobre la máquina, no un fracaso de la pregunta, y la consola puede decirlo donde una página de error podría Sólo di nada. Esa es la misma regla que DesktopSsoController. Renombrar una sesión que ha terminado es un 404 con una frase. para "te rebautizaste como algo que ya no está", que después de un reinicio es cada terminal que tuviera el miembro.

  3. · KlusterServices

    Lista, renombrar y poner fin a las terminales de un miembro

    GET /terminals?user=X, POST /terminals/-id-h, POST /terminals/-id-/title. NO ES DATABASE BEHIND ESTA, y ese es el diseño en lugar de un atajo. El servidor tmux en la máquina ES el registro: los terminales de un miembro son exactamente las sesiones que existen, por lo que termina de dejar de ser listado sin nada que reconciliar, y un reinicio que toma el servidor tmux con él. por sí solo. Una mesa tendría que ser contada todo eso, y se equivocaría cada vez no fue así. Títulos personalizados en vivo en una opción de usuario de tmux en la sesión, por lo que un título tiene lo mismo toda la vida como la cáscara que nombra. Los caracteres de control se despojan antes del almacenamiento: un título se representa en una lista, y una secuencia de escape en uno repintaría el la pantalla a su alrededor es también lo que mantiene al separador de campo fuera de la valor, que es lo que hace que la cotización sea parseable dividiéndose en él. Los títulos son pasado como un solo elemento argv, nunca a través de una concha. "No hay servidor tmux" es una lista vacía, no un error. Ese es el estado de la máquina. después de un reinicio, que es precisamente cuando el miembro necesita la lista para decir "nada aquí" en lugar de fracasar. 20 pruebas: la forma de listado y su pedido, sesiones sin título que informan de null en lugar de "", sesiones que este agente no creó permanecer invisible, malformado y las filas no numéricas que se saltan en lugar de fatal, matan siendo idempotentes, títulos despojados/truncados/desatados, y un título que contiene metacharactores de concha llegando como elemento argv. También los guardias bombean el selecto contra un descriptor cerrado bajo ella. cronalean ordinario terminando el camino de recv ya manejado. 131 pruebas.

  4. · kamo-internal

    Un atajo de contraseña en el héroe, y una puerta más estrecha

    Dos mitades del mismo tema. El atajo. Cambiar su contraseña había tres habitaciones muy lejos del ferrocarril. la única cosa que el diseño de la habitación hizo genuinamente más difícil de alcanzar que los viejos Desplácese, y es el control más consecuente de la cuenta. El héroe ahora lo lleva, deliberadamente NO como una tercera píldora de vidrio: los dos están a su lado destinos, esto es una acción, así que es sólido. Cuando se apagan el multifactor se vuelve ámbar y lo dice, porque ese es el momento en que vale la pena el prompt haciendo. Ruta a través de la misma ruta de enfoque que utiliza la paleta de comandos, por lo que se abre la habitación Acceso Y se desplaza la tarjeta de contraseña a la vista. Ese camino es ahora una función compartida por la paleta, el anillo de fuerza y este atajo, en lugar de tres que podrían derivar; los segmentos del anillo ya nombran el campo que los arregla y ahora lo usa. ContraseñaSecurityCard no es un ProfileCard, por lo que su envoltorio lleva el ancla de desplazamiento. La puerta. MANAGE-MEMBER-SECURIDAD ya no muestra la tarjeta de contraseña en El historial de otra persona sólo el miembro o un dios elegible Visor. Esta es la mitad DISPLAY; la mitad que importa en SecurityService 197b591, que devuelve el 403 por la misma condición. Un derecho Retirado de una pantalla es una pantalla más ordenada, no un control de seguridad. Las llaves del diccionario aterrizaron primero en kamo-translación-diccionario 982c1f62. Verificado: Nopm test (14 guardias 5.139 pruebas), tsc --noEmit, siguiente construcción.

  5. · kamo-internal

    Insigna de navegación prohibida, Asigna a Mí mismo, y enmascaramiento de contacto obuscado

    ** El icono de la nave de Leads dice cuando no puede aceptar.** Un miembro que tiene plomos no han trabajado consigue un emblema de bloque rojo sobre el icono de Leads y una punta de herramientas nombrar lo que está bloqueado, por qué y qué aclarar. Fed por /leads/disponible-sumo y mantenido en vivo por un nuevo evento de aceptación-puerta en el enchufe de crédito / asignación la carga útil lleva sólo un id miembro, por lo que cada navegador ignora el de todos los demás y re-asscate al servidor por su cuenta. Mostrado a cualquier miembro que pueda ver pistas, no sólo los tenedores de crédito: desde un El lideraje libre para todos ahora puede ser auto-clamado, la puerta también las gobierna. El disponibilidad punto se mantiene solo con crédito, por lo que las dos declaraciones siguen siendo separables. se puede bloquear la aceptación mientras las pistas se sientan allí disponibles, y esas son cosas diferentes que decir. **Cada estado se nombra de la manera en que ESTE org lo nombra.** El tooltip, el /leads/ aviso disponible y la copia de página de detalle resuelven Nuevo plomo / Farm Fresh a través de usoStatusLabels: las etiquetas son reemplazables en /configuraciones/caracteres/caduras, y Decirle a un miembro que mueva una pista de "New Lead" cuando su org lo llama algo De lo contrario, no pueden encontrar en el que no pueden encontrar en el que se puede elegir. **/Lígaros/disponible se divide en sus dos razones** - pistas deba, una nota, pistas deben un cambio de estatus, ya que se fusionó en una lista que leen como una pila indiferenciada y el miembro tiene que abrir cada lugar para aprender qué Quieres. Una ventaja falla a ambos aparece en la lista una vez, mal estado. **Asignarse a Mese** se sienta bajo Hot Reassign en una pista no asignada. Ofrecido en un la pista libre para todos a cualquiera que no esté actualmente exascrita, y a cualquier plomo no asignado a un tenedor de ASSIGN-LEADS. La respuesta lleva la delantera desenmascarada, así que fijarlo en las volteraciones estatales asignadas a Me, recomponer la decisión de la máscara a UNMASKED, y revela la información de contacto sin recarga. **El control de estado pulsa** mientras el plomo es mío y todavía en New Lead o Granja Fresh es el control que lo arregla, y la cabecera se lee mucho tiempo antes de una punta de herramienta de navegación. Los punteros prefieren-reducido-moción. **La información de contacto encochada está ofuscada, no en blanco.** contactoObfuscator.ts mirrors el servidor ContactObfuscator exactamente, afirmando las mismas cuerdas, porque el El relevo de plomo en tiempo real envía un DTO completamente desenmascarado a cada suscriptor en el org y el navegador es la única cosa de pie frente a él allí. Leen un campo en blanco Como "esta pista no tiene correo electrónico", que es una declaración diferente y equivocada. **El filtro /leads Nossigned se ofrece a todos.** Sin VIEW-UNASSIGNED-LEADS devuelve el no asignado-libre-para todos lidera este miembro puede reclamar, y la etiqueta lo dice en lugar de la opción que significa silenciosamente dos cosas diferentes. El cliente ya no obliga a asignarse=ASSIGNED para aquellos los miembros del piso del servidor son más anchos que eso ahora, y enviar ASSIGNED lo haría clip exactamente las filas que este cambio existe para mostrar.

  6. · SecurityService

    Sirve la puerta de aceptación ensanidad, agrega auto-asignación, y cierra dos bypasss de máscara de contacto

    **Endpoints para la nueva puerta.** /leads/available-summary y /leads/available Ahora informan ambas razones por las que un miembro está bloqueado. asignado, y conduce todavía en su estado de admisión con las propias pistas y el texto del SISTEMA más ids, para que el navegador pueda resolver el propio org etiquetas personalizadas antes de mostrar a cualquiera la razón por la que están atascados.ByComments se mantiene como un alias de la nueva propuesta, por lo que un navegador todavía ejecutando el el paquete anterior sigue trabajando a través del despliegue. La puerta es evaluada para cualquiera que pueda ver pistas, no sólo los miembros que sostenen SPEND-RECEIVE-LEAD-CREDIT: un miembro que sólo puede reclamar una pista libre para todos es sujeto a la misma disciplina y su nave tiene que ser capaz de decirlo. El El escaneo de la piscina de crédito por debajo de él todavía requiere el derecho de crédito. **POST /leads/-id-/assign-to-me** reclama una pista no asignada. Devuelve la pista. UNMASKED - el llamante es su cesionario para cuando el servidor conteste . . . . . . . . . . . . . . . . . . . . . . . lo que permite que la página de detalle revés la información de contacto sin una recarga. **Un nuevo tema NATS, **************** publicado cuando una nota aterriza a la cabeza, cuando un estado cambia, y a ambos lados de cada tarea cambio de cambio. El relé de MediaService ya se suscribe a security.leads y mapas los temas de manera genérica, por lo que no necesita ningún cambio. La carga útil lleva sólo un miembro id: la respuesta de la puerta depende de todo el libro de ese miembro, así que hay nada útil para poner en un tema de toda lana, y un tema que cada miembro recibe es el lugar equivocado para cualquier cosa que valga la pena retener. **Dos bypasss de máscara de contacto, ambos encontraron auditoría donde los detalles de un plomo pueden llegar a un navegador:** - GET /leads/-id/history No tenía ninguna asignación o puerta de contacto en absoluto. Un cambio de campo el registro es un registro completo de cada valor que un campo ha mantenido, por lo que devolvió el correo electrónico y los números de teléfono de la propia máscara de la pista saca las actuales, todas anteriores también. Ahora lleva las mismas dos decisiones que getLeadById, y LeadHistoryContactMask ofusca las filas que llevan el contacto. Estado, asignación y la historia de la monta de préstamos están intactos: esto se retiene información de contacto, no el rastro de auditoría. - GET /leads/callback-context/-id envió una dirección de correo electrónico y dos teléfonos números para cualquier callback en la zona, sin citar. Un id de llamada era una forma de leer los datos de contacto de la pista de cualquier colega. **Un guardia de devolución en updateLead.** La máscara de lectura ya no encasilla contacto campos, los ofusca, así que un llamante enmascarado ahora contiene cuerdas de aspecto real eso persistiría perfectamente felizmente. La jerarquía correcta hace que esto sea difícil de llegar, pero "difícil de alcanzar" no es una garantía y el modo fracaso se calla corrupción del número de teléfono de un cliente. **Vive grid.** Sin VIEW-UNASSIGNED-LEADS el piso /leads se convierte en "mi liderar más pistas libres sin asignar" en lugar de "mis pistas", y un Se puede abrir una pista sin asignar gratis para todos y su historia lee una fila que se puede ver pero no se puede abrir es un insecto. Leer la situación en uno es diferente Pregunta y LeadCommsReadGate todavía lo contesta con VIEW-LEAD-CONTACT-INFO-OTHERS; el alcance de los comandos de la cuadrícula mantiene deliberadamente el piso más estrecho, con un comentario diciendo por qué los dos difieren ahora.

  7. · kamo-shared-library

    Amanecido la puerta de aceptación, ofuscar la información de contacto enmascarada, dejar que las pistas gratis para todos sean reclamadas

    Tres cambios relacionados con el núcleo de la asignación de plomo. ** La puerta de aceptación ahora hace dos preguntas, sobre cada plomo asignado.** LeadAcceptElegiibilityService sustituye a la puerta de comentarios que vivió dentro CreditLeadAssignmentService. Una pista impide a su titular tomar otra cuando o no tiene nota de ellos escrito SINCE que se les asignó, o lo es Todavía sentado en Fresh, Nuevos Lead / Farm Fresh. Ambas mitades cierran un agujero. La vieja regla contaba cualquier nota jamás escrita, así que una pista que volvió a un miembro pasó una nota de su anterior paso con ella. Y sólo miró las pistas adquiridas a través del sistema de auto-asignación, que dejó cada otra ruta - la asignación a mano de un gerente, una importación, una auto-reivin embargo. como una forma de acumular pistas vírgenes con la piscina aún abierta. La regla es dos consultas basadas en conjuntos cualquiera que sea el tamaño del libro del miembro: el asignaciones actuales, luego un agregado de MediaObj agrupado a través de su flujo guidos. Ampliar el alcance de cada asignación hizo el viejo bucle de consulta por plomo inasequible es la forma que hizo la rejilla /leads lenta, y esto se ejecuta en cada renderización de los líderes nav para cada miembro inscrito. Los estados de bloqueo se nombran explícitamente en LeadStatusType en lugar de derivar de isAllowSwitchBack. Esos dos son los únicos que llevan ese bandera, pero responde a una pregunta diferente, y un estatus futuro marcó el mismo Por lo cierto no debe empezar a bloquear silenciosamente las aceptas. Coincidencia está en el sistema almacenado descripciones, por lo que las etiquetas de estado personalizado de una org nunca afectan a la regla. **La información de contacto encochada está ofuscada en lugar de en blanco.** ContactoObfuscator consmite (555) 555-55 en (555) 555-**55, snadjafinia.gmail.com en s*************-gmail.com, y 123 Main St en *** Main St. Un campo en blanco es indistinguible de nadie rellenó, por lo que un espejo restringido no pudo Dile "hay un número aquí que no puedes leer" de "esta pista no tiene número" y el personal persiguió la segunda lectura. Ciudad, código postal y país sobreviven ahora sobre la misma base que el Estado siempre hizo: lo suficientemente grueso como para identificar un duplicado, inútil para llegar a alguien una vez que el número de la calle se haya ido. Fecha de las estancias de nacimiento ausente; ninguna forma parcial de ella es reconocible y segura. El navegador refleja esto exactamente **************** porque LeadRealtimePublisher fans de un DTO desenmascarado a todos los suscriptores en el org sin proyección por-receptor posible. La Java y las suites más vidas afirman Las mismas cuerdas para que los dos no puedan separarse desapercibidos. **Las pistas sin asignar gratis para todos son visibles y reivindicables.** ********************** reclama una pista específica no asignada. Libre para todos es la puerta abierta y lleva la puerta de aceptación con ella. sería el camino alrededor de la disciplina que existe junto a las mentas/gastos su propio crédito exactamente como aceptarNextLead lo hace, así que Max Daily Spend todavía lo tapa. ASSIGN-LEADS es la puerta elevada: cualquier plomo sin asignar, sin puerta, sin crédito. La concesión de licencias es una restricción legal y ninguna de las dos puertas lo renuncia. LeadGridQuery gana ************* girando la cuadrícula permiso piso de "líderes asignados a mí" en "líderes asignados a mí, además nada realmente en juego". Escondiendo pistas de libre para todos sin reclamar todos sin VERDAZAS que no lo hicieron sentir en teoría y Inalcanzable en la práctica.

  8. · kamo-internal

    Bandas en idiomas, y dejar de copiar listas de plataformas

    Completa c20bac57. Los idiomas ahora llevan su bandera, la misma que muestra el conmutador NavTop y de la misma fuente, el valor cerrado, así como cada fila en el menú. Llegar allí expuesto el problema real: options.ts había cultivado copias privadas de cuatro listas que la plataforma ya posee, que es como la página que sustituyó también fungó. Los idiomas eran una copia reescrita sin códigos de país, por lo que una bandera no era incluso posible. Ahora app/lib/languages.ts, que el conmutador NavTop y el traductor de chat ya comparte. Las monedas eran una semilla de 34 entradas contra los 160 impares de la plataforma, así que un miembro pagado en naira o shekels leyó su propia moneda como un código desnudo sin símbolo y sin nombre. Ahora app/constantes/mononcies.ts. Las zonas horarias fueron reetipadas de los mismos 27 nombres. Ahora derivado de TIMEZONE.ENUM-TO-IANA, el mapa completo, por lo que el seleccionador no puede ofrecer una zona que nada pueda resolver. La ubicación de trabajo mantiene sus valores, pero ahora se cotejan con la Java enum por prueba. El estatus de miembro del equipo mantiene una lista explícita a propósito: el generado El espejo de tipo Escript es STALE y no. habría que dejar en silencio a un miembro del estado. El Java enum tiene nueve; un pañal de prueba los nueve. Las filas de la zona horaria muestran ahora a qué hora hay. Veintidientes nombres con los subrayados eliminados es una lista a la que ya tienes que saber la respuesta a Lea; el tiempo es lo que se está eligiendo, así que es la cosa mostrada. También corrige una reclamación que el primer commit no entregó: framer-motion no consulta pre-reducción-momoción por sí misma, por lo que la habitación cruza y el ahorro barra animada sin importar el escenario. MotionConfig redujoMotion="usus" Ahora cubre ambas cosas; las piezas impulsadas por el CSS ya llevaban sus propias consultas. Y el campo del campo hace su bandera en la vista de lectura, que coincide con el recolector que lo producía. Verificado: Nopm prueba (14 guardias 5.121 pruebas, 70 de ellos sobre app/lib/memberProfile), tsc --noEmit, siguiente compilación.

  9. · kamo-internal

    Reconstruir mi perfil como un héroe y cinco habitaciones

    **************** era un componente de 1,999 líneas que renderizaba 13 cartas idénticas por una sola columna. Un ayudante de la Sección todos ellos en el mismo radio, la misma sombra, el mismo chip de icono y el de la misma edición / Guardar / Cancelar trío, por lo que "Información de la cuenta" . dos fechas nadie puede editar y llevar exactamente el peso de "Password & MFA". El diseño estaba Diciendo la verdad sobre una jerarquía que la página no tenía. La reconstrucción: Un héroe que mantiene la resolución del papel pintado de MiembroHeader literalmente, cicatriz comentarios incluidos, y añade la identidad que sólo estaba decorando: el nombre como una pieza de gran tipo, la hora local del miembro En la zona de THEIR, estado de MFA, última entrada, y un anillo de fuerza. Cinco habitaciones detrás de un tren Identidad, Apariencia, Trabajo, Acceso, Regional Una abierta a la vez, llevada en la URL como &room=. Una habitación, cada uno de los La tarjeta está cerrada para el espesor no deja ningún elemento de carril. Campos de clic para editar y una barra de guardar de espacio, reemplazando 39 botones. Salva aficionado por endpoint bajo todoSettled: un grupo que tiene éxito Se compromete mientras un grupo que falla mantiene sus campos sucios con una razón. Cmd-K en todos los campos, así que las habitaciones esconden cosas sin esconderlas. - Esqueletos escaneados en forma de tarjeta en lugar de un hilandero de pestañas. Dos defectos encontrados mientras se leía, fijos aquí: La dirección nunca funcionó en dirección EITHER. La cargadora codificaba a cinco cuerdas vacías y nunca lean datos.address, que SecurityService hace enviar; y la calle, ciudad, estado, cremallera, país no es el forma de alambre . Member.address es un EmbDirección de dirección, direcciónDetails, localidad, subdivisión, código postal, país. Así que se volvió en blanco para todos y llaves salvas la entidad no lleva. Ahora usa la forma el resto de la plataforma ya envía, con pruebas de ida y vuelta. "Legal name:" y "Born " eran literales en el idioma miembroHeader, y el la ubicación del trabajo y las etiquetas de empleo eran literales en inglés en el componente. Todo clavado. Estructura. Las reglas se movían a app/lib/memberProfile, donde realmente vitest los recoge aplicaciones/configuraciones/** no está en la lista de autorización de inclusión, por lo que una prueba escrito al lado de la página habría pasado nunca corriendo. fields.ts es la piedra angular: cada campo declarado una vez con su habitación, tarjeta, etiqueta, puerta y endpoint. La paleta, el anillo de fuerza, el salón de entradas y la paliza de derechos todo lo lee en lugar de volver a aplicarlo, y 57 pruebas pinar las puertas. incluir que ningún campo es más visible que su tarjeta, y esa edición Nunca es más amplio que ver. Consejos rápidos se suelta sólo para esta pestaña, omitiendo ayudaConsejos; ConfiguraciónVistoa renderiza el carril desde la pestaña activa, por lo que los otros nueve mantienen la suya. Impersonate se mueve desde la cabecera de los ajustes a la heroína. También elimina ProfileTab.tsx (2,650 líneas), LoginSecurityTab.tsx (787) y MembresíaPermissTab.tsx (2.136), que no tenía importadores. Las llaves del diccionario aterrizaron primero en kamo-translación-dictionary 4bb91245. Verificado: Nopm test (14 guardias 5,106 pruebas), tsc --noEmit, siguiente construcción, y check-i18n-keys -require-mensages contra un clon fresco del diccionario.

  10. · kamo-internal

    Un verdadero terminal de Linux en una ventana de herramientas, y un submenú para llegar a ella

    La opción de navegación de Linux Desktop se convierte en un menú en lugar de un lanzamiento . Remote Desktop con sus tamaños, Terminal Remota - exactamente como el suave es dueño de la llamada, el buzón de voz y texto. Un cambio de registro lo hace: "amable": "acción" se convierte en amable: 'herramita', y NavToolButton ya hace un submenú en las tres colocaciones mientras herramientasLas seccionesillas ya son la fuente compartida para el nav y el home launchpad, así que los dos no pueden derivar. THE TERMINAL. xterm.js contra un PTY real en la propia máquina de dev del miembro, por lo que es un terminal y no un corredor de comandos: aplicaciones de pantalla alt (vim, htop, menos), 24-bit color, reportaje del ratón, pasta entre corchetes, ancho y combinando glifos, clickable OSC 8 enlaces. Nada se interpreta en el camino a través de las pulsaciones de teclado son bytes a el PTY y la salida es bytes back , que es la única manera en que un terminal es alguna vez en realidad compatible con lo que la gente corre en uno. Además del emulador: un estado chip que pulsa en lugar de depender solo del color, un título que sigue el la propia secuencia OSC de shell para que rastree cd y el comando de ejecución, copia en selección con Ctrl-Shift-C/V, Búsqueda de Ctrl-Shift-F, Ctrl .//0 zoom, y una paleta que sigue el tema del espectador. La cáscara sobrevive a la ventana. Corre bajo la tecla tmux en el identificador de la ventana, así que un refresque, una conexión caída o una ventana-venta de herramientas restauran las reattaches al mismo sesión con su desplazamiento y su comando de funcionamiento, que también es por qué a El enchufe se vuelve a conectar con el backoff en lugar de reportar un fallo. El transporte vive en ************* libre de React y de xterm, por lo que el backoff y la división del marco son probables sin un DOM. EL DESKTOP HISTORIA TALLA ES GONE, y con él de escritorioResolutionPicker. Estaba establecido. en una configuración página cuatro pantallas de cada lanzamiento y leído de localStorage, Así que "por qué se abrió pequeño?" no tuvo respuesta cerca de la cosa que se abrió pequeño. El tamaño ahora se elige en el mismo clic que abre el escritorio; openKamoDesktop lo toma explícitamente y un llamante sin opinión pasa. que es lo que el default siempre fue. Tres defectos encontrados y corregidos en la auto-revisión, todos en silencio: el manejador de acceso directo fue unido por un efecto que se enciende antes de que exista el emulador de asintacciones, por lo que nunca atado en absoluto; cerrar una ventana mientras su solicitud de boleto estaba en vuelo todavía abrió un enchufe después, dejando una concha atada a la nada que el La gorra por miembro fue de conteo; y las decoraciones de búsqueda omitidas Los dos colores de todos los visores de ISearchOptions. Escribir los árbitros xterm En vez de "Ay" es lo que atrapó al último. 405 archivos de prueba / 5049 pruebas pasan, los 14 guardias están limpios, tsc está limpio, y el la construcción real de producción tiene éxito, por sí solo un tsc verde no prueba nada aquí. Diccionario empujado primero (115c267f); verificado contra un clon fresco de la forma en que IC Lo hace, ya que los mensajes locales/ son gitignored.

  11. · kamo-internal

    Un cuarto estado de ventana flotar, arrastrar para desprenderse, arrastrar a reordenar

    Una ventana de herramientas emergente ha tenido tres estados: atrincó en la fila a lo largo de la inferior, maximizado sobre el aporte de la vista, o minimizado a una cabeza de chat. Esto añade FLOATING. Desprendido de la fila, cayó en cualquier lugar de la pantalla, y redimensionado desde cualquier borde y alcanza de dos maneras. EL BUTTON. Un control en la barra de título, con el mismo icono que desprende una nota, levanta la ventana de la ranura en la que estaba y la en cascada Alejado del muelle para que el ojo pueda seguirlo. Presionado de nuevo a la fila. Una ventana maximizada no está maximizada y centrada en su lugar, ya que no tiene ranura para salir. EL DRAG, que es la mitad interesante. Pulsando la barra de título y tirar es un gesto con tres resultados, y donde se deja la ventana decidir cuál: - liberado con su borde inferior dentro de 96px de la parte inferior del visor, Toma una ranura en la fila - así que arrastrar una ventana acoplada de lado REORDERS el muelle, que antes no era posible en absoluto; - liberado en cualquier otro lugar que flote allí, que para una ventana atracada es en el momento en que se desliga. Se desprende exactamente de donde estaba, así que nada salta; - y una ventana flotante arrastrada de nuevo a la fila mientras aborda, en su tamaño estándar y en orden con sus vecinos. La EDGE inferior se mide, no el puntero: arrastrando una ventana de 650px por su barra de título pone el puntero 600px por encima del muelle en el primer marco, y una prueba de puntero desprendía cada intento de reordenación. Nada se comete hasta que se acerque el puntero. La ventana de transporte, la Vecinos barajan para hacer espacio (o cierre de filas detrás de ella), la caída ferrocarril brillando a medida que el muelle se acerca y el halo alrededor de la ranura será que tierra en todos son una vista previa resuelta de la caja en vivo cada marco que es lo que hace que Escape, y cambiar de opinión a mitad de camino, no cuesta nada. Dos decisiones más pequeñas que vale la pena nombrar. Ahora se colocan ventanas atadas de su borde TOP en lugar de clavado con "abajo: 0"; arriba e inferior son propiedades diferentes y ninguna transición lleva un elemento entre ellos, así que el chasquido habría saltado sin embargo estaba cronomepe. Y "resalzable: falso" se convierte en un FLOOR una vez que una ventana está fuera de la fila más bien que un veto, el compositor de correo electrónico es una de las herramientas de tamaño fijo, y es es la ventana para la que los miembros más quieren espacio. El orden de la fila y la geometría flotante sobreviven a una recarga: la instantánea lleva la caja flotante, el tamaño del muelle a quien volver, y el orden de matriz, que es el propio acuerdo de izquierda a derecha del miembro. Requiere .kamo/tool-core 0.1.6 (setFloating / setFloatGeometry / setWindowOrder), chocó aquí.

  12. · SecurityService

    Servir Terminal remota y una concha real sobre un WebSocket

    Puente un navegador a un PTY en la propia máquina de dev del miembro. Marcos binarios son el terminal, los marcos de texto son control; en el lúpulo lejano un HTTP 101 en un Corriente prefijado longitud llega al agente del puerto la política de la red ya permisos, así que no se necesita un cambio de Cilium. El primer WebSocket en este servicio, y deliberadamente uno crudo. STOMP es un corredor de mensajes sobre un enchufe y lo que viaja aquí es un flujo de byte entre un navegador y una cáscara de un sobre alrededor de cada pulsación de teclado no compra nada. AUTORIZACION HAPPENS ANTES DE EL SOCKET. Un navegador no puede poner una cabecera en un Constructor de WebSocket, así que en lugar de enseñar el apretón de manos a parse ***, un el punto de referencia autenticado ordinario toma toda la decisión con la sesión en mano y manos hacia adelante como un boleto de un solo uso que no vale nada de 30 segundos más tarde y otra vez después de un uso. Eso refleja el enlace de KamoDesktop, que era endurecidos exactamente por esta razón: un simbario reproducible se sienta en la historia y en Ctrl-Shift-T, y una shell es peor en ese sentido que un escritorio, no mejor. El apretón de manos no lee nada más del cliente, ni de un nombre de usuario, ni un cuenta, sólo un tamaño insinúa las pinzas de agente de todos modos. La cuenta de Linux viene de credencialesPara el propio miembro de la llamada, así que una petición no puede nombrar a alguien La concha de la otra manera, y Origin está pegado al anfitrión que está siendo abordado. No hay contraseña Lea en absoluto: el agente es raíz y cae en la cuenta, por lo que el reversible Las necesidades de credencial de Guacamole nunca se tocan en este camino. Auditado antes del hecho, sincrónico, en el mismo registro de acceso que ya respuestas "quién firmó desde dónde" con IP, geo y agente de usuario, en ALTO severidad. Una fila que sólo apareció en el éxito estaría faltando exactamente los casos Eso importa. Ocho terminales por miembro, porque cada uno es un PTY y un hilo en un MV compartida que ha sido derribada por la presión de la memoria antes. Cerrar el enchufe no mata la cáscara; el agente la corre bajo tmux así que a refrescar o una conexión caída reattaches al trabajo que aún se ejecuta. 21 pruebas: un solo uso, a la vez a la otra cara del límite, silencio simbólogo desconocido, Capa por miembro y su liberación, fichas no secuenciales, y el códec de marco incluyendo una entrega a tiempo, una duración declarada absurda, y la lectura la línea de estado de la actualización sin tragar el arroyo detrás de ella.

  13. · KlusterServices

    Dale al agente un endpoint PTY para la Terminal Remota

    GET /pty actualiza la conexión a la "kamo-pty" y se convierte en una shell: un PTY por Ventana de herramientas del navegador, .su - Ubús en la nueva sesión de .tmux -A, marcos bombeados en ambos sentidos sobre el enchufe crudo. Un 101 en lugar de un WebSocket. La persona que llama es SecurityService sosteniendo al portador token, no un navegador, por lo que no hay razón para rodar a mano RFC 6455 enmarcando a Quédese solo. Después de la línea de estado es de longitud de uint32. uint8 tipo . carga útil, y la rosca por conexión de ThreadingHTTPServer es exactamente la forma esto necesita. Tmux, no una concha desnuda, y esa es la razón por la que está aquí. Muere un PTY crudo con su enchufe, por lo que una actualización de página, un portátil cerrado o un blip wifi mataría un construcción de la estructura y kamo-internal restaura ventanas de herramientas en carga, por lo que un restaurado La terminal volvería sosteniendo un cadáver. La nueva sesión -A hace la primera conexión y reconectar el mismo comando. Seguridad sigue la regla existente del archivo: el nombre de usuario llega ya resuelto de la propia sesión del miembro y se revalida contra USERNAME-RE y la lista reservada antes de que comience cualquier proceso, se comprueban los ids de sesión porque tmux Lee el tamaño de la sintaxis de la dirección, los tamaños están apretados porque asignan un framebuffer en una máquina compartida, y una cuenta deshabilitada es rechazada a pesar de Sigo trabajando para ello. No se lee ninguna contraseña. El agente es raíz y cae a la cuenta, así que a diferencia de la ruta del Guacamole la credencial almacenada nunca sale de la base de datos. TERM se ve forzada a través de "env" porque Reconstruye el medio ambiente de scratch, y un terminal que aparece como "domb" no tiene vim o menos. Las sesiones de tmux abandonadas se podan cuando ese miembro se conecta, lo que necesita ni un temporizador ni una lista de cada cuenta en la máquina. 24 pruebas: forma de argv, denegaciones reservadas/inválidas, sujeción de tamaño, codec marco incluyendo un marco dividido en las lecturas y una absurda longitud declarada, control manejo de marcos, y los cuatro casos del segador. 107 pases.

  14. · kamo-shared-library

    Regise un terminal dev-mquinas en el registro de acceso

    Un miembro que abre una cáscara en el escritorio-1 ahora tiene un tipo de evento propio. Eso la máquina posee un clúster-admin kubeconfig y sus cuentas no tienen contraseña gestión de paquetes, que es equivalente a root " que tenía una concha allí, de qué dirección, y cuándo" tiene que responder desde el mismo registro de acceso que ya lo contesta para los inicios de sesión. Seguro para apegar: system-access-logs no lleva ninguna restricción CHECK (verified in la producción hoy) y event-type is varchar (30). Contraste PhiResourceType, cuya lista blanca de valor emitida por Hibernate ddl-auto: actualización nunca se ampliará.

  15. · SecurityService

    Enviar a la empresa junto al contacto donde se etiquete un registro

    Un registro que es tanto una organización como una persona se llama "Lans de casa de armonía (Nickolas McGarry) ", lidera la compañía, el contacto califica. Esa regla vive en la entidad del navegadorLabel(), por lo que estos endpoints dejan de elegir una mitad y enviar Las dos cosas. - La línea de tiempo de la rejilla /leads estampó cada entrada con el contacto y cayó de nuevo a la compañía. La misma pista, por lo tanto, leí como una persona en su línea de tiempo y como un empresa en la cuadrícula que lo produjo. - El historial de crédito/asignación principal resolvió el contacto solamente. Resuelto aquí en lugar de en el servicio de historia compartida porque este es su único renderizador, y uno de los hallazlosAllById sobre las distintas pistas de la página es una sola consulta. - La pestaña Leads de una cuenta estaba enviando a Euid, organización Id y nada más, así que Cada columna decía "---" y cada fila enlazaba con /leads/view/indefinido. Ahora envía id (que es en lo que se ponen las llaves de la mesa y los enlaces), las dos mitades de nombre, Estado y fechaCreado. El correo electrónico de la pista está cerrado de la manera en que el principal detalle de contacto está en todas partes: tu propia pista siempre, cualquier otra persona solo con VIEW.LEAD-CONTACT-INFO-OTHERS.

  16. · kamo-shared-library

    Envía la compañía de una cuenta junto a su contacto para los recolectores de clientes

    Seis lacistas de clientes leen AccountSummaryDTO - el editor de pedidos, el servicio-trabajo formulario, el detalle de suscripción y asistente, y la pestaña de registro de tuberías y Cada uno de ellos nombró a un cliente por quienquiera que fuera el punto de contacto. Alguien. elegir al cliente a qué cliente pertenece un trabajo o un pedido es buscar el organización. displayName es ahora el contacto ALONE. Solía llevar un sufijo "(123) ", que Tenía sentido mientras era toda la etiqueta y produjo soportes anidados el momento "Harmony Home Loans (Nickolas McGarry (123) ". El uid es ya un campo propio para cualquier recolector que necesite separar a dos clientes con el mismo nombre, y el navegador compone las mitades a través de una entidadLabel () que cualquier otra pantalla orientada al cliente también pasa.

  17. · kamo-internal

    Comunicación Vista de la Comunicación completa el libro filtrado como una línea de tiempo

    Tres cambios a /líderes. La búsqueda rápida se mueve en el héroe, por encima de los enlaces CRM Settings. En el filtro hilera fue el último control en una línea de once desplegables, que sólo se puede encontrar por escaneando más allá de todos ellos. LeadManager todavía posee el viaje del valor en el consulta y en el almacenamiento de sesión que restaura la barra de filtro en el camino de regreso de una pista, la caja se movió, nada más lo hizo. Un interruptor de volteo, centrado en la fila de la paginación: Vista de plomo / vista de comunicación. Dos posiciones nombradas en lugar de un Switch, porque ninguno de estos es "apagado" son dos maneras de ver el mismo conjunto filtrado, y un nombre de control solamente uno dejaría al lector adivinando lo que hace la otra posición. Communication View sustituye a la cuadrícula por el mismo cronogándolo propio de una pista La pestaña de las comunicaciones se extrae el mismo componente, las mismas seis sub-tabs, la misma entrada renderizados a lo que la barra de filtro coinija actualmente. Cada entrada lleva un chip nombrando su ejemplo y enlazando en él: cruzado, una fila que sí no decir de quién fue la llamada es ilegible, y encontrar la única conversación que vale la pena la apertura es la razón para escanear la lista. No hay nota de compositor, deliberadamente: a nota tiene que ser una pista, y una caja que no podría decir que es una trampa en lugar de una conveniencia. Detalles que son de carga en lugar de incidental: - La página de la cuadrícula es SUSPENDED en Communication View. Tú /api/security/leads escribe una fila de acceso PHI por plomo devuelve, y buscando una página para hacer una pantalla que muestra que ninguno de ellos pondría lecturas en la auditoría rastro que nadie realizó. - La cadena de filtro entregada a la línea de tiempo se desboca en el propio retraso de la red. La cuadrícula debula su petición; la línea de tiempo no puede volver a poner de nuevo cuando el cambios de cuerda e incendia dos peticiones por cambio, por lo que teclear "sombrero" fue de diez Viajes de ida, cada uno escribiendo un registro de búsqueda de PHI, ninguno de ellos abortó. - página/tamaño/sort se eliminan de ella. tamaño choca activamente, porque el La línea de tiempo establece la suya. - Las dos pistas del buscapersonas se quedan MOUNTED cuando vacian. Una exhibición:None de niño es no un elemento de la cuadrícula en absoluto, así que esconderlos habría dejado el interruptor como el primero El artículo y lo deslizó en la pista izquierda, fuera del centro.

  18. · kamo-internal

    Añadir JustCall como un tipo de servidor de teléfono

    Añade JustCall al selector en ************* con su API clave y secreto, un contacto-importación, estatus de credencial en los proveedores pestá, y el logo. La parte interesante es marcar. JustCall publica ningún registrador de SIP y no Credencial WebRTC a aplicaciones de terceros, y su única llamada de salida endpoint conduce a un agente de voz de IA en lugar de una persona - por lo que el backend reporta voiceCall=false, que useSoftphone ya registro de puertas, y no el teléfono blando está construido. Pero un miembro de JustCall puede hacer una llamada perfectamente bien, Simplemente no aquí, y "llamas de voz no disponibles con el proveedor actual" sería un ment lie. marcar () por lo tanto, entrega el número al propio diallero web de JustCall. Ese aplauso es su propio módulo en lugar de una rama dentro del gancho: es un Y ponerlo allí lo hace probado. Usa el diallero web en lugar de la simple: protocolo la aplicación de escritorio se registra, porque un navegador no saber si esa aplicación está instalada y una navegación de protocolo sin manipular no hace nada en absoluto - un miembro sin la aplicación haría clic en marcar y ver No pasa nada. ProveedorCapacidades ganada proveedorType para que una voz falsaLas llamadas pueden ser actuados en lugar de meramente reportado: para la mayoría de los proveedores significa "sin marcación", para esto una significa "alcaldía de allá". Espejos SipCredentialsResult.provider, que existe por la misma razón. La nueva prueba de cobertura es el gemelo frontend de PbxProviderBillingCoverageTest un proveedor que nadie se acordó de etiquetar no falla en voz alta, lo hace como un tarjeta en blanco en la pantalla de una pantalla que un administrador utiliza para elegirla. Verificado: tsc clean, los 14 guardias incluyendo check-i18n-keys --require-mensages, 4.938 pruebas más vidas. La construcción del siguiente no se corrió en contra de estos cambios: otro Sesión celebró este directorio de trabajo con sus propias construcciones simultáneas en todo.

  19. · SecurityService

    Una línea de tiempo de comunicación sobre todo el filtro / plomo, ni una sola pista

    GET ************* toma la cadena de consulta SAME GET la página de detalles de la pista de plomo dibuja a través de cada pista de la barra de filtro. "Qué tiene se dice a las pistas que estoy trabajando" es una pregunta sobre un conjunto, y hasta ahora La única manera de pedirlo era abrirlos uno a la vez. La traducción de filtro se mueve a LeadGridFilters para que ambos endpoints resuelvan un la cadena de consulta idénticamente; una segunda copia se derivaría, y la forma en que va a la deriva es un cronogará de las diferentes pistas de la cuadrícula que lo produjo. Dos límites diferentes, por dos razones diferentes. Llamadas, mensajes de voz, textos y Los e-mails no están ilimitados: LEAD-COMMUNICATIONS lleva ORG-ID y está indexado en (ORG-ID, OCCURRED-AT), por lo que una consulta de tecset camina la correspondencia de la org el primer lugar y prueba cada fila contra el predicado de la rejilla como una correlacionar EXISTAS - el mismo costo, ya sean siete pistas emparejados o setenta mil. Notas y el chat no puede ser: viven en MEDIA-OBJS, que no lleva org y no lleva plomo, y la única unión de nuevo es LEADS.STREAM-GUID, que no está indexada. Esos dos resolver las pistas coincidentes primero, con un tope de 1000, y la respuesta dice cuando tapadas en lugar de caer en silencio la historia. La autorización es la línea de tiempo de plomo, aplicada en SQL. Una entrada lleva una pista número o dirección propia más contenido de mensaje, por lo que LeadCommsReadGate ahora también dice su regla sobre las tres formas que una pista puede tener y emite el predicado a juego. Escribirlo por segunda vez es donde estaba el bicho: el primer borrador decía "sinsignación necesita VERDEASSIGNED-LEADS" y se perdió esa negativa () cae THROUGH que comprueban a la información de contacto, que habría puesto la correspondencia de cada líder de grupo frente a un miembro sosteniendo sólo la piscina derecha. Las dos formas están ahora pegadas a Una y otra exhaustivamente, cada combinación correcta contra todas las formas. A diferencia de la redupación de una cuenta, esto NO colapsa un evento que llegó a dos conduces igualadas. Dos razones que apuntan de la misma manera: cada fila nombra el plomo Pertenece a y "esta llamada llegó a ambos" es un hecho sobre el libro que se está trabajando, y colapsar filas de una sola página de tamaño fijo puede salir del superviviente último gemelo como entrada fresca el cliente no puede deduplicar. Las consultas de criterios se introducen en LeadGridCommsQueries como funciones puras. LeadGridCommunicationsSqlTest puede hacerlas contra metadatos reales de Hibernate. Eso importa aquí más de lo habitual: la propia especificación de la red ya emite EXISTAS subcoquerías, y esto lo niñe dentro de otro, que es exactamente donde Este servicio es Hibernate 6.2.13 y el 6.5 de la biblioteca compartida difieren.

  20. · VOIPService

    Alambre JustCall in a través de la abstracción del proveedor de telefonía

    JustCall (api.justcall.io/v2.1) como un PhoneProvider completo: historia de llamada, textos, buzón de voz, grabaciones, el directorio de agentes y disponibilidad, además de firmado en red y una importación de contactos opcionales. Auth es una cuenta en todo. llave/pareja secreta enviada como el valor de autorización de "clave:seoto" - no un Bearer ficha, que no autentifica nada y devuelve un 401 que se lee como un mal Credencial. Tres formas de la API de JustCall impulsan el diseño: * Voicemail no es un recurso. Es una llamada cuyo tipo llama-info.type es "Voicemail", llevando su transcripción en línea y su audio detrás de lo mismo grabación endpoint como cualquier otra llamada - por lo que getVoicemails is getCallHistory con un filtro, y no hay estado de lectura que marque. * No hay credencial de sucario. JustCall no publica ningún registrador de SIP y no WebRTC token tos a terceros, y su único endpoint de llamada de salida conduce un Agente de la Voz de AI en lugar de una persona. voiceCalls es por lo tanto falso, que es qué usoEn el registro de puertas de Softphone ya, y getSipCredentials se niega con una explicación en lugar de a medias. * El directorio es solo leído, y no hay concepto de dispositivo, por lo que esos mantienen la interfaz está lanzando por defecto en lugar de fingir escribir. Webhooks están registrados por instancia en ************* uno suscripción por tipo de evento. El HMAC-SHA256 de JustCall cubre la URL registrada, de modo que la cadena de consulta está dentro del material firmado y no puede ser reescrita a aterriza los eventos de una org en el servidor telefónico de otro. La URL está registrada en config.json en el aprovisionamiento porque la verificación tiene que firmar la misma cadena JustCall hizo la reconstrucción de la configuración empezaría a fracasar en silencio el momento en que la URL de la base cambió. Los textos entrantes y eventos de llamada llegan a los caminos que RingCentral ya utiliza. VoipMesageEl manejador de Service fue en forma de RingCentral en todo, así que su análisis se separte de su ingestante: ambos carriles ahora comparten el dedupe, interceptación de palabras clave, conversación upsert y enlaza. Que compartir es deliberado. La palabra clave paso es lo que registra un opt-out, y un segundo carril que crece su propia copia de la secuencia es como uno termina sin honrar a STOP. El interruptor de respuesta de SmsKeywordService ganó el nuevo carril por la misma razón: es un interruptor de declaración, así que un constante no incluido en la lista habría respondido a nadie. MMS es sólo por URL pública. JustCall acepta que no se sube bytes. el accesorio se estaciona detrás de una URL inexpedible de corta duración en este servicio y ese enlace se entrega. Deliberadamente no una URL de tienda de objetos prefirmada: MinIO Aquí está ************* una URL prefirmada está firmada para el anfitrión lo nombra, y el buscador de JustCall no puede resolver una dirección de enclubester. Los haría 404 mientras trabajaba perfectamente desde dentro del cúmulo. Esto El servicio ya es accesible públicamente porque recibe sus boooks web. La importación de contacto se apaga a menos que se encienda: la libreta de direcciones de un cliente es el acceso controlado por miembro, y importarlo en el momento en que se pegue una llave ser una sorpresa. Los contactos son propiedad a través del agente JustCallid la sincronización de la extensión ya grabada, y cualquiera de cuyos mapas de agente a ningún miembro Kamo se salta más bien de lo que aparcó en algún lugar compartido. Persistencia va a EmailService, que es dueña de la Tablas de contactos. JustCall's AI call summary, sentiment and score ride on the same call read and se aflojan en CallLogEntry. No persistió: PHONE-CALL-LOG no tiene tales columnas, el proveedor los devuelve en cada lectura, y la adición de columnas costaría un DDL ventana para un duplicado de su tienda. No hay DDL en este cambio.

  21. · EmailService

    Punto de final interno para la importación de contactos de un sistema externo

    La integración JustCall de VOIPService necesita aterrizar los contactos de un cliente en el la libreta de direcciones del miembro derecho, y aquí es donde se escriben los contactos: un Contacto mapas solo scalars, con sus correos electrónicos, teléfonos, direcciones, orgs, URLs, IMs y relaciones en siete mesas sin cascada, alcanzables sólo a través de ContactDetailStore. Una persona que escribió esas tablas de otro servicio lo haría Deje caer silenciosamente cada número de teléfono en el único campo que existe una integración telefónica para entregar - para que la persistencia se quede aquí y el llamante se publique. La propiedad es la parte que soporta la carga. CONTACTO.OWNER-ID NO es NULL y apunta a usuarios, y el propietario de ContactBook ES su control de acceso (un libro sin dueños no pertenece a nadie y 404s para todos), por lo que un lote debe nombrar al miembro su Los contactos pertenecen y se les rechaza directamente cuando no lo hace. Cada fuente se pone su propio libro detrás de una fila de contactoIntegración en lugar de mezclarse en "My Contactos": filas sincronizadas y filas tipo mano tienen diferentes ciclos de vida, y el el miembro puede esconder o soltar a los importados sin tocar los suyos. Upserts coinciden en uid, que el llamante nombra espacios a su sistema. UID es único por libro, por lo que eso es también lo que hace una actualización de una actualización en lugar de un segundo copia de todo. Montado bajo /api/interno, custodiado entero por InternoAuthFilter - no hay miembro de la sesión detrás de estas llamadas, así que sin ese filtro esto sería un endpoint para escribir contactos arbitrarios en libros de miembros arbitrarios.

  22. · kamo-shared-library

    Añadir JUST-CALL como tipo de proveedor de teléfono

    Aplicado en ordinal 5. ************* es EnumType.ORDINAL y no lleva ninguna restricción CHECK, por lo que la apender es segura e insertar en cualquier lugar De lo contrario volvería a señalar en silencio las filas existentes en un proveedor diferente. PbxProviderBillingCoveragePalinaPal de la orden desde el otro lado. Facty THIRD-PARTY: la organización tiene su propia suscripción JustCall (sus API necesita al menos un plan de equipo) y JustCall lleva las llamadas, así que esto es un carga de integración, no hospedaje. PbxBillingClass.of no tiene brazo por defecto, que es lo que forzaron la decisión en lugar de dejar que un nuevo proveedor no facturara nada para siempre.

  23. · kamo-internal

    Un color de papel por bloque, y bloques que se ajustan a su texto

    BLOCKS AHORA FIT THEIR CONTENT. Los bloques del lector eran todos 200px de altura lo que sea tenían que hacerlo, porque RichTextExtension configura con el editor minHeight: 200px - la forma del compositor del artículo, donde el editor ES la página. Cambiar al lector a RichTextView lo eliminó; nada en las abrazaquesa el cristal a La altura de bloque ahora, así que es exactamente tan alto como sus palabras. LOS EDITORES DE COMPOSER DE LA COMPOSER INSTEAD DE SCROLLING. Igual 200px, además de desbordamiento: auto en el contenedor, significaba que cada bloque abrió tres líneas demasiado altas y luego se entregó una barra de desplazamiento en lugar de crecer una barra de desplazamiento dentro de un bloquear dentro del scroller de la página. KbArticleEditor gana la contenedor se detiene de desplazamiento, el área de escritura comienza a la altura de una línea, y los tamaños de la raíz al contenido en lugar de llenar su huésped. Opt-in, así que el artículo El compositor mantiene la forma que es la adecuada para un documento del tamaño de una página. PAPER COLOR. Cada bloque lleva uno, elegido de NoteColorMenu, el mismo menú y la misma paleta que usan los cristales de la plataforma de lanzamiento, así que una swatch significa una cosa en todo el producto en lugar de tres. El color se almacena como el identificación de paleta y resuelto a través de resoluciónStickyColor en render, por lo que ambos compositor y el Centro de Interacción pintan de una fuente y una paleta posterior La corrección alcanza los guiones escritos hoy. En el lector un bloque de color mantiene su color si es o no el actual. "Dónde estoy yo" ya es llevado por la frontera, el ascensor y el Espina, atenuar el papel también haría que la elección del autor pareciera un De hecho la falta.

  24. · kamo-internal

    Añadir el logotipo del proveedor JustCall

    La carpeta del logotipo de VOIP tenía FreePBX, Microsoft y RingCentral, pero no JustCall Mark, así que cualquier lista de la superficie JustCall como proveedor tenía nada que hacer.

  25. · kamo-shared-library

    Color de papel por bloque

    **************** sosteniendo una identificación de paleta "lemon", "vidrio" - y nunca un valor hechizo. Almacenó la forma en que las notas y los cristales de lanzamiento almacenan el suyo, por la razón que importa más que por el bien de la consistencia: la paleta se define una vez en el cliente (STICKY-PALETTE) y cada superficie resuelve un identificador a través resoluciónStickyColor. Persisting hex congelaría la sombra de hoy en la fila, así que una corrección posterior a la paleta arreglaría las notas y dejaría silenciosamente el scripts en el viejo color y la misma swatch significarían entonces dos diferentes Cosas dependiendo de la pantalla de la que fuera elegido. Null no es color: el bloque lleva cualquier superficie en la que se sienta. Un en blanco o en blanco el valor del espacio blanco se normaliza para anular el camino, porque "" no es "no" color" para resolverStickyColor - devuelve la primera mirada de la paleta, así que un El autor que despejara el color habría conseguido limón. Llevado a través de la cuadra completa reemplazar como cualquier otro campo, y cubierto Allí: el color sobrevive a una edición, y una despeje vuelve nula.

  26. · EmailService

    Deja que un mensaje enviado lleve imágenes dentro de su cuerpo

    El cuerpo tenía cuatro formas posibles y enviarlo sólo podía construir tres. El rama multiparte/relacionada, la que pone una imagen en la que el HTML's cid: puntos en él - se sentó detrás de la rama de fijación, por lo que un mensaje con ambos pegados la imagen y un archivo perdieron la imagen en la salida: el cuerpo mantuvo un cid: referencia a una parte que ya no estaba en el mensaje, y nada lo dijo. También fue inalcanzable en la práctica, porque sólo la ruta transaccional se ha fijado inlineImages; nada de lo que un miembro envió podría llegar allí. applyBody ahora construye la forma de la forma de las llamadas de contenido por el solo . html, relacionado cuando el cuerpo hace referencia a las imágenes, mezcladas cuando hay accesorios, envoltura mixta relacionadas cuando hay tanto como una invitación al calendario mantiene sus imágenes ofreciendo las relacionadas como la alternativa HTML. respuesta y adelante pasan por enviar, por lo que Hereda todo. /send toma las imágenes como sus propias partes binarias, cada una con el nombre de la identificación de contenido el HTML ya hace referencia. Base64 dentro de la parte JSON costaría un tercio de nuevo en tamaño contra el techo más pequeño de la cadena, por lo que una captura de pantalla o dos ser rechazado por una razón sobre la que el miembro no podía hacer nada. El nombre de una parte se convierte en una cabecera Content-ID, por lo que InlineImageParts lo combina contra la forma exacta de la compositora mentas y rechaza todo lo demás. Un equivocado falla el envío más bien que caer en silencio y dejar un agujero en el cuerpo.

  27. · kamo-asterisk-support

    Reconciliar los bloques WebRTC por expansión en lugar de editar a mano una lista

    Una extensión creada a través de la API de FreePBX no obtiene un bloque WebRTC, por lo que se registra a través de WSS y luego no tiene DTLS o ICE - el suave del navegador muestra un llamada conectada sin audio. Esos ajustes no se pueden expresar en ninguna parte FreePBX los aceptará: .dtls.cert.file y transport no son columnas en la mesa de "sip" y no los campos en la mutación de la Extensión, por lo que tienen que ser "[-ext](-) Añadir en ************* hasta ahora ese archivo era una lista mantenida a mano en un ConfigMap, que significaba cada nueva extensión se rogó silenciosamente hasta que alguien se acordó de editarlo y redistribuir (8888 se sentó sin listar durante meses). La extensión 8777 fue la última. WebRTCReconciler lee la lista de extensión de la libreza generada por FreePBX pjsip.end.endpoint.conf y mantiene una sección gestionada desmarcada de marcador a paso con cada 30. Las extensiones borrasadas pierden su bloque automáticamente. para una sección que ya no existe hace que el registro de Asterisco "la sección no existe" en cada recarga. Sólo llena los huecos: cualquier bloque escrito fuera de nuestros marcadores (los KlusterServices lista, un administrador) se deja exactamente como está, nunca se duplica y nunca se ha hecho cargo. Sólo los puntos finales todo numéricos se toca, por lo que los troncos no están pegados a un transporte WS con DTLS forzado. Un pjsip.end.end.conf desaparecido es un no-op en lugar de "extenciones cero", que de otra manera despojarían a WebRTC de cada extensión que tiene una. OFF por defecto (MANAGE-WEBRTC-ENDPOINTS), en k1m1. El bloque está exactamente. incorrecto para un teléfono de escritorio SIP: obliga a DTLS-SRTP a no hacer el teléfono y lo pincha a un transporte que no habla. Dos cosas medidas en la caja k1m1 en vivo en lugar de asumir: - La recarga debe ser de .module reload res.pjsip.so., no de .pjsip reload. Después a añadir un bloque de .[8999], .pjsip reload , dejó el punto final en webrtc=no; una recarga de módulo lo aplicó, y una recarga de módulo también lo revirtió cuando el bloqueo fue retirado. Usar la propia recarga de CLI. .pjsip reload. aquí escribiría un el archivo correcto y dejar mal la configuración en marcha. - Un bloque de bloques sólo puede ADD, nunca anular. Aprobación Didirecto.media=yes a un endpoint cuya configuración generada dijo Dejando que en el primer valor ganara el valor de no. (Ewebrtc=yes es el excepción sólo porque es una abreviatura aditiva, no un campo almacenado.) Cualquier cosa que debe CAMBIO un valor generado tiene que ser fijado en el FreePBX base de datos. Verificado contra el verdadero /etc/asterisk: correctamente elegido el uno extensión descubita de 23, saltó el maletero Erik-Primary, dejó el existente roster by-byte-for-byte identical, y fue un no-op en el segundo pase.

  28. · kamo-internal

    Se hace pasar, para que un operador pueda abrir un org como uno de sus miembros

    Mostrado al lado de Enter en cada vista /red para una retención de administrador de plataforma la nueva derecha IMPERSONATE. Un derecho diferente de SYSTEM-USER y deliberadamente no implicado por ella: entrar como Usuario del Sistema es una identidad visible, separada a El inquilino puede ver en su propia lista de miembros, mientras que esto produce una sesión nada aguas abajo se puede decir de esa persona firmando en sí mismos. El seleccionador es MemberPickerDialog. El mismo popup que el filtro de /leads Agent abre - sin cambios. Ya es propietaria de la búsqueda, la paging, el manejo del teclado y la forma en que se explica una fila incomprebable. Lo nuevo es su "fetcher", que sustituye al directorio endpoint directamente y apunta a la organización objetivo's miembros, porque el directorio predeterminado es el propio org de la sesión y eso es Precisamente la lista equivocada. Nadie está filtrado del lado del cliente. El servidor marca una cuenta de dios, una plataforma administrador o un miembro fuera de bordo inseleccionable con una razón, y el La tabla de razones del diálogo creció para cubrirlos: esconder esas filas dejaría un operador en busca de un colega en la organización y consiguiendo Nada atrás, que se lee como una búsqueda rota en lugar de como una negativa. La pestaña se afirma sincronizada dentro del propio clic del seleccionador, antes de la espera, y su sesiónStorage despejado. El mismo mango de baileEntro de documentos, por las mismas dos razones: una ventana emergente abierta después de una espera es una el navegador nunca vi a alguien que lo pidiera, y una ventana de un mismo origen. Abra CLONES de este almacenamiento, id de sesión incluido. Añade también el icono que la pestaña Patrista de la pestaña Admins necesita para la nueva derecha; tsc ataca que, que es para lo correcto. IICON siendo un Registro exhaustivo.

  29. · SecurityService

    Introduzca una organización de inquilinos como uno de sus miembros, desde /network

    Una segunda puerta al lado del mismo-orgojo-modo uno. Blocado en el nuevo IMPERSONATE plataforma a través de la página web de la derecha, donde la puerta existente está cerrada la sesión portando GD. Se mantuvo como dos manejadores en lugar de uno con una bandera. Sus puertas llaman genuinamente diferente, y "RequirePlatformRight" no tiene ninguna variante en-handler por diseño de una puerta que tienes que recordar llamar es una que eventualmente se consigue Olvidó en el punto final que importaba. Quién puede ser ENTERED AS es una pregunta separada, y ImpersonationTargetRules le responde como una función pura sobre hechos resueltos: rechazado para el nivel superior org, usted mismo, una membresía sin usuario, el Usuario del Sistema, una cuenta de dios, un administrador de la plataforma, o cualquiera que no pudiera firmar en sí mismo. Lo mismo. función decide si una fila en el selector es seleccionable, por lo que la lista no puede Ofrece a alguien que el endpoint se alejaría. La puerta del mismo or deliberadamente NO comparte esas reglas. Funciona dentro la propia organización del llamante, que para un administrador de dios es por lo general el más alto nivel uno, y en las personas que son frecuentemente administradores en sí mismos - ambos duros negativas aquí. Doblación de los dos juntos rompería la página de configuración o Ensancha esto. **************** llena el seleccionador. Es el único punto final en ese controlador nombrando una organización distinta a la de la sesión, por eso es un manejador separado en lugar de un parámetro en / búsqueda: la promesa de la clase que / la búsqueda no puede ser ampliada por accidente permanece cierto. La gente rechazada se queda en la lista con una razón en lugar de desaparecer de una búsqueda de un colega que está claramente en el org. workspaceHostPara moverse de EnterAsController en WorkspaceHostResolver, desde ambas puertas necesitan la respuesta idéntica. Dos copias de "que el anfitrión es abierto" es cómo uno sigue enviando operadores a un certificado intersticial después del otro parado. Sus pruebas se movieron con él.

  30. · kamo-shared-library

    IMPERSONATE, para que un operador pueda entrar en un inquilino como uno de sus miembros

    Aplicado a PlatformRightType en lugar de insertar: getSortOrder () devuelve ordinal(), por lo que una derecha añadida en el medio renumero cada derecha debajo de él en el Consola. Las subvenciones son "Enumerado" (STRING), por lo que la adición no cambia nada ya concedido. Deliberadamente no doblado en SYSTEM-USER. Ese derecho entra como un visible, identidad separada que un inquilino puede ver en su propia lista de miembros y pista de auditoría; este produce una sesión que nada puede decir de la firma de los miembros. - en sí mismos. Diferentes preguntas, radio de diferentes explosiones, por lo que un operador El derecho a la primera no tiene derecho a la segunda. ReportVisibilityTest puso a MANAGE-REPORTS como el valor LAST, que se adjuntó rompiera nada, la invarita que importa es que nada fue insertó ABOVE, por lo que ahora fija el ordinal en su lugar. Dos buscadores de repositorios de lotes para el que se encuentra detrás: las membresías un conjunto de los usuarios tienen una organización, y cuál de un conjunto de miembros son plataforma Administradores. Fila-a- vez que es dos consultas por nombre, en un control que repeticiones en cada pulsación de teclas.

Tu universo está esperando.

Comience gratis en minutos y agregue productos cuando esté listo, sin migración ni nuevos inicios de sesión.

Gratis para siempre: no se requiere tarjeta de crédito