gemi 0.29.2 → 0.29.3

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.
@@ -24,6 +24,11 @@ export declare class AuthenticationServiceContainer extends ServiceContainer {
24
24
  email: string;
25
25
  pin: string;
26
26
  token: string;
27
+ } | {
28
+ user?: undefined;
29
+ email?: undefined;
30
+ pin?: undefined;
31
+ token?: undefined;
27
32
  }>;
28
33
  }
29
34
  //# sourceMappingURL=AuthenticationServiceContainer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthenticationServiceContainer.d.ts","sourceRoot":"","sources":["../../auth/AuthenticationServiceContainer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAErF,qBAAa,8BAA+B,SAAQ,gBAAgB;IAG/C,QAAQ,EAAE,6BAA6B;IAF1D,MAAM,CAAC,KAAK,SAAoC;gBAE7B,QAAQ,EAAE,6BAA6B;IAIpD,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAa3C,iBAAiB,CAAC,KAAK,EAAE,MAAM;IAE/B,aAAa,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAI1D,YAAY,CAAC,KAAK,EAAE,MAAM;IAwB1B,uBAAuB,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE;IAkE5D,qBAAqB,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE;IA2D1D,oBAAoB,CAAC,KAAK,EAAE,MAAM;;;;;;CA8BzC"}
