gemi 0.25.0 → 0.25.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,7 +8,7 @@ import{A as O0,p as u4,q as t4,r as q1,s as J6,t as a0,u as E0,v as W0,x as i4,y
8
8
  * Copyright(c) 2015 Andreas Lubbe
9
9
  * Copyright(c) 2015 Tiancheng "Timothy" Gu
10
10
  * MIT Licensed
11
- */var oZ=/["'&<>]/;q7.exports=rZ;function rZ(J){var K=""+J,Y=oZ.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 iK}from"async_hooks";class H8 extends l0{service;static _name="BroadcastingServiceContainer";publishCb;context=new iK;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=E0.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 O0.use().getSession(Y,X))?.user,J?.setUser(Z);if(Z)return Z;return null}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 O0.use().authenticate(J)}static async createMagicLink(J){return await O0.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=E0.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 E0.getStore().setCookie("i18n-locale",Y,{expires:new Date(Date.now()+31536000000),secure:!1,httpOnly:!1}),Y}}import oK from"sharp";import{Buffer as rK}from"buffer";class N8 extends l0{service;static _name="FileStorageServiceContainer";constructor(J){super();this.service=J}}class l4{static async put(J){return N8.use().service.driver.put(J)}static async metadata(J){let K=rK.from(await J.arrayBuffer());try{return await oK(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 c4(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 o4 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 r4 extends W0{schema={email:{required:"Email is required",email:"Invalid email"}}}class n4 extends W0{schema={password:{required:"Password is required",password:"Invalid password"}}}class x0 extends u4{provider=O0.use()?.provider;async me(){let J=await k1.user();if(!J)throw new i4;return J}async verifyEmail(J=new W0){let K=await J.input(),Y=O0.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=O0.use(),Y=K.provider,X=J.search.get("token"),Z=decodeURIComponent(J.search.get("email")),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=O0.use(),Y=K.provider,X=await J.input(),{email:Z,pin:Q}=X.toJSON();if(!await Y.adapter.findUserMagicLinkToken({email:Z,pin:Q}))throw new a0({pin:["Invalid pin"]});await Y.adapter.deleteMagicLinkToken(Z),await Y.adapter.verifyUser(Z);let w=await K.createOrUpdateSessionV2({email:Z});return J.ctx().setCookie("access_token",w.token,{expires:w.expiresAt,secure:!0,httpOnly:!0}),await Y.onSignIn(w),w}async signInWithPin(J=new W0){let K=O0.use(),Y=K.provider,X=await J.input(),{email:Z,pin:Q}=X.toJSON();if(!await Y.adapter.findUserMagicLinkToken({email:Z,pin:Q}))throw new a0({pin:["Invalid pin"]});await Y.adapter.deleteMagicLinkToken(Z),await Y.adapter.verifyUser(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 signInV2(J=new e5){let K=await J.input(),{email:Y,password:X}=K.toJSON(),Z=O0.use().provider,Q=await Z.adapter.findUserByEmailAddress(Y,Z.verifyEmail);if(!Q)throw new a0({invalid_credentials:["Invalid credentials"]});if(!await Z.verifyPassword(X,Q.password))throw new a0({invalid_credentials:["Invalid credentials"]});let w=await O0.use().createOrUpdateSessionV2({email:Q.email,id:Q.id});J.ctx().setCookie("access_token",w.token,{expires:w.expiresAt,secure:!0,httpOnly:!0}),await Z.onSignIn(Q);let{password:H,...z}=Q;return z}async signIn(J=new e5){let K=await J.input(),{email:Y,password:X}=K.toJSON(),Z=O0.use().provider,Q=await Z.adapter.findUserByEmailAddress(Y,Z.verifyEmail);if(!Q)throw new a0({invalid_credentials:["Invalid credentials"]});if(!await Z.verifyPassword(X,Q.password))throw new a0({invalid_credentials:["Invalid credentials"]});let w=await O0.use().createOrUpdateSession({email:Q.email,id:Q.id});J.ctx().setCookie("access_token",w.token,{expires:w.expiresAt,secure:!0,httpOnly:!0}),await Z.onSignIn(Q);let{password:H,...z}=Q;return z}async signUp(){let J=O0.use().provider,K=new J.signUpRequest,Y=await K.input(),{email:X,password:Z,name:Q,invitationId:W}=Y.toJSON();if(await J.adapter.findUserByEmailAddress(X,!1))throw new a0({email:["Email address already exists"]});let H=await J.hashPassword(Z),z=C0.use().detectLocale(K),U;if(W){if(U=await J.adapter.findInvitation(W,X),U)await J.adapter.deleteInvitationById(W)}let V,$;if(U)V=await J.adapter.createUser({email:X,name:Q,password:H,emailVerifiedAt:new Date,locale:z}),await J.adapter.createAccount({organizationId:U.organizationId,userId:V.id,organizationRole:U.role});else $=await J.generateEmailVerificationToken(X),V=await J.adapter.createUser({email:X,name:Q,password:H,verificationToken:$,locale:z});return await J.onSignUp(V,$),V}async signOut(J=new W0){let K=J.cookies.get("access_token"),Y=await k1.user(),X=O0.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 r4){let K=await J.input(),{email:Y}=K.toJSON(),X=O0.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 n4){let K=O0.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=O0.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=O0.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=O0.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);if(!U)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 $=await Y.createOrUpdateSession({email:U.email,id:U.id});return J.ctx().setCookie("access_token",$.token,{secure:!0,httpOnly:!0,expires:$.expiresAt}),await X.onSignIn(U),{destination:X.redirectPath}}async createMagicLinkToken(J=new W0){let K=await J.input(),{email:Y}=K.toJSON(),X=O0.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 s4 extends J6{routes={"/:provider":this.redirect([x0,"oauthRedirect"]),"/:provider/callback":this.redirect([x0,"oauthCallback"])}}class K6 extends J6{routes={"/sign-in/magic-link":this.view("auth/MagicLinkSignIn",[x0,"signInWithMagicLink"]),"/oauth":s4}}class Y6 extends q1{middlewares=["cache:private"];routes={"/sign-in":this.post(x0,"signIn"),"/sign-in-v2":this.post(x0,"signInV2"),"/sign-up":this.post(x0,"signUp"),"/sign-out":this.post(x0,"signOut"),"/forgot-password":this.post(x0,"forgotPassword"),"/reset-password":this.post(x0,"resetPassword"),"/change-password":this.post(x0,"changePassword"),"/verify-email":this.post(x0,"verifyEmail"),"/me":this.get(x0,"me").middleware(["auth"]),"/magic-link":this.post(x0,"createMagicLinkToken"),"/sign-in-with-pin":this.post(x0,"signInWithPin"),"/sign-in-with-pin-v2":this.post(x0,"signInWithPinV2")}}class nK extends p4{basePath="/auth";verifyEmail=!0;redirectPath="/dashboard";sessionExpiresInHours=24;sessionAbsoluteExpiresInHours=672;signUpRequest=o4;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 a4.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 a4 extends l0{service;static _name="ImageOptimizationServiceContainer";constructor(J){super();this.service=J}}import{mkdir as Q6,exists as W6,readdir as sK}from"fs/promises";class t0 extends l0{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 sK(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 oZ=/["'&<>]/;q7.exports=rZ;function rZ(J){var K=""+J,Y=oZ.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 iK}from"async_hooks";class H8 extends l0{service;static _name="BroadcastingServiceContainer";publishCb;context=new iK;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=E0.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 O0.use().getSession(Y,X))?.user,J?.setUser(Z);if(Z)return Z;return null}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 O0.use().authenticate(J)}static async createMagicLink(J){return await O0.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=E0.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 E0.getStore().setCookie("i18n-locale",Y,{expires:new Date(Date.now()+31536000000),secure:!1,httpOnly:!1}),Y}}import oK from"sharp";import{Buffer as rK}from"buffer";class N8 extends l0{service;static _name="FileStorageServiceContainer";constructor(J){super();this.service=J}}class l4{static async put(J){return N8.use().service.driver.put(J)}static async metadata(J){let K=rK.from(await J.arrayBuffer());try{return await oK(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 c4(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 o4 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 r4 extends W0{schema={email:{required:"Email is required",email:"Invalid email"}}}class n4 extends W0{schema={password:{required:"Password is required",password:"Invalid password"}}}class x0 extends u4{provider=O0.use()?.provider;async me(){let J=await k1.user();if(!J)throw new i4;return J}async verifyEmail(J=new W0){let K=await J.input(),Y=O0.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=O0.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=O0.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=O0.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=O0.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 O0.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=O0.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 O0.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=O0.use().provider,K=new J.signUpRequest,Y=await K.input(),{email:X,password:Z,name:Q,invitationId:W}=Y.toJSON(),w=X.toLowerCase().trim();if(await J.adapter.findUserByEmailAddress(w,!1))throw new a0({email:["Email address already exists"]});let z=await J.hashPassword(Z),U=C0.use().detectLocale(K),V;if(W){if(V=await J.adapter.findInvitation(W,w),V)await J.adapter.deleteInvitationById(W)}let $,B;if(V)$=await J.adapter.createUser({email:w,name:Q,password:z,emailVerifiedAt:new Date,locale:U}),await J.adapter.createAccount({organizationId:V.organizationId,userId:$.id,organizationRole:V.role});else B=await J.generateEmailVerificationToken(w),$=await J.adapter.createUser({email:w,name:Q,password:z,verificationToken:B,locale:U});return await J.onSignUp($,B),$}async signOut(J=new W0){let K=J.cookies.get("access_token"),Y=await k1.user(),X=O0.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 r4){let Y=(await J.input()).get("email").toLowerCase().trim(),X=O0.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 n4){let K=O0.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=O0.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=O0.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=O0.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);if(!U)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 $=await Y.createOrUpdateSession({email:U.email,id:U.id});return J.ctx().setCookie("access_token",$.token,{secure:!0,httpOnly:!0,expires:$.expiresAt}),await X.onSignIn(U),{destination:X.redirectPath}}async createMagicLinkToken(J=new W0){let Y=(await J.input()).get("email").toLowerCase().trim(),X=O0.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 s4 extends J6{routes={"/:provider":this.redirect([x0,"oauthRedirect"]),"/:provider/callback":this.redirect([x0,"oauthCallback"])}}class K6 extends J6{routes={"/sign-in/magic-link":this.view("auth/MagicLinkSignIn",[x0,"signInWithMagicLink"]),"/oauth":s4}}class Y6 extends q1{middlewares=["cache:private"];routes={"/sign-in":this.post(x0,"signIn"),"/sign-in-v2":this.post(x0,"signInV2"),"/sign-up":this.post(x0,"signUp"),"/sign-out":this.post(x0,"signOut"),"/forgot-password":this.post(x0,"forgotPassword"),"/reset-password":this.post(x0,"resetPassword"),"/change-password":this.post(x0,"changePassword"),"/verify-email":this.post(x0,"verifyEmail"),"/me":this.get(x0,"me").middleware(["auth"]),"/magic-link":this.post(x0,"createMagicLinkToken"),"/sign-in-with-pin":this.post(x0,"signInWithPin"),"/sign-in-with-pin-v2":this.post(x0,"signInWithPinV2")}}class nK extends p4{basePath="/auth";verifyEmail=!0;redirectPath="/dashboard";sessionExpiresInHours=24;sessionAbsoluteExpiresInHours=672;signUpRequest=o4;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 a4.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 a4 extends l0{service;static _name="ImageOptimizationServiceContainer";constructor(J){super();this.service=J}}import{mkdir as Q6,exists as W6,readdir as sK}from"fs/promises";class t0 extends l0{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 sK(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=E0.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 aK(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 l0{service;static _name="MiddlewareServiceContainer";constructor(J){super();this.service=J}runMiddleware(J){let K=new W0;return Array.from(aK(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(t4(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 tK(J){return"run"in J}function eK(J){return Object.hasOwn(J,"get")||Object.hasOwn(J,"post")||Object.hasOwn(J,"put")||Object.hasOwn(J,"delete")}function JY(J){return Object.hasOwn(J,"first")&&Object.hasOwn(J,"second")}function KY(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(tK(W)){let w=W,H=w.method,z=w.middlewares,U=w.run.bind(w);Z(Q,H,U,z)}if(eK(W))for(let[w,H]of Object.entries(W)){let z=H.middlewares,U=H.run.bind(H);Z(Q,w,U,z)}if(KY(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(JY(W)){let{first:w,second:H}=W;for(let[z,U]of Object.entries(w)){let V=U.middlewares,$=U.run.bind(U),[B,...M]=Q.split("/").reverse();if(!B.startsWith(":"))throw Error("Resource route must end with a dynamic segment");Z(M.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 E9=e0(q9(),1),_9=e0(M9(),1),q6={};var AY=5;var N9=12,GY=13;var qY=16,MY=17;var NY=22;var O9=28;var j9=31;var OY=33,e8=34,jY=35,A6=36,G6=37,R9=38,LY=39,FY=40,F8=41,EY=42,A=0,N=1,H0=2,D9=3,F=4,_Y=[[F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,D9,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]],RY=_9.default.toByteArray("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"),DY=new E9.default(RY),L9=function(J){switch(J){case OY:return N9;case LY:case FY:case EY:return N9;case jY:return AY;default:return J}},F9=function(J){switch(J){case G6:case R9:return e8;case F8:return NY;default:return J}};class J5{constructor(J,K=!1){this.position=J,this.required=K}}class I9{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 L9(DY.get(this.nextCodePoint()))}getSimpleBreak(){switch(this.nextClass){case F8:return!1;case e8:case G6:case R9:return this.curClass=e8,!1;case A6:return this.curClass=A6,!1}return null}getPairTableBreak(J){let K=!1;switch(_Y[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 D9:if(J!==F8)return K;break;case F:break}if(this.LB8a)K=!1;if(this.LB21a&&(this.curClass===qY||this.curClass===MY))K=!1,this.LB21a=!1;else this.LB21a=this.curClass===GY;if(this.curClass===O9){if(this.LB30a++,this.LB30a==2&&this.nextClass===O9)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=F9(J),this.nextClass=J,this.LB8a=J===j9,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=F9(L9(this.nextClass)),new J5(this.lastPos,!0);let K=this.getSimpleBreak();if(K===null)K=this.getPairTableBreak(J);if(this.LB8a=this.nextClass===j9,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=I9;var B1=e0(W5(),1),RK=e0(Q7(),1),DK=e0(H7(),1);var B7=e0(z7(),1),A7=e0(V7(),1),IZ=/^#([a-f0-9]{3,4}|[a-f0-9]{4}(?:[a-f0-9]{2}){1,2})\b$/,TZ=new RegExp(IZ,"i"),x6="-?\\d*(?:\\.\\d+)",$8=`(${x6}?)`,O1=`(${x6}?%)`,B8=`(${x6}?%?)`,CZ=`^
14
14
  hsla?\\(
@@ -76,4 +76,4 @@ if('system'===e||(!e&&'system'===defaultTheme)){
76
76
  }}catch(e){}}()
77
77
  `;async function qV(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 h4 extends l0{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:M}=J,G=W.replace(`/${$}`,""),q={kind:"view",data:{meta:B,pageData:{[G]: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},componentTree:[["404",[]],...this.componentTree]},head:{}},O=this.root,j=this.routeManifest[Y];return async(E)=>{let{bootstrapModules:D,loaders:_,getStyles:L,viewImportMap:T,cssManifest:R,ogMap:P}=E;if(M){let g=null,c=null;for(let u of j)if(typeof P[u]==="function")c=u,g=P[u];if(!g)return new Response("Not found",{status:404});let n=Object.values(q.data.pageData)[0];try{await b4(i8(g,n[c]),{onError:()=>{}})}catch(u){let{fonts:C,...v}=u.satoriOptions,I=await Promise.all(C.map((i)=>{return qV(i.name,i.weight,i.style).then((m)=>({...i,data:m}))})),f=new Headers(X);f.set("Content-Type","image/png");let l=await fK(u.jsx,{...v,fonts:I}),t=await BV(Buffer.from(l)).png({compressionLevel:0,effort:10}).toBuffer();return new Response(t,{headers:f})}return new Response("data")}q.data.cssManifest=R;try{let g=await b4(i8(AV,{children:[...await L(j),i8("script",{key:"theme-script",dangerouslySetInnerHTML:{__html:GV}}),i8(O,{data:q.data,viewImportMap:T,key:"root"})]}),{bootstrapScriptContent:`window.__GEMI_DATA__ = ${JSON.stringify(q.data)}; window.loaders=${_}`,bootstrapModules:D});return new Response(g,{status:!Y?404:200,headers:X})}catch(g){let c=await b4(i8("div"),{bootstrapScriptContent:`window.error= ${JSON.stringify(g.message)}; window.stack_trace=${JSON.stringify(g.stack)};window.__GEMI_DATA__ = ${JSON.stringify(q.data)}; window.loaders=${_}`,bootstrapModules:D});return new Response(c,{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 q=C0.use().detectLocale(new W0(J,{},"view",w));if(z===null&&q!==U.service.defaultLocale){let O=C0.use().detectLocale(new W0(J,{},"view",w)),j=K.pathname==="/"?"":K.pathname;return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${O}${j}`}})}}w=w.replace("//","/");let V=[],$=[],B=null,M={};try{for(let[q,O]of Object.entries(this.flatViewRoutes)){let j=new dK({pathname:q});if(j.test({pathname:w})){B=q,M=j.exec({pathname:w})?.pathname.groups,V=O.exec,$=O.middleware;break}}}catch(q){throw q}let G=new W0(J,M,"view",B);return await E0.run(G,async()=>{let q=null,O=E0.getStore();if(z){let E=z.replaceAll("/","");w8.setLocale(E)}else w8.setLocale();let j=O.req;try{await j8.use().runMiddleware($);let E=C0.use(),D=E.isEnabled,_={};if(D){let I=null;if(z)I=z.replaceAll("/",""),O.setLocale(I);else I=E.detectLocale(new W0(J,j.params)),O.setLocale(I);let f=E.getPageTranslations(I,j.routePath);_={supportedLocales:E.service.supportedLocales,currentLocale:I,dictionary:{[I]:f},defaultLocale:E.service.defaultLocale}}let L=await Promise.all([...V.map((I)=>I(j)),...Array.from(O.prefetchPromiseQueue).map((I)=>I())]),T=O.cookies,R=O.headers,P=O.prefetchedResources;q={data:L,cookies:T,headers:R,user:O.user,prefetchedData:Object.fromEntries(P.entries()),currentPathName:j.routePath,params:j.params,urlLocaleSegment:H,meta:O.renderMeta()};let{params:g,currentPathName:c,user:n}=q,u={},C={};for(let I of L){let[f,l]=Object.entries(I)?.[0]??[];if(!f||!l)continue;C[`${f}:${c}`]=l.breadcrumb,u[f]=l}if(Y)return R.set("Content-Type","application/json"),T.forEach((I)=>R.append("Set-Cookie",I.toString())),await this.service.onRequestEnd(j),new Response(JSON.stringify({meta:q.meta,data:{[w]:u},breadcrumbs:C,prefetchedData:q.prefetchedData,i18n:_,is404:!c}),{headers:R});R.set("Content-Type","text/html");for(let I of T)R.append("Set-Cookie",I.toString());let v=Bun.CSRF.generate(process.env.SECRET);R.append("Set-Cookie",`csrf_token=${v}; HttpOnly; Secure; SameSite=Strict; Expires=${new Date(Date.now()+86400000).toUTCString()}`);try{await this.onRequestEnd(j)}catch(I){n5.error(I?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(I)})}return await this.render({csrfTokenHMAC:Buffer.from(""),currentPathName:c,headers:R,i18n:_,params:g,pathname:K.pathname,prefetchedData:q.prefetchedData,url:K,user:n,viewData:u,breadcrumbs:C,urlLocaleSegment:H,meta:q.meta,isOgRequest:X})}catch(E){if(E.kind===o8)if(Y){let{status:D=400,data:_,directive:L,headers:T}=E.payload.api;return new Response(JSON.stringify({data:_,directive:L}),{headers:T,status:D})}else{let{status:D=400,error:_}=E.payload.view;return new Response(_?.message,{...E.payload.view,status:D})}else throw this.service.onRequestFail(j,E),E}})}}class lK 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=h4.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 l0{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":lK})}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=E0.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 E0.run(Z,async()=>{let Q=E0.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=E0.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(c4(Z));z.delete("json"),z.sort();let U=[`${p1(J,Q)}`,z.toString()].filter((q)=>q.length>0).join("?"),V=`${H.origin}/${U}`,$=new Request(V,{headers:w.headers}),B=new W0($,Q),M=(q)=>{W.prefetchedResources.set(p1(J,Q),{[z.toString()]:q})},G=()=>{return E0.run(B,async()=>{let q=await s5.use().getRouteData(J);return M(q),q})};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 cK{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 uK{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 pK{name="Meta";static description(J){E0.getStore().metadata.description(J)}static title(J){E0.getStore().metadata.title(J)}static openGraph(J){E0.getStore().metadata.openGraph(J)}}export{uK as Url,MV as Redirect,a5 as Query,pK as Meta,n5 as Log,w8 as I18n,l4 as FileStorage,cK as Broadcast,k1 as Auth};export{H8 as g,w8 as h,N8 as i,t0 as j,nK as k,a4 as l,j8 as m,h4 as n,s5 as o};
78
78
 
79
- //# debugId=9FF368E876C3C1B464756E2164756E21
79
+ //# debugId=EDC0972998E646A864756E2164756E21