diff --git a/app/javascript/portal/portalHelpers.js b/app/javascript/portal/portalHelpers.js index 68e2cb6a8..bed50387e 100644 --- a/app/javascript/portal/portalHelpers.js +++ b/app/javascript/portal/portalHelpers.js @@ -2,6 +2,7 @@ import { createApp } from 'vue'; import VueDOMPurifyHTML from 'vue-dompurify-html'; import { domPurifyConfig } from '../shared/helpers/HTMLSanitizer'; import { directive as onClickaway } from 'vue3-click-away'; +import { isSameHost } from '@chatwoot/utils'; import slugifyWithCounter from '@sindresorhus/slugify'; import PublicArticleSearch from './components/PublicArticleSearch.vue'; @@ -25,52 +26,6 @@ export const getHeadingsfromTheArticle = () => { return rows; }; -/** - * Converts various input formats to URL objects. - * Handles URL objects, domain strings, relative paths, and full URLs. - * @param {string|URL} input - Input to convert to URL object - * @returns {URL|null} URL object or null if input is invalid - */ -const toURL = input => { - if (!input) return null; - if (input instanceof URL) return input; - - if ( - typeof input === 'string' && - !input.includes('://') && - !input.startsWith('/') - ) { - return new URL(`https://${input}`); - } - - if (typeof input === 'string' && input.startsWith('/')) { - return new URL(input, window.location.origin); - } - - return new URL(input); -}; - -/** - * Determines if two URLs belong to the same host by comparing their normalized URL objects. - * Handles various input formats including URL objects, domain strings, relative paths, and full URLs. - * Returns false if either URL cannot be parsed or normalized. - * @param {string|URL} url1 - First URL to compare - * @param {string|URL} url2 - Second URL to compare - * @returns {boolean} True if both URLs have the same host, false otherwise - */ -const isSameHost = (url1, url2) => { - try { - const urlObj1 = toURL(url1); - const urlObj2 = toURL(url2); - - if (!urlObj1 || !urlObj2) return false; - - return urlObj1.hostname === urlObj2.hostname; - } catch (error) { - return false; - } -}; - export const openExternalLinksInNewTab = () => { const { customDomain, hostURL } = window.portalConfig; const isOnArticlePage = diff --git a/package.json b/package.json index 90b7708f6..6280ec7fd 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@breezystack/lamejs": "^1.2.7", "@chatwoot/ninja-keys": "1.2.3", "@chatwoot/prosemirror-schema": "1.1.1-next", - "@chatwoot/utils": "^0.0.43", + "@chatwoot/utils": "^0.0.45", "@formkit/core": "^1.6.7", "@formkit/vue": "^1.6.7", "@hcaptcha/vue3-hcaptcha": "^1.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index af7703fc6..606ebbb63 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,8 +23,8 @@ importers: specifier: 1.1.1-next version: 1.1.1-next '@chatwoot/utils': - specifier: ^0.0.43 - version: 0.0.43 + specifier: ^0.0.45 + version: 0.0.45 '@formkit/core': specifier: ^1.6.7 version: 1.6.7 @@ -406,8 +406,8 @@ packages: '@chatwoot/prosemirror-schema@1.1.1-next': resolution: {integrity: sha512-/M2qZ+ZF7GlQNt1riwVP499fvp3hxSqd5iy8hxyF9pkj9qQ+OKYn5JK+v3qwwqQY3IxhmNOn1Lp6tm7vstrd9Q==} - '@chatwoot/utils@0.0.43': - resolution: {integrity: sha512-kMIXAGebCak9qOi68QnGer+rQLLo/z2N9cR+7tvGdZCW0ThDiVCF7JbHYHVDlYsdDFIx0FLlyIdCfEbooVT2Dw==} + '@chatwoot/utils@0.0.45': + resolution: {integrity: sha512-zqmuri6MrEFAY1tLv7Z3HBy4Ig60LhSrLkEiHegVsOVSxPv4Bedq+xmAW7LphvcLNgbkkvu17MU91gvMVlpEHw==} engines: {node: '>=10'} '@codemirror/commands@6.7.0': @@ -5255,7 +5255,7 @@ snapshots: prosemirror-utils: 1.2.2(prosemirror-model@1.22.3)(prosemirror-state@1.4.3) prosemirror-view: 1.34.1 - '@chatwoot/utils@0.0.43': + '@chatwoot/utils@0.0.45': dependencies: date-fns: 2.30.0