@kyro-cms/core 0.12.56 → 0.12.58
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/api-handler-graphql.cjs +1 -1
- package/dist/api-handler-graphql.js +1 -1
- package/dist/api-handler-trpc.cjs +1 -1
- package/dist/api-handler-trpc.js +1 -1
- package/dist/api-handler.cjs +1 -1
- package/dist/api-handler.js +1 -1
- package/dist/{chunk-VV47TO2O.cjs → chunk-KBJ4XZWF.cjs} +1 -1
- package/dist/{chunk-5BIZIO6T.js → chunk-KFEJPRC4.js} +1 -1
- package/dist/{chunk-KJ3I35YV.cjs → chunk-QLUMJS5W.cjs} +3 -3
- package/dist/{chunk-E555R77V.js → chunk-X4RTM5AQ.js} +1 -1
- package/dist/{chunk-UZEDY2UL.js → chunk-YZNFCSCE.js} +1 -1
- package/dist/{chunk-3I6T73A5.cjs → chunk-Z2XEW5RL.cjs} +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.js +1 -1
- package/dist/rest/index.cjs +1 -1
- package/dist/rest/index.js +1 -1
- package/package.json +2 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {D,A}from'./chunk-
|
|
1
|
+
import {D,A}from'./chunk-YZNFCSCE.js';import {e}from'./chunk-BAXBE4JD.js';import {fb}from'./chunk-KFEJPRC4.js';import {a as a$1}from'./chunk-R25WLKX4.js';import {c}from'./chunk-KNOFTUQV.js';import {a}from'./chunk-ZWDBPEXL.js';import {a as a$2}from'./chunk-5ZEYOFAK.js';import {g}from'./chunk-Y2YAKDEQ.js';import w from'kyro:config';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); createRequire(import.meta.url); }
|
|
2
2
|
g();var r=null,l=null;async function b(){if(!r){if(globalThis.__KYRO_INSTANCE__)try{await globalThis.__KYRO_INSTANCE__.shutdown();}catch{}try{let e$1=w.default||w,t=e$1.adapter,o=t&&!t.dialect&&typeof t.connect=="function";if(globalThis.DB&&(!t||o)){let s=globalThis.DB;e$1.adapter=new c({type:"sqlite",client:s}),D.info("Hot-swapped to D1 DrizzleAdapter");}r=A(e$1),await r.init();let a$3=e$1.adapter,p=a$3&&a$3.dialect&&(a$3.dialect==="postgres"||a$3.dialect==="sqlite"),c$1=a$3&&a$3.dialect==="mongodb",n;if(p)a$3.dialect==="postgres"?n=new a({db:a$3.client}):a$3.dialect==="sqlite"&&(n=new fb({db:a$3.rawClient||a$3.client}));else if(o&&!globalThis.DB){let s=process.env.KYRO_AUTH_DB_PATH||"./data/auth.db";n=new a$1({path:s});}else c$1&&(n=new a$2({adapter:a$3}));if(n?.connect)try{await n.connect();}catch(s){D.warn("Auth connect warning:",s);}try{await r.loadSettings();}catch(s){D.warn("loadSettings warning:",s);}try{await e(n);}catch(s){D.warn("autoBootstrap warning:",s);}globalThis.__KYRO_INSTANCE__=r;}catch(e){throw r=null,l=null,D.error("Init failed, will retry:",e),e}}}async function E(e){let t=globalThis.DB?globalThis:null;try{let{env:o}=await import('cloudflare:workers');o&&(t=o);}catch{}if(e)try{t=e.locals?.cfContext?.env||e?.env||t;}catch{}if(!t)try{t=process.env;}catch{}t?.DB&&(globalThis.DB=t.DB),t?.STORAGE_BUCKET&&(globalThis.STORAGE_BUCKET=t.STORAGE_BUCKET),l||(l=b()),await l;}var _={graphqlEnabled:false,trpcEnabled:false,wsEnabled:false,requireAuth:false};function T(e){return r?r.settings?.access?.apiAccess?.[e]??_[e]??true:_[e]??true}var R=async e=>{if(!r)try{await Promise.race([E(e),new Promise((t,o)=>setTimeout(()=>o(new Error("Initialization timeout")),3e4))]);}catch(t){return console.error("[Kyro API] Warm error:",t?.stack||t?.message||t),new Response(JSON.stringify({error:"Service Unavailable",message:"Kyro CMS is still starting up. Please try again in a moment."}),{status:503,headers:{"Content-Type":"application/json","Retry-After":"5"}})}try{let o=new URL(e.request.url).pathname,a=__KYRO_API_PATH__;if(o===`${a}/graphql`&&typeof r.getGraphQL=="function"){if(!T("graphqlEnabled"))return new Response(JSON.stringify({error:"GraphQL is disabled"}),{status:503,headers:{"Content-Type":"application/json"}});let n=await r.getGraphQL().fetch(e.request,e.locals);return new Response(n.body,n)}if(o.startsWith(`${a}/trpc/`)&&typeof r.getTRPC=="function"){if(!T("trpcEnabled"))return new Response(JSON.stringify({error:"tRPC is disabled"}),{status:503,headers:{"Content-Type":"application/json"}});let n=await r.getTRPC().fetch(e.request,e.locals);return new Response(n.body,n)}return await(await r.getREST()).fetch(e.request,e.locals)}catch(t){return console.error("[Kyro API Execution Error]:",t?.stack||t?.message||t),new Response(JSON.stringify({error:"Internal Server Error",message:t?.message||String(t),stack:t?.stack}),{status:500,headers:{"Content-Type":"application/json"}})}},N=R;export{r as a,E as b,R as c,N as d};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {a as a$3}from'./chunk-LWM4WABU.js';import {a as a$2}from'./chunk-SQBTIMWF.js';import {a as a$4,i as i$1}from'./chunk-PA4ZZREG.js';import {r as r$1,p as p$1,n as n$1,c as c$2,q as q$1,o as o$1,J as J$1,b as b$3,a as a$5,F as F$2,D as D$1,C as C$2,e as e$3,H as H$2,x as x$1,d as d$4,y as y$2,k as k$1,f as f$4,A as A$1,j as j$1,z as z$2,u as u$1,v as v$1,w as w$1,g as g$5,E as E$1,B as B$1,t as t$1,s as s$1,m as m$1,i as i$2,l as l$1,h as h$1}from'./chunk-ZMG7Z3KF.js';import {wa as wa$1,a as a$1,ua as ua$1,Aa as Aa$1,ra as ra$1,Da as Da$1,Na as Na$1,qa as qa$1,ka as ka$1,za as za$1,i,Ga as Ga$1,Ea as Ea$1,f as f$1,Ma as Ma$1,Qa as Qa$1,Ra,Sa as Sa$1,Oa as Oa$1,Ta as Ta$1,Ua as Ua$1,b as b$1,ya as ya$1,la as la$1,Pa as Pa$1,sa as sa$1,va as va$1,La as La$1,ma as ma$1,Fa as Fa$1,k,Ja as Ja$1,Ia as Ia$1,ha as ha$1,t,s,u,r,Ca as Ca$1,ja as ja$1,d as d$1,j,Ha as Ha$1,Ka as Ka$1,Ba as Ba$1,h,w,pa as pa$1,ga as ga$1,Va as Va$1,oa as oa$1,na as na$1,xa as xa$1,ta as ta$1,m,I,G as G$1,L,D,v,O,Y,C as C$1,x,R,P,fa as fa$1,X,ea as ea$1,c as c$1,Z,K,y as y$1,_,E,H as H$1,W,ba as ba$1,Q as Q$1,U,T,e,N as N$1,S,ia as ia$1,g as g$1,V,M as M$1,$,B,aa as aa$1,da as da$1,A,z as z$1,J,F as F$1,n,q,Wa as Wa$1,o,l,p,ca as ca$1,Xa as Xa$1,Ya as Ya$1,$a as $a$1,ib}from'./chunk-
|
|
1
|
+
import {a as a$3}from'./chunk-LWM4WABU.js';import {a as a$2}from'./chunk-SQBTIMWF.js';import {a as a$4,i as i$1}from'./chunk-PA4ZZREG.js';import {r as r$1,p as p$1,n as n$1,c as c$2,q as q$1,o as o$1,J as J$1,b as b$3,a as a$5,F as F$2,D as D$1,C as C$2,e as e$3,H as H$2,x as x$1,d as d$4,y as y$2,k as k$1,f as f$4,A as A$1,j as j$1,z as z$2,u as u$1,v as v$1,w as w$1,g as g$5,E as E$1,B as B$1,t as t$1,s as s$1,m as m$1,i as i$2,l as l$1,h as h$1}from'./chunk-ZMG7Z3KF.js';import {wa as wa$1,a as a$1,ua as ua$1,Aa as Aa$1,ra as ra$1,Da as Da$1,Na as Na$1,qa as qa$1,ka as ka$1,za as za$1,i,Ga as Ga$1,Ea as Ea$1,f as f$1,Ma as Ma$1,Qa as Qa$1,Ra,Sa as Sa$1,Oa as Oa$1,Ta as Ta$1,Ua as Ua$1,b as b$1,ya as ya$1,la as la$1,Pa as Pa$1,sa as sa$1,va as va$1,La as La$1,ma as ma$1,Fa as Fa$1,k,Ja as Ja$1,Ia as Ia$1,ha as ha$1,t,s,u,r,Ca as Ca$1,ja as ja$1,d as d$1,j,Ha as Ha$1,Ka as Ka$1,Ba as Ba$1,h,w,pa as pa$1,ga as ga$1,Va as Va$1,oa as oa$1,na as na$1,xa as xa$1,ta as ta$1,m,I,G as G$1,L,D,v,O,Y,C as C$1,x,R,P,fa as fa$1,X,ea as ea$1,c as c$1,Z,K,y as y$1,_,E,H as H$1,W,ba as ba$1,Q as Q$1,U,T,e,N as N$1,S,ia as ia$1,g as g$1,V,M as M$1,$,B,aa as aa$1,da as da$1,A,z as z$1,J,F as F$1,n,q,Wa as Wa$1,o,l,p,ca as ca$1,Xa as Xa$1,Ya as Ya$1,$a as $a$1,ib}from'./chunk-KFEJPRC4.js';import {o as o$2,f as f$2,g as g$3}from'./chunk-YZEMLLD2.js';import {d as d$2,e as e$2,f as f$3,g as g$4}from'./chunk-RTHJ6SS5.js';import {b as b$2,d as d$3}from'./chunk-5M3FKE2V.js';import {c as c$3}from'./chunk-KNOFTUQV.js';import {g as g$2}from'./chunk-47CXBWMA.js';import {c,g,b,d,a,f,e as e$1}from'./chunk-Y2YAKDEQ.js';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); createRequire(import.meta.url); }
|
|
2
2
|
var ms=c((hw,Ra)=>{g();function Rp(){return Object.keys(globalThis).some(t=>t.startsWith("__NEXT"))}Ra.exports=function(){return !!(globalThis.Deno||globalThis.Bun||Rp())};});function Aa(t,e){return (e?/^[\x00-\xFF]*$/:/^[\x00-\x7F]*$/).test(t)}function _s(t,e=false){let r=[],n=0;for(;n<t.length;){let s=t[n],i=F(function(o){if(!e)throw new TypeError(o);r.push({type:"INVALID_CHAR",index:n,value:t[n++]});},"ErrorOrInvalid");if(s==="*"){r.push({type:"ASTERISK",index:n,value:t[n++]});continue}if(s==="+"||s==="?"){r.push({type:"OTHER_MODIFIER",index:n,value:t[n++]});continue}if(s==="\\"){r.push({type:"ESCAPED_CHAR",index:n++,value:t[n++]});continue}if(s==="{"){r.push({type:"OPEN",index:n,value:t[n++]});continue}if(s==="}"){r.push({type:"CLOSE",index:n,value:t[n++]});continue}if(s===":"){let o="",a=n+1;for(;a<t.length;){let c=t.substr(a,1);if(a===n+1&&Lp.test(c)||a!==n+1&&Op.test(c)){o+=t[a++];continue}break}if(!o){i(`Missing parameter name at ${n}`);continue}r.push({type:"NAME",index:n,value:o}),n=a;continue}if(s==="("){let o=1,a="",c=n+1,l=false;if(t[c]==="?"){i(`Pattern cannot start with "?" at ${c}`);continue}for(;c<t.length;){if(!Aa(t[c],false)){i(`Invalid character '${t[c]}' at ${c}.`),l=true;break}if(t[c]==="\\"){a+=t[c++]+t[c++];continue}if(t[c]===")"){if(o--,o===0){c++;break}}else if(t[c]==="("&&(o++,t[c+1]!=="?")){i(`Capturing groups are not allowed at ${c}`),l=true;break}a+=t[c++];}if(l)continue;if(o){i(`Unbalanced pattern at ${n}`);continue}if(!a){i(`Missing pattern at ${n}`);continue}r.push({type:"REGEX",index:n,value:a}),n=c;continue}r.push({type:"CHAR",index:n,value:t[n++]});}return r.push({type:"END",index:n,value:""}),r}function ws(t,e={}){let r=_s(t);e.delimiter??="/#?",e.prefixes??="./";let n=`[^${me(e.delimiter)}]+?`,s=[],i=0,o=0,c=new Set,l=F(P=>{if(o<r.length&&r[o].type===P)return r[o++].value},"tryConsume"),u=F(()=>l("OTHER_MODIFIER")??l("ASTERISK"),"tryConsumeModifier"),h=F(P=>{let k=l(P);if(k!==void 0)return k;let{type:S,index:v}=r[o];throw new TypeError(`Unexpected ${S} at ${v}, expected ${P}`)},"mustConsume"),d=F(()=>{let P="",k;for(;k=l("CHAR")??l("ESCAPED_CHAR");)P+=k;return P},"consumeText"),p=F(P=>P,"DefaultEncodePart"),_=e.encodePart||p,E="",A=F(P=>{E+=P;},"appendToPendingFixedValue"),R=F(()=>{E.length&&(s.push(new wt(3,"","",_(E),"",3)),E="");},"maybeAddPartFromPendingFixedValue"),j=F((P,k,S,v,O)=>{let g=3;switch(O){case "?":g=1;break;case "*":g=0;break;case "+":g=2;break}if(!k&&!S&&g===3){A(P);return}if(R(),!k&&!S){if(!P)return;s.push(new wt(3,"","",_(P),"",g));return}let x;S?S==="*"?x=ys:x=S:x=n;let w=2;x===n?(w=1,x=""):x===ys&&(w=0,x="");let T;if(k?T=k:S&&(T=i++),c.has(T))throw new TypeError(`Duplicate name '${T}'.`);c.add(T),s.push(new wt(w,T,_(P),x,_(v),g));},"addPart");for(;o<r.length;){let P=l("CHAR"),k=l("NAME"),S=l("REGEX");if(!k&&!S&&(S=l("ASTERISK")),k||S){let O=P??"";e.prefixes.indexOf(O)===-1&&(A(O),O=""),R();let g=u();j(O,k,S,"",g);continue}let v=P??l("ESCAPED_CHAR");if(v){A(v);continue}if(l("OPEN")){let O=d(),g=l("NAME"),x=l("REGEX");!g&&!x&&(x=l("ASTERISK"));let w=d();h("CLOSE");let T=u();j(O,g,x,w,T);continue}R(),h("END");}return s}function me(t){return t.replace(/([.+*?^${}()[\]|/\\])/g,"\\$1")}function gs(t){return t&&t.ignoreCase?"ui":"u"}function La(t,e,r){return Ss(ws(t,r),e,r)}function tt(t){switch(t){case 0:return "*";case 1:return "?";case 2:return "+";case 3:return ""}}function Ss(t,e,r={}){r.delimiter??="/#?",r.prefixes??="./",r.sensitive??=false,r.strict??=false,r.end??=true,r.start??=true,r.endsWith="";let n=r.start?"^":"";for(let a of t){if(a.type===3){a.modifier===3?n+=me(a.value):n+=`(?:${me(a.value)})${tt(a.modifier)}`;continue}e&&e.push(a.name);let c=`[^${me(r.delimiter)}]+?`,l=a.value;if(a.type===1?l=c:a.type===0&&(l=ys),!a.prefix.length&&!a.suffix.length){a.modifier===3||a.modifier===1?n+=`(${l})${tt(a.modifier)}`:n+=`((?:${l})${tt(a.modifier)})`;continue}if(a.modifier===3||a.modifier===1){n+=`(?:${me(a.prefix)}(${l})${me(a.suffix)})`,n+=tt(a.modifier);continue}n+=`(?:${me(a.prefix)}`,n+=`((?:${l})(?:`,n+=me(a.suffix),n+=me(a.prefix),n+=`(?:${l}))*)${me(a.suffix)})`,a.modifier===0&&(n+="?");}let s=`[${me(r.endsWith)}]|$`,i=`[${me(r.delimiter)}]`;if(r.end)return r.strict||(n+=`${i}?`),r.endsWith.length?n+=`(?=${s})`:n+="$",new RegExp(n,gs(r));r.strict||(n+=`(?:${i}(?=${s}))?`);let o=false;if(t.length){let a=t[t.length-1];a.type===3&&a.modifier===3&&(o=r.delimiter.indexOf(a)>-1);}return o||(n+=`(?=${i}|${s})`),new RegExp(n,gs(r))}function Oa(t,e){return t.length?t[0]==="/"?true:!e||t.length<2?false:(t[0]=="\\"||t[0]=="{")&&t[1]=="/":false}function Es(t,e){return t.startsWith(e)?t.substring(e.length,t.length):t}function Fa(t,e){return t.endsWith(e)?t.substr(0,t.length-e.length):t}function Ps(t){return !t||t.length<2?false:t[0]==="["||(t[0]==="\\"||t[0]==="{")&&t[1]==="["}function vs(t){if(!t)return true;for(let e of Ia)if(t.test(e))return true;return false}function Da(t,e){if(t=Es(t,"#"),e||t==="")return t;let r=new URL("https://example.com");return r.hash=t,r.hash?r.hash.substring(1,r.hash.length):""}function ja(t,e){if(t=Es(t,"?"),e||t==="")return t;let r=new URL("https://example.com");return r.search=t,r.search?r.search.substring(1,r.search.length):""}function qa(t,e){return e||t===""?t:Ps(t)?Cs(t):ks(t)}function Ua(t,e){if(e||t==="")return t;let r=new URL("https://example.com");return r.password=t,r.password}function Ma(t,e){if(e||t==="")return t;let r=new URL("https://example.com");return r.username=t,r.username}function Ba(t,e,r){if(r||t==="")return t;if(e&&!Ia.includes(e))return new URL(`${e}:${t}`).pathname;let n=t[0]=="/";return t=new URL(n?t:"/-"+t,"https://example.com").pathname,n||(t=t.substring(2,t.length)),t}function $a(t,e,r){return Ts(e)===t&&(t=""),r||t===""?t:Rs(t)}function Na(t,e){return t=Fa(t,":"),e||t===""?t:Ar(t)}function Ts(t){switch(t){case "ws":case "http":return "80";case "wws":case "https":return "443";case "ftp":return "21";default:return ""}}function Ar(t){if(t==="")return t;if(/^[-+.A-Za-z0-9]*$/.test(t))return t.toLowerCase();throw new TypeError(`Invalid protocol '${t}'.`)}function Ga(t){if(t==="")return t;let e=new URL("https://example.com");return e.username=t,e.username}function Ha(t){if(t==="")return t;let e=new URL("https://example.com");return e.password=t,e.password}function ks(t){if(t==="")return t;if(/[\t\n\r #%/:<>?@[\]^\\|]/g.test(t))throw new TypeError(`Invalid hostname '${t}'`);let e=new URL("https://example.com");return e.hostname=t,e.hostname}function Cs(t){if(t==="")return t;if(/[^0-9a-fA-F[\]:]/g.test(t))throw new TypeError(`Invalid IPv6 hostname '${t}'`);return t.toLowerCase()}function Rs(t){if(t===""||/^[0-9]*$/.test(t)&&parseInt(t)<=65535)return t;throw new TypeError(`Invalid port '${t}'.`)}function za(t){if(t==="")return t;let e=new URL("https://example.com");return e.pathname=t[0]!=="/"?"/-"+t:t,t[0]!=="/"?e.pathname.substring(2,e.pathname.length):e.pathname}function Va(t){return t===""?t:new URL(`data:${t}`).pathname}function Wa(t){if(t==="")return t;let e=new URL("https://example.com");return e.search=t,e.search.substring(1,e.search.length)}function Ka(t){if(t==="")return t;let e=new URL("https://example.com");return e.hash=t,e.hash.substring(1,e.hash.length)}function xs(t,e){if(typeof t!="string")throw new TypeError("parameter 1 is not of type 'string'.");let r=new URL(t,e);return {protocol:r.protocol.substring(0,r.protocol.length-1),username:r.username,password:r.password,hostname:r.hostname,port:r.port,pathname:r.pathname,search:r.search!==""?r.search.substring(1,r.search.length):void 0,hash:r.hash!==""?r.hash.substring(1,r.hash.length):void 0}}function Te(t,e){return e?_t(t):t}function xt(t,e,r){let n;if(typeof e.baseURL=="string")try{n=new URL(e.baseURL),e.protocol===void 0&&(t.protocol=Te(n.protocol.substring(0,n.protocol.length-1),r)),!r&&e.protocol===void 0&&e.hostname===void 0&&e.port===void 0&&e.username===void 0&&(t.username=Te(n.username,r)),!r&&e.protocol===void 0&&e.hostname===void 0&&e.port===void 0&&e.username===void 0&&e.password===void 0&&(t.password=Te(n.password,r)),e.protocol===void 0&&e.hostname===void 0&&(t.hostname=Te(n.hostname,r)),e.protocol===void 0&&e.hostname===void 0&&e.port===void 0&&(t.port=Te(n.port,r)),e.protocol===void 0&&e.hostname===void 0&&e.port===void 0&&e.pathname===void 0&&(t.pathname=Te(n.pathname,r)),e.protocol===void 0&&e.hostname===void 0&&e.port===void 0&&e.pathname===void 0&&e.search===void 0&&(t.search=Te(n.search.substring(1,n.search.length),r)),e.protocol===void 0&&e.hostname===void 0&&e.port===void 0&&e.pathname===void 0&&e.search===void 0&&e.hash===void 0&&(t.hash=Te(n.hash.substring(1,n.hash.length),r));}catch{throw new TypeError(`invalid baseURL '${e.baseURL}'.`)}if(typeof e.protocol=="string"&&(t.protocol=Na(e.protocol,r)),typeof e.username=="string"&&(t.username=Ma(e.username,r)),typeof e.password=="string"&&(t.password=Ua(e.password,r)),typeof e.hostname=="string"&&(t.hostname=qa(e.hostname,r)),typeof e.port=="string"&&(t.port=$a(e.port,t.protocol,r)),typeof e.pathname=="string"){if(t.pathname=e.pathname,n&&!Oa(t.pathname,r)){let s=n.pathname.lastIndexOf("/");s>=0&&(t.pathname=Te(n.pathname.substring(0,s+1),r)+t.pathname);}t.pathname=Ba(t.pathname,t.protocol,r);}return typeof e.search=="string"&&(t.search=ja(e.search,r)),typeof e.hash=="string"&&(t.hash=Da(e.hash,r)),t}function _t(t){return t.replace(/([+*?:{}()\\])/g,"\\$1")}function Za(t){return t.replace(/([.+*?^${}()[\]|/\\])/g,"\\$1")}function Ja(t,e){e.delimiter??="/#?",e.prefixes??="./",e.sensitive??=false,e.strict??=false,e.end??=true,e.start??=true,e.endsWith="";let r=".*",n=`[^${Za(e.delimiter)}]+?`,s=/[$_\u200C\u200D\p{ID_Continue}]/u,i="";for(let o=0;o<t.length;++o){let a=t[o];if(a.type===3){if(a.modifier===3){i+=_t(a.value);continue}i+=`{${_t(a.value)}}${tt(a.modifier)}`;continue}let c=a.hasCustomName(),l=!!a.suffix.length||!!a.prefix.length&&(a.prefix.length!==1||!e.prefixes.includes(a.prefix)),u=o>0?t[o-1]:null,h=o<t.length-1?t[o+1]:null;if(!l&&c&&a.type===1&&a.modifier===3&&h&&!h.prefix.length&&!h.suffix.length)if(h.type===3){let d=h.value.length>0?h.value[0]:"";l=s.test(d);}else l=!h.hasCustomName();if(!l&&!a.prefix.length&&u&&u.type===3){let d=u.value[u.value.length-1];l=e.prefixes.includes(d);}l&&(i+="{"),i+=_t(a.prefix),c&&(i+=`:${a.name}`),a.type===2?i+=`(${a.value})`:a.type===1?c||(i+=`(${n})`):a.type===0&&(!c&&(!u||u.type===3||u.modifier!==3||l||a.prefix!=="")?i+="*":i+=`(${r})`),a.type===1&&c&&a.suffix.length&&s.test(a.suffix[0])&&(i+="\\"),i+=_t(a.suffix),l&&(i+="}"),a.modifier!==3&&(i+=tt(a.modifier));}return i}var Ap,F,wt,Lp,Op,ys,He,Fp,Ip,Ia,Qa,bs,Ge,Lr,Ya=b(()=>{g();Ap=Object.defineProperty,F=(t,e)=>Ap(t,"name",{value:e,configurable:true}),wt=class{type=3;name="";prefix="";value="";suffix="";modifier=3;constructor(t,e,r,n,s,i){this.type=t,this.name=e,this.prefix=r,this.value=n,this.suffix=s,this.modifier=i;}hasCustomName(){return this.name!==""&&typeof this.name!="number"}};F(wt,"Part");Lp=/[$_\p{ID_Start}]/u,Op=/[$_\u200C\u200D\p{ID_Continue}]/u,ys=".*";F(Aa,"isASCII");F(_s,"lexer");F(ws,"parse");F(me,"escapeString");F(gs,"flags");F(La,"stringToRegexp");F(tt,"modifierToString");F(Ss,"partsToRegexp");He={delimiter:"",prefixes:"",sensitive:true,strict:true},Fp={delimiter:".",prefixes:"",sensitive:true,strict:true},Ip={delimiter:"/",prefixes:"/",sensitive:true,strict:true};F(Oa,"isAbsolutePathname");F(Es,"maybeStripPrefix");F(Fa,"maybeStripSuffix");F(Ps,"treatAsIPv6Hostname");Ia=["ftp","file","http","https","ws","wss"];F(vs,"isSpecialScheme");F(Da,"canonicalizeHash");F(ja,"canonicalizeSearch");F(qa,"canonicalizeHostname");F(Ua,"canonicalizePassword");F(Ma,"canonicalizeUsername");F(Ba,"canonicalizePathname");F($a,"canonicalizePort");F(Na,"canonicalizeProtocol");F(Ts,"defaultPortForProtocol");F(Ar,"protocolEncodeCallback");F(Ga,"usernameEncodeCallback");F(Ha,"passwordEncodeCallback");F(ks,"hostnameEncodeCallback");F(Cs,"ipv6HostnameEncodeCallback");F(Rs,"portEncodeCallback");F(za,"standardURLPathnameEncodeCallback");F(Va,"pathURLPathnameEncodeCallback");F(Wa,"searchEncodeCallback");F(Ka,"hashEncodeCallback");Qa=class{#o;#r=[];#n={};#t=0;#p=1;#w=0;#s=0;#y=0;#l=0;#i=false;constructor(t){this.#o=t;}get result(){return this.#n}parse(){for(this.#r=_s(this.#o,true);this.#t<this.#r.length;this.#t+=this.#p){if(this.#p=1,this.#r[this.#t].type==="END"){if(this.#s===0){this.#b(),this.#T()?this.#e(9,1):this.#d()?this.#e(8,1):this.#e(7,0);continue}else if(this.#s===2){this.#f(5);continue}this.#e(10,0);break}if(this.#y>0)if(this.#k())this.#y-=1;else continue;if(this.#L()){this.#y+=1;continue}switch(this.#s){case 0:this.#h()&&this.#f(1);break;case 1:if(this.#h()){this.#O();let t=7,e=1;this.#E()?(t=2,e=3):this.#i&&(t=2),this.#e(t,e);}break;case 2:this.#g()?this.#f(3):(this.#v()||this.#d()||this.#T())&&this.#f(5);break;case 3:this.#x()?this.#e(4,1):this.#g()&&this.#e(5,1);break;case 4:this.#g()&&this.#e(5,1);break;case 5:this.#F()?this.#l+=1:this.#_()&&(this.#l-=1),this.#P()&&!this.#l?this.#e(6,1):this.#v()?this.#e(7,0):this.#d()?this.#e(8,1):this.#T()&&this.#e(9,1);break;case 6:this.#v()?this.#e(7,0):this.#d()?this.#e(8,1):this.#T()&&this.#e(9,1);break;case 7:this.#d()?this.#e(8,1):this.#T()&&this.#e(9,1);break;case 8:this.#T()&&this.#e(9,1);break;}}this.#n.hostname!==void 0&&this.#n.port===void 0&&(this.#n.port="");}#e(t,e){switch(this.#s){case 0:break;case 1:this.#n.protocol=this.#S();break;case 2:break;case 3:this.#n.username=this.#S();break;case 4:this.#n.password=this.#S();break;case 5:this.#n.hostname=this.#S();break;case 6:this.#n.port=this.#S();break;case 7:this.#n.pathname=this.#S();break;case 8:this.#n.search=this.#S();break;case 9:this.#n.hash=this.#S();break;}this.#s!==0&&t!==10&&([1,2,3,4].includes(this.#s)&&[6,7,8,9].includes(t)&&(this.#n.hostname??=""),[1,2,3,4,5,6].includes(this.#s)&&[8,9].includes(t)&&(this.#n.pathname??=this.#i?"/":""),[1,2,3,4,5,6,7].includes(this.#s)&&t===9&&(this.#n.search??="")),this.#m(t,e);}#m(t,e){this.#s=t,this.#w=this.#t+e,this.#t+=e,this.#p=0;}#b(){this.#t=this.#w,this.#p=0;}#f(t){this.#b(),this.#s=t;}#u(t){return t<0&&(t=this.#r.length-t),t<this.#r.length?this.#r[t]:this.#r[this.#r.length-1]}#c(t,e){let r=this.#u(t);return r.value===e&&(r.type==="CHAR"||r.type==="ESCAPED_CHAR"||r.type==="INVALID_CHAR")}#h(){return this.#c(this.#t,":")}#E(){return this.#c(this.#t+1,"/")&&this.#c(this.#t+2,"/")}#g(){return this.#c(this.#t,"@")}#x(){return this.#c(this.#t,":")}#P(){return this.#c(this.#t,":")}#v(){return this.#c(this.#t,"/")}#d(){if(this.#c(this.#t,"?"))return true;if(this.#r[this.#t].value!=="?")return false;let t=this.#u(this.#t-1);return t.type!=="NAME"&&t.type!=="REGEX"&&t.type!=="CLOSE"&&t.type!=="ASTERISK"}#T(){return this.#c(this.#t,"#")}#L(){return this.#r[this.#t].type=="OPEN"}#k(){return this.#r[this.#t].type=="CLOSE"}#F(){return this.#c(this.#t,"[")}#_(){return this.#c(this.#t,"]")}#S(){let t=this.#r[this.#t],e=this.#u(this.#w).index;return this.#o.substring(e,t.index)}#O(){let t={};Object.assign(t,He),t.encodePart=Ar;let e=La(this.#S(),void 0,t);this.#i=vs(e);}};F(Qa,"Parser");bs=["protocol","username","password","hostname","port","pathname","search","hash"],Ge="*";F(xs,"extractValues");F(Te,"processBaseURLString");F(xt,"applyInit");F(_t,"escapePatternString");F(Za,"escapeRegexpString");F(Ja,"partsToPattern");Lr=class{#o;#r={};#n={};#t={};#p={};#w=false;constructor(t={},e,r){try{let n;if(typeof e=="string"?n=e:r=e,typeof t=="string"){let a=new Qa(t);if(a.parse(),t=a.result,n===void 0&&typeof t.protocol!="string")throw new TypeError("A base URL must be provided for a relative constructor string.");t.baseURL=n;}else {if(!t||typeof t!="object")throw new TypeError("parameter 1 is not of type 'string' and cannot convert to dictionary.");if(n)throw new TypeError("parameter 1 is not of type 'string'.")}typeof r>"u"&&(r={ignoreCase:!1});let s={ignoreCase:r.ignoreCase===!0},i={pathname:Ge,protocol:Ge,username:Ge,password:Ge,hostname:Ge,port:Ge,search:Ge,hash:Ge};this.#o=xt(i,t,!0),Ts(this.#o.protocol)===this.#o.port&&(this.#o.port="");let o;for(o of bs){if(!(o in this.#o))continue;let a={},c=this.#o[o];switch(this.#n[o]=[],o){case "protocol":Object.assign(a,He),a.encodePart=Ar;break;case "username":Object.assign(a,He),a.encodePart=Ga;break;case "password":Object.assign(a,He),a.encodePart=Ha;break;case "hostname":Object.assign(a,Fp),Ps(c)?a.encodePart=Cs:a.encodePart=ks;break;case "port":Object.assign(a,He),a.encodePart=Rs;break;case "pathname":vs(this.#r.protocol)?(Object.assign(a,Ip,s),a.encodePart=za):(Object.assign(a,He,s),a.encodePart=Va);break;case "search":Object.assign(a,He,s),a.encodePart=Wa;break;case "hash":Object.assign(a,He,s),a.encodePart=Ka;break}try{this.#p[o]=ws(c,a),this.#r[o]=Ss(this.#p[o],this.#n[o],a),this.#t[o]=Ja(this.#p[o],a),this.#w=this.#w||this.#p[o].some(l=>l.type===2);}catch{throw new TypeError(`invalid ${o} pattern '${this.#o[o]}'.`)}}}catch(n){throw new TypeError(`Failed to construct 'URLPattern': ${n.message}`)}}get[Symbol.toStringTag](){return "URLPattern"}test(t={},e){let r={pathname:"",protocol:"",username:"",password:"",hostname:"",port:"",search:"",hash:""};if(typeof t!="string"&&e)throw new TypeError("parameter 1 is not of type 'string'.");if(typeof t>"u")return false;try{typeof t=="object"?r=xt(r,t,!1):r=xt(r,xs(t,e),!1);}catch{return false}let n;for(n of bs)if(!this.#r[n].exec(r[n]))return false;return true}exec(t={},e){let r={pathname:"",protocol:"",username:"",password:"",hostname:"",port:"",search:"",hash:""};if(typeof t!="string"&&e)throw new TypeError("parameter 1 is not of type 'string'.");if(typeof t>"u")return;try{typeof t=="object"?r=xt(r,t,!1):r=xt(r,xs(t,e),!1);}catch{return null}let n={};e?n.inputs=[t,e]:n.inputs=[t];let s;for(s of bs){let i=this.#r[s].exec(r[s]);if(!i)return null;let o={};for(let[a,c]of this.#n[s].entries())if(typeof c=="string"||typeof c=="number"){let l=i[a+1];o[c]=l;}n[s]={input:r[s]??"",groups:o};}return n}static compareComponent(t,e,r){let n=F((a,c)=>{for(let l of ["type","modifier","prefix","value","suffix"]){if(a[l]<c[l])return -1;if(a[l]!==c[l])return 1}return 0},"comparePart"),s=new wt(3,"","","","",3),i=new wt(0,"","","","",3),o=F((a,c)=>{let l=0;for(;l<Math.min(a.length,c.length);++l){let u=n(a[l],c[l]);if(u)return u}return a.length===c.length?0:n(a[l]??s,c[l]??s)},"comparePartList");return !e.#t[t]&&!r.#t[t]?0:e.#t[t]&&!r.#t[t]?o(e.#p[t],[i]):!e.#t[t]&&r.#t[t]?o([i],r.#p[t]):o(e.#p[t],r.#p[t])}get protocol(){return this.#t.protocol}get username(){return this.#t.username}get password(){return this.#t.password}get hostname(){return this.#t.hostname}get port(){return this.#t.port}get pathname(){return this.#t.pathname}get search(){return this.#t.search}get hash(){return this.#t.hash}get hasRegExpGroups(){return this.#w}};F(Lr,"URLPattern");});var Xa={};d(Xa,{URLPattern:()=>Lr});var el=b(()=>{g();Ya();globalThis.URLPattern||(globalThis.URLPattern=Lr);});var Ve=c(de=>{g();Object.defineProperty(de,"__esModule",{value:true});de.isPromise=Or;de.isActualPromise=rl;de.handleMaybePromise=ze;de.fakePromise=ke;de.createDeferredPromise=Dp;de.iterateAsync=nl;de.iterateAsyncVoid=nl;de.fakeRejectPromise=rt;de.mapMaybePromise=jp;de.mapAsyncIterator=qp;de.promiseLikeFinally=sl;de.unfakePromise=il;var Fr=Symbol.for("@whatwg-node/promise-helpers/FakePromise");function Or(t){return t?.then!=null}function rl(t){let e=t;return e&&e.then&&e.catch&&e.finally}function ze(t,e,r,n){let s=ke().then(t).then(e,r);return n&&(s=s.finally(n)),il(s)}function ke(t){return t&&rl(t)?t:Or(t)?{then:(e,r)=>ke(t.then(e,r)),catch:e=>ke(t.then(r=>r,e)),finally:e=>ke(e?sl(t,e):t),[Symbol.toStringTag]:"Promise"}:{then(e){if(e)try{return ke(e(t))}catch(r){return rt(r)}return this},catch(){return this},finally(e){if(e)try{return ke(e()).then(()=>t,()=>t)}catch(r){return rt(r)}return this},[Symbol.toStringTag]:"Promise",__fakePromiseValue:t,[Fr]:"resolved"}}function Dp(){if(Promise.withResolvers)return Promise.withResolvers();let t,e;return {promise:new Promise(function(s,i){t=s,e=i;}),get resolve(){return t},get reject(){return e}}}function nl(t,e,r){if(t?.length===0)return;let n=t[Symbol.iterator](),s=0;function i(){let{done:o,value:a}=n.next();if(o)return;let c=false;function l(){c=true;}return ze(function(){return e(a,l,s++)},function(h){if(h&&r?.push(h),!c)return i()})}return i()}function rt(t){return {then(e,r){if(r)try{return ke(r(t))}catch(n){return rt(n)}return this},catch(e){if(e)try{return ke(e(t))}catch(r){return rt(r)}return this},finally(e){if(e)try{e();}catch(r){return rt(r)}return this},__fakeRejectError:t,[Symbol.toStringTag]:"Promise",[Fr]:"rejected"}}function jp(t,e,r){return ze(()=>t,e,r)}function qp(t,e,r,n){Symbol.asyncIterator in t&&(t=t[Symbol.asyncIterator]());let s,i,o;if(n){let l;o=u=>(l||=ze(n,()=>u,()=>u),l);}typeof t.return=="function"&&(s=t.return,i=l=>{let u=()=>{throw l};return s.call(t).then(u,u)});function a(l){return l.done?o?o(l):l:ze(()=>l.value,u=>ze(()=>e(u),tl,i))}let c;if(r){let l,u=r;c=h=>(l||=ze(()=>h,d=>ze(()=>u(d),tl,i)),l);}return {next(){return t.next().then(a,c)},return(){let l=s?s.call(t).then(a,c):ke({value:void 0,done:true});return o?l.then(o):l},throw(l){return typeof t.throw=="function"?t.throw(l).then(a,c):i?i(l):rt(l)},[Symbol.asyncIterator](){return this}}}function tl(t){return {value:t,done:false}}function Up(t){return t?.[Fr]==="resolved"}function Mp(t){return t?.[Fr]==="rejected"}function sl(t,e){return "finally"in t?t.finally(e):t.then(r=>{let n=e();return Or(n)?n.then(()=>r):r},r=>{let n=e();if(Or(n))return n.then(()=>{throw r});throw r})}function il(t){if(Up(t))return t.__fakePromiseValue;if(Mp(t))throw t.__fakeRejectError;return t}});var As=c((Ew,ol)=>{g();var{EventEmitter:Bp}=a("events"),{inherits:$p}=a("util");function nt(t){if(typeof t=="string"&&(t=Buffer.from(t)),!Buffer.isBuffer(t))throw new TypeError("The needle has to be a String or a Buffer.");let e=t.length,r=e-1;if(e===0)throw new Error("The needle cannot be an empty String/Buffer.");if(e>256)throw new Error("The needle cannot have a length bigger than 256.");this.maxMatches=1/0,this.matches=0,this._occ=new Uint8Array(256).fill(e),this._lookbehind_size=0,this._needle=t,this._bufpos=0,this._lookbehind=Buffer.alloc(r);for(var n=0;n<r;++n)this._occ[t[n]]=r-n;}$p(nt,Bp);nt.prototype.reset=function(){this._lookbehind_size=0,this.matches=0,this._bufpos=0;};nt.prototype.push=function(t,e){Buffer.isBuffer(t)||(t=Buffer.from(t,"binary"));let r=t.length;this._bufpos=e||0;let n;for(;n!==r&&this.matches<this.maxMatches;)n=this._sbmh_feed(t);return n};nt.prototype._sbmh_feed=function(t){let e=t.length,r=this._needle,n=r.length,s=n-1,i=r[s],o=-this._lookbehind_size,a;if(o<0){for(;o<0&&o<=e-n;){if(a=t[o+s],a===i&&this._sbmh_memcmp(t,o,s))return this._lookbehind_size=0,++this.matches,this.emit("info",true),this._bufpos=o+n;o+=this._occ[a];}for(;o<0&&!this._sbmh_memcmp(t,o,e-o);)++o;if(o>=0)this.emit("info",false,this._lookbehind,0,this._lookbehind_size),this._lookbehind_size=0;else {let c=this._lookbehind_size+o;return c>0&&this.emit("info",false,this._lookbehind,0,c),this._lookbehind_size-=c,this._lookbehind.copy(this._lookbehind,0,c,this._lookbehind_size),t.copy(this._lookbehind,this._lookbehind_size),this._lookbehind_size+=e,this._bufpos=e,e}}if(o=t.indexOf(r,o+this._bufpos),o!==-1)return ++this.matches,o===0?this.emit("info",true):this.emit("info",true,t,this._bufpos,o),this._bufpos=o+n;for(o=e-s,o<0&&(o=0);o!==e&&(t[o]!==r[0]||Buffer.compare(t.subarray(o+1,e),r.subarray(1,e-o))!==0);)++o;return o!==e&&(t.copy(this._lookbehind,0,o,e),this._lookbehind_size=e-o),o!==0&&this.emit("info",false,t,this._bufpos,o),this._bufpos=e,e};nt.prototype._sbmh_lookup_char=function(t,e){return e<0?this._lookbehind[this._lookbehind_size+e]:t[e]};nt.prototype._sbmh_memcmp=function(t,e,r){for(var n=0;n<r;++n)if(this._sbmh_lookup_char(t,e+n)!==this._needle[n])return false;return true};ol.exports=nt;});var cl=c((vw,ll)=>{g();var Np=a("util").inherits,al=a("stream").Readable;function Ls(t){al.call(this,t);}Np(Ls,al);Ls.prototype._read=function(t){};ll.exports=Ls;});var Ir=c((kw,ul)=>{g();ul.exports=function(e,r,n){if(!e||e[r]===void 0||e[r]===null)return n;if(typeof e[r]!="number"||isNaN(e[r]))throw new TypeError("Limit "+r+" is not a valid number");return e[r]};});var pl=c((Rw,dl)=>{g();var hl=a("events").EventEmitter,Gp=a("util").inherits,fl=Ir(),Hp=As(),zp=Buffer.from(`\r
|
|
3
3
|
\r
|
|
4
4
|
`),Vp=/\r\n/g,Wp=/^([^:]+):[ \t]?([\x00-\xFF]+)?$/;function St(t){hl.call(this),t=t||{};let e=this;this.nread=0,this.maxed=false,this.npairs=0,this.maxHeaderPairs=fl(t,"maxHeaderPairs",2e3),this.maxHeaderSize=fl(t,"maxHeaderSize",80*1024),this.buffer="",this.header={},this.finished=false,this.ss=new Hp(zp),this.ss.on("info",function(r,n,s,i){n&&!e.maxed&&(e.nread+i-s>=e.maxHeaderSize?(i=e.maxHeaderSize-e.nread+s,e.nread=e.maxHeaderSize,e.maxed=true):e.nread+=i-s,e.buffer+=n.toString("binary",s,i)),r&&e._finish();});}Gp(St,hl);St.prototype.push=function(t){let e=this.ss.push(t);if(this.finished)return e};St.prototype.reset=function(){this.finished=false,this.buffer="",this.header={},this.ss.reset();};St.prototype._finish=function(){this.buffer&&this._parseHeader(),this.ss.matches=this.ss.maxMatches;let t=this.header;this.header={},this.buffer="",this.finished=true,this.nread=this.npairs=0,this.maxed=false,this.emit("header",t);};St.prototype._parseHeader=function(){if(this.npairs===this.maxHeaderPairs)return;let t=this.buffer.split(Vp),e=t.length,r,n;for(var s=0;s<e;++s){if(t[s].length===0)continue;if((t[s][0]===" "||t[s][0]===" ")&&n){this.header[n][this.header[n].length-1]+=t[s];continue}let i=t[s].indexOf(":");if(i===-1||i===0)return;if(r=Wp.exec(t[s]),n=r[1].toLowerCase(),this.header[n]=this.header[n]||[],this.header[n].push(r[2]||""),++this.npairs===this.maxHeaderPairs)break}};dl.exports=St;});var Fs=c((Lw,bl)=>{g();var Os=a("stream").Writable,Kp=a("util").inherits,Qp=As(),ml=cl(),Zp=pl(),Jp=45,Yp=Buffer.from("-"),Xp=Buffer.from(`\r
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
]))`;continue}}if(t.s&&s[d]==="."){n+=i?`${s[d]}\r
|
|
117
117
|
`:`[${s[d]}\r
|
|
118
118
|
]`;continue}n+=s[d],s[d]==="\\"?a=true:i&&s[d]==="]"?i=false:!i&&s[d]==="["&&(i=true);}try{new RegExp(n);}catch{return console.warn(`Could not convert regex pattern at ${e.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`),r.source}return n}function xc(r,e){if(e.target==="openAi"&&console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead."),e.target==="openApi3"&&r.keyType?._def.typeName===exports.ia.ZodEnum)return {type:"object",required:r.keyType._def.values,properties:r.keyType._def.values.reduce((s,n)=>({...s,[n]:te(r.valueType._def,{...e,currentPath:[...e.currentPath,"properties",n]})??Le(e)}),{}),additionalProperties:e.rejectedAdditionalProperties};let t={type:"object",additionalProperties:te(r.valueType._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]})??e.allowedAdditionalProperties};if(e.target==="openApi3")return t;if(r.keyType?._def.typeName===exports.ia.ZodString&&r.keyType._def.checks?.length){let{type:s,...n}=yc(r.keyType._def,e);return {...t,propertyNames:n}}else {if(r.keyType?._def.typeName===exports.ia.ZodEnum)return {...t,propertyNames:{enum:r.keyType._def.values}};if(r.keyType?._def.typeName===exports.ia.ZodBranded&&r.keyType._def.type._def.typeName===exports.ia.ZodString&&r.keyType._def.type._def.checks?.length){let{type:s,...n}=gc(r.keyType._def,e);return {...t,propertyNames:n}}}return t}function T_(r,e){if(e.mapStrategy==="record")return xc(r,e);let t=te(r.keyType._def,{...e,currentPath:[...e.currentPath,"items","items","0"]})||Le(e),s=te(r.valueType._def,{...e,currentPath:[...e.currentPath,"items","items","1"]})||Le(e);return {type:"array",maxItems:125,items:{type:"array",items:[t,s],minItems:2,maxItems:2}}}chunkBUNLC3II_cjs.h();function O_(r){let e=r.values,s=Object.keys(r.values).filter(a=>typeof e[e[a]]!="number").map(a=>e[a]),n=Array.from(new Set(s.map(a=>typeof a)));return {type:n.length===1?n[0]==="string"?"string":"number":["string","number"],enum:s}}chunkBUNLC3II_cjs.h();function P_(r){return r.target==="openAi"?void 0:{not:Le({...r,currentPath:[...r.currentPath,"not"]})}}chunkBUNLC3II_cjs.h();function I_(r){return r.target==="openApi3"?{enum:["null"],nullable:true}:{type:"null"}}chunkBUNLC3II_cjs.h();chunkBUNLC3II_cjs.h();var Xa={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function L_(r,e){if(e.target==="openApi3")return D_(r,e);let t=r.options instanceof Map?Array.from(r.options.values()):r.options;if(t.every(s=>s._def.typeName in Xa&&(!s._def.checks||!s._def.checks.length))){let s=t.reduce((n,a)=>{let i=Xa[a._def.typeName];return i&&!n.includes(i)?[...n,i]:n},[]);return {type:s.length>1?s:s[0]}}else if(t.every(s=>s._def.typeName==="ZodLiteral"&&!s.description)){let s=t.reduce((n,a)=>{let i=typeof a._def.value;switch(i){case "string":case "number":case "boolean":return [...n,i];case "bigint":return [...n,"integer"];case "object":if(a._def.value===null)return [...n,"null"];default:return n}},[]);if(s.length===t.length){let n=s.filter((a,i,c)=>c.indexOf(a)===i);return {type:n.length>1?n:n[0],enum:t.reduce((a,i)=>a.includes(i._def.value)?a:[...a,i._def.value],[])}}}else if(t.every(s=>s._def.typeName==="ZodEnum"))return {type:"string",enum:t.reduce((s,n)=>[...s,...n._def.values.filter(a=>!s.includes(a))],[])};return D_(r,e)}var D_=(r,e)=>{let t=(r.options instanceof Map?Array.from(r.options.values()):r.options).map((s,n)=>te(s._def,{...e,currentPath:[...e.currentPath,"anyOf",`${n}`]})).filter(s=>!!s&&(!e.strictUnions||typeof s=="object"&&Object.keys(s).length>0));return t.length?{anyOf:t}:void 0};function $_(r,e){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(r.innerType._def.typeName)&&(!r.innerType._def.checks||!r.innerType._def.checks.length))return e.target==="openApi3"?{type:Xa[r.innerType._def.typeName],nullable:true}:{type:[Xa[r.innerType._def.typeName],"null"]};if(e.target==="openApi3"){let s=te(r.innerType._def,{...e,currentPath:[...e.currentPath]});return s&&"$ref"in s?{allOf:[s],nullable:true}:s&&{...s,nullable:true}}let t=te(r.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","0"]});return t&&{anyOf:[t,{type:"null"}]}}chunkBUNLC3II_cjs.h();function B_(r,e){let t={type:"number"};if(!r.checks)return t;for(let s of r.checks)switch(s.kind){case "int":t.type="integer",ad(t,"type",s.message,e);break;case "min":e.target==="jsonSchema7"?s.inclusive?fe(t,"minimum",s.value,s.message,e):fe(t,"exclusiveMinimum",s.value,s.message,e):(s.inclusive||(t.exclusiveMinimum=true),fe(t,"minimum",s.value,s.message,e));break;case "max":e.target==="jsonSchema7"?s.inclusive?fe(t,"maximum",s.value,s.message,e):fe(t,"exclusiveMaximum",s.value,s.message,e):(s.inclusive||(t.exclusiveMaximum=true),fe(t,"maximum",s.value,s.message,e));break;case "multipleOf":fe(t,"multipleOf",s.value,s.message,e);break}return t}chunkBUNLC3II_cjs.h();function j_(r,e){let t=e.target==="openAi",s={type:"object",properties:{}},n=[],a=r.shape();for(let c in a){let d=a[c];if(d===void 0||d._def===void 0)continue;let g=LB(d);g&&t&&(d._def.typeName==="ZodOptional"&&(d=d._def.innerType),d.isNullable()||(d=d.nullable()),g=false);let x=te(d._def,{...e,currentPath:[...e.currentPath,"properties",c],propertyPath:[...e.currentPath,"properties",c]});x!==void 0&&(s.properties[c]=x,g||n.push(c));}n.length&&(s.required=n);let i=DB(r,e);return i!==void 0&&(s.additionalProperties=i),s}function DB(r,e){if(r.catchall._def.typeName!=="ZodNever")return te(r.catchall._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]});switch(r.unknownKeys){case "passthrough":return e.allowedAdditionalProperties;case "strict":return e.rejectedAdditionalProperties;case "strip":return e.removeAdditionalStrategy==="strict"?e.allowedAdditionalProperties:e.rejectedAdditionalProperties}}function LB(r){try{return r.isOptional()}catch{return true}}chunkBUNLC3II_cjs.h();var N_=(r,e)=>{if(e.currentPath.toString()===e.propertyPath?.toString())return te(r.innerType._def,e);let t=te(r.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","1"]});return t?{anyOf:[{not:Le(e)},t]}:Le(e)};chunkBUNLC3II_cjs.h();var M_=(r,e)=>{if(e.pipeStrategy==="input")return te(r.in._def,e);if(e.pipeStrategy==="output")return te(r.out._def,e);let t=te(r.in._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),s=te(r.out._def,{...e,currentPath:[...e.currentPath,"allOf",t?"1":"0"]});return {allOf:[t,s].filter(n=>n!==void 0)}};chunkBUNLC3II_cjs.h();function U_(r,e){return te(r.type._def,e)}chunkBUNLC3II_cjs.h();function q_(r,e){let s={type:"array",uniqueItems:true,items:te(r.valueType._def,{...e,currentPath:[...e.currentPath,"items"]})};return r.minSize&&fe(s,"minItems",r.minSize.value,r.minSize.message,e),r.maxSize&&fe(s,"maxItems",r.maxSize.value,r.maxSize.message,e),s}chunkBUNLC3II_cjs.h();function F_(r,e){return r.rest?{type:"array",minItems:r.items.length,items:r.items.map((t,s)=>te(t._def,{...e,currentPath:[...e.currentPath,"items",`${s}`]})).reduce((t,s)=>s===void 0?t:[...t,s],[]),additionalItems:te(r.rest._def,{...e,currentPath:[...e.currentPath,"additionalItems"]})}:{type:"array",minItems:r.items.length,maxItems:r.items.length,items:r.items.map((t,s)=>te(t._def,{...e,currentPath:[...e.currentPath,"items",`${s}`]})).reduce((t,s)=>s===void 0?t:[...t,s],[])}}chunkBUNLC3II_cjs.h();function H_(r){return {not:Le(r)}}chunkBUNLC3II_cjs.h();function G_(r){return Le(r)}chunkBUNLC3II_cjs.h();var z_=(r,e)=>te(r.innerType._def,e);var K_=(r,e,t)=>{switch(e){case exports.ia.ZodString:return yc(r,t);case exports.ia.ZodNumber:return B_(r,t);case exports.ia.ZodObject:return j_(r,t);case exports.ia.ZodBigInt:return w_(r,t);case exports.ia.ZodBoolean:return b_();case exports.ia.ZodDate:return md(r,t);case exports.ia.ZodUndefined:return H_(t);case exports.ia.ZodNull:return I_(t);case exports.ia.ZodArray:return __(r,t);case exports.ia.ZodUnion:case exports.ia.ZodDiscriminatedUnion:return L_(r,t);case exports.ia.ZodIntersection:return k_(r,t);case exports.ia.ZodTuple:return F_(r,t);case exports.ia.ZodRecord:return xc(r,t);case exports.ia.ZodLiteral:return C_(r,t);case exports.ia.ZodEnum:return R_(r);case exports.ia.ZodNativeEnum:return O_(r);case exports.ia.ZodNullable:return $_(r,t);case exports.ia.ZodOptional:return N_(r,t);case exports.ia.ZodMap:return T_(r,t);case exports.ia.ZodSet:return q_(r,t);case exports.ia.ZodLazy:return ()=>r.getter()._def;case exports.ia.ZodPromise:return U_(r,t);case exports.ia.ZodNaN:case exports.ia.ZodNever:return P_(t);case exports.ia.ZodEffects:return A_(r,t);case exports.ia.ZodAny:return Le(t);case exports.ia.ZodUnknown:return G_(t);case exports.ia.ZodDefault:return S_(r,t);case exports.ia.ZodBranded:return gc(r,t);case exports.ia.ZodReadonly:return z_(r,t);case exports.ia.ZodCatch:return v_(r,t);case exports.ia.ZodPipeline:return M_(r,t);case exports.ia.ZodFunction:case exports.ia.ZodVoid:case exports.ia.ZodSymbol:return;default:return (s=>{})()}};function te(r,e,t=false){let s=e.seen.get(r);if(e.override){let c=e.override?.(r,e,s,t);if(c!==u_)return c}if(s&&!t){let c=$B(s,e);if(c!==void 0)return c}let n={def:r,path:e.currentPath,jsonSchema:void 0};e.seen.set(r,n);let a=K_(r,r.typeName,e),i=typeof a=="function"?te(a(),e):a;if(i&&BB(r,e,i),e.postProcess){let c=e.postProcess(i,r,e);return n.jsonSchema=i,c}return n.jsonSchema=i,i}var $B=(r,e)=>{switch(e.$refStrategy){case "root":return {$ref:r.path.join("/")};case "relative":return {$ref:pc(e.currentPath,r.path)};case "none":case "seen":return r.path.length<e.currentPath.length&&r.path.every((t,s)=>e.currentPath[s]===t)?(console.warn(`Recursive reference detected at ${e.currentPath.join("/")}! Defaulting to any`),Le(e)):e.$refStrategy==="seen"?Le(e):void 0}},BB=(r,e,t)=>(r.description&&(t.description=r.description,e.markdownDescription&&(t.markdownDescription=r.description)),t);chunkBUNLC3II_cjs.h();chunkBUNLC3II_cjs.h();var zn=(r,e)=>{let t=d_(e),s=typeof e=="object"&&e.definitions?Object.entries(e.definitions).reduce((d,[g,x])=>({...d,[g]:te(x._def,{...t,currentPath:[...t.basePath,t.definitionPath,g]},true)??Le(t)}),{}):void 0,n=typeof e=="string"?e:e?.nameStrategy==="title"?void 0:e?.name,a=te(r._def,n===void 0?t:{...t,currentPath:[...t.basePath,t.definitionPath,n]},false)??Le(t),i=typeof e=="object"&&e.name!==void 0&&e.nameStrategy==="title"?e.name:void 0;i!==void 0&&(a.title=i),t.flags.hasReferencedOpenAiAnyType&&(s||(s={}),s[t.openAiAnyTypeName]||(s[t.openAiAnyTypeName]={type:["string","number","integer","boolean","array","null"],items:{$ref:t.$refStrategy==="relative"?"1":[...t.basePath,t.definitionPath,t.openAiAnyTypeName].join("/")}}));let c=n===void 0?s?{...a,[t.definitionPath]:s}:a:{$ref:[...t.$refStrategy==="relative"?[]:t.basePath,t.definitionPath,n].join("/"),[t.definitionPath]:{...s,[n]:a}};return t.target==="jsonSchema7"?c.$schema="http://json-schema.org/draft-07/schema#":(t.target==="jsonSchema2019-09"||t.target==="openAi")&&(c.$schema="https://json-schema.org/draft/2019-09/schema#"),t.target==="openAi"&&("anyOf"in c||"oneOf"in c||"allOf"in c||"type"in c&&Array.isArray(c.type))&&console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property."),c};var UB={_media:{create:chunkAK754S3T_cjs.d.MEDIA_UPLOAD,update:chunkAK754S3T_cjs.d.MEDIA_UPLOAD,delete:chunkAK754S3T_cjs.d.MEDIA_DELETE}};function Ja(r,e){let t=UB[r];return t?t[e]:`collection.${e}`}function qB(r){let e=r.headers.get("x-forwarded-for");return e?e.split(",")[0].trim():r.headers.get("x-real-ip")||"unknown"}function _c(r,e,t,s,n){e?.apiKeyId&&r&&r.createAuditLog({action:"api_request",userId:e.userId||"",resource:"api_key",resourceId:e.apiKeyId,success:true,metadata:{endpoint:t,method:s,ip:qB(n)}});}function wc(r){return r.baseUpdatedAt??r._baseUpdatedAt}function gd(r){let{baseUpdatedAt:e,_baseUpdatedAt:t,...s}=r;return s}function yd(r,e){return {error:"Document has changed since you started editing",code:"REVISION_CONFLICT",conflict:{expectedUpdatedAt:r??null,actualUpdatedAt:e.updatedAt??null,current:e}}}async function Ie(r,e,t,s,n,a,i=true,c="none"){return await chunkAK754S3T_cjs.b(r,e,{user:s,req:t,tenantId:n,apiKey:a},{enablePublicAccess:i,defaultAccess:c})}async function Yt(r,e,t,s,n,a=true){return await chunkAK754S3T_cjs.c(r,e,{user:s,req:t,tenantId:n},{enablePublicAccess:a})}async function V(r,e,t,s){if(t)return {user:t,tenantId:s,apiKeyContext:void 0,authType:"static"};if(e){let n=await e(r);if(n.status===200&&n.user)return {user:n.user,tenantId:n.tenantContext?.tenantId,apiKeyContext:n.apiKeyContext,authType:n.authType}}return {user:void 0,tenantId:void 0,apiKeyContext:void 0,authType:void 0}}async function FB(r,e){if("dialect"in r&&r.dialect==="postgres")return new chunkXBQ6HV3T_cjs.a({db:r.client});if("dialect"in r&&r.dialect==="sqlite")return new So({db:r.client});if("dialect"in r&&r.dialect==="mongodb"){let s=r;return new chunk7DUKWHRN_cjs.a({db:()=>s.db,adapter:s})}let t=ko.resolve(e,"data","auth.db");return new chunkBHR7OAU4_cjs.a({path:process.env.KYRO_AUTH_DB_PATH||t})}async function Z_(r){let{registry:e,db:t,authSecret:s,authAdapter:n,checkSession:a,user:i,tenantId:c,cors:d,webhookService:g,settings:x}=r,_=new Mc;function O(l){if(Array.isArray(l))return l.map(O);if(l!==null&&typeof l=="object"){let y={};for(let b in l)b!=="attrs"&&(y[b]=O(l[b]));return y}return l}_.use("*",async(l,y)=>{await y();let b=l.req.header("referer")||"";if(!(l.req.header("x-kyro-admin")==="true"||b.includes("/admin"))){let f=l.res.headers.get("Content-Type");if(f&&f.includes("application/json"))try{let w=await l.res.clone().json(),k=O(w);l.res=l.json(k,l.res.status);}catch{}}});for(let l of e.getPlugins())typeof l.serverMiddleware=="function"&&l.serverMiddleware(_);let H=x?.access?.apiAccess,U=x?.access?.enablePublicAccess??false,F=x?.access?.defaultCollectionAccess??"none";H?.requireAuth;let re=process.cwd(),Oe=re.endsWith("admin")?ko.resolve(re,".."):re,W=n||await FB(t,Oe),q=Xm({db:t,userLookup:async l=>await W.findUserById(l)||null}),Dt=H?.cors?.allowedOrigins,ls=d?.origins,Ir=Array.isArray(Dt)?Dt:typeof Dt=="string"&&Dt?Dt.split(`
|
|
119
|
-
`).map(l=>l.trim()).filter(Boolean):[],Fe=Ir.length>0?Ir:ls||[];(Fe.length>0||d)&&_.use("*",async(l,y)=>{let b=l.req.header("Origin")||"*";if(Fe.length>0&&!Fe.includes(b))return l.json({error:"Origin not allowed"},403);let A=Fe.length>0?b:"*";if(l.header("Access-Control-Allow-Origin",A),l.header("Access-Control-Allow-Methods","GET, POST, PATCH, DELETE, OPTIONS"),l.header("Access-Control-Allow-Headers","Content-Type, Authorization, X-API-Key"),d?.credentials&&l.header("Access-Control-Allow-Credentials","true"),l.req.method==="OPTIONS")return l.text("");await y();});let mr=x?.access?.rateLimiting,er;if(mr?.enabled){let l=mr.maxRequests||100,y=mr.windowMs||6e4;er=new bo({"api:general":{window:y,max:l}}),_.use("/api/*",async(b,A)=>{if(!er)return A();let f=b.req.header("CF-Connecting-IP")||b.req.header("X-Forwarded-For")?.split(",")[0]?.trim()||b.req.header("X-Real-IP")||"unknown",p=await er.check("api:general",f);if(b.header("X-RateLimit-Limit",String(l)),b.header("X-RateLimit-Remaining",String(p.remaining)),b.header("X-RateLimit-Reset",String(p.resetAt)),!p.allowed)return b.json({error:"Too many requests",retryAfter:p.retryAfter},429);await A();});}let _e=new vo({redis:W,jwtSecret:s||"change-me",baseUrl:process.env.KYRO_BASE_URL||"http://localhost:4321",rateLimiter:er});chunkVKXWJOWI_cjs.q.fromConfig(t).then(l=>{l&&(_e.email=l);}).catch(l=>{console.error("[Email] Failed to initialize transport from config:",l);}),_.post("/api/auth/login",async l=>_e.login(l.req.raw)),_.post("/api/auth/register",async l=>{try{let y=await t.findOne({collection:"_globals_system",where:{}});if(y&&y.enableRegistration===!1)return l.json({error:"User registration is currently disabled by administrator."},403);if(y?.defaultRegistrationRole){let b=l.req.raw;if((b.headers.get("content-type")||"").includes("application/json")){let f=await l.req.json();f.role||(f.role=y.defaultRegistrationRole);let p=new Request(b.url,{method:b.method,headers:b.headers,body:JSON.stringify(f)});return _e.register(p)}}}catch{}return _e.register(l.req.raw)}),_.post("/api/auth/logout",async l=>_e.logout(l.req.raw)),_.post("/api/auth/refresh",async l=>_e.refresh(l.req.raw)),_.get("/api/auth/me",async l=>_e.me(l.req.raw)),_.post("/api/auth/forgot-password",async l=>_e.forgotPassword(l.req.raw)),_.post("/api/auth/reset-password",async l=>_e.resetPassword(l.req.raw)),_.post("/api/auth/change-password",async l=>_e.changePassword(l.req.raw)),_.get("/api/auth/verify-email",async l=>_e.verifyEmail(l.req.raw)),_.post("/api/auth/verify-email",async l=>_e.verifyEmail(l.req.raw)),_.get("/api/auth/verify",async l=>_e.verifyEmail(l.req.raw)),_.post("/api/auth/verify",async l=>_e.verifyEmail(l.req.raw)),_.post("/api/auth/magic-link",async l=>_e.requestMagicLink(l.req.raw)),_.get("/api/auth/magic-link",async l=>_e.verifyMagicLink(l.req.raw)),_.post("/api/auth/invite",async l=>_e.inviteUser(l.req.raw)),_.get("/api/auth/sessions",async l=>_e.listSessions(l.req.raw)),_.post("/api/auth/sessions/refresh",async l=>_e.refreshSession(l.req.raw)),_.delete("/api/auth/sessions",async l=>_e.revokeOtherSessions(l.req.raw)),_.delete("/api/auth/sessions/:id",async l=>_e.revokeSession(l.req.raw,l.req.param("id"))),_.put("/api/auth/sessions/:id/name",async l=>_e.renameSession(l.req.raw,l.req.param("id"))),_.get("/api/auth/access",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Not authenticated"},401);let A={},f={};for(let p of e.getCollections()){let w={read:(await Ie(p,"read",l.req.raw,y,b,void 0,U,F)).allowed,create:(await Ie(p,"create",l.req.raw,y,b,void 0,U,F)).allowed,update:(await Ie(p,"update",l.req.raw,y,b,void 0,U,F)).allowed,delete:(await Ie(p,"delete",l.req.raw,y,b,void 0,U,F)).allowed};A[p.slug]=w;}for(let p of e.getGlobals()){let w={read:(await Yt(p,"read",l.req.raw,y,b,U)).allowed,update:(await Yt(p,"update",l.req.raw,y,b,U)).allowed};f[p.slug]=w;}return l.json({collections:A,globals:f})}catch(y){return l.json({error:y.message},500)}});let Lt=typeof e.hasCollection=="function"&&e.hasCollection("users")?e.getCollection("users"):(()=>{try{return e.getCollection("users")}catch{return chunkZO3YB5DK_cjs.a}})();_.get("/api/users",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c),A=await Ie(Lt,"read",l.req.raw,y,b,void 0,U,F);if(!A.allowed)return l.json({error:A.error},A.status||403);let f=parseInt(l.req.query("page")||"1"),p=Math.min(parseInt(l.req.query("limit")||"10"),100),w=l.req.query("search")||void 0,k=[],v=0;if(typeof W.findUsers=="function"){let R=await W.findUsers({page:f,limit:p,search:w});k=R.users||[],v=R.total||0;}else {let R=await t.find({collection:"users",page:f,limit:p,where:w?{email:{contains:w}}:{},tenantId:b});k=R.docs||[],v=R.totalDocs||0;}return l.json({docs:k,totalDocs:v,limit:p,totalPages:Math.ceil(v/p)||1,page:f,pagingCounter:(f-1)*p+1,hasPrevPage:f>1,hasNextPage:f<Math.ceil(v/p),prevPage:f>1?f-1:null,nextPage:f<Math.ceil(v/p)?f+1:null})}catch(y){return console.error("[API] Error listing users:",y),l.json({error:y.message},500)}}),_.get("/api/users/:id",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c),A=l.req.param("id"),f=await W.findUserById(A);return f?l.json({data:f}):l.json({error:"User not found"},404)}catch(y){return l.json({error:y.message},500)}}),_.post("/api/users",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c),A=await Ie(Lt,"create",l.req.raw,y,b,void 0,U,F);if(!A.allowed)return l.json({error:A.error},A.status||403);let f=await l.req.json();if(!f.email||!f.password)return l.json({error:"Email and password are required"},400);if(await W.findUserByEmail(f.email))return l.json({error:"Email already in use"},400);let w=f.role||"customer";if(w!=="customer"&&y?.role!=="super_admin")return l.json({error:"Forbidden: Only super_admin can assign administrative roles"},403);let k=await W.createUser({email:f.email,password:f.password,name:f.name,role:w,avatar:f.avatar,tenantId:f.tenantId});return y&&W?.createAuditLog({action:"user_create",userId:y.id,resource:"users",resourceId:k.id,success:!0}),l.json({data:k,message:"User created successfully"},201)}catch(y){return l.json({error:y.message},500)}}),_.patch("/api/users/:id",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c),A=await Ie(Lt,"update",l.req.raw,y,b,void 0,U,F);if(!A.allowed)return l.json({error:A.error},A.status||403);let f=l.req.param("id"),p=await l.req.json(),w=await W.findUserById(f);if(!w)return l.json({error:"User not found"},404);let k={};if(p.name!==void 0&&(k.name=p.name),p.email!==void 0&&(k.email=p.email),p.role!==void 0&&p.role!==w.role){if(y?.role!=="super_admin")return l.json({error:"Forbidden: Only super_admin can modify user roles"},403);k.role=p.role;}p.avatar!==void 0&&(k.avatar=typeof p.avatar=="object"&&p.avatar!==null?p.avatar.id||String(p.avatar):p.avatar),p.tenantId!==void 0&&(k.tenantId=p.tenantId),p.emailVerified!==void 0&&(k.emailVerified=p.emailVerified),p.locked!==void 0&&(k.locked=p.locked),p.failedLoginAttempts!==void 0&&(k.failedLoginAttempts=p.failedLoginAttempts),p.lastLogin!==void 0&&(k.lastLogin=p.lastLogin);let v=await W.updateUser(f,k);return v?(y&&(W?.createAuditLog({action:"user_update",userId:y.id,resource:"users",resourceId:f,success:!0}),p.role&&w.role!==p.role&&W?.createAuditLog({action:"role_change",userId:y.id,resource:"users",resourceId:f,success:!0,metadata:{oldRole:w.role,newRole:p.role}})),l.json({data:v,message:"User updated successfully"})):l.json({error:"User update failed"},500)}catch(y){return l.json({error:y.message},500)}}),_.delete("/api/users/:id",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c),A=await Ie(Lt,"delete",l.req.raw,y,b,void 0,U,F);if(!A.allowed)return l.json({error:A.error},A.status||403);let f=l.req.param("id");if(y&&y.id===f)return l.json({error:"You cannot delete your own account"},403);let p=await W.findUserById(f);return p?await W.deleteUser(f)?(y&&W?.createAuditLog({action:"user_delete",userId:y.id,resource:"users",resourceId:f,success:!0}),l.json({data:p,message:"User deleted successfully"})):l.json({error:"User deletion failed"},500):l.json({error:"User not found"},404)}catch(y){return l.json({error:y.message},500)}}),_.get("/api/auth/audit-logs",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c),A=e.getCollection("audit_logs");if(A){let I=await Ie(A,"read",l.req.raw,y,b,void 0,U,F);if(!I.allowed)return l.json({error:I.error},I.status||403)}else if(!y)return l.json({error:"Authentication required"},401);let f=parseInt(l.req.query("page")||"1"),p=Math.min(parseInt(l.req.query("limit")||"50"),100),w=l.req.query("action")||void 0,k=l.req.query("userId")||void 0,v=l.req.query("resource")||void 0,R=await W.findAuditLogs({action:w,userId:k,resource:v,limit:p,offset:(f-1)*p});return l.json({docs:R.logs,totalDocs:R.total,limit:p,totalPages:Math.ceil(R.total/p),page:f,pagingCounter:(f-1)*p+1,hasPrevPage:f>1,hasNextPage:f<Math.ceil(R.total/p),prevPage:f>1?f-1:null,nextPage:f<Math.ceil(R.total/p)?f+1:null})}catch(y){return console.error("[API] Error listing audit logs:",y),l.json({error:y.message},500)}});let $t=null,Dr=null,ft=async()=>{if(Dr)throw Dr;if(!$t)try{let l="sqlite";"dialect"in t&&t.dialect==="postgres"&&t instanceof chunkTDGSIF5H_cjs.c?l=t.dialect:"dialect"in t&&t.dialect==="mongodb"&&(l="mongodb");let y=l==="postgres"&&t instanceof chunkTDGSIF5H_cjs.c?t.client:t;$t=await dc.init(y,{dialect:l});}catch(l){throw console.error("[getMedia] Init error:",l),Dr=l,l}return $t};_.get("/api/media",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=await ft(),A=new URL(l.req.url).origin,f=parseInt(l.req.query("page")||"1"),p=parseInt(l.req.query("limit")||"30"),w=l.req.query("search")||"",k=l.req.query("type")||"",v=l.req.query("folder")||"",R=await b.find({page:f,limit:p,search:w,type:k,folder:v},A);return l.json(R)}catch(y){return console.error("[Media] find error:",y),l.json({error:y.message},500)}}),_.post("/api/media/upload",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=await ft(),A=l.req.header("content-type")||"",f=new URL(l.req.url).origin;if(A.includes("multipart/form-data")){let R=await l.req.formData(),I=R.get("file"),T=R.get("folder")||"";if(!I)return l.json({error:"No file uploaded"},400);let j=await b.upload(I,T,f);return l.json(j)}let p=await l.req.json(),{url:w}=p,k=p.folder||"";if(!w)return l.json({error:"No URL provided"},400);let v=await b.uploadFromUrl(w,k,f);return l.json(v)}catch(y){return console.error("[Media] upload error:",y),l.json({error:y.message},500)}}),_.get("/api/media/folders",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let A=await(await ft()).listFolders();return l.json(A)}catch(y){return console.error("[Media] folders error:",y),l.json({error:y.message},500)}}),_.post("/api/media/folders",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=await ft(),A=await l.req.json(),{name:f,parentPath:p}=A;return f?(await b.createFolder(f,p||""),l.json({message:"Folder created",path:p?`${p}/${f}`:f})):l.json({error:"Folder name is required"},400)}catch(y){return console.error("[Media] create folder error:",y),l.json({error:y.message},500)}}),_.delete("/api/media/folders",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=await ft(),A=l.req.query("path");return A?(await b.deleteFolder(A),l.json({message:"Folder deleted"})):l.json({error:"Path is required"},400)}catch(y){return console.error("[Media] delete folder error:",y),l.json({error:y.message},500)}}),_.delete("/api/media/:id",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=await ft(),A=l.req.param("id"),f=new URL(l.req.url).origin;return await b.delete(A,f),l.json({success:!0})}catch(y){return console.error("[Media] delete error:",y),l.json({error:y.message},500)}}),_.get("/api/media/file/:key{.+$}",async l=>{let y=l.req.param("key"),b=globalThis.STORAGE_BUCKET;if(b){let A=await b.get(y);if(!A)return l.notFound();let f=new Headers;return A.writeHttpMetadata(f),f.set("etag",A.httpEtag),new Response(A.body,{headers:f})}return l.notFound()}),_.get("/api/media/resize",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=l.req.query("url"),A=parseInt(l.req.query("w")||"0"),f=parseInt(l.req.query("h")||"0"),p=l.req.query("fit")||"cover",w=parseFloat(l.req.query("cx")||"0"),k=parseFloat(l.req.query("cy")||"0"),v=parseFloat(l.req.query("cw")||"0"),R=parseFloat(l.req.query("ch")||"0");if(!b)return l.json({error:"URL is required"},400);let T=(await ft()).storage;if(T.name!=="local")return l.redirect(b);let j=T.config?.uploadDir||ko.join(process.cwd(),"public","uploads"),$=T.config?.baseUrl||"/uploads";if(!b.startsWith($))return l.redirect(b);let z=b.replace($,""),Q=ko.join(j,z);if(!fs$1.existsSync(Q))return l.json({error:"File not found"},404);let ue=fs$1.readFileSync(Q),{default:X}=await import('sharp'),ye=X(ue);if(v>0&&R>0){let Je=await X(ue).metadata(),Wr=Je.width||0,St=Je.height||0;if(Wr>0&&St>0){let Pt=Math.max(0,Math.min(Math.round(w/100*Wr),Wr-1)),Is=Math.max(0,Math.min(Math.round(k/100*St),St-1)),X_=Math.max(1,Math.min(Math.round(v/100*Wr),Wr-Pt)),J_=Math.max(1,Math.min(Math.round(R/100*St),St-Is));ye=ye.extract({left:Pt,top:Is,width:X_,height:J_});}}(A>0||f>0)&&(ye=ye.resize({width:A>0?A:void 0,height:f>0?f:void 0,fit:p}));let Ze=await ye.toBuffer(),Xe=await X(ue).metadata();return l.header("Content-Type",`image/${Xe.format||"webp"}`),l.header("Cache-Control","public, max-age=31536000, immutable"),l.body(Ze)}catch(y){return console.error("[Media] resize error:",y),l.json({error:y.message},500)}}),_.get("/api/media/:id",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=await ft(),A=l.req.param("id"),f=new URL(l.req.url).origin,p=await b.findById(A,f);return p?l.json(p):l.json({error:"Media not found"},404)}catch(y){return console.error("[Media] get error:",y),l.json({error:y.message},500)}}),_.patch("/api/media/:id",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=await ft(),A=l.req.param("id"),f=await l.req.json(),p=new URL(l.req.url).origin,w=["folder","metadata","title","alt","caption","originalName"],k={};for(let v of w)f[v]!==void 0&&(k[v]=f[v]);if(Object.keys(k).length>0){let v=await b.update(A,k,p);return l.json({doc:v})}return l.json({error:"No valid fields to update"},400)}catch(y){return console.error("[Media] update error:",y),l.json({error:y.message},500)}}),_.get("/api/media/test",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=await ft();return l.json({status:b?"initialized":"failed",serviceType:b?.constructor?.name})}catch(y){return console.error("[test] Error:",y),l.json({error:y.message,type:y.constructor?.name,stack:y.stack},500)}}),_.get("/api/storage-status",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=typeof globalThis.STORAGE_BUCKET<"u"||typeof l.env?.STORAGE_BUCKET<"u",A=b,f=b?"cloudflare_r2":"local";if(t)try{let p=t.prepare('SELECT provider FROM "_globals_storage-settings" LIMIT 1').get();p&&p.provider&&(A=!0,f=p.provider==="aws"?"s3":p.provider);}catch{try{let p=await t.findOne({collection:"_globals_storage-settings",where:{},draft:!0});p&&p.provider&&(A=!0,f=p.provider==="aws"?"s3":p.provider);}catch{}}return l.json({provider:f,configured:A,usage:0,limit:"unlimited"})}catch(y){return console.error("[Storage] status error:",y),l.json({error:y.message},500)}}),_.get("/api/plugins",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=e.getPlugins(),A=e.storageProviders,f=await Promise.all(b.map(async p=>{let w=!0,k=p.name,v={};try{let T=await t.findOne({collection:"_globals_plugin-settings",where:{},draft:!0});T&&T.states&&(v=T.states);}catch{}v[k]!==void 0&&(w=v[k]),A.setPluginEnabled(k,w);let R=k.replace(/^@[^/]+\//,"");R=R.replace(/^(plugin|kyro)-/,"");let I={ai:"AI",seo:"SEO",s3:"S3",aws:"AWS",api:"API",ui:"UI",ftp:"FTP"};if(R=R.split("-").map(T=>{let j=T.toLowerCase();return I[j]?I[j]:T.charAt(0).toUpperCase()+T.slice(1)}).join(" "),R.toLowerCase().startsWith("storage ")){let T=R.split(" ");T.length===2&&(R=`${T[1]} Storage`);}return {id:k,name:p.displayName||R,version:p.version||"1.0.0",description:p.description||"",enabled:w,status:w?"active":"disabled"}}));return l.json(f)}catch(y){return console.error("[Plugins] list error:",y),l.json({error:y.message},500)}}),_.put("/api/plugins/:name/toggle",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=l.req.param("name"),A=e.storageProviders,p=!A.isPluginEnabled(b),w=[];if(!p)for(let v of A.getAll())v.pluginName===b&&w.push(v.type);if(!(l.req.query("force")==="1")&&!p&&w.length>0){let v="local";try{let R=t?.prepare?.('SELECT provider FROM "_globals_storage-settings" LIMIT 1')?.get();R?.provider&&(v=R.provider);}catch{try{let R=await t?.findOne?.({collection:"_globals_storage-settings",where:{},draft:!0});R?.provider&&(v=R.provider);}catch{}}if(w.includes(v))return l.json({error:`Cannot disable "${b}" \u2014 storage provider "${v}" is currently active. Switch to Local storage first.`,requiresAction:!0,activeProvider:v},409)}try{let v={},R="global",I=await t.findOne({collection:"_globals_plugin-settings",where:{},draft:!0});I&&(v=I.states||{},R=I.id),v[b]=p,I?await t.update({collection:"_globals_plugin-settings",id:R,data:{states:v}}):await t.create({collection:"_globals_plugin-settings",data:{states:v,id:"global"}});}catch(v){console.warn(`[Plugins] Could not persist state for "${b}":`,v);}return A.setPluginEnabled(b,p),l.json({name:b,enabled:p})}catch(y){return console.error("[Plugins] toggle error:",y),l.json({error:y.message},500)}}),_.get("/api/health",l=>l.json({status:"ok",version:"0.12.56",collections:e.getCollectionSlugs(),timestamp:new Date().toISOString()})),_.get("/api/metrics",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let A=y.role==="admin"||y.role==="super_admin",p=e.getCollectionSlugs().filter($=>!["users","audit_logs","media","_globals_access-settings","_globals_brand-settings"].includes($)&&!$.startsWith("_globals_")).filter($=>A||chunk7WMMKGEO_cjs.a(y,`${$}:read`)),w=0,k={};await Promise.all(p.map(async $=>{try{let Q=(await t.find({collection:$,where:{},limit:1,page:1,tenantId:b})).totalDocs??0;w+=Q,k[$]=Q;}catch{}}));let v=0;try{v=(await t.find({collection:"media",where:{},limit:1,page:1,tenantId:b})).totalDocs??0;}catch{}let R=0;try{R=(await t.find({collection:"users",where:{},limit:1,page:1,tenantId:b})).totalDocs??0;}catch{}let I=0;try{if(g){let $=await g.getWebhooks();I=Array.isArray($)?$.length:0;}}catch{}let T=0;try{T=(await t.find({collection:chunkDUO523BH_cjs.d,where:{},limit:1,page:1,tenantId:b})).totalDocs??0;}catch{}let j=w+v+R;return l.json({totalDocuments:w,totalMedia:A||chunk7WMMKGEO_cjs.a(y,"media:read")?v:void 0,totalUsers:A||chunk7WMMKGEO_cjs.a(y,"users:read")?R:void 0,totalWebhooks:A?I:void 0,totalApiKeys:A?T:void 0,totalStoredRecords:j,collectionCounts:k,collections:p.length,timestamp:new Date().toISOString()})}catch(y){return console.error("[API] Metrics error:",y),l.json({error:y.message},500)}}),_.get("/api/analytics",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);if(!(y.role==="admin"||y.role==="super_admin"))return l.json({error:"Unauthorized"},403);let p=(await t.find({collection:"orders",where:{},limit:1e3,page:1,tenantId:b})).docs||[],w=await t.findOne({collection:"_globals_store-settings",where:{},tenantId:b}),k=w?.currency?.code||w?.currency||"USD",v={},R={},I={};p.forEach($=>{let z=$.createdAt||$.updatedAt,Q=z?new Date(z).toISOString().split("T")[0]:new Date().toISOString().split("T")[0];v[Q]||(v[Q]=0),R[Q]||(R[Q]=0);let ue=typeof $.total=="number"?$.total:parseFloat(String($.total||0));v[Q]+=isNaN(ue)?0:ue,R[Q]+=1;let X=$.orderStatus||$.status||"pending";I[X]=(I[X]||0)+1;});let T=Object.keys(v).sort().map($=>({date:$,revenue:Math.round(v[$]*100)/100,orders:R[$]})),j=Math.round(T.reduce(($,z)=>$+z.revenue,0)*100)/100;return l.json({chartData:T,totalRevenue:j,totalOrders:p.length,ordersByStatus:I,currencyCode:typeof k=="string"?k:"USD"})}catch(y){return l.json({error:y.message},500)}}),_.get("/api/kyro/schema",async l=>{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=f=>f.map(p=>{let w={name:p.name,type:p.type,label:p.label,required:p.required??false,unique:p.unique??false,indexed:p.indexed??false,defaultValue:p.defaultValue,admin:p.admin?{...p.admin}:void 0};return p.minLength!==void 0&&(w.minLength=p.minLength),p.maxLength!==void 0&&(w.maxLength=p.maxLength),p.pattern!==void 0&&(w.pattern=p.pattern),p.variant!==void 0&&(w.variant=p.variant),p.hasMany!==void 0&&(w.hasMany=p.hasMany),p.min!==void 0&&(w.min=p.min),p.max!==void 0&&(w.max=p.max),p.step!==void 0&&(w.step=p.step),p.integer!==void 0&&(w.integer=p.integer),p.options&&(w.options=p.options),p.relationTo&&(w.relationTo=p.relationTo),p.maxDepth!==void 0&&(w.maxDepth=p.maxDepth),p.minRows!==void 0&&(w.minRows=p.minRows),p.maxRows!==void 0&&(w.maxRows=p.maxRows),p.localized!==void 0&&(w.localized=p.localized),p.language&&(w.language=p.language),p.format&&(w.format=p.format),p.allowedTypes&&(w.allowedTypes=p.allowedTypes),p.maxSize&&(w.maxSize=p.maxSize),(p.type==="group"||p.type==="row"||p.type==="collapsible"&&p.fields)&&(w.fields=b(p.fields)),p.type==="array"&&p.fields&&(w.fields=b(p.fields)),p.type==="blocks"&&p.blocks&&(w.blocks=p.blocks.map(k=>({slug:k.slug,label:k.label,fields:b(k.fields)}))),p.type==="tabs"&&p.tabs&&(w.tabs=p.tabs.map(k=>({label:k.label,name:k.name,fields:b(k.fields)}))),w}),A={collections:{},globals:{}};for(let f of e.getCollections()){let p=f.slug;try{A.collections[p]={slug:p,label:f.label||p,fields:b(f.fields),jsonSchema:zn(e.getZodSchema(p),{target:"openApi3"}),createSchema:zn(e.getCreateZodSchema(p),{target:"openApi3"}),updateSchema:zn(e.getUpdateZodSchema(p),{target:"openApi3"}),procedures:{find:{collection:p,where:"Record<string,any>",sort:"string",limit:"number",page:"number",depth:"number",select:"string[]",draft:"boolean"},findByID:{collection:p,id:"string",depth:"number",select:"string[]",draft:"boolean"},create:{collection:p,data:"Record<string,any>",depth:"number",select:"string[]"},update:{collection:p,id:"string",data:"Record<string,any>",depth:"number",select:"string[]",baseUpdatedAt:"string"},delete:{collection:p,id:"string"},count:{collection:p,where:"Record<string,any>"}}};}catch{}}for(let f of e.getGlobals()){let p=f.slug,w=f.fields;if(p==="storage-settings"){let k=e.storageProviders,v=k.getAll(),R=new Set(k.getAllAvailable(T=>k.isPluginEnabled(T)).map(T=>T.type));R.add("local");let I=new Set(v.map(T=>T.type));w=w.filter(T=>T.type==="group"&&T.name&&I.has(T.name)?R.has(T.name):true).map(T=>T.name==="provider"&&T.type==="select"?{...T,options:T.options.filter(j=>R.has(j.value))}:T);}try{A.globals[p]={slug:p,label:f.label||p,fields:b(w),jsonSchema:zn(e.getZodSchema(p),{target:"openApi3"}),procedures:{get:{},update:{data:"Record<string,any>"}}};}catch{}}return l.json(A)}),_.get("/api/collections",async l=>{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=e.getCollections().map(A=>({slug:A.slug,label:A.label||A.slug,fields:A.fields.filter(f=>f.name).map(f=>({name:f.name,type:f.type,required:f.required,label:f.label}))}));return l.json(b)});function Kn(l,y,b){if(b in y)return y[b];for(let A of l)if(A.name){if(A.type==="tabs"&&A.tabs){let f=y[A.name];if(f&&typeof f=="object"&&b in f)return f[b]}if((A.type==="group"||A.type==="collapsible")&&A.fields){let f=y[A.name];if(f&&typeof f=="object"){if(b in f)return f[b];let p=Kn(A.fields,f,b);if(p!==void 0)return p}}}}_.get("/api/search",async l=>{try{let y=l.req.query("q")||"",b=l.req.query("collections")||"",A=Math.min(parseInt(l.req.query("limit")||"10"),50);if(!y||y.length<2)return l.json({results:[],message:"Query too short"});let{user:f,tenantId:p}=await V(l.req.raw,q,i,c),w=b?b.split(",").filter(Boolean):e.getCollectionSlugs(),k=[],v=new RegExp(y.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"i");for(let R of e.getCollections()){if(!w.includes(R.slug)||!(await Ie(R,"read",l.req.raw,f,p,void 0,U,F)).allowed)continue;let T=R.fields.filter(j=>j.name&&j.name!=="id"&&(j.type==="text"||j.type==="email"||j.type==="textarea"||j.type==="richtext"||j.indexed)&&!j.admin?.hidden).map(j=>j.name);if(T.length!==0)try{let j=T.map(z=>{let Q={};return Q[z]={like:`%${y}%`},Q}),$=await t.find({collection:R.slug,where:{OR:j},limit:A,tenantId:p});await chunkAK754S3T_cjs.a($.docs,R.fields,t,e,1,0);for(let z of $.docs){let Q=R.admin?.useAsTitle||T.find(X=>X==="title"||X==="name"||X==="heading"||X==="slug"),ue=Q?Kn(R.fields,z,Q)??z.id:z.id;k.push({collection:R.slug,label:R.label||R.slug,id:z.id,title:String(ue||"Untitled"),doc:z});}}catch(j){console.error(`Search error for ${R.slug}:`,j);}}return k.sort((R,I)=>R.label.localeCompare(I.label)),l.json({results:k})}catch(y){return l.json({error:y.message,results:[]},500)}}),_.get("/api/keys",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:read"))return l.json({error:"Forbidden"},403);let A=parseInt(l.req.query("page")||"1"),f=Math.min(parseInt(l.req.query("limit")||"50"),100),p=await t.find({collection:chunkDUO523BH_cjs.d,where:{},page:A,limit:f,tenantId:b}),w=(p.docs||[]).map(k=>({id:k.id,name:k.name,keyPrefix:k.keyPrefix,permissions:k.permissions||[],lastUsed:k.lastUsedAt,createdAt:k.createdAt}));return l.json({docs:w,totalDocs:p.totalDocs||w.length,totalPages:p.totalPages||1})}catch(y){return console.error("[ApiKeys] GET error:",y),l.json({error:y.message},500)}}),_.post("/api/keys",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:admin"))return l.json({error:"Forbidden"},403);let b=await l.req.json();if(!b.name||typeof b.name!="string")return l.json({error:"name is required"},400);let A=chunkDUO523BH_cjs.i(),f=await t.create({collection:chunkDUO523BH_cjs.d,data:{userId:y.id,name:b.name,key:A,keyPrefix:chunkDUO523BH_cjs.j(A),permissions:Array.isArray(b.permissions)?b.permissions:["*"],expiresAt:b.expiresAt||null,createdAt:new Date().toISOString()}});return await W?.createAuditLog({action:"api_key_create",userId:y.id,resource:"api_key",resourceId:f.id,success:!0,metadata:{keyName:b.name}}),l.json({...f,key:A,permissions:Array.isArray(b.permissions)?b.permissions:["*"]},201)}catch(y){return console.error("[ApiKeys] POST error:",y),l.json({error:y.message},500)}}),_.delete("/api/keys/:id",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:admin"))return l.json({error:"Forbidden"},403);let b=l.req.param("id"),A=await t.findByID({collection:chunkDUO523BH_cjs.d,id:b});return A?(await t.delete({collection:chunkDUO523BH_cjs.d,id:b}),await W?.createAuditLog({action:"api_key_delete",userId:y.id,resource:"api_key",resourceId:b,success:!0,metadata:{keyName:A.name}}),l.json({message:"API key deleted"})):l.json({error:"API key not found"},404)}catch(y){return console.error("[ApiKeys] DELETE error:",y),l.json({error:y.message},500)}}),_.patch("/api/keys/:id",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:admin"))return l.json({error:"Forbidden"},403);let b=l.req.param("id"),A=await l.req.json(),f=await t.findByID({collection:chunkDUO523BH_cjs.d,id:b});if(!f)return l.json({error:"API key not found"},404);let p={};if(typeof A.name=="string"&&A.name.trim()&&(p.name=A.name.trim()),Array.isArray(A.permissions)&&(p.permissions=A.permissions),A.expiresAt!==void 0&&(p.expiresAt=A.expiresAt||null),Object.keys(p).length===0)return l.json({error:"Nothing to update"},400);let w=await t.update({collection:chunkDUO523BH_cjs.d,id:b,data:p});return l.json({...w,keyPrefix:f.keyPrefix})}catch(y){return console.error("[ApiKeys] PATCH error:",y),l.json({error:y.message},500)}}),_.post("/api/keys/:id/rotate",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:admin"))return l.json({error:"Forbidden"},403);let b=l.req.param("id"),A=await t.findByID({collection:chunkDUO523BH_cjs.d,id:b});if(!A)return l.json({error:"API key not found"},404);let f=chunkDUO523BH_cjs.i(),p=await t.update({collection:chunkDUO523BH_cjs.d,id:b,data:{key:f,keyPrefix:chunkDUO523BH_cjs.j(f),lastUsedAt:null}});return await W?.createAuditLog({action:"api_key_rotate",userId:y.id,resource:"api_key",resourceId:b,success:!0,metadata:{keyName:A.name}}),l.json({...p,key:f,permissions:A.permissions,expiresAt:A.expiresAt})}catch(y){return console.error("[ApiKeys] rotate error:",y),l.json({error:y.message},500)}}),_.get("/api/webhooks/actions",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:read"))return l.json({error:"Forbidden"},403);let b={generic:{label:"Custom URL",description:"POST to any endpoint with Kyro payload",configFields:[],envVars:[]},"github-push":{label:"GitHub Push",description:"Push an empty commit to simulate a push event",configFields:[{name:"githubOwner",label:"Owner",required:!0,placeholder:"e.g., kyro-dev"},{name:"githubRepo",label:"Repository",required:!0,placeholder:"e.g., my-website"},{name:"githubBranch",label:"Branch",required:!1,placeholder:"main"}],envVars:["GITHUB_TOKEN"]}};return l.json({actions:b})}catch(y){return console.error("[Webhooks] actions error:",y),l.json({error:y.message},500)}}),_.get("/api/webhooks",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:read"))return l.json({error:"Forbidden"},403);if(!g)return l.json({error:"Webhook service not available"},503);let b=await g.getWebhooks();return l.json({docs:b})}catch(y){return console.error("[Webhooks] GET error:",y),l.json({error:y.message},500)}}),_.post("/api/webhooks",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:admin"))return l.json({error:"Forbidden"},403);if(!g)return l.json({error:"Webhook service not available"},503);let b=await l.req.json(),A=await g.createWebhook(b);return await W?.createAuditLog({action:"webhook_create",userId:y.id,resource:"webhook",resourceId:A.id,success:!0,metadata:{name:A.name,url:A.url}}),l.json(A,201)}catch(y){return console.error("[Webhooks] POST error:",y),l.json({error:y.message},500)}}),_.get("/api/webhooks/:id",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:read"))return l.json({error:"Forbidden"},403);if(!g)return l.json({error:"Webhook service not available"},503);let b=l.req.param("id"),A=await g.getWebhookById(b);return A?l.json(A):l.json({error:"Webhook not found"},404)}catch(y){return console.error("[Webhooks] GET :id error:",y),l.json({error:y.message},500)}}),_.patch("/api/webhooks/:id",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:admin"))return l.json({error:"Forbidden"},403);if(!g)return l.json({error:"Webhook service not available"},503);let b=l.req.param("id"),A=await l.req.json(),f=await g.updateWebhook(b,A);return f?(await W?.createAuditLog({action:"webhook_update",userId:y.id,resource:"webhook",resourceId:b,success:!0,metadata:{name:f.name}}),l.json(f)):l.json({error:"Webhook not found"},404)}catch(y){return console.error("[Webhooks] PATCH error:",y),l.json({error:y.message},500)}}),_.delete("/api/webhooks/:id",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:admin"))return l.json({error:"Forbidden"},403);if(!g)return l.json({error:"Webhook service not available"},503);let b=l.req.param("id"),A=await g.getWebhookById(b);return A?(await g.deleteWebhook(b),await W?.createAuditLog({action:"webhook_delete",userId:y.id,resource:"webhook",resourceId:b,success:!0,metadata:{name:A.name}}),l.json({message:"Webhook deleted"})):l.json({error:"Webhook not found"},404)}catch(y){return console.error("[Webhooks] DELETE error:",y),l.json({error:y.message},500)}}),_.post("/api/webhooks/:id/test",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:admin"))return l.json({error:"Forbidden"},403);if(!g)return l.json({error:"Webhook service not available"},503);let b=l.req.param("id"),A=await g.testWebhook(b);return A?l.json(A):l.json({error:"Webhook not found"},404)}catch(y){return console.error("[Webhooks] test error:",y),l.json({error:y.message},500)}}),_.get("/api/webhooks/:id/history",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:read"))return l.json({error:"Forbidden"},403);if(!g)return l.json({error:"Webhook service not available"},503);let b=l.req.param("id"),A=Math.min(parseInt(l.req.query("limit")||"50"),100),f=await g.getDeliveryHistory(b,A);return l.json({docs:f})}catch(y){return console.error("[Webhooks] history error:",y),l.json({error:y.message},500)}});function Vn(l){let y={},b=["name","type","required","hasMany","relationTo","options","min","max","minLength","maxLength","defaultValue","label","localized","admin","unique","index","hidden","readOnly","deprecated"];for(let A of b)A in l&&(y[A]=l[A]);return l.fields&&(y.fields=l.fields.map(Vn)),l.tabs&&(y.tabs=l.tabs.map(A=>({label:A.label,name:A.name,fields:A.fields.map(Vn)}))),y}_.get("/api/__schema",async l=>{try{let{user:y,apiKeyContext:b}=await V(l.req.raw,q,i,c);if(!y&&!b)return l.json({error:"Unauthorized"},401);let f=e.getCollections().filter(p=>p.slug!=="users"&&p.slug!=="audit_logs").map(p=>({slug:p.slug,label:p.label,labelPlural:p.labelPlural,singularLabel:p.singularLabel,timestamps:p.timestamps,auth:!!p.auth,tenantScoped:!!p.tenantScoped,upload:p.upload?{staticDir:p.upload.staticDir,imageSizes:p.upload.imageSizes,mimeTypes:p.upload.mimeTypes}:void 0,fields:p.fields.map(Vn)}));return l.json(f)}catch(y){return console.error("[Schema] error:",y),l.json({error:y.message},500)}});let xd=e.getCollections();for(let l of xd){let A=function(f,p){let w=[],k=new Set([...Object.keys(f),...Object.keys(p)]);for(let v of k)v==="id"||v==="createdAt"||v==="updatedAt"||JSON.stringify(f[v])!==JSON.stringify(p[v])&&w.push({field:v,oldValue:v in f?f[v]:void 0,newValue:v in p?p[v]:void 0});return w};let y=l.slug;if(y==="users"||y==="audit_logs")continue;let b=`/api/${y}`;_.post(`${b}/dynamic-options/:fieldName`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"read",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);let R=f.req.param("fieldName"),I=await f.req.json(),{data:T,siblingData:j}=I,$=hs(l.fields,R);if(!$)return f.json({error:"Field not found"},404);if($.type!=="select")return f.json({error:"Field is not a select field"},400);let z=[];return typeof $.options=="function"?z=await $.options({data:T||{},siblingData:j||{}}):Array.isArray($.options)&&(z=$.options),f.json({options:z})}catch(p){return f.json({error:p.message},500)}}),_.get(b,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"read",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);w&&t.setTenantContext({tenantId:w,userId:p?.id??"",role:p?.role,isSuperAdmin:p?.role==="super_admin"});let R=new URL(f.req.url),I=parseInt(R.searchParams.get("page")||"1"),T=Math.min(parseInt(R.searchParams.get("limit")||"10"),100),j=R.searchParams.get("sort")||void 0,$=parseInt(R.searchParams.get("depth")||"0"),z=R.searchParams.get("select")?.split(",")||void 0,Q=R.searchParams.get("draft"),ue=Q==="true"?!0:Q==="false"?!1:!!p,X={},ye=R.searchParams.get("where");if(ye)try{X=JSON.parse(ye);}catch{return f.json({error:"Invalid JSON in where parameter"},400)}let Ze=await t.find({collection:y,where:X,sort:j,limit:T,page:I,depth:$,tenantId:w,select:z,draft:ue});return await chunkAK754S3T_cjs.a(Ze.docs,l.fields,t,e,1,$),f.json(chunkZOVH6QT5_cjs.a(Ze))}catch(p){return console.error("[API] list error:",p),f.json({error:p.message},500)}}),_.get(`${b}/:id/versions`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"read",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);let R=f.req.param("id");if(!R)return f.json({error:"Missing document ID"},400);let I=new URL(f.req.url),T=I.searchParams.get("compareA"),j=I.searchParams.get("compareB");if(_c(W,k,`${b}/${R}/versions`,"GET",f.req.raw),T&&j){let[ue,X]=await Promise.all([t.findVersionByID({collection:y,versionId:T,tenantId:w}),t.findVersionByID({collection:y,versionId:j,tenantId:w})]);if(!ue||!X)return f.json({error:"Version not found"},404);let ye=A(ue.data,X.data);return f.json({diffs:ye})}let $=parseInt(I.searchParams.get("page")||"1"),z=Math.min(parseInt(I.searchParams.get("limit")||"10"),100),Q=await t.findVersions({collection:y,documentId:R,page:$,limit:z,tenantId:w});return f.json(Q)}catch(p){return console.error("[API] versions error:",p),f.json({error:p.message},500)}}),_.put(`${b}/:id/draft`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"update",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);let R=f.req.param("id"),I=await f.req.json(),T=wc(I),j=await t.findByID({collection:y,id:R,tenantId:w,draft:!0});if(!j)return f.json({error:"Document not found"},404);let $;I.delta?$={...j,...I.delta}:$=I.data??gd(I);let z=await t.updateLatestVersion({collection:y,documentId:R,data:$,status:"draft",tenantId:w});return p&&W?.createAuditLog({action:"document_update",userId:p.id,resource:y,resourceId:R,success:!0,metadata:{type:"draft_save"}}),f.json({data:z,message:"Draft saved successfully"})}catch(p){return f.json({error:p.message},500)}}),_.delete(`${b}/:id/draft`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"update",f.req.raw,p,w,k,U,F);return v.allowed?(p&&W?.createAuditLog({action:"document_update",userId:p.id,resource:y,resourceId:f.req.param("id"),success:!0,metadata:{type:"draft_discard"}}),f.json({message:"Draft discarded successfully"})):f.json({error:v.error},v.status||403)}catch(p){return f.json({error:p.message},500)}}),_.get(`${b}/:id`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=new URL(f.req.url),R=v.searchParams.get("draft"),I=v.searchParams.get("kyroToken"),T=!1;if(R==="true"&&I&&s)try{let X=await _o(I,s,"HS256");X&&X.type==="preview"&&X.collection===l.slug&&(T=!0);}catch(X){console.warn("Invalid preview token",X);}if(!T){let X=await Ie(l,"read",f.req.raw,p,w,k,U,F);if(!X.allowed)return f.json({error:X.error},X.status||403)}let j=f.req.param("id"),$=parseInt(v.searchParams.get("depth")||"0"),z=v.searchParams.get("select")?.split(",")||void 0,Q=R==="true"?!0:R==="false"?!1:!!p,ue=await t.findByID({collection:y,id:j,depth:$,tenantId:w,select:z,draft:Q});return !ue&&l.fields.some(X=>X.name==="slug")&&(ue=await t.findOne({collection:y,where:{slug:j},tenantId:w,draft:Q})),ue?(await chunkAK754S3T_cjs.a([ue],l.fields,t,e,1,$),f.json({data:chunkZOVH6QT5_cjs.a(ue)})):f.json({error:"Document not found"},404)}catch(p){return f.json({error:p.message},500)}}),_.post(`${b}/preview-url`,async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=await Ie(l,"read",f.req.raw,p,w);if(!k.allowed)return f.json({error:k.error||"Forbidden"},k.status||403);let v=await f.req.json().catch(()=>({})),R="";s&&(R=await wo({type:"preview",collection:l.slug,id:v.id,exp:Math.floor(Date.now()/1e3)+3600},s,"HS256"));let I="";if(l.admin?.preview){I=await l.admin.preview(v,{req:f.req.raw,token:R});try{let T=new URL(I,"http://localhost");T.searchParams.has("preview")||T.searchParams.set("preview","true"),!T.searchParams.has("kyroToken")&&R&&T.searchParams.set("kyroToken",R),I=I.startsWith("http")?T.toString():`${T.pathname}${T.search}`;}catch{}}else {let T="";try{let $=await t.findOne({collection:"_globals_site-settings",where:{}});$?.siteUrl&&(T=$.siteUrl);}catch{}if(!T)return f.json({error:"No site URL configured in settings, and no custom preview function defined for this collection."},400);T=T.replace(/\/$/,"");let j=v.slug||v.id||"";I=`${T}/${l.slug}/${j}?preview=true&kyroToken=${R}`;}return f.json({url:I})}catch(p){return f.json({error:p.message},500)}}),_.post(b,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"create",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);w&&t.setTenantContext({tenantId:w,userId:p?.id??"",role:p?.role,isSuperAdmin:p?.role==="super_admin"}),_c(W,k,b,"POST",f.req.raw);let I=await f.req.json();Jr(I,l.fields),Qr(l.fields,I);let T=f.req.raw;if(l.hooks?.beforeValidate)for(let X of l.hooks.beforeValidate){let ye=await X({collection:y,data:I,req:T,user:p,tenantId:w,operation:"create"});ye&&typeof ye=="object"&&!Array.isArray(ye)&&Object.assign(I,ye);}let j=e.getCreateZodSchema(y);try{I=j.parse(I);}catch(X){return f.json({error:`Validation failed: ${ra(X.errors)}`,details:X.errors},400)}l.tenantScoped&&w&&(I.tenantId=w);let $=l.versions?.drafts===!0,z=l.fields.find(X=>X.name==="status"),Q=z?.type==="select"&&Array.isArray(z.options)&&z.options.some(X=>X.value==="published");if($?I.status="draft":Q&&!I.status&&(I.status="published"),l.hooks?.beforeChange)for(let X of l.hooks.beforeChange){let ye=await X({collection:y,data:I,req:T,user:p,tenantId:w,operation:"create"});ye&&typeof ye=="object"&&!Array.isArray(ye)&&Object.assign(I,ye);}let ue=await t.create({collection:y,data:I,tenantId:w});if($&&await t.createVersion({collection:y,documentId:ue.id,data:I,status:"draft",createdBy:p?.id,changeDescription:"Created",tenantId:w}),l.hooks?.afterChange)for(let X of l.hooks.afterChange)await X({collection:y,doc:ue,data:I,req:T,user:p,tenantId:w,operation:"create"});return g&&g.trigger(Ja(y,"create"),{collection:y,operation:"create",data:ue,user:p?{id:p.id,email:p.email,role:p.role}:void 0,tenantId:w}).catch(X=>console.error("[Webhook] Failed to trigger:",X)),p&&W?.createAuditLog({action:"document_create",userId:p.id,resource:y,resourceId:ue.id,success:!0}),f.json({data:ue,message:"Created successfully"},201)}catch(p){return p.name==="ZodError"?f.json({error:`Validation failed: ${ra(p.errors)}`,details:p.errors},400):f.json({error:p.message},500)}}),_.patch(`${b}/:id`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"update",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);let R=f.req.param("id"),I=await f.req.json(),T=wc(I),j=await t.findByID({collection:y,id:R,tenantId:w,draft:!0});if(!j)return f.json({error:"Document not found"},404);if(T&&j.updatedAt&&T!==j.updatedAt)return f.json(yd(T,j),409);let $=Object.fromEntries(Object.entries(gd(I)).filter(([Xe,Je])=>Je!=="null"&&Je!==void 0));Jr($,l.fields),Qr(l.fields,$);let z=f.req.raw;if(l.hooks?.beforeValidate)for(let Xe of l.hooks.beforeValidate){let Je=await Xe({collection:y,data:$,originalDoc:j,req:z,user:p,tenantId:w,operation:"update"});Je&&typeof Je=="object"&&!Array.isArray(Je)&&Object.assign($,Je);}if($=e.getUpdateZodSchema(y).parse($),l.hooks?.beforeChange)for(let Xe of l.hooks.beforeChange){let Je=await Xe({collection:y,data:$,originalDoc:j,req:z,user:p,tenantId:w,operation:"update"});Je&&typeof Je=="object"&&!Array.isArray(Je)&&Object.assign($,Je);}let ue=f.req.header("X-Draft")==="true",X=l.versions?.drafts===!0,ye=f.req.query("autosave")==="true",Ze;if(X&&ue)await t.createVersion({collection:y,documentId:R,data:$,status:"draft",autosave:ye,createdBy:p?.id,changeDescription:ye?"Autosave":"Draft saved",tenantId:w});else if(X){let Xe=I.status==="draft"?"draft":"published";await t.update({collection:y,id:R,data:{...$,status:Xe},tenantId:w}),await t.createVersion({collection:y,documentId:R,data:{...$,status:Xe},status:Xe,createdBy:p?.id,changeDescription:Xe==="published"?"Published":"Unpublished",tenantId:w});}else await t.update({collection:y,id:R,data:$,tenantId:w});if(Ze=await t.findByID({collection:y,id:R,tenantId:w,draft:!0}),l.hooks?.afterChange)for(let Xe of l.hooks.afterChange)await Xe({collection:y,doc:Ze,data:$,originalDoc:j,req:z,user:p,tenantId:w,operation:"update"});return g&&!ye&&g.trigger(Ja(y,"update"),{collection:y,operation:"update",data:Ze,previousData:j,user:p?{id:p.id,email:p.email,role:p.role}:void 0,tenantId:w}).catch(Xe=>console.error("[Webhook] Failed to trigger:",Xe)),_c(W,k,`${b}/${R}`,"PATCH",f.req.raw),p&&W?.createAuditLog({action:"document_update",userId:p.id,resource:y,resourceId:R,success:!0}),f.json({data:Ze,message:X?"Draft saved":"Updated successfully"})}catch(p){return p.name==="ZodError"?(console.error(`[PATCH ${b}/:id] Validation failed:`,p.errors),f.json({error:`Validation failed: ${ra(p.errors)}`,details:p.errors},400)):(console.error(`[PATCH ${b}/:id] ERROR:`,p.message,"CAUSE:",p.cause?.message||p.cause,"QUERY:",p.query),f.json({error:p.message},500))}}),_.delete(`${b}/:id`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"delete",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);w&&t.setTenantContext({tenantId:w,userId:p?.id??"",role:p?.role,isSuperAdmin:p?.role==="super_admin"});let R=f.req.param("id"),I=f.req.raw,T=await t.findByID({collection:y,id:R,tenantId:w,draft:!0});if(!T)return f.json({error:"Document not found"},404);if(l.hooks?.beforeDelete)for(let $ of l.hooks.beforeDelete)await $({collection:y,doc:T,req:I,user:p,tenantId:w,operation:"delete"});let j=await t.delete({collection:y,id:R,tenantId:w});if(l.hooks?.afterDelete)for(let $ of l.hooks.afterDelete)await $({collection:y,doc:j,originalDoc:T,req:I,user:p,tenantId:w,operation:"delete"});return g&&g.trigger(Ja(y,"delete"),{collection:y,operation:"delete",data:j,previousData:T,user:p?{id:p.id,email:p.email,role:p.role}:void 0,tenantId:w}).catch($=>console.error("[Webhook] Failed to trigger:",$)),_c(W,k,`${b}/${R}`,"DELETE",f.req.raw),p&&W?.createAuditLog({action:"document_delete",userId:p.id,resource:y,resourceId:R,success:!0}),f.json({data:j,message:"Deleted successfully"})}catch(p){return console.error(`[DELETE] Error deleting ${y}:`,p),f.json({error:p.message||String(p)},500)}}),_.post(`${b}/:id/duplicate`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"create",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);let R=f.req.param("id"),I=await t.findByID({collection:y,id:R,tenantId:w,draft:!0});if(!I)return f.json({error:"Document not found"},404);let{id:T,createdAt:j,updatedAt:$,...z}=I;Us(l.fields,z);let Q=Date.now().toString(36);"slug"in z&&typeof z.slug=="string"&&(z.slug=`${z.slug||"document"}-copy-${Q}`),"title"in z&&typeof z.title=="string"?z.title=`${z.title||"Copy"} (Copy)`:"name"in z&&typeof z.name=="string"&&(z.name=`${z.name||"Copy"} (Copy)`);let ue=await t.create({collection:y,data:{...z,status:"draft"},tenantId:w});return f.json({data:ue,message:"Document duplicated successfully"})}catch(p){return console.error("[Duplicate] Error:",p),f.json({error:p.message||String(p)},500)}}),_.post(`${b}/:id/versions/:versionId/restore`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"update",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);let R=f.req.param("id"),I=f.req.param("versionId"),T=await t.findVersionByID({collection:y,versionId:I,tenantId:w});if(!T)return f.json({error:"Version not found"},404);let j=await t.update({collection:y,id:R,data:{...T.data,status:"draft"},tenantId:w});return f.json({data:j,message:"Version restored successfully"})}catch(p){return f.json({error:p.message},500)}}),_.post(`${b}/:id/versions`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"update",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);let R=await f.req.json(),{versionId:I,action:T}=R;if(T==="restore"&&I){let j=await t.findVersionByID({collection:y,versionId:I,tenantId:w});if(!j)return f.json({error:"Version not found"},404);let $=await t.update({collection:y,id:f.req.param("id"),data:{...j.data,status:"draft"},tenantId:w});return f.json({data:$,message:"Version restored successfully"})}return f.json({error:"Invalid action"},400)}catch(p){return f.json({error:p.message},500)}}),_.post(`${b}/:id/publish`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"update",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);w&&t.setTenantContext({tenantId:w,userId:p?.id??"",role:p?.role,isSuperAdmin:p?.role==="super_admin"});let R=f.req.param("id"),I=await f.req.json().catch(()=>({})),T=wc(I),j=await t.findByID({collection:y,id:R,tenantId:w,draft:!0});if(!j)return f.json({error:"Document not found"},404);if(T&&j.updatedAt&&T!==j.updatedAt)return f.json(yd(T,j),409);let $={status:"published"},z=j;if(l.versions?.drafts){let ue=await t.findVersions({collection:y,documentId:R,limit:1,sort:"-createdAt",tenantId:w});if(ue.docs.length>0){let X=ue.docs[0];z={...j,...X.data},$={...X.data,...$};}}let Q=await t.update({collection:y,id:R,data:$,tenantId:w});return l.versions?.drafts&&await t.createVersion({collection:y,documentId:R,data:{...z,status:"published"},status:"published",createdBy:p?.id,changeDescription:"Published",tenantId:w}),g&&g.trigger(Ja(y,"update"),{collection:y,operation:"update",data:Q,user:p?{id:p.id,email:p.email,role:p.role}:void 0,tenantId:w}).catch(ue=>console.error("[Webhook] Failed to trigger:",ue)),f.json({data:Q,message:"Published successfully"})}catch(p){return f.json({error:p.message},500)}}),_.post(`${b}/:id/unpublish`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"update",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);let R=f.req.param("id");if(!await t.findByID({collection:y,id:R,tenantId:w,draft:!0}))return f.json({error:"Document not found"},404);let T=await t.update({collection:y,id:R,data:{status:"draft"},tenantId:w});return g&&g.trigger(Ja(y,"update"),{collection:y,operation:"update",data:T,user:p?{id:p.id,email:p.email,role:p.role}:void 0,tenantId:w}).catch(j=>console.error("[Webhook] Failed to trigger:",j)),f.json({data:T,message:"Unpublished successfully"})}catch(p){return f.json({error:p.message},500)}});}for(let l of e.getGlobals()){let y=l.slug,b=`/api/globals/${y}`;_.post(`${b}/dynamic-options/:fieldName`,async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=await Yt(l,"read",f.req.raw,p,w,U);if(!k.allowed)return f.json({error:k.error},k.status||403);let v=f.req.param("fieldName"),R=await f.req.json(),{data:I,siblingData:T}=R,j=hs(l.fields,v);if(!j)return f.json({error:"Field not found"},404);if(j.type!=="select")return f.json({error:"Field is not a select field"},400);let $=[];return typeof j.options=="function"?$=await j.options({data:I||{},siblingData:T||{}}):Array.isArray(j.options)&&($=j.options),f.json({options:$})}catch(p){return f.json({error:p.message},500)}}),_.get(b,async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=new URL(f.req.url),v=k.searchParams.get("kyroToken"),R=k.searchParams.get("draft"),I=!1;if(R==="true"&&v&&s)try{let Q=await _o(v,s,"HS256");Q&&Q.type==="preview"&&Q.collection===`_globals_${l.slug}`&&(I=!0);}catch(Q){console.warn("Invalid preview token",Q);}if(!I){let Q=await Yt(l,"read",f.req.raw,p,w,U);if(!Q.allowed)return f.json({error:Q.error},Q.status||403)}let T=R==="true"?!0:R==="false"?!1:!!p,j=parseInt(k.searchParams.get("depth")||"0"),z=(await t.find({collection:`_globals_${y}`,where:{},tenantId:w,draft:T,depth:j,limit:1})).docs[0];if(z&&j>0&&await chunkAK754S3T_cjs.a([z],l.fields,t,e,1,j),y==="storage-settings"&&(typeof globalThis.STORAGE_BUCKET<"u"||typeof f.env?.STORAGE_BUCKET<"u")&&(z?z.provider||(z.provider="cloudflare_r2"):z={id:y,provider:"cloudflare_r2"}),y==="system"){let Q=jB__default.default.randomBytes(32).toString("hex");z?z.appSecret||(await t.update({collection:`_globals_${y}`,id:y,data:{appSecret:Q},tenantId:w}),z.appSecret=Q):z=await t.create({collection:`_globals_${y}`,data:{id:y,appSecret:Q},tenantId:w});}return f.json({data:z||{}})}catch(p){return f.json({error:p.message},500)}});let A=async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=await Yt(l,"update",f.req.raw,p,w,U);if(!k.allowed)return f.json({error:k.error},k.status||403);let v=new URL(f.req.url),R=parseInt(v.searchParams.get("depth")||"0"),I=await f.req.json(),T=wc(I),j=gd(I),$=Object.fromEntries(Object.entries(j).filter(([Pt,Is])=>Is!==null&&Is!=="null"&&Is!==void 0));Jr($,l.fields),Qr(l.fields,$);let z=e.getUpdateZodSchema(y),Q;try{Q=z.parse($);}catch(Pt){return f.json({error:`Validation failed: ${ra(Pt.errors)}`,details:Pt.errors},400)}let ue=new Set(["id","createdAt","updatedAt","status","baseUpdatedAt","_baseUpdatedAt"]),X=Object.fromEntries(Object.entries(Q).filter(([Pt])=>!ue.has(Pt))),ye=`_globals_${y}`,Ze=await t.findOne({collection:ye,where:{},tenantId:w,draft:!0});if(Ze&&T&&Ze.updatedAt&&T!==Ze.updatedAt)return f.json(yd(T,Ze),409);let Xe=f.req.header("X-Draft")==="true",Je=l.versions?.drafts===!0,Wr=f.req.query("autosave")==="true",St;if(Je&&Xe)await t.createVersion({collection:ye,documentId:y,data:X,status:"draft",autosave:Wr,createdBy:p?.id,changeDescription:Wr?"Autosave":"Manual save",tenantId:w}),Ze?St=Ze:St=await t.create({collection:ye,data:{...X,id:y,status:"draft"},tenantId:w});else if(Je&&!Xe){let Pt="published";Ze?St=await t.update({collection:ye,id:y,data:{...X,status:Pt},tenantId:w}):St=await t.create({collection:ye,data:{...X,id:y,status:Pt},tenantId:w}),await t.createVersion({collection:ye,documentId:y,data:X,status:Pt,autosave:!1,createdBy:p?.id,changeDescription:"Published",tenantId:w});}else Ze?St=await t.update({collection:ye,id:y,data:X,tenantId:w}):St=await t.create({collection:ye,data:{...X,id:y},tenantId:w});if(y==="storage-settings"&&($t=null,Dr=null),y==="email-settings"){let Pt=await chunkVKXWJOWI_cjs.q.fromConfig(t);_e.email=Pt||void 0;}return y==="system"&&await chunkO4YE57OS_cjs.b(),p&&W?.createAuditLog({action:"settings_change",userId:p.id,resource:`global:${y}`,resourceId:y,success:!0}),St&&R>0&&await chunkAK754S3T_cjs.a([St],l.fields,t,e,1,R),f.json({data:St,message:"Updated successfully"})}catch(p){return console.error(`[API] Save global "${y}" failed:`,p),f.json({error:p.message||"Save failed",stack:process.env.NODE_ENV==="development"?p.stack:void 0},500)}};_.post(b,A),_.patch(b,A),_.post(`${b}/preview-url`,async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=await Yt(l,"read",f.req.raw,p,w);if(!k.allowed)return f.json({error:k.error||"Forbidden"},k.status||403);let v=await f.req.json().catch(()=>({})),R="";s&&(R=await wo({type:"preview",collection:`_globals_${l.slug}`,exp:Math.floor(Date.now()/1e3)+3600},s,"HS256"));let I="";if(l.admin?.preview)I=await l.admin.preview(v,{req:f.req.raw,token:R});else {let T="";try{let j=await t.findOne({collection:"_globals_site-settings",where:{}});j?.siteUrl&&(T=j.siteUrl);}catch{}if(!T)return f.json({error:"No site URL configured in settings, and no custom preview function defined."},400);T=T.replace(/\/$/,""),I=`${T}/?preview=true&kyroToken=${R}`;}return f.json({url:I})}catch(p){return f.json({error:p.message},500)}}),_.post(`${b}/publish`,async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=await Yt(l,"update",f.req.raw,p,w,U);if(!k.allowed)return f.json({error:k.error},403);let v=`_globals_${y}`,R=await t.findOne({collection:v,where:{},tenantId:w,draft:!0});if(!R)return f.json({error:"Global not found"},404);let I={status:"published"},T=R;if(l.versions?.drafts){let $=await t.findVersions({collection:v,documentId:y,limit:1,sort:"-createdAt",tenantId:w});$.docs.length>0&&(T={...R,...$.docs[0].data},I={...$.docs[0].data,...I});}let j=await t.update({collection:v,id:y,data:I,tenantId:w});return l.versions?.drafts&&await t.createVersion({collection:v,documentId:y,data:{...T,status:"published"},status:"published",createdBy:p?.id,changeDescription:"Published",tenantId:w}),f.json({data:j,message:"Published successfully"})}catch(p){return f.json({error:p.message},500)}}),_.post(`${b}/unpublish`,async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=await Yt(l,"update",f.req.raw,p,w,U);if(!k.allowed)return f.json({error:k.error},403);let v=await t.update({collection:`_globals_${y}`,id:y,data:{status:"draft"},tenantId:w});return f.json({data:v,message:"Unpublished successfully"})}catch(p){return f.json({error:p.message},500)}}),_.get(`${b}/versions`,async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=await Yt(l,"read",f.req.raw,p,w,U);if(!k.allowed)return f.json({error:k.error},403);let v=parseInt(f.req.query("limit")||"10"),R=parseInt(f.req.query("page")||"1"),I=await t.findVersions({collection:`_globals_${y}`,documentId:y,limit:v,page:R,tenantId:w});return f.json(I)}catch(p){return f.json({error:p.message},500)}}),_.get(`${b}/versions/:versionId`,async f=>{try{let p=f.req.param("versionId"),{user:w,tenantId:k}=await V(f.req.raw,q,i,c),v=await Yt(l,"read",f.req.raw,w,k,U);if(!v.allowed)return f.json({error:v.error},403);let R=await t.findVersionByID({collection:`_globals_${y}`,versionId:p,tenantId:k});return R?f.json({data:R}):f.json({error:"Version not found"},404)}catch(p){return f.json({error:p.message},500)}}),_.post(`${b}/versions/:versionId/restore`,async f=>{try{let p=f.req.param("versionId"),{user:w,tenantId:k}=await V(f.req.raw,q,i,c),v=await Yt(l,"update",f.req.raw,w,k,U);if(!v.allowed)return f.json({error:v.error},403);let R=`_globals_${y}`,I=await t.findVersionByID({collection:R,versionId:p,tenantId:k});if(!I)return f.json({error:"Version not found"},404);let T=await t.update({collection:R,id:y,data:{...I.data,status:"draft"},tenantId:k});return f.json({data:T,message:"Version restored successfully"})}catch(p){return f.json({error:p.message},500)}}),y==="email-settings"&&_.post(`${b}/test`,async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=await Yt(l,"update",f.req.raw,p,w,U);if(!k.allowed)return f.json({error:k.error},k.status||403);let v=await f.req.json(),R={provider:v.provider,from:v.fromEmail||v.from,fromName:v.fromName,replyTo:v.replyTo,smtp:v.smtp?{host:v.smtp.host,port:v.smtp.port,secure:v.smtp.secure,auth:{user:v.smtp.username||v.smtp.user,pass:v.smtp.password||v.smtp.pass}}:void 0,resend:v.resend,sendgrid:v.sendgrid,mailgun:v.mailgun,ses:v.ses},I=new chunkVKXWJOWI_cjs.q(R),T=v.email||v.testEmail||v.testEmailSection&&v.testEmailSection.testEmail;if(!T)return f.json({error:"No test recipient email provided"},400);let j=v.provider?v.provider.charAt(0).toUpperCase()+v.provider.slice(1):"SMTP",$=v.fromName?`${v.fromName} <${v.fromEmail||v.from||"default"}>`:v.fromEmail||v.from||"Configured Sender",z=new Date().toUTCString();return await I.send({to:T,subject:"Kyro CMS \u2014 Email Connection Test",html:`<!DOCTYPE html>
|
|
119
|
+
`).map(l=>l.trim()).filter(Boolean):[],Fe=Ir.length>0?Ir:ls||[];(Fe.length>0||d)&&_.use("*",async(l,y)=>{let b=l.req.header("Origin")||"*";if(Fe.length>0&&!Fe.includes(b))return l.json({error:"Origin not allowed"},403);let A=Fe.length>0?b:"*";if(l.header("Access-Control-Allow-Origin",A),l.header("Access-Control-Allow-Methods","GET, POST, PATCH, DELETE, OPTIONS"),l.header("Access-Control-Allow-Headers","Content-Type, Authorization, X-API-Key"),d?.credentials&&l.header("Access-Control-Allow-Credentials","true"),l.req.method==="OPTIONS")return l.text("");await y();});let mr=x?.access?.rateLimiting,er;if(mr?.enabled){let l=mr.maxRequests||100,y=mr.windowMs||6e4;er=new bo({"api:general":{window:y,max:l}}),_.use("/api/*",async(b,A)=>{if(!er)return A();let f=b.req.header("CF-Connecting-IP")||b.req.header("X-Forwarded-For")?.split(",")[0]?.trim()||b.req.header("X-Real-IP")||"unknown",p=await er.check("api:general",f);if(b.header("X-RateLimit-Limit",String(l)),b.header("X-RateLimit-Remaining",String(p.remaining)),b.header("X-RateLimit-Reset",String(p.resetAt)),!p.allowed)return b.json({error:"Too many requests",retryAfter:p.retryAfter},429);await A();});}let _e=new vo({redis:W,jwtSecret:s||"change-me",baseUrl:process.env.KYRO_BASE_URL||"http://localhost:4321",rateLimiter:er});chunkVKXWJOWI_cjs.q.fromConfig(t).then(l=>{l&&(_e.email=l);}).catch(l=>{console.error("[Email] Failed to initialize transport from config:",l);}),_.post("/api/auth/login",async l=>_e.login(l.req.raw)),_.post("/api/auth/register",async l=>{try{let y=await t.findOne({collection:"_globals_system",where:{}});if(y&&y.enableRegistration===!1)return l.json({error:"User registration is currently disabled by administrator."},403);if(y?.defaultRegistrationRole){let b=l.req.raw;if((b.headers.get("content-type")||"").includes("application/json")){let f=await l.req.json();f.role||(f.role=y.defaultRegistrationRole);let p=new Request(b.url,{method:b.method,headers:b.headers,body:JSON.stringify(f)});return _e.register(p)}}}catch{}return _e.register(l.req.raw)}),_.post("/api/auth/logout",async l=>_e.logout(l.req.raw)),_.post("/api/auth/refresh",async l=>_e.refresh(l.req.raw)),_.get("/api/auth/me",async l=>_e.me(l.req.raw)),_.post("/api/auth/forgot-password",async l=>_e.forgotPassword(l.req.raw)),_.post("/api/auth/reset-password",async l=>_e.resetPassword(l.req.raw)),_.post("/api/auth/change-password",async l=>_e.changePassword(l.req.raw)),_.get("/api/auth/verify-email",async l=>_e.verifyEmail(l.req.raw)),_.post("/api/auth/verify-email",async l=>_e.verifyEmail(l.req.raw)),_.get("/api/auth/verify",async l=>_e.verifyEmail(l.req.raw)),_.post("/api/auth/verify",async l=>_e.verifyEmail(l.req.raw)),_.post("/api/auth/magic-link",async l=>_e.requestMagicLink(l.req.raw)),_.get("/api/auth/magic-link",async l=>_e.verifyMagicLink(l.req.raw)),_.post("/api/auth/invite",async l=>_e.inviteUser(l.req.raw)),_.get("/api/auth/sessions",async l=>_e.listSessions(l.req.raw)),_.post("/api/auth/sessions/refresh",async l=>_e.refreshSession(l.req.raw)),_.delete("/api/auth/sessions",async l=>_e.revokeOtherSessions(l.req.raw)),_.delete("/api/auth/sessions/:id",async l=>_e.revokeSession(l.req.raw,l.req.param("id"))),_.put("/api/auth/sessions/:id/name",async l=>_e.renameSession(l.req.raw,l.req.param("id"))),_.get("/api/auth/access",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Not authenticated"},401);let A={},f={};for(let p of e.getCollections()){let w={read:(await Ie(p,"read",l.req.raw,y,b,void 0,U,F)).allowed,create:(await Ie(p,"create",l.req.raw,y,b,void 0,U,F)).allowed,update:(await Ie(p,"update",l.req.raw,y,b,void 0,U,F)).allowed,delete:(await Ie(p,"delete",l.req.raw,y,b,void 0,U,F)).allowed};A[p.slug]=w;}for(let p of e.getGlobals()){let w={read:(await Yt(p,"read",l.req.raw,y,b,U)).allowed,update:(await Yt(p,"update",l.req.raw,y,b,U)).allowed};f[p.slug]=w;}return l.json({collections:A,globals:f})}catch(y){return l.json({error:y.message},500)}});let Lt=typeof e.hasCollection=="function"&&e.hasCollection("users")?e.getCollection("users"):(()=>{try{return e.getCollection("users")}catch{return chunkZO3YB5DK_cjs.a}})();_.get("/api/users",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c),A=await Ie(Lt,"read",l.req.raw,y,b,void 0,U,F);if(!A.allowed)return l.json({error:A.error},A.status||403);let f=parseInt(l.req.query("page")||"1"),p=Math.min(parseInt(l.req.query("limit")||"10"),100),w=l.req.query("search")||void 0,k=[],v=0;if(typeof W.findUsers=="function"){let R=await W.findUsers({page:f,limit:p,search:w});k=R.users||[],v=R.total||0;}else {let R=await t.find({collection:"users",page:f,limit:p,where:w?{email:{contains:w}}:{},tenantId:b});k=R.docs||[],v=R.totalDocs||0;}return l.json({docs:k,totalDocs:v,limit:p,totalPages:Math.ceil(v/p)||1,page:f,pagingCounter:(f-1)*p+1,hasPrevPage:f>1,hasNextPage:f<Math.ceil(v/p),prevPage:f>1?f-1:null,nextPage:f<Math.ceil(v/p)?f+1:null})}catch(y){return console.error("[API] Error listing users:",y),l.json({error:y.message},500)}}),_.get("/api/users/:id",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c),A=l.req.param("id"),f=await W.findUserById(A);return f?l.json({data:f}):l.json({error:"User not found"},404)}catch(y){return l.json({error:y.message},500)}}),_.post("/api/users",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c),A=await Ie(Lt,"create",l.req.raw,y,b,void 0,U,F);if(!A.allowed)return l.json({error:A.error},A.status||403);let f=await l.req.json();if(!f.email||!f.password)return l.json({error:"Email and password are required"},400);if(await W.findUserByEmail(f.email))return l.json({error:"Email already in use"},400);let w=f.role||"customer";if(w!=="customer"&&y?.role!=="super_admin")return l.json({error:"Forbidden: Only super_admin can assign administrative roles"},403);let k=await W.createUser({email:f.email,password:f.password,name:f.name,role:w,avatar:f.avatar,tenantId:f.tenantId});return y&&W?.createAuditLog({action:"user_create",userId:y.id,resource:"users",resourceId:k.id,success:!0}),l.json({data:k,message:"User created successfully"},201)}catch(y){return l.json({error:y.message},500)}}),_.patch("/api/users/:id",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c),A=await Ie(Lt,"update",l.req.raw,y,b,void 0,U,F);if(!A.allowed)return l.json({error:A.error},A.status||403);let f=l.req.param("id"),p=await l.req.json(),w=await W.findUserById(f);if(!w)return l.json({error:"User not found"},404);let k={};if(p.name!==void 0&&(k.name=p.name),p.email!==void 0&&(k.email=p.email),p.role!==void 0&&p.role!==w.role){if(y?.role!=="super_admin")return l.json({error:"Forbidden: Only super_admin can modify user roles"},403);k.role=p.role;}p.avatar!==void 0&&(k.avatar=typeof p.avatar=="object"&&p.avatar!==null?p.avatar.id||String(p.avatar):p.avatar),p.tenantId!==void 0&&(k.tenantId=p.tenantId),p.emailVerified!==void 0&&(k.emailVerified=p.emailVerified),p.locked!==void 0&&(k.locked=p.locked),p.failedLoginAttempts!==void 0&&(k.failedLoginAttempts=p.failedLoginAttempts),p.lastLogin!==void 0&&(k.lastLogin=p.lastLogin);let v=await W.updateUser(f,k);return v?(y&&(W?.createAuditLog({action:"user_update",userId:y.id,resource:"users",resourceId:f,success:!0}),p.role&&w.role!==p.role&&W?.createAuditLog({action:"role_change",userId:y.id,resource:"users",resourceId:f,success:!0,metadata:{oldRole:w.role,newRole:p.role}})),l.json({data:v,message:"User updated successfully"})):l.json({error:"User update failed"},500)}catch(y){return l.json({error:y.message},500)}}),_.delete("/api/users/:id",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c),A=await Ie(Lt,"delete",l.req.raw,y,b,void 0,U,F);if(!A.allowed)return l.json({error:A.error},A.status||403);let f=l.req.param("id");if(y&&y.id===f)return l.json({error:"You cannot delete your own account"},403);let p=await W.findUserById(f);return p?await W.deleteUser(f)?(y&&W?.createAuditLog({action:"user_delete",userId:y.id,resource:"users",resourceId:f,success:!0}),l.json({data:p,message:"User deleted successfully"})):l.json({error:"User deletion failed"},500):l.json({error:"User not found"},404)}catch(y){return l.json({error:y.message},500)}}),_.get("/api/auth/audit-logs",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c),A=e.getCollection("audit_logs");if(A){let I=await Ie(A,"read",l.req.raw,y,b,void 0,U,F);if(!I.allowed)return l.json({error:I.error},I.status||403)}else if(!y)return l.json({error:"Authentication required"},401);let f=parseInt(l.req.query("page")||"1"),p=Math.min(parseInt(l.req.query("limit")||"50"),100),w=l.req.query("action")||void 0,k=l.req.query("userId")||void 0,v=l.req.query("resource")||void 0,R=await W.findAuditLogs({action:w,userId:k,resource:v,limit:p,offset:(f-1)*p});return l.json({docs:R.logs,totalDocs:R.total,limit:p,totalPages:Math.ceil(R.total/p),page:f,pagingCounter:(f-1)*p+1,hasPrevPage:f>1,hasNextPage:f<Math.ceil(R.total/p),prevPage:f>1?f-1:null,nextPage:f<Math.ceil(R.total/p)?f+1:null})}catch(y){return console.error("[API] Error listing audit logs:",y),l.json({error:y.message},500)}});let $t=null,Dr=null,ft=async()=>{if(Dr)throw Dr;if(!$t)try{let l="sqlite";"dialect"in t&&t.dialect==="postgres"&&t instanceof chunkTDGSIF5H_cjs.c?l=t.dialect:"dialect"in t&&t.dialect==="mongodb"&&(l="mongodb");let y=l==="postgres"&&t instanceof chunkTDGSIF5H_cjs.c?t.client:t;$t=await dc.init(y,{dialect:l});}catch(l){throw console.error("[getMedia] Init error:",l),Dr=l,l}return $t};_.get("/api/media",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=await ft(),A=new URL(l.req.url).origin,f=parseInt(l.req.query("page")||"1"),p=parseInt(l.req.query("limit")||"30"),w=l.req.query("search")||"",k=l.req.query("type")||"",v=l.req.query("folder")||"",R=await b.find({page:f,limit:p,search:w,type:k,folder:v},A);return l.json(R)}catch(y){return console.error("[Media] find error:",y),l.json({error:y.message},500)}}),_.post("/api/media/upload",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=await ft(),A=l.req.header("content-type")||"",f=new URL(l.req.url).origin;if(A.includes("multipart/form-data")){let R=await l.req.formData(),I=R.get("file"),T=R.get("folder")||"";if(!I)return l.json({error:"No file uploaded"},400);let j=await b.upload(I,T,f);return l.json(j)}let p=await l.req.json(),{url:w}=p,k=p.folder||"";if(!w)return l.json({error:"No URL provided"},400);let v=await b.uploadFromUrl(w,k,f);return l.json(v)}catch(y){return console.error("[Media] upload error:",y),l.json({error:y.message},500)}}),_.get("/api/media/folders",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let A=await(await ft()).listFolders();return l.json(A)}catch(y){return console.error("[Media] folders error:",y),l.json({error:y.message},500)}}),_.post("/api/media/folders",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=await ft(),A=await l.req.json(),{name:f,parentPath:p}=A;return f?(await b.createFolder(f,p||""),l.json({message:"Folder created",path:p?`${p}/${f}`:f})):l.json({error:"Folder name is required"},400)}catch(y){return console.error("[Media] create folder error:",y),l.json({error:y.message},500)}}),_.delete("/api/media/folders",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=await ft(),A=l.req.query("path");return A?(await b.deleteFolder(A),l.json({message:"Folder deleted"})):l.json({error:"Path is required"},400)}catch(y){return console.error("[Media] delete folder error:",y),l.json({error:y.message},500)}}),_.delete("/api/media/:id",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=await ft(),A=l.req.param("id"),f=new URL(l.req.url).origin;return await b.delete(A,f),l.json({success:!0})}catch(y){return console.error("[Media] delete error:",y),l.json({error:y.message},500)}}),_.get("/api/media/file/:key{.+$}",async l=>{let y=l.req.param("key"),b=globalThis.STORAGE_BUCKET;if(b){let A=await b.get(y);if(!A)return l.notFound();let f=new Headers;return A.writeHttpMetadata(f),f.set("etag",A.httpEtag),new Response(A.body,{headers:f})}return l.notFound()}),_.get("/api/media/resize",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=l.req.query("url"),A=parseInt(l.req.query("w")||"0"),f=parseInt(l.req.query("h")||"0"),p=l.req.query("fit")||"cover",w=parseFloat(l.req.query("cx")||"0"),k=parseFloat(l.req.query("cy")||"0"),v=parseFloat(l.req.query("cw")||"0"),R=parseFloat(l.req.query("ch")||"0");if(!b)return l.json({error:"URL is required"},400);let T=(await ft()).storage;if(T.name!=="local")return l.redirect(b);let j=T.config?.uploadDir||ko.join(process.cwd(),"public","uploads"),$=T.config?.baseUrl||"/uploads";if(!b.startsWith($))return l.redirect(b);let z=b.replace($,""),Q=ko.join(j,z);if(!fs$1.existsSync(Q))return l.json({error:"File not found"},404);let ue=fs$1.readFileSync(Q),{default:X}=await import('sharp'),ye=X(ue);if(v>0&&R>0){let Je=await X(ue).metadata(),Wr=Je.width||0,St=Je.height||0;if(Wr>0&&St>0){let Pt=Math.max(0,Math.min(Math.round(w/100*Wr),Wr-1)),Is=Math.max(0,Math.min(Math.round(k/100*St),St-1)),X_=Math.max(1,Math.min(Math.round(v/100*Wr),Wr-Pt)),J_=Math.max(1,Math.min(Math.round(R/100*St),St-Is));ye=ye.extract({left:Pt,top:Is,width:X_,height:J_});}}(A>0||f>0)&&(ye=ye.resize({width:A>0?A:void 0,height:f>0?f:void 0,fit:p}));let Ze=await ye.toBuffer(),Xe=await X(ue).metadata();return l.header("Content-Type",`image/${Xe.format||"webp"}`),l.header("Cache-Control","public, max-age=31536000, immutable"),l.body(Ze)}catch(y){return console.error("[Media] resize error:",y),l.json({error:y.message},500)}}),_.get("/api/media/:id",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=await ft(),A=l.req.param("id"),f=new URL(l.req.url).origin,p=await b.findById(A,f);return p?l.json(p):l.json({error:"Media not found"},404)}catch(y){return console.error("[Media] get error:",y),l.json({error:y.message},500)}}),_.patch("/api/media/:id",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=await ft(),A=l.req.param("id"),f=await l.req.json(),p=new URL(l.req.url).origin,w=["folder","metadata","title","alt","caption","originalName"],k={};for(let v of w)f[v]!==void 0&&(k[v]=f[v]);if(Object.keys(k).length>0){let v=await b.update(A,k,p);return l.json({doc:v})}return l.json({error:"No valid fields to update"},400)}catch(y){return console.error("[Media] update error:",y),l.json({error:y.message},500)}}),_.get("/api/media/test",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=await ft();return l.json({status:b?"initialized":"failed",serviceType:b?.constructor?.name})}catch(y){return console.error("[test] Error:",y),l.json({error:y.message,type:y.constructor?.name,stack:y.stack},500)}}),_.get("/api/storage-status",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=typeof globalThis.STORAGE_BUCKET<"u"||typeof l.env?.STORAGE_BUCKET<"u",A=b,f=b?"cloudflare_r2":"local";if(t)try{let p=t.prepare('SELECT provider FROM "_globals_storage-settings" LIMIT 1').get();p&&p.provider&&(A=!0,f=p.provider==="aws"?"s3":p.provider);}catch{try{let p=await t.findOne({collection:"_globals_storage-settings",where:{},draft:!0});p&&p.provider&&(A=!0,f=p.provider==="aws"?"s3":p.provider);}catch{}}return l.json({provider:f,configured:A,usage:0,limit:"unlimited"})}catch(y){return console.error("[Storage] status error:",y),l.json({error:y.message},500)}}),_.get("/api/plugins",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=e.getPlugins(),A=e.storageProviders,f=await Promise.all(b.map(async p=>{let w=!0,k=p.name,v={};try{let T=await t.findOne({collection:"_globals_plugin-settings",where:{},draft:!0});T&&T.states&&(v=T.states);}catch{}v[k]!==void 0&&(w=v[k]),A.setPluginEnabled(k,w);let R=k.replace(/^@[^/]+\//,"");R=R.replace(/^(plugin|kyro)-/,"");let I={ai:"AI",seo:"SEO",s3:"S3",aws:"AWS",api:"API",ui:"UI",ftp:"FTP"};if(R=R.split("-").map(T=>{let j=T.toLowerCase();return I[j]?I[j]:T.charAt(0).toUpperCase()+T.slice(1)}).join(" "),R.toLowerCase().startsWith("storage ")){let T=R.split(" ");T.length===2&&(R=`${T[1]} Storage`);}return {id:k,name:p.displayName||R,version:p.version||"1.0.0",description:p.description||"",enabled:w,status:w?"active":"disabled"}}));return l.json(f)}catch(y){return console.error("[Plugins] list error:",y),l.json({error:y.message},500)}}),_.put("/api/plugins/:name/toggle",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=l.req.param("name"),A=e.storageProviders,p=!A.isPluginEnabled(b),w=[];if(!p)for(let v of A.getAll())v.pluginName===b&&w.push(v.type);if(!(l.req.query("force")==="1")&&!p&&w.length>0){let v="local";try{let R=t?.prepare?.('SELECT provider FROM "_globals_storage-settings" LIMIT 1')?.get();R?.provider&&(v=R.provider);}catch{try{let R=await t?.findOne?.({collection:"_globals_storage-settings",where:{},draft:!0});R?.provider&&(v=R.provider);}catch{}}if(w.includes(v))return l.json({error:`Cannot disable "${b}" \u2014 storage provider "${v}" is currently active. Switch to Local storage first.`,requiresAction:!0,activeProvider:v},409)}try{let v={},R="global",I=await t.findOne({collection:"_globals_plugin-settings",where:{},draft:!0});I&&(v=I.states||{},R=I.id),v[b]=p,I?await t.update({collection:"_globals_plugin-settings",id:R,data:{states:v}}):await t.create({collection:"_globals_plugin-settings",data:{states:v,id:"global"}});}catch(v){console.warn(`[Plugins] Could not persist state for "${b}":`,v);}return A.setPluginEnabled(b,p),l.json({name:b,enabled:p})}catch(y){return console.error("[Plugins] toggle error:",y),l.json({error:y.message},500)}}),_.get("/api/health",l=>l.json({status:"ok",version:"0.12.58",collections:e.getCollectionSlugs(),timestamp:new Date().toISOString()})),_.get("/api/metrics",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let A=y.role==="admin"||y.role==="super_admin",p=e.getCollectionSlugs().filter($=>!["users","audit_logs","media","_globals_access-settings","_globals_brand-settings"].includes($)&&!$.startsWith("_globals_")).filter($=>A||chunk7WMMKGEO_cjs.a(y,`${$}:read`)),w=0,k={};await Promise.all(p.map(async $=>{try{let Q=(await t.find({collection:$,where:{},limit:1,page:1,tenantId:b})).totalDocs??0;w+=Q,k[$]=Q;}catch{}}));let v=0;try{v=(await t.find({collection:"media",where:{},limit:1,page:1,tenantId:b})).totalDocs??0;}catch{}let R=0;try{R=(await t.find({collection:"users",where:{},limit:1,page:1,tenantId:b})).totalDocs??0;}catch{}let I=0;try{if(g){let $=await g.getWebhooks();I=Array.isArray($)?$.length:0;}}catch{}let T=0;try{T=(await t.find({collection:chunkDUO523BH_cjs.d,where:{},limit:1,page:1,tenantId:b})).totalDocs??0;}catch{}let j=w+v+R;return l.json({totalDocuments:w,totalMedia:A||chunk7WMMKGEO_cjs.a(y,"media:read")?v:void 0,totalUsers:A||chunk7WMMKGEO_cjs.a(y,"users:read")?R:void 0,totalWebhooks:A?I:void 0,totalApiKeys:A?T:void 0,totalStoredRecords:j,collectionCounts:k,collections:p.length,timestamp:new Date().toISOString()})}catch(y){return console.error("[API] Metrics error:",y),l.json({error:y.message},500)}}),_.get("/api/analytics",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);if(!(y.role==="admin"||y.role==="super_admin"))return l.json({error:"Unauthorized"},403);let p=(await t.find({collection:"orders",where:{},limit:1e3,page:1,tenantId:b})).docs||[],w=await t.findOne({collection:"_globals_store-settings",where:{},tenantId:b}),k=w?.currency?.code||w?.currency||"USD",v={},R={},I={};p.forEach($=>{let z=$.createdAt||$.updatedAt,Q=z?new Date(z).toISOString().split("T")[0]:new Date().toISOString().split("T")[0];v[Q]||(v[Q]=0),R[Q]||(R[Q]=0);let ue=typeof $.total=="number"?$.total:parseFloat(String($.total||0));v[Q]+=isNaN(ue)?0:ue,R[Q]+=1;let X=$.orderStatus||$.status||"pending";I[X]=(I[X]||0)+1;});let T=Object.keys(v).sort().map($=>({date:$,revenue:Math.round(v[$]*100)/100,orders:R[$]})),j=Math.round(T.reduce(($,z)=>$+z.revenue,0)*100)/100;return l.json({chartData:T,totalRevenue:j,totalOrders:p.length,ordersByStatus:I,currencyCode:typeof k=="string"?k:"USD"})}catch(y){return l.json({error:y.message},500)}}),_.get("/api/kyro/schema",async l=>{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=f=>f.map(p=>{let w={name:p.name,type:p.type,label:p.label,required:p.required??false,unique:p.unique??false,indexed:p.indexed??false,defaultValue:p.defaultValue,admin:p.admin?{...p.admin}:void 0};return p.minLength!==void 0&&(w.minLength=p.minLength),p.maxLength!==void 0&&(w.maxLength=p.maxLength),p.pattern!==void 0&&(w.pattern=p.pattern),p.variant!==void 0&&(w.variant=p.variant),p.hasMany!==void 0&&(w.hasMany=p.hasMany),p.min!==void 0&&(w.min=p.min),p.max!==void 0&&(w.max=p.max),p.step!==void 0&&(w.step=p.step),p.integer!==void 0&&(w.integer=p.integer),p.options&&(w.options=p.options),p.relationTo&&(w.relationTo=p.relationTo),p.maxDepth!==void 0&&(w.maxDepth=p.maxDepth),p.minRows!==void 0&&(w.minRows=p.minRows),p.maxRows!==void 0&&(w.maxRows=p.maxRows),p.localized!==void 0&&(w.localized=p.localized),p.language&&(w.language=p.language),p.format&&(w.format=p.format),p.allowedTypes&&(w.allowedTypes=p.allowedTypes),p.maxSize&&(w.maxSize=p.maxSize),(p.type==="group"||p.type==="row"||p.type==="collapsible"&&p.fields)&&(w.fields=b(p.fields)),p.type==="array"&&p.fields&&(w.fields=b(p.fields)),p.type==="blocks"&&p.blocks&&(w.blocks=p.blocks.map(k=>({slug:k.slug,label:k.label,fields:b(k.fields)}))),p.type==="tabs"&&p.tabs&&(w.tabs=p.tabs.map(k=>({label:k.label,name:k.name,fields:b(k.fields)}))),w}),A={collections:{},globals:{}};for(let f of e.getCollections()){let p=f.slug;try{A.collections[p]={slug:p,label:f.label||p,fields:b(f.fields),jsonSchema:zn(e.getZodSchema(p),{target:"openApi3"}),createSchema:zn(e.getCreateZodSchema(p),{target:"openApi3"}),updateSchema:zn(e.getUpdateZodSchema(p),{target:"openApi3"}),procedures:{find:{collection:p,where:"Record<string,any>",sort:"string",limit:"number",page:"number",depth:"number",select:"string[]",draft:"boolean"},findByID:{collection:p,id:"string",depth:"number",select:"string[]",draft:"boolean"},create:{collection:p,data:"Record<string,any>",depth:"number",select:"string[]"},update:{collection:p,id:"string",data:"Record<string,any>",depth:"number",select:"string[]",baseUpdatedAt:"string"},delete:{collection:p,id:"string"},count:{collection:p,where:"Record<string,any>"}}};}catch{}}for(let f of e.getGlobals()){let p=f.slug,w=f.fields;if(p==="storage-settings"){let k=e.storageProviders,v=k.getAll(),R=new Set(k.getAllAvailable(T=>k.isPluginEnabled(T)).map(T=>T.type));R.add("local");let I=new Set(v.map(T=>T.type));w=w.filter(T=>T.type==="group"&&T.name&&I.has(T.name)?R.has(T.name):true).map(T=>T.name==="provider"&&T.type==="select"?{...T,options:T.options.filter(j=>R.has(j.value))}:T);}try{A.globals[p]={slug:p,label:f.label||p,fields:b(w),jsonSchema:zn(e.getZodSchema(p),{target:"openApi3"}),procedures:{get:{},update:{data:"Record<string,any>"}}};}catch{}}return l.json(A)}),_.get("/api/collections",async l=>{let{user:y}=await V(l.req.raw,q,i,c);if(!y)return l.json({error:"Authentication required"},401);let b=e.getCollections().map(A=>({slug:A.slug,label:A.label||A.slug,fields:A.fields.filter(f=>f.name).map(f=>({name:f.name,type:f.type,required:f.required,label:f.label}))}));return l.json(b)});function Kn(l,y,b){if(b in y)return y[b];for(let A of l)if(A.name){if(A.type==="tabs"&&A.tabs){let f=y[A.name];if(f&&typeof f=="object"&&b in f)return f[b]}if((A.type==="group"||A.type==="collapsible")&&A.fields){let f=y[A.name];if(f&&typeof f=="object"){if(b in f)return f[b];let p=Kn(A.fields,f,b);if(p!==void 0)return p}}}}_.get("/api/search",async l=>{try{let y=l.req.query("q")||"",b=l.req.query("collections")||"",A=Math.min(parseInt(l.req.query("limit")||"10"),50);if(!y||y.length<2)return l.json({results:[],message:"Query too short"});let{user:f,tenantId:p}=await V(l.req.raw,q,i,c),w=b?b.split(",").filter(Boolean):e.getCollectionSlugs(),k=[],v=new RegExp(y.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"i");for(let R of e.getCollections()){if(!w.includes(R.slug)||!(await Ie(R,"read",l.req.raw,f,p,void 0,U,F)).allowed)continue;let T=R.fields.filter(j=>j.name&&j.name!=="id"&&(j.type==="text"||j.type==="email"||j.type==="textarea"||j.type==="richtext"||j.indexed)&&!j.admin?.hidden).map(j=>j.name);if(T.length!==0)try{let j=T.map(z=>{let Q={};return Q[z]={like:`%${y}%`},Q}),$=await t.find({collection:R.slug,where:{OR:j},limit:A,tenantId:p});await chunkAK754S3T_cjs.a($.docs,R.fields,t,e,1,0);for(let z of $.docs){let Q=R.admin?.useAsTitle||T.find(X=>X==="title"||X==="name"||X==="heading"||X==="slug"),ue=Q?Kn(R.fields,z,Q)??z.id:z.id;k.push({collection:R.slug,label:R.label||R.slug,id:z.id,title:String(ue||"Untitled"),doc:z});}}catch(j){console.error(`Search error for ${R.slug}:`,j);}}return k.sort((R,I)=>R.label.localeCompare(I.label)),l.json({results:k})}catch(y){return l.json({error:y.message,results:[]},500)}}),_.get("/api/keys",async l=>{try{let{user:y,tenantId:b}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:read"))return l.json({error:"Forbidden"},403);let A=parseInt(l.req.query("page")||"1"),f=Math.min(parseInt(l.req.query("limit")||"50"),100),p=await t.find({collection:chunkDUO523BH_cjs.d,where:{},page:A,limit:f,tenantId:b}),w=(p.docs||[]).map(k=>({id:k.id,name:k.name,keyPrefix:k.keyPrefix,permissions:k.permissions||[],lastUsed:k.lastUsedAt,createdAt:k.createdAt}));return l.json({docs:w,totalDocs:p.totalDocs||w.length,totalPages:p.totalPages||1})}catch(y){return console.error("[ApiKeys] GET error:",y),l.json({error:y.message},500)}}),_.post("/api/keys",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:admin"))return l.json({error:"Forbidden"},403);let b=await l.req.json();if(!b.name||typeof b.name!="string")return l.json({error:"name is required"},400);let A=chunkDUO523BH_cjs.i(),f=await t.create({collection:chunkDUO523BH_cjs.d,data:{userId:y.id,name:b.name,key:A,keyPrefix:chunkDUO523BH_cjs.j(A),permissions:Array.isArray(b.permissions)?b.permissions:["*"],expiresAt:b.expiresAt||null,createdAt:new Date().toISOString()}});return await W?.createAuditLog({action:"api_key_create",userId:y.id,resource:"api_key",resourceId:f.id,success:!0,metadata:{keyName:b.name}}),l.json({...f,key:A,permissions:Array.isArray(b.permissions)?b.permissions:["*"]},201)}catch(y){return console.error("[ApiKeys] POST error:",y),l.json({error:y.message},500)}}),_.delete("/api/keys/:id",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:admin"))return l.json({error:"Forbidden"},403);let b=l.req.param("id"),A=await t.findByID({collection:chunkDUO523BH_cjs.d,id:b});return A?(await t.delete({collection:chunkDUO523BH_cjs.d,id:b}),await W?.createAuditLog({action:"api_key_delete",userId:y.id,resource:"api_key",resourceId:b,success:!0,metadata:{keyName:A.name}}),l.json({message:"API key deleted"})):l.json({error:"API key not found"},404)}catch(y){return console.error("[ApiKeys] DELETE error:",y),l.json({error:y.message},500)}}),_.patch("/api/keys/:id",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:admin"))return l.json({error:"Forbidden"},403);let b=l.req.param("id"),A=await l.req.json(),f=await t.findByID({collection:chunkDUO523BH_cjs.d,id:b});if(!f)return l.json({error:"API key not found"},404);let p={};if(typeof A.name=="string"&&A.name.trim()&&(p.name=A.name.trim()),Array.isArray(A.permissions)&&(p.permissions=A.permissions),A.expiresAt!==void 0&&(p.expiresAt=A.expiresAt||null),Object.keys(p).length===0)return l.json({error:"Nothing to update"},400);let w=await t.update({collection:chunkDUO523BH_cjs.d,id:b,data:p});return l.json({...w,keyPrefix:f.keyPrefix})}catch(y){return console.error("[ApiKeys] PATCH error:",y),l.json({error:y.message},500)}}),_.post("/api/keys/:id/rotate",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:admin"))return l.json({error:"Forbidden"},403);let b=l.req.param("id"),A=await t.findByID({collection:chunkDUO523BH_cjs.d,id:b});if(!A)return l.json({error:"API key not found"},404);let f=chunkDUO523BH_cjs.i(),p=await t.update({collection:chunkDUO523BH_cjs.d,id:b,data:{key:f,keyPrefix:chunkDUO523BH_cjs.j(f),lastUsedAt:null}});return await W?.createAuditLog({action:"api_key_rotate",userId:y.id,resource:"api_key",resourceId:b,success:!0,metadata:{keyName:A.name}}),l.json({...p,key:f,permissions:A.permissions,expiresAt:A.expiresAt})}catch(y){return console.error("[ApiKeys] rotate error:",y),l.json({error:y.message},500)}}),_.get("/api/webhooks/actions",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:read"))return l.json({error:"Forbidden"},403);let b={generic:{label:"Custom URL",description:"POST to any endpoint with Kyro payload",configFields:[],envVars:[]},"github-push":{label:"GitHub Push",description:"Push an empty commit to simulate a push event",configFields:[{name:"githubOwner",label:"Owner",required:!0,placeholder:"e.g., kyro-dev"},{name:"githubRepo",label:"Repository",required:!0,placeholder:"e.g., my-website"},{name:"githubBranch",label:"Branch",required:!1,placeholder:"main"}],envVars:["GITHUB_TOKEN"]}};return l.json({actions:b})}catch(y){return console.error("[Webhooks] actions error:",y),l.json({error:y.message},500)}}),_.get("/api/webhooks",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:read"))return l.json({error:"Forbidden"},403);if(!g)return l.json({error:"Webhook service not available"},503);let b=await g.getWebhooks();return l.json({docs:b})}catch(y){return console.error("[Webhooks] GET error:",y),l.json({error:y.message},500)}}),_.post("/api/webhooks",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:admin"))return l.json({error:"Forbidden"},403);if(!g)return l.json({error:"Webhook service not available"},503);let b=await l.req.json(),A=await g.createWebhook(b);return await W?.createAuditLog({action:"webhook_create",userId:y.id,resource:"webhook",resourceId:A.id,success:!0,metadata:{name:A.name,url:A.url}}),l.json(A,201)}catch(y){return console.error("[Webhooks] POST error:",y),l.json({error:y.message},500)}}),_.get("/api/webhooks/:id",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:read"))return l.json({error:"Forbidden"},403);if(!g)return l.json({error:"Webhook service not available"},503);let b=l.req.param("id"),A=await g.getWebhookById(b);return A?l.json(A):l.json({error:"Webhook not found"},404)}catch(y){return console.error("[Webhooks] GET :id error:",y),l.json({error:y.message},500)}}),_.patch("/api/webhooks/:id",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:admin"))return l.json({error:"Forbidden"},403);if(!g)return l.json({error:"Webhook service not available"},503);let b=l.req.param("id"),A=await l.req.json(),f=await g.updateWebhook(b,A);return f?(await W?.createAuditLog({action:"webhook_update",userId:y.id,resource:"webhook",resourceId:b,success:!0,metadata:{name:f.name}}),l.json(f)):l.json({error:"Webhook not found"},404)}catch(y){return console.error("[Webhooks] PATCH error:",y),l.json({error:y.message},500)}}),_.delete("/api/webhooks/:id",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:admin"))return l.json({error:"Forbidden"},403);if(!g)return l.json({error:"Webhook service not available"},503);let b=l.req.param("id"),A=await g.getWebhookById(b);return A?(await g.deleteWebhook(b),await W?.createAuditLog({action:"webhook_delete",userId:y.id,resource:"webhook",resourceId:b,success:!0,metadata:{name:A.name}}),l.json({message:"Webhook deleted"})):l.json({error:"Webhook not found"},404)}catch(y){return console.error("[Webhooks] DELETE error:",y),l.json({error:y.message},500)}}),_.post("/api/webhooks/:id/test",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:admin"))return l.json({error:"Forbidden"},403);if(!g)return l.json({error:"Webhook service not available"},503);let b=l.req.param("id"),A=await g.testWebhook(b);return A?l.json(A):l.json({error:"Webhook not found"},404)}catch(y){return console.error("[Webhooks] test error:",y),l.json({error:y.message},500)}}),_.get("/api/webhooks/:id/history",async l=>{try{let{user:y}=await V(l.req.raw,q,i,c);if(!y||!chunk7WMMKGEO_cjs.a(y,"users:read"))return l.json({error:"Forbidden"},403);if(!g)return l.json({error:"Webhook service not available"},503);let b=l.req.param("id"),A=Math.min(parseInt(l.req.query("limit")||"50"),100),f=await g.getDeliveryHistory(b,A);return l.json({docs:f})}catch(y){return console.error("[Webhooks] history error:",y),l.json({error:y.message},500)}});function Vn(l){let y={},b=["name","type","required","hasMany","relationTo","options","min","max","minLength","maxLength","defaultValue","label","localized","admin","unique","index","hidden","readOnly","deprecated"];for(let A of b)A in l&&(y[A]=l[A]);return l.fields&&(y.fields=l.fields.map(Vn)),l.tabs&&(y.tabs=l.tabs.map(A=>({label:A.label,name:A.name,fields:A.fields.map(Vn)}))),y}_.get("/api/__schema",async l=>{try{let{user:y,apiKeyContext:b}=await V(l.req.raw,q,i,c);if(!y&&!b)return l.json({error:"Unauthorized"},401);let f=e.getCollections().filter(p=>p.slug!=="users"&&p.slug!=="audit_logs").map(p=>({slug:p.slug,label:p.label,labelPlural:p.labelPlural,singularLabel:p.singularLabel,timestamps:p.timestamps,auth:!!p.auth,tenantScoped:!!p.tenantScoped,upload:p.upload?{staticDir:p.upload.staticDir,imageSizes:p.upload.imageSizes,mimeTypes:p.upload.mimeTypes}:void 0,fields:p.fields.map(Vn)}));return l.json(f)}catch(y){return console.error("[Schema] error:",y),l.json({error:y.message},500)}});let xd=e.getCollections();for(let l of xd){let A=function(f,p){let w=[],k=new Set([...Object.keys(f),...Object.keys(p)]);for(let v of k)v==="id"||v==="createdAt"||v==="updatedAt"||JSON.stringify(f[v])!==JSON.stringify(p[v])&&w.push({field:v,oldValue:v in f?f[v]:void 0,newValue:v in p?p[v]:void 0});return w};let y=l.slug;if(y==="users"||y==="audit_logs")continue;let b=`/api/${y}`;_.post(`${b}/dynamic-options/:fieldName`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"read",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);let R=f.req.param("fieldName"),I=await f.req.json(),{data:T,siblingData:j}=I,$=hs(l.fields,R);if(!$)return f.json({error:"Field not found"},404);if($.type!=="select")return f.json({error:"Field is not a select field"},400);let z=[];return typeof $.options=="function"?z=await $.options({data:T||{},siblingData:j||{}}):Array.isArray($.options)&&(z=$.options),f.json({options:z})}catch(p){return f.json({error:p.message},500)}}),_.get(b,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"read",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);w&&t.setTenantContext({tenantId:w,userId:p?.id??"",role:p?.role,isSuperAdmin:p?.role==="super_admin"});let R=new URL(f.req.url),I=parseInt(R.searchParams.get("page")||"1"),T=Math.min(parseInt(R.searchParams.get("limit")||"10"),100),j=R.searchParams.get("sort")||void 0,$=parseInt(R.searchParams.get("depth")||"0"),z=R.searchParams.get("select")?.split(",")||void 0,Q=R.searchParams.get("draft"),ue=Q==="true"?!0:Q==="false"?!1:!!p,X={},ye=R.searchParams.get("where");if(ye)try{X=JSON.parse(ye);}catch{return f.json({error:"Invalid JSON in where parameter"},400)}let Ze=await t.find({collection:y,where:X,sort:j,limit:T,page:I,depth:$,tenantId:w,select:z,draft:ue});return await chunkAK754S3T_cjs.a(Ze.docs,l.fields,t,e,1,$),f.json(chunkZOVH6QT5_cjs.a(Ze))}catch(p){return console.error("[API] list error:",p),f.json({error:p.message},500)}}),_.get(`${b}/:id/versions`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"read",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);let R=f.req.param("id");if(!R)return f.json({error:"Missing document ID"},400);let I=new URL(f.req.url),T=I.searchParams.get("compareA"),j=I.searchParams.get("compareB");if(_c(W,k,`${b}/${R}/versions`,"GET",f.req.raw),T&&j){let[ue,X]=await Promise.all([t.findVersionByID({collection:y,versionId:T,tenantId:w}),t.findVersionByID({collection:y,versionId:j,tenantId:w})]);if(!ue||!X)return f.json({error:"Version not found"},404);let ye=A(ue.data,X.data);return f.json({diffs:ye})}let $=parseInt(I.searchParams.get("page")||"1"),z=Math.min(parseInt(I.searchParams.get("limit")||"10"),100),Q=await t.findVersions({collection:y,documentId:R,page:$,limit:z,tenantId:w});return f.json(Q)}catch(p){return console.error("[API] versions error:",p),f.json({error:p.message},500)}}),_.put(`${b}/:id/draft`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"update",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);let R=f.req.param("id"),I=await f.req.json(),T=wc(I),j=await t.findByID({collection:y,id:R,tenantId:w,draft:!0});if(!j)return f.json({error:"Document not found"},404);let $;I.delta?$={...j,...I.delta}:$=I.data??gd(I);let z=await t.updateLatestVersion({collection:y,documentId:R,data:$,status:"draft",tenantId:w});return p&&W?.createAuditLog({action:"document_update",userId:p.id,resource:y,resourceId:R,success:!0,metadata:{type:"draft_save"}}),f.json({data:z,message:"Draft saved successfully"})}catch(p){return f.json({error:p.message},500)}}),_.delete(`${b}/:id/draft`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"update",f.req.raw,p,w,k,U,F);return v.allowed?(p&&W?.createAuditLog({action:"document_update",userId:p.id,resource:y,resourceId:f.req.param("id"),success:!0,metadata:{type:"draft_discard"}}),f.json({message:"Draft discarded successfully"})):f.json({error:v.error},v.status||403)}catch(p){return f.json({error:p.message},500)}}),_.get(`${b}/:id`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=new URL(f.req.url),R=v.searchParams.get("draft"),I=v.searchParams.get("kyroToken"),T=!1;if(R==="true"&&I&&s)try{let X=await _o(I,s,"HS256");X&&X.type==="preview"&&X.collection===l.slug&&(T=!0);}catch(X){console.warn("Invalid preview token",X);}if(!T){let X=await Ie(l,"read",f.req.raw,p,w,k,U,F);if(!X.allowed)return f.json({error:X.error},X.status||403)}let j=f.req.param("id"),$=parseInt(v.searchParams.get("depth")||"0"),z=v.searchParams.get("select")?.split(",")||void 0,Q=R==="true"?!0:R==="false"?!1:!!p,ue=await t.findByID({collection:y,id:j,depth:$,tenantId:w,select:z,draft:Q});return !ue&&l.fields.some(X=>X.name==="slug")&&(ue=await t.findOne({collection:y,where:{slug:j},tenantId:w,draft:Q})),ue?(await chunkAK754S3T_cjs.a([ue],l.fields,t,e,1,$),f.json({data:chunkZOVH6QT5_cjs.a(ue)})):f.json({error:"Document not found"},404)}catch(p){return f.json({error:p.message},500)}}),_.post(`${b}/preview-url`,async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=await Ie(l,"read",f.req.raw,p,w);if(!k.allowed)return f.json({error:k.error||"Forbidden"},k.status||403);let v=await f.req.json().catch(()=>({})),R="";s&&(R=await wo({type:"preview",collection:l.slug,id:v.id,exp:Math.floor(Date.now()/1e3)+3600},s,"HS256"));let I="";if(l.admin?.preview){I=await l.admin.preview(v,{req:f.req.raw,token:R});try{let T=new URL(I,"http://localhost");T.searchParams.has("preview")||T.searchParams.set("preview","true"),!T.searchParams.has("kyroToken")&&R&&T.searchParams.set("kyroToken",R),I=I.startsWith("http")?T.toString():`${T.pathname}${T.search}`;}catch{}}else {let T="";try{let $=await t.findOne({collection:"_globals_site-settings",where:{}});$?.siteUrl&&(T=$.siteUrl);}catch{}if(!T)return f.json({error:"No site URL configured in settings, and no custom preview function defined for this collection."},400);T=T.replace(/\/$/,"");let j=v.slug||v.id||"";I=`${T}/${l.slug}/${j}?preview=true&kyroToken=${R}`;}return f.json({url:I})}catch(p){return f.json({error:p.message},500)}}),_.post(b,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"create",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);w&&t.setTenantContext({tenantId:w,userId:p?.id??"",role:p?.role,isSuperAdmin:p?.role==="super_admin"}),_c(W,k,b,"POST",f.req.raw);let I=await f.req.json();Jr(I,l.fields),Qr(l.fields,I);let T=f.req.raw;if(l.hooks?.beforeValidate)for(let X of l.hooks.beforeValidate){let ye=await X({collection:y,data:I,req:T,user:p,tenantId:w,operation:"create"});ye&&typeof ye=="object"&&!Array.isArray(ye)&&Object.assign(I,ye);}let j=e.getCreateZodSchema(y);try{I=j.parse(I);}catch(X){return f.json({error:`Validation failed: ${ra(X.errors)}`,details:X.errors},400)}l.tenantScoped&&w&&(I.tenantId=w);let $=l.versions?.drafts===!0,z=l.fields.find(X=>X.name==="status"),Q=z?.type==="select"&&Array.isArray(z.options)&&z.options.some(X=>X.value==="published");if($?I.status="draft":Q&&!I.status&&(I.status="published"),l.hooks?.beforeChange)for(let X of l.hooks.beforeChange){let ye=await X({collection:y,data:I,req:T,user:p,tenantId:w,operation:"create"});ye&&typeof ye=="object"&&!Array.isArray(ye)&&Object.assign(I,ye);}let ue=await t.create({collection:y,data:I,tenantId:w});if($&&await t.createVersion({collection:y,documentId:ue.id,data:I,status:"draft",createdBy:p?.id,changeDescription:"Created",tenantId:w}),l.hooks?.afterChange)for(let X of l.hooks.afterChange)await X({collection:y,doc:ue,data:I,req:T,user:p,tenantId:w,operation:"create"});return g&&g.trigger(Ja(y,"create"),{collection:y,operation:"create",data:ue,user:p?{id:p.id,email:p.email,role:p.role}:void 0,tenantId:w}).catch(X=>console.error("[Webhook] Failed to trigger:",X)),p&&W?.createAuditLog({action:"document_create",userId:p.id,resource:y,resourceId:ue.id,success:!0}),f.json({data:ue,message:"Created successfully"},201)}catch(p){return p.name==="ZodError"?f.json({error:`Validation failed: ${ra(p.errors)}`,details:p.errors},400):f.json({error:p.message},500)}}),_.patch(`${b}/:id`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"update",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);let R=f.req.param("id"),I=await f.req.json(),T=wc(I),j=await t.findByID({collection:y,id:R,tenantId:w,draft:!0});if(!j)return f.json({error:"Document not found"},404);if(T&&j.updatedAt&&T!==j.updatedAt)return f.json(yd(T,j),409);let $=Object.fromEntries(Object.entries(gd(I)).filter(([Xe,Je])=>Je!=="null"&&Je!==void 0));Jr($,l.fields),Qr(l.fields,$);let z=f.req.raw;if(l.hooks?.beforeValidate)for(let Xe of l.hooks.beforeValidate){let Je=await Xe({collection:y,data:$,originalDoc:j,req:z,user:p,tenantId:w,operation:"update"});Je&&typeof Je=="object"&&!Array.isArray(Je)&&Object.assign($,Je);}if($=e.getUpdateZodSchema(y).parse($),l.hooks?.beforeChange)for(let Xe of l.hooks.beforeChange){let Je=await Xe({collection:y,data:$,originalDoc:j,req:z,user:p,tenantId:w,operation:"update"});Je&&typeof Je=="object"&&!Array.isArray(Je)&&Object.assign($,Je);}let ue=f.req.header("X-Draft")==="true",X=l.versions?.drafts===!0,ye=f.req.query("autosave")==="true",Ze;if(X&&ue)await t.createVersion({collection:y,documentId:R,data:$,status:"draft",autosave:ye,createdBy:p?.id,changeDescription:ye?"Autosave":"Draft saved",tenantId:w});else if(X){let Xe=I.status==="draft"?"draft":"published";await t.update({collection:y,id:R,data:{...$,status:Xe},tenantId:w}),await t.createVersion({collection:y,documentId:R,data:{...$,status:Xe},status:Xe,createdBy:p?.id,changeDescription:Xe==="published"?"Published":"Unpublished",tenantId:w});}else await t.update({collection:y,id:R,data:$,tenantId:w});if(Ze=await t.findByID({collection:y,id:R,tenantId:w,draft:!0}),l.hooks?.afterChange)for(let Xe of l.hooks.afterChange)await Xe({collection:y,doc:Ze,data:$,originalDoc:j,req:z,user:p,tenantId:w,operation:"update"});return g&&!ye&&g.trigger(Ja(y,"update"),{collection:y,operation:"update",data:Ze,previousData:j,user:p?{id:p.id,email:p.email,role:p.role}:void 0,tenantId:w}).catch(Xe=>console.error("[Webhook] Failed to trigger:",Xe)),_c(W,k,`${b}/${R}`,"PATCH",f.req.raw),p&&W?.createAuditLog({action:"document_update",userId:p.id,resource:y,resourceId:R,success:!0}),f.json({data:Ze,message:X?"Draft saved":"Updated successfully"})}catch(p){return p.name==="ZodError"?(console.error(`[PATCH ${b}/:id] Validation failed:`,p.errors),f.json({error:`Validation failed: ${ra(p.errors)}`,details:p.errors},400)):(console.error(`[PATCH ${b}/:id] ERROR:`,p.message,"CAUSE:",p.cause?.message||p.cause,"QUERY:",p.query),f.json({error:p.message},500))}}),_.delete(`${b}/:id`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"delete",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);w&&t.setTenantContext({tenantId:w,userId:p?.id??"",role:p?.role,isSuperAdmin:p?.role==="super_admin"});let R=f.req.param("id"),I=f.req.raw,T=await t.findByID({collection:y,id:R,tenantId:w,draft:!0});if(!T)return f.json({error:"Document not found"},404);if(l.hooks?.beforeDelete)for(let $ of l.hooks.beforeDelete)await $({collection:y,doc:T,req:I,user:p,tenantId:w,operation:"delete"});let j=await t.delete({collection:y,id:R,tenantId:w});if(l.hooks?.afterDelete)for(let $ of l.hooks.afterDelete)await $({collection:y,doc:j,originalDoc:T,req:I,user:p,tenantId:w,operation:"delete"});return g&&g.trigger(Ja(y,"delete"),{collection:y,operation:"delete",data:j,previousData:T,user:p?{id:p.id,email:p.email,role:p.role}:void 0,tenantId:w}).catch($=>console.error("[Webhook] Failed to trigger:",$)),_c(W,k,`${b}/${R}`,"DELETE",f.req.raw),p&&W?.createAuditLog({action:"document_delete",userId:p.id,resource:y,resourceId:R,success:!0}),f.json({data:j,message:"Deleted successfully"})}catch(p){return console.error(`[DELETE] Error deleting ${y}:`,p),f.json({error:p.message||String(p)},500)}}),_.post(`${b}/:id/duplicate`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"create",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);let R=f.req.param("id"),I=await t.findByID({collection:y,id:R,tenantId:w,draft:!0});if(!I)return f.json({error:"Document not found"},404);let{id:T,createdAt:j,updatedAt:$,...z}=I;Us(l.fields,z);let Q=Date.now().toString(36);"slug"in z&&typeof z.slug=="string"&&(z.slug=`${z.slug||"document"}-copy-${Q}`),"title"in z&&typeof z.title=="string"?z.title=`${z.title||"Copy"} (Copy)`:"name"in z&&typeof z.name=="string"&&(z.name=`${z.name||"Copy"} (Copy)`);let ue=await t.create({collection:y,data:{...z,status:"draft"},tenantId:w});return f.json({data:ue,message:"Document duplicated successfully"})}catch(p){return console.error("[Duplicate] Error:",p),f.json({error:p.message||String(p)},500)}}),_.post(`${b}/:id/versions/:versionId/restore`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"update",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);let R=f.req.param("id"),I=f.req.param("versionId"),T=await t.findVersionByID({collection:y,versionId:I,tenantId:w});if(!T)return f.json({error:"Version not found"},404);let j=await t.update({collection:y,id:R,data:{...T.data,status:"draft"},tenantId:w});return f.json({data:j,message:"Version restored successfully"})}catch(p){return f.json({error:p.message},500)}}),_.post(`${b}/:id/versions`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"update",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);let R=await f.req.json(),{versionId:I,action:T}=R;if(T==="restore"&&I){let j=await t.findVersionByID({collection:y,versionId:I,tenantId:w});if(!j)return f.json({error:"Version not found"},404);let $=await t.update({collection:y,id:f.req.param("id"),data:{...j.data,status:"draft"},tenantId:w});return f.json({data:$,message:"Version restored successfully"})}return f.json({error:"Invalid action"},400)}catch(p){return f.json({error:p.message},500)}}),_.post(`${b}/:id/publish`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"update",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);w&&t.setTenantContext({tenantId:w,userId:p?.id??"",role:p?.role,isSuperAdmin:p?.role==="super_admin"});let R=f.req.param("id"),I=await f.req.json().catch(()=>({})),T=wc(I),j=await t.findByID({collection:y,id:R,tenantId:w,draft:!0});if(!j)return f.json({error:"Document not found"},404);if(T&&j.updatedAt&&T!==j.updatedAt)return f.json(yd(T,j),409);let $={status:"published"},z=j;if(l.versions?.drafts){let ue=await t.findVersions({collection:y,documentId:R,limit:1,sort:"-createdAt",tenantId:w});if(ue.docs.length>0){let X=ue.docs[0];z={...j,...X.data},$={...X.data,...$};}}let Q=await t.update({collection:y,id:R,data:$,tenantId:w});return l.versions?.drafts&&await t.createVersion({collection:y,documentId:R,data:{...z,status:"published"},status:"published",createdBy:p?.id,changeDescription:"Published",tenantId:w}),g&&g.trigger(Ja(y,"update"),{collection:y,operation:"update",data:Q,user:p?{id:p.id,email:p.email,role:p.role}:void 0,tenantId:w}).catch(ue=>console.error("[Webhook] Failed to trigger:",ue)),f.json({data:Q,message:"Published successfully"})}catch(p){return f.json({error:p.message},500)}}),_.post(`${b}/:id/unpublish`,async f=>{try{let{user:p,tenantId:w,apiKeyContext:k}=await V(f.req.raw,q,i,c),v=await Ie(l,"update",f.req.raw,p,w,k,U,F);if(!v.allowed)return f.json({error:v.error},v.status||403);let R=f.req.param("id");if(!await t.findByID({collection:y,id:R,tenantId:w,draft:!0}))return f.json({error:"Document not found"},404);let T=await t.update({collection:y,id:R,data:{status:"draft"},tenantId:w});return g&&g.trigger(Ja(y,"update"),{collection:y,operation:"update",data:T,user:p?{id:p.id,email:p.email,role:p.role}:void 0,tenantId:w}).catch(j=>console.error("[Webhook] Failed to trigger:",j)),f.json({data:T,message:"Unpublished successfully"})}catch(p){return f.json({error:p.message},500)}});}for(let l of e.getGlobals()){let y=l.slug,b=`/api/globals/${y}`;_.post(`${b}/dynamic-options/:fieldName`,async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=await Yt(l,"read",f.req.raw,p,w,U);if(!k.allowed)return f.json({error:k.error},k.status||403);let v=f.req.param("fieldName"),R=await f.req.json(),{data:I,siblingData:T}=R,j=hs(l.fields,v);if(!j)return f.json({error:"Field not found"},404);if(j.type!=="select")return f.json({error:"Field is not a select field"},400);let $=[];return typeof j.options=="function"?$=await j.options({data:I||{},siblingData:T||{}}):Array.isArray(j.options)&&($=j.options),f.json({options:$})}catch(p){return f.json({error:p.message},500)}}),_.get(b,async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=new URL(f.req.url),v=k.searchParams.get("kyroToken"),R=k.searchParams.get("draft"),I=!1;if(R==="true"&&v&&s)try{let Q=await _o(v,s,"HS256");Q&&Q.type==="preview"&&Q.collection===`_globals_${l.slug}`&&(I=!0);}catch(Q){console.warn("Invalid preview token",Q);}if(!I){let Q=await Yt(l,"read",f.req.raw,p,w,U);if(!Q.allowed)return f.json({error:Q.error},Q.status||403)}let T=R==="true"?!0:R==="false"?!1:!!p,j=parseInt(k.searchParams.get("depth")||"0"),z=(await t.find({collection:`_globals_${y}`,where:{},tenantId:w,draft:T,depth:j,limit:1})).docs[0];if(z&&j>0&&await chunkAK754S3T_cjs.a([z],l.fields,t,e,1,j),y==="storage-settings"&&(typeof globalThis.STORAGE_BUCKET<"u"||typeof f.env?.STORAGE_BUCKET<"u")&&(z?z.provider||(z.provider="cloudflare_r2"):z={id:y,provider:"cloudflare_r2"}),y==="system"){let Q=jB__default.default.randomBytes(32).toString("hex");z?z.appSecret||(await t.update({collection:`_globals_${y}`,id:y,data:{appSecret:Q},tenantId:w}),z.appSecret=Q):z=await t.create({collection:`_globals_${y}`,data:{id:y,appSecret:Q},tenantId:w});}return f.json({data:z||{}})}catch(p){return f.json({error:p.message},500)}});let A=async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=await Yt(l,"update",f.req.raw,p,w,U);if(!k.allowed)return f.json({error:k.error},k.status||403);let v=new URL(f.req.url),R=parseInt(v.searchParams.get("depth")||"0"),I=await f.req.json(),T=wc(I),j=gd(I),$=Object.fromEntries(Object.entries(j).filter(([Pt,Is])=>Is!==null&&Is!=="null"&&Is!==void 0));Jr($,l.fields),Qr(l.fields,$);let z=e.getUpdateZodSchema(y),Q;try{Q=z.parse($);}catch(Pt){return f.json({error:`Validation failed: ${ra(Pt.errors)}`,details:Pt.errors},400)}let ue=new Set(["id","createdAt","updatedAt","status","baseUpdatedAt","_baseUpdatedAt"]),X=Object.fromEntries(Object.entries(Q).filter(([Pt])=>!ue.has(Pt))),ye=`_globals_${y}`,Ze=await t.findOne({collection:ye,where:{},tenantId:w,draft:!0});if(Ze&&T&&Ze.updatedAt&&T!==Ze.updatedAt)return f.json(yd(T,Ze),409);let Xe=f.req.header("X-Draft")==="true",Je=l.versions?.drafts===!0,Wr=f.req.query("autosave")==="true",St;if(Je&&Xe)await t.createVersion({collection:ye,documentId:y,data:X,status:"draft",autosave:Wr,createdBy:p?.id,changeDescription:Wr?"Autosave":"Manual save",tenantId:w}),Ze?St=Ze:St=await t.create({collection:ye,data:{...X,id:y,status:"draft"},tenantId:w});else if(Je&&!Xe){let Pt="published";Ze?St=await t.update({collection:ye,id:y,data:{...X,status:Pt},tenantId:w}):St=await t.create({collection:ye,data:{...X,id:y,status:Pt},tenantId:w}),await t.createVersion({collection:ye,documentId:y,data:X,status:Pt,autosave:!1,createdBy:p?.id,changeDescription:"Published",tenantId:w});}else Ze?St=await t.update({collection:ye,id:y,data:X,tenantId:w}):St=await t.create({collection:ye,data:{...X,id:y},tenantId:w});if(y==="storage-settings"&&($t=null,Dr=null),y==="email-settings"){let Pt=await chunkVKXWJOWI_cjs.q.fromConfig(t);_e.email=Pt||void 0;}return y==="system"&&await chunkO4YE57OS_cjs.b(),p&&W?.createAuditLog({action:"settings_change",userId:p.id,resource:`global:${y}`,resourceId:y,success:!0}),St&&R>0&&await chunkAK754S3T_cjs.a([St],l.fields,t,e,1,R),f.json({data:St,message:"Updated successfully"})}catch(p){return console.error(`[API] Save global "${y}" failed:`,p),f.json({error:p.message||"Save failed",stack:process.env.NODE_ENV==="development"?p.stack:void 0},500)}};_.post(b,A),_.patch(b,A),_.post(`${b}/preview-url`,async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=await Yt(l,"read",f.req.raw,p,w);if(!k.allowed)return f.json({error:k.error||"Forbidden"},k.status||403);let v=await f.req.json().catch(()=>({})),R="";s&&(R=await wo({type:"preview",collection:`_globals_${l.slug}`,exp:Math.floor(Date.now()/1e3)+3600},s,"HS256"));let I="";if(l.admin?.preview)I=await l.admin.preview(v,{req:f.req.raw,token:R});else {let T="";try{let j=await t.findOne({collection:"_globals_site-settings",where:{}});j?.siteUrl&&(T=j.siteUrl);}catch{}if(!T)return f.json({error:"No site URL configured in settings, and no custom preview function defined."},400);T=T.replace(/\/$/,""),I=`${T}/?preview=true&kyroToken=${R}`;}return f.json({url:I})}catch(p){return f.json({error:p.message},500)}}),_.post(`${b}/publish`,async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=await Yt(l,"update",f.req.raw,p,w,U);if(!k.allowed)return f.json({error:k.error},403);let v=`_globals_${y}`,R=await t.findOne({collection:v,where:{},tenantId:w,draft:!0});if(!R)return f.json({error:"Global not found"},404);let I={status:"published"},T=R;if(l.versions?.drafts){let $=await t.findVersions({collection:v,documentId:y,limit:1,sort:"-createdAt",tenantId:w});$.docs.length>0&&(T={...R,...$.docs[0].data},I={...$.docs[0].data,...I});}let j=await t.update({collection:v,id:y,data:I,tenantId:w});return l.versions?.drafts&&await t.createVersion({collection:v,documentId:y,data:{...T,status:"published"},status:"published",createdBy:p?.id,changeDescription:"Published",tenantId:w}),f.json({data:j,message:"Published successfully"})}catch(p){return f.json({error:p.message},500)}}),_.post(`${b}/unpublish`,async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=await Yt(l,"update",f.req.raw,p,w,U);if(!k.allowed)return f.json({error:k.error},403);let v=await t.update({collection:`_globals_${y}`,id:y,data:{status:"draft"},tenantId:w});return f.json({data:v,message:"Unpublished successfully"})}catch(p){return f.json({error:p.message},500)}}),_.get(`${b}/versions`,async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=await Yt(l,"read",f.req.raw,p,w,U);if(!k.allowed)return f.json({error:k.error},403);let v=parseInt(f.req.query("limit")||"10"),R=parseInt(f.req.query("page")||"1"),I=await t.findVersions({collection:`_globals_${y}`,documentId:y,limit:v,page:R,tenantId:w});return f.json(I)}catch(p){return f.json({error:p.message},500)}}),_.get(`${b}/versions/:versionId`,async f=>{try{let p=f.req.param("versionId"),{user:w,tenantId:k}=await V(f.req.raw,q,i,c),v=await Yt(l,"read",f.req.raw,w,k,U);if(!v.allowed)return f.json({error:v.error},403);let R=await t.findVersionByID({collection:`_globals_${y}`,versionId:p,tenantId:k});return R?f.json({data:R}):f.json({error:"Version not found"},404)}catch(p){return f.json({error:p.message},500)}}),_.post(`${b}/versions/:versionId/restore`,async f=>{try{let p=f.req.param("versionId"),{user:w,tenantId:k}=await V(f.req.raw,q,i,c),v=await Yt(l,"update",f.req.raw,w,k,U);if(!v.allowed)return f.json({error:v.error},403);let R=`_globals_${y}`,I=await t.findVersionByID({collection:R,versionId:p,tenantId:k});if(!I)return f.json({error:"Version not found"},404);let T=await t.update({collection:R,id:y,data:{...I.data,status:"draft"},tenantId:k});return f.json({data:T,message:"Version restored successfully"})}catch(p){return f.json({error:p.message},500)}}),y==="email-settings"&&_.post(`${b}/test`,async f=>{try{let{user:p,tenantId:w}=await V(f.req.raw,q,i,c),k=await Yt(l,"update",f.req.raw,p,w,U);if(!k.allowed)return f.json({error:k.error},k.status||403);let v=await f.req.json(),R={provider:v.provider,from:v.fromEmail||v.from,fromName:v.fromName,replyTo:v.replyTo,smtp:v.smtp?{host:v.smtp.host,port:v.smtp.port,secure:v.smtp.secure,auth:{user:v.smtp.username||v.smtp.user,pass:v.smtp.password||v.smtp.pass}}:void 0,resend:v.resend,sendgrid:v.sendgrid,mailgun:v.mailgun,ses:v.ses},I=new chunkVKXWJOWI_cjs.q(R),T=v.email||v.testEmail||v.testEmailSection&&v.testEmailSection.testEmail;if(!T)return f.json({error:"No test recipient email provided"},400);let j=v.provider?v.provider.charAt(0).toUpperCase()+v.provider.slice(1):"SMTP",$=v.fromName?`${v.fromName} <${v.fromEmail||v.from||"default"}>`:v.fromEmail||v.from||"Configured Sender",z=new Date().toUTCString();return await I.send({to:T,subject:"Kyro CMS \u2014 Email Connection Test",html:`<!DOCTYPE html>
|
|
120
120
|
<html lang="en">
|
|
121
121
|
<head>
|
|
122
122
|
<meta charset="UTF-8">
|