diff --git a/.changeset/tiny-toes-fail.md b/.changeset/tiny-toes-fail.md new file mode 100644 index 0000000000000000000000000000000000000000..3b065d2e3ece729513358530908eb0e57586b64a --- /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 bf175d1d1426723d18f5c06e90f842a7d310f9bb..7067ab8e6a52fc8232d0cc662eb0ba2bed020cc5 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<ILivechatRoom[]> { + 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<ILivechatRoom>)); + } + + protected async countOpenRoomsByAgentId(agentId: string, appId: string): Promise<number> { + 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<Array<ILivechatRoom>> { 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 576e354d68cb1c7051de40f991d1be214b83e3a4..ea3b95b72525362fecb9ef037646aa365944fa06 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 4a4ed4b5cc0d4268497681fbe49a1e40152b4912..eb42db72a9c67237daaad91b18aca6dcefb01009 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 1423476a708bdfc04496955be115b6e340a4cf02..399ea484bb3b2d83634b96f777bcf46f5770bb3f 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<IOmnichannelRoom> implements ILive ); } + countOpenByAgent(userId: string, extraQuery: Filter<IOmnichannelRoom> = {}) { + const query: Filter<IOmnichannelRoom> = { + 't': 'l', + 'open': true, + 'servedBy._id': userId, + ...extraQuery, + }; + + return this.col.countDocuments(query); + } + findOpenByAgent(userId: string, extraQuery: Filter<IOmnichannelRoom> = {}) { const query: Filter<IOmnichannelRoom> = { 't': 'l', diff --git a/ee/apps/ddp-streamer/package.json b/ee/apps/ddp-streamer/package.json index 327683a83869936a24d1a5dcb4791820ed50c4cf..78f54af6d339f1db88586b06ffa30f110c9f1d57 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 1ed3007fff8951a82ab732cc38debe1b932fc358..fc862e4a71946d586f998338bb7e8c4b34d83a60 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 33c46a314d216fcd9b7d4f4be0a0b5fd42580395..47b45603bc31d607bfd92f7fa6b3f541eba0e48d 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 4bcbd2d7d1962fd9a677dfba7e030a7d9c1c0cff..6de74f5e0b6ac82d04d0a18067b9d93a03fd1988 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 5889cbfa1dcd70549ff2b1b2121a730dbc4b50f2..4ac6bd6b350748b3a0832274bd1e7015392e8267 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 4358f19c5b2fe69ab82e89996c91258ebf9079b7..450e74df1747424520c38012ea6ef9431841bb45 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 a228a4fea864fc6bbe091e720cbb28b732cc1910..6384b325f991ee62fa761eca3493bb683c7b7afd 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<IOmnichannelRoom> { data?: { departmentId: string }, ): AggregationCursor<Pick<IOmnichannelRoom, 'ts' | 'departmentId' | 'open' | 'servedBy' | 'metrics' | 'msgs' | 'onHold'>>; findOpenByAgent(userId: string, extraQuery?: Filter<IOmnichannelRoom>): FindCursor<IOmnichannelRoom>; + countOpenByAgent(userId: string, extraQuery?: Filter<IOmnichannelRoom>): Promise<number>; changeAgentByRoomId(roomId: string, newAgent: { agentId: string; username: string }): Promise<UpdateResult>; changeDepartmentIdByRoomId(roomId: string, departmentId: string): Promise<UpdateResult>; saveCRMDataByRoomId(roomId: string, crmData: unknown): Promise<UpdateResult>; diff --git a/packages/rest-typings/package.json b/packages/rest-typings/package.json index 853b72e64c557f192bbf5f34ed9fe07a453e4d9a..33c6f23cbc55b1c6aab44fca18c53171f9b33b48 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 e5032e7ebb6568a96c14b07bad1d9b8b05210d35..533dcf80e1c5f07b7415055649cdf392c7a3ed47 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