@chaibuilder/pages 0.16.12 → 0.16.13

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,4 +1,4 @@
1
- "use strict";var G=Object.defineProperty;var H=(s,e,a)=>e in s?G(s,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):s[e]=a;var p=(s,e,a)=>H(s,typeof e!="symbol"?e+"":e,a);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("lodash-es"),B=require("ai"),K=require("@chaibuilder/runtime"),F=`You are an expert language translator specializing in preserving data structure integrity while translating content.
1
+ "use strict";var G=Object.defineProperty;var H=(i,e,a)=>e in i?G(i,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[e]=a;var p=(i,e,a)=>H(i,typeof e!="symbol"?e+"":e,a);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("lodash-es"),B=require("ai"),K=require("@chaibuilder/runtime"),F=`You are an expert language translator specializing in preserving data structure integrity while translating content.
2
2
 
3
3
  TASK: Translate all text content within the provided JSON structure to the target language.
4
4
 
@@ -275,4 +275,4 @@ Format:
275
275
  - NEVER break the format.
276
276
  - NEVER place ANYTHING before '--START--'.
277
277
  - The output must always begin with '--START--' and end with '--END--'.
278
- `.trim();function O(s=null){if(s)switch(s){case"TRANSLATE_CONTENT":return F;case"UPDATE_CONTENT":return V;default:return P}return P}let v=async s=>({...s});const Y=s=>{v=s},R=async s=>{try{return await v(s)}catch(e){return console.error(e),{}}},C={},k=()=>Object.values(C),m=s=>C[s],M=(s,e)=>{C[s]={key:s,...e,hasSlug:!0}},L=(s,e)=>{C[s]={key:s,...e,hasSlug:!1}},w={};function z(s,e){l.has(w,s)&&console.warn(`Collection ${s} already registered`),w[s]={...e,id:s}}const U=()=>Object.values(w),I=s=>l.get(w,s);class D{constructor(e){p(this,"model","google/gemini-2.5-pro");p(this,"temperature",.7);this.options=e,this.model=(e==null?void 0:e.model)??this.model}async handleRequest(e,a){var u,S;const{messages:n,image:t,initiator:i=null,model:o}=e,d=o||this.model,g=n.filter(c=>c.role!=="system"),T=g[g.length-1],f=t?[...g.slice(0,-1),{role:"user",content:[{type:"text",text:T.content},{type:"image",image:t}]}]:n;B.streamText({model:d,system:O(i),messages:f,temperature:this.temperature,onFinish:((u=this.options)==null?void 0:u.onFinish)??l.noop,onError:((S=this.options)==null?void 0:S.onError)??l.noop}).pipeTextStreamToResponse(a)}isConfigured(){return!0}}class j{constructor(e){this.backend=e}async upload({file:e,folderId:a,name:n},t){var o,d;return await((d=(o=this.backend).handleAssetsAction)==null?void 0:d.call(o,{action:"UPLOAD_ASSET",data:{name:n,file:e,folderId:a}},t))}async getAsset({id:e},a){var n,t;return(t=(n=this.backend).handleAssetsAction)==null?void 0:t.call(n,{action:"GET_ASSET",data:{id:e}},a)}async getAssets(e,a){var n,t;return(t=(n=this.backend).handleAssetsAction)==null?void 0:t.call(n,{action:"GET_ASSETS",data:e},a)}async deleteAsset({id:e},a){var n,t;return(t=(n=this.backend).handleAssetsAction)==null?void 0:t.call(n,{action:"DELETE_ASSET",data:{id:e}},a)}async updateAsset({id:e,file:a,description:n},t){var i,o;return(o=(i=this.backend).handleAssetsAction)==null?void 0:o.call(i,{action:"UPDATE_ASSET",data:{id:e,file:a,description:n}},t)}}class x{constructor(e){this.backend=e}async refreshToken(e){var n,t;const a=await((t=(n=this.backend).handleUsersAction)==null?void 0:t.call(n,{action:"REFRESH_TOKEN",data:e}));return a.error?{error:a.error}:a}async login({email:e,password:a}){var t,i;const n=await((i=(t=this.backend).handleUsersAction)==null?void 0:i.call(t,{action:"LOGIN",data:{email:e,password:a}}));return n.error?{error:n.error}:n}async logout(){var e,a;await((a=(e=this.backend).handleUsersAction)==null?void 0:a.call(e,{action:"LOGOUT"}))}async isUserActive(e){var n,t;return(await((t=(n=this.backend).handleUsersAction)==null?void 0:t.call(n,{action:"CHECK_USER_STATUS"},e))).success}async getUserRoleAndPermissions(e){var n,t;return await((t=(n=this.backend).handleUsersAction)==null?void 0:t.call(n,{action:"GET_ROLE_AND_PERMISSIONS"},e))}async getUserInfo(e,a){var t,i;return await((i=(t=this.backend).handleUsersAction)==null?void 0:i.call(t,{action:"GET_CHAI_USER",data:a},e))}}class J{constructor(e){p(this,"fallbackLang","");p(this,"draftMode",!1);p(this,"backend");p(this,"chaiUsers");p(this,"chaiAssets");p(this,"chaiAI");this.backend=e.backend,this._registerDefaultPageTypes(),this.chaiUsers=e.users??new x(this.backend),this.chaiAssets=e.assets??new j(this.backend),this.chaiAI=e.ai??new D}_registerDefaultPageTypes(){M("page",{name:"Static Page",icon:'<svg stroke="currentColor" fill="currentColor" strokeWidth="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>'}),L("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" strokeWidth="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-hash-icon lucide-hash"><line x1="4" x2="20" y1="9" y2="9"/><line x1="4" x2="20" y1="15" y2="15"/><line x1="10" x2="8" y1="3" y2="21"/><line x1="16" x2="14" y1="3" y2="21"/></svg>'})}setFallbackLang(e){if(l.isEmpty(e))throw new Error("Fallback language cannot be empty");this.fallbackLang=e}getFallbackLang(){return this.fallbackLang}setDraftMode(e){this.draftMode=e}isDraftMode(){return this.draftMode}async handle(e,a,n){var i,o,d,g,T,f,A,u,S,c,h,E;switch(e.action){case"UPLOAD_ASSET":return(i=this.chaiAssets)==null?void 0:i.upload({file:e.data.file,name:e.data.name,folderId:e.data.folderId??null,optimize:e.data.optimize??!0},a);case"GET_ASSET":return(o=this.chaiAssets)==null?void 0:o.getAsset(e.data,a);case"GET_ASSETS":return(d=this.chaiAssets)==null?void 0:d.getAssets(e.data,a);case"DELETE_ASSET":return(g=this.chaiAssets)==null?void 0:g.deleteAsset(e.data,a);case"UPDATE_ASSET":return(T=this.chaiAssets)==null?void 0:T.updateAsset(e.data,a);case"REFRESH_TOKEN":return(f=this.chaiUsers)==null?void 0:f.refreshToken(e.data);case"LOGIN":return(A=this.chaiUsers)==null?void 0:A.login(e.data);case"LOGOUT":return(u=this.chaiUsers)==null?void 0:u.logout();case"CHECK_USER_STATUS":return(S=this.chaiUsers)==null?void 0:S.isUserActive(a);case"GET_ROLE_AND_PERMISSIONS":return(c=this.chaiUsers)==null?void 0:c.getUserRoleAndPermissions(a);case"GET_CHAI_USER":return(h=this.chaiUsers)==null?void 0:h.getUserInfo(a,e.data);case"ASK_AI":return(E=this.chaiAI)==null?void 0:E.handleRequest(e.data,n)}if(e.action==="GET_BUILDER_PAGE_DATA"){const r=await R({lang:e.data.lang,draft:!0,inBuilder:!0}),y=m(e.data.pageType);return y?{...y.dataProvider?await y.dataProvider({lang:e.data.lang,draft:!0,inBuilder:!0,pageProps:e.data.pageProps??{}}):{},global:r}:{global:r}}if(e.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,...l.isFunction(r.defaultTrackingInfo)?{trackingDefault:r.defaultTrackingInfo()}:{},...l.isFunction(r.defaultSeo)?{defaultSeo:r.defaultSeo()}:{},...l.isFunction(r.defaultJSONLD)?{defaultJSONLD:r.defaultJSONLD()}:{}})));if(e.action==="SEARCH_PAGE_TYPE_ITEMS"){const r=m(e.data.pageType);return r?r.search?await r.search(e.data.query):this.backend.handleAction(e,a):{error:"Page type not found"}}if(e.action==="GET_DYNAMIC_PAGES"){const r=m(e.data.pageType);return r?r.getDynamicPages?await r.getDynamicPages(e.data):[]:{error:"Page type not found"}}if(e.action==="GET_COLLECTIONS")return U().map(r=>l.omit(r,"fetch"));if(e.action==="GET_BLOCK_ASYNC_PROPS"){const r=e.data.block,y=r._type;if(y==="Repeater"&&(r!=null&&r.repeaterItems.includes("{{#"))){const N=r.repeaterItems.replace("{{#","").replace("}}",""),b=I(N);return b?await(b==null?void 0:b.fetch({block:r,pageProps:e.data.pageProps,lang:e.data.lang,draft:!0,inBuilder:!0}))??[]:[]}else{const N=K.getRegisteredChaiBlock(y);return!N||!l.isFunction(N.dataProvider)?{}:await N.dataProvider({block:r,pageProps:e.data.pageProps,lang:e.data.lang,draft:!0,inBuilder:!0})??{}}}const t=await this.backend.handleAction(e,a);return this.emit(e.action,t),t}emit(e,a){var i,o,d;if(!["CREATE_PAGE","UPDATE_PAGE","DELETE_PAGE"].includes(e))return;const n=l.get(a,"page");if(!n)return;const t=m(n.pageType);if(t)switch(e){case"CREATE_PAGE":return(i=t.onCreate)==null?void 0:i.call(t,n);case"UPDATE_PAGE":return(o=t.onUpdate)==null?void 0:o.call(t,n);case"DELETE_PAGE":return(d=t.onDelete)==null?void 0:d.call(t,n)}}async resolvePageLink(e,a){if(!l.startsWith(e,"pageType:"))return e;const n=e.split(":")[1],t=e.split(":")[2],i=m(n);return i?await this.resolveLink(i.key,t,a):e}async resolveLink(e,a,n){const t=m(e);if(!t)return"/not-found";const i=this.isDraftMode();return t.resolveLink?await t.resolveLink(a,i,n):await this.backend.handleAction({action:"GET_LINK",data:{pageType:e,id:a,draft:i,lang:n===this.getFallbackLang()?"":n}})}async getPageBySlug(e){const a=this.isDraftMode(),n={};return k().forEach(t=>{l.has(t,"dynamicSegments")&&t.dynamicSegments&&(n[t.key]=t.dynamicSegments)}),await this.backend.handleAction({action:"GET_PAGE_META",data:{slug:e,draft:a,dynamicSegments:n}})}async getFullPage(e){const a=this.isDraftMode();return await this.backend.handleAction({action:"GET_PAGE",data:{id:e,draft:a,mergePartials:!0}})}async getRevisionPage({id:e,type:a,lang:n}){const t=this.getFallbackLang()===n?"":n;return await this.backend.handleAction({action:"GET_REVISION_PAGE",data:{id:e,type:a,...t?{lang:t}:{}}})}async getSiteSettings(){const e=this.isDraftMode();return await this.backend.handleAction({action:"GET_WEBSITE_SETTINGS",data:{draft:e}})}async getPageData({blocks:e,pageType:a,pageProps:n,lang:t}){var A;const i=this.isDraftMode(),o=m(a),d=e.filter(u=>u._type==="Repeater"&&(u==null?void 0:u.repeaterItems.includes("{{#")));let g={};if(d.length>0){const u=d.map(c=>({collectionId:c.repeaterItems.replace("{{#","").replace("}}",""),block:c}));g=(await Promise.all(u.map(async({collectionId:c,block:h})=>{const E=I(c);try{const r=await(E==null?void 0:E.fetch({lang:t,draft:i,inBuilder:!1,pageProps:n,block:h}));return Promise.resolve({[`#${c}/${h._id}`]:l.get(r,"items",[])??[],[`#${c}/${h._id}/totalItems`]:l.get(r,"totalItems",-1)??-1})}catch{return Promise.resolve({[`#${c}/${h._id}`]:[],[`#${c}/${h._id}/totalItems`]:-1})}}))).reduce((c,h)=>({...c,...h}),{})}const[T,f]=await Promise.all([this.getGlobalData(t),((A=o==null?void 0:o.dataProvider)==null?void 0:A.call(o,{lang:t,draft:i,inBuilder:!1,pageProps:n}))||Promise.resolve({})]);return o?{...f,global:T,...g}:{global:T,...g}}async getGlobalData(e){return await R({lang:e,draft:this.isDraftMode(),inBuilder:!1})}async request(e){return await this.backend.handleAction(e)}getAIHandler(){return this.chaiAI}}class q{constructor(e="",a=_){this.apiKey=e,this.apiUrl=a}async handleUsersAction(e,a){const n=await fetch(`${this.apiUrl}/v1/api/users`,{method:"POST",body:JSON.stringify(e),headers:{"x-chai-api-key":this.apiKey,"x-chai-auth-token":a}}),t=await n.json();return l.has(t,"error")?{...t,status:n.status}:t}async handleAction(e,a){const n=await fetch(`${this.apiUrl}/v1/api/chai`,{method:"POST",body:JSON.stringify(e),headers:{"x-chai-api-key":this.apiKey,"x-chai-auth-token":a}}),t=await n.json();return l.has(t,"error")?{...t,status:n.status}:t}async handleAssetsAction(e,a){return await(await fetch(`${this.apiUrl}/v1/api/assets`,{method:"POST",body:JSON.stringify(e),headers:{"x-chai-api-key":this.apiKey,"x-chai-auth-token":a}})).json()}}const $={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"},_="https://api.chaibuilder.com";exports.API_URL=_;exports.ChaiAIChatHandler=D;exports.ChaiBuilderPages=J;exports.ChaiBuilderPagesBackend=q;exports.ChaiBuilderPagesUserManagement=x;exports.LANGUAGES=$;exports.getAskAiSystemPrompt=O;exports.getChaiCollection=I;exports.getChaiCollections=U;exports.getChaiPageType=m;exports.getChaiPageTypes=k;exports.registerChaiCollection=z;exports.registerChaiGlobalDataProvider=Y;exports.registerChaiPageType=M;exports.registerChaiPartialType=L;
278
+ `.trim();function O(i=null){if(i)switch(i){case"TRANSLATE_CONTENT":return F;case"UPDATE_CONTENT":return V;default:return P}return P}let v=async i=>({...i});const Y=i=>{v=i},R=async i=>{try{return await v(i)}catch(e){return console.error(e),{}}},C={},k=()=>Object.values(C),T=i=>C[i],M=(i,e)=>{C[i]={key:i,...e,hasSlug:!0}},L=(i,e)=>{C[i]={key:i,...e,hasSlug:!1}},w={};function z(i,e){l.has(w,i)&&console.warn(`Collection ${i} already registered`),w[i]={...e,id:i}}const U=()=>Object.values(w),I=i=>l.get(w,i);class D{constructor(e){p(this,"model","google/gemini-2.5-pro");p(this,"temperature",.7);this.options=e,this.model=(e==null?void 0:e.model)??this.model}async handleRequest(e,a){var u,S;const{messages:n,image:t,initiator:s=null,model:o}=e,d=o||this.model,g=n.filter(c=>c.role!=="system"),f=g[g.length-1],A=t?[...g.slice(0,-1),{role:"user",content:[{type:"text",text:f.content},{type:"image",image:t}]}]:n,m=B.streamText({model:d,system:O(s),messages:A,temperature:this.temperature,onFinish:((u=this.options)==null?void 0:u.onFinish)??l.noop,onError:((S=this.options)==null?void 0:S.onError)??l.noop});return a&&m.pipeTextStreamToResponse(a),m}isConfigured(){return!0}}class j{constructor(e){this.backend=e}async upload({file:e,folderId:a,name:n},t){var o,d;return await((d=(o=this.backend).handleAssetsAction)==null?void 0:d.call(o,{action:"UPLOAD_ASSET",data:{name:n,file:e,folderId:a}},t))}async getAsset({id:e},a){var n,t;return(t=(n=this.backend).handleAssetsAction)==null?void 0:t.call(n,{action:"GET_ASSET",data:{id:e}},a)}async getAssets(e,a){var n,t;return(t=(n=this.backend).handleAssetsAction)==null?void 0:t.call(n,{action:"GET_ASSETS",data:e},a)}async deleteAsset({id:e},a){var n,t;return(t=(n=this.backend).handleAssetsAction)==null?void 0:t.call(n,{action:"DELETE_ASSET",data:{id:e}},a)}async updateAsset({id:e,file:a,description:n},t){var s,o;return(o=(s=this.backend).handleAssetsAction)==null?void 0:o.call(s,{action:"UPDATE_ASSET",data:{id:e,file:a,description:n}},t)}}class x{constructor(e){this.backend=e}async refreshToken(e){var n,t;const a=await((t=(n=this.backend).handleUsersAction)==null?void 0:t.call(n,{action:"REFRESH_TOKEN",data:e}));return a.error?{error:a.error}:a}async login({email:e,password:a}){var t,s;const n=await((s=(t=this.backend).handleUsersAction)==null?void 0:s.call(t,{action:"LOGIN",data:{email:e,password:a}}));return n.error?{error:n.error}:n}async logout(){var e,a;await((a=(e=this.backend).handleUsersAction)==null?void 0:a.call(e,{action:"LOGOUT"}))}async isUserActive(e){var n,t;return(await((t=(n=this.backend).handleUsersAction)==null?void 0:t.call(n,{action:"CHECK_USER_STATUS"},e))).success}async getUserRoleAndPermissions(e){var n,t;return await((t=(n=this.backend).handleUsersAction)==null?void 0:t.call(n,{action:"GET_ROLE_AND_PERMISSIONS"},e))}async getUserInfo(e,a){var t,s;return await((s=(t=this.backend).handleUsersAction)==null?void 0:s.call(t,{action:"GET_CHAI_USER",data:a},e))}}class J{constructor(e){p(this,"fallbackLang","");p(this,"draftMode",!1);p(this,"backend");p(this,"chaiUsers");p(this,"chaiAssets");p(this,"chaiAI");this.backend=e.backend,this._registerDefaultPageTypes(),this.chaiUsers=e.users??new x(this.backend),this.chaiAssets=e.assets??new j(this.backend),this.chaiAI=e.ai??new D}_registerDefaultPageTypes(){M("page",{name:"Static Page",icon:'<svg stroke="currentColor" fill="currentColor" strokeWidth="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>'}),L("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" strokeWidth="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-hash-icon lucide-hash"><line x1="4" x2="20" y1="9" y2="9"/><line x1="4" x2="20" y1="15" y2="15"/><line x1="10" x2="8" y1="3" y2="21"/><line x1="16" x2="14" y1="3" y2="21"/></svg>'})}setFallbackLang(e){if(l.isEmpty(e))throw new Error("Fallback language cannot be empty");this.fallbackLang=e}getFallbackLang(){return this.fallbackLang}setDraftMode(e){this.draftMode=e}isDraftMode(){return this.draftMode}async handle(e,a,n){var s,o,d,g,f,A,m,u,S,c,h,E;switch(e.action){case"UPLOAD_ASSET":return(s=this.chaiAssets)==null?void 0:s.upload({file:e.data.file,name:e.data.name,folderId:e.data.folderId??null,optimize:e.data.optimize??!0},a);case"GET_ASSET":return(o=this.chaiAssets)==null?void 0:o.getAsset(e.data,a);case"GET_ASSETS":return(d=this.chaiAssets)==null?void 0:d.getAssets(e.data,a);case"DELETE_ASSET":return(g=this.chaiAssets)==null?void 0:g.deleteAsset(e.data,a);case"UPDATE_ASSET":return(f=this.chaiAssets)==null?void 0:f.updateAsset(e.data,a);case"REFRESH_TOKEN":return(A=this.chaiUsers)==null?void 0:A.refreshToken(e.data);case"LOGIN":return(m=this.chaiUsers)==null?void 0:m.login(e.data);case"LOGOUT":return(u=this.chaiUsers)==null?void 0:u.logout();case"CHECK_USER_STATUS":return(S=this.chaiUsers)==null?void 0:S.isUserActive(a);case"GET_ROLE_AND_PERMISSIONS":return(c=this.chaiUsers)==null?void 0:c.getUserRoleAndPermissions(a);case"GET_CHAI_USER":return(h=this.chaiUsers)==null?void 0:h.getUserInfo(a,e.data);case"ASK_AI":return(E=this.chaiAI)==null?void 0:E.handleRequest(e.data,n)}if(e.action==="GET_BUILDER_PAGE_DATA"){const r=await R({lang:e.data.lang,draft:!0,inBuilder:!0}),y=T(e.data.pageType);return y?{...y.dataProvider?await y.dataProvider({lang:e.data.lang,draft:!0,inBuilder:!0,pageProps:e.data.pageProps??{}}):{},global:r}:{global:r}}if(e.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,...l.isFunction(r.defaultTrackingInfo)?{trackingDefault:r.defaultTrackingInfo()}:{},...l.isFunction(r.defaultSeo)?{defaultSeo:r.defaultSeo()}:{},...l.isFunction(r.defaultJSONLD)?{defaultJSONLD:r.defaultJSONLD()}:{}})));if(e.action==="SEARCH_PAGE_TYPE_ITEMS"){const r=T(e.data.pageType);return r?r.search?await r.search(e.data.query):this.backend.handleAction(e,a):{error:"Page type not found"}}if(e.action==="GET_DYNAMIC_PAGES"){const r=T(e.data.pageType);return r?r.getDynamicPages?await r.getDynamicPages(e.data):[]:{error:"Page type not found"}}if(e.action==="GET_COLLECTIONS")return U().map(r=>l.omit(r,"fetch"));if(e.action==="GET_BLOCK_ASYNC_PROPS"){const r=e.data.block,y=r._type;if(y==="Repeater"&&(r!=null&&r.repeaterItems.includes("{{#"))){const N=r.repeaterItems.replace("{{#","").replace("}}",""),b=I(N);return b?await(b==null?void 0:b.fetch({block:r,pageProps:e.data.pageProps,lang:e.data.lang,draft:!0,inBuilder:!0}))??[]:[]}else{const N=K.getRegisteredChaiBlock(y);return!N||!l.isFunction(N.dataProvider)?{}:await N.dataProvider({block:r,pageProps:e.data.pageProps,lang:e.data.lang,draft:!0,inBuilder:!0})??{}}}const t=await this.backend.handleAction(e,a);return this.emit(e.action,t),t}emit(e,a){var s,o,d;if(!["CREATE_PAGE","UPDATE_PAGE","DELETE_PAGE"].includes(e))return;const n=l.get(a,"page");if(!n)return;const t=T(n.pageType);if(t)switch(e){case"CREATE_PAGE":return(s=t.onCreate)==null?void 0:s.call(t,n);case"UPDATE_PAGE":return(o=t.onUpdate)==null?void 0:o.call(t,n);case"DELETE_PAGE":return(d=t.onDelete)==null?void 0:d.call(t,n)}}async resolvePageLink(e,a){if(!l.startsWith(e,"pageType:"))return e;const n=e.split(":")[1],t=e.split(":")[2],s=T(n);return s?await this.resolveLink(s.key,t,a):e}async resolveLink(e,a,n){const t=T(e);if(!t)return"/not-found";const s=this.isDraftMode();return t.resolveLink?await t.resolveLink(a,s,n):await this.backend.handleAction({action:"GET_LINK",data:{pageType:e,id:a,draft:s,lang:n===this.getFallbackLang()?"":n}})}async getPageBySlug(e){const a=this.isDraftMode(),n={};return k().forEach(t=>{l.has(t,"dynamicSegments")&&t.dynamicSegments&&(n[t.key]=t.dynamicSegments)}),await this.backend.handleAction({action:"GET_PAGE_META",data:{slug:e,draft:a,dynamicSegments:n}})}async getFullPage(e){const a=this.isDraftMode();return await this.backend.handleAction({action:"GET_PAGE",data:{id:e,draft:a,mergePartials:!0}})}async getRevisionPage({id:e,type:a,lang:n}){const t=this.getFallbackLang()===n?"":n;return await this.backend.handleAction({action:"GET_REVISION_PAGE",data:{id:e,type:a,...t?{lang:t}:{}}})}async getSiteSettings(){const e=this.isDraftMode();return await this.backend.handleAction({action:"GET_WEBSITE_SETTINGS",data:{draft:e}})}async getPageData({blocks:e,pageType:a,pageProps:n,lang:t}){var m;const s=this.isDraftMode(),o=T(a),d=e.filter(u=>u._type==="Repeater"&&(u==null?void 0:u.repeaterItems.includes("{{#")));let g={};if(d.length>0){const u=d.map(c=>({collectionId:c.repeaterItems.replace("{{#","").replace("}}",""),block:c}));g=(await Promise.all(u.map(async({collectionId:c,block:h})=>{const E=I(c);try{const r=await(E==null?void 0:E.fetch({lang:t,draft:s,inBuilder:!1,pageProps:n,block:h}));return Promise.resolve({[`#${c}/${h._id}`]:l.get(r,"items",[])??[],[`#${c}/${h._id}/totalItems`]:l.get(r,"totalItems",-1)??-1})}catch{return Promise.resolve({[`#${c}/${h._id}`]:[],[`#${c}/${h._id}/totalItems`]:-1})}}))).reduce((c,h)=>({...c,...h}),{})}const[f,A]=await Promise.all([this.getGlobalData(t),((m=o==null?void 0:o.dataProvider)==null?void 0:m.call(o,{lang:t,draft:s,inBuilder:!1,pageProps:n}))||Promise.resolve({})]);return o?{...A,global:f,...g}:{global:f,...g}}async getGlobalData(e){return await R({lang:e,draft:this.isDraftMode(),inBuilder:!1})}async request(e){return await this.backend.handleAction(e)}getAIHandler(){return this.chaiAI}}class q{constructor(e="",a=_){this.apiKey=e,this.apiUrl=a}async handleUsersAction(e,a){const n=await fetch(`${this.apiUrl}/v1/api/users`,{method:"POST",body:JSON.stringify(e),headers:{"x-chai-api-key":this.apiKey,"x-chai-auth-token":a}}),t=await n.json();return l.has(t,"error")?{...t,status:n.status}:t}async handleAction(e,a){const n=await fetch(`${this.apiUrl}/v1/api/chai`,{method:"POST",body:JSON.stringify(e),headers:{"x-chai-api-key":this.apiKey,"x-chai-auth-token":a}}),t=await n.json();return l.has(t,"error")?{...t,status:n.status}:t}async handleAssetsAction(e,a){return await(await fetch(`${this.apiUrl}/v1/api/assets`,{method:"POST",body:JSON.stringify(e),headers:{"x-chai-api-key":this.apiKey,"x-chai-auth-token":a}})).json()}}const $={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"},_="https://api.chaibuilder.com";exports.API_URL=_;exports.ChaiAIChatHandler=D;exports.ChaiBuilderPages=J;exports.ChaiBuilderPagesBackend=q;exports.ChaiBuilderPagesUserManagement=x;exports.LANGUAGES=$;exports.getAskAiSystemPrompt=O;exports.getChaiCollection=I;exports.getChaiCollections=U;exports.getChaiPageType=T;exports.getChaiPageTypes=k;exports.registerChaiCollection=z;exports.registerChaiGlobalDataProvider=Y;exports.registerChaiPageType=M;exports.registerChaiPartialType=L;
package/dist/server.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { ChaiBlock } from '@chaibuilder/runtime';
2
2
  import { ChaiPageProps } from '@chaibuilder/runtime';
