1import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{t}from"./react-C21x__mS.js";import{o as n,s as r}from"./router-compat-DcKLGzFG.js";import{t as i}from"./jsx-runtime-BdxMnOeJ.js";import{n as a}from"./client-DAqB3ZqH.js";import{t as o}from"./locale-scope-D9-rJXyN.js";var s=e(t(),1),c=`https://jskxtkkiydobeoqegrxa.supabase.co/functions/v1/public-read-cache`,l=`public-read-cache:`;function u(e,t){let n=new URLSearchParams({type:e,lang:o()});return Object.entries(t).forEach(([e,t])=>{t!==void 0&&t!==``&&n.set(e,t)}),`${c}?${n.toString()}`}function d(e){return`${l}${e}`}function f(e,t){if(!(typeof localStorage>`u`))try{localStorage.setItem(d(e),JSON.stringify({at:Date.now(),payload:t}))}catch{}}async function p(e,t={},n={}){let r=u(e,n.refresh?{...t,refresh:`1`}:t);try{let n=await fetch(r,{headers:{Accept:`application/json`,"Accept-Language":o(),apikey:`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Impza3h0a2tpeWRvYmVvcWVncnhhIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDIxMzM5NTYsImV4cCI6MjA1NzcwOTk1Nn0.mg_gLqmQweQCFa6AdXtpsY-eTf7Z5roPPOmtntF4m60`}});if(!n.ok)return null;let i=await n.json();return f(u(e,t),i),i}catch{return null}}var m=`multisite_sites`,h=()=>{try{if(typeof window>`u`)return[];let e=localStorage.getItem(m);if(e)return JSON.parse(e).map(e=>({...e,themes:e.themes||[],dnsStatus:e.dnsStatus||`ok`,cloudflareStatus:e.cloudflareStatus||`ok`}))}catch(e){console.error(`Error loading sites from storage:`,e)}return[]},g=e=>{try{let t=JSON.stringify(e);localStorage.setItem(m,t),localStorage.setItem(`multisite_sites_backup`,JSON.stringify({savedAt:new Date().toISOString(),sites:e}))}catch(e){console.error(`Error saving sites to storage:`,e)}},_=e=>({id:e.id,name:e.name,url:e.url,path:e.path,templateId:e.template_id,isMaster:!!e.is_master,themes:e.themes||[],pageWidth:e.page_width??void 0,defaultAuthorId:e.default_author_id??void 0,seoTitle:e.seo_title??void 0,seoDescription:e.seo_description??void 0,seoAuthor:e.seo_author??void 0,passwordProtection:e.password_protection?{enabled:!!e.password_protection.enabled,password:``}:{enabled:!1,password:``},dnsConfig:e.dns_config??void 0,dnsStatus:e.dns_status??`ok`,cloudflareStatus:e.cloudflare_status??`ok`,cloudflareAccountId:e.cloudflare_account_id??void 0,cloudflareZoneId:e.cloudflare_zone_id??void 0,deletionStatus:e.deletion_status??`active`,deletionRequestedAt:e.deletion_requested_at??void 0,deletionRequestedBy:e.deletion_requested_by??void 0,deletionScheduledFor:e.deletion_scheduled_for??void 0,deletionConfirmed:e.deletion_confirmed??void 0,deletionWarningsSent:e.deletion_warnings_sent??void 0,enabledSections:e.enabled_sections??void 0,adminGateway:e.admin_gateway?{enabled:!!e.admin_gateway.enabled,managerIds:Array.isArray(e.admin_gateway.managerIds)?e.admin_gateway.managerIds:[]}:void 0,boosteemEnabled:!!e.boosteem_enabled,createdAt:e.created_at,updatedAt:e.updated_at}),v=e=>({id:e.id,name:e.name,url:e.url,path:e.path,template_id:e.templateId||`default`,is_master:!!e.isMaster,themes:e.themes||[],page_width:e.pageWidth??null,default_author_id:e.defaultAuthorId??null,seo_title:e.seoTitle??null,seo_description:e.seoDescription??null,seo_author:e.seoAuthor??null,password_protection:{enabled:!!e.passwordProtection?.enabled},dns_config:e.dnsConfig??null,dns_status:e.dnsStatus??`ok`,cloudflare_status:e.cloudflareStatus??`ok`,cloudflare_account_id:e.cloudflareAccountId??null,cloudflare_zone_id:e.cloudflareZoneId??null,deletion_status:e.deletionStatus??`active`,deletion_requested_at:e.deletionRequestedAt??null,deletion_requested_by:e.deletionRequestedBy??null,deletion_scheduled_for:e.deletionScheduledFor??null,deletion_confirmed:e.deletionConfirmed??null,deletion_warnings_sent:e.deletionWarningsSent??null,enabled_sections:e.enabledSections??null,admin_gateway:e.adminGateway?{enabled:!!e.adminGateway.enabled,managerIds:Array.isArray(e.adminGateway.managerIds)?e.adminGateway.managerIds:[]}:null,boosteem_enabled:!!e.boosteemEnabled}),y=async()=>{try{let{data:e,error:t}=await a.from(`multisite_sites`).select(`*`).order(`created_at`,{ascending:!0});return t?(console.error(`[multisite] fetchSitesFromSupabase error:`,t),null):(e??[]).map(_)}catch(e){return console.error(`[multisite] fetchSitesFromSupabase exception:`,e),null}},b=async()=>{try{let{data:e,error:t}=await a.rpc(`get_master_site`);if(t)return console.error(`[multisite] fetchMasterSite error:`,t),null;let n=e??[];return n[0]?_(n[0]):null}catch(e){return console.error(`[multisite] fetchMasterSite exception:`,e),null}},x=async e=>{try{let t=await p(`site-by-hostname`,{hostname:e});if(t)return t.site?_(t.site):null;let{data:n,error:r}=await a.rpc(`get_site_by_hostname`,{p_hostname:e});if(r)return console.error(`[multisite] fetchSiteByHostname error:`,r),null;let i=n??[];return i.length===0?null:_(i[0])}catch(e){return console.error(`[multisite] fetchSiteByHostname exception:`,e),null}},S=async e=>{try{let{data:t}=await a.auth.getUser();if(!t?.user)return;let{error:n}=await a.from(`multisite_sites`).upsert(v(e),{onConflict:`id`});if(n){if(n.code===`42501`)return;console.error(`[multisite] upsertSiteToSupabase error:`,n,e.id)}}catch(e){console.error(`[multisite] upsertSiteToSupabase exception:`,e)}},C=async e=>{try{let{error:t}=await a.from(`multisite_sites`).delete().eq(`id`,e);t&&console.error(`[multisite] deleteSiteFromSupabase error:`,t,e)}catch(e){console.error(`[multisite] deleteSiteFromSupabase exception:`,e)}},w=[`/multisite`,`/auth`,`/test-editor`,`/templates`];function T(e){let t=e.toLowerCase();return t!==`localhost`&&t!==`127.0.0.1`&&!t.endsWith(`.lovable.app`)&&!t.endsWith(`.lovableproject.com`)}function E(e){if(!e)return null;let t=e.trim().toLowerCase();if(t.startsWith(`http://`)||t.startsWith(`https://`))try{t=new URL(t).hostname}catch{return null}return t.split(`/`)[0]?.replace(/^www\./,``)||null}function D(e){let{sites:t,pathname:n,hostname:r}=e,i=T(r);if(w.some(e=>n.startsWith(e)))return{site:null,isCustomDomain:!1};if(i){let e=E(r),n=t.find(t=>[t.url,t.dnsConfig?.customDomain,t.path.includes(`.`)?t.path:void 0].some(t=>E(t)===e))??null;return{site:n,isCustomDomain:n!==null}}let a=n.split(`/`)[1];return{site:t.find(e=>a&&e.path===a)??t.find(e=>e.isMaster)??null,isCustomDomain:!1}}function O(e,t){return e?.id===t.id&&e.updatedAt===t.updatedAt}var k=i(),A=(0,s.createContext)(void 0),j=({children:e})=>
1{let[t,i]=(0,s.useState)(h),[o,c]=(0,s.useState)(()=>{if(typeof window>`u`)return[];let e=localStorage.getItem(`multisite-themes`);return e?JSON.parse(e):[]}),[l,u]=(0,s.useState)(!1),d=n(),f=r(),p=d.pathname.startsWith(`/multisite`),m=d.pathname===`/admin`||d.pathname.includes(`/admin/`),_=p||m;(0,s.useEffect)(()=>{_&&g(t)},[t,_]),(0,s.useEffect)(()=>{let e=!1,t=window.location.hostname.toLowerCase();T(t)?(async()=>{let n=await x(t);e||(n&&i(e=>e.some(e=>e.id===n.id)?O(e.find(e=>e.id===n.id),n)?e:e.map(e=>e.id===n.id?n:e):[...e,n]),u(!0))})():(async()=>{let t=window.location.pathname.split(`/`)[1]||``,n=(t.includes(`.`)?await x(t):null)??await b();if(e||(i(e=>{let t=new Map;n&&t.set(n.id,n);for(let n of e)t.has(n.id)||t.set(n.id,n);let r=Array.from(t.values()).map(e=>({...e,isMaster:n?e.id===n.id:e.isMaster}));return e.length===r.length&&r.every((t,n)=>O(e[n],t)&&e[n]?.isMaster===t.isMaster)?e:r}),u(!0),!_))return;let{data:r}=await a.auth.getUser();if(e||!r.user)return;let o=await y();e||!o||i(o)})();let n=setTimeout(()=>{e||u(!0)},3e3);return()=>{e=!0,clearTimeout(n)}},[_]),(0,s.useEffect)(()=>{localStorage.setItem(`multisite-themes`,JSON.stringify(o))},[o]),(0,s.useEffect)(()=>{let e=!1;return(async()=>{if(!_)return;let{data:t}=await a.auth.getUser();if(e||!t.user)return;let{data:n,error:r}=await a.from(`multisite_themes`).select(`name`).order(`name`);if(e||r||!n)return;let i=n.map(e=>e.name);c(e=>{let t=new Set(i);for(let n of e)t.add(n);let n=Array.from(t).sort(),r=new Set(i);for(let t of e)r.has(t)||a.from(`multisite_themes`).insert({name:t}).then(({error:e})=>{e&&e.code!==`42501`&&console.error(`[multisite] insert theme error:`,e)});return n})})(),()=>{e=!0}},[_]),(0,s.useEffect)(()=>{if(!l||!_)return;let e=new Set;for(let n of t)for(let t of n.themes||[]){let n=(t||``).trim();n&&e.add(n)}e.size!==0&&c(t=>{let n=new Set(t),r=!1;for(let t of e)n.has(t)||(n.add(t),r=!0);return r?Array.from(n).sort():t})},[t,l,_]);let{currentSite:v,isCustomDomain:w,loading:E}=(0,s.useMemo)(()=>{if(!l||typeof window>`u`)return{currentSite:null,isCustomDomain:!1,loading:!0};let e=D({sites:t,pathname:d.pathname,hostname:window.location.hostname});return{currentSite:e.site,isCustomDomain:e.isCustomDomain,loading:!1}},[d.pathname,t,l]),j=e=>{let n=t.find(t=>t.id===e);if(n){let e=d.pathname,t=v?`/${v.path}`:``,r=``;r=v&&e.startsWith(t)&&e.substring(t.length)||`/`,f(`/${n.path}${r}`)}},M=e=>{let t={...e,id:Date.now().toString()};return i(e=>{let n=[...e,t];return g(n),n}),S(t),t.id},N=e=>{i(t=>t.find(t=>t.id===e)?.isMaster?(console.error(`Cannot remove the master site`),t):t.filter(t=>t.id!==e)),C(e)},P=(e,t)=>{i(n=>{let r=n.map(n=>n.id===e?{...n,...t,updatedAt:new Date().toISOString()}:n),i=r.find(t=>t.id===e);return i&&S(i),r})},F=e=>{i(t=>{let n=t.map(t=>({...t,isMaster:t.id===e,updatedAt:t.id===e?new Date().toISOString():t.updatedAt}));return(async()=>{let r=n.filter(e=>!e.isMaster&&t.find(t=>t.id===e.id)?.isMaster);for(let e of r)await S(e);let i=n.find(t=>t.id===e);i&&await S(i)})(),n})},I=e=>t.find(t=>t.id===e),L=e=>{let t=e.trim();t&&!o.includes(t)&&(c(e=>[...e,t].sort()),a.from(`multisite_themes`).insert({name:t}))},R=(e,n)=>{let r=n.trim();!r||r===e||(c(t=>t.map(t=>t===e?r:t).sort()),i(t=>t.map(t=>({...t,themes:t.themes?.map(t=>t===e?r:t),updatedAt:t.themes?.includes(e)?new Date().toISOString():t.updatedAt}))),(async()=>{await a.from(`multisite_themes`).update({name:r}).eq(`name`,e);let n=t.filter(t=>(t.themes||[]).includes(e));for(let t of n)await S({...t,themes:(t.themes||[]).map(t=>t===e?r:t)})})())},z=e=>{c(t=>t.filter(t=>t!==e)),i(t=>t.map(t=>({...t,themes:t.themes?.filter(t=>t!==e),updatedAt:t.themes?.includes(e)?new Date().toISOString():t.updatedAt}))),(async()=>{await a.from(`multisite_themes`).delete().eq(`name`,e);let n=t.filter(t=>(t.themes||[]).includes(e));for(let t of n)await S({...t,themes:(t.themes||[]).filter(t=>t!==e)})})()},B=()=>{try{let e=localStorage.getItem(`multisite_sites_backup`);if(e){let{sites:t}=JSON.parse(e);return i(t),!0}return!1}catch(e){return console.error(`Error restoring sites from backup:`,e),!1}},V=(e,n)=>{let r=t.find(t=>
1t.id===e);if(!r||r.isMaster){console.error(`Cannot delete master site`);return}let a=new Date,o=new Date(a);o.setDate(o.getDate()+30),i(t=>t.map(t=>t.id===e?{...t,deletionStatus:`pending_deletion`,deletionRequestedAt:a.toISOString(),deletionRequestedBy:n,deletionScheduledFor:o.toISOString(),deletionConfirmed:!1,deletionWarningsSent:{day7:!1,day3:!1,day1:!1}}:t)),console.log(`Site marked for deletion:`,r.name)},H=e=>{i(t=>t.map(t=>t.id===e?{...t,deletionConfirmed:!0}:t)),console.log(`Site deletion confirmed:`,e)},U=e=>{i(t=>t.map(t=>t.id===e?{...t,deletionStatus:`active`,deletionRequestedAt:void 0,deletionRequestedBy:void 0,deletionScheduledFor:void 0,deletionConfirmed:void 0,deletionWarningsSent:void 0}:t)),console.log(`Site deletion cancelled:`,e)},W=e=>{let n=t.find(t=>t.id===e);i(t=>t.filter(t=>t.id!==e)),C(e);try{localStorage.removeItem(`blog_posts_${e}`),localStorage.removeItem(`blog_categories_${e}`),localStorage.removeItem(`blog_tags_${e}`),localStorage.removeItem(`site_auth_${n?.path}`)}catch(e){console.error(`Error cleaning site data:`,e)}console.log(`Site permanently deleted:`,n?.name)},G=(0,s.useMemo)(()=>({currentSite:v,sites:t,themes:o,loading:E,isCustomDomain:w,switchSite:j,addSite:M,removeSite:N,updateSite:P,setMasterSite:F,getSiteById:I,addTheme:L,renameTheme:R,removeTheme:z,restoreSitesFromBackup:B,requestSiteDeletion:V,confirmSiteDeletion:H,cancelSiteDeletion:U,permanentlyDeleteSite:W}),[v,t,o,E,w]);return(0,k.jsx)(A.Provider,{value:G,children:e})},M=()=>{let e=(0,s.useContext)(A);if(e===void 0)throw Error(`useMultisite must be used within a MultisiteProvider`);return e};export{j as n,p as r,M as t};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.