Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Apps-Engine method to read multiple messages from a room #32176

Merged
merged 37 commits into from
Jul 19, 2024
Merged
Show file tree
Hide file tree
Changes from 24 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
d7134c5
implement the rooms bridge
Dnouv Apr 11, 2024
2c6bd5b
change param order
Dnouv Apr 15, 2024
f3bb1a5
Update Apps-Engine
d-gubert Apr 15, 2024
4b0c386
change changeset
Dnouv Apr 16, 2024
9d34e6d
Merge branch 'develop' into new/room_msg_bridge
Dnouv Apr 16, 2024
2b20034
make changeset less developer friendly
Dnouv Apr 16, 2024
caf56fb
Update .changeset/polite-foxes-repair.md
d-gubert Apr 16, 2024
c1c5378
handle type assertions
Apr 16, 2024
d35c081
handle NaN, -Infifity
Apr 17, 2024
12b2b84
merge develop
Dnouv May 20, 2024
fb24310
resolve conflick on yarn.lock
Dnouv May 20, 2024
47418c5
update method and linting issues
Dnouv May 20, 2024
33cd125
Merge branch 'develop' into new/room_msg_bridge
d-gubert May 20, 2024
9c10374
introduce new converter to reduce db calls
Dnouv May 23, 2024
e9913d8
correct type for editedby id
Dnouv May 23, 2024
4f91b44
Merge branch 'develop' into new/room_msg_bridge
Dnouv May 23, 2024
667dcd3
Update packages/apps/src/converters/IAppMessagesConverter.ts
d-gubert May 23, 2024
cd37b40
add new type msgraw
Dnouv May 24, 2024
248495a
update apps-engine version
Dnouv May 30, 2024
eb4e60d
Merge branch 'develop' into new/room_msg_bridge
Dnouv May 30, 2024
624e077
Merge branch 'develop' into new/room_msg_bridge
d-gubert May 31, 2024
a58737b
Merge branch 'develop' into new/room_msg_bridge
d-gubert May 31, 2024
06042f6
Merge branch 'develop' into new/room_msg_bridge
d-gubert Jun 3, 2024
d3c51be
use map<->foreach
Dnouv Jun 4, 2024
fd2aee8
add logs
Dnouv Jun 7, 2024
41f3b9f
Fix wrong field name
d-gubert Jun 10, 2024
deabeb6
remove the limit checks
Dnouv Jun 20, 2024
f35fa9a
merge develop
Dnouv Jun 20, 2024
0dc45d9
Merge remote-tracking branch 'origin/develop' into new/room_msg_bridge
d-gubert Jul 19, 2024
6ac6e9d
Adapt implementation to apps-engine changes
d-gubert Jul 19, 2024
286d1a6
Merge branch 'develop' into new/room_msg_bridge
Dnouv Jul 19, 2024
a5348fd
bump apps engine
Dnouv Jul 19, 2024
b0d35be
lint
Dnouv Jul 19, 2024
bd288d8
Merge branch 'develop' into new/room_msg_bridge
Dnouv Jul 19, 2024
22aca58
Convert field name in sort option
d-gubert Jul 19, 2024
a73afff
Merge branch 'develop' into new/room_msg_bridge
d-gubert Jul 19, 2024
8a0e0fa
Merge branch 'develop' into new/room_msg_bridge
d-gubert Jul 19, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/polite-foxes-repair.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@rocket.chat/meteor': minor
---

Added a method to the Apps-Engine that allows apps to read multiple messages from a room
53 changes: 51 additions & 2 deletions apps/meteor/app/apps/server/bridges/rooms.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import type { IAppServerOrchestrator } from '@rocket.chat/apps';
import type { IMessage } from '@rocket.chat/apps-engine/definition/messages';
import type { IMessage, IMessageRaw } from '@rocket.chat/apps-engine/definition/messages';
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';
import { RoomBridge } from '@rocket.chat/apps-engine/server/bridges/RoomBridge';
import type { ISubscription, IUser as ICoreUser, IRoom as ICoreRoom } from '@rocket.chat/core-typings';
import { Subscriptions, Users, Rooms } from '@rocket.chat/models';
import { Subscriptions, Users, Rooms, Messages } from '@rocket.chat/models';

import { createDirectMessage } from '../../../../server/methods/createDirectMessage';
import { createDiscussion } from '../../../discussion/server/methods/createDiscussion';
Expand Down Expand Up @@ -102,6 +102,55 @@ export class AppRoomBridge extends RoomBridge {
return this.orch.getConverters()?.get('users').convertById(room.u._id);
}