3
+ import { StreamTextResult } from 'ai';
3
4
 
4
5
  export declare type AIChatOptions = {
5
6
  messages: any[];
@@ -26,7 +27,7 @@ export declare class ChaiAIChatHandler implements ChaiBuilderPagesAIInterface {
26
27
  onFinish?: () => void;
27
28
  onError?: (error: Error) => void;
28
29
  } | undefined);
29
- handleRequest(options: AIChatOptions, res: any): Promise<void>;
30
+ handleRequest(options: AIChatOptions, res?: any): Promise<StreamTextResult<any, any>>;
30
31
  isConfigured(): boolean;
31
32
  }
32
33
 
@@ -107,7 +108,7 @@ export declare class ChaiBuilderPages implements ChaiBuilderPagesInterface {
107
108
  }
108
109
 
109
110
  export declare interface ChaiBuilderPagesAIInterface {
110
- handleRequest(options: AIChatOptions, res: any): Promise<void>;
111
+ handleRequest(options: AIChatOptions, res: any): Promise<StreamTextResult<any, any>>;
111
112
  isConfigured(): boolean;
112
113
  }
113
114
 
package/dist/server.js CHANGED
@@ -305,7 +305,7 @@ const te = (s) => {
305
305
  } catch (e) {
306
306
  return console.error(e), {};
307
307
  }
