1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[11063],{1751:(e,t,a)=>{a.d(t,{y:()=>n});async function n(e,t){let a=await e();try{await t(a)}catch(e){throw Object.assign(Error("Your account was created, but the verification email could not be sent. Please resend it from the verification page."),{code:"registration/verification-email-failed",cause:e,uid:a.uid})}return a.uid}},34145:(e,t,a)=>{function n(e){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g," ").trim().replace(/\s+/g," ")}function r(e){return{searchName:n(e),searchGrams:function(e){let t=n(e);if(t.length<3)return[];let a=new Set;for(let e=0;e<=t.length-3;e++)a.add(t.slice(e,e+3));return Array.from(a)}(e),searchIndexVersion:1}}a.d(t,{kK:()=>r})},35579:(e,t,a)=>{a.d(t,{b:()=>n,s:()=>r});let n=50,r=3},71753:(e,t,a)=>{a.r(t),a.d(t,{addAsset:()=>eI,addData:()=>o.addData,addDocument:()=>o.addDocument,addFolder:()=>ep,addNewMediaAsset:()=>t1,addOrganization:()=>er,addProject:()=>eF,addTeam:()=>ec,addUser:()=>m,auth:()=>o.auth,authStateChanged:()=>af,buildPublicProfile:()=>aX,canPromptAssistant:()=>V,checkIsSignInWithEmailLink:()=>na,collectionsSettings:()=>o.collectionsSettings,completeEmailLinkSignIn:()=>nn,completeGoogleRedirect:()=>ar,copyProjectAssets:()=>aB,createAssetMetadata:()=>aA,createMarketplaceListing:()=>aW,createNewFolder:()=>tb,createNewOrganization:()=>tC,createNewProject:()=>tE,createNewTeam:()=>tD,createUserProfileForEmailLink:()=>a5,createVirtualFolder:()=>aS,db:()=>o.db,decodeJson:()=>ag,deleteAsset:()=>eE,deleteAssetComponent:()=>eZ,deleteAssetFont:()=>eJ,deleteAssetMedia:()=>eL,deleteAssetMetadata:()=>aP,deleteAssetMetadataChecked:()=>aD,deleteAssetsFontFolder:()=>eH,deleteBackup:()=>tc,deleteCMS:()=>tA,deleteExport:()=>to,deleteFMOfile:()=>tt,deleteFile:()=>o.deleteFile,deleteMarketplaceListing:()=>aq,deleteMediaGenBackup:()=>tg,deleteMediaGenFlowState:()=>th,deleteMultipleAssetsFonts:()=>eK,deletePreviewImage:()=>e3,deleteProjectFromAllConnectedUsers:()=>eP,deleteVirtualFolder:()=>a$,editFolderAlways:()=>em,editFolderBasic:()=>eg,editOrganizationAlways:()=>eo,editOrganizationBasic:()=>ei,editProjectAlways:()=>ej,editProjectBasic:()=>eA,editTeamAlways:()=>ed,editTeamBasic:()=>eu,editUserAlways:()=>h,editUserBasic:()=>y,encodeJson:()=>ap,finalizeTotpEnrollment:()=>a6,findAssetMetadataByField:()=>aT,generateTotpSecret:()=>a7,getAiCreditBalance:()=>G,getAiPlan:()=>am,getAllAssetMetadata:()=>av,getAllAssetsFromOrganization:()=>eO,getAllBackups:()=>td,getAllComponents:()=>e1,getAllFonts:()=>eY,getAllMedia:()=>eV,getAllMediaFromFolder:()=>t8,getAllMediaGenBackups:()=>tw,getAllVirtualFolders:()=>az,getAsset:()=>e$,getAssetComponent:()=>e0,getAssetFont:()=>eQ,getAssetMedia:()=>eG,getAssetMetadataForProject:()=>ak,getAssetMetadataPage:()=>aC,getBackup:()=>tu,getCMS:()=>tj,getCanAddCustomDomainSimple:()=>t0,getCanAddCustomDomainWordpress:()=>tZ,getCanCreateProject:()=>x,getCommunityProfile:()=>aY,getCurrentCloudExportSeconds:()=>Q,getCurrentTotalAiCredits:()=>I,getCurrentUserIdToken:()=>g,getDashboardProjectSearchSnapshots:()=>v,getDashboardUserPage:()=>P,getEnrolledFactors:()=>a8,getExport:()=>tl,getFMOfile:()=>ta,getFMOfileMetadata:()=>tn,getFile:()=>o.getFile,getFolder:()=>eh,getFolderData:()=>tP,getFolderProjects:()=>tz,getFolderProjectsPage:()=>tB,getMarketplaceConfig:()=>a4,getMarketplaceListing:()=>aL,getMarketplaceListings:()=>a_,getMarketplaceListingsByCreator:()=>aV,getMaxTotalAiCredits:()=>S,getMediaFolders:()=>t3,getMediaGenBackup:()=>tp,getMediaGenFlowStateUrl:()=>ty,getMediaGenProjectFmoMetadata:()=>te,getMediaGenProjectFmoUrl:()=>e2,getMediaProjectFolderIds:()=>t5,getMfaResolver:()=>a2,getOrganization:()=>es,getOrganizationData:()=>tk,getPreviewImage:()=>e5,getPreviewImageMetadata:()=>e9,getProject:()=>ev,getProjectData:()=>tQ,getProjectDomain:()=>tV,getProjectFreeDomain:()=>tR,getProjectHostingPlan:()=>ay,getProjectHostingState:()=>tK,getProjectWPCredentials:()=>tG,getPublicProfile:()=>aZ,getRootLevelMedia:()=>t9,getSellerDoc:()=>aQ,getStagingFolder:()=>ah,getTeam:()=>ew,getTeamData:()=>tv,getTeamFolders:()=>tS,getTeamProjects:()=>tI,getTeamProjectsPage:()=>t$,getUser:()=>A,getUserByEmail:()=>C,getUserProjectsPage:()=>D,getUserSimpleField:()=>O,getVirtualFoldersForProject:()=>aM,getWatermarkSimple:()=>tX,getWatermarkWordpress:()=>tY,incrementCloudExportSeconds:()=>Y,isInAppBrowser:()=>t2,isMobileBrowser:()=>ae,isUserMfaEnrolled:()=>a9,loginUser:()=>ac,loginUserWithGoogle:()=>au,logoutUser:()=>ad,migrateStorageAssetsToMetadata:()=>a3,moveProjectToFolder:()=>t_,multiFactor:()=>i.multiFactor,onAuthStateChanged:()=>i.onAuthStateChanged,persistProjectDashboardUpdatedAt:()=>eS,queryMarketplaceListings:()=>aG,recordMarketplaceTags:()=>ax,registerUser:()=>t6,registerUserWithGoogle:()=>al,removeFolder:()=>ey,removeOrganization:()=>el,removeProject:()=>eD,removeTeam:()=>ef,removeUser:()=>F,renameFolder:()=>tW,renameProject:()=>tx,renameTeam:()=>tO,resolveSignInWithTotp:()=>ne,saveCommunityProfile:()=>a1,searchMarketplaceTags:()=>aO,sendEmailSignInLink:()=>nt,sendEmailVerification:()=>aw,setDocument:()=>o.setDocument,setOperation:()=>o.setOperation,setUserSimpleField:()=>W,signOut:()=>i.signOut,storageBucket:()=>o.storageBucket,storagePathToDocId:()=>aF,storeDomain:()=>tq,storeFreeDomain:()=>tJ,storeHostingBilling:()=>tH,storeWPCredentials:()=>tL,sweepTempMedia:()=>t4,syncPublicProfile:()=>a0,touchFMOfile:()=>tr,touchPreviewImage:()=>e8,updateAssetMetadata:()=>aj,updateAssetMetadataBatch:()=>ab,updateCurrentAiCredits:()=>K,updateMarketplaceListing:()=>aR,updateProjectFile:()=>tN,updateVirtualFolder:()=>aI,uploadAsset:()=>ez,uploadAssetComponent:()=>eX,uploadAssetFont:()=>eR,uploadAssetMedia:()=>eW,uploadBackup:()=>ts,uploadCMS:()=>tF,uploadExport:()=>ti,uploadFMOfile:()=>e7,uploadFile:()=>o.uploadFile,uploadMarketplaceBundle:()=>aJ,uploadMarketplaceBundlePrivate:()=>aH,uploadMarketplaceThumbnail:()=>aK,uploadMediaGenBackup:()=>tf,uploadMediaGenFlowState:()=>tm,uploadMediaGenProjectFmo:()=>e6,uploadMultipleAssetsFonts:()=>eq,uploadMultipleAssetsMedia:()=>e_,uploadPreviewImage:()=>e4,writeProjectAssetDocs:()=>aE});var n=a(30928),r=a(99269),i=a(10044),o=a(61247),l=a(78951);if(78068==a.j)var s=a(34145);var c=a(94045);if(78068==a.j)var u=a(1751);var d=a(40207);function f(e){if(!e)throw Error("Wallet not found");let t=Number(e.maxTotalAiCredits),a=Number(e.currentTotalAiCredits??0),n=Number(e.reservedAiCredits??0);if(![t,a,n].every(e=>Number.isFinite(e)&&e>=0))throw Error("Invalid wallet balance");return{totalSparks:t,usedSparks:a,reservedSparks:n,availableSparks:Math.max(0,t-a-n)}}async function w(e,t){let a=await (0,r.getDocFromServer)((0,r.doc)(e,"users",t));return f(a.exists()?a.data():null)}async function p(e,t,a){return!!Number.isFinite(a)&&!(a<=0)&&(0,r.runTransaction)(e,async n=>{let i=(0,r.doc)(e,"users",t),o=await n.get(i),l=f(o.exists()?o.data():null);return!(a>l.availableSparks)&&(n.update(i,{currentTotalAiCredits:l.usedSparks+a}),!0)})}async function g(){let e=o.auth.currentUser;if(!e)return console.log("No user is currently logged in."),null;try{return await e.getIdToken()}catch(e){return console.error("Error getting ID token:",e),null}}async function m(e,t,a,n,r,i){await (0,o.addDocument)("user",e,t,a,n,r,i)}async function y(e,t,a,n,r,i){return await (0,o.editBasic)("user",e,t,a,n,r,i)}async function h(e,t,a,n,r,i){await (0,o.editAlways)("user",e,t,a,n,r,i)}async function F(e,t,a,n,r){await (0,o.removeDocument)("user",e,t,a,n,r)}async function A(e){return await (0,o.getData)("user","always",e,null,null,null,null)}async function j(e,t=48,a=null,n=null){let i=[];n?.field&&i.push((0,r.orderBy)(n.field,n.direction||"asc")),a&&i.push((0,r.startAfter)(a)),i.push((0,r.limit)(t));let l=await (0,r.getDocs)((0,r.query)((0,r.collection)(o.db,e),...i));return{results:l.docs.map(e=>e.data()),cursor:l.docs.at(-1)||null,done:l.docs.length<t}}async function b(e,t=48,a=null,n=null){let r=a?.dashboardPhase||"updated",i=a?.dashboardCursor||null,o=[];if("updated"===r){let a=await j(e,t,i,{field:"dashboardUpdatedAt",direction:"desc"});if(a.results.length===t)return{results:a.results,cursor:{dashboardPhase:"updated",dashboardCursor:a.cursor},done:!1};o=a.results}let l="legacy"===r?i:null,s=Math.max(1,t-o.length);for(;;){let t=await j(e,s,l,n),a=t.results.filter(e=>{var t;return!("number"==typeof(t=e?.dashboardUpdatedAt)?Number.isFinite(t)&&t>0:t instanceof Date?t.getTime()>0:t&&"function"==typeof t.toMillis?t.toMillis()>0:t&&"number"==typeof t.seconds?t.seconds>0:"string"==typeof t&&Number.isFinite(Date.parse(t)))});if(a.length>0||t.done)return{results:[...o,...a],cursor:t.cursor?{dashboardPhase:"legacy",dashboardCursor:t.cursor}:null,done:t.done};l=t.cursor}}async function P(e,t=48,a=null){let[n,i,l,s,c]=await Promise.all([(0,r.getDoc)((0,r.doc)(o.db,"users",e)),(0,o.getCollectionData)(`users/${e}/organizations`),(0,o.getCollectionData)(`users/${e}/teams`),(0,o.getCollectionData)(`users/${e}/folders`),b(`users/${e}/projects`,t,a,{field:"createdAt",direction:"desc"})]);return{data:{users:n.exists()?n.data():null,organizations:i,teams:l,folders:s,projects:c.results},cursor:c.cursor,done:c.done}}async function D(e,t=48,a=null){return b(`users/${e}/projects`,t,a,{field:"createdAt",direction:"desc"})}async function v(e,t=[],a=[]){let[n,r,i]=await Promise.all([(0,o.getCollectionData)(`users/${e}/projects`),Promise.all(t.map(e=>tI(e))),Promise.all(a.map(e=>tz(e)))]),l=new Map;
1return[n,...r,...i].flat().forEach(e=>{e?.id&&l.set(e.id,e)}),Array.from(l.values())}async function C(e){if(!e)return null;let t=String(e).trim(),a=t.toLowerCase();if(!a)return null;for(let e of a===t?[a]:[a,t])try{let t=await (0,r.getDocs)((0,r.query)((0,r.collection)(o.db,"users"),(0,r.where)("email","==",e),(0,r.limit)(1)));if(!t.empty)return{uid:t.docs[0].id,...t.docs[0].data()}}catch(e){console.error("getUserByEmail lookup failed:",e)}return null}async function k(e){return(await A(e)).users.maxNumberOfProjects}async function M(e){return(await A(e)).users.currentNumberOfProjects}let T={text:1,image:10,videoSecond:30};async function S(e){let t=(await A(e)).users.maxTotalAiCredits;return isNaN(t)&&(t=0),t}async function I(e){let t=(await A(e)).users.currentTotalAiCredits;return isNaN(t)&&(t=0),t}async function $(e){return(await A(e)).users.maxTextAiCredits}async function z(e){return(await A(e)).users.currentTextAiCredits}async function B(e){return(await A(e)).users.maxImageAiCredits}async function E(e){return(await A(e)).users.currentImageAiCredits}async function N(e){return(await A(e)).users.maxVideoAiCredits}async function U(e){return(await A(e)).users.currentVideoAiCredits}async function x(e){return!0}async function O(e,t){return(await A(e)).users[t]}async function W(e,t,a){await y(e,e,e,e,null,{[t]:a})}async function _(e,t){await y(e,e,e,e,null,{currentNumberOfProjects:t}),await L(e)}async function L(e){let t=await k(e),a=await M(e),n={canCreateProject:!0};console.log(n,t,a,t-a),await y(e,e,e,e,null,n)}async function G(e){return w(o.db,e)}async function V(e,t,a){let n=q(t,a);if(null===n)return!1;try{let t=await G(e);return n<=t.availableSparks}catch(e){return!1}}async function R(e,t){let a=null;try{a=await A(e)}catch(e){return{ok:!1,value:0}}if(!a||!a.users)return{ok:!1,value:0};let n=Number(a.users[t]);return{ok:!0,value:isNaN(n)?0:n}}function q(e,t){let a=Number(T[e])*Number(t);return isFinite(a)&&a>0?a:null}async function J(e,t){try{return await p(o.db,e,t)}catch(e){return console.warn("[credits] atomic wallet charge failed:",e),!1}}async function K(e,t,a){let n=q(t,a);if(null===n)return console.warn(`[credits] refusing to charge ${t} x ${a}: not a positive number`),!1;if(!await J(e,n))return!1;try{await H(e)}catch(e){console.warn("[credits] usage saved; availability flag refresh failed:",e)}try{if("text"===t){let t=await R(e,"currentTextAiCredits");t.ok&&await X(e,t.value+n)}else if("image"===t){let t=await R(e,"currentImageAiCredits");t.ok&&await ee(e,t.value+n)}else if("videoSecond"===t){let t=await R(e,"currentVideoAiCredits");t.ok&&await ea(e,t.value+n)}}catch(e){console.warn("[credits] total balance saved; type total refresh failed:",e)}return!0}async function H(e){let t=await G(e);await y(e,e,e,e,null,{canTotalAiCredits:t.availableSparks>0})}async function Q(e){let t=(await A(e)).users.currentCloudExportSeconds;return isNaN(t)&&(t=0),t}async function Y(e,t){let a=await Q(e)+t;return await y(e,e,e,e,null,{currentCloudExportSeconds:a}),a}async function X(e,t){await y(e,e,e,e,null,{currentTextAiCredits:t}),await Z(e)}async function Z(e){let t=await $(e),a=await z(e),n=t-a>0?{canTextAiCredits:!0}:{canTextAiCredits:!1};console.log(n,t,a,t-a),await y(e,e,e,e,null,n)}async function ee(e,t){await y(e,e,e,e,null,{currentImageAiCredits:t}),await et(e)}async function et(e){let t=await B(e),a=await E(e),n=t-a>0?{canImageAiCredits:!0}:{canImageAiCredits:!1};console.log(n,t,a,t-a),await y(e,e,e,e,null,n)}async function ea(e,t){await y(e,e,e,e,null,{currentVideoAiCredits:t}),await en(e)}async function en(e){let t=await N(e),a=await U(e),n=t-a>0?{canVideoAiCredits:!0}:{canVideoAiCredits:!1};console.log(n,t,a,t-a),await y(e,e,e,e,null,n)}async function er(e,t,a,n,r,i){await (0,o.addDocument)("organization",e,t,a,n,r,i)}async function ei(e,t,a,n,r,i){await (0,o.editBasic)("organization",e,t,a,n,r,i)}async function eo(e,t,a,n,r,i){await (0,o.editAlways)("organization",e,t,a,n,r,i)}async function el(e){await (0,o.removeDocument)("organization",e)}async function es(e){return await (0,o.getData)("organization","always",null,e,null,null,null)}async function ec(e,t,a,n,r,i){await (0,o.addDocument)("team",e,t,a,n,r,i)}async function eu(e,t,a,n,r,i){await (0,o.editBasic)("team",e,t,a,n,r,i)}async function ed(e,t,a,n,r,i){await (0,o.editAlways)("team",e,t,a,n,r,i)}async function ef(e){await (0,o.removeDocument)("team",e)}async function ew(e){return await (0,o.getData)("team","always",null,null,e,null,null)}async function ep(e,t,a,n,r,i){await (0,o.addDocument)("folder",e,t,a,n,r,i)}async function eg(e,t,a,n,r,i){await (0,o.editBasic)("folder",e,t,a,n,r,i)}async function em(e,t,a,n,r,i){await (0,o.editAlways)("folder",e,t,a,n,r,i)}async function ey(e){await (0,o.removeDocument)("folder",e)}async function eh(e){return await (0,o.getData)("folder","always",null,null,null,e,null)}async function eF(e,t,a,n,r,i){await (0,o.addDocument)("project",e,t,a,n,r,i)}async function eA(e,t,a,n,r,i){await (0,o.editBasic)("project",e,t,a,n,r,i)}async function ej(e,t,a,n,r,i){await (0,o.editAlways)("project",e,t,a,n,r,i)}async function eb(e){return await (0,o.getCollectionData)(`projects/${e}/users`)}
1async function eP(e){(await eb(e)).forEach(async t=>{console.log(t.id),await (0,o.deleteDocument)(`users/${t.id}/projects`,e)})}async function eD(e){let t=(await ev(e))?.projects;if(!t)return void console.warn(`removeProject: projects/${e} not found; skipping.`);let a=t.owner;if(a)try{let e=await M(a);await _(a,e-1)}catch(e){console.warn("removeProject: could not decrement owner's project count (non-fatal):",e)}await (0,o.removeDocument)("project",e)}async function ev(e){return await (0,o.getData)("project","always",null,null,null,null,e)}let eC=new Map;function ek(e){return e?.id&&e?.owner?{id:e.id,owner:e.owner,organization:e.organization??null,team:e.team??null,folder:e.folder??null}:null}function eM(e){let t=ek(e);return t&&eC.set(t.id,Promise.resolve(t)),t}async function eT(e){let t=eC.get(e);if(t)return t;let a=ev(e).then(e=>ek(e?.projects)).catch(()=>null);eC.set(e,a);let n=await a;return n||eC.delete(e),n}async function eS(e,t=Date.now(),a={}){let n="string"==typeof e?e:e?.id;if(!n||!Number.isFinite(t)||t<=0)return!1;let r=("object"==typeof e?eM(e):null)||await eT(n);return!!r&&(await ej(r.owner,r.organization,r.team,r.folder,n,{id:n,...a,dashboardUpdatedAt:t}),!0)}async function eI(e,t,a,n){await (0,o.setDocument)(`organizations/${t}/assets${e}`,a,n)}async function e$(e,t,a){return await (0,o.getDocument)(`organizations/${t}/assets${e}`,a)}async function ez(e,t,a,n){let r=await (0,o.pathToFiles)("asset",e,null,t,null,null,a);return await (0,o.uploadFile)(n,r,a)}async function eB(e,t,a,n){let r=await (0,o.pathToFiles)("asset",e,null,t,null,null,null);return console.log("folderName - ",n),await (0,o.uploadMultipleFiles)(a,r,n)}async function eE(e){return await (0,o.deleteFile)(e)}async function eN(e){return await (0,o.deleteAllFiles)(e)}async function eU(e,t,a){return await (0,o.deleteFolder)("asset",e,t,a)}async function ex(e,t,a){let n=await (0,o.pathToFiles)("asset",e,null,t,null,null,a);return await (0,o.getFile)(n,a)}async function eO(e){return"fix me"}async function eW(e,t,a){return await ez("media",e,t,a)}async function e_(e,t,a){return await eB("media",e,t,a)}async function eL(e,t){return await eE("media",e,t)}async function eG(e,t){return await ex("media",e,t)}async function eV(e){let t=await (0,o.getAllFiles)(`organizations/${e}/assets/media/`),a=[];for(let e of t.items){let t=await (0,n.getDownloadURL)(e);a.push(t)}return a}
1async function eR(e,t,a){return await ez("fonts",e,t,a)}async function eq(e,t,a){return await eB("fonts",e,t,a)}async function eJ(e){return await eE(e)}async function eK(e){return await eN(e)}async function eH(e,t){return await eU("fonts",e,t)}async function eQ(e,t){return await ex("fonts",e,t)}async function eY(e){return await (0,o.getAllFiles)(`organizations/${e}/assets/fonts`)}async function eX(e,t,a){return await ez("components",e,t,a)}async function eZ(e,t){return await eE("components",e,t)}async function e0(e,t){return await ex("components",e,t)}async function e1(e){return await (0,o.getAllFiles)(`organizations/${e}/assets/components`)}async function e4(e,t){if(!t||"number"!=typeof t.size||t.size<=0)return null;let a=await (0,o.pathToFiles)("project","main",null,null,null,e),n=await (0,o.uploadFile)(t,a,"previewImage.webp");if(n)try{await eS(e,Date.now(),{previewImageUrl:n,hasPreviewImage:!0})}catch(e){console.warn("previewImageUrl persist failed (thumbnail uploaded):",e)}return n}async function e3(e){let t=await (0,o.pathToFiles)("project","main",null,null,null,e),a=await (0,o.deleteFile)(t,"previewImage.webp");try{await eS(e,Date.now(),{previewImageUrl:"",hasPreviewImage:!1})}catch{}return a}async function e5(e){let t=await (0,o.pathToFiles)("project","main",null,null,null,e);return await (0,o.getFile)(t,"previewImage.webp")}async function e9(e){let t=await (0,o.pathToFiles)("project","main",null,null,null,e);return await (0,o.getFileMetadata)(t,"previewImage.webp")}async function e8(e){let t=await (0,o.pathToFiles)("project","main",null,null,null,e),a=await (0,o.touchFileMetadata)(t,"previewImage.webp");try{await eS(e)}catch{}return a}async function e7(e,t){let a=await (0,o.pathToFiles)("project","fmoFiles",null,null,null,e),n=await (0,o.uploadFileStrict)(t,a,"project.fmo","application/octet-stream");try{await eS(e)}catch{}return n}async function e6(e,t){let a=await (0,o.pathToFiles)("project","fmoFiles",null,null,null,e),n=await (0,o.uploadFileStrict)(t,a,"mediaGenProject.fmo","application/octet-stream");try{await eS(e)}catch{}return n}async function e2(e){let t=await (0,o.pathToFiles)("project","fmoFiles",null,null,null,e);return await (0,o.getFile)(t,"mediaGenProject.fmo")}async function te(e){let t=await (0,o.pathToFiles)("project","fmoFiles",null,null,null,e);return await (0,o.getFileMetadata)(t,"mediaGenProject.fmo")}async function tt(e,t){let a=await (0,o.pathToFiles)("project","fmoFiles",null,null,null,e);return await (0,o.deleteFile)(a,t)}async function ta(e,t){let a=await (0,o.pathToFiles)("project","fmoFiles",null,null,null,e);return await (0,o.getFile)(a,t)}async function tn(e,t){let a=await (0,o.pathToFiles)("project","fmoFiles",null,null,null,e);return await (0,o.getFileMetadata)(a,t)}async function tr(e){let t=await (0,o.pathToFiles)("project","fmoFiles",null,null,null,e);return await (0,o.touchFileMetadata)(t,"project.fmo")}async function ti(e,t,a){let n=await (0,o.pathToFiles)("project","exports",null,null,null,e);return await (0,o.uploadFile)(t,n,a)}async function to(e,t){let a=await (0,o.pathToFiles)("project","exports",null,null,null,e);return await (0,o.deleteFile)(a,t)}async function tl(e,t){let a=await (0,o.pathToFiles)("project","exports",null,null,null,e);return await (0,o.getFile)(a,t)}async function ts(e,t,a){let n=await (0,o.pathToFiles)("project","backups",null,null,null,e);return await (0,o.uploadFile)(t,n,a)}async function tc(e,t){let a=await (0,o.pathToFiles)("project","backups",null,null,null,e);return await (0,o.deleteFile)(a,t)}async function tu(e,t){let a=await (0,o.pathToFiles)("project","backups",null,null,null,e);return await (0,o.getFile)(a,t)}async function td(e){let t=await (0,o.pathToFiles)("project","backups",null,null,null,e);return await (0,o.getAllFiles)(t)}async function tf(e,t,a,n){let r=await (0,o.pathToFiles)("project","backups",null,null,null,e),i=`mg_${t}_${n}`;return await (0,o.uploadFile)(a,r,i)}async function tw(e,t){let a=await (0,o.pathToFiles)("project","backups",null,null,null,e),n=await (0,o.getAllFiles)(a),r=`mg_${t}_`;return{items:(n?.items||[]).filter(e=>e.name.startsWith(r)).map(e=>({...e,name:e.name.slice(r.length)}))}}async function tp(e,t,a){let n=await (0,o.pathToFiles)("project","backups",null,null,null,e),r=`mg_${t}_${a}`;return await (0,o.getFile)(n,r)}async function tg(e,t,a){let n=await (0,o.pathToFiles)("project","backups",null,null,null,e),r=`mg_${t}_${a}`;return await (0,o.deleteFile)(n,r)}async function tm(e,t,a){let n=await (0,o.pathToFiles)("project","backups",null,null,null,e);return await (0,o.uploadFile)(a,n,`mg_${t}_state.json`)}async function ty(e,t){let a=await (0,o.pathToFiles)("project","backups",null,null,null,e);return await (0,o.getFile)(a,`mg_${t}_state.json`)}async function th(e,t){let a=await (0,o.pathToFiles)("project","backups",null,null,null,e);return await (0,o.deleteFile)(a,`mg_${t}_state.json`)}async function tF(e,t,a){let n=await (0,o.pathToFiles)("project","CMS",null,null,null,e);return await (0,o.uploadFile)(t,n,a)}async function tA(e,t){let a=await (0,o.pathToFiles)("project","CMS",null,null,null,e);return await (0,o.deleteFile)(a,t)}
1async function tj(e,t){let a=await (0,o.pathToFiles)("project","CMS",null,null,null,e);return await (0,o.getFile)(a,t)}async function tb(e,t,a,n,r){let i={id:n,name:r,owner:e,createdAt:new Date,organization:t,team:a,status:"active"};return await ep(e,t,a,n,null,i),n}async function tP(e){return await eh(e)}async function tD(e,t,a,n){let r={id:a,name:n,owner:e,createdAt:new Date,organization:t,status:"active"};return await ec(e,t,a,null,null,r),a}async function tv(e){return await ew(e)}async function tC(e,t,a){let n={id:t,name:a,owner:e,createdAt:new Date,status:"active"};return await er(e,t,null,null,null,n),await (0,r.setDoc)((0,r.doc)(o.db,"organizations",t,"users",e),{id:e,role:"editor",owner:!0,addedAt:new Date}),t}async function tk(e){return await es(e)}async function tM(e){let t=await (0,o.getData)("project","basic",null,null,null,null,e);return t?.projects||null}async function tT(e){let t=await (0,o.getData)("folder","basic",null,null,null,e,null);return t?.folders||null}async function tS(e){let t=await (0,o.getCollectionData)(`teams/${e}/folders`);return(await Promise.all((t||[]).map(e=>tT(e.id).catch(()=>null)))).filter(Boolean)}async function tI(e){let t=await (0,o.getCollectionData)(`teams/${e}/projects`);return(await Promise.all((t||[]).map(e=>tM(e.id).catch(()=>null)))).filter(Boolean)}async function t$(e,t=48,a=null){let n=await b(`teams/${e}/projects`,t,a),r=await Promise.all(n.results.map(e=>tM(e.id).catch(()=>null)));return{...n,results:r.filter(Boolean)}}async function tz(e){let t=await (0,o.getCollectionData)(`folders/${e}/projects`);return(await Promise.all((t||[]).map(e=>tM(e.id).catch(()=>null)))).filter(Boolean)}async function tB(e,t=48,a=null){let n=await b(`folders/${e}/projects`,t,a),r=await Promise.all(n.results.map(e=>tM(e.id).catch(()=>null)));return{...n,results:r.filter(Boolean)}}async function tE(e,t,a,n,r,i,l,s,c="website",u=!1,d=null){let f=await A(e),w=f?.users||{};if(!Object.keys(w).length)return void console.error("User data not available, can't create project");let p=w.canCreateProject??!0,g=Number(w.currentNumberOfProjects)||0;if(!p||g>=999)return void console.log("Can't create project");let m=g+1,h={id:r,name:i,owner:e,ownerEmail:w.email,projectType:c,nested:u,parentProjectId:d,hiddenFromDashboard:u,visibility:"public",createdAt:new Date,dashboardUpdatedAt:Date.now(),hasPreviewImage:!1,organization:t,team:a,folder:n,path:await (0,o.pathToFiles)("project","fmoFiles",null,null,null,r),status:"active",bucketUrl:`https://firebasestorage.googleapis.com/v0/b/${o.storageBucket._bucket.bucket}/o/`,wpCredentials:"notSet",domain:"notSet",free_domain:"notSet",projectPlan:"free",canEditProject:!0,canShareProject:!0,canPreviewProject:!0,canDownloadFmo:!0,canDownload:!0,canDownloadSimple:!0,canDownloadWordpress:!0,canHost:!0,canHostSimple:!0,canHostWordpress:!0,hostingPlans:{},watermarkWordpress:!0,watermarkSimple:!0,canAddCustomDomainWordpress:!1,canAddCustomDomainSimple:!1,currentNumberOfProjects:m,maxNumberOfProjects:1e3};await eF(e,t,a,n,r,h),eM(h);let F=[e7(r,l)];return s&&"number"==typeof s.size&&s.size>0&&F.push(e4(r,s)),await Promise.all(F),await y(e,e,e,e,null,{currentNumberOfProjects:m,canCreateProject:m<999}),r}async function tN(e,t){return await e7(e,t)}async function tU(e,t,a){let n=o.auth?.currentUser?.uid;if(!n)return;let r="project"===e?`projects/${t}/users`:"team"===e?`teams/${t}/users`:`folders/${t}/users`,i="project"===e?"projects":"team"===e?"teams":"folders",l=[];try{l=await (0,o.getAllDocsId)(r)}catch(e){console.warn(`[propagateRename] failed to list ${r}:`,e);return}if(!(l||[]).includes(n))return;let s=null;try{s=await (0,o.getDocument)(`users/${n}/${i}`,t)}catch(e){return}if(s)try{await (0,o.updateDocument)(`users/${n}/${i}`,t,a)}catch(e){}}async function tx(e,t){let a=(await ev(e))?.projects;if(!a)return;let n={name:t};await eA(a.owner,a.organization,a.team,a.folder,e,n),await tU("project",e,n)}async function tO(e,t){let a=(await ew(e))?.teams;if(!a)return;let n={id:e,name:t};await eu(a.owner,a.organization,e,null,null,n),await tU("team",e,n)}async function tW(e,t){let a=(await eh(e))?.folders;if(!a)return;let n={id:e,name:t};await em(a.owner,a.organization,a.team,e,null,n),await tU("folder",e,n)}async function t_(e,t){if(!e||!t)return;let a=await ev(e),n=a?.projects;if(!n)return;let r=n.owner,i=n.organization,l=n.folder;if(l===t)return;let s=n.team;try{let e=await eh(t),a=e?.folders?.team,i=a&&a===r,o=!!n.team&&n.team!==r;a&&!(i&&o)&&(s=a)}catch(e){console.warn("moveProjectToFolder: could not read destination folder team; leaving project.team as-is:",e)}let c=Date.now();if(await eA(r,i,s,t,e,{folder:t,team:s,dashboardUpdatedAt:c}),eM({id:e,owner:r,organization:i,team:s,folder:t}),n.team&&n.team!==s){try{await (0,o.deleteDocument)(`teams/${n.team}/projects`,e)}catch(e){console.warn("moveProjectToFolder: old team ref cleanup failed (non-fatal):",e)}try{await (0,o.setDocument)(`teams/${s}/projects`,e,{id:e,dashboardUpdatedAt:c})}catch(e){console.warn("moveProjectToFolder: new team ref write failed (non-fatal):",e)}}if(l)try{await (0,o.deleteDocument)(`folders/${l}/projects`,e)}
1catch(e){console.warn("moveProjectToFolder: old folder ref cleanup failed (non-fatal):",e)}await (0,o.setDocument)(`folders/${t}/projects`,e,{id:e,dashboardUpdatedAt:c})}async function tL(e,t){await ev(e).then(async a=>{let n=(a=a.projects).owner,r=a.organization,i=a.team,o=a.folder,l={};l.wpCredentials=ap(t,e),await eA(n,r,i,o,e,l)})}async function tG(e){let t=await ev(e);return"notSet"==t.projects.wpCredentials?"notSet":ag(t.projects.wpCredentials,e)}async function tV(e){return(await ev(e)).projects.domain}async function tR(e){return(await ev(e)).projects.free_domain}async function tq(e,t){await ev(e).then(async a=>{let n=(a=a.projects).owner,r=a.organization,i=a.team,o=a.folder,l={};l.domain=t,t.includes("flowmo"),await eA(n,r,i,o,e,l)})}async function tJ(e,t){await ev(e).then(async a=>{let n=(a=a.projects).owner,r=a.organization,i=a.team,o=a.folder,l={};l.free_domain=t,await eA(n,r,i,o,e,l)})}async function tK(e){let t=(await ev(e))?.projects;return t?{domain:t.domain??null,free_domain:t.free_domain??null,hostingBilling:t.hostingBilling??null,unpublishedAt:t.unpublishedAt??null}:null}async function tH(e,t,{clearUnpublishedAt:a=!1}={}){let n=(await ev(e))?.projects;if(!n)return;let i={...t};a&&(i.unpublishedAt=(0,r.deleteField)()),await eA(n.owner,n.organization,n.team,n.folder,e,i)}async function tQ(e){let t=await ev(e),a=t?.projects?.hasPreviewImage,[n,r]=await Promise.all([ta(e,"project.fmo").catch(()=>null),!1===a?Promise.resolve(null):e5(e,"previewImage.webp").catch(()=>null)]);return{...t,fmoFileUrl:n,previewImageUrl:r}}async function tY(e){return(await ev(e)).projects.watermarkWordpress}async function tX(e){return(await ev(e)).projects.watermarkSimple}async function tZ(e){return(await ev(e)).projects.canAddCustomDomainWordpress}async function t0(e){return(await ev(e)).projects.canAddCustomDomainSimple}async function t1(e,t,a,n="global",r){let i=`organizations/${e}/assets/media/${n}/`;return await (0,o.uploadFile)(a,i,t,r)}async function t4(e,t=6048e5){if(!e)return{scanned:0,deleted:0};let a=Date.now()-t,r=0,i=0;async function l(e){let t;try{t=await (0,o.getAllFiles)(e)}catch{return}for(let e of t.items){r++;try{let t=await (0,n.getMetadata)(e).catch(()=>null),r=t?.timeCreated?new Date(t.timeCreated).getTime():0;r&&r<a&&(await (0,o.deleteFile)(e.fullPath),i++)}catch{}}for(let e of t.prefixes)await l(e.fullPath)}return await l(`organizations/${e}/assets/media/temp/`),{scanned:r,deleted:i}}async function t3(e){let t=`organizations/${e}/assets/media/`,a=await (0,o.getAllFiles)(t);return a.prefixes?a.prefixes.map(e=>e.name):[]}async function t5(e){let t=`organizations/${e}/assets/media/projects/`,a=await (0,o.getAllFiles)(t);return a.prefixes?a.prefixes.map(e=>e.name):[]}async function t9(e){let t=`organizations/${e}/assets/media/`,a=await (0,o.getAllFiles)(t),r=[];for(let e of a.items){let t=await (0,n.getDownloadURL)(e);r.push({url:t,name:e.name})}return r}async function t8(e,t=null){let a=t?`organizations/${e}/assets/media/${t}/`:`organizations/${e}/assets/media/`,n=[],r=[];async function i(e,a){let l=await (0,o.getAllFiles)(e),s=(l.items||[]).map(e=>({name:e.name,storagePath:e.fullPath,contentType:null,folder:t,subFolder:a||null}));for(let e of(n.push(...s),l.prefixes)){let t=a?`${a}/${e.name}`:e.name;r.push({name:e.name,path:t,parentPath:a||null}),await i(e.fullPath,t)}}return await i(a,""),{media:n,folders:r}}async function t7(e,t,a){if(!e||o.auth.currentUser?.uid!==e.uid)throw Object.assign(Error("The signed-in account changed. Please restart registration."),{code:"registration/account-mismatch"});return(0,c.F)(e,t,a,e=>(0,r.runTransaction)(o.db,t=>e({get:e=>t.get((0,r.doc)(o.db,e)),set:(e,a)=>t.set((0,r.doc)(o.db,e),a)})))}async function t6(e,t,a,n){return(0,u.y)(()=>(0,d.kd)(async()=>{let l;try{l=(await (0,i.createUserWithEmailAndPassword)(o.auth,e,t)).user}catch(n){if("auth/email-already-in-use"!==n.code)throw n;let a=(await (0,i.signInWithEmailAndPassword)(o.auth,e,t)).user;if((await (0,r.getDocFromServer)((0,r.doc)(o.db,"users",a.uid))).exists())throw n;l=a}return await t7(l,a,n),l}),i.sendEmailVerification)}function t2(){if("u"<typeof navigator)return!1;let e=navigator.userAgent||"";return/FBAN|FBAV|FB_IAB|Instagram|Line\/|Twitter|LinkedInApp|Snapchat|Pinterest|WhatsApp|WeChat|MicroMessenger|Outlook-|OWA\/|MSTeams|Teams\/|Slack|GSA\/|FxiOS|CriOS.*Version|; wv\)|WebView/i.test(e)}function ae(){return!("u"<typeof navigator)&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent||"")}let at="pendingGoogleKyc";function aa(e){try{"u">typeof sessionStorage&&sessionStorage.setItem(at,JSON.stringify(e??null))}catch{}}async function an(e,t){let a=e.user,n=a.displayName||a.email?.split("@")[0]||"Unknown";await t7(a,n,t);try{sessionStorage.removeItem(at)}catch{}return{uid:a.uid,email:a.email,name:n,...e}}async function ar(){return(0,d.kd)(ao)}let ai=null;async function ao(){ai&&o.auth.currentUser?.uid!==ai.user.uid&&(ai=null);let e=ai||await (0,i.getRedirectResult)(o.auth);if(!e||!e.user)return null;ai=e;let t=function(){try{if("u">typeof sessionStorage){let e=sessionStorage.getItem(at);return e?JSON.parse(e):void 0}}catch{}}(),a=await an(e,t);return ai=null,{...a,kycData:t||null}}async function al(e){return(0,d.kd)(()=>as(e))}async function as(e){let t=new i.GoogleAuthProvider;try{if(t2()||ae())return aa(e),await (0,i.signInWithRedirect)(o.auth,t),null;let a=await (0,i.signInWithPopup)(o.auth,t);return await an(a,e)}catch(n){let a;if("auth/popup-blocked"===(a=n?.code||"")||"auth/cancelled-popup-request"===a||"auth/operation-not-supported-in-this-environment"===a||"auth/web-storage-unsupported"===a)try{return aa(e),await (0,i.signInWithRedirect)(o.auth,t),null}catch(e){throw console.error("Redirect sign-in fallback failed:",e),e}if(n?.code==="auth/popup-closed-by-user"||n?.code==="auth/user-cancelled")return null;throw console.error("Error during Google registration:",n),n}}async function ac(e,t){let a=await (0,i.signInWithEmailAndPassword)(o.auth,e,t);return a.user.emailVerified?a:"please verify your email"}async function au(){let e=new i.GoogleAuthProvider;try{return await (0,i.signInWithPopup)(o.auth,e)}catch(e){throw console.error("Error during Google login:",e),e}}async function ad(){await (0,i.signOut)(o.auth).then(()=>(ai=null,(0,d.Ej)(),console.log("sign out successful"),!0)).catch(e=>(console.log("sign out failed",e),!1))}async function af(){return(0,i.onAuthStateChanged)(o.auth,e=>{if(!e)return!1;{let t=e.uid;return console.log(t,"is logged in"),t}})}let aw=e=>(0,i.sendEmailVerification)(e);function ap(e,t){try{let a=JSON.stringify(e),n="";for(let e=0;e<a.length;
1e++)n+=String.fromCharCode(a.charCodeAt(e)+t.charCodeAt(e%t.length));return n}catch(e){return console.error("Error encoding JSON:",e),null}}function ag(e,t){try{let a="";for(let n=0;n<e.length;n++)a+=String.fromCharCode(e.charCodeAt(n)-t.charCodeAt(n%t.length));return JSON.parse(a)}catch(e){return console.error("Error decoding JSON:",e),null}}async function am(e){return(await A(e)).users.aiPlans}async function ay(e){return(await ev(e)).projects.hostingPlans}async function ah(e){return(await ev(e)).projects.stagingFolder}function aF(e){let t=0;for(let a=0;a<e.length;a++)t=(t<<5)-t+e.charCodeAt(a)|0;return"a"+Math.abs(t).toString(36)+e.length.toString(36)}async function aA(e,t){let a=`organizations/${e}/assetMetadata`,n=t.id||aF(t.storagePath),i="string"==typeof t.displayName?(0,s.kK)(t.displayName):{},l={...t,...i,id:n,updatedAt:Date.now()};l.createdAt||(l.createdAt=Date.now());let c=(0,r.doc)(o.db,a,n);return await (0,r.setDoc)(c,l),n}async function aj(e,t,a){let n=`organizations/${e}/assetMetadata`,i=(0,r.doc)(o.db,n,t),l="string"==typeof a.displayName?(0,s.kK)(a.displayName):{};await (0,r.updateDoc)(i,{...a,...l,updatedAt:Date.now()})}async function ab(e,t){if(!t||0===t.length)return;let a=(0,r.writeBatch)(o.db),n=`organizations/${e}/assetMetadata`;for(let e of t){let t=(0,r.doc)(o.db,n,e.id),i={updatedAt:Date.now()};"virtualFolderId"in e&&(i.virtualFolderId=e.virtualFolderId),"projectId"in e&&(i.projectId=e.projectId),"tags"in e&&(i.tags=e.tags),"displayName"in e&&(i.displayName=e.displayName,Object.assign(i,(0,s.kK)(e.displayName))),a.update(t,i)}await a.commit()}async function aP(e,t){let a=`organizations/${e}/assetMetadata`,n=(0,r.doc)(o.db,a,t);await (0,r.deleteDoc)(n)}async function aD(e,t){let a=`organizations/${e}/assetMetadata`,n=(0,r.doc)(o.db,a,t);return!!(await (0,r.getDoc)(n)).exists()&&(await (0,r.deleteDoc)(n),!0)}async function av(e){let t=`organizations/${e}/assetMetadata`,a=(0,r.collection)(o.db,t),n=await (0,r.getDocs)(a),i=[];return n.forEach(e=>i.push(e.data())),i}async function aC(e,t=200,a=null,n=null){let i=`organizations/${e}/assetMetadata`,l=(0,r.collection)(o.db,i),s=[];if(n&&"project"===n.kind){let e=Array.from(new Set((n.projectIds||[]).filter(Boolean)));1===e.length?s.push((0,r.where)("projectId","==",e[0])):e.length>1&&e.length<=30&&s.push((0,r.where)("projectId","in",e))}else n&&"global"===n.kind?s.push((0,r.where)("projectId","==",null)):n&&"folder"===n.kind&&s.push((0,r.where)("virtualFolderId","==",n.folderId));a&&s.push((0,r.startAfter)(a)),s.push((0,r.limit)(t));let c=await (0,r.getDocs)((0,r.query)(l,...s)),u=[];return c.forEach(e=>u.push(e.data())),{results:u,cursor:c.docs.length?c.docs[c.docs.length-1]:null,done:c.docs.length<t}}async function ak(e,t,a=300){if(!e||!t)return[];let n=(0,r.collection)(o.db,`organizations/${e}/assetMetadata`),i=[],l=null;for(;;){let e=l?(0,r.query)(n,(0,r.where)("projectId","==",t),(0,r.startAfter)(l),(0,r.limit)(a)):(0,r.query)(n,(0,r.where)("projectId","==",t),(0,r.limit)(a)),o=await (0,r.getDocs)(e);if(o.forEach(e=>i.push(e.data())),o.docs.length<a)break;l=o.docs[o.docs.length-1]}return i}async function aM(e,t,a=300){if(!e||!t)return[];let n=(0,r.collection)(o.db,`organizations/${e}/assetFolders`),i=[],l=null;for(;;){let e=l?(0,r.query)(n,(0,r.where)("projectId","==",t),(0,r.startAfter)(l),(0,r.limit)(a)):(0,r.query)(n,(0,r.where)("projectId","==",t),(0,r.limit)(a)),o=await (0,r.getDocs)(e);if(o.forEach(e=>i.push(e.data())),o.docs.length<a)break;l=o.docs[o.docs.length-1]}return i}async function aT(e,t,a){if(!e||!t||!a)return null;try{let n=(0,r.collection)(o.db,`organizations/${e}/assetMetadata`),i=await (0,r.getDocs)((0,r.query)(n,(0,r.where)(t,"==",a),(0,r.limit)(1)));return i.docs.length?i.docs[0].data():null}catch{return null}}async function aS(e,t){let a=`organizations/${e}/assetFolders`,n=(0,r.doc)((0,r.collection)(o.db,a)),i={...t,id:n.id,createdAt:Date.now(),updatedAt:Date.now()};return await (0,r.setDoc)(n,i),n.id}async function aI(e,t,a){let n=`organizations/${e}/assetFolders`,i=(0,r.doc)(o.db,n,t);await (0,r.updateDoc)(i,{...a,updatedAt:Date.now()})}async function a$(e,t){let a=`organizations/${e}/assetFolders`,n=(0,r.doc)(o.db,a,t);await (0,r.deleteDoc)(n)}async function az(e){let t=`organizations/${e}/assetFolders`,a=(0,r.collection)(o.db,t),n=await (0,r.getDocs)(a),i=[];
1return n.forEach(e=>i.push(e.data())),i}async function aB(e,t,a,n){if(!e||!t||!a)return{assets:0,folders:0};let[r,i]=await Promise.all([ak(e,t).catch(()=>[]),aM(e,t).catch(()=>[])]);return aE(n||e,a,r.filter(Boolean),i.filter(Boolean))}async function aE(e,t,a,n){if(!e||!t)return{assets:0,folders:0};let i=Array.isArray(a)?a.filter(Boolean):[],l=Array.isArray(n)?n.filter(Boolean):[];if(0===i.length&&0===l.length)return{assets:0,folders:0};let s=String(t).slice(0,12),c=e=>`${e}__${s}`,u=new Set(l.map(e=>e.id)),d=e=>e&&u.has(e)?c(e):null,f=(0,r.collection)(o.db,`organizations/${e}/assetFolders`),w=(0,r.collection)(o.db,`organizations/${e}/assetMetadata`),p=[];for(let e of l)p.push({ref:(0,r.doc)(f,c(e.id)),data:{...e,id:c(e.id),parentId:d(e.parentId),projectId:t,createdAt:e.createdAt||Date.now(),updatedAt:Date.now()}});for(let e of i){let a=c(e.id);p.push({ref:(0,r.doc)(w,a),data:{...e,id:a,virtualFolderId:d(e.virtualFolderId),projectId:t,createdAt:e.createdAt||Date.now(),updatedAt:Date.now()}})}for(let e=0;e<p.length;e+=450){let t=(0,r.writeBatch)(o.db);for(let a of p.slice(e,e+450))t.set(a.ref,a.data);await t.commit()}return{assets:i.length,folders:l.length}}let aN="marketplaceListings",aU="marketplaceTags";async function ax(e){let t=Array.isArray(e)?e:[];await Promise.all(t.map(async e=>{let t=(e||"").trim().toLowerCase();if(t)try{let e=(0,r.doc)(o.db,aU,encodeURIComponent(t).replace(/\./g,"%2E"));if((await (0,r.getDoc)(e)).exists())return;await (0,r.setDoc)(e,{tag:t,createdAt:Date.now()})}catch{}}))}async function aO(e="",t=50){let a=(e||"").trim().toLowerCase(),n=(0,r.collection)(o.db,aU),i=a?(0,r.query)(n,(0,r.orderBy)("tag"),(0,r.startAt)(a),(0,r.endAt)(a+""),(0,r.limit)(t)):(0,r.query)(n,(0,r.orderBy)("tag"),(0,r.limit)(t)),l=await (0,r.getDocs)(i),s=[];return l.forEach(e=>{let t=e.data()?.tag;t&&s.push(t)}),s}async function aW(e){let t=(0,r.collection)(o.db,aN),a=e.id||(0,r.doc)(t).id,n=function(e){let t={};for(let a of Object.keys(e))void 0!==e[a]&&(t[a]=e[a]);return t}({...e,id:a,createdAt:e.createdAt||Date.now(),updatedAt:Date.now()});return await (0,r.setDoc)((0,r.doc)(t,a),n),ax(n.tags),a}async function a_(e=0){let t=(0,r.collection)(o.db,aN),a=e>0?(0,r.query)(t,(0,r.orderBy)("createdAt","desc"),(0,r.limit)(e)):t,n=await (0,r.getDocs)(a),i=[];return n.forEach(e=>i.push(e.data())),i.sort((e,t)=>(t.createdAt||0)-(e.createdAt||0)),i}async function aL(e){let t=await (0,r.getDoc)((0,r.doc)(o.db,aN,e));return t.exists()?t.data():null}async function aG(e={}){let{kind:t,kinds:a,typeGroup:n,category:i,tag:l,searchToken:s,creatorId:c,pageSize:u=24,cursor:d=null}=e,f=[];Array.isArray(a)&&a.length?f.push((0,r.where)("listingKind","in",a)):t&&f.push((0,r.where)("listingKind","==",t)),c?f.push((0,r.where)("creatorId","==",c)):(n&&f.push((0,r.where)("typeGroup","==",n)),i&&f.push((0,r.where)("category","==",i)),s?f.push((0,r.where)("keywords","array-contains",s)):l&&f.push((0,r.where)("tags","array-contains",l)));let w=[(0,r.collection)(o.db,aN),...f,(0,r.orderBy)("createdAt","desc"),(0,r.limit)(u)],p=d?(0,r.query)(...w.slice(0,-1),(0,r.startAfter)(d),(0,r.limit)(u)):(0,r.query)(...w),g=await (0,r.getDocs)(p),m=[];return g.forEach(e=>m.push(e.data())),{rows:m,cursor:g.docs.length===u?g.docs[g.docs.length-1]:null}}async function aV(e){let t=await (0,r.getDocs)((0,r.query)((0,r.collection)(o.db,aN),(0,r.where)("creatorId","==",e))),a=[];return t.forEach(e=>a.push(e.data())),a.sort((e,t)=>(t.createdAt||0)-(e.createdAt||0)),a}async function aR(e,t){let a={updatedAt:Date.now()};for(let e of Object.keys(t))a[e]=void 0===t[e]?(0,r.deleteField)():t[e];await (0,r.updateDoc)((0,r.doc)(o.db,aN,e),a),Array.isArray(t.tags)&&ax(t.tags)}async function aq(e){await (0,r.deleteDoc)((0,r.doc)(o.db,aN,e))}async function aJ(e,t,a="fmo"){return await (0,o.uploadFile)(t,`marketplace/${e}/`,`bundle.${a}`)}async function aK(e,t){return await (0,o.uploadFile)(t,`marketplace/${e}/`,"thumbnail")}async function aH(e,t,a="fmo"){return await (0,o.uploadFilePrivate)(t,`marketplace-gated/${e}/`,`bundle.${a}`)}async function aQ(e){if(!e)return null;let t=await (0,r.getDoc)((0,r.doc)(o.db,"sellers",e));return t.exists()?t.data():null}async function aY(e){if(!e)return null;let t=await A(e);return t?.users?.communityProfile||null}function aX(e,t){let a=t||{},n=a.communityProfile||null;return{id:e,name:"string"==typeof a.name?a.name:"",photoURL:"string"==typeof a.photoURL?a.photoURL:"",communityProfile:n,updatedAt:new Date}}async function aZ(e){if(!e)return null;let t=await (0,r.getDoc)((0,r.doc)(o.db,"publicProfiles",e));return t.exists()?t.data():null}async function a0(e){let t=o.auth.currentUser;if(!t)return null;let a=t.uid,n=e||(await A(a))?.users||{},i=aX(a,n);return await (0,r.setDoc)((0,r.doc)(o.db,"publicProfiles",a),i),i}async function a1(e){let t=o.auth.currentUser;if(!t)throw Error("User not authenticated");let a=t.uid,n=Object.fromEntries(Object.entries({...await aY(a)||{},...e||{}}).filter(([,e])=>void 0!==e));await y(a,a,a,a,null,{communityProfile:n});try{let e=await A(a);await a0({...e?.users||{},communityProfile:n})}catch(e){console.error("publicProfiles sync failed (communityProfile saved):",e)}return n}async function a4(){let e=await (0,r.getDoc)((0,r.doc)(o.db,"marketplace_config","config"));return e.exists()?e.data():null}async function a3(e,t,a,n){let i={};for(let e of a)i[e.path]=aF(`legacy-folder:${n||"global"}:${e.path}`);let l=(0,r.collection)(o.db,`organizations/${e}/assetFolders`);for(let e=0;e<a.length;e+=400){let t=(0,r.writeBatch)(o.db);for(let o of a.slice(e,e+400)){let e=i[o.path];t.set((0,r.doc)(l,e),{id:e,name:o.name,parentId:o.parentPath&&i[o.parentPath]||null,projectId:n||null,createdAt:Date.now(),updatedAt:Date.now()},{merge:!0})}await t.commit()}let s=t.map(t=>{let a=t.storagePath||function(e){try{let t=new URL(e).pathname.split("/"),a=t.indexOf("o");if(-1===a||a+1>=t.length)return null;return decodeURIComponent(t.slice(a+1).join("/"))}catch{return null}}(t.url);if(!a)return Promise.resolve();let r=t.subFolder&&i[t.subFolder]||null;return aA(e,{storagePath:a,downloadUrl:t.url,virtualFolderId:r,displayName:t.name||"Unknown",contentType:t.contentType||null,projectId:n||null,tags:[]}).catch(()=>{})});return await Promise.all(s),i}async function a5(e,t,a){return(0,d.kd)(()=>t7(e,t,a))}function a9(e){return!!e&&(0,i.multiFactor)(e).enrolledFactors.length>0}function a8(e){return e?(0,i.multiFactor)(e).enrolledFactors:[]}async function a7(e){let t=await (0,i.multiFactor)(e).getSession(),a=await i.TotpMultiFactorGenerator.generateSecret(t),n=a.generateQrCodeUrl(e.email,"Flowmo");return{totpSecret:a,totpUri:n}}async function a6(e,t,a,n="Authenticator App"){let r=i.TotpMultiFactorGenerator.assertionForEnrollment(t,a);await (0,i.multiFactor)(e).enroll(r,n)}function a2(e){let t=(0,i.getMultiFactorResolver)(o.auth,e);return{resolver:t,hints:t.hints}}async function ne(e,t,a){let n=i.TotpMultiFactorGenerator.assertionForSignIn(t,a);return await e.resolveSignIn(n)}async function nt(e,t){let a=`${window.location.origin}/action`,n=a;try{n=(0,l.gr)(a,window.location.search,t)}catch{n=a}let r={url:n,handleCodeInApp:!0};await (0,i.sendSignInLinkToEmail)(o.auth,e,r)}function na(e){return(0,i.isSignInWithEmailLink)(o.auth,e)}async function nn(e,t){return await (0,i.signInWithEmailLink)(o.auth,e,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.