diff --git a/apps/meteor/app/apps/server/bridges/activation.ts b/apps/meteor/app/apps/server/bridges/activation.ts index 399dfd285e65e..e33626ea967ce 100644 --- a/apps/meteor/app/apps/server/bridges/activation.ts +++ b/apps/meteor/app/apps/server/bridges/activation.ts @@ -1,6 +1,6 @@ import type { IAppServerOrchestrator, AppStatus } from '@rocket.chat/apps'; -import type { ProxiedApp } from '@rocket.chat/apps-engine/server/ProxiedApp'; -import { AppActivationBridge as ActivationBridge } from '@rocket.chat/apps-engine/server/bridges/AppActivationBridge'; +import type { ProxiedApp } from '@rocket.chat/apps/server/ProxiedApp'; +import { AppActivationBridge as ActivationBridge } from '@rocket.chat/apps/server/bridges/AppActivationBridge'; import { UserStatus } from '@rocket.chat/core-typings'; import { Users } from '@rocket.chat/models'; diff --git a/apps/meteor/app/apps/server/bridges/api.ts b/apps/meteor/app/apps/server/bridges/api.ts index f115897c82d82..c4cfc481e0795 100644 --- a/apps/meteor/app/apps/server/bridges/api.ts +++ b/apps/meteor/app/apps/server/bridges/api.ts @@ -1,8 +1,8 @@ import type { IAppServerOrchestrator } from '@rocket.chat/apps'; import type { RequestMethod } from '@rocket.chat/apps-engine/definition/accessors'; import type { IApiRequest, IApiEndpoint, IApi } from '@rocket.chat/apps-engine/definition/api'; -import { ApiBridge } from '@rocket.chat/apps-engine/server/bridges/ApiBridge'; -import type { AppApi } from '@rocket.chat/apps-engine/server/managers/AppApi'; +import { ApiBridge } from '@rocket.chat/apps/server/bridges/ApiBridge'; +import type { AppApi } from '@rocket.chat/apps/server/managers/AppApi'; import type { Response, Request, IRouter, RequestHandler } from 'express'; import express from 'express'; import { Meteor } from 'meteor/meteor'; diff --git a/apps/meteor/app/apps/server/bridges/bridges.js b/apps/meteor/app/apps/server/bridges/bridges.js index 3b49cd91394e9..a62aae2436595 100644 --- a/apps/meteor/app/apps/server/bridges/bridges.js +++ b/apps/meteor/app/apps/server/bridges/bridges.js @@ -1,4 +1,4 @@ -import { AppBridges } from '@rocket.chat/apps-engine/server/bridges'; +import { AppBridges } from '@rocket.chat/apps/server/bridges'; import { AppActivationBridge } from './activation'; import { AppApisBridge } from './api'; diff --git a/apps/meteor/app/apps/server/bridges/cloud.ts b/apps/meteor/app/apps/server/bridges/cloud.ts index 0f908ccfe0a39..f762ee7b44fa6 100644 --- a/apps/meteor/app/apps/server/bridges/cloud.ts +++ b/apps/meteor/app/apps/server/bridges/cloud.ts @@ -1,6 +1,6 @@ import type { IAppServerOrchestrator } from '@rocket.chat/apps'; import type { IWorkspaceToken } from '@rocket.chat/apps-engine/definition/cloud/IWorkspaceToken'; -import { CloudWorkspaceBridge } from '@rocket.chat/apps-engine/server/bridges/CloudWorkspaceBridge'; +import { CloudWorkspaceBridge } from '@rocket.chat/apps/server/bridges/CloudWorkspaceBridge'; import { getWorkspaceAccessTokenWithScope } from '../../../cloud/server'; diff --git a/apps/meteor/app/apps/server/bridges/commands.ts b/apps/meteor/app/apps/server/bridges/commands.ts index 0f378a4a7abc4..7a1b522286ff3 100644 --- a/apps/meteor/app/apps/server/bridges/commands.ts +++ b/apps/meteor/app/apps/server/bridges/commands.ts @@ -1,7 +1,7 @@ import type { IAppServerOrchestrator, IAppsRoom, IAppsUser } from '@rocket.chat/apps'; import type { ISlashCommand, ISlashCommandPreview, ISlashCommandPreviewItem } from '@rocket.chat/apps-engine/definition/slashcommands'; import { SlashCommandContext } from '@rocket.chat/apps-engine/definition/slashcommands'; -import { CommandBridge } from '@rocket.chat/apps-engine/server/bridges/CommandBridge'; +import { CommandBridge } from '@rocket.chat/apps/server/bridges/CommandBridge'; import type { IMessage, RequiredField, SlashCommand, SlashCommandCallbackParams } from '@rocket.chat/core-typings'; import { Utilities } from '../../../../ee/lib/misc/Utilities'; diff --git a/apps/meteor/app/apps/server/bridges/contact.ts b/apps/meteor/app/apps/server/bridges/contact.ts index 802b0bb3ec16b..fab0976b716dd 100644 --- a/apps/meteor/app/apps/server/bridges/contact.ts +++ b/apps/meteor/app/apps/server/bridges/contact.ts @@ -1,6 +1,6 @@ import type { IAppServerOrchestrator } from '@rocket.chat/apps'; import type { ILivechatContact } from '@rocket.chat/apps-engine/definition/livechat'; -import { ContactBridge } from '@rocket.chat/apps-engine/server/bridges'; +import { ContactBridge } from '@rocket.chat/apps/server/bridges'; import { addContactEmail } from '../../../livechat/server/lib/contacts/addContactEmail'; import { verifyContactChannel } from '../../../livechat/server/lib/contacts/verifyContactChannel'; diff --git a/apps/meteor/app/apps/server/bridges/details.ts b/apps/meteor/app/apps/server/bridges/details.ts index 3930cdd451cc7..6da3433f58702 100644 --- a/apps/meteor/app/apps/server/bridges/details.ts +++ b/apps/meteor/app/apps/server/bridges/details.ts @@ -1,6 +1,6 @@ import type { IAppServerOrchestrator } from '@rocket.chat/apps'; import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; -import { AppDetailChangesBridge as DetailChangesBridge } from '@rocket.chat/apps-engine/server/bridges/AppDetailChangesBridge'; +import { AppDetailChangesBridge as DetailChangesBridge } from '@rocket.chat/apps/server/bridges/AppDetailChangesBridge'; export class AppDetailChangesBridge extends DetailChangesBridge { constructor(private readonly orch: IAppServerOrchestrator) { diff --git a/apps/meteor/app/apps/server/bridges/email.ts b/apps/meteor/app/apps/server/bridges/email.ts index 6d75a45044832..53d1db8f1a47c 100644 --- a/apps/meteor/app/apps/server/bridges/email.ts +++ b/apps/meteor/app/apps/server/bridges/email.ts @@ -1,6 +1,6 @@ import type { IAppServerOrchestrator } from '@rocket.chat/apps'; import type { IEmail } from '@rocket.chat/apps-engine/definition/email'; -import { EmailBridge } from '@rocket.chat/apps-engine/server/bridges'; +import { EmailBridge } from '@rocket.chat/apps/server/bridges'; import * as Mailer from '../../../mailer/server/api'; import { settings } from '../../../settings/server'; diff --git a/apps/meteor/app/apps/server/bridges/environmental.ts b/apps/meteor/app/apps/server/bridges/environmental.ts index 705a27186dee7..2b980948fbccb 100644 --- a/apps/meteor/app/apps/server/bridges/environmental.ts +++ b/apps/meteor/app/apps/server/bridges/environmental.ts @@ -1,5 +1,5 @@ import type { IAppServerOrchestrator } from '@rocket.chat/apps'; -import { EnvironmentalVariableBridge } from '@rocket.chat/apps-engine/server/bridges/EnvironmentalVariableBridge'; +import { EnvironmentalVariableBridge } from '@rocket.chat/apps/server/bridges/EnvironmentalVariableBridge'; export class AppEnvironmentalVariableBridge extends EnvironmentalVariableBridge { allowed: Array; diff --git a/apps/meteor/app/apps/server/bridges/experimental.ts b/apps/meteor/app/apps/server/bridges/experimental.ts index d505a54d5665d..05ccccdca5a03 100644 --- a/apps/meteor/app/apps/server/bridges/experimental.ts +++ b/apps/meteor/app/apps/server/bridges/experimental.ts @@ -1,5 +1,5 @@ import type { IAppServerOrchestrator } from '@rocket.chat/apps'; -import { ExperimentalBridge } from '@rocket.chat/apps-engine/server/bridges'; +import { ExperimentalBridge } from '@rocket.chat/apps/server/bridges'; export class AppExperimentalBridge extends ExperimentalBridge { constructor(protected readonly orch: IAppServerOrchestrator) { diff --git a/apps/meteor/app/apps/server/bridges/http.ts b/apps/meteor/app/apps/server/bridges/http.ts index aab0d56d301f0..5eed6e0b7367f 100644 --- a/apps/meteor/app/apps/server/bridges/http.ts +++ b/apps/meteor/app/apps/server/bridges/http.ts @@ -1,7 +1,7 @@ import type { IAppServerOrchestrator } from '@rocket.chat/apps'; import type { IHttpResponse } from '@rocket.chat/apps-engine/definition/accessors'; -import type { IHttpBridgeRequestInfo } from '@rocket.chat/apps-engine/server/bridges'; -import { HttpBridge } from '@rocket.chat/apps-engine/server/bridges/HttpBridge'; +import type { IHttpBridgeRequestInfo } from '@rocket.chat/apps/server/bridges'; +import { HttpBridge } from '@rocket.chat/apps/server/bridges/HttpBridge'; import { serverFetch as fetch, type ExtendedFetchOptions } from '@rocket.chat/server-fetch'; import { settings } from '../../../settings/server'; diff --git a/apps/meteor/app/apps/server/bridges/internal.ts b/apps/meteor/app/apps/server/bridges/internal.ts index 22e44a2bb2d0b..223f5af55ab8f 100644 --- a/apps/meteor/app/apps/server/bridges/internal.ts +++ b/apps/meteor/app/apps/server/bridges/internal.ts @@ -1,5 +1,5 @@ import type { IAppServerOrchestrator, IAppsSetting } from '@rocket.chat/apps'; -import { InternalBridge } from '@rocket.chat/apps-engine/server/bridges/InternalBridge'; +import { InternalBridge } from '@rocket.chat/apps/server/bridges/InternalBridge'; import type { ISetting, ISubscription } from '@rocket.chat/core-typings'; import { Settings, Subscriptions } from '@rocket.chat/models'; import { isTruthy } from '@rocket.chat/tools'; diff --git a/apps/meteor/app/apps/server/bridges/internalFederation.ts b/apps/meteor/app/apps/server/bridges/internalFederation.ts index 9bf3b34439ce5..008e55cd672f0 100644 --- a/apps/meteor/app/apps/server/bridges/internalFederation.ts +++ b/apps/meteor/app/apps/server/bridges/internalFederation.ts @@ -1,4 +1,4 @@ -import type { IInternalFederationBridge } from '@rocket.chat/apps-engine/server/bridges/IInternalFederationBridge'; +import type { IInternalFederationBridge } from '@rocket.chat/apps/server/bridges/IInternalFederationBridge'; import { FederationKeys } from '@rocket.chat/models'; export class AppInternalFederationBridge implements IInternalFederationBridge { diff --git a/apps/meteor/app/apps/server/bridges/livechat.ts b/apps/meteor/app/apps/server/bridges/livechat.ts index ab0faf0b2c3b4..927e74d7e7d3e 100644 --- a/apps/meteor/app/apps/server/bridges/livechat.ts +++ b/apps/meteor/app/apps/server/bridges/livechat.ts @@ -10,7 +10,7 @@ import type { } from '@rocket.chat/apps-engine/definition/livechat'; import type { IMessage as IAppsEngineMessage } from '@rocket.chat/apps-engine/definition/messages'; import type { IUser } from '@rocket.chat/apps-engine/definition/users'; -import { LivechatBridge } from '@rocket.chat/apps-engine/server/bridges/LivechatBridge'; +import { LivechatBridge } from '@rocket.chat/apps/server/bridges/LivechatBridge'; import type { ILivechatDepartment, IOmnichannelRoom, SelectedAgent, IMessage, ILivechatVisitor } from '@rocket.chat/core-typings'; import { OmnichannelSourceType } from '@rocket.chat/core-typings'; import { LivechatVisitors, LivechatRooms, LivechatDepartment, Users } from '@rocket.chat/models'; diff --git a/apps/meteor/app/apps/server/bridges/messages.ts b/apps/meteor/app/apps/server/bridges/messages.ts index 16366626c07c8..40b9526b401ac 100644 --- a/apps/meteor/app/apps/server/bridges/messages.ts +++ b/apps/meteor/app/apps/server/bridges/messages.ts @@ -1,8 +1,8 @@ import type { IAppServerOrchestrator, IAppsMessage, IAppsUser } from '@rocket.chat/apps'; import type { Reaction } from '@rocket.chat/apps-engine/definition/messages'; import type { IRoom } from '@rocket.chat/apps-engine/definition/rooms'; -import type { ITypingDescriptor } from '@rocket.chat/apps-engine/server/bridges/MessageBridge'; -import { MessageBridge } from '@rocket.chat/apps-engine/server/bridges/MessageBridge'; +import type { ITypingDescriptor } from '@rocket.chat/apps/server/bridges/MessageBridge'; +import { MessageBridge } from '@rocket.chat/apps/server/bridges/MessageBridge'; import { api } from '@rocket.chat/core-services'; import type { IMessage } from '@rocket.chat/core-typings'; import { Users, Subscriptions } from '@rocket.chat/models'; diff --git a/apps/meteor/app/apps/server/bridges/moderation.ts b/apps/meteor/app/apps/server/bridges/moderation.ts index 0f1e56bbdec35..c8158d322ccfc 100644 --- a/apps/meteor/app/apps/server/bridges/moderation.ts +++ b/apps/meteor/app/apps/server/bridges/moderation.ts @@ -1,7 +1,7 @@ import type { IAppServerOrchestrator } from '@rocket.chat/apps'; import type { IMessage } from '@rocket.chat/apps-engine/definition/messages'; import type { IUser } from '@rocket.chat/apps-engine/definition/users'; -import { ModerationBridge } from '@rocket.chat/apps-engine/server/bridges/ModerationBridge'; +import { ModerationBridge } from '@rocket.chat/apps/server/bridges/ModerationBridge'; import { ModerationReports } from '@rocket.chat/models'; import { reportMessage } from '../../../../server/lib/moderation/reportMessage'; diff --git a/apps/meteor/app/apps/server/bridges/oauthApps.ts b/apps/meteor/app/apps/server/bridges/oauthApps.ts index bfd72917a367c..9461d8acb1510 100644 --- a/apps/meteor/app/apps/server/bridges/oauthApps.ts +++ b/apps/meteor/app/apps/server/bridges/oauthApps.ts @@ -2,7 +2,7 @@ import { randomUUID } from 'crypto'; import type { IAppServerOrchestrator } from '@rocket.chat/apps'; import type { IOAuthApp, IOAuthAppParams } from '@rocket.chat/apps-engine/definition/accessors/IOAuthApp'; -import { OAuthAppsBridge } from '@rocket.chat/apps-engine/server/bridges/OAuthAppsBridge'; +import { OAuthAppsBridge } from '@rocket.chat/apps/server/bridges/OAuthAppsBridge'; import type { IOAuthApps } from '@rocket.chat/core-typings'; import { OAuthApps, Users } from '@rocket.chat/models'; import { Random } from '@rocket.chat/random'; diff --git a/apps/meteor/app/apps/server/bridges/outboundCommunication.ts b/apps/meteor/app/apps/server/bridges/outboundCommunication.ts index 146ae18b38ead..7d973e1b53cd9 100644 --- a/apps/meteor/app/apps/server/bridges/outboundCommunication.ts +++ b/apps/meteor/app/apps/server/bridges/outboundCommunication.ts @@ -4,7 +4,7 @@ import type { IOutboundMessageProviders, IOutboundPhoneMessageProvider, } from '@rocket.chat/apps-engine/definition/outboundCommunication'; -import { OutboundMessageBridge } from '@rocket.chat/apps-engine/server/bridges'; +import { OutboundMessageBridge } from '@rocket.chat/apps/server/bridges'; import { getOutboundService } from '../../../livechat/server/lib/outboundcommunication'; diff --git a/apps/meteor/app/apps/server/bridges/persistence.ts b/apps/meteor/app/apps/server/bridges/persistence.ts index 857f6a561ed6f..4dd1b5dd7cbf6 100644 --- a/apps/meteor/app/apps/server/bridges/persistence.ts +++ b/apps/meteor/app/apps/server/bridges/persistence.ts @@ -1,6 +1,6 @@ import type { IAppServerOrchestrator } from '@rocket.chat/apps'; import type { RocketChatAssociationRecord } from '@rocket.chat/apps-engine/definition/metadata'; -import { PersistenceBridge } from '@rocket.chat/apps-engine/server/bridges/PersistenceBridge'; +import { PersistenceBridge } from '@rocket.chat/apps/server/bridges/PersistenceBridge'; import type { InsertOneResult } from 'mongodb'; export class AppPersistenceBridge extends PersistenceBridge { diff --git a/apps/meteor/app/apps/server/bridges/roles.ts b/apps/meteor/app/apps/server/bridges/roles.ts index aa0fcdc7b80b7..f0d5b5381c09e 100644 --- a/apps/meteor/app/apps/server/bridges/roles.ts +++ b/apps/meteor/app/apps/server/bridges/roles.ts @@ -1,5 +1,5 @@ import type { IAppServerOrchestrator, IAppsRole } from '@rocket.chat/apps'; -import { RoleBridge } from '@rocket.chat/apps-engine/server/bridges'; +import { RoleBridge } from '@rocket.chat/apps/server/bridges'; import type { IRole } from '@rocket.chat/core-typings'; import { Roles } from '@rocket.chat/models'; diff --git a/apps/meteor/app/apps/server/bridges/rooms.ts b/apps/meteor/app/apps/server/bridges/rooms.ts index 473614edfe25c..1f68497347ee1 100644 --- a/apps/meteor/app/apps/server/bridges/rooms.ts +++ b/apps/meteor/app/apps/server/bridges/rooms.ts @@ -3,8 +3,8 @@ import type { IMessage, IMessageRaw } from '@rocket.chat/apps-engine/definition/ import type { IRoom, IRoomRaw } from '@rocket.chat/apps-engine/definition/rooms'; import { RoomType } from '@rocket.chat/apps-engine/definition/rooms'; import type { IUser } from '@rocket.chat/apps-engine/definition/users'; -import type { GetMessagesOptions, GetRoomsFilters, GetRoomsOptions } from '@rocket.chat/apps-engine/server/bridges/RoomBridge'; -import { RoomBridge } from '@rocket.chat/apps-engine/server/bridges/RoomBridge'; +import type { GetMessagesOptions, GetRoomsFilters, GetRoomsOptions } from '@rocket.chat/apps/server/bridges/RoomBridge'; +import { RoomBridge } from '@rocket.chat/apps/server/bridges/RoomBridge'; import type { ISubscription, IUser as ICoreUser, IRoom as ICoreRoom, IMessage as ICoreMessage } from '@rocket.chat/core-typings'; import { Subscriptions, Users, Rooms, Messages } from '@rocket.chat/models'; import type { FindOptions, Sort } from 'mongodb'; diff --git a/apps/meteor/app/apps/server/bridges/scheduler.ts b/apps/meteor/app/apps/server/bridges/scheduler.ts index b08d49182c9bc..0b909457b5d22 100644 --- a/apps/meteor/app/apps/server/bridges/scheduler.ts +++ b/apps/meteor/app/apps/server/bridges/scheduler.ts @@ -3,7 +3,7 @@ import { Agenda } from '@rocket.chat/agenda'; import type { IAppServerOrchestrator } from '@rocket.chat/apps'; import type { IProcessor, IOnetimeSchedule, IRecurringSchedule, IJobContext } from '@rocket.chat/apps-engine/definition/scheduler'; import { StartupType } from '@rocket.chat/apps-engine/definition/scheduler'; -import { SchedulerBridge } from '@rocket.chat/apps-engine/server/bridges/SchedulerBridge'; +import { SchedulerBridge } from '@rocket.chat/apps/server/bridges/SchedulerBridge'; import { ObjectId } from 'bson'; import { MongoInternals } from 'meteor/mongo'; diff --git a/apps/meteor/app/apps/server/bridges/settings.ts b/apps/meteor/app/apps/server/bridges/settings.ts index 7c569a3f12fd7..5707db884e7a7 100644 --- a/apps/meteor/app/apps/server/bridges/settings.ts +++ b/apps/meteor/app/apps/server/bridges/settings.ts @@ -1,7 +1,7 @@ import { Apps, type IAppServerOrchestrator } from '@rocket.chat/apps'; import type { IReadSettingPermission } from '@rocket.chat/apps-engine/definition/permissions/IPermission'; import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; -import { ServerSettingBridge } from '@rocket.chat/apps-engine/server/bridges/ServerSettingBridge'; +import { ServerSettingBridge } from '@rocket.chat/apps/server/bridges/ServerSettingBridge'; import { Settings } from '@rocket.chat/models'; import { updateAuditedByApp } from '../../../../server/settings/lib/auditedSettingUpdates'; diff --git a/apps/meteor/app/apps/server/bridges/thread.ts b/apps/meteor/app/apps/server/bridges/thread.ts index 099fe9184e004..b379394468ba8 100644 --- a/apps/meteor/app/apps/server/bridges/thread.ts +++ b/apps/meteor/app/apps/server/bridges/thread.ts @@ -1,6 +1,6 @@ import type { IAppServerOrchestrator } from '@rocket.chat/apps'; import type { IMessage } from '@rocket.chat/apps-engine/definition/messages'; -import { ThreadBridge } from '@rocket.chat/apps-engine/server/bridges/ThreadBridge'; +import { ThreadBridge } from '@rocket.chat/apps/server/bridges/ThreadBridge'; export class AppThreadBridge extends ThreadBridge { constructor(private readonly orch: IAppServerOrchestrator) { diff --git a/apps/meteor/app/apps/server/bridges/uiInteraction.ts b/apps/meteor/app/apps/server/bridges/uiInteraction.ts index fc68e4e30d3ff..bf22a9bc0f331 100644 --- a/apps/meteor/app/apps/server/bridges/uiInteraction.ts +++ b/apps/meteor/app/apps/server/bridges/uiInteraction.ts @@ -1,7 +1,7 @@ import type { IAppServerOrchestrator } from '@rocket.chat/apps'; import type { IUIKitInteraction } from '@rocket.chat/apps-engine/definition/uikit'; import type { IUser } from '@rocket.chat/apps-engine/definition/users'; -import { UiInteractionBridge as AppsEngineUiInteractionBridge } from '@rocket.chat/apps-engine/server/bridges/UiInteractionBridge'; +import { UiInteractionBridge as AppsEngineUiInteractionBridge } from '@rocket.chat/apps/server/bridges/UiInteractionBridge'; import { api } from '@rocket.chat/core-services'; import type * as UiKit from '@rocket.chat/ui-kit'; diff --git a/apps/meteor/app/apps/server/bridges/uploads.ts b/apps/meteor/app/apps/server/bridges/uploads.ts index b9d0ff67de58e..74fbd99096582 100644 --- a/apps/meteor/app/apps/server/bridges/uploads.ts +++ b/apps/meteor/app/apps/server/bridges/uploads.ts @@ -1,7 +1,7 @@ import type { IAppServerOrchestrator } from '@rocket.chat/apps'; import type { IUpload } from '@rocket.chat/apps-engine/definition/uploads'; import type { IUploadDetails } from '@rocket.chat/apps-engine/definition/uploads/IUploadDetails'; -import { UploadBridge } from '@rocket.chat/apps-engine/server/bridges/UploadBridge'; +import { UploadBridge } from '@rocket.chat/apps/server/bridges/UploadBridge'; import { determineFileType } from '../../../../ee/lib/misc/determineFileType'; import { FileUpload } from '../../../file-upload/server'; diff --git a/apps/meteor/app/apps/server/bridges/users.ts b/apps/meteor/app/apps/server/bridges/users.ts index 43cd7f9ea89e1..4735dcd6462d2 100644 --- a/apps/meteor/app/apps/server/bridges/users.ts +++ b/apps/meteor/app/apps/server/bridges/users.ts @@ -1,6 +1,6 @@ import type { IAppServerOrchestrator } from '@rocket.chat/apps'; import type { IUserCreationOptions, IUser, UserType } from '@rocket.chat/apps-engine/definition/users'; -import { UserBridge } from '@rocket.chat/apps-engine/server/bridges/UserBridge'; +import { UserBridge } from '@rocket.chat/apps/server/bridges/UserBridge'; import { Presence } from '@rocket.chat/core-services'; import type { UserStatus } from '@rocket.chat/core-typings'; import { Subscriptions, Users } from '@rocket.chat/models'; diff --git a/apps/meteor/app/apps/server/bridges/videoConferences.ts b/apps/meteor/app/apps/server/bridges/videoConferences.ts index 8986c15a3c6dd..36f6ce4a8e6b2 100644 --- a/apps/meteor/app/apps/server/bridges/videoConferences.ts +++ b/apps/meteor/app/apps/server/bridges/videoConferences.ts @@ -1,7 +1,7 @@ import type { IAppServerOrchestrator } from '@rocket.chat/apps'; import type { IVideoConfProvider } from '@rocket.chat/apps-engine/definition/videoConfProviders'; import type { AppVideoConference, VideoConference } from '@rocket.chat/apps-engine/definition/videoConferences'; -import { VideoConferenceBridge } from '@rocket.chat/apps-engine/server/bridges/VideoConferenceBridge'; +import { VideoConferenceBridge } from '@rocket.chat/apps/server/bridges/VideoConferenceBridge'; import { VideoConf } from '@rocket.chat/core-services'; import { videoConfProviders } from '../../../../server/lib/videoConfProviders'; diff --git a/apps/meteor/app/statistics/server/lib/getAppsStatistics.ts b/apps/meteor/app/statistics/server/lib/getAppsStatistics.ts index 90e05d1923563..def9e15511b61 100644 --- a/apps/meteor/app/statistics/server/lib/getAppsStatistics.ts +++ b/apps/meteor/app/statistics/server/lib/getAppsStatistics.ts @@ -1,6 +1,6 @@ import { Apps } from '@rocket.chat/apps'; import { AppStatus, AppStatusUtils } from '@rocket.chat/apps-engine/definition/AppStatus'; -import { AppInstallationSource } from '@rocket.chat/apps-engine/server/storage'; +import { AppInstallationSource } from '@rocket.chat/apps/server/storage'; import mem from 'mem'; import { SystemLogger } from '../../../../server/lib/logger/system'; diff --git a/apps/meteor/client/apps/RealAppsEngineUIHost.ts b/apps/meteor/client/apps/RealAppsEngineUIHost.ts index c6a746f6bb7a8..61e7ce516aab6 100644 --- a/apps/meteor/client/apps/RealAppsEngineUIHost.ts +++ b/apps/meteor/client/apps/RealAppsEngineUIHost.ts @@ -1,5 +1,5 @@ -import { AppsEngineUIHost } from '@rocket.chat/apps-engine/client/AppsEngineUIHost'; -import type { IExternalComponentRoomInfo, IExternalComponentUserInfo } from '@rocket.chat/apps-engine/client/definition'; +import { AppsEngineUIHost } from '@rocket.chat/apps/client/AppsEngineUIHost'; +import type { IExternalComponentRoomInfo, IExternalComponentUserInfo } from '@rocket.chat/apps/client/definition'; import { getUserAvatarURL } from '../../app/utils/client/getUserAvatarURL'; import { sdk } from '../../app/utils/client/lib/SDKClient'; diff --git a/apps/meteor/client/apps/orchestrator.ts b/apps/meteor/client/apps/orchestrator.ts index d08641da34d22..82529f6938000 100644 --- a/apps/meteor/client/apps/orchestrator.ts +++ b/apps/meteor/client/apps/orchestrator.ts @@ -1,5 +1,5 @@ -import { AppClientManager } from '@rocket.chat/apps-engine/client/AppClientManager'; -import type { AppsEngineUIHost } from '@rocket.chat/apps-engine/client/AppsEngineUIHost'; +import { AppClientManager } from '@rocket.chat/apps/client/AppClientManager'; +import type { AppsEngineUIHost } from '@rocket.chat/apps/client/AppsEngineUIHost'; import type { IPermission } from '@rocket.chat/apps-engine/definition/permissions/IPermission'; import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; import type { Serialized } from '@rocket.chat/core-typings'; diff --git a/apps/meteor/client/contexts/AppsContext.tsx b/apps/meteor/client/contexts/AppsContext.tsx index 39929c20aed08..8361b80bdfe27 100644 --- a/apps/meteor/client/contexts/AppsContext.tsx +++ b/apps/meteor/client/contexts/AppsContext.tsx @@ -1,4 +1,4 @@ -import type { AppClientManager } from '@rocket.chat/apps-engine/client/AppClientManager'; +import type { AppClientManager } from '@rocket.chat/apps/client/AppClientManager'; import type { IPermission } from '@rocket.chat/apps-engine/definition/permissions/IPermission'; import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; import type { Serialized } from '@rocket.chat/core-typings'; diff --git a/apps/meteor/ee/app/license/server/canEnableApp.ts b/apps/meteor/ee/app/license/server/canEnableApp.ts index c18ad9efb6619..647168c15d6a8 100644 --- a/apps/meteor/ee/app/license/server/canEnableApp.ts +++ b/apps/meteor/ee/app/license/server/canEnableApp.ts @@ -1,4 +1,4 @@ -import type { IAppStorageItem } from '@rocket.chat/apps-engine/server/storage'; +import type { IAppStorageItem } from '@rocket.chat/apps/server/storage'; import { Apps } from '@rocket.chat/core-services'; import type { LicenseModule } from '@rocket.chat/core-typings'; import { License, type LicenseImp } from '@rocket.chat/license'; diff --git a/apps/meteor/ee/lib/misc/formatAppInstanceForRest.ts b/apps/meteor/ee/lib/misc/formatAppInstanceForRest.ts index 7819404525d5f..f34391c528055 100644 --- a/apps/meteor/ee/lib/misc/formatAppInstanceForRest.ts +++ b/apps/meteor/ee/lib/misc/formatAppInstanceForRest.ts @@ -1,8 +1,8 @@ import type { AppStatus } from '@rocket.chat/apps-engine/definition/AppStatus'; import type { IAppInfo } from '@rocket.chat/apps-engine/definition/metadata'; -import type { ProxiedApp } from '@rocket.chat/apps-engine/server/ProxiedApp'; -import type { AppLicenseValidationResult } from '@rocket.chat/apps-engine/server/marketplace/license'; -import type { IAppStorageItem } from '@rocket.chat/apps-engine/server/storage'; +import type { ProxiedApp } from '@rocket.chat/apps/server/ProxiedApp'; +import type { AppLicenseValidationResult } from '@rocket.chat/apps/server/marketplace/license'; +import type { IAppStorageItem } from '@rocket.chat/apps/server/storage'; import type { AppStatusReport } from '@rocket.chat/core-services'; import type { App } from '@rocket.chat/core-typings'; diff --git a/apps/meteor/ee/server/apps/communication/endpoints/appsCountHandler.ts b/apps/meteor/ee/server/apps/communication/endpoints/appsCountHandler.ts index 402ceb709a16a..ad10d68e43e2f 100644 --- a/apps/meteor/ee/server/apps/communication/endpoints/appsCountHandler.ts +++ b/apps/meteor/ee/server/apps/communication/endpoints/appsCountHandler.ts @@ -1,4 +1,4 @@ -import type { AppManager } from '@rocket.chat/apps-engine/server/AppManager'; +import type { AppManager } from '@rocket.chat/apps/server/AppManager'; import { License } from '@rocket.chat/license'; import { API } from '../../../../../app/api/server'; diff --git a/apps/meteor/ee/server/apps/communication/rest.ts b/apps/meteor/ee/server/apps/communication/rest.ts index 62af65d40987f..add85f1c642ee 100644 --- a/apps/meteor/ee/server/apps/communication/rest.ts +++ b/apps/meteor/ee/server/apps/communication/rest.ts @@ -1,7 +1,7 @@ import { AppStatus, AppStatusUtils } from '@rocket.chat/apps-engine/definition/AppStatus'; import type { IAppInfo } from '@rocket.chat/apps-engine/definition/metadata'; -import type { AppManager } from '@rocket.chat/apps-engine/server/AppManager'; -import type { IMarketplaceInfo } from '@rocket.chat/apps-engine/server/marketplace'; +import type { AppManager } from '@rocket.chat/apps/server/AppManager'; +import type { IMarketplaceInfo } from '@rocket.chat/apps/server/marketplace'; import type { AppStatusReport } from '@rocket.chat/core-services'; import type { IMessage, IUser } from '@rocket.chat/core-typings'; import { License } from '@rocket.chat/license'; diff --git a/apps/meteor/ee/server/apps/cron.ts b/apps/meteor/ee/server/apps/cron.ts index d5e7111972821..1cd937d805ea5 100644 --- a/apps/meteor/ee/server/apps/cron.ts +++ b/apps/meteor/ee/server/apps/cron.ts @@ -1,5 +1,5 @@ import { AppStatus } from '@rocket.chat/apps-engine/definition/AppStatus'; -import type { ProxiedApp } from '@rocket.chat/apps-engine/server/ProxiedApp'; +import type { ProxiedApp } from '@rocket.chat/apps/server/ProxiedApp'; import { cronJobs } from '@rocket.chat/cron'; import { Settings, Users } from '@rocket.chat/models'; diff --git a/apps/meteor/ee/server/apps/orchestrator.js b/apps/meteor/ee/server/apps/orchestrator.js index 7188695ac3f43..90987f121a8cd 100644 --- a/apps/meteor/ee/server/apps/orchestrator.js +++ b/apps/meteor/ee/server/apps/orchestrator.js @@ -4,7 +4,7 @@ import * as path from 'path'; import { registerOrchestrator } from '@rocket.chat/apps'; import { EssentialAppDisabledException } from '@rocket.chat/apps-engine/definition/exceptions'; -import { AppManager } from '@rocket.chat/apps-engine/server/AppManager'; +import { AppManager } from '@rocket.chat/apps/server/AppManager'; import { Logger } from '@rocket.chat/logger'; import { AppLogs, Apps as AppsModel, AppsPersistence, Statistics } from '@rocket.chat/models'; import { Meteor } from 'meteor/meteor'; diff --git a/apps/meteor/ee/server/apps/storage/AppFileSystemSourceStorage.ts b/apps/meteor/ee/server/apps/storage/AppFileSystemSourceStorage.ts index 54e83a11df5d5..31c34a6d09bed 100644 --- a/apps/meteor/ee/server/apps/storage/AppFileSystemSourceStorage.ts +++ b/apps/meteor/ee/server/apps/storage/AppFileSystemSourceStorage.ts @@ -1,8 +1,8 @@ import { promises as fs } from 'fs'; import { join, normalize } from 'path'; -import type { IAppStorageItem } from '@rocket.chat/apps-engine/server/storage'; -import { AppSourceStorage } from '@rocket.chat/apps-engine/server/storage'; +import type { IAppStorageItem } from '@rocket.chat/apps/server/storage'; +import { AppSourceStorage } from '@rocket.chat/apps/server/storage'; export class AppFileSystemSourceStorage extends AppSourceStorage { private pathPrefix = 'fs:/'; diff --git a/apps/meteor/ee/server/apps/storage/AppGridFSSourceStorage.ts b/apps/meteor/ee/server/apps/storage/AppGridFSSourceStorage.ts index 2fd4232ee6d35..d9561c45ed7db 100644 --- a/apps/meteor/ee/server/apps/storage/AppGridFSSourceStorage.ts +++ b/apps/meteor/ee/server/apps/storage/AppGridFSSourceStorage.ts @@ -1,5 +1,5 @@ -import type { IAppStorageItem } from '@rocket.chat/apps-engine/server/storage'; -import { AppSourceStorage } from '@rocket.chat/apps-engine/server/storage'; +import type { IAppStorageItem } from '@rocket.chat/apps/server/storage'; +import { AppSourceStorage } from '@rocket.chat/apps/server/storage'; import { streamToBuffer } from '@rocket.chat/tools'; import { MongoInternals } from 'meteor/mongo'; import { NpmModuleMongodb } from 'meteor/npm-mongo'; diff --git a/apps/meteor/ee/server/apps/storage/AppRealLogStorage.ts b/apps/meteor/ee/server/apps/storage/AppRealLogStorage.ts index 62f61699f2e47..4a94699d2f272 100644 --- a/apps/meteor/ee/server/apps/storage/AppRealLogStorage.ts +++ b/apps/meteor/ee/server/apps/storage/AppRealLogStorage.ts @@ -1,6 +1,6 @@ -import type { ILoggerStorageEntry } from '@rocket.chat/apps-engine/server/logging'; -import type { IAppLogStorageFindOptions } from '@rocket.chat/apps-engine/server/storage'; -import { AppLogStorage } from '@rocket.chat/apps-engine/server/storage'; +import type { ILoggerStorageEntry } from '@rocket.chat/apps/server/logging'; +import type { IAppLogStorageFindOptions } from '@rocket.chat/apps/server/storage'; +import { AppLogStorage } from '@rocket.chat/apps/server/storage'; import { InstanceStatus } from '@rocket.chat/instance-status'; import type { AppLogs } from '@rocket.chat/models'; diff --git a/apps/meteor/ee/server/apps/storage/AppRealStorage.ts b/apps/meteor/ee/server/apps/storage/AppRealStorage.ts index db96013af0c76..09f92b3328805 100644 --- a/apps/meteor/ee/server/apps/storage/AppRealStorage.ts +++ b/apps/meteor/ee/server/apps/storage/AppRealStorage.ts @@ -1,9 +1,9 @@ import type { AppStatus } from '@rocket.chat/apps-engine/definition/AppStatus'; import type { IAppInfo } from '@rocket.chat/apps-engine/definition/metadata'; import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; -import type { IMarketplaceInfo } from '@rocket.chat/apps-engine/server/marketplace'; -import type { IAppStorageItem } from '@rocket.chat/apps-engine/server/storage'; -import { AppMetadataStorage } from '@rocket.chat/apps-engine/server/storage'; +import type { IMarketplaceInfo } from '@rocket.chat/apps/server/marketplace'; +import type { IAppStorageItem } from '@rocket.chat/apps/server/storage'; +import { AppMetadataStorage } from '@rocket.chat/apps/server/storage'; import type { Apps } from '@rocket.chat/models'; import { removeEmpty } from '@rocket.chat/tools'; import type { UpdateFilter } from 'mongodb'; diff --git a/apps/meteor/ee/server/apps/storage/ConfigurableAppSourceStorage.ts b/apps/meteor/ee/server/apps/storage/ConfigurableAppSourceStorage.ts index ee70cd38b409f..d201dc2d76bb2 100644 --- a/apps/meteor/ee/server/apps/storage/ConfigurableAppSourceStorage.ts +++ b/apps/meteor/ee/server/apps/storage/ConfigurableAppSourceStorage.ts @@ -1,5 +1,5 @@ -import type { IAppStorageItem } from '@rocket.chat/apps-engine/server/storage'; -import { AppSourceStorage } from '@rocket.chat/apps-engine/server/storage'; +import type { IAppStorageItem } from '@rocket.chat/apps/server/storage'; +import { AppSourceStorage } from '@rocket.chat/apps/server/storage'; import { AppFileSystemSourceStorage } from './AppFileSystemSourceStorage'; import { AppGridFSSourceStorage } from './AppGridFSSourceStorage'; diff --git a/apps/meteor/ee/tests/unit/server/apps/AppRealStorage.spec.ts b/apps/meteor/ee/tests/unit/server/apps/AppRealStorage.spec.ts index 3ea794fd06614..c90331956d90f 100644 --- a/apps/meteor/ee/tests/unit/server/apps/AppRealStorage.spec.ts +++ b/apps/meteor/ee/tests/unit/server/apps/AppRealStorage.spec.ts @@ -1,7 +1,7 @@ import { AppStatus } from '@rocket.chat/apps-engine/definition/AppStatus'; import { AppInterface } from '@rocket.chat/apps-engine/definition/metadata'; import { SettingType } from '@rocket.chat/apps-engine/definition/settings'; -import { AppInstallationSource, type IAppStorageItem } from '@rocket.chat/apps-engine/server/storage'; +import { AppInstallationSource, type IAppStorageItem } from '@rocket.chat/apps/server/storage'; import { expect } from 'chai'; import sinon from 'sinon'; diff --git a/apps/meteor/lib/apps/getInstallationSourceFromAppStorageItem.ts b/apps/meteor/lib/apps/getInstallationSourceFromAppStorageItem.ts index d8fd5a48f79f3..ec346e7ddd22d 100644 --- a/apps/meteor/lib/apps/getInstallationSourceFromAppStorageItem.ts +++ b/apps/meteor/lib/apps/getInstallationSourceFromAppStorageItem.ts @@ -1,4 +1,4 @@ -import type { IAppStorageItem } from '@rocket.chat/apps-engine/server/storage'; +import type { IAppStorageItem } from '@rocket.chat/apps/server/storage'; import type { LicenseAppSources } from '@rocket.chat/core-typings'; /** diff --git a/apps/meteor/server/services/apps-engine/service.ts b/apps/meteor/server/services/apps-engine/service.ts index 0be60a579908d..ab535fad01b8e 100644 --- a/apps/meteor/server/services/apps-engine/service.ts +++ b/apps/meteor/server/services/apps-engine/service.ts @@ -2,8 +2,8 @@ import { Apps, AppEvents } from '@rocket.chat/apps'; import type { AppStatus } from '@rocket.chat/apps-engine/definition/AppStatus'; import { AppStatusUtils } from '@rocket.chat/apps-engine/definition/AppStatus'; import type { IAppInfo } from '@rocket.chat/apps-engine/definition/metadata'; -import type { IGetAppsFilter } from '@rocket.chat/apps-engine/server/IGetAppsFilter'; -import type { IAppStorageItem } from '@rocket.chat/apps-engine/server/storage'; +import type { IGetAppsFilter } from '@rocket.chat/apps/server/IGetAppsFilter'; +import type { IAppStorageItem } from '@rocket.chat/apps/server/storage'; import type { AppStatusReport, IAppsEngineService } from '@rocket.chat/core-services'; import { ServiceClassInternal } from '@rocket.chat/core-services'; diff --git a/apps/meteor/server/services/video-conference/service.ts b/apps/meteor/server/services/video-conference/service.ts index 3c33979fdd3a0..b98f7f7064863 100644 --- a/apps/meteor/server/services/video-conference/service.ts +++ b/apps/meteor/server/services/video-conference/service.ts @@ -1,6 +1,6 @@ import { Apps } from '@rocket.chat/apps'; import type { VideoConfData, VideoConfDataExtended } from '@rocket.chat/apps-engine/definition/videoConfProviders'; -import type { AppVideoConfProviderManager } from '@rocket.chat/apps-engine/server/managers'; +import type { AppVideoConfProviderManager } from '@rocket.chat/apps/server/managers'; import type { IVideoConfService, VideoConferenceJoinOptions } from '@rocket.chat/core-services'; import { api, ServiceClassInternal, Room } from '@rocket.chat/core-services'; import type { diff --git a/apps/meteor/server/startup/migrations/v294.ts b/apps/meteor/server/startup/migrations/v294.ts index 07f6dc2acc1fe..f31cd6a1d6bc1 100644 --- a/apps/meteor/server/startup/migrations/v294.ts +++ b/apps/meteor/server/startup/migrations/v294.ts @@ -1,6 +1,6 @@ import { Apps } from '@rocket.chat/apps'; -import type { AppSignatureManager } from '@rocket.chat/apps-engine/server/managers/AppSignatureManager'; -import type { IAppStorageItem } from '@rocket.chat/apps-engine/server/storage'; +import type { AppSignatureManager } from '@rocket.chat/apps/server/managers/AppSignatureManager'; +import type { IAppStorageItem } from '@rocket.chat/apps/server/storage'; import type { AppRealStorage } from '../../../ee/server/apps/storage'; import { addMigration } from '../../lib/migrations'; diff --git a/apps/meteor/server/startup/migrations/v307.ts b/apps/meteor/server/startup/migrations/v307.ts index d16d16220edc8..3be8a80f0bca6 100644 --- a/apps/meteor/server/startup/migrations/v307.ts +++ b/apps/meteor/server/startup/migrations/v307.ts @@ -1,6 +1,6 @@ import { Apps } from '@rocket.chat/apps'; -import type { AppSignatureManager } from '@rocket.chat/apps-engine/server/managers/AppSignatureManager'; -import type { IAppStorageItem } from '@rocket.chat/apps-engine/server/storage'; +import type { AppSignatureManager } from '@rocket.chat/apps/server/managers/AppSignatureManager'; +import type { IAppStorageItem } from '@rocket.chat/apps/server/storage'; import { License } from '@rocket.chat/license'; import type { AppRealStorage } from '../../../ee/server/apps/storage'; diff --git a/apps/meteor/tests/end-to-end/apps/app-logs-export.ts b/apps/meteor/tests/end-to-end/apps/app-logs-export.ts index 0d8b1fc088a44..30422bffa7bf3 100644 --- a/apps/meteor/tests/end-to-end/apps/app-logs-export.ts +++ b/apps/meteor/tests/end-to-end/apps/app-logs-export.ts @@ -1,4 +1,4 @@ -import type { ILoggerStorageEntry } from '@rocket.chat/apps-engine/server/logging'; +import type { ILoggerStorageEntry } from '@rocket.chat/apps/server/logging'; import type { App } from '@rocket.chat/core-typings'; import { expect } from 'chai'; import { after, before, describe, it } from 'mocha'; diff --git a/apps/meteor/tests/end-to-end/apps/app-logs-nested-requests.ts b/apps/meteor/tests/end-to-end/apps/app-logs-nested-requests.ts index 76080fe704c72..302ec44961139 100644 --- a/apps/meteor/tests/end-to-end/apps/app-logs-nested-requests.ts +++ b/apps/meteor/tests/end-to-end/apps/app-logs-nested-requests.ts @@ -1,4 +1,4 @@ -import type { ILoggerStorageEntry } from '@rocket.chat/apps-engine/server/logging'; +import type { ILoggerStorageEntry } from '@rocket.chat/apps/server/logging'; import { expect } from 'chai'; import { after, before, describe, it } from 'mocha'; diff --git a/apps/meteor/tests/end-to-end/apps/app-logs.ts b/apps/meteor/tests/end-to-end/apps/app-logs.ts index e21f4ce98aee1..1aca3c183225a 100644 --- a/apps/meteor/tests/end-to-end/apps/app-logs.ts +++ b/apps/meteor/tests/end-to-end/apps/app-logs.ts @@ -1,4 +1,4 @@ -import type { ILoggerStorageEntry } from '@rocket.chat/apps-engine/server/logging'; +import type { ILoggerStorageEntry } from '@rocket.chat/apps/server/logging'; import type { App } from '@rocket.chat/core-typings'; import { expect } from 'chai'; import { after, before, describe, it } from 'mocha'; diff --git a/apps/meteor/tests/mocks/client/marketplace.tsx b/apps/meteor/tests/mocks/client/marketplace.tsx index 52f1acae2c584..5c26331333a25 100644 --- a/apps/meteor/tests/mocks/client/marketplace.tsx +++ b/apps/meteor/tests/mocks/client/marketplace.tsx @@ -1,6 +1,6 @@ -import { AppClientManager } from '@rocket.chat/apps-engine/client/AppClientManager'; -import { AppsEngineUIHost } from '@rocket.chat/apps-engine/client/AppsEngineUIHost'; -import type { IExternalComponentRoomInfo } from '@rocket.chat/apps-engine/client/definition'; +import { AppClientManager } from '@rocket.chat/apps/client/AppClientManager'; +import { AppsEngineUIHost } from '@rocket.chat/apps/client/AppsEngineUIHost'; +import type { IExternalComponentRoomInfo } from '@rocket.chat/apps/client/definition'; import type { ReactNode } from 'react'; import { AppsContext, type IAppsOrchestrator } from '../../../client/contexts/AppsContext'; diff --git a/apps/meteor/tests/mocks/data.ts b/apps/meteor/tests/mocks/data.ts index fb8859a3055b2..a4ecfa5ba4b95 100644 --- a/apps/meteor/tests/mocks/data.ts +++ b/apps/meteor/tests/mocks/data.ts @@ -1,5 +1,5 @@ import { faker } from '@faker-js/faker'; -import type { IExternalComponentRoomInfo, IExternalComponentUserInfo } from '@rocket.chat/apps-engine/client/definition'; +import type { IExternalComponentRoomInfo, IExternalComponentUserInfo } from '@rocket.chat/apps/client/definition'; import type { ILivechatContact } from '@rocket.chat/apps-engine/definition/livechat'; import { AppSubscriptionStatus, diff --git a/apps/meteor/tests/unit/app/license/server/canEnableApp.spec.ts b/apps/meteor/tests/unit/app/license/server/canEnableApp.spec.ts index 0cb68734fb462..c2548d1add1af 100644 --- a/apps/meteor/tests/unit/app/license/server/canEnableApp.spec.ts +++ b/apps/meteor/tests/unit/app/license/server/canEnableApp.spec.ts @@ -1,6 +1,6 @@ import { AppStatus } from '@rocket.chat/apps-engine/definition/AppStatus'; -import type { IMarketplaceInfo } from '@rocket.chat/apps-engine/server/marketplace'; -import { AppInstallationSource, type IAppStorageItem } from '@rocket.chat/apps-engine/server/storage'; +import type { IMarketplaceInfo } from '@rocket.chat/apps/server/marketplace'; +import { AppInstallationSource, type IAppStorageItem } from '@rocket.chat/apps/server/storage'; import type { Apps } from '@rocket.chat/core-services'; import type { LicenseImp } from '@rocket.chat/license'; import { expect } from 'chai'; diff --git a/packages/apps-engine/package.json b/packages/apps-engine/package.json index 43cf7796660e6..018ad5958e1cd 100644 --- a/packages/apps-engine/package.json +++ b/packages/apps-engine/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/apps-engine", - "version": "1.61.0", - "description": "The engine code for the Rocket.Chat Apps which manages, runs, translates, coordinates and all of that.", + "version": "1.62.0", + "description": "The public API and type definitions for Rocket.Chat App development.", "keywords": [ "rocket.chat", "team chat", @@ -34,76 +34,32 @@ "email": "douglas.gubert@rocket.chat" } ], + "exports": { + "./definition/*": "./definition/*.js", + "./lib/*": "./lib/*.js" + }, "files": [ - "client/**", "definition/**", - "deno-runtime/**", - "lib/**", - "scripts/**", - "server/**" + "lib/**" ], "scripts": { - ".:build:clean": "rimraf client definition server", + "build": "run-s .:build:clean .:build:default", + ".:build:clean": "rimraf definition lib", ".:build:default": "tsc -p tsconfig.json", - ".:build:deno-cache": "node scripts/deno-cache.js", - ".:deno-fmt:fix": "cd deno-runtime && deno fmt", + "dev": "yarn .:build:default --watch", ".:eslint:fix": "eslint --fix .", - ".:lint:deno": "deno lint --ignore=deno-runtime/.deno deno-runtime/", ".:lint:eslint": "eslint .", - ".:test:deno": "cd deno-runtime && deno task test", - ".:test:node": "NODE_ENV=test node --require ts-node/register/transpile-only --test-reporter spec --test \"tests/**/*.test.ts\"", - "build": "run-s .:build:clean .:build:default .:build:deno-cache", - "dev": "yarn .:build:default --watch", - "fix-lint": "yarn .:eslint:fix && yarn .:deno-fmt:fix", + "fix-lint": "yarn .:eslint:fix", "gen-doc": "typedoc", - "lint": "yarn .:lint:eslint && yarn .:lint:deno", - "start": "run-s .:build:clean .:build:watch", - "testunit": "run-p .:test:node .:test:deno", + "lint": "yarn .:lint:eslint", "typecheck": "tsc -p tsconfig.json --noEmit" }, - "nyc": { - "all": true, - "extension": [ - ".ts" - ], - "include": [ - "src/*.ts", - "src/server/**/*.ts" - ], - "reporter": [ - "lcov", - "json", - "html" - ] - }, - "dependencies": { - "@msgpack/msgpack": "3.0.0-beta2", - "adm-zip": "^0.5.16", - "debug": "^4.3.7", - "esbuild": "~0.27.3", - "jose": "^4.15.9", - "jsonrpc-lite": "^2.2.0", - "lodash.clonedeep": "^4.5.0", - "semver": "^7.6.3", - "stack-trace": "0.0.10", - "uuid": "~11.0.5" - }, "devDependencies": { "@rocket.chat/ui-kit": "workspace:~", - "@seald-io/nedb": "^4.1.2", - "@types/adm-zip": "^0.5.7", - "@types/debug": "^4.1.12", - "@types/lodash.clonedeep": "^4.5.9", "@types/node": "~22.16.5", - "@types/semver": "^7.5.8", - "@types/stack-trace": "0.0.33", - "@types/uuid": "~10.0.0", "eslint": "~9.39.3", "npm-run-all": "^4.1.5", - "nyc": "^17.1.0", "rimraf": "^6.0.1", - "tap-bark": "^1.0.0", - "ts-node": "^6.2.0", "typedoc": "~0.28.16", "typescript": "~5.9.3" }, diff --git a/packages/apps-engine/src/client/index.ts b/packages/apps-engine/src/client/index.ts deleted file mode 100644 index 2ebfee0264d2d..0000000000000 --- a/packages/apps-engine/src/client/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { AppClientManager } from './AppClientManager'; -import { AppServerCommunicator } from './AppServerCommunicator'; - -export { AppClientManager, AppServerCommunicator }; diff --git a/packages/apps-engine/src/definition/accessors/IRoomRead.ts b/packages/apps-engine/src/definition/accessors/IRoomRead.ts index ae086150784f9..bfd35b33c9a90 100644 --- a/packages/apps-engine/src/definition/accessors/IRoomRead.ts +++ b/packages/apps-engine/src/definition/accessors/IRoomRead.ts @@ -1,4 +1,4 @@ -import type { GetMessagesOptions, GetRoomsFilters, GetRoomsOptions } from '../../server/bridges/RoomBridge'; +import type { GetMessagesOptions, GetRoomsFilters, GetRoomsOptions } from '../rooms/IGetMessagesOptions'; import type { IMessageRaw } from '../messages/index'; import type { IRoom, IRoomRaw } from '../rooms/index'; import type { IUser } from '../users/index'; diff --git a/packages/apps-engine/src/client/definition/IExternalComponentRoomInfo.ts b/packages/apps-engine/src/definition/externalComponent/IExternalComponentRoomInfo.ts similarity index 88% rename from packages/apps-engine/src/client/definition/IExternalComponentRoomInfo.ts rename to packages/apps-engine/src/definition/externalComponent/IExternalComponentRoomInfo.ts index a7743dcae8a47..090b9b6903379 100644 --- a/packages/apps-engine/src/client/definition/IExternalComponentRoomInfo.ts +++ b/packages/apps-engine/src/definition/externalComponent/IExternalComponentRoomInfo.ts @@ -1,5 +1,5 @@ +import type { IRoom } from '../rooms'; import type { IExternalComponentUserInfo } from './IExternalComponentUserInfo'; -import type { IRoom } from '../../definition/rooms'; type ClientRoomInfo = Pick; diff --git a/packages/apps-engine/src/definition/externalComponent/IExternalComponentState.ts b/packages/apps-engine/src/definition/externalComponent/IExternalComponentState.ts index ba33072a28281..db726a8cd177f 100644 --- a/packages/apps-engine/src/definition/externalComponent/IExternalComponentState.ts +++ b/packages/apps-engine/src/definition/externalComponent/IExternalComponentState.ts @@ -1,4 +1,5 @@ -import type { IExternalComponentRoomInfo, IExternalComponentUserInfo } from '../../client/definition'; +import type { IExternalComponentRoomInfo } from './IExternalComponentRoomInfo'; +import type { IExternalComponentUserInfo } from './IExternalComponentUserInfo'; /** * The state of an external component, which contains the diff --git a/packages/apps-engine/src/client/definition/IExternalComponentUserInfo.ts b/packages/apps-engine/src/definition/externalComponent/IExternalComponentUserInfo.ts similarity index 84% rename from packages/apps-engine/src/client/definition/IExternalComponentUserInfo.ts rename to packages/apps-engine/src/definition/externalComponent/IExternalComponentUserInfo.ts index 4cd9061347750..dd681db8d42bf 100644 --- a/packages/apps-engine/src/client/definition/IExternalComponentUserInfo.ts +++ b/packages/apps-engine/src/definition/externalComponent/IExternalComponentUserInfo.ts @@ -1,4 +1,4 @@ -import type { IUser } from '../../definition/users'; +import type { IUser } from '../users'; type ClientUserInfo = Pick; diff --git a/packages/apps-engine/src/definition/externalComponent/index.ts b/packages/apps-engine/src/definition/externalComponent/index.ts index acd4bbf44982e..0dcf8ad0e2680 100644 --- a/packages/apps-engine/src/definition/externalComponent/index.ts +++ b/packages/apps-engine/src/definition/externalComponent/index.ts @@ -3,3 +3,6 @@ import { IPostExternalComponentClosed } from './IPostExternalComponentClosed'; import { IPostExternalComponentOpened } from './IPostExternalComponentOpened'; export { IExternalComponent, IPostExternalComponentClosed, IPostExternalComponentOpened }; +export * from './IExternalComponentState'; +export * from './IExternalComponentRoomInfo'; +export * from './IExternalComponentUserInfo'; diff --git a/packages/apps-engine/src/definition/oauth2/OAuth2.ts b/packages/apps-engine/src/definition/oauth2/OAuth2.ts index 6339e5ea224a4..d4d0dfe9fdc98 100644 --- a/packages/apps-engine/src/definition/oauth2/OAuth2.ts +++ b/packages/apps-engine/src/definition/oauth2/OAuth2.ts @@ -1,4 +1,4 @@ -import { OAuth2Client } from '../../server/oauth2/OAuth2Client'; +import { OAuth2Client } from './OAuth2Client'; import type { App } from '../App'; import type { IOAuth2ClientOptions } from './IOAuth2'; diff --git a/packages/apps-engine/src/server/oauth2/OAuth2Client.ts b/packages/apps-engine/src/definition/oauth2/OAuth2Client.ts similarity index 95% rename from packages/apps-engine/src/server/oauth2/OAuth2Client.ts rename to packages/apps-engine/src/definition/oauth2/OAuth2Client.ts index ccb0d23d5d5e7..ba6f8a90d454f 100644 --- a/packages/apps-engine/src/server/oauth2/OAuth2Client.ts +++ b/packages/apps-engine/src/definition/oauth2/OAuth2Client.ts @@ -1,14 +1,14 @@ import { URL } from 'url'; -import type { App } from '../../definition/App'; -import type { IConfigurationExtend, IHttp, IModify, IPersistence, IRead } from '../../definition/accessors'; -import { HttpStatusCode } from '../../definition/accessors'; -import type { IApiEndpointInfo, IApiRequest, IApiResponse } from '../../definition/api'; -import { ApiSecurity, ApiVisibility } from '../../definition/api'; -import { RocketChatAssociationModel, RocketChatAssociationRecord } from '../../definition/metadata'; -import type { IAuthData, IOAuth2Client, IOAuth2ClientOptions } from '../../definition/oauth2/IOAuth2'; -import { SettingType } from '../../definition/settings'; -import type { IUser } from '../../definition/users'; +import type { App } from '../App'; +import type { IConfigurationExtend, IHttp, IModify, IPersistence, IRead } from '../accessors'; +import { HttpStatusCode } from '../accessors'; +import type { IApiEndpointInfo, IApiRequest, IApiResponse } from '../api'; +import { ApiSecurity, ApiVisibility } from '../api'; +import { RocketChatAssociationModel, RocketChatAssociationRecord } from '../metadata'; +import type { IAuthData, IOAuth2Client, IOAuth2ClientOptions } from './IOAuth2'; +import { SettingType } from '../settings'; +import type { IUser } from '../users'; export enum GrantType { RefreshToken = 'refresh_token', diff --git a/packages/apps-engine/src/definition/rooms/IGetMessagesOptions.ts b/packages/apps-engine/src/definition/rooms/IGetMessagesOptions.ts new file mode 100644 index 0000000000000..b2a36adde9843 --- /dev/null +++ b/packages/apps-engine/src/definition/rooms/IGetMessagesOptions.ts @@ -0,0 +1,43 @@ +import type { RoomType } from './RoomType'; + +export const GetMessagesSortableFields = ['createdAt'] as const; + +export type GetMessagesOptions = { + limit: number; + skip: number; + sort: Record<(typeof GetMessagesSortableFields)[number], 'asc' | 'desc'>; + showThreadMessages: boolean; +}; + +/** + * Filters for querying rooms in the system. + */ +export type GetRoomsFilters = { + /** + * When specified, only rooms matching the provided types will be returned. + */ + types?: Array; + /** + * Filter to include or exclude discussion rooms. + * + * When undefined (default), discussions are included in the result set. + * + * When true, ONLY discussions are included in the result set (remove non-discussions). + * When false, discussion rooms are excluded from the result set. + */ + discussions?: boolean; + /** + * Filter to include or exclude team main rooms. + * + * When undefined (default), team main rooms are included in the result set. + * + * When true, ONLY team main rooms are included in the result set (remove non-teams). + * When false, team main rooms are excluded from the result set. + */ + teams?: boolean; +}; + +export type GetRoomsOptions = { + limit?: number; + skip?: number; +}; diff --git a/packages/apps-engine/src/definition/rooms/index.ts b/packages/apps-engine/src/definition/rooms/index.ts index a7212f8ee82de..c50be9c9635fc 100644 --- a/packages/apps-engine/src/definition/rooms/index.ts +++ b/packages/apps-engine/src/definition/rooms/index.ts @@ -26,3 +26,4 @@ export * from './IRoomUserJoinedContext'; export * from './IPreRoomUserLeave'; export * from './IPostRoomUserLeave'; export * from './IRoomUserLeaveContext'; +export * from './IGetMessagesOptions'; diff --git a/packages/apps-engine/src/definition/version.ts b/packages/apps-engine/src/definition/version.ts new file mode 100644 index 0000000000000..452c419d1513c --- /dev/null +++ b/packages/apps-engine/src/definition/version.ts @@ -0,0 +1,15 @@ +/** + * The version of the Apps-Engine package. + * Consumed by host-side code (e.g. AppPackageParser) to validate app compatibility + * without relying on filesystem path traversal. + * + * Uses require() instead of a static import so TypeScript does not resolve the path + * at compile time. + * + * When running for tests, using ts-node, package.json is located two levels above the current file. + * When running in production, package.json is located one level above the compiled version of this file. + */ +const runningFromSource = __dirname.endsWith('src/definition'); +const requirePath = runningFromSource ? '../../package.json' : '../package.json'; + +export const ENGINE_VERSION: string = require(requirePath).version; diff --git a/packages/apps-engine/src/server/bridges/IListenerBridge.ts b/packages/apps-engine/src/server/bridges/IListenerBridge.ts deleted file mode 100644 index 7c4b664a4e584..0000000000000 --- a/packages/apps-engine/src/server/bridges/IListenerBridge.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { IMessage } from '../../definition/messages'; -import type { AppInterface } from '../../definition/metadata'; -import type { IRoom } from '../../definition/rooms'; -import type { UIKitIncomingInteraction } from '../../definition/uikit'; - -export interface IListenerBridge { - messageEvent(int: AppInterface, message: IMessage): Promise; - roomEvent(int: AppInterface, room: IRoom): Promise; - uiKitInteractionEvent(int: AppInterface, action: UIKitIncomingInteraction): Promise; -} diff --git a/packages/apps-engine/tsconfig.json b/packages/apps-engine/tsconfig.json index fe9e53b01cb85..7e564876a10d8 100644 --- a/packages/apps-engine/tsconfig.json +++ b/packages/apps-engine/tsconfig.json @@ -7,15 +7,14 @@ "noImplicitAny": true, "noUnusedLocals": true, "removeComments": false, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, "moduleResolution": "node", + "resolveJsonModule": true, "types": ["node"], "lib": ["es2017", "dom"], "rootDir": "./src", "outDir": ".", "skipLibCheck": true }, - "exclude": ["deno-runtime"], + "exclude": ["node_modules"], "include": ["./src/**/*"] } diff --git a/packages/apps-engine/turbo.json b/packages/apps-engine/turbo.json index a07ebf0886a2b..81cbf5f669fd8 100644 --- a/packages/apps-engine/turbo.json +++ b/packages/apps-engine/turbo.json @@ -3,7 +3,7 @@ "tasks": { "build": { "dependsOn": ["^build"], - "outputs": ["client/**", "definition/**", "deno-runtime/**", "lib/**", "scripts/**", "server/**", ".deno-cache/**"] + "outputs": ["definition/**", "lib/**"] } } } diff --git a/packages/apps-engine/deno-runtime/.gitignore b/packages/apps/deno-runtime/.gitignore similarity index 100% rename from packages/apps-engine/deno-runtime/.gitignore rename to packages/apps/deno-runtime/.gitignore diff --git a/packages/apps-engine/deno-runtime/AppObjectRegistry.ts b/packages/apps/deno-runtime/AppObjectRegistry.ts similarity index 100% rename from packages/apps-engine/deno-runtime/AppObjectRegistry.ts rename to packages/apps/deno-runtime/AppObjectRegistry.ts diff --git a/packages/apps-engine/deno-runtime/acorn-walk.d.ts b/packages/apps/deno-runtime/acorn-walk.d.ts similarity index 100% rename from packages/apps-engine/deno-runtime/acorn-walk.d.ts rename to packages/apps/deno-runtime/acorn-walk.d.ts diff --git a/packages/apps-engine/deno-runtime/acorn.d.ts b/packages/apps/deno-runtime/acorn.d.ts similarity index 100% rename from packages/apps-engine/deno-runtime/acorn.d.ts rename to packages/apps/deno-runtime/acorn.d.ts diff --git a/packages/apps-engine/deno-runtime/deno.jsonc b/packages/apps/deno-runtime/deno.jsonc similarity index 94% rename from packages/apps-engine/deno-runtime/deno.jsonc rename to packages/apps/deno-runtime/deno.jsonc index 4fa3142b99261..35d6fa9a6b9ed 100644 --- a/packages/apps-engine/deno-runtime/deno.jsonc +++ b/packages/apps/deno-runtime/deno.jsonc @@ -1,7 +1,6 @@ { "imports": { "@msgpack/msgpack": "npm:@msgpack/msgpack@3.0.0-beta2", - "@rocket.chat/apps-engine/": "./../src/", "@rocket.chat/ui-kit": "npm:@rocket.chat/ui-kit@^0.31.22", "@std/cli": "jsr:@std/cli@^1.0.9", "@std/io": "jsr:@std/io@^0.225.3", diff --git a/packages/apps-engine/deno-runtime/deno.lock b/packages/apps/deno-runtime/deno.lock similarity index 100% rename from packages/apps-engine/deno-runtime/deno.lock rename to packages/apps/deno-runtime/deno.lock diff --git a/packages/apps-engine/deno-runtime/error-handlers.ts b/packages/apps/deno-runtime/error-handlers.ts similarity index 100% rename from packages/apps-engine/deno-runtime/error-handlers.ts rename to packages/apps/deno-runtime/error-handlers.ts diff --git a/packages/apps-engine/deno-runtime/handlers/api-handler.ts b/packages/apps/deno-runtime/handlers/api-handler.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/api-handler.ts rename to packages/apps/deno-runtime/handlers/api-handler.ts diff --git a/packages/apps-engine/deno-runtime/handlers/app/construct.ts b/packages/apps/deno-runtime/handlers/app/construct.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/app/construct.ts rename to packages/apps/deno-runtime/handlers/app/construct.ts diff --git a/packages/apps-engine/deno-runtime/handlers/app/handleGetStatus.ts b/packages/apps/deno-runtime/handlers/app/handleGetStatus.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/app/handleGetStatus.ts rename to packages/apps/deno-runtime/handlers/app/handleGetStatus.ts diff --git a/packages/apps-engine/deno-runtime/handlers/app/handleInitialize.ts b/packages/apps/deno-runtime/handlers/app/handleInitialize.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/app/handleInitialize.ts rename to packages/apps/deno-runtime/handlers/app/handleInitialize.ts diff --git a/packages/apps-engine/deno-runtime/handlers/app/handleOnDisable.ts b/packages/apps/deno-runtime/handlers/app/handleOnDisable.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/app/handleOnDisable.ts rename to packages/apps/deno-runtime/handlers/app/handleOnDisable.ts diff --git a/packages/apps-engine/deno-runtime/handlers/app/handleOnEnable.ts b/packages/apps/deno-runtime/handlers/app/handleOnEnable.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/app/handleOnEnable.ts rename to packages/apps/deno-runtime/handlers/app/handleOnEnable.ts diff --git a/packages/apps-engine/deno-runtime/handlers/app/handleOnInstall.ts b/packages/apps/deno-runtime/handlers/app/handleOnInstall.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/app/handleOnInstall.ts rename to packages/apps/deno-runtime/handlers/app/handleOnInstall.ts diff --git a/packages/apps-engine/deno-runtime/handlers/app/handleOnPreSettingUpdate.ts b/packages/apps/deno-runtime/handlers/app/handleOnPreSettingUpdate.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/app/handleOnPreSettingUpdate.ts rename to packages/apps/deno-runtime/handlers/app/handleOnPreSettingUpdate.ts diff --git a/packages/apps-engine/deno-runtime/handlers/app/handleOnSettingUpdated.ts b/packages/apps/deno-runtime/handlers/app/handleOnSettingUpdated.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/app/handleOnSettingUpdated.ts rename to packages/apps/deno-runtime/handlers/app/handleOnSettingUpdated.ts diff --git a/packages/apps-engine/deno-runtime/handlers/app/handleOnUninstall.ts b/packages/apps/deno-runtime/handlers/app/handleOnUninstall.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/app/handleOnUninstall.ts rename to packages/apps/deno-runtime/handlers/app/handleOnUninstall.ts diff --git a/packages/apps-engine/deno-runtime/handlers/app/handleOnUpdate.ts b/packages/apps/deno-runtime/handlers/app/handleOnUpdate.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/app/handleOnUpdate.ts rename to packages/apps/deno-runtime/handlers/app/handleOnUpdate.ts diff --git a/packages/apps-engine/deno-runtime/handlers/app/handleSetStatus.ts b/packages/apps/deno-runtime/handlers/app/handleSetStatus.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/app/handleSetStatus.ts rename to packages/apps/deno-runtime/handlers/app/handleSetStatus.ts diff --git a/packages/apps-engine/deno-runtime/handlers/app/handleUploadEvents.ts b/packages/apps/deno-runtime/handlers/app/handleUploadEvents.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/app/handleUploadEvents.ts rename to packages/apps/deno-runtime/handlers/app/handleUploadEvents.ts diff --git a/packages/apps-engine/deno-runtime/handlers/app/handler.ts b/packages/apps/deno-runtime/handlers/app/handler.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/app/handler.ts rename to packages/apps/deno-runtime/handlers/app/handler.ts diff --git a/packages/apps-engine/deno-runtime/handlers/lib/assertions.ts b/packages/apps/deno-runtime/handlers/lib/assertions.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/lib/assertions.ts rename to packages/apps/deno-runtime/handlers/lib/assertions.ts diff --git a/packages/apps-engine/deno-runtime/handlers/listener/handler.ts b/packages/apps/deno-runtime/handlers/listener/handler.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/listener/handler.ts rename to packages/apps/deno-runtime/handlers/listener/handler.ts diff --git a/packages/apps-engine/deno-runtime/handlers/outboundcomms-handler.ts b/packages/apps/deno-runtime/handlers/outboundcomms-handler.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/outboundcomms-handler.ts rename to packages/apps/deno-runtime/handlers/outboundcomms-handler.ts diff --git a/packages/apps-engine/deno-runtime/handlers/scheduler-handler.ts b/packages/apps/deno-runtime/handlers/scheduler-handler.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/scheduler-handler.ts rename to packages/apps/deno-runtime/handlers/scheduler-handler.ts diff --git a/packages/apps-engine/deno-runtime/handlers/slashcommand-handler.ts b/packages/apps/deno-runtime/handlers/slashcommand-handler.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/slashcommand-handler.ts rename to packages/apps/deno-runtime/handlers/slashcommand-handler.ts diff --git a/packages/apps-engine/deno-runtime/handlers/tests/api-handler.test.ts b/packages/apps/deno-runtime/handlers/tests/api-handler.test.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/tests/api-handler.test.ts rename to packages/apps/deno-runtime/handlers/tests/api-handler.test.ts diff --git a/packages/apps-engine/deno-runtime/handlers/tests/helpers/mod.ts b/packages/apps/deno-runtime/handlers/tests/helpers/mod.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/tests/helpers/mod.ts rename to packages/apps/deno-runtime/handlers/tests/helpers/mod.ts diff --git a/packages/apps-engine/deno-runtime/handlers/tests/listener-handler.test.ts b/packages/apps/deno-runtime/handlers/tests/listener-handler.test.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/tests/listener-handler.test.ts rename to packages/apps/deno-runtime/handlers/tests/listener-handler.test.ts diff --git a/packages/apps-engine/deno-runtime/handlers/tests/scheduler-handler.test.ts b/packages/apps/deno-runtime/handlers/tests/scheduler-handler.test.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/tests/scheduler-handler.test.ts rename to packages/apps/deno-runtime/handlers/tests/scheduler-handler.test.ts diff --git a/packages/apps-engine/deno-runtime/handlers/tests/slashcommand-handler.test.ts b/packages/apps/deno-runtime/handlers/tests/slashcommand-handler.test.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/tests/slashcommand-handler.test.ts rename to packages/apps/deno-runtime/handlers/tests/slashcommand-handler.test.ts diff --git a/packages/apps-engine/deno-runtime/handlers/tests/uikit-handler.test.ts b/packages/apps/deno-runtime/handlers/tests/uikit-handler.test.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/tests/uikit-handler.test.ts rename to packages/apps/deno-runtime/handlers/tests/uikit-handler.test.ts diff --git a/packages/apps-engine/deno-runtime/handlers/tests/upload-event-handler.test.ts b/packages/apps/deno-runtime/handlers/tests/upload-event-handler.test.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/tests/upload-event-handler.test.ts rename to packages/apps/deno-runtime/handlers/tests/upload-event-handler.test.ts diff --git a/packages/apps-engine/deno-runtime/handlers/tests/videoconference-handler.test.ts b/packages/apps/deno-runtime/handlers/tests/videoconference-handler.test.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/tests/videoconference-handler.test.ts rename to packages/apps/deno-runtime/handlers/tests/videoconference-handler.test.ts diff --git a/packages/apps-engine/deno-runtime/handlers/uikit/handler.ts b/packages/apps/deno-runtime/handlers/uikit/handler.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/uikit/handler.ts rename to packages/apps/deno-runtime/handlers/uikit/handler.ts diff --git a/packages/apps-engine/deno-runtime/handlers/videoconference-handler.ts b/packages/apps/deno-runtime/handlers/videoconference-handler.ts similarity index 100% rename from packages/apps-engine/deno-runtime/handlers/videoconference-handler.ts rename to packages/apps/deno-runtime/handlers/videoconference-handler.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/builders/BlockBuilder.ts b/packages/apps/deno-runtime/lib/accessors/builders/BlockBuilder.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/builders/BlockBuilder.ts rename to packages/apps/deno-runtime/lib/accessors/builders/BlockBuilder.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/builders/DiscussionBuilder.ts b/packages/apps/deno-runtime/lib/accessors/builders/DiscussionBuilder.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/builders/DiscussionBuilder.ts rename to packages/apps/deno-runtime/lib/accessors/builders/DiscussionBuilder.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/builders/LivechatMessageBuilder.ts b/packages/apps/deno-runtime/lib/accessors/builders/LivechatMessageBuilder.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/builders/LivechatMessageBuilder.ts rename to packages/apps/deno-runtime/lib/accessors/builders/LivechatMessageBuilder.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/builders/MessageBuilder.ts b/packages/apps/deno-runtime/lib/accessors/builders/MessageBuilder.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/builders/MessageBuilder.ts rename to packages/apps/deno-runtime/lib/accessors/builders/MessageBuilder.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/builders/RoomBuilder.ts b/packages/apps/deno-runtime/lib/accessors/builders/RoomBuilder.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/builders/RoomBuilder.ts rename to packages/apps/deno-runtime/lib/accessors/builders/RoomBuilder.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/builders/UserBuilder.ts b/packages/apps/deno-runtime/lib/accessors/builders/UserBuilder.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/builders/UserBuilder.ts rename to packages/apps/deno-runtime/lib/accessors/builders/UserBuilder.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/builders/VideoConferenceBuilder.ts b/packages/apps/deno-runtime/lib/accessors/builders/VideoConferenceBuilder.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/builders/VideoConferenceBuilder.ts rename to packages/apps/deno-runtime/lib/accessors/builders/VideoConferenceBuilder.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/extenders/HttpExtender.ts b/packages/apps/deno-runtime/lib/accessors/extenders/HttpExtender.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/extenders/HttpExtender.ts rename to packages/apps/deno-runtime/lib/accessors/extenders/HttpExtender.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/extenders/MessageExtender.ts b/packages/apps/deno-runtime/lib/accessors/extenders/MessageExtender.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/extenders/MessageExtender.ts rename to packages/apps/deno-runtime/lib/accessors/extenders/MessageExtender.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/extenders/RoomExtender.ts b/packages/apps/deno-runtime/lib/accessors/extenders/RoomExtender.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/extenders/RoomExtender.ts rename to packages/apps/deno-runtime/lib/accessors/extenders/RoomExtender.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/extenders/VideoConferenceExtend.ts b/packages/apps/deno-runtime/lib/accessors/extenders/VideoConferenceExtend.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/extenders/VideoConferenceExtend.ts rename to packages/apps/deno-runtime/lib/accessors/extenders/VideoConferenceExtend.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/formatResponseErrorHandler.ts b/packages/apps/deno-runtime/lib/accessors/formatResponseErrorHandler.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/formatResponseErrorHandler.ts rename to packages/apps/deno-runtime/lib/accessors/formatResponseErrorHandler.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/http.ts b/packages/apps/deno-runtime/lib/accessors/http.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/http.ts rename to packages/apps/deno-runtime/lib/accessors/http.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/mod.ts b/packages/apps/deno-runtime/lib/accessors/mod.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/mod.ts rename to packages/apps/deno-runtime/lib/accessors/mod.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/modify/ModifyCreator.ts b/packages/apps/deno-runtime/lib/accessors/modify/ModifyCreator.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/modify/ModifyCreator.ts rename to packages/apps/deno-runtime/lib/accessors/modify/ModifyCreator.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/modify/ModifyExtender.ts b/packages/apps/deno-runtime/lib/accessors/modify/ModifyExtender.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/modify/ModifyExtender.ts rename to packages/apps/deno-runtime/lib/accessors/modify/ModifyExtender.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/modify/ModifyUpdater.ts b/packages/apps/deno-runtime/lib/accessors/modify/ModifyUpdater.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/modify/ModifyUpdater.ts rename to packages/apps/deno-runtime/lib/accessors/modify/ModifyUpdater.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/notifier.ts b/packages/apps/deno-runtime/lib/accessors/notifier.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/notifier.ts rename to packages/apps/deno-runtime/lib/accessors/notifier.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/tests/AppAccessors.test.ts b/packages/apps/deno-runtime/lib/accessors/tests/AppAccessors.test.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/tests/AppAccessors.test.ts rename to packages/apps/deno-runtime/lib/accessors/tests/AppAccessors.test.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/tests/ModifyCreator.test.ts b/packages/apps/deno-runtime/lib/accessors/tests/ModifyCreator.test.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/tests/ModifyCreator.test.ts rename to packages/apps/deno-runtime/lib/accessors/tests/ModifyCreator.test.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/tests/ModifyExtender.test.ts b/packages/apps/deno-runtime/lib/accessors/tests/ModifyExtender.test.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/tests/ModifyExtender.test.ts rename to packages/apps/deno-runtime/lib/accessors/tests/ModifyExtender.test.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/tests/ModifyUpdater.test.ts b/packages/apps/deno-runtime/lib/accessors/tests/ModifyUpdater.test.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/tests/ModifyUpdater.test.ts rename to packages/apps/deno-runtime/lib/accessors/tests/ModifyUpdater.test.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/tests/formatResponseErrorHandler.test.ts b/packages/apps/deno-runtime/lib/accessors/tests/formatResponseErrorHandler.test.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/tests/formatResponseErrorHandler.test.ts rename to packages/apps/deno-runtime/lib/accessors/tests/formatResponseErrorHandler.test.ts diff --git a/packages/apps-engine/deno-runtime/lib/accessors/tests/http.test.ts b/packages/apps/deno-runtime/lib/accessors/tests/http.test.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/accessors/tests/http.test.ts rename to packages/apps/deno-runtime/lib/accessors/tests/http.test.ts diff --git a/packages/apps-engine/deno-runtime/lib/ast/mod.ts b/packages/apps/deno-runtime/lib/ast/mod.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/ast/mod.ts rename to packages/apps/deno-runtime/lib/ast/mod.ts diff --git a/packages/apps-engine/deno-runtime/lib/ast/operations.ts b/packages/apps/deno-runtime/lib/ast/operations.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/ast/operations.ts rename to packages/apps/deno-runtime/lib/ast/operations.ts diff --git a/packages/apps-engine/deno-runtime/lib/ast/tests/data/ast_blocks.ts b/packages/apps/deno-runtime/lib/ast/tests/data/ast_blocks.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/ast/tests/data/ast_blocks.ts rename to packages/apps/deno-runtime/lib/ast/tests/data/ast_blocks.ts diff --git a/packages/apps-engine/deno-runtime/lib/ast/tests/operations.test.ts b/packages/apps/deno-runtime/lib/ast/tests/operations.test.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/ast/tests/operations.test.ts rename to packages/apps/deno-runtime/lib/ast/tests/operations.test.ts diff --git a/packages/apps-engine/deno-runtime/lib/codec.ts b/packages/apps/deno-runtime/lib/codec.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/codec.ts rename to packages/apps/deno-runtime/lib/codec.ts diff --git a/packages/apps-engine/deno-runtime/lib/logger.ts b/packages/apps/deno-runtime/lib/logger.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/logger.ts rename to packages/apps/deno-runtime/lib/logger.ts diff --git a/packages/apps-engine/deno-runtime/lib/messenger.ts b/packages/apps/deno-runtime/lib/messenger.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/messenger.ts rename to packages/apps/deno-runtime/lib/messenger.ts diff --git a/packages/apps-engine/deno-runtime/lib/metricsCollector.ts b/packages/apps/deno-runtime/lib/metricsCollector.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/metricsCollector.ts rename to packages/apps/deno-runtime/lib/metricsCollector.ts diff --git a/packages/apps-engine/deno-runtime/lib/parseArgs.ts b/packages/apps/deno-runtime/lib/parseArgs.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/parseArgs.ts rename to packages/apps/deno-runtime/lib/parseArgs.ts diff --git a/packages/apps-engine/deno-runtime/lib/requestContext.ts b/packages/apps/deno-runtime/lib/requestContext.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/requestContext.ts rename to packages/apps/deno-runtime/lib/requestContext.ts diff --git a/packages/apps-engine/deno-runtime/lib/require.ts b/packages/apps/deno-runtime/lib/require.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/require.ts rename to packages/apps/deno-runtime/lib/require.ts diff --git a/packages/apps-engine/deno-runtime/lib/room.ts b/packages/apps/deno-runtime/lib/room.ts similarity index 86% rename from packages/apps-engine/deno-runtime/lib/room.ts rename to packages/apps/deno-runtime/lib/room.ts index 282ded4a90457..f128852abde56 100644 --- a/packages/apps-engine/deno-runtime/lib/room.ts +++ b/packages/apps/deno-runtime/lib/room.ts @@ -1,7 +1,15 @@ import type { IRoom } from '@rocket.chat/apps-engine/definition/rooms/IRoom.ts'; import type { RoomType } from '@rocket.chat/apps-engine/definition/rooms/RoomType.ts'; import type { IUser } from '@rocket.chat/apps-engine/definition/users/IUser.ts'; -import type { AppManager } from '@rocket.chat/apps-engine/server/AppManager.ts'; + +/** Minimal interface covering the only AppManager capability used by Room */ +interface IRoomManager { + getBridges(): { + getInternalBridge(): { + doGetUsernamesOfRoomById(id: string | undefined): Promise>; + }; + }; +} const PrivateManager = Symbol('RoomPrivateManager'); @@ -36,7 +44,7 @@ export class Room { private _USERNAMES: Promise> | undefined; - private [PrivateManager]: AppManager | undefined; + private [PrivateManager]: IRoomManager | undefined; /** * @deprecated @@ -51,7 +59,7 @@ export class Room { public set usernames(usernames) {} - public constructor(room: IRoom, manager: AppManager) { + public constructor(room: IRoom, manager: IRoomManager) { Object.assign(this, room); Object.defineProperty(this, PrivateManager, { diff --git a/packages/apps-engine/deno-runtime/lib/roomFactory.ts b/packages/apps/deno-runtime/lib/roomFactory.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/roomFactory.ts rename to packages/apps/deno-runtime/lib/roomFactory.ts diff --git a/packages/apps-engine/deno-runtime/lib/sanitizeDeprecatedUsage.ts b/packages/apps/deno-runtime/lib/sanitizeDeprecatedUsage.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/sanitizeDeprecatedUsage.ts rename to packages/apps/deno-runtime/lib/sanitizeDeprecatedUsage.ts diff --git a/packages/apps-engine/deno-runtime/lib/tests/logger.test.ts b/packages/apps/deno-runtime/lib/tests/logger.test.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/tests/logger.test.ts rename to packages/apps/deno-runtime/lib/tests/logger.test.ts diff --git a/packages/apps-engine/deno-runtime/lib/tests/messenger.test.ts b/packages/apps/deno-runtime/lib/tests/messenger.test.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/tests/messenger.test.ts rename to packages/apps/deno-runtime/lib/tests/messenger.test.ts diff --git a/packages/apps-engine/deno-runtime/lib/wrapAppForRequest.ts b/packages/apps/deno-runtime/lib/wrapAppForRequest.ts similarity index 100% rename from packages/apps-engine/deno-runtime/lib/wrapAppForRequest.ts rename to packages/apps/deno-runtime/lib/wrapAppForRequest.ts diff --git a/packages/apps-engine/deno-runtime/main.ts b/packages/apps/deno-runtime/main.ts similarity index 100% rename from packages/apps-engine/deno-runtime/main.ts rename to packages/apps/deno-runtime/main.ts diff --git a/packages/apps/package.json b/packages/apps/package.json index 8354a0adc1ed6..ed96487088815 100644 --- a/packages/apps/package.json +++ b/packages/apps/package.json @@ -4,23 +4,71 @@ "private": true, "main": "./dist/index.js", "typings": "./dist/index.d.ts", + "exports": { + ".": { + "require": "./dist/index.js", + "types": "./dist/index.d.ts" + }, + "./server/*": { + "require": "./dist/server/*.js", + "types": "./dist/server/*.d.ts" + }, + "./client/*": { + "require": "./dist/client/*.js", + "types": "./dist/client/*.d.ts" + } + }, + "typesVersions": { + "*": { + "server/*": ["./dist/server/*"], + "client/*": ["./dist/client/*"] + } + }, "files": [ - "/dist" + "/dist", + "/deno-runtime", + "/scripts" ], "scripts": { - "build": "rm -rf dist && tsc -p tsconfig.json", + "build": "run-s build:clean build:default build:deno-cache", + "build:clean": "rimraf dist", + "build:default": "tsc -p tsconfig.json", + "build:deno-cache": "node scripts/deno-cache.js", "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput", "lint": "eslint .", - "lint:fix": "eslint --fix ." + "lint:fix": "eslint --fix .", + "test:deno": "cd deno-runtime && deno task test", + "test:node": "NODE_ENV=test node --require ts-node/register/transpile-only --test-reporter spec --test \"tests/**/*.test.ts\"" }, "dependencies": { + "@msgpack/msgpack": "3.0.0-beta2", "@rocket.chat/apps-engine": "workspace:^", "@rocket.chat/core-typings": "workspace:^", - "@rocket.chat/model-typings": "workspace:^" + "@rocket.chat/model-typings": "workspace:^", + "adm-zip": "^0.5.16", + "debug": "^4.3.7", + "esbuild": "~0.27.3", + "jose": "^4.15.9", + "jsonrpc-lite": "^2.2.0", + "lodash.clonedeep": "^4.5.0", + "semver": "^7.6.3", + "stack-trace": "0.0.10", + "uuid": "~11.0.5" }, "devDependencies": { "@rocket.chat/tsconfig": "workspace:*", + "@seald-io/nedb": "^4.1.2", + "@types/adm-zip": "^0.5.7", + "@types/debug": "^4.1.12", + "@types/lodash.clonedeep": "^4.5.9", + "@types/node": "~22.16.5", + "@types/semver": "^7.5.8", + "@types/stack-trace": "0.0.33", + "@types/uuid": "~10.0.0", "eslint": "~9.39.3", + "npm-run-all": "^4.1.5", + "rimraf": "^6.0.1", + "ts-node": "^6.2.0", "typescript": "~5.9.3" }, "volta": { diff --git a/packages/apps-engine/scripts/deno-cache.js b/packages/apps/scripts/deno-cache.js similarity index 100% rename from packages/apps-engine/scripts/deno-cache.js rename to packages/apps/scripts/deno-cache.js diff --git a/packages/apps/src/AppsEngine.ts b/packages/apps/src/AppsEngine.ts index 4bffbbbc810fb..1184c237b060d 100644 --- a/packages/apps/src/AppsEngine.ts +++ b/packages/apps/src/AppsEngine.ts @@ -20,6 +20,6 @@ export type { IVideoConference as IAppsVideoConference, VideoConference as AppsVideoConference, } from '@rocket.chat/apps-engine/definition/videoConferences'; -export { AppManager } from '@rocket.chat/apps-engine/server/AppManager'; -export { AppBridges } from '@rocket.chat/apps-engine/server/bridges'; -export { AppMetadataStorage } from '@rocket.chat/apps-engine/server/storage'; +export { AppManager } from './server/AppManager'; +export { AppBridges } from './server/bridges'; +export { AppMetadataStorage } from './server/storage'; diff --git a/packages/apps/src/IAppServerOrchestrator.ts b/packages/apps/src/IAppServerOrchestrator.ts index 2f1f7db5d4b50..20e1edef03f35 100644 --- a/packages/apps/src/IAppServerOrchestrator.ts +++ b/packages/apps/src/IAppServerOrchestrator.ts @@ -1,5 +1,5 @@ -import type { AppManager } from '@rocket.chat/apps-engine/server/AppManager'; -import type { AppSourceStorage } from '@rocket.chat/apps-engine/server/storage'; +import type { AppManager } from './server/AppManager'; +import type { AppSourceStorage } from './server/storage'; import type { Logger } from '@rocket.chat/logger'; import type { IAppsPersistenceModel } from '@rocket.chat/model-typings'; diff --git a/packages/apps/src/bridges/IListenerBridge.ts b/packages/apps/src/bridges/IListenerBridge.ts deleted file mode 100644 index 83c3910d152cc..0000000000000 --- a/packages/apps/src/bridges/IListenerBridge.ts +++ /dev/null @@ -1,55 +0,0 @@ -import type { IMessage, IRoom, IUser, ILivechatDepartment, ILivechatVisitor, IOmnichannelRoom } from '@rocket.chat/core-typings'; - -import type { AppEvents } from '../AppsEngine'; - -declare module '@rocket.chat/apps-engine/server/bridges' { - interface IListenerBridge { - messageEvent(int: 'IPostMessageDeleted', message: IMessage, userDeleted: IUser): Promise; - messageEvent(int: 'IPostMessageReacted', message: IMessage, userReacted: IUser, reaction: string, isReacted: boolean): Promise; - messageEvent(int: 'IPostMessageFollowed', message: IMessage, userFollowed: IUser, isFollowed: boolean): Promise; - messageEvent(int: 'IPostMessagePinned', message: IMessage, userPinned: IUser, isPinned: boolean): Promise; - messageEvent(int: 'IPostMessageStarred', message: IMessage, userStarred: IUser, isStarred: boolean): Promise; - messageEvent(int: 'IPostMessageReported', message: IMessage, userReported: IUser, reason: boolean): Promise; - - messageEvent( - int: 'IPreMessageSentPrevent' | 'IPreMessageDeletePrevent' | 'IPreMessageUpdatedPrevent', - message: IMessage, - ): Promise; - messageEvent( - int: 'IPreMessageSentExtend' | 'IPreMessageSentModify' | 'IPreMessageUpdatedExtend' | 'IPreMessageUpdatedModify', - message: IMessage, - ): Promise; - messageEvent(int: 'IPostMessageSent' | 'IPostMessageUpdated' | 'IPostSystemMessageSent', message: IMessage): Promise; - - roomEvent(int: 'IPreRoomUserJoined' | 'IPostRoomUserJoined', room: IRoom, joiningUser: IUser, invitingUser?: IUser): Promise; - roomEvent(int: 'IPreRoomUserLeave' | 'IPostRoomUserLeave', room: IRoom, leavingUser: IUser): Promise; - - roomEvent(int: 'IPreRoomCreatePrevent' | 'IPreRoomDeletePrevent', room: IRoom): Promise; - roomEvent(int: 'IPreRoomCreateExtend' | 'IPreRoomCreateModify', room: IRoom): Promise; - roomEvent(int: 'IPostRoomCreate' | 'IPostRoomDeleted', room: IRoom): Promise; - - livechatEvent( - int: - | 'IPostLivechatAgentAssigned' - | 'IPostLivechatAgentUnassigned' - | 'IPostLivechatDepartmentRemoved' - | 'IPostLivechatDepartmentDisabled', - data: { user: IUser; room: IOmnichannelRoom }, - ): Promise; - livechatEvent( - int: 'IPostLivechatRoomTransferred', - data: { type: 'agent'; room: IRoom['_id']; from: IUser['_id']; to: IUser['_id'] }, - ): Promise; - livechatEvent( - int: 'IPostLivechatRoomTransferred', - data: { type: 'department'; room: IRoom['_id']; from: ILivechatDepartment['_id']; to: ILivechatDepartment['_id'] }, - ): Promise; - livechatEvent(int: 'IPostLivechatGuestSaved', data: ILivechatVisitor['_id']): Promise; - livechatEvent(int: 'IPostLivechatRoomSaved', data: IRoom['_id']): Promise; - livechatEvent( - int: 'ILivechatRoomClosedHandler' | 'IPostLivechatRoomStarted' | 'IPostLivechatRoomClosed' | 'IPreLivechatRoomCreatePrevent', - data: IRoom, - ): Promise; - livechatEvent(int: AppEvents | AppEvents[keyof AppEvents], data: any): Promise; - } -} diff --git a/packages/apps-engine/src/client/AppClientManager.ts b/packages/apps/src/client/AppClientManager.ts similarity index 85% rename from packages/apps-engine/src/client/AppClientManager.ts rename to packages/apps/src/client/AppClientManager.ts index 8d2cb55420eb3..8427aa80e11ee 100644 --- a/packages/apps-engine/src/client/AppClientManager.ts +++ b/packages/apps/src/client/AppClientManager.ts @@ -1,6 +1,6 @@ import { AppServerCommunicator } from './AppServerCommunicator'; import { AppsEngineUIHost } from './AppsEngineUIHost'; -import type { IAppInfo } from '../definition/metadata'; +import type { IAppInfo } from '@rocket.chat/apps-engine/definition/metadata'; export class AppClientManager { private apps: Array; @@ -21,7 +21,7 @@ export class AppClientManager { } public async load(): Promise { - this.apps = await this.communicator.getEnabledApps(); + this.apps = await this.communicator!.getEnabledApps(); console.log('Enabled apps:', this.apps); } diff --git a/packages/apps-engine/src/client/AppServerCommunicator.ts b/packages/apps/src/client/AppServerCommunicator.ts similarity index 87% rename from packages/apps-engine/src/client/AppServerCommunicator.ts rename to packages/apps/src/client/AppServerCommunicator.ts index bb4a0538f1d03..c40e139fc4f0f 100644 --- a/packages/apps-engine/src/client/AppServerCommunicator.ts +++ b/packages/apps/src/client/AppServerCommunicator.ts @@ -1,4 +1,4 @@ -import type { IAppInfo } from '../definition/metadata'; +import type { IAppInfo } from '@rocket.chat/apps-engine/definition/metadata'; export abstract class AppServerCommunicator { public abstract getEnabledApps(): Promise>; diff --git a/packages/apps-engine/src/client/AppsEngineUIClient.ts b/packages/apps/src/client/AppsEngineUIClient.ts similarity index 100% rename from packages/apps-engine/src/client/AppsEngineUIClient.ts rename to packages/apps/src/client/AppsEngineUIClient.ts diff --git a/packages/apps-engine/src/client/AppsEngineUIHost.ts b/packages/apps/src/client/AppsEngineUIHost.ts similarity index 100% rename from packages/apps-engine/src/client/AppsEngineUIHost.ts rename to packages/apps/src/client/AppsEngineUIHost.ts diff --git a/packages/apps-engine/src/client/constants/index.ts b/packages/apps/src/client/constants/index.ts similarity index 100% rename from packages/apps-engine/src/client/constants/index.ts rename to packages/apps/src/client/constants/index.ts diff --git a/packages/apps-engine/src/client/definition/AppsEngineUIMethods.ts b/packages/apps/src/client/definition/AppsEngineUIMethods.ts similarity index 100% rename from packages/apps-engine/src/client/definition/AppsEngineUIMethods.ts rename to packages/apps/src/client/definition/AppsEngineUIMethods.ts diff --git a/packages/apps-engine/src/client/definition/IAppsEngineUIResponse.ts b/packages/apps/src/client/definition/IAppsEngineUIResponse.ts similarity index 100% rename from packages/apps-engine/src/client/definition/IAppsEngineUIResponse.ts rename to packages/apps/src/client/definition/IAppsEngineUIResponse.ts diff --git a/packages/apps/src/client/definition/IExternalComponentRoomInfo.ts b/packages/apps/src/client/definition/IExternalComponentRoomInfo.ts new file mode 100644 index 0000000000000..5ecd812270359 --- /dev/null +++ b/packages/apps/src/client/definition/IExternalComponentRoomInfo.ts @@ -0,0 +1,16 @@ +import type { IExternalComponentUserInfo } from './IExternalComponentUserInfo'; +import type { IRoom } from '@rocket.chat/apps-engine/definition/rooms'; + +type ClientRoomInfo = Pick; + +/** + * Represents the room's information returned to the + * external component. + */ +export interface IExternalComponentRoomInfo extends ClientRoomInfo { + /** + * the list that contains all the users belonging + * to this room. + */ + members: Array; +} diff --git a/packages/apps/src/client/definition/IExternalComponentUserInfo.ts b/packages/apps/src/client/definition/IExternalComponentUserInfo.ts new file mode 100644 index 0000000000000..aca1be1405aa3 --- /dev/null +++ b/packages/apps/src/client/definition/IExternalComponentUserInfo.ts @@ -0,0 +1,14 @@ +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; + +type ClientUserInfo = Pick; + +/** + * Represents the user's information returned to + * the external component. + */ +export interface IExternalComponentUserInfo extends ClientUserInfo { + /** + * the avatar URL of the Rocket.Chat user + */ + avatarUrl: string; +} diff --git a/packages/apps-engine/src/client/definition/index.ts b/packages/apps/src/client/definition/index.ts similarity index 100% rename from packages/apps-engine/src/client/definition/index.ts rename to packages/apps/src/client/definition/index.ts diff --git a/packages/apps/src/client/index.ts b/packages/apps/src/client/index.ts new file mode 100644 index 0000000000000..6bd5e4b6e00a8 --- /dev/null +++ b/packages/apps/src/client/index.ts @@ -0,0 +1,10 @@ +// TODO: The browser-side UI host code (AppClientManager, AppsEngineUIHost, +// AppsEngineUIClient) does not semantically belong in @rocket.chat/apps — +// this package is server-side orchestration. It was moved here as part of +// the apps-engine split for pragmatic consolidation. A future split into a +// dedicated @rocket.chat/apps-client package is tracked in: +// https://github.com/RocketChat/Rocket.Chat/issues/PLACEHOLDER +import { AppClientManager } from './AppClientManager'; +import { AppServerCommunicator } from './AppServerCommunicator'; + +export { AppClientManager, AppServerCommunicator }; diff --git a/packages/apps-engine/src/client/utils/index.ts b/packages/apps/src/client/utils/index.ts similarity index 100% rename from packages/apps-engine/src/client/utils/index.ts rename to packages/apps/src/client/utils/index.ts diff --git a/packages/apps/src/index.ts b/packages/apps/src/index.ts index 31a44b6ce0578..89f846217284a 100644 --- a/packages/apps/src/index.ts +++ b/packages/apps/src/index.ts @@ -1,5 +1,3 @@ -import './bridges/IListenerBridge'; - export type * from './converters'; export * from './AppsEngine'; export type * from './IAppServerNotifier'; diff --git a/packages/apps-engine/src/server/AppManager.ts b/packages/apps/src/server/AppManager.ts similarity index 95% rename from packages/apps-engine/src/server/AppManager.ts rename to packages/apps/src/server/AppManager.ts index 826b2b1b95148..f3a39d65932ee 100644 --- a/packages/apps-engine/src/server/AppManager.ts +++ b/packages/apps/src/server/AppManager.ts @@ -4,12 +4,12 @@ import type { IGetAppsFilter } from './IGetAppsFilter'; import { ProxiedApp } from './ProxiedApp'; import type { PersistenceBridge, UserBridge } from './bridges'; import { AppBridges } from './bridges'; -import { AppStatus, AppStatusUtils } from '../definition/AppStatus'; -import type { IAppInfo } from '../definition/metadata'; -import { AppMethod } from '../definition/metadata'; -import type { IPermission } from '../definition/permissions/IPermission'; -import type { IUser } from '../definition/users'; -import { UserType } from '../definition/users'; +import { AppStatus, AppStatusUtils } from '@rocket.chat/apps-engine/definition/AppStatus'; +import type { IAppInfo } from '@rocket.chat/apps-engine/definition/metadata'; +import { AppMethod } from '@rocket.chat/apps-engine/definition/metadata'; +import type { IPermission } from '@rocket.chat/apps-engine/definition/permissions/IPermission'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; +import { UserType } from '@rocket.chat/apps-engine/definition/users'; import type { IInternalPersistenceBridge } from './bridges/IInternalPersistenceBridge'; import type { IInternalUserBridge } from './bridges/IInternalUserBridge'; import { AppCompiler, AppFabricationFulfillment, AppPackageParser } from './compiler'; @@ -421,7 +421,7 @@ export class AppManager { } if (typeof filter.ids !== 'undefined') { - rls = rls.filter((rl) => filter.ids.includes(rl.getID())); + rls = rls.filter((rl) => filter.ids!.includes(rl.getID())); } if (typeof filter.installationSource !== 'undefined') { @@ -438,7 +438,7 @@ export class AppManager { } /** Gets a single App by the id passed in. */ - public getOneById(appId: string): ProxiedApp { + public getOneById(appId: string): ProxiedApp | undefined { return this.apps.get(appId); } @@ -504,7 +504,7 @@ export class AppManager { await app.setStatus(status, silent); - const storageItem = await this.appMetadataStorage.retrieveOne(id); + const storageItem = (await this.appMetadataStorage.retrieveOne(id))!; app.getStorageItem().marketplaceInfo = storageItem.marketplaceInfo; await app.validateLicense().catch(() => {}); @@ -523,7 +523,7 @@ export class AppManager { await this.purgeAppConfig(app, { keepScheduledJobs: true }); - const storageItem = await this.appMetadataStorage.retrieveOne(id); + const storageItem = (await this.appMetadataStorage.retrieveOne(id))!; app.getStorageItem().marketplaceInfo = storageItem.marketplaceInfo; await app.validateLicense().catch(() => {}); @@ -674,6 +674,9 @@ export class AppManager { */ public async remove(id: string, uninstallationParameters: IAppUninstallParameters): Promise { const app = this.apps.get(id); + if (!app) { + throw new Error(`No App by the id "${id}" exists.`); + } const { user } = uninstallationParameters; // First remove the app @@ -693,6 +696,10 @@ export class AppManager { public async removeLocal(id: string): Promise { const app = this.apps.get(id); + if (!app) { + return; + } + if (AppStatusUtils.isEnabled(await app.getStatus())) { await this.disable(id); } @@ -761,7 +768,7 @@ export class AppManager { // Errors here don't really prevent the process from dying, so we don't really need to do anything on the catch await this.getRuntime() - .stopRuntime(this.apps.get(old.id).getRuntimeController()) + .stopRuntime(this.apps.get(old.id)!.getRuntimeController()) .catch(() => {}); const app = await this.getCompiler().toSandBox(this, descriptor, result); @@ -794,7 +801,7 @@ export class AppManager { .catch(() => {}); } - await this.updateApp(app, updateOptions.user, old.info.version); + await this.updateApp(app, updateOptions.user ?? null, old.info.version); return aff; } @@ -815,7 +822,7 @@ export class AppManager { // Errors here don't really prevent the process from dying, so we don't really need to do anything on the catch await this.getRuntime() - .stopRuntime(this.apps.get(stored.id).getRuntimeController()) + .stopRuntime(this.apps.get(stored.id)!.getRuntimeController()) .catch(() => {}); return this.getCompiler().toSandBox(this, stored, parseResult); @@ -824,6 +831,8 @@ export class AppManager { if (appPackageOrInstance instanceof ProxiedApp) { return appPackageOrInstance; } + + throw new Error('Invalid app package or instance provided to updateLocal'); })(); // We don't keep slashcommands here as the update could potentially not provide the same list @@ -883,7 +892,7 @@ export class AppManager { await this.enable(rl.getID()); storageItem.status = AppStatus.MANUALLY_ENABLED; - await this.appMetadataStorage.updateStatus(storageItem._id, AppStatus.MANUALLY_ENABLED); + await this.appMetadataStorage.updateStatus(storageItem._id!, AppStatus.MANUALLY_ENABLED); } else { if (!AppStatusUtils.isEnabled(await rl.getStatus())) { throw new Error('Can not disable an App which is not enabled.'); @@ -892,7 +901,7 @@ export class AppManager { await this.disable(rl.getID(), AppStatus.MANUALLY_DISABLED); storageItem.status = AppStatus.MANUALLY_DISABLED; - await this.appMetadataStorage.updateStatus(storageItem._id, AppStatus.MANUALLY_DISABLED); + await this.appMetadataStorage.updateStatus(storageItem._id!, AppStatus.MANUALLY_DISABLED); } return rl; @@ -918,7 +927,7 @@ export class AppManager { return; } - appStorageItem.marketplaceInfo[0].subscriptionInfo = appInfo.subscriptionInfo; + appStorageItem.marketplaceInfo![0].subscriptionInfo = appInfo.subscriptionInfo; appStorageItem.signature = await this.getSignatureManager().signApp(appStorageItem); return this.appMetadataStorage.updatePartialAndReturnDocument({ @@ -961,7 +970,7 @@ export class AppManager { const storageItem = app.getStorageItem(); storageItem.status = status; - return this.appMetadataStorage.updateStatus(storageItem._id, storageItem.status).catch(console.error) as Promise; + return this.appMetadataStorage.updateStatus(storageItem._id!, storageItem.status).catch(console.error) as Promise; }), ), ); @@ -993,7 +1002,7 @@ export class AppManager { await this.enableApp(rl, silenceStatus); } - return this.apps.get(item.id); + return this.apps.get(item.id)!; } private async runStartUpProcess(storageItem: IAppStorageItem, app: ProxiedApp, silenceStatus: boolean): Promise { @@ -1099,7 +1108,7 @@ export class AppManager { this.uiActionButtonManager.clearAppActionButtons(app.getID()); this.videoConfProviderManager.unregisterProviders(app.getID()); await this.outboundCommunicationProviderManager.unregisterProviders(app.getID(), { - keepReferences: opts.keepOutboundCommunicationProviders, + keepReferences: opts.keepOutboundCommunicationProviders ?? false, }); } diff --git a/packages/apps-engine/src/server/IGetAppsFilter.ts b/packages/apps/src/server/IGetAppsFilter.ts similarity index 100% rename from packages/apps-engine/src/server/IGetAppsFilter.ts rename to packages/apps/src/server/IGetAppsFilter.ts diff --git a/packages/apps-engine/src/server/ProxiedApp.ts b/packages/apps/src/server/ProxiedApp.ts similarity index 84% rename from packages/apps-engine/src/server/ProxiedApp.ts rename to packages/apps/src/server/ProxiedApp.ts index d4eb00bbb6666..4711913bf06b0 100644 --- a/packages/apps-engine/src/server/ProxiedApp.ts +++ b/packages/apps/src/server/ProxiedApp.ts @@ -1,12 +1,12 @@ import { inspect } from 'util'; -import * as mem from 'mem'; +import mem = require('mem'); import type { AppManager } from './AppManager'; -import { AppStatus } from '../definition/AppStatus'; -import { AppsEngineException } from '../definition/exceptions'; -import type { IAppAuthorInfo, IAppInfo } from '../definition/metadata'; -import { AppMethod } from '../definition/metadata'; +import { AppStatus } from '@rocket.chat/apps-engine/definition/AppStatus'; +import { AppsEngineException } from '@rocket.chat/apps-engine/definition/exceptions'; +import type { IAppAuthorInfo, IAppInfo } from '@rocket.chat/apps-engine/definition/metadata'; +import { AppMethod } from '@rocket.chat/apps-engine/definition/metadata'; import { InvalidInstallationError } from './errors/InvalidInstallationError'; import { AppConsole } from './logging'; import { AppLicenseValidationResult } from './marketplace/license'; @@ -18,7 +18,7 @@ import type { AppInstallationSource, IAppStorageItem } from './storage'; export class ProxiedApp { private previousStatus: AppStatus; - private latestLicenseValidationResult: AppLicenseValidationResult; + private latestLicenseValidationResult!: AppLicenseValidationResult; constructor( private readonly manager: AppManager, @@ -67,18 +67,19 @@ export class ProxiedApp { try { return await this.appRuntime.sendRequest({ method: `app:${method}`, params: args }, options); } catch (e) { - if (e.code === AppsEngineException.JSONRPC_ERROR_CODE) { - throw new AppsEngineException(e.message); + const err = e as { code: number; message: string }; + if (err.code === AppsEngineException.JSONRPC_ERROR_CODE) { + throw new AppsEngineException(err.message); } - if (e.code === JSONRPC_METHOD_NOT_FOUND) { + if (err.code === JSONRPC_METHOD_NOT_FOUND) { throw e; } // We cannot throw this error as the previous implementation swallowed those // and since the server is not prepared to handle those we might crash it if we throw // Range of JSON-RPC error codes: https://www.jsonrpc.org/specification#error_object - if (e.code >= -32999 || e.code <= -32000) { + if (err.code >= -32999 || err.code <= -32000) { // we really need to receive a logger from rocket.chat console.error('JSON-RPC error received: ', inspect(e, { depth: 10 })); } @@ -148,7 +149,7 @@ export class ProxiedApp { try { await this.manager.getSignatureManager().verifySignedApp(this.getStorageItem()); } catch (e) { - throw new InvalidInstallationError(e.message); + throw new InvalidInstallationError((e as Error).message); } } diff --git a/packages/apps-engine/src/server/accessors/ApiExtend.ts b/packages/apps/src/server/accessors/ApiExtend.ts similarity index 68% rename from packages/apps-engine/src/server/accessors/ApiExtend.ts rename to packages/apps/src/server/accessors/ApiExtend.ts index 2dc4a9c99c71a..37bd5a2680617 100644 --- a/packages/apps-engine/src/server/accessors/ApiExtend.ts +++ b/packages/apps/src/server/accessors/ApiExtend.ts @@ -1,5 +1,5 @@ -import type { IApiExtend } from '../../definition/accessors'; -import type { IApi } from '../../definition/api'; +import type { IApiExtend } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IApi } from '@rocket.chat/apps-engine/definition/api'; import type { AppApiManager } from '../managers/AppApiManager'; export class ApiExtend implements IApiExtend { diff --git a/packages/apps-engine/src/server/accessors/AppAccessors.ts b/packages/apps/src/server/accessors/AppAccessors.ts similarity index 87% rename from packages/apps-engine/src/server/accessors/AppAccessors.ts rename to packages/apps/src/server/accessors/AppAccessors.ts index 965b93c189173..2ffd38fa6b4b2 100644 --- a/packages/apps-engine/src/server/accessors/AppAccessors.ts +++ b/packages/apps/src/server/accessors/AppAccessors.ts @@ -1,5 +1,5 @@ -import type { IAppAccessors, IEnvironmentRead, IEnvironmentWrite, IHttp, IRead } from '../../definition/accessors'; -import type { IApiEndpointMetadata } from '../../definition/api'; +import type { IAppAccessors, IEnvironmentRead, IEnvironmentWrite, IHttp, IRead } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IApiEndpointMetadata } from '@rocket.chat/apps-engine/definition/api'; import type { AppManager } from '../AppManager'; import type { AppAccessorManager } from '../managers/AppAccessorManager'; import type { AppApiManager } from '../managers/AppApiManager'; diff --git a/packages/apps-engine/src/server/accessors/CloudWorkspaceRead.ts b/packages/apps/src/server/accessors/CloudWorkspaceRead.ts similarity index 65% rename from packages/apps-engine/src/server/accessors/CloudWorkspaceRead.ts rename to packages/apps/src/server/accessors/CloudWorkspaceRead.ts index 0ae0648718b88..2d858ca916e1b 100644 --- a/packages/apps-engine/src/server/accessors/CloudWorkspaceRead.ts +++ b/packages/apps/src/server/accessors/CloudWorkspaceRead.ts @@ -1,5 +1,5 @@ -import type { ICloudWorkspaceRead } from '../../definition/accessors/ICloudWorkspaceRead'; -import type { IWorkspaceToken } from '../../definition/cloud/IWorkspaceToken'; +import type { ICloudWorkspaceRead } from '@rocket.chat/apps-engine/definition/accessors/ICloudWorkspaceRead'; +import type { IWorkspaceToken } from '@rocket.chat/apps-engine/definition/cloud/IWorkspaceToken'; import type { CloudWorkspaceBridge } from '../bridges/CloudWorkspaceBridge'; export class CloudWorkspaceRead implements ICloudWorkspaceRead { diff --git a/packages/apps-engine/src/server/accessors/ConfigurationExtend.ts b/packages/apps/src/server/accessors/ConfigurationExtend.ts similarity index 93% rename from packages/apps-engine/src/server/accessors/ConfigurationExtend.ts rename to packages/apps/src/server/accessors/ConfigurationExtend.ts index 92bbb2a69acb8..a1629114efd20 100644 --- a/packages/apps-engine/src/server/accessors/ConfigurationExtend.ts +++ b/packages/apps/src/server/accessors/ConfigurationExtend.ts @@ -9,7 +9,7 @@ import type { IUIExtend, IVideoConfProvidersExtend, IOutboundCommunicationProviderExtend, -} from '../../definition/accessors'; +} from '@rocket.chat/apps-engine/definition/accessors'; export class ConfigurationExtend implements IConfigurationExtend { constructor( diff --git a/packages/apps-engine/src/server/accessors/ConfigurationModify.ts b/packages/apps/src/server/accessors/ConfigurationModify.ts similarity index 77% rename from packages/apps-engine/src/server/accessors/ConfigurationModify.ts rename to packages/apps/src/server/accessors/ConfigurationModify.ts index a7f1a4511fd7e..4e7b302143f1f 100644 --- a/packages/apps-engine/src/server/accessors/ConfigurationModify.ts +++ b/packages/apps/src/server/accessors/ConfigurationModify.ts @@ -1,4 +1,4 @@ -import type { IConfigurationModify, ISchedulerModify, IServerSettingsModify, ISlashCommandsModify } from '../../definition/accessors'; +import type { IConfigurationModify, ISchedulerModify, IServerSettingsModify, ISlashCommandsModify } from '@rocket.chat/apps-engine/definition/accessors'; export class ConfigurationModify implements IConfigurationModify { constructor( diff --git a/packages/apps-engine/src/server/accessors/ContactCreator.ts b/packages/apps/src/server/accessors/ContactCreator.ts similarity index 77% rename from packages/apps-engine/src/server/accessors/ContactCreator.ts rename to packages/apps/src/server/accessors/ContactCreator.ts index 614f0c07d5d4e..238a5335c9354 100644 --- a/packages/apps-engine/src/server/accessors/ContactCreator.ts +++ b/packages/apps/src/server/accessors/ContactCreator.ts @@ -1,5 +1,5 @@ -import type { IContactCreator } from '../../definition/accessors/IContactCreator'; -import type { ILivechatContact } from '../../definition/livechat'; +import type { IContactCreator } from '@rocket.chat/apps-engine/definition/accessors/IContactCreator'; +import type { ILivechatContact } from '@rocket.chat/apps-engine/definition/livechat'; import type { AppBridges } from '../bridges'; export class ContactCreator implements IContactCreator { diff --git a/packages/apps-engine/src/server/accessors/ContactRead.ts b/packages/apps/src/server/accessors/ContactRead.ts similarity index 56% rename from packages/apps-engine/src/server/accessors/ContactRead.ts rename to packages/apps/src/server/accessors/ContactRead.ts index 64ec48bf28e74..49032cb53564b 100644 --- a/packages/apps-engine/src/server/accessors/ContactRead.ts +++ b/packages/apps/src/server/accessors/ContactRead.ts @@ -1,5 +1,5 @@ -import type { IContactRead } from '../../definition/accessors/IContactRead'; -import type { ILivechatContact } from '../../definition/livechat'; +import type { IContactRead } from '@rocket.chat/apps-engine/definition/accessors/IContactRead'; +import type { ILivechatContact } from '@rocket.chat/apps-engine/definition/livechat'; import type { AppBridges } from '../bridges'; export class ContactRead implements IContactRead { @@ -8,7 +8,7 @@ export class ContactRead implements IContactRead { private readonly appId: string, ) {} - public getById(contactId: ILivechatContact['_id']): Promise { - return this.bridges.getContactBridge().doGetById(contactId, this.appId); + public getById(contactId: ILivechatContact['_id']): Promise { + return this.bridges.getContactBridge().doGetById(contactId, this.appId) as Promise; } } diff --git a/packages/apps-engine/src/server/accessors/DiscussionBuilder.ts b/packages/apps/src/server/accessors/DiscussionBuilder.ts similarity index 58% rename from packages/apps-engine/src/server/accessors/DiscussionBuilder.ts rename to packages/apps/src/server/accessors/DiscussionBuilder.ts index fa1a903168700..d357cd60758cc 100644 --- a/packages/apps-engine/src/server/accessors/DiscussionBuilder.ts +++ b/packages/apps/src/server/accessors/DiscussionBuilder.ts @@ -1,16 +1,16 @@ import { RoomBuilder } from './RoomBuilder'; -import type { IDiscussionBuilder } from '../../definition/accessors'; -import type { IMessage } from '../../definition/messages'; -import { RocketChatAssociationModel } from '../../definition/metadata'; -import { RoomType } from '../../definition/rooms'; -import type { IRoom } from '../../definition/rooms/IRoom'; +import type { IDiscussionBuilder } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IMessage } from '@rocket.chat/apps-engine/definition/messages'; +import { RocketChatAssociationModel } from '@rocket.chat/apps-engine/definition/metadata'; +import { RoomType } from '@rocket.chat/apps-engine/definition/rooms'; +import type { IRoom } from '@rocket.chat/apps-engine/definition/rooms/IRoom'; export class DiscussionBuilder extends RoomBuilder implements IDiscussionBuilder { - public kind: RocketChatAssociationModel.DISCUSSION; + public override kind: RocketChatAssociationModel.DISCUSSION; - private reply: string; + private reply!: string; - private parentMessage: IMessage; + private parentMessage!: IMessage; constructor(data?: Partial) { super(data); @@ -24,7 +24,7 @@ export class DiscussionBuilder extends RoomBuilder implements IDiscussionBuilder } public getParentRoom(): IRoom { - return this.room.parentRoom; + return this.room.parentRoom as IRoom; } public setReply(reply: string): IDiscussionBuilder { diff --git a/packages/apps-engine/src/server/accessors/EmailCreator.ts b/packages/apps/src/server/accessors/EmailCreator.ts similarity index 65% rename from packages/apps-engine/src/server/accessors/EmailCreator.ts rename to packages/apps/src/server/accessors/EmailCreator.ts index b0d5e136b72f2..5c384c49b351c 100644 --- a/packages/apps-engine/src/server/accessors/EmailCreator.ts +++ b/packages/apps/src/server/accessors/EmailCreator.ts @@ -1,5 +1,5 @@ -import type { IEmailCreator } from '../../definition/accessors/IEmailCreator'; -import type { IEmail } from '../../definition/email'; +import type { IEmailCreator } from '@rocket.chat/apps-engine/definition/accessors/IEmailCreator'; +import type { IEmail } from '@rocket.chat/apps-engine/definition/email'; import type { AppBridges } from '../bridges'; export class EmailCreator implements IEmailCreator { diff --git a/packages/apps-engine/src/server/accessors/EnvironmentRead.ts b/packages/apps/src/server/accessors/EnvironmentRead.ts similarity index 86% rename from packages/apps-engine/src/server/accessors/EnvironmentRead.ts rename to packages/apps/src/server/accessors/EnvironmentRead.ts index 563499f9f0a0f..579b8b6db151f 100644 --- a/packages/apps-engine/src/server/accessors/EnvironmentRead.ts +++ b/packages/apps/src/server/accessors/EnvironmentRead.ts @@ -1,4 +1,4 @@ -import type { IEnvironmentalVariableRead, IEnvironmentRead, IServerSettingRead, ISettingRead } from '../../definition/accessors'; +import type { IEnvironmentalVariableRead, IEnvironmentRead, IServerSettingRead, ISettingRead } from '@rocket.chat/apps-engine/definition/accessors'; export class EnvironmentRead implements IEnvironmentRead { constructor( diff --git a/packages/apps-engine/src/server/accessors/EnvironmentWrite.ts b/packages/apps/src/server/accessors/EnvironmentWrite.ts similarity index 86% rename from packages/apps-engine/src/server/accessors/EnvironmentWrite.ts rename to packages/apps/src/server/accessors/EnvironmentWrite.ts index 9f31805c1b543..d13bc5b834f64 100644 --- a/packages/apps-engine/src/server/accessors/EnvironmentWrite.ts +++ b/packages/apps/src/server/accessors/EnvironmentWrite.ts @@ -1,4 +1,4 @@ -import type { IEnvironmentWrite, IServerSettingUpdater, ISettingUpdater } from '../../definition/accessors'; +import type { IEnvironmentWrite, IServerSettingUpdater, ISettingUpdater } from '@rocket.chat/apps-engine/definition/accessors'; export class EnvironmentWrite implements IEnvironmentWrite { constructor( diff --git a/packages/apps-engine/src/server/accessors/EnvironmentalVariableRead.ts b/packages/apps/src/server/accessors/EnvironmentalVariableRead.ts similarity index 75% rename from packages/apps-engine/src/server/accessors/EnvironmentalVariableRead.ts rename to packages/apps/src/server/accessors/EnvironmentalVariableRead.ts index 4ac5af3f878aa..0916c6512a88e 100644 --- a/packages/apps-engine/src/server/accessors/EnvironmentalVariableRead.ts +++ b/packages/apps/src/server/accessors/EnvironmentalVariableRead.ts @@ -1,4 +1,4 @@ -import type { IEnvironmentalVariableRead } from '../../definition/accessors'; +import type { IEnvironmentalVariableRead } from '@rocket.chat/apps-engine/definition/accessors'; import type { EnvironmentalVariableBridge } from '../bridges'; export class EnvironmentalVariableRead implements IEnvironmentalVariableRead { @@ -8,7 +8,7 @@ export class EnvironmentalVariableRead implements IEnvironmentalVariableRead { ) {} public getValueByName(envVarName: string): Promise { - return this.bridge.doGetValueByName(envVarName, this.appId); + return this.bridge.doGetValueByName(envVarName, this.appId) as Promise; } public isReadable(envVarName: string): Promise { diff --git a/packages/apps-engine/src/server/accessors/ExperimentalRead.ts b/packages/apps/src/server/accessors/ExperimentalRead.ts similarity index 72% rename from packages/apps-engine/src/server/accessors/ExperimentalRead.ts rename to packages/apps/src/server/accessors/ExperimentalRead.ts index 20922502163ec..3219e1dee62b5 100644 --- a/packages/apps-engine/src/server/accessors/ExperimentalRead.ts +++ b/packages/apps/src/server/accessors/ExperimentalRead.ts @@ -1,4 +1,4 @@ -import type { IExperimentalRead } from '../../definition/accessors'; +import type { IExperimentalRead } from '@rocket.chat/apps-engine/definition/accessors'; import type { ExperimentalBridge } from '../bridges'; export class ExperimentalRead implements IExperimentalRead { diff --git a/packages/apps-engine/src/server/accessors/ExternalComponentsExtend.ts b/packages/apps/src/server/accessors/ExternalComponentsExtend.ts similarity index 68% rename from packages/apps-engine/src/server/accessors/ExternalComponentsExtend.ts rename to packages/apps/src/server/accessors/ExternalComponentsExtend.ts index c4c7c61fe3fde..6942e199d7205 100644 --- a/packages/apps-engine/src/server/accessors/ExternalComponentsExtend.ts +++ b/packages/apps/src/server/accessors/ExternalComponentsExtend.ts @@ -1,5 +1,5 @@ -import type { IExternalComponentsExtend } from '../../definition/accessors'; -import type { IExternalComponent } from '../../definition/externalComponent/IExternalComponent'; +import type { IExternalComponentsExtend } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IExternalComponent } from '@rocket.chat/apps-engine/definition/externalComponent/IExternalComponent'; import type { AppExternalComponentManager } from '../managers/AppExternalComponentManager'; export class ExternalComponentsExtend implements IExternalComponentsExtend { diff --git a/packages/apps-engine/src/server/accessors/Http.ts b/packages/apps/src/server/accessors/Http.ts similarity index 87% rename from packages/apps-engine/src/server/accessors/Http.ts rename to packages/apps/src/server/accessors/Http.ts index a10ac6082417b..b6061f0ac7824 100644 --- a/packages/apps-engine/src/server/accessors/Http.ts +++ b/packages/apps/src/server/accessors/Http.ts @@ -1,5 +1,5 @@ -import type { IHttp, IHttpExtend, IHttpRequest, IHttpResponse } from '../../definition/accessors'; -import { RequestMethod } from '../../definition/accessors'; +import type { IHttp, IHttpExtend, IHttpRequest, IHttpResponse } from '@rocket.chat/apps-engine/definition/accessors'; +import { RequestMethod } from '@rocket.chat/apps-engine/definition/accessors'; import type { AppBridges } from '../bridges/AppBridges'; import type { AppAccessorManager } from '../managers/AppAccessorManager'; @@ -39,8 +39,8 @@ export class Http implements IHttp { } this.httpExtender.getDefaultHeaders().forEach((value: string, key: string) => { - if (typeof request.headers[key] !== 'string') { - request.headers[key] = value; + if (typeof request.headers![key] !== 'string') { + request.headers![key] = value; } }); @@ -49,8 +49,8 @@ export class Http implements IHttp { } this.httpExtender.getDefaultParams().forEach((value: string, key: string) => { - if (typeof request.params[key] !== 'string') { - request.params[key] = value; + if (typeof request.params![key] !== 'string') { + request.params![key] = value; } }); diff --git a/packages/apps-engine/src/server/accessors/HttpExtend.ts b/packages/apps/src/server/accessors/HttpExtend.ts similarity index 95% rename from packages/apps-engine/src/server/accessors/HttpExtend.ts rename to packages/apps/src/server/accessors/HttpExtend.ts index d25aa7ba1454c..98311a633577b 100644 --- a/packages/apps-engine/src/server/accessors/HttpExtend.ts +++ b/packages/apps/src/server/accessors/HttpExtend.ts @@ -1,4 +1,4 @@ -import type { IHttpExtend, IHttpPreRequestHandler, IHttpPreResponseHandler } from '../../definition/accessors'; +import type { IHttpExtend, IHttpPreRequestHandler, IHttpPreResponseHandler } from '@rocket.chat/apps-engine/definition/accessors'; export class HttpExtend implements IHttpExtend { private headers: Map; diff --git a/packages/apps-engine/src/server/accessors/LivechatCreator.ts b/packages/apps/src/server/accessors/LivechatCreator.ts similarity index 74% rename from packages/apps-engine/src/server/accessors/LivechatCreator.ts rename to packages/apps/src/server/accessors/LivechatCreator.ts index d03376d7185b0..6e386ecc83002 100644 --- a/packages/apps-engine/src/server/accessors/LivechatCreator.ts +++ b/packages/apps/src/server/accessors/LivechatCreator.ts @@ -1,10 +1,10 @@ import { randomBytes } from 'crypto'; -import type { ILivechatCreator } from '../../definition/accessors'; -import type { IExtraRoomParams } from '../../definition/accessors/ILivechatCreator'; -import type { ILivechatRoom } from '../../definition/livechat/ILivechatRoom'; -import type { IVisitorExternalIdentifier, IVisitor, ResolveVisitorContactData } from '../../definition/livechat/IVisitor'; -import type { IUser } from '../../definition/users'; +import type { ILivechatCreator } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IExtraRoomParams } from '@rocket.chat/apps-engine/definition/accessors/ILivechatCreator'; +import type { ILivechatRoom } from '@rocket.chat/apps-engine/definition/livechat/ILivechatRoom'; +import type { IVisitorExternalIdentifier, IVisitor, ResolveVisitorContactData } from '@rocket.chat/apps-engine/definition/livechat/IVisitor'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import type { AppBridges } from '../bridges'; export class LivechatCreator implements ILivechatCreator { diff --git a/packages/apps-engine/src/server/accessors/LivechatMessageBuilder.ts b/packages/apps/src/server/accessors/LivechatMessageBuilder.ts similarity index 75% rename from packages/apps-engine/src/server/accessors/LivechatMessageBuilder.ts rename to packages/apps/src/server/accessors/LivechatMessageBuilder.ts index d7e68bc698d31..d1d2ab97a5a93 100644 --- a/packages/apps-engine/src/server/accessors/LivechatMessageBuilder.ts +++ b/packages/apps/src/server/accessors/LivechatMessageBuilder.ts @@ -1,12 +1,12 @@ import { MessageBuilder } from './MessageBuilder'; -import type { ILivechatMessageBuilder, IMessageBuilder } from '../../definition/accessors'; -import type { ILivechatMessage } from '../../definition/livechat/ILivechatMessage'; -import type { IVisitor } from '../../definition/livechat/IVisitor'; -import type { IMessage, IMessageAttachment } from '../../definition/messages'; -import { RocketChatAssociationModel } from '../../definition/metadata'; -import type { IRoom } from '../../definition/rooms'; -import { RoomType } from '../../definition/rooms'; -import type { IUser } from '../../definition/users'; +import type { ILivechatMessageBuilder, IMessageBuilder } from '@rocket.chat/apps-engine/definition/accessors'; +import type { ILivechatMessage } from '@rocket.chat/apps-engine/definition/livechat/ILivechatMessage'; +import type { IVisitor } from '@rocket.chat/apps-engine/definition/livechat/IVisitor'; +import type { IMessage, IMessageAttachment } from '@rocket.chat/apps-engine/definition/messages'; +import { RocketChatAssociationModel } from '@rocket.chat/apps-engine/definition/metadata'; +import type { IRoom } from '@rocket.chat/apps-engine/definition/rooms'; +import { RoomType } from '@rocket.chat/apps-engine/definition/rooms'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; export class LivechatMessageBuilder implements ILivechatMessageBuilder { public kind: RocketChatAssociationModel.LIVECHAT_MESSAGE; @@ -42,7 +42,7 @@ export class LivechatMessageBuilder implements ILivechatMessageBuilder { } public getSender(): IUser { - return this.msg.sender; + return this.msg.sender as IUser; } public setText(text: string): ILivechatMessageBuilder { @@ -51,7 +51,7 @@ export class LivechatMessageBuilder implements ILivechatMessageBuilder { } public getText(): string { - return this.msg.text; + return this.msg.text as string; } public setEmojiAvatar(emoji: string): ILivechatMessageBuilder { @@ -60,7 +60,7 @@ export class LivechatMessageBuilder implements ILivechatMessageBuilder { } public getEmojiAvatar(): string { - return this.msg.emoji; + return this.msg.emoji as string; } public setAvatarUrl(avatarUrl: string): ILivechatMessageBuilder { @@ -69,7 +69,7 @@ export class LivechatMessageBuilder implements ILivechatMessageBuilder { } public getAvatarUrl(): string { - return this.msg.avatarUrl; + return this.msg.avatarUrl as string; } public setUsernameAlias(alias: string): ILivechatMessageBuilder { @@ -78,7 +78,7 @@ export class LivechatMessageBuilder implements ILivechatMessageBuilder { } public getUsernameAlias(): string { - return this.msg.alias; + return this.msg.alias as string; } public addAttachment(attachment: IMessageAttachment): ILivechatMessageBuilder { @@ -96,7 +96,7 @@ export class LivechatMessageBuilder implements ILivechatMessageBuilder { } public getAttachments(): Array { - return this.msg.attachments; + return this.msg.attachments as Array; } public replaceAttachment(position: number, attachment: IMessageAttachment): ILivechatMessageBuilder { @@ -132,7 +132,7 @@ export class LivechatMessageBuilder implements ILivechatMessageBuilder { } public getEditor(): IUser { - return this.msg.editor; + return this.msg.editor as IUser; } public setGroupable(groupable: boolean): ILivechatMessageBuilder { @@ -141,7 +141,7 @@ export class LivechatMessageBuilder implements ILivechatMessageBuilder { } public getGroupable(): boolean { - return this.msg.groupable; + return this.msg.groupable as boolean; } public setParseUrls(parseUrls: boolean): ILivechatMessageBuilder { @@ -150,7 +150,7 @@ export class LivechatMessageBuilder implements ILivechatMessageBuilder { } public getParseUrls(): boolean { - return this.msg.parseUrls; + return this.msg.parseUrls as boolean; } public setToken(token: string): ILivechatMessageBuilder { @@ -159,18 +159,18 @@ export class LivechatMessageBuilder implements ILivechatMessageBuilder { } public getToken(): string { - return this.msg.token; + return this.msg.token as string; } public setVisitor(visitor: IVisitor): ILivechatMessageBuilder { this.msg.visitor = visitor; - delete this.msg.sender; + this.msg.sender = undefined as unknown as IUser; return this; } public getVisitor(): IVisitor { - return this.msg.visitor; + return this.msg.visitor as IVisitor; } public getMessage(): ILivechatMessage { diff --git a/packages/apps-engine/src/server/accessors/LivechatRead.ts b/packages/apps/src/server/accessors/LivechatRead.ts similarity index 83% rename from packages/apps-engine/src/server/accessors/LivechatRead.ts rename to packages/apps/src/server/accessors/LivechatRead.ts index 3ee3b6925e154..5d934102a0198 100644 --- a/packages/apps-engine/src/server/accessors/LivechatRead.ts +++ b/packages/apps/src/server/accessors/LivechatRead.ts @@ -1,8 +1,8 @@ -import type { ILivechatRead } from '../../definition/accessors/ILivechatRead'; -import type { IDepartment } from '../../definition/livechat'; -import type { ILivechatRoom } from '../../definition/livechat/ILivechatRoom'; -import type { IVisitor } from '../../definition/livechat/IVisitor'; -import type { IMessage } from '../../definition/messages'; +import type { ILivechatRead } from '@rocket.chat/apps-engine/definition/accessors/ILivechatRead'; +import type { IDepartment } from '@rocket.chat/apps-engine/definition/livechat'; +import type { ILivechatRoom } from '@rocket.chat/apps-engine/definition/livechat/ILivechatRoom'; +import type { IVisitor } from '@rocket.chat/apps-engine/definition/livechat/IVisitor'; +import type { IMessage } from '@rocket.chat/apps-engine/definition/messages'; import type { LivechatBridge } from '../bridges/LivechatBridge'; export class LivechatRead implements ILivechatRead { @@ -32,7 +32,7 @@ export class LivechatRead implements ILivechatRead { } public getLivechatRooms(visitor: IVisitor, departmentId?: string): Promise> { - return this.livechatBridge.doFindRooms(visitor, departmentId, this.appId); + return this.livechatBridge.doFindRooms(visitor, departmentId ?? null, this.appId); } public getLivechatTotalOpenRoomsByAgentId(agentId: string): Promise { diff --git a/packages/apps-engine/src/server/accessors/LivechatUpdater.ts b/packages/apps/src/server/accessors/LivechatUpdater.ts similarity index 83% rename from packages/apps-engine/src/server/accessors/LivechatUpdater.ts rename to packages/apps/src/server/accessors/LivechatUpdater.ts index e7aa686084185..5e7c349e427fc 100644 --- a/packages/apps-engine/src/server/accessors/LivechatUpdater.ts +++ b/packages/apps/src/server/accessors/LivechatUpdater.ts @@ -1,6 +1,6 @@ -import type { ILivechatUpdater } from '../../definition/accessors'; -import type { ILivechatRoom, ILivechatTransferData, IVisitor, IVisitorExternalIdentifier } from '../../definition/livechat'; -import type { IUser } from '../../definition/users'; +import type { ILivechatUpdater } from '@rocket.chat/apps-engine/definition/accessors'; +import type { ILivechatRoom, ILivechatTransferData, IVisitor, IVisitorExternalIdentifier } from '@rocket.chat/apps-engine/definition/livechat'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import type { AppBridges } from '../bridges'; export class LivechatUpdater implements ILivechatUpdater { diff --git a/packages/apps-engine/src/server/accessors/MessageBuilder.ts b/packages/apps/src/server/accessors/MessageBuilder.ts similarity index 68% rename from packages/apps-engine/src/server/accessors/MessageBuilder.ts rename to packages/apps/src/server/accessors/MessageBuilder.ts index ff6cdf69f9164..d3760359fe189 100644 --- a/packages/apps-engine/src/server/accessors/MessageBuilder.ts +++ b/packages/apps/src/server/accessors/MessageBuilder.ts @@ -1,12 +1,12 @@ import type { LayoutBlock } from '@rocket.chat/ui-kit'; -import type { IMessageBuilder } from '../../definition/accessors'; -import type { IMessage, IMessageAttachment } from '../../definition/messages'; -import { RocketChatAssociationModel } from '../../definition/metadata'; -import type { IRoom } from '../../definition/rooms'; -import type { IBlock } from '../../definition/uikit'; -import { BlockBuilder } from '../../definition/uikit'; -import type { IUser } from '../../definition/users'; +import type { IMessageBuilder } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IMessage, IMessageAttachment } from '@rocket.chat/apps-engine/definition/messages'; +import { RocketChatAssociationModel } from '@rocket.chat/apps-engine/definition/metadata'; +import type { IRoom } from '@rocket.chat/apps-engine/definition/rooms'; +import type { IBlock } from '@rocket.chat/apps-engine/definition/uikit'; +import { BlockBuilder } from '@rocket.chat/apps-engine/definition/uikit'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; export class MessageBuilder implements IMessageBuilder { public kind: RocketChatAssociationModel.MESSAGE; @@ -22,7 +22,7 @@ export class MessageBuilder implements IMessageBuilder { delete data.id; this.msg = data; - return this; + return this as IMessageBuilder; } public setUpdateData(data: IMessage, editor: IUser): IMessageBuilder { @@ -30,22 +30,22 @@ export class MessageBuilder implements IMessageBuilder { this.msg.editor = editor; this.msg.editedAt = new Date(); - return this; + return this as IMessageBuilder; } public setThreadId(threadId: string): IMessageBuilder { this.msg.threadId = threadId; - return this; + return this as IMessageBuilder; } public getThreadId(): string { - return this.msg.threadId; + return this.msg.threadId as string; } public setRoom(room: IRoom): IMessageBuilder { this.msg.room = room; - return this; + return this as IMessageBuilder; } public getRoom(): IRoom { @@ -54,47 +54,47 @@ export class MessageBuilder implements IMessageBuilder { public setSender(sender: IUser): IMessageBuilder { this.msg.sender = sender; - return this; + return this as IMessageBuilder; } public getSender(): IUser { - return this.msg.sender; + return this.msg.sender as IUser; } public setText(text: string): IMessageBuilder { this.msg.text = text; - return this; + return this as IMessageBuilder; } public getText(): string { - return this.msg.text; + return this.msg.text as string; } public setEmojiAvatar(emoji: string): IMessageBuilder { this.msg.emoji = emoji; - return this; + return this as IMessageBuilder; } public getEmojiAvatar(): string { - return this.msg.emoji; + return this.msg.emoji as string; } public setAvatarUrl(avatarUrl: string): IMessageBuilder { this.msg.avatarUrl = avatarUrl; - return this; + return this as IMessageBuilder; } public getAvatarUrl(): string { - return this.msg.avatarUrl; + return this.msg.avatarUrl as string; } public setUsernameAlias(alias: string): IMessageBuilder { this.msg.alias = alias; - return this; + return this as IMessageBuilder; } public getUsernameAlias(): string { - return this.msg.alias; + return this.msg.alias as string; } public addAttachment(attachment: IMessageAttachment): IMessageBuilder { @@ -103,16 +103,16 @@ export class MessageBuilder implements IMessageBuilder { } this.msg.attachments.push(attachment); - return this; + return this as IMessageBuilder; } public setAttachments(attachments: Array): IMessageBuilder { this.msg.attachments = attachments; - return this; + return this as IMessageBuilder; } public getAttachments(): Array { - return this.msg.attachments; + return this.msg.attachments as Array; } public replaceAttachment(position: number, attachment: IMessageAttachment): IMessageBuilder { @@ -125,7 +125,7 @@ export class MessageBuilder implements IMessageBuilder { } this.msg.attachments[position] = attachment; - return this; + return this as IMessageBuilder; } public removeAttachment(position: number): IMessageBuilder { @@ -139,34 +139,34 @@ export class MessageBuilder implements IMessageBuilder { this.msg.attachments.splice(position, 1); - return this; + return this as IMessageBuilder; } public setEditor(user: IUser): IMessageBuilder { this.msg.editor = user; - return this; + return this as IMessageBuilder; } public getEditor(): IUser { - return this.msg.editor; + return this.msg.editor as IUser; } public setGroupable(groupable: boolean): IMessageBuilder { this.msg.groupable = groupable; - return this; + return this as IMessageBuilder; } public getGroupable(): boolean { - return this.msg.groupable; + return this.msg.groupable as boolean; } public setParseUrls(parseUrls: boolean): IMessageBuilder { this.msg.parseUrls = parseUrls; - return this; + return this as IMessageBuilder; } public getParseUrls(): boolean { - return this.msg.parseUrls; + return this.msg.parseUrls as boolean; } public getMessage(): IMessage { @@ -177,7 +177,7 @@ export class MessageBuilder implements IMessageBuilder { return this.msg; } - public addBlocks(blocks: BlockBuilder | Array) { + public addBlocks(blocks: BlockBuilder | Array): IMessageBuilder { if (!Array.isArray(this.msg.blocks)) { this.msg.blocks = []; } @@ -188,21 +188,21 @@ export class MessageBuilder implements IMessageBuilder { this.msg.blocks.push(...blocks); } - return this; + return this as IMessageBuilder; } - public setBlocks(blocks: BlockBuilder | Array) { + public setBlocks(blocks: BlockBuilder | Array): IMessageBuilder { if (blocks instanceof BlockBuilder) { this.msg.blocks = blocks.getBlocks(); } else { this.msg.blocks = blocks; } - return this; + return this as IMessageBuilder; } - public getBlocks() { - return this.msg.blocks; + public getBlocks(): Array { + return this.msg.blocks as Array; } public addCustomField(key: string, value: any): IMessageBuilder { @@ -219,6 +219,6 @@ export class MessageBuilder implements IMessageBuilder { } this.msg.customFields[key] = value; - return this; + return this as IMessageBuilder; } } diff --git a/packages/apps-engine/src/server/accessors/MessageExtender.ts b/packages/apps/src/server/accessors/MessageExtender.ts similarity index 73% rename from packages/apps-engine/src/server/accessors/MessageExtender.ts rename to packages/apps/src/server/accessors/MessageExtender.ts index eb1b9a267800c..c43039c2f669e 100644 --- a/packages/apps-engine/src/server/accessors/MessageExtender.ts +++ b/packages/apps/src/server/accessors/MessageExtender.ts @@ -1,6 +1,6 @@ -import type { IMessageExtender } from '../../definition/accessors'; -import type { IMessage, IMessageAttachment } from '../../definition/messages'; -import { RocketChatAssociationModel } from '../../definition/metadata'; +import type { IMessageExtender } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IMessage, IMessageAttachment } from '@rocket.chat/apps-engine/definition/messages'; +import { RocketChatAssociationModel } from '@rocket.chat/apps-engine/definition/metadata'; import { Utilities } from '../misc/Utilities'; export class MessageExtender implements IMessageExtender { @@ -33,13 +33,13 @@ export class MessageExtender implements IMessageExtender { } public addAttachment(attachment: IMessageAttachment): IMessageExtender { - this.msg.attachments.push(attachment); + this.msg.attachments!.push(attachment); return this; } public addAttachments(attachments: Array): IMessageExtender { - this.msg.attachments = this.msg.attachments.concat(attachments); + this.msg.attachments = this.msg.attachments!.concat(attachments); return this; } diff --git a/packages/apps-engine/src/server/accessors/MessageRead.ts b/packages/apps/src/server/accessors/MessageRead.ts similarity index 60% rename from packages/apps-engine/src/server/accessors/MessageRead.ts rename to packages/apps/src/server/accessors/MessageRead.ts index 2a6528d646660..c965f46d7ccfb 100644 --- a/packages/apps-engine/src/server/accessors/MessageRead.ts +++ b/packages/apps/src/server/accessors/MessageRead.ts @@ -1,7 +1,7 @@ -import type { IMessageRead } from '../../definition/accessors'; -import type { IMessage } from '../../definition/messages'; -import type { IRoom } from '../../definition/rooms'; -import type { IUser } from '../../definition/users'; +import type { IMessageRead } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IMessage } from '@rocket.chat/apps-engine/definition/messages'; +import type { IRoom } from '@rocket.chat/apps-engine/definition/rooms'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import type { MessageBridge } from '../bridges/MessageBridge'; export class MessageRead implements IMessageRead { @@ -18,17 +18,17 @@ export class MessageRead implements IMessageRead { const msg = await this.messageBridge.doGetById(messageId, this.appId); if (!msg) { - return undefined; + return undefined as unknown as IUser; } - return msg.sender; + return msg.sender as IUser; } public async getRoom(messageId: string): Promise { const msg = await this.messageBridge.doGetById(messageId, this.appId); if (!msg) { - return undefined; + return undefined as unknown as IRoom; } return msg.room; diff --git a/packages/apps-engine/src/server/accessors/ModerationModify.ts b/packages/apps/src/server/accessors/ModerationModify.ts similarity index 75% rename from packages/apps-engine/src/server/accessors/ModerationModify.ts rename to packages/apps/src/server/accessors/ModerationModify.ts index 6b94cdd70425d..f5d21eaf5d773 100644 --- a/packages/apps-engine/src/server/accessors/ModerationModify.ts +++ b/packages/apps/src/server/accessors/ModerationModify.ts @@ -1,12 +1,12 @@ -import type { IModerationModify } from '../../definition/accessors'; -import type { IMessage } from '../../definition/messages'; -import type { IUser } from '../../definition/users'; +import type { IModerationModify } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IMessage } from '@rocket.chat/apps-engine/definition/messages'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import type { ModerationBridge } from '../bridges'; export class ModerationModify implements IModerationModify { constructor( private moderationBridge: ModerationBridge, - appId: string, + _appId: string, ) {} public report(messageId: string, description: string, userId: string, appId: string): Promise { diff --git a/packages/apps-engine/src/server/accessors/Modify.ts b/packages/apps/src/server/accessors/Modify.ts similarity index 93% rename from packages/apps-engine/src/server/accessors/Modify.ts rename to packages/apps/src/server/accessors/Modify.ts index 604bd5ea325a2..b16c44ce64b3f 100644 --- a/packages/apps-engine/src/server/accessors/Modify.ts +++ b/packages/apps/src/server/accessors/Modify.ts @@ -7,8 +7,8 @@ import type { INotifier, ISchedulerModify, IUIController, -} from '../../definition/accessors'; -import type { IOAuthAppsModify } from '../../definition/accessors/IOAuthAppsModify'; +} from '@rocket.chat/apps-engine/definition/accessors'; +import type { IOAuthAppsModify } from '@rocket.chat/apps-engine/definition/accessors/IOAuthAppsModify'; import type { AppBridges } from '../bridges'; import { ModerationModify } from './ModerationModify'; import { ModifyCreator } from './ModifyCreator'; diff --git a/packages/apps-engine/src/server/accessors/ModifyCreator.ts b/packages/apps/src/server/accessors/ModifyCreator.ts similarity index 86% rename from packages/apps-engine/src/server/accessors/ModifyCreator.ts rename to packages/apps/src/server/accessors/ModifyCreator.ts index fe7bbdcb5fc8d..3b80485618f1a 100644 --- a/packages/apps-engine/src/server/accessors/ModifyCreator.ts +++ b/packages/apps/src/server/accessors/ModifyCreator.ts @@ -18,18 +18,18 @@ import type { IUploadCreator, IUserBuilder, IVideoConferenceBuilder, -} from '../../definition/accessors'; -import type { IContactCreator } from '../../definition/accessors/IContactCreator'; -import type { IEmailCreator } from '../../definition/accessors/IEmailCreator'; -import type { ILivechatMessage } from '../../definition/livechat/ILivechatMessage'; -import type { IMessage } from '../../definition/messages'; -import { RocketChatAssociationModel } from '../../definition/metadata'; -import type { IRoom } from '../../definition/rooms'; -import { RoomType } from '../../definition/rooms'; -import { BlockBuilder } from '../../definition/uikit'; -import type { IBotUser } from '../../definition/users/IBotUser'; -import { UserType } from '../../definition/users/UserType'; -import type { AppVideoConference } from '../../definition/videoConferences'; +} from '@rocket.chat/apps-engine/definition/accessors'; +import type { IContactCreator } from '@rocket.chat/apps-engine/definition/accessors/IContactCreator'; +import type { IEmailCreator } from '@rocket.chat/apps-engine/definition/accessors/IEmailCreator'; +import type { ILivechatMessage } from '@rocket.chat/apps-engine/definition/livechat/ILivechatMessage'; +import type { IMessage } from '@rocket.chat/apps-engine/definition/messages'; +import { RocketChatAssociationModel } from '@rocket.chat/apps-engine/definition/metadata'; +import type { IRoom } from '@rocket.chat/apps-engine/definition/rooms'; +import { RoomType } from '@rocket.chat/apps-engine/definition/rooms'; +import { BlockBuilder } from '@rocket.chat/apps-engine/definition/uikit'; +import type { IBotUser } from '@rocket.chat/apps-engine/definition/users/IBotUser'; +import { UserType } from '@rocket.chat/apps-engine/definition/users/UserType'; +import type { AppVideoConference } from '@rocket.chat/apps-engine/definition/videoConferences'; import type { AppBridges } from '../bridges'; import { UIHelper } from '../misc/UIHelper'; @@ -93,7 +93,7 @@ export class ModifyCreator implements IModifyCreator { public startRoom(data?: IRoom): IRoomBuilder { if (data) { - delete data.id; + (data as Partial).id = undefined; } return new RoomBuilder(data); @@ -101,7 +101,7 @@ export class ModifyCreator implements IModifyCreator { public startDiscussion(data?: Partial): IDiscussionBuilder { if (data) { - delete data.id; + data.id = undefined; } return new DiscussionBuilder(data); @@ -196,7 +196,7 @@ export class ModifyCreator implements IModifyCreator { private _finishRoom(builder: IRoomBuilder): Promise { const result = builder.getRoom(); - delete result.id; + (result as Partial).id = undefined; if (!result.type) { throw new Error('Invalid type assigned to the room.'); @@ -225,7 +225,7 @@ export class ModifyCreator implements IModifyCreator { private _finishDiscussion(builder: IDiscussionBuilder): Promise { const room = builder.getRoom(); - delete room.id; + (room as Partial).id = undefined; if (!room.creator?.id) { throw new Error('Invalid creator assigned to the discussion.'); diff --git a/packages/apps-engine/src/server/accessors/ModifyDeleter.ts b/packages/apps/src/server/accessors/ModifyDeleter.ts similarity index 83% rename from packages/apps-engine/src/server/accessors/ModifyDeleter.ts rename to packages/apps/src/server/accessors/ModifyDeleter.ts index 51b2778313dbb..a7dedc3d1eb99 100644 --- a/packages/apps-engine/src/server/accessors/ModifyDeleter.ts +++ b/packages/apps/src/server/accessors/ModifyDeleter.ts @@ -1,6 +1,6 @@ -import type { IModifyDeleter } from '../../definition/accessors'; -import type { IMessage } from '../../definition/messages'; -import type { IUser, UserType } from '../../definition/users'; +import type { IModifyDeleter } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IMessage } from '@rocket.chat/apps-engine/definition/messages'; +import type { IUser, UserType } from '@rocket.chat/apps-engine/definition/users'; import type { AppBridges } from '../bridges'; export class ModifyDeleter implements IModifyDeleter { diff --git a/packages/apps-engine/src/server/accessors/ModifyExtender.ts b/packages/apps/src/server/accessors/ModifyExtender.ts similarity index 79% rename from packages/apps-engine/src/server/accessors/ModifyExtender.ts rename to packages/apps/src/server/accessors/ModifyExtender.ts index 1c276e6a01419..95a81abc2e307 100644 --- a/packages/apps-engine/src/server/accessors/ModifyExtender.ts +++ b/packages/apps/src/server/accessors/ModifyExtender.ts @@ -1,9 +1,9 @@ import { MessageExtender } from './MessageExtender'; import { RoomExtender } from './RoomExtender'; import { VideoConferenceExtender } from './VideoConferenceExtend'; -import type { IMessageExtender, IModifyExtender, IRoomExtender, IVideoConferenceExtender } from '../../definition/accessors'; -import { RocketChatAssociationModel } from '../../definition/metadata'; -import type { IUser } from '../../definition/users'; +import type { IMessageExtender, IModifyExtender, IRoomExtender, IVideoConferenceExtender } from '@rocket.chat/apps-engine/definition/accessors'; +import { RocketChatAssociationModel } from '@rocket.chat/apps-engine/definition/metadata'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import type { AppBridges } from '../bridges/AppBridges'; export class ModifyExtender implements IModifyExtender { @@ -12,15 +12,15 @@ export class ModifyExtender implements IModifyExtender { private readonly appId: string, ) {} - public async extendMessage(messageId: string, updater: IUser): Promise { + public async extendMessage(messageId: string, _updater: IUser): Promise { const msg = await this.bridges.getMessageBridge().doGetById(messageId, this.appId); - msg.editor = updater; + msg.editor = _updater; msg.editedAt = new Date(); return new MessageExtender(msg); } - public async extendRoom(roomId: string, updater: IUser): Promise { + public async extendRoom(roomId: string, _updater: IUser): Promise { const room = await this.bridges.getRoomBridge().doGetById(roomId, this.appId); room.updatedAt = new Date(); diff --git a/packages/apps-engine/src/server/accessors/ModifyUpdater.ts b/packages/apps/src/server/accessors/ModifyUpdater.ts similarity index 82% rename from packages/apps-engine/src/server/accessors/ModifyUpdater.ts rename to packages/apps/src/server/accessors/ModifyUpdater.ts index 496e497860690..d030967019dc9 100644 --- a/packages/apps-engine/src/server/accessors/ModifyUpdater.ts +++ b/packages/apps/src/server/accessors/ModifyUpdater.ts @@ -2,11 +2,11 @@ import { LivechatUpdater } from './LivechatUpdater'; import { MessageBuilder } from './MessageBuilder'; import { RoomBuilder } from './RoomBuilder'; import { UserUpdater } from './UserUpdater'; -import type { ILivechatUpdater, IMessageBuilder, IMessageUpdater, IModifyUpdater, IRoomBuilder } from '../../definition/accessors'; -import type { IUserUpdater } from '../../definition/accessors/IUserUpdater'; -import { RocketChatAssociationModel } from '../../definition/metadata'; -import { RoomType } from '../../definition/rooms'; -import type { IUser } from '../../definition/users'; +import type { ILivechatUpdater, IMessageBuilder, IMessageUpdater, IModifyUpdater, IRoomBuilder } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IUserUpdater } from '@rocket.chat/apps-engine/definition/accessors/IUserUpdater'; +import { RocketChatAssociationModel } from '@rocket.chat/apps-engine/definition/metadata'; +import { RoomType } from '@rocket.chat/apps-engine/definition/rooms'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import type { AppBridges } from '../bridges'; import { UIHelper } from '../misc/UIHelper'; @@ -15,7 +15,7 @@ export class ModifyUpdater implements IModifyUpdater { private userUpdater: IUserUpdater; - private messageUpdater: IMessageUpdater; + private messageUpdater!: IMessageUpdater; constructor( private readonly bridges: AppBridges, @@ -37,13 +37,13 @@ export class ModifyUpdater implements IModifyUpdater { return this.messageUpdater; } - public async message(messageId: string, updater: IUser): Promise { + public async message(messageId: string, _updater: IUser): Promise { const msg = await this.bridges.getMessageBridge().doGetById(messageId, this.appId); return new MessageBuilder(msg); } - public async room(roomId: string, updater: IUser): Promise { + public async room(roomId: string, _updater: IUser): Promise { const room = await this.bridges.getRoomBridge().doGetById(roomId, this.appId); return new RoomBuilder(room); diff --git a/packages/apps-engine/src/server/accessors/Notifier.ts b/packages/apps/src/server/accessors/Notifier.ts similarity index 69% rename from packages/apps-engine/src/server/accessors/Notifier.ts rename to packages/apps/src/server/accessors/Notifier.ts index ff3d97070df06..4dd7c53ed6bd5 100644 --- a/packages/apps-engine/src/server/accessors/Notifier.ts +++ b/packages/apps/src/server/accessors/Notifier.ts @@ -1,9 +1,9 @@ -import type { IMessageBuilder, INotifier } from '../../definition/accessors'; -import type { ITypingOptions } from '../../definition/accessors/INotifier'; -import { TypingScope } from '../../definition/accessors/INotifier'; -import type { IMessage } from '../../definition/messages'; -import type { IRoom } from '../../definition/rooms'; -import type { IUser } from '../../definition/users'; +import type { IMessageBuilder, INotifier } from '@rocket.chat/apps-engine/definition/accessors'; +import type { ITypingOptions } from '@rocket.chat/apps-engine/definition/accessors/INotifier'; +import { TypingScope } from '@rocket.chat/apps-engine/definition/accessors/INotifier'; +import type { IMessage } from '@rocket.chat/apps-engine/definition/messages'; +import type { IRoom } from '@rocket.chat/apps-engine/definition/rooms'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import type { MessageBridge, UserBridge } from '../bridges'; import { MessageBuilder } from './MessageBuilder'; @@ -18,7 +18,7 @@ export class Notifier implements INotifier { if (!message.sender?.id) { const appUser = await this.userBridge.doGetAppUser(this.appId); - message.sender = appUser; + message.sender = appUser as IUser; } await this.msgBridge.doNotifyUser(user, message, this.appId); @@ -28,7 +28,7 @@ export class Notifier implements INotifier { if (!message.sender?.id) { const appUser = await this.userBridge.doGetAppUser(this.appId); - message.sender = appUser; + message.sender = appUser as IUser; } await this.msgBridge.doNotifyRoom(room, message, this.appId); diff --git a/packages/apps-engine/src/server/accessors/OAuthAppsModify.ts b/packages/apps/src/server/accessors/OAuthAppsModify.ts similarity index 67% rename from packages/apps-engine/src/server/accessors/OAuthAppsModify.ts rename to packages/apps/src/server/accessors/OAuthAppsModify.ts index 323e706c0fa1b..4649b047bea88 100644 --- a/packages/apps-engine/src/server/accessors/OAuthAppsModify.ts +++ b/packages/apps/src/server/accessors/OAuthAppsModify.ts @@ -1,5 +1,5 @@ -import type { IOAuthAppParams } from '../../definition/accessors/IOAuthApp'; -import type { IOAuthAppsModify } from '../../definition/accessors/IOAuthAppsModify'; +import type { IOAuthAppParams } from '@rocket.chat/apps-engine/definition/accessors/IOAuthApp'; +import type { IOAuthAppsModify } from '@rocket.chat/apps-engine/definition/accessors/IOAuthAppsModify'; import type { OAuthAppsBridge } from '../bridges/OAuthAppsBridge'; export class OAuthAppsModify implements IOAuthAppsModify { @@ -9,7 +9,7 @@ export class OAuthAppsModify implements IOAuthAppsModify { ) {} public async createOAuthApp(oAuthApp: IOAuthAppParams): Promise { - return this.oauthAppsBridge.doCreate(oAuthApp, this.appId); + return this.oauthAppsBridge.doCreate(oAuthApp, this.appId) as Promise; } public async updateOAuthApp(oAuthApp: IOAuthAppParams, id: string): Promise { diff --git a/packages/apps-engine/src/server/accessors/OAuthAppsReader.ts b/packages/apps/src/server/accessors/OAuthAppsReader.ts similarity index 51% rename from packages/apps-engine/src/server/accessors/OAuthAppsReader.ts rename to packages/apps/src/server/accessors/OAuthAppsReader.ts index 5d82957274fe1..057c22377f1fa 100644 --- a/packages/apps-engine/src/server/accessors/OAuthAppsReader.ts +++ b/packages/apps/src/server/accessors/OAuthAppsReader.ts @@ -1,5 +1,5 @@ -import type { IOAuthApp } from '../../definition/accessors/IOAuthApp'; -import type { IOAuthAppsReader } from '../../definition/accessors/IOAuthAppsReader'; +import type { IOAuthApp } from '@rocket.chat/apps-engine/definition/accessors/IOAuthApp'; +import type { IOAuthAppsReader } from '@rocket.chat/apps-engine/definition/accessors/IOAuthAppsReader'; import type { OAuthAppsBridge } from '../bridges/OAuthAppsBridge'; export class OAuthAppsReader implements IOAuthAppsReader { @@ -9,10 +9,10 @@ export class OAuthAppsReader implements IOAuthAppsReader { ) {} public async getOAuthAppById(id: string): Promise { - return this.oauthAppsBridge.doGetByid(id, this.appId); + return this.oauthAppsBridge.doGetByid(id, this.appId) as Promise; } public async getOAuthAppByName(name: string): Promise> { - return this.oauthAppsBridge.doGetByName(name, this.appId); + return this.oauthAppsBridge.doGetByName(name, this.appId) as Promise>; } } diff --git a/packages/apps-engine/src/server/accessors/OutboundCommunicationProviderExtend.ts b/packages/apps/src/server/accessors/OutboundCommunicationProviderExtend.ts similarity index 76% rename from packages/apps-engine/src/server/accessors/OutboundCommunicationProviderExtend.ts rename to packages/apps/src/server/accessors/OutboundCommunicationProviderExtend.ts index db713a6cdf3e1..9bcc2147eb885 100644 --- a/packages/apps-engine/src/server/accessors/OutboundCommunicationProviderExtend.ts +++ b/packages/apps/src/server/accessors/OutboundCommunicationProviderExtend.ts @@ -1,5 +1,5 @@ -import type { IOutboundCommunicationProviderExtend } from '../../definition/accessors/IOutboundCommunicationProviderExtend'; -import type { IOutboundPhoneMessageProvider, IOutboundEmailMessageProvider } from '../../definition/outboundCommunication'; +import type { IOutboundCommunicationProviderExtend } from '@rocket.chat/apps-engine/definition/accessors/IOutboundCommunicationProviderExtend'; +import type { IOutboundPhoneMessageProvider, IOutboundEmailMessageProvider } from '@rocket.chat/apps-engine/definition/outboundCommunication'; import type { AppOutboundCommunicationProviderManager } from '../managers/AppOutboundCommunicationProviderManager'; export class OutboundMessageProviderExtend implements IOutboundCommunicationProviderExtend { diff --git a/packages/apps-engine/src/server/accessors/Persistence.ts b/packages/apps/src/server/accessors/Persistence.ts similarity index 83% rename from packages/apps-engine/src/server/accessors/Persistence.ts rename to packages/apps/src/server/accessors/Persistence.ts index cd783e891c34b..6eddbd04c9509 100644 --- a/packages/apps-engine/src/server/accessors/Persistence.ts +++ b/packages/apps/src/server/accessors/Persistence.ts @@ -1,5 +1,5 @@ -import type { IPersistence } from '../../definition/accessors'; -import type { RocketChatAssociationRecord } from '../../definition/metadata'; +import type { IPersistence } from '@rocket.chat/apps-engine/definition/accessors'; +import type { RocketChatAssociationRecord } from '@rocket.chat/apps-engine/definition/metadata'; import type { PersistenceBridge } from '../bridges/PersistenceBridge'; export class Persistence implements IPersistence { @@ -33,14 +33,14 @@ export class Persistence implements IPersistence { } public remove(id: string): Promise { - return this.persistBridge.doRemove(id, this.appId); + return this.persistBridge.doRemove(id, this.appId) as Promise; } public removeByAssociation(association: RocketChatAssociationRecord): Promise> { - return this.persistBridge.doRemoveByAssociations(new Array(association), this.appId); + return this.persistBridge.doRemoveByAssociations(new Array(association), this.appId) as Promise>; } public removeByAssociations(associations: Array): Promise> { - return this.persistBridge.doRemoveByAssociations(associations, this.appId); + return this.persistBridge.doRemoveByAssociations(associations, this.appId) as Promise>; } } diff --git a/packages/apps-engine/src/server/accessors/PersistenceRead.ts b/packages/apps/src/server/accessors/PersistenceRead.ts similarity index 78% rename from packages/apps-engine/src/server/accessors/PersistenceRead.ts rename to packages/apps/src/server/accessors/PersistenceRead.ts index c9f4f39d96596..d342849a40d23 100644 --- a/packages/apps-engine/src/server/accessors/PersistenceRead.ts +++ b/packages/apps/src/server/accessors/PersistenceRead.ts @@ -1,5 +1,5 @@ -import type { IPersistenceRead } from '../../definition/accessors'; -import type { RocketChatAssociationRecord } from '../../definition/metadata'; +import type { IPersistenceRead } from '@rocket.chat/apps-engine/definition/accessors'; +import type { RocketChatAssociationRecord } from '@rocket.chat/apps-engine/definition/metadata'; import type { PersistenceBridge } from '../bridges'; export class PersistenceRead implements IPersistenceRead { diff --git a/packages/apps-engine/src/server/accessors/Reader.ts b/packages/apps/src/server/accessors/Reader.ts similarity index 80% rename from packages/apps-engine/src/server/accessors/Reader.ts rename to packages/apps/src/server/accessors/Reader.ts index baa05b79ac331..2f73452b1af85 100644 --- a/packages/apps-engine/src/server/accessors/Reader.ts +++ b/packages/apps/src/server/accessors/Reader.ts @@ -11,11 +11,11 @@ import type { IUploadRead, IUserRead, IVideoConferenceRead, -} from '../../definition/accessors'; -import type { IContactRead } from '../../definition/accessors/IContactRead'; -import type { IOAuthAppsReader } from '../../definition/accessors/IOAuthAppsReader'; -import type { IRoleRead } from '../../definition/accessors/IRoleRead'; -import type { IThreadRead } from '../../definition/accessors/IThreadRead'; +} from '@rocket.chat/apps-engine/definition/accessors'; +import type { IContactRead } from '@rocket.chat/apps-engine/definition/accessors/IContactRead'; +import type { IOAuthAppsReader } from '@rocket.chat/apps-engine/definition/accessors/IOAuthAppsReader'; +import type { IRoleRead } from '@rocket.chat/apps-engine/definition/accessors/IRoleRead'; +import type { IThreadRead } from '@rocket.chat/apps-engine/definition/accessors/IThreadRead'; export class Reader implements IRead { constructor( diff --git a/packages/apps-engine/src/server/accessors/RoleRead.ts b/packages/apps/src/server/accessors/RoleRead.ts similarity index 73% rename from packages/apps-engine/src/server/accessors/RoleRead.ts rename to packages/apps/src/server/accessors/RoleRead.ts index 209b22d6c0f68..21994806f37ba 100644 --- a/packages/apps-engine/src/server/accessors/RoleRead.ts +++ b/packages/apps/src/server/accessors/RoleRead.ts @@ -1,5 +1,5 @@ -import type { IRoleRead } from '../../definition/accessors/IRoleRead'; -import type { IRole } from '../../definition/roles'; +import type { IRoleRead } from '@rocket.chat/apps-engine/definition/accessors/IRoleRead'; +import type { IRole } from '@rocket.chat/apps-engine/definition/roles'; import type { RoleBridge } from '../bridges'; export class RoleRead implements IRoleRead { diff --git a/packages/apps-engine/src/server/accessors/RoomBuilder.ts b/packages/apps/src/server/accessors/RoomBuilder.ts similarity index 81% rename from packages/apps-engine/src/server/accessors/RoomBuilder.ts rename to packages/apps/src/server/accessors/RoomBuilder.ts index abe36eb91d8ad..ba01f916db2cb 100644 --- a/packages/apps-engine/src/server/accessors/RoomBuilder.ts +++ b/packages/apps/src/server/accessors/RoomBuilder.ts @@ -1,7 +1,7 @@ -import type { IRoomBuilder } from '../../definition/accessors'; -import { RocketChatAssociationModel } from '../../definition/metadata'; -import type { IRoom, RoomType } from '../../definition/rooms'; -import type { IUser } from '../../definition/users'; +import type { IRoomBuilder } from '@rocket.chat/apps-engine/definition/accessors'; +import { RocketChatAssociationModel } from '@rocket.chat/apps-engine/definition/metadata'; +import type { IRoom, RoomType } from '@rocket.chat/apps-engine/definition/rooms'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; export class RoomBuilder implements IRoomBuilder { public kind: RocketChatAssociationModel.ROOM | RocketChatAssociationModel.DISCUSSION; @@ -29,7 +29,7 @@ export class RoomBuilder implements IRoomBuilder { } public getDisplayName(): string { - return this.room.displayName; + return this.room.displayName as string; } public setSlugifiedName(name: string): IRoomBuilder { @@ -38,7 +38,7 @@ export class RoomBuilder implements IRoomBuilder { } public getSlugifiedName(): string { - return this.room.slugifiedName; + return this.room.slugifiedName as string; } public setType(type: RoomType): IRoomBuilder { @@ -106,7 +106,7 @@ export class RoomBuilder implements IRoomBuilder { } public getIsDefault(): boolean { - return this.room.isDefault; + return this.room.isDefault as boolean; } public setReadOnly(isReadOnly: boolean): IRoomBuilder { @@ -115,7 +115,7 @@ export class RoomBuilder implements IRoomBuilder { } public getIsReadOnly(): boolean { - return this.room.isReadOnly; + return this.room.isReadOnly as boolean; } public setDisplayingOfSystemMessages(displaySystemMessages: boolean): IRoomBuilder { @@ -124,7 +124,7 @@ export class RoomBuilder implements IRoomBuilder { } public getDisplayingOfSystemMessages(): boolean { - return this.room.displaySystemMessages; + return this.room.displaySystemMessages as boolean; } public addCustomField(key: string, value: object): IRoomBuilder { @@ -142,11 +142,11 @@ export class RoomBuilder implements IRoomBuilder { } public getCustomFields(): { [key: string]: object } { - return this.room.customFields; + return this.room.customFields as { [key: string]: object }; } public getUserIds(): Array { - return this.room.userIds; + return this.room.userIds as Array; } public getRoom(): IRoom { diff --git a/packages/apps-engine/src/server/accessors/RoomExtender.ts b/packages/apps/src/server/accessors/RoomExtender.ts similarity index 79% rename from packages/apps-engine/src/server/accessors/RoomExtender.ts rename to packages/apps/src/server/accessors/RoomExtender.ts index a83f3c9b28dea..c33ac6e536788 100644 --- a/packages/apps-engine/src/server/accessors/RoomExtender.ts +++ b/packages/apps/src/server/accessors/RoomExtender.ts @@ -1,7 +1,7 @@ -import type { IRoomExtender } from '../../definition/accessors'; -import { RocketChatAssociationModel } from '../../definition/metadata'; -import type { IRoom } from '../../definition/rooms'; -import type { IUser } from '../../definition/users'; +import type { IRoomExtender } from '@rocket.chat/apps-engine/definition/accessors'; +import { RocketChatAssociationModel } from '@rocket.chat/apps-engine/definition/metadata'; +import type { IRoom } from '@rocket.chat/apps-engine/definition/rooms'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import { Utilities } from '../misc/Utilities'; export class RoomExtender implements IRoomExtender { diff --git a/packages/apps-engine/src/server/accessors/RoomRead.ts b/packages/apps/src/server/accessors/RoomRead.ts similarity index 88% rename from packages/apps-engine/src/server/accessors/RoomRead.ts rename to packages/apps/src/server/accessors/RoomRead.ts index 01e10cee8b950..68f1dd28a78ad 100644 --- a/packages/apps-engine/src/server/accessors/RoomRead.ts +++ b/packages/apps/src/server/accessors/RoomRead.ts @@ -1,7 +1,7 @@ -import type { IRoomRead } from '../../definition/accessors'; -import type { IMessageRaw } from '../../definition/messages'; -import type { IRoom, IRoomRaw } from '../../definition/rooms'; -import type { IUser } from '../../definition/users'; +import type { IRoomRead } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IMessageRaw } from '@rocket.chat/apps-engine/definition/messages'; +import type { IRoom, IRoomRaw } from '@rocket.chat/apps-engine/definition/rooms'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import type { RoomBridge } from '../bridges'; import { type GetMessagesOptions, type GetRoomsFilters, type GetRoomsOptions, GetMessagesSortableFields } from '../bridges/RoomBridge'; @@ -16,7 +16,7 @@ export class RoomRead implements IRoomRead { } public getCreatorUserById(id: string): Promise { - return this.roomBridge.doGetCreatorById(id, this.appId); + return this.roomBridge.doGetCreatorById(id, this.appId) as Promise; } public getByName(name: string): Promise { @@ -24,7 +24,7 @@ export class RoomRead implements IRoomRead { } public getCreatorUserByName(name: string): Promise { - return this.roomBridge.doGetCreatorByName(name, this.appId); + return this.roomBridge.doGetCreatorByName(name, this.appId) as Promise; } public getMessages(roomId: string, options: Partial = {}): Promise { @@ -63,7 +63,7 @@ export class RoomRead implements IRoomRead { } public getDirectByUsernames(usernames: Array): Promise { - return this.roomBridge.doGetDirectByUsernames(usernames, this.appId); + return this.roomBridge.doGetDirectByUsernames(usernames, this.appId) as Promise; } public getModerators(roomId: string): Promise> { diff --git a/packages/apps-engine/src/server/accessors/SchedulerExtend.ts b/packages/apps/src/server/accessors/SchedulerExtend.ts similarity index 71% rename from packages/apps-engine/src/server/accessors/SchedulerExtend.ts rename to packages/apps/src/server/accessors/SchedulerExtend.ts index 29e2c1aee5704..612c7a9e149c5 100644 --- a/packages/apps-engine/src/server/accessors/SchedulerExtend.ts +++ b/packages/apps/src/server/accessors/SchedulerExtend.ts @@ -1,5 +1,5 @@ -import type { ISchedulerExtend } from '../../definition/accessors'; -import type { IProcessor } from '../../definition/scheduler'; +import type { ISchedulerExtend } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IProcessor } from '@rocket.chat/apps-engine/definition/scheduler'; import type { AppSchedulerManager } from '../managers/AppSchedulerManager'; export class SchedulerExtend implements ISchedulerExtend { diff --git a/packages/apps-engine/src/server/accessors/SchedulerModify.ts b/packages/apps/src/server/accessors/SchedulerModify.ts similarity index 83% rename from packages/apps-engine/src/server/accessors/SchedulerModify.ts rename to packages/apps/src/server/accessors/SchedulerModify.ts index a687889759ce9..b74a6c0aac70a 100644 --- a/packages/apps-engine/src/server/accessors/SchedulerModify.ts +++ b/packages/apps/src/server/accessors/SchedulerModify.ts @@ -1,5 +1,5 @@ -import type { ISchedulerModify } from '../../definition/accessors'; -import type { IOnetimeSchedule, IRecurringSchedule } from '../../definition/scheduler'; +import type { ISchedulerModify } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IOnetimeSchedule, IRecurringSchedule } from '@rocket.chat/apps-engine/definition/scheduler'; import type { SchedulerBridge } from '../bridges'; function createProcessorId(jobId: string, appId: string): string { diff --git a/packages/apps-engine/src/server/accessors/ServerSettingRead.ts b/packages/apps/src/server/accessors/ServerSettingRead.ts similarity index 85% rename from packages/apps-engine/src/server/accessors/ServerSettingRead.ts rename to packages/apps/src/server/accessors/ServerSettingRead.ts index 1fbc39c06ce35..ace69a7bf7893 100644 --- a/packages/apps-engine/src/server/accessors/ServerSettingRead.ts +++ b/packages/apps/src/server/accessors/ServerSettingRead.ts @@ -1,5 +1,5 @@ -import type { IServerSettingRead } from '../../definition/accessors'; -import type { ISetting } from '../../definition/settings'; +import type { IServerSettingRead } from '@rocket.chat/apps-engine/definition/accessors'; +import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; import type { ServerSettingBridge } from '../bridges/ServerSettingBridge'; export class ServerSettingRead implements IServerSettingRead { diff --git a/packages/apps-engine/src/server/accessors/ServerSettingUpdater.ts b/packages/apps/src/server/accessors/ServerSettingUpdater.ts similarity index 75% rename from packages/apps-engine/src/server/accessors/ServerSettingUpdater.ts rename to packages/apps/src/server/accessors/ServerSettingUpdater.ts index 87dfff693c3f2..e78c2fef880b3 100644 --- a/packages/apps-engine/src/server/accessors/ServerSettingUpdater.ts +++ b/packages/apps/src/server/accessors/ServerSettingUpdater.ts @@ -1,5 +1,5 @@ -import type { IServerSettingUpdater } from '../../definition/accessors'; -import type { ISetting } from '../../definition/settings'; +import type { IServerSettingUpdater } from '@rocket.chat/apps-engine/definition/accessors'; +import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; import type { AppBridges } from '../bridges'; export class ServerSettingUpdater implements IServerSettingUpdater { diff --git a/packages/apps-engine/src/server/accessors/ServerSettingsModify.ts b/packages/apps/src/server/accessors/ServerSettingsModify.ts similarity index 81% rename from packages/apps-engine/src/server/accessors/ServerSettingsModify.ts rename to packages/apps/src/server/accessors/ServerSettingsModify.ts index 8cdc908009b73..e14b3b9390320 100644 --- a/packages/apps-engine/src/server/accessors/ServerSettingsModify.ts +++ b/packages/apps/src/server/accessors/ServerSettingsModify.ts @@ -1,5 +1,5 @@ -import type { IServerSettingsModify } from '../../definition/accessors'; -import type { ISetting } from '../../definition/settings'; +import type { IServerSettingsModify } from '@rocket.chat/apps-engine/definition/accessors'; +import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; import type { ServerSettingBridge } from '../bridges/ServerSettingBridge'; export class ServerSettingsModify implements IServerSettingsModify { diff --git a/packages/apps-engine/src/server/accessors/SettingRead.ts b/packages/apps/src/server/accessors/SettingRead.ts similarity index 78% rename from packages/apps-engine/src/server/accessors/SettingRead.ts rename to packages/apps/src/server/accessors/SettingRead.ts index 7b701c249a49c..fee7137cff82f 100644 --- a/packages/apps-engine/src/server/accessors/SettingRead.ts +++ b/packages/apps/src/server/accessors/SettingRead.ts @@ -1,5 +1,5 @@ -import type { ISettingRead } from '../../definition/accessors'; -import type { ISetting } from '../../definition/settings'; +import type { ISettingRead } from '@rocket.chat/apps-engine/definition/accessors'; +import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; import type { ProxiedApp } from '../ProxiedApp'; export class SettingRead implements ISettingRead { diff --git a/packages/apps-engine/src/server/accessors/SettingUpdater.ts b/packages/apps/src/server/accessors/SettingUpdater.ts similarity index 91% rename from packages/apps-engine/src/server/accessors/SettingUpdater.ts rename to packages/apps/src/server/accessors/SettingUpdater.ts index 4dd7850c2a167..315980508a4ff 100644 --- a/packages/apps-engine/src/server/accessors/SettingUpdater.ts +++ b/packages/apps/src/server/accessors/SettingUpdater.ts @@ -1,5 +1,5 @@ -import type { ISettingUpdater } from '../../definition/accessors/ISettingUpdater'; -import type { ISetting } from '../../definition/settings'; +import type { ISettingUpdater } from '@rocket.chat/apps-engine/definition/accessors/ISettingUpdater'; +import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; import type { ProxiedApp } from '../ProxiedApp'; import type { AppSettingsManager } from '../managers'; diff --git a/packages/apps-engine/src/server/accessors/SettingsExtend.ts b/packages/apps/src/server/accessors/SettingsExtend.ts similarity index 81% rename from packages/apps-engine/src/server/accessors/SettingsExtend.ts rename to packages/apps/src/server/accessors/SettingsExtend.ts index 654c52f385fbf..8ec83593efc8c 100644 --- a/packages/apps-engine/src/server/accessors/SettingsExtend.ts +++ b/packages/apps/src/server/accessors/SettingsExtend.ts @@ -1,5 +1,5 @@ -import type { ISettingsExtend } from '../../definition/accessors'; -import type { ISetting } from '../../definition/settings'; +import type { ISettingsExtend } from '@rocket.chat/apps-engine/definition/accessors'; +import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; import type { ProxiedApp } from '../ProxiedApp'; export class SettingsExtend implements ISettingsExtend { diff --git a/packages/apps-engine/src/server/accessors/SlashCommandsExtend.ts b/packages/apps/src/server/accessors/SlashCommandsExtend.ts similarity index 69% rename from packages/apps-engine/src/server/accessors/SlashCommandsExtend.ts rename to packages/apps/src/server/accessors/SlashCommandsExtend.ts index e540fdbee5f1c..567fa24bf91e0 100644 --- a/packages/apps-engine/src/server/accessors/SlashCommandsExtend.ts +++ b/packages/apps/src/server/accessors/SlashCommandsExtend.ts @@ -1,5 +1,5 @@ -import type { ISlashCommandsExtend } from '../../definition/accessors'; -import type { ISlashCommand } from '../../definition/slashcommands'; +import type { ISlashCommandsExtend } from '@rocket.chat/apps-engine/definition/accessors'; +import type { ISlashCommand } from '@rocket.chat/apps-engine/definition/slashcommands'; import type { AppSlashCommandManager } from '../managers/AppSlashCommandManager'; export class SlashCommandsExtend implements ISlashCommandsExtend { diff --git a/packages/apps-engine/src/server/accessors/SlashCommandsModify.ts b/packages/apps/src/server/accessors/SlashCommandsModify.ts similarity index 79% rename from packages/apps-engine/src/server/accessors/SlashCommandsModify.ts rename to packages/apps/src/server/accessors/SlashCommandsModify.ts index f03dba9d13690..76c81eac940a2 100644 --- a/packages/apps-engine/src/server/accessors/SlashCommandsModify.ts +++ b/packages/apps/src/server/accessors/SlashCommandsModify.ts @@ -1,5 +1,5 @@ -import type { ISlashCommandsModify } from '../../definition/accessors'; -import type { ISlashCommand } from '../../definition/slashcommands'; +import type { ISlashCommandsModify } from '@rocket.chat/apps-engine/definition/accessors'; +import type { ISlashCommand } from '@rocket.chat/apps-engine/definition/slashcommands'; import type { AppSlashCommandManager } from '../managers'; export class SlashCommandsModify implements ISlashCommandsModify { diff --git a/packages/apps-engine/src/server/accessors/ThreadRead.ts b/packages/apps/src/server/accessors/ThreadRead.ts similarity index 64% rename from packages/apps-engine/src/server/accessors/ThreadRead.ts rename to packages/apps/src/server/accessors/ThreadRead.ts index c979bf9a50d13..41d13db78779b 100644 --- a/packages/apps-engine/src/server/accessors/ThreadRead.ts +++ b/packages/apps/src/server/accessors/ThreadRead.ts @@ -1,5 +1,5 @@ -import type { IThreadRead } from '../../definition/accessors/IThreadRead'; -import type { IMessage } from '../../definition/messages'; +import type { IThreadRead } from '@rocket.chat/apps-engine/definition/accessors/IThreadRead'; +import type { IMessage } from '@rocket.chat/apps-engine/definition/messages'; import type { ThreadBridge } from '../bridges/ThreadBridge'; export class ThreadRead implements IThreadRead { diff --git a/packages/apps-engine/src/server/accessors/UIController.ts b/packages/apps/src/server/accessors/UIController.ts similarity index 83% rename from packages/apps-engine/src/server/accessors/UIController.ts rename to packages/apps/src/server/accessors/UIController.ts index 1c3ad58e1d293..cd38db999bf27 100644 --- a/packages/apps-engine/src/server/accessors/UIController.ts +++ b/packages/apps/src/server/accessors/UIController.ts @@ -1,13 +1,13 @@ -import type { IUIController } from '../../definition/accessors'; -import type { IUIKitErrorInteractionParam, IUIKitInteractionParam, IUIKitSurfaceViewParam } from '../../definition/accessors/IUIController'; -import { UIKitInteractionType, UIKitSurfaceType } from '../../definition/uikit'; +import type { IUIController } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IUIKitErrorInteractionParam, IUIKitInteractionParam, IUIKitSurfaceViewParam } from '@rocket.chat/apps-engine/definition/accessors/IUIController'; +import { UIKitInteractionType, UIKitSurfaceType } from '@rocket.chat/apps-engine/definition/uikit'; import { formatContextualBarInteraction, formatErrorInteraction, formatModalInteraction, -} from '../../definition/uikit/UIKitInteractionPayloadFormatter'; -import type { IUIKitContextualBarViewParam, IUIKitModalViewParam } from '../../definition/uikit/UIKitInteractionResponder'; -import type { IUser } from '../../definition/users'; +} from '@rocket.chat/apps-engine/definition/uikit/UIKitInteractionPayloadFormatter'; +import type { IUIKitContextualBarViewParam, IUIKitModalViewParam } from '@rocket.chat/apps-engine/definition/uikit/UIKitInteractionResponder'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import type { AppBridges, UiInteractionBridge } from '../bridges'; import { UIHelper } from '../misc/UIHelper'; @@ -49,7 +49,7 @@ export class UIController implements IUIController { return this.openContextualBar(view, context, user, true); } - public openSurfaceView(view: IUIKitSurfaceViewParam, context: IUIKitInteractionParam, user: IUser) { + public openSurfaceView(view: IUIKitSurfaceViewParam, context: IUIKitInteractionParam, user: IUser): Promise { const blocks = UIHelper.assignIds(view.blocks, this.appId); const viewWithIds = { ...view, blocks }; @@ -58,10 +58,12 @@ export class UIController implements IUIController { return this.openContextualBar(viewWithIds, context, user); case UIKitSurfaceType.MODAL: return this.openModal(viewWithIds, context, user); + default: + return Promise.resolve(); } } - public updateSurfaceView(view: IUIKitSurfaceViewParam, context: IUIKitInteractionParam, user: IUser) { + public updateSurfaceView(view: IUIKitSurfaceViewParam, context: IUIKitInteractionParam, user: IUser): Promise { const blocks = UIHelper.assignIds(view.blocks, this.appId); const viewWithIds = { ...view, blocks }; @@ -70,6 +72,8 @@ export class UIController implements IUIController { return this.openContextualBar(viewWithIds, context, user, true); case UIKitSurfaceType.MODAL: return this.openModal(viewWithIds, context, user, true); + default: + return Promise.resolve(); } } diff --git a/packages/apps-engine/src/server/accessors/UIExtend.ts b/packages/apps/src/server/accessors/UIExtend.ts similarity index 68% rename from packages/apps-engine/src/server/accessors/UIExtend.ts rename to packages/apps/src/server/accessors/UIExtend.ts index 81062f2cc71f1..96de3e623aded 100644 --- a/packages/apps-engine/src/server/accessors/UIExtend.ts +++ b/packages/apps/src/server/accessors/UIExtend.ts @@ -1,5 +1,5 @@ -import type { IUIExtend } from '../../definition/accessors'; -import type { IUIActionButtonDescriptor } from '../../definition/ui'; +import type { IUIExtend } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IUIActionButtonDescriptor } from '@rocket.chat/apps-engine/definition/ui'; import type { UIActionButtonManager } from '../managers/UIActionButtonManager'; export class UIExtend implements IUIExtend { diff --git a/packages/apps-engine/src/server/accessors/UploadCreator.ts b/packages/apps/src/server/accessors/UploadCreator.ts similarity index 67% rename from packages/apps-engine/src/server/accessors/UploadCreator.ts rename to packages/apps/src/server/accessors/UploadCreator.ts index dbacbdc30354f..1090e13760d87 100644 --- a/packages/apps-engine/src/server/accessors/UploadCreator.ts +++ b/packages/apps/src/server/accessors/UploadCreator.ts @@ -1,7 +1,7 @@ -import type { IUploadCreator } from '../../definition/accessors'; -import type { IUpload } from '../../definition/uploads'; -import type { IUploadDescriptor } from '../../definition/uploads/IUploadDescriptor'; -import type { IUploadDetails } from '../../definition/uploads/IUploadDetails'; +import type { IUploadCreator } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IUpload } from '@rocket.chat/apps-engine/definition/uploads'; +import type { IUploadDescriptor } from '@rocket.chat/apps-engine/definition/uploads/IUploadDescriptor'; +import type { IUploadDetails } from '@rocket.chat/apps-engine/definition/uploads/IUploadDetails'; import type { AppBridges } from '../bridges'; export class UploadCreator implements IUploadCreator { diff --git a/packages/apps-engine/src/server/accessors/UploadRead.ts b/packages/apps/src/server/accessors/UploadRead.ts similarity index 79% rename from packages/apps-engine/src/server/accessors/UploadRead.ts rename to packages/apps/src/server/accessors/UploadRead.ts index 84ab8c47b84a1..5f953d5ddf643 100644 --- a/packages/apps-engine/src/server/accessors/UploadRead.ts +++ b/packages/apps/src/server/accessors/UploadRead.ts @@ -1,5 +1,5 @@ -import type { IUploadRead } from '../../definition/accessors'; -import type { IUpload } from '../../definition/uploads'; +import type { IUploadRead } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IUpload } from '@rocket.chat/apps-engine/definition/uploads'; import type { UploadBridge } from '../bridges/UploadBridge'; export class UploadRead implements IUploadRead { diff --git a/packages/apps-engine/src/server/accessors/UserBuilder.ts b/packages/apps/src/server/accessors/UserBuilder.ts similarity index 68% rename from packages/apps-engine/src/server/accessors/UserBuilder.ts rename to packages/apps/src/server/accessors/UserBuilder.ts index f18482663f414..bfadc9d22e2de 100644 --- a/packages/apps-engine/src/server/accessors/UserBuilder.ts +++ b/packages/apps/src/server/accessors/UserBuilder.ts @@ -1,7 +1,7 @@ -import type { IUserBuilder } from '../../definition/accessors'; -import { RocketChatAssociationModel } from '../../definition/metadata'; -import type { IUser, IUserEmail } from '../../definition/users'; -import type { IUserSettings } from '../../definition/users/IUserSettings'; +import type { IUserBuilder } from '@rocket.chat/apps-engine/definition/accessors'; +import { RocketChatAssociationModel } from '@rocket.chat/apps-engine/definition/metadata'; +import type { IUser, IUserEmail } from '@rocket.chat/apps-engine/definition/users'; +import type { IUserSettings } from '@rocket.chat/apps-engine/definition/users/IUserSettings'; export class UserBuilder implements IUserBuilder { public kind: RocketChatAssociationModel.USER; @@ -26,7 +26,7 @@ export class UserBuilder implements IUserBuilder { } public getEmails(): Array { - return this.user.emails; + return this.user.emails as Array; } public setDisplayName(name: string): IUserBuilder { @@ -35,7 +35,7 @@ export class UserBuilder implements IUserBuilder { } public getDisplayName(): string { - return this.user.name; + return this.user.name as string; } public setUsername(username: string): IUserBuilder { @@ -44,7 +44,7 @@ export class UserBuilder implements IUserBuilder { } public getUsername(): string { - return this.user.username; + return this.user.username as string; } public setRoles(roles: Array): IUserBuilder { @@ -53,11 +53,11 @@ export class UserBuilder implements IUserBuilder { } public getRoles(): Array { - return this.user.roles; + return this.user.roles as Array; } public getSettings(): Partial { - return this.user.settings; + return this.user.settings as Partial; } public getUser(): Partial { diff --git a/packages/apps-engine/src/server/accessors/UserRead.ts b/packages/apps/src/server/accessors/UserRead.ts similarity index 84% rename from packages/apps-engine/src/server/accessors/UserRead.ts rename to packages/apps/src/server/accessors/UserRead.ts index a147a51b3bfaa..8d38a08818335 100644 --- a/packages/apps-engine/src/server/accessors/UserRead.ts +++ b/packages/apps/src/server/accessors/UserRead.ts @@ -1,5 +1,5 @@ -import type { IUserRead } from '../../definition/accessors'; -import type { IUser } from '../../definition/users'; +import type { IUserRead } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import type { UserBridge } from '../bridges/UserBridge'; export class UserRead implements IUserRead { diff --git a/packages/apps-engine/src/server/accessors/UserUpdater.ts b/packages/apps/src/server/accessors/UserUpdater.ts similarity index 79% rename from packages/apps-engine/src/server/accessors/UserUpdater.ts rename to packages/apps/src/server/accessors/UserUpdater.ts index 423a19e0f0044..e43ae9644b809 100644 --- a/packages/apps-engine/src/server/accessors/UserUpdater.ts +++ b/packages/apps/src/server/accessors/UserUpdater.ts @@ -1,6 +1,6 @@ -import type { IUserUpdater } from '../../definition/accessors/IUserUpdater'; -import type { UserStatusConnection } from '../../definition/users'; -import type { IUser } from '../../definition/users/IUser'; +import type { IUserUpdater } from '@rocket.chat/apps-engine/definition/accessors/IUserUpdater'; +import type { UserStatusConnection } from '@rocket.chat/apps-engine/definition/users'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users/IUser'; import type { AppBridges } from '../bridges'; export class UserUpdater implements IUserUpdater { diff --git a/packages/apps-engine/src/server/accessors/VideoConfProviderExtend.ts b/packages/apps/src/server/accessors/VideoConfProviderExtend.ts similarity index 69% rename from packages/apps-engine/src/server/accessors/VideoConfProviderExtend.ts rename to packages/apps/src/server/accessors/VideoConfProviderExtend.ts index da9688e8104ea..ad24e7d1b9201 100644 --- a/packages/apps-engine/src/server/accessors/VideoConfProviderExtend.ts +++ b/packages/apps/src/server/accessors/VideoConfProviderExtend.ts @@ -1,5 +1,5 @@ -import type { IVideoConfProvidersExtend } from '../../definition/accessors'; -import type { IVideoConfProvider } from '../../definition/videoConfProviders'; +import type { IVideoConfProvidersExtend } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IVideoConfProvider } from '@rocket.chat/apps-engine/definition/videoConfProviders'; import type { AppVideoConfProviderManager } from '../managers/AppVideoConfProviderManager'; export class VideoConfProviderExtend implements IVideoConfProvidersExtend { diff --git a/packages/apps-engine/src/server/accessors/VideoConferenceBuilder.ts b/packages/apps/src/server/accessors/VideoConferenceBuilder.ts similarity index 61% rename from packages/apps-engine/src/server/accessors/VideoConferenceBuilder.ts rename to packages/apps/src/server/accessors/VideoConferenceBuilder.ts index d77254e1bcfdb..1a5cce7fdd9da 100644 --- a/packages/apps-engine/src/server/accessors/VideoConferenceBuilder.ts +++ b/packages/apps/src/server/accessors/VideoConferenceBuilder.ts @@ -1,6 +1,6 @@ -import type { IVideoConferenceBuilder } from '../../definition/accessors'; -import { RocketChatAssociationModel } from '../../definition/metadata'; -import type { AppVideoConference } from '../../definition/videoConferences'; +import type { IVideoConferenceBuilder } from '@rocket.chat/apps-engine/definition/accessors'; +import { RocketChatAssociationModel } from '@rocket.chat/apps-engine/definition/metadata'; +import type { AppVideoConference } from '@rocket.chat/apps-engine/definition/videoConferences'; export class VideoConferenceBuilder implements IVideoConferenceBuilder { public kind: RocketChatAssociationModel.VIDEO_CONFERENCE = RocketChatAssociationModel.VIDEO_CONFERENCE; @@ -13,19 +13,19 @@ export class VideoConferenceBuilder implements IVideoConferenceBuilder { public setData(data: Partial): IVideoConferenceBuilder { this.call = { - rid: data.rid, - createdBy: data.createdBy, - providerName: data.providerName, - title: data.title, + rid: data.rid as string, + createdBy: data.createdBy as string, + providerName: data.providerName as string, + title: data.title as string, discussionRid: data.discussionRid, }; - return this; + return this as IVideoConferenceBuilder; } public setRoomId(rid: string): IVideoConferenceBuilder { this.call.rid = rid; - return this; + return this as IVideoConferenceBuilder; } public getRoomId(): string { @@ -34,7 +34,7 @@ export class VideoConferenceBuilder implements IVideoConferenceBuilder { public setCreatedBy(userId: string): IVideoConferenceBuilder { this.call.createdBy = userId; - return this; + return this as IVideoConferenceBuilder; } public getCreatedBy(): string { @@ -43,25 +43,25 @@ export class VideoConferenceBuilder implements IVideoConferenceBuilder { public setProviderName(userId: string): IVideoConferenceBuilder { this.call.providerName = userId; - return this; + return this as IVideoConferenceBuilder; } public getProviderName(): string { return this.call.providerName; } - public setProviderData(data: Record | undefined): IVideoConferenceBuilder { + public setProviderData(data: Record): IVideoConferenceBuilder { this.call.providerData = data; - return this; + return this as IVideoConferenceBuilder; } - public getProviderData(): Record | undefined { - return this.call.providerData; + public getProviderData(): Record { + return this.call.providerData as Record; } public setTitle(userId: string): IVideoConferenceBuilder { this.call.title = userId; - return this; + return this as IVideoConferenceBuilder; } public getTitle(): string { @@ -70,7 +70,7 @@ export class VideoConferenceBuilder implements IVideoConferenceBuilder { public setDiscussionRid(rid: AppVideoConference['discussionRid']): IVideoConferenceBuilder { this.call.discussionRid = rid; - return this; + return this as IVideoConferenceBuilder; } public getDiscussionRid(): AppVideoConference['discussionRid'] { diff --git a/packages/apps-engine/src/server/accessors/VideoConferenceExtend.ts b/packages/apps/src/server/accessors/VideoConferenceExtend.ts similarity index 77% rename from packages/apps-engine/src/server/accessors/VideoConferenceExtend.ts rename to packages/apps/src/server/accessors/VideoConferenceExtend.ts index b95d0275527dc..d8da5c1c20e9b 100644 --- a/packages/apps-engine/src/server/accessors/VideoConferenceExtend.ts +++ b/packages/apps/src/server/accessors/VideoConferenceExtend.ts @@ -1,7 +1,7 @@ -import type { IVideoConferenceExtender } from '../../definition/accessors'; -import { RocketChatAssociationModel } from '../../definition/metadata'; -import type { IVideoConferenceUser, VideoConference } from '../../definition/videoConferences'; -import type { VideoConferenceMember } from '../../definition/videoConferences/IVideoConference'; +import type { IVideoConferenceExtender } from '@rocket.chat/apps-engine/definition/accessors'; +import { RocketChatAssociationModel } from '@rocket.chat/apps-engine/definition/metadata'; +import type { IVideoConferenceUser, VideoConference } from '@rocket.chat/apps-engine/definition/videoConferences'; +import type { VideoConferenceMember } from '@rocket.chat/apps-engine/definition/videoConferences/IVideoConference'; import { Utilities } from '../misc/Utilities'; export class VideoConferenceExtender implements IVideoConferenceExtender { @@ -43,7 +43,7 @@ export class VideoConferenceExtender implements IVideoConferenceExtender { public addUser(userId: VideoConferenceMember['_id'], ts?: VideoConferenceMember['ts']): IVideoConferenceExtender { this.videoConference.users.push({ _id: userId, - ts, + ts: ts as Date, // Name and username will be loaded automatically by the bridge username: '', name: '', diff --git a/packages/apps-engine/src/server/accessors/VideoConferenceRead.ts b/packages/apps/src/server/accessors/VideoConferenceRead.ts similarity index 64% rename from packages/apps-engine/src/server/accessors/VideoConferenceRead.ts rename to packages/apps/src/server/accessors/VideoConferenceRead.ts index 2db2c2ff9908b..18f06697a3254 100644 --- a/packages/apps-engine/src/server/accessors/VideoConferenceRead.ts +++ b/packages/apps/src/server/accessors/VideoConferenceRead.ts @@ -1,5 +1,5 @@ -import type { IVideoConferenceRead } from '../../definition/accessors'; -import type { VideoConference } from '../../definition/videoConferences'; +import type { IVideoConferenceRead } from '@rocket.chat/apps-engine/definition/accessors'; +import type { VideoConference } from '@rocket.chat/apps-engine/definition/videoConferences'; import type { VideoConferenceBridge } from '../bridges'; export class VideoConferenceRead implements IVideoConferenceRead { diff --git a/packages/apps-engine/src/server/accessors/index.ts b/packages/apps/src/server/accessors/index.ts similarity index 100% rename from packages/apps-engine/src/server/accessors/index.ts rename to packages/apps/src/server/accessors/index.ts diff --git a/packages/apps-engine/src/server/bridges/ApiBridge.ts b/packages/apps/src/server/bridges/ApiBridge.ts similarity index 100% rename from packages/apps-engine/src/server/bridges/ApiBridge.ts rename to packages/apps/src/server/bridges/ApiBridge.ts diff --git a/packages/apps-engine/src/server/bridges/AppActivationBridge.ts b/packages/apps/src/server/bridges/AppActivationBridge.ts similarity index 92% rename from packages/apps-engine/src/server/bridges/AppActivationBridge.ts rename to packages/apps/src/server/bridges/AppActivationBridge.ts index 099cf71800702..947987a77417c 100644 --- a/packages/apps-engine/src/server/bridges/AppActivationBridge.ts +++ b/packages/apps/src/server/bridges/AppActivationBridge.ts @@ -1,4 +1,4 @@ -import type { AppStatus } from '../../definition/AppStatus'; +import type { AppStatus } from '@rocket.chat/apps-engine/definition/AppStatus'; import type { ProxiedApp } from '../ProxiedApp'; import { BaseBridge } from './BaseBridge'; diff --git a/packages/apps-engine/src/server/bridges/AppBridges.ts b/packages/apps/src/server/bridges/AppBridges.ts similarity index 100% rename from packages/apps-engine/src/server/bridges/AppBridges.ts rename to packages/apps/src/server/bridges/AppBridges.ts diff --git a/packages/apps-engine/src/server/bridges/AppDetailChangesBridge.ts b/packages/apps/src/server/bridges/AppDetailChangesBridge.ts similarity index 87% rename from packages/apps-engine/src/server/bridges/AppDetailChangesBridge.ts rename to packages/apps/src/server/bridges/AppDetailChangesBridge.ts index 5d1742c55a0d2..bf6ab17d72bdf 100644 --- a/packages/apps-engine/src/server/bridges/AppDetailChangesBridge.ts +++ b/packages/apps/src/server/bridges/AppDetailChangesBridge.ts @@ -1,5 +1,5 @@ import { BaseBridge } from './BaseBridge'; -import type { ISetting } from '../../definition/settings'; +import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; /** * An abstract class which will contain various methods related to Apps diff --git a/packages/apps-engine/src/server/bridges/BaseBridge.ts b/packages/apps/src/server/bridges/BaseBridge.ts similarity index 100% rename from packages/apps-engine/src/server/bridges/BaseBridge.ts rename to packages/apps/src/server/bridges/BaseBridge.ts diff --git a/packages/apps-engine/src/server/bridges/CloudWorkspaceBridge.ts b/packages/apps/src/server/bridges/CloudWorkspaceBridge.ts similarity index 85% rename from packages/apps-engine/src/server/bridges/CloudWorkspaceBridge.ts rename to packages/apps/src/server/bridges/CloudWorkspaceBridge.ts index ff14f9151aaf8..85f722fa6c0e6 100644 --- a/packages/apps-engine/src/server/bridges/CloudWorkspaceBridge.ts +++ b/packages/apps/src/server/bridges/CloudWorkspaceBridge.ts @@ -1,5 +1,5 @@ import { BaseBridge } from './BaseBridge'; -import type { IWorkspaceToken } from '../../definition/cloud/IWorkspaceToken'; +import type { IWorkspaceToken } from '@rocket.chat/apps-engine/definition/cloud/IWorkspaceToken'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; @@ -9,6 +9,8 @@ export abstract class CloudWorkspaceBridge extends BaseBridge { if (this.hasCloudTokenPermission(appId)) { return this.getWorkspaceToken(scope, appId); } + + return undefined as unknown as Promise; } protected abstract getWorkspaceToken(scope: string, appId: string): Promise; diff --git a/packages/apps-engine/src/server/bridges/CommandBridge.ts b/packages/apps/src/server/bridges/CommandBridge.ts similarity index 96% rename from packages/apps-engine/src/server/bridges/CommandBridge.ts rename to packages/apps/src/server/bridges/CommandBridge.ts index d5c7feba20c87..83f4452fc2a57 100644 --- a/packages/apps-engine/src/server/bridges/CommandBridge.ts +++ b/packages/apps/src/server/bridges/CommandBridge.ts @@ -1,5 +1,5 @@ import { BaseBridge } from './BaseBridge'; -import type { ISlashCommand } from '../../definition/slashcommands'; +import type { ISlashCommand } from '@rocket.chat/apps-engine/definition/slashcommands'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; @@ -9,6 +9,8 @@ export abstract class CommandBridge extends BaseBridge { if (this.hasDefaultPermission(appId)) { return this.doesCommandExist(command, appId); } + + return undefined as unknown as boolean; } public async doEnableCommand(command: string, appId: string): Promise { diff --git a/packages/apps-engine/src/server/bridges/ContactBridge.ts b/packages/apps/src/server/bridges/ContactBridge.ts similarity index 92% rename from packages/apps-engine/src/server/bridges/ContactBridge.ts rename to packages/apps/src/server/bridges/ContactBridge.ts index 71aa8ddd543fa..090069e4f7750 100644 --- a/packages/apps-engine/src/server/bridges/ContactBridge.ts +++ b/packages/apps/src/server/bridges/ContactBridge.ts @@ -1,5 +1,5 @@ import { BaseBridge } from './BaseBridge'; -import type { ILivechatContact } from '../../definition/livechat/ILivechatContact'; +import type { ILivechatContact } from '@rocket.chat/apps-engine/definition/livechat/ILivechatContact'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; @@ -17,6 +17,8 @@ export abstract class ContactBridge extends BaseBridge { if (this.hasReadPermission(appId)) { return this.getById(contactId, appId); } + + return undefined; } public async doVerifyContact(verifyContactChannelParams: VerifyContactChannelParams, appId: string): Promise { @@ -29,6 +31,8 @@ export abstract class ContactBridge extends BaseBridge { if (this.hasWritePermission(appId)) { return this.addContactEmail(contactId, email, appId); } + + return undefined as unknown as ILivechatContact; } protected abstract getById(contactId: ILivechatContact['_id'], appId: string): Promise; diff --git a/packages/apps-engine/src/server/bridges/EmailBridge.ts b/packages/apps/src/server/bridges/EmailBridge.ts similarity index 92% rename from packages/apps-engine/src/server/bridges/EmailBridge.ts rename to packages/apps/src/server/bridges/EmailBridge.ts index 285e9a0fe52e0..3692f3d7562bb 100644 --- a/packages/apps-engine/src/server/bridges/EmailBridge.ts +++ b/packages/apps/src/server/bridges/EmailBridge.ts @@ -1,5 +1,5 @@ import { BaseBridge } from './BaseBridge'; -import type { IEmail } from '../../definition/email'; +import type { IEmail } from '@rocket.chat/apps-engine/definition/email'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; diff --git a/packages/apps-engine/src/server/bridges/EnvironmentalVariableBridge.ts b/packages/apps/src/server/bridges/EnvironmentalVariableBridge.ts similarity index 93% rename from packages/apps-engine/src/server/bridges/EnvironmentalVariableBridge.ts rename to packages/apps/src/server/bridges/EnvironmentalVariableBridge.ts index 79b29bf316c41..73fdc44fafa42 100644 --- a/packages/apps-engine/src/server/bridges/EnvironmentalVariableBridge.ts +++ b/packages/apps/src/server/bridges/EnvironmentalVariableBridge.ts @@ -8,18 +8,24 @@ export abstract class EnvironmentalVariableBridge extends BaseBridge { if (this.hasReadPermission(appId)) { return this.getValueByName(envVarName, appId); } + + return undefined; } public async doIsReadable(envVarName: string, appId: string): Promise { if (this.hasReadPermission(appId)) { return this.isReadable(envVarName, appId); } + + return undefined as unknown as boolean; } public async doIsSet(envVarName: string, appId: string): Promise { if (this.hasReadPermission(appId)) { return this.isSet(envVarName, appId); } + + return undefined as unknown as boolean; } protected abstract getValueByName(envVarName: string, appId: string): Promise; diff --git a/packages/apps-engine/src/server/bridges/ExperimentalBridge.ts b/packages/apps/src/server/bridges/ExperimentalBridge.ts similarity index 100% rename from packages/apps-engine/src/server/bridges/ExperimentalBridge.ts rename to packages/apps/src/server/bridges/ExperimentalBridge.ts diff --git a/packages/apps-engine/src/server/bridges/HttpBridge.ts b/packages/apps/src/server/bridges/HttpBridge.ts similarity index 91% rename from packages/apps-engine/src/server/bridges/HttpBridge.ts rename to packages/apps/src/server/bridges/HttpBridge.ts index 7020b21a6317f..5a3ddb205cc90 100644 --- a/packages/apps-engine/src/server/bridges/HttpBridge.ts +++ b/packages/apps/src/server/bridges/HttpBridge.ts @@ -1,5 +1,5 @@ import { BaseBridge } from './BaseBridge'; -import type { IHttpRequest, IHttpResponse, RequestMethod } from '../../definition/accessors'; +import type { IHttpRequest, IHttpResponse, RequestMethod } from '@rocket.chat/apps-engine/definition/accessors'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; @@ -16,6 +16,8 @@ export abstract class HttpBridge extends BaseBridge { if (this.hasDefaultPermission(info.appId)) { return this.call(info); } + + return undefined as unknown as IHttpResponse; } protected abstract call(info: IHttpBridgeRequestInfo): Promise; diff --git a/packages/apps-engine/src/server/bridges/IInternalBridge.ts b/packages/apps/src/server/bridges/IInternalBridge.ts similarity index 73% rename from packages/apps-engine/src/server/bridges/IInternalBridge.ts rename to packages/apps/src/server/bridges/IInternalBridge.ts index 239fac8610998..f4b94b3111e4e 100644 --- a/packages/apps-engine/src/server/bridges/IInternalBridge.ts +++ b/packages/apps/src/server/bridges/IInternalBridge.ts @@ -1,4 +1,4 @@ -import type { ISetting } from '../../definition/settings'; +import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; export interface IInternalBridge { doGetUsernamesOfRoomById(roomId: string): Promise>; diff --git a/packages/apps-engine/src/server/bridges/IInternalFederationBridge.ts b/packages/apps/src/server/bridges/IInternalFederationBridge.ts similarity index 100% rename from packages/apps-engine/src/server/bridges/IInternalFederationBridge.ts rename to packages/apps/src/server/bridges/IInternalFederationBridge.ts diff --git a/packages/apps-engine/src/server/bridges/IInternalPersistenceBridge.ts b/packages/apps/src/server/bridges/IInternalPersistenceBridge.ts similarity index 100% rename from packages/apps-engine/src/server/bridges/IInternalPersistenceBridge.ts rename to packages/apps/src/server/bridges/IInternalPersistenceBridge.ts diff --git a/packages/apps-engine/src/server/bridges/IInternalSchedulerBridge.ts b/packages/apps/src/server/bridges/IInternalSchedulerBridge.ts similarity index 100% rename from packages/apps-engine/src/server/bridges/IInternalSchedulerBridge.ts rename to packages/apps/src/server/bridges/IInternalSchedulerBridge.ts diff --git a/packages/apps-engine/src/server/bridges/IInternalUserBridge.ts b/packages/apps/src/server/bridges/IInternalUserBridge.ts similarity index 75% rename from packages/apps-engine/src/server/bridges/IInternalUserBridge.ts rename to packages/apps/src/server/bridges/IInternalUserBridge.ts index 2bb4006d01deb..a539f8b7d23f8 100644 --- a/packages/apps-engine/src/server/bridges/IInternalUserBridge.ts +++ b/packages/apps/src/server/bridges/IInternalUserBridge.ts @@ -1,4 +1,4 @@ -import type { IUser, IUserCreationOptions } from '../../definition/users'; +import type { IUser, IUserCreationOptions } from '@rocket.chat/apps-engine/definition/users'; export interface IInternalUserBridge { create(data: Partial, appId: string, options?: IUserCreationOptions): Promise; diff --git a/packages/apps/src/server/bridges/IListenerBridge.ts b/packages/apps/src/server/bridges/IListenerBridge.ts new file mode 100644 index 0000000000000..d4a595ed88c1e --- /dev/null +++ b/packages/apps/src/server/bridges/IListenerBridge.ts @@ -0,0 +1,59 @@ +import type { ILivechatDepartment, ILivechatVisitor, IMessage, IOmnichannelRoom, IRoom, IUser } from '@rocket.chat/core-typings'; + +import type { AppEvents } from '../../AppsEngine'; +import type { IMessage as IAppsMessage } from '@rocket.chat/apps-engine/definition/messages'; +import type { AppInterface } from '@rocket.chat/apps-engine/definition/metadata'; +import type { IRoom as IAppsRoom } from '@rocket.chat/apps-engine/definition/rooms'; +import type { UIKitIncomingInteraction } from '@rocket.chat/apps-engine/definition/uikit'; + +export interface IListenerBridge { + messageEvent(int: AppInterface, message: IAppsMessage): Promise; + roomEvent(int: AppInterface, room: IAppsRoom): Promise; + uiKitInteractionEvent(int: AppInterface, action: UIKitIncomingInteraction): Promise; + + messageEvent(int: 'IPostMessageDeleted', message: IMessage, userDeleted: IUser): Promise; + messageEvent(int: 'IPostMessageReacted', message: IMessage, userReacted: IUser, reaction: string, isReacted: boolean): Promise; + messageEvent(int: 'IPostMessageFollowed', message: IMessage, userFollowed: IUser, isFollowed: boolean): Promise; + messageEvent(int: 'IPostMessagePinned', message: IMessage, userPinned: IUser, isPinned: boolean): Promise; + messageEvent(int: 'IPostMessageStarred', message: IMessage, userStarred: IUser, isStarred: boolean): Promise; + messageEvent(int: 'IPostMessageReported', message: IMessage, userReported: IUser, reason: boolean): Promise; + messageEvent( + int: 'IPreMessageSentPrevent' | 'IPreMessageDeletePrevent' | 'IPreMessageUpdatedPrevent', + message: IMessage, + ): Promise; + messageEvent( + int: 'IPreMessageSentExtend' | 'IPreMessageSentModify' | 'IPreMessageUpdatedExtend' | 'IPreMessageUpdatedModify', + message: IMessage, + ): Promise; + messageEvent(int: 'IPostMessageSent' | 'IPostMessageUpdated' | 'IPostSystemMessageSent', message: IMessage): Promise; + + roomEvent(int: 'IPreRoomUserJoined' | 'IPostRoomUserJoined', room: IRoom, joiningUser: IUser, invitingUser?: IUser): Promise; + roomEvent(int: 'IPreRoomUserLeave' | 'IPostRoomUserLeave', room: IRoom, leavingUser: IUser): Promise; + roomEvent(int: 'IPreRoomCreatePrevent' | 'IPreRoomDeletePrevent', room: IRoom): Promise; + roomEvent(int: 'IPreRoomCreateExtend' | 'IPreRoomCreateModify', room: IRoom): Promise; + roomEvent(int: 'IPostRoomCreate' | 'IPostRoomDeleted', room: IRoom): Promise; + + livechatEvent( + int: + | 'IPostLivechatAgentAssigned' + | 'IPostLivechatAgentUnassigned' + | 'IPostLivechatDepartmentRemoved' + | 'IPostLivechatDepartmentDisabled', + data: { user: IUser; room: IOmnichannelRoom }, + ): Promise; + livechatEvent( + int: 'IPostLivechatRoomTransferred', + data: { type: 'agent'; room: IRoom['_id']; from: IUser['_id']; to: IUser['_id'] }, + ): Promise; + livechatEvent( + int: 'IPostLivechatRoomTransferred', + data: { type: 'department'; room: IRoom['_id']; from: ILivechatDepartment['_id']; to: ILivechatDepartment['_id'] }, + ): Promise; + livechatEvent(int: 'IPostLivechatGuestSaved', data: ILivechatVisitor['_id']): Promise; + livechatEvent(int: 'IPostLivechatRoomSaved', data: IRoom['_id']): Promise; + livechatEvent( + int: 'ILivechatRoomClosedHandler' | 'IPostLivechatRoomStarted' | 'IPostLivechatRoomClosed' | 'IPreLivechatRoomCreatePrevent', + data: IRoom, + ): Promise; + livechatEvent(int: AppEvents | AppEvents[keyof AppEvents], data: any): Promise; +} diff --git a/packages/apps-engine/src/server/bridges/InternalBridge.ts b/packages/apps/src/server/bridges/InternalBridge.ts similarity index 89% rename from packages/apps-engine/src/server/bridges/InternalBridge.ts rename to packages/apps/src/server/bridges/InternalBridge.ts index 74188fab2b499..739f5f19dd7a0 100644 --- a/packages/apps-engine/src/server/bridges/InternalBridge.ts +++ b/packages/apps/src/server/bridges/InternalBridge.ts @@ -1,5 +1,5 @@ import { BaseBridge } from './BaseBridge'; -import type { ISetting } from '../../definition/settings'; +import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; export abstract class InternalBridge extends BaseBridge { public doGetUsernamesOfRoomById(roomId: string): Promise> { diff --git a/packages/apps-engine/src/server/bridges/ListenerBridge.ts b/packages/apps/src/server/bridges/ListenerBridge.ts similarity index 71% rename from packages/apps-engine/src/server/bridges/ListenerBridge.ts rename to packages/apps/src/server/bridges/ListenerBridge.ts index 19806220e9cbf..e906339797d29 100644 --- a/packages/apps-engine/src/server/bridges/ListenerBridge.ts +++ b/packages/apps/src/server/bridges/ListenerBridge.ts @@ -1,7 +1,7 @@ import { BaseBridge } from './BaseBridge'; -import type { IMessage } from '../../definition/messages'; -import type { AppInterface } from '../../definition/metadata'; -import type { IRoom } from '../../definition/rooms'; +import type { IMessage } from '@rocket.chat/apps-engine/definition/messages'; +import type { AppInterface } from '@rocket.chat/apps-engine/definition/metadata'; +import type { IRoom } from '@rocket.chat/apps-engine/definition/rooms'; export abstract class ListenerBridge extends BaseBridge { public async doMessageEvent(int: AppInterface, message: IMessage): Promise { diff --git a/packages/apps-engine/src/server/bridges/LivechatBridge.ts b/packages/apps/src/server/bridges/LivechatBridge.ts similarity index 89% rename from packages/apps-engine/src/server/bridges/LivechatBridge.ts rename to packages/apps/src/server/bridges/LivechatBridge.ts index 88a7575898049..bc8d479b3e7b7 100644 --- a/packages/apps-engine/src/server/bridges/LivechatBridge.ts +++ b/packages/apps/src/server/bridges/LivechatBridge.ts @@ -1,5 +1,5 @@ import { BaseBridge } from './BaseBridge'; -import type { IExtraRoomParams } from '../../definition/accessors/ILivechatCreator'; +import type { IExtraRoomParams } from '@rocket.chat/apps-engine/definition/accessors/ILivechatCreator'; import type { IDepartment, IVisitorExternalIdentifier, @@ -8,9 +8,9 @@ import type { ILivechatTransferData, IVisitor, ResolveVisitorContactData, -} from '../../definition/livechat'; -import type { IMessage } from '../../definition/messages'; -import type { IUser } from '../../definition/users'; +} from '@rocket.chat/apps-engine/definition/livechat'; +import type { IMessage } from '@rocket.chat/apps-engine/definition/messages'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; @@ -29,27 +29,35 @@ type LivechatMultiplePermissions = keyof Pick { - if (this.hasReadPermission(appId, 'livechat-status')) { + if (this.hasReadPermission(appId!, 'livechat-status')) { return this.isOnlineAsync(departmentId, appId); } + + return undefined as unknown as boolean; } public async doCreateMessage(message: ILivechatMessage, appId: string): Promise { if (this.hasWritePermission(appId, 'livechat-message')) { return this.createMessage(message, appId); } + + return undefined as unknown as string; } public async doGetMessageById(messageId: string, appId: string): Promise { if (this.hasReadPermission(appId, 'livechat-message')) { return this.getMessageById(messageId, appId); } + + return undefined as unknown as ILivechatMessage; } public async doUpdateMessage(message: ILivechatMessage, appId: string): Promise { @@ -65,42 +73,56 @@ export abstract class LivechatBridge extends BaseBridge { if (this.hasWritePermission(appId, 'livechat-visitor')) { return this.createVisitor(visitor, appId); } + + return undefined as unknown as string; } public async doCreateAndReturnVisitor(visitor: IVisitor, appId: string): Promise { if (this.hasWritePermission(appId, 'livechat-visitor')) { return this.createAndReturnVisitor(visitor, appId); } + + return undefined; } public async doFindVisitors(query: object, appId: string): Promise> { if (this.hasReadPermission(appId, 'livechat-visitor')) { return this.findVisitors(query, appId); } + + return undefined as unknown as Array; } public async doFindVisitorById(id: string, appId: string): Promise { if (this.hasReadPermission(appId, 'livechat-visitor')) { return this.findVisitorById(id, appId); } + + return undefined; } public async doFindVisitorByEmail(email: string, appId: string): Promise { if (this.hasReadPermission(appId, 'livechat-visitor')) { return this.findVisitorByEmail(email, appId); } + + return undefined; } public async doFindVisitorByToken(token: string, appId: string): Promise { if (this.hasReadPermission(appId, 'livechat-visitor')) { return this.findVisitorByToken(token, appId); } + + return undefined; } public async doFindVisitorByPhoneNumber(phoneNumber: string, appId: string): Promise { if (this.hasReadPermission(appId, 'livechat-visitor')) { return this.findVisitorByPhoneNumber(phoneNumber, appId); } + + return undefined; } public async doResolveVisitor( @@ -111,12 +133,16 @@ export abstract class LivechatBridge extends BaseBridge { if (this.hasWritePermission(appId, 'livechat-visitor')) { return this.resolveVisitor(externalId, contactData, appId); } + + return undefined; } public async doTransferVisitor(visitor: IVisitor, transferData: ILivechatTransferData, appId: string): Promise { if (this.hasWritePermission(appId, 'livechat-visitor')) { return this.transferVisitor(visitor, transferData, appId); } + + return undefined as unknown as boolean; } public async doUpdateVisitorExternalId( @@ -127,54 +153,72 @@ export abstract class LivechatBridge extends BaseBridge { if (this.hasWritePermission(appId, 'livechat-visitor')) { return this.updateVisitorExternalId(visitorId, externalId, appId); } + + return undefined; } public async doCreateRoom(visitor: IVisitor, agent: IUser, appId: string, extraParams?: IExtraRoomParams): Promise { if (this.hasWritePermission(appId, 'livechat-room')) { return this.createRoom(visitor, agent, appId, extraParams); } + + return undefined as unknown as ILivechatRoom; } public async doCloseRoom(room: ILivechatRoom, comment: string, closer: IUser | undefined, appId: string): Promise { if (this.hasWritePermission(appId, 'livechat-room')) { return this.closeRoom(room, comment, closer, appId); } + + return undefined as unknown as boolean; } public async doCountOpenRoomsByAgentId(agentId: string, appId: string): Promise { if (this.hasReadPermission(appId, 'livechat-room')) { return this.countOpenRoomsByAgentId(agentId, appId); } + + return undefined as unknown as number; } public async doFindOpenRoomsByAgentId(agentId: string, appId: string): Promise> { if (this.hasReadPermission(appId, 'livechat-room')) { return this.findOpenRoomsByAgentId(agentId, appId); } + + return undefined as unknown as Array; } public async doFindRooms(visitor: IVisitor, departmentId: string | null, appId: string): Promise> { if (this.hasReadPermission(appId, 'livechat-room')) { return this.findRooms(visitor, departmentId, appId); } + + return undefined as unknown as Array; } public async doFindDepartmentByIdOrName(value: string, appId: string): Promise { if (this.hasReadPermission(appId, 'livechat-department') || this.hasMultiplePermission(appId, 'livechat-department')) { return this.findDepartmentByIdOrName(value, appId); } + + return undefined; } public async doFindDepartmentsEnabledWithAgents(appId: string): Promise> { if (this.hasMultiplePermission(appId, 'livechat-department')) { return this.findDepartmentsEnabledWithAgents(appId); } + + return undefined as unknown as Array; } public async do_fetchLivechatRoomMessages(appId: string, roomId: string): Promise> { if (this.hasMultiplePermission(appId, 'livechat-message')) { return this._fetchLivechatRoomMessages(appId, roomId); } + + return undefined as unknown as Array; } public async doSetCustomFields( @@ -184,6 +228,8 @@ export abstract class LivechatBridge extends BaseBridge { if (this.hasWritePermission(appId, 'livechat-custom-fields')) { return this.setCustomFields(data, appId); } + + return undefined as unknown as number; } /** diff --git a/packages/apps-engine/src/server/bridges/MessageBridge.ts b/packages/apps/src/server/bridges/MessageBridge.ts similarity index 89% rename from packages/apps-engine/src/server/bridges/MessageBridge.ts rename to packages/apps/src/server/bridges/MessageBridge.ts index e1d437339cb10..ae0a788c16193 100644 --- a/packages/apps-engine/src/server/bridges/MessageBridge.ts +++ b/packages/apps/src/server/bridges/MessageBridge.ts @@ -1,8 +1,8 @@ import { BaseBridge } from './BaseBridge'; -import type { ITypingOptions } from '../../definition/accessors/INotifier'; -import type { IMessage, Reaction } from '../../definition/messages'; -import type { IRoom } from '../../definition/rooms'; -import type { IUser } from '../../definition/users'; +import type { ITypingOptions } from '@rocket.chat/apps-engine/definition/accessors/INotifier'; +import type { IMessage, Reaction } from '@rocket.chat/apps-engine/definition/messages'; +import type { IRoom } from '@rocket.chat/apps-engine/definition/rooms'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; @@ -16,6 +16,8 @@ export abstract class MessageBridge extends BaseBridge { if (this.hasWritePermission(appId)) { return this.create(message, appId); } + + return undefined as unknown as string; } public async doUpdate(message: IMessage, appId: string): Promise { @@ -46,6 +48,8 @@ export abstract class MessageBridge extends BaseBridge { if (this.hasReadPermission(appId)) { return this.getById(messageId, appId); } + + return undefined as unknown as IMessage; } public async doDelete(message: IMessage, user: IUser, appId: string): Promise { diff --git a/packages/apps-engine/src/server/bridges/ModerationBridge.ts b/packages/apps/src/server/bridges/ModerationBridge.ts similarity index 84% rename from packages/apps-engine/src/server/bridges/ModerationBridge.ts rename to packages/apps/src/server/bridges/ModerationBridge.ts index 39109c2bc2d64..1685fba7d1992 100644 --- a/packages/apps-engine/src/server/bridges/ModerationBridge.ts +++ b/packages/apps/src/server/bridges/ModerationBridge.ts @@ -1,6 +1,6 @@ import { BaseBridge } from './BaseBridge'; -import type { IMessage } from '../../definition/messages'; -import type { IUser } from '../../definition/users'; +import type { IMessage } from '@rocket.chat/apps-engine/definition/messages'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; @@ -8,13 +8,13 @@ import { AppPermissions } from '../permissions/AppPermissions'; export abstract class ModerationBridge extends BaseBridge { public async doReport(messageId: IMessage['id'], description: string, userId: string, appId: string): Promise { if (this.hasWritePermission(appId)) { - return this.report(messageId, description, userId, appId); + return this.report(messageId!, description, userId, appId); } } public async doDismissReportsByMessageId(messageId: IMessage['id'], reason: string, action: string, appId: string): Promise { if (this.hasWritePermission(appId)) { - return this.dismissReportsByMessageId(messageId, reason, action, appId); + return this.dismissReportsByMessageId(messageId!, reason, action, appId); } } diff --git a/packages/apps-engine/src/server/bridges/OAuthAppsBridge.ts b/packages/apps/src/server/bridges/OAuthAppsBridge.ts similarity index 84% rename from packages/apps-engine/src/server/bridges/OAuthAppsBridge.ts rename to packages/apps/src/server/bridges/OAuthAppsBridge.ts index 3e34510953fd1..214f08a0f1865 100644 --- a/packages/apps-engine/src/server/bridges/OAuthAppsBridge.ts +++ b/packages/apps/src/server/bridges/OAuthAppsBridge.ts @@ -1,26 +1,32 @@ import { BaseBridge } from './BaseBridge'; -import type { IOAuthApp, IOAuthAppParams } from '../../definition/accessors/IOAuthApp'; +import type { IOAuthApp, IOAuthAppParams } from '@rocket.chat/apps-engine/definition/accessors/IOAuthApp'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; export abstract class OAuthAppsBridge extends BaseBridge { - public async doCreate(oAuthApp: IOAuthAppParams, appId: string) { + public async doCreate(oAuthApp: IOAuthAppParams, appId: string): Promise { if (this.hasWritePermission(appId)) { return this.create(oAuthApp, appId); } + + return undefined; } - public async doGetByid(id: string, appId: string) { + public async doGetByid(id: string, appId: string): Promise { if (this.hasReadPermission(appId)) { return this.getById(id, appId); } + + return undefined; } - public async doGetByName(name: string, appId: string) { + public async doGetByName(name: string, appId: string): Promise | undefined> { if (this.hasReadPermission(appId)) { return this.getByName(name, appId); } + + return undefined; } public async doUpdate(oAuthApp: IOAuthAppParams, id: string, appId: string) { diff --git a/packages/apps-engine/src/server/bridges/OutboundMessagesBridge.ts b/packages/apps/src/server/bridges/OutboundMessagesBridge.ts similarity index 96% rename from packages/apps-engine/src/server/bridges/OutboundMessagesBridge.ts rename to packages/apps/src/server/bridges/OutboundMessagesBridge.ts index 91751d1bcafc9..bd45312a468d9 100644 --- a/packages/apps-engine/src/server/bridges/OutboundMessagesBridge.ts +++ b/packages/apps/src/server/bridges/OutboundMessagesBridge.ts @@ -3,7 +3,7 @@ import type { IOutboundEmailMessageProvider, IOutboundMessageProviders, IOutboundPhoneMessageProvider, -} from '../../definition/outboundCommunication'; +} from '@rocket.chat/apps-engine/definition/outboundCommunication'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; diff --git a/packages/apps-engine/src/server/bridges/PersistenceBridge.ts b/packages/apps/src/server/bridges/PersistenceBridge.ts similarity index 93% rename from packages/apps-engine/src/server/bridges/PersistenceBridge.ts rename to packages/apps/src/server/bridges/PersistenceBridge.ts index bb9d6a69dabfe..1dc64023b95e1 100644 --- a/packages/apps-engine/src/server/bridges/PersistenceBridge.ts +++ b/packages/apps/src/server/bridges/PersistenceBridge.ts @@ -1,5 +1,5 @@ import { BaseBridge } from './BaseBridge'; -import type { RocketChatAssociationRecord } from '../../definition/metadata'; +import type { RocketChatAssociationRecord } from '@rocket.chat/apps-engine/definition/metadata'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; @@ -15,42 +15,56 @@ export abstract class PersistenceBridge extends BaseBridge { if (this.hasDefaultPermission(appId)) { return this.create(data, appId); } + + return undefined as unknown as string; } public async doCreateWithAssociations(data: object, associations: Array, appId: string): Promise { if (this.hasDefaultPermission(appId)) { return this.createWithAssociations(data, associations, appId); } + + return undefined as unknown as string; } public async doReadById(id: string, appId: string): Promise { if (this.hasDefaultPermission(appId)) { return this.readById(id, appId); } + + return undefined as unknown as object; } public async doReadByAssociations(associations: Array, appId: string): Promise> { if (this.hasDefaultPermission(appId)) { return this.readByAssociations(associations, appId); } + + return undefined as unknown as Array; } public async doRemove(id: string, appId: string): Promise { if (this.hasDefaultPermission(appId)) { return this.remove(id, appId); } + + return undefined; } public async doRemoveByAssociations(associations: Array, appId: string): Promise | undefined> { if (this.hasDefaultPermission(appId)) { return this.removeByAssociations(associations, appId); } + + return undefined; } public async doUpdate(id: string, data: object, upsert: boolean, appId: string): Promise { if (this.hasDefaultPermission(appId)) { return this.update(id, data, upsert, appId); } + + return undefined as unknown as string; } public async doUpdateByAssociations( @@ -62,6 +76,8 @@ export abstract class PersistenceBridge extends BaseBridge { if (this.hasDefaultPermission(appId)) { return this.updateByAssociations(associations, data, upsert, appId); } + + return undefined as unknown as string; } /** diff --git a/packages/apps-engine/src/server/bridges/RoleBridge.ts b/packages/apps/src/server/bridges/RoleBridge.ts similarity index 87% rename from packages/apps-engine/src/server/bridges/RoleBridge.ts rename to packages/apps/src/server/bridges/RoleBridge.ts index 46066826fa7c8..c8e0f9699e022 100644 --- a/packages/apps-engine/src/server/bridges/RoleBridge.ts +++ b/packages/apps/src/server/bridges/RoleBridge.ts @@ -1,5 +1,5 @@ import { BaseBridge } from './BaseBridge'; -import type { IRole } from '../../definition/roles'; +import type { IRole } from '@rocket.chat/apps-engine/definition/roles'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; @@ -9,12 +9,16 @@ export abstract class RoleBridge extends BaseBridge { if (this.hasReadPermission(appId)) { return this.getOneByIdOrName(idOrName, appId); } + + return undefined as unknown as IRole | null; } public async doGetCustomRoles(appId: string): Promise> { if (this.hasReadPermission(appId)) { return this.getCustomRoles(appId); } + + return undefined as unknown as Array; } protected abstract getOneByIdOrName(idOrName: IRole['id'] | IRole['name'], appId: string): Promise; diff --git a/packages/apps-engine/src/server/bridges/RoomBridge.ts b/packages/apps/src/server/bridges/RoomBridge.ts similarity index 83% rename from packages/apps-engine/src/server/bridges/RoomBridge.ts rename to packages/apps/src/server/bridges/RoomBridge.ts index 66f4ff1a878a2..16a9e6859e687 100644 --- a/packages/apps-engine/src/server/bridges/RoomBridge.ts +++ b/packages/apps/src/server/bridges/RoomBridge.ts @@ -1,100 +1,78 @@ import { BaseBridge } from './BaseBridge'; -import type { IMessage, IMessageRaw } from '../../definition/messages'; -import type { IRoom, IRoomRaw, RoomType } from '../../definition/rooms'; -import type { IUser } from '../../definition/users'; +import type { IMessage, IMessageRaw } from '@rocket.chat/apps-engine/definition/messages'; +import type { IRoom, IRoomRaw } from '@rocket.chat/apps-engine/definition/rooms'; +import { GetMessagesSortableFields } from '@rocket.chat/apps-engine/definition/rooms/IGetMessagesOptions'; +import type { GetMessagesOptions, GetRoomsFilters, GetRoomsOptions } from '@rocket.chat/apps-engine/definition/rooms/IGetMessagesOptions'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; -export const GetMessagesSortableFields = ['createdAt'] as const; - -export type GetMessagesOptions = { - limit: number; - skip: number; - sort: Record<(typeof GetMessagesSortableFields)[number], 'asc' | 'desc'>; - showThreadMessages: boolean; -}; - -/** - * Filters for querying rooms in the system. - */ -export type GetRoomsFilters = { - /** - * When specified, only rooms matching the provided types will be returned. - */ - types?: Array; - /** - * Filter to include or exclude discussion rooms. - * - * When undefined (default), discussions are included in the result set. - * - * When true, ONLY discussions are included in the result set (remove non-discussions). - * When false, discussion rooms are excluded from the result set. - */ - discussions?: boolean; - /** - * Filter to include or exclude team main rooms. - * - * When undefined (default), team main rooms are included in the result set. - * - * When true, ONLY team main rooms are included in the result set (remove non-teams). - * When false, team main rooms are excluded from the result set. - */ - teams?: boolean; -}; - -export type GetRoomsOptions = { - limit?: number; - skip?: number; -}; +export { GetMessagesSortableFields, GetMessagesOptions, GetRoomsFilters, GetRoomsOptions }; export abstract class RoomBridge extends BaseBridge { public async doCreate(room: IRoom, members: Array, appId: string): Promise { if (this.hasWritePermission(appId)) { return this.create(room, members, appId); } + + return undefined as unknown as string; } public async doGetById(roomId: string, appId: string): Promise { if (this.hasReadPermission(appId)) { return this.getById(roomId, appId); } + + return undefined as unknown as IRoom; } public async doGetByName(roomName: string, appId: string): Promise { if (this.hasReadPermission(appId)) { return this.getByName(roomName, appId); } + + return undefined as unknown as IRoom; } public async doGetCreatorById(roomId: string, appId: string): Promise { if (this.hasReadPermission(appId)) { return this.getCreatorById(roomId, appId); } + + return undefined; } public async doGetCreatorByName(roomName: string, appId: string): Promise { if (this.hasReadPermission(appId)) { return this.getCreatorByName(roomName, appId); } + + return undefined; } public async doGetDirectByUsernames(usernames: Array, appId: string): Promise { if (this.hasReadPermission(appId)) { return this.getDirectByUsernames(usernames, appId); } + + return undefined; } public async doGetMembers(roomId: string, appId: string): Promise> { if (this.hasReadPermission(appId)) { return this.getMembers(roomId, appId); } + + return undefined as unknown as Array; } public async doGetAllRooms(filters: GetRoomsFilters = {}, options: GetRoomsOptions = {}, appId: string): Promise | undefined> { if (this.hasViewAllRoomsPermission(appId)) { return this.getAllRooms(filters, options, appId); } + + return undefined; } public async doUpdate(room: IRoom, members: Array, appId: string): Promise { @@ -113,6 +91,8 @@ export abstract class RoomBridge extends BaseBridge { if (this.hasWritePermission(appId)) { return this.createDiscussion(room, parentMessage, reply, members, appId); } + + return undefined as unknown as string; } public async doDelete(room: string, appId: string): Promise { @@ -125,24 +105,32 @@ export abstract class RoomBridge extends BaseBridge { if (this.hasReadPermission(appId)) { return this.getModerators(roomId, appId); } + + return undefined as unknown as Array; } public async doGetOwners(roomId: string, appId: string): Promise> { if (this.hasReadPermission(appId)) { return this.getOwners(roomId, appId); } + + return undefined as unknown as Array; } public async doGetLeaders(roomId: string, appId: string): Promise> { if (this.hasReadPermission(appId)) { return this.getLeaders(roomId, appId); } + + return undefined as unknown as Array; } public async doGetMessages(roomId: string, options: GetMessagesOptions, appId: string): Promise { if (this.hasReadPermission(appId)) { return this.getMessages(roomId, options, appId); } + + return undefined as unknown as IMessageRaw[]; } public async doRemoveUsers(roomId: string, usernames: Array, appId: string): Promise { @@ -155,12 +143,16 @@ export abstract class RoomBridge extends BaseBridge { if (this.hasReadPermission(appId)) { return this.getUnreadByUser(roomId, uid, options, appId); } + + return undefined as unknown as IMessageRaw[]; } public async doGetUserUnreadMessageCount(roomId: string, uid: string, appId: string): Promise { if (this.hasReadPermission(appId)) { return this.getUserUnreadMessageCount(roomId, uid, appId); } + + return undefined as unknown as number; } protected abstract create(room: IRoom, members: Array, appId: string): Promise; diff --git a/packages/apps-engine/src/server/bridges/SchedulerBridge.ts b/packages/apps/src/server/bridges/SchedulerBridge.ts similarity index 97% rename from packages/apps-engine/src/server/bridges/SchedulerBridge.ts rename to packages/apps/src/server/bridges/SchedulerBridge.ts index e881c2f08be6a..02b32ba61ceb9 100644 --- a/packages/apps-engine/src/server/bridges/SchedulerBridge.ts +++ b/packages/apps/src/server/bridges/SchedulerBridge.ts @@ -1,5 +1,5 @@ import { BaseBridge } from './BaseBridge'; -import type { IOnetimeSchedule, IProcessor, IRecurringSchedule } from '../../definition/scheduler'; +import type { IOnetimeSchedule, IProcessor, IRecurringSchedule } from '@rocket.chat/apps-engine/definition/scheduler'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; diff --git a/packages/apps-engine/src/server/bridges/ServerSettingBridge.ts b/packages/apps/src/server/bridges/ServerSettingBridge.ts similarity index 92% rename from packages/apps-engine/src/server/bridges/ServerSettingBridge.ts rename to packages/apps/src/server/bridges/ServerSettingBridge.ts index e108a23d0d268..97dfedbb5524f 100644 --- a/packages/apps-engine/src/server/bridges/ServerSettingBridge.ts +++ b/packages/apps/src/server/bridges/ServerSettingBridge.ts @@ -1,5 +1,5 @@ import { BaseBridge } from './BaseBridge'; -import type { ISetting } from '../../definition/settings'; +import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; @@ -9,12 +9,16 @@ export abstract class ServerSettingBridge extends BaseBridge { if (this.hasReadPermission(appId)) { return this.getAll(appId); } + + return undefined as unknown as Array; } public async doGetOneById(id: string, appId: string): Promise { if (this.hasReadPermission(appId)) { return this.getOneById(id, appId); } + + return undefined as unknown as ISetting; } public async doHideGroup(name: string, appId: string): Promise { @@ -33,6 +37,8 @@ export abstract class ServerSettingBridge extends BaseBridge { if (this.hasReadPermission(appId)) { return this.isReadableById(id, appId); } + + return undefined as unknown as boolean; } public async doUpdateOne(setting: ISetting, appId: string): Promise { diff --git a/packages/apps-engine/src/server/bridges/ThreadBridge.ts b/packages/apps/src/server/bridges/ThreadBridge.ts similarity index 81% rename from packages/apps-engine/src/server/bridges/ThreadBridge.ts rename to packages/apps/src/server/bridges/ThreadBridge.ts index cdbc42035cd0a..48b32f99919e8 100644 --- a/packages/apps-engine/src/server/bridges/ThreadBridge.ts +++ b/packages/apps/src/server/bridges/ThreadBridge.ts @@ -1,6 +1,6 @@ import { BaseBridge } from './BaseBridge'; -import type { ITypingOptions } from '../../definition/accessors/INotifier'; -import type { IMessage } from '../../definition/messages'; +import type { ITypingOptions } from '@rocket.chat/apps-engine/definition/accessors/INotifier'; +import type { IMessage } from '@rocket.chat/apps-engine/definition/messages'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; @@ -14,6 +14,8 @@ export abstract class ThreadBridge extends BaseBridge { if (this.hasReadPermission(appId)) { return this.getById(messageId, appId); } + + return undefined as unknown as Array; } protected abstract getById(messageId: string, appId: string): Promise>; diff --git a/packages/apps-engine/src/server/bridges/UiInteractionBridge.ts b/packages/apps/src/server/bridges/UiInteractionBridge.ts similarity index 86% rename from packages/apps-engine/src/server/bridges/UiInteractionBridge.ts rename to packages/apps/src/server/bridges/UiInteractionBridge.ts index e085d389ff4e0..eee981d3ff850 100644 --- a/packages/apps-engine/src/server/bridges/UiInteractionBridge.ts +++ b/packages/apps/src/server/bridges/UiInteractionBridge.ts @@ -1,6 +1,6 @@ import { BaseBridge } from './BaseBridge'; -import type { IUIKitInteraction } from '../../definition/uikit'; -import type { IUser } from '../../definition/users'; +import type { IUIKitInteraction } from '@rocket.chat/apps-engine/definition/uikit'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; diff --git a/packages/apps-engine/src/server/bridges/UploadBridge.ts b/packages/apps/src/server/bridges/UploadBridge.ts similarity index 85% rename from packages/apps-engine/src/server/bridges/UploadBridge.ts rename to packages/apps/src/server/bridges/UploadBridge.ts index 65d0ae0b13449..fbda9c0f34a38 100644 --- a/packages/apps-engine/src/server/bridges/UploadBridge.ts +++ b/packages/apps/src/server/bridges/UploadBridge.ts @@ -1,6 +1,6 @@ import { BaseBridge } from './BaseBridge'; -import type { IUpload } from '../../definition/uploads'; -import type { IUploadDetails } from '../../definition/uploads/IUploadDetails'; +import type { IUpload } from '@rocket.chat/apps-engine/definition/uploads'; +import type { IUploadDetails } from '@rocket.chat/apps-engine/definition/uploads/IUploadDetails'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; @@ -10,18 +10,24 @@ export abstract class UploadBridge extends BaseBridge { if (this.hasReadPermission(appId)) { return this.getById(id, appId); } + + return undefined as unknown as IUpload; } public async doGetBuffer(upload: IUpload, appId: string): Promise { if (this.hasReadPermission(appId)) { return this.getBuffer(upload, appId); } + + return undefined as unknown as Buffer; } public async doCreateUpload(details: IUploadDetails, buffer: Buffer, appId: string): Promise { if (this.hasWritePermission(appId)) { return this.createUpload(details, buffer, appId); } + + return undefined as unknown as IUpload; } protected abstract getById(id: string, appId: string): Promise; diff --git a/packages/apps-engine/src/server/bridges/UserBridge.ts b/packages/apps/src/server/bridges/UserBridge.ts similarity index 91% rename from packages/apps-engine/src/server/bridges/UserBridge.ts rename to packages/apps/src/server/bridges/UserBridge.ts index 72cf52eb17c1d..8844b77ad210d 100644 --- a/packages/apps-engine/src/server/bridges/UserBridge.ts +++ b/packages/apps/src/server/bridges/UserBridge.ts @@ -1,5 +1,5 @@ import { BaseBridge } from './BaseBridge'; -import type { IUser, IUserCreationOptions, UserType } from '../../definition/users'; +import type { IUser, IUserCreationOptions, UserType } from '@rocket.chat/apps-engine/definition/users'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; @@ -9,12 +9,16 @@ export abstract class UserBridge extends BaseBridge { if (this.hasReadPermission(appId)) { return this.getById(id, appId); } + + return undefined as unknown as IUser; } public async doGetByUsername(username: string, appId: string): Promise { if (this.hasReadPermission(appId)) { return this.getByUsername(username, appId); } + + return undefined as unknown as IUser; } public async doGetAppUser(appId?: string): Promise { @@ -25,42 +29,56 @@ export abstract class UserBridge extends BaseBridge { if (this.hasWritePermission(appId)) { return this.create(data, appId, options || {}); } + + return undefined as unknown as string; } public async doRemove(user: IUser, appId: string): Promise { if (this.hasWritePermission(appId)) { return this.remove(user, appId); } + + return undefined as unknown as boolean; } public async doUpdate(user: IUser, updates: Partial, appId: string): Promise { if (this.hasWritePermission(appId)) { return this.update(user, updates, appId); } + + return undefined as unknown as boolean; } public async doGetUserUnreadMessageCount(uid: string, appId: string): Promise { if (this.hasReadPermission(appId)) { return this.getUserUnreadMessageCount(uid, appId); } + + return undefined as unknown as number; } public async doGetUserRoomIds(userId: string, appId: string): Promise { if (this.hasReadPermission(appId)) { return this.getUserRoomIds(userId, appId); } + + return undefined as unknown as string[]; } public async doDeleteUsersCreatedByApp(appId: string, type: UserType.BOT | UserType.APP): Promise { if (this.hasWritePermission(appId)) { return this.deleteUsersCreatedByApp(appId, type); } + + return undefined as unknown as boolean; } public async doDeactivate(userId: IUser['id'], confirmRelinquish: boolean, appId: string): Promise { if (this.hasWritePermission(appId)) { return this.deactivate(userId, confirmRelinquish, appId); } + + return undefined as unknown as boolean; } protected abstract getById(id: string, appId: string): Promise; diff --git a/packages/apps-engine/src/server/bridges/VideoConferenceBridge.ts b/packages/apps/src/server/bridges/VideoConferenceBridge.ts similarity index 86% rename from packages/apps-engine/src/server/bridges/VideoConferenceBridge.ts rename to packages/apps/src/server/bridges/VideoConferenceBridge.ts index b2d57f3317341..f4f1d8446aa0b 100644 --- a/packages/apps-engine/src/server/bridges/VideoConferenceBridge.ts +++ b/packages/apps/src/server/bridges/VideoConferenceBridge.ts @@ -1,7 +1,7 @@ import { BaseBridge } from './BaseBridge'; -import type { IVideoConfProvider } from '../../definition/videoConfProviders'; -import type { AppVideoConference } from '../../definition/videoConferences/AppVideoConference'; -import type { VideoConference } from '../../definition/videoConferences/IVideoConference'; +import type { IVideoConfProvider } from '@rocket.chat/apps-engine/definition/videoConfProviders'; +import type { AppVideoConference } from '@rocket.chat/apps-engine/definition/videoConferences/AppVideoConference'; +import type { VideoConference } from '@rocket.chat/apps-engine/definition/videoConferences/IVideoConference'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { AppPermissionManager } from '../managers/AppPermissionManager'; import { AppPermissions } from '../permissions/AppPermissions'; @@ -11,12 +11,16 @@ export abstract class VideoConferenceBridge extends BaseBridge { if (this.hasReadPermission(appId)) { return this.getById(callId, appId); } + + return undefined as unknown as VideoConference; } public async doCreate(call: AppVideoConference, appId: string): Promise { if (this.hasWritePermission(appId)) { return this.create(call, appId); } + + return undefined as unknown as string; } public async doUpdate(call: VideoConference, appId: string): Promise { diff --git a/packages/apps-engine/src/server/bridges/index.ts b/packages/apps/src/server/bridges/index.ts similarity index 100% rename from packages/apps-engine/src/server/bridges/index.ts rename to packages/apps/src/server/bridges/index.ts diff --git a/packages/apps-engine/src/server/compiler/AppCompiler.ts b/packages/apps/src/server/compiler/AppCompiler.ts similarity index 100% rename from packages/apps-engine/src/server/compiler/AppCompiler.ts rename to packages/apps/src/server/compiler/AppCompiler.ts diff --git a/packages/apps-engine/src/server/compiler/AppFabricationFulfillment.ts b/packages/apps/src/server/compiler/AppFabricationFulfillment.ts similarity index 85% rename from packages/apps-engine/src/server/compiler/AppFabricationFulfillment.ts rename to packages/apps/src/server/compiler/AppFabricationFulfillment.ts index 6fb53a8c52580..4b579ba1e7b89 100644 --- a/packages/apps-engine/src/server/compiler/AppFabricationFulfillment.ts +++ b/packages/apps/src/server/compiler/AppFabricationFulfillment.ts @@ -1,19 +1,19 @@ -import type { IAppInfo } from '../../definition/metadata'; +import type { IAppInfo } from '@rocket.chat/apps-engine/definition/metadata'; import type { ProxiedApp } from '../ProxiedApp'; import { AppLicenseValidationResult } from '../marketplace/license'; export class AppFabricationFulfillment { - public info: IAppInfo; + public info!: IAppInfo; - public app: ProxiedApp; + public app!: ProxiedApp; - public implemented: { [int: string]: boolean }; + public implemented!: { [int: string]: boolean }; public licenseValidationResult: AppLicenseValidationResult; - public storageError: string; + public storageError!: string; - public appUserError: object; + public appUserError!: object; constructor() { this.licenseValidationResult = new AppLicenseValidationResult(); diff --git a/packages/apps-engine/src/server/compiler/AppImplements.ts b/packages/apps/src/server/compiler/AppImplements.ts similarity index 76% rename from packages/apps-engine/src/server/compiler/AppImplements.ts rename to packages/apps/src/server/compiler/AppImplements.ts index ba9be27b678bc..83c455908be45 100644 --- a/packages/apps-engine/src/server/compiler/AppImplements.ts +++ b/packages/apps/src/server/compiler/AppImplements.ts @@ -1,4 +1,4 @@ -import { AppInterface } from '../../definition/metadata/AppInterface'; +import { AppInterface } from '@rocket.chat/apps-engine/definition/metadata/AppInterface'; import { Utilities } from '../misc/Utilities'; export class AppImplements { @@ -7,8 +7,8 @@ export class AppImplements { constructor() { this.implemented = {} as Record; - Object.keys(AppInterface).forEach((int: AppInterface) => { - this.implemented[int] = false; + Object.keys(AppInterface).forEach((int: string) => { + this.implemented[int as AppInterface] = false; }); } diff --git a/packages/apps-engine/src/server/compiler/AppPackageParser.ts b/packages/apps/src/server/compiler/AppPackageParser.ts similarity index 76% rename from packages/apps-engine/src/server/compiler/AppPackageParser.ts rename to packages/apps/src/server/compiler/AppPackageParser.ts index 757fe60878bed..3a69512e5a70c 100644 --- a/packages/apps-engine/src/server/compiler/AppPackageParser.ts +++ b/packages/apps/src/server/compiler/AppPackageParser.ts @@ -1,25 +1,21 @@ -import * as fs from 'fs'; import * as path from 'path'; -import * as AdmZip from 'adm-zip'; +import AdmZip from 'adm-zip'; import * as semver from 'semver'; import { v4 as uuidv4 } from 'uuid'; import { AppImplements } from '.'; -import type { IAppInfo } from '../../definition/metadata/IAppInfo'; +import type { IAppInfo } from '@rocket.chat/apps-engine/definition/metadata/IAppInfo'; +import { ENGINE_VERSION } from '@rocket.chat/apps-engine/definition/version'; import { RequiredApiVersionError } from '../errors'; import type { IParseAppPackageResult } from './IParseAppPackageResult'; export class AppPackageParser { - public static uuid4Regex = /^[0-9a-fA-f]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/; + public static uuid4Regex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/; private allowedIconExts: Array = ['.png', '.jpg', '.jpeg', '.gif']; - private appsEngineVersion: string; - - constructor() { - this.appsEngineVersion = this.getEngineVersion(); - } + private appsEngineVersion: string = ENGINE_VERSION; public async unpackageApp(appPackage: Buffer): Promise { const zip = new AdmZip(appPackage); @@ -57,8 +53,8 @@ export class AppPackageParser { zip .getEntries() - .filter((entry) => !entry.isDirectory && entry.entryName.endsWith('.js')) - .forEach((entry) => { + .filter((entry: AdmZip.IZipEntry) => !entry.isDirectory && entry.entryName.endsWith('.js')) + .forEach((entry: AdmZip.IZipEntry) => { const norm = path.normalize(entry.entryName); // Files which start with `.` are supposed to be hidden @@ -121,43 +117,26 @@ export class AppPackageParser { private getIconFile(zip: AdmZip, filePath: string): string { if (!filePath) { - return undefined; + return undefined as unknown as string; } const ext = path.extname(filePath); if (!this.allowedIconExts.includes(ext)) { - return undefined; + return undefined as unknown as string; } const entry = zip.getEntry(filePath); if (!entry) { - return undefined; + return undefined as unknown as string; } if (entry.isDirectory) { - return undefined; + return undefined as unknown as string; } const base64 = entry.getData().toString('base64'); return `data:image/${ext.replace('.', '')};base64,${base64}`; } - - private getEngineVersion(): string { - const devLocation = path.join(__dirname, '../../../package.json'); - const prodLocation = path.join(__dirname, '../../package.json'); - - let info: { version: string }; - - if (fs.existsSync(devLocation)) { - info = JSON.parse(fs.readFileSync(devLocation, 'utf8')); - } else if (fs.existsSync(prodLocation)) { - info = JSON.parse(fs.readFileSync(prodLocation, 'utf8')); - } else { - throw new Error('Could not find the Apps TypeScript Definition Package Version!'); - } - - return info.version.replace(/^[^0-9]/, '').split('-')[0]; - } } diff --git a/packages/apps-engine/src/server/compiler/IParseAppPackageResult.ts b/packages/apps/src/server/compiler/IParseAppPackageResult.ts similarity index 74% rename from packages/apps-engine/src/server/compiler/IParseAppPackageResult.ts rename to packages/apps/src/server/compiler/IParseAppPackageResult.ts index 7c21bcb266d15..0285c8908a46f 100644 --- a/packages/apps-engine/src/server/compiler/IParseAppPackageResult.ts +++ b/packages/apps/src/server/compiler/IParseAppPackageResult.ts @@ -1,5 +1,5 @@ import type { AppImplements } from './AppImplements'; -import type { IAppInfo } from '../../definition/metadata'; +import type { IAppInfo } from '@rocket.chat/apps-engine/definition/metadata'; export interface IParseAppPackageResult { info: IAppInfo; diff --git a/packages/apps-engine/src/server/compiler/index.ts b/packages/apps/src/server/compiler/index.ts similarity index 100% rename from packages/apps-engine/src/server/compiler/index.ts rename to packages/apps/src/server/compiler/index.ts diff --git a/packages/apps-engine/src/server/compiler/modules/index.ts b/packages/apps/src/server/compiler/modules/index.ts similarity index 100% rename from packages/apps-engine/src/server/compiler/modules/index.ts rename to packages/apps/src/server/compiler/modules/index.ts diff --git a/packages/apps-engine/src/server/compiler/modules/networking.ts b/packages/apps/src/server/compiler/modules/networking.ts similarity index 100% rename from packages/apps-engine/src/server/compiler/modules/networking.ts rename to packages/apps/src/server/compiler/modules/networking.ts diff --git a/packages/apps-engine/src/server/errors/AppOutboundProcessError.ts b/packages/apps/src/server/errors/AppOutboundProcessError.ts similarity index 100% rename from packages/apps-engine/src/server/errors/AppOutboundProcessError.ts rename to packages/apps/src/server/errors/AppOutboundProcessError.ts diff --git a/packages/apps-engine/src/server/errors/CommandAlreadyExistsError.ts b/packages/apps/src/server/errors/CommandAlreadyExistsError.ts similarity index 100% rename from packages/apps-engine/src/server/errors/CommandAlreadyExistsError.ts rename to packages/apps/src/server/errors/CommandAlreadyExistsError.ts diff --git a/packages/apps-engine/src/server/errors/CommandHasAlreadyBeenTouchedError.ts b/packages/apps/src/server/errors/CommandHasAlreadyBeenTouchedError.ts similarity index 100% rename from packages/apps-engine/src/server/errors/CommandHasAlreadyBeenTouchedError.ts rename to packages/apps/src/server/errors/CommandHasAlreadyBeenTouchedError.ts diff --git a/packages/apps-engine/src/server/errors/CompilerError.ts b/packages/apps/src/server/errors/CompilerError.ts similarity index 100% rename from packages/apps-engine/src/server/errors/CompilerError.ts rename to packages/apps/src/server/errors/CompilerError.ts diff --git a/packages/apps-engine/src/server/errors/InvalidInstallationError.ts b/packages/apps/src/server/errors/InvalidInstallationError.ts similarity index 100% rename from packages/apps-engine/src/server/errors/InvalidInstallationError.ts rename to packages/apps/src/server/errors/InvalidInstallationError.ts diff --git a/packages/apps-engine/src/server/errors/InvalidLicenseError.ts b/packages/apps/src/server/errors/InvalidLicenseError.ts similarity index 100% rename from packages/apps-engine/src/server/errors/InvalidLicenseError.ts rename to packages/apps/src/server/errors/InvalidLicenseError.ts diff --git a/packages/apps-engine/src/server/errors/MustContainFunctionError.ts b/packages/apps/src/server/errors/MustContainFunctionError.ts similarity index 100% rename from packages/apps-engine/src/server/errors/MustContainFunctionError.ts rename to packages/apps/src/server/errors/MustContainFunctionError.ts diff --git a/packages/apps-engine/src/server/errors/MustExtendAppError.ts b/packages/apps/src/server/errors/MustExtendAppError.ts similarity index 100% rename from packages/apps-engine/src/server/errors/MustExtendAppError.ts rename to packages/apps/src/server/errors/MustExtendAppError.ts diff --git a/packages/apps-engine/src/server/errors/NotEnoughMethodArgumentsError.ts b/packages/apps/src/server/errors/NotEnoughMethodArgumentsError.ts similarity index 100% rename from packages/apps-engine/src/server/errors/NotEnoughMethodArgumentsError.ts rename to packages/apps/src/server/errors/NotEnoughMethodArgumentsError.ts diff --git a/packages/apps-engine/src/server/errors/PathAlreadyExistsError.ts b/packages/apps/src/server/errors/PathAlreadyExistsError.ts similarity index 100% rename from packages/apps-engine/src/server/errors/PathAlreadyExistsError.ts rename to packages/apps/src/server/errors/PathAlreadyExistsError.ts diff --git a/packages/apps-engine/src/server/errors/PermissionDeniedError.ts b/packages/apps/src/server/errors/PermissionDeniedError.ts similarity index 88% rename from packages/apps-engine/src/server/errors/PermissionDeniedError.ts rename to packages/apps/src/server/errors/PermissionDeniedError.ts index 37ca3af77a1d8..c850bc7f6276f 100644 --- a/packages/apps-engine/src/server/errors/PermissionDeniedError.ts +++ b/packages/apps/src/server/errors/PermissionDeniedError.ts @@ -1,4 +1,4 @@ -import type { IPermission } from '../../definition/permissions/IPermission'; +import type { IPermission } from '@rocket.chat/apps-engine/definition/permissions/IPermission'; interface IPermissionDeniedErrorParams { appId: string; diff --git a/packages/apps-engine/src/server/errors/RequiredApiVersionError.ts b/packages/apps/src/server/errors/RequiredApiVersionError.ts similarity index 88% rename from packages/apps-engine/src/server/errors/RequiredApiVersionError.ts rename to packages/apps/src/server/errors/RequiredApiVersionError.ts index 832386ebfc66b..46f10652325d2 100644 --- a/packages/apps-engine/src/server/errors/RequiredApiVersionError.ts +++ b/packages/apps/src/server/errors/RequiredApiVersionError.ts @@ -1,6 +1,6 @@ import * as semver from 'semver'; -import type { IAppInfo } from '../../definition/metadata'; +import type { IAppInfo } from '@rocket.chat/apps-engine/definition/metadata'; export class RequiredApiVersionError implements Error { public name = 'RequiredApiVersion'; diff --git a/packages/apps-engine/src/server/errors/VideoConfProviderAlreadyExistsError.ts b/packages/apps/src/server/errors/VideoConfProviderAlreadyExistsError.ts similarity index 100% rename from packages/apps-engine/src/server/errors/VideoConfProviderAlreadyExistsError.ts rename to packages/apps/src/server/errors/VideoConfProviderAlreadyExistsError.ts diff --git a/packages/apps-engine/src/server/errors/VideoConfProviderNotRegisteredError.ts b/packages/apps/src/server/errors/VideoConfProviderNotRegisteredError.ts similarity index 100% rename from packages/apps-engine/src/server/errors/VideoConfProviderNotRegisteredError.ts rename to packages/apps/src/server/errors/VideoConfProviderNotRegisteredError.ts diff --git a/packages/apps-engine/src/server/errors/index.ts b/packages/apps/src/server/errors/index.ts similarity index 100% rename from packages/apps-engine/src/server/errors/index.ts rename to packages/apps/src/server/errors/index.ts diff --git a/packages/apps-engine/src/server/logging/AppConsole.ts b/packages/apps/src/server/logging/AppConsole.ts similarity index 92% rename from packages/apps-engine/src/server/logging/AppConsole.ts rename to packages/apps/src/server/logging/AppConsole.ts index 2ae4b5cc1595c..004482113f154 100644 --- a/packages/apps-engine/src/server/logging/AppConsole.ts +++ b/packages/apps/src/server/logging/AppConsole.ts @@ -1,9 +1,9 @@ import * as stackTrace from 'stack-trace'; import type { ILoggerStorageEntry } from './ILoggerStorageEntry'; -import type { ILogEntry, ILogger } from '../../definition/accessors'; -import { LogMessageSeverity } from '../../definition/accessors'; -import type { AppMethod } from '../../definition/metadata'; +import type { ILogEntry, ILogger } from '@rocket.chat/apps-engine/definition/accessors'; +import { LogMessageSeverity } from '@rocket.chat/apps-engine/definition/accessors'; +import type { AppMethod } from '@rocket.chat/apps-engine/definition/metadata'; export class AppConsole implements ILogger { public static toStorageEntry(appId: string, logger: AppConsole): ILoggerStorageEntry { diff --git a/packages/apps-engine/src/server/logging/ILoggerStorageEntry.ts b/packages/apps/src/server/logging/ILoggerStorageEntry.ts similarity index 60% rename from packages/apps-engine/src/server/logging/ILoggerStorageEntry.ts rename to packages/apps/src/server/logging/ILoggerStorageEntry.ts index 6ec91157454b1..12c6f47dfb01d 100644 --- a/packages/apps-engine/src/server/logging/ILoggerStorageEntry.ts +++ b/packages/apps/src/server/logging/ILoggerStorageEntry.ts @@ -1,5 +1,5 @@ -import type { ILogEntry } from '../../definition/accessors'; -import type { AppMethod } from '../../definition/metadata'; +import type { ILogEntry } from '@rocket.chat/apps-engine/definition/accessors'; +import type { AppMethod } from '@rocket.chat/apps-engine/definition/metadata'; export interface ILoggerStorageEntry { appId: string; diff --git a/packages/apps-engine/src/server/logging/index.ts b/packages/apps/src/server/logging/index.ts similarity index 100% rename from packages/apps-engine/src/server/logging/index.ts rename to packages/apps/src/server/logging/index.ts diff --git a/packages/apps-engine/src/server/managers/AppAccessorManager.ts b/packages/apps/src/server/managers/AppAccessorManager.ts similarity index 94% rename from packages/apps-engine/src/server/managers/AppAccessorManager.ts rename to packages/apps/src/server/managers/AppAccessorManager.ts index 9247d83195c86..1b1ed0eedfd63 100644 --- a/packages/apps-engine/src/server/managers/AppAccessorManager.ts +++ b/packages/apps/src/server/managers/AppAccessorManager.ts @@ -8,7 +8,7 @@ import type { IModify, IPersistence, IRead, -} from '../../definition/accessors'; +} from '@rocket.chat/apps-engine/definition/accessors'; import type { AppManager } from '../AppManager'; import { ApiExtend, @@ -121,7 +121,7 @@ export class AppAccessorManager { this.configExtenders.set(appId, new ConfigurationExtend(htt, sets, cmds, apis, excs, scheduler, ui, videoConf, outboundComms)); } - return this.configExtenders.get(appId); + return this.configExtenders.get(appId)!; } public getEnvironmentRead(appId: string): IEnvironmentRead { @@ -139,7 +139,7 @@ export class AppAccessorManager { this.envReaders.set(appId, new EnvironmentRead(sets, servsets, env)); } - return this.envReaders.get(appId); + return this.envReaders.get(appId)!; } public getEnvironmentWrite(appId: string): IEnvironmentWrite { @@ -156,7 +156,7 @@ export class AppAccessorManager { this.envWriters.set(appId, new EnvironmentWrite(sets, serverSetting)); } - return this.envWriters.get(appId); + return this.envWriters.get(appId)!; } public getConfigurationModify(appId: string): IConfigurationModify { @@ -171,7 +171,7 @@ export class AppAccessorManager { ); } - return this.configModifiers.get(appId); + return this.configModifiers.get(appId)!; } public getReader(appId: string): IRead { @@ -214,7 +214,7 @@ export class AppAccessorManager { ); } - return this.readers.get(appId); + return this.readers.get(appId)!; } public getModifier(appId: string): IModify { @@ -222,7 +222,7 @@ export class AppAccessorManager { this.modifiers.set(appId, new Modify(this.bridges, appId)); } - return this.modifiers.get(appId); + return this.modifiers.get(appId)!; } public getPersistence(appId: string): IPersistence { @@ -230,14 +230,14 @@ export class AppAccessorManager { this.persists.set(appId, new Persistence(this.bridges.getPersistenceBridge(), appId)); } - return this.persists.get(appId); + return this.persists.get(appId)!; } public getHttp(appId: string): IHttp { if (!this.https.has(appId)) { let ext: IHttpExtend; if (this.configExtenders.has(appId)) { - ext = this.configExtenders.get(appId).http; + ext = this.configExtenders.get(appId)!.http; } else { const cf = this.getConfigurationExtend(appId); ext = cf.http; @@ -246,6 +246,6 @@ export class AppAccessorManager { this.https.set(appId, new Http(this, this.bridges, ext, appId)); } - return this.https.get(appId); + return this.https.get(appId)!; } } diff --git a/packages/apps-engine/src/server/managers/AppApi.ts b/packages/apps/src/server/managers/AppApi.ts similarity index 74% rename from packages/apps-engine/src/server/managers/AppApi.ts rename to packages/apps/src/server/managers/AppApi.ts index 78d551fe0a50e..d90ab628c3e03 100644 --- a/packages/apps-engine/src/server/managers/AppApi.ts +++ b/packages/apps/src/server/managers/AppApi.ts @@ -1,7 +1,7 @@ -import type { IApi, IApiRequest, IApiResponse } from '../../definition/api'; -import { ApiSecurity, ApiVisibility } from '../../definition/api'; -import type { IApiEndpoint } from '../../definition/api/IApiEndpoint'; -import type { IApiEndpointInfo } from '../../definition/api/IApiEndpointInfo'; +import type { IApi, IApiRequest, IApiResponse } from '@rocket.chat/apps-engine/definition/api'; +import { ApiSecurity, ApiVisibility } from '@rocket.chat/apps-engine/definition/api'; +import type { IApiEndpoint } from '@rocket.chat/apps-engine/definition/api/IApiEndpoint'; +import type { IApiEndpointInfo } from '@rocket.chat/apps-engine/definition/api/IApiEndpointInfo'; import type { ProxiedApp } from '../ProxiedApp'; import type { AppLogStorage } from '../storage'; import type { AppAccessorManager } from './AppAccessorManager'; @@ -37,10 +37,10 @@ export class AppApi { this.computedPath = `${this.basePath}/${endpoint.path}`; - this.implementedMethods = endpoint._availableMethods; + this.implementedMethods = endpoint._availableMethods ?? []; } - public async runExecutor(request: IApiRequest, logStorage: AppLogStorage, accessors: AppAccessorManager): Promise { + public async runExecutor(request: IApiRequest, _logStorage: AppLogStorage, _accessors: AppAccessorManager): Promise { const { path } = this.endpoint; const { method } = request; @@ -89,7 +89,7 @@ export class AppApi { return false; } - private validateSecurity(request: IApiRequest): boolean { + private validateSecurity(_request: IApiRequest): boolean { if (this.api.security === ApiSecurity.UNSECURE) { return true; } diff --git a/packages/apps-engine/src/server/managers/AppApiManager.ts b/packages/apps/src/server/managers/AppApiManager.ts similarity index 90% rename from packages/apps-engine/src/server/managers/AppApiManager.ts rename to packages/apps/src/server/managers/AppApiManager.ts index 71cdb569aaec5..f1298f2013e7d 100644 --- a/packages/apps-engine/src/server/managers/AppApiManager.ts +++ b/packages/apps/src/server/managers/AppApiManager.ts @@ -1,6 +1,6 @@ -import { AppStatusUtils } from '../../definition/AppStatus'; -import { HttpStatusCode } from '../../definition/accessors'; -import type { IApi, IApiEndpointMetadata, IApiRequest, IApiResponse } from '../../definition/api'; +import { AppStatusUtils } from '@rocket.chat/apps-engine/definition/AppStatus'; +import { HttpStatusCode } from '@rocket.chat/apps-engine/definition/accessors'; +import type { IApi, IApiEndpointMetadata, IApiRequest, IApiResponse } from '@rocket.chat/apps-engine/definition/api'; import type { AppManager } from '../AppManager'; import type { ApiBridge } from '../bridges'; import { PathAlreadyExistsError } from '../errors'; @@ -51,7 +51,7 @@ export class AppApiManager { // Verify the api's path doesn't exist already if (this.providedApis.get(appId)) { api.endpoints.forEach((endpoint) => { - if (this.providedApis.get(appId).has(endpoint.path)) { + if (this.providedApis.get(appId)!.has(endpoint.path)) { throw new PathAlreadyExistsError(endpoint.path); } }); @@ -62,7 +62,7 @@ export class AppApiManager { } api.endpoints.forEach((endpoint) => { - this.providedApis.get(appId).set(endpoint.path, new AppApi(app, api, endpoint)); + this.providedApis.get(appId)!.set(endpoint.path, new AppApi(app, api, endpoint)); }); } @@ -78,7 +78,7 @@ export class AppApiManager { } await this.bridge.doUnregisterApis(appId); - for await (const [, apiApp] of this.providedApis.get(appId).entries()) { + for await (const [, apiApp] of this.providedApis.get(appId)!.entries()) { await this.registerApi(appId, apiApp); } } @@ -104,7 +104,7 @@ export class AppApiManager { * @param request the request data to be evaluated byt the app */ public async executeApi(appId: string, path: string, request: IApiRequest): Promise { - const api = this.providedApis.get(appId).get(path); + const api = this.providedApis.get(appId)!.get(path); if (!api) { return { diff --git a/packages/apps-engine/src/server/managers/AppExternalComponentManager.ts b/packages/apps/src/server/managers/AppExternalComponentManager.ts similarity index 95% rename from packages/apps-engine/src/server/managers/AppExternalComponentManager.ts rename to packages/apps/src/server/managers/AppExternalComponentManager.ts index cb588cb8b873f..0c34e42648610 100644 --- a/packages/apps-engine/src/server/managers/AppExternalComponentManager.ts +++ b/packages/apps/src/server/managers/AppExternalComponentManager.ts @@ -1,4 +1,4 @@ -import type { IExternalComponent } from '../../definition/externalComponent'; +import type { IExternalComponent } from '@rocket.chat/apps-engine/definition/externalComponent'; /** * The external component manager for the apps. @@ -50,9 +50,9 @@ export class AppExternalComponentManager { * * @param appId the id of the app */ - public getExternalComponents(appId: string): Map { + public getExternalComponents(appId: string): Map | null { if (this.appTouchedExternalComponents.has(appId)) { - return this.appTouchedExternalComponents.get(appId); + return this.appTouchedExternalComponents.get(appId)!; } return null; @@ -89,7 +89,7 @@ export class AppExternalComponentManager { if (!this.appTouchedExternalComponents.get(appId)) { this.appTouchedExternalComponents.set(appId, new Map(Object.entries({ [externalComponent.name]: externalComponent }))); } else { - const appExternalComponents = this.appTouchedExternalComponents.get(appId); + const appExternalComponents = this.appTouchedExternalComponents.get(appId)!; appExternalComponents.set(externalComponent.name, externalComponent); } @@ -105,7 +105,7 @@ export class AppExternalComponentManager { if (!this.appTouchedExternalComponents.has(appId)) { return; } - const externalComponents = this.appTouchedExternalComponents.get(appId); + const externalComponents = this.appTouchedExternalComponents.get(appId)!; if (externalComponents.size > 0) { this.registeredExternalComponents.set(appId, externalComponents); diff --git a/packages/apps-engine/src/server/managers/AppLicenseManager.ts b/packages/apps/src/server/managers/AppLicenseManager.ts similarity index 95% rename from packages/apps-engine/src/server/managers/AppLicenseManager.ts rename to packages/apps/src/server/managers/AppLicenseManager.ts index b72de6a5fd69a..65dd983b184bc 100644 --- a/packages/apps-engine/src/server/managers/AppLicenseManager.ts +++ b/packages/apps/src/server/managers/AppLicenseManager.ts @@ -29,7 +29,7 @@ export class AppLicenseManager { validationResult.setValidated(true); - const encryptedLicense = marketplaceInfo.subscriptionInfo.license.license; + const encryptedLicense = marketplaceInfo.subscriptionInfo!.license.license; if (!encryptedLicense) { validationResult.addError('license', 'License for app is invalid'); @@ -41,7 +41,7 @@ export class AppLicenseManager { try { license = (await this.crypto.decryptLicense(encryptedLicense)) as any; } catch (err) { - validationResult.addError('publicKey', err.message); + validationResult.addError('publicKey', (err as Error).message); throw new InvalidLicenseError(validationResult); } diff --git a/packages/apps-engine/src/server/managers/AppListenerManager.ts b/packages/apps/src/server/managers/AppListenerManager.ts similarity index 86% rename from packages/apps-engine/src/server/managers/AppListenerManager.ts rename to packages/apps/src/server/managers/AppListenerManager.ts index 327bc949ba0ac..198801d2fe286 100644 --- a/packages/apps-engine/src/server/managers/AppListenerManager.ts +++ b/packages/apps/src/server/managers/AppListenerManager.ts @@ -1,9 +1,9 @@ import type { AppAccessorManager } from './AppAccessorManager'; -import type { IEmailDescriptor, IPreEmailSentContext } from '../../definition/email'; -import { EssentialAppDisabledException } from '../../definition/exceptions'; -import type { IExternalComponent } from '../../definition/externalComponent'; -import type { ILivechatEventContext, ILivechatRoom, ILivechatTransferEventContext, IVisitor } from '../../definition/livechat'; -import type { ILivechatDepartmentEventContext } from '../../definition/livechat/ILivechatEventContext'; +import type { IEmailDescriptor, IPreEmailSentContext } from '@rocket.chat/apps-engine/definition/email'; +import { EssentialAppDisabledException } from '@rocket.chat/apps-engine/definition/exceptions'; +import type { IExternalComponent } from '@rocket.chat/apps-engine/definition/externalComponent'; +import type { ILivechatEventContext, ILivechatRoom, ILivechatTransferEventContext, IVisitor } from '@rocket.chat/apps-engine/definition/livechat'; +import type { ILivechatDepartmentEventContext } from '@rocket.chat/apps-engine/definition/livechat/ILivechatEventContext'; import type { IMessage, IMessageDeleteContext, @@ -12,21 +12,21 @@ import type { IMessageReactionContext, IMessageReportContext, IMessageStarContext, -} from '../../definition/messages'; -import { AppInterface, AppMethod } from '../../definition/metadata'; -import type { IRoom, IRoomUserJoinedContext, IRoomUserLeaveContext } from '../../definition/rooms'; -import { RoomType } from '../../definition/rooms'; -import { UIActionButtonContext } from '../../definition/ui'; -import type { IUIKitResponse, IUIKitSurface, UIKitIncomingInteraction } from '../../definition/uikit'; -import { UIKitIncomingInteractionType } from '../../definition/uikit'; -import { isUIKitIncomingInteractionActionButtonMessageBox } from '../../definition/uikit/IUIKitIncomingInteractionActionButton'; +} from '@rocket.chat/apps-engine/definition/messages'; +import { AppInterface, AppMethod } from '@rocket.chat/apps-engine/definition/metadata'; +import type { IRoom, IRoomUserJoinedContext, IRoomUserLeaveContext } from '@rocket.chat/apps-engine/definition/rooms'; +import { RoomType } from '@rocket.chat/apps-engine/definition/rooms'; +import { UIActionButtonContext } from '@rocket.chat/apps-engine/definition/ui'; +import type { IUIKitResponse, IUIKitSurface, UIKitIncomingInteraction } from '@rocket.chat/apps-engine/definition/uikit'; +import { UIKitIncomingInteractionType } from '@rocket.chat/apps-engine/definition/uikit'; +import { isUIKitIncomingInteractionActionButtonMessageBox } from '@rocket.chat/apps-engine/definition/uikit/IUIKitIncomingInteractionActionButton'; import type { IUIKitIncomingInteractionMessageContainer, IUIKitIncomingInteractionModalContainer, -} from '../../definition/uikit/UIKitIncomingInteractionContainer'; -import type { IUIKitLivechatBlockIncomingInteraction, IUIKitLivechatIncomingInteraction } from '../../definition/uikit/livechat'; -import type { IFileUploadInternalContext } from '../../definition/uploads/IFileUploadContext'; -import type { IUser, IUserContext, IUserStatusContext, IUserUpdateContext } from '../../definition/users'; +} from '@rocket.chat/apps-engine/definition/uikit/UIKitIncomingInteractionContainer'; +import type { IUIKitLivechatBlockIncomingInteraction, IUIKitLivechatIncomingInteraction } from '@rocket.chat/apps-engine/definition/uikit/livechat'; +import type { IFileUploadInternalContext } from '@rocket.chat/apps-engine/definition/uploads/IFileUploadContext'; +import type { IUser, IUserContext, IUserStatusContext, IUserUpdateContext } from '@rocket.chat/apps-engine/definition/users'; import type { AppManager } from '../AppManager'; import type { ProxiedApp } from '../ProxiedApp'; import { Utilities } from '../misc/Utilities'; @@ -278,7 +278,7 @@ export class AppListenerManager { return; } - this.listeners.get(event).push(app.getID()); + this.listeners.get(event)!.push(app.getID()); }); } @@ -286,7 +286,7 @@ export class AppListenerManager { this.listeners.forEach((apps, int) => { if (apps.includes(app.getID())) { const where = apps.indexOf(app.getID()); - this.listeners.get(int).splice(where, 1); + this.listeners.get(int)!.splice(where, 1); } }); } @@ -296,7 +296,7 @@ export class AppListenerManager { return; } - app.getEssentials().forEach((event) => { + app.getEssentials()!.forEach((event) => { const lockedEvent = this.lockedEvents.get(event); if (!lockedEvent) { @@ -312,7 +312,7 @@ export class AppListenerManager { return; } - app.getEssentials().forEach((event) => { + app.getEssentials()!.forEach((event) => { const lockedEvent = this.lockedEvents.get(event); if (!lockedEvent) { @@ -326,8 +326,8 @@ export class AppListenerManager { public getListeners(int: AppInterface): Array { const results: Array = []; - for (const appId of this.listeners.get(int)) { - results.push(this.manager.getOneById(appId)); + for (const appId of this.listeners.get(int)!) { + results.push(this.manager.getOneById(appId)!); } return results; @@ -467,6 +467,7 @@ export class AppListenerManager { return this.executePostUserStatusChanged(data as IUserStatusContext); default: console.warn('An invalid listener was called'); + return undefined as unknown as Promise; } } @@ -474,8 +475,8 @@ export class AppListenerManager { private async executePreMessageSentPrevent(data: IMessage): Promise { let prevented = false; - for (const appId of this.listeners.get(AppInterface.IPreMessageSentPrevent)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPreMessageSentPrevent)!) { + const app = this.manager.getOneById(appId)!; const continueOn = (await app.call(AppMethod.CHECKPREMESSAGESENTPREVENT, data).catch((error) => { // This method is optional, so if it doesn't exist, we should continue @@ -503,8 +504,8 @@ export class AppListenerManager { private async executePreMessageSentExtend(data: IMessage): Promise { let msg = data; - for (const appId of this.listeners.get(AppInterface.IPreMessageSentExtend)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPreMessageSentExtend)!) { + const app = this.manager.getOneById(appId)!; const continueOn = (await app.call(AppMethod.CHECKPREMESSAGESENTEXTEND, data).catch((error) => { // This method is optional, so if it doesn't exist, we should continue @@ -526,8 +527,8 @@ export class AppListenerManager { private async executePreMessageSentModify(data: IMessage): Promise { let msg = data; - for (const appId of this.listeners.get(AppInterface.IPreMessageSentModify)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPreMessageSentModify)!) { + const app = this.manager.getOneById(appId)!; const continueOn = (await app.call(AppMethod.CHECKPREMESSAGESENTMODIFY, msg).catch((error) => { // This method is optional, so if it doesn't exist, we should continue @@ -548,9 +549,9 @@ export class AppListenerManager { private async executePostMessageSent(data: IMessage): Promise { // First check if the app implements Bot DM handlers and check if the dm contains more than one user - if (data.room.type === RoomType.DIRECT_MESSAGE && data.room.userIds.length > 1) { - for (const appId of this.listeners.get(AppInterface.IPostMessageSentToBot)) { - const app = this.manager.getOneById(appId); + if (data.room.type === RoomType.DIRECT_MESSAGE && data.room.userIds!.length > 1) { + for (const appId of this.listeners.get(AppInterface.IPostMessageSentToBot)!) { + const app = this.manager.getOneById(appId)!; const reader = this.am.getReader(appId); const bot = await reader.getUserReader().getAppUser(); @@ -564,7 +565,7 @@ export class AppListenerManager { continue; } // if the user doesnt belong to the room ignore it - if (!data.room.userIds.includes(bot.id)) { + if (!data.room.userIds!.includes(bot.id)) { continue; } @@ -572,8 +573,8 @@ export class AppListenerManager { } } - for (const appId of this.listeners.get(AppInterface.IPostMessageSent)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostMessageSent)!) { + const app = this.manager.getOneById(appId)!; const continueOn = (await app.call(AppMethod.CHECKPOSTMESSAGESENT, data).catch((error) => { // This method is optional, so if it doesn't exist, we should continue @@ -591,8 +592,8 @@ export class AppListenerManager { } private async executePostSystemMessageSent(data: IMessage): Promise { - for (const appId of this.listeners.get(AppInterface.IPostSystemMessageSent)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostSystemMessageSent)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTEPOSTSYSTEMMESSAGESENT, data); } } @@ -600,8 +601,8 @@ export class AppListenerManager { private async executePreMessageDeletePrevent(data: IMessage): Promise { let prevented = false; - for (const appId of this.listeners.get(AppInterface.IPreMessageDeletePrevent)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPreMessageDeletePrevent)!) { + const app = this.manager.getOneById(appId)!; const continueOn = (await app.call(AppMethod.CHECKPREMESSAGEDELETEPREVENT, data).catch((error) => { // This method is optional, so if it doesn't exist, we should continue @@ -628,8 +629,8 @@ export class AppListenerManager { const context = Utilities.deepCloneAndFreeze(data); const { message } = context; - for (const appId of this.listeners.get(AppInterface.IPostMessageDeleted)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostMessageDeleted)!) { + const app = this.manager.getOneById(appId)!; const continueOn = (await app .call( @@ -657,8 +658,8 @@ export class AppListenerManager { private async executePreMessageUpdatedPrevent(data: IMessage): Promise { let prevented = false; - for (const appId of this.listeners.get(AppInterface.IPreMessageUpdatedPrevent)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPreMessageUpdatedPrevent)!) { + const app = this.manager.getOneById(appId)!; const continueOn = (await app.call(AppMethod.CHECKPREMESSAGEUPDATEDPREVENT, data).catch((error) => { // This method is optional, so if it doesn't exist, we should continue @@ -684,8 +685,8 @@ export class AppListenerManager { private async executePreMessageUpdatedExtend(data: IMessage): Promise { let msg = data; - for (const appId of this.listeners.get(AppInterface.IPreMessageUpdatedExtend)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPreMessageUpdatedExtend)!) { + const app = this.manager.getOneById(appId)!; const continueOn = (await app.call(AppMethod.CHECKPREMESSAGEUPDATEDEXTEND, msg).catch((error) => { // This method is optional, so if it doesn't exist, we should continue @@ -707,8 +708,8 @@ export class AppListenerManager { private async executePreMessageUpdatedModify(data: IMessage): Promise { let msg = data; - for (const appId of this.listeners.get(AppInterface.IPreMessageUpdatedModify)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPreMessageUpdatedModify)!) { + const app = this.manager.getOneById(appId)!; const continueOn = (await app.call(AppMethod.CHECKPREMESSAGEUPDATEDMODIFY, msg).catch((error) => { // This method is optional, so if it doesn't exist, we should continue @@ -728,8 +729,8 @@ export class AppListenerManager { } private async executePostMessageUpdated(data: IMessage): Promise { - for (const appId of this.listeners.get(AppInterface.IPostMessageUpdated)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostMessageUpdated)!) { + const app = this.manager.getOneById(appId)!; const continueOn = (await app.call(AppMethod.CHECKPOSTMESSAGEUPDATED, data).catch((error) => { // This method is optional, so if it doesn't exist, we should continue @@ -750,8 +751,8 @@ export class AppListenerManager { private async executePreRoomCreatePrevent(data: IRoom): Promise { let prevented = false; - for (const appId of this.listeners.get(AppInterface.IPreRoomCreatePrevent)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPreRoomCreatePrevent)!) { + const app = this.manager.getOneById(appId)!; const continueOn = (await app.call(AppMethod.CHECKPREROOMCREATEPREVENT, data).catch((error) => { // This method is optional, so if it doesn't exist, we should continue @@ -777,8 +778,8 @@ export class AppListenerManager { private async executePreRoomCreateExtend(data: IRoom): Promise { let room = data; - for (const appId of this.listeners.get(AppInterface.IPreRoomCreateExtend)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPreRoomCreateExtend)!) { + const app = this.manager.getOneById(appId)!; const continueOn = (await app.call(AppMethod.CHECKPREROOMCREATEEXTEND, room).catch((error) => { // This method is optional, so if it doesn't exist, we should continue @@ -800,8 +801,8 @@ export class AppListenerManager { private async executePreRoomCreateModify(data: IRoom): Promise { let room = data; - for (const appId of this.listeners.get(AppInterface.IPreRoomCreateModify)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPreRoomCreateModify)!) { + const app = this.manager.getOneById(appId)!; const continueOn = (await app.call(AppMethod.CHECKPREROOMCREATEMODIFY, room).catch((error) => { // This method is optional, so if it doesn't exist, we should continue @@ -821,8 +822,8 @@ export class AppListenerManager { } private async executePostRoomCreate(data: IRoom): Promise { - for (const appId of this.listeners.get(AppInterface.IPostRoomCreate)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostRoomCreate)!) { + const app = this.manager.getOneById(appId)!; const continueOn = (await app.call(AppMethod.CHECKPOSTROOMCREATE, data).catch((error) => { // This method is optional, so if it doesn't exist, we should continue @@ -842,8 +843,8 @@ export class AppListenerManager { private async executePreRoomDeletePrevent(data: IRoom): Promise { let prevented = false; - for (const appId of this.listeners.get(AppInterface.IPreRoomDeletePrevent)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPreRoomDeletePrevent)!) { + const app = this.manager.getOneById(appId)!; const continueOn = (await app.call(AppMethod.CHECKPREROOMDELETEPREVENT, data).catch((error) => { // This method is optional, so if it doesn't exist, we should continue @@ -867,8 +868,8 @@ export class AppListenerManager { } private async executePostRoomDeleted(data: IRoom): Promise { - for (const appId of this.listeners.get(AppInterface.IPostRoomDeleted)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostRoomDeleted)!) { + const app = this.manager.getOneById(appId)!; const continueOn = (await app.call(AppMethod.CHECKPOSTROOMDELETED, data).catch((error) => { // This method is optional, so if it doesn't exist, we should continue @@ -886,32 +887,32 @@ export class AppListenerManager { } private async executePreRoomUserJoined(externalData: IRoomUserJoinedContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPreRoomUserJoined)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPreRoomUserJoined)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_PRE_ROOM_USER_JOINED, externalData); } } private async executePostRoomUserJoined(externalData: IRoomUserJoinedContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPostRoomUserJoined)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostRoomUserJoined)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_ROOM_USER_JOINED, externalData); } } private async executePreRoomUserLeave(externalData: IRoomUserLeaveContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPreRoomUserLeave)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPreRoomUserLeave)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_PRE_ROOM_USER_LEAVE, externalData); } } private async executePostRoomUserLeave(externalData: IRoomUserLeaveContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPostRoomUserLeave)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostRoomUserLeave)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_ROOM_USER_LEAVE, externalData); } @@ -919,16 +920,16 @@ export class AppListenerManager { // External Components private async executePostExternalComponentOpened(data: IExternalComponent): Promise { - for (const appId of this.listeners.get(AppInterface.IPostExternalComponentOpened)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostExternalComponentOpened)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTEPOSTEXTERNALCOMPONENTOPENED, data); } } private async executePostExternalComponentClosed(data: IExternalComponent): Promise { - for (const appId of this.listeners.get(AppInterface.IPostExternalComponentClosed)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostExternalComponentClosed)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTEPOSTEXTERNALCOMPONENTCLOSED, data); } @@ -937,7 +938,7 @@ export class AppListenerManager { private async executeUIKitInteraction(data: UIKitIncomingInteraction): Promise { const { appId } = data; - const app = this.manager.getOneById(appId); + const app = this.manager.getOneById(appId)!; const handleError = (method: string) => (error: unknown) => { if ((error as Record)?.code === JSONRPC_METHOD_NOT_FOUND) { if (this.defaultHandlers.has(method)) { @@ -1037,20 +1038,24 @@ export class AppListenerManager { }) .catch(handleError(method)); } + default: + return undefined as unknown as Promise; } } private async executeUIKitLivechatInteraction(data: IUIKitLivechatIncomingInteraction): Promise { const { appId, type } = data; - const method = ((interactionType: string) => { + const method = ((interactionType: string): AppMethod => { switch (interactionType) { case UIKitIncomingInteractionType.BLOCK: return AppMethod.UIKIT_LIVECHAT_BLOCK_ACTION; + default: + throw new Error(`Unknown UIKit livechat interaction type: ${interactionType}`); } })(type); - const app = this.manager.getOneById(appId); + const app = this.manager.getOneById(appId)!; const interactionData = (( interactionType: UIKitIncomingInteractionType, @@ -1064,106 +1069,108 @@ export class AppListenerManager { return { appId, - actionId, + actionId: actionId!, blockId, visitor, room, - triggerId, + triggerId: triggerId!, value, message, container: container as IUIKitIncomingInteractionModalContainer | IUIKitIncomingInteractionMessageContainer, }; } + default: + return undefined as unknown as IUIKitLivechatBlockIncomingInteraction; } })(type, data); - return app.call(method, interactionData); + return app!.call(method, interactionData); } // Livechat private async executePreLivechatRoomCreatePrevent(data: ILivechatRoom): Promise { - for (const appId of this.listeners.get(AppInterface.IPreLivechatRoomCreatePrevent)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPreLivechatRoomCreatePrevent)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_PRE_LIVECHAT_ROOM_CREATE_PREVENT, data); } } private async executePostLivechatRoomStarted(data: ILivechatRoom): Promise { - for (const appId of this.listeners.get(AppInterface.IPostLivechatRoomStarted)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostLivechatRoomStarted)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_LIVECHAT_ROOM_STARTED, data); } } private async executeLivechatRoomClosedHandler(data: ILivechatRoom): Promise { - for (const appId of this.listeners.get(AppInterface.ILivechatRoomClosedHandler)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.ILivechatRoomClosedHandler)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_LIVECHAT_ROOM_CLOSED_HANDLER, data); } } private async executePostLivechatRoomClosed(data: ILivechatRoom): Promise { - for (const appId of this.listeners.get(AppInterface.IPostLivechatRoomClosed)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostLivechatRoomClosed)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_LIVECHAT_ROOM_CLOSED, data); } } private async executePostLivechatAgentAssigned(data: ILivechatEventContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPostLivechatAgentAssigned)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostLivechatAgentAssigned)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_LIVECHAT_AGENT_ASSIGNED, data); } } private async executePostLivechatAgentUnassigned(data: ILivechatEventContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPostLivechatAgentUnassigned)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostLivechatAgentUnassigned)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_LIVECHAT_AGENT_UNASSIGNED, data); } } private async executePostLivechatRoomTransferred(data: ILivechatTransferEventContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPostLivechatRoomTransferred)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostLivechatRoomTransferred)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_LIVECHAT_ROOM_TRANSFERRED, data); } } private async executePostLivechatGuestSaved(data: IVisitor): Promise { - for (const appId of this.listeners.get(AppInterface.IPostLivechatGuestSaved)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostLivechatGuestSaved)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_LIVECHAT_GUEST_SAVED, data); } } private async executePostLivechatRoomSaved(data: ILivechatRoom): Promise { - for (const appId of this.listeners.get(AppInterface.IPostLivechatRoomSaved)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostLivechatRoomSaved)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_LIVECHAT_ROOM_SAVED, data); } } private async executePostLivechatDepartmentRemoved(data: ILivechatDepartmentEventContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPostLivechatDepartmentRemoved)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostLivechatDepartmentRemoved)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_LIVECHAT_DEPARTMENT_REMOVED, data); } } private async executePostLivechatDepartmentDisabled(data: ILivechatDepartmentEventContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPostLivechatDepartmentDisabled)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostLivechatDepartmentDisabled)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_LIVECHAT_DEPARTMENT_DISABLED, data); } @@ -1171,8 +1178,8 @@ export class AppListenerManager { // FileUpload private async executePreFileUpload(data: IFileUploadInternalContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPreFileUpload)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPreFileUpload)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_PRE_FILE_UPLOAD, data); } @@ -1181,8 +1188,8 @@ export class AppListenerManager { private async executePreEmailSent(data: IPreEmailSentContext): Promise { let descriptor = data.email; - for (const appId of this.listeners.get(AppInterface.IPreEmailSent)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPreEmailSent)!) { + const app = this.manager.getOneById(appId)!; descriptor = await app.call(AppMethod.EXECUTE_PRE_EMAIL_SENT, { context: data.context, @@ -1194,88 +1201,88 @@ export class AppListenerManager { } private async executePostMessageReacted(data: IMessageReactionContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPostMessageReacted)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostMessageReacted)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_MESSAGE_REACTED, data); } } private async executePostMessageFollowed(data: IMessageFollowContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPostMessageFollowed)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostMessageFollowed)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_MESSAGE_FOLLOWED, data); } } private async executePostMessagePinned(data: IMessagePinContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPostMessagePinned)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostMessagePinned)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_MESSAGE_PINNED, data); } } private async executePostMessageStarred(data: IMessageStarContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPostMessageStarred)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostMessageStarred)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_MESSAGE_STARRED, data); } } private async executePostMessageReported(data: IMessageReportContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPostMessageReported)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostMessageReported)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_MESSAGE_REPORTED, data); } } private async executePostUserCreated(data: IUserContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPostUserCreated)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostUserCreated)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_USER_CREATED, data); } } private async executePostUserUpdated(data: IUserUpdateContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPostUserUpdated)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostUserUpdated)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_USER_UPDATED, data); } } private async executePostUserDeleted(data: IUserContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPostUserDeleted)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostUserDeleted)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_USER_DELETED, data); } } private async executePostUserLoggedIn(data: IUser): Promise { - for (const appId of this.listeners.get(AppInterface.IPostUserLoggedIn)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostUserLoggedIn)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_USER_LOGGED_IN, data); } } private async executePostUserLoggedOut(data: IUser): Promise { - for (const appId of this.listeners.get(AppInterface.IPostUserLoggedOut)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostUserLoggedOut)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_USER_LOGGED_OUT, data); } } private async executePostUserStatusChanged(data: IUserStatusContext): Promise { - for (const appId of this.listeners.get(AppInterface.IPostUserStatusChanged)) { - const app = this.manager.getOneById(appId); + for (const appId of this.listeners.get(AppInterface.IPostUserStatusChanged)!) { + const app = this.manager.getOneById(appId)!; await app.call(AppMethod.EXECUTE_POST_USER_STATUS_CHANGED, data); } diff --git a/packages/apps-engine/src/server/managers/AppOutboundCommunicationProvider.ts b/packages/apps/src/server/managers/AppOutboundCommunicationProvider.ts similarity index 59% rename from packages/apps-engine/src/server/managers/AppOutboundCommunicationProvider.ts rename to packages/apps/src/server/managers/AppOutboundCommunicationProvider.ts index d868eda63d262..ff5b3c88290be 100644 --- a/packages/apps-engine/src/server/managers/AppOutboundCommunicationProvider.ts +++ b/packages/apps/src/server/managers/AppOutboundCommunicationProvider.ts @@ -1,6 +1,6 @@ import type { AppAccessorManager } from '.'; -import { AppMethod } from '../../definition/metadata'; -import type { IOutboundMessage, IOutboundMessageProviders, ProviderMetadata } from '../../definition/outboundCommunication'; +import { AppMethod } from '@rocket.chat/apps-engine/definition/metadata'; +import type { IOutboundMessage, IOutboundMessageProviders, ProviderMetadata } from '@rocket.chat/apps-engine/definition/outboundCommunication'; import type { ProxiedApp } from '../ProxiedApp'; import { AppOutboundProcessError } from '../errors/AppOutboundProcessError'; import type { AppLogStorage } from '../storage'; @@ -15,18 +15,18 @@ export class OutboundMessageProvider { this.isRegistered = false; } - public async runGetProviderMetadata(logStorage: AppLogStorage, accessors: AppAccessorManager): Promise { - return this.runTheCode(AppMethod._OUTBOUND_GET_PROVIDER_METADATA, logStorage, accessors, []); + public async runGetProviderMetadata(_logStorage: AppLogStorage, _accessors: AppAccessorManager): Promise { + return this.runTheCode(AppMethod._OUTBOUND_GET_PROVIDER_METADATA, _logStorage, _accessors, []); } - public async runSendOutboundMessage(logStorage: AppLogStorage, accessors: AppAccessorManager, body: IOutboundMessage): Promise { - await this.runTheCode(AppMethod._OUTBOUND_SEND_MESSAGE, logStorage, accessors, [body]); + public async runSendOutboundMessage(_logStorage: AppLogStorage, _accessors: AppAccessorManager, body: IOutboundMessage): Promise { + await this.runTheCode(AppMethod._OUTBOUND_SEND_MESSAGE, _logStorage, _accessors, [body]); } private async runTheCode( method: AppMethod._OUTBOUND_GET_PROVIDER_METADATA | AppMethod._OUTBOUND_SEND_MESSAGE, - logStorage: AppLogStorage, - accessors: AppAccessorManager, + _logStorage: AppLogStorage, + _accessors: AppAccessorManager, runContextArgs: Array, ): Promise { const provider = `${this.provider.name}-${this.provider.type}`; @@ -39,10 +39,11 @@ export class OutboundMessageProvider { return result as T; } catch (e) { - if (e?.message === 'error-invalid-provider') { + const err = e as { message?: string }; + if (err.message === 'error-invalid-provider') { throw new Error('error-provider-not-registered'); } - throw new AppOutboundProcessError(e.message, method); + throw new AppOutboundProcessError(err.message ?? String(e), method); } } diff --git a/packages/apps-engine/src/server/managers/AppOutboundCommunicationProviderManager.ts b/packages/apps/src/server/managers/AppOutboundCommunicationProviderManager.ts similarity index 95% rename from packages/apps-engine/src/server/managers/AppOutboundCommunicationProviderManager.ts rename to packages/apps/src/server/managers/AppOutboundCommunicationProviderManager.ts index cd1b045e951b4..b73903ec4b589 100644 --- a/packages/apps-engine/src/server/managers/AppOutboundCommunicationProviderManager.ts +++ b/packages/apps/src/server/managers/AppOutboundCommunicationProviderManager.ts @@ -5,7 +5,7 @@ import type { IOutboundPhoneMessageProvider, ValidOutboundProvider, IOutboundMessage, -} from '../../definition/outboundCommunication'; +} from '@rocket.chat/apps-engine/definition/outboundCommunication'; import type { AppManager } from '../AppManager'; import type { OutboundMessageBridge } from '../bridges'; import { OutboundMessageProvider } from './AppOutboundCommunicationProvider'; @@ -55,7 +55,7 @@ export class AppOutboundCommunicationProviderManager { this.outboundMessageProviders.set(appId, new Map()); } - this.outboundMessageProviders.get(appId).set(provider.type, new OutboundMessageProvider(app, provider)); + this.outboundMessageProviders.get(appId)!.set(provider.type, new OutboundMessageProvider(app, provider)); } public async registerProviders(appId: string): Promise { @@ -89,7 +89,7 @@ export class AppOutboundCommunicationProviderManager { } const appProviders = this.outboundMessageProviders.get(appId); - for await (const [, providerInfo] of appProviders) { + for await (const [, providerInfo] of appProviders!) { await this.unregisterProvider(appId, providerInfo, opts); } diff --git a/packages/apps-engine/src/server/managers/AppPermissionManager.ts b/packages/apps/src/server/managers/AppPermissionManager.ts similarity index 88% rename from packages/apps-engine/src/server/managers/AppPermissionManager.ts rename to packages/apps/src/server/managers/AppPermissionManager.ts index 310672d0ff81e..d0fb1561685c4 100644 --- a/packages/apps-engine/src/server/managers/AppPermissionManager.ts +++ b/packages/apps/src/server/managers/AppPermissionManager.ts @@ -1,4 +1,4 @@ -import type { IPermission } from '../../definition/permissions/IPermission'; +import type { IPermission } from '@rocket.chat/apps-engine/definition/permissions/IPermission'; import { getPermissionsByAppId } from '../AppManager'; import { PermissionDeniedError } from '../errors/PermissionDeniedError'; import { APPS_ENGINE_RUNTIME_FILE_PREFIX } from '../runtime/AppsEngineRuntime'; @@ -32,7 +32,7 @@ export class AppPermissionManager { } private static getCallStack(): string { - const stack = new Error().stack.toString().split('\n'); + const stack = (new Error().stack ?? '').split('\n'); const appStackIndex = stack.findIndex((position) => position.includes(APPS_ENGINE_RUNTIME_FILE_PREFIX)); return stack.slice(4, appStackIndex).join('\n'); diff --git a/packages/apps-engine/src/server/managers/AppRuntimeManager.ts b/packages/apps/src/server/managers/AppRuntimeManager.ts similarity index 97% rename from packages/apps-engine/src/server/managers/AppRuntimeManager.ts rename to packages/apps/src/server/managers/AppRuntimeManager.ts index dd631bc8eebd0..bbec840d2d671 100644 --- a/packages/apps-engine/src/server/managers/AppRuntimeManager.ts +++ b/packages/apps/src/server/managers/AppRuntimeManager.ts @@ -54,7 +54,7 @@ export class AppRuntimeManager { return this.subprocesses[appId]; } - public async runInSandbox(appId: string, execRequest: ExecRequestContext, options?: ExecRequestOptions): Promise { + public async runInSandbox(appId: string, execRequest: ExecRequestContext, _options?: ExecRequestOptions): Promise { const subprocess = this.subprocesses[appId]; if (!subprocess) { diff --git a/packages/apps-engine/src/server/managers/AppSchedulerManager.ts b/packages/apps/src/server/managers/AppSchedulerManager.ts similarity index 90% rename from packages/apps-engine/src/server/managers/AppSchedulerManager.ts rename to packages/apps/src/server/managers/AppSchedulerManager.ts index 2e8535b5dd115..ab1e1e749de8c 100644 --- a/packages/apps-engine/src/server/managers/AppSchedulerManager.ts +++ b/packages/apps/src/server/managers/AppSchedulerManager.ts @@ -1,5 +1,5 @@ -import { AppStatus } from '../../definition/AppStatus'; -import type { IJobContext, IOnetimeSchedule, IProcessor, IRecurringSchedule } from '../../definition/scheduler'; +import { AppStatus } from '@rocket.chat/apps-engine/definition/AppStatus'; +import type { IJobContext, IOnetimeSchedule, IProcessor, IRecurringSchedule } from '@rocket.chat/apps-engine/definition/scheduler'; import type { AppManager } from '../AppManager'; import type { IInternalSchedulerBridge } from '../bridges/IInternalSchedulerBridge'; import type { SchedulerBridge } from '../bridges/SchedulerBridge'; @@ -27,7 +27,7 @@ export class AppSchedulerManager { processors.map((processor) => { const processorId = createProcessorId(processor.id, appId); - this.registeredProcessors.get(appId)[processorId] = processor; + this.registeredProcessors.get(appId)![processorId] = processor; return { id: processorId, @@ -41,13 +41,13 @@ export class AppSchedulerManager { public wrapProcessor(appId: string, processorId: string): IProcessor['processor'] { return async (jobContext: IJobContext) => { - const processor = this.registeredProcessors.get(appId)[processorId]; + const processor = this.registeredProcessors.get(appId)![processorId]; if (!processor) { throw new Error(`Processor ${processorId} not available`); } - const app = this.manager.getOneById(appId); + const app = this.manager.getOneById(appId)!; const status = await app.getStatus(); const previousStatus = app.getPreviousStatus(); diff --git a/packages/apps-engine/src/server/managers/AppSettingsManager.ts b/packages/apps/src/server/managers/AppSettingsManager.ts similarity index 81% rename from packages/apps-engine/src/server/managers/AppSettingsManager.ts rename to packages/apps/src/server/managers/AppSettingsManager.ts index 64fb7b4cc1053..3dfb072c4e10f 100644 --- a/packages/apps-engine/src/server/managers/AppSettingsManager.ts +++ b/packages/apps/src/server/managers/AppSettingsManager.ts @@ -1,6 +1,6 @@ -import { AppMethod } from '../../definition/metadata'; -import type { ISetting } from '../../definition/settings'; -import type { ISettingUpdateContext } from '../../definition/settings/ISettingUpdateContext'; +import { AppMethod } from '@rocket.chat/apps-engine/definition/metadata'; +import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; +import type { ISettingUpdateContext } from '@rocket.chat/apps-engine/definition/settings/ISettingUpdateContext'; import type { AppManager } from '../AppManager'; import { Utilities } from '../misc/Utilities'; @@ -47,7 +47,7 @@ export class AppSettingsManager { decoratedSetting.updatedAt = new Date(); storageItem.settings[decoratedSetting.id] = decoratedSetting; - await this.manager.getStorage().updateSetting(storageItem._id, decoratedSetting); + await this.manager.getStorage().updateSetting(storageItem._id!, decoratedSetting); this.manager.getBridges().getAppDetailChangesBridge().doOnAppSettingsChange(appId, decoratedSetting); diff --git a/packages/apps-engine/src/server/managers/AppSignatureManager.ts b/packages/apps/src/server/managers/AppSignatureManager.ts similarity index 88% rename from packages/apps-engine/src/server/managers/AppSignatureManager.ts rename to packages/apps/src/server/managers/AppSignatureManager.ts index 1b24cd9d7d4da..ae2df98f2b026 100644 --- a/packages/apps-engine/src/server/managers/AppSignatureManager.ts +++ b/packages/apps/src/server/managers/AppSignatureManager.ts @@ -13,9 +13,9 @@ export class AppSignatureManager { private readonly signingAlgorithm = 'RS512'; - private privateKey: string; + private privateKey!: string; - private publicKey: string; + private publicKey!: string; constructor(private readonly manager: AppManager) { this.federationBridge = this.manager.getBridges().getInternalFederationBridge(); @@ -23,7 +23,7 @@ export class AppSignatureManager { public async verifySignedApp(app: IAppStorageItem): Promise { const publicKey = await jose.importSPKI(await this.getPublicKey(), 'pem'); - const { payload } = await jose.jwtVerify(app.signature, publicKey); + const { payload } = await jose.jwtVerify(app.signature as string, publicKey); const checksum = this.calculateChecksumForApp(app); @@ -45,14 +45,14 @@ export class AppSignatureManager { private async getPrivateKey(): Promise { if (!this.privateKey) { - this.privateKey = await this.federationBridge.getPrivateKey(); + this.privateKey = (await this.federationBridge.getPrivateKey()) as string; } return this.privateKey; } private async getPublicKey(): Promise { if (!this.publicKey) { - this.publicKey = await this.federationBridge.getPublicKey(); + this.publicKey = (await this.federationBridge.getPublicKey()) as string; } return this.publicKey; } diff --git a/packages/apps-engine/src/server/managers/AppSlashCommand.ts b/packages/apps/src/server/managers/AppSlashCommand.ts similarity index 93% rename from packages/apps-engine/src/server/managers/AppSlashCommand.ts rename to packages/apps/src/server/managers/AppSlashCommand.ts index 29ea0a5c3c635..798c9a563b05f 100644 --- a/packages/apps-engine/src/server/managers/AppSlashCommand.ts +++ b/packages/apps/src/server/managers/AppSlashCommand.ts @@ -1,5 +1,5 @@ -import { AppMethod } from '../../definition/metadata'; -import type { ISlashCommand, ISlashCommandPreview, ISlashCommandPreviewItem, SlashCommandContext } from '../../definition/slashcommands'; +import { AppMethod } from '@rocket.chat/apps-engine/definition/metadata'; +import type { ISlashCommand, ISlashCommandPreview, ISlashCommandPreviewItem, SlashCommandContext } from '@rocket.chat/apps-engine/definition/slashcommands'; import type { ProxiedApp } from '../ProxiedApp'; import type { AppLogStorage } from '../storage'; import type { AppAccessorManager } from './AppAccessorManager'; diff --git a/packages/apps-engine/src/server/managers/AppSlashCommandManager.ts b/packages/apps/src/server/managers/AppSlashCommandManager.ts similarity index 89% rename from packages/apps-engine/src/server/managers/AppSlashCommandManager.ts rename to packages/apps/src/server/managers/AppSlashCommandManager.ts index b5c5662adf2a7..f7f3ae4e3d547 100644 --- a/packages/apps-engine/src/server/managers/AppSlashCommandManager.ts +++ b/packages/apps/src/server/managers/AppSlashCommandManager.ts @@ -1,7 +1,7 @@ -import { AppStatusUtils } from '../../definition/AppStatus'; -import { AppMethod } from '../../definition/metadata'; -import type { ISlashCommand, ISlashCommandPreview, ISlashCommandPreviewItem } from '../../definition/slashcommands'; -import { SlashCommandContext } from '../../definition/slashcommands'; +import { AppStatusUtils } from '@rocket.chat/apps-engine/definition/AppStatus'; +import { AppMethod } from '@rocket.chat/apps-engine/definition/metadata'; +import type { ISlashCommand, ISlashCommandPreview, ISlashCommandPreviewItem } from '@rocket.chat/apps-engine/definition/slashcommands'; +import { SlashCommandContext } from '@rocket.chat/apps-engine/definition/slashcommands'; import type { AppManager } from '../AppManager'; import type { CommandBridge } from '../bridges'; import { CommandAlreadyExistsError, CommandHasAlreadyBeenTouchedError } from '../errors'; @@ -72,7 +72,7 @@ export class AppSlashCommandManager { */ public canCommandBeTouchedBy(appId: string, command: string): boolean { const cmd = command.toLowerCase().trim(); - return cmd && (!this.touchedCommandsToApps.has(cmd) || this.touchedCommandsToApps.get(cmd) === appId); + return !!cmd && (!this.touchedCommandsToApps.has(cmd) || this.touchedCommandsToApps.get(cmd) === appId); } /** @@ -128,7 +128,7 @@ export class AppSlashCommandManager { this.providedCommands.set(appId, new Map()); } - this.providedCommands.get(appId).set(command.command, new AppSlashCommand(app, command)); + this.providedCommands.get(appId)!.set(command.command, new AppSlashCommand(app, command)); // The app has now touched the command, so let's set it this.setAsTouched(appId, command.command); @@ -157,7 +157,7 @@ export class AppSlashCommandManager { throw new Error('App must exist in order to modify a command.'); } - const hasNotProvidedIt = !this.providedCommands.has(appId) || !this.providedCommands.get(appId).has(command.command); + const hasNotProvidedIt = !this.providedCommands.has(appId) || !this.providedCommands.get(appId)!.has(command.command); // They haven't provided (added) it and the bridged system doesn't have it, error out if (hasNotProvidedIt && !(await this.bridge.doDoesCommandExist(command.command, appId))) { @@ -172,7 +172,7 @@ export class AppSlashCommandManager { regInfo.isRegistered = true; this.modifiedCommands.set(command.command, regInfo); } else { - this.providedCommands.get(appId).get(command.command).slashCommand = command; + this.providedCommands.get(appId)!.get(command.command)!.slashCommand = command; } this.setAsTouched(appId, command.command); @@ -195,8 +195,8 @@ export class AppSlashCommandManager { } // Handle if the App provided the command fist - if (this.providedCommands.has(appId) && this.providedCommands.get(appId).has(cmd)) { - const cmdInfo = this.providedCommands.get(appId).get(cmd); + if (this.providedCommands.has(appId) && this.providedCommands.get(appId)!.has(cmd)) { + const cmdInfo = this.providedCommands.get(appId)!.get(cmd)!; // A command marked as disabled can then be "enabled" but not be registered. // This happens when an App is not enabled and they change the status of @@ -235,8 +235,8 @@ export class AppSlashCommandManager { } // Handle if the App provided the command fist - if (this.providedCommands.has(appId) && this.providedCommands.get(appId).has(cmd)) { - const cmdInfo = this.providedCommands.get(appId).get(cmd); + if (this.providedCommands.has(appId) && this.providedCommands.get(appId)!.has(cmd)) { + const cmdInfo = this.providedCommands.get(appId)!.get(cmd)!; // A command marked as enabled can then be "disabled" but not yet be registered. // This happens when an App is not enabled and they change the status of @@ -268,7 +268,7 @@ export class AppSlashCommandManager { return; } - const commands = this.providedCommands.get(appId); + const commands = this.providedCommands.get(appId)!; for await (const [, appSlashCommand] of commands) { if (appSlashCommand.isDisabled) { continue; @@ -285,7 +285,7 @@ export class AppSlashCommandManager { */ public async unregisterCommands(appId: string): Promise { if (this.providedCommands.has(appId)) { - const commands = this.providedCommands.get(appId); + const commands = this.providedCommands.get(appId)!; for await (const [, appSlashCommand] of commands) { const cmd = appSlashCommand.slashCommand.command; await this.bridge.doUnregisterCommand(cmd, appId); @@ -293,8 +293,8 @@ export class AppSlashCommandManager { if (!this.appsTouchedCommands.has(appId)) { continue; } - const ind = this.appsTouchedCommands.get(appId).indexOf(cmd); - this.appsTouchedCommands.get(appId).splice(ind, 1); + const ind = this.appsTouchedCommands.get(appId)!.indexOf(cmd); + this.appsTouchedCommands.get(appId)!.splice(ind, 1); appSlashCommand.isRegistered = true; } @@ -306,10 +306,10 @@ export class AppSlashCommandManager { // only be the ones which the App has enabled, disabled, or modified. // We call restore to enable the commands provided by the bridged system // or unmodify the commands modified by the App - this.appsTouchedCommands.get(appId).forEach((cmd) => { + this.appsTouchedCommands.get(appId)!.forEach((cmd) => { // @NOTE this "restore" method isn't present in the bridge // this.bridge.doRestoreCommand(cmd, appId); - this.modifiedCommands.get(cmd).isRegistered = false; + this.modifiedCommands.get(cmd)!.isRegistered = false; this.modifiedCommands.delete(cmd); this.touchedCommandsToApps.delete(cmd); }); @@ -331,7 +331,7 @@ export class AppSlashCommandManager { return; } - const app = this.manager.getOneById(this.touchedCommandsToApps.get(cmd)); + const app = this.manager.getOneById(this.touchedCommandsToApps.get(cmd)!); if (!app) { throw new Error('App not found'); @@ -341,7 +341,7 @@ export class AppSlashCommandManager { throw new Error('App not enabled'); } - const appCmd = this.retrieveCommandInfo(cmd, app.getID()); + const appCmd = this.retrieveCommandInfo(cmd, app.getID())!; await appCmd.runExecutorOrPreviewer( AppMethod._COMMAND_EXECUTOR, this.ensureContext(context), @@ -350,22 +350,22 @@ export class AppSlashCommandManager { ); } - public async getPreviews(command: string, context: SlashCommandContext): Promise { + public async getPreviews(command: string, context: SlashCommandContext): Promise { const cmd = command.toLowerCase().trim(); if (!this.shouldCommandFunctionsRun(cmd)) { - return; + return undefined; } - const app = this.manager.getOneById(this.touchedCommandsToApps.get(cmd)); + const app = this.manager.getOneById(this.touchedCommandsToApps.get(cmd)!); if (!app || AppStatusUtils.isDisabled(await app.getStatus())) { // Just in case someone decides to do something they shouldn't // let's ensure the app actually exists - return; + return undefined; } - const appCmd = this.retrieveCommandInfo(cmd, app.getID()); + const appCmd = this.retrieveCommandInfo(cmd, app.getID())!; const result = await appCmd.runExecutorOrPreviewer( AppMethod._COMMAND_PREVIEWER, @@ -376,7 +376,7 @@ export class AppSlashCommandManager { if (!result) { // Failed to get the preview, thus returning is fine - return; + return undefined; } return result; @@ -389,7 +389,7 @@ export class AppSlashCommandManager { return; } - const app = this.manager.getOneById(this.touchedCommandsToApps.get(cmd)); + const app = this.manager.getOneById(this.touchedCommandsToApps.get(cmd)!); if (!app || AppStatusUtils.isDisabled(await app.getStatus())) { // Just in case someone decides to do something they shouldn't @@ -397,7 +397,7 @@ export class AppSlashCommandManager { return; } - const appCmd = this.retrieveCommandInfo(cmd, app.getID()); + const appCmd = this.retrieveCommandInfo(cmd, app.getID())!; await appCmd.runPreviewExecutor(previewItem, this.ensureContext(context), this.manager.getLogStorage(), this.accessors); } @@ -428,7 +428,7 @@ export class AppSlashCommandManager { return false; } - const appId = this.touchedCommandsToApps.get(command); + const appId = this.touchedCommandsToApps.get(command)!; const cmdInfo = this.retrieveCommandInfo(command, appId); // Should the command information really not exist @@ -442,8 +442,8 @@ export class AppSlashCommandManager { return true; } - private retrieveCommandInfo(command: string, appId: string): AppSlashCommand { - return this.modifiedCommands.get(command) || this.providedCommands.get(appId).get(command); + private retrieveCommandInfo(command: string, appId: string): AppSlashCommand | undefined { + return this.modifiedCommands.get(command) || this.providedCommands.get(appId)?.get(command); } /** @@ -457,8 +457,8 @@ export class AppSlashCommandManager { this.appsTouchedCommands.set(appId, []); } - if (!this.appsTouchedCommands.get(appId).includes(command)) { - this.appsTouchedCommands.get(appId).push(command); + if (!this.appsTouchedCommands.get(appId)!.includes(command)) { + this.appsTouchedCommands.get(appId)!.push(command); } this.touchedCommandsToApps.set(command, appId); diff --git a/packages/apps-engine/src/server/managers/AppVideoConfProvider.ts b/packages/apps/src/server/managers/AppVideoConfProvider.ts similarity index 87% rename from packages/apps-engine/src/server/managers/AppVideoConfProvider.ts rename to packages/apps/src/server/managers/AppVideoConfProvider.ts index 2d1b13f3da9b7..82418ec1d8486 100644 --- a/packages/apps-engine/src/server/managers/AppVideoConfProvider.ts +++ b/packages/apps/src/server/managers/AppVideoConfProvider.ts @@ -1,13 +1,13 @@ -import { AppMethod } from '../../definition/metadata'; -import type { IBlock } from '../../definition/uikit'; +import { AppMethod } from '@rocket.chat/apps-engine/definition/metadata'; +import type { IBlock } from '@rocket.chat/apps-engine/definition/uikit'; import type { IVideoConferenceOptions, IVideoConfProvider, VideoConfData, VideoConfDataExtended, -} from '../../definition/videoConfProviders'; -import type { VideoConference } from '../../definition/videoConferences'; -import type { IVideoConferenceUser } from '../../definition/videoConferences/IVideoConferenceUser'; +} from '@rocket.chat/apps-engine/definition/videoConfProviders'; +import type { VideoConference } from '@rocket.chat/apps-engine/definition/videoConferences'; +import type { IVideoConferenceUser } from '@rocket.chat/apps-engine/definition/videoConferences/IVideoConferenceUser'; import type { ProxiedApp } from '../ProxiedApp'; import { JSONRPC_METHOD_NOT_FOUND } from '../runtime/deno/AppsEngineDenoRuntime'; import type { AppLogStorage } from '../storage'; @@ -97,7 +97,8 @@ export class AppVideoConfProvider { return result as string | boolean | Array | undefined; } catch (e) { - if (e?.code === JSONRPC_METHOD_NOT_FOUND) { + const err = e as { code?: number }; + if (err.code === JSONRPC_METHOD_NOT_FOUND) { if (method === AppMethod._VIDEOCONF_IS_CONFIGURED) { return true; } @@ -109,5 +110,7 @@ export class AppVideoConfProvider { // @TODO add error handling console.log(e); } + + return undefined; } } diff --git a/packages/apps-engine/src/server/managers/AppVideoConfProviderManager.ts b/packages/apps/src/server/managers/AppVideoConfProviderManager.ts similarity index 92% rename from packages/apps-engine/src/server/managers/AppVideoConfProviderManager.ts rename to packages/apps/src/server/managers/AppVideoConfProviderManager.ts index 7a77cadc768cf..c9c6d299af0c0 100644 --- a/packages/apps-engine/src/server/managers/AppVideoConfProviderManager.ts +++ b/packages/apps/src/server/managers/AppVideoConfProviderManager.ts @@ -1,12 +1,12 @@ -import type { IBlock } from '../../definition/uikit'; +import type { IBlock } from '@rocket.chat/apps-engine/definition/uikit'; import type { IVideoConferenceOptions, IVideoConfProvider, VideoConfData, VideoConfDataExtended, -} from '../../definition/videoConfProviders'; -import type { VideoConference } from '../../definition/videoConferences'; -import type { IVideoConferenceUser } from '../../definition/videoConferences/IVideoConferenceUser'; +} from '@rocket.chat/apps-engine/definition/videoConfProviders'; +import type { VideoConference } from '@rocket.chat/apps-engine/definition/videoConferences'; +import type { IVideoConferenceUser } from '@rocket.chat/apps-engine/definition/videoConferences/IVideoConferenceUser'; import type { AppManager } from '../AppManager'; import type { VideoConferenceBridge } from '../bridges'; import { VideoConfProviderAlreadyExistsError, VideoConfProviderNotRegisteredError } from '../errors'; @@ -72,7 +72,7 @@ export class AppVideoConfProviderManager { this.videoConfProviders.set(appId, new Map()); } - this.videoConfProviders.get(appId).set(providerName, new AppVideoConfProvider(app, provider)); + this.videoConfProviders.get(appId)!.set(providerName, new AppVideoConfProvider(app, provider)); this.linkAppProvider(appId, providerName); } @@ -97,7 +97,7 @@ export class AppVideoConfProviderManager { } const appProviders = this.videoConfProviders.get(appId); - for (const [, providerInfo] of appProviders) { + for (const [, providerInfo] of appProviders!) { this.unregisterProvider(appId, providerInfo); } @@ -184,11 +184,13 @@ export class AppVideoConfProviderManager { continue; } - const provider = providers.get(key); + const provider = providers.get(key)!; if (provider.isRegistered) { return provider; } } + + return undefined; } private linkAppProvider(appId: string, providerName: string): void { diff --git a/packages/apps-engine/src/server/managers/UIActionButtonManager.ts b/packages/apps/src/server/managers/UIActionButtonManager.ts similarity index 92% rename from packages/apps-engine/src/server/managers/UIActionButtonManager.ts rename to packages/apps/src/server/managers/UIActionButtonManager.ts index b062017db9b24..ee75d17f1060b 100644 --- a/packages/apps-engine/src/server/managers/UIActionButtonManager.ts +++ b/packages/apps/src/server/managers/UIActionButtonManager.ts @@ -1,5 +1,5 @@ -import { AppStatusUtils } from '../../definition/AppStatus'; -import type { IUIActionButton, IUIActionButtonDescriptor } from '../../definition/ui'; +import { AppStatusUtils } from '@rocket.chat/apps-engine/definition/AppStatus'; +import type { IUIActionButton, IUIActionButtonDescriptor } from '@rocket.chat/apps-engine/definition/ui'; import type { AppManager } from '../AppManager'; import type { AppActivationBridge } from '../bridges'; import { AppPermissionManager } from './AppPermissionManager'; @@ -27,7 +27,7 @@ export class UIActionButtonManager { this.registeredActionButtons.set(appId, new Map()); } - this.registeredActionButtons.get(appId).set(button.actionId, button); + this.registeredActionButtons.get(appId)!.set(button.actionId, button); this.activationBridge.doActionsChanged(); diff --git a/packages/apps-engine/src/server/managers/index.ts b/packages/apps/src/server/managers/index.ts similarity index 100% rename from packages/apps-engine/src/server/managers/index.ts rename to packages/apps/src/server/managers/index.ts diff --git a/packages/apps-engine/src/server/marketplace/IAppLicenseMetadata.ts b/packages/apps/src/server/marketplace/IAppLicenseMetadata.ts similarity index 100% rename from packages/apps-engine/src/server/marketplace/IAppLicenseMetadata.ts rename to packages/apps/src/server/marketplace/IAppLicenseMetadata.ts diff --git a/packages/apps-engine/src/server/marketplace/IMarketplaceInfo.ts b/packages/apps/src/server/marketplace/IMarketplaceInfo.ts similarity index 91% rename from packages/apps-engine/src/server/marketplace/IMarketplaceInfo.ts rename to packages/apps/src/server/marketplace/IMarketplaceInfo.ts index 40e8928d9df4f..fbf132869e1c1 100644 --- a/packages/apps-engine/src/server/marketplace/IMarketplaceInfo.ts +++ b/packages/apps/src/server/marketplace/IMarketplaceInfo.ts @@ -2,7 +2,7 @@ import type { IMarketplacePricingPlan } from './IMarketplacePricingPlan'; import type { IMarketplaceSimpleBundleInfo } from './IMarketplaceSimpleBundleInfo'; import type { IMarketplaceSubscriptionInfo } from './IMarketplaceSubscriptionInfo'; import type { MarketplacePurchaseType } from './MarketplacePurchaseType'; -import type { IAppInfo } from '../../definition/metadata'; +import type { IAppInfo } from '@rocket.chat/apps-engine/definition/metadata'; export interface IMarketplaceInfo extends IAppInfo { categories: Array; diff --git a/packages/apps-engine/src/server/marketplace/IMarketplacePricingPlan.ts b/packages/apps/src/server/marketplace/IMarketplacePricingPlan.ts similarity index 100% rename from packages/apps-engine/src/server/marketplace/IMarketplacePricingPlan.ts rename to packages/apps/src/server/marketplace/IMarketplacePricingPlan.ts diff --git a/packages/apps-engine/src/server/marketplace/IMarketplacePricingTier.ts b/packages/apps/src/server/marketplace/IMarketplacePricingTier.ts similarity index 100% rename from packages/apps-engine/src/server/marketplace/IMarketplacePricingTier.ts rename to packages/apps/src/server/marketplace/IMarketplacePricingTier.ts diff --git a/packages/apps-engine/src/server/marketplace/IMarketplaceSimpleBundleInfo.ts b/packages/apps/src/server/marketplace/IMarketplaceSimpleBundleInfo.ts similarity index 100% rename from packages/apps-engine/src/server/marketplace/IMarketplaceSimpleBundleInfo.ts rename to packages/apps/src/server/marketplace/IMarketplaceSimpleBundleInfo.ts diff --git a/packages/apps-engine/src/server/marketplace/IMarketplaceSubscriptionInfo.ts b/packages/apps/src/server/marketplace/IMarketplaceSubscriptionInfo.ts similarity index 100% rename from packages/apps-engine/src/server/marketplace/IMarketplaceSubscriptionInfo.ts rename to packages/apps/src/server/marketplace/IMarketplaceSubscriptionInfo.ts diff --git a/packages/apps-engine/src/server/marketplace/MarketplacePricingStrategy.ts b/packages/apps/src/server/marketplace/MarketplacePricingStrategy.ts similarity index 100% rename from packages/apps-engine/src/server/marketplace/MarketplacePricingStrategy.ts rename to packages/apps/src/server/marketplace/MarketplacePricingStrategy.ts diff --git a/packages/apps-engine/src/server/marketplace/MarketplacePurchaseType.ts b/packages/apps/src/server/marketplace/MarketplacePurchaseType.ts similarity index 100% rename from packages/apps-engine/src/server/marketplace/MarketplacePurchaseType.ts rename to packages/apps/src/server/marketplace/MarketplacePurchaseType.ts diff --git a/packages/apps-engine/src/server/marketplace/MarketplaceSubscriptionStatus.ts b/packages/apps/src/server/marketplace/MarketplaceSubscriptionStatus.ts similarity index 100% rename from packages/apps-engine/src/server/marketplace/MarketplaceSubscriptionStatus.ts rename to packages/apps/src/server/marketplace/MarketplaceSubscriptionStatus.ts diff --git a/packages/apps-engine/src/server/marketplace/MarketplaceSubscriptionType.ts b/packages/apps/src/server/marketplace/MarketplaceSubscriptionType.ts similarity index 100% rename from packages/apps-engine/src/server/marketplace/MarketplaceSubscriptionType.ts rename to packages/apps/src/server/marketplace/MarketplaceSubscriptionType.ts diff --git a/packages/apps-engine/src/server/marketplace/index.ts b/packages/apps/src/server/marketplace/index.ts similarity index 100% rename from packages/apps-engine/src/server/marketplace/index.ts rename to packages/apps/src/server/marketplace/index.ts diff --git a/packages/apps-engine/src/server/marketplace/license/AppLicenseValidationResult.ts b/packages/apps/src/server/marketplace/license/AppLicenseValidationResult.ts similarity index 97% rename from packages/apps-engine/src/server/marketplace/license/AppLicenseValidationResult.ts rename to packages/apps/src/server/marketplace/license/AppLicenseValidationResult.ts index 2946d40111f54..cf16937041ae6 100644 --- a/packages/apps-engine/src/server/marketplace/license/AppLicenseValidationResult.ts +++ b/packages/apps/src/server/marketplace/license/AppLicenseValidationResult.ts @@ -5,7 +5,7 @@ export class AppLicenseValidationResult { private validated = false; - private appId: string; + private appId!: string; public addError(field: string, message: string): void { this.errors[field] = message; diff --git a/packages/apps-engine/src/server/marketplace/license/Crypto.ts b/packages/apps/src/server/marketplace/license/Crypto.ts similarity index 100% rename from packages/apps-engine/src/server/marketplace/license/Crypto.ts rename to packages/apps/src/server/marketplace/license/Crypto.ts diff --git a/packages/apps-engine/src/server/marketplace/license/index.ts b/packages/apps/src/server/marketplace/license/index.ts similarity index 100% rename from packages/apps-engine/src/server/marketplace/license/index.ts rename to packages/apps/src/server/marketplace/license/index.ts diff --git a/packages/apps-engine/src/server/messages/Message.ts b/packages/apps/src/server/messages/Message.ts similarity index 90% rename from packages/apps-engine/src/server/messages/Message.ts rename to packages/apps/src/server/messages/Message.ts index 60a18d07745eb..e15f80c863663 100644 --- a/packages/apps-engine/src/server/messages/Message.ts +++ b/packages/apps/src/server/messages/Message.ts @@ -1,14 +1,14 @@ import type { LayoutBlock } from '@rocket.chat/ui-kit'; -import type { IMessage, IMessageAttachment, IMessageFile, IMessageReactions } from '../../definition/messages'; -import type { IUser, IUserLookup } from '../../definition/users'; +import type { IMessage, IMessageAttachment, IMessageFile, IMessageReactions } from '@rocket.chat/apps-engine/definition/messages'; +import type { IUser, IUserLookup } from '@rocket.chat/apps-engine/definition/users'; import type { AppManager } from '../AppManager'; import { Room } from '../rooms/Room'; export class Message implements IMessage { public id?: string; - public sender: IUser; + public sender!: IUser; public text?: string; @@ -50,7 +50,7 @@ export class Message implements IMessage { public pinnedBy?: IUserLookup; - private _ROOM: Room; + private _ROOM!: Room; public get room(): Room { return this._ROOM; diff --git a/packages/apps-engine/src/server/misc/UIHelper.ts b/packages/apps/src/server/misc/UIHelper.ts similarity index 63% rename from packages/apps-engine/src/server/misc/UIHelper.ts rename to packages/apps/src/server/misc/UIHelper.ts index e71feb6c71b78..e4403fa5f7256 100644 --- a/packages/apps-engine/src/server/misc/UIHelper.ts +++ b/packages/apps/src/server/misc/UIHelper.ts @@ -1,7 +1,7 @@ import type { LayoutBlock } from '@rocket.chat/ui-kit'; import { v4 as uuid } from 'uuid'; -import type { IBlock } from '../../definition/uikit'; +import type { IBlock } from '@rocket.chat/apps-engine/definition/uikit'; export class UIHelper { /** @@ -11,15 +11,16 @@ export class UIHelper { * @returns the array of block with the ids properties assigned */ public static assignIds(blocks: Array, appId: string): Array { - blocks.forEach((block: (IBlock | LayoutBlock) & { appId?: string; blockId?: string; elements?: Array }) => { - if (!block.appId) { - block.appId = appId; + blocks.forEach((block) => { + const b = block as (IBlock | LayoutBlock) & { appId?: string; blockId?: string; elements?: Array }; + if (!b.appId) { + b.appId = appId; } - if (!block.blockId) { - block.blockId = uuid(); + if (!b.blockId) { + b.blockId = uuid(); } - if (block.elements) { - block.elements.forEach((element) => { + if (b.elements) { + b.elements.forEach((element) => { if (!element.actionId) { element.actionId = uuid(); } diff --git a/packages/apps-engine/src/server/misc/Utilities.ts b/packages/apps/src/server/misc/Utilities.ts similarity index 100% rename from packages/apps-engine/src/server/misc/Utilities.ts rename to packages/apps/src/server/misc/Utilities.ts diff --git a/packages/apps/src/server/oauth2/OAuth2Client.ts b/packages/apps/src/server/oauth2/OAuth2Client.ts new file mode 100644 index 0000000000000..d6277bca86622 --- /dev/null +++ b/packages/apps/src/server/oauth2/OAuth2Client.ts @@ -0,0 +1 @@ +export { OAuth2Client, GrantType } from '@rocket.chat/apps-engine/definition/oauth2/OAuth2Client'; diff --git a/packages/apps-engine/src/server/permissions/AppPermissions.ts b/packages/apps/src/server/permissions/AppPermissions.ts similarity index 98% rename from packages/apps-engine/src/server/permissions/AppPermissions.ts rename to packages/apps/src/server/permissions/AppPermissions.ts index 138b057858503..a2ced62c63660 100644 --- a/packages/apps-engine/src/server/permissions/AppPermissions.ts +++ b/packages/apps/src/server/permissions/AppPermissions.ts @@ -3,7 +3,7 @@ import type { IPermission, IReadSettingPermission, IWorkspaceTokenPermission, -} from '../../definition/permissions/IPermission'; +} from '@rocket.chat/apps-engine/definition/permissions/IPermission'; /** * @description diff --git a/packages/apps-engine/src/server/rooms/Room.ts b/packages/apps/src/server/rooms/Room.ts similarity index 82% rename from packages/apps-engine/src/server/rooms/Room.ts rename to packages/apps/src/server/rooms/Room.ts index 83568d0eae907..a76471837d3e0 100644 --- a/packages/apps-engine/src/server/rooms/Room.ts +++ b/packages/apps/src/server/rooms/Room.ts @@ -1,19 +1,19 @@ -import type { IRoom, RoomType } from '../../definition/rooms'; -import type { IUser } from '../../definition/users'; +import type { IRoom, RoomType } from '@rocket.chat/apps-engine/definition/rooms'; +import type { IUser } from '@rocket.chat/apps-engine/definition/users'; import type { AppManager } from '../AppManager'; const PrivateManager = Symbol('RoomPrivateManager'); export class Room implements IRoom { - public id: string; + public id!: string; public displayName?: string; - public slugifiedName: string; + public slugifiedName!: string; - public type: RoomType; + public type!: RoomType; - public creator: IUser; + public creator!: IUser; public isDefault?: boolean; @@ -33,9 +33,9 @@ export class Room implements IRoom { public userIds?: Array; - private _USERNAMES: Array; + private _USERNAMES!: Array; - private [PrivateManager]: AppManager; + private [PrivateManager]!: AppManager; /** * @deprecated @@ -49,7 +49,7 @@ export class Room implements IRoom { return this._USERNAMES; } - public set usernames(usernames) {} + public set usernames(_usernames: Array) {} public constructor(room: IRoom, manager: AppManager) { Object.assign(this, room); diff --git a/packages/apps-engine/src/server/runtime/AppsEngineEmptyRuntime.ts b/packages/apps/src/server/runtime/AppsEngineEmptyRuntime.ts similarity index 51% rename from packages/apps-engine/src/server/runtime/AppsEngineEmptyRuntime.ts rename to packages/apps/src/server/runtime/AppsEngineEmptyRuntime.ts index cfd2b86a9fa23..1a1cfcfe17580 100644 --- a/packages/apps-engine/src/server/runtime/AppsEngineEmptyRuntime.ts +++ b/packages/apps/src/server/runtime/AppsEngineEmptyRuntime.ts @@ -1,13 +1,13 @@ import type { IAppsEngineRuntimeOptions } from './AppsEngineRuntime'; import { AppsEngineRuntime } from './AppsEngineRuntime'; -import type { App } from '../../definition/App'; +import type { App } from '@rocket.chat/apps-engine/definition/App'; export class AppsEngineEmptyRuntime extends AppsEngineRuntime { - public static async runCode(code: string, sandbox?: Record, options?: IAppsEngineRuntimeOptions): Promise { + public static override async runCode(_code: string, _sandbox?: Record, _options?: IAppsEngineRuntimeOptions): Promise { throw new Error('Empty runtime does not support code execution'); } - public static runCodeSync(code: string, sandbox?: Record, options?: IAppsEngineRuntimeOptions): any { + public static override runCodeSync(_code: string, _sandbox?: Record, _options?: IAppsEngineRuntimeOptions): any { throw new Error('Empty runtime does not support code execution'); } @@ -15,7 +15,7 @@ export class AppsEngineEmptyRuntime extends AppsEngineRuntime { super(app, () => {}); } - public async runInSandbox(code: string, sandbox?: Record, options?: IAppsEngineRuntimeOptions): Promise { + public async runInSandbox(_code: string, _sandbox?: Record, _options?: IAppsEngineRuntimeOptions): Promise { return Promise.reject(new Error('Empty runtime does not support execution')); } } diff --git a/packages/apps-engine/src/server/runtime/AppsEngineNodeRuntime.ts b/packages/apps/src/server/runtime/AppsEngineNodeRuntime.ts similarity index 83% rename from packages/apps-engine/src/server/runtime/AppsEngineNodeRuntime.ts rename to packages/apps/src/server/runtime/AppsEngineNodeRuntime.ts index a686e154547af..71ad32c0f13f8 100644 --- a/packages/apps-engine/src/server/runtime/AppsEngineNodeRuntime.ts +++ b/packages/apps/src/server/runtime/AppsEngineNodeRuntime.ts @@ -3,7 +3,7 @@ import * as vm from 'vm'; import type { IAppsEngineRuntimeOptions } from './AppsEngineRuntime'; import { APPS_ENGINE_RUNTIME_DEFAULT_TIMEOUT, AppsEngineRuntime, getFilenameForApp } from './AppsEngineRuntime'; -import type { App } from '../../definition/App'; +import type { App } from '@rocket.chat/apps-engine/definition/App'; export class AppsEngineNodeRuntime extends AppsEngineRuntime { public static defaultRuntimeOptions = { @@ -18,7 +18,7 @@ export class AppsEngineNodeRuntime extends AppsEngineRuntime { exports: {}, }; - public static async runCode(code: string, sandbox?: Record, options?: IAppsEngineRuntimeOptions): Promise { + public static override async runCode(code: string, sandbox?: Record, options?: IAppsEngineRuntimeOptions): Promise { return new Promise((resolve, reject) => { process.nextTick(() => { try { @@ -30,7 +30,7 @@ export class AppsEngineNodeRuntime extends AppsEngineRuntime { }); } - public static runCodeSync(code: string, sandbox?: Record, options?: IAppsEngineRuntimeOptions): any { + public static override runCodeSync(code: string, sandbox?: Record, options?: IAppsEngineRuntimeOptions): any { return vm.runInNewContext( code, { ...AppsEngineNodeRuntime.defaultContext, ...sandbox }, diff --git a/packages/apps-engine/src/server/runtime/AppsEngineRuntime.ts b/packages/apps/src/server/runtime/AppsEngineRuntime.ts similarity index 66% rename from packages/apps-engine/src/server/runtime/AppsEngineRuntime.ts rename to packages/apps/src/server/runtime/AppsEngineRuntime.ts index 0b1c0e8a58ef0..d8e419b0ff3c8 100644 --- a/packages/apps-engine/src/server/runtime/AppsEngineRuntime.ts +++ b/packages/apps/src/server/runtime/AppsEngineRuntime.ts @@ -1,4 +1,4 @@ -import type { App } from '../../definition/App'; +import type { App } from '@rocket.chat/apps-engine/definition/App'; export const APPS_ENGINE_RUNTIME_DEFAULT_TIMEOUT = 1000; @@ -9,15 +9,15 @@ export function getFilenameForApp(filename: string): string { } export abstract class AppsEngineRuntime { - public static async runCode(code: string, sandbox?: Record, options?: IAppsEngineRuntimeOptions): Promise { + public static async runCode(_code: string, _sandbox?: Record, _options?: IAppsEngineRuntimeOptions): Promise { throw new Error(`Can't call this method on abstract class. Override it in a proper runtime class.`); } - public static runCodeSync(code: string, sandbox?: Record, options?: IAppsEngineRuntimeOptions): any { + public static runCodeSync(_code: string, _sandbox?: Record, _options?: IAppsEngineRuntimeOptions): any { throw new Error(`Can't call this method on abstract class. Override it in a proper runtime class.`); } - constructor(app: App, customRequire: (module: string) => any) {} + constructor(_app: App, _customRequire: (module: string) => any) {} public abstract runInSandbox(code: string, sandbox?: Record, options?: IAppsEngineRuntimeOptions): Promise; } diff --git a/packages/apps-engine/src/server/runtime/EmptyRuntime.ts b/packages/apps/src/server/runtime/EmptyRuntime.ts similarity index 89% rename from packages/apps-engine/src/server/runtime/EmptyRuntime.ts rename to packages/apps/src/server/runtime/EmptyRuntime.ts index e19f40e6d8165..c4ec2b5a091cb 100644 --- a/packages/apps-engine/src/server/runtime/EmptyRuntime.ts +++ b/packages/apps/src/server/runtime/EmptyRuntime.ts @@ -1,7 +1,7 @@ import { EventEmitter } from 'events'; import type { IRuntimeController, RuntimeRequestOptions } from './IRuntimeController'; -import { AppStatus } from '../../definition/AppStatus'; +import { AppStatus } from '@rocket.chat/apps-engine/definition/AppStatus'; export class EmptyRuntime extends EventEmitter implements IRuntimeController { private readonly appId: string; @@ -21,7 +21,7 @@ export class EmptyRuntime extends EventEmitter implements IRuntimeController { /** * Stub implementation that throws an error since this runtime cannot handle requests */ - public async sendRequest(message: { method: string; params: any[] }, options?: RuntimeRequestOptions): Promise { + public async sendRequest(message: { method: string; params: any[] }, _options?: RuntimeRequestOptions): Promise { throw new Error(`EmptyRuntime cannot handle requests. Method: ${message.method}`); } diff --git a/packages/apps-engine/src/server/runtime/IRuntimeController.ts b/packages/apps/src/server/runtime/IRuntimeController.ts similarity index 88% rename from packages/apps-engine/src/server/runtime/IRuntimeController.ts rename to packages/apps/src/server/runtime/IRuntimeController.ts index 37d2270220795..69791e25e0ab8 100644 --- a/packages/apps-engine/src/server/runtime/IRuntimeController.ts +++ b/packages/apps/src/server/runtime/IRuntimeController.ts @@ -1,6 +1,6 @@ import type { EventEmitter } from 'events'; -import type { AppStatus } from '../../definition/AppStatus'; +import type { AppStatus } from '@rocket.chat/apps-engine/definition/AppStatus'; export type RuntimeRequestOptions = { timeout: number; diff --git a/packages/apps-engine/src/server/runtime/deno/AppsEngineDenoRuntime.ts b/packages/apps/src/server/runtime/deno/AppsEngineDenoRuntime.ts similarity index 89% rename from packages/apps-engine/src/server/runtime/deno/AppsEngineDenoRuntime.ts rename to packages/apps/src/server/runtime/deno/AppsEngineDenoRuntime.ts index 69ecd286ef3fb..0fff9d1894d83 100644 --- a/packages/apps-engine/src/server/runtime/deno/AppsEngineDenoRuntime.ts +++ b/packages/apps/src/server/runtime/deno/AppsEngineDenoRuntime.ts @@ -11,8 +11,8 @@ import { LivenessManager } from './LivenessManager'; import { ProcessMessenger } from './ProcessMessenger'; import { bundleLegacyApp } from './bundler'; import { newDecoder } from './codec'; -import { AppStatus, AppStatusUtils } from '../../../definition/AppStatus'; -import { AppMethod } from '../../../definition/metadata'; +import { AppStatus, AppStatusUtils } from '@rocket.chat/apps-engine/definition/AppStatus'; +import { AppMethod } from '@rocket.chat/apps-engine/definition/metadata'; import type { AppManager } from '../../AppManager'; import type { AppBridges } from '../../bridges'; import type { IParseAppPackageResult } from '../../compiler'; @@ -86,6 +86,42 @@ export function getDenoConfigPath(): string { } } +/** + * Resolves the absolute path to @rocket.chat/apps-engine's src/ directory. + * Uses require.resolve so it works regardless of the runtime environment + * (monorepo dev, Meteor bundle, standalone node_modules). + */ +export function getAppsEngineSourceDir(): string { + const pkgJsonPath = require.resolve('@rocket.chat/apps-engine/package.json'); + return path.join(path.dirname(pkgJsonPath), 'src'); +} + +/** + * Generates a runtime deno.jsonc at `/deno_runtime.jsonc` by reading + * the static config and injecting the resolved absolute path for + * `@rocket.chat/apps-engine/`. This makes deno-runtime location-independent: + * the path is always correct regardless of where this package is installed. + * + * Returns the path to the generated config file. + */ +export function generateRuntimeDenoConfig(staticConfigPath: string, tempDir: string): string { + const staticConfig = JSON.parse(fs.readFileSync(staticConfigPath, 'utf8')); + const appsEngineSrcUrl = `file://${getAppsEngineSourceDir()}/`; + + const runtimeConfig = { + ...staticConfig, + imports: { + ...staticConfig.imports, + '@rocket.chat/apps-engine/': appsEngineSrcUrl, + }, + }; + + const runtimeConfigPath = path.join(tempDir, 'deno_runtime.jsonc'); + fs.writeFileSync(runtimeConfigPath, JSON.stringify(runtimeConfig, null, '\t')); + + return runtimeConfigPath; +} + type AbortFunction = (reason?: any) => void; export class DenoRuntimeSubprocessController extends EventEmitter implements IRuntimeController { @@ -171,19 +207,24 @@ export class DenoRuntimeSubprocessController extends EventEmitter implements IRu const denoExePath = 'deno'; const denoWrapperPath = this.denoRuntimePath; - // During development, the appsEngineDir is enough to run the deno process + // The apps package dir (where deno-runtime/ and .deno-cache/ live) const appsEngineDir = path.dirname(path.join(this.denoConfigPath, '..')); const DENO_DIR = process.env.DENO_DIR ?? path.join(appsEngineDir, '.deno-cache'); // When running in production, we're likely inside a node_modules which the Deno // process must be able to read in order to include files that use NPM packages const parentNodeModulesDir = path.dirname(path.join(appsEngineDir, '..')); + // The definition/ source files from @rocket.chat/apps-engine that deno-runtime imports + const appsEngineSrcDir = getAppsEngineSourceDir(); - const allowedDirs = [appsEngineDir, parentNodeModulesDir, this.tempFilePath]; + const allowedDirs = [appsEngineDir, parentNodeModulesDir, appsEngineSrcDir, this.tempFilePath]; + + // Generate a runtime config with the resolved absolute path for @rocket.chat/apps-engine/ + const runtimeConfigPath = generateRuntimeDenoConfig(this.denoConfigPath, this.tempFilePath); const options = [ 'run', '--cached-only', - `--config=${this.denoConfigPath}`, + `--config=${runtimeConfigPath}`, `--allow-read=${allowedDirs.join(',')}`, `--allow-env=${ALLOWED_ENVIRONMENT_VARIABLES.join(',')}`, denoWrapperPath, @@ -244,7 +285,7 @@ export class DenoRuntimeSubprocessController extends EventEmitter implements IRu // What else should we do? if (this.deno.kill('SIGKILL')) { // Let's wait until we get confirmation the process exited - await new Promise((r) => this.deno.on('exit', r)); + await new Promise((r) => this.deno!.on('exit', r)); killed = true; } else { this.debug('Tried killing the process but failed. Was it already dead?'); @@ -257,7 +298,7 @@ export class DenoRuntimeSubprocessController extends EventEmitter implements IRu } // Debug purposes, could be deleted later - emit(eventName: string | symbol, ...args: any[]): boolean { + override emit(eventName: string | symbol, ...args: any[]): boolean { const hadListeners = super.emit(eventName, ...args); if (!hadListeners) { @@ -324,7 +365,7 @@ export class DenoRuntimeSubprocessController extends EventEmitter implements IRu } await this.setupApp(); - logger.info({ msg: 'New subprocess successfully spawned', pid: this.deno.pid }); + logger.info({ msg: 'New subprocess successfully spawned', pid: this.deno!.pid }); // setupApp() changes the state to 'ready' - we'll need to workaround that for now this.state = 'restarting'; @@ -374,7 +415,7 @@ export class DenoRuntimeSubprocessController extends EventEmitter implements IRu private waitUntilReady(): Promise { if (this.state === 'ready') { - return; + return Promise.resolve(); } return new Promise((resolve, reject) => { @@ -445,7 +486,7 @@ export class DenoRuntimeSubprocessController extends EventEmitter implements IRu return; } - this.deno.stderr.on('data', this.parseError.bind(this)); + this.deno.stderr!.on('data', this.parseError.bind(this)); this.deno.on('error', (err) => { this.state = 'invalid'; console.error(`Failed to startup Deno subprocess for app ${this.getAppId()}`, err); @@ -455,7 +496,7 @@ export class DenoRuntimeSubprocessController extends EventEmitter implements IRu this.once('ready', this.onReady.bind(this)); - this.parseStdout(this.deno.stdout); + this.parseStdout(this.deno.stdout!); } // Probable should extract this to a separate file @@ -506,7 +547,7 @@ export class DenoRuntimeSubprocessController extends EventEmitter implements IRu **/ // Prevent app from trying to get properties from the manager that // are not intended for public access - if (!isValidOrigin(managerOrigin)) { + if (!managerOrigin || !isValidOrigin(managerOrigin)) { throw new Error(`Invalid accessor namespace "${managerOrigin}"`); } @@ -585,8 +626,9 @@ export class DenoRuntimeSubprocessController extends EventEmitter implements IRu params.map((value: unknown) => (value === 'APP_ID' ? this.appPackage.info.id : value)), ); } catch (error) { - this.debug('Error executing bridge method %s().%s() %s', bridgeName, bridgeMethod, inspect(error.message)); - const jsonRpcError = new jsonrpc.JsonRpcError(error.message, -32000, error); + const err = error as Error; + this.debug('Error executing bridge method %s().%s() %s', bridgeName, bridgeMethod, inspect(err.message)); + const jsonRpcError = new jsonrpc.JsonRpcError(err.message, -32000, err); return jsonrpc.error(id, jsonRpcError); } @@ -602,7 +644,7 @@ export class DenoRuntimeSubprocessController extends EventEmitter implements IRu try { result = await this.handleAccessorMessage(message as jsonrpc.IParsedObjectRequest); } catch (e) { - result = jsonrpc.error((message.payload as jsonrpc.RequestObject).id, new jsonrpc.JsonRpcError(e.message, 1000)); + result = jsonrpc.error((message.payload as jsonrpc.RequestObject).id, new jsonrpc.JsonRpcError((e as Error).message, 1000)); } this.messenger.send(result); @@ -616,7 +658,7 @@ export class DenoRuntimeSubprocessController extends EventEmitter implements IRu try { result = await this.handleBridgeMessage(message as jsonrpc.IParsedObjectRequest); } catch (e) { - result = jsonrpc.error((message.payload as jsonrpc.RequestObject).id, new jsonrpc.JsonRpcError(e.message, 1000)); + result = jsonrpc.error((message.payload as jsonrpc.RequestObject).id, new jsonrpc.JsonRpcError((e as Error).message, 1000)); } this.messenger.send(result); @@ -658,7 +700,7 @@ export class DenoRuntimeSubprocessController extends EventEmitter implements IRu let result: unknown; let error: jsonrpc.IParsedObjectError['payload']['error'] | undefined; - let logs: ILoggerStorageEntry; + let logs: ILoggerStorageEntry | undefined; if (message.type === 'success') { const params = message.payload.result as { value: unknown; logs?: ILoggerStorageEntry }; diff --git a/packages/apps-engine/src/server/runtime/deno/LivenessManager.ts b/packages/apps/src/server/runtime/deno/LivenessManager.ts similarity index 98% rename from packages/apps-engine/src/server/runtime/deno/LivenessManager.ts rename to packages/apps/src/server/runtime/deno/LivenessManager.ts index f7ba66ed37c04..0da5e4009082c 100644 --- a/packages/apps-engine/src/server/runtime/deno/LivenessManager.ts +++ b/packages/apps/src/server/runtime/deno/LivenessManager.ts @@ -42,14 +42,14 @@ export class LivenessManager { restartAttemptDelayInMS: number; }; - private subprocess: ChildProcess; + private subprocess!: ChildProcess; private watchdogTimeout: NodeJS.Timeout | null = null; private lastHeartbeatTimestamp = NaN; // A promise tracking the current ping process - used mostly for testing - private pendingPing: Promise | null; + private pendingPing: Promise | null = null; // This is the perfect use-case for an AbortController, but it's experimental in Node 14.x private pingAbortController: EventEmitter; @@ -132,7 +132,7 @@ export class LivenessManager { public stop() { this.pingAbortController.emit('abort'); - clearInterval(this.watchdogTimeout); + clearInterval(this.watchdogTimeout ?? undefined); this.watchdogTimeout = null; this.pendingPing = null; } diff --git a/packages/apps-engine/src/server/runtime/deno/ProcessMessenger.ts b/packages/apps/src/server/runtime/deno/ProcessMessenger.ts similarity index 95% rename from packages/apps-engine/src/server/runtime/deno/ProcessMessenger.ts rename to packages/apps/src/server/runtime/deno/ProcessMessenger.ts index c5c2394e56dfa..7da5cdbc6f400 100644 --- a/packages/apps-engine/src/server/runtime/deno/ProcessMessenger.ts +++ b/packages/apps/src/server/runtime/deno/ProcessMessenger.ts @@ -52,6 +52,6 @@ export class ProcessMessenger { } private strategySend(message: Message) { - this.deno.stdin.write(this.encoder.encode(message)); + this.deno!.stdin!.write(this.encoder!.encode(message)); } } diff --git a/packages/apps-engine/src/server/runtime/deno/bundler.ts b/packages/apps/src/server/runtime/deno/bundler.ts similarity index 100% rename from packages/apps-engine/src/server/runtime/deno/bundler.ts rename to packages/apps/src/server/runtime/deno/bundler.ts diff --git a/packages/apps-engine/src/server/runtime/deno/codec.ts b/packages/apps/src/server/runtime/deno/codec.ts similarity index 92% rename from packages/apps-engine/src/server/runtime/deno/codec.ts rename to packages/apps/src/server/runtime/deno/codec.ts index 53b05846565ee..37ac42f9f04f2 100644 --- a/packages/apps-engine/src/server/runtime/deno/codec.ts +++ b/packages/apps/src/server/runtime/deno/codec.ts @@ -4,11 +4,12 @@ const extensionCodec = new ExtensionCodec(); extensionCodec.register({ type: 0, - encode: (object: unknown) => { + encode: (object: unknown): Uint8Array | null => { // We don't care about functions, but also don't want to throw an error if (typeof object === 'function') { return new Uint8Array([0]); } + return null; }, decode: (_data: Uint8Array) => undefined, @@ -17,10 +18,11 @@ extensionCodec.register({ // We need to handle Buffers because Deno needs its own decoding extensionCodec.register({ type: 1, - encode: (object: unknown) => { + encode: (object: unknown): Uint8Array | null => { if (object instanceof Buffer) { return new Uint8Array(object.buffer, object.byteOffset, object.byteLength); } + return null; }, // msgpack will reuse the Uint8Array instance, so WE NEED to copy it instead of simply creating a view diff --git a/packages/apps-engine/src/server/storage/AppLogStorage.ts b/packages/apps/src/server/storage/AppLogStorage.ts similarity index 100% rename from packages/apps-engine/src/server/storage/AppLogStorage.ts rename to packages/apps/src/server/storage/AppLogStorage.ts diff --git a/packages/apps-engine/src/server/storage/AppMetadataStorage.ts b/packages/apps/src/server/storage/AppMetadataStorage.ts similarity index 82% rename from packages/apps-engine/src/server/storage/AppMetadataStorage.ts rename to packages/apps/src/server/storage/AppMetadataStorage.ts index 6eab3603da6b4..574b213347dac 100644 --- a/packages/apps-engine/src/server/storage/AppMetadataStorage.ts +++ b/packages/apps/src/server/storage/AppMetadataStorage.ts @@ -1,7 +1,7 @@ import type { IAppStorageItem } from './IAppStorageItem'; -import type { AppStatus } from '../../definition/AppStatus'; -import type { IAppInfo } from '../../definition/metadata/IAppInfo'; -import type { ISetting } from '../../definition/settings'; +import type { AppStatus } from '@rocket.chat/apps-engine/definition/AppStatus'; +import type { IAppInfo } from '@rocket.chat/apps-engine/definition/metadata/IAppInfo'; +import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; import type { IMarketplaceInfo } from '../marketplace'; export abstract class AppMetadataStorage { diff --git a/packages/apps-engine/src/server/storage/AppSourceStorage.ts b/packages/apps/src/server/storage/AppSourceStorage.ts similarity index 100% rename from packages/apps-engine/src/server/storage/AppSourceStorage.ts rename to packages/apps/src/server/storage/AppSourceStorage.ts diff --git a/packages/apps-engine/src/server/storage/IAppStorageItem.ts b/packages/apps/src/server/storage/IAppStorageItem.ts similarity index 67% rename from packages/apps-engine/src/server/storage/IAppStorageItem.ts rename to packages/apps/src/server/storage/IAppStorageItem.ts index 2ac4469b6f51c..93c51b23e795b 100644 --- a/packages/apps-engine/src/server/storage/IAppStorageItem.ts +++ b/packages/apps/src/server/storage/IAppStorageItem.ts @@ -1,7 +1,7 @@ -import type { AppStatus } from '../../definition/AppStatus'; -import type { IAppInfo } from '../../definition/metadata'; -import type { IPermission } from '../../definition/permissions/IPermission'; -import type { ISetting } from '../../definition/settings'; +import type { AppStatus } from '@rocket.chat/apps-engine/definition/AppStatus'; +import type { IAppInfo } from '@rocket.chat/apps-engine/definition/metadata'; +import type { IPermission } from '@rocket.chat/apps-engine/definition/permissions/IPermission'; +import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; import type { IMarketplaceInfo } from '../marketplace'; export interface IAppStorageItem { diff --git a/packages/apps-engine/src/server/storage/index.ts b/packages/apps/src/server/storage/index.ts similarity index 100% rename from packages/apps-engine/src/server/storage/index.ts rename to packages/apps/src/server/storage/index.ts diff --git a/packages/apps/tsconfig.json b/packages/apps/tsconfig.json index e00a45b253fa4..b96364dddaa17 100644 --- a/packages/apps/tsconfig.json +++ b/packages/apps/tsconfig.json @@ -3,7 +3,9 @@ "compilerOptions": { "declaration": true, "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist", + "experimentalDecorators": true, + "emitDecoratorMetadata": true }, "include": ["./src/**/*"] } diff --git a/packages/apps/turbo.json b/packages/apps/turbo.json new file mode 100644 index 0000000000000..df725f06a5e0a --- /dev/null +++ b/packages/apps/turbo.json @@ -0,0 +1,9 @@ +{ + "extends": ["//"], + "tasks": { + "build": { + "dependsOn": ["^build"], + "outputs": ["dist/**", "deno-runtime/**", "scripts/**", ".deno-cache/**"] + } + } +} diff --git a/packages/core-services/package.json b/packages/core-services/package.json index 541e2376e9161..dffa27072ea8a 100644 --- a/packages/core-services/package.json +++ b/packages/core-services/package.json @@ -29,7 +29,7 @@ "@rocket.chat/ui-kit": "workspace:~" }, "devDependencies": { - "@rocket.chat/apps-engine": "workspace:^", + "@rocket.chat/apps": "workspace:^", "@rocket.chat/jest-presets": "workspace:~", "@rocket.chat/tsconfig": "workspace:*", "@types/jest": "~30.0.0", diff --git a/packages/core-services/src/types/IAppsEngineService.ts b/packages/core-services/src/types/IAppsEngineService.ts index 5d026c5149fb9..7c5ddccf24822 100644 --- a/packages/core-services/src/types/IAppsEngineService.ts +++ b/packages/core-services/src/types/IAppsEngineService.ts @@ -1,7 +1,7 @@ import type { AppStatus } from '@rocket.chat/apps-engine/definition/AppStatus'; import type { IAppInfo } from '@rocket.chat/apps-engine/definition/metadata'; -import type { IGetAppsFilter } from '@rocket.chat/apps-engine/server/IGetAppsFilter'; -import type { IAppStorageItem } from '@rocket.chat/apps-engine/server/storage'; +import type { IGetAppsFilter } from '@rocket.chat/apps/server/IGetAppsFilter'; +import type { IAppStorageItem } from '@rocket.chat/apps/server/storage'; export type AppStatusReport = { [appId: string]: { instanceId: string; isLocal: boolean; status: AppStatus }[]; diff --git a/yarn.lock b/yarn.lock index ba967915f200f..a600cafbb80f1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8884,12 +8884,33 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/apps@workspace:packages/apps" dependencies: + "@msgpack/msgpack": "npm:3.0.0-beta2" "@rocket.chat/apps-engine": "workspace:^" "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/model-typings": "workspace:^" "@rocket.chat/tsconfig": "workspace:*" + "@seald-io/nedb": "npm:^4.1.2" + "@types/adm-zip": "npm:^0.5.7" + "@types/debug": "npm:^4.1.12" + "@types/lodash.clonedeep": "npm:^4.5.9" + "@types/node": "npm:~22.16.5" + "@types/semver": "npm:^7.5.8" + "@types/stack-trace": "npm:0.0.33" + "@types/uuid": "npm:~10.0.0" + adm-zip: "npm:^0.5.16" + debug: "npm:^4.3.7" + esbuild: "npm:~0.27.3" eslint: "npm:~9.39.3" + jose: "npm:^4.15.9" + jsonrpc-lite: "npm:^2.2.0" + lodash.clonedeep: "npm:^4.5.0" + npm-run-all: "npm:^4.1.5" + rimraf: "npm:^6.0.1" + semver: "npm:^7.6.3" + stack-trace: "npm:0.0.10" + ts-node: "npm:^6.2.0" typescript: "npm:~5.9.3" + uuid: "npm:~11.0.5" languageName: unknown linkType: soft