308
- }, C = {}, v = () => Object.values(C), m = (s) => C[s], Y = (s, e) => {
308
+ }, C = {}, v = () => Object.values(C), T = (s) => C[s], Y = (s, e) => {
309
309
  C[s] = { key: s, ...e, hasSlug: !0 };
310
310
  }, z = (s, e) => {
311
311
  C[s] = { key: s, ...e, hasSlug: !1 };
@@ -322,14 +322,14 @@ class J {
322
322
  }
323
323
  async handleRequest(e, a) {
324
324
  var d, A;
325
- const { messages: n, image: t, initiator: i = null, model: o } = e, c = o || this.model, h = n.filter((l) => l.role !== "system"), p = h[h.length - 1], T = t ? [
325
+ const { messages: n, image: t, initiator: i = null, model: o } = e, c = o || this.model, h = n.filter((l) => l.role !== "system"), m = h[h.length - 1], f = t ? [
326
326
  ...h.slice(0, -1),
327
327
  {
328
328
  role: "user",
329
329
  content: [
330
330
  {
331
331
  type: "text",
332
- text: p.content
332
+ text: m.content
333
333
  },
334
334
  {
335
335
  type: "image",
@@ -337,15 +337,15 @@ class J {
337
337
  }
338
338
  ]
339
339
  }
340
- ] : n;
341
- H({
340
+ ] : n, p = H({
342
341
  model: c,
343
342
  system: V(i),
344
- messages: T,
343
+ messages: f,
345
344
  temperature: this.temperature,
346
345
  onFinish: ((d = this.options) == null ? void 0 : d.onFinish) ?? R,
347
346
  onError: ((A = this.options) == null ? void 0 : A.onError) ?? R
348
- }).pipeTextStreamToResponse(a);
347
+ });
348
+ return a && p.pipeTextStreamToResponse(a), p;
349
349
  }
350
350
  isConfigured() {
351
351
  return !0;
@@ -516,7 +516,7 @@ class ne {
516
516
  return this.draftMode;
517
517
  }
518
518
  async handle(e, a, n) {
519
- var i, o, c, h, p, T, f, d, A, l, u, E;
519
+ var i, o, c, h, m, f, p, d, A, l, u, E;
520
520
  switch (e.action) {
521
521
  // Media
522
522
  case "UPLOAD_ASSET":
@@ -536,12 +536,12 @@ class ne {
536
536
  case "DELETE_ASSET":
537
537
  return (h = this.chaiAssets) == null ? void 0 : h.deleteAsset(e.data, a);
538
538
  case "UPDATE_ASSET":
539
- return (p = this.chaiAssets) == null ? void 0 : p.updateAsset(e.data, a);
539
+ return (m = this.chaiAssets) == null ? void 0 : m.updateAsset(e.data, a);
540
540
  // Users
541
541
  case "REFRESH_TOKEN":
542
- return (T = this.chaiUsers) == null ? void 0 : T.refreshToken(e.data);
542
+ return (f = this.chaiUsers) == null ? void 0 : f.refreshToken(e.data);
543
543
  case "LOGIN":
544
- return (f = this.chaiUsers) == null ? void 0 : f.login(e.data);
544
+ return (p = this.chaiUsers) == null ? void 0 : p.login(e.data);
545
545
  case "LOGOUT":
546
546
  return (d = this.chaiUsers) == null ? void 0 : d.logout();
547
547
  case "CHECK_USER_STATUS":
@@ -558,7 +558,7 @@ class ne {
558
558
  lang: e.data.lang,
559
559
  draft: !0,
560
560
  inBuilder: !0
561
- }), S = m(e.data.pageType);
561
+ }), S = T(e.data.pageType);
562
562
  return S ? {
563
563
  ...S.dataProvider ? await S.dataProvider({
564
564
  lang: e.data.lang,
@@ -585,11 +585,11 @@ class ne {
585
585
  }))
586
586
  );
587
587
  if (e.action === "SEARCH_PAGE_TYPE_ITEMS") {
588
- const r = m(e.data.pageType);
588
+ const r = T(e.data.pageType);
589
589
  return r ? r.search ? await r.search(e.data.query) : this.backend.handleAction(e, a) : { error: "Page type not found" };
590
590
  }
591
591
  if (e.action === "GET_DYNAMIC_PAGES") {
592
- const r = m(e.data.pageType);
592
+ const r = T(e.data.pageType);
593
593
  return r ? r.getDynamicPages ? await r.getDynamicPages(e.data) : [] : { error: "Page type not found" };
594
594
  }
595
595
  if (e.action === "GET_COLLECTIONS")
@@ -624,7 +624,7 @@ class ne {
624
624
  if (!["CREATE_PAGE", "UPDATE_PAGE", "DELETE_PAGE"].includes(e)) return;
625
625
  const n = w(a, "page");
626
626
  if (!n) return;
627
- const t = m(n.pageType);
627
+ const t = T(n.pageType);
628
628
  if (t)
629
629
  switch (e) {
630
630
  case "CREATE_PAGE":
@@ -643,11 +643,11 @@ class ne {
643
643
  async resolvePageLink(e, a) {
644
644
  if (!G(e, "pageType:"))
645
645
  return e;
646
- const n = e.split(":")[1], t = e.split(":")[2], i = m(n);
646
+ const n = e.split(":")[1], t = e.split(":")[2], i = T(n);
647
647
  return i ? await this.resolveLink(i.key, t, a) : e;
648
648
  }
649
649
  async resolveLink(e, a, n) {
650
- const t = m(e);
650
+ const t = T(e);
651
651
  if (!t)
652
652
  return "/not-found";
653
653
  const i = this.isDraftMode();
@@ -705,8 +705,8 @@ class ne {
705
705
  pageProps: n,
706
706
  lang: t
707
707
  }) {
708
- var f;
709
- const i = this.isDraftMode(), o = m(a), c = e.filter(
708
+ var p;
709
+ const i = this.isDraftMode(), o = T(a), c = e.filter(
710
710
  (d) => d._type === "Repeater" && (d == null ? void 0 : d.repeaterItems.includes("{{#"))
711
711
  );
712
712
  let h = {};
@@ -736,9 +736,9 @@ class ne {
736
736
  })
737
737
  )).reduce((l, u) => ({ ...l, ...u }), {});
738
738
  }
739
- const [p, T] = await Promise.all([
739
+ const [m, f] = await Promise.all([
740
740
  this.getGlobalData(t),
741
- ((f = o == null ? void 0 : o.dataProvider) == null ? void 0 : f.call(o, {
741
+ ((p = o == null ? void 0 : o.dataProvider) == null ? void 0 : p.call(o, {
742
742
  lang: t,
743
743
  draft: i,
744
744
  inBuilder: !1,
@@ -746,10 +746,10 @@ class ne {
746
746
  })) || Promise.resolve({})
747
747
  ]);
748
748
  return o ? {
749
- ...T,
750
- global: p,
749
+ ...f,
750
+ global: m,
751
751
  ...h
752
- } : { global: p, ...h };
752
+ } : { global: m, ...h };
753
753
  }
754
754
  async getGlobalData(e) {
755
755
  return await P({
@@ -1004,7 +1004,7 @@ export {
1004
1004
  V as getAskAiSystemPrompt,
1005
1005
  M as getChaiCollection,
1006
1006
  j as getChaiCollections,
1007
- m as getChaiPageType,
1007
+ T as getChaiPageType,
1008
1008
  v as getChaiPageTypes,
1009
1009
  ae as registerChaiCollection,
1010
1010
  te as registerChaiGlobalDataProvider,
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.16.12",
6
+ "version": "0.16.13",
7
7
  "type": "module",
8
8
  "files": [
9
9
  "dist"