protected async getMessages(
roomId: string,
options: {
limit: number;
skip?: number;
sort?: Record<string, 1 | -1>;
},
appId: string,
): Promise<IMessageRaw[]> {
this.orch.debugLog(`The App ${appId} is getting the messages of the room: "${roomId}"`);
Dnouv marked this conversation as resolved.
Show resolved Hide resolved

let { limit, skip = 0, sort } = options;

if (!Number.isFinite(limit) || limit < 1) {
limit = 100;
Dnouv marked this conversation as resolved.
Show resolved Hide resolved
}

if (!Number.isFinite(skip) || skip < 0) {
skip = 0;
}

if (!sort || typeof sort !== 'object') {
Dnouv marked this conversation as resolved.
Show resolved Hide resolved
sort = { ts: -1 };
}

const messageConverter = this.orch.getConverters()?.get('messages');
if (!messageConverter) {
throw new Error('Message converter not found');
}

const messageQueryOptions = {
limit: Math.min(limit, 100),
skip,
sort,
};
Dnouv marked this conversation as resolved.
Show resolved Hide resolved

const query = {
Dnouv marked this conversation as resolved.
Show resolved Hide resolved
rid: roomId,
_hidden: { $ne: true },
t: { $exists: false },
};

const cursor = Messages.find(query, messageQueryOptions);
Dnouv marked this conversation as resolved.
Show resolved Hide resolved

const messagePromises: Promise<IMessageRaw>[] = await cursor.map((message) => messageConverter.convertMessageRaw(message)).toArray();

return Promise.all(messagePromises);
}