1
+ {"version":3,"file":"AuthenticationServiceContainer.d.ts","sourceRoot":"","sources":["../../auth/AuthenticationServiceContainer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAErF,qBAAa,8BAA+B,SAAQ,gBAAgB;IAG/C,QAAQ,EAAE,6BAA6B;IAF1D,MAAM,CAAC,KAAK,SAAoC;gBAE7B,QAAQ,EAAE,6BAA6B;IAIpD,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAa3C,iBAAiB,CAAC,KAAK,EAAE,MAAM;IAE/B,aAAa,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAI1D,YAAY,CAAC,KAAK,EAAE,MAAM;IAwB1B,uBAAuB,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE;IAkE5D,qBAAqB,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE;IA2D1D,oBAAoB,CAAC,KAAK,EAAE,MAAM;;;;;;;;;;;CAgCzC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AuthenticationServiceProvider.d.ts","sourceRoot":"","sources":["../../auth/AuthenticationServiceProvider.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,KAAK,EACV,sBAAsB,EAEtB,IAAI,EACL,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAknB3D,cAAM,eAAgB,SAAQ,UAAU;IACtC,MAAM;;;;;;;MAMJ;CACH;AAED,qBAAa,cAAe,SAAQ,UAAU;IAC5C,MAAM;;;;;;;;;MAMJ;CACH;AAED,qBAAa,aAAc,SAAQ,SAAS;IAC1C,WAAW,WAAqB;IAChC,MAAM;;mBApoBG,MAAM;sBACH,MAAM;;;;;;;;;;;;;mBADT,MAAM;sBACH,MAAM;;;;;;;;;;;;;;;mBA6CT,MAAM;;;sBAcH,MAAM;mBACT,MAAM;;;yBA8awB,MAAM;yBAAe,MAAM;;;mBArZjB,MAAM;;;;;;mBAygBG,MAAM;;;;;mBAvab,MAAM;iBAAO,MAAM;;;;;mBAnCrC,MAAM;iBAAO,MAAM;;MA4flD;CACH;AAED,qBAAa,6BAA8B,SAAQ,eAAe;IAChE,QAAQ,SAAW;IACnB,WAAW,UAAQ;IACnB,YAAY,SAAgB;IAE5B,qBAAqB,SAAM;IAC3B,6BAA6B,SAAc;IAE3C,aAAa,EAAoB,GAAG,CAAC;IAGrC,OAAO,EAAE,sBAAsB,CAAsB;IAErD,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAM;IAEnD,IAAI;IAEE,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhE,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/C,2BAA2B,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAM9D,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM;IASvE,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM;IAM/D,aAAa,CAAC,CAAC,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG;IAI3D,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IACxE,QAAQ,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAC7C,SAAS,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAC9C,gBAAgB,CACd,KAAK,EAAE,GAAG,EACV,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IACvB,eAAe,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IACpD,kBAAkB,CAChB,QAAQ,EAAE,GAAG,EACb,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAGxB"}
1
+ {"version":3,"file":"AuthenticationServiceProvider.d.ts","sourceRoot":"","sources":["../../auth/AuthenticationServiceProvider.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,KAAK,EACV,sBAAsB,EAEtB,IAAI,EACL,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAqnB3D,cAAM,eAAgB,SAAQ,UAAU;IACtC,MAAM;;;;;;;MAMJ;CACH;AAED,qBAAa,cAAe,SAAQ,UAAU;IAC5C,MAAM;;;;;;;;;MAMJ;CACH;AAED,qBAAa,aAAc,SAAQ,SAAS;IAC1C,WAAW,WAAqB;IAChC,MAAM;;mBAvoBG,MAAM;sBACH,MAAM;;;;;;;;;;;;;mBADT,MAAM;sBACH,MAAM;;;;;;;;;;;;;;;mBA6CT,MAAM;;;sBAcH,MAAM;mBACT,MAAM;;;yBA8awB,MAAM;yBAAe,MAAM;;;mBArZjB,MAAM;;;;;;mBAygBG,MAAM;;;;;mBAvab,MAAM;iBAAO,MAAM;;;;;mBAnCrC,MAAM;iBAAO,MAAM;;MA+flD;CACH;AAED,qBAAa,6BAA8B,SAAQ,eAAe;IAChE,QAAQ,SAAW;IACnB,WAAW,UAAQ;IACnB,YAAY,SAAgB;IAE5B,qBAAqB,SAAM;IAC3B,6BAA6B,SAAc;IAE3C,aAAa,EAAoB,GAAG,CAAC;IAGrC,OAAO,EAAE,sBAAsB,CAAsB;IAErD,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAM;IAEnD,IAAI;IAEE,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhE,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/C,2BAA2B,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAM9D,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM;IASvE,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM;IAM/D,aAAa,CAAC,CAAC,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG;IAI3D,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IACxE,QAAQ,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAC7C,SAAS,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAC9C,gBAAgB,CACd,KAAK,EAAE,GAAG,EACV,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IACvB,eAAe,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IACpD,kBAAkB,CAChB,QAAQ,EAAE,GAAG,EACb,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAGxB"}
@@ -9,6 +9,11 @@ export declare class Auth {
9
9
  email: string;
10
10
  pin: string;
11
11
  token: string;
12
+ } | {
13
+ user?: undefined;
14
+ email?: undefined;
15
+ pin?: undefined;
16
+ token?: undefined;
12
17
  }>;
13
18
  }
14
19
  //# sourceMappingURL=Auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Auth.d.ts","sourceRoot":"","sources":["../../facades/Auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AASnD,qBAAa,IAAI;WACF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;WAmCrB,KAAK,CAChB,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAC7C,OAAO,CAAC,IAAI,CAAC;WAgBH,SAAS,CACpB,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAC7C,OAAO,CAAC,OAAO,CAAC;WAaN,YAAY,CAAC,KAAK,EAAE,MAAM;WAK1B,eAAe,CAAC,KAAK,EAAE,MAAM;;;;;;CAI3C"}
1
+ {"version":3,"file":"Auth.d.ts","sourceRoot":"","sources":["../../facades/Auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AASnD,qBAAa,IAAI;WACF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;WAmCrB,KAAK,CAChB,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAC7C,OAAO,CAAC,IAAI,CAAC;WAgBH,SAAS,CACpB,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAC7C,OAAO,CAAC,OAAO,CAAC;WAaN,YAAY,CAAC,KAAK,EAAE,MAAM;WAK1B,eAAe,CAAC,KAAK,EAAE,MAAM;;;;;;;;;;;CAI3C"}
@@ -8,7 +8,7 @@ import{A as c4,B as O8,C as j0,q as i4,r as J9,s as q1,t as J6,u as a0,v as q0,w
8
8
  * Copyright(c) 2015 Andreas Lubbe
9
9
  * Copyright(c) 2015 Tiancheng "Timothy" Gu
10
10
  * MIT Licensed
11
- */var nZ=/["'&<>]/;N7.exports=sZ;function sZ(J){var K=""+J,Y=nZ.exec(K);if(!Y)return K;var X,Z="",Q=0,W=0;for(Q=Y.index;Q<K.length;Q++){switch(K.charCodeAt(Q)){case 34:X="&quot;";break;case 38:X="&amp;";break;case 39:X="&#39;";break;case 60:X="&lt;";break;case 62:X="&gt;";break;default:continue}if(W!==Q)Z+=K.substring(W,Q);W=Q+1,Z+=X}return W!==Q?Z+K.substring(W,Q):Z}});import{AsyncLocalStorage as rK}from"async_hooks";class H8 extends x0{service;static _name="BroadcastingServiceContainer";publishCb;context=new rK;constructor(J){super();this.service=J}onPublish(J){this.publishCb=J}publish(...J){let[K,Y,X]=J;this.publishCb(K,Y,X)}async handleMessage(J,K){let Y=JSON.parse(K);if(Y.type==="subscribe"){let X=Object.entries(this.service.channels).sort(([Z],[Q])=>Z.length-Q.length);for(let[Z,Q]of X){let W=new URLPattern({pathname:Z});if(W.test({pathname:Y.topic})){let w=W.exec({pathname:Y.topic})?.pathname.groups,H=new Q;if(await H.subscribe.call(H,w))J.subscribe(Y.topic);break}}}if(Y.type==="broadcast")J.publish(Y.topic,JSON.stringify({topic:Y.topic,data:Y.payload}));if(Y.type==="unsubscribe")J.unsubscribe(Y.topic)}run(J,K){let Y=J.get("Cookie"),X=new Map;if(Y){let Z=Y.split(";");for(let Q of Z){let[W,w]=Q.split("=");X.set(W.trim(),w.trim())}}this.context.run({headers:J,cookies:X},K)}}class k1{static async user(){let J=q0.getStore(),K=H8.use().context.getStore(),Y="",X="";if(J?.req)Y=J.req.cookies.get("access_token"),X=J.req.headers.get("User-Agent");if(K?.cookies)X=K.headers.get("User-Agent"),Y=K.cookies.get("access_token");let Z=J?.user;if(!Z)Z=(await j0.use().getSession(Y,X))?.user,J?.setUser(Z);if(Z)return Z;throw new c4}static async guard(J){let K=await k1.user();if(!K)throw new a8;try{if(!await J(K))throw new a8}catch(Y){throw new a8}}static async guardSafe(J){let K=await k1.user();if(!K)return!1;try{return await J(K)}catch(Y){return!1}}static async authenticate(J){return await j0.use().authenticate(J)}static async createMagicLink(J){return await j0.use().createMagicLinkToken(J)}}class w8{static getSupportedLocales(){return C0.use().service.supportedLocales}static getDefaultLocale(){return C0.use().service.defaultLocale}static locale(){let J=C0.use(),K=q0.getStore();if(K)return J.detectLocale(K.req);return J.service.defaultLocale}static setLocale(J=w8.locale()){let K=C0.use(),Y=J;if(!K.service.supportedLocales.includes(J))Y=K.service.defaultLocale;return q0.getStore().setCookie("i18n-locale",Y,{expires:new Date(Date.now()+31536000000),secure:!1,httpOnly:!1}),Y}}import nK from"sharp";import{Buffer as sK}from"buffer";class N8 extends x0{service;static _name="FileStorageServiceContainer";constructor(J){super();this.service=J}}class u4{static async put(J){return N8.use().service.driver.put(J)}static async metadata(J){let K=sK.from(await J.arrayBuffer());try{return await nK(K).metadata()}catch{return{}}}static async fetch(J){return N8.use().service.driver.fetch(J)}static list(J){return N8.use().service.driver.list(J)}static delete(){}}function p4(J){return Object.fromEntries(Object.entries(J).filter(([,K])=>{return K!==null&&K!==void 0}))}class n1 extends Error{constructor(){super("Adapter not found");this.name="AdapterNotFound"}}class t5{createSession(){throw new n1}deleteSession(){throw new n1}findSession(){throw new n1}findUserByEmailAddress(){throw new n1}updateSession(){throw new n1}createUser(){throw new n1}}class e5 extends W0{schema={email:{required:"Email is required",string:"Invalid email",email:"Invalid email"},password:{required:"Password is required"}}}class n4 extends W0{schema={name:{string:"Invalid name",required:"Name is required","min:2":"Name must be at least 3 characters"},email:{string:"Invalid email",required:"Email is required",email:"Invalid email"},password:{"min:8":"Password must be at least 9 characters"}}}class s4 extends W0{schema={email:{required:"Email is required",email:"Invalid email"}}}class a4 extends W0{schema={password:{required:"Password is required",password:"Invalid password"}}}class b0 extends i4{provider=j0.use()?.provider;async me(){let J=await k1.user();if(!J)throw new r4;return J}async verifyEmail(J=new W0){let K=await J.input(),Y=j0.use()?.provider,X=await Y.adapter.findUserByVerificationToken(K.get("token"));if(!X)return{email:null};if(await Y.adapter.verifyUser(X.email),X)return{email:X.email};return{email:null}}async signInWithMagicLink(J=new W0){let K=j0.use(),Y=K.provider,X=J.search.get("token"),Z=decodeURIComponent(J.search.get("email")).toLowerCase().trim(),Q=null;try{Q=await Y.adapter.findUserMagicLinkToken({email:Z,token:X})}catch(w){return console.log(w),{error:JSON.stringify(w)}}if(!Q)return{error:"Invalid token"};await Y.adapter.verifyUser(Z),await Y.adapter.deleteMagicLinkToken(Z);let W=await K.createOrUpdateSession({email:Z});return J.ctx().setCookie("access_token",W.token,{expires:W.expiresAt,secure:!0,httpOnly:!0}),await Y.onSignIn(W),{session:W}}async signInWithPinV2(J=new W0){let K=j0.use(),Y=K.provider,X=await J.input(),{email:Z,pin:Q}=X.toJSON(),W=Z.toLowerCase().trim();if(!await Y.adapter.findUserMagicLinkToken({email:W,pin:Q}))throw new a0({pin:["Invalid pin"]});await Y.adapter.deleteMagicLinkToken(W),await Y.adapter.verifyUser(W);let H=await K.createOrUpdateSessionV2({email:W});return J.ctx().setCookie("access_token",H.token,{expires:H.expiresAt,secure:!0,httpOnly:!0}),await Y.onSignIn(H),H}async signInWithPin(J=new W0){let K=j0.use(),Y=K.provider,X=await J.input(),{email:Z,pin:Q}=X.toJSON(),W=Z.toLowerCase().trim();if(!await Y.adapter.findUserMagicLinkToken({email:W,pin:Q}))throw new a0({pin:["Invalid pin"]});await Y.adapter.deleteMagicLinkToken(W),await Y.adapter.verifyUser(W);let H=await K.createOrUpdateSession({email:W});return J.ctx().setCookie("access_token",H.token,{expires:H.expiresAt,secure:!0,httpOnly:!0}),await Y.onSignIn(H),{session:H}}async signInV2(J=new e5){let K=await J.input(),{email:Y,password:X}=K.toJSON(),Z=Y.toLowerCase().trim(),Q=j0.use().provider,W=await Q.adapter.findUserByEmailAddress(Z,Q.verifyEmail);if(!W)throw new a0({invalid_credentials:["Invalid credentials"]});if(!await Q.verifyPassword(X,W.password))throw new a0({invalid_credentials:["Invalid credentials"]});let H=await j0.use().createOrUpdateSessionV2({email:W.email,id:W.id});J.ctx().setCookie("access_token",H.token,{expires:H.expiresAt,secure:!0,httpOnly:!0}),await Q.onSignIn(W);let{password:z,...U}=W;return U}async signIn(J=new e5){let K=await J.input(),{email:Y,password:X}=K.toJSON(),Z=Y.toLowerCase().trim(),Q=j0.use().provider,W=await Q.adapter.findUserByEmailAddress(Z,Q.verifyEmail);if(!W)throw new a0({invalid_credentials:["Invalid credentials"]});if(!await Q.verifyPassword(X,W.password))throw new a0({invalid_credentials:["Invalid credentials"]});let H=await j0.use().createOrUpdateSession({email:W.email,id:W.id});J.ctx().setCookie("access_token",H.token,{expires:H.expiresAt,secure:!0,httpOnly:!0}),await Q.onSignIn(W);let{password:z,...U}=W;return U}async signUp(){let J=j0.use().provider,K=new J.signUpRequest,Y=await K.input(),{email:X,password:Z,name:Q,invitationId:W,metadata:w={}}=Y.toJSON(),H=X.toLowerCase().trim();if(await J.adapter.findUserByEmailAddress(H,!1))throw new a0({email:["Email address already exists"]});let U=await J.hashPassword(Z),V=C0.use().detectLocale(K),$;if(W){if($=await J.adapter.findInvitation(W,H),$)await J.adapter.deleteInvitationById(W)}let B,q;if($)B=await J.adapter.createUser({email:H,name:Q,password:U,emailVerifiedAt:new Date,locale:V}),await J.adapter.createAccount({organizationId:$.organizationId,userId:B.id,organizationRole:$.role});else q=await J.generateEmailVerificationToken(H),B=await J.adapter.createUser({email:H,name:Q,password:U,verificationToken:q,locale:V});return await J.onSignUp(B,q),B}async signOut(J=new W0){let K=J.cookies.get("access_token"),Y=await k1.user(),X=j0.use().provider;return await X.adapter.deleteSession({token:K}),J.ctx().setCookie("access_token","",{expires:new Date(0),secure:!0,httpOnly:!0}),await X.onSignOut(Y),{}}async forgotPassword(J=new s4){let Y=(await J.input()).get("email").toLowerCase().trim(),X=j0.use().provider,Z=await X.adapter.findUserByEmailAddress(Y,X.verifyEmail);if(!Z)return{};let Q=await X.generateForgotPasswordToken(Z);return await X.adapter.createPasswordResetToken({user:Z,token:Q}),await X.onForgotPassword(Z,Q),{}}async resetPassword(J=new a4){let K=j0.use().provider,Y=await J.input(),{password:X,token:Z}=Y.toJSON(),Q=await K.adapter.findPasswordResetToken({token:Z});if(!Q)throw new a0({token:["Invalid token"]});if(O8.Instant.from(Q.createdAt.toISOString()).add({hours:24}).until(O8.Now.instant()).sign>=0)throw new a0({token:["Token expired"]});await K.adapter.deletePasswordResetToken({token:Z});let w=await K.adapter.findUserByEmailAddress(Q.user.email,K.verifyEmail);if(!w)throw new a0({email:["User not found"]});let H=await K.hashPassword(X);return await K.adapter.updateUserPassword({id:w.id,password:H}),await K.adapter.deleteAllUserSessions(w.id),await K.onResetPassword(w),{}}async changePassword(J=new W0){let K=j0.use().provider,Y=await k1.user(),X=await J.input(),{oldPassword:Z,newPassword:Q}=X.toJSON(),{password:W}=await K.adapter.findUserByEmailAddress(Y.email,K.verifyEmail);if(!await K.verifyPassword(Z,W))throw new a0({oldPassword:["Incorrect password"]});let H=await K.hashPassword(Q);return await K.adapter.updateUserPassword({id:Y.id,password:H}),await K.adapter.deleteAllUserSessions(Y.id),{}}async oauthRedirect(J=new W0){let{provider:K}=J.params,Y=j0.use().provider.oauthProviders[K];if(!Y)throw Error(`Invalid provider: ${K}`);return{destination:await Y.getRedirectUrl(J)}}async oauthCallback(J=new W0){let{provider:K}=J.params,Y=j0.use(),X=Y.provider,Z=X.oauthProviders[K],{email:Q,name:W,username:w,providerId:H}=await Z.onCallback(J);if(!w&&!Q)throw Error("Email or username is required");let z=Q??`${w}:${K}`,U=await X.adapter.findUserByEmailAddress(z,!1),V=C0.use().detectLocale(J),$="signin";if(!U)$="signup",U=await X.adapter.createUser({email:z,name:W,locale:V,emailVerifiedAt:new Date}),await X.adapter.createSocialAccount({provider:K,userId:U.id,email:z,username:w,providerId:H,expiresAt:new Date,accessToken:"",refreshToken:""});let B=await Y.createOrUpdateSession({email:U.email,id:U.id});if(J.ctx().setCookie("access_token",B.token,{secure:!0,httpOnly:!0,expires:B.expiresAt}),$==="signup"){let q=await X.generateMagicLinkToken(Q);await X.onSignUp(U,q)}else await X.onSignIn(U);return{session:B}}async createMagicLinkToken(J=new W0){let Y=(await J.input()).get("email").toLowerCase().trim(),X=j0.use(),Z=X.provider,{user:Q,pin:W,token:w}=await X.createMagicLinkToken(Y);return await Z.onMagicLinkCreated(Q,{email:Y,pin:W,token:w}),{email:Y}}}class t4 extends J6{routes={"/:provider":this.redirect([b0,"oauthRedirect"]),"/:provider/callback":this.view("auth/OauthCallback",[b0,"oauthCallback"])}}class K6 extends J6{routes={"/sign-in/magic-link":this.view("auth/MagicLinkSignIn",[b0,"signInWithMagicLink"]),"/oauth":t4}}class Y6 extends q1{middlewares=["cache:private"];routes={"/sign-in":this.post(b0,"signIn"),"/sign-in-v2":this.post(b0,"signInV2"),"/sign-up":this.post(b0,"signUp"),"/sign-out":this.post(b0,"signOut"),"/forgot-password":this.post(b0,"forgotPassword"),"/reset-password":this.post(b0,"resetPassword"),"/change-password":this.post(b0,"changePassword"),"/verify-email":this.post(b0,"verifyEmail"),"/me":this.get(b0,"me").middleware(["auth"]),"/magic-link":this.post(b0,"createMagicLinkToken"),"/sign-in-with-pin":this.post(b0,"signInWithPin"),"/sign-in-with-pin-v2":this.post(b0,"signInWithPinV2")}}class aK extends o4{basePath="/auth";verifyEmail=!0;redirectPath="/dashboard";sessionExpiresInHours=24;sessionAbsoluteExpiresInHours=672;signUpRequest=n4;adapter=new t5;oauthProviders={};boot(){}async verifyPassword(J,K){return await Bun.password.verify(J,K)}async hashPassword(J){return await Bun.password.hash(J)}async generateForgotPasswordToken(J){let K=new Bun.CryptoHasher("sha256");return K.update(`${J.email}${Date.now()}`),K.digest("hex")}generateEmailVerificationToken(J){if(!this.verifyEmail)return"";let K=new Bun.CryptoHasher("sha256");return K.update(`${J}${Date.now()}`),K.digest("hex")}generateMagicLinkToken(J){let K=new Bun.CryptoHasher("sha256");return K.update(`${J}${Date.now()}`),K.digest("hex")}extendSession(J){return{}}onSignUp(J,K){}onSignIn(J){}onSignOut(J){}onForgotPassword(J,K){}onResetPassword(J){}onMagicLinkCreated(J,K){return}}class X6 extends q1{middlewares=["cache:private,0,no-store"];routes={"/set-locale/:locale":this.get(()=>{let J=new W0;return J.ctx().setCookie("i18n-locale",J.params.locale),{}}),"/translations/:locale/:scope*":this.get(async()=>{let J=new W0,K=`/${J.params.scope??""}`,X=J.params.locale??C0.use().detectLocale(J),Z=C0.use().getPageTranslations(X,K);return J.ctx().setCookie("i18n-locale",X,{expires:new Date(Date.now()+31536000000)}),{[X]:Z}})}}class Z6 extends q1{routes={"/resize":this.file(async()=>{let J=new W0,K=new URL(J.rawRequest.url),Y=K.searchParams.get("url"),X=Number(K.searchParams.get("w")),Z=Number(K.searchParams.get("h")),Q=K.searchParams.get("fit")??"cover",W=Number(K.searchParams.get("q"));if(!Y)return new Response(JSON.stringify({error:"url query parameter is required"}),{headers:{"Content-Type":"application/json"},status:404});let H=`${Y.startsWith("http")?"":`http://localhost:${process.env.PORT||5173}`}${Y}`,z=await fetch(H);if(!z.ok)return new Response(JSON.stringify({error:"Image not found",info:H}),{headers:{"Content-Type":"application/json"},status:404});let U=Buffer.from(await z.arrayBuffer()),V=await e4.use().service.driver.resize(U,{height:Z,width:X,fit:Q,quality:W});return z.headers.delete("Content-Type"),z.headers.delete("Content-Length"),new Response(V,{headers:{"Content-Type":"image/webp","Content-Length":`${V.byteLength}`,...z.headers.toJSON()}})})}}class e4 extends x0{service;static _name="ImageOptimizationServiceContainer";constructor(J){super();this.service=J}}import{mkdir as Q6,exists as W6,readdir as tK}from"fs/promises";class t0 extends x0{service;static _name="LoggingServiceContainer";writer;isReady=!1;logsDirPath=`${process.env.ROOT_DIR}/storage/logs`;flushTimeout;fileSize=0;writerSize=0;isCreatingFile=!1;currentLogFilePath;constructor(J){super();this.service=J;this.boot().then(()=>{this.isReady=!0})}async boot(){if(!process.env.ROOT_DIR)return;if(!await W6(`${process.env.ROOT_DIR}/storage`))await Q6(`${process.env.ROOT_DIR}/storage`);if(!await W6(this.logsDirPath))await Q6(this.logsDirPath);this.newLogFile()}async newLogFile(){if(!await W6(this.logsDirPath))await Q6(this.logsDirPath);if(this.isCreatingFile=!0,this.currentLogFilePath){this.writer.flush(),this.writer.end(),this.writer=null;let Y=new File([await Bun.file(this.currentLogFilePath).arrayBuffer()],this.currentLogFilePath.split("/").pop(),{type:"text/plain"});this.service.onLogFileClosed(Y),this.fileSize=0,this.writerSize=0}let K=(await tK(this.logsDirPath)).sort().reverse()[0];if(K){let Y=Bun.file(`${this.logsDirPath}/${K}`);if(Y.size<this.service.maxFileSize)this.currentLogFilePath=`${this.logsDirPath}/${K}`,this.writer=Y.writer(),this.writer.write(await Y.text()),this.writer.write(`
11
+ */var nZ=/["'&<>]/;N7.exports=sZ;function sZ(J){var K=""+J,Y=nZ.exec(K);if(!Y)return K;var X,Z="",Q=0,W=0;for(Q=Y.index;Q<K.length;Q++){switch(K.charCodeAt(Q)){case 34:X="&quot;";break;case 38:X="&amp;";break;case 39:X="&#39;";break;case 60:X="&lt;";break;case 62:X="&gt;";break;default:continue}if(W!==Q)Z+=K.substring(W,Q);W=Q+1,Z+=X}return W!==Q?Z+K.substring(W,Q):Z}});import{AsyncLocalStorage as rK}from"async_hooks";class H8 extends x0{service;static _name="BroadcastingServiceContainer";publishCb;context=new rK;constructor(J){super();this.service=J}onPublish(J){this.publishCb=J}publish(...J){let[K,Y,X]=J;this.publishCb(K,Y,X)}async handleMessage(J,K){let Y=JSON.parse(K);if(Y.type==="subscribe"){let X=Object.entries(this.service.channels).sort(([Z],[Q])=>Z.length-Q.length);for(let[Z,Q]of X){let W=new URLPattern({pathname:Z});if(W.test({pathname:Y.topic})){let w=W.exec({pathname:Y.topic})?.pathname.groups,H=new Q;if(await H.subscribe.call(H,w))J.subscribe(Y.topic);break}}}if(Y.type==="broadcast")J.publish(Y.topic,JSON.stringify({topic:Y.topic,data:Y.payload}));if(Y.type==="unsubscribe")J.unsubscribe(Y.topic)}run(J,K){let Y=J.get("Cookie"),X=new Map;if(Y){let Z=Y.split(";");for(let Q of Z){let[W,w]=Q.split("=");X.set(W.trim(),w.trim())}}this.context.run({headers:J,cookies:X},K)}}class k1{static async user(){let J=q0.getStore(),K=H8.use().context.getStore(),Y="",X="";if(J?.req)Y=J.req.cookies.get("access_token"),X=J.req.headers.get("User-Agent");if(K?.cookies)X=K.headers.get("User-Agent"),Y=K.cookies.get("access_token");let Z=J?.user;if(!Z)Z=(await j0.use().getSession(Y,X))?.user,J?.setUser(Z);if(Z)return Z;throw new c4}static async guard(J){let K=await k1.user();if(!K)throw new a8;try{if(!await J(K))throw new a8}catch(Y){throw new a8}}static async guardSafe(J){let K=await k1.user();if(!K)return!1;try{return await J(K)}catch(Y){return!1}}static async authenticate(J){return await j0.use().authenticate(J)}static async createMagicLink(J){return await j0.use().createMagicLinkToken(J)}}class w8{static getSupportedLocales(){return C0.use().service.supportedLocales}static getDefaultLocale(){return C0.use().service.defaultLocale}static locale(){let J=C0.use(),K=q0.getStore();if(K)return J.detectLocale(K.req);return J.service.defaultLocale}static setLocale(J=w8.locale()){let K=C0.use(),Y=J;if(!K.service.supportedLocales.includes(J))Y=K.service.defaultLocale;return q0.getStore().setCookie("i18n-locale",Y,{expires:new Date(Date.now()+31536000000),secure:!1,httpOnly:!1}),Y}}import nK from"sharp";import{Buffer as sK}from"buffer";class N8 extends x0{service;static _name="FileStorageServiceContainer";constructor(J){super();this.service=J}}class u4{static async put(J){return N8.use().service.driver.put(J)}static async metadata(J){let K=sK.from(await J.arrayBuffer());try{return await nK(K).metadata()}catch{return{}}}static async fetch(J){return N8.use().service.driver.fetch(J)}static list(J){return N8.use().service.driver.list(J)}static delete(){}}function p4(J){return Object.fromEntries(Object.entries(J).filter(([,K])=>{return K!==null&&K!==void 0}))}class n1 extends Error{constructor(){super("Adapter not found");this.name="AdapterNotFound"}}class t5{createSession(){throw new n1}deleteSession(){throw new n1}findSession(){throw new n1}findUserByEmailAddress(){throw new n1}updateSession(){throw new n1}createUser(){throw new n1}}class e5 extends W0{schema={email:{required:"Email is required",string:"Invalid email",email:"Invalid email"},password:{required:"Password is required"}}}class n4 extends W0{schema={name:{string:"Invalid name",required:"Name is required","min:2":"Name must be at least 3 characters"},email:{string:"Invalid email",required:"Email is required",email:"Invalid email"},password:{"min:8":"Password must be at least 9 characters"}}}class s4 extends W0{schema={email:{required:"Email is required",email:"Invalid email"}}}class a4 extends W0{schema={password:{required:"Password is required",password:"Invalid password"}}}class b0 extends i4{provider=j0.use()?.provider;async me(){let J=await k1.user();if(!J)throw new r4;return J}async verifyEmail(J=new W0){let K=await J.input(),Y=j0.use()?.provider,X=await Y.adapter.findUserByVerificationToken(K.get("token"));if(!X)return{email:null};if(await Y.adapter.verifyUser(X.email),X)return{email:X.email};return{email:null}}async signInWithMagicLink(J=new W0){let K=j0.use(),Y=K.provider,X=J.search.get("token"),Z=decodeURIComponent(J.search.get("email")).toLowerCase().trim(),Q=null;try{Q=await Y.adapter.findUserMagicLinkToken({email:Z,token:X})}catch(w){return console.log(w),{error:JSON.stringify(w)}}if(!Q)return{error:"Invalid token"};await Y.adapter.verifyUser(Z),await Y.adapter.deleteMagicLinkToken(Z);let W=await K.createOrUpdateSession({email:Z});return J.ctx().setCookie("access_token",W.token,{expires:W.expiresAt,secure:!0,httpOnly:!0}),await Y.onSignIn(W),{session:W}}async signInWithPinV2(J=new W0){let K=j0.use(),Y=K.provider,X=await J.input(),{email:Z,pin:Q}=X.toJSON(),W=Z.toLowerCase().trim();if(!await Y.adapter.findUserMagicLinkToken({email:W,pin:Q}))throw new a0({pin:["Invalid pin"]});await Y.adapter.deleteMagicLinkToken(W),await Y.adapter.verifyUser(W);let H=await K.createOrUpdateSessionV2({email:W});return J.ctx().setCookie("access_token",H.token,{expires:H.expiresAt,secure:!0,httpOnly:!0}),await Y.onSignIn(H),H}async signInWithPin(J=new W0){let K=j0.use(),Y=K.provider,X=await J.input(),{email:Z,pin:Q}=X.toJSON(),W=Z.toLowerCase().trim();if(!await Y.adapter.findUserMagicLinkToken({email:W,pin:Q}))throw new a0({pin:["Invalid pin"]});await Y.adapter.deleteMagicLinkToken(W),await Y.adapter.verifyUser(W);let H=await K.createOrUpdateSession({email:W});return J.ctx().setCookie("access_token",H.token,{expires:H.expiresAt,secure:!0,httpOnly:!0}),await Y.onSignIn(H),{session:H}}async signInV2(J=new e5){let K=await J.input(),{email:Y,password:X}=K.toJSON(),Z=Y.toLowerCase().trim(),Q=j0.use().provider,W=await Q.adapter.findUserByEmailAddress(Z,Q.verifyEmail);if(!W)throw new a0({invalid_credentials:["Invalid credentials"]});if(!await Q.verifyPassword(X,W.password))throw new a0({invalid_credentials:["Invalid credentials"]});let H=await j0.use().createOrUpdateSessionV2({email:W.email,id:W.id});J.ctx().setCookie("access_token",H.token,{expires:H.expiresAt,secure:!0,httpOnly:!0}),await Q.onSignIn(W);let{password:z,...U}=W;return U}async signIn(J=new e5){let K=await J.input(),{email:Y,password:X}=K.toJSON(),Z=Y.toLowerCase().trim(),Q=j0.use().provider,W=await Q.adapter.findUserByEmailAddress(Z,Q.verifyEmail);if(!W)throw new a0({invalid_credentials:["Invalid credentials"]});if(!await Q.verifyPassword(X,W.password))throw new a0({invalid_credentials:["Invalid credentials"]});let H=await j0.use().createOrUpdateSession({email:W.email,id:W.id});J.ctx().setCookie("access_token",H.token,{expires:H.expiresAt,secure:!0,httpOnly:!0}),await Q.onSignIn(W);let{password:z,...U}=W;return U}async signUp(){let J=j0.use().provider,K=new J.signUpRequest,Y=await K.input(),{email:X,password:Z,name:Q,invitationId:W,metadata:w={}}=Y.toJSON(),H=X.toLowerCase().trim();if(await J.adapter.findUserByEmailAddress(H,!1))throw new a0({email:["Email address already exists"]});let U=await J.hashPassword(Z),V=C0.use().detectLocale(K),$;if(W){if($=await J.adapter.findInvitation(W,H),$)await J.adapter.deleteInvitationById(W)}let B,q;if($)B=await J.adapter.createUser({email:H,name:Q,password:U,emailVerifiedAt:new Date,locale:V}),await J.adapter.createAccount({organizationId:$.organizationId,userId:B.id,organizationRole:$.role});else q=await J.generateEmailVerificationToken(H),B=await J.adapter.createUser({email:H,name:Q,password:U,verificationToken:q,locale:V});return await J.onSignUp(B,q),B}async signOut(J=new W0){let K=J.cookies.get("access_token"),Y=await k1.user(),X=j0.use().provider;return await X.adapter.deleteSession({token:K}),J.ctx().setCookie("access_token","",{expires:new Date(0),secure:!0,httpOnly:!0}),await X.onSignOut(Y),{}}async forgotPassword(J=new s4){let Y=(await J.input()).get("email").toLowerCase().trim(),X=j0.use().provider,Z=await X.adapter.findUserByEmailAddress(Y,X.verifyEmail);if(!Z)return{};let Q=await X.generateForgotPasswordToken(Z);return await X.adapter.createPasswordResetToken({user:Z,token:Q}),await X.onForgotPassword(Z,Q),{}}async resetPassword(J=new a4){let K=j0.use().provider,Y=await J.input(),{password:X,token:Z}=Y.toJSON(),Q=await K.adapter.findPasswordResetToken({token:Z});if(!Q)throw new a0({token:["Invalid token"]});if(O8.Instant.from(Q.createdAt.toISOString()).add({hours:24}).until(O8.Now.instant()).sign>=0)throw new a0({token:["Token expired"]});await K.adapter.deletePasswordResetToken({token:Z});let w=await K.adapter.findUserByEmailAddress(Q.user.email,K.verifyEmail);if(!w)throw new a0({email:["User not found"]});let H=await K.hashPassword(X);return await K.adapter.updateUserPassword({id:w.id,password:H}),await K.adapter.deleteAllUserSessions(w.id),await K.onResetPassword(w),{}}async changePassword(J=new W0){let K=j0.use().provider,Y=await k1.user(),X=await J.input(),{oldPassword:Z,newPassword:Q}=X.toJSON(),{password:W}=await K.adapter.findUserByEmailAddress(Y.email,K.verifyEmail);if(!await K.verifyPassword(Z,W))throw new a0({oldPassword:["Incorrect password"]});let H=await K.hashPassword(Q);return await K.adapter.updateUserPassword({id:Y.id,password:H}),await K.adapter.deleteAllUserSessions(Y.id),{}}async oauthRedirect(J=new W0){let{provider:K}=J.params,Y=j0.use().provider.oauthProviders[K];if(!Y)throw Error(`Invalid provider: ${K}`);return{destination:await Y.getRedirectUrl(J)}}async oauthCallback(J=new W0){let{provider:K}=J.params,Y=j0.use(),X=Y.provider,Z=X.oauthProviders[K],{email:Q,name:W,username:w,providerId:H}=await Z.onCallback(J);if(!w&&!Q)throw Error("Email or username is required");let z=Q??`${w}:${K}`,U=await X.adapter.findUserByEmailAddress(z,!1),V=C0.use().detectLocale(J),$="signin";if(!U)$="signup",U=await X.adapter.createUser({email:z,name:W,locale:V,emailVerifiedAt:new Date}),await X.adapter.createSocialAccount({provider:K,userId:U.id,email:z,username:w,providerId:H,expiresAt:new Date,accessToken:"",refreshToken:""});let B=await Y.createOrUpdateSession({email:U.email,id:U.id});if(J.ctx().setCookie("access_token",B.token,{secure:!0,httpOnly:!0,expires:B.expiresAt}),$==="signup"){let q=await X.generateMagicLinkToken(Q);await X.onSignUp(U,q)}else await X.onSignIn(U);return{session:B}}async createMagicLinkToken(J=new W0){let Y=(await J.input()).get("email").toLowerCase().trim(),X=j0.use(),Z=X.provider,{user:Q,pin:W,token:w}=await X.createMagicLinkToken(Y);if(Q)return await Z.onMagicLinkCreated(Q,{email:Y,pin:W,token:w}),{email:Y};return{email:null}}}class t4 extends J6{routes={"/:provider":this.redirect([b0,"oauthRedirect"]),"/:provider/callback":this.view("auth/OauthCallback",[b0,"oauthCallback"])}}class K6 extends J6{routes={"/sign-in/magic-link":this.view("auth/MagicLinkSignIn",[b0,"signInWithMagicLink"]),"/oauth":t4}}class Y6 extends q1{middlewares=["cache:private"];routes={"/sign-in":this.post(b0,"signIn"),"/sign-in-v2":this.post(b0,"signInV2"),"/sign-up":this.post(b0,"signUp"),"/sign-out":this.post(b0,"signOut"),"/forgot-password":this.post(b0,"forgotPassword"),"/reset-password":this.post(b0,"resetPassword"),"/change-password":this.post(b0,"changePassword"),"/verify-email":this.post(b0,"verifyEmail"),"/me":this.get(b0,"me").middleware(["auth"]),"/magic-link":this.post(b0,"createMagicLinkToken"),"/sign-in-with-pin":this.post(b0,"signInWithPin"),"/sign-in-with-pin-v2":this.post(b0,"signInWithPinV2")}}class aK extends o4{basePath="/auth";verifyEmail=!0;redirectPath="/dashboard";sessionExpiresInHours=24;sessionAbsoluteExpiresInHours=672;signUpRequest=n4;adapter=new t5;oauthProviders={};boot(){}async verifyPassword(J,K){return await Bun.password.verify(J,K)}async hashPassword(J){return await Bun.password.hash(J)}async generateForgotPasswordToken(J){let K=new Bun.CryptoHasher("sha256");return K.update(`${J.email}${Date.now()}`),K.digest("hex")}generateEmailVerificationToken(J){if(!this.verifyEmail)return"";let K=new Bun.CryptoHasher("sha256");return K.update(`${J}${Date.now()}`),K.digest("hex")}generateMagicLinkToken(J){let K=new Bun.CryptoHasher("sha256");return K.update(`${J}${Date.now()}`),K.digest("hex")}extendSession(J){return{}}onSignUp(J,K){}onSignIn(J){}onSignOut(J){}onForgotPassword(J,K){}onResetPassword(J){}onMagicLinkCreated(J,K){return}}class X6 extends q1{middlewares=["cache:private,0,no-store"];routes={"/set-locale/:locale":this.get(()=>{let J=new W0;return J.ctx().setCookie("i18n-locale",J.params.locale),{}}),"/translations/:locale/:scope*":this.get(async()=>{let J=new W0,K=`/${J.params.scope??""}`,X=J.params.locale??C0.use().detectLocale(J),Z=C0.use().getPageTranslations(X,K);return J.ctx().setCookie("i18n-locale",X,{expires:new Date(Date.now()+31536000000)}),{[X]:Z}})}}class Z6 extends q1{routes={"/resize":this.file(async()=>{let J=new W0,K=new URL(J.rawRequest.url),Y=K.searchParams.get("url"),X=Number(K.searchParams.get("w")),Z=Number(K.searchParams.get("h")),Q=K.searchParams.get("fit")??"cover",W=Number(K.searchParams.get("q"));if(!Y)return new Response(JSON.stringify({error:"url query parameter is required"}),{headers:{"Content-Type":"application/json"},status:404});let H=`${Y.startsWith("http")?"":`http://localhost:${process.env.PORT||5173}`}${Y}`,z=await fetch(H);if(!z.ok)return new Response(JSON.stringify({error:"Image not found",info:H}),{headers:{"Content-Type":"application/json"},status:404});let U=Buffer.from(await z.arrayBuffer()),V=await e4.use().service.driver.resize(U,{height:Z,width:X,fit:Q,quality:W});return z.headers.delete("Content-Type"),z.headers.delete("Content-Length"),new Response(V,{headers:{"Content-Type":"image/webp","Content-Length":`${V.byteLength}`,...z.headers.toJSON()}})})}}class e4 extends x0{service;static _name="ImageOptimizationServiceContainer";constructor(J){super();this.service=J}}import{mkdir as Q6,exists as W6,readdir as tK}from"fs/promises";class t0 extends x0{service;static _name="LoggingServiceContainer";writer;isReady=!1;logsDirPath=`${process.env.ROOT_DIR}/storage/logs`;flushTimeout;fileSize=0;writerSize=0;isCreatingFile=!1;currentLogFilePath;constructor(J){super();this.service=J;this.boot().then(()=>{this.isReady=!0})}async boot(){if(!process.env.ROOT_DIR)return;if(!await W6(`${process.env.ROOT_DIR}/storage`))await Q6(`${process.env.ROOT_DIR}/storage`);if(!await W6(this.logsDirPath))await Q6(this.logsDirPath);this.newLogFile()}async newLogFile(){if(!await W6(this.logsDirPath))await Q6(this.logsDirPath);if(this.isCreatingFile=!0,this.currentLogFilePath){this.writer.flush(),this.writer.end(),this.writer=null;let Y=new File([await Bun.file(this.currentLogFilePath).arrayBuffer()],this.currentLogFilePath.split("/").pop(),{type:"text/plain"});this.service.onLogFileClosed(Y),this.fileSize=0,this.writerSize=0}let K=(await tK(this.logsDirPath)).sort().reverse()[0];if(K){let Y=Bun.file(`${this.logsDirPath}/${K}`);if(Y.size<this.service.maxFileSize)this.currentLogFilePath=`${this.logsDirPath}/${K}`,this.writer=Y.writer(),this.writer.write(await Y.text()),this.writer.write(`
12
12
  `),this.writer.flush(),this.fileSize=Y.size}if(!this.writer){let Y=`${new Date(Date.now()).toISOString()}.log`.replaceAll(":","-");this.currentLogFilePath=`${this.logsDirPath}/${Y}`;let X=Bun.file(`${this.logsDirPath}/${Y}`);this.writer=X.writer(),this.fileSize=0,this.writerSize=0}this.isCreatingFile=!1}async log(J,K,Y={}){if(!this.isReady)await new Promise((w)=>{let H=setInterval(()=>{if(this.isReady)w({}),clearInterval(H)},100)});let X=q0.getStore(),Z={};if(X)Z={url:X.req.rawRequest.url,method:X.req.rawRequest.method,headers:X.req.rawRequest.headers,body:X.req.rawRequest.body};let Q={timestamp:new Date(Date.now()).toISOString(),env:"production",level:J,message:K,metadata:{...Z,...Y}},W="";try{W=JSON.stringify(Q)}catch(w){console.log("Error parsing log object",w)}this.writerSize+=W.length,this.fileSize+=W.length;try{this.writer.write(W),this.writer.write(`
13
13
  `),this.service.onLogCreated(Q),this.tryFlush()}catch(w){console.error("Error writing log",w)}}async tryFlush(){if(this.fileSize>this.service.maxFileSize){if(!this.isCreatingFile)await this.newLogFile()}if(this.writerSize>this.service.maxFileSize/2)await this.writer.flush(),this.writerSize=0,await this.newLogFile();else clearTimeout(this.flushTimeout),this.flushTimeout=setTimeout(async()=>{await this.writer.flush(),this.writerSize=0},100)}}class H6 extends q1{middlewares=["cache:private,0"];routes={"/live":this.get(async()=>{let J=Bun.file(t0.use().currentLogFilePath);return new Response(await J.text(),{headers:{"Content-Type":"text/plain"}})})}}function eK(J){let K=new Map;for(let Y of J)if(typeof Y==="string"){let[X,Z=""]=Y.split(":");if(X.startsWith("-")){if(K.has(X.replace("-","")))K.delete(X.replace("-",""))}else K.set(X,Z.split(",").filter(Boolean))}else K.set(Y,[]);return K}class j8 extends x0{service;static _name="MiddlewareServiceContainer";constructor(J){super();this.service=J}runMiddleware(J){let K=new W0;return Array.from(eK(J).entries()).map(([Y,X])=>{if(typeof Y==="string"){let Z=this.service.aliases[Y];if(Z){let Q=new Z(K);return()=>Q.run.call(Q,...X)}}else{if(J9(Y)){let Z=new Y(K);return Z.run.bind(Z)}return Y}}).filter(Boolean).reduce((Y,X)=>{return async()=>{return{...await Y(),...await X()}}},()=>Promise.resolve({}))()}}function JY(J){return"run"in J}function KY(J){return Object.hasOwn(J,"get")||Object.hasOwn(J,"post")||Object.hasOwn(J,"put")||Object.hasOwn(J,"delete")}function YY(J){return Object.hasOwn(J,"first")&&Object.hasOwn(J,"second")}function XY(J){if("__brand"in J)return J.__brand==="ApiRouter";return!1}function w6(J,K="",Y=[]){let X={};function Z(Q,W,w,H){let z=Q==="/"?"":Q,U=K==="/"?"":K,V=(`${U}${z}`===""?"/":`${U}${z}`).replaceAll("//","/");if(!X[V])X[V]={};X[V][W.toUpperCase()]={exec:w,middleware:[...Y,...H]},X[V].OPTIONS={exec:()=>{let B=new W0().ctx().headers;return new Response(null,{headers:B,status:204})},middleware:[]}}for(let[Q,W]of Object.entries(J)){if(JY(W)){let w=W,H=w.method,z=w.middlewares,U=w.run.bind(w);Z(Q,H,U,z)}if(KY(W))for(let[w,H]of Object.entries(W)){let z=H.middlewares,U=H.run.bind(H);Z(Q,w,U,z)}if(XY(W)){let w=new W,H=w6(w.routes,`${K}${Q}`,w.middlewares);for(let[z,U]of Object.entries(H))X[z.replaceAll("//","/")]=U}if(YY(W)){let{first:w,second:H}=W;for(let[z,U]of Object.entries(w)){let V=U.middlewares,$=U.run.bind(U),[B,...q]=Q.split("/").reverse();if(!B.startsWith(":"))throw Error("Resource route must end with a dynamic segment");Z(q.reverse().join("/"),z,$,V)}for(let[z,U]of Object.entries(H)){let V=U.middlewares,$=U.run.bind(U);Z(Q,z,$,V)}}}return Object.fromEntries(Object.entries(X).sort(([Q],[W])=>{let w=Q.split("/").length+Q.split(":").length,H=W.split("/").length+W.split(":").length;return w-H}))}var R9=e0(N9(),1),D9=e0(O9(),1),q6={};var qY=5;var j9=12,MY=13;var NY=16,OY=17;var jY=22;var L9=28;var F9=31;var LY=33,e8=34,FY=35,A6=36,G6=37,I9=38,EY=39,_Y=40,F8=41,RY=42,A=0,N=1,H0=2,T9=3,F=4,DY=[[F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,T9,F,F,F,F,F,F,F,F,F,F,F],[A,F,F,N,N,F,F,F,F,N,N,A,A,A,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A],[A,F,F,N,N,F,F,F,F,N,N,N,N,N,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A],[F,F,F,N,N,N,F,F,F,N,N,N,N,N,N,N,N,N,N,N,F,H0,F,N,N,N,N,N,N,N,N,N,N],[N,F,F,N,N,N,F,F,F,N,N,N,N,N,N,N,N,N,N,N,F,H0,F,N,N,N,N,N,N,N,N,N,N],[A,F,F,N,N,N,F,F,F,A,A,A,A,A,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A],[A,F,F,N,N,N,F,F,F,A,A,A,A,A,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A],[A,F,F,N,N,N,F,F,F,A,A,N,A,N,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A],[A,F,F,N,N,N,F,F,F,A,A,N,N,N,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A],[N,F,F,N,N,N,F,F,F,A,A,N,N,N,N,N,N,N,A,A,F,H0,F,N,N,N,N,N,A,N,N,N,A],[N,F,F,N,N,N,F,F,F,A,A,N,N,N,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A],[N,F,F,N,N,N,F,F,F,N,N,N,N,N,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A],[N,F,F,N,N,N,F,F,F,N,N,N,N,N,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A],[N,F,F,N,N,N,F,F,F,N,N,N,N,N,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A],[A,F,F,N,N,N,F,F,F,A,N,A,A,A,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A],[A,F,F,N,N,N,F,F,F,A,A,A,A,A,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A],[A,F,F,N,A,N,F,F,F,A,A,N,A,A,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A],[A,F,F,N,A,N,F,F,F,A,A,A,A,A,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A],[N,F,F,N,N,N,F,F,F,N,N,N,N,N,N,N,N,N,N,N,F,H0,F,N,N,N,N,N,N,N,N,N,A],[A,F,F,N,N,N,F,F,F,A,A,A,A,A,A,N,N,N,A,F,F,H0,F,A,A,A,A,A,A,A,A,N,A],[A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,F,A,A,A,A,A,A,A,A,A,A,A,A],[N,F,F,N,N,N,F,F,F,N,N,N,N,N,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A],[N,F,F,N,N,N,F,F,F,N,N,N,N,N,N,N,N,N,N,N,F,H0,F,N,N,N,N,N,N,N,N,N,N],[A,F,F,N,N,N,F,F,F,A,N,A,A,A,A,N,N,N,A,A,F,H0,F,A,A,A,N,N,A,A,A,N,A],[A,F,F,N,N,N,F,F,F,A,N,A,A,A,A,N,N,N,A,A,F,H0,F,A,A,A,A,N,A,A,A,N,A],[A,F,F,N,N,N,F,F,F,A,N,A,A,A,A,N,N,N,A,A,F,H0,F,N,N,N,N,A,A,A,A,N,A],[A,F,F,N,N,N,F,F,F,A,N,A,A,A,A,N,N,N,A,A,F,H0,F,A,A,A,N,N,A,A,A,N,A],[A,F,F,N,N,N,F,F,F,A,N,A,A,A,A,N,N,N,A,A,F,H0,F,A,A,A,A,N,A,A,A,N,A],[A,F,F,N,N,N,F,F,F,A,A,A,A,A,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,N,A,A,N,A],[A,F,F,N,N,N,F,F,F,A,N,A,A,A,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,N,N,A],[A,F,F,N,N,N,F,F,F,A,N,A,A,A,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A],[N,F,F,N,N,N,F,F,F,N,N,N,N,N,A,N,N,N,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A],[A,F,F,N,N,A,F,F,F,A,A,A,A,A,A,A,A,A,A,A,F,H0,F,A,A,A,A,A,A,A,A,N,A]],IY=D9.default.toByteArray("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"),TY=new R9.default(IY),E9=function(J){switch(J){case LY:return j9;case EY:case _Y:case RY:return j9;case FY:return qY;default:return J}},_9=function(J){switch(J){case G6:case I9:return e8;case F8:return jY;default:return J}};class J5{constructor(J,K=!1){this.position=J,this.required=K}}class C9{nextCodePoint(){let J=this.string.charCodeAt(this.pos++),K=this.string.charCodeAt(this.pos);if(55296<=J&&J<=56319&&56320<=K&&K<=57343)return this.pos++,(J-55296)*1024+(K-56320)+65536;return J}nextCharClass(){return E9(TY.get(this.nextCodePoint()))}getSimpleBreak(){switch(this.nextClass){case F8:return!1;case e8:case G6:case I9:return this.curClass=e8,!1;case A6:return this.curClass=A6,!1}return null}getPairTableBreak(J){let K=!1;switch(DY[this.curClass][this.nextClass]){case A:K=!0;break;case N:K=J===F8;break;case H0:if(K=J===F8,!K)return K=!1,K;break;case T9:if(J!==F8)return K;break;case F:break}if(this.LB8a)K=!1;if(this.LB21a&&(this.curClass===NY||this.curClass===OY))K=!1,this.LB21a=!1;else this.LB21a=this.curClass===MY;if(this.curClass===L9){if(this.LB30a++,this.LB30a==2&&this.nextClass===L9)K=!0,this.LB30a=0}else this.LB30a=0;return this.curClass=this.nextClass,K}nextBreak(){if(this.curClass==null){let J=this.nextCharClass();this.curClass=_9(J),this.nextClass=J,this.LB8a=J===F9,this.LB30a=0}while(this.pos<this.string.length){this.lastPos=this.pos;let J=this.nextClass;if(this.nextClass=this.nextCharClass(),this.curClass===e8||this.curClass===A6&&this.nextClass!==G6)return this.curClass=_9(E9(this.nextClass)),new J5(this.lastPos,!0);let K=this.getSimpleBreak();if(K===null)K=this.getPairTableBreak(J);if(this.LB8a=this.nextClass===F9,K)return new J5(this.lastPos)}if(this.lastPos<this.string.length)return this.lastPos=this.string.length,new J5(this.string.length);return null}constructor(J){this.string=J,this.pos=0,this.lastPos=0,this.curClass=null,this.nextClass=null,this.LB8a=!1,this.LB21a=!1,this.LB30a=0}}q6=C9;var B1=e0(W5(),1),IK=e0(H7(),1),TK=e0(z7(),1);var G7=e0(V7(),1),q7=e0(B7(),1),CZ=/^#([a-f0-9]{3,4}|[a-f0-9]{4}(?:[a-f0-9]{2}){1,2})\b$/,PZ=new RegExp(CZ,"i"),x6="-?\\d*(?:\\.\\d+)",$8=`(${x6}?)`,O1=`(${x6}?%)`,B8=`(${x6}?%?)`,SZ=`^
14
14
  hsla?\\(
@@ -76,4 +76,4 @@ if('system'===e||(!e&&'system'===defaultTheme)){
76
76
  }}catch(e){}}()
77
77
  `;async function NV(J,K,Y){let X=`${Y==="italic"?"italic,":""}wght@${Y==="italic"?"1,":""}${K}`,W=(await(await fetch(`https://fonts.googleapis.com/css2?family=${J}:${X}&display=swap`,{headers:{"User-Agent":"Mozilla/5.0 Firefox/1.0"}})).text()).match(/url\(([^)]+)\)/)?.[1];return await fetch(W).then((w)=>w.arrayBuffer())}class m4 extends x0{service;static _name="ViewRouterServiceContainer";flatViewRoutes={};routeManifest={};componentTree=[];flatComponentTree=[];root=null;constructor(J){super();this.service=J;let K={"/":J.rootRouter,"/auth":K6};this.flatViewRoutes=i5(K),this.routeManifest=o5(K),this.componentTree=r5(K),this.flatComponentTree=x4(this.componentTree),this.root=J.root}boot(){}async onRequestEnd(J){if(!J.cookies.has("session_id"))J.ctx().setCookie("session_id",Bun.randomUUIDv7(),{httpOnly:!0,secure:!0,sameSite:"Strict",expires:new Date(Date.now()+31536000000)});return await this.service.onRequestEnd(J)}async render(J){let{csrfTokenHMAC:K,currentPathName:Y,headers:X,i18n:Z,params:Q,pathname:W,prefetchedData:w,url:H,user:z,viewData:U,breadcrumbs:V,urlLocaleSegment:$,meta:B,isOgRequest:q,appId:G}=J,M=W.replace(`/${$}`,""),O={kind:"view",data:{meta:B,pageData:{[M]:U},__csrf:K.toString("base64"),prefetchedData:w,i18n:Z,auth:{user:z},routeManifest:this.routeManifest,breadcrumbs:V,router:{urlLocaleSegment:$,pathname:Y,params:Q,currentPath:W,searchParams:H.search,is404:!Y?!0:!1},appId:G,componentTree:[["404",[]],...this.componentTree]},head:{}},j=this.root,E=this.routeManifest[Y];return async(R)=>{let{bootstrapModules:_,loaders:L,getStyles:T,viewImportMap:D,cssManifest:P,ogMap:x}=R;if(q){let c=null,i=null;for(let C of E)if(typeof x[C]==="function")i=C,c=x[C];if(!c)return new Response("Not found",{status:404});let r=Object.values(O.data.pageData)[0];try{await h4(i8(c,r[i]),{onError:()=>{}})}catch(C){let{fonts:S,...I}=C.satoriOptions,f=await Promise.all(S.map((m)=>{return NV(m.name,m.weight,m.style).then((d)=>({...m,data:d}))})),l=new Headers(X);l.set("Content-Type","image/png");let u=await lK(C.jsx,{...I,fonts:f}),p=await GV(Buffer.from(u)).png({compressionLevel:0,effort:10}).toBuffer();return new Response(p,{headers:l})}return new Response("data")}O.data.cssManifest=P;try{let c=await h4(i8(qV,{children:[...await T(E),i8("script",{key:"theme-script",dangerouslySetInnerHTML:{__html:MV}}),i8(j,{data:O.data,viewImportMap:D,key:"root"})]}),{bootstrapScriptContent:`window.__GEMI_DATA__ = ${JSON.stringify(O.data)}; window.loaders=${L}`,bootstrapModules:_});return new Response(c,{status:!Y?404:200,headers:X})}catch(c){let i=await h4(i8("div"),{bootstrapScriptContent:`window.error= ${JSON.stringify(c.message)}; window.stack_trace=${JSON.stringify(c.stack)};window.__GEMI_DATA__ = ${JSON.stringify(O.data)}; window.loaders=${L}`,bootstrapModules:_});return new Response(i,{status:!Y?404:200,headers:X})}}}async handleViewRequest(J){let K=new URL(J.url),Y=K.pathname.endsWith(".json"),X=K.pathname.endsWith(".og"),Z=K.pathname.replace(".json","").replace(".og",""),[,Q,...W]=Z.split("/"),w=`/${W.join("/")}`,H=null,z=null,U=C0.use();if(!U.service.supportedLocales.includes(Q))w=Z;else H=Q,z=Q;if(U.isEnabled&&!X){let O=C0.use().detectLocale(new W0(J,{},"view",w));if(z===null&&O!==U.service.defaultLocale){let j=C0.use().detectLocale(new W0(J,{},"view",w)),E=K.pathname==="/"?"":K.pathname;return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${j}${E}`}})}}w=w.replace("//","/");let $=[],B=[],q=null,G={};try{for(let[O,j]of Object.entries(this.flatViewRoutes)){let E=new cK({pathname:O});if(E.test({pathname:w})){q=O,G=E.exec({pathname:w})?.pathname.groups,$=j.exec,B=j.middleware;break}}}catch(O){throw O}let M=new W0(J,G,"view",q);return await q0.run(M,async()=>{let O=null,j=q0.getStore();if(z){let R=z.replaceAll("/","");w8.setLocale(R)}else w8.setLocale();let E=j.req;try{await j8.use().runMiddleware(B);let R=C0.use(),_=R.isEnabled,L={};if(_){let u=null;if(z)u=z.replaceAll("/",""),j.setLocale(u);else u=R.detectLocale(new W0(J,E.params)),j.setLocale(u);let p=R.getPageTranslations(u,E.routePath);L={supportedLocales:R.service.supportedLocales,currentLocale:u,dictionary:{[u]:p},defaultLocale:R.service.defaultLocale}}let T=await Promise.all([...$.map((u)=>u(E)),...Array.from(j.prefetchPromiseQueue).map((u)=>u())]),D=j.cookies,P=j.headers,x=j.prefetchedResources;O={data:T,cookies:D,headers:P,user:j.user,prefetchedData:Object.fromEntries(x.entries()),currentPathName:E.routePath,params:E.params,urlLocaleSegment:H,meta:j.renderMeta(),appId:b4.use().service.id};let{params:c,currentPathName:i,user:r}=O,C={},S={};for(let u of T){let[p,m]=Object.entries(u)?.[0]??[];if(!p||!m)continue;S[`${p}:${i}`]=m.breadcrumb,C[p]=m}let I=this.routeManifest[i];if(I?.[I?.length??-1]==="FILE"){let u=C.FILE;return P.set("Content-Type",u.type||"application/octet-stream"),new Response(u.stream(),{headers:P})}if(Y)return P.set("Content-Type","application/json"),D.forEach((u)=>P.append("Set-Cookie",u.toString())),await this.service.onRequestEnd(E),new Response(JSON.stringify({meta:O.meta,data:{[w]:C},breadcrumbs:S,prefetchedData:O.prefetchedData,i18n:L,is404:!i,appId:O.appId}),{headers:P});P.set("Content-Type","text/html");for(let u of D)P.append("Set-Cookie",u.toString());let l=Bun.CSRF.generate(process.env.SECRET);P.append("Set-Cookie",`csrf_token=${l}; HttpOnly; Secure; SameSite=Strict; Expires=${new Date(Date.now()+86400000).toUTCString()}`);try{await this.onRequestEnd(E)}catch(u){n5.error(u?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(u)})}return await this.render({csrfTokenHMAC:Buffer.from(""),currentPathName:i,headers:P,i18n:L,params:c,pathname:K.pathname,prefetchedData:O.prefetchedData,url:K,user:r,viewData:C,breadcrumbs:S,urlLocaleSegment:H,meta:O.meta,appId:O.appId,isOgRequest:X})}catch(R){if(R.kind===o8)if(Y){let{status:_=400,data:L,directive:T,headers:D}=R.payload.api;return new Response(JSON.stringify({data:L,directive:T}),{headers:D,status:_})}else{let{status:_=400,error:L}=R.payload.view;return new Response(L?.message,{...R.payload.view,status:_})}throw this.service.onRequestFail(E,R),R}})}}class uK extends q1{routes={"/api-routes":this.get(()=>{let J=s5.use().flatRoutes,K=[];for(let[Y,X]of Object.entries(J))for(let[Z,Q]of Object.entries(X)){let{exec:W,middleware:w}=Q;K.push({path:Y,method:Z,middleware:w})}return K}),"/view-routes":this.get(()=>{let J=m4.use().flatViewRoutes,K=[];for(let[Y,{middleware:X,viewPath:Z}]of Object.entries(J))K.push({path:Y,method:"GET",viewPath:Z,middleware:X});return K})}}class s5 extends x0{service;static _name="ApiRouterServiceContainer";flatRoutes={};constructor(J){super();this.service=J;this.flatRoutes=w6({"/":this.service.rootRouter.bind(this.service),"/auth":Y6,"/__gemi__/services/i18n":X6,"/__gemi__/services/logs":H6,"/__gemi__/services/image":Z6,"/__gemi__/debug":uK})}getRouteHandlerAndParams(J){let Y=new URL(J.url).pathname.replace("/api",""),X={},Z;for(let[Q]of Object.entries(this.flatRoutes))try{let W=new URLPattern({pathname:Q});if(W.test({pathname:Y})){Z=Q,X=W.exec({pathname:Y})?.pathname.groups;break}}catch(W){console.error(W)}return{params:X,path:Z}}async runRouteMiddleware(J,K){let X=this.flatRoutes[J][K.rawRequest.method].middleware;try{await j8.use().runMiddleware(X)}catch(Z){if(Z.kind===o8){if(K.rawRequest.url.includes("/api")){let{status:Q=400,data:W,headers:w}=Z.payload.api;return new Response(JSON.stringify(W),{status:Q,headers:{"Content-Type":"application/json",...w}})}}else throw this.service.onRequestFail(K,Z),console.error(Z),Z}}async getRouteData(J){let K=this.flatRoutes[J],Y=q0.getStore(),X=K[Y.req.rawRequest.method].exec??(()=>Promise.resolve({})),Z={};try{Z=await X()}catch(Q){if(Q.kind===o8){let{status:W=400,data:w,headers:H}=Q.payload.api;return new Response(JSON.stringify(w),{status:W,headers:{"Content-Type":"application/json",...H}})}throw this.service.onRequestFail(Y.req,Q),console.error(Q),Q}return Z}async handleApiRequest(J){let{params:K,path:Y}=this.getRouteHandlerAndParams(J),X=this.flatRoutes[Y];if(!X||!X[J.method])return new Response(JSON.stringify({error:{message:"Not found"}}),{status:404});let Z=new W0(J,K,"api",Y);if(!J.url.includes("/__gemi__"))this.service.onRequestStart(Z);return await q0.run(Z,async()=>{let Q=q0.getStore(),W=C0.use();if(W.isEnabled){let U=W.detectLocale(Z);Q.setLocale(U)}Q.setRequest(Z);let w=await this.runRouteMiddleware(Y,Z);if(w instanceof Response)return w;let H=await this.getRouteData(Y);if(H instanceof Response)return H;let z=Q.headers;if(z.append("Content-Type","application/json"),Q.cookies.forEach((U)=>z.append("Set-Cookie",U.toString())),Q.destroy(),!J.url.includes("/__gemi__"))this.service.onRequestEnd(Z);return new Response(JSON.stringify(H),{headers:z})})}}class a5{static prepare(J,...K){let Y={params:{},search:{}},[X={}]=K,{search:Z,params:Q}={...Y,...X},W=q0.getStore();if(W.req.kind==="api")throw Error("Query.prefetch() cannot be called from an API request");let w=W.req.rawRequest,H=new URL(w.url),z=new URLSearchParams(p4(Z));z.delete("json"),z.sort();let U=[`${p1(J,Q)}`,z.toString()].filter((M)=>M.length>0).join("?"),V=`${H.origin}/${U}`,$=new Request(V,{headers:w.headers}),B=new W0($,Q),q=(M)=>{W.prefetchedResources.set(p1(J,Q),{[z.toString()]:M})},G=()=>{return q0.run(B,async()=>{let M=await s5.use().getRouteData(J);return q(M),M})};return{instant:G,prefetch:()=>{W.prefetchPromiseQueue.add(G)}}}static instant(J,...K){return a5.prepare(J,...K).instant()}static prefetch(J,...K){return a5.prepare(J,...K).prefetch()}}class pK{static channel(J,K){let Y=H8.use().service.channels[J];if(!Y)return console.error(`Channel ${J} not found`),{publish:()=>{}};let X=new Y;return{publish:(Z,Q=!1)=>{let W=p1(J,K);H8.use().publish(W,JSON.stringify({topic:W,data:X.publish(Z)}),Q)}}}}class iK{static absolute(J,...K){return`${process.env.HOST_NAME}${p1(String(J),K[0]??{})}`}static relative(J,...K){return p1(String(J),K[0]??{})}}class oK{name="Meta";static description(J){q0.getStore().metadata.description(J)}static title(J){q0.getStore().metadata.title(J)}static openGraph(J){q0.getStore().metadata.openGraph(J)}}var OV={set(J,K,Y){q0.getStore().setCookie(J,K,Y)},setIfAbsent(J,K,Y){if(q0.getStore().req.cookies.has(J))return!1;return q0.getStore().setCookie(J,K,Y),!0},delete(J){q0.getStore().deleteCookie(J)}};export{iK as Url,jV as Redirect,a5 as Query,oK as Meta,n5 as Log,w8 as I18n,u4 as FileStorage,OV as Cookie,pK as Broadcast,k1 as Auth};export{H8 as g,w8 as h,N8 as i,t0 as j,aK as k,e4 as l,j8 as m,b4 as n,m4 as o,s5 as p};
78
78
 
79
- //# debugId=DFC585D66F86409264756E2164756E21
79
+ //# debugId=BDB121D7B973867A64756E2164756E21