@chaibuilder/pages 0.4.5 → 0.4.6-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/server.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var U=Object.defineProperty;var G=(n,a,e)=>a in n?U(n,a,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[a]=e;var g=(n,a,e)=>G(n,typeof a!="symbol"?a+"":a,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("lodash-es"),d={},T=(n,a)=>{d[n]={key:n,...a,hasSlug:!0}},p=(n,a)=>{d[n]={key:n,...a,hasSlug:!1}},E=()=>Object.values(d),l=n=>d[n];let C=async n=>({...n});const v=n=>C=n,k=async n=>{try{return await C(n)}catch(a){return console.error(a),{}}};class D{constructor(a){this.backend=a}async upload({file:a,folderId:e,name:t}){return await this.backend.handleAssetsAction({action:"UPLOAD_ASSET",data:{name:t,file:a,folderId:e}})}async getAssets(a){return this.backend.handleAssetsAction({action:"GET_ASSETS",data:a})}async deleteAsset(a){return this.backend.handleAssetsAction({action:"DELETE_ASSET",data:{assetId:a}})}async updateAssetMetadata(a){return this.backend.handleAssetsAction({action:"UPDATE_ASSET_METADATA",data:a})}async updateAssetFile({id:a,file:e}){return this.backend.handleAssetsAction({action:"UPDATE_ASSET_FILE",data:{id:a,file:e}})}}class y{constructor(a){this.backend=a}async refreshToken(a){const e=await this.backend.handleUsersAction({action:"REFRESH_TOKEN",data:a});return e.error?{error:e.error}:e}async login({email:a,password:e}){const t=await this.backend.handleUsersAction({action:"LOGIN",data:{email:a,password:e}});return t.error?{error:t.error}:t}async logout(){await this.backend.handleUsersAction({action:"LOGOUT"})}async isUserActive(a){return(await this.backend.handleUsersAction({action:"CHECK_USER_STATUS"},a)).success}async getUserRoleAndPermissions(a){return await this.backend.handleUsersAction({action:"GET_ROLE_AND_PERMISSIONS"},a)}async getUserInfo(a,e){return await this.backend.handleUsersAction({action:"GET_CHAI_USER",data:e},a)}}const L={ab:"Abkhazian",aa:"Afar",af:"Afrikaans",ak:"Akan",sq:"Albanian",am:"Amharic",ar:"Arabic",an:"Aragonese",hy:"Armenian",as:"Assamese",av:"Avaric",ae:"Avestan",ay:"Aymara",az:"Azerbaijani",bm:"Bambara",ba:"Bashkir",eu:"Basque",be:"Belarusian",bn:"Bengali",bh:"Bihari",bi:"Bislama",bs:"Bosnian",br:"Breton",bg:"Bulgarian",my:"Burmese",ca:"Catalan",ch:"Chamorro",ce:"Chechen",ny:"Chichewa",zh:"Chinese","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)",cv:"Chuvash",kw:"Cornish",co:"Corsican",cr:"Cree",hr:"Croatian",cs:"Czech",da:"Danish",dv:"Maldivian",nl:"Dutch",dz:"Dzongkha",en:"English",eo:"Esperanto",et:"Estonian",ee:"Ewe",fo:"Faroese",fj:"Fijian",fi:"Finnish",fr:"French",ff:"Fula, Pular",gl:"Galician",gd:"Gaelic (Scottish)",gv:"Manx",ka:"Georgian",de:"German",el:"Greek",kl:"Kalaallisut",gn:"Guarani",gu:"Gujarati",ht:"Haitian Creole",ha:"Hausa",he:"Hebrew",hz:"Herero",hi:"Hindi",ho:"Hiri Motu",hu:"Hungarian",is:"Icelandic",io:"Ido",ig:"Igbo",id:"Indonesian",ia:"Interlingua",ie:"Interlingue",iu:"Inuktitut",ik:"Inupiak",ga:"Irish",it:"Italian",ja:"Japanese",jv:"Javanese",kn:"Kannada",kr:"Kanuri",ks:"Kashmiri",kk:"Kazakh",km:"Khmer",ki:"Kikuyu",rw:"Kinyarwanda",rn:"Kirundi",ky:"Kyrgyz",kv:"Komi",kg:"Kongo",ko:"Korean",ku:"Kurdish",kj:"Kwanyama",lo:"Lao",la:"Latin",lv:"Latvian",li:"Limburgish",ln:"Lingala",lt:"Lithuanian",lu:"Luga-Katanga",lg:"Luganda, Ganda",lb:"Luxembourgish",mk:"Macedonian",mg:"Malagasy",ms:"Malay",ml:"Malayalam",mt:"Maltese",mi:"Maori",mr:"Marathi",mh:"Marshallese",mo:"Moldavian",mn:"Mongolian",na:"Nauru",nv:"Navajo",ng:"Ndonga",nd:"Northern Ndebele",ne:"Nepali",no:"Norwegian",nb:"Norwegian bokmål",nn:"Norwegian nynorsk",ii:"Sichuan Yi",oc:"Occitan",oj:"Ojibwe",cu:"Old Church Slavonic",or:"Oriya",om:"Oromo",os:"Ossetian",pi:"Pāli",ps:"Pashto, Pushto",fa:"Persian (Farsi)",pl:"Polish",pt:"Portuguese",pa:"Punjabi (Eastern)",qu:"Quechua",rm:"Romansh",ro:"Romanian",ru:"Russian",se:"Sami",sm:"Samoan",sg:"Sango",sa:"Sanskrit",sr:"Serbian",sh:"Serbo-Croatian",st:"Sesotho",tn:"Setswana",sn:"Shona",sd:"Sindhi",si:"Sinhalese",ss:"Swati",sk:"Slovak",sl:"Slovenian",so:"Somali",nr:"Southern Ndebele",es:"Spanish",su:"Sundanese",sw:"Swahili (Kiswahili)",sv:"Swedish",tl:"Tagalog",ty:"Tahitian",tg:"Tajik",ta:"Tamil",tt:"Tatar",te:"Telugu",th:"Thai",bo:"Tibetan",ti:"Tigrinya",to:"Tonga",ts:"Tsonga",tr:"Turkish",tk:"Turkmen",tw:"Twi",ug:"Uyghur",uk:"Ukrainian",ur:"Urdu",uz:"Uzbek",ve:"Venda",vi:"Vietnamese",vo:"Volapük",wa:"Wallon",cy:"Welsh",wo:"Wolof",fy:"Western Frisian",xh:"Xhosa",yi:"Yiddish",yo:"Yoruba",za:"Zhuang, Chuang",zu:"Zulu"};class M{constructor(a,e,t){g(this,"fallbackLang","");g(this,"currentLang","");g(this,"draftMode",!1);this.backend=a,this.chaiUsers=e,this.chaiAssets=t,this._registerDefaultPageTypes(),this.chaiUsers=e??new y(this.backend),this.chaiAssets=t??new D(this.backend)}_registerDefaultPageTypes(){T("page",{name:"Static Page",icon:'<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M5 8V20H19V8H5ZM5 6H19V4H5V6ZM20 22H4C3.44772 22 3 21.5523 3 21V3C3 2.44772 3.44772 2 4 2H20C20.5523 2 21 2.44772 21 3V21C21 21.5523 20.5523 22 20 22ZM7 10H11V14H7V10ZM7 16H17V18H7V16ZM13 11H17V13H13V11Z"></path></svg>'}),p("global",{name:"Global Block",helpText:"A global block can be reused in multiple pages.",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-globe w-4 h-4 text-slate-500 stroke-[1]"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path><path d="M2 12h20"></path></svg>'})}setFallbackLang(a){if(h.isEmpty(a))throw new Error("Fallback language cannot be empty");this.fallbackLang=a}getFallbackLang(){return this.fallbackLang}setCurrentLang(a){if(h.isEmpty(a))throw new Error("Current language cannot be empty");this.currentLang=a}getCurrentLang(){return this.currentLang}setDraftMode(a){this.draftMode=a}isDraftMode(){return this.draftMode}async handle(a,e){var s,r,o,c,u,S,m,f,b,w,P;switch(a.action){case"UPLOAD_MEDIA":return(s=this.chaiAssets)==null?void 0:s.upload({file:a.data.file,name:a.data.name});case"GET_ASSETS":return(r=this.chaiAssets)==null?void 0:r.getAssets(a.data);case"DELETE_ASSET":return(o=this.chaiAssets)==null?void 0:o.deleteAsset(a.data.assetId);case"UPDATE_ASSET_METADATA":return(c=this.chaiAssets)==null?void 0:c.updateAssetMetadata(a.data);case"UPDATE_ASSET_FILE":return(u=this.chaiAssets)==null?void 0:u.updateAssetFile(a.data);case"REFRESH_TOKEN":return(S=this.chaiUsers)==null?void 0:S.refreshToken(a.data);case"LOGIN":return(m=this.chaiUsers)==null?void 0:m.login(a.data);case"LOGOUT":return(f=this.chaiUsers)==null?void 0:f.logout();case"CHECK_USER_STATUS":return(b=this.chaiUsers)==null?void 0:b.isUserActive(e);case"GET_ROLE_AND_PERMISSIONS":return(w=this.chaiUsers)==null?void 0:w.getUserRoleAndPermissions(e);case"GET_CHAI_USER":return(P=this.chaiUsers)==null?void 0:P.getUserInfo(e,a.data)}if(a.action==="GET_BUILDER_PAGE_DATA"){const i=await k({lang:a.data.lang,draft:!0,inBuilder:!0}),A=l(a.data.pageType);return A?{...A.dataProvider?await A.dataProvider({lang:a.data.lang,draft:!0,inBuilder:!0,pageProps:a.data.pageProps??{}}):{},global:i}:{global:i}}if(a.action==="GET_PAGE_TYPES")return Promise.all(E().map(async i=>({key:i.key,helpText:i.helpText??"",icon:i.icon??"",dynamicSegments:i.dynamicSegments??"",dynamicSlug:i.dynamicSlug??"",hasSlug:i.hasSlug??!0,name:typeof i.name=="function"?await i.name():i.name})));if(a.action==="SEARCH_PAGE_TYPE_ITEMS"){const i=l(a.data.pageType);return i?i.search?await i.search(a.data.query):this.backend.handleAction(a,e):{error:"Page type not found"}}const t=await this.backend.handleAction(a,e);return this.emit(a.action,t),t}emit(a,e){var r,o,c;if(!["CREATE_PAGE","UPDATE_PAGE","DELETE_PAGE"].includes(a))return;const t=h.get(e,"page");if(!t)return;const s=l(t.pageType);if(s)switch(a){case"CREATE_PAGE":return(r=s.onCreate)==null?void 0:r.call(s,t);case"UPDATE_PAGE":return(o=s.onUpdate)==null?void 0:o.call(s,t);case"DELETE_PAGE":return(c=s.onDelete)==null?void 0:c.call(s,t)}}setLanguageFromSlug(a){if(!this.getFallbackLang())throw new Error("Please set a fallback language using setFallbackLang(lang: string)");const e=h.first(a||[""]);Object.keys(L).includes(e)?this.setCurrentLang(e):this.setCurrentLang(this.getFallbackLang())}async resolveLink(a,e){const t=l(a);if(!t)return"/not-found";const s=this.isDraftMode(),r=this.getCurrentLang()===this.getFallbackLang()?"":this.getCurrentLang();return t.resolveLink?await t.resolveLink(e,s,r):await this.backend.handleAction({action:"GET_LINK",data:{pageType:a,id:e,draft:s,lang:r}})}async getPageBySlug(a){const e=this.isDraftMode(),t={};return E().forEach(s=>{h.has(s,"dynamicSegments")&&s.dynamicSegments&&(t[s.key]=s.dynamicSegments)}),await this.backend.handleAction({action:"GET_PAGE_META",data:{slug:a,draft:e,dynamicSegments:t}})}async getFullPage(a){const e=this.isDraftMode(),t=this.getCurrentLang(),s=this.getFallbackLang();return await this.backend.handleAction({action:"GET_PAGE",data:{id:a,lang:s===t?void 0:t,draft:e,mergePartials:!0}})}async getSiteSettings(){const a=this.isDraftMode();return await this.backend.handleAction({action:"GET_WEBSITE_SETTINGS",data:{draft:a}})}async getPageData(a,e={}){var u;const t=this.isDraftMode(),s=this.getCurrentLang(),r=l(a),[o,c]=await Promise.all([this.getGlobalData(),((u=r==null?void 0:r.dataProvider)==null?void 0:u.call(r,{lang:s,draft:t,inBuilder:!1,pageProps:e}))||Promise.resolve({})]);return r?{...c,global:o}:{global:o}}async getGlobalData(){const a=this.getCurrentLang();return await k({lang:a,draft:this.isDraftMode(),inBuilder:!1})}async request(a){return await this.backend.handleAction(a)}}class I{constructor(a="",e=_){this.apiKey=a,this.apiUrl=e}async handleUsersAction(a,e){const t=await fetch(`${this.apiUrl}/v1/api/users`,{method:"POST",body:JSON.stringify(a),headers:{"x-chai-api-key":this.apiKey,"x-chai-auth-token":e}}),s=await t.json();return h.has(s,"error")?{...s,status:t.status}:s}async handleAction(a,e){const t=await fetch(`${this.apiUrl}/v1/api/chai`,{method:"POST",body:JSON.stringify(a),headers:{"x-chai-api-key":this.apiKey,"x-chai-auth-token":e}}),s=await t.json();return h.has(s,"error")?{...s,status:t.status}:s}async handleAssetsAction(a,e){return await(await fetch(`${this.apiUrl}/v1/api/assets`,{method:"POST",body:JSON.stringify(a),headers:{"x-chai-api-key":this.apiKey,"x-chai-upload":"true","x-chai-auth-token":e}})).json()}}const _="https://api.chaibuilder.com";exports.API_URL=_;exports.ChaiBuilderPages=M;exports.ChaiBuilderPagesBackend=I;exports.ChaiBuilderPagesUserManagement=y;exports.LANGUAGES=L;exports.getChaiGlobalData=k;exports.getChaiPageType=l;exports.getChaiPageTypes=E;exports.registerChaiGlobalDataProvider=v;exports.registerChaiPageType=T;exports.registerChaiPartialType=p;
1
+ "use strict";var _=Object.defineProperty;var U=(i,a,e)=>a in i?_(i,a,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[a]=e;var g=(i,a,e)=>U(i,typeof a!="symbol"?a+"":a,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("lodash-es"),d={},P=(i,a)=>{d[i]={key:i,...a,hasSlug:!0}},p=(i,a)=>{d[i]={key:i,...a,hasSlug:!1}},k=()=>Object.values(d),h=i=>d[i];let T=async i=>({...i});const G=i=>T=i,E=async i=>{try{return await T(i)}catch(a){return console.error(a),{}}};class v{constructor(a){this.backend=a}async upload({file:a,folderId:e,name:t}){var n,o;return console.log("upload",a,e,t),await((o=(n=this.backend).handleAssetsAction)==null?void 0:o.call(n,{action:"UPLOAD_ASSET",data:{name:t,file:a,folderId:e}}))}async getAssets(a){var e,t;return(t=(e=this.backend).handleAssetsAction)==null?void 0:t.call(e,{action:"GET_ASSETS",data:a})}async deleteAsset(a){var e,t;return(t=(e=this.backend).handleAssetsAction)==null?void 0:t.call(e,{action:"DELETE_ASSET",data:{assetId:a}})}async updateAsset({id:a,file:e,description:t}){var s,n;return(n=(s=this.backend).handleAssetsAction)==null?void 0:n.call(s,{action:"UPDATE_ASSET",data:{id:a,file:e,description:t}})}}class C{constructor(a){this.backend=a}async refreshToken(a){var t,s;const e=await((s=(t=this.backend).handleUsersAction)==null?void 0:s.call(t,{action:"REFRESH_TOKEN",data:a}));return e.error?{error:e.error}:e}async login({email:a,password:e}){var s,n;const t=await((n=(s=this.backend).handleUsersAction)==null?void 0:n.call(s,{action:"LOGIN",data:{email:a,password:e}}));return t.error?{error:t.error}:t}async logout(){var a,e;await((e=(a=this.backend).handleUsersAction)==null?void 0:e.call(a,{action:"LOGOUT"}))}async isUserActive(a){var t,s;return(await((s=(t=this.backend).handleUsersAction)==null?void 0:s.call(t,{action:"CHECK_USER_STATUS"},a))).success}async getUserRoleAndPermissions(a){var t,s;return await((s=(t=this.backend).handleUsersAction)==null?void 0:s.call(t,{action:"GET_ROLE_AND_PERMISSIONS"},a))}async getUserInfo(a,e){var s,n;return await((n=(s=this.backend).handleUsersAction)==null?void 0:n.call(s,{action:"GET_CHAI_USER",data:e},a))}}const y={ab:"Abkhazian",aa:"Afar",af:"Afrikaans",ak:"Akan",sq:"Albanian",am:"Amharic",ar:"Arabic",an:"Aragonese",hy:"Armenian",as:"Assamese",av:"Avaric",ae:"Avestan",ay:"Aymara",az:"Azerbaijani",bm:"Bambara",ba:"Bashkir",eu:"Basque",be:"Belarusian",bn:"Bengali",bh:"Bihari",bi:"Bislama",bs:"Bosnian",br:"Breton",bg:"Bulgarian",my:"Burmese",ca:"Catalan",ch:"Chamorro",ce:"Chechen",ny:"Chichewa",zh:"Chinese","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)",cv:"Chuvash",kw:"Cornish",co:"Corsican",cr:"Cree",hr:"Croatian",cs:"Czech",da:"Danish",dv:"Maldivian",nl:"Dutch",dz:"Dzongkha",en:"English",eo:"Esperanto",et:"Estonian",ee:"Ewe",fo:"Faroese",fj:"Fijian",fi:"Finnish",fr:"French",ff:"Fula, Pular",gl:"Galician",gd:"Gaelic (Scottish)",gv:"Manx",ka:"Georgian",de:"German",el:"Greek",kl:"Kalaallisut",gn:"Guarani",gu:"Gujarati",ht:"Haitian Creole",ha:"Hausa",he:"Hebrew",hz:"Herero",hi:"Hindi",ho:"Hiri Motu",hu:"Hungarian",is:"Icelandic",io:"Ido",ig:"Igbo",id:"Indonesian",ia:"Interlingua",ie:"Interlingue",iu:"Inuktitut",ik:"Inupiak",ga:"Irish",it:"Italian",ja:"Japanese",jv:"Javanese",kn:"Kannada",kr:"Kanuri",ks:"Kashmiri",kk:"Kazakh",km:"Khmer",ki:"Kikuyu",rw:"Kinyarwanda",rn:"Kirundi",ky:"Kyrgyz",kv:"Komi",kg:"Kongo",ko:"Korean",ku:"Kurdish",kj:"Kwanyama",lo:"Lao",la:"Latin",lv:"Latvian",li:"Limburgish",ln:"Lingala",lt:"Lithuanian",lu:"Luga-Katanga",lg:"Luganda, Ganda",lb:"Luxembourgish",mk:"Macedonian",mg:"Malagasy",ms:"Malay",ml:"Malayalam",mt:"Maltese",mi:"Maori",mr:"Marathi",mh:"Marshallese",mo:"Moldavian",mn:"Mongolian",na:"Nauru",nv:"Navajo",ng:"Ndonga",nd:"Northern Ndebele",ne:"Nepali",no:"Norwegian",nb:"Norwegian bokmål",nn:"Norwegian nynorsk",ii:"Sichuan Yi",oc:"Occitan",oj:"Ojibwe",cu:"Old Church Slavonic",or:"Oriya",om:"Oromo",os:"Ossetian",pi:"Pāli",ps:"Pashto, Pushto",fa:"Persian (Farsi)",pl:"Polish",pt:"Portuguese",pa:"Punjabi (Eastern)",qu:"Quechua",rm:"Romansh",ro:"Romanian",ru:"Russian",se:"Sami",sm:"Samoan",sg:"Sango",sa:"Sanskrit",sr:"Serbian",sh:"Serbo-Croatian",st:"Sesotho",tn:"Setswana",sn:"Shona",sd:"Sindhi",si:"Sinhalese",ss:"Swati",sk:"Slovak",sl:"Slovenian",so:"Somali",nr:"Southern Ndebele",es:"Spanish",su:"Sundanese",sw:"Swahili (Kiswahili)",sv:"Swedish",tl:"Tagalog",ty:"Tahitian",tg:"Tajik",ta:"Tamil",tt:"Tatar",te:"Telugu",th:"Thai",bo:"Tibetan",ti:"Tigrinya",to:"Tonga",ts:"Tsonga",tr:"Turkish",tk:"Turkmen",tw:"Twi",ug:"Uyghur",uk:"Ukrainian",ur:"Urdu",uz:"Uzbek",ve:"Venda",vi:"Vietnamese",vo:"Volapük",wa:"Wallon",cy:"Welsh",wo:"Wolof",fy:"Western Frisian",xh:"Xhosa",yi:"Yiddish",yo:"Yoruba",za:"Zhuang, Chuang",zu:"Zulu"};class D{constructor(a,e,t){g(this,"fallbackLang","");g(this,"currentLang","");g(this,"draftMode",!1);this.backend=a,this.chaiUsers=e,this.chaiAssets=t,this._registerDefaultPageTypes(),this.chaiUsers=e??new C(this.backend),this.chaiAssets=t??new v(this.backend)}_registerDefaultPageTypes(){P("page",{name:"Static Page",icon:'<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M5 8V20H19V8H5ZM5 6H19V4H5V6ZM20 22H4C3.44772 22 3 21.5523 3 21V3C3 2.44772 3.44772 2 4 2H20C20.5523 2 21 2.44772 21 3V21C21 21.5523 20.5523 22 20 22ZM7 10H11V14H7V10ZM7 16H17V18H7V16ZM13 11H17V13H13V11Z"></path></svg>'}),p("global",{name:"Global Block",helpText:"A global block can be reused in multiple pages.",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-globe w-4 h-4 text-slate-500 stroke-[1]"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path><path d="M2 12h20"></path></svg>'})}setFallbackLang(a){if(l.isEmpty(a))throw new Error("Fallback language cannot be empty");this.fallbackLang=a}getFallbackLang(){return this.fallbackLang}setCurrentLang(a){if(l.isEmpty(a))throw new Error("Current language cannot be empty");this.currentLang=a}getCurrentLang(){return this.currentLang}setDraftMode(a){this.draftMode=a}isDraftMode(){return this.draftMode}async handle(a,e){var s,n,o,c,u,S,m,f,b,w;switch(a.action){case"UPLOAD_ASSET":return(s=this.chaiAssets)==null?void 0:s.upload({file:a.data.file,name:a.data.name,folderId:a.data.folderId??null});case"GET_ASSETS":return(n=this.chaiAssets)==null?void 0:n.getAssets(a.data);case"DELETE_ASSET":return(o=this.chaiAssets)==null?void 0:o.deleteAsset(a.data.assetId);case"UPDATE_ASSET":return(c=this.chaiAssets)==null?void 0:c.updateAsset(a.data);case"REFRESH_TOKEN":return(u=this.chaiUsers)==null?void 0:u.refreshToken(a.data);case"LOGIN":return(S=this.chaiUsers)==null?void 0:S.login(a.data);case"LOGOUT":return(m=this.chaiUsers)==null?void 0:m.logout();case"CHECK_USER_STATUS":return(f=this.chaiUsers)==null?void 0:f.isUserActive(e);case"GET_ROLE_AND_PERMISSIONS":return(b=this.chaiUsers)==null?void 0:b.getUserRoleAndPermissions(e);case"GET_CHAI_USER":return(w=this.chaiUsers)==null?void 0:w.getUserInfo(e,a.data)}if(a.action==="GET_BUILDER_PAGE_DATA"){const r=await E({lang:a.data.lang,draft:!0,inBuilder:!0}),A=h(a.data.pageType);return A?{...A.dataProvider?await A.dataProvider({lang:a.data.lang,draft:!0,inBuilder:!0,pageProps:a.data.pageProps??{}}):{},global:r}:{global:r}}if(a.action==="GET_PAGE_TYPES")return Promise.all(k().map(async r=>({key:r.key,helpText:r.helpText??"",icon:r.icon??"",dynamicSegments:r.dynamicSegments??"",dynamicSlug:r.dynamicSlug??"",hasSlug:r.hasSlug??!0,name:typeof r.name=="function"?await r.name():r.name})));if(a.action==="SEARCH_PAGE_TYPE_ITEMS"){const r=h(a.data.pageType);return r?r.search?await r.search(a.data.query):this.backend.handleAction(a,e):{error:"Page type not found"}}const t=await this.backend.handleAction(a,e);return this.emit(a.action,t),t}emit(a,e){var n,o,c;if(!["CREATE_PAGE","UPDATE_PAGE","DELETE_PAGE"].includes(a))return;const t=l.get(e,"page");if(!t)return;const s=h(t.pageType);if(s)switch(a){case"CREATE_PAGE":return(n=s.onCreate)==null?void 0:n.call(s,t);case"UPDATE_PAGE":return(o=s.onUpdate)==null?void 0:o.call(s,t);case"DELETE_PAGE":return(c=s.onDelete)==null?void 0:c.call(s,t)}}setLanguageFromSlug(a){if(!this.getFallbackLang())throw new Error("Please set a fallback language using setFallbackLang(lang: string)");const e=l.first(a||[""]);Object.keys(y).includes(e)?this.setCurrentLang(e):this.setCurrentLang(this.getFallbackLang())}async resolveLink(a,e){const t=h(a);if(!t)return"/not-found";const s=this.isDraftMode(),n=this.getCurrentLang()===this.getFallbackLang()?"":this.getCurrentLang();return t.resolveLink?await t.resolveLink(e,s,n):await this.backend.handleAction({action:"GET_LINK",data:{pageType:a,id:e,draft:s,lang:n}})}async getPageBySlug(a){const e=this.isDraftMode(),t={};return k().forEach(s=>{l.has(s,"dynamicSegments")&&s.dynamicSegments&&(t[s.key]=s.dynamicSegments)}),await this.backend.handleAction({action:"GET_PAGE_META",data:{slug:a,draft:e,dynamicSegments:t}})}async getFullPage(a){const e=this.isDraftMode(),t=this.getCurrentLang(),s=this.getFallbackLang();return await this.backend.handleAction({action:"GET_PAGE",data:{id:a,lang:s===t?void 0:t,draft:e,mergePartials:!0}})}async getSiteSettings(){const a=this.isDraftMode();return await this.backend.handleAction({action:"GET_WEBSITE_SETTINGS",data:{draft:a}})}async getPageData(a,e={}){var u;const t=this.isDraftMode(),s=this.getCurrentLang(),n=h(a),[o,c]=await Promise.all([this.getGlobalData(),((u=n==null?void 0:n.dataProvider)==null?void 0:u.call(n,{lang:s,draft:t,inBuilder:!1,pageProps:e}))||Promise.resolve({})]);return n?{...c,global:o}:{global:o}}async getGlobalData(){const a=this.getCurrentLang();return await E({lang:a,draft:this.isDraftMode(),inBuilder:!1})}async request(a){return await this.backend.handleAction(a)}}class M{constructor(a="",e=L){this.apiKey=a,this.apiUrl=e}async handleUsersAction(a,e){const t=await fetch(`${this.apiUrl}/v1/api/users`,{method:"POST",body:JSON.stringify(a),headers:{"x-chai-api-key":this.apiKey,"x-chai-auth-token":e}}),s=await t.json();return l.has(s,"error")?{...s,status:t.status}:s}async handleAction(a,e){const t=await fetch(`${this.apiUrl}/v1/api/chai`,{method:"POST",body:JSON.stringify(a),headers:{"x-chai-api-key":this.apiKey,"x-chai-auth-token":e}}),s=await t.json();return l.has(s,"error")?{...s,status:t.status}:s}async handleAssetsAction(a,e){return await(await fetch(`${this.apiUrl}/v1/api/assets`,{method:"POST",body:JSON.stringify(a),headers:{"x-chai-api-key":this.apiKey,"x-chai-upload":"true","x-chai-auth-token":e}})).json()}}const L="https://api.chaibuilder.com";exports.API_URL=L;exports.ChaiBuilderPages=D;exports.ChaiBuilderPagesBackend=M;exports.ChaiBuilderPagesUserManagement=C;exports.LANGUAGES=y;exports.getChaiGlobalData=E;exports.getChaiPageType=h;exports.getChaiPageTypes=k;exports.registerChaiGlobalDataProvider=G;exports.registerChaiPageType=P;exports.registerChaiPartialType=p;
package/dist/server.d.ts CHANGED
@@ -70,17 +70,25 @@ export declare interface ChaiBuilderPagesAssetsInterface {
70
70
  upload({ file, folderId, name, }: {
71
71
  name: string;
72
72
  file: Base64URLString;
73
- folderId?: string;
74
- }): Promise<ChaiAsset>;
75
- getAssets(params: AssetsParams): Promise<Partial<ChaiAsset>[]>;
73
+ folderId?: string | null;
74
+ }): Promise<ChaiAsset | {
75
+ error: string;
76
+ }>;
77
+ getAssets(params: AssetsParams): Promise<Partial<ChaiAsset>[] | {
78
+ error: string;
79
+ }>;
76
80
  deleteAsset(assetId: string): Promise<{
77
81
  success: boolean;
82
+ } | {
83
+ error: string;
78
84
  }>;
79
- updateAssetMetadata(asset: Pick<ChaiAsset, "description" | "id">): Promise<ChaiAsset>;
80
- updateAssetFile({ id, file, }: {
85
+ updateAsset({ id, file, description, }: {
81
86
  id: string;
82
- file: Base64URLString;
83
- }): Promise<ChaiAsset>;
87
+ file?: Base64URLString;
88
+ description?: string;
89
+ }): Promise<ChaiAsset | {
90
+ error: string;
91
+ }>;
84
92
  }
85
93
 
86
94
  export declare class ChaiBuilderPagesBackend implements ChaiBuilderPagesBackendInterface {
@@ -94,8 +102,8 @@ export declare class ChaiBuilderPagesBackend implements ChaiBuilderPagesBackendI
94
102
 
95
103
  export declare interface ChaiBuilderPagesBackendInterface {
96
104
  handleAction(body: any, authToken?: string): Promise<any>;
97
- handleUsersAction(body: any, authToken?: string): Promise<any>;
98
- handleAssetsAction(body: any, authToken?: string): Promise<any>;
105
+ handleUsersAction?(body: any, authToken?: string): Promise<any>;
106
+ handleAssetsAction?(body: any, authToken?: string): Promise<any>;
99
107
  }
100
108
 
101
109
  export declare interface ChaiBuilderPagesInterface {
package/dist/server.js CHANGED
@@ -1,23 +1,23 @@
1
- var _ = Object.defineProperty;
2
- var C = (s, a, e) => a in s ? _(s, a, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[a] = e;
3
- var u = (s, a, e) => C(s, typeof a != "symbol" ? a + "" : a, e);
4
- import { isEmpty as b, get as L, first as y, has as A } from "lodash-es";
5
- const g = {}, U = (s, a) => {
6
- g[s] = { key: s, ...a, hasSlug: !0 };
7
- }, v = (s, a) => {
8
- g[s] = { key: s, ...a, hasSlug: !1 };
9
- }, T = () => Object.values(g), l = (s) => g[s];
10
- let p = async (s) => ({
11
- ...s
1
+ var T = Object.defineProperty;
2
+ var C = (i, a, e) => a in i ? T(i, a, { enumerable: !0, configurable: !0, writable: !0, value: e }) : i[a] = e;
3
+ var u = (i, a, e) => C(i, typeof a != "symbol" ? a + "" : a, e);
4
+ import { isEmpty as w, get as L, first as _, has as A } from "lodash-es";
5
+ const g = {}, y = (i, a) => {
6
+ g[i] = { key: i, ...a, hasSlug: !0 };
7
+ }, U = (i, a) => {
8
+ g[i] = { key: i, ...a, hasSlug: !1 };
9
+ }, b = () => Object.values(g), h = (i) => g[i];
10
+ let P = async (i) => ({
11
+ ...i
12
12
  });
13
- const B = (s) => p = s, P = async (s) => {
13
+ const H = (i) => P = i, p = async (i) => {
14
14
  try {
15
- return await p(s);
15
+ return await P(i);
16
16
  } catch (a) {
17
17
  return console.error(a), {};
18
18
  }
19
19
  };
20
- class G {
20
+ class v {
21
21
  constructor(a) {
22
22
  this.backend = a;
23
23
  }
@@ -26,86 +26,104 @@ class G {
26
26
  folderId: e,
27
27
  name: t
28
28
  }) {
29
- return await this.backend.handleAssetsAction({
29
+ var s, o;
30
+ return console.log("upload", a, e, t), await ((o = (s = this.backend).handleAssetsAction) == null ? void 0 : o.call(s, {
30
31
  action: "UPLOAD_ASSET",
31
32
  data: {
32
33
  name: t,
33
34
  file: a,
34
35
  folderId: e
35
36
  }
36
- });
37
+ }));
37
38
  }
38
39
  async getAssets(a) {
39
- return this.backend.handleAssetsAction({
40
+ var e, t;
41
+ return (t = (e = this.backend).handleAssetsAction) == null ? void 0 : t.call(e, {
40
42
  action: "GET_ASSETS",
41
43
  data: a
42
44
  });
43
45
  }
44
46
  async deleteAsset(a) {
45
- return this.backend.handleAssetsAction({
47
+ var e, t;
48
+ return (t = (e = this.backend).handleAssetsAction) == null ? void 0 : t.call(e, {
46
49
  action: "DELETE_ASSET",
47
50
  data: { assetId: a }
48
51
  });
49
52
  }
50
- async updateAssetMetadata(a) {
51
- return this.backend.handleAssetsAction({
52
- action: "UPDATE_ASSET_METADATA",
53
- data: a
54
- });
55
- }
56
- async updateAssetFile({ id: a, file: e }) {
57
- return this.backend.handleAssetsAction({
58
- action: "UPDATE_ASSET_FILE",
59
- data: { id: a, file: e }
53
+ async updateAsset({
54
+ id: a,
55
+ file: e,
56
+ description: t
57
+ }) {
58
+ var n, s;
59
+ return (s = (n = this.backend).handleAssetsAction) == null ? void 0 : s.call(n, {
60
+ action: "UPDATE_ASSET",
61
+ data: { id: a, file: e, description: t }
60
62
  });
61
63
  }
62
64
  }
63
- class D {
65
+ class G {
64
66
  constructor(a) {
65
67
  this.backend = a;
66
68
  }
67
69
  async refreshToken(a) {
68
- const e = await this.backend.handleUsersAction({
70
+ var t, n;
71
+ const e = await ((n = (t = this.backend).handleUsersAction) == null ? void 0 : n.call(t, {
69
72
  action: "REFRESH_TOKEN",
70
73
  data: a
71
- });
74
+ }));
72
75
  return e.error ? { error: e.error } : e;
73
76
  }
74
77
  async login({
75
78
  email: a,
76
79
  password: e
77
80
  }) {
78
- const t = await this.backend.handleUsersAction({
81
+ var n, s;
82
+ const t = await ((s = (n = this.backend).handleUsersAction) == null ? void 0 : s.call(n, {
79
83
  action: "LOGIN",
80
84
  data: { email: a, password: e }
81
- });
85
+ }));
82
86
  return t.error ? { error: t.error } : t;
83
87
  }
84
88
  async logout() {
85
- await this.backend.handleUsersAction({
89
+ var a, e;
90
+ await ((e = (a = this.backend).handleUsersAction) == null ? void 0 : e.call(a, {
86
91
  action: "LOGOUT"
87
- });
92
+ }));
88
93
  }
89
94
  async isUserActive(a) {
90
- return (await this.backend.handleUsersAction(
91
- { action: "CHECK_USER_STATUS" },
95
+ var t, n;
96
+ return (await ((n = (t = this.backend).handleUsersAction) == null ? void 0 : n.call(
97
+ t,
98
+ {
99
+ action: "CHECK_USER_STATUS"
100
+ },
92
101
  a
93
- )).success;
102
+ ))).success;
94
103
  }
95
104
  async getUserRoleAndPermissions(a) {
96
- return await this.backend.handleUsersAction(
97
- { action: "GET_ROLE_AND_PERMISSIONS" },
105
+ var t, n;
106
+ return await ((n = (t = this.backend).handleUsersAction) == null ? void 0 : n.call(
107
+ t,
108
+ {
109
+ action: "GET_ROLE_AND_PERMISSIONS"
110
+ },
98
111
  a
99
- );
112
+ ));
100
113
  }
101
114
  async getUserInfo(a, e) {
102
- return await this.backend.handleUsersAction(
103
- { action: "GET_CHAI_USER", data: e },
115
+ var n, s;
116
+ return await ((s = (n = this.backend).handleUsersAction) == null ? void 0 : s.call(
117
+ n,
118
+ {
119
+ action: "GET_CHAI_USER",
120
+ data: e
121
+ },
104
122
  a
105
- );
123
+ ));
106
124
  }
107
125
  }
108
- const M = {
126
+ const D = {
109
127
  ab: "Abkhazian",
110
128
  aa: "Afar",
111
129
  af: "Afrikaans",
@@ -294,25 +312,25 @@ const M = {
294
312
  za: "Zhuang, Chuang",
295
313
  zu: "Zulu"
296
314
  };
297
- class K {
315
+ class B {
298
316
  constructor(a, e, t) {
299
317
  u(this, "fallbackLang", "");
300
318
  u(this, "currentLang", "");
301
319
  u(this, "draftMode", !1);
302
- this.backend = a, this.chaiUsers = e, this.chaiAssets = t, this._registerDefaultPageTypes(), this.chaiUsers = e ?? new D(this.backend), this.chaiAssets = t ?? new G(this.backend);
320
+ this.backend = a, this.chaiUsers = e, this.chaiAssets = t, this._registerDefaultPageTypes(), this.chaiUsers = e ?? new G(this.backend), this.chaiAssets = t ?? new v(this.backend);
303
321
  }
304
322
  _registerDefaultPageTypes() {
305
- U("page", {
323
+ y("page", {
306
324
  name: "Static Page",
307
325
  icon: '<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M5 8V20H19V8H5ZM5 6H19V4H5V6ZM20 22H4C3.44772 22 3 21.5523 3 21V3C3 2.44772 3.44772 2 4 2H20C20.5523 2 21 2.44772 21 3V21C21 21.5523 20.5523 22 20 22ZM7 10H11V14H7V10ZM7 16H17V18H7V16ZM13 11H17V13H13V11Z"></path></svg>'
308
- }), v("global", {
326
+ }), U("global", {
309
327
  name: "Global Block",
310
328
  helpText: "A global block can be reused in multiple pages.",
311
329
  icon: '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-globe w-4 h-4 text-slate-500 stroke-[1]"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path><path d="M2 12h20"></path></svg>'
312
330
  });
313
331
  }
314
332
  setFallbackLang(a) {
315
- if (b(a))
333
+ if (w(a))
316
334
  throw new Error("Fallback language cannot be empty");
317
335
  this.fallbackLang = a;
318
336
  }
@@ -320,7 +338,7 @@ class K {
320
338
  return this.fallbackLang;
321
339
  }
322
340
  setCurrentLang(a) {
323
- if (b(a))
341
+ if (w(a))
324
342
  throw new Error("Current language cannot be empty");
325
343
  this.currentLang = a;
326
344
  }
@@ -334,27 +352,24 @@ class K {
334
352
  return this.draftMode;
335
353
  }
336
354
  async handle(a, e) {
337
- var n, r, o, c, h, E, k, m, S, f, w;
355
+ var n, s, o, c, l, k, m, E, S, f;
338
356
  switch (a.action) {
339
357
  // Media
340
- case "UPLOAD_MEDIA":
358
+ case "UPLOAD_ASSET":
341
359
  return (n = this.chaiAssets) == null ? void 0 : n.upload({
342
360
  file: a.data.file,
343
- name: a.data.name
361
+ name: a.data.name,
362
+ folderId: a.data.folderId ?? null
344
363
  });
345
364
  case "GET_ASSETS":
346
- return (r = this.chaiAssets) == null ? void 0 : r.getAssets(a.data);
365
+ return (s = this.chaiAssets) == null ? void 0 : s.getAssets(a.data);
347
366
  case "DELETE_ASSET":
348
367
  return (o = this.chaiAssets) == null ? void 0 : o.deleteAsset(a.data.assetId);
349
- case "UPDATE_ASSET_METADATA":
350
- return (c = this.chaiAssets) == null ? void 0 : c.updateAssetMetadata(a.data);
351
- case "UPDATE_ASSET_FILE":
352
- return (h = this.chaiAssets) == null ? void 0 : h.updateAssetFile(
353
- a.data
354
- );
368
+ case "UPDATE_ASSET":
369
+ return (c = this.chaiAssets) == null ? void 0 : c.updateAsset(a.data);
355
370
  // Users
356
371
  case "REFRESH_TOKEN":
357
- return (E = this.chaiUsers) == null ? void 0 : E.refreshToken(
372
+ return (l = this.chaiUsers) == null ? void 0 : l.refreshToken(
358
373
  a.data
359
374
  );
360
375
  case "LOGIN":
@@ -364,21 +379,21 @@ class K {
364
379
  case "LOGOUT":
365
380
  return (m = this.chaiUsers) == null ? void 0 : m.logout();
366
381
  case "CHECK_USER_STATUS":
367
- return (S = this.chaiUsers) == null ? void 0 : S.isUserActive(e);
382
+ return (E = this.chaiUsers) == null ? void 0 : E.isUserActive(e);
368
383
  case "GET_ROLE_AND_PERMISSIONS":
369
- return (f = this.chaiUsers) == null ? void 0 : f.getUserRoleAndPermissions(e);
384
+ return (S = this.chaiUsers) == null ? void 0 : S.getUserRoleAndPermissions(e);
370
385
  case "GET_CHAI_USER":
371
- return (w = this.chaiUsers) == null ? void 0 : w.getUserInfo(
386
+ return (f = this.chaiUsers) == null ? void 0 : f.getUserInfo(
372
387
  e,
373
388
  a.data
374
389
  );
375
390
  }
376
391
  if (a.action === "GET_BUILDER_PAGE_DATA") {
377
- const i = await P({
392
+ const r = await p({
378
393
  lang: a.data.lang,
379
394
  draft: !0,
380
395
  inBuilder: !0
381
- }), d = l(
396
+ }), d = h(
382
397
  a.data.pageType
383
398
  );
384
399
  return d ? {
@@ -388,40 +403,40 @@ class K {
388
403
  inBuilder: !0,
389
404
  pageProps: a.data.pageProps ?? {}
390
405
  }) : {},
391
- global: i
392
- } : { global: i };
406
+ global: r
407
+ } : { global: r };
393
408
  }
394
409
  if (a.action === "GET_PAGE_TYPES")
395
410
  return Promise.all(
396
- T().map(async (i) => ({
397
- key: i.key,
398
- helpText: i.helpText ?? "",
399
- icon: i.icon ?? "",
400
- dynamicSegments: i.dynamicSegments ?? "",
401
- dynamicSlug: i.dynamicSlug ?? "",
402
- hasSlug: i.hasSlug ?? !0,
403
- name: typeof i.name == "function" ? await i.name() : i.name
411
+ b().map(async (r) => ({
412
+ key: r.key,
413
+ helpText: r.helpText ?? "",
414
+ icon: r.icon ?? "",
415
+ dynamicSegments: r.dynamicSegments ?? "",
416
+ dynamicSlug: r.dynamicSlug ?? "",
417
+ hasSlug: r.hasSlug ?? !0,
418
+ name: typeof r.name == "function" ? await r.name() : r.name
404
419
  }))
405
420
  );
406
421
  if (a.action === "SEARCH_PAGE_TYPE_ITEMS") {
407
- const i = l(
422
+ const r = h(
408
423
  a.data.pageType
409
424
  );
410
- return i ? i.search ? await i.search(a.data.query) : this.backend.handleAction(a, e) : { error: "Page type not found" };
425
+ return r ? r.search ? await r.search(a.data.query) : this.backend.handleAction(a, e) : { error: "Page type not found" };
411
426
  }
412
427
  const t = await this.backend.handleAction(a, e);
413
428
  return this.emit(a.action, t), t;
414
429
  }
415
430
  emit(a, e) {
416
- var r, o, c;
431
+ var s, o, c;
417
432
  if (!["CREATE_PAGE", "UPDATE_PAGE", "DELETE_PAGE"].includes(a)) return;
418
433
  const t = L(e, "page");
419
434
  if (!t) return;
420
- const n = l(t.pageType);
435
+ const n = h(t.pageType);
421
436
  if (n)
422
437
  switch (a) {
423
438
  case "CREATE_PAGE":
424
- return (r = n.onCreate) == null ? void 0 : r.call(n, t);
439
+ return (s = n.onCreate) == null ? void 0 : s.call(n, t);
425
440
  case "UPDATE_PAGE":
426
441
  return (o = n.onUpdate) == null ? void 0 : o.call(n, t);
427
442
  case "DELETE_PAGE":
@@ -434,27 +449,27 @@ class K {
434
449
  throw new Error(
435
450
  "Please set a fallback language using setFallbackLang(lang: string)"
436
451
  );
437
- const e = y(a || [""]);
438
- Object.keys(M).includes(e) ? this.setCurrentLang(e) : this.setCurrentLang(this.getFallbackLang());
452
+ const e = _(a || [""]);
453
+ Object.keys(D).includes(e) ? this.setCurrentLang(e) : this.setCurrentLang(this.getFallbackLang());
439
454
  }
440
455
  async resolveLink(a, e) {
441
- const t = l(a);
456
+ const t = h(a);
442
457
  if (!t)
443
458
  return "/not-found";
444
- const n = this.isDraftMode(), r = this.getCurrentLang() === this.getFallbackLang() ? "" : this.getCurrentLang();
445
- return t.resolveLink ? await t.resolveLink(e, n, r) : await this.backend.handleAction({
459
+ const n = this.isDraftMode(), s = this.getCurrentLang() === this.getFallbackLang() ? "" : this.getCurrentLang();
460
+ return t.resolveLink ? await t.resolveLink(e, n, s) : await this.backend.handleAction({
446
461
  action: "GET_LINK",
447
462
  data: {
448
463
  pageType: a,
449
464
  id: e,
450
465
  draft: n,
451
- lang: r
466
+ lang: s
452
467
  }
453
468
  });
454
469
  }
455
470
  async getPageBySlug(a) {
456
471
  const e = this.isDraftMode(), t = {};
457
- return T().forEach((n) => {
472
+ return b().forEach((n) => {
458
473
  A(n, "dynamicSegments") && n.dynamicSegments && (t[n.key] = n.dynamicSegments);
459
474
  }), await this.backend.handleAction({
460
475
  action: "GET_PAGE_META",
@@ -481,24 +496,24 @@ class K {
481
496
  });
482
497
  }
483
498
  async getPageData(a, e = {}) {
484
- var h;
485
- const t = this.isDraftMode(), n = this.getCurrentLang(), r = l(a), [o, c] = await Promise.all([
499
+ var l;
500
+ const t = this.isDraftMode(), n = this.getCurrentLang(), s = h(a), [o, c] = await Promise.all([
486
501
  this.getGlobalData(),
487
- ((h = r == null ? void 0 : r.dataProvider) == null ? void 0 : h.call(r, {
502
+ ((l = s == null ? void 0 : s.dataProvider) == null ? void 0 : l.call(s, {
488
503
  lang: n,
489
504
  draft: t,
490
505
  inBuilder: !1,
491
506
  pageProps: e
492
507
  })) || Promise.resolve({})
493
508
  ]);
494
- return r ? {
509
+ return s ? {
495
510
  ...c,
496
511
  global: o
497
512
  } : { global: o };
498
513
  }
499
514
  async getGlobalData() {
500
515
  const a = this.getCurrentLang();
501
- return await P({
516
+ return await p({
502
517
  lang: a,
503
518
  draft: this.isDraftMode(),
504
519
  inBuilder: !1
@@ -508,8 +523,8 @@ class K {
508
523
  return await this.backend.handleAction(a);
509
524
  }
510
525
  }
511
- class N {
512
- constructor(a = "", e = I) {
526
+ class K {
527
+ constructor(a = "", e = M) {
513
528
  this.apiKey = a, this.apiUrl = e;
514
529
  }
515
530
  async handleUsersAction(a, e) {
@@ -546,17 +561,17 @@ class N {
546
561
  })).json();
547
562
  }
548
563
  }
549
- const I = "https://api.chaibuilder.com";
564
+ const M = "https://api.chaibuilder.com";
550
565
  export {
551
- I as API_URL,
552
- K as ChaiBuilderPages,
553
- N as ChaiBuilderPagesBackend,
554
- D as ChaiBuilderPagesUserManagement,
555
- M as LANGUAGES,
556
- P as getChaiGlobalData,
557
- l as getChaiPageType,
558
- T as getChaiPageTypes,
559
- B as registerChaiGlobalDataProvider,
560
- U as registerChaiPageType,
561
- v as registerChaiPartialType
566
+ M as API_URL,
567
+ B as ChaiBuilderPages,
568
+ K as ChaiBuilderPagesBackend,
569
+ G as ChaiBuilderPagesUserManagement,
570
+ D as LANGUAGES,
571
+ p as getChaiGlobalData,
572
+ h as getChaiPageType,
573
+ b as getChaiPageTypes,
574
+ H as registerChaiGlobalDataProvider,
575
+ y as registerChaiPageType,
576
+ U as registerChaiPartialType
562
577
  };
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "author": "Suraj Air",
4
4
  "license": "Private",
5
5
  "homepage": "https://chaibuilder.com",
6
- "version": "0.4.5",
6
+ "version": "0.4.6-beta.2",
7
7
  "type": "module",
8
8
  "files": [
9
9
  "dist"
@@ -59,8 +59,8 @@
59
59
  "test": "vitest"
60
60
  },
61
61
  "peerDependencies": {
62
- "@chaibuilder/sdk": "2.2.5",
63
62
  "@chaibuilder/runtime": "2.1.2",
63
+ "@chaibuilder/sdk": "2.2.5",
64
64
  "@types/react": "*",
65
65
  "@types/react-dom": "*",
66
66
  "react": "^18.0 || ^19.0",
@@ -86,6 +86,7 @@
86
86
  "@tailwindcss/typography": "^0.5.16",
87
87
  "@tanstack/react-query": "^5.64.2",
88
88
  "@types/express-fileupload": "^1.5.1",
89
+ "canvas": "^3.1.0",
89
90
  "canvas-confetti": "^1.9.3",
90
91
  "cssnano": "^7.0.6",
91
92
  "date-fns": "^4.1.0",
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),r=require("react"),W=require("react-dropzone"),g=require("lucide-react"),i=require("@chaibuilder/sdk/ui"),z=require("lodash-es"),D=require("@chaibuilder/sdk"),x=require("@tanstack/react-query"),c=require("./index-BH25LDvP.cjs"),j=require("sonner"),X=(t={})=>{c.useApiUrl(),c.useFetch();const{search:n,page:o=1,limit:l=10}=t;return x.useQuery({queryKey:[c.ACTIONS.GET_ASSETS,{search:n,page:o,limit:l}],queryFn:async()=>{const u=localStorage.getItem("assets")||"[]";return JSON.parse(u)},retry:1})},Z=()=>{c.useApiUrl();const t=x.useQueryClient();return c.useFetch(),x.useMutation({mutationFn:async n=>{const o=localStorage.getItem("assets")||"[]";return localStorage.setItem("assets",JSON.stringify([...JSON.parse(o)||[],{id:Math.random().toString(36).substring(2,15),name:"123",url:n,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),type:"image",size:Math.random()*1e3}])),!0},onSuccess:()=>{t.invalidateQueries({queryKey:[c.ACTIONS.GET_ASSETS]}),j.toast.success("Asset uploaded successfully")},onError:()=>{j.toast.error("Failed to upload asset")}})},$=()=>{c.useApiUrl();const t=x.useQueryClient();return c.useFetch(),x.useMutation({mutationFn:async n=>{const o=localStorage.getItem("assets")||"[]";return localStorage.setItem("assets",JSON.stringify((JSON.parse(o)||[]).filter(l=>l.id!==n))),!0},onSuccess:()=>{t.invalidateQueries({queryKey:[c.ACTIONS.GET_ASSETS]}),j.toast.success("Asset deleted successfully")},onError:()=>{j.toast.error("Failed to delete asset")}})},ee=()=>{c.useApiUrl();const t=x.useQueryClient();return c.useFetch(),x.useMutation({mutationFn:async n=>{const o=localStorage.getItem("assets")||"[]";return localStorage.setItem("assets",JSON.stringify((JSON.parse(o)||[]).map(l=>l.id===n.id?{...l,url:n.file}:l))),!0},onSuccess:()=>{t.invalidateQueries({queryKey:[c.ACTIONS.GET_ASSETS]}),j.toast.success("Asset updated successfully")},onError:()=>{j.toast.error("Failed to update asset")}})};function se(){const[n,o]=r.useState([]),[l,u]=r.useState({query:"",page:1,pageSize:10}),y=z.debounce(()=>l.query,300)(),{data:p,isLoading:v}=X({search:(y==null?void 0:y.toLowerCase().trim())||"",page:l.page,limit:l.pageSize}),{mutate:w,isPaused:h}=ee(),{mutate:S,isPending:E}=Z(),{mutate:f,isPending:m}=$(),N=r.useCallback(()=>{u(d=>({...d,page:d.page+1}))},[]),A=r.useCallback(d=>{u(b=>({...b,query:d}))},[]),F=r.useCallback(d=>{o(b=>z.find(b,{id:d.id})?[]:[d])},[!1]),C=r.useCallback(()=>{o([])},[]);return{query:(l==null?void 0:l.query)||"",selectedAssets:n,assets:p||[],uploadAsset:S,updateAsset:w,deleteAsset:f,loadMoreAssets:N,updateSearchQuery:A,clearSelectedAssets:C,updateSelectedAssets:F,isLoadingAssets:v,isUploadingAsset:E,isUpdatingAsset:h,isDeletingAsset:m}}const te=r.lazy(()=>Promise.resolve().then(()=>require("./asset-metadata-editor-YXDey62L.cjs"))),ae=r.lazy(()=>Promise.resolve().then(()=>require("./image-editor-D8wu5UNM.cjs")));function re({close:t,onSelect:n,mode:o="image"}){const u=r.useMemo(()=>[o],[o]),[y,p]=r.useState("browse"),[v,w]=r.useState(null),[h,S]=r.useState({show:!1,file:""}),{query:E,assets:f,selectedAssets:m,uploadAsset:N,updateAsset:A,deleteAsset:F,loadMoreAssets:C,updateSearchQuery:d,clearSelectedAssets:b,updateSelectedAssets:k,isLoadingAssets:T,isUploadingAsset:O,isUpdatingAsset:B}=se(),U=r.useRef(null);r.useEffect(()=>{const s=U.current;if(!s)return;const a=()=>{s.scrollHeight-s.scrollTop<=s.clientHeight*1.5&&!T&&C()};return s.addEventListener("scroll",a),()=>s.removeEventListener("scroll",a)},[T,C]);const P=r.useCallback(async s=>new Promise((a,M)=>{const Y=s[0],q=new FileReader;q.readAsDataURL(Y),q.onload=async()=>{const I=await N(q.result);p("browse"),a(I)},q.onerror=I=>M(I)}),[N]),{getRootProps:L,getInputProps:Q,isDragActive:R}=W.useDropzone({onDrop:P,accept:{"image/*":u.includes("image")?[]:[],"video/*":u.includes("video")?[]:[]},maxSize:10*1024*1024}),J=()=>{n([m[0].url]),t()},G=async s=>{await F(s.id)},K=s=>{w(s)},_=async(s,a)=>{await A(z.merge(s,a)),t()},H=s=>{d(s.target.value)},V=async(s,a)=>{try{a?await N(s):await A({id:h.id,file:s}),S({show:!1,file:""}),p("browse")}catch(M){console.error("Error saving edited image:",M)}};return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"min-w-[700px] min-h-[600px] w-[900px] max-w-[900px]",children:[e.jsx("h1",{className:"text-lg font-medium pb-4",children:"Digital Asset Manager"}),e.jsxs(i.Tabs,{value:y,onValueChange:s=>p(s),className:"flex-1 flex flex-col h-full",children:[e.jsxs("div",{className:"flex justify-between items-center mb-2",children:[e.jsxs(i.TabsList,{children:[e.jsx(i.TabsTrigger,{value:"browse",children:"Browse Assets"}),e.jsx(i.TabsTrigger,{value:"upload",children:"Upload"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[m.length>0&&e.jsx(e.Fragment,{children:e.jsx(i.Button,{variant:"outline",size:"sm",onClick:()=>b(),title:"Clear selection",children:"Clear"})}),e.jsx(i.Button,{size:"sm",onClick:J,disabled:m.length===0,children:"Select Asset"})]})]}),e.jsxs(i.TabsContent,{value:"browse",className:"flex-1 flex flex-col",children:[e.jsx("div",{className:"flex items-center gap-2 mb-2",children:e.jsxs("div",{className:"relative w-full",children:[e.jsx(g.Search,{className:"absolute left-2 top-2.5 h-4 w-4 text-muted-foreground"}),e.jsx(i.Input,{placeholder:"Search assets...",value:E,onChange:H,className:"pl-8"})]})}),T&&f.length===0?e.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-2 overflow-y-auto max-h-[550px] p-1",children:[e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"})]}):f.length===0?e.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-center p-12 h-[380px]",children:[e.jsxs("div",{className:"text-muted-foreground mb-2",children:[e.jsx("h3",{className:"text-gray-800 font-medium",children:"No assets to display"}),e.jsx("p",{className:"text-sm",children:"You haven't uploaded any assets yet. Start by uploading your first asset."})]}),e.jsx("div",{className:"flex gap-2 pt-4",children:e.jsx(i.Button,{size:"lg",onClick:()=>p("upload"),children:"Upload Assets"})})]}):e.jsxs("div",{ref:U,className:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-2 overflow-y-auto max-h-[550px] p-1",children:[f.map(s=>e.jsx(i.Card,{className:D.mergeClasses("cursor-pointer overflow-hidden transition-all",m.some(a=>a.id===s.id)?"ring-2 ring-primary":"hover:ring-2 hover:ring-primary/20"),onClick:()=>k(s),children:e.jsxs(i.CardContent,{className:"p-0 relative group",children:[e.jsxs("div",{className:"aspect-square relative overflow-hidden bg-muted",children:[s.type==="image"?e.jsx("img",{src:s.url||"/placeholder.svg",alt:s.name,className:"object-cover w-full h-full"}):e.jsxs("div",{className:"flex items-center justify-center h-full",children:[e.jsx(g.Film,{className:"h-12 w-12 text-muted-foreground"}),s.thumbnailUrl&&e.jsx("img",{src:s.thumbnailUrl||"/placeholder.svg",alt:s.name,className:"absolute inset-0 object-cover w-full h-full"})]}),e.jsxs("div",{className:"absolute inset-0 bg-black/50 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center gap-2",children:[e.jsx(i.Button,{variant:"secondary",size:"icon",className:"h-8 w-8",onClick:a=>{a.stopPropagation(),K(s)},children:e.jsx(g.ImageIcon,{className:"h-4 w-4"})}),e.jsx(i.Button,{variant:"secondary",size:"icon",className:"h-8 w-8",onClick:a=>{a.stopPropagation(),S({id:s.id,show:!0,file:s.url,name:s.name})},children:e.jsx(g.Edit,{className:"h-4 w-4"})}),e.jsx(i.Button,{variant:"destructive",size:"icon",className:"h-8 w-8",onClick:a=>{a.stopPropagation(),G(s)},children:e.jsx(g.Trash2,{className:"h-4 w-4"})})]}),m.some(a=>a.id===s.id)&&e.jsx("div",{className:"absolute top-2 left-2",children:e.jsx("input",{type:"checkbox",checked:m.some(a=>a.id===s.id),readOnly:!0,className:"rounded-full"})})]}),e.jsxs("div",{className:"p-2",children:[e.jsx("div",{className:"text-sm font-medium truncate",title:s.name,children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground flex items-center justify-between",children:[e.jsx("span",{children:le((s==null?void 0:s.size)||0)}),e.jsx("span",{children:ie(s.createdAt)})]})]})]})},s.id)),T&&f.length>0&&e.jsx("div",{className:"col-span-full flex justify-center py-4",children:e.jsx(g.Loader2,{className:"h-6 w-6 animate-spin text-muted-foreground"})})]})]}),e.jsx(i.TabsContent,{value:"upload",className:"flex-1 ",children:e.jsxs("div",{...L(),className:D.mergeClasses("border-2 border-dashed rounded-lg h-[380px] flex flex-col items-center justify-center text-center cursor-pointer hover:bg-gray-50",R?"border-primary bg-primary/5":"border-muted-foreground/20"),children:[e.jsx("input",{...Q()}),B||O?e.jsxs("div",{className:"flex flex-col items-center",children:[e.jsx(g.Loader2,{className:"h-12 w-12 text-primary animate-spin mb-4"}),e.jsx("h3",{className:"text-lg font-medium mb-1",children:"Uploading files..."}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Please wait while your files are being processed."})]}):e.jsxs(e.Fragment,{children:[e.jsx(g.Upload,{className:"h-12 w-12 text-muted-foreground mb-4"}),e.jsx("h3",{className:"text-lg font-medium mb-1",children:"Drag & drop files here"}),e.jsx("p",{className:"text-sm text-muted-foreground mb-4",children:"or click to browse your files"}),e.jsxs("div",{className:"text-xs text-muted-foreground",children:[e.jsxs("p",{children:["Accepted file types: ",u.join(", ")]}),e.jsxs("p",{children:["Maximum file size: ",10,"MB"]})]})]})]})})]})]}),v&&e.jsx(r.Suspense,{fallback:e.jsx("div",{children:"Loading..."}),children:e.jsx(te,{asset:v,onSave:s=>_(v,s),onCancel:()=>{w(null)}})}),h.show&&e.jsx(r.Suspense,{fallback:e.jsx("div",{children:"Loading..."}),children:e.jsx(ae,{imageUrl:h.file,onSave:V,onClose:()=>S({show:!1,file:""}),defaultSavedImageName:h.name,isEditing:!!h.id})})]})}function le(t){return t<1024?t+" B":t<1024*1024?(t/1024).toFixed(1)+" KB":t<1024*1024*1024?(t/(1024*1024)).toFixed(1)+" MB":(t/(1024*1024*1024)).toFixed(1)+" GB"}function ie(t){const n=new Date(t);return new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric"}).format(n)}exports.default=re;