protected async getMembers(roomId: string, appId: string): Promise<Array<IUser>> {
this.orch.debugLog(`The App ${appId} is getting the room's members by room id: "${roomId}"`);
const subscriptions = await Subscriptions.findByRoomId(roomId, {});
Expand Down
34 changes: 34 additions & 0 deletions apps/meteor/app/apps/server/converters/messages.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,40 @@ export class AppMessagesConverter {
return this.convertMessage(msg);
}

async convertMessageRaw(msgObj) {
if (!msgObj) {
return undefined;
}

const { attachments, ...message } = msgObj;
const getAttachments = async () => this._convertAttachmentsToApp(attachments);
Dnouv marked this conversation as resolved.
Show resolved Hide resolved

const map = {
id: '_id',
threadId: 'tmid',
reactions: 'reactions',
parseUrls: 'parseUrls',
text: 'msg',
createdAt: 'ts',
updatedAt: '_updatedAt',
editedAt: 'editedAt',
emoji: 'emoji',
avatarUrl: 'avatar',
alias: 'alias',
file: 'file',
customFields: 'customFields',
groupable: 'groupable',
token: 'token',
blocks: 'blocks',
room: 'rid',
editor: 'editedBy',
attachments: getAttachments,
sender: 'u',
};

return transformMappedData(message, map);
}

async convertMessage(msgObj) {
if (!msgObj) {
return undefined;
Expand Down
2 changes: 1 addition & 1 deletion apps/meteor/ee/server/services/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"author": "Rocket.Chat",
"license": "MIT",
"dependencies": {
"@rocket.chat/apps-engine": "1.42.2",
"@rocket.chat/apps-engine": "1.43.0-alpha.754",
"@rocket.chat/core-services": "workspace:^",
"@rocket.chat/core-typings": "workspace:^",
"@rocket.chat/emitter": "~0.31.25",
Expand Down
2 changes: 1 addition & 1 deletion apps/meteor/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@
"@rocket.chat/agenda": "workspace:^",
"@rocket.chat/api-client": "workspace:^",
"@rocket.chat/apps": "workspace:^",
"@rocket.chat/apps-engine": "1.42.2",
"@rocket.chat/apps-engine": "1.43.0-alpha.754",
"@rocket.chat/base64": "workspace:^",
"@rocket.chat/cas-validate": "workspace:^",
"@rocket.chat/core-services": "workspace:^",
Expand Down
2 changes: 1 addition & 1 deletion ee/apps/ddp-streamer/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
],
"author": "Rocket.Chat",
"dependencies": {
"@rocket.chat/apps-engine": "1.42.2",
"@rocket.chat/apps-engine": "1.43.0-alpha.754",
"@rocket.chat/core-services": "workspace:^",
"@rocket.chat/core-typings": "workspace:^",
"@rocket.chat/emitter": "~0.31.25",
Expand Down
2 changes: 1 addition & 1 deletion ee/packages/presence/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"@babel/core": "~7.22.20",
"@babel/preset-env": "~7.22.20",
"@babel/preset-typescript": "~7.22.15",
"@rocket.chat/apps-engine": "1.42.2",
"@rocket.chat/apps-engine": "1.43.0-alpha.754",
"@rocket.chat/eslint-config": "workspace:^",
"@rocket.chat/rest-typings": "workspace:^",
"@types/node": "^14.18.63",
Expand Down
2 changes: 1 addition & 1 deletion packages/apps/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"/dist"
],
"dependencies": {
"@rocket.chat/apps-engine": "1.42.2",
"@rocket.chat/apps-engine": "1.43.0-alpha.754",
"@rocket.chat/core-typings": "workspace:^",
"@rocket.chat/model-typings": "workspace:^"
}
Expand Down
1 change: 1 addition & 0 deletions packages/apps/src/AppsEngine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export type {
IVisitorPhone as IAppsVisitorPhone,
} from '@rocket.chat/apps-engine/definition/livechat';
export type { IMessage as IAppsMessage } from '@rocket.chat/apps-engine/definition/messages';
export type { IMessageRaw as IAppsMesssageRaw } from '@rocket.chat/apps-engine/definition/messages';
export { AppInterface as AppEvents } from '@rocket.chat/apps-engine/definition/metadata';
export type { IUser as IAppsUser } from '@rocket.chat/apps-engine/definition/users';
export type { IRole as IAppsRole } from '@rocket.chat/apps-engine/definition/roles';
Expand Down
4 changes: 3 additions & 1 deletion packages/apps/src/converters/IAppMessagesConverter.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { IMessage } from '@rocket.chat/core-typings';

import type { IAppsMessage } from '../AppsEngine';
import type { IAppsMessage, IAppsMesssageRaw } from '../AppsEngine';

export interface IAppMessagesConverter {
convertById(messageId: IMessage['_id']): Promise<IAppsMessage | undefined>;
Expand All @@ -10,4 +10,6 @@ export interface IAppMessagesConverter {
convertAppMessage(message: undefined | null): Promise<undefined>;
convertAppMessage(message: IAppsMessage): Promise<IMessage | undefined>;
convertAppMessage(message: IAppsMessage | undefined | null): Promise<IMessage | undefined>;
convertMessageRaw(message: IMessage): Promise<IAppsMesssageRaw>;
convertMessageRaw(message: IMessage | undefined | null): Promise<IAppsMesssageRaw | undefined>;
}
2 changes: 1 addition & 1 deletion packages/core-services/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
"extends": "../../package.json"
},
"dependencies": {
"@rocket.chat/apps-engine": "1.42.2",
"@rocket.chat/apps-engine": "1.43.0-alpha.754",
"@rocket.chat/core-typings": "workspace:^",
"@rocket.chat/icons": "^0.36.0",
"@rocket.chat/message-parser": "workspace:^",
Expand Down
2 changes: 1 addition & 1 deletion packages/core-typings/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"/dist"
],
"dependencies": {
"@rocket.chat/apps-engine": "1.42.2",
"@rocket.chat/apps-engine": "1.43.0-alpha.754",
"@rocket.chat/icons": "^0.36.0",
"@rocket.chat/message-parser": "workspace:^",
"@rocket.chat/ui-kit": "workspace:~"
Expand Down
2 changes: 1 addition & 1 deletion packages/fuselage-ui-kit/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
"@babel/preset-env": "~7.22.20",
"@babel/preset-react": "~7.22.15",
"@babel/preset-typescript": "~7.22.15",
"@rocket.chat/apps-engine": "^1.42.2",
"@rocket.chat/apps-engine": "1.43.0-alpha.754",
"@rocket.chat/core-typings": "workspace:^",
"@rocket.chat/eslint-config": "workspace:^",
"@rocket.chat/fuselage": "^0.54.2",
Expand Down
2 changes: 1 addition & 1 deletion packages/rest-typings/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
"/dist"
],
"dependencies": {
"@rocket.chat/apps-engine": "1.42.2",
"@rocket.chat/apps-engine": "1.43.0-alpha.754",
"@rocket.chat/core-typings": "workspace:^",
"@rocket.chat/message-parser": "workspace:^",
"@rocket.chat/ui-kit": "workspace:~",
Expand Down
26 changes: 13 additions & 13 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -8340,9 +8340,9 @@ __metadata:
languageName: unknown
linkType: soft

"@rocket.chat/apps-engine@npm:1.42.2, @rocket.chat/apps-engine@npm:^1.42.2":
version: 1.42.2
resolution: "@rocket.chat/apps-engine@npm:1.42.2"
"@rocket.chat/apps-engine@npm:1.43.0-alpha.754":
version: 1.43.0-alpha.754
resolution: "@rocket.chat/apps-engine@npm:1.43.0-alpha.754"
dependencies:
adm-zip: ^0.5.9
cryptiles: ^4.1.3
Expand All @@ -8354,15 +8354,15 @@ __metadata:
vm2: ^3.9.19
peerDependencies:
"@rocket.chat/ui-kit": "*"
checksum: d7aa23249823e37072b6b7af16a40d9a4e7cb6b8047f2a87e52163dfe516d6c8a09b21cafd4f28dfbe4dd3da9cd0190d71f7623fec8c573a3f215ca4f9529b56
checksum: 59b1d9b4485cf5a9ba4072d07c4221d26de64a539acbfdd911d724cd582658247022094596da14b7029033a8129af2097190e086ce1f52bb7f298bb95fdccdb7
languageName: node
linkType: hard

"@rocket.chat/apps@workspace:^, @rocket.chat/apps@workspace:packages/apps":
version: 0.0.0-use.local
resolution: "@rocket.chat/apps@workspace:packages/apps"
dependencies:
"@rocket.chat/apps-engine": 1.42.2
"@rocket.chat/apps-engine": 1.43.0-alpha.754
"@rocket.chat/core-typings": "workspace:^"
"@rocket.chat/model-typings": "workspace:^"
"@types/jest": ~29.5.7
Expand Down Expand Up @@ -8441,7 +8441,7 @@ __metadata:
"@babel/core": ~7.22.20
"@babel/preset-env": ~7.22.20
"@babel/preset-typescript": ~7.22.15
"@rocket.chat/apps-engine": 1.42.2
"@rocket.chat/apps-engine": 1.43.0-alpha.754
"@rocket.chat/core-typings": "workspace:^"
"@rocket.chat/eslint-config": "workspace:^"
"@rocket.chat/icons": ^0.36.0
Expand All @@ -8467,7 +8467,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@rocket.chat/core-typings@workspace:packages/core-typings"
dependencies:
"@rocket.chat/apps-engine": 1.42.2
"@rocket.chat/apps-engine": 1.43.0-alpha.754
"@rocket.chat/eslint-config": "workspace:^"
"@rocket.chat/icons": ^0.36.0
"@rocket.chat/message-parser": "workspace:^"
Expand Down Expand Up @@ -8544,7 +8544,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@rocket.chat/ddp-streamer@workspace:ee/apps/ddp-streamer"
dependencies:
"@rocket.chat/apps-engine": 1.42.2
"@rocket.chat/apps-engine": 1.43.0-alpha.754
"@rocket.chat/core-services": "workspace:^"
"@rocket.chat/core-typings": "workspace:^"
"@rocket.chat/emitter": ~0.31.25
Expand Down Expand Up @@ -8740,7 +8740,7 @@ __metadata:
"@babel/preset-env": ~7.22.20
"@babel/preset-react": ~7.22.15
"@babel/preset-typescript": ~7.22.15
"@rocket.chat/apps-engine": ^1.42.2
"@rocket.chat/apps-engine": 1.43.0-alpha.754
"@rocket.chat/core-typings": "workspace:^"
"@rocket.chat/eslint-config": "workspace:^"
"@rocket.chat/fuselage": ^0.54.2
Expand Down Expand Up @@ -9184,7 +9184,7 @@ __metadata:
"@rocket.chat/agenda": "workspace:^"
"@rocket.chat/api-client": "workspace:^"
"@rocket.chat/apps": "workspace:^"
"@rocket.chat/apps-engine": 1.42.2
"@rocket.chat/apps-engine": 1.43.0-alpha.754
"@rocket.chat/base64": "workspace:^"
"@rocket.chat/cas-validate": "workspace:^"
"@rocket.chat/core-services": "workspace:^"
Expand Down Expand Up @@ -9822,7 +9822,7 @@ __metadata:
"@babel/core": ~7.22.20
"@babel/preset-env": ~7.22.20
"@babel/preset-typescript": ~7.22.15
"@rocket.chat/apps-engine": 1.42.2
"@rocket.chat/apps-engine": 1.43.0-alpha.754
"@rocket.chat/core-services": "workspace:^"
"@rocket.chat/core-typings": "workspace:^"
"@rocket.chat/eslint-config": "workspace:^"
Expand Down Expand Up @@ -9937,7 +9937,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@rocket.chat/rest-typings@workspace:packages/rest-typings"
dependencies:
"@rocket.chat/apps-engine": 1.42.2
"@rocket.chat/apps-engine": 1.43.0-alpha.754
"@rocket.chat/core-typings": "workspace:^"
"@rocket.chat/eslint-config": "workspace:^"
"@rocket.chat/message-parser": "workspace:^"
Expand Down Expand Up @@ -36853,7 +36853,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "rocketchat-services@workspace:apps/meteor/ee/server/services"
dependencies:
"@rocket.chat/apps-engine": 1.42.2
"@rocket.chat/apps-engine": 1.43.0-alpha.754
"@rocket.chat/core-services": "workspace:^"
"@rocket.chat/core-typings": "workspace:^"
"@rocket.chat/emitter": ~0.31.25
Expand Down
Loading