diff --git a/.changeset/tiny-toes-fail.md b/.changeset/tiny-toes-fail.md new file mode 100644 index 00000000000..3b065d2e3ec --- /dev/null +++ b/.changeset/tiny-toes-fail.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': minor +--- + +Introduced new methods for Rocket.Chat Apps to interact with livechat: `findOpenRoomsByAgentId` and `countOpenRoomsByAgentId` diff --git a/apps/meteor/app/apps/server/bridges/livechat.ts b/apps/meteor/app/apps/server/bridges/livechat.ts index bf175d1d142..7067ab8e6a5 100644 --- a/apps/meteor/app/apps/server/bridges/livechat.ts +++ b/apps/meteor/app/apps/server/bridges/livechat.ts @@ -138,6 +138,27 @@ export class AppLivechatBridge extends LivechatBridge { return true; } + protected async findOpenRoomsByAgentId(agentId: string, appId: string): Promise { + this.orch.debugLog(`The App ${appId} is looking for livechat rooms associated with agent ${agentId}`); + + if (!agentId) { + throw new Error('Invalid agentId'); + } + + const rooms = await LivechatRooms.findOpenByAgent(agentId).toArray(); + return Promise.all(rooms.map((room) => this.orch.getConverters()?.get('rooms').convertRoom(room) as Promise)); + } + + protected async countOpenRoomsByAgentId(agentId: string, appId: string): Promise { + this.orch.debugLog(`The App ${appId} is counting livechat rooms associated with agent ${agentId}`); + + if (!agentId) { + throw new Error('Invalid agentId'); + } + + return LivechatRooms.countOpenByAgent(agentId); + } + protected async findRooms(visitor: IVisitor, departmentId: string | null, appId: string): Promise> { this.orch.debugLog(`The App ${appId} is looking for livechat visitors.`); diff --git a/apps/meteor/ee/server/services/package.json b/apps/meteor/ee/server/services/package.json index 576e354d68c..ea3b95b7252 100644 --- a/apps/meteor/ee/server/services/package.json +++ b/apps/meteor/ee/server/services/package.json @@ -18,7 +18,7 @@ "author": "Rocket.Chat", "license": "MIT", "dependencies": { - "@rocket.chat/apps-engine": "1.41.0", + "@rocket.chat/apps-engine": "1.42.0-alpha.619", "@rocket.chat/core-services": "workspace:^", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/emitter": "~0.31.25", diff --git a/apps/meteor/package.json b/apps/meteor/package.json index 4a4ed4b5cc0..eb42db72a9c 100644 --- a/apps/meteor/package.json +++ b/apps/meteor/package.json @@ -231,7 +231,7 @@ "@rocket.chat/agenda": "workspace:^", "@rocket.chat/api-client": "workspace:^", "@rocket.chat/apps": "workspace:^", - "@rocket.chat/apps-engine": "1.41.0", + "@rocket.chat/apps-engine": "1.42.0-alpha.619", "@rocket.chat/base64": "workspace:^", "@rocket.chat/cas-validate": "workspace:^", "@rocket.chat/core-services": "workspace:^", diff --git a/apps/meteor/server/models/raw/LivechatRooms.ts b/apps/meteor/server/models/raw/LivechatRooms.ts index 1423476a708..399ea484bb3 100644 --- a/apps/meteor/server/models/raw/LivechatRooms.ts +++ b/apps/meteor/server/models/raw/LivechatRooms.ts @@ -2264,6 +2264,17 @@ export class LivechatRoomsRaw extends BaseRaw implements ILive ); } + countOpenByAgent(userId: string, extraQuery: Filter = {}) { + const query: Filter = { + 't': 'l', + 'open': true, + 'servedBy._id': userId, + ...extraQuery, + }; + + return this.col.countDocuments(query); + } + findOpenByAgent(userId: string, extraQuery: Filter = {}) { const query: Filter = { 't': 'l', diff --git a/ee/apps/ddp-streamer/package.json b/ee/apps/ddp-streamer/package.json index 327683a8386..78f54af6d33 100644 --- a/ee/apps/ddp-streamer/package.json +++ b/ee/apps/ddp-streamer/package.json @@ -15,7 +15,7 @@ ], "author": "Rocket.Chat", "dependencies": { - "@rocket.chat/apps-engine": "1.41.0", + "@rocket.chat/apps-engine": "1.42.0-alpha.619", "@rocket.chat/core-services": "workspace:^", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/emitter": "~0.31.25", diff --git a/ee/packages/presence/package.json b/ee/packages/presence/package.json index 1ed3007fff8..fc862e4a719 100644 --- a/ee/packages/presence/package.json +++ b/ee/packages/presence/package.json @@ -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.41.0", + "@rocket.chat/apps-engine": "1.42.0-alpha.619", "@rocket.chat/eslint-config": "workspace:^", "@rocket.chat/rest-typings": "workspace:^", "@types/node": "^14.18.63", diff --git a/packages/apps/package.json b/packages/apps/package.json index 33c46a314d2..47b45603bc3 100644 --- a/packages/apps/package.json +++ b/packages/apps/package.json @@ -22,7 +22,7 @@ "/dist" ], "dependencies": { - "@rocket.chat/apps-engine": "^1.41.0", + "@rocket.chat/apps-engine": "1.42.0-alpha.619", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/model-typings": "workspace:^" } diff --git a/packages/core-services/package.json b/packages/core-services/package.json index 4bcbd2d7d19..6de74f5e0b6 100644 --- a/packages/core-services/package.json +++ b/packages/core-services/package.json @@ -34,7 +34,7 @@ "extends": "../../package.json" }, "dependencies": { - "@rocket.chat/apps-engine": "1.41.0", + "@rocket.chat/apps-engine": "1.42.0-alpha.619", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/icons": "^0.33.0", "@rocket.chat/message-parser": "workspace:^", diff --git a/packages/core-typings/package.json b/packages/core-typings/package.json index 5889cbfa1dc..4ac6bd6b350 100644 --- a/packages/core-typings/package.json +++ b/packages/core-typings/package.json @@ -23,7 +23,7 @@ "/dist" ], "dependencies": { - "@rocket.chat/apps-engine": "1.41.0", + "@rocket.chat/apps-engine": "1.42.0-alpha.619", "@rocket.chat/icons": "^0.33.0", "@rocket.chat/message-parser": "workspace:^", "@rocket.chat/ui-kit": "workspace:~" diff --git a/packages/fuselage-ui-kit/package.json b/packages/fuselage-ui-kit/package.json index 4358f19c5b2..450e74df174 100644 --- a/packages/fuselage-ui-kit/package.json +++ b/packages/fuselage-ui-kit/package.json @@ -61,7 +61,7 @@ "@babel/preset-env": "~7.22.20", "@babel/preset-react": "~7.22.15", "@babel/preset-typescript": "~7.22.15", - "@rocket.chat/apps-engine": "1.41.0", + "@rocket.chat/apps-engine": "1.42.0-alpha.619", "@rocket.chat/eslint-config": "workspace:^", "@rocket.chat/fuselage": "^0.50.1", "@rocket.chat/fuselage-hooks": "^0.33.0", diff --git a/packages/model-typings/src/models/ILivechatRoomsModel.ts b/packages/model-typings/src/models/ILivechatRoomsModel.ts index a228a4fea86..6384b325f99 100644 --- a/packages/model-typings/src/models/ILivechatRoomsModel.ts +++ b/packages/model-typings/src/models/ILivechatRoomsModel.ts @@ -230,6 +230,7 @@ export interface ILivechatRoomsModel extends IBaseModel { data?: { departmentId: string }, ): AggregationCursor>; findOpenByAgent(userId: string, extraQuery?: Filter): FindCursor; + countOpenByAgent(userId: string, extraQuery?: Filter): Promise; changeAgentByRoomId(roomId: string, newAgent: { agentId: string; username: string }): Promise; changeDepartmentIdByRoomId(roomId: string, departmentId: string): Promise; saveCRMDataByRoomId(roomId: string, crmData: unknown): Promise; diff --git a/packages/rest-typings/package.json b/packages/rest-typings/package.json index 853b72e64c5..33c6f23cbc5 100644 --- a/packages/rest-typings/package.json +++ b/packages/rest-typings/package.json @@ -25,7 +25,7 @@ "/dist" ], "dependencies": { - "@rocket.chat/apps-engine": "1.41.0", + "@rocket.chat/apps-engine": "1.42.0-alpha.619", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/message-parser": "workspace:^", "@rocket.chat/ui-kit": "workspace:~", diff --git a/yarn.lock b/yarn.lock index e5032e7ebb6..533dcf80e1c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8331,9 +8331,9 @@ __metadata: languageName: unknown linkType: soft -"@rocket.chat/apps-engine@npm:1.41.0, @rocket.chat/apps-engine@npm:^1.41.0": - version: 1.41.0 - resolution: "@rocket.chat/apps-engine@npm:1.41.0" +"@rocket.chat/apps-engine@npm:1.42.0-alpha.619": + version: 1.42.0-alpha.619 + resolution: "@rocket.chat/apps-engine@npm:1.42.0-alpha.619" dependencies: adm-zip: ^0.5.9 cryptiles: ^4.1.3 @@ -8345,7 +8345,7 @@ __metadata: vm2: ^3.9.19 peerDependencies: "@rocket.chat/ui-kit": "*" - checksum: 2e7fa2856bdbdc6b0dd2456e9aa5e5804a4198f8df0306a002c5e71681466d3fc2cb0a1253668d5e24fa21345a7dd7eed3458a257e1e4cc59a4e8a3876579aa5 + checksum: 9acf0a435ec08bc17089dfe1852487d160a74e94e31fb7d541b3bba11f51bbd2a3c6cf7ca9546174f7f8b2ae82b9558069647e48e0eda4b48d31c8ed9d40aa54 languageName: node linkType: hard @@ -8353,7 +8353,7 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/apps@workspace:packages/apps" dependencies: - "@rocket.chat/apps-engine": ^1.41.0 + "@rocket.chat/apps-engine": 1.42.0-alpha.619 "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/model-typings": "workspace:^" "@types/jest": ~29.5.7 @@ -8432,7 +8432,7 @@ __metadata: "@babel/core": ~7.22.20 "@babel/preset-env": ~7.22.20 "@babel/preset-typescript": ~7.22.15 - "@rocket.chat/apps-engine": 1.41.0 + "@rocket.chat/apps-engine": 1.42.0-alpha.619 "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/icons": ^0.33.0 @@ -8458,7 +8458,7 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/core-typings@workspace:packages/core-typings" dependencies: - "@rocket.chat/apps-engine": 1.41.0 + "@rocket.chat/apps-engine": 1.42.0-alpha.619 "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/icons": ^0.33.0 "@rocket.chat/message-parser": "workspace:^" @@ -8535,7 +8535,7 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/ddp-streamer@workspace:ee/apps/ddp-streamer" dependencies: - "@rocket.chat/apps-engine": 1.41.0 + "@rocket.chat/apps-engine": 1.42.0-alpha.619 "@rocket.chat/core-services": "workspace:^" "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/emitter": ~0.31.25 @@ -8730,7 +8730,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.41.0 + "@rocket.chat/apps-engine": 1.42.0-alpha.619 "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/fuselage": ^0.50.1 "@rocket.chat/fuselage-hooks": ^0.33.0 @@ -9166,7 +9166,7 @@ __metadata: "@rocket.chat/agenda": "workspace:^" "@rocket.chat/api-client": "workspace:^" "@rocket.chat/apps": "workspace:^" - "@rocket.chat/apps-engine": 1.41.0 + "@rocket.chat/apps-engine": 1.42.0-alpha.619 "@rocket.chat/base64": "workspace:^" "@rocket.chat/cas-validate": "workspace:^" "@rocket.chat/core-services": "workspace:^" @@ -9788,7 +9788,7 @@ __metadata: "@babel/core": ~7.22.20 "@babel/preset-env": ~7.22.20 "@babel/preset-typescript": ~7.22.15 - "@rocket.chat/apps-engine": 1.41.0 + "@rocket.chat/apps-engine": 1.42.0-alpha.619 "@rocket.chat/core-services": "workspace:^" "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/eslint-config": "workspace:^" @@ -9903,7 +9903,7 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/rest-typings@workspace:packages/rest-typings" dependencies: - "@rocket.chat/apps-engine": 1.41.0 + "@rocket.chat/apps-engine": 1.42.0-alpha.619 "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/message-parser": "workspace:^" @@ -36180,7 +36180,7 @@ __metadata: version: 0.0.0-use.local resolution: "rocketchat-services@workspace:apps/meteor/ee/server/services" dependencies: - "@rocket.chat/apps-engine": 1.41.0 + "@rocket.chat/apps-engine": 1.42.0-alpha.619 "@rocket.chat/core-services": "workspace:^" "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/emitter": ~0.31.25