chore: Increase the timeout to support slow SMTP servers#10318
Merged
pranavrajs merged 2 commits intodevelopfrom Apr 16, 2025
Merged
chore: Increase the timeout to support slow SMTP servers#10318pranavrajs merged 2 commits intodevelopfrom
pranavrajs merged 2 commits intodevelopfrom
Conversation
fixes: #7802 Co-authored-by: Nickson Yap <[email protected]>
|
🐢 Turtley slow progress alert! This pull request has been idle for over 30 days. Can we please speed things up and either merge it or release it back into the wild? |
pranavrajs
approved these changes
Apr 16, 2025
muhammad-el
added a commit
to on-cruise-control/courier
that referenced
this pull request
Apr 21, 2025
* chore(deps): Bump nokogiri from 1.18.3 to 1.18.4 (#11153) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.18.3 to 1.18.4. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/sparklemotion/nokogiri/releases">nokogiri's releases</a>.</em></p> <blockquote> <h2>v1.18.4 / 2025-03-14</h2> <h3>Security</h3> <ul> <li>[CRuby] Vendored libxslt is updated to <a href="https://gitlab.gnome.org/GNOME/libxslt/-/releases/v1.1.43">v1.1.43</a> to address CVE-2025-24855 and CVE-2024-55549. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-mrxw-mxhj-p664">GHSA-mrxw-mxhj-p664</a> for more information.</li> </ul> <!-- raw HTML omitted --> <pre><code>8f2263cef9953ce09bd5293d76c9bbd3013d2f94d1cca67783dfe6635c529deb nokogiri-1.18.4-aarch64-linux-gnu.gem 4e231f8ba3128cfc2ef0cc0bdc807d7ce71fc62cb6a78216e817be8631fe6a96 nokogiri-1.18.4-aarch64-linux-musl.gem 73902663b23b1123282b9c0b6d9654b1fb286dfee8d65cb1f6029087b7f0d037 nokogiri-1.18.4-arm64-darwin.gem cc2945e2c19560a61a97737e6bd3b329edb1f82ca204d46a18e5e98ad0a550a6 nokogiri-1.18.4-arm-linux-gnu.gem 4fb7f44de0cd85abfa869e4cfb619410da174ebf9fbe26ae0caa65462b818bcb nokogiri-1.18.4-arm-linux-musl.gem bb7820521c1bbae1d3e0092ff03b27a8e700912b37d80f962b7e4567947a64ac nokogiri-1.18.4.gem cbc0bab72eb5a9573efa7b98351fdd44c609e8d4585456ca1be18db2b7764b64 nokogiri-1.18.4-java.gem bd567cb509eb75de8f27ca6ecaf4a38bf0563482188991f9bcccccac9c3b9a2f nokogiri-1.18.4-x64-mingw-ucrt.gem e4776f58eea9b94d05caf8bf351e3c6aa1cce01edcc2ed530f3c302c13178965 nokogiri-1.18.4-x86_64-darwin.gem b1c6407b346b88704e97a342a80acd4755175324e624da34d0c5cfdc8d34191e nokogiri-1.18.4-x86_64-linux-gnu.gem ea7c0356a70f3d2d0d76315b533877013d20368d5c9f437c38e0bd462c4844dc nokogiri-1.18.4-x86_64-linux-musl.gem </code></pre> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md">nokogiri's changelog</a>.</em></p> <blockquote> <h2>v1.18.4 / 2025-03-14</h2> <h3>Security</h3> <ul> <li>[CRuby] Vendored libxslt is updated to <a href="https://gitlab.gnome.org/GNOME/libxslt/-/releases/v1.1.43">v1.1.43</a> to address CVE-2025-24855 and CVE-2024-55549. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-mrxw-mxhj-p664">GHSA-mrxw-mxhj-p664</a> for more information.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/sparklemotion/nokogiri/commit/80edf1c35d79eae3a2fd7315f1fb61831ca3c94a"><code>80edf1c</code></a> version bump to v1.18.4</li> <li><a href="https://github.com/sparklemotion/nokogiri/commit/3c12e357632043725bb7dde0e8a9992d08c66b57"><code>3c12e35</code></a> dep: update libxslt to 1.1.43 (v1.18.x branch) (<a href="https://redirect.github.com/sparklemotion/nokogiri/issues/3467">#3467</a>)</li> <li><a href="https://github.com/sparklemotion/nokogiri/commit/395c085edd7bd00bfb6b36b23a0ff2f9b8e29d30"><code>395c085</code></a> dep: update libxslt to 1.1.43</li> <li><a href="https://github.com/sparklemotion/nokogiri/commit/41257151137222136b4af1faa75ba9bf2fbd5ad2"><code>4125715</code></a> ci: tired of waiting for gnome mirrors</li> <li><a href="https://github.com/sparklemotion/nokogiri/commit/35faaa3fcb4a726bfb8d5e5475b89247909fa0a2"><code>35faaa3</code></a> doc: update CHANGELOG with GHSA</li> <li>See full diff in <a href="https://github.com/sparklemotion/nokogiri/compare/v1.18.3...v1.18.4">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/chatwoot/chatwoot/network/alerts). </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Shivam Mishra <[email protected]> * chore: Add cache to improve widget performance (#11163) - Add dynamic importing for routes. - Added caching for `campaign`, `articles` and `inbox_members` API end points. --------- Co-authored-by: Pranav <[email protected]> * feat: Add support for frontend filtering of conversations (#11111) This pull request includes significant changes to the filtering logic for conversations in the frontend, here's a summary of the changes This includes adding a `matchesFilters` method that evaluates a conversation against the applied filters. It does so by first evaluating all the conditions, and later converting the results into a JSONLogic object that can be evaluated according to Postgres operator precedence ### Alignment Specs To ensure the frontend and backend implementations always align, we've added tests on both sides with same cases, for anyone fixing any regressions found in the frontend implementation, they need to ensure the existing tests always pass. Test Case | JavaScript Spec | Ruby Spec | Match? -- | -- | -- | -- **A AND B OR C** | Present | Present | Yes Matches when all conditions are true | Present | Present | Yes Matches when first condition is false but third is true | Present | Present | Yes Matches when first and second conditions are false but third is true | Present | Present | Yes Does not match when all conditions are false | Present | Present | Yes **A OR B AND C** | Present | Present | Yes Matches when first condition is true | Present | Present | Yes Matches when second and third conditions are true | Present | Present | Yes **A AND B OR C AND D** | Present | Present | Yes Matches when first two conditions are true | Present | Present | Yes Matches when last two conditions are true | Present | Present | Yes **Mixed Operators (A AND (B OR C) AND D)** | Present | Present | Yes Matches when all conditions in the chain are true | Present | Present | Yes Does not match when the last condition is false | Present | Present | Yes --------- Co-authored-by: Sivin Varghese <[email protected]> Co-authored-by: Muhsin Keloth <[email protected]> Co-authored-by: Pranav <[email protected]> * chore: Remove delete Instagram story implementation (#11097) Currently, Instagram stories are downloaded and displayed as attachments. We previously implemented story deletion by checking individual messages via https://github.com/chatwoot/chatwoot/pull/5300/files#diff-684a16c1b0b4c099fcdfeed95b1820e11fef629fe332ec7ce6a8c600331dd06dR110, but this approach proved impractical and was removed. This PR removes all unused code to avoid confusion. We will revisit the story deletion feature when we implement `instagram_manage_insights`. * fix: Support Business hours when downloading the agent reports. # Pull Request Template ## Description This PR fixes an issue where downloaded agent conversation reports from the Conversations page under Reports do not respect business hours. Fixes https://linear.app/chatwoot/issue/CW-4139/downloaded-agent-reports-do-not-respect-business-hours https://github.com/chatwoot/chatwoot/issues/11057 ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? ### Loom video https://www.loom.com/share/43b94494647b48c3855476a227b02acb?sid=d6072725-11e5-487c-8aa5-8ecfae6dc818 ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [ ] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules * fix(i18n): correct settings name translation in pt-BR (#11172) # Pull Request Template ## Description In pt_BR language, some strings are being mispelled, the correct word would be "Configurações" but instead it is being showed as "Confirgurações", which is wrong. Fixes: https://github.com/chatwoot/chatwoot/issues/11149 ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? I've compiled the new translations and I compared the problematic strings in PT_BR to check if it was still with the "Confirgurações" word instead of "Configurações" ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] My changes generate no new warnings * feat: Added Instagram channel migration (#11181) This PR is part of https://github.com/chatwoot/chatwoot/pull/11054 to make the review cycle easier. * fix: Remove where query if admin (#11183) When finding conversation if it is an admin, we don't need to filter it by inbox ids. * fix: Update throttle for /meta endpoints, will call every 2s for small account, 10s for large accounts (#11190) This update improves the throttling mechanism for conversation meta requests to optimize server load and enhance performance. The changes implement differentiated thresholds based on account size - a 2-second throttle for small accounts (≤100 conversations) and a 10-second throttle for large accounts (>100 conversations). Fixes #11178 * fix: Apply filter for inbox when the user is an admin (#11197) Optimization #11183 missed a condition where the inbox_id filter is manually passed. Due to the previous change, the inbox filter was being discarded for admins, although it continued to work correctly for agents. This PR includes a fix for that specific case and adds a spec to explicitly test it. * feat: Add debounce for meta query (#11195) This PR combines the approaches in https://github.com/chatwoot/chatwoot/pull/11190 and https://github.com/chatwoot/chatwoot/pull/11187 to debounce the meta request with a max wait time of 2.5 seconds With 500 concurrent users, the theoretical limit with this is 720K requests per minute, if all of them continuously receive websocket events. The max wait of 2.5 seconds is still very generous, and we can easily make it 2 seconds for smaller accounts and 5 seconds for larger accounts. ```js const debouncedFetchMetaData = debounce(fetchMetaData, 500, false, 200); const longDebouncedFetchMetaData = debounce(fetchMetaData, 500, false, 5000); export const actions = { get: async ({ commit, state: $state }, params) => { if ($state.allCount > 100) { longDebouncedFetchMetaData(commit, params); } else { debouncedFetchMetaData(commit, params); } }, set({ commit }, meta) { commit(types.SET_CONV_TAB_META, meta); }, }; ``` Related Utils PR: https://github.com/chatwoot/utils/pull/49 Here's the debounce in action <img width="934" alt="image" src="https://github.com/user-attachments/assets/5265a108-9c64-4488-9b4c-2e0d06aadc50" /> --------- Co-authored-by: Pranav <[email protected]> * feat: Use long debounce for larger accounts (#11200) * chore(deps-dev): Bump vite from 5.4.12 to 5.4.15 (#11199) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.12 to 5.4.15. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite/releases">vite's releases</a>.</em></p> <blockquote> <h2>v5.4.15</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v5.4.15/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v5.4.14</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v5.4.14/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v5.4.13</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v5.4.13/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite/blob/v5.4.15/packages/vite/CHANGELOG.md">vite's changelog</a>.</em></p> <blockquote> <h2><!-- raw HTML omitted -->5.4.15 (2025-03-24)<!-- raw HTML omitted --></h2> <ul> <li>fix: backport <a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19702">#19702</a>, fs raw query with query separators (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19703">#19703</a>) (<a href="https://github.com/vitejs/vite/commit/807d7f06d33ab49c48a2a3501da3eea1906c0d41">807d7f0</a>), closes <a href="https://redirect.github.com/vitejs/vite/issues/19702">#19702</a> <a href="https://redirect.github.com/vitejs/vite/issues/19703">#19703</a></li> </ul> <h2><!-- raw HTML omitted -->5.4.14 (2025-01-21)<!-- raw HTML omitted --></h2> <ul> <li>fix: <code>preview.allowedHosts</code> with specific values was not respected (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19246">#19246</a>) (<a href="https://github.com/vitejs/vite/commit/9df6e6beabf0d18988ec13b8b742d2aba29662f9">9df6e6b</a>), closes <a href="https://redirect.github.com/vitejs/vite/issues/19246">#19246</a></li> <li>fix: allow CORS from loopback addresses by default (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19249">#19249</a>) (<a href="https://github.com/vitejs/vite/commit/7d1699ccf673e2790704756d89d2e1e4ee478fb4">7d1699c</a>), closes <a href="https://redirect.github.com/vitejs/vite/issues/19249">#19249</a></li> </ul> <h2><!-- raw HTML omitted -->5.4.13 (2025-01-20)<!-- raw HTML omitted --></h2> <ul> <li>fix: try parse <code>server.origin</code> URL (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19241">#19241</a>) (<a href="https://github.com/vitejs/vite/commit/5946215718e369c34f6cc9415391d2ca84efe327">5946215</a>), closes <a href="https://redirect.github.com/vitejs/vite/issues/19241">#19241</a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/vitejs/vite/commit/9b0f4c80eea8b136d262c705234353e96abfbe75"><code>9b0f4c8</code></a> release: v5.4.15</li> <li><a href="https://github.com/vitejs/vite/commit/807d7f06d33ab49c48a2a3501da3eea1906c0d41"><code>807d7f0</code></a> fix: backport <a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19702">#19702</a>, fs raw query with query separators (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19703">#19703</a>)</li> <li><a href="https://github.com/vitejs/vite/commit/e7eb3c5559e6f7ec6f5ca834c2ff4d680f58e81b"><code>e7eb3c5</code></a> release: v5.4.14</li> <li><a href="https://github.com/vitejs/vite/commit/7d1699ccf673e2790704756d89d2e1e4ee478fb4"><code>7d1699c</code></a> fix: allow CORS from loopback addresses by default (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19249">#19249</a>)</li> <li><a href="https://github.com/vitejs/vite/commit/9df6e6beabf0d18988ec13b8b742d2aba29662f9"><code>9df6e6b</code></a> fix: <code>preview.allowedHosts</code> with specific values was not respected (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19246">#19246</a>)</li> <li><a href="https://github.com/vitejs/vite/commit/a1824c5ff13578d590176275ac309a0ab48ee5b9"><code>a1824c5</code></a> release: v5.4.13</li> <li><a href="https://github.com/vitejs/vite/commit/5946215718e369c34f6cc9415391d2ca84efe327"><code>5946215</code></a> fix: try parse <code>server.origin</code> URL (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19241">#19241</a>)</li> <li>See full diff in <a href="https://github.com/vitejs/vite/commits/v5.4.15/packages/vite">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/chatwoot/chatwoot/network/alerts). </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix: Fix typo in conversationStats/get (#11201) * fix: Reset recorder and attachments when switching chats (#11174) # Pull Request Template ## Description This PR will reset the recorder and clear attachments when switching chats. It ensures that any ongoing recordings or attached files do not persist across different conversations Fixes https://linear.app/chatwoot/issue/CW-4157/recorded-audio-is-being-preserved-between-conversations https://github.com/chatwoot/chatwoot/issues/11136 ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? ### Loom video https://www.loom.com/share/6d6361650794426497467d6de1b4900d?sid=d856c540-1032-4ea2-8765-8704b76e8e1d ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules * feat: add job to remove stale contacts and contact_inboxes (#11186) - Add a job to remove stale contacts and contact_inboxes across all accounts Stale anonymous contact is defined as - have no identification (email, phone_number, and identifier are NULL) - have no conversations - are older than 30 days --------- Co-authored-by: Pranav <[email protected]> Co-authored-by: Shivam Mishra <[email protected]> * feat: Upgrade page instead of banner (#11202) # Pull Request Template ## Description This PR will replace the upgrade banner with an upgrade page view. ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? ### Loom video https://www.loom.com/share/0f2b4b09acdd4404bf3211184a470227?sid=7ed60a99-0299-4642-b907-2af8c4dcc643 ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules --------- Co-authored-by: Pranav <[email protected]> * fix: Add support for named parameter templates in WhatsApp (#11198) The expected payload on WhatsApp Cloud API is the following. ```json { "template": { "name": "TEMPLATE_NAME", "language": { "code": "LANGUAGE_AND_LOCALE_CODE" }, "components": [ "<NAMED_PARAMETER_INPUT>", "<POSITIONAL_PARAMETER_INPUT>" ] } } ``` Named templates expect a `parameter_name` ```json { "type": "body", "parameters": [ { "type": "text", "parameter_name": "customer_name", "text": "John" }, { "type": "text", "parameter_name": "order_id", "text": "9128312831" } ] } ``` In this PR, we would check if the template is a name template, then we would send the `parameter_name` as well. Reference: https://github.com/chatwoot/chatwoot/issues/10886 * chore: Update buttons in dashboard (#11145) # Pull Request Template ## Changes * Remove unused component `MaskedText.vue` * Remove unused component `ContactIntro.vue` * Remove unused `AddCustomViews.vue` component * Update buttons in help center upgrade page <img width="741" alt="image" src="https://github.com/user-attachments/assets/f46b8ffa-ef74-4b83-95c1-83842844c4b7" /> * Update SLA view details button in reports page <img width="419" alt="image" src="https://github.com/user-attachments/assets/7db6bff6-9ba5-4c13-850f-b9d4dbb55489" /> * Update assign to me conversation action button <img width="152" alt="image" src="https://github.com/user-attachments/assets/587ee1fe-93c9-48e0-910a-390dd4eac1f2" /> * Update button in participants action <img width="365" alt="image" src="https://github.com/user-attachments/assets/50eb386f-882b-4277-ad61-d557893ac490" /> <img width="365" alt="image" src="https://github.com/user-attachments/assets/3c64ed42-0203-43c6-9a26-8ad9465aa394" /> * Update the show more attributes button <img width="365" alt="image" src="https://github.com/user-attachments/assets/f2105a2f-8441-4d8b-b355-dfe97ce2e362" /> * Update SLA empty state <img width="376" alt="image" src="https://github.com/user-attachments/assets/55fd4376-6183-45c9-acb2-6ad5a6a58730" /> * Update create new label button from dropdown <img width="376" alt="image" src="https://github.com/user-attachments/assets/bb8226d0-795f-431f-8fe4-15d15ee1d695" /> * Update add macro button <img width="382" alt="image" src="https://github.com/user-attachments/assets/b6375402-5213-4041-841b-09c2157ed56a" /> * Update copy button <img width="382" alt="image" src="https://github.com/user-attachments/assets/f1929d63-f7ca-4eab-bfa8-716be2aa4be8" /> * Update the buttons in banner component <img width="849" alt="image" src="https://github.com/user-attachments/assets/bb86b498-ab8e-4a92-8c6a-60edcef0fd7b" /> <img width="838" alt="image" src="https://github.com/user-attachments/assets/4bde00de-907e-49ac-9128-f364a90cd3c1" /> * Update table pagination buttons <img width="968" alt="image" src="https://github.com/user-attachments/assets/8d439af6-8126-4fad-a3fe-89b26a56f880" /> <img width="968" alt="image" src="https://github.com/user-attachments/assets/a178b3d7-3385-4a2b-a0d7-35be9a25fd93" /> * Update filter chip buttons and dropdown colors <img width="541" alt="image" src="https://github.com/user-attachments/assets/7be1f418-82df-4db6-b265-4c185fc79f4b" /> <img width="541" alt="image" src="https://github.com/user-attachments/assets/69110d75-85e9-4974-8c2a-e195b23a335c" /> <img width="173" alt="image" src="https://github.com/user-attachments/assets/c8f5bc82-15b4-4f25-b7d4-35a9280ec7c6" /> <img width="565" alt="image" src="https://github.com/user-attachments/assets/7dad1d00-784b-46eb-b823-e6e55d5f9dc8" /> <img width="565" alt="image" src="https://github.com/user-attachments/assets/384a86ed-f45f-488c-b9aa-1f02b16c813d" /> --------- Co-authored-by: Pranav <[email protected]> Co-authored-by: Muhsin Keloth <[email protected]> Co-authored-by: Shivam Mishra <[email protected]> * chore: Remove old buttons from Vue2 design (#11159) * chore(refactor): Improve conversation permission filtering (#11166) 1. Add permission filter service to separate permission filtering logic from conversation queries 2. Implement hierarchical permissions with cleaner logic: - conversation_manage gives access to all conversations - conversation_unassigned_manage gives access to unassigned and user's conversations - conversation_participating_manage gives access only to user's conversations --------- Co-authored-by: Pranav <[email protected]> * fix: Signup form validation issue with captcha handling (#11232) # Pull Request Template ## Description This PR improves password validation in the signup form and ensures proper captcha handling during form submission. **Changes:** 1. Display an error message if the password is invalid. 2. Disable the account creation button when the password is invalid. Fixes https://linear.app/chatwoot/issue/CW-4199/signup-issues ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? ### Loom video https://www.loom.com/share/d0ff04f12b98473e837b7f43af444f85?sid=04473cea-4717-4de8-b3fe-33ab0faed5e9 ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [ ] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules * chore(i18n): Improvements in automation and macros (#11231) # Pull Request Template ## Description This PR includes, 1. **Sort Accounts List** – Orders the accounts list alphabetically for better organization. 2. **Add Missing Translations in Automation** – Includes missing translations for actions, events, and conditions dropdown. 3. **Fix Missing Translation in Macros** – Adds missing translations in the macros action select dropdown. 4. Translate "Automation System" Username – Ensures the "Automation System" username is properly translated. Fixes: https://linear.app/chatwoot/issue/CW-4198/issues-[converso] ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules * feat: Add webhook event support for macros (#11235) Fixes https://github.com/chatwoot/chatwoot/issues/5968 We will not support custom payload in V1. * feat: Ability to delete account for administrators (#1874) ## Description Add account delete option in the user account settings. Fixes #1555 ## Type of change - [ ] New feature (non-breaking change which adds functionality)   ## Checklist: - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules --------- Co-authored-by: Sojan Jose <[email protected]> Co-authored-by: Sojan Jose <[email protected]> Co-authored-by: Muhsin Keloth <[email protected]> * feat: Added the ability to create Instagram channel (#11182) This PR is part of https://github.com/chatwoot/chatwoot/pull/11054 to make the review cycle easier. * feat: Instagram reauthorization (#11221) This PR is part of https://github.com/chatwoot/chatwoot/pull/11054 to make the review cycle easier. * chore: Fix facebook inbox create button (#11237) **Before**  **After**  * chore: Clean up report & knowledge base policies (#11234) - Removes the portal_members table and all associated records - Updates policies to use custom roles with knowledge_base_manage permission - Updates controllers, models, and views to work without portal membership - Adds tests for the new permission model * chore: Reply window fixes (#11242) - Fixed the can reply window links. - Added the supported file types for Instagram. * feat: Instagram Inbox using Instagram Business Login (#11054) This PR introduces basic minimum version of **Instagram Business Login**, making Instagram inbox setup more straightforward by removing the Facebook Page dependency. This update enhances user experience and aligns with Meta’s recommended best practices. Fixes https://linear.app/chatwoot/issue/CW-3728/instagram-login-how-to-implement-the-changes ## Why Introduce Instagram as a Separate Inbox? Currently, our Instagram integration requires linking an Instagram account to a Facebook Page, making setup complex. To simplify this process, Instagram now offers **Instagram Business Login**, which allows users to authenticate directly with their Instagram credentials. The **Instagram API with Instagram Login** enables businesses and creators to send and receive messages without needing a Facebook Page connection. While an Instagram Business or Creator account is still required, this approach provides a more straightforward integration process. | **Existing Approach (Facebook Login for Business)** | **New Approach (Instagram Business Login)** | | --- | --- | | Requires linking Instagram to a Facebook Page | No Facebook Page required | | Users log in via Facebook credentials | Users log in via Instagram credentials | | Configuration is more complex | Simpler setup | Meta recommends using **Instagram Business Login** as the preferred authentication method due to its easier configuration and improved developer experience. --- ## Implementation Plan The core messaging functionality is already in place, but the transition to **Instagram Business Login** requires adjustments. ### Changes & Considerations - **API Adjustments**: The Instagram API uses `graph.instagram`, whereas Koala (our existing library) interacts with `graph.facebook`. We may need to modify API calls accordingly. - **Three Main Modules**: 1. **Instagram Business Login** – Handle authentication flow. 2. **Permissions & Features** – Ensure necessary API scopes are granted. 3. **Webhooks** – Enable real-time message retrieval.  --- ## Instagram Login Flow 1. User clicks **"Create Inbox"** for Instagram. 2. App redirects to the [Instagram Authorization URL](https://developers.facebook.com/docs/instagram-platform/instagram-api-with-instagram-login/business-login#embed-the-business-login-url). 3. After authentication, Instagram returns an authorization code. 5. The app exchanges the code for a **long-lived token** (valid for 60 days). 6. Tokens are refreshed periodically to maintain access. 7. Once completed, the app creates an inbox and redirects to the Chatwoot dashboard. --- ## How to Test the Instagram Inbox 1. Create a new app on [Meta's Developer Portal](https://developers.facebook.com/apps/). 2. Select **Business** as the app type and configure it. 3. Add the Instagram product and connect a business account. 4. Copy Instagram app ID and Instagram app secret 5. Add the Instagram app ID and Instagram app secret to your app config via `{Chatwoot installation url}/super_admin/app_config?config=instagram` 6. Configure Webhooks: - Callback URL: `{your_chatwoot_url}/webhooks/instagram` - Verify Token: `INSTAGRAM_VERIFY_TOKEN` - Subscribe to `messages`, `messaging_seen`, and `message_reactions` events. 7. Set up **Instagram Business Login**: - Redirect URL: `{your_chatwoot_url}/instagram/callback` 8. Test inbox creation via the Chatwoot dashboard. ## Troubleshooting & Common Errors ### Insufficient Developer Role Error - Ensure the Instagram user is added as a developer: - **Meta Dashboard → App Roles → Roles → Add People → Enter Instagram ID** ### API Access Deactivated - Ensure the **Privacy Policy URL** is valid and correctly set. ### Invalid request: Request parameters are invalid: Invalid redirect_uri - Please configure the Frontend URL. The Frontend URL does not match the authorization URL. --- ## To-Do List - [x] Basic integration setup completed. - [x] Enable sending messages via [Messaging API](https://developers.facebook.com/docs/instagram-platform/instagram-api-with-instagram-login/messaging-api). - [x] Implement automatic webhook subscriptions on inbox creation. - [x] Handle **canceled authorization errors**. - [x] Handle all the errors https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/error-codes - [x] Dynamically fetch **account IDs** instead of hardcoding them. - [x] Prevent duplicate Instagram channel creation for the same account. - [x] Use **Global Config** instead of environment variables. - [x] Explore **Human Agent feature** for message handling. - [x] Write and refine **test cases** for all scenarios. - [x] Implement **token refresh mechanism** (tokens expire after 60 days). Fixes https://github.com/chatwoot/chatwoot/issues/10440 --------- Co-authored-by: Sivin Varghese <[email protected]> Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> Co-authored-by: Shivam Mishra <[email protected]> * fix: Rendering issue with Pre-chat message (#11255) * fix: styles in ProseMirror URL prompt modal (#11256) * fix: Updating the Ubuntu version to run the tests (#11260) In my previous PR I got some errors that when checking it is possible to conclude that the version of ubuntu 20.04 in the Github Actions images to run the tests is no longer supported.  Possible to check at this url: https://github.com/actions/runner-images/issues/11101 ## What's changed Changing the Ubuntu version in the image to run the tests. Old version: 20.04 New version: 22.04 ## BEFORE:  ## NOW:  * fix: Removing repetitive name parameter in AgentsController (#11259) Co-authored-by: Sojan Jose <[email protected]> * chore(deps-dev): Bump vite from 5.4.15 to 5.4.17 (#11263) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.15 to 5.4.17. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite/releases">vite's releases</a>.</em></p> <blockquote> <h2>v5.4.17</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v5.4.17/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v5.4.16</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v5.4.16/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite/blob/v5.4.17/packages/vite/CHANGELOG.md">vite's changelog</a>.</em></p> <blockquote> <h2><!-- raw HTML omitted -->5.4.17 (2025-04-03)<!-- raw HTML omitted --></h2> <ul> <li>fix: backport <a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19782">#19782</a>, fs check with svg and relative paths (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19784">#19784</a>) (<a href="https://github.com/vitejs/vite/commit/84b2b46ed129be8215108e789a90adbb33a9c42c">84b2b46</a>), closes <a href="https://redirect.github.com/vitejs/vite/issues/19782">#19782</a> <a href="https://redirect.github.com/vitejs/vite/issues/19784">#19784</a></li> </ul> <h2><!-- raw HTML omitted -->5.4.16 (2025-03-31)<!-- raw HTML omitted --></h2> <ul> <li>fix: backport <a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19761">#19761</a>, fs check in transform middleware (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19762">#19762</a>) (<a href="https://github.com/vitejs/vite/commit/b627c50d359f3bd9b602408fbbf462cf4a2f019c">b627c50</a>), closes <a href="https://redirect.github.com/vitejs/vite/issues/19761">#19761</a> <a href="https://redirect.github.com/vitejs/vite/issues/19762">#19762</a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/vitejs/vite/commit/0a2518a98d2354c61ee8ef51f7d00fa92aebb511"><code>0a2518a</code></a> release: v5.4.17</li> <li><a href="https://github.com/vitejs/vite/commit/84b2b46ed129be8215108e789a90adbb33a9c42c"><code>84b2b46</code></a> fix: backport <a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19782">#19782</a>, fs check with svg and relative paths (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19784">#19784</a>)</li> <li><a href="https://github.com/vitejs/vite/commit/712cb71aa0e2a03dbf49db92043fb4ecbfc826b1"><code>712cb71</code></a> release: v5.4.16</li> <li><a href="https://github.com/vitejs/vite/commit/b627c50d359f3bd9b602408fbbf462cf4a2f019c"><code>b627c50</code></a> fix: backport <a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19761">#19761</a>, fs check in transform middleware (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19762">#19762</a>)</li> <li>See full diff in <a href="https://github.com/vitejs/vite/commits/v5.4.17/packages/vite">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/chatwoot/chatwoot/network/alerts). </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix: Prevent mentions menu from triggering on reply mode change (#11264) # Pull Request Template ## Description **Issue:** When typing "@" in reply mode and then switching to private note mode, the user mentions menu remains visible and cannot be dismissed. **Cause:** The Prose Mirror suggestion plugin for "@" was active in both reply modes (normal and private). When triggered in normal reply mode and then switching to private note mode, the menu would remain open and couldn't be dismissed. **Solution** ``` createSuggestionPlugin({ trigger: '@', showMenu: showUserMentions, searchTerm: mentionSearchKey, isAllowed: () => props.isPrivate, // Only allow @ mentions in private note mode }), ``` 1. By setting `isAllowed: () => props.isPrivate`, the @ mention trigger will only activate when in private note mode 2. In normal reply mode, the plugin won't activate at all since `isAllowed` returns false 3. This prevents the menu from being triggered in the wrong context and fix the scenario where the menu gets stuck. ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? ### Loom video **Before** https://www.loom.com/share/5333f0c6498d4a9ea4d220b1de1b608c?sid=1425f24f-2c6f-4ff5-aab3-23c3203d2e05 **After** https://www.loom.com/share/9f183c76d6a94b618a7c2aaed280b780?sid=19ef08b8-2b70-434b-ad5a-267410212e11 ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [ ] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules * chore: Update date range picker with new theme colors (#11267) * chore: Remove sorting by `phone_number` from contact list (#11271) * feat: allow role based filtering on the frontend (#11246) This pull request introduces frontend role filtering to allStatusChat getter. The key changes include the addition of a new helper function to get the user's role, updates to the conversation filtering logic to incorporate role and permissions, and the addition of unit tests for the new filtering logic. --------- Co-authored-by: Muhsin Keloth <[email protected]> * fix: Handle Instagram echo events (#11275) This PR fixes the issue with message creation when someone sends messages from the Instagram app instead of the Chatwoot dashboard. * fix: Return new Array instead of freezed object (#11283) Users who have not changed the order of the sidebar items were not able to change it as the object returned was created using Object.freeze To reproduce: - Create a new user account, open a conversation, try changing the order of the sidebar items. * feat: Handle instagram test service (#11244) This PR will handle the Instagram test events. We are using the last created Instagram channel as the test channel since we don't have any other channels for testing purposes at the time of Meta approval. https://github.com/user-attachments/assets/98302b7a-d72c-4950-9660-861a5e08d55f --------- Co-authored-by: Sivin Varghese <[email protected]> Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> Co-authored-by: Shivam Mishra <[email protected]> * chore: Centralize outgoing message reply restrictions for all the channels (#11279) * fix: use stricter validation to restrict gmail signups (#11285) - use stricter validation to restrict gmail signups * fix: Hide message status for failed and deleted messages (#11294) # Pull Request Template ## Description This PR fixes the issue where a clock with animation is shown inside the message bubble for failed and deleted messages. The message status is now hidden for such messages. ## Type of change Please delete options that are not relevant. - [x] Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? ### Before **Failed message bubble** <img width="223" alt="image" src="https://github.com/user-attachments/assets/bb4d7a34-4a1c-495a-9a3d-21d065bba020" /> **Deleted message bubble** <img width="223" alt="image" src="https://github.com/user-attachments/assets/ece8e2ff-c6d7-4fa7-b11c-04748bf9ea2d" /> ### After **Failed message bubble** <img width="223" alt="image" src="https://github.com/user-attachments/assets/6a6d81eb-52d9-48c3-bbc1-810b19770d61" /> **Deleted message bubble** <img width="223" alt="image" src="https://github.com/user-attachments/assets/828b553a-c88a-4a9e-9773-d75d76a9d0fd" /> ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules * feat: Use portal logo as favicon in helpcenter pages (#11289) - Added favicon link to portal layout when logo is present - Added tests to verify favicon behavior with and without logo * fix: Display error message on empty response from Captain (#11302) * fix: stale report value shown if summary fetch breaks (#11270) This pull request includes several changes to better show the report metrics fetching status on the dashboard. This also prevents showing stale data in case fetching summary fails due to timeout or other issue The most important changes include adding a new fetching status state to the store called `summaryFetchingStatus`, updating the `useReportMetrics` composable, and modifying the `ChartStats` component to handle different fetching statuses. #### Loading  #### Finished  #### Failed <img width="1512" alt="image" src="https://github.com/user-attachments/assets/d521a785-9299-4e59-94dc-561a7a84377e" /> --------- Co-authored-by: Muhsin Keloth <[email protected]> * feat: Move email attachments from links to file attachments (#11304) Add ability to send files as attachments instead of links Fixes: https://github.com/chatwoot/chatwoot/issues/1074 ## Changes - `emaily_reply` : We will attach the small attachments as attachments and large ones as links - `reply_with_summary`, `conversation_transcript`, `reply_with_out_summary` : We will change the attachment format to the following instead of the previous `View the attachment here` ``` Attachments: file_name file_name2 ``` --------- ref: https://github.com/chatwoot/chatwoot/pull/10318/files -> for fixing : https://github.com/chatwoot/chatwoot/pull/9655#issuecomment-2183962550 --------- Co-authored-by: Marco Marinho <[email protected]> Co-authored-by: Pranav <[email protected]> * chore: Increase the timeout to support slow SMTP servers (#10318) Converting https://github.com/chatwoot/chatwoot/issues/7802#issuecomment-2171005257 to a PR Co-authored-by: Nickson Yap <[email protected]> * fix: Emoji rendering issue with `<textarea/>` in chrome (#11312) # Pull Request Template ## Description This PR resolves a Chrome-specific rendering bug where emojis in the `<textarea>` of the reply box display a shadow or different color tone when placed at the start of the input without a leading space. **Solution:** Removed the border-radius from the textarea in the Reply box component, which resolves the rendering issue in Chrome **Cause:** This appears to be a Chrome rendering bug related to how border-radius is handled on form elements, especially with emojis. The exact cause is unclear, but there is some known issue [Chromium Issue 40333458](https://issues.chromium.org/issues/40333458) [Related Chromium Duplicates](https://issues.chromium.org/issues/40333458/dupes) ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? ### Screen recording **Before** https://github.com/user-attachments/assets/618de129-5631-4c7c-ab0b-7188b83c6bf1 **After** https://github.com/user-attachments/assets/bb3adcbe-e603-4792-a8fd-51501d284c78 ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [ ] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules * feat: Add warnings for existing instagram messenger channels (#11303) * chore: Update PDF file text color from ruby to slate (#11313) # Pull Request Template ## Description This PR includes updating the PDF text color from Ruby to Slate for improved readability ## How Has This Been Tested? ### Screenshots **Before** | Dark Mode | Light Mode | | ------------- | ------------- | | <img width="258" alt="image" src="https://github.com/user-attachments/assets/6124c69d-8bf1-47f3-9a06-eeb21dbedbb2" /> | <img width="258" alt="image" src="https://github.com/user-attachments/assets/d0f2b90b-6796-45ae-a02a-05c07246d25c" /> | **After** | Dark Mode | Light Mode | | ------------- | ------------- | | <img width="258" alt="image" src="https://github.com/user-attachments/assets/c0285062-83b6-49d5-bdb0-2aebf977cf74" /> | <img width="258" alt="image" src="https://github.com/user-attachments/assets/6b153d45-ee8d-42ac-a863-0fa8b294a21b" /> | ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [ ] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules * fix: email expand color (#11314) #### Before   #### After   * fix: Old Instagram inbox warnings (#11318) We have added warnings for existing Instagram messenger inboxes via https://github.com/chatwoot/chatwoot/pull/11303. There is an issue with finding the correct Instagram/messenger inbox. This PR will fixes that issue. * chore: Improve translation service with HTML and plain text support (#11305) # Pull Request Template ## Description This PR changes to translation to properly handle different content types during translation. ### Changes 1. **Email translation with HTML support** - Properly detects and preserves HTML content from emails - Sets `mime_type` to 'text/html' when HTML content is present 2. **Email translation with plain text support** - Falls back to email text content when HTML is not available - Sets `mime_type` to 'text/plain' when HTML is not available and content type includes 'text/plain' 3. **Plain message with plain text support (Non email channels)** - Sets `mime_type` to 'text/plain' for non-email channels - Fixes an issue where Markdown formatting was being lost due to incorrect `mime_type` **Note**: Translation for very long emails is not currently supported. Fixes https://linear.app/chatwoot/issue/CW-4244/translate-button-doesnt-work-in-email-channels ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) - [x] New feature (non-breaking change which adds functionality) ## How Has This Been Tested? **Loom video** https://www.loom.com/share/8f8428ed2cfe415ea5cb6c547c070f00?sid=eab9fa11-05f8-4838-9181-334bee1023c4 ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules * feat: Implement UI for Agent Bots in settings and remove CSML support (#11276) - Add agent bots management UI in settings with avatar upload - Enable agent bot configuration for all inbox types - Implement proper CRUD operations with webhook URL support - Fix agent bots menu item visibility in settings sidebar - Remove all CSML-related code and features - Add migration to convert existing CSML bots to webhook bots - Simplify agent bot model and services to focus on webhook bots - Improve UI to differentiate between system bots and account bots ## Video https://github.com/user-attachments/assets/3f4edbb7-b758-468c-8dd6-a9537b983f7d --------- Co-authored-by: iamsivin <[email protected]> Co-authored-by: Sivin Varghese <[email protected]> Co-authored-by: Muhsin Keloth <[email protected]> Co-authored-by: Pranav <[email protected]> * fix: Handle Instagram text and attachments as separate messages (#11315) When we send text with attachments on Instagram, Instagram treats text and attachments as separate messages. However, Chatwoot keeps them as a single message. Since Instagram sends echo events for each message, this can create duplicate messages in Chatwoot. To prevent this, we will send text and attachments as separate messages. --------- Co-authored-by: Pranav <[email protected]> * chore: deprecate report_v4 feature flag and remove gating logic (#11320) - deprecated report_v4 feature flag - remove the gating logic so new reports is available by default - make search_with_gin an internal feature flag * chore: Enable chatwoot_v4 feature flag by default for accounts (#11321) - Updates ACCOUNT_LEVEL_FEATURE_DEFAULTS installation config to enable chatwoot_v4 - Enables chatwoot_v4 for all existing accounts in batches of 100 - Clears GlobalConfig cache after update * chore: Move Instagram channel feature to GA (#11323) - Move instagram channel from `internal` to general availability * Bump version to 4.1.0 * fix: disable work email validation when creating an account * fix: create user with any valid email address * fix: change brand email,name and url with default * fix: text change from chatwoot to cruise control * fix: CRUISE-89: replace chatwoot domain with courier. cruise control domain (#5) * fix: replace chatwoot domain with cruise control * fix: replaced www.chatwoot.com with getcruisecontrol.com & www.app.chatwoot.com with courier.getcruisecontrol.com * fix: replaced chatwoot doamin & subdomain with cruise control. * fix: copilot comments resolved. * fix: broken test case of pricing --------- Co-authored-by: Muhammad <[email protected]> * fix: CRUISE-97 - enable installation configs setting for edits for disable help center/integration settings and disable captain & stripe page from code-base (#4) * CRUISE-97: disable help center, integration, captain & stripe page in order to launch * remove repeated code. * fix: removed upgrad btn action from admin setting on paid features --------- Co-authored-by: Muhammad <[email protected]> * fix: CRUISE-87: replaced chatwoot text with cruise control (#6) * fix: http replaced with https. * fix: replaced chatwoot doamin * fix: copilot comments resolved * fix: broken test case * fix: broken test fixed --------- Co-authored-by: Muhammad <[email protected]> * fix: CRUISE-130-93: replaced chatwoot assets & logo with cruise control (#7) * fix: replace brand assets with Cruise Control * fix: replace hard code brand name with cruise control * fix: installation config update for all keys * fix: curise control favicons added --------- Co-authored-by: Muhammad <[email protected]> * fix: resolved issues with failed specs --------- Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: Sojan <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Shivam Mishra <[email protected]> Co-authored-by: Muhsin Keloth <[email protected]> Co-authored-by: Pranav <[email protected]> Co-authored-by: Sivin Varghese <[email protected]> Co-authored-by: Pranav <[email protected]> Co-authored-by: Petterson <[email protected]> Co-authored-by: Vishnu Narayanan <[email protected]> Co-authored-by: Pranjal Kushwaha <[email protected]> Co-authored-by: Sojan Jose <[email protected]> Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> Co-authored-by: Bruno Shiohei <[email protected]> Co-authored-by: Marco Marinho <[email protected]> Co-authored-by: Nickson Yap <[email protected]> Co-authored-by: iamsivin <[email protected]> Co-authored-by: Muhammad <[email protected]>
grender
pushed a commit
to rentoplan/chatwoot
that referenced
this pull request
May 15, 2025
) Converting chatwoot#7802 (comment) to a PR Co-authored-by: Nickson Yap <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Converting #7802 (comment) to a PR