diff --git a/apps/meteor/CHANGELOG.md b/apps/meteor/CHANGELOG.md index c5162f2c7e1ac..c967c8f47c3f8 100644 --- a/apps/meteor/CHANGELOG.md +++ b/apps/meteor/CHANGELOG.md @@ -1,5 +1,50 @@ # @rocket.chat/meteor +## 7.7.2 + +### Patch Changes + +- Bump @rocket.chat/meteor version. + +- Bump @rocket.chat/meteor version. + +- ([#36323](https://github.com/RocketChat/Rocket.Chat/pull/36323) by [@dionisio-bot](https://github.com/dionisio-bot)) Fixes an issue that was causing ddp-streamer process to break if the communication with presence service was interrupted for any reason. + +- ([#36250](https://github.com/RocketChat/Rocket.Chat/pull/36250) by [@dionisio-bot](https://github.com/dionisio-bot)) fix: Security Hotfix (https://docs.rocket.chat/docs/security-fixes-and-updates) + +- ([#36270](https://github.com/RocketChat/Rocket.Chat/pull/36270) by [@dionisio-bot](https://github.com/dionisio-bot)) Fixes an issue that caused the queue worker to stop processing if something failed when checking MAC limits or while fetching the list of queues + +- ([#36298](https://github.com/RocketChat/Rocket.Chat/pull/36298) by [@dionisio-bot](https://github.com/dionisio-bot)) Fixes an issue that prevented the action of removing an agent when editing a department to work. + +-
Updated dependencies [8874a5aab72c962f213d128a54393d95f7dabef8]: + + - @rocket.chat/rest-typings@7.7.2 + - @rocket.chat/omnichannel-services@0.3.23 + - @rocket.chat/presence@0.2.26 + - @rocket.chat/api-client@0.2.26 + - @rocket.chat/core-services@0.9.5 + - @rocket.chat/models@1.5.5 + - @rocket.chat/ui-contexts@19.0.2 + - @rocket.chat/network-broker@0.2.5 + - @rocket.chat/cron@0.1.26 + - @rocket.chat/instance-status@0.1.26 + - @rocket.chat/ui-theming@0.4.3 + - @rocket.chat/fuselage-ui-kit@19.0.2 + - @rocket.chat/gazzodown@19.0.2 + - @rocket.chat/ui-avatar@15.0.2 + - @rocket.chat/ui-client@19.0.2 + - @rocket.chat/ui-video-conf@19.0.2 + - @rocket.chat/ui-voip@9.0.2 + - @rocket.chat/web-ui-registration@19.0.2 + - @rocket.chat/core-typings@7.7.2 + - @rocket.chat/license@1.0.17 + - @rocket.chat/pdf-worker@0.3.5 + - @rocket.chat/apps@0.5.5 + - @rocket.chat/freeswitch@1.2.13 + - @rocket.chat/model-typings@1.6.5 + - @rocket.chat/server-cloud-communication@0.0.2 +
+ ## 7.7.1 ### Patch Changes diff --git a/apps/meteor/app/livechat/server/lib/departmentsLib.ts b/apps/meteor/app/livechat/server/lib/departmentsLib.ts index d0fe436a5231e..31c891c23e5aa 100644 --- a/apps/meteor/app/livechat/server/lib/departmentsLib.ts +++ b/apps/meteor/app/livechat/server/lib/departmentsLib.ts @@ -185,7 +185,7 @@ export async function saveDepartmentAgents( departmentAgents: { upsert?: (Pick & { count?: number; - sort?: number; + order?: number; })[]; remove?: Pick[]; }, diff --git a/apps/meteor/app/utils/rocketchat.info b/apps/meteor/app/utils/rocketchat.info index be3a5538e0285..8d1cc31202185 100644 --- a/apps/meteor/app/utils/rocketchat.info +++ b/apps/meteor/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "7.7.1" + "version": "7.7.2" } diff --git a/apps/meteor/client/views/omnichannel/departments/utils/formatAgentListPayload.ts b/apps/meteor/client/views/omnichannel/departments/utils/formatAgentListPayload.ts index 267f0c68257a6..c498fce57d0f8 100644 --- a/apps/meteor/client/views/omnichannel/departments/utils/formatAgentListPayload.ts +++ b/apps/meteor/client/views/omnichannel/departments/utils/formatAgentListPayload.ts @@ -1,20 +1,20 @@ import type { IDepartmentAgent } from '../definitions'; export const formatAgentListPayload = (oldAgentList: IDepartmentAgent[], newAgentList: IDepartmentAgent[]) => { - const upsert: IDepartmentAgent[] = []; - const remove: IDepartmentAgent[] = []; + const upsert: Pick[] = []; + const remove: Pick[] = []; for (const agent of newAgentList) { const initialAgent = agent._id ? oldAgentList.find((initialAgent) => initialAgent._id === agent._id) : undefined; if (!initialAgent || agent.count !== initialAgent.count || agent.order !== initialAgent.order) { - upsert.push(agent); + upsert.push({ agentId: agent.agentId, username: agent.username, count: agent.count, order: agent.order }); } } for (const initialAgent of oldAgentList) { if (!newAgentList.some((agent) => initialAgent._id === agent._id)) { - remove.push(initialAgent); + remove.push({ agentId: initialAgent.agentId, username: initialAgent.username }); } } diff --git a/apps/meteor/ee/server/services/CHANGELOG.md b/apps/meteor/ee/server/services/CHANGELOG.md index cb18a91eb0456..5f3655147c891 100644 --- a/apps/meteor/ee/server/services/CHANGELOG.md +++ b/apps/meteor/ee/server/services/CHANGELOG.md @@ -1,5 +1,19 @@ # rocketchat-services +## 2.0.17 + +### Patch Changes + +-
Updated dependencies [8874a5aab72c962f213d128a54393d95f7dabef8]: + + - @rocket.chat/rest-typings@7.7.2 + - @rocket.chat/core-services@0.9.5 + - @rocket.chat/models@1.5.5 + - @rocket.chat/network-broker@0.2.5 + - @rocket.chat/core-typings@7.7.2 + - @rocket.chat/model-typings@1.6.5 +
+ ## 2.0.16 ### Patch Changes diff --git a/apps/meteor/ee/server/services/package.json b/apps/meteor/ee/server/services/package.json index 7f0f11b676dfd..85ab90f491172 100644 --- a/apps/meteor/ee/server/services/package.json +++ b/apps/meteor/ee/server/services/package.json @@ -1,7 +1,7 @@ { "name": "rocketchat-services", "private": true, - "version": "2.0.16", + "version": "2.0.17", "description": "Rocket.Chat Authorization service", "main": "index.js", "scripts": { diff --git a/apps/meteor/package.json b/apps/meteor/package.json index cd9a34ec3d12b..a15b292dfc3fd 100644 --- a/apps/meteor/package.json +++ b/apps/meteor/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/meteor", "description": "The Ultimate Open Source WebChat Platform", - "version": "7.7.1", + "version": "7.7.2", "private": true, "type": "commonjs", "author": { diff --git a/apps/meteor/server/publications/room/index.ts b/apps/meteor/server/publications/room/index.ts index dcb9c741f2376..5a457daa937e3 100644 --- a/apps/meteor/server/publications/room/index.ts +++ b/apps/meteor/server/publications/room/index.ts @@ -58,11 +58,15 @@ Meteor.methods({ } const userId = Meteor.userId(); - - if (!userId && settings.get('Accounts_AllowAnonymousRead') === false) { - throw new Meteor.Error('error-invalid-user', 'Invalid user', { - method: 'getRoomByTypeAndName', - }); + const isAnonymous = !userId; + + if (isAnonymous) { + const allowAnon = settings.get('Accounts_AllowAnonymousRead'); + if (!allowAnon || type !== 'c') { + throw new Meteor.Error('error-invalid-user', 'Invalid user', { + method: 'getRoomByTypeAndName', + }); + } } const roomFind = roomCoordinator.getRoomFind(type); diff --git a/apps/meteor/server/services/omnichannel/queue.ts b/apps/meteor/server/services/omnichannel/queue.ts index 31a159492cfa9..7e64b90679994 100644 --- a/apps/meteor/server/services/omnichannel/queue.ts +++ b/apps/meteor/server/services/omnichannel/queue.ts @@ -27,6 +27,8 @@ export class OmnichannelQueue implements IOmnichannelQueue { private running = false; + private errorDelay = 10 * 1000; // 10 seconds + private delay() { const timeout = settings.get('Omnichannel_queue_delay_timeout') ?? 5; return timeout < 1 ? DEFAULT_RACE_TIMEOUT : timeout * 1000; @@ -79,28 +81,38 @@ export class OmnichannelQueue implements IOmnichannelQueue { } private async execute() { - if (!this.running) { - queueLogger.debug('Queue stopped. Cannot execute'); - return; - } + try { + if (!this.running) { + queueLogger.debug('Queue stopped. Cannot execute'); + return; + } - if (await License.shouldPreventAction('monthlyActiveContacts', 1)) { - queueLogger.debug('MAC limit reached. Queue wont execute'); - this.running = false; - return; - } + if (await License.shouldPreventAction('monthlyActiveContacts', 1)) { + queueLogger.debug('MAC limit reached. Queue wont execute'); + this.running = false; + return; + } + + // We still go 1 by 1, but we go with every queue every cycle instead of just 1 queue per cycle + // And we get tracing :) + const queues = await this.getActiveQueues(); + for await (const queue of queues) { + await tracerSpan( + 'omnichannel.queue', + { attributes: { workerTime: new Date().toISOString(), queue: queue || 'Public' }, root: true }, + () => this.checkQueue(queue), + ); + } - // We still go 1 by 1, but we go with every queue every cycle instead of just 1 queue per cycle - // And we get tracing :) - const queues = await this.getActiveQueues(); - for await (const queue of queues) { - await tracerSpan( - 'omnichannel.queue', - { attributes: { workerTime: new Date().toISOString(), queue: queue || 'Public' }, root: true }, - () => this.checkQueue(queue), - ); + this.scheduleExecution(); + } catch (e) { + queueLogger.error({ + msg: 'Queue Worker Error. Rescheduling with extra delay', + extraDelay: this.errorDelay, + err: e, + }); + this.scheduleExecution(this.errorDelay); } - this.scheduleExecution(); } private async checkQueue(queue: string | null) { @@ -136,15 +148,18 @@ export class OmnichannelQueue implements IOmnichannelQueue { } } - private scheduleExecution(): void { + private scheduleExecution(extraDelay?: number): void { if (this.timeoutHandler !== null) { return; } - this.timeoutHandler = setTimeout(() => { - this.timeoutHandler = null; - return this.execute(); - }, this.delay()); + this.timeoutHandler = setTimeout( + () => { + this.timeoutHandler = null; + return this.execute(); + }, + this.delay() + (extraDelay || 0), + ); } async shouldStart() { diff --git a/apps/meteor/tests/end-to-end/api/livechat/10-departments.ts b/apps/meteor/tests/end-to-end/api/livechat/10-departments.ts index 99ca5591b25a4..f219a7a4f0037 100644 --- a/apps/meteor/tests/end-to-end/api/livechat/10-departments.ts +++ b/apps/meteor/tests/end-to-end/api/livechat/10-departments.ts @@ -911,6 +911,30 @@ import { IS_EE } from '../../../e2e/config/constants'; .send({ upsert: [{ agentId: agent._id, username: agent.username, name: agent.name }], remove: [] }) .expect(200); expect(res.body).to.have.property('success', true); + }); + it('should successfully remove an agent from a department', async () => { + const [dep, agent] = await Promise.all([createDepartment(), createAgent()]); + const res = await request + .post(api(`livechat/department/${dep._id}/agents`)) + .set(credentials) + // UI sends the whole agent object, but API only needs agentId and username + .send({ + remove: [ + { + agentId: agent._id, + username: agent.username, + name: agent.name, + count: 0, + order: 0, + departmentId: 'afdsfads', + _id: 'afsdfadsfaf', + _updatedAt: new Date(), + }, + ], + upsert: [], + }) + .expect(200); + expect(res.body).to.have.property('success', true); await deleteDepartment(dep._id); }); }); diff --git a/apps/meteor/tests/end-to-end/api/methods.ts b/apps/meteor/tests/end-to-end/api/methods.ts index 0d6651f74ba9b..6630be90104f7 100644 --- a/apps/meteor/tests/end-to-end/api/methods.ts +++ b/apps/meteor/tests/end-to-end/api/methods.ts @@ -2575,6 +2575,7 @@ describe('Meteor.methods', () => { let testUserCredentials: Credentials; let dmId: IRoom['_id']; let room: IRoom; + let privateRoom: IRoom; before(async () => { testUser = await createUser(); @@ -2613,14 +2614,49 @@ describe('Meteor.methods', () => { }); }); - after(() => - Promise.all([ + before(async () => { + privateRoom = ( + await createRoom({ + type: 'p', + name: `private.test.${Date.now()}-${Math.random()}`, + }) + ).body.group; + }); + + after(async () => { + await Promise.all([ deleteRoom({ type: 'd', roomId: dmId }), deleteRoom({ type: 'c', roomId: room._id }), + deleteRoom({ type: 'p', roomId: privateRoom._id }), deleteUser(testUser), deleteUser(testUser2), - ]), - ); + updateSetting('Accounts_AllowAnonymousRead', false), + ]); + }); + + it('should throw error when anonymous user tries to read private channel with anonymous read enabled', async () => { + await updateSetting('Accounts_AllowAnonymousRead', true); + + const payload = { + message: JSON.stringify({ + msg: 'method', + id: '2', + method: 'getRoomByTypeAndName', + params: ['p', privateRoom.name], + }), + }; + + const res = await request.post('/api/v1/method.callAnon/getRoomByTypeAndName').set('Content-Type', 'application/json').send(payload); + + expect(res.body).to.have.property('message'); + const parsedMessage = JSON.parse(res.body.message); + + expect(parsedMessage).to.have.property('error'); + expect(parsedMessage.error).to.have.property('error'); + expect(parsedMessage.error.error).to.equal('error-invalid-user'); + + await updateSetting('Accounts_AllowAnonymousRead', false); + }); it("should throw an error if the user isn't logged in", (done) => { void request diff --git a/apps/uikit-playground/CHANGELOG.md b/apps/uikit-playground/CHANGELOG.md index b3728bd179e83..767a53be39e5c 100644 --- a/apps/uikit-playground/CHANGELOG.md +++ b/apps/uikit-playground/CHANGELOG.md @@ -1,5 +1,17 @@ # @rocket.chat/uikit-playground +## 0.6.17 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/ui-contexts@19.0.2 + - @rocket.chat/fuselage-ui-kit@19.0.2 + - @rocket.chat/ui-avatar@15.0.2 + - @rocket.chat/core-typings@7.7.2 +
+ ## 0.6.16 ### Patch Changes diff --git a/apps/uikit-playground/package.json b/apps/uikit-playground/package.json index 86e0ff73546e3..0d604906326a1 100644 --- a/apps/uikit-playground/package.json +++ b/apps/uikit-playground/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/uikit-playground", "private": true, - "version": "0.6.16", + "version": "0.6.17", "type": "module", "scripts": { "dev": "vite", diff --git a/ee/apps/account-service/CHANGELOG.md b/ee/apps/account-service/CHANGELOG.md index 1c8bc5457b237..3628873063e03 100644 --- a/ee/apps/account-service/CHANGELOG.md +++ b/ee/apps/account-service/CHANGELOG.md @@ -1,5 +1,19 @@ # @rocket.chat/account-service +## 0.4.26 + +### Patch Changes + +-
Updated dependencies [8874a5aab72c962f213d128a54393d95f7dabef8]: + + - @rocket.chat/rest-typings@7.7.2 + - @rocket.chat/core-services@0.9.5 + - @rocket.chat/models@1.5.5 + - @rocket.chat/network-broker@0.2.5 + - @rocket.chat/core-typings@7.7.2 + - @rocket.chat/model-typings@1.6.5 +
+ ## 0.4.25 ### Patch Changes diff --git a/ee/apps/account-service/package.json b/ee/apps/account-service/package.json index 210b8aa83d45a..934fcc5a99e69 100644 --- a/ee/apps/account-service/package.json +++ b/ee/apps/account-service/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/account-service", "private": true, - "version": "0.4.25", + "version": "0.4.26", "description": "Rocket.Chat Account service", "scripts": { "build": "tsc -p tsconfig.json", diff --git a/ee/apps/authorization-service/CHANGELOG.md b/ee/apps/authorization-service/CHANGELOG.md index ee11e756aa56c..af1be18a6dded 100644 --- a/ee/apps/authorization-service/CHANGELOG.md +++ b/ee/apps/authorization-service/CHANGELOG.md @@ -1,5 +1,19 @@ # @rocket.chat/authorization-service +## 0.4.26 + +### Patch Changes + +-
Updated dependencies [8874a5aab72c962f213d128a54393d95f7dabef8]: + + - @rocket.chat/rest-typings@7.7.2 + - @rocket.chat/core-services@0.9.5 + - @rocket.chat/models@1.5.5 + - @rocket.chat/network-broker@0.2.5 + - @rocket.chat/core-typings@7.7.2 + - @rocket.chat/model-typings@1.6.5 +
+ ## 0.4.25 ### Patch Changes diff --git a/ee/apps/authorization-service/package.json b/ee/apps/authorization-service/package.json index 9dabfffc565fc..00c5ee60711f9 100644 --- a/ee/apps/authorization-service/package.json +++ b/ee/apps/authorization-service/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/authorization-service", "private": true, - "version": "0.4.25", + "version": "0.4.26", "description": "Rocket.Chat Authorization service", "scripts": { "build": "tsc -p tsconfig.json", diff --git a/ee/apps/ddp-streamer/CHANGELOG.md b/ee/apps/ddp-streamer/CHANGELOG.md index e3ec170cbf1f6..1541aaf739c77 100644 --- a/ee/apps/ddp-streamer/CHANGELOG.md +++ b/ee/apps/ddp-streamer/CHANGELOG.md @@ -1,5 +1,22 @@ # @rocket.chat/ddp-streamer +## 0.3.26 + +### Patch Changes + +- ([#36323](https://github.com/RocketChat/Rocket.Chat/pull/36323) by [@dionisio-bot](https://github.com/dionisio-bot)) Fixes an issue that was causing ddp-streamer process to break if the communication with presence service was interrupted for any reason. + +-
Updated dependencies [8874a5aab72c962f213d128a54393d95f7dabef8]: + + - @rocket.chat/rest-typings@7.7.2 + - @rocket.chat/core-services@0.9.5 + - @rocket.chat/models@1.5.5 + - @rocket.chat/network-broker@0.2.5 + - @rocket.chat/instance-status@0.1.26 + - @rocket.chat/core-typings@7.7.2 + - @rocket.chat/model-typings@1.6.5 +
+ ## 0.3.25 ### Patch Changes diff --git a/ee/apps/ddp-streamer/package.json b/ee/apps/ddp-streamer/package.json index e4967a2cb7c4c..e9b78d0c3f183 100644 --- a/ee/apps/ddp-streamer/package.json +++ b/ee/apps/ddp-streamer/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/ddp-streamer", "private": true, - "version": "0.3.25", + "version": "0.3.26", "description": "Rocket.Chat DDP-Streamer service", "scripts": { "build": "tsc -p tsconfig.json", diff --git a/ee/apps/ddp-streamer/src/service.ts b/ee/apps/ddp-streamer/src/service.ts index e0e430c7eebbf..ab5c8108712ee 100755 --- a/ee/apps/ddp-streamer/src/service.ts +++ b/ee/apps/ddp-streamer/src/service.ts @@ -32,3 +32,39 @@ import { startTracing } from '@rocket.chat/tracing'; await api.start(); })(); + +/** + * If some promise is rejected and doesn't have a catch (unhandledRejection) it may cause the process to exit. + * + * Since unhandled rejections are deprecated in NodeJS: + * (node:83382) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections + * that are not handled will terminate the Node.js process with a non-zero exit code. + * we will start respecting this and exit the process to prevent these kind of problems. + */ + +process.on('unhandledRejection', (error) => { + console.error('=== UnHandledPromiseRejection ==='); + console.error(error); + console.error('---------------------------------'); + console.error( + 'Setting EXIT_UNHANDLEDPROMISEREJECTION will cause the process to exit allowing your service to automatically restart the process', + ); + console.error('Future node.js versions will automatically exit the process'); + console.error('================================='); + + if (process.env.TEST_MODE || process.env.NODE_ENV === 'development' || process.env.EXIT_UNHANDLEDPROMISEREJECTION) { + process.exit(1); + } +}); + +process.on('uncaughtException', async (error) => { + console.error('=== UnCaughtException ==='); + console.error(error); + console.error('-------------------------'); + console.error('Errors like this can cause oplog processing errors.'); + console.error('==========================='); + + if (process.env.TEST_MODE || process.env.NODE_ENV === 'development' || process.env.EXIT_UNHANDLEDPROMISEREJECTION) { + process.exit(1); + } +}); diff --git a/ee/apps/omnichannel-transcript/CHANGELOG.md b/ee/apps/omnichannel-transcript/CHANGELOG.md index 8b1d9cd90ea4c..da73076c8e24c 100644 --- a/ee/apps/omnichannel-transcript/CHANGELOG.md +++ b/ee/apps/omnichannel-transcript/CHANGELOG.md @@ -1,5 +1,20 @@ # @rocket.chat/omnichannel-transcript +## 0.4.26 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/omnichannel-services@0.3.23 + - @rocket.chat/core-services@0.9.5 + - @rocket.chat/models@1.5.5 + - @rocket.chat/network-broker@0.2.5 + - @rocket.chat/core-typings@7.7.2 + - @rocket.chat/pdf-worker@0.3.5 + - @rocket.chat/model-typings@1.6.5 +
+ ## 0.4.25 ### Patch Changes diff --git a/ee/apps/omnichannel-transcript/package.json b/ee/apps/omnichannel-transcript/package.json index 58b688236334c..768a028174b06 100644 --- a/ee/apps/omnichannel-transcript/package.json +++ b/ee/apps/omnichannel-transcript/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/omnichannel-transcript", "private": true, - "version": "0.4.25", + "version": "0.4.26", "description": "Rocket.Chat service", "scripts": { "build": "tsc -p tsconfig.json", diff --git a/ee/apps/presence-service/CHANGELOG.md b/ee/apps/presence-service/CHANGELOG.md index 53fe11263e687..a99f43d410ab3 100644 --- a/ee/apps/presence-service/CHANGELOG.md +++ b/ee/apps/presence-service/CHANGELOG.md @@ -1,5 +1,19 @@ # @rocket.chat/presence-service +## 0.4.26 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/presence@0.2.26 + - @rocket.chat/core-services@0.9.5 + - @rocket.chat/models@1.5.5 + - @rocket.chat/network-broker@0.2.5 + - @rocket.chat/core-typings@7.7.2 + - @rocket.chat/model-typings@1.6.5 +
+ ## 0.4.25 ### Patch Changes diff --git a/ee/apps/presence-service/package.json b/ee/apps/presence-service/package.json index 14eebb0982597..c051d5488c400 100644 --- a/ee/apps/presence-service/package.json +++ b/ee/apps/presence-service/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/presence-service", "private": true, - "version": "0.4.25", + "version": "0.4.26", "description": "Rocket.Chat Presence service", "scripts": { "build": "tsc -p tsconfig.json", diff --git a/ee/apps/queue-worker/CHANGELOG.md b/ee/apps/queue-worker/CHANGELOG.md index 158d7980b8de2..9b4991d09bdd2 100644 --- a/ee/apps/queue-worker/CHANGELOG.md +++ b/ee/apps/queue-worker/CHANGELOG.md @@ -1,5 +1,19 @@ # @rocket.chat/queue-worker +## 0.4.26 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/omnichannel-services@0.3.23 + - @rocket.chat/core-services@0.9.5 + - @rocket.chat/models@1.5.5 + - @rocket.chat/network-broker@0.2.5 + - @rocket.chat/core-typings@7.7.2 + - @rocket.chat/model-typings@1.6.5 +
+ ## 0.4.25 ### Patch Changes diff --git a/ee/apps/queue-worker/package.json b/ee/apps/queue-worker/package.json index 0cd1e7730b8e4..2d918d3c84f1e 100644 --- a/ee/apps/queue-worker/package.json +++ b/ee/apps/queue-worker/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/queue-worker", "private": true, - "version": "0.4.25", + "version": "0.4.26", "description": "Rocket.Chat service", "scripts": { "build": "tsc -p tsconfig.json", diff --git a/ee/apps/stream-hub-service/CHANGELOG.md b/ee/apps/stream-hub-service/CHANGELOG.md index 9db5ab551eebc..23c788e21a094 100644 --- a/ee/apps/stream-hub-service/CHANGELOG.md +++ b/ee/apps/stream-hub-service/CHANGELOG.md @@ -1,5 +1,18 @@ # @rocket.chat/stream-hub-service +## 0.4.26 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/core-services@0.9.5 + - @rocket.chat/models@1.5.5 + - @rocket.chat/network-broker@0.2.5 + - @rocket.chat/core-typings@7.7.2 + - @rocket.chat/model-typings@1.6.5 +
+ ## 0.4.25 ### Patch Changes diff --git a/ee/apps/stream-hub-service/package.json b/ee/apps/stream-hub-service/package.json index ab87ff3f90c18..47c2557f3e855 100644 --- a/ee/apps/stream-hub-service/package.json +++ b/ee/apps/stream-hub-service/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/stream-hub-service", "private": true, - "version": "0.4.25", + "version": "0.4.26", "description": "Rocket.Chat Stream Hub service", "scripts": { "build": "tsc -p tsconfig.json", diff --git a/ee/packages/license/CHANGELOG.md b/ee/packages/license/CHANGELOG.md index ceb9c2d23d79c..cf8198603ec6f 100644 --- a/ee/packages/license/CHANGELOG.md +++ b/ee/packages/license/CHANGELOG.md @@ -1,5 +1,14 @@ # @rocket.chat/license +## 1.0.17 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/core-typings@7.7.2 +
+ ## 1.0.16 ### Patch Changes diff --git a/ee/packages/license/package.json b/ee/packages/license/package.json index d5c9e8d9129fe..f5778a73b5294 100644 --- a/ee/packages/license/package.json +++ b/ee/packages/license/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/license", - "version": "1.0.16", + "version": "1.0.17", "private": true, "devDependencies": { "@rocket.chat/jest-presets": "workspace:~", diff --git a/ee/packages/network-broker/CHANGELOG.md b/ee/packages/network-broker/CHANGELOG.md index 6c8de5fcc453d..4492eeea79d37 100644 --- a/ee/packages/network-broker/CHANGELOG.md +++ b/ee/packages/network-broker/CHANGELOG.md @@ -1,5 +1,14 @@ # @rocket.chat/network-broker +## 0.2.5 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/core-services@0.9.5 +
+ ## 0.2.4 ### Patch Changes diff --git a/ee/packages/network-broker/package.json b/ee/packages/network-broker/package.json index d92d657684cef..87405179eb16a 100644 --- a/ee/packages/network-broker/package.json +++ b/ee/packages/network-broker/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/network-broker", - "version": "0.2.4", + "version": "0.2.5", "private": true, "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", diff --git a/ee/packages/omnichannel-services/CHANGELOG.md b/ee/packages/omnichannel-services/CHANGELOG.md index c5decde182751..2cbfe4c7a7fcb 100644 --- a/ee/packages/omnichannel-services/CHANGELOG.md +++ b/ee/packages/omnichannel-services/CHANGELOG.md @@ -1,5 +1,19 @@ # @rocket.chat/omnichannel-services +## 0.3.23 + +### Patch Changes + +-
Updated dependencies [8874a5aab72c962f213d128a54393d95f7dabef8]: + + - @rocket.chat/rest-typings@7.7.2 + - @rocket.chat/core-services@0.9.5 + - @rocket.chat/models@1.5.5 + - @rocket.chat/core-typings@7.7.2 + - @rocket.chat/pdf-worker@0.3.5 + - @rocket.chat/model-typings@1.6.5 +
+ ## 0.3.22 ### Patch Changes diff --git a/ee/packages/omnichannel-services/package.json b/ee/packages/omnichannel-services/package.json index ea24a9872acf4..0a721c28aac96 100644 --- a/ee/packages/omnichannel-services/package.json +++ b/ee/packages/omnichannel-services/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/omnichannel-services", - "version": "0.3.22", + "version": "0.3.23", "private": true, "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", diff --git a/ee/packages/pdf-worker/CHANGELOG.md b/ee/packages/pdf-worker/CHANGELOG.md index 6d832a29e7427..f3e1ddcc69c6b 100644 --- a/ee/packages/pdf-worker/CHANGELOG.md +++ b/ee/packages/pdf-worker/CHANGELOG.md @@ -1,5 +1,14 @@ # @rocket.chat/pdf-worker +## 0.3.5 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/core-typings@7.7.2 +
+ ## 0.3.4 ### Patch Changes diff --git a/ee/packages/pdf-worker/package.json b/ee/packages/pdf-worker/package.json index 8dced6e6cc7c7..3e1252690f8ea 100644 --- a/ee/packages/pdf-worker/package.json +++ b/ee/packages/pdf-worker/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/pdf-worker", - "version": "0.3.4", + "version": "0.3.5", "private": true, "main": "./dist/index.js", "typings": "./dist/index.d.ts", diff --git a/ee/packages/presence/CHANGELOG.md b/ee/packages/presence/CHANGELOG.md index 078988885d6b4..8c3e4feaa6329 100644 --- a/ee/packages/presence/CHANGELOG.md +++ b/ee/packages/presence/CHANGELOG.md @@ -1,5 +1,16 @@ # @rocket.chat/presence +## 0.2.26 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/core-services@0.9.5 + - @rocket.chat/models@1.5.5 + - @rocket.chat/core-typings@7.7.2 +
+ ## 0.2.25 ### Patch Changes diff --git a/ee/packages/presence/package.json b/ee/packages/presence/package.json index 80380becacceb..4191630dfcbc9 100644 --- a/ee/packages/presence/package.json +++ b/ee/packages/presence/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/presence", - "version": "0.2.25", + "version": "0.2.26", "private": true, "devDependencies": { "@babel/core": "~7.26.0", diff --git a/package.json b/package.json index 98a22c0ca3408..5e92982315eff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rocket.chat", - "version": "7.7.1", + "version": "7.7.2", "description": "Rocket.Chat Monorepo", "main": "index.js", "private": true, diff --git a/packages/api-client/CHANGELOG.md b/packages/api-client/CHANGELOG.md index ac10730c51c96..22a6fd6a52169 100644 --- a/packages/api-client/CHANGELOG.md +++ b/packages/api-client/CHANGELOG.md @@ -1,5 +1,15 @@ # @rocket.chat/api-client +## 0.2.26 + +### Patch Changes + +-
Updated dependencies [8874a5aab72c962f213d128a54393d95f7dabef8]: + + - @rocket.chat/rest-typings@7.7.2 + - @rocket.chat/core-typings@7.7.2 +
+ ## 0.2.25 ### Patch Changes diff --git a/packages/api-client/package.json b/packages/api-client/package.json index ff6af2afb17e4..b692a6037352e 100644 --- a/packages/api-client/package.json +++ b/packages/api-client/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/api-client", - "version": "0.2.25", + "version": "0.2.26", "devDependencies": { "@rocket.chat/jest-presets": "workspace:~", "@types/jest": "~29.5.14", diff --git a/packages/apps/CHANGELOG.md b/packages/apps/CHANGELOG.md index a88c6df247f23..8dd27ddb7deba 100644 --- a/packages/apps/CHANGELOG.md +++ b/packages/apps/CHANGELOG.md @@ -1,5 +1,15 @@ # @rocket.chat/apps +## 0.5.5 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/core-typings@7.7.2 + - @rocket.chat/model-typings@1.6.5 +
+ ## 0.5.4 ### Patch Changes diff --git a/packages/apps/package.json b/packages/apps/package.json index ec6f0789ef70e..d68e9ae5e8b69 100644 --- a/packages/apps/package.json +++ b/packages/apps/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/apps", - "version": "0.5.4", + "version": "0.5.5", "private": true, "devDependencies": { "eslint": "~8.45.0", diff --git a/packages/core-services/CHANGELOG.md b/packages/core-services/CHANGELOG.md index 7f85c417a99be..c963a44a9c94f 100644 --- a/packages/core-services/CHANGELOG.md +++ b/packages/core-services/CHANGELOG.md @@ -1,5 +1,16 @@ # @rocket.chat/core-services +## 0.9.5 + +### Patch Changes + +-
Updated dependencies [8874a5aab72c962f213d128a54393d95f7dabef8]: + + - @rocket.chat/rest-typings@7.7.2 + - @rocket.chat/models@1.5.5 + - @rocket.chat/core-typings@7.7.2 +
+ ## 0.9.4 ### Patch Changes diff --git a/packages/core-services/package.json b/packages/core-services/package.json index 8351b522fca6a..9171f8a513d8a 100644 --- a/packages/core-services/package.json +++ b/packages/core-services/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/core-services", - "version": "0.9.4", + "version": "0.9.5", "private": true, "devDependencies": { "@babel/core": "~7.26.0", diff --git a/packages/core-typings/CHANGELOG.md b/packages/core-typings/CHANGELOG.md index 6ace917ef2657..34f991712d594 100644 --- a/packages/core-typings/CHANGELOG.md +++ b/packages/core-typings/CHANGELOG.md @@ -1,5 +1,7 @@ # @rocket.chat/core-typings +## 7.7.2 + ## 7.7.1 ## 7.7.0 diff --git a/packages/core-typings/package.json b/packages/core-typings/package.json index 67c7985469b74..e3f926d5afe10 100644 --- a/packages/core-typings/package.json +++ b/packages/core-typings/package.json @@ -2,7 +2,7 @@ "$schema": "https://json.schemastore.org/package", "name": "@rocket.chat/core-typings", "private": true, - "version": "7.7.1", + "version": "7.7.2", "devDependencies": { "@rocket.chat/apps-engine": "workspace:^", "@rocket.chat/eslint-config": "workspace:^", diff --git a/packages/cron/CHANGELOG.md b/packages/cron/CHANGELOG.md index 150d387f1979f..8261fdf0c6f18 100644 --- a/packages/cron/CHANGELOG.md +++ b/packages/cron/CHANGELOG.md @@ -1,5 +1,15 @@ # @rocket.chat/cron +## 0.1.26 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/models@1.5.5 + - @rocket.chat/core-typings@7.7.2 +
+ ## 0.1.25 ### Patch Changes diff --git a/packages/cron/package.json b/packages/cron/package.json index b18d5e51d93cb..4dafccf030434 100644 --- a/packages/cron/package.json +++ b/packages/cron/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/cron", - "version": "0.1.25", + "version": "0.1.26", "private": true, "devDependencies": { "eslint": "~8.45.0", diff --git a/packages/ddp-client/CHANGELOG.md b/packages/ddp-client/CHANGELOG.md index 79be928ad6fb6..92ba849190804 100644 --- a/packages/ddp-client/CHANGELOG.md +++ b/packages/ddp-client/CHANGELOG.md @@ -1,5 +1,16 @@ # @rocket.chat/ddp-client +## 0.3.26 + +### Patch Changes + +-
Updated dependencies [8874a5aab72c962f213d128a54393d95f7dabef8]: + + - @rocket.chat/rest-typings@7.7.2 + - @rocket.chat/api-client@0.2.26 + - @rocket.chat/core-typings@7.7.2 +
+ ## 0.3.25 ### Patch Changes diff --git a/packages/ddp-client/package.json b/packages/ddp-client/package.json index b828807ea93cc..8f95996992ce5 100644 --- a/packages/ddp-client/package.json +++ b/packages/ddp-client/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/ddp-client", - "version": "0.3.25", + "version": "0.3.26", "devDependencies": { "@rocket.chat/jest-presets": "workspace:~", "@types/jest": "~29.5.14", diff --git a/packages/freeswitch/CHANGELOG.md b/packages/freeswitch/CHANGELOG.md index 9413d546e53dc..a0c8bded69f7f 100644 --- a/packages/freeswitch/CHANGELOG.md +++ b/packages/freeswitch/CHANGELOG.md @@ -1,5 +1,14 @@ # @rocket.chat/freeswitch +## 1.2.13 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/core-typings@7.7.2 +
+ ## 1.2.12 ### Patch Changes diff --git a/packages/freeswitch/package.json b/packages/freeswitch/package.json index 7e200b3e3c950..544f57dad95f2 100644 --- a/packages/freeswitch/package.json +++ b/packages/freeswitch/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/freeswitch", - "version": "1.2.12", + "version": "1.2.13", "private": true, "devDependencies": { "@rocket.chat/jest-presets": "workspace:~", diff --git a/packages/fuselage-ui-kit/CHANGELOG.md b/packages/fuselage-ui-kit/CHANGELOG.md index ed5c1866ecac4..fe255baf282d2 100644 --- a/packages/fuselage-ui-kit/CHANGELOG.md +++ b/packages/fuselage-ui-kit/CHANGELOG.md @@ -1,5 +1,18 @@ # Change Log +## 19.0.2 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/ui-contexts@19.0.2 + - @rocket.chat/gazzodown@19.0.2 + - @rocket.chat/ui-avatar@15.0.2 + - @rocket.chat/ui-video-conf@19.0.2 + - @rocket.chat/core-typings@7.7.2 +
+ ## 19.0.1 ### Patch Changes diff --git a/packages/fuselage-ui-kit/package.json b/packages/fuselage-ui-kit/package.json index 7078a4d6b8358..b32b51062f60f 100644 --- a/packages/fuselage-ui-kit/package.json +++ b/packages/fuselage-ui-kit/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/fuselage-ui-kit", - "version": "19.0.1", + "version": "19.0.2", "private": true, "description": "UiKit elements for Rocket.Chat Apps built under Fuselage design system", "homepage": "https://rocketchat.github.io/Rocket.Chat.Fuselage/", diff --git a/packages/gazzodown/CHANGELOG.md b/packages/gazzodown/CHANGELOG.md index 5c408b3bbaff0..a7cde03e8befa 100644 --- a/packages/gazzodown/CHANGELOG.md +++ b/packages/gazzodown/CHANGELOG.md @@ -1,5 +1,16 @@ # @rocket.chat/gazzodown +## 19.0.2 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/ui-contexts@19.0.2 + - @rocket.chat/ui-client@19.0.2 + - @rocket.chat/core-typings@7.7.2 +
+ ## 19.0.1 ### Patch Changes diff --git a/packages/gazzodown/package.json b/packages/gazzodown/package.json index fd433a7afa95c..b98130c566843 100644 --- a/packages/gazzodown/package.json +++ b/packages/gazzodown/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/gazzodown", - "version": "19.0.1", + "version": "19.0.2", "private": true, "main": "./dist/index.js", "typings": "./dist/index.d.ts", diff --git a/packages/instance-status/CHANGELOG.md b/packages/instance-status/CHANGELOG.md index d474103fa11b8..65aea5377acc2 100644 --- a/packages/instance-status/CHANGELOG.md +++ b/packages/instance-status/CHANGELOG.md @@ -1,5 +1,14 @@ # @rocket.chat/instance-status +## 0.1.26 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/models@1.5.5 +
+ ## 0.1.25 ### Patch Changes diff --git a/packages/instance-status/package.json b/packages/instance-status/package.json index a488f810d3557..9fc974b2a6785 100644 --- a/packages/instance-status/package.json +++ b/packages/instance-status/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/instance-status", - "version": "0.1.25", + "version": "0.1.26", "private": true, "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", diff --git a/packages/livechat/CHANGELOG.md b/packages/livechat/CHANGELOG.md index 01ba5047e01ee..b4f933eb56c74 100644 --- a/packages/livechat/CHANGELOG.md +++ b/packages/livechat/CHANGELOG.md @@ -1,5 +1,14 @@ # @rocket.chat/livechat Change Log +## 1.22.13 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/gazzodown@19.0.2 +
+ ## 1.22.12 ### Patch Changes diff --git a/packages/livechat/package.json b/packages/livechat/package.json index 5adc818301fd9..b426813997337 100644 --- a/packages/livechat/package.json +++ b/packages/livechat/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/livechat", - "version": "1.22.12", + "version": "1.22.13", "files": [ "/build" ], diff --git a/packages/livechat/src/components/App/App.tsx b/packages/livechat/src/components/App/App.tsx index ba3e941c27558..e0398b3a08510 100644 --- a/packages/livechat/src/components/App/App.tsx +++ b/packages/livechat/src/components/App/App.tsx @@ -140,11 +140,14 @@ export class App extends Component { iframe: { visible }, config: { theme }, dispatch, + undocked, } = this.props; - parentCall(minimized ? 'minimizeWindow' : 'restoreWindow'); - parentCall(visible ? 'showWidget' : 'hideWidget'); - parentCall('setWidgetPosition', theme.position || 'right'); + if (!undocked) { + parentCall(minimized ? 'minimizeWindow' : 'restoreWindow'); + parentCall(visible ? 'showWidget' : 'hideWidget'); + parentCall('setWidgetPosition', theme.position || 'right'); + } visibility.addListener(this.handleVisibilityChange); diff --git a/packages/livechat/src/components/Screen/ScreenProvider.tsx b/packages/livechat/src/components/Screen/ScreenProvider.tsx index 2bccafd60c6f2..49d3fc4dec918 100644 --- a/packages/livechat/src/components/Screen/ScreenProvider.tsx +++ b/packages/livechat/src/components/Screen/ScreenProvider.tsx @@ -1,10 +1,9 @@ import type { FunctionalComponent } from 'preact'; import { createContext } from 'preact'; -import { useCallback, useContext, useEffect, useState } from 'preact/hooks'; +import { useContext, useEffect, useState } from 'preact/hooks'; import { parse } from 'query-string'; import { isActiveSession } from '../../helpers/isActiveSession'; -import { createOrUpdateGuest, evaluateChangesAndLoadConfigByFields } from '../../lib/hooks'; import { loadConfig } from '../../lib/main'; import { parentCall } from '../../lib/parentCall'; import { loadMessages } from '../../lib/room'; @@ -63,21 +62,11 @@ export const ScreenContext = createContext({ } as ScreenContextValue); export const ScreenProvider: FunctionalComponent = ({ children }) => { - const { - dispatch, - config, - sound, - minimized = true, - undocked, - expanded = false, - alerts, - modal, - iframe, - ...store - } = useContext(StoreContext); + const store = useContext(StoreContext); + const { token, dispatch, config, sound, minimized = true, undocked, expanded = false, alerts, modal, iframe, customFieldsQueue } = store; const { department, name, email } = iframe.guest || {}; const { color, position: configPosition, background } = config.theme || {}; - const { livechatLogo, hideWatermark = false, registrationForm } = config.settings || {}; + const { livechatLogo, hideWatermark = false } = config.settings || {}; const { color: customColor, @@ -128,7 +117,7 @@ export const ScreenProvider: FunctionalComponent = ({ children }) => { }; const handleOpenWindow = () => { - parentCall('openPopout', store.token); + parentCall('openPopout', { token, iframe, customFieldsQueue }); dispatch({ undocked: true, minimized: false }); }; @@ -138,30 +127,14 @@ export const ScreenProvider: FunctionalComponent = ({ children }) => { const dismissNotification = () => !isActiveSession(); - const checkPoppedOutWindow = useCallback(async () => { + useEffect(() => { // Checking if the window is poppedOut and setting parent minimized if yes for the restore purpose const poppedOut = parse(window.location.search).mode === 'popout'; - const { token = '' } = parse(window.location.search); setPopedOut(poppedOut); - if (poppedOut) { dispatch({ minimized: false, undocked: true }); } - - if (token && typeof token === 'string') { - if (registrationForm && !name && !email) { - dispatch({ token }); - return; - } - await evaluateChangesAndLoadConfigByFields(async () => { - await createOrUpdateGuest({ token }); - }); - } - }, [dispatch, email, name, registrationForm]); - - useEffect(() => { - checkPoppedOutWindow(); - }, [checkPoppedOutWindow]); + }, [dispatch]); const screenProps = { theme: { diff --git a/packages/livechat/src/lib/customFields.js b/packages/livechat/src/lib/customFields.js index b5d11a2d6b63c..2cea28256a778 100644 --- a/packages/livechat/src/lib/customFields.js +++ b/packages/livechat/src/lib/customFields.js @@ -28,7 +28,6 @@ class CustomFields { reset() { this._initiated = false; this._started = false; - this._queue = {}; store.off('change', this.handleStoreChange); } @@ -48,18 +47,36 @@ class CustomFields { CustomFields.instance.processCustomFields(); } + addToQueue(key, value, overwrite) { + const { customFieldsQueue } = store.state; + store.setState({ + customFieldsQueue: { + ...customFieldsQueue, + [key]: { value, overwrite }, + }, + }); + } + + getQueue() { + return store.state.customFieldsQueue; + } + + clearQueue() { + store.setState({ customFieldsQueue: {} }); + } + processCustomFields() { - Object.keys(this._queue).forEach((key) => { - const { value, overwrite } = this._queue[key]; + const queue = this.getQueue(); + Object.entries(queue).forEach(([key, { value, overwrite }]) => { this.setCustomField(key, value, overwrite); }); - this._queue = {}; + this.clearQueue(); } setCustomField(key, value, overwrite = true) { if (!this._started) { - this._queue[key] = { value, overwrite }; + this.addToQueue(key, value, overwrite); return; } diff --git a/packages/livechat/src/lib/hooks.ts b/packages/livechat/src/lib/hooks.ts index 1ae9f353bc10f..063a86845fc18 100644 --- a/packages/livechat/src/lib/hooks.ts +++ b/packages/livechat/src/lib/hooks.ts @@ -109,6 +109,22 @@ const updateIframeData = (data: Partial) => { }; const api = { + syncState(data: Partial) { + if (!data || typeof data !== 'object') { + return; + } + + void evaluateChangesAndLoadConfigByFields(async () => { + const { user } = store.state; + + if (user && data.token && user.token !== data.token) { + await createOrUpdateGuest({ token: data.token }); + } + + store.setState(data); + }); + }, + pageVisited(info: { change: string; title: string; location: { href: string } }) { const { token, room } = store.state; const { _id: rid } = room || {}; diff --git a/packages/livechat/src/lib/parentCall.ts b/packages/livechat/src/lib/parentCall.ts index 4b03e22927a51..bffc2c0c0c480 100644 --- a/packages/livechat/src/lib/parentCall.ts +++ b/packages/livechat/src/lib/parentCall.ts @@ -1,5 +1,13 @@ import { VALID_CALLBACKS } from '../widget'; +const getParentWindowTarget = () => { + if (window.opener && !window.opener.closed) { + return window.opener; + } + + return window.parent; +}; + export const parentCall = (method: string, ...args: any[]) => { const data = { src: 'rocketchat', @@ -7,8 +15,9 @@ export const parentCall = (method: string, ...args: any[]) => { args, }; + const target = getParentWindowTarget(); // TODO: This lgtm ignoring deserves more attention urgently! - window.parent.postMessage(data, '*'); // lgtm [js/cross-window-information-leak] + target.postMessage(data, '*'); // lgtm [js/cross-window-information-leak] }; export const runCallbackEventEmitter = (callbackName: string, data: unknown) => diff --git a/packages/livechat/src/store/index.tsx b/packages/livechat/src/store/index.tsx index 8f5294e42cbae..3e8d0663d2fa6 100644 --- a/packages/livechat/src/store/index.tsx +++ b/packages/livechat/src/store/index.tsx @@ -3,13 +3,13 @@ import type { ComponentChildren } from 'preact'; import { Component, createContext } from 'preact'; import { useContext } from 'preact/hooks'; +import Store from './Store'; import type { CustomField } from '../components/Form/CustomFields'; import type { Agent } from '../definitions/agents'; import type { Department } from '../definitions/departments'; import type { TriggerMessage } from '../definitions/triggerMessage'; import { parentCall } from '../lib/parentCall'; import { createToken } from '../lib/random'; -import Store from './Store'; export type LivechatHiddenSytemMessageType = | 'uj' // User joined @@ -123,6 +123,7 @@ export type StoreState = { connecting?: boolean; messageListPosition?: 'top' | 'bottom' | 'free'; renderedTriggers: TriggerMessage[]; + customFieldsQueue: Record; }; export const initialState = (): StoreState => ({ @@ -164,6 +165,7 @@ export const initialState = (): StoreState => ({ ongoingCall: null, // TODO: store call info like url, startTime, timeout, etc here businessUnit: null, renderedTriggers: [], + customFieldsQueue: {}, }); const dontPersist = [ @@ -191,6 +193,10 @@ window.addEventListener('load', () => { }); window.addEventListener('visibilitychange', () => { + if (store.state.undocked) { + return; + } + !store.state.minimized && !store.state.triggered && parentCall('openWidget'); store.state.iframe.visible ? parentCall('showWidget') : parentCall('hideWidget'); }); diff --git a/packages/livechat/src/widget.ts b/packages/livechat/src/widget.ts index ca46ab944913c..589e02e554791 100644 --- a/packages/livechat/src/widget.ts +++ b/packages/livechat/src/widget.ts @@ -7,11 +7,10 @@ import type { HooksWidgetAPI } from './lib/hooks'; import type { StoreState } from './store'; type InternalWidgetAPI = { - popup: Window | null; ready: () => void; minimizeWindow: () => void; restoreWindow: () => void; - openPopout: (token?: string) => void; + openPopout: (state: StoreState) => void; openWidget: () => void; resizeWidget: (height: number) => void; removeWidget: () => void; @@ -23,10 +22,10 @@ type InternalWidgetAPI = { setWidgetPosition: (position: 'left' | 'right') => void; }; -export type LivechatMessageEventData> = { +export type LivechatMessageEventData, Fn extends keyof ApiType = keyof ApiType> = { src?: string; - fn: keyof ApiType; - args: Parameters; + fn: Fn; + args: Parameters; }; type InitializeParams = { @@ -61,6 +60,7 @@ let ready = false; let smallScreen = false; let scrollPosition: number; let widgetHeight: number; +let popoutWindow: Window | null = null; export const VALID_CALLBACKS = [ 'chat-maximized', @@ -103,6 +103,12 @@ function clearAllCallbacks() { }); } +const formatMessage = (action: keyof HooksWidgetAPI, ...params: Parameters) => ({ + src: 'rocketchat', + fn: action, + args: params, +}); + // hooks function callHook(action: keyof HooksWidgetAPI, ...params: Parameters) { if (!ready) { @@ -113,11 +119,7 @@ function callHook(action: keyof HooksWidgetAPI, ...params: Parameters) { } const api: InternalWidgetAPI = { - popup: null, - openWidget, resizeWidget, @@ -475,27 +475,29 @@ const api: InternalWidgetAPI = { minimizeWindow() { closeWidget(); }, - restoreWindow() { - if (api.popup && api.popup.closed !== true) { - api.popup.close(); - api.popup = null; + if (popoutWindow && popoutWindow.closed !== true) { + popoutWindow.close(); + popoutWindow = null; } openWidget(); }, - openPopout(token = '') { + openPopout(state: Partial) { closeWidget(); + if (!config.url) { throw new Error('Config.url is not set!'); } - const urlToken = token && `&token=${token}`; - api.popup = window.open( - `${config.url}${config.url.lastIndexOf('?') > -1 ? '&' : '?'}mode=popout${urlToken}`, - 'livechat-popout', - `width=${WIDGET_OPEN_WIDTH}, height=${widgetHeight}, toolbars=no`, - ); + const url = new URL(config.url); + url.searchParams.append('mode', 'popout'); + + listenForMessageOnce('ready', () => { + popoutWindow?.postMessage(formatMessage('syncState', state), '*'); + }); + + popoutWindow = window.open(url, 'livechat-popout', `width=${WIDGET_OPEN_WIDTH}, height=${widgetHeight}, toolbars=no`); }, removeWidget() { @@ -628,16 +630,24 @@ const currentPage: { href: string | null; title: string | null } = { title: null, }; -function onNewMessage(event: MessageEvent>>) { +function isValidMessage(event: MessageEvent>) { if (event.source === event.target) { - return; + return false; } if (!event.data || typeof event.data !== 'object') { - return; + return false; } if (!event.data.src || event.data.src !== 'rocketchat') { + return false; + } + + return true; +} + +function onNewMessage(event: MessageEvent>) { + if (!isValidMessage(event)) { return; } @@ -652,6 +662,22 @@ function onNewMessage(event: MessageEvent( + key: K, + callback: (data: LivechatMessageEventData) => void, +): void { + const listener = (event: MessageEvent>) => { + if (!isValidMessage(event) || event.data.fn !== key) { + return; + } + + callback(event.data); + window.removeEventListener('message', listener); + }; + + window.addEventListener('message', listener); +} + const attachMessageListener = () => { window.addEventListener('message', onNewMessage, false); }; diff --git a/packages/mock-providers/CHANGELOG.md b/packages/mock-providers/CHANGELOG.md index 41f47ab46e644..9c59c12f964b2 100644 --- a/packages/mock-providers/CHANGELOG.md +++ b/packages/mock-providers/CHANGELOG.md @@ -1,5 +1,14 @@ # @rocket.chat/mock-providers +## 0.2.5 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/ui-contexts@19.0.2 +
+ ## 0.2.4 ### Patch Changes diff --git a/packages/mock-providers/package.json b/packages/mock-providers/package.json index 1ba875403a23c..16c57082502f7 100644 --- a/packages/mock-providers/package.json +++ b/packages/mock-providers/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/mock-providers", - "version": "0.2.4", + "version": "0.2.5", "private": true, "dependencies": { "@rocket.chat/emitter": "~0.31.25", diff --git a/packages/model-typings/CHANGELOG.md b/packages/model-typings/CHANGELOG.md index a65ff53411a16..58d605afd24d2 100644 --- a/packages/model-typings/CHANGELOG.md +++ b/packages/model-typings/CHANGELOG.md @@ -1,5 +1,14 @@ # @rocket.chat/model-typings +## 1.6.5 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/core-typings@7.7.2 +
+ ## 1.6.4 ### Patch Changes diff --git a/packages/model-typings/package.json b/packages/model-typings/package.json index f8b8d5b65c71d..f63e234cad898 100644 --- a/packages/model-typings/package.json +++ b/packages/model-typings/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/model-typings", - "version": "1.6.4", + "version": "1.6.5", "private": true, "devDependencies": { "@types/node-rsa": "^1.1.4", diff --git a/packages/models/CHANGELOG.md b/packages/models/CHANGELOG.md index edf544e29acab..f96a7e4967f78 100644 --- a/packages/models/CHANGELOG.md +++ b/packages/models/CHANGELOG.md @@ -1,5 +1,15 @@ # @rocket.chat/models +## 1.5.5 + +### Patch Changes + +-
Updated dependencies [8874a5aab72c962f213d128a54393d95f7dabef8]: + + - @rocket.chat/rest-typings@7.7.2 + - @rocket.chat/model-typings@1.6.5 +
+ ## 1.5.4 ### Patch Changes diff --git a/packages/models/package.json b/packages/models/package.json index 0b1b88a6cdc76..09c97c5434a85 100644 --- a/packages/models/package.json +++ b/packages/models/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/models", - "version": "1.5.4", + "version": "1.5.5", "private": true, "devDependencies": { "@rocket.chat/jest-presets": "workspace:~", diff --git a/packages/rest-typings/CHANGELOG.md b/packages/rest-typings/CHANGELOG.md index b4e9bb7418092..7596341da39fb 100644 --- a/packages/rest-typings/CHANGELOG.md +++ b/packages/rest-typings/CHANGELOG.md @@ -1,5 +1,16 @@ # @rocket.chat/rest-typings +## 7.7.2 + +### Patch Changes + +- ([#36298](https://github.com/RocketChat/Rocket.Chat/pull/36298) by [@dionisio-bot](https://github.com/dionisio-bot)) Fixes an issue that prevented the action of removing an agent when editing a department to work. + +-
Updated dependencies []: + + - @rocket.chat/core-typings@7.7.2 +
+ ## 7.7.1 ### Patch Changes diff --git a/packages/rest-typings/package.json b/packages/rest-typings/package.json index 7adb921adf93a..989c0b75e6ab4 100644 --- a/packages/rest-typings/package.json +++ b/packages/rest-typings/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/rest-typings", - "version": "7.7.1", + "version": "7.7.2", "devDependencies": { "@rocket.chat/apps-engine": "workspace:^", "@rocket.chat/eslint-config": "workspace:~", diff --git a/packages/rest-typings/src/v1/omnichannel.ts b/packages/rest-typings/src/v1/omnichannel.ts index 7ab919ca9c6ac..4fb8d99396451 100644 --- a/packages/rest-typings/src/v1/omnichannel.ts +++ b/packages/rest-typings/src/v1/omnichannel.ts @@ -215,6 +215,10 @@ const LivechatDepartmentDepartmentIdAgentsPOSTSchema = { order: { type: 'number', }, + departmentEnabled: { type: 'boolean' }, + departmentId: { type: 'string' }, + _id: { type: 'string' }, + _updatedAt: { type: 'string' }, }, required: ['agentId', 'username'], additionalProperties: false, diff --git a/packages/ui-avatar/CHANGELOG.md b/packages/ui-avatar/CHANGELOG.md index f973bc691bd4d..ee9f077891c1c 100644 --- a/packages/ui-avatar/CHANGELOG.md +++ b/packages/ui-avatar/CHANGELOG.md @@ -1,5 +1,14 @@ # @rocket.chat/ui-avatar +## 15.0.2 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/ui-contexts@19.0.2 +
+ ## 15.0.1 ### Patch Changes diff --git a/packages/ui-avatar/package.json b/packages/ui-avatar/package.json index 8eee056b0628a..e96316c108e37 100644 --- a/packages/ui-avatar/package.json +++ b/packages/ui-avatar/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/ui-avatar", - "version": "15.0.1", + "version": "15.0.2", "private": true, "devDependencies": { "@babel/core": "~7.26.0", diff --git a/packages/ui-client/CHANGELOG.md b/packages/ui-client/CHANGELOG.md index 6ef3c833424ae..ff442d1a9b32e 100644 --- a/packages/ui-client/CHANGELOG.md +++ b/packages/ui-client/CHANGELOG.md @@ -1,5 +1,15 @@ # @rocket.chat/ui-client +## 19.0.2 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/ui-contexts@19.0.2 + - @rocket.chat/ui-avatar@15.0.2 +
+ ## 19.0.1 ### Patch Changes diff --git a/packages/ui-client/package.json b/packages/ui-client/package.json index 74886221197c6..b8717dc61bb2c 100644 --- a/packages/ui-client/package.json +++ b/packages/ui-client/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/ui-client", - "version": "19.0.1", + "version": "19.0.2", "private": true, "main": "./dist/index.js", "typings": "./dist/index.d.ts", diff --git a/packages/ui-contexts/CHANGELOG.md b/packages/ui-contexts/CHANGELOG.md index de98161c12823..0ce35005136d1 100644 --- a/packages/ui-contexts/CHANGELOG.md +++ b/packages/ui-contexts/CHANGELOG.md @@ -1,5 +1,16 @@ # @rocket.chat/ui-contexts +## 19.0.2 + +### Patch Changes + +-
Updated dependencies [8874a5aab72c962f213d128a54393d95f7dabef8]: + + - @rocket.chat/rest-typings@7.7.2 + - @rocket.chat/ddp-client@0.3.26 + - @rocket.chat/core-typings@7.7.2 +
+ ## 19.0.1 ### Patch Changes diff --git a/packages/ui-contexts/package.json b/packages/ui-contexts/package.json index 5c65254787e70..d8a2ce948f16a 100644 --- a/packages/ui-contexts/package.json +++ b/packages/ui-contexts/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/ui-contexts", - "version": "19.0.1", + "version": "19.0.2", "private": true, "devDependencies": { "@rocket.chat/core-typings": "workspace:^", diff --git a/packages/ui-video-conf/CHANGELOG.md b/packages/ui-video-conf/CHANGELOG.md index bb700a21181b5..d8450210af48e 100644 --- a/packages/ui-video-conf/CHANGELOG.md +++ b/packages/ui-video-conf/CHANGELOG.md @@ -1,5 +1,15 @@ # @rocket.chat/ui-video-conf +## 19.0.2 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/ui-contexts@19.0.2 + - @rocket.chat/ui-avatar@15.0.2 +
+ ## 19.0.1 ### Patch Changes diff --git a/packages/ui-video-conf/package.json b/packages/ui-video-conf/package.json index 08d513cd3c4fc..d45be3be47657 100644 --- a/packages/ui-video-conf/package.json +++ b/packages/ui-video-conf/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/ui-video-conf", - "version": "19.0.1", + "version": "19.0.2", "private": true, "main": "./dist/index.js", "typings": "./dist/index.d.ts", diff --git a/packages/ui-voip/CHANGELOG.md b/packages/ui-voip/CHANGELOG.md index 5cd1d0b47f4c0..38620fb707012 100644 --- a/packages/ui-voip/CHANGELOG.md +++ b/packages/ui-voip/CHANGELOG.md @@ -1,5 +1,16 @@ # @rocket.chat/ui-voip +## 9.0.2 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/ui-contexts@19.0.2 + - @rocket.chat/ui-avatar@15.0.2 + - @rocket.chat/ui-client@19.0.2 +
+ ## 9.0.1 ### Patch Changes diff --git a/packages/ui-voip/package.json b/packages/ui-voip/package.json index 901f80efe86de..ea92aafa1a4b4 100644 --- a/packages/ui-voip/package.json +++ b/packages/ui-voip/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/ui-voip", - "version": "9.0.1", + "version": "9.0.2", "private": true, "main": "./dist/index.js", "typings": "./dist/index.d.ts", diff --git a/packages/web-ui-registration/CHANGELOG.md b/packages/web-ui-registration/CHANGELOG.md index 2b06a7346e855..a8a09b1d5d8b1 100644 --- a/packages/web-ui-registration/CHANGELOG.md +++ b/packages/web-ui-registration/CHANGELOG.md @@ -1,5 +1,14 @@ # @rocket.chat/web-ui-registration +## 19.0.2 + +### Patch Changes + +-
Updated dependencies []: + + - @rocket.chat/ui-contexts@19.0.2 +
+ ## 19.0.1 ### Patch Changes diff --git a/packages/web-ui-registration/package.json b/packages/web-ui-registration/package.json index 3c077b147e86c..ef56371345132 100644 --- a/packages/web-ui-registration/package.json +++ b/packages/web-ui-registration/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/web-ui-registration", - "version": "19.0.1", + "version": "19.0.2", "private": true, "homepage": "https://rocket.chat", "main": "./dist/index.js",