Журнал изменений
Что нового.
Каждое усовершенствование платформы, как только она появится.
· InitializerService
Миграция между телефонами и провайдерами SMS
Запускается после Hibernate ddl-auto: обновление создает новые таблицы (VOIP PROVIDER INSTANCE, BULK TEXT PROVIDER INSTANCE, PHONE EXTENSION, PHONE END USER, PHONE DEVICE PHONE VOICEMAIL, SYSTEM CONFIGURATION) из переименованных/новых объектов в kamo-shared-библиотека совершает 232d731. Управляйте тем, что Hibernate не может: - Скопировать строки из унаследованного voip provider config / bulk text provider config в Новые таблицы * instance, синтезирующие имя example name из типа провайдера. - Drop NOT CONFIGURED (ординарные 0) строки - отсутствие в настоящее время состояние "нет провайдера". - Брось теперь пустое наследие * config таблицы. - Backfill instance id on member voip config, voip conversations, and kamotokens.org oauth token с использованием старейшего активного экземпляра каждой организации. Восстановление уникального индекса org oauth token от (org id, provider) до (org id, provider, instance id) так много RingCentral экземпляров на одну работу. - Опустить уникальные индексы voip conversations + таблицы экземпляров провайдера. - Seed the system configuration singleton row (интервал синхронизации voip 10 мин по умолчанию, включена правда) — оператор платформы настраивает это с помощью новой конфигурации платформы VOIP и SMS вкладка. Все заявления идемпотентны; повторное использование уже мигрировавшего DB безопасно. Заказ 20 — после SchemaCleanupRunner (1), OrganizationTypeRemovalRunner (2), KamoCRMAgeReqUpdateRunner (10).
· kamo-shared-library
Многоканальный телефон / SMS провайдера основа схемы
- Переименовать VoipProviderConfig → VoipProviderInstance; выбросить UNIQUE(org id), добавить example name, config json, last sync at, last sync error. - Переименовать BulkTextProviderConfig → BulkTextProviderInstance; одно и то же многофакторное лечение. - Новые объекты: PhoneExtension, PhoneEndUser, PhoneDevice, PhoneVoicemail, SystemConfiguration. - Добавить instance id в MemberVoipConfig, VoipConversation, OrgOAuthToken (несколько RingCentral экземпляров в одной организации). - Новые номера: PhoneExtensionStatus, PhoneEndUserStatus, PhoneDeviceType, PhoneDeviceRegistrationStatus. - Унижать НЕ УВЕРЕННЫЙ в **************** (сохраняется при порядковом 0 для сохранения существующих строк в EnumType.ORDINAL). Добавьте FLOWROUTE в BulkTextProviderType для нового поставщика SMS-сообщений. - DTO с абстракцией провайдера (ExtensionDto, PhoneUserDto, DeviceDto, VoicemailEntryDto, InstanceHealthDto, Create/Update requests). Первая фаза многостанционного рефактора телефона/SMS — см. **************** (в kamo-login repo). KamoInitializer Миграция + Рефакторы обслуживания.
· KlusterServices
Развернуть FreePBX 17 + Jigasi SIP мост на k1m1 и k2m1
FreePBX (tiredofit/freepbx:17-latest) работает с hostNetwork, поэтому SIP/RTP Сохраняет реальные IP-адреса клиентов, прикрепленный один на узел через nodeSelector. Щелкните 5060 UDP/TCP (5061 TLS), диапазон RTP 18000-18999 выбран во избежание Януса (20000-20999), Coturn (52000-65535) и WireGuard (51820-51821). Встречайте Jigasi добавлен как внутренний ClusterIP SIP-мост, чтобы FreePBX мог Магазин звонит на конференции Meet; Prosody теперь предоставляет пользователю jigasi Источник: JIGASI XMPP PASSWORD. Административный интерфейс доступен через Traefik at pbx.k1.kluster.kamocrm.com / pbx.k2.kluster.kamocrm.com с сертификатами Просмотр автосертификата STATIC DOMAINS.
· kamo-internal
Platform-admin view, pagination, live search, filters, org logos
Администраторы платформы (владелец организации верхнего уровня) теперь видят каждую организацию в системе через Новые конечные точки /api/security/org/all-networks, а не только их собственные членства. Заголовок заголовка и обновление подзаголовка, чтобы отразить контекст администратора. Другие улучшения: - Пагинация: клиентская сторона, по умолчанию 25/страница, настраиваемая (10/25/50/100) Живой поиск: фильтры по заголовку, короткому заголовку или домену в режиме реального времени Фильтровые чипы: «Все», «Собственные организации», «DNS еще не настроены» - Подсчет результатов, показанный рядом с селектором размера страницы - Кнопки номера страницы с коллапсом эллипса для большого количества страниц Компонент OrgLogo консолидирует рендеринг логотипа (короткий логотип через getOrgLogoUrl) как для карты current-org, так и для всех карточек в списке Кнопка ENTER, правильно защищенная org.memberId (совместная запись пользователя + участника) - ENTER AS SYSTEM MEMBER доступен для всех организаций, когда можно
· SecurityService
Добавить GET/api/security/org/all-networks для администраторов платформ
Владельцы организаций верхнего уровня теперь могут получить все организации в системе. Информация о членстве относительно абонента. Органы, в которых у абонента есть член Запись получает isOwner/memberId заселяется; другие получают MemberId: null, isOwner: false. Endpoint утверждает, что абонент находится как в организации верхнего уровня, так и является владельцем.
· kamo-internal
Подзагрузки в редакторе модели безопасности + очистка
- Редактор модели безопасности на **************** теперь разделен в четыре подзадачи: общая (базовая информация, видимость, кто может создать), Настройки платформ, конфигурация домена, коммерческие рынки, цензура (алкоголь) Табак / огнестрельное оружие + член + возрастные диапазоны членов команды), Разрешенные приложения и Роль безопасности по умолчанию. Новый **************** позволяет администратору редактировать модель разрешить RootSubdomains флаг и родительские псевдонимы наряду с остальной частью этого Настройки модели. Ранее это жило внутри субдомена по всей стране. Ветви лопаются. Всплывающие окна поддоменов упрощаются только до битов уровня орга — Удостоверения GoDaddy + Master позволяют переключаться. Пер-модельные псевдонимы съехали Диалог и его поверхность опоры; SecurityRoleManager Также неиспользуемый реквизит. - Удалить все ссылки на TeamMemberPayFeesSetting / PayFeesSetting / TriStateFeeOption — «Самоплачиваемый сотрудник Kamo Fees» Редактор модели и его чип в таблице моделей исчезли вместе с Тип псевдонимов в использовании AppliedModel. - /settings/platform/events and /settings/platform/plans pages are Они были удалены (они были заполнителями с обесцененной платежной поверхности). Целевая страница, список подтем SettingsStatusWindow и маршрут/иконка Все карты сбрасывают совпадающие записи. - Управляйте субтабом группы на ******************* отображает заголовок Default Group как поле только для чтения с ограниченными возможностями (было ранее полностью скрытые за информационным оповещением, чтобы администраторы могли видеть Название группы при понимании его изменить нельзя.
· kamo-internal
Видимость Alias UI + кнопка ветвей поддоменов на странице типов ветвей
SubdomainBranchesDialog: Редактор Alias заменил список чипов списком строк в стиле таблицы Члены и члены команды Checkboxs per alias — администраторы, контролирующие Типы создателей видят каждый родительский псевдоним в /network/create - на UpdateModelSubdomainConfig сигнатура обновлена для передачи полных объектов псевдонима (alias, visibleToMembers, visibleToTeamMembers) SecurityRoleManager: - fullSecurityModels state + loadFullSecurityModels mapliases with **************************** флаги - persistModelSubdomainConfig передает полный псевдоним объектам на бэкэнд BranchSetupManager **************************** - Добавлена кнопка Subdomain Branches (страница зеркальных функций безопасности) тот же SubdomainBranchesDialog, status-fetch на монтировке и перезагрузка модели когда открывается диалог
· SecurityService
Фильтрация видимости Alias + автопроверка владения поддоменом
Контролер организации: - Создание Web-alias org теперь автоматически отмечает право собственности isDnsVerified=true on the created OrgDomain — с тех пор запись TXT не требуется Мы предоставили DNS на GoDaddy от их имени. Путь CUSTOM parentAliasType теперь обеспечивает видимость типа создателя per-alias (зеркала / создаваемый фильтр, чтобы можно было обойти бэкэнд) BranchTypeController / Креативный: Список родительских псевдонимов теперь фильтруется создателем абонента Тип: MEMBERS see only visibleToMembers=true aliases, TEAM MEMBERS see only Видимые члены команды = истинные псевдонимы, Владельцы видят все Каждый псевдоним DTO теперь включает в себя флаги видимых участников + видимых членов команды SecurityModelController: - processSubdomainBranchConfig теперь читает **************************** от псевдонима карты объектов и вызовов заменить AllFull, чтобы сохранить их
· kamo-shared-library
Добавить флаги видимости типа создателя per-alias
Добавить видимыеToMembers / видимыеToTeamMembers булевые колонки ChildOrgSecurityМодельАлии, чтобы администраторы могли ограничить, какие родительские псевдонимы Являться членам против членов команды при создании детских организаций. - Организация: два @Builder. Оригинальное название: Bool Default True SubdomainAliasDTO: выставить оба флага ************* Новый рекорд AliasEntry + замена AllFull перегрузка, сохраняющая видимость; замена всех (струн) делегатов
· kamo-internal
Настройки диалогов, пути web-alias wizard и панели обеспечения DNS
Добавляет пользовательский интерфейс поддоменов через три поверхности: ************* Новая кнопка «Поддоменные ветви» открывает диалог для орг-уровня включения Toggle + GoDaddy creds, с per-security-model Editor for letRootSubdomains + родительские псевдонимы Помощники волшебника / ToSafeAlias - /network/create: BasicsStep теперь разветвляется между приносящим доменом путь и путь Kamo web-alias (отмеченный на флаге включения родительской организации, Статус GoDaddy и псевдонимы выбранного типа ветвей. Родительские алии выпадающие списки ROOT (если разрешено) плюс псевдонимы для каждой модели; живая помощь Обновления предварительного просмотра по мере изменения пользователем любого поля /setup/dns: новый DnsProvisioning Группа проводит опросы журнала снабжения организации и Поверхности на запись GoDaddy статус с отказом повторного действия При поддержке Next.js BFF прокси-маршруты ****************
· SecurityService
Конфигурация уровня организации, клиент GoDaddy и web-alias org создают путь
Проводит новые ветви Subdomain сквозной на бэкэнде: - SubdomainBranchesController for org-level enable + GoDaddy creds (live-verified) GoDaddyDnsClient выполняет идемпотентные CNAME и проверки учетных данных - DnsProvisioning Обслуживание очередей в стандартном подмножестве KnownAliases и Запись строк в OrgDnsProvisionLog SecurityModelController переносит разрешенные поддомены + псевдонимы[ ] Создание/обновление **************** принимает веб-альяс (useWebAlias + parentAliasType + parentAliasId + webAlias) Полученный FQDN под корневой зоной родителя и запускает резервирование DNS после того, как транзакционная организация создает завершенные - Конечная точка BranchTypeController раскрывает псевдонимы каждой модели и статус поддоменов родитель-орг, чтобы мастер мог войти в пользовательский интерфейс
· kamo-shared-library
Добавить объекты, шифр и псевдоним / DNS log scaffolding
Добавляет креды GoDaddy per-org (зашифрованные AES-GCM), флаг поддоменов и сбор псевдонимов для детей на модели безопасности, предоставление DNS журнал аудита и общий помощник SecretCipher, используемый службой безопасности для кругосветного путешествия Сохраненные API-ключи, не возвращая их в интерфейс.
· kamo-internal
Префикс / суффикс выпадающие, почтовый ящик доменных ворот, явный статус
Префикс имени и суффикс теперь являются выпадающими, населёнными из NamePrefixType / Каталоги NameSuffixType, предоставленные орг-конфигурацией Конечная точка. Отображает аббревиатуру + полное имя на опцию. - "Почтовый ящик организации" теперь отключен, если Домен электронной почты организации соответствует одному из проверенных почтовых ящиков организации домены (из GET/api/email/domains). Четкие сообщения inline объясняет, отключен ли он из-за пропущенной электронной почты, не проверено сконфигурированные домены или несоответствие домена — и имена фактических Настроенные домены, чтобы администратор знал, что использовать. Статус члена команды больше не является по умолчанию для PROSPECT; администраторы должны Выберите состояние жизненного цикла явно или отправьте заблокирован. Резюме Панель показывает «не установлен», пока не будет выбран статус.
· SecurityService
Явный статус команды + префикс имени / каталоги суффиксов
GET **************** теперь возвращает имя ИмяSuffixes, полученное от NamePrefixType и NameSuffixType Добавить член / Добавить член команды формы не должны жестко закодировать их. - POST/create-team-member теперь отклоняет запрос, который опускает Статус участника (400). Предыдущее молчаливое ожидание является ушел — вызывающий должен выбрать состояние жизненного цикла явно так команда Члены никогда не ошибаются по умолчанию.
· kamo-internal
Полная ширина, макет формы Add Member
Переработает форму создания, чтобы использовать всю область контента вместо 1100px-центрированная колонка. - 3-колонный отзывчивый макет: липкая левая секция nav (md+), полная ширина форма (всегда), живая сводная панель справа (xl+). Полевые ряды теперь масштабируются до доступной ширины: секция имен 5 вверх на md +, Контактные + ролевые ряды поднимаются до 4-х в точках останова xl. - Липкая нижняя панель действия охватывает всю ширину с подсказкой статуса и Градиент первичный CTA. - Раздел nav использует scroll-spy для выделения раздела, в котором находится пользователь Поддерживает Click-to-Scroll. - Польский стиль карты - мягкие границы, тонкий подъемник, градиент Иконки заголовка раздела. - Новая сводная карта справа отражает данные формы в прямом эфире (аватар) инициалы, имя, имя пользователя, электронная почта, роль, чип состояния) и показывает Индикатор готов к созданию после прохождения проверки.
· kamo-register
Объединение псевдонима / электронной почты / имени / телефона в один шаг «Мой профиль»
Объедините ранее отдельные «Моя электронная почта и Alias», «Мое имя», и «Номер телефона» переходит в один шаг «Мой профиль» для 13+ регистрантов. с псевдонимом + электронная почта + необходимое юридическое имя и номер телефона (проверяется по SMS при вводе). В настоящее время 13 регистрантов видят Шаг «My User Alias» без электронной почты, юридического имени или телефона. - RegisterFlow: упрощенный список шагов, унифицированная ручкаДалее валидация, Новые рендерные кейсы StepContent. Шаг профиля является внутренним Прокрутить так, чтобы три секции вписывались в видоискатель. - RegisterStatus получает значение «Registered» для завершения менее 13 этапов где нет электронной почты для проверки - они направляются прямо на Страница входа с ?registered=1 вместо страницы проверки электронной почты.
· SecurityService
Сделайте электронную почту + юридическое имя необязательным для регистрации в возрасте до 13 лет
Конечная точка /api/security/register ранее отклоняла любой запрос Отсутствие электронной почты, имени или фамилии. Это сделало путь до 13 (KIDS ONLY orgs, или ALL AGES с суб-13 регистрантом) невозможно — Эти учетные записи на законных основаниях имеют только псевдоним + пароль + начальная фраза. Валидация теперь требует псевдонима + пароля на каждом пути. Электронная почта + имя + фамилия как тройка «все или ничего»: поставка Любой из них требует всех трех. Проверка электронной почты отправить и Поле электронной почты теперь охраняет, было ли письмо на самом деле предоставлено, и статус ответа является «Зарегистрированным» (против существующего) «EMAIL VERIFICATION REQUIRED»), когда нет электронной почты для проверки.
· kamo-shared-library
Добавить **************** для входа как чеки
· kamo-internal
Страница конфигурации пользователя системы + сетевой ENTER AS SYSTEM MEMBER
Добавляет администрирование платформы → Конфигурация, только родитель-орг-владелец страница, которая предоставляет или отзывает разрешение на выдачу себя за платформу Пользователь системы по отделу, должности или отдельному члену команды. Зарегистрировано во всех трех навигационных локациях (настройки списка плиток страницы, НастройкиStatusWindow маршруты + подтемы, и сама страница. Обновления/сеть для использования нового /api/security/enter-в качестве конечной точки существующая кнопка ENTER, поэтому домен назначения получает сеанс построенный из члена целевой организации (исправление ошибки, где источник) В новую сессию просочился членID/orgID организации. Добавить ENTER AS Кнопка SYSTEM MEMBER рядом с Enter, которая отображается только после **************************** Подтверждает, что звонящий имеет право.
· SecurityService
Backfill, enter-as flow, защита от мутаций, конфигурация API
Самоисцеление: SystemUserBackfillService работает на каждом Загрузка SecurityService (с DataLoader) для добавления столбца is system user и таблица доступа system user access, если отсутствует, обеспечивают однотонную систему Запись пользователя существует, и создать Администратора-ролевого участника в каждом Невысокоуровневая организация, к которой она еще не принадлежит. Также бежит в создать организационное время, чтобы новые организации получили членство в Системе Вместо того, чтобы ждать следующего перезапуска. Cross-org enter flow: заменяет старый /api/generate-otk hand-off Утечка сеанса source-org вызывающего абонента в домен назначения /api/security/enter-as. Новая конечная точка создает новый ***, предназначенный для фактический член организации-мишени, поэтому права всегда совпадают Вводимая организация. Добавлено поле SUDO MEMBER ID для сессии JSON что олицетворение Пользователя Системы несет члена оператора-человека для атрибуции аудита. Охрана: SystemUserGuard отказывается от любых мутаций, управляемых API. Запись пользователя или любое его членство (встроенное в MemberController), Разработчик: ******************* Скрывает Пользователь системы от подписчиков GetMembersAndSubscribers, getTeamMembersAndContractors, и получить МемберсБиДепартамент конечные точки, так что арендаторы никогда не видеть его в списках. Поверхность конфигурирования: SystemUserConfigController раскрывает CRUD над грантом таблица только для владельцев верхнего уровня и контроллер SystemUserCapabilityController возвращает булевую страницу /network, чтобы решить, следует ли отображать Введите кнопку SYSTEM MEMBER.
· kamo-shared-library
Добавить флаг пользователя системы + лицо, предоставляющее доступ
Внедряет общеплатформенную модель пользователя системы: флаг User.isSystemUser (уникальный частичный индекс приводит в действие синглтон), плюс таблица SystemUserAccess записывает, какие департаменты высшего уровня, должности или члены команды может выдавать себя за Пользователя Системы для входа в детские организации. Доступные строки являются платформенно-внутренние (не входящие в RoleRightType), поэтому они остаются вне Поверхность прав арендатора.
· kamo-register
Добавить проверку телефона + вопросы безопасности
Введите два новых шага между паролем и восстановлением учетной записи для 13+ регистранты: шаг с номером телефона (необязательно, пропускается, с кодом SMS) проверка) и этап рассмотрения вопросов безопасности (требуется 3 отдельных Вопросы с ответами. Зарегистрированные лица младше 13 лет продолжают пропускать обоих Полагайтесь на их семенную фразу для восстановления. - FormPhoneNumber: idle -> enter-code -> verified state machine, Пошаговый виджет Capcha с отправкой SMS, изменением номера и пропуском путей. - FormSecurityQuestions: 3 выпадения + ответы, уникальность навязана, Каталог взят из новой публичной бэкэнд-конечной точки. - RegisterFlow: новые поля FormData, условные шаги, ручкаNext Проверка, телефон + вопросы безопасности, подключенные к телу подачи. - /api/security proxy теперь пересылает X-Forwarded-Host, чтобы сервер мог Разрешить выбор поставщика SMS.
· SecurityService
Соберите телефон + вопросы безопасности во время регистрации
Переместить телефонный номер и сбор вопросов безопасности в самообслуживание Регистрационный поток (где они изначально предназначались) Требуется страница настроек после регистрации. Новая служба регистрации: генерирует / проверяет 6-значные SMS-коды BulkTextSmsClient, 10-минутный TTL, 5-часовой тарифный лимит на номер. - Служба регистрации теперь принимает запись RegistrationParams с опцией проверенный Телефон и 3-х входной список вопросов безопасности; вопросы безопасности bcrypt-hashed с существующим правилом нормализации ответов. - /api/security/регистрировать ********************** утверждает верифицированный телефон против кода, прежде чем продолжить работу с пользователем. - Новые общедоступные конечные точки POST/register/phone/initiate (Capcha-gated), POST/register/phone/verify и GET ****************
· kamo-shared-library
Добавить RegistrationPhoneCode entity + репозиторий
В новой таблице "registration phone codes" хранятся одноразовые коды проверки SMS выдается во время регистрации самообслуживания, до того, как существует субъект-пользователь. Держите отдельно от кода проверки учетной записи, чтобы избежать переноса NULL userId на этом столе.
· kamo-internal
Добавить члена команды / Add Team Member Pages
- /account: замените одну двусмысленную кнопку на кнопки с вкладками Добавить <Member> на вкладку «Члены», добавить <Team Member> на вкладку «Члены команды». Каждая кнопка маршрутизируется к выделенной странице создания вместо старой сломанной. Взгляд на детали члена. Новые /settings/member/new и /settings/team-member/new страницы Поддерживается общей формой MemberCreateForm с «вариантным» реквизитом. - Форма представляет собой одностраничный, ориентированный на раздел макет (имя, личность, контакт, Org mailbox, team-member-only role/location, review. Live user-lookup on e-mail и имя пользователя предупреждают, когда пользователь уже существует или уже связан в качестве члена этой организации. - Почитает AgeReqType организации: если требование позволяет пользователям младше 13 лет, личные и организационные поля электронной почты скрыты и имя пользователя становится Основной идентификатор. - Факультативный чекбокс «Почтовый ящик организации» создает почтовый ящик через EmailService и присваивает его в качестве основного почтового ящика участника. Закладка профиля /settings/member/[id] теперь включает в себя место работы, команду Статус членства и официальное название работы для записей TeamMember к существующей конечной точке PUT/api/security/members/{id}.
· SecurityService
Добавить участника / Add Team Member
- Новый участникCreateController раскрывает: * GET **************** — возрастной показатель, часовой пояс, отделы, должности *GET **************** — опровержение существования по электронной почте или имени пользователя POST/api/security/members/create — создайте Участника в организации вызывающего абонента * POST **************** — создайте TeamMember отдел / должность / место работы / статус членства / уровень безопасности Повторное использование существующего Пользователя, когда электронная почта или имя пользователя уже совпадают; Создает нового пользователя и отправляет шаблон EMAIL VERIFICATION. Добро пожаловать Шаблон всегда отправляется на создание. Для организаций, чей AgeReqType позволяет пользователям младше 13 лет, сбор электронной почты Пропущенное имя пользователя становится основным идентификатором. - Расширяет GET/members/{id} для возврата местоположения + TeamMembershipStatus + является владельцем организации для членов команды и PUT для сохранения местоположения, TeamMembershipStatus и jobTitleOfficial, когда запись является TeamMember. - Задание по умолчанию + материализация прав, делегированных в MemberService Таким образом, каждый новый член имеет свои фактические права. - Fix EntitlementService: boolean getter был написан getIsOrganization владелец (Ломбок генерирует IsOrganizationOwner для примитивных булевых полей).
· kamo-shared-library
Добавить AgeReqType.allowsUnder13()
Поток Add Member / Add Team для пропуска сбора электронной почты для организаций, возраст которых позволяет пользователям младше 13 лет (ALL AGES), KIDS ONLY, ALL COPPA GRADS.
· kamo-internal
Восстановление членских планов и биллинг вокруг биллинговых групп
- Закладка «Планы и биллинг» теперь правильно выровнена с пульсирующим свечением Иконка StarRate на вкладке. Видно, когда просматриваемый член зарегистрированный пользователь или зарегистрированный пользователь владеет организацией. Разделение контента Четыре подзадачи: подписки, счета-фактуры, платежная информация, группа управления. Выпадающий селектор Billing-group + кнопка значка «Добавить Billing Group» справа от подтаб-бара; выбор группы управляет каждой панелью. - Панель подписки показывает одну карту на активный рынок (FREE DEFAULT) KamoCRM всегда присутствует, с планом изменений / отменой / реактивацией Сетка выдачи лицензий на место. Приоритетная автодеактивация Серверная сторона при сокращении сидений. - Панель платежной информации обертывает элементы полосы через StripeProvider + a Рефакторированная форма PaymentMethodForm, которая присоединяется к биллинговой группе (а не к платежной системе). Старый орг-клиент. - Управлять панелью Группы, редактировать название / выставление счетов контакт / разрешения членов (Лицензиат, менеджер группового плана, canManageSubscription, canManageBilling) Добавляет/убирает членов. Группа по умолчанию читается только - ее список неявный (не все в явной группе) и не титул или Разрешены правки разрешений. - /settings/account?tab=billing удален прямо. Биллинг Менеджер + Планкалькулятор удален. Ссылки везде обновлены до нового участника Plans & Billing Tab. - SettingsStatusWindow + /settings landing nav both pruned (трехсторонний) Синхронизация по правилу nav-sync. BranchSetupManager получил новый раздел «Торговые рынки» Редактор модели безопасности, используя новый SecurityModelMarketController прикреплять/отсоединять рынки СУБКРИПЦИИ с разбивкой по группам Public/Member/ Команды-члены. ********************** Оригинальное название: Per-org Billing Группы + подписки на каждую группу + MRR. /settings/platform/events /settings/platform/plans становятся страницами-заполнителями (их старое содержимое) Они исчезли с чистого листа. Новые прокси-серверы API: /api/security/entitlements **************************** Оригинальное название: Entitlements hook использует SecurityService EntitlementService для отображения функций в Я. Наследие потребительских файлов (StatsManager, FeaturesManager), BranchSetupManager) нести @ts-nocheck до их подписки на основе gating code перерабатывается на UseEntitlements.
· SecurityService
Добавить EntitlementService + SecurityModel торговые рынки
- EntitlementService вычисляет гранты на каждый член путем объединения активных План BillingGroupLicense + KamoCRM Базовый уровень свободного уровня. тайники 15-минутные прогнозы в Redis на MemberId. - EntitlementInvalidationСлушатель подписывается на kamo.entitlements.invalidate Канал Redis (MEMBER:/GROUP:/ORG: полезные нагрузки), так что мутации BillingService Распространение немедленно. - EntitlementController at /api/security/entitlements exposes /me, **************** и кэш-инвалидацию POST. - SecurityModelMarketController на **************** прикрепляет / отсоединяет CommerceMarkets к моделю безопасности ChildOrgSecurity и переворачивает Public / Member / Team-Member scope booleans.
· BillingService
Переписать BillingService вокруг BillingGroups
Удалить уровень организации **************** контроллеры, сервисы и DTO. Представляет: - монтажные группы BillingGroupController, участники, подписки, лицензии, Способы оплаты и счета в /api/billing/groups. - BillingGroupService (lifecycle + Default Group + Free baseline) BillingGroupMemberService (исполнение одной группы на члена), BillingGroupSubscriptionService (Stripe sync with fallback to FREE DEFAULT) Отменить/отменить), **************** BillingGroupInvoiceService, Лицензионное обслуживание (приоритет автоматической деактивации + реактивация с обратным приоритетом). - PlanCatalogService + PlanCatalogConroller по адресу **************** - StripeWebhookService потребляет подписку / счет-фактуру / события платежного метода. - EntitlementInvalidator публикует сигналы о недействительности Redis. PlatformAdminService + PlatformAdminController возвращает рулоны per-org.

Ваша вселенная ждет.
Начните бесплатно через несколько минут. Добавляйте продукты, когда будете готовы — без миграции, без новых логинов.
Бесплатно навсегда — не требуется кредитная карта