diff --git a/app/dispatchers/async_dispatcher.rb b/app/dispatchers/async_dispatcher.rb index f2f238cd4..b582bc5dd 100644 --- a/app/dispatchers/async_dispatcher.rb +++ b/app/dispatchers/async_dispatcher.rb @@ -10,14 +10,15 @@ class AsyncDispatcher < BaseDispatcher def listeners [ + AutomationRuleListener.instance, CampaignListener.instance, CsatSurveyListener.instance, HookListener.instance, InstallationWebhookListener.instance, NotificationListener.instance, + ParticipationListener.instance, ReportingEventListener.instance, - WebhookListener.instance, - AutomationRuleListener.instance + WebhookListener.instance ] end end diff --git a/app/javascript/dashboard/assets/scss/widgets/_base.scss b/app/javascript/dashboard/assets/scss/widgets/_base.scss index 1ebcef53c..d5d2e227f 100644 --- a/app/javascript/dashboard/assets/scss/widgets/_base.scss +++ b/app/javascript/dashboard/assets/scss/widgets/_base.scss @@ -12,7 +12,6 @@ h6 { p { text-rendering: optimizeLegibility; - word-spacing: 0.12em; @apply mb-2 leading-[1.65] text-sm; diff --git a/app/javascript/dashboard/components/widgets/conversation/components/SLACardLabel.vue b/app/javascript/dashboard/components/widgets/conversation/components/SLACardLabel.vue index 57ddd451e..042e25838 100644 --- a/app/javascript/dashboard/components/widgets/conversation/components/SLACardLabel.vue +++ b/app/javascript/dashboard/components/widgets/conversation/components/SLACardLabel.vue @@ -49,7 +49,7 @@ diff --git a/app/javascript/dashboard/routes/dashboard/settings/personal/Index.vue b/app/javascript/dashboard/routes/dashboard/settings/personal/Index.vue deleted file mode 100644 index 024811088..000000000 --- a/app/javascript/dashboard/routes/dashboard/settings/personal/Index.vue +++ /dev/null @@ -1,264 +0,0 @@ - - diff --git a/app/javascript/dashboard/routes/dashboard/settings/personal/MessageSignature.vue b/app/javascript/dashboard/routes/dashboard/settings/personal/MessageSignature.vue deleted file mode 100644 index 7639465be..000000000 --- a/app/javascript/dashboard/routes/dashboard/settings/personal/MessageSignature.vue +++ /dev/null @@ -1,50 +0,0 @@ - - diff --git a/app/javascript/dashboard/routes/dashboard/settings/personal/personal.routes.js b/app/javascript/dashboard/routes/dashboard/settings/personal/personal.routes.js deleted file mode 100644 index 66aaf0a11..000000000 --- a/app/javascript/dashboard/routes/dashboard/settings/personal/personal.routes.js +++ /dev/null @@ -1,20 +0,0 @@ -import { frontendURL } from 'dashboard/helper/URLHelper'; - -const Index = () => import('./Index.vue'); - -export default { - routes: [ - { - path: frontendURL('accounts/:accountId/personal'), - name: 'personal_settings', - roles: ['administrator', 'agent'], - component: Index, - props: { - headerTitle: 'PROFILE_SETTINGS.TITLE', - icon: 'edit', - showNewButton: false, - showSidemenuIcon: false, - }, - }, - ], -}; diff --git a/app/javascript/dashboard/routes/dashboard/settings/personal/AccessToken.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/AccessToken.vue similarity index 100% rename from app/javascript/dashboard/routes/dashboard/settings/personal/AccessToken.vue rename to app/javascript/dashboard/routes/dashboard/settings/profile/AccessToken.vue diff --git a/app/javascript/dashboard/routes/dashboard/settings/personal/AudioAlertCondition.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertCondition.vue similarity index 100% rename from app/javascript/dashboard/routes/dashboard/settings/personal/AudioAlertCondition.vue rename to app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertCondition.vue diff --git a/app/javascript/dashboard/routes/dashboard/settings/personal/AudioAlertEvent.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertEvent.vue similarity index 81% rename from app/javascript/dashboard/routes/dashboard/settings/personal/AudioAlertEvent.vue rename to app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertEvent.vue index ef4b95a36..41d25b522 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/personal/AudioAlertEvent.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertEvent.vue @@ -16,7 +16,7 @@ diff --git a/app/javascript/dashboard/routes/dashboard/settings/personal/AudioAlertTone.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertTone.vue similarity index 100% rename from app/javascript/dashboard/routes/dashboard/settings/personal/AudioAlertTone.vue rename to app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertTone.vue diff --git a/app/javascript/dashboard/routes/dashboard/settings/personal/AudioNotifications.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/AudioNotifications.vue similarity index 100% rename from app/javascript/dashboard/routes/dashboard/settings/personal/AudioNotifications.vue rename to app/javascript/dashboard/routes/dashboard/settings/profile/AudioNotifications.vue diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/ChangePassword.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/ChangePassword.vue index 99cee0325..0c2fa9e78 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/profile/ChangePassword.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/ChangePassword.vue @@ -1,82 +1,73 @@ - - diff --git a/app/javascript/dashboard/routes/dashboard/settings/personal/HotKeyCard.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/HotKeyCard.vue similarity index 100% rename from app/javascript/dashboard/routes/dashboard/settings/personal/HotKeyCard.vue rename to app/javascript/dashboard/routes/dashboard/settings/profile/HotKeyCard.vue diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/Index.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/Index.vue index f337b333b..45ec109aa 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/profile/Index.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/Index.vue @@ -1,152 +1,116 @@ - diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/MessageSignature.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/MessageSignature.vue index d2eb246d5..7639465be 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/profile/MessageSignature.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/MessageSignature.vue @@ -1,110 +1,50 @@ - - - - diff --git a/app/javascript/dashboard/routes/dashboard/settings/personal/NotificationCheckBox.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationCheckBox.vue similarity index 100% rename from app/javascript/dashboard/routes/dashboard/settings/personal/NotificationCheckBox.vue rename to app/javascript/dashboard/routes/dashboard/settings/profile/NotificationCheckBox.vue diff --git a/app/javascript/dashboard/routes/dashboard/settings/personal/NotificationPreferences.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationPreferences.vue similarity index 94% rename from app/javascript/dashboard/routes/dashboard/settings/personal/NotificationPreferences.vue rename to app/javascript/dashboard/routes/dashboard/settings/profile/NotificationPreferences.vue index a2c4555a7..986ff9aca 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/personal/NotificationPreferences.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationPreferences.vue @@ -31,10 +31,6 @@ > {{ $t('PROFILE_SETTINGS.FORM.NOTIFICATIONS.PUSH') }} - @@ -94,10 +90,6 @@ {{ $t('PROFILE_SETTINGS.FORM.PUSH_NOTIFICATIONS_SECTION.TITLE') }} -
@@ -116,6 +108,25 @@
+ +
+
+ + + {{ $t('PROFILE_SETTINGS.FORM.NOTIFICATIONS.BROWSER_PERMISSION') }} + +
+ +
@@ -139,7 +150,6 @@ export default { components: { TableHeaderCell, FormSwitch, - CheckBox, }, mixins: [alertMixin, configMixin, uiSettingsMixin], diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationSettings.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationSettings.vue deleted file mode 100644 index cdbc40ec4..000000000 --- a/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationSettings.vue +++ /dev/null @@ -1,649 +0,0 @@ - - - - - diff --git a/app/javascript/dashboard/routes/dashboard/settings/personal/UserBasicDetails.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/UserBasicDetails.vue similarity index 100% rename from app/javascript/dashboard/routes/dashboard/settings/personal/UserBasicDetails.vue rename to app/javascript/dashboard/routes/dashboard/settings/profile/UserBasicDetails.vue diff --git a/app/javascript/dashboard/routes/dashboard/settings/personal/UserProfilePicture.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/UserProfilePicture.vue similarity index 100% rename from app/javascript/dashboard/routes/dashboard/settings/personal/UserProfilePicture.vue rename to app/javascript/dashboard/routes/dashboard/settings/profile/UserProfilePicture.vue diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/Wrapper.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/Wrapper.vue new file mode 100644 index 000000000..f0931afdc --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/Wrapper.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/personal/constants.js b/app/javascript/dashboard/routes/dashboard/settings/profile/constants.js similarity index 100% rename from app/javascript/dashboard/routes/dashboard/settings/personal/constants.js rename to app/javascript/dashboard/routes/dashboard/settings/profile/constants.js diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/profile.routes.js b/app/javascript/dashboard/routes/dashboard/settings/profile/profile.routes.js index 634d15491..357c20e85 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/profile/profile.routes.js +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/profile.routes.js @@ -1,6 +1,6 @@ import { frontendURL } from '../../../../helper/URLHelper'; -const SettingsContent = () => import('../Wrapper.vue'); +const SettingsContent = () => import('./Wrapper.vue'); const Index = () => import('./Index.vue'); export default { @@ -10,12 +10,6 @@ export default { name: 'profile_settings', roles: ['administrator', 'agent'], component: SettingsContent, - props: { - headerTitle: 'PROFILE_SETTINGS.TITLE', - icon: 'edit', - showNewButton: false, - showSidemenuIcon: false, - }, children: [ { path: 'settings', diff --git a/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js b/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js index 7bfdb2488..dd5291fe8 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js +++ b/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js @@ -13,12 +13,11 @@ import integrationapps from './integrationapps/integrations.routes'; import integrations from './integrations/integrations.routes'; import labels from './labels/labels.routes'; import macros from './macros/macros.routes'; -import profile from './profile/profile.routes'; import reports from './reports/reports.routes'; import store from '../../../store'; import sla from './sla/sla.routes'; import teams from './teams/teams.routes'; -import personal from './personal/personal.routes'; +import profile from './profile/profile.routes'; export default { routes: [ @@ -47,10 +46,9 @@ export default { ...integrations.routes, ...labels.routes, ...macros.routes, - ...profile.routes, ...reports.routes, ...sla.routes, ...teams.routes, - ...personal.routes, + ...profile.routes, ], }; diff --git a/app/javascript/v3/components/Form/CheckBox.vue b/app/javascript/v3/components/Form/CheckBox.vue index a047be63a..c95b4ccc6 100644 --- a/app/javascript/v3/components/Form/CheckBox.vue +++ b/app/javascript/v3/components/Form/CheckBox.vue @@ -4,7 +4,7 @@ v-model="checked" type="checkbox" :value="value" - class="flex-shrink-0 mt-0.5 border-ash-200 border checked:border-none checked:bg-primary-600 dark:checked:bg-primary-600 shadow appearance-none rounded-[4px] w-4 h-4 focus:ring-1 after:content-[''] after:text-white checked:after:content-['✓'] after:flex after:items-center after:justify-center after:text-center after:text-xs after:font-bold after:relative" + class="flex-shrink-0 mt-0.5 border-ash-200 border bg-ash-50 checked:border-none checked:bg-primary-600 dark:checked:bg-primary-600 shadow-sm appearance-none rounded-[4px] w-4 h-4 focus:ring-1 after:content-[''] after:text-white checked:after:content-['✓'] after:flex after:items-center after:justify-center after:text-center after:text-xs after:font-bold after:relative" /> diff --git a/app/listeners/participation_listener.rb b/app/listeners/participation_listener.rb new file mode 100644 index 000000000..d0a5f48c2 --- /dev/null +++ b/app/listeners/participation_listener.rb @@ -0,0 +1,8 @@ +class ParticipationListener < BaseListener + include Events::Types + + def assignee_changed(event) + conversation, _account = extract_conversation_and_account(event) + conversation.conversation_participants.find_or_create_by!(user_id: conversation.assignee_id) if conversation.assignee_id.present? + end +end diff --git a/app/models/concerns/assignment_handler.rb b/app/models/concerns/assignment_handler.rb index cf4ef123e..0fab737ed 100644 --- a/app/models/concerns/assignment_handler.rb +++ b/app/models/concerns/assignment_handler.rb @@ -38,7 +38,6 @@ module AssignmentHandler def process_assignment_changes process_assignment_activities - process_participant_assignment end def process_assignment_activities @@ -49,10 +48,4 @@ module AssignmentHandler create_assignee_change_activity(user_name) end end - - def process_participant_assignment - return unless saved_change_to_assignee_id? && assignee_id.present? - - conversation_participants.find_or_create_by!(user_id: assignee_id) - end end diff --git a/app/models/concerns/auto_assignment_handler.rb b/app/models/concerns/auto_assignment_handler.rb index 059e4db71..de5fdae7d 100644 --- a/app/models/concerns/auto_assignment_handler.rb +++ b/app/models/concerns/auto_assignment_handler.rb @@ -15,7 +15,6 @@ module AutoAssignmentHandler return unless should_run_auto_assignment? ::AutoAssignment::AgentAssignmentService.new(conversation: self, allowed_agent_ids: inbox.member_ids_with_assignment_capacity).perform - conversation_participants.find_or_create_by(user_id: assignee_id) if assignee_id.present? end def should_run_auto_assignment? diff --git a/app/models/conversation.rb b/app/models/conversation.rb index a99d7f227..64412b289 100644 --- a/app/models/conversation.rb +++ b/app/models/conversation.rb @@ -110,7 +110,7 @@ class Conversation < ApplicationRecord after_update_commit :execute_after_update_commit_callbacks after_create_commit :notify_conversation_creation - after_commit :set_display_id, unless: :display_id? + after_create_commit :load_attributes_created_by_db_triggers delegate :auto_resolve_duration, to: :account @@ -257,8 +257,13 @@ class Conversation < ApplicationRecord assignee_id.present? && Current.user&.id == assignee_id end - def set_display_id - reload + def load_attributes_created_by_db_triggers + # Display id is set via a trigger in the database + # So we need to specifically fetch it after the record is created + # We can't use reload because it will clear the previous changes, which we need for the dispatcher + obj_from_db = self.class.find(id) + self[:display_id] = obj_from_db[:display_id] + self[:uuid] = obj_from_db[:uuid] end def notify_status_change diff --git a/lib/integrations/slack/send_on_slack_service.rb b/lib/integrations/slack/send_on_slack_service.rb index 50a69e02b..aa9d3ad5b 100644 --- a/lib/integrations/slack/send_on_slack_service.rb +++ b/lib/integrations/slack/send_on_slack_service.rb @@ -58,10 +58,12 @@ class Integrations::Slack::SendOnSlackService < Base::SendOnChannelService end def message_text - if message.content.present? - message.content.gsub(MENTION_REGEX, '\1') + content = message.processed_message_content || message.content + + if content.present? + content.gsub(MENTION_REGEX, '\1') else - message.content + content end end diff --git a/package.json b/package.json index 3d3d0e699..3b305de10 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "dependencies": { "@braid/vue-formulate": "^2.5.2", "@chatwoot/prosemirror-schema": "1.0.5", - "@chatwoot/utils": "^0.0.23", + "@chatwoot/utils": "^0.0.24", "@hcaptcha/vue-hcaptcha": "^0.3.2", "@june-so/analytics-next": "^2.0.0", "@radix-ui/colors": "^1.0.1", diff --git a/spec/enterprise/services/sla/evaluate_applied_sla_service_spec.rb b/spec/enterprise/services/sla/evaluate_applied_sla_service_spec.rb index f6cd657be..71afd2125 100644 --- a/spec/enterprise/services/sla/evaluate_applied_sla_service_spec.rb +++ b/spec/enterprise/services/sla/evaluate_applied_sla_service_spec.rb @@ -21,7 +21,7 @@ RSpec.describe Sla::EvaluateAppliedSlaService do describe '#perform - SLA misses' do context 'when first response SLA is missed' do - before { sla_policy.update(first_response_time_threshold: 1.hour) } + before { applied_sla.sla_policy.update(first_response_time_threshold: 1.hour) } it 'updates the SLA status to missed and logs a warning' do allow(Rails.logger).to receive(:warn) @@ -42,7 +42,7 @@ RSpec.describe Sla::EvaluateAppliedSlaService do context 'when next response SLA is missed' do before do - sla_policy.update(next_response_time_threshold: 1.hour) + applied_sla.sla_policy.update(next_response_time_threshold: 1.hour) conversation.update(first_reply_created_at: 5.hours.ago, waiting_since: 5.hours.ago) end @@ -64,7 +64,7 @@ RSpec.describe Sla::EvaluateAppliedSlaService do end context 'when resolution time SLA is missed' do - before { sla_policy.update(resolution_time_threshold: 1.hour) } + before { applied_sla.sla_policy.update(resolution_time_threshold: 1.hour) } it 'updates the SLA status to missed and logs a warning' do allow(Rails.logger).to receive(:warn) @@ -89,7 +89,7 @@ RSpec.describe Sla::EvaluateAppliedSlaService do context 'when resolved conversation with resolution time SLA is missed' do before do conversation.resolved! - sla_policy.update(resolution_time_threshold: 1.hour) + applied_sla.sla_policy.update(resolution_time_threshold: 1.hour) end it 'does not update the SLA status to missed' do @@ -100,7 +100,7 @@ RSpec.describe Sla::EvaluateAppliedSlaService do context 'when multiple SLAs are missed' do before do - sla_policy.update(first_response_time_threshold: 1.hour, next_response_time_threshold: 1.hour, resolution_time_threshold: 1.hour) + applied_sla.sla_policy.update(first_response_time_threshold: 1.hour, next_response_time_threshold: 1.hour, resolution_time_threshold: 1.hour) conversation.update(first_reply_created_at: 5.hours.ago, waiting_since: 5.hours.ago) end @@ -119,7 +119,7 @@ RSpec.describe Sla::EvaluateAppliedSlaService do describe '#perform - SLA hits' do context 'when first response SLA is hit' do before do - sla_policy.update(first_response_time_threshold: 6.hours) + applied_sla.sla_policy.update(first_response_time_threshold: 6.hours) conversation.update(first_reply_created_at: 30.minutes.ago) end @@ -142,7 +142,7 @@ RSpec.describe Sla::EvaluateAppliedSlaService do context 'when next response SLA is hit' do before do - sla_policy.update(next_response_time_threshold: 6.hours) + applied_sla.sla_policy.update(next_response_time_threshold: 6.hours) conversation.update(first_reply_created_at: 30.minutes.ago, waiting_since: nil) end @@ -164,7 +164,7 @@ RSpec.describe Sla::EvaluateAppliedSlaService do context 'when resolution time SLA is hit' do before do - sla_policy.update(resolution_time_threshold: 8.hours) + applied_sla.sla_policy.update(resolution_time_threshold: 8.hours) conversation.resolved! end @@ -182,7 +182,7 @@ RSpec.describe Sla::EvaluateAppliedSlaService do describe 'SLA evaluation with frt hit, multiple nrt misses and rt miss' do before do # Setup SLA Policy thresholds - sla_policy.update( + applied_sla.sla_policy.update( first_response_time_threshold: 2.hours, # Hit frt next_response_time_threshold: 1.hour, # Miss nrt multiple times resolution_time_threshold: 4.hours # Miss rt diff --git a/spec/listeners/participation_listener_spec.rb b/spec/listeners/participation_listener_spec.rb new file mode 100644 index 000000000..69c030de6 --- /dev/null +++ b/spec/listeners/participation_listener_spec.rb @@ -0,0 +1,26 @@ +require 'rails_helper' +describe ParticipationListener do + let(:listener) { described_class.instance } + let!(:account) { create(:account) } + let!(:admin) { create(:user, account: account, role: :administrator) } + let!(:inbox) { create(:inbox, account: account) } + let!(:agent) { create(:user, account: account, role: :agent) } + let!(:conversation) { create(:conversation, account: account, inbox: inbox, assignee: agent) } + + before do + create(:inbox_member, inbox: inbox, user: agent) + Current.user = nil + Current.account = nil + end + + describe '#assignee_changed' do + let(:event_name) { :assignee_changed } + let!(:event) { Events::Base.new(event_name, Time.zone.now, conversation: conversation) } + + it 'adds the assignee as a participant to the conversation' do + expect(conversation.conversation_participants.map(&:user_id)).not_to include(admin.id) + listener.assignee_changed(event) + expect(conversation.conversation_participants.map(&:user_id)).to include(agent.id) + end + end +end diff --git a/spec/models/concerns/auto_assignment_handler_shared.rb b/spec/models/concerns/auto_assignment_handler_shared.rb index cef1e17ee..90c9c9d20 100644 --- a/spec/models/concerns/auto_assignment_handler_shared.rb +++ b/spec/models/concerns/auto_assignment_handler_shared.rb @@ -26,10 +26,6 @@ shared_examples_for 'auto_assignment_handler' do expect(conversation.reload.assignee).to eq(agent) end - it 'adds assignee to conversation participants' do - expect(conversation.conversation_participants.map(&:user)).to include(agent) - end - it 'will not auto assign agent if enable_auto_assignment is false' do inbox.update(enable_auto_assignment: false) diff --git a/spec/models/message_spec.rb b/spec/models/message_spec.rb index bb1bdec1a..4c66e37ee 100644 --- a/spec/models/message_spec.rb +++ b/spec/models/message_spec.rb @@ -107,7 +107,11 @@ RSpec.describe Message do end describe 'message create event' do - let(:conversation) { create(:conversation) } + let!(:conversation) { create(:conversation) } + + before do + conversation.reload + end it 'updates the conversation first reply created at if it is the first outgoing message' do expect(conversation.first_reply_created_at).to be_nil diff --git a/yarn.lock b/yarn.lock index f855791e4..d93a6ff7a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3177,10 +3177,10 @@ prosemirror-utils "^0.9.6" prosemirror-view "^1.17.2" -"@chatwoot/utils@^0.0.23": - version "0.0.23" - resolved "https://registry.yarnpkg.com/@chatwoot/utils/-/utils-0.0.23.tgz#e961fd87ef9ee19c442bfcedac5fe0be2ef37726" - integrity sha512-BQ7DprXr7FIkSbHdDc1WonwH0rt/+B+WaaLaXNMjCcxJgkX/gZ8QMltruOfRp/S8cFyd9JfFQhNF0T9lz1OMvA== +"@chatwoot/utils@^0.0.24": + version "0.0.24" + resolved "https://registry.yarnpkg.com/@chatwoot/utils/-/utils-0.0.24.tgz#584e26b7fba2a8b23c049cc555497d0f35a5aebd" + integrity sha512-TEPA1LxrCfEVFYZvBj3bckn2sEljStriiZttF6lu3j1rdNn2tysqK9IwYcRBHS4nyfleRMG4kSFrqD653t3YfA== dependencies: date-fns "^2.29.1" @@ -8573,20 +8573,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001214: - version "1.0.30001494" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001494.tgz" - integrity sha512-sY2B5Qyl46ZzfYDegrl8GBCzdawSLT4ThM9b9F+aDYUrAG2zCOyMbd2Tq34mS1g4ZKBfjRlzOohQMxx28x6wJg== - -caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001538: - version "1.0.30001538" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz#9dbc6b9af1ff06b5eb12350c2012b3af56744f3f" - integrity sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw== - -caniuse-lite@^1.0.30001503: - version "1.0.30001507" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001507.tgz#fae53f6286e7564783eadea9b447819410a59534" - integrity sha512-SFpUDoSLCaE5XYL2jfqe9ova/pbQHEmbheDf5r4diNwbAgR3qxM9NQtfsiSscjqoya5K7kFcHPUQ+VsUkIJR4A== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001214, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001503, caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001538: + version "1.0.30001616" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001616.tgz" + integrity sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw== capture-exit@^2.0.0: version "2.0.0"