shell bypass 403
import apiFetch from '@wordpress/api-fetch';
import { decodeEntities } from '@wordpress/html-entities';
import { safeParseJson } from '@shared/lib/parsing';
const { hostname } = window.location;
let { devbuild, siteTitle, wpLanguage } = window.extSharedData;
const {
showBanner,
showTask,
searchUrl,
showSecondaryBanner,
showSecondaryTask,
stagingSites,
} = window.extAssistData?.domainsSuggestionSettings || {};
const hasDomains =
(safeParseJson(window.extSharedData.resourceData)?.domains || [])?.length > 0;
const domainByLanguage = (lang, urlList) => {
try {
const urls = JSON.parse(decodeEntities(urlList));
return urls[lang] ?? urls['default'];
} catch (e) {
return decodeEntities(urlList) || false;
}
};
export const domainSearchUrl =
devbuild && !searchUrl
? 'https://extendify.com?s={DOMAIN}'
: domainByLanguage(wpLanguage, searchUrl);
const isStagingDomain =
stagingSites.filter((l) => hostname.toLowerCase().includes(l))?.length > 0 ||
false;
// Show if it's not a staging domain, has a title, and is enabled
export const showDomainBanner = (() => {
if (devbuild) return true;
if (!showBanner) return false;
if (!hasDomains) return false;
if (!siteTitle) return false;
return isStagingDomain;
})();
// Show if it's not a staging domain, has a title, and is enabled
export const showDomainTask = (() => {
if (devbuild) return true;
if (!showTask) return false;
if (!hasDomains) return false;
if (!siteTitle) return false;
return isStagingDomain;
})();
// Show if it's a staging domain, has a title, and is enabled
export const showSecondaryDomainBanner = (() => {
if (devbuild) return true;
if (!showSecondaryBanner) return false;
if (!hasDomains) return false;
if (!siteTitle) return false;
return !isStagingDomain;
})();
// Show if it's a staging domain, has a title, and is enabled
export const showSecondaryDomainTask = (() => {
if (devbuild) return true;
if (!showSecondaryTask) return false;
if (!hasDomains) return false;
if (!siteTitle) return false;
return !isStagingDomain;
})();
/**
* The domainSearchUrl may contain both {SLD} and {TLD} placeholders
* e.g., https://example.com?sld={SLD}&tld={TLD}
* If not present, fallback to {DOMAIN} format
*/
export const createDomainUrlLink = (domainSearchUrl, domain) => {
if (domainSearchUrl.includes('{SLD}') && domainSearchUrl.includes('{TLD}')) {
const parts = domain.toLowerCase().split('.');
const sld = parts[0];
const tld = parts.slice(1).join('.');
return domainSearchUrl.replace('{SLD}', sld).replace('{TLD}', `.${tld}`);
}
return domainSearchUrl.replace('{DOMAIN}', domain.toLowerCase());
};
export const deleteDomainCache = () =>
apiFetch({
path: 'extendify/v1/assist/delete-domains-recommendations',
method: 'POST',
});