diff --git a/ee/packages/ddp-client/src/types/streams.ts b/ee/packages/ddp-client/src/types/streams.ts index 56a93e658931..d3a59a25c288 100644 --- a/ee/packages/ddp-client/src/types/streams.ts +++ b/ee/packages/ddp-client/src/types/streams.ts @@ -23,8 +23,8 @@ import type { ILivechatAgent, IImportProgress, IBanner, + LicenseLimitKind, } from '@rocket.chat/core-typings'; -import type { LicenseLimitKind } from '@rocket.chat/license'; import type * as UiKit from '@rocket.chat/ui-kit'; type ClientAction = 'inserted' | 'updated' | 'removed' | 'changed'; diff --git a/ee/packages/license/src/definition/ILicenseTag.ts b/ee/packages/license/src/definition/ILicenseTag.ts index 2f11fdebd5db..6b55f67f35f7 100644 --- a/ee/packages/license/src/definition/ILicenseTag.ts +++ b/ee/packages/license/src/definition/ILicenseTag.ts @@ -1,4 +1 @@ -export interface ILicenseTag { - name: string; - color: string; -} +export { ILicenseTag } from '@rocket.chat/core-typings'; diff --git a/ee/packages/license/src/definition/ILicenseV2.ts b/ee/packages/license/src/definition/ILicenseV2.ts index 57d921a24907..1efcbc4e42e3 100644 --- a/ee/packages/license/src/definition/ILicenseV2.ts +++ b/ee/packages/license/src/definition/ILicenseV2.ts @@ -1,22 +1 @@ -import type { ILicenseTag } from './ILicenseTag'; - -export interface ILicenseV2 { - url: string; - expiry: string; - maxActiveUsers: number; - modules: string[]; - maxGuestUsers: number; - maxRoomsPerGuest: number; - tag?: ILicenseTag; - meta?: { - trial: boolean; - trialEnd: string; - workspaceId: string; - }; - apps?: { - maxPrivateApps: number; - maxMarketplaceApps: number; - }; -} - -export type LicenseAppSources = 'private' | 'marketplace'; +export { ILicenseV2, LicenseAppSources } from '@rocket.chat/core-typings'; diff --git a/ee/packages/license/src/definition/ILicenseV3.ts b/ee/packages/license/src/definition/ILicenseV3.ts index d99f80c71bfc..f4c43347bb86 100644 --- a/ee/packages/license/src/definition/ILicenseV3.ts +++ b/ee/packages/license/src/definition/ILicenseV3.ts @@ -1,65 +1 @@ -import type { ILicenseTag } from './ILicenseTag'; -import type { LicenseLimit } from './LicenseLimit'; -import type { LicenseModule } from './LicenseModule'; -import type { LicensePeriod, Timestamp } from './LicensePeriod'; - -export interface ILicenseV3 { - version: '3.0'; - information: { - id?: string; - autoRenew: boolean; - visualExpiration?: Timestamp; - notifyAdminsAt?: Timestamp; - notifyUsersAt?: Timestamp; - trial: boolean; - cancellable?: boolean; - offline: boolean; - createdAt: Timestamp; - grantedBy: { - method: 'manual' | 'self-service' | 'sales' | 'support' | 'reseller'; - seller?: string; - }; - grantedTo?: { - name?: string; - company?: string; - email?: string; - }; - legalText?: string; - notes?: string; - tags?: ILicenseTag[]; - }; - validation: { - serverUrls: { - value: string; - type: 'url' | 'regex' | 'hash'; - }[]; - serverVersions?: { - value: string; - }[]; - serverUniqueId?: string; - cloudWorkspaceId?: string; - validPeriods: LicensePeriod[]; - legalTextAgreement?: { - type: 'required' | 'not-required' | 'accepted'; - acceptedVia?: 'cloud'; - }; - statisticsReport: { - required: boolean; - allowedStaleInDays?: number; - }; - }; - grantedModules: { - module: LicenseModule; - }[]; - limits: { - activeUsers?: LicenseLimit[]; - guestUsers?: LicenseLimit[]; - roomsPerGuest?: LicenseLimit<'prevent_action'>[]; - privateApps?: LicenseLimit[]; - marketplaceApps?: LicenseLimit[]; - monthlyActiveContacts?: LicenseLimit[]; - }; - cloudMeta?: Record; -} - -export type LicenseLimitKind = keyof ILicenseV3['limits']; +export { ILicenseV3, LicenseLimitKind } from '@rocket.chat/core-typings'; diff --git a/ee/packages/license/src/definition/LicenseBehavior.ts b/ee/packages/license/src/definition/LicenseBehavior.ts index ac2249233ab5..789ffbeea22b 100644 --- a/ee/packages/license/src/definition/LicenseBehavior.ts +++ b/ee/packages/license/src/definition/LicenseBehavior.ts @@ -1,23 +1 @@ -import type { LicenseLimitKind } from './ILicenseV3'; -import type { LicenseModule } from './LicenseModule'; - -export type LicenseBehavior = - | 'invalidate_license' - | 'start_fair_policy' - | 'prevent_action' - | 'allow_action' - | 'prevent_installation' - | 'disable_modules'; - -export type BehaviorWithContext = - | { - behavior: LicenseBehavior; - modules?: LicenseModule[]; - reason: 'limit'; - limit?: LicenseLimitKind; - } - | { - behavior: LicenseBehavior; - modules?: LicenseModule[]; - reason: 'period' | 'url'; - }; +export { LicenseBehavior, BehaviorWithContext } from '@rocket.chat/core-typings'; diff --git a/ee/packages/license/src/definition/LicenseInfo.ts b/ee/packages/license/src/definition/LicenseInfo.ts index 019d1b9e1ca0..a3565b4671e8 100644 --- a/ee/packages/license/src/definition/LicenseInfo.ts +++ b/ee/packages/license/src/definition/LicenseInfo.ts @@ -1,12 +1 @@ -import type { ILicenseTag } from './ILicenseTag'; -import type { ILicenseV3, LicenseLimitKind } from './ILicenseV3'; -import type { LicenseModule } from './LicenseModule'; - -export type LicenseInfo = { - license?: ILicenseV3; - activeModules: LicenseModule[]; - preventedActions: Record; - limits: Record; - tags: ILicenseTag[]; - trial: boolean; -}; +export { LicenseInfo } from '@rocket.chat/core-typings'; diff --git a/ee/packages/license/src/definition/LicenseLimit.ts b/ee/packages/license/src/definition/LicenseLimit.ts index 40e5a62f597a..7a6872c544d9 100644 --- a/ee/packages/license/src/definition/LicenseLimit.ts +++ b/ee/packages/license/src/definition/LicenseLimit.ts @@ -1,7 +1 @@ -import type { LicenseBehavior } from './LicenseBehavior'; -import type { LicenseModule } from './LicenseModule'; - -export type LicenseLimit = { - max: number; - behavior: T; -} & (T extends 'disable_modules' ? { behavior: T; modules: LicenseModule[] } : { behavior: T }); +export { LicenseLimit } from '@rocket.chat/core-typings'; diff --git a/ee/packages/license/src/definition/LicenseModule.ts b/ee/packages/license/src/definition/LicenseModule.ts index 32c7097b4d2c..c71217c1aa22 100644 --- a/ee/packages/license/src/definition/LicenseModule.ts +++ b/ee/packages/license/src/definition/LicenseModule.ts @@ -1,21 +1 @@ -export type LicenseModule = - | 'auditing' - | 'canned-responses' - | 'ldap-enterprise' - | 'livechat-enterprise' - | 'voip-enterprise' - | 'omnichannel-mobile-enterprise' - | 'engagement-dashboard' - | 'push-privacy' - | 'scalability' - | 'teams-mention' - | 'saml-enterprise' - | 'oauth-enterprise' - | 'device-management' - | 'federation' - | 'videoconference-enterprise' - | 'message-read-receipt' - | 'outlook-calendar' - | 'hide-watermark' - | 'custom-roles' - | 'accessibility-certification'; +export { LicenseModule } from '@rocket.chat/core-typings'; diff --git a/ee/packages/license/src/definition/LicensePeriod.ts b/ee/packages/license/src/definition/LicensePeriod.ts index d9bae6198fde..db04940eddbf 100644 --- a/ee/packages/license/src/definition/LicensePeriod.ts +++ b/ee/packages/license/src/definition/LicensePeriod.ts @@ -1,13 +1 @@ -import type { LicenseBehavior } from './LicenseBehavior'; -import type { LicenseModule } from './LicenseModule'; - -export type Timestamp = string; - -export type LicensePeriod = { - validFrom?: Timestamp; - validUntil?: Timestamp; - invalidBehavior: LicenseBehavior; -} & ({ validFrom: Timestamp } | { validUntil: Timestamp }) & - ({ invalidBehavior: 'disable_modules'; modules: LicenseModule[] } | { invalidBehavior: Exclude }); - -export type LicensePeriodBehavior = Exclude; +export { LicensePeriod, LicensePeriodBehavior, Timestamp } from '@rocket.chat/core-typings'; diff --git a/ee/packages/license/src/definition/LicenseValidationOptions.ts b/ee/packages/license/src/definition/LicenseValidationOptions.ts index 9357b021878b..a8c1d7dc167c 100644 --- a/ee/packages/license/src/definition/LicenseValidationOptions.ts +++ b/ee/packages/license/src/definition/LicenseValidationOptions.ts @@ -1,12 +1 @@ -import type { LicenseLimitKind } from './ILicenseV3'; -import type { LicenseBehavior } from './LicenseBehavior'; -import type { LimitContext } from './LimitContext'; - -export type LicenseValidationOptions = { - behaviors?: LicenseBehavior[]; - limits?: LicenseLimitKind[]; - suppressLog?: boolean; - isNewLicense?: boolean; - context?: Partial<{ [K in LicenseLimitKind]: Partial> }>; - triggerSync?: boolean; -}; +export { LicenseValidationOptions } from '@rocket.chat/core-typings'; diff --git a/ee/packages/license/src/definition/LimitContext.ts b/ee/packages/license/src/definition/LimitContext.ts index 9dfc6d36be7f..19642546b871 100644 --- a/ee/packages/license/src/definition/LimitContext.ts +++ b/ee/packages/license/src/definition/LimitContext.ts @@ -1,7 +1 @@ -import type { IUser } from '@rocket.chat/core-typings'; - -import type { LicenseLimitKind } from './ILicenseV3'; - -export type LimitContext = { extraCount?: number } & (T extends 'roomsPerGuest' - ? { userId: IUser['_id'] } - : Record); +export { LimitContext } from '@rocket.chat/core-typings'; diff --git a/ee/packages/license/src/definition/events.ts b/ee/packages/license/src/definition/events.ts index 2156c298849c..36e9e28e1673 100644 --- a/ee/packages/license/src/definition/events.ts +++ b/ee/packages/license/src/definition/events.ts @@ -1,24 +1 @@ -import type { LicenseLimitKind } from './ILicenseV3'; -import type { BehaviorWithContext, LicenseBehavior } from './LicenseBehavior'; -import type { LicenseModule } from './LicenseModule'; - -type ModuleValidation = Record<`${'invalid' | 'valid'}:${LicenseModule}`, undefined>; -type BehaviorTriggered = Record<`behavior:${LicenseBehavior}`, { reason: BehaviorWithContext['reason']; limit?: LicenseLimitKind }>; -type BehaviorTriggeredToggled = Record< - `behaviorToggled:${LicenseBehavior}`, - { reason: BehaviorWithContext['reason']; limit?: LicenseLimitKind } ->; - -type LimitReached = Record<`limitReached:${LicenseLimitKind}`, undefined>; - -export type LicenseEvents = ModuleValidation & - BehaviorTriggeredToggled & - BehaviorTriggered & - LimitReached & { - installed: undefined; - removed: undefined; - validate: undefined; - invalidate: undefined; - module: { module: LicenseModule; valid: boolean }; - sync: undefined; - }; +export { LicenseEvents } from '@rocket.chat/core-typings'; diff --git a/packages/core-services/src/events/Events.ts b/packages/core-services/src/events/Events.ts index 3a3f1b9c3b89..5b27b421ba27 100644 --- a/packages/core-services/src/events/Events.ts +++ b/packages/core-services/src/events/Events.ts @@ -32,8 +32,8 @@ import type { ILivechatAgent, IBanner, ILivechatVisitor, + LicenseLimitKind, } from '@rocket.chat/core-typings'; -import type { LicenseLimitKind } from '@rocket.chat/license'; import type * as UiKit from '@rocket.chat/ui-kit'; import type { AutoUpdateRecord } from '../types/IMeteor'; diff --git a/packages/core-typings/src/index.ts b/packages/core-typings/src/index.ts index ee5ac21c49ec..5a7db5d952aa 100644 --- a/packages/core-typings/src/index.ts +++ b/packages/core-typings/src/index.ts @@ -33,6 +33,7 @@ export * from './IRocketChatAssets'; export * from './IPushToken'; export * from './IPushNotificationConfig'; export * from './SlashCommands'; +export * from './license'; export * from './IUserDataFile'; export * from './IUserSession'; diff --git a/packages/core-typings/src/license/ILicenseTag.ts b/packages/core-typings/src/license/ILicenseTag.ts new file mode 100644 index 000000000000..2f11fdebd5db --- /dev/null +++ b/packages/core-typings/src/license/ILicenseTag.ts @@ -0,0 +1,4 @@ +export interface ILicenseTag { + name: string; + color: string; +} diff --git a/packages/core-typings/src/license/ILicenseV2.ts b/packages/core-typings/src/license/ILicenseV2.ts new file mode 100644 index 000000000000..57d921a24907 --- /dev/null +++ b/packages/core-typings/src/license/ILicenseV2.ts @@ -0,0 +1,22 @@ +import type { ILicenseTag } from './ILicenseTag'; + +export interface ILicenseV2 { + url: string; + expiry: string; + maxActiveUsers: number; + modules: string[]; + maxGuestUsers: number; + maxRoomsPerGuest: number; + tag?: ILicenseTag; + meta?: { + trial: boolean; + trialEnd: string; + workspaceId: string; + }; + apps?: { + maxPrivateApps: number; + maxMarketplaceApps: number; + }; +} + +export type LicenseAppSources = 'private' | 'marketplace'; diff --git a/packages/core-typings/src/license/ILicenseV3.ts b/packages/core-typings/src/license/ILicenseV3.ts new file mode 100644 index 000000000000..d99f80c71bfc --- /dev/null +++ b/packages/core-typings/src/license/ILicenseV3.ts @@ -0,0 +1,65 @@ +import type { ILicenseTag } from './ILicenseTag'; +import type { LicenseLimit } from './LicenseLimit'; +import type { LicenseModule } from './LicenseModule'; +import type { LicensePeriod, Timestamp } from './LicensePeriod'; + +export interface ILicenseV3 { + version: '3.0'; + information: { + id?: string; + autoRenew: boolean; + visualExpiration?: Timestamp; + notifyAdminsAt?: Timestamp; + notifyUsersAt?: Timestamp; + trial: boolean; + cancellable?: boolean; + offline: boolean; + createdAt: Timestamp; + grantedBy: { + method: 'manual' | 'self-service' | 'sales' | 'support' | 'reseller'; + seller?: string; + }; + grantedTo?: { + name?: string; + company?: string; + email?: string; + }; + legalText?: string; + notes?: string; + tags?: ILicenseTag[]; + }; + validation: { + serverUrls: { + value: string; + type: 'url' | 'regex' | 'hash'; + }[]; + serverVersions?: { + value: string; + }[]; + serverUniqueId?: string; + cloudWorkspaceId?: string; + validPeriods: LicensePeriod[]; + legalTextAgreement?: { + type: 'required' | 'not-required' | 'accepted'; + acceptedVia?: 'cloud'; + }; + statisticsReport: { + required: boolean; + allowedStaleInDays?: number; + }; + }; + grantedModules: { + module: LicenseModule; + }[]; + limits: { + activeUsers?: LicenseLimit[]; + guestUsers?: LicenseLimit[]; + roomsPerGuest?: LicenseLimit<'prevent_action'>[]; + privateApps?: LicenseLimit[]; + marketplaceApps?: LicenseLimit[]; + monthlyActiveContacts?: LicenseLimit[]; + }; + cloudMeta?: Record; +} + +export type LicenseLimitKind = keyof ILicenseV3['limits']; diff --git a/packages/core-typings/src/license/LicenseBehavior.ts b/packages/core-typings/src/license/LicenseBehavior.ts new file mode 100644 index 000000000000..ac2249233ab5 --- /dev/null +++ b/packages/core-typings/src/license/LicenseBehavior.ts @@ -0,0 +1,23 @@ +import type { LicenseLimitKind } from './ILicenseV3'; +import type { LicenseModule } from './LicenseModule'; + +export type LicenseBehavior = + | 'invalidate_license' + | 'start_fair_policy' + | 'prevent_action' + | 'allow_action' + | 'prevent_installation' + | 'disable_modules'; + +export type BehaviorWithContext = + | { + behavior: LicenseBehavior; + modules?: LicenseModule[]; + reason: 'limit'; + limit?: LicenseLimitKind; + } + | { + behavior: LicenseBehavior; + modules?: LicenseModule[]; + reason: 'period' | 'url'; + }; diff --git a/packages/core-typings/src/license/LicenseInfo.ts b/packages/core-typings/src/license/LicenseInfo.ts new file mode 100644 index 000000000000..019d1b9e1ca0 --- /dev/null +++ b/packages/core-typings/src/license/LicenseInfo.ts @@ -0,0 +1,12 @@ +import type { ILicenseTag } from './ILicenseTag'; +import type { ILicenseV3, LicenseLimitKind } from './ILicenseV3'; +import type { LicenseModule } from './LicenseModule'; + +export type LicenseInfo = { + license?: ILicenseV3; + activeModules: LicenseModule[]; + preventedActions: Record; + limits: Record; + tags: ILicenseTag[]; + trial: boolean; +}; diff --git a/packages/core-typings/src/license/LicenseLimit.ts b/packages/core-typings/src/license/LicenseLimit.ts new file mode 100644 index 000000000000..40e5a62f597a --- /dev/null +++ b/packages/core-typings/src/license/LicenseLimit.ts @@ -0,0 +1,7 @@ +import type { LicenseBehavior } from './LicenseBehavior'; +import type { LicenseModule } from './LicenseModule'; + +export type LicenseLimit = { + max: number; + behavior: T; +} & (T extends 'disable_modules' ? { behavior: T; modules: LicenseModule[] } : { behavior: T }); diff --git a/packages/core-typings/src/license/LicenseModule.ts b/packages/core-typings/src/license/LicenseModule.ts new file mode 100644 index 000000000000..32c7097b4d2c --- /dev/null +++ b/packages/core-typings/src/license/LicenseModule.ts @@ -0,0 +1,21 @@ +export type LicenseModule = + | 'auditing' + | 'canned-responses' + | 'ldap-enterprise' + | 'livechat-enterprise' + | 'voip-enterprise' + | 'omnichannel-mobile-enterprise' + | 'engagement-dashboard' + | 'push-privacy' + | 'scalability' + | 'teams-mention' + | 'saml-enterprise' + | 'oauth-enterprise' + | 'device-management' + | 'federation' + | 'videoconference-enterprise' + | 'message-read-receipt' + | 'outlook-calendar' + | 'hide-watermark' + | 'custom-roles' + | 'accessibility-certification'; diff --git a/packages/core-typings/src/license/LicensePeriod.ts b/packages/core-typings/src/license/LicensePeriod.ts new file mode 100644 index 000000000000..d9bae6198fde --- /dev/null +++ b/packages/core-typings/src/license/LicensePeriod.ts @@ -0,0 +1,13 @@ +import type { LicenseBehavior } from './LicenseBehavior'; +import type { LicenseModule } from './LicenseModule'; + +export type Timestamp = string; + +export type LicensePeriod = { + validFrom?: Timestamp; + validUntil?: Timestamp; + invalidBehavior: LicenseBehavior; +} & ({ validFrom: Timestamp } | { validUntil: Timestamp }) & + ({ invalidBehavior: 'disable_modules'; modules: LicenseModule[] } | { invalidBehavior: Exclude }); + +export type LicensePeriodBehavior = Exclude; diff --git a/packages/core-typings/src/license/LicenseValidationOptions.ts b/packages/core-typings/src/license/LicenseValidationOptions.ts new file mode 100644 index 000000000000..9357b021878b --- /dev/null +++ b/packages/core-typings/src/license/LicenseValidationOptions.ts @@ -0,0 +1,12 @@ +import type { LicenseLimitKind } from './ILicenseV3'; +import type { LicenseBehavior } from './LicenseBehavior'; +import type { LimitContext } from './LimitContext'; + +export type LicenseValidationOptions = { + behaviors?: LicenseBehavior[]; + limits?: LicenseLimitKind[]; + suppressLog?: boolean; + isNewLicense?: boolean; + context?: Partial<{ [K in LicenseLimitKind]: Partial> }>; + triggerSync?: boolean; +}; diff --git a/packages/core-typings/src/license/LimitContext.ts b/packages/core-typings/src/license/LimitContext.ts new file mode 100644 index 000000000000..65be71d3cf22 --- /dev/null +++ b/packages/core-typings/src/license/LimitContext.ts @@ -0,0 +1,6 @@ +import type { IUser } from '../IUser'; +import type { LicenseLimitKind } from './ILicenseV3'; + +export type LimitContext = { extraCount?: number } & (T extends 'roomsPerGuest' + ? { userId: IUser['_id'] } + : Record); diff --git a/packages/core-typings/src/license/events.ts b/packages/core-typings/src/license/events.ts new file mode 100644 index 000000000000..2156c298849c --- /dev/null +++ b/packages/core-typings/src/license/events.ts @@ -0,0 +1,24 @@ +import type { LicenseLimitKind } from './ILicenseV3'; +import type { BehaviorWithContext, LicenseBehavior } from './LicenseBehavior'; +import type { LicenseModule } from './LicenseModule'; + +type ModuleValidation = Record<`${'invalid' | 'valid'}:${LicenseModule}`, undefined>; +type BehaviorTriggered = Record<`behavior:${LicenseBehavior}`, { reason: BehaviorWithContext['reason']; limit?: LicenseLimitKind }>; +type BehaviorTriggeredToggled = Record< + `behaviorToggled:${LicenseBehavior}`, + { reason: BehaviorWithContext['reason']; limit?: LicenseLimitKind } +>; + +type LimitReached = Record<`limitReached:${LicenseLimitKind}`, undefined>; + +export type LicenseEvents = ModuleValidation & + BehaviorTriggeredToggled & + BehaviorTriggered & + LimitReached & { + installed: undefined; + removed: undefined; + validate: undefined; + invalidate: undefined; + module: { module: LicenseModule; valid: boolean }; + sync: undefined; + }; diff --git a/packages/core-typings/src/license/index.ts b/packages/core-typings/src/license/index.ts new file mode 100644 index 000000000000..55c252c1fb96 --- /dev/null +++ b/packages/core-typings/src/license/index.ts @@ -0,0 +1,11 @@ +export * from './events'; +export * from './ILicenseTag'; +export * from './ILicenseV2'; +export * from './ILicenseV3'; +export * from './LicenseBehavior'; +export * from './LicenseInfo'; +export * from './LicenseLimit'; +export * from './LicenseModule'; +export * from './LicensePeriod'; +export * from './LicenseValidationOptions'; +export * from './LimitContext'; diff --git a/packages/rest-typings/package.json b/packages/rest-typings/package.json index 7cdffb11d324..5e3708da8d75 100644 --- a/packages/rest-typings/package.json +++ b/packages/rest-typings/package.json @@ -26,7 +26,6 @@ "dependencies": { "@rocket.chat/apps-engine": "1.41.0", "@rocket.chat/core-typings": "workspace:^", - "@rocket.chat/license": "workspace:^", "@rocket.chat/message-parser": "~0.31.27", "@rocket.chat/ui-kit": "workspace:~", "ajv": "^8.11.0", diff --git a/packages/rest-typings/src/v1/licenses.ts b/packages/rest-typings/src/v1/licenses.ts index 4eb1ac196840..4a18bc113a6c 100644 --- a/packages/rest-typings/src/v1/licenses.ts +++ b/packages/rest-typings/src/v1/licenses.ts @@ -1,4 +1,4 @@ -import type { ILicenseV2, ILicenseV3, LicenseInfo } from '@rocket.chat/license'; +import type { ILicenseV2, ILicenseV3, LicenseInfo } from '@rocket.chat/core-typings'; import Ajv from 'ajv'; const ajv = new Ajv({ diff --git a/yarn.lock b/yarn.lock index f7d56bd49837..82b641ce0ae6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10135,7 +10135,6 @@ __metadata: "@rocket.chat/apps-engine": 1.41.0 "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/eslint-config": "workspace:^" - "@rocket.chat/license": "workspace:^" "@rocket.chat/message-parser": ~0.31.27 "@rocket.chat/ui-kit": "workspace:~" "@types/jest": ~29.